| provider_id | string (UUID) | ✅ Yes | Unique; default gen_random_uuid() | — | Public immutable identifier for the provider. Generated server-side on creation. |
| name | string | ✅ Yes | NOT NULL | — | Human-readable display name of the provider (e.g. ‘Qonto’, ‘Stripe’). |
| slug | string | ✅ Yes | Unique; indexed | — | URL-safe identifier used as the stable key for provider lookups and MCP routing. Unique across all providers. |
| blueprint_json | json (nullable) | ⚪ No | Nullable | — | Live blueprint payload — the executable flow JSON consumed by the Well browser extension. Populated by ContributionService.publishBlueprint or the one-shot backfill script. Null when no blueprint has been contributed. |
| url | string (varchar 255) | ✅ Yes | Max length 255 | — | Canonical homepage or login URL for the provider. Used as the entry point for Vision Agent navigation. |
| countries | string[] (array, nullable) | ⚪ No | Nullable; stored as Postgres array | — | ISO-3166-1 alpha-2 country codes indicating geographic availability of the provider. Null means globally available or availability unknown. |
| category | 🔒 system — enum (ProviderCategoryEnum, native type provider_category_enum) | ✅ Yes | Default: ‘General’; NOT NULL; native Postgres enum | Finance | Accounting | Productivity | CRM & Marketing | Dev & Infra | Telecom | Travel & Logistics | E-commerce & Retail | Media & Subscriptions | General | Thematic grouping shown in the connector onboarding UI. Stored as the enum VALUE string (e.g. ‘Finance’, not ‘FINANCE’). Defaults to ‘General’. |
| searchable_terms | string[] (array, nullable) | ⚪ No | Nullable; stored as Postgres array | — | Additional keywords indexed for fuzzy search in the provider catalog. Supplements the name and slug for discovery. |
| popularity_score | integer (nullable) | ⚪ No | Nullable. Referenced by composite partial index idx_providers_active_skill_planner for ordered planner reads. | — | Relative popularity rank used to sort providers in the catalog and prioritize the Vision Agent planner’s skill selection. Higher is more popular. Managed by the platform scoring pipeline. |
| skill | text (nullable) | ⚪ No | Nullable. Added by Migration20260520161351. | — | Full SKILL.md content consumed by the Vision Agent at runtime — YAML frontmatter followed by markdown step body. Null when no skill exists; Vision Agent falls back to pure-vision mode. Written by the Vision Agent skill pipeline (Autobrowse or human contribution). |
| skill_metadata | jsonb (nullable) | ⚪ No | Nullable. Shape: ProviderSkillMetadata (name, description, version, source, confidence_score, last_success_at?, last_run_at?, triggers?, successful_uses?, total_uses?, pending_revision?). Added by Migration20260520161351. | — | Parsed SKILL.md frontmatter augmented with runtime execution statistics. Updated atomically by the Vision Agent runner after every run. Contains the optional pending_revision sub-object when a re-synthesized skill is awaiting human review. |
| skill_status | 🔒 system — enum (ProviderSkillStatusEnum, native type provider_skill_status_enum) | ✅ Yes | Default: ‘none’; NOT NULL; native Postgres enum. Covered by composite partial index idx_providers_active_skill_planner (WHERE deleted_at IS NULL AND skill_status <> ‘none’). Added by Migration20260520161351. | none | draft | yellow | green | drifting | broken | Lifecycle status of the Vision Agent skill. Transitions: none→draft (Autobrowse generate), draft→yellow (successfulUses ≥ 2 AND EWMA ≥ 0.7), yellow→green (EWMA ≥ 0.85), green→drifting (EWMA < 0.7), drifting→broken (score < 0.3), drifting→green (regen). Broken→* requires human or Autobrowse regen. |
| skill_version | integer | ✅ Yes | Default: 0; NOT NULL. Added by Migration20260520161351. | — | Monotonic version counter incremented on every skill regeneration. Used by the pending_revision mechanism to compute the target version stamp at synthesis time. |
| created_at | 🔒 system — timestamptz | ✅ Yes | Default: now(); NOT NULL | — | Timestamp of record creation. Set by the database default on insert; never updated. |
| updated_at | 🔒 system — timestamptz | ✅ Yes | Default: now(); onUpdate hook sets to current timestamp | — | Timestamp of last modification. Automatically maintained by MikroORM onUpdate hook on every entity flush. |
| deleted_at | 🔒 system — timestamptz (nullable) | ⚪ No | Nullable; null = active record | — | Soft-delete timestamp. Non-null means the provider has been logically deleted and is excluded from the active planner index (idx_providers_active_skill_planner WHERE deleted_at IS NULL). |