thinkwork-cli 0.12.12 → 0.12.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +42 -38
- package/dist/{api-client-ASJWIG3Z.js → api-client-4VT3FWOH.js} +1 -1
- package/dist/{chunk-JEHV35EU.js → chunk-H7AB42ES.js} +340 -30
- package/dist/cli.js +22123 -9219
- package/dist/commands/enterprise/templates/deploy-repo/.github/workflows/deploy.yml +17 -6
- package/dist/commands/enterprise/templates/deploy-repo/docs/runbook.md +81 -9
- package/dist/commands/enterprise/templates/deploy-repo/scripts/apply-release.mjs +183 -21
- package/dist/commands/enterprise/templates/deploy-repo/scripts/smoke.mjs +1 -2
- package/dist/commands/enterprise/templates/deploy-repo/terraform/main.tf +286 -0
- package/dist/drizzle/0000_petite_marvel_apes.sql +1188 -0
- package/dist/drizzle/0001_milky_surge.sql +103 -0
- package/dist/drizzle/0002_aberrant_mattie_franklin.sql +41 -0
- package/dist/drizzle/0003_exotic_ogun.sql +3 -0
- package/dist/drizzle/0004_glamorous_magneto.sql +2 -0
- package/dist/drizzle/0005_ancient_nocturne.sql +2 -0
- package/dist/drizzle/0006_new_colonel_america.sql +2 -0
- package/dist/drizzle/0007_unique_external_task_id.sql +31 -0
- package/dist/drizzle/0008_external_task_id_column.sql +43 -0
- package/dist/drizzle/0009_evaluations.sql +64 -0
- package/dist/drizzle/0010_eval_agent_template.sql +2 -0
- package/dist/drizzle/0011_eval_run_template.sql +2 -0
- package/dist/drizzle/0012_eval_seed_unique.sql +16 -0
- package/dist/drizzle/0013_motionless_white_queen.sql +140 -0
- package/dist/drizzle/0014_wiki_aggregation.sql +11 -0
- package/dist/drizzle/0015_pg_trgm_alias_title_indexes.sql +9 -0
- package/dist/drizzle/0016_wiki_schema_drops.sql +24 -0
- package/dist/drizzle/0017_wiki_places.sql +46 -0
- package/dist/drizzle/0018_agent_workspace_overlay.sql +26 -0
- package/dist/drizzle/0018_cool_firebird.sql +24 -0
- package/dist/drizzle/0018_skill_runs.sql +84 -0
- package/dist/drizzle/0019_condemned_dragon_man.sql +95 -0
- package/dist/drizzle/0019_webhook_skill_runs.sql +58 -0
- package/dist/drizzle/0020_crazy_the_anarchist.sql +9 -0
- package/dist/drizzle/0020_mutation_idempotency.sql +64 -0
- package/dist/drizzle/0021_crm_work_links.sql +76 -0
- package/dist/drizzle/0021_skill_runs_completion_hmac.sql +33 -0
- package/dist/drizzle/0022_add_billing_tables.sql +70 -0
- package/dist/drizzle/0022_seed_thinkwork_admin_permissions.sql +160 -0
- package/dist/drizzle/0022_stripe_billing_indexes.sql +48 -0
- package/dist/drizzle/0023_tenants_deactivation.sql +27 -0
- package/dist/drizzle/0024_tenant_mcp_admin_keys.sql +63 -0
- package/dist/drizzle/0025_v1_agent_architecture.sql +182 -0
- package/dist/drizzle/0026_thread_turns_add_kind.sql +28 -0
- package/dist/drizzle/0027_capability_catalog_and_manifests.sql +219 -0
- package/dist/drizzle/0028_aws_s3_extension.sql +26 -0
- package/dist/drizzle/0029_collapse_execution_types.sql +42 -0
- package/dist/drizzle/0030_retire_composition_primitives.sql +48 -0
- package/dist/drizzle/0031_thread_cleanup_drops.sql +131 -0
- package/dist/drizzle/0032_add_browser_automation_template_config.sql +24 -0
- package/dist/drizzle/0033_agent_operation_leases.sql +32 -0
- package/dist/drizzle/0034_agent_workspace_events.sql +116 -0
- package/dist/drizzle/0035_workspace_review_decisions.sql +19 -0
- package/dist/drizzle/0036_user_scoped_memory_wiki.sql +152 -0
- package/dist/drizzle/0037_user_profile_operating_model.sql +34 -0
- package/dist/drizzle/0042_agent_runtime_selector.sql +41 -0
- package/dist/drizzle/0043_wiki_search_tsv_tokenization.sql +48 -0
- package/dist/drizzle/0044_add_web_search_template_config.sql +7 -0
- package/dist/drizzle/0045_add_send_email_template_config.sql +7 -0
- package/dist/drizzle/0046_tenant_mcp_context_tools.sql +26 -0
- package/dist/drizzle/0047_add_context_engine_template_config.sql +7 -0
- package/dist/drizzle/0048_tenant_context_provider_settings.sql +22 -0
- package/dist/drizzle/0050_brain_v0_entity_subtype.sql +29 -0
- package/dist/drizzle/0051_brain_v0_tenant_entity_pages.sql +170 -0
- package/dist/drizzle/0052_brain_v0_external_refs.sql +41 -0
- package/dist/drizzle/0053_brain_v0_unresolved_mentions_subtype.sql +48 -0
- package/dist/drizzle/0054_wiki_compile_jobs_input.sql +28 -0
- package/dist/drizzle/0055_routines_stepfunctions_substrate.sql +202 -0
- package/dist/drizzle/0056_routine_step_events_dedup_idx.sql +25 -0
- package/dist/drizzle/0057_archive_legacy_python_routines.sql +36 -0
- package/dist/drizzle/0058_routines_visibility_and_owning_agent.sql +61 -0
- package/dist/drizzle/0061_routine_execution_asl_version_id.sql +29 -0
- package/dist/drizzle/0062_migrate_pi_to_flue.sql +110 -0
- package/dist/drizzle/0063_threads_session_data.sql +23 -0
- package/dist/drizzle/0064_tenant_credentials.sql +65 -0
- package/dist/drizzle/0067_thinkwork_computers_phase_one.sql +174 -0
- package/dist/drizzle/0068_drop_system_workflows_and_activation.sql +115 -0
- package/dist/drizzle/0069_compliance_schema.sql +364 -0
- package/dist/drizzle/0070_compliance_aurora_roles.sql +171 -0
- package/dist/drizzle/0072_threads_computer_ownership.sql +24 -0
- package/dist/drizzle/0073_compliance_tenant_anchor_state.sql +105 -0
- package/dist/drizzle/0074_compliance_event_hash_index.sql +49 -0
- package/dist/drizzle/0075_scheduled_jobs_computer_ownership.sql +27 -0
- package/dist/drizzle/0076_scheduled_jobs_marco_backfill.sql +69 -0
- package/dist/drizzle/0077_computers_primary_agent_id.sql +38 -0
- package/dist/drizzle/0078_tenant_customize_catalog.sql +46 -0
- package/dist/drizzle/0079_seed_tenant_customize_catalog.sql +53 -0
- package/dist/drizzle/0081_routines_catalog_slug.sql +42 -0
- package/dist/drizzle/0082_messages_parts_jsonb.sql +52 -0
- package/dist/drizzle/0083_computer_runbooks.sql +103 -0
- package/dist/drizzle/0084_artifacts_favorited_at.sql +32 -0
- package/dist/drizzle/0085_seed_thinkwork_computer_default_template.sql +46 -0
- package/dist/drizzle/0086_update_default_template_models.sql +19 -0
- package/dist/drizzle/0087_retire_oss_connectors.sql +77 -0
- package/dist/drizzle/0088_compliance_event_types_finance_pilot.sql +37 -0
- package/dist/drizzle/0089_remove_maniflow_eval_seeds.sql +81 -0
- package/dist/drizzle/0089_wiki_schema_extraction.sql +315 -0
- package/dist/drizzle/0090_brain_schema_extraction.sql +274 -0
- package/dist/drizzle/0091_drop_wiki_brain_compat_views.sql +118 -0
- package/dist/drizzle/0092_finish_oss_connector_retirement.sql +97 -0
- package/dist/drizzle/0093_eval_runs_scheduled_job_id.sql +23 -0
- package/dist/drizzle/0094_slack_workspace_app.sql +140 -0
- package/dist/drizzle/0095_eval_runs_computer_id.sql +22 -0
- package/dist/drizzle/0096_true_redteam_eval_seed_cleanup.sql +67 -0
- package/dist/drizzle/0097_shared_computers.sql +191 -0
- package/dist/drizzle/0098_business_ontology.sql +587 -0
- package/dist/drizzle/0099_thread_idle_learning.sql +145 -0
- package/dist/drizzle/0100_ontology_gated_brain_dynamic_subtypes.sql +7 -0
- package/dist/drizzle/0101_ontology_gated_unresolved_mentions_dynamic_subtypes.sql +7 -0
- package/dist/drizzle/0102_wiki_brain_owner_repair.sql +87 -0
- package/dist/drizzle/0103_brain_section_source_trigger_repair.sql +75 -0
- package/dist/drizzle/0104_expand_seed_ontology_for_user_memory.sql +166 -0
- package/dist/drizzle/0105_spaces_domain.sql +349 -0
- package/dist/drizzle/0106_expand_seed_ontology_for_triples.sql +173 -0
- package/dist/drizzle/0106_space_threads_participants.sql +197 -0
- package/dist/drizzle/0107_linked_task_mirror.sql +245 -0
- package/dist/drizzle/0108_message_mentions.sql +95 -0
- package/dist/drizzle/0109_space_owned_threads.sql +217 -0
- package/dist/drizzle/0110_thread_participant_read_state.sql +21 -0
- package/dist/drizzle/0111_agents_tenant_name_unique.sql +38 -0
- package/dist/drizzle/0112_recast_spaces_as_contextual_workrooms.sql +138 -0
- package/dist/drizzle/0113_agents_own_runtime_fields.sql +48 -0
- package/dist/drizzle/0114_migrate_templates_to_agents_and_spaces.sql +361 -0
- package/dist/drizzle/0115_remove_computer_eval_template_dependencies.sql +69 -0
- package/dist/drizzle/0116_backfill_thread_participants_access.sql +126 -0
- package/dist/drizzle/0117_space_access_mode.sql +40 -0
- package/dist/drizzle/0118_normalize_tenant_member_principal_type.sql +41 -0
- package/dist/drizzle/0119_space_knowledge_bases.sql +126 -0
- package/dist/drizzle/0120_space_automations.sql +58 -0
- package/dist/drizzle/0121_drop_computer_runbooks.sql +26 -0
- package/dist/drizzle/0122_space_email_triggers.sql +24 -0
- package/dist/drizzle/0123_single_platform_agent_and_overrides.sql +58 -0
- package/dist/drizzle/0124_thread_turns_finalized_at.sql +17 -0
- package/dist/drizzle/0125_drop_space_agent_assignments.sql +42 -0
- package/dist/drizzle/0126_migrate_flue_to_pi.sql +42 -0
- package/dist/drizzle/0127_runtime_type_observability.sql +28 -0
- package/dist/drizzle/0128_drop_eval_test_cases_agent_id.sql +37 -0
- package/dist/drizzle/0129_drop_code_factory_tables.sql +43 -0
- package/dist/drizzle/0129_eval_results_system_prompt.sql +30 -0
- package/dist/drizzle/0130_drop_teams_and_team_id_columns.sql +54 -0
- package/dist/drizzle/0131_drop_skill_catalog_and_tenant_skills.sql +33 -0
- package/dist/drizzle/0132_drop_computer_tables.sql +31 -0
- package/dist/drizzle/0133_drop_seed_view_tombstones.sql +79 -0
- package/dist/drizzle/0133_thread_turns_system_prompt.sql +22 -0
- package/dist/drizzle/0134_drop_dead_agent_runtime_tables.sql +53 -0
- package/dist/drizzle/0135_native_checklist_linked_tasks.sql +48 -0
- package/dist/drizzle/0136_goal_ledger.sql +55 -0
- package/dist/drizzle/0136_space_email_trigger_status.sql +66 -0
- package/dist/drizzle/0137_thread_participant_pins.sql +25 -0
- package/dist/drizzle/0138_users_cognito_sub.sql +30 -0
- package/dist/drizzle/0139_mobile_turn_client_id.sql +23 -0
- package/dist/drizzle/0140_workspace_folder_names.sql +36 -0
- package/dist/drizzle/0141_eval_runs_desktop_pi_provenance.sql +31 -0
- package/dist/drizzle/0142_pi_only_agent_runtime.sql +61 -0
- package/dist/drizzle/0143_add_web_extract_builtin_config.sql +28 -0
- package/dist/drizzle/0144_skill_catalog_index.sql +40 -0
- package/dist/drizzle/0145_knowledge_graph_thread_ingest.sql +512 -0
- package/dist/drizzle/0146_knowledge_graph_source_scope.sql +413 -0
- package/dist/drizzle/0147_knowledge_graph_scope_trigger_qualification.sql +211 -0
- package/dist/drizzle/0148_user_cost_attribution.sql +171 -0
- package/dist/drizzle/0149_managed_mcp_servers.sql +64 -0
- package/dist/drizzle/0149_user_model_approvals.sql +89 -0
- package/dist/drizzle/0150_bootstrap_first_admin_claim.sql +11 -0
- package/dist/drizzle/0151_managed_deployments.sql +91 -0
- package/dist/drizzle/0152_agent_profiles.sql +81 -0
- package/dist/drizzle/0153_message_mentions_agent_profile.sql +9 -0
- package/dist/drizzle/0154_customer_deployment_sessions.sql +61 -0
- package/dist/drizzle/0155_tenant_model_catalog.sql +152 -0
- package/dist/drizzle/0156_bootstrap_credential_leases.sql +52 -0
- package/dist/drizzle/0157_knowledge_graph_observations_source.sql +79 -0
- package/dist/drizzle/0158_pending_user_questions.sql +80 -0
- package/dist/drizzle/0158_wiki_tenant_scope.sql +38 -0
- package/dist/drizzle/0159_agent_profiles_space_local.sql +49 -0
- package/dist/drizzle/0159_application_plugins.sql +193 -0
- package/dist/drizzle/0159_eval_scoring_version.sql +46 -0
- package/dist/drizzle/0160_compliance_event_types_plugins.sql +37 -0
- package/dist/drizzle/0160_eval_datasets.sql +75 -0
- package/dist/drizzle/0160_eval_results_thread_turn.sql +35 -0
- package/dist/drizzle/0161_eval_run_pinning.sql +54 -0
- package/dist/drizzle/0161_tenant_mcp_servers_plugin_source.sql +62 -0
- package/dist/drizzle/0162_eval_result_override.sql +49 -0
- package/dist/drizzle/0163_eval_replay_tool_allowlist.sql +50 -0
- package/dist/drizzle/0164_eval_replay_tool_override_mode.sql +52 -0
- package/dist/drizzle/0165_plugin_premium_entitlements.sql +153 -0
- package/dist/drizzle/0166_company_brain_substrate_contract.sql +386 -0
- package/dist/drizzle/0167_company_brain_artifact_manifest_runtime.sql +85 -0
- package/dist/drizzle/0168_eval_skill_gate.sql +44 -0
- package/dist/drizzle/0169_release_update_jobs.sql +67 -0
- package/dist/drizzle/0170_email_channel_plugin.sql +291 -0
- package/dist/drizzle/0171_linked_task_external_providers.sql +30 -0
- package/dist/drizzle/0172_email_channel_sendgrid_provider.sql +8 -0
- package/dist/drizzle/0173_auth_provider_resources.sql +83 -0
- package/dist/drizzle/0174_workos_auth_bridges.sql +37 -0
- package/dist/drizzle/0175_workos_auth_sessions.sql +38 -0
- package/dist/drizzle/0176_n8n_agent_step_runs.sql +107 -0
- package/dist/drizzle/0177_workflow_control_plane.sql +281 -0
- package/dist/drizzle/0178_workflow_backfill_existing_routines.sql +525 -0
- package/dist/drizzle/0179_tenant_goal_budget_settings.sql +21 -0
- package/dist/drizzle/0180_skill_drafts.sql +89 -0
- package/dist/drizzle/0181_skill_draft_publish_status.sql +21 -0
- package/dist/drizzle/0182_agent_loops.sql +260 -0
- package/dist/drizzle/0183_okf_artifact_manifests.sql +52 -0
- package/dist/drizzle/0184_skill_catalog_trust_cache.sql +35 -0
- package/dist/drizzle/0185_agent_loop_space.sql +16 -0
- package/dist/drizzle/0186_tenant_mcp_runtime_metadata.sql +10 -0
- package/dist/drizzle/0187_native_work_items.sql +220 -0
- package/dist/drizzle/0188_company_etl_plugin_rename.sql +99 -0
- package/dist/drizzle/0189_trace_cost_substrate.sql +247 -0
- package/dist/drizzle/0190_billing_export_reconciliation.sql +101 -0
- package/dist/drizzle/0191_open_engine_work_item_queue.sql +66 -0
- package/dist/drizzle/0192_work_item_labels.sql +44 -0
- package/dist/drizzle/0193_work_item_documents.sql +31 -0
- package/dist/drizzle/0194_memory_retain_attempts.sql +103 -0
- package/dist/drizzle/0194_work_item_comments.sql +35 -0
- package/dist/drizzle/0195_plugin_app_overlays.sql +45 -0
- package/dist/drizzle/0196_pi_extensions.sql +118 -0
- package/dist/drizzle/0197_eval_profiles.sql +150 -0
- package/dist/drizzle/0198_eval_runs_unstable.sql +27 -0
- package/dist/drizzle/0199_eval_runs_cost_partial.sql +27 -0
- package/dist/drizzle/meta/_journal.json +160 -0
- package/dist/plugins/README.md +162 -0
- package/dist/plugins/catalog/package.json +40 -0
- package/dist/plugins/catalog/scripts/build-catalog.ts +120 -0
- package/dist/plugins/catalog/scripts/generate-plugin-registry.ts +144 -0
- package/dist/plugins/catalog/src/__tests__/build-catalog.test.ts +86 -0
- package/dist/plugins/catalog/src/__tests__/catalog.test.ts +308 -0
- package/dist/plugins/catalog/src/__tests__/contracts.test.ts +861 -0
- package/dist/plugins/catalog/src/__tests__/plugin-package.test.ts +124 -0
- package/dist/plugins/catalog/src/__tests__/plugin-registry.test.ts +120 -0
- package/dist/plugins/catalog/src/catalog.ts +434 -0
- package/dist/plugins/catalog/src/contracts.ts +1498 -0
- package/dist/plugins/catalog/src/index.ts +4 -0
- package/dist/plugins/catalog/src/plugin-package.ts +171 -0
- package/dist/plugins/catalog/src/registry/generated-first-party.ts +76 -0
- package/dist/plugins/catalog/src/registry/index.ts +1 -0
- package/dist/plugins/catalog/tsconfig.json +8 -0
- package/dist/plugins/company-brain/README.md +37 -0
- package/dist/plugins/company-brain/package.json +33 -0
- package/dist/plugins/company-brain/runtime/cognee/Dockerfile +11 -0
- package/dist/plugins/company-brain/smoke/cognee-managed-app-smoke.mjs +458 -0
- package/dist/plugins/company-brain/smoke/cognee-memory-cutover-smoke.mjs +539 -0
- package/dist/plugins/company-brain/smoke/company-brain-context-engine-smoke.mjs +312 -0
- package/dist/plugins/company-brain/smoke/company-brain-operations-smoke.mjs +449 -0
- package/dist/plugins/company-brain/smoke/company-brain-plugin-smoke.mjs +655 -0
- package/dist/plugins/company-brain/smoke/hindsight-memory-isolation-smoke.mjs +474 -0
- package/dist/plugins/company-brain/src/api/cognee-client.ts +896 -0
- package/dist/plugins/company-brain/src/api/cognee-cluster-identity.ts +49 -0
- package/dist/plugins/company-brain/src/api/cognee-memory-scope.ts +84 -0
- package/dist/plugins/company-brain/src/api/context-engine-provider.ts +888 -0
- package/dist/plugins/company-brain/src/api/migration.ts +665 -0
- package/dist/plugins/company-brain/src/deployment/cognee-managed-app.ts +396 -0
- package/dist/plugins/company-brain/src/index.ts +62 -0
- package/dist/plugins/company-brain/src/manifest.ts +112 -0
- package/dist/plugins/company-brain/terraform/cognee/README.md +263 -0
- package/dist/plugins/company-brain/terraform/cognee/main.tf +766 -0
- package/dist/plugins/company-brain/terraform/cognee/outputs.tf +144 -0
- package/dist/plugins/company-brain/terraform/cognee/variables.tf +402 -0
- package/dist/plugins/company-brain/test/api/cognee-client.test.ts +562 -0
- package/dist/plugins/company-brain/test/api/cognee-memory-scope.test.ts +74 -0
- package/dist/plugins/company-brain/test/api/context-engine-provider.test.ts +447 -0
- package/dist/plugins/company-brain/test/api/migration.test.ts +465 -0
- package/dist/plugins/company-brain/test/manifest.test.ts +95 -0
- package/dist/plugins/company-brain/tsconfig.json +8 -0
- package/dist/plugins/company-data/README.md +49 -0
- package/dist/plugins/company-data/package.json +21 -0
- package/dist/plugins/company-data/src/index.ts +30 -0
- package/dist/plugins/company-data/src/manifest.ts +26 -0
- package/dist/plugins/company-data/test/manifest.test.ts +116 -0
- package/dist/plugins/company-data/tsconfig.json +8 -0
- package/dist/plugins/company-etl/README.md +46 -0
- package/dist/plugins/company-etl/package.json +21 -0
- package/dist/plugins/company-etl/src/index.ts +29 -0
- package/dist/plugins/company-etl/src/manifest.ts +26 -0
- package/dist/plugins/company-etl/test/manifest.test.ts +108 -0
- package/dist/plugins/company-etl/tsconfig.json +8 -0
- package/dist/plugins/email-channel/README.md +41 -0
- package/dist/plugins/email-channel/package.json +22 -0
- package/dist/plugins/email-channel/src/index.ts +36 -0
- package/dist/plugins/email-channel/src/manifest.ts +44 -0
- package/dist/plugins/email-channel/src/provider-contract.ts +36 -0
- package/dist/plugins/email-channel/test/manifest.test.ts +119 -0
- package/dist/plugins/email-channel/tsconfig.json +8 -0
- package/dist/plugins/lastmile/README.md +50 -0
- package/dist/plugins/lastmile/package.json +23 -0
- package/dist/plugins/lastmile/smoke/lastmile-plugin-smoke.mjs +661 -0
- package/dist/plugins/lastmile/src/api/tasks-adapter.ts +572 -0
- package/dist/plugins/lastmile/src/discovery.fixture.ts +64 -0
- package/dist/plugins/lastmile/src/index.ts +46 -0
- package/dist/plugins/lastmile/src/manifest.ts +139 -0
- package/dist/plugins/lastmile/test/api/tasks-adapter.test.ts +266 -0
- package/dist/plugins/lastmile/test/discovery.test.ts +88 -0
- package/dist/plugins/lastmile/tsconfig.json +8 -0
- package/dist/plugins/n8n/README.md +201 -0
- package/dist/plugins/n8n/n8n-app/README.md +33 -0
- package/dist/plugins/n8n/n8n-app/package.json +23 -0
- package/dist/plugins/n8n/n8n-app/src/application-config.ts +45 -0
- package/dist/plugins/n8n/n8n-app/src/front-components/thinkwork-workflows.front-component.tsx +970 -0
- package/dist/plugins/n8n/n8n-app/src/lib/n8n-app-data.ts +190 -0
- package/dist/plugins/n8n/n8n-app/src/vite-env.d.ts +7 -0
- package/dist/plugins/n8n/n8n-app/tsconfig.json +15 -0
- package/dist/plugins/n8n/package.json +35 -0
- package/dist/plugins/n8n/runtime/Dockerfile +18 -0
- package/dist/plugins/n8n/runtime/n8n-task-runners.json +14 -0
- package/dist/plugins/n8n/runtime/n8n-task-runners.json.template +14 -0
- package/dist/plugins/n8n/runtime/package-lock.json +13 -0
- package/dist/plugins/n8n/runtime/package.json +7 -0
- package/dist/plugins/n8n/scripts/sync-thinkwork-app.mjs +268 -0
- package/dist/plugins/n8n/smoke/README.md +95 -0
- package/dist/plugins/n8n/smoke/n8n-agent-step-bridge-smoke.mjs +866 -0
- package/dist/plugins/n8n/smoke/n8n-integrated-app-smoke.mjs +262 -0
- package/dist/plugins/n8n/smoke/n8n-managed-app-smoke.mjs +409 -0
- package/dist/plugins/n8n/smoke/n8n-mcp-smoke.mjs +624 -0
- package/dist/plugins/n8n/src/deployment/image-build.ts +172 -0
- package/dist/plugins/n8n/src/deployment/managed-app.ts +429 -0
- package/dist/plugins/n8n/src/index.ts +79 -0
- package/dist/plugins/n8n/src/manifest.ts +403 -0
- package/dist/plugins/n8n/src/package-config.ts +186 -0
- package/dist/plugins/n8n/src/skills/n8n-workflow-operator/SKILL.md +76 -0
- package/dist/plugins/n8n/src/skills/n8n-workflow-operator/references/mcp-tooling.md +40 -0
- package/dist/plugins/n8n/src/skills/n8n-workflow-operator/references/validation-and-handoff.md +40 -0
- package/dist/plugins/n8n/src/skills/n8n-workflow-operator/references/workflow-authoring.md +45 -0
- package/dist/plugins/n8n/terraform/n8n/README.md +113 -0
- package/dist/plugins/n8n/terraform/n8n/main.tf +918 -0
- package/dist/plugins/n8n/terraform/n8n/outputs.tf +124 -0
- package/dist/plugins/n8n/terraform/n8n/scripts/sync-database.py +250 -0
- package/dist/plugins/n8n/terraform/n8n/scripts/test_sync_database.py +55 -0
- package/dist/plugins/n8n/terraform/n8n/variables.tf +354 -0
- package/dist/plugins/n8n/test/image-build.test.ts +118 -0
- package/dist/plugins/n8n/test/integrated-app-contract.test.ts +353 -0
- package/dist/plugins/n8n/test/manifest.test.ts +278 -0
- package/dist/plugins/n8n/test/package-config.test.ts +57 -0
- package/dist/plugins/n8n/tsconfig.json +8 -0
- package/dist/plugins/sendgrid/README.md +30 -0
- package/dist/plugins/sendgrid/package.json +22 -0
- package/dist/plugins/sendgrid/src/index.ts +36 -0
- package/dist/plugins/sendgrid/src/manifest.ts +37 -0
- package/dist/plugins/sendgrid/src/provider-contract.ts +14 -0
- package/dist/plugins/sendgrid/test/manifest.test.ts +80 -0
- package/dist/plugins/sendgrid/tsconfig.json +8 -0
- package/dist/plugins/twenty/README.md +78 -0
- package/dist/plugins/twenty/package.json +27 -0
- package/dist/plugins/twenty/scripts/__tests__/sync-thinkwork-app.test.mjs +67 -0
- package/dist/plugins/twenty/scripts/sync-thinkwork-app.mjs +185 -0
- package/dist/plugins/twenty/scripts/wire-thinkwork-workflow.mjs +658 -0
- package/dist/plugins/twenty/smoke/twenty-managed-app-smoke.mjs +359 -0
- package/dist/plugins/twenty/smoke/twenty-mcp-oauth-smoke.mjs +574 -0
- package/dist/plugins/twenty/src/api/cutover.ts +209 -0
- package/dist/plugins/twenty/src/deployment/managed-app.ts +253 -0
- package/dist/plugins/twenty/src/index.ts +55 -0
- package/dist/plugins/twenty/src/manifest.ts +259 -0
- package/dist/plugins/twenty/terraform/twenty/README.md +97 -0
- package/dist/plugins/twenty/terraform/twenty/main.tf +829 -0
- package/dist/plugins/twenty/terraform/twenty/outputs.tf +79 -0
- package/dist/plugins/twenty/terraform/twenty/variables.tf +268 -0
- package/dist/plugins/twenty/test/api/cutover.test.ts +183 -0
- package/dist/plugins/twenty/test/manifest.test.ts +463 -0
- package/dist/plugins/twenty/tsconfig.json +9 -0
- package/dist/plugins/twenty/twenty-app/.nvmrc +1 -0
- package/dist/plugins/twenty/twenty-app/README.md +148 -0
- package/dist/plugins/twenty/twenty-app/package.json +30 -0
- package/dist/plugins/twenty/twenty-app/src/application-config.ts +44 -0
- package/dist/plugins/twenty/twenty-app/src/constants/universal-identifiers.ts +18 -0
- package/dist/plugins/twenty/twenty-app/src/default-role.ts +24 -0
- package/dist/plugins/twenty/twenty-app/src/front-components/thinkwork-settings.front-component.tsx +299 -0
- package/dist/plugins/twenty/twenty-app/src/logic-functions/thinkwork-webhook.logic-function.ts +354 -0
- package/dist/plugins/twenty/twenty-app/tsconfig.json +14 -0
- package/dist/plugins/twenty/twenty-app/yarn.lock +4144 -0
- package/dist/plugins/workos-auth/package.json +22 -0
- package/dist/plugins/workos-auth/src/index.ts +30 -0
- package/dist/plugins/workos-auth/src/manifest.ts +40 -0
- package/dist/plugins/workos-auth/src/provider-contract.ts +39 -0
- package/dist/plugins/workos-auth/test/manifest.test.ts +94 -0
- package/dist/plugins/workos-auth/tsconfig.json +8 -0
- package/dist/scripts/bootstrap-workspace.sh +162 -0
- package/dist/scripts/post-deploy.sh +290 -0
- package/dist/terraform/examples/greenfield/main.tf +903 -75
- package/dist/terraform/examples/greenfield/terraform.tfvars.example +67 -8
- package/dist/terraform/modules/app/agentcore-code-interpreter/Dockerfile.sandbox-base +2 -2
- package/dist/terraform/modules/app/agentcore-code-interpreter/README.md +8 -9
- package/dist/terraform/modules/app/agentcore-code-interpreter/sandbox/sitecustomize.py +227 -0
- package/dist/terraform/modules/app/agentcore-code-interpreter/sandbox/test_sitecustomize.py +277 -0
- package/dist/terraform/modules/app/agentcore-memory/README.md +6 -6
- package/dist/terraform/modules/app/agentcore-memory/main.tf +1 -1
- package/dist/terraform/modules/app/agentcore-memory/scripts/create_or_find_memory.sh +40 -9
- package/dist/terraform/modules/app/agentcore-pi/README.md +61 -0
- package/dist/terraform/modules/app/agentcore-pi/main.tf +453 -0
- package/dist/terraform/modules/app/agentcore-pi/outputs.tf +38 -0
- package/dist/terraform/modules/app/agentcore-pi/variables.tf +145 -0
- package/dist/terraform/modules/app/agentcore-platform/main.tf +83 -0
- package/dist/terraform/modules/app/agentcore-runtime/main.tf +9 -11
- package/dist/terraform/modules/app/appsync-subscriptions/main.tf +5 -1
- package/dist/terraform/modules/app/customer-domain/main.tf +483 -0
- package/dist/terraform/modules/app/deployment-control-plane/README.md +47 -0
- package/dist/terraform/modules/app/deployment-control-plane/buildspec.yml +24 -0
- package/dist/terraform/modules/app/deployment-control-plane/main.tf +614 -0
- package/dist/terraform/modules/app/deployment-control-plane/outputs.tf +54 -0
- package/dist/terraform/modules/app/deployment-control-plane/runner.py +4720 -0
- package/dist/terraform/modules/app/deployment-control-plane/test_runner_bundle.py +3026 -0
- package/dist/terraform/modules/app/deployment-control-plane/variables.tf +96 -0
- package/dist/terraform/modules/app/hindsight-memory/README.md +25 -23
- package/dist/terraform/modules/app/hindsight-memory/main.tf +26 -2
- package/dist/terraform/modules/app/lambda-api/eval-fanout.tf +17 -50
- package/dist/terraform/modules/app/lambda-api/handlers.tf +1290 -679
- package/dist/terraform/modules/app/lambda-api/iam-grouped.tf +933 -0
- package/dist/terraform/modules/app/lambda-api/main.tf +14 -527
- package/dist/terraform/modules/app/lambda-api/mcp-oauth.tf +3 -19
- package/dist/terraform/modules/app/lambda-api/outputs.tf +50 -6
- package/dist/terraform/modules/app/lambda-api/runtime-config.tf +163 -0
- package/dist/terraform/modules/app/lambda-api/slack-app-secrets.tf +3 -1
- package/dist/terraform/modules/app/lambda-api/stripe-secrets.tf +3 -1
- package/dist/terraform/modules/app/lambda-api/variables.tf +240 -53
- package/dist/terraform/modules/app/lambda-api/workspace-events.tf +2 -25
- package/dist/terraform/modules/app/ses-email/main.tf +143 -30
- package/dist/terraform/modules/app/static-site/main.tf +4 -3
- package/dist/terraform/modules/app/www-dns/main.tf +45 -5
- package/dist/terraform/modules/app/www-dns/outputs.tf +10 -0
- package/dist/terraform/modules/app/www-dns/variables.tf +24 -0
- package/dist/terraform/modules/data/aurora-postgres/main.tf +15 -1
- package/dist/terraform/modules/data/compliance-exports-bucket/main.tf +1 -1
- package/dist/terraform/modules/data/compliance-exports-bucket/variables.tf +6 -0
- package/dist/terraform/modules/foundation/cognito/main.tf +167 -11
- package/dist/terraform/modules/foundation/cognito/outputs.tf +5 -0
- package/dist/terraform/modules/foundation/cognito/variables.tf +110 -0
- package/dist/terraform/modules/foundation/vpc/main.tf +45 -3
- package/dist/terraform/modules/foundation/vpc/outputs.tf +20 -0
- package/dist/terraform/modules/foundation/vpc/variables.tf +18 -0
- package/dist/terraform/modules/thinkwork/README.md +71 -0
- package/dist/terraform/modules/thinkwork/main.tf +1325 -174
- package/dist/terraform/modules/thinkwork/outputs.tf +457 -24
- package/dist/terraform/modules/thinkwork/variables.tf +1169 -93
- package/dist/terraform/schema.graphql +82 -9
- package/dist/workspace-defaults/files/AGENTS.md +344 -0
- package/dist/workspace-defaults/files/CONTEXT.md +8 -0
- package/dist/workspace-defaults/files/GUARDRAILS.md +51 -0
- package/dist/workspace-defaults/files/MEMORY_GUIDE.md +65 -0
- package/dist/workspace-defaults/files/ROUTER.md +24 -0
- package/dist/workspace-defaults/files/SPACE.md +62 -0
- package/dist/workspace-defaults/files/TOOLS.md +65 -0
- package/dist/workspace-defaults/files/USER.md +40 -0
- package/dist/workspace-defaults/files/mcp.json +3 -0
- package/dist/workspace-defaults/files/memory/contacts.md +13 -0
- package/dist/workspace-defaults/files/memory/lessons.md +13 -0
- package/dist/workspace-defaults/files/memory/preferences.md +12 -0
- package/dist/workspace-defaults/files/skills/.gitkeep +1 -0
- package/dist/workspace-defaults/files/skills/artifact-builder/SKILL.md +79 -0
- package/dist/workspace-defaults/files/skills/artifact-builder/references/crm-dashboard.md +166 -0
- package/dist/workspace-defaults/files/skills/automation-loop-designer/SKILL.md +120 -0
- package/dist/workspace-defaults/files/skills/skill-creator/LICENSE.txt +202 -0
- package/dist/workspace-defaults/files/skills/skill-creator/SKILL.md +485 -0
- package/dist/workspace-defaults/files/skills/skill-creator/UPSTREAM.json +124 -0
- package/dist/workspace-defaults/files/skills/skill-creator/agents/analyzer.md +274 -0
- package/dist/workspace-defaults/files/skills/skill-creator/agents/comparator.md +202 -0
- package/dist/workspace-defaults/files/skills/skill-creator/agents/grader.md +223 -0
- package/dist/workspace-defaults/files/skills/skill-creator/assets/eval_review.html +146 -0
- package/dist/workspace-defaults/files/skills/skill-creator/eval-viewer/generate_review.py +471 -0
- package/dist/workspace-defaults/files/skills/skill-creator/eval-viewer/viewer.html +1325 -0
- package/dist/workspace-defaults/files/skills/skill-creator/references/schemas.md +430 -0
- package/dist/workspace-defaults/files/skills/skill-creator/scripts/__init__.py +0 -0
- package/dist/workspace-defaults/files/skills/skill-creator/scripts/aggregate_benchmark.py +401 -0
- package/dist/workspace-defaults/files/skills/skill-creator/scripts/generate_report.py +326 -0
- package/dist/workspace-defaults/files/skills/skill-creator/scripts/improve_description.py +247 -0
- package/dist/workspace-defaults/files/skills/skill-creator/scripts/package_skill.py +136 -0
- package/dist/workspace-defaults/files/skills/skill-creator/scripts/quick_validate.py +103 -0
- package/dist/workspace-defaults/files/skills/skill-creator/scripts/run_eval.py +310 -0
- package/dist/workspace-defaults/files/skills/skill-creator/scripts/run_loop.py +328 -0
- package/dist/workspace-defaults/files/skills/skill-creator/scripts/utils.py +47 -0
- package/package.json +1 -1
- package/dist/terraform/modules/app/agentcore-flue/README.md +0 -58
- package/dist/terraform/modules/app/agentcore-flue/main.tf +0 -323
- package/dist/terraform/modules/app/agentcore-flue/outputs.tf +0 -23
- package/dist/terraform/modules/app/agentcore-flue/variables.tf +0 -97
- package/dist/terraform/modules/app/computer-runtime/README.md +0 -15
- package/dist/terraform/modules/app/computer-runtime/main.tf +0 -406
- package/dist/terraform/modules/app/computer-runtime/outputs.tf +0 -75
- package/dist/terraform/modules/app/computer-runtime/variables.tf +0 -66
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
-- Purpose: add tenant-scoped Bedrock model catalog state.
|
|
2
|
+
-- Plan: docs/plans/2026-06-09-001-feat-tenant-model-catalog-plan.md U1
|
|
3
|
+
-- Apply manually (no CI migration runner):
|
|
4
|
+
-- psql "$DATABASE_URL" -v ON_ERROR_STOP=1 -f packages/database-pg/drizzle/0155_tenant_model_catalog.sql
|
|
5
|
+
-- Pre-flight:
|
|
6
|
+
-- SELECT count(*) FROM public.model_catalog;
|
|
7
|
+
-- SELECT count(*) FROM public.tenants;
|
|
8
|
+
-- creates: public.tenant_model_catalog
|
|
9
|
+
-- creates: public.idx_tenant_model_catalog_tenant_enabled
|
|
10
|
+
-- creates: public.idx_tenant_model_catalog_model
|
|
11
|
+
-- creates-constraint: public.tenant_model_catalog.tenant_model_catalog_pkey
|
|
12
|
+
-- creates-constraint: public.tenant_model_catalog.tenant_model_catalog_tenant_id_tenants_id_fk
|
|
13
|
+
-- creates-constraint: public.tenant_model_catalog.tenant_model_catalog_model_id_model_catalog_model_id_fk
|
|
14
|
+
-- creates-constraint: public.tenant_model_catalog.tenant_model_catalog_imported_by_user_id_users_id_fk
|
|
15
|
+
-- creates-constraint: public.tenant_model_catalog.tenant_model_catalog_pricing_status_allowed
|
|
16
|
+
-- creates-constraint: public.tenant_model_catalog.tenant_model_catalog_enabled_requires_resolved_pricing
|
|
17
|
+
|
|
18
|
+
\set ON_ERROR_STOP on
|
|
19
|
+
|
|
20
|
+
SET lock_timeout = '5s';
|
|
21
|
+
SET statement_timeout = '15min';
|
|
22
|
+
|
|
23
|
+
SELECT pg_advisory_lock(hashtext('migration:0155_tenant_model_catalog'));
|
|
24
|
+
|
|
25
|
+
CREATE TABLE IF NOT EXISTS public.tenant_model_catalog (
|
|
26
|
+
tenant_id uuid NOT NULL,
|
|
27
|
+
model_id text NOT NULL,
|
|
28
|
+
display_name text NOT NULL,
|
|
29
|
+
enabled boolean NOT NULL DEFAULT false,
|
|
30
|
+
pricing_status text NOT NULL DEFAULT 'missing',
|
|
31
|
+
pricing_source text,
|
|
32
|
+
pricing_diagnostics jsonb NOT NULL DEFAULT '{}'::jsonb,
|
|
33
|
+
last_priced_at timestamptz,
|
|
34
|
+
import_source text NOT NULL DEFAULT 'backfill',
|
|
35
|
+
import_payload jsonb NOT NULL DEFAULT '{}'::jsonb,
|
|
36
|
+
imported_by_user_id uuid,
|
|
37
|
+
imported_at timestamptz NOT NULL DEFAULT now(),
|
|
38
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
39
|
+
updated_at timestamptz NOT NULL DEFAULT now(),
|
|
40
|
+
CONSTRAINT tenant_model_catalog_pkey
|
|
41
|
+
PRIMARY KEY (tenant_id, model_id),
|
|
42
|
+
CONSTRAINT tenant_model_catalog_tenant_id_tenants_id_fk
|
|
43
|
+
FOREIGN KEY (tenant_id)
|
|
44
|
+
REFERENCES public.tenants(id)
|
|
45
|
+
ON DELETE CASCADE,
|
|
46
|
+
CONSTRAINT tenant_model_catalog_model_id_model_catalog_model_id_fk
|
|
47
|
+
FOREIGN KEY (model_id)
|
|
48
|
+
REFERENCES public.model_catalog(model_id)
|
|
49
|
+
ON DELETE CASCADE,
|
|
50
|
+
CONSTRAINT tenant_model_catalog_imported_by_user_id_users_id_fk
|
|
51
|
+
FOREIGN KEY (imported_by_user_id)
|
|
52
|
+
REFERENCES public.users(id)
|
|
53
|
+
ON DELETE SET NULL,
|
|
54
|
+
CONSTRAINT tenant_model_catalog_pricing_status_allowed
|
|
55
|
+
CHECK (pricing_status IN ('resolved', 'missing', 'ambiguous', 'error')),
|
|
56
|
+
CONSTRAINT tenant_model_catalog_enabled_requires_resolved_pricing
|
|
57
|
+
CHECK (enabled IS FALSE OR pricing_status = 'resolved')
|
|
58
|
+
);
|
|
59
|
+
|
|
60
|
+
CREATE INDEX IF NOT EXISTS idx_tenant_model_catalog_tenant_enabled
|
|
61
|
+
ON public.tenant_model_catalog (tenant_id, enabled);
|
|
62
|
+
|
|
63
|
+
CREATE INDEX IF NOT EXISTS idx_tenant_model_catalog_model
|
|
64
|
+
ON public.tenant_model_catalog (model_id);
|
|
65
|
+
|
|
66
|
+
WITH referenced_models AS (
|
|
67
|
+
SELECT tenant_id, default_model AS model_id
|
|
68
|
+
FROM public.tenant_settings
|
|
69
|
+
WHERE tenant_id IS NOT NULL
|
|
70
|
+
AND default_model IS NOT NULL
|
|
71
|
+
|
|
72
|
+
UNION
|
|
73
|
+
|
|
74
|
+
SELECT tenant_id, model AS model_id
|
|
75
|
+
FROM public.agents
|
|
76
|
+
WHERE model IS NOT NULL
|
|
77
|
+
AND status <> 'archived'
|
|
78
|
+
|
|
79
|
+
UNION
|
|
80
|
+
|
|
81
|
+
SELECT tenant_id, model AS model_id
|
|
82
|
+
FROM public.agent_templates
|
|
83
|
+
WHERE tenant_id IS NOT NULL
|
|
84
|
+
AND model IS NOT NULL
|
|
85
|
+
|
|
86
|
+
UNION
|
|
87
|
+
|
|
88
|
+
SELECT tenant_id, model_id
|
|
89
|
+
FROM public.agent_profiles
|
|
90
|
+
WHERE model_id IS NOT NULL
|
|
91
|
+
|
|
92
|
+
UNION
|
|
93
|
+
|
|
94
|
+
SELECT tenant_id, model_id
|
|
95
|
+
FROM public.user_model_approvals
|
|
96
|
+
),
|
|
97
|
+
eligible_models AS (
|
|
98
|
+
SELECT DISTINCT
|
|
99
|
+
rm.tenant_id,
|
|
100
|
+
mc.model_id,
|
|
101
|
+
mc.display_name,
|
|
102
|
+
mc.input_cost_per_million,
|
|
103
|
+
mc.output_cost_per_million
|
|
104
|
+
FROM referenced_models rm
|
|
105
|
+
JOIN public.model_catalog mc
|
|
106
|
+
ON mc.model_id = rm.model_id
|
|
107
|
+
AND mc.is_available IS TRUE
|
|
108
|
+
WHERE rm.tenant_id IS NOT NULL
|
|
109
|
+
)
|
|
110
|
+
INSERT INTO public.tenant_model_catalog (
|
|
111
|
+
tenant_id,
|
|
112
|
+
model_id,
|
|
113
|
+
display_name,
|
|
114
|
+
enabled,
|
|
115
|
+
pricing_status,
|
|
116
|
+
pricing_source,
|
|
117
|
+
pricing_diagnostics,
|
|
118
|
+
last_priced_at,
|
|
119
|
+
import_source,
|
|
120
|
+
import_payload
|
|
121
|
+
)
|
|
122
|
+
SELECT
|
|
123
|
+
tenant_id,
|
|
124
|
+
model_id,
|
|
125
|
+
display_name,
|
|
126
|
+
(input_cost_per_million IS NOT NULL AND output_cost_per_million IS NOT NULL) AS enabled,
|
|
127
|
+
CASE
|
|
128
|
+
WHEN input_cost_per_million IS NOT NULL AND output_cost_per_million IS NOT NULL
|
|
129
|
+
THEN 'resolved'
|
|
130
|
+
ELSE 'missing'
|
|
131
|
+
END AS pricing_status,
|
|
132
|
+
CASE
|
|
133
|
+
WHEN input_cost_per_million IS NOT NULL AND output_cost_per_million IS NOT NULL
|
|
134
|
+
THEN 'legacy-model-catalog'
|
|
135
|
+
ELSE NULL
|
|
136
|
+
END AS pricing_source,
|
|
137
|
+
CASE
|
|
138
|
+
WHEN input_cost_per_million IS NOT NULL AND output_cost_per_million IS NOT NULL
|
|
139
|
+
THEN jsonb_build_object('backfilledFrom', 'model_catalog')
|
|
140
|
+
ELSE jsonb_build_object('reason', 'model_catalog_missing_token_costs')
|
|
141
|
+
END AS pricing_diagnostics,
|
|
142
|
+
CASE
|
|
143
|
+
WHEN input_cost_per_million IS NOT NULL AND output_cost_per_million IS NOT NULL
|
|
144
|
+
THEN now()
|
|
145
|
+
ELSE NULL
|
|
146
|
+
END AS last_priced_at,
|
|
147
|
+
'backfill' AS import_source,
|
|
148
|
+
jsonb_build_object('referencedBy', 'existing tenant defaults, agents, profiles, templates, or approvals') AS import_payload
|
|
149
|
+
FROM eligible_models
|
|
150
|
+
ON CONFLICT (tenant_id, model_id) DO NOTHING;
|
|
151
|
+
|
|
152
|
+
SELECT pg_advisory_unlock(hashtext('migration:0155_tenant_model_catalog'));
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
-- Bootstrap credential lease metadata for browser-first customer deployments.
|
|
2
|
+
--
|
|
3
|
+
-- Credential material lives only in AWS Secrets Manager. This table stores
|
|
4
|
+
-- lease metadata, redaction-safe fingerprints, and cleanup state.
|
|
5
|
+
--
|
|
6
|
+
-- creates: public.bootstrap_credential_leases
|
|
7
|
+
-- creates: public.bootstrap_credential_leases_session_idx
|
|
8
|
+
-- creates: public.bootstrap_credential_leases_status_expires_idx
|
|
9
|
+
-- creates: public.bootstrap_credential_leases_secret_arn_uidx
|
|
10
|
+
|
|
11
|
+
CREATE TABLE IF NOT EXISTS "bootstrap_credential_leases" (
|
|
12
|
+
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
13
|
+
"session_id" uuid NOT NULL REFERENCES "customer_deployment_sessions"("id") ON DELETE cascade,
|
|
14
|
+
"status" text NOT NULL DEFAULT 'pending',
|
|
15
|
+
"lease_type" text NOT NULL,
|
|
16
|
+
"secret_arn" text NOT NULL,
|
|
17
|
+
"secret_fingerprint" text NOT NULL,
|
|
18
|
+
"external_id_hash" text,
|
|
19
|
+
"role_arn" text,
|
|
20
|
+
"expires_at" timestamp with time zone NOT NULL,
|
|
21
|
+
"validated_at" timestamp with time zone,
|
|
22
|
+
"in_use_at" timestamp with time zone,
|
|
23
|
+
"transferred_at" timestamp with time zone,
|
|
24
|
+
"revoked_at" timestamp with time zone,
|
|
25
|
+
"failed_cleanup_reason" text,
|
|
26
|
+
"audit_metadata" jsonb NOT NULL DEFAULT '{}'::jsonb,
|
|
27
|
+
"created_at" timestamp with time zone NOT NULL DEFAULT now(),
|
|
28
|
+
"updated_at" timestamp with time zone NOT NULL DEFAULT now(),
|
|
29
|
+
CONSTRAINT "bootstrap_credential_leases_status_allowed" CHECK (
|
|
30
|
+
"status" IN (
|
|
31
|
+
'pending',
|
|
32
|
+
'validated',
|
|
33
|
+
'in_use',
|
|
34
|
+
'transferred',
|
|
35
|
+
'revoked',
|
|
36
|
+
'expired',
|
|
37
|
+
'failed_cleanup'
|
|
38
|
+
)
|
|
39
|
+
),
|
|
40
|
+
CONSTRAINT "bootstrap_credential_leases_type_allowed" CHECK (
|
|
41
|
+
"lease_type" IN ('temporary_credentials', 'assumable_role')
|
|
42
|
+
)
|
|
43
|
+
);
|
|
44
|
+
|
|
45
|
+
CREATE INDEX IF NOT EXISTS "bootstrap_credential_leases_session_idx"
|
|
46
|
+
ON "bootstrap_credential_leases" ("session_id");
|
|
47
|
+
|
|
48
|
+
CREATE INDEX IF NOT EXISTS "bootstrap_credential_leases_status_expires_idx"
|
|
49
|
+
ON "bootstrap_credential_leases" ("status", "expires_at");
|
|
50
|
+
|
|
51
|
+
CREATE UNIQUE INDEX IF NOT EXISTS "bootstrap_credential_leases_secret_arn_uidx"
|
|
52
|
+
ON "bootstrap_credential_leases" ("secret_arn");
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
-- Purpose: admit Hindsight observations as a Knowledge Graph ingest source and
|
|
2
|
+
-- add per-(tenant, bank) incremental cursors for the tenant fan-in.
|
|
3
|
+
-- Plan: docs/plans/2026-06-09-004-feat-cognee-centric-memory-pipeline-plan.md (U4)
|
|
4
|
+
-- Apply manually: psql "$DATABASE_URL" -v ON_ERROR_STOP=1 -f packages/database-pg/drizzle/0157_knowledge_graph_observations_source.sql
|
|
5
|
+
-- creates: public.knowledge_graph_observation_cursors
|
|
6
|
+
-- creates: public.uq_kg_observation_cursors_tenant_bank
|
|
7
|
+
-- creates: public.idx_kg_observation_cursors_tenant
|
|
8
|
+
-- creates-constraint: public.knowledge_graph_ingest_runs.knowledge_graph_ingest_runs_source_kind_allowed
|
|
9
|
+
-- creates-constraint: public.knowledge_graph_ingest_runs.knowledge_graph_ingest_runs_trigger_allowed
|
|
10
|
+
-- creates-constraint: public.knowledge_graph_entities.knowledge_graph_entities_source_kind_allowed
|
|
11
|
+
-- creates-constraint: public.knowledge_graph_relationships.knowledge_graph_relationships_source_kind_allowed
|
|
12
|
+
-- creates-constraint: public.knowledge_graph_evidence.knowledge_graph_evidence_source_kind_allowed
|
|
13
|
+
-- creates-constraint: public.knowledge_graph_evidence.knowledge_graph_evidence_evidence_source_kind_allowed
|
|
14
|
+
|
|
15
|
+
\set ON_ERROR_STOP on
|
|
16
|
+
|
|
17
|
+
BEGIN;
|
|
18
|
+
|
|
19
|
+
SET LOCAL lock_timeout = '5s';
|
|
20
|
+
|
|
21
|
+
-- Source-kind vocabulary gains 'observations'. Constraint re-adds validate
|
|
22
|
+
-- against existing rows; all current rows use thread/wiki/brain, so widening
|
|
23
|
+
-- is safe in either deploy order.
|
|
24
|
+
ALTER TABLE public.knowledge_graph_ingest_runs
|
|
25
|
+
DROP CONSTRAINT IF EXISTS knowledge_graph_ingest_runs_source_kind_allowed;
|
|
26
|
+
ALTER TABLE public.knowledge_graph_ingest_runs
|
|
27
|
+
ADD CONSTRAINT knowledge_graph_ingest_runs_source_kind_allowed
|
|
28
|
+
CHECK (source_kind IN ('thread','wiki','brain','observations'));
|
|
29
|
+
|
|
30
|
+
-- U5's drainer schedules observation runs; 'manual' stays the default.
|
|
31
|
+
ALTER TABLE public.knowledge_graph_ingest_runs
|
|
32
|
+
DROP CONSTRAINT IF EXISTS knowledge_graph_ingest_runs_trigger_allowed;
|
|
33
|
+
ALTER TABLE public.knowledge_graph_ingest_runs
|
|
34
|
+
ADD CONSTRAINT knowledge_graph_ingest_runs_trigger_allowed
|
|
35
|
+
CHECK ("trigger" IN ('manual','scheduled'));
|
|
36
|
+
|
|
37
|
+
ALTER TABLE public.knowledge_graph_entities
|
|
38
|
+
DROP CONSTRAINT IF EXISTS knowledge_graph_entities_source_kind_allowed;
|
|
39
|
+
ALTER TABLE public.knowledge_graph_entities
|
|
40
|
+
ADD CONSTRAINT knowledge_graph_entities_source_kind_allowed
|
|
41
|
+
CHECK (source_kind IN ('thread','wiki','brain','observations'));
|
|
42
|
+
|
|
43
|
+
ALTER TABLE public.knowledge_graph_relationships
|
|
44
|
+
DROP CONSTRAINT IF EXISTS knowledge_graph_relationships_source_kind_allowed;
|
|
45
|
+
ALTER TABLE public.knowledge_graph_relationships
|
|
46
|
+
ADD CONSTRAINT knowledge_graph_relationships_source_kind_allowed
|
|
47
|
+
CHECK (source_kind IN ('thread','wiki','brain','observations'));
|
|
48
|
+
|
|
49
|
+
ALTER TABLE public.knowledge_graph_evidence
|
|
50
|
+
DROP CONSTRAINT IF EXISTS knowledge_graph_evidence_source_kind_allowed;
|
|
51
|
+
ALTER TABLE public.knowledge_graph_evidence
|
|
52
|
+
ADD CONSTRAINT knowledge_graph_evidence_source_kind_allowed
|
|
53
|
+
CHECK (source_kind IN ('thread','wiki','brain','observations'));
|
|
54
|
+
|
|
55
|
+
ALTER TABLE public.knowledge_graph_evidence
|
|
56
|
+
DROP CONSTRAINT IF EXISTS knowledge_graph_evidence_evidence_source_kind_allowed;
|
|
57
|
+
ALTER TABLE public.knowledge_graph_evidence
|
|
58
|
+
ADD CONSTRAINT knowledge_graph_evidence_evidence_source_kind_allowed
|
|
59
|
+
CHECK (evidence_source_kind IN ('thread_message','wiki_page','wiki_section','brain_page','brain_section','hindsight_observation','cognee_payload','normalizer'));
|
|
60
|
+
|
|
61
|
+
-- Per-(tenant, bank) cursors for the observations fan-in. The
|
|
62
|
+
-- (last_record_updated_at, last_record_id) pair mirrors the wiki compile
|
|
63
|
+
-- cursor tiebreaker; cursors advance only in the same transaction as the
|
|
64
|
+
-- mirror snapshot replace.
|
|
65
|
+
CREATE TABLE IF NOT EXISTS public.knowledge_graph_observation_cursors (
|
|
66
|
+
tenant_id uuid NOT NULL REFERENCES public.tenants(id) ON DELETE CASCADE,
|
|
67
|
+
bank_id text NOT NULL,
|
|
68
|
+
last_record_updated_at timestamptz,
|
|
69
|
+
last_record_id text,
|
|
70
|
+
updated_at timestamptz NOT NULL DEFAULT now()
|
|
71
|
+
);
|
|
72
|
+
|
|
73
|
+
CREATE UNIQUE INDEX IF NOT EXISTS uq_kg_observation_cursors_tenant_bank
|
|
74
|
+
ON public.knowledge_graph_observation_cursors (tenant_id, bank_id);
|
|
75
|
+
|
|
76
|
+
CREATE INDEX IF NOT EXISTS idx_kg_observation_cursors_tenant
|
|
77
|
+
ON public.knowledge_graph_observation_cursors (tenant_id);
|
|
78
|
+
|
|
79
|
+
COMMIT;
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
-- Purpose: add pending_user_questions for the ask_user_question HITL flow —
|
|
2
|
+
-- one row per question batch the parent agent asks; answer state lives on
|
|
3
|
+
-- this row (never mutated into the message's parts payload). The partial
|
|
4
|
+
-- unique index enforces one `pending` batch per thread (R8) so the intake
|
|
5
|
+
-- endpoint can return 409 on conflict.
|
|
6
|
+
-- Plan: docs/plans/2026-06-09-005-feat-ask-user-question-plan.md U1
|
|
7
|
+
-- Apply manually (no CI migration runner):
|
|
8
|
+
-- psql "$DATABASE_URL" -v ON_ERROR_STOP=1 -f packages/database-pg/drizzle/0158_pending_user_questions.sql
|
|
9
|
+
-- creates: public.pending_user_questions
|
|
10
|
+
-- creates: public.pending_user_questions_one_pending_per_thread
|
|
11
|
+
-- creates: public.idx_pending_user_questions_tenant
|
|
12
|
+
-- creates: public.idx_pending_user_questions_thread_status
|
|
13
|
+
-- creates: public.idx_pending_user_questions_message
|
|
14
|
+
-- creates-constraint: public.pending_user_questions.pending_user_questions_tenant_id_tenants_id_fk
|
|
15
|
+
-- creates-constraint: public.pending_user_questions.pending_user_questions_thread_id_threads_id_fk
|
|
16
|
+
-- creates-constraint: public.pending_user_questions.pending_user_questions_message_id_messages_id_fk
|
|
17
|
+
-- creates-constraint: public.pending_user_questions.pending_user_questions_thread_turn_id_thread_turns_id_fk
|
|
18
|
+
-- creates-constraint: public.pending_user_questions.pending_user_questions_status_allowed
|
|
19
|
+
-- creates-constraint: public.pending_user_questions.pending_user_questions_answered_via_allowed
|
|
20
|
+
|
|
21
|
+
\set ON_ERROR_STOP on
|
|
22
|
+
|
|
23
|
+
SET lock_timeout = '5s';
|
|
24
|
+
SET statement_timeout = '15min';
|
|
25
|
+
|
|
26
|
+
SELECT pg_advisory_lock(hashtext('migration:0158_pending_user_questions'));
|
|
27
|
+
|
|
28
|
+
CREATE TABLE IF NOT EXISTS public.pending_user_questions (
|
|
29
|
+
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
30
|
+
tenant_id uuid NOT NULL,
|
|
31
|
+
thread_id uuid NOT NULL,
|
|
32
|
+
message_id uuid NOT NULL,
|
|
33
|
+
thread_turn_id uuid NOT NULL,
|
|
34
|
+
status text NOT NULL DEFAULT 'pending',
|
|
35
|
+
questions jsonb NOT NULL,
|
|
36
|
+
answers jsonb,
|
|
37
|
+
answered_via text,
|
|
38
|
+
answered_by text,
|
|
39
|
+
answered_at timestamptz,
|
|
40
|
+
delegation_context jsonb,
|
|
41
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
42
|
+
CONSTRAINT pending_user_questions_tenant_id_tenants_id_fk
|
|
43
|
+
FOREIGN KEY (tenant_id)
|
|
44
|
+
REFERENCES public.tenants(id)
|
|
45
|
+
ON DELETE CASCADE,
|
|
46
|
+
CONSTRAINT pending_user_questions_thread_id_threads_id_fk
|
|
47
|
+
FOREIGN KEY (thread_id)
|
|
48
|
+
REFERENCES public.threads(id)
|
|
49
|
+
ON DELETE CASCADE,
|
|
50
|
+
CONSTRAINT pending_user_questions_message_id_messages_id_fk
|
|
51
|
+
FOREIGN KEY (message_id)
|
|
52
|
+
REFERENCES public.messages(id)
|
|
53
|
+
ON DELETE CASCADE,
|
|
54
|
+
CONSTRAINT pending_user_questions_thread_turn_id_thread_turns_id_fk
|
|
55
|
+
FOREIGN KEY (thread_turn_id)
|
|
56
|
+
REFERENCES public.thread_turns(id),
|
|
57
|
+
CONSTRAINT pending_user_questions_status_allowed
|
|
58
|
+
CHECK (status IN ('pending', 'answered', 'cancelled')),
|
|
59
|
+
CONSTRAINT pending_user_questions_answered_via_allowed
|
|
60
|
+
CHECK (answered_via IS NULL OR answered_via IN ('card', 'reply'))
|
|
61
|
+
);
|
|
62
|
+
|
|
63
|
+
-- R8: at most one pending question batch per thread; the intake endpoint
|
|
64
|
+
-- surfaces violations as 409.
|
|
65
|
+
CREATE UNIQUE INDEX IF NOT EXISTS pending_user_questions_one_pending_per_thread
|
|
66
|
+
ON public.pending_user_questions (thread_id)
|
|
67
|
+
WHERE status = 'pending';
|
|
68
|
+
|
|
69
|
+
CREATE INDEX IF NOT EXISTS idx_pending_user_questions_tenant
|
|
70
|
+
ON public.pending_user_questions (tenant_id);
|
|
71
|
+
|
|
72
|
+
CREATE INDEX IF NOT EXISTS idx_pending_user_questions_thread_status
|
|
73
|
+
ON public.pending_user_questions (thread_id, status);
|
|
74
|
+
|
|
75
|
+
-- Message.userQuestion resolves by message id; the messages.id FK cascade
|
|
76
|
+
-- also needs this to avoid a sequential scan on message deletes.
|
|
77
|
+
CREATE INDEX IF NOT EXISTS idx_pending_user_questions_message
|
|
78
|
+
ON public.pending_user_questions (message_id);
|
|
79
|
+
|
|
80
|
+
SELECT pg_advisory_unlock(hashtext('migration:0158_pending_user_questions'));
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
-- Purpose: relax the wiki owner-scope covenant for tenant-scoped pages —
|
|
2
|
+
-- `owner_id` becomes nullable on wiki.pages AND wiki.compile_jobs
|
|
3
|
+
-- (graph-mode compile jobs are tenant-keyed), and a partial unique
|
|
4
|
+
-- index enforces (tenant_id, type, slug) uniqueness for null-owner
|
|
5
|
+
-- pages (the existing four-column unique treats NULLs as distinct
|
|
6
|
+
-- and would silently allow duplicate tenant pages).
|
|
7
|
+
-- Purely additive: nothing drops, no data changes. User-scoped
|
|
8
|
+
-- pages keep their owner_id; the U11 cutover archive pass is a
|
|
9
|
+
-- separate, later migration.
|
|
10
|
+
-- Plan: docs/plans/2026-06-09-004-feat-cognee-centric-memory-pipeline-plan.md (U9)
|
|
11
|
+
-- Apply manually: psql "$DATABASE_URL" -v ON_ERROR_STOP=1 -f packages/database-pg/drizzle/0158_wiki_tenant_scope.sql
|
|
12
|
+
-- creates: wiki.uq_pages_tenant_type_slug_tenant_scope
|
|
13
|
+
-- Note: the two ALTER COLUMN ... DROP NOT NULL statements (wiki.pages.owner_id,
|
|
14
|
+
-- wiki.compile_jobs.owner_id) have no drift-reporter marker convention —
|
|
15
|
+
-- nullability changes aren't object creations. They are idempotent.
|
|
16
|
+
|
|
17
|
+
\set ON_ERROR_STOP on
|
|
18
|
+
|
|
19
|
+
BEGIN;
|
|
20
|
+
|
|
21
|
+
SET LOCAL lock_timeout = '5s';
|
|
22
|
+
|
|
23
|
+
-- Tenant-scoped pages carry owner_id NULL (graph→wiki materializer).
|
|
24
|
+
ALTER TABLE wiki.pages
|
|
25
|
+
ALTER COLUMN owner_id DROP NOT NULL;
|
|
26
|
+
|
|
27
|
+
-- Graph-mode compile jobs are tenant-keyed — same covenant change.
|
|
28
|
+
ALTER TABLE wiki.compile_jobs
|
|
29
|
+
ALTER COLUMN owner_id DROP NOT NULL;
|
|
30
|
+
|
|
31
|
+
-- Integrity-load-bearing: uq_pages_tenant_owner_type_slug treats NULL
|
|
32
|
+
-- owner_id as distinct, so duplicate (tenant, type, slug) tenant pages
|
|
33
|
+
-- would otherwise insert silently. All existing indexes stay untouched.
|
|
34
|
+
CREATE UNIQUE INDEX IF NOT EXISTS uq_pages_tenant_type_slug_tenant_scope
|
|
35
|
+
ON wiki.pages (tenant_id, type, slug)
|
|
36
|
+
WHERE owner_id IS NULL;
|
|
37
|
+
|
|
38
|
+
COMMIT;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
-- Purpose: space-local Agent Profiles (dynamic workspace U7). Profiles defined
|
|
2
|
+
-- under a Space source's agents/ folder project into agent_profiles scoped to
|
|
3
|
+
-- that Space via source_space_id (NULL = central/agent-source profile). Slug
|
|
4
|
+
-- uniqueness becomes per-origin: central keeps tenant+slug uniqueness, while
|
|
5
|
+
-- space-local rows are unique per (tenant, slug, source_space_id) so a
|
|
6
|
+
-- space-local slug may intentionally shadow a central one while its Space is
|
|
7
|
+
-- active.
|
|
8
|
+
-- Plan: docs/plans/2026-06-12-002-feat-dynamic-workspace-plan.md U7
|
|
9
|
+
-- Apply manually (no CI migration runner):
|
|
10
|
+
-- psql "$DATABASE_URL" -v ON_ERROR_STOP=1 -f packages/database-pg/drizzle/0159_agent_profiles_space_local.sql
|
|
11
|
+
-- creates-column: public.agent_profiles.source_space_id
|
|
12
|
+
-- creates-constraint: public.agent_profiles.agent_profiles_source_space_id_spaces_id_fk
|
|
13
|
+
-- creates: public.uq_agent_profiles_tenant_slug
|
|
14
|
+
-- creates: public.uq_agent_profiles_tenant_slug_source_space
|
|
15
|
+
|
|
16
|
+
\set ON_ERROR_STOP on
|
|
17
|
+
|
|
18
|
+
SET lock_timeout = '5s';
|
|
19
|
+
SET statement_timeout = '15min';
|
|
20
|
+
|
|
21
|
+
SELECT pg_advisory_lock(hashtext('migration:0159_agent_profiles_space_local'));
|
|
22
|
+
|
|
23
|
+
ALTER TABLE public.agent_profiles
|
|
24
|
+
ADD COLUMN IF NOT EXISTS source_space_id uuid;
|
|
25
|
+
|
|
26
|
+
DO $$
|
|
27
|
+
BEGIN
|
|
28
|
+
ALTER TABLE public.agent_profiles
|
|
29
|
+
ADD CONSTRAINT agent_profiles_source_space_id_spaces_id_fk
|
|
30
|
+
FOREIGN KEY (source_space_id)
|
|
31
|
+
REFERENCES public.spaces(id)
|
|
32
|
+
ON DELETE CASCADE;
|
|
33
|
+
EXCEPTION
|
|
34
|
+
WHEN duplicate_object THEN NULL;
|
|
35
|
+
END $$;
|
|
36
|
+
|
|
37
|
+
-- Recreate the tenant+slug uniqueness as a partial index over central rows
|
|
38
|
+
-- only; space-local rows get their own per-Space uniqueness.
|
|
39
|
+
DROP INDEX IF EXISTS uq_agent_profiles_tenant_slug;
|
|
40
|
+
|
|
41
|
+
CREATE UNIQUE INDEX IF NOT EXISTS uq_agent_profiles_tenant_slug
|
|
42
|
+
ON public.agent_profiles (tenant_id, slug)
|
|
43
|
+
WHERE source_space_id IS NULL;
|
|
44
|
+
|
|
45
|
+
CREATE UNIQUE INDEX IF NOT EXISTS uq_agent_profiles_tenant_slug_source_space
|
|
46
|
+
ON public.agent_profiles (tenant_id, slug, source_space_id)
|
|
47
|
+
WHERE source_space_id IS NOT NULL;
|
|
48
|
+
|
|
49
|
+
SELECT pg_advisory_unlock(hashtext('migration:0159_agent_profiles_space_local'));
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
-- Purpose: add the application-plugin engine tables — canonical install,
|
|
2
|
+
-- component, and user-activation state for the plugin system. Installs pin
|
|
3
|
+
-- a catalog version + payload sha256; components carry handler linkage
|
|
4
|
+
-- (handler_ref) for read-time reconciliation against deployment jobs;
|
|
5
|
+
-- activations hold one app-level OAuth grant per (user, install) with one
|
|
6
|
+
-- token record per RFC 8707 resource indicator. Also adds the
|
|
7
|
+
-- tenant_mcp_servers.plugin_install_id ownership column for plugin-managed
|
|
8
|
+
-- MCP rows.
|
|
9
|
+
-- Plan: docs/plans/2026-06-12-001-feat-application-plugins-plan.md U4
|
|
10
|
+
-- Apply manually (no CI migration runner):
|
|
11
|
+
-- psql "$DATABASE_URL" -v ON_ERROR_STOP=1 -f packages/database-pg/drizzle/0159_application_plugins.sql
|
|
12
|
+
-- Pre-flight:
|
|
13
|
+
-- SELECT count(*) FROM public.tenants;
|
|
14
|
+
-- SELECT count(*) FROM public.users;
|
|
15
|
+
-- SELECT count(*) FROM public.tenant_mcp_servers;
|
|
16
|
+
-- creates: public.plugin_installs
|
|
17
|
+
-- creates: public.plugin_components
|
|
18
|
+
-- creates: public.user_plugin_activations
|
|
19
|
+
-- creates: public.user_plugin_activation_tokens
|
|
20
|
+
-- creates: public.uq_plugin_installs_tenant_plugin
|
|
21
|
+
-- creates: public.idx_plugin_installs_tenant_state
|
|
22
|
+
-- creates: public.uq_plugin_components_install_key
|
|
23
|
+
-- creates: public.idx_plugin_components_install
|
|
24
|
+
-- creates: public.uq_user_plugin_activations
|
|
25
|
+
-- creates: public.idx_user_plugin_activations_install
|
|
26
|
+
-- creates: public.uq_user_plugin_activation_tokens_resource
|
|
27
|
+
-- creates-column: public.tenant_mcp_servers.plugin_install_id
|
|
28
|
+
-- creates-constraint: public.plugin_installs.plugin_installs_pkey
|
|
29
|
+
-- creates-constraint: public.plugin_installs.plugin_installs_tenant_id_tenants_id_fk
|
|
30
|
+
-- creates-constraint: public.plugin_installs.plugin_installs_state_allowed
|
|
31
|
+
-- creates-constraint: public.plugin_components.plugin_components_pkey
|
|
32
|
+
-- creates-constraint: public.plugin_components.plugin_components_plugin_install_id_plugin_installs_id_fk
|
|
33
|
+
-- creates-constraint: public.plugin_components.plugin_components_state_allowed
|
|
34
|
+
-- creates-constraint: public.plugin_components.plugin_components_type_allowed
|
|
35
|
+
-- creates-constraint: public.user_plugin_activations.user_plugin_activations_pkey
|
|
36
|
+
-- creates-constraint: public.user_plugin_activations.user_plugin_activations_user_id_users_id_fk
|
|
37
|
+
-- creates-constraint: public.user_plugin_activations.user_plugin_activations_plugin_install_id_plugin_installs_id_fk
|
|
38
|
+
-- creates-constraint: public.user_plugin_activations.user_plugin_activations_status_allowed
|
|
39
|
+
-- creates-constraint: public.user_plugin_activation_tokens.user_plugin_activation_tokens_pkey
|
|
40
|
+
-- creates-constraint: public.user_plugin_activation_tokens.user_plugin_activation_tokens_activation_id_fk
|
|
41
|
+
-- creates-constraint: public.user_plugin_activation_tokens.user_plugin_activation_tokens_status_allowed
|
|
42
|
+
-- creates-constraint: public.tenant_mcp_servers.tenant_mcp_servers_plugin_install_id_plugin_installs_id_fk
|
|
43
|
+
|
|
44
|
+
\set ON_ERROR_STOP on
|
|
45
|
+
|
|
46
|
+
SET lock_timeout = '5s';
|
|
47
|
+
SET statement_timeout = '15min';
|
|
48
|
+
|
|
49
|
+
SELECT pg_advisory_lock(hashtext('migration:0159_application_plugins'));
|
|
50
|
+
|
|
51
|
+
-- ---------------------------------------------------------------------------
|
|
52
|
+
-- plugin_installs — one row per (tenant, plugin); pins the catalog version
|
|
53
|
+
-- ---------------------------------------------------------------------------
|
|
54
|
+
|
|
55
|
+
CREATE TABLE IF NOT EXISTS public.plugin_installs (
|
|
56
|
+
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
57
|
+
tenant_id uuid NOT NULL,
|
|
58
|
+
plugin_key text NOT NULL,
|
|
59
|
+
pinned_version text NOT NULL,
|
|
60
|
+
pinned_payload_sha256 text NOT NULL,
|
|
61
|
+
state text NOT NULL DEFAULT 'installing',
|
|
62
|
+
idempotency_key text NOT NULL,
|
|
63
|
+
last_transition_at timestamptz NOT NULL DEFAULT now(),
|
|
64
|
+
last_error text,
|
|
65
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
66
|
+
updated_at timestamptz NOT NULL DEFAULT now(),
|
|
67
|
+
CONSTRAINT plugin_installs_tenant_id_tenants_id_fk
|
|
68
|
+
FOREIGN KEY (tenant_id)
|
|
69
|
+
REFERENCES public.tenants(id)
|
|
70
|
+
ON DELETE CASCADE,
|
|
71
|
+
CONSTRAINT plugin_installs_state_allowed
|
|
72
|
+
CHECK (state IN ('installing', 'awaiting_approval', 'installed', 'partially_installed', 'failed', 'uninstalling'))
|
|
73
|
+
);
|
|
74
|
+
|
|
75
|
+
CREATE UNIQUE INDEX IF NOT EXISTS uq_plugin_installs_tenant_plugin
|
|
76
|
+
ON public.plugin_installs (tenant_id, plugin_key);
|
|
77
|
+
|
|
78
|
+
CREATE INDEX IF NOT EXISTS idx_plugin_installs_tenant_state
|
|
79
|
+
ON public.plugin_installs (tenant_id, state);
|
|
80
|
+
|
|
81
|
+
-- ---------------------------------------------------------------------------
|
|
82
|
+
-- plugin_components — per-component provisioning state under an install
|
|
83
|
+
-- ---------------------------------------------------------------------------
|
|
84
|
+
|
|
85
|
+
CREATE TABLE IF NOT EXISTS public.plugin_components (
|
|
86
|
+
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
87
|
+
plugin_install_id uuid NOT NULL,
|
|
88
|
+
component_key text NOT NULL,
|
|
89
|
+
component_type text NOT NULL,
|
|
90
|
+
state text NOT NULL DEFAULT 'pending',
|
|
91
|
+
handler_ref jsonb NOT NULL DEFAULT '{}'::jsonb,
|
|
92
|
+
last_error text,
|
|
93
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
94
|
+
updated_at timestamptz NOT NULL DEFAULT now(),
|
|
95
|
+
CONSTRAINT plugin_components_plugin_install_id_plugin_installs_id_fk
|
|
96
|
+
FOREIGN KEY (plugin_install_id)
|
|
97
|
+
REFERENCES public.plugin_installs(id)
|
|
98
|
+
ON DELETE CASCADE,
|
|
99
|
+
CONSTRAINT plugin_components_state_allowed
|
|
100
|
+
CHECK (state IN ('pending', 'provisioned', 'failed')),
|
|
101
|
+
CONSTRAINT plugin_components_type_allowed
|
|
102
|
+
CHECK (component_type IN ('mcp-server', 'skills', 'infrastructure', 'ui-surface'))
|
|
103
|
+
);
|
|
104
|
+
|
|
105
|
+
CREATE UNIQUE INDEX IF NOT EXISTS uq_plugin_components_install_key
|
|
106
|
+
ON public.plugin_components (plugin_install_id, component_key);
|
|
107
|
+
|
|
108
|
+
CREATE INDEX IF NOT EXISTS idx_plugin_components_install
|
|
109
|
+
ON public.plugin_components (plugin_install_id);
|
|
110
|
+
|
|
111
|
+
-- ---------------------------------------------------------------------------
|
|
112
|
+
-- user_plugin_activations — one app-level OAuth grant per (user, install)
|
|
113
|
+
-- ---------------------------------------------------------------------------
|
|
114
|
+
|
|
115
|
+
CREATE TABLE IF NOT EXISTS public.user_plugin_activations (
|
|
116
|
+
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
117
|
+
user_id uuid NOT NULL,
|
|
118
|
+
plugin_install_id uuid NOT NULL,
|
|
119
|
+
status text NOT NULL DEFAULT 'active',
|
|
120
|
+
granted_scopes jsonb NOT NULL DEFAULT '[]'::jsonb,
|
|
121
|
+
granted_at timestamptz NOT NULL DEFAULT now(),
|
|
122
|
+
revoked_at timestamptz,
|
|
123
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
124
|
+
updated_at timestamptz NOT NULL DEFAULT now(),
|
|
125
|
+
CONSTRAINT user_plugin_activations_user_id_users_id_fk
|
|
126
|
+
FOREIGN KEY (user_id)
|
|
127
|
+
REFERENCES public.users(id)
|
|
128
|
+
ON DELETE CASCADE,
|
|
129
|
+
CONSTRAINT user_plugin_activations_plugin_install_id_plugin_installs_id_fk
|
|
130
|
+
FOREIGN KEY (plugin_install_id)
|
|
131
|
+
REFERENCES public.plugin_installs(id)
|
|
132
|
+
ON DELETE CASCADE,
|
|
133
|
+
CONSTRAINT user_plugin_activations_status_allowed
|
|
134
|
+
CHECK (status IN ('active', 'needs_reauth', 'revoked'))
|
|
135
|
+
);
|
|
136
|
+
|
|
137
|
+
-- Doubles as the dispatch-time activation lookup (user_id, plugin_install_id).
|
|
138
|
+
CREATE UNIQUE INDEX IF NOT EXISTS uq_user_plugin_activations
|
|
139
|
+
ON public.user_plugin_activations (user_id, plugin_install_id);
|
|
140
|
+
|
|
141
|
+
-- activatedUserCount: count of 'active' activations per install.
|
|
142
|
+
CREATE INDEX IF NOT EXISTS idx_user_plugin_activations_install
|
|
143
|
+
ON public.user_plugin_activations (plugin_install_id);
|
|
144
|
+
|
|
145
|
+
-- ---------------------------------------------------------------------------
|
|
146
|
+
-- user_plugin_activation_tokens — one token record per resource indicator
|
|
147
|
+
-- ---------------------------------------------------------------------------
|
|
148
|
+
|
|
149
|
+
CREATE TABLE IF NOT EXISTS public.user_plugin_activation_tokens (
|
|
150
|
+
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
151
|
+
activation_id uuid NOT NULL,
|
|
152
|
+
resource_indicator text NOT NULL,
|
|
153
|
+
secret_ref text NOT NULL,
|
|
154
|
+
status text NOT NULL DEFAULT 'active',
|
|
155
|
+
expires_at timestamptz,
|
|
156
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
157
|
+
updated_at timestamptz NOT NULL DEFAULT now(),
|
|
158
|
+
-- Explicit short name: the drizzle-derived name exceeds Postgres's 63-char
|
|
159
|
+
-- identifier limit (matches the foreignKey() name in src/schema/plugins.ts).
|
|
160
|
+
CONSTRAINT user_plugin_activation_tokens_activation_id_fk
|
|
161
|
+
FOREIGN KEY (activation_id)
|
|
162
|
+
REFERENCES public.user_plugin_activations(id)
|
|
163
|
+
ON DELETE CASCADE,
|
|
164
|
+
CONSTRAINT user_plugin_activation_tokens_status_allowed
|
|
165
|
+
CHECK (status IN ('active', 'expired', 'revoked'))
|
|
166
|
+
);
|
|
167
|
+
|
|
168
|
+
CREATE UNIQUE INDEX IF NOT EXISTS uq_user_plugin_activation_tokens_resource
|
|
169
|
+
ON public.user_plugin_activation_tokens (activation_id, resource_indicator);
|
|
170
|
+
|
|
171
|
+
-- ---------------------------------------------------------------------------
|
|
172
|
+
-- tenant_mcp_servers.plugin_install_id — plugin ownership marker
|
|
173
|
+
-- ---------------------------------------------------------------------------
|
|
174
|
+
|
|
175
|
+
ALTER TABLE public.tenant_mcp_servers
|
|
176
|
+
ADD COLUMN IF NOT EXISTS plugin_install_id uuid;
|
|
177
|
+
|
|
178
|
+
DO $$
|
|
179
|
+
BEGIN
|
|
180
|
+
IF NOT EXISTS (
|
|
181
|
+
SELECT 1 FROM pg_constraint
|
|
182
|
+
WHERE conname = 'tenant_mcp_servers_plugin_install_id_plugin_installs_id_fk'
|
|
183
|
+
AND conrelid = 'public.tenant_mcp_servers'::regclass
|
|
184
|
+
) THEN
|
|
185
|
+
ALTER TABLE public.tenant_mcp_servers
|
|
186
|
+
ADD CONSTRAINT tenant_mcp_servers_plugin_install_id_plugin_installs_id_fk
|
|
187
|
+
FOREIGN KEY (plugin_install_id)
|
|
188
|
+
REFERENCES public.plugin_installs(id)
|
|
189
|
+
ON DELETE SET NULL;
|
|
190
|
+
END IF;
|
|
191
|
+
END $$;
|
|
192
|
+
|
|
193
|
+
SELECT pg_advisory_unlock(hashtext('migration:0159_application_plugins'));
|