mirror of
https://github.com/different-ai/openwork
synced 2026-04-25 17:15:34 +02:00
* 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>
285 lines
14 KiB
SQL
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`)
|
|
);
|