Files
openwork/ee/packages/den-db/drizzle/0010_plugin_arch.sql
Source Open 2c4bd553cb Draft plugin architecture and connector docs (#1474)
* docs: outline plugin architecture and connector design

* feat(den-api): add plugin architecture admin and webhook foundation

* refactor(den-api): rename plugin routes and split github connector env

* fix(den-api): scope plugin connector records by organization

---------

Co-authored-by: src-opn <src-opn@users.noreply.github.com>
2026-04-17 16:10:23 -07:00

285 lines
14 KiB
SQL

CREATE TABLE IF NOT EXISTS `config_object` (
`id` varchar(64) NOT NULL,
`organization_id` varchar(64) NOT NULL,
`object_type` enum('skill','agent','command','tool','mcp','hook','context','custom') NOT NULL,
`source_mode` enum('cloud','import','connector') NOT NULL,
`title` varchar(255) NOT NULL,
`description` text,
`search_text` text,
`current_file_name` varchar(255),
`current_file_extension` varchar(64),
`current_relative_path` varchar(2048),
`status` enum('active','inactive','deleted','archived','ingestion_error') NOT NULL DEFAULT 'active',
`created_by_org_membership_id` varchar(64) NOT NULL,
`connector_instance_id` varchar(64),
`created_at` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
`updated_at` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
`deleted_at` timestamp(3) NULL,
CONSTRAINT `config_object_id` PRIMARY KEY(`id`),
KEY `config_object_organization_id` (`organization_id`),
KEY `config_object_type` (`object_type`),
KEY `config_object_source_mode` (`source_mode`),
KEY `config_object_status` (`status`),
KEY `config_object_created_by_org_membership_id` (`created_by_org_membership_id`),
KEY `config_object_connector_instance_id` (`connector_instance_id`),
KEY `config_object_current_relative_path` (`current_relative_path`)
);
CREATE TABLE IF NOT EXISTS `config_object_version` (
`id` varchar(64) NOT NULL,
`config_object_id` varchar(64) NOT NULL,
`normalized_payload_json` text,
`raw_source_text` text,
`schema_version` varchar(100),
`created_via` enum('cloud','import','connector','system') NOT NULL,
`created_by_org_membership_id` varchar(64),
`connector_sync_event_id` varchar(64),
`source_revision_ref` varchar(255),
`is_deleted_version` boolean NOT NULL DEFAULT false,
`created_at` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
CONSTRAINT `config_object_version_id` PRIMARY KEY(`id`),
KEY `config_object_version_config_object_id` (`config_object_id`),
KEY `config_object_version_created_by_org_membership_id` (`created_by_org_membership_id`),
KEY `config_object_version_connector_sync_event_id` (`connector_sync_event_id`),
KEY `config_object_version_source_revision_ref` (`source_revision_ref`),
KEY `config_object_version_lookup_latest` (`config_object_id`, `created_at`, `id`)
);
CREATE TABLE IF NOT EXISTS `plugin` (
`id` varchar(64) NOT NULL,
`organization_id` varchar(64) NOT NULL,
`name` varchar(255) NOT NULL,
`description` text,
`status` enum('active','inactive','deleted','archived') NOT NULL DEFAULT 'active',
`created_by_org_membership_id` varchar(64) NOT NULL,
`created_at` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
`updated_at` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
`deleted_at` timestamp(3) NULL,
CONSTRAINT `plugin_id` PRIMARY KEY(`id`),
KEY `plugin_organization_id` (`organization_id`),
KEY `plugin_created_by_org_membership_id` (`created_by_org_membership_id`),
KEY `plugin_status` (`status`),
KEY `plugin_name` (`name`)
);
CREATE TABLE IF NOT EXISTS `plugin_config_object` (
`id` varchar(64) NOT NULL,
`plugin_id` varchar(64) NOT NULL,
`config_object_id` varchar(64) NOT NULL,
`membership_source` enum('manual','connector','api','system') NOT NULL DEFAULT 'manual',
`connector_mapping_id` varchar(64),
`created_by_org_membership_id` varchar(64),
`created_at` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
`removed_at` timestamp(3) NULL,
CONSTRAINT `plugin_config_object_id` PRIMARY KEY(`id`),
CONSTRAINT `plugin_config_object_plugin_config_object` UNIQUE(`plugin_id`, `config_object_id`),
KEY `plugin_config_object_plugin_id` (`plugin_id`),
KEY `plugin_config_object_config_object_id` (`config_object_id`),
KEY `plugin_config_object_connector_mapping_id` (`connector_mapping_id`)
);
CREATE TABLE IF NOT EXISTS `config_object_access_grant` (
`id` varchar(64) NOT NULL,
`config_object_id` varchar(64) NOT NULL,
`org_membership_id` varchar(64),
`team_id` varchar(64),
`org_wide` boolean NOT NULL DEFAULT false,
`role` enum('viewer','editor','manager') NOT NULL,
`created_by_org_membership_id` varchar(64) NOT NULL,
`created_at` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
`removed_at` timestamp(3) NULL,
CONSTRAINT `config_object_access_grant_id` PRIMARY KEY(`id`),
CONSTRAINT `config_object_access_grant_object_org_membership` UNIQUE(`config_object_id`, `org_membership_id`),
CONSTRAINT `config_object_access_grant_object_team` UNIQUE(`config_object_id`, `team_id`),
KEY `config_object_access_grant_config_object_id` (`config_object_id`),
KEY `config_object_access_grant_org_membership_id` (`org_membership_id`),
KEY `config_object_access_grant_team_id` (`team_id`),
KEY `config_object_access_grant_org_wide` (`org_wide`)
);
CREATE TABLE IF NOT EXISTS `plugin_access_grant` (
`id` varchar(64) NOT NULL,
`plugin_id` varchar(64) NOT NULL,
`org_membership_id` varchar(64),
`team_id` varchar(64),
`org_wide` boolean NOT NULL DEFAULT false,
`role` enum('viewer','editor','manager') NOT NULL,
`created_by_org_membership_id` varchar(64) NOT NULL,
`created_at` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
`removed_at` timestamp(3) NULL,
CONSTRAINT `plugin_access_grant_id` PRIMARY KEY(`id`),
CONSTRAINT `plugin_access_grant_plugin_org_membership` UNIQUE(`plugin_id`, `org_membership_id`),
CONSTRAINT `plugin_access_grant_plugin_team` UNIQUE(`plugin_id`, `team_id`),
KEY `plugin_access_grant_plugin_id` (`plugin_id`),
KEY `plugin_access_grant_org_membership_id` (`org_membership_id`),
KEY `plugin_access_grant_team_id` (`team_id`),
KEY `plugin_access_grant_org_wide` (`org_wide`)
);
CREATE TABLE IF NOT EXISTS `connector_account` (
`id` varchar(64) NOT NULL,
`organization_id` varchar(64) NOT NULL,
`connector_type` enum('github') NOT NULL,
`remote_id` varchar(255) NOT NULL,
`external_account_ref` varchar(255),
`display_name` varchar(255) NOT NULL,
`status` enum('active','inactive','disconnected','error') NOT NULL DEFAULT 'active',
`created_by_org_membership_id` varchar(64) NOT NULL,
`metadata_json` json,
`created_at` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
`updated_at` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
CONSTRAINT `connector_account_id` PRIMARY KEY(`id`),
CONSTRAINT `connector_account_org_type_remote_id` UNIQUE(`organization_id`, `connector_type`, `remote_id`),
KEY `connector_account_organization_id` (`organization_id`),
KEY `connector_account_created_by_org_membership_id` (`created_by_org_membership_id`),
KEY `connector_account_connector_type` (`connector_type`),
KEY `connector_account_status` (`status`)
);
CREATE TABLE IF NOT EXISTS `connector_instance` (
`id` varchar(64) NOT NULL,
`organization_id` varchar(64) NOT NULL,
`connector_account_id` varchar(64) NOT NULL,
`connector_type` enum('github') NOT NULL,
`remote_id` varchar(255),
`name` varchar(255) NOT NULL,
`status` enum('active','disabled','archived','error') NOT NULL DEFAULT 'active',
`instance_config_json` json,
`last_synced_at` timestamp(3) NULL,
`last_sync_status` enum('pending','queued','running','completed','failed','partial','ignored'),
`last_sync_cursor` text,
`created_by_org_membership_id` varchar(64) NOT NULL,
`created_at` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
`updated_at` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
CONSTRAINT `connector_instance_id` PRIMARY KEY(`id`),
CONSTRAINT `connector_instance_org_name` UNIQUE(`organization_id`, `name`),
KEY `connector_instance_organization_id` (`organization_id`),
KEY `connector_instance_connector_account_id` (`connector_account_id`),
KEY `connector_instance_created_by_org_membership_id` (`created_by_org_membership_id`),
KEY `connector_instance_connector_type` (`connector_type`),
KEY `connector_instance_status` (`status`)
);
CREATE TABLE IF NOT EXISTS `connector_instance_access_grant` (
`id` varchar(64) NOT NULL,
`connector_instance_id` varchar(64) NOT NULL,
`org_membership_id` varchar(64),
`team_id` varchar(64),
`org_wide` boolean NOT NULL DEFAULT false,
`role` enum('viewer','editor','manager') NOT NULL,
`created_by_org_membership_id` varchar(64) NOT NULL,
`created_at` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
`removed_at` timestamp(3) NULL,
CONSTRAINT `connector_instance_access_grant_id` PRIMARY KEY(`id`),
CONSTRAINT `connector_instance_access_grant_instance_org_membership` UNIQUE(`connector_instance_id`, `org_membership_id`),
CONSTRAINT `connector_instance_access_grant_instance_team` UNIQUE(`connector_instance_id`, `team_id`),
KEY `connector_instance_access_grant_instance_id` (`connector_instance_id`),
KEY `connector_instance_access_grant_org_membership_id` (`org_membership_id`),
KEY `connector_instance_access_grant_team_id` (`team_id`),
KEY `connector_instance_access_grant_org_wide` (`org_wide`)
);
CREATE TABLE IF NOT EXISTS `connector_target` (
`id` varchar(64) NOT NULL,
`connector_instance_id` varchar(64) NOT NULL,
`connector_type` enum('github') NOT NULL,
`remote_id` varchar(255) NOT NULL,
`target_kind` enum('repository_branch') NOT NULL,
`external_target_ref` varchar(255),
`target_config_json` json NOT NULL,
`created_at` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
`updated_at` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
CONSTRAINT `connector_target_id` PRIMARY KEY(`id`),
CONSTRAINT `connector_target_instance_remote_id` UNIQUE(`connector_instance_id`, `remote_id`),
KEY `connector_target_connector_instance_id` (`connector_instance_id`),
KEY `connector_target_connector_type` (`connector_type`),
KEY `connector_target_target_kind` (`target_kind`)
);
CREATE TABLE IF NOT EXISTS `connector_mapping` (
`id` varchar(64) NOT NULL,
`connector_instance_id` varchar(64) NOT NULL,
`connector_target_id` varchar(64) NOT NULL,
`connector_type` enum('github') NOT NULL,
`remote_id` varchar(255),
`mapping_kind` enum('path','api','custom') NOT NULL,
`selector` varchar(1024) NOT NULL,
`object_type` enum('skill','agent','command','tool','mcp','hook','context','custom') NOT NULL,
`plugin_id` varchar(64),
`auto_add_to_plugin` boolean NOT NULL DEFAULT false,
`mapping_config_json` json,
`created_at` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
`updated_at` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
CONSTRAINT `connector_mapping_id` PRIMARY KEY(`id`),
CONSTRAINT `connector_mapping_target_selector_object_type` UNIQUE(`connector_target_id`, `selector`, `object_type`),
KEY `connector_mapping_connector_instance_id` (`connector_instance_id`),
KEY `connector_mapping_connector_target_id` (`connector_target_id`),
KEY `connector_mapping_object_type` (`object_type`),
KEY `connector_mapping_plugin_id` (`plugin_id`)
);
CREATE TABLE IF NOT EXISTS `connector_sync_event` (
`id` varchar(64) NOT NULL,
`connector_instance_id` varchar(64) NOT NULL,
`connector_target_id` varchar(64),
`connector_type` enum('github') NOT NULL,
`remote_id` varchar(255),
`event_type` enum('push','installation','installation_repositories','repository','manual_resync') NOT NULL,
`external_event_ref` varchar(255),
`source_revision_ref` varchar(255),
`status` enum('pending','queued','running','completed','failed','partial','ignored') NOT NULL DEFAULT 'pending',
`summary_json` json,
`started_at` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
`completed_at` timestamp(3) NULL,
CONSTRAINT `connector_sync_event_id` PRIMARY KEY(`id`),
KEY `connector_sync_event_connector_instance_id` (`connector_instance_id`),
KEY `connector_sync_event_connector_target_id` (`connector_target_id`),
KEY `connector_sync_event_event_type` (`event_type`),
KEY `connector_sync_event_status` (`status`),
KEY `connector_sync_event_source_revision_ref` (`source_revision_ref`),
KEY `connector_sync_event_external_event_ref` (`external_event_ref`)
);
CREATE TABLE IF NOT EXISTS `connector_source_binding` (
`id` varchar(64) NOT NULL,
`config_object_id` varchar(64) NOT NULL,
`connector_instance_id` varchar(64) NOT NULL,
`connector_target_id` varchar(64) NOT NULL,
`connector_mapping_id` varchar(64) NOT NULL,
`connector_type` enum('github') NOT NULL,
`remote_id` varchar(255),
`external_locator` varchar(2048) NOT NULL,
`external_stable_ref` varchar(255),
`last_seen_source_revision_ref` varchar(255),
`status` enum('active','inactive','deleted','archived','ingestion_error') NOT NULL DEFAULT 'active',
`created_at` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
`updated_at` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
`deleted_at` timestamp(3) NULL,
CONSTRAINT `connector_source_binding_id` PRIMARY KEY(`id`),
CONSTRAINT `connector_source_binding_config_object` UNIQUE(`config_object_id`),
KEY `connector_source_binding_connector_instance_id` (`connector_instance_id`),
KEY `connector_source_binding_connector_target_id` (`connector_target_id`),
KEY `connector_source_binding_connector_mapping_id` (`connector_mapping_id`),
KEY `connector_source_binding_external_locator` (`external_locator`)
);
CREATE TABLE IF NOT EXISTS `connector_source_tombstone` (
`id` varchar(64) NOT NULL,
`connector_instance_id` varchar(64) NOT NULL,
`connector_target_id` varchar(64) NOT NULL,
`connector_mapping_id` varchar(64) NOT NULL,
`connector_type` enum('github') NOT NULL,
`remote_id` varchar(255),
`external_locator` varchar(2048) NOT NULL,
`former_config_object_id` varchar(64) NOT NULL,
`deleted_in_sync_event_id` varchar(64) NOT NULL,
`deleted_source_revision_ref` varchar(255),
`created_at` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
CONSTRAINT `connector_source_tombstone_id` PRIMARY KEY(`id`),
KEY `connector_source_tombstone_connector_instance_id` (`connector_instance_id`),
KEY `connector_source_tombstone_connector_target_id` (`connector_target_id`),
KEY `connector_source_tombstone_connector_mapping_id` (`connector_mapping_id`),
KEY `connector_source_tombstone_external_locator` (`external_locator`),
KEY `connector_source_tombstone_former_config_object_id` (`former_config_object_id`)
);