thinkwork-cli 0.12.11 → 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.
Files changed (474) hide show
  1. package/README.md +42 -38
  2. package/dist/{api-client-ASJWIG3Z.js → api-client-4VT3FWOH.js} +1 -1
  3. package/dist/{chunk-JEHV35EU.js → chunk-H7AB42ES.js} +340 -30
  4. package/dist/cli.js +22157 -9229
  5. package/dist/commands/enterprise/templates/deploy-repo/.github/workflows/deploy.yml +17 -6
  6. package/dist/commands/enterprise/templates/deploy-repo/docs/runbook.md +81 -9
  7. package/dist/commands/enterprise/templates/deploy-repo/scripts/apply-release.mjs +183 -21
  8. package/dist/commands/enterprise/templates/deploy-repo/scripts/smoke.mjs +1 -2
  9. package/dist/commands/enterprise/templates/deploy-repo/terraform/main.tf +286 -0
  10. package/dist/drizzle/0000_petite_marvel_apes.sql +1188 -0
  11. package/dist/drizzle/0001_milky_surge.sql +103 -0
  12. package/dist/drizzle/0002_aberrant_mattie_franklin.sql +41 -0
  13. package/dist/drizzle/0003_exotic_ogun.sql +3 -0
  14. package/dist/drizzle/0004_glamorous_magneto.sql +2 -0
  15. package/dist/drizzle/0005_ancient_nocturne.sql +2 -0
  16. package/dist/drizzle/0006_new_colonel_america.sql +2 -0
  17. package/dist/drizzle/0007_unique_external_task_id.sql +31 -0
  18. package/dist/drizzle/0008_external_task_id_column.sql +43 -0
  19. package/dist/drizzle/0009_evaluations.sql +64 -0
  20. package/dist/drizzle/0010_eval_agent_template.sql +2 -0
  21. package/dist/drizzle/0011_eval_run_template.sql +2 -0
  22. package/dist/drizzle/0012_eval_seed_unique.sql +16 -0
  23. package/dist/drizzle/0013_motionless_white_queen.sql +140 -0
  24. package/dist/drizzle/0014_wiki_aggregation.sql +11 -0
  25. package/dist/drizzle/0015_pg_trgm_alias_title_indexes.sql +9 -0
  26. package/dist/drizzle/0016_wiki_schema_drops.sql +24 -0
  27. package/dist/drizzle/0017_wiki_places.sql +46 -0
  28. package/dist/drizzle/0018_agent_workspace_overlay.sql +26 -0
  29. package/dist/drizzle/0018_cool_firebird.sql +24 -0
  30. package/dist/drizzle/0018_skill_runs.sql +84 -0
  31. package/dist/drizzle/0019_condemned_dragon_man.sql +95 -0
  32. package/dist/drizzle/0019_webhook_skill_runs.sql +58 -0
  33. package/dist/drizzle/0020_crazy_the_anarchist.sql +9 -0
  34. package/dist/drizzle/0020_mutation_idempotency.sql +64 -0
  35. package/dist/drizzle/0021_crm_work_links.sql +76 -0
  36. package/dist/drizzle/0021_skill_runs_completion_hmac.sql +33 -0
  37. package/dist/drizzle/0022_add_billing_tables.sql +70 -0
  38. package/dist/drizzle/0022_seed_thinkwork_admin_permissions.sql +160 -0
  39. package/dist/drizzle/0022_stripe_billing_indexes.sql +48 -0
  40. package/dist/drizzle/0023_tenants_deactivation.sql +27 -0
  41. package/dist/drizzle/0024_tenant_mcp_admin_keys.sql +63 -0
  42. package/dist/drizzle/0025_v1_agent_architecture.sql +182 -0
  43. package/dist/drizzle/0026_thread_turns_add_kind.sql +28 -0
  44. package/dist/drizzle/0027_capability_catalog_and_manifests.sql +219 -0
  45. package/dist/drizzle/0028_aws_s3_extension.sql +26 -0
  46. package/dist/drizzle/0029_collapse_execution_types.sql +42 -0
  47. package/dist/drizzle/0030_retire_composition_primitives.sql +48 -0
  48. package/dist/drizzle/0031_thread_cleanup_drops.sql +131 -0
  49. package/dist/drizzle/0032_add_browser_automation_template_config.sql +24 -0
  50. package/dist/drizzle/0033_agent_operation_leases.sql +32 -0
  51. package/dist/drizzle/0034_agent_workspace_events.sql +116 -0
  52. package/dist/drizzle/0035_workspace_review_decisions.sql +19 -0
  53. package/dist/drizzle/0036_user_scoped_memory_wiki.sql +152 -0
  54. package/dist/drizzle/0037_user_profile_operating_model.sql +34 -0
  55. package/dist/drizzle/0042_agent_runtime_selector.sql +41 -0
  56. package/dist/drizzle/0043_wiki_search_tsv_tokenization.sql +48 -0
  57. package/dist/drizzle/0044_add_web_search_template_config.sql +7 -0
  58. package/dist/drizzle/0045_add_send_email_template_config.sql +7 -0
  59. package/dist/drizzle/0046_tenant_mcp_context_tools.sql +26 -0
  60. package/dist/drizzle/0047_add_context_engine_template_config.sql +7 -0
  61. package/dist/drizzle/0048_tenant_context_provider_settings.sql +22 -0
  62. package/dist/drizzle/0050_brain_v0_entity_subtype.sql +29 -0
  63. package/dist/drizzle/0051_brain_v0_tenant_entity_pages.sql +170 -0
  64. package/dist/drizzle/0052_brain_v0_external_refs.sql +41 -0
  65. package/dist/drizzle/0053_brain_v0_unresolved_mentions_subtype.sql +48 -0
  66. package/dist/drizzle/0054_wiki_compile_jobs_input.sql +28 -0
  67. package/dist/drizzle/0055_routines_stepfunctions_substrate.sql +202 -0
  68. package/dist/drizzle/0056_routine_step_events_dedup_idx.sql +25 -0
  69. package/dist/drizzle/0057_archive_legacy_python_routines.sql +36 -0
  70. package/dist/drizzle/0058_routines_visibility_and_owning_agent.sql +61 -0
  71. package/dist/drizzle/0061_routine_execution_asl_version_id.sql +29 -0
  72. package/dist/drizzle/0062_migrate_pi_to_flue.sql +110 -0
  73. package/dist/drizzle/0063_threads_session_data.sql +23 -0
  74. package/dist/drizzle/0064_tenant_credentials.sql +65 -0
  75. package/dist/drizzle/0067_thinkwork_computers_phase_one.sql +174 -0
  76. package/dist/drizzle/0068_drop_system_workflows_and_activation.sql +115 -0
  77. package/dist/drizzle/0069_compliance_schema.sql +364 -0
  78. package/dist/drizzle/0070_compliance_aurora_roles.sql +171 -0
  79. package/dist/drizzle/0072_threads_computer_ownership.sql +24 -0
  80. package/dist/drizzle/0073_compliance_tenant_anchor_state.sql +105 -0
  81. package/dist/drizzle/0074_compliance_event_hash_index.sql +49 -0
  82. package/dist/drizzle/0075_scheduled_jobs_computer_ownership.sql +27 -0
  83. package/dist/drizzle/0076_scheduled_jobs_marco_backfill.sql +69 -0
  84. package/dist/drizzle/0077_computers_primary_agent_id.sql +38 -0
  85. package/dist/drizzle/0078_tenant_customize_catalog.sql +46 -0
  86. package/dist/drizzle/0079_seed_tenant_customize_catalog.sql +53 -0
  87. package/dist/drizzle/0081_routines_catalog_slug.sql +42 -0
  88. package/dist/drizzle/0082_messages_parts_jsonb.sql +52 -0
  89. package/dist/drizzle/0083_computer_runbooks.sql +103 -0
  90. package/dist/drizzle/0084_artifacts_favorited_at.sql +32 -0
  91. package/dist/drizzle/0085_seed_thinkwork_computer_default_template.sql +46 -0
  92. package/dist/drizzle/0086_update_default_template_models.sql +19 -0
  93. package/dist/drizzle/0087_retire_oss_connectors.sql +77 -0
  94. package/dist/drizzle/0088_compliance_event_types_finance_pilot.sql +37 -0
  95. package/dist/drizzle/0089_remove_maniflow_eval_seeds.sql +81 -0
  96. package/dist/drizzle/0089_wiki_schema_extraction.sql +315 -0
  97. package/dist/drizzle/0090_brain_schema_extraction.sql +274 -0
  98. package/dist/drizzle/0091_drop_wiki_brain_compat_views.sql +118 -0
  99. package/dist/drizzle/0092_finish_oss_connector_retirement.sql +97 -0
  100. package/dist/drizzle/0093_eval_runs_scheduled_job_id.sql +23 -0
  101. package/dist/drizzle/0094_slack_workspace_app.sql +140 -0
  102. package/dist/drizzle/0095_eval_runs_computer_id.sql +22 -0
  103. package/dist/drizzle/0096_true_redteam_eval_seed_cleanup.sql +67 -0
  104. package/dist/drizzle/0097_shared_computers.sql +191 -0
  105. package/dist/drizzle/0098_business_ontology.sql +587 -0
  106. package/dist/drizzle/0099_thread_idle_learning.sql +145 -0
  107. package/dist/drizzle/0100_ontology_gated_brain_dynamic_subtypes.sql +7 -0
  108. package/dist/drizzle/0101_ontology_gated_unresolved_mentions_dynamic_subtypes.sql +7 -0
  109. package/dist/drizzle/0102_wiki_brain_owner_repair.sql +87 -0
  110. package/dist/drizzle/0103_brain_section_source_trigger_repair.sql +75 -0
  111. package/dist/drizzle/0104_expand_seed_ontology_for_user_memory.sql +166 -0
  112. package/dist/drizzle/0105_spaces_domain.sql +349 -0
  113. package/dist/drizzle/0106_expand_seed_ontology_for_triples.sql +173 -0
  114. package/dist/drizzle/0106_space_threads_participants.sql +197 -0
  115. package/dist/drizzle/0107_linked_task_mirror.sql +245 -0
  116. package/dist/drizzle/0108_message_mentions.sql +95 -0
  117. package/dist/drizzle/0109_space_owned_threads.sql +217 -0
  118. package/dist/drizzle/0110_thread_participant_read_state.sql +21 -0
  119. package/dist/drizzle/0111_agents_tenant_name_unique.sql +38 -0
  120. package/dist/drizzle/0112_recast_spaces_as_contextual_workrooms.sql +138 -0
  121. package/dist/drizzle/0113_agents_own_runtime_fields.sql +48 -0
  122. package/dist/drizzle/0114_migrate_templates_to_agents_and_spaces.sql +361 -0
  123. package/dist/drizzle/0115_remove_computer_eval_template_dependencies.sql +69 -0
  124. package/dist/drizzle/0116_backfill_thread_participants_access.sql +126 -0
  125. package/dist/drizzle/0117_space_access_mode.sql +40 -0
  126. package/dist/drizzle/0118_normalize_tenant_member_principal_type.sql +41 -0
  127. package/dist/drizzle/0119_space_knowledge_bases.sql +126 -0
  128. package/dist/drizzle/0120_space_automations.sql +58 -0
  129. package/dist/drizzle/0121_drop_computer_runbooks.sql +26 -0
  130. package/dist/drizzle/0122_space_email_triggers.sql +24 -0
  131. package/dist/drizzle/0123_single_platform_agent_and_overrides.sql +58 -0
  132. package/dist/drizzle/0124_thread_turns_finalized_at.sql +17 -0
  133. package/dist/drizzle/0125_drop_space_agent_assignments.sql +42 -0
  134. package/dist/drizzle/0126_migrate_flue_to_pi.sql +42 -0
  135. package/dist/drizzle/0127_runtime_type_observability.sql +28 -0
  136. package/dist/drizzle/0128_drop_eval_test_cases_agent_id.sql +37 -0
  137. package/dist/drizzle/0129_drop_code_factory_tables.sql +43 -0
  138. package/dist/drizzle/0129_eval_results_system_prompt.sql +30 -0
  139. package/dist/drizzle/0130_drop_teams_and_team_id_columns.sql +54 -0
  140. package/dist/drizzle/0131_drop_skill_catalog_and_tenant_skills.sql +33 -0
  141. package/dist/drizzle/0132_drop_computer_tables.sql +31 -0
  142. package/dist/drizzle/0133_drop_seed_view_tombstones.sql +79 -0
  143. package/dist/drizzle/0133_thread_turns_system_prompt.sql +22 -0
  144. package/dist/drizzle/0134_drop_dead_agent_runtime_tables.sql +53 -0
  145. package/dist/drizzle/0135_native_checklist_linked_tasks.sql +48 -0
  146. package/dist/drizzle/0136_goal_ledger.sql +55 -0
  147. package/dist/drizzle/0136_space_email_trigger_status.sql +66 -0
  148. package/dist/drizzle/0137_thread_participant_pins.sql +25 -0
  149. package/dist/drizzle/0138_users_cognito_sub.sql +30 -0
  150. package/dist/drizzle/0139_mobile_turn_client_id.sql +23 -0
  151. package/dist/drizzle/0140_workspace_folder_names.sql +36 -0
  152. package/dist/drizzle/0141_eval_runs_desktop_pi_provenance.sql +31 -0
  153. package/dist/drizzle/0142_pi_only_agent_runtime.sql +61 -0
  154. package/dist/drizzle/0143_add_web_extract_builtin_config.sql +28 -0
  155. package/dist/drizzle/0144_skill_catalog_index.sql +40 -0
  156. package/dist/drizzle/0145_knowledge_graph_thread_ingest.sql +512 -0
  157. package/dist/drizzle/0146_knowledge_graph_source_scope.sql +413 -0
  158. package/dist/drizzle/0147_knowledge_graph_scope_trigger_qualification.sql +211 -0
  159. package/dist/drizzle/0148_user_cost_attribution.sql +171 -0
  160. package/dist/drizzle/0149_managed_mcp_servers.sql +64 -0
  161. package/dist/drizzle/0149_user_model_approvals.sql +89 -0
  162. package/dist/drizzle/0150_bootstrap_first_admin_claim.sql +11 -0
  163. package/dist/drizzle/0151_managed_deployments.sql +91 -0
  164. package/dist/drizzle/0152_agent_profiles.sql +81 -0
  165. package/dist/drizzle/0153_message_mentions_agent_profile.sql +9 -0
  166. package/dist/drizzle/0154_customer_deployment_sessions.sql +61 -0
  167. package/dist/drizzle/0155_tenant_model_catalog.sql +152 -0
  168. package/dist/drizzle/0156_bootstrap_credential_leases.sql +52 -0
  169. package/dist/drizzle/0157_knowledge_graph_observations_source.sql +79 -0
  170. package/dist/drizzle/0158_pending_user_questions.sql +80 -0
  171. package/dist/drizzle/0158_wiki_tenant_scope.sql +38 -0
  172. package/dist/drizzle/0159_agent_profiles_space_local.sql +49 -0
  173. package/dist/drizzle/0159_application_plugins.sql +193 -0
  174. package/dist/drizzle/0159_eval_scoring_version.sql +46 -0
  175. package/dist/drizzle/0160_compliance_event_types_plugins.sql +37 -0
  176. package/dist/drizzle/0160_eval_datasets.sql +75 -0
  177. package/dist/drizzle/0160_eval_results_thread_turn.sql +35 -0
  178. package/dist/drizzle/0161_eval_run_pinning.sql +54 -0
  179. package/dist/drizzle/0161_tenant_mcp_servers_plugin_source.sql +62 -0
  180. package/dist/drizzle/0162_eval_result_override.sql +49 -0
  181. package/dist/drizzle/0163_eval_replay_tool_allowlist.sql +50 -0
  182. package/dist/drizzle/0164_eval_replay_tool_override_mode.sql +52 -0
  183. package/dist/drizzle/0165_plugin_premium_entitlements.sql +153 -0
  184. package/dist/drizzle/0166_company_brain_substrate_contract.sql +386 -0
  185. package/dist/drizzle/0167_company_brain_artifact_manifest_runtime.sql +85 -0
  186. package/dist/drizzle/0168_eval_skill_gate.sql +44 -0
  187. package/dist/drizzle/0169_release_update_jobs.sql +67 -0
  188. package/dist/drizzle/0170_email_channel_plugin.sql +291 -0
  189. package/dist/drizzle/0171_linked_task_external_providers.sql +30 -0
  190. package/dist/drizzle/0172_email_channel_sendgrid_provider.sql +8 -0
  191. package/dist/drizzle/0173_auth_provider_resources.sql +83 -0
  192. package/dist/drizzle/0174_workos_auth_bridges.sql +37 -0
  193. package/dist/drizzle/0175_workos_auth_sessions.sql +38 -0
  194. package/dist/drizzle/0176_n8n_agent_step_runs.sql +107 -0
  195. package/dist/drizzle/0177_workflow_control_plane.sql +281 -0
  196. package/dist/drizzle/0178_workflow_backfill_existing_routines.sql +525 -0
  197. package/dist/drizzle/0179_tenant_goal_budget_settings.sql +21 -0
  198. package/dist/drizzle/0180_skill_drafts.sql +89 -0
  199. package/dist/drizzle/0181_skill_draft_publish_status.sql +21 -0
  200. package/dist/drizzle/0182_agent_loops.sql +260 -0
  201. package/dist/drizzle/0183_okf_artifact_manifests.sql +52 -0
  202. package/dist/drizzle/0184_skill_catalog_trust_cache.sql +35 -0
  203. package/dist/drizzle/0185_agent_loop_space.sql +16 -0
  204. package/dist/drizzle/0186_tenant_mcp_runtime_metadata.sql +10 -0
  205. package/dist/drizzle/0187_native_work_items.sql +220 -0
  206. package/dist/drizzle/0188_company_etl_plugin_rename.sql +99 -0
  207. package/dist/drizzle/0189_trace_cost_substrate.sql +247 -0
  208. package/dist/drizzle/0190_billing_export_reconciliation.sql +101 -0
  209. package/dist/drizzle/0191_open_engine_work_item_queue.sql +66 -0
  210. package/dist/drizzle/0192_work_item_labels.sql +44 -0
  211. package/dist/drizzle/0193_work_item_documents.sql +31 -0
  212. package/dist/drizzle/0194_memory_retain_attempts.sql +103 -0
  213. package/dist/drizzle/0194_work_item_comments.sql +35 -0
  214. package/dist/drizzle/0195_plugin_app_overlays.sql +45 -0
  215. package/dist/drizzle/0196_pi_extensions.sql +118 -0
  216. package/dist/drizzle/0197_eval_profiles.sql +150 -0
  217. package/dist/drizzle/0198_eval_runs_unstable.sql +27 -0
  218. package/dist/drizzle/0199_eval_runs_cost_partial.sql +27 -0
  219. package/dist/drizzle/meta/_journal.json +160 -0
  220. package/dist/plugins/README.md +162 -0
  221. package/dist/plugins/catalog/package.json +40 -0
  222. package/dist/plugins/catalog/scripts/build-catalog.ts +120 -0
  223. package/dist/plugins/catalog/scripts/generate-plugin-registry.ts +144 -0
  224. package/dist/plugins/catalog/src/__tests__/build-catalog.test.ts +86 -0
  225. package/dist/plugins/catalog/src/__tests__/catalog.test.ts +308 -0
  226. package/dist/plugins/catalog/src/__tests__/contracts.test.ts +861 -0
  227. package/dist/plugins/catalog/src/__tests__/plugin-package.test.ts +124 -0
  228. package/dist/plugins/catalog/src/__tests__/plugin-registry.test.ts +120 -0
  229. package/dist/plugins/catalog/src/catalog.ts +434 -0
  230. package/dist/plugins/catalog/src/contracts.ts +1498 -0
  231. package/dist/plugins/catalog/src/index.ts +4 -0
  232. package/dist/plugins/catalog/src/plugin-package.ts +171 -0
  233. package/dist/plugins/catalog/src/registry/generated-first-party.ts +76 -0
  234. package/dist/plugins/catalog/src/registry/index.ts +1 -0
  235. package/dist/plugins/catalog/tsconfig.json +8 -0
  236. package/dist/plugins/company-brain/README.md +37 -0
  237. package/dist/plugins/company-brain/package.json +33 -0
  238. package/dist/plugins/company-brain/runtime/cognee/Dockerfile +11 -0
  239. package/dist/plugins/company-brain/smoke/cognee-managed-app-smoke.mjs +458 -0
  240. package/dist/plugins/company-brain/smoke/cognee-memory-cutover-smoke.mjs +539 -0
  241. package/dist/plugins/company-brain/smoke/company-brain-context-engine-smoke.mjs +312 -0
  242. package/dist/plugins/company-brain/smoke/company-brain-operations-smoke.mjs +449 -0
  243. package/dist/plugins/company-brain/smoke/company-brain-plugin-smoke.mjs +655 -0
  244. package/dist/plugins/company-brain/smoke/hindsight-memory-isolation-smoke.mjs +474 -0
  245. package/dist/plugins/company-brain/src/api/cognee-client.ts +896 -0
  246. package/dist/plugins/company-brain/src/api/cognee-cluster-identity.ts +49 -0
  247. package/dist/plugins/company-brain/src/api/cognee-memory-scope.ts +84 -0
  248. package/dist/plugins/company-brain/src/api/context-engine-provider.ts +888 -0
  249. package/dist/plugins/company-brain/src/api/migration.ts +665 -0
  250. package/dist/plugins/company-brain/src/deployment/cognee-managed-app.ts +396 -0
  251. package/dist/plugins/company-brain/src/index.ts +62 -0
  252. package/dist/plugins/company-brain/src/manifest.ts +112 -0
  253. package/dist/plugins/company-brain/terraform/cognee/README.md +263 -0
  254. package/dist/plugins/company-brain/terraform/cognee/main.tf +766 -0
  255. package/dist/plugins/company-brain/terraform/cognee/outputs.tf +144 -0
  256. package/dist/plugins/company-brain/terraform/cognee/variables.tf +402 -0
  257. package/dist/plugins/company-brain/test/api/cognee-client.test.ts +562 -0
  258. package/dist/plugins/company-brain/test/api/cognee-memory-scope.test.ts +74 -0
  259. package/dist/plugins/company-brain/test/api/context-engine-provider.test.ts +447 -0
  260. package/dist/plugins/company-brain/test/api/migration.test.ts +465 -0
  261. package/dist/plugins/company-brain/test/manifest.test.ts +95 -0
  262. package/dist/plugins/company-brain/tsconfig.json +8 -0
  263. package/dist/plugins/company-data/README.md +49 -0
  264. package/dist/plugins/company-data/package.json +21 -0
  265. package/dist/plugins/company-data/src/index.ts +30 -0
  266. package/dist/plugins/company-data/src/manifest.ts +26 -0
  267. package/dist/plugins/company-data/test/manifest.test.ts +116 -0
  268. package/dist/plugins/company-data/tsconfig.json +8 -0
  269. package/dist/plugins/company-etl/README.md +46 -0
  270. package/dist/plugins/company-etl/package.json +21 -0
  271. package/dist/plugins/company-etl/src/index.ts +29 -0
  272. package/dist/plugins/company-etl/src/manifest.ts +26 -0
  273. package/dist/plugins/company-etl/test/manifest.test.ts +108 -0
  274. package/dist/plugins/company-etl/tsconfig.json +8 -0
  275. package/dist/plugins/email-channel/README.md +41 -0
  276. package/dist/plugins/email-channel/package.json +22 -0
  277. package/dist/plugins/email-channel/src/index.ts +36 -0
  278. package/dist/plugins/email-channel/src/manifest.ts +44 -0
  279. package/dist/plugins/email-channel/src/provider-contract.ts +36 -0
  280. package/dist/plugins/email-channel/test/manifest.test.ts +119 -0
  281. package/dist/plugins/email-channel/tsconfig.json +8 -0
  282. package/dist/plugins/lastmile/README.md +50 -0
  283. package/dist/plugins/lastmile/package.json +23 -0
  284. package/dist/plugins/lastmile/smoke/lastmile-plugin-smoke.mjs +661 -0
  285. package/dist/plugins/lastmile/src/api/tasks-adapter.ts +572 -0
  286. package/dist/plugins/lastmile/src/discovery.fixture.ts +64 -0
  287. package/dist/plugins/lastmile/src/index.ts +46 -0
  288. package/dist/plugins/lastmile/src/manifest.ts +139 -0
  289. package/dist/plugins/lastmile/test/api/tasks-adapter.test.ts +266 -0
  290. package/dist/plugins/lastmile/test/discovery.test.ts +88 -0
  291. package/dist/plugins/lastmile/tsconfig.json +8 -0
  292. package/dist/plugins/n8n/README.md +201 -0
  293. package/dist/plugins/n8n/n8n-app/README.md +33 -0
  294. package/dist/plugins/n8n/n8n-app/package.json +23 -0
  295. package/dist/plugins/n8n/n8n-app/src/application-config.ts +45 -0
  296. package/dist/plugins/n8n/n8n-app/src/front-components/thinkwork-workflows.front-component.tsx +970 -0
  297. package/dist/plugins/n8n/n8n-app/src/lib/n8n-app-data.ts +190 -0
  298. package/dist/plugins/n8n/n8n-app/src/vite-env.d.ts +7 -0
  299. package/dist/plugins/n8n/n8n-app/tsconfig.json +15 -0
  300. package/dist/plugins/n8n/package.json +35 -0
  301. package/dist/plugins/n8n/runtime/Dockerfile +18 -0
  302. package/dist/plugins/n8n/runtime/n8n-task-runners.json +14 -0
  303. package/dist/plugins/n8n/runtime/n8n-task-runners.json.template +14 -0
  304. package/dist/plugins/n8n/runtime/package-lock.json +13 -0
  305. package/dist/plugins/n8n/runtime/package.json +7 -0
  306. package/dist/plugins/n8n/scripts/sync-thinkwork-app.mjs +268 -0
  307. package/dist/plugins/n8n/smoke/README.md +95 -0
  308. package/dist/plugins/n8n/smoke/n8n-agent-step-bridge-smoke.mjs +866 -0
  309. package/dist/plugins/n8n/smoke/n8n-integrated-app-smoke.mjs +262 -0
  310. package/dist/plugins/n8n/smoke/n8n-managed-app-smoke.mjs +409 -0
  311. package/dist/plugins/n8n/smoke/n8n-mcp-smoke.mjs +624 -0
  312. package/dist/plugins/n8n/src/deployment/image-build.ts +172 -0
  313. package/dist/plugins/n8n/src/deployment/managed-app.ts +429 -0
  314. package/dist/plugins/n8n/src/index.ts +79 -0
  315. package/dist/plugins/n8n/src/manifest.ts +403 -0
  316. package/dist/plugins/n8n/src/package-config.ts +186 -0
  317. package/dist/plugins/n8n/src/skills/n8n-workflow-operator/SKILL.md +76 -0
  318. package/dist/plugins/n8n/src/skills/n8n-workflow-operator/references/mcp-tooling.md +40 -0
  319. package/dist/plugins/n8n/src/skills/n8n-workflow-operator/references/validation-and-handoff.md +40 -0
  320. package/dist/plugins/n8n/src/skills/n8n-workflow-operator/references/workflow-authoring.md +45 -0
  321. package/dist/plugins/n8n/terraform/n8n/README.md +113 -0
  322. package/dist/plugins/n8n/terraform/n8n/main.tf +918 -0
  323. package/dist/plugins/n8n/terraform/n8n/outputs.tf +124 -0
  324. package/dist/plugins/n8n/terraform/n8n/scripts/sync-database.py +250 -0
  325. package/dist/plugins/n8n/terraform/n8n/scripts/test_sync_database.py +55 -0
  326. package/dist/plugins/n8n/terraform/n8n/variables.tf +354 -0
  327. package/dist/plugins/n8n/test/image-build.test.ts +118 -0
  328. package/dist/plugins/n8n/test/integrated-app-contract.test.ts +353 -0
  329. package/dist/plugins/n8n/test/manifest.test.ts +278 -0
  330. package/dist/plugins/n8n/test/package-config.test.ts +57 -0
  331. package/dist/plugins/n8n/tsconfig.json +8 -0
  332. package/dist/plugins/sendgrid/README.md +30 -0
  333. package/dist/plugins/sendgrid/package.json +22 -0
  334. package/dist/plugins/sendgrid/src/index.ts +36 -0
  335. package/dist/plugins/sendgrid/src/manifest.ts +37 -0
  336. package/dist/plugins/sendgrid/src/provider-contract.ts +14 -0
  337. package/dist/plugins/sendgrid/test/manifest.test.ts +80 -0
  338. package/dist/plugins/sendgrid/tsconfig.json +8 -0
  339. package/dist/plugins/twenty/README.md +78 -0
  340. package/dist/plugins/twenty/package.json +27 -0
  341. package/dist/plugins/twenty/scripts/__tests__/sync-thinkwork-app.test.mjs +67 -0
  342. package/dist/plugins/twenty/scripts/sync-thinkwork-app.mjs +185 -0
  343. package/dist/plugins/twenty/scripts/wire-thinkwork-workflow.mjs +658 -0
  344. package/dist/plugins/twenty/smoke/twenty-managed-app-smoke.mjs +359 -0
  345. package/dist/plugins/twenty/smoke/twenty-mcp-oauth-smoke.mjs +574 -0
  346. package/dist/plugins/twenty/src/api/cutover.ts +209 -0
  347. package/dist/plugins/twenty/src/deployment/managed-app.ts +253 -0
  348. package/dist/plugins/twenty/src/index.ts +55 -0
  349. package/dist/plugins/twenty/src/manifest.ts +259 -0
  350. package/dist/plugins/twenty/terraform/twenty/README.md +97 -0
  351. package/dist/plugins/twenty/terraform/twenty/main.tf +829 -0
  352. package/dist/plugins/twenty/terraform/twenty/outputs.tf +79 -0
  353. package/dist/plugins/twenty/terraform/twenty/variables.tf +268 -0
  354. package/dist/plugins/twenty/test/api/cutover.test.ts +183 -0
  355. package/dist/plugins/twenty/test/manifest.test.ts +463 -0
  356. package/dist/plugins/twenty/tsconfig.json +9 -0
  357. package/dist/plugins/twenty/twenty-app/.nvmrc +1 -0
  358. package/dist/plugins/twenty/twenty-app/README.md +148 -0
  359. package/dist/plugins/twenty/twenty-app/package.json +30 -0
  360. package/dist/plugins/twenty/twenty-app/src/application-config.ts +44 -0
  361. package/dist/plugins/twenty/twenty-app/src/constants/universal-identifiers.ts +18 -0
  362. package/dist/plugins/twenty/twenty-app/src/default-role.ts +24 -0
  363. package/dist/plugins/twenty/twenty-app/src/front-components/thinkwork-settings.front-component.tsx +299 -0
  364. package/dist/plugins/twenty/twenty-app/src/logic-functions/thinkwork-webhook.logic-function.ts +354 -0
  365. package/dist/plugins/twenty/twenty-app/tsconfig.json +14 -0
  366. package/dist/plugins/twenty/twenty-app/yarn.lock +4144 -0
  367. package/dist/plugins/workos-auth/package.json +22 -0
  368. package/dist/plugins/workos-auth/src/index.ts +30 -0
  369. package/dist/plugins/workos-auth/src/manifest.ts +40 -0
  370. package/dist/plugins/workos-auth/src/provider-contract.ts +39 -0
  371. package/dist/plugins/workos-auth/test/manifest.test.ts +94 -0
  372. package/dist/plugins/workos-auth/tsconfig.json +8 -0
  373. package/dist/scripts/bootstrap-workspace.sh +162 -0
  374. package/dist/scripts/post-deploy.sh +290 -0
  375. package/dist/terraform/examples/greenfield/main.tf +903 -75
  376. package/dist/terraform/examples/greenfield/terraform.tfvars.example +67 -8
  377. package/dist/terraform/modules/app/agentcore-code-interpreter/Dockerfile.sandbox-base +2 -2
  378. package/dist/terraform/modules/app/agentcore-code-interpreter/README.md +8 -9
  379. package/dist/terraform/modules/app/agentcore-code-interpreter/sandbox/sitecustomize.py +227 -0
  380. package/dist/terraform/modules/app/agentcore-code-interpreter/sandbox/test_sitecustomize.py +277 -0
  381. package/dist/terraform/modules/app/agentcore-memory/README.md +6 -6
  382. package/dist/terraform/modules/app/agentcore-memory/main.tf +1 -1
  383. package/dist/terraform/modules/app/agentcore-memory/scripts/create_or_find_memory.sh +40 -9
  384. package/dist/terraform/modules/app/agentcore-pi/README.md +61 -0
  385. package/dist/terraform/modules/app/agentcore-pi/main.tf +453 -0
  386. package/dist/terraform/modules/app/agentcore-pi/outputs.tf +38 -0
  387. package/dist/terraform/modules/app/agentcore-pi/variables.tf +145 -0
  388. package/dist/terraform/modules/app/agentcore-platform/main.tf +83 -0
  389. package/dist/terraform/modules/app/agentcore-runtime/main.tf +9 -11
  390. package/dist/terraform/modules/app/appsync-subscriptions/main.tf +5 -1
  391. package/dist/terraform/modules/app/customer-domain/main.tf +483 -0
  392. package/dist/terraform/modules/app/deployment-control-plane/README.md +47 -0
  393. package/dist/terraform/modules/app/deployment-control-plane/buildspec.yml +24 -0
  394. package/dist/terraform/modules/app/deployment-control-plane/main.tf +614 -0
  395. package/dist/terraform/modules/app/deployment-control-plane/outputs.tf +54 -0
  396. package/dist/terraform/modules/app/deployment-control-plane/runner.py +4720 -0
  397. package/dist/terraform/modules/app/deployment-control-plane/test_runner_bundle.py +3026 -0
  398. package/dist/terraform/modules/app/deployment-control-plane/variables.tf +96 -0
  399. package/dist/terraform/modules/app/hindsight-memory/README.md +25 -23
  400. package/dist/terraform/modules/app/hindsight-memory/main.tf +26 -2
  401. package/dist/terraform/modules/app/lambda-api/eval-fanout.tf +17 -50
  402. package/dist/terraform/modules/app/lambda-api/handlers.tf +1290 -679
  403. package/dist/terraform/modules/app/lambda-api/iam-grouped.tf +933 -0
  404. package/dist/terraform/modules/app/lambda-api/main.tf +14 -527
  405. package/dist/terraform/modules/app/lambda-api/mcp-oauth.tf +3 -19
  406. package/dist/terraform/modules/app/lambda-api/outputs.tf +50 -6
  407. package/dist/terraform/modules/app/lambda-api/runtime-config.tf +163 -0
  408. package/dist/terraform/modules/app/lambda-api/slack-app-secrets.tf +3 -1
  409. package/dist/terraform/modules/app/lambda-api/stripe-secrets.tf +3 -1
  410. package/dist/terraform/modules/app/lambda-api/variables.tf +240 -53
  411. package/dist/terraform/modules/app/lambda-api/workspace-events.tf +2 -25
  412. package/dist/terraform/modules/app/ses-email/main.tf +143 -30
  413. package/dist/terraform/modules/app/static-site/main.tf +4 -3
  414. package/dist/terraform/modules/app/www-dns/main.tf +45 -5
  415. package/dist/terraform/modules/app/www-dns/outputs.tf +10 -0
  416. package/dist/terraform/modules/app/www-dns/variables.tf +24 -0
  417. package/dist/terraform/modules/data/aurora-postgres/main.tf +15 -1
  418. package/dist/terraform/modules/data/compliance-exports-bucket/main.tf +1 -1
  419. package/dist/terraform/modules/data/compliance-exports-bucket/variables.tf +6 -0
  420. package/dist/terraform/modules/foundation/cognito/main.tf +167 -11
  421. package/dist/terraform/modules/foundation/cognito/outputs.tf +5 -0
  422. package/dist/terraform/modules/foundation/cognito/variables.tf +110 -0
  423. package/dist/terraform/modules/foundation/vpc/main.tf +45 -3
  424. package/dist/terraform/modules/foundation/vpc/outputs.tf +20 -0
  425. package/dist/terraform/modules/foundation/vpc/variables.tf +18 -0
  426. package/dist/terraform/modules/thinkwork/README.md +71 -0
  427. package/dist/terraform/modules/thinkwork/main.tf +1325 -174
  428. package/dist/terraform/modules/thinkwork/outputs.tf +457 -24
  429. package/dist/terraform/modules/thinkwork/variables.tf +1169 -93
  430. package/dist/terraform/schema.graphql +82 -9
  431. package/dist/workspace-defaults/files/AGENTS.md +344 -0
  432. package/dist/workspace-defaults/files/CONTEXT.md +8 -0
  433. package/dist/workspace-defaults/files/GUARDRAILS.md +51 -0
  434. package/dist/workspace-defaults/files/MEMORY_GUIDE.md +65 -0
  435. package/dist/workspace-defaults/files/ROUTER.md +24 -0
  436. package/dist/workspace-defaults/files/SPACE.md +62 -0
  437. package/dist/workspace-defaults/files/TOOLS.md +65 -0
  438. package/dist/workspace-defaults/files/USER.md +40 -0
  439. package/dist/workspace-defaults/files/mcp.json +3 -0
  440. package/dist/workspace-defaults/files/memory/contacts.md +13 -0
  441. package/dist/workspace-defaults/files/memory/lessons.md +13 -0
  442. package/dist/workspace-defaults/files/memory/preferences.md +12 -0
  443. package/dist/workspace-defaults/files/skills/.gitkeep +1 -0
  444. package/dist/workspace-defaults/files/skills/artifact-builder/SKILL.md +79 -0
  445. package/dist/workspace-defaults/files/skills/artifact-builder/references/crm-dashboard.md +166 -0
  446. package/dist/workspace-defaults/files/skills/automation-loop-designer/SKILL.md +120 -0
  447. package/dist/workspace-defaults/files/skills/skill-creator/LICENSE.txt +202 -0
  448. package/dist/workspace-defaults/files/skills/skill-creator/SKILL.md +485 -0
  449. package/dist/workspace-defaults/files/skills/skill-creator/UPSTREAM.json +124 -0
  450. package/dist/workspace-defaults/files/skills/skill-creator/agents/analyzer.md +274 -0
  451. package/dist/workspace-defaults/files/skills/skill-creator/agents/comparator.md +202 -0
  452. package/dist/workspace-defaults/files/skills/skill-creator/agents/grader.md +223 -0
  453. package/dist/workspace-defaults/files/skills/skill-creator/assets/eval_review.html +146 -0
  454. package/dist/workspace-defaults/files/skills/skill-creator/eval-viewer/generate_review.py +471 -0
  455. package/dist/workspace-defaults/files/skills/skill-creator/eval-viewer/viewer.html +1325 -0
  456. package/dist/workspace-defaults/files/skills/skill-creator/references/schemas.md +430 -0
  457. package/dist/workspace-defaults/files/skills/skill-creator/scripts/__init__.py +0 -0
  458. package/dist/workspace-defaults/files/skills/skill-creator/scripts/aggregate_benchmark.py +401 -0
  459. package/dist/workspace-defaults/files/skills/skill-creator/scripts/generate_report.py +326 -0
  460. package/dist/workspace-defaults/files/skills/skill-creator/scripts/improve_description.py +247 -0
  461. package/dist/workspace-defaults/files/skills/skill-creator/scripts/package_skill.py +136 -0
  462. package/dist/workspace-defaults/files/skills/skill-creator/scripts/quick_validate.py +103 -0
  463. package/dist/workspace-defaults/files/skills/skill-creator/scripts/run_eval.py +310 -0
  464. package/dist/workspace-defaults/files/skills/skill-creator/scripts/run_loop.py +328 -0
  465. package/dist/workspace-defaults/files/skills/skill-creator/scripts/utils.py +47 -0
  466. package/package.json +1 -1
  467. package/dist/terraform/modules/app/agentcore-flue/README.md +0 -58
  468. package/dist/terraform/modules/app/agentcore-flue/main.tf +0 -323
  469. package/dist/terraform/modules/app/agentcore-flue/outputs.tf +0 -23
  470. package/dist/terraform/modules/app/agentcore-flue/variables.tf +0 -97
  471. package/dist/terraform/modules/app/computer-runtime/README.md +0 -15
  472. package/dist/terraform/modules/app/computer-runtime/main.tf +0 -406
  473. package/dist/terraform/modules/app/computer-runtime/outputs.tf +0 -75
  474. package/dist/terraform/modules/app/computer-runtime/variables.tf +0 -66
@@ -0,0 +1,413 @@
1
+ -- Purpose: make Knowledge Graph snapshots source-aware for thread, wiki, and brain ingests.
2
+ -- Plan: docs/plans/2026-06-05-001-feat-knowledge-graph-wiki-brain-ingest-plan.md (U1)
3
+ -- Apply manually: psql "$DATABASE_URL" -v ON_ERROR_STOP=1 -f packages/database-pg/drizzle/0146_knowledge_graph_source_scope.sql
4
+ -- creates-column: public.knowledge_graph_ingest_runs.source_kind
5
+ -- creates-column: public.knowledge_graph_ingest_runs.source_ref
6
+ -- creates-column: public.knowledge_graph_ingest_runs.source_label
7
+ -- creates-column: public.knowledge_graph_entities.source_kind
8
+ -- creates-column: public.knowledge_graph_entities.source_ref
9
+ -- creates-column: public.knowledge_graph_relationships.source_kind
10
+ -- creates-column: public.knowledge_graph_relationships.source_ref
11
+ -- creates-column: public.knowledge_graph_evidence.source_kind
12
+ -- creates-column: public.knowledge_graph_evidence.source_ref
13
+ -- creates-column: public.knowledge_graph_evidence.evidence_source_kind
14
+ -- creates-column: public.knowledge_graph_evidence.evidence_source_ref
15
+ -- creates: public.idx_kg_ingest_runs_tenant_source_created
16
+ -- creates: public.uq_kg_ingest_runs_active_source
17
+ -- creates: public.idx_kg_entities_tenant_source_label
18
+ -- creates: public.idx_kg_relationships_tenant_source_type
19
+ -- creates: public.idx_kg_evidence_tenant_source
20
+ -- creates-constraint: public.knowledge_graph_ingest_runs.knowledge_graph_ingest_runs_source_kind_allowed
21
+ -- creates-constraint: public.knowledge_graph_ingest_runs.knowledge_graph_ingest_runs_thread_scope_required
22
+ -- creates-constraint: public.knowledge_graph_entities.knowledge_graph_entities_source_kind_allowed
23
+ -- creates-constraint: public.knowledge_graph_relationships.knowledge_graph_relationships_source_kind_allowed
24
+ -- creates-constraint: public.knowledge_graph_evidence.knowledge_graph_evidence_evidence_source_kind_allowed
25
+
26
+ \set ON_ERROR_STOP on
27
+
28
+ BEGIN;
29
+
30
+ SET LOCAL lock_timeout = '5s';
31
+ SET LOCAL statement_timeout = '120s';
32
+
33
+ ALTER TABLE public.knowledge_graph_ingest_runs
34
+ ADD COLUMN IF NOT EXISTS source_kind text NOT NULL DEFAULT 'thread',
35
+ ADD COLUMN IF NOT EXISTS source_ref text,
36
+ ADD COLUMN IF NOT EXISTS source_label text;
37
+
38
+ UPDATE public.knowledge_graph_ingest_runs
39
+ SET source_ref = thread_id::text
40
+ WHERE source_ref IS NULL AND thread_id IS NOT NULL;
41
+
42
+ UPDATE public.knowledge_graph_ingest_runs
43
+ SET source_label = input->>'threadTitle'
44
+ WHERE source_label IS NULL AND input ? 'threadTitle';
45
+
46
+ ALTER TABLE public.knowledge_graph_ingest_runs
47
+ ALTER COLUMN source_ref SET NOT NULL,
48
+ ALTER COLUMN thread_id DROP NOT NULL;
49
+
50
+ ALTER TABLE public.knowledge_graph_entities
51
+ ADD COLUMN IF NOT EXISTS source_kind text NOT NULL DEFAULT 'thread',
52
+ ADD COLUMN IF NOT EXISTS source_ref text;
53
+
54
+ UPDATE public.knowledge_graph_entities
55
+ SET source_ref = thread_id::text
56
+ WHERE source_ref IS NULL AND thread_id IS NOT NULL;
57
+
58
+ ALTER TABLE public.knowledge_graph_entities
59
+ ALTER COLUMN source_ref SET NOT NULL,
60
+ ALTER COLUMN thread_id DROP NOT NULL;
61
+
62
+ ALTER TABLE public.knowledge_graph_relationships
63
+ ADD COLUMN IF NOT EXISTS source_kind text NOT NULL DEFAULT 'thread',
64
+ ADD COLUMN IF NOT EXISTS source_ref text;
65
+
66
+ UPDATE public.knowledge_graph_relationships
67
+ SET source_ref = thread_id::text
68
+ WHERE source_ref IS NULL AND thread_id IS NOT NULL;
69
+
70
+ ALTER TABLE public.knowledge_graph_relationships
71
+ ALTER COLUMN source_ref SET NOT NULL,
72
+ ALTER COLUMN thread_id DROP NOT NULL;
73
+
74
+ DO $$
75
+ BEGIN
76
+ IF EXISTS (
77
+ SELECT 1
78
+ FROM information_schema.columns
79
+ WHERE table_schema = 'public'
80
+ AND table_name = 'knowledge_graph_evidence'
81
+ AND column_name = 'source_kind'
82
+ ) AND NOT EXISTS (
83
+ SELECT 1
84
+ FROM information_schema.columns
85
+ WHERE table_schema = 'public'
86
+ AND table_name = 'knowledge_graph_evidence'
87
+ AND column_name = 'evidence_source_kind'
88
+ ) THEN
89
+ ALTER TABLE public.knowledge_graph_evidence
90
+ RENAME COLUMN source_kind TO evidence_source_kind;
91
+ END IF;
92
+
93
+ IF EXISTS (
94
+ SELECT 1
95
+ FROM information_schema.columns
96
+ WHERE table_schema = 'public'
97
+ AND table_name = 'knowledge_graph_evidence'
98
+ AND column_name = 'source_ref'
99
+ ) AND NOT EXISTS (
100
+ SELECT 1
101
+ FROM information_schema.columns
102
+ WHERE table_schema = 'public'
103
+ AND table_name = 'knowledge_graph_evidence'
104
+ AND column_name = 'evidence_source_ref'
105
+ ) THEN
106
+ ALTER TABLE public.knowledge_graph_evidence
107
+ RENAME COLUMN source_ref TO evidence_source_ref;
108
+ END IF;
109
+ END $$;
110
+
111
+ ALTER TABLE public.knowledge_graph_evidence
112
+ ADD COLUMN IF NOT EXISTS source_kind text NOT NULL DEFAULT 'thread',
113
+ ADD COLUMN IF NOT EXISTS source_ref text;
114
+
115
+ UPDATE public.knowledge_graph_evidence
116
+ SET source_ref = thread_id::text
117
+ WHERE source_ref IS NULL AND thread_id IS NOT NULL;
118
+
119
+ ALTER TABLE public.knowledge_graph_evidence
120
+ ALTER COLUMN source_ref SET NOT NULL,
121
+ ALTER COLUMN thread_id DROP NOT NULL;
122
+
123
+ DROP INDEX IF EXISTS public.uq_kg_ingest_runs_active_thread;
124
+
125
+ CREATE UNIQUE INDEX IF NOT EXISTS uq_kg_ingest_runs_active_thread
126
+ ON public.knowledge_graph_ingest_runs (tenant_id, thread_id)
127
+ WHERE thread_id IS NOT NULL AND status IN ('queued','running');
128
+
129
+ CREATE INDEX IF NOT EXISTS idx_kg_ingest_runs_tenant_source_created
130
+ ON public.knowledge_graph_ingest_runs (tenant_id, source_kind, source_ref, created_at);
131
+
132
+ CREATE UNIQUE INDEX IF NOT EXISTS uq_kg_ingest_runs_active_source
133
+ ON public.knowledge_graph_ingest_runs (tenant_id, source_kind, source_ref)
134
+ WHERE status IN ('queued','running');
135
+
136
+ CREATE INDEX IF NOT EXISTS idx_kg_entities_tenant_source_label
137
+ ON public.knowledge_graph_entities (tenant_id, source_kind, source_ref, normalized_label);
138
+
139
+ CREATE INDEX IF NOT EXISTS idx_kg_relationships_tenant_source_type
140
+ ON public.knowledge_graph_relationships (tenant_id, source_kind, source_ref, ontology_type_slug);
141
+
142
+ CREATE INDEX IF NOT EXISTS idx_kg_evidence_tenant_source
143
+ ON public.knowledge_graph_evidence (tenant_id, source_kind, source_ref);
144
+
145
+ ALTER TABLE public.knowledge_graph_ingest_runs
146
+ DROP CONSTRAINT IF EXISTS knowledge_graph_ingest_runs_source_kind_allowed,
147
+ DROP CONSTRAINT IF EXISTS knowledge_graph_ingest_runs_thread_scope_required,
148
+ ADD CONSTRAINT knowledge_graph_ingest_runs_source_kind_allowed
149
+ CHECK (source_kind IN ('thread','wiki','brain')),
150
+ ADD CONSTRAINT knowledge_graph_ingest_runs_thread_scope_required
151
+ CHECK (source_kind != 'thread' OR thread_id IS NOT NULL);
152
+
153
+ ALTER TABLE public.knowledge_graph_entities
154
+ DROP CONSTRAINT IF EXISTS knowledge_graph_entities_source_kind_allowed,
155
+ ADD CONSTRAINT knowledge_graph_entities_source_kind_allowed
156
+ CHECK (source_kind IN ('thread','wiki','brain'));
157
+
158
+ ALTER TABLE public.knowledge_graph_relationships
159
+ DROP CONSTRAINT IF EXISTS knowledge_graph_relationships_source_kind_allowed,
160
+ ADD CONSTRAINT knowledge_graph_relationships_source_kind_allowed
161
+ CHECK (source_kind IN ('thread','wiki','brain'));
162
+
163
+ ALTER TABLE public.knowledge_graph_evidence
164
+ DROP CONSTRAINT IF EXISTS knowledge_graph_evidence_source_kind_allowed,
165
+ DROP CONSTRAINT IF EXISTS knowledge_graph_evidence_evidence_source_kind_allowed,
166
+ ADD CONSTRAINT knowledge_graph_evidence_source_kind_allowed
167
+ CHECK (source_kind IN ('thread','wiki','brain')),
168
+ ADD CONSTRAINT knowledge_graph_evidence_evidence_source_kind_allowed
169
+ CHECK (evidence_source_kind IN ('thread_message','wiki_page','wiki_section','brain_page','brain_section','cognee_payload','normalizer'));
170
+
171
+ CREATE OR REPLACE FUNCTION public.enforce_knowledge_graph_ingest_run_scope()
172
+ RETURNS trigger
173
+ LANGUAGE plpgsql
174
+ AS $$
175
+ DECLARE
176
+ thread_tenant uuid;
177
+ BEGIN
178
+ IF NEW.source_kind = 'thread' AND NEW.thread_id IS NULL THEN
179
+ RAISE EXCEPTION 'knowledge graph thread ingest requires thread_id';
180
+ END IF;
181
+
182
+ IF NEW.source_kind = 'thread' AND NEW.source_ref != NEW.thread_id::text THEN
183
+ RAISE EXCEPTION 'knowledge graph thread ingest source_ref must match thread_id';
184
+ END IF;
185
+
186
+ IF NEW.thread_id IS NOT NULL THEN
187
+ SELECT tenant_id INTO thread_tenant
188
+ FROM public.threads
189
+ WHERE id = NEW.thread_id;
190
+
191
+ IF thread_tenant IS NOT NULL AND thread_tenant != NEW.tenant_id THEN
192
+ RAISE EXCEPTION 'knowledge graph ingest run tenant mismatch for thread %', NEW.thread_id;
193
+ END IF;
194
+ END IF;
195
+
196
+ RETURN NEW;
197
+ END;
198
+ $$;
199
+
200
+ CREATE OR REPLACE FUNCTION public.enforce_knowledge_graph_entity_scope()
201
+ RETURNS trigger
202
+ LANGUAGE plpgsql
203
+ AS $$
204
+ DECLARE
205
+ run_tenant uuid;
206
+ run_thread uuid;
207
+ run_source_kind text;
208
+ run_source_ref text;
209
+ ontology_tenant uuid;
210
+ BEGIN
211
+ SELECT tenant_id, thread_id, source_kind, source_ref
212
+ INTO run_tenant, run_thread, run_source_kind, run_source_ref
213
+ FROM public.knowledge_graph_ingest_runs
214
+ WHERE id = NEW.ingest_run_id;
215
+
216
+ IF run_tenant IS NOT NULL
217
+ AND (
218
+ run_tenant != NEW.tenant_id
219
+ OR run_thread IS DISTINCT FROM NEW.thread_id
220
+ OR run_source_kind != NEW.source_kind
221
+ OR run_source_ref != NEW.source_ref
222
+ ) THEN
223
+ RAISE EXCEPTION 'knowledge graph entity run scope mismatch for run %', NEW.ingest_run_id;
224
+ END IF;
225
+
226
+ IF NEW.ontology_entity_type_id IS NOT NULL THEN
227
+ SELECT tenant_id INTO ontology_tenant
228
+ FROM ontology.entity_types
229
+ WHERE id = NEW.ontology_entity_type_id;
230
+
231
+ IF ontology_tenant IS NOT NULL AND ontology_tenant != NEW.tenant_id THEN
232
+ RAISE EXCEPTION 'knowledge graph entity ontology tenant mismatch for entity type %', NEW.ontology_entity_type_id;
233
+ END IF;
234
+ END IF;
235
+
236
+ RETURN NEW;
237
+ END;
238
+ $$;
239
+
240
+ CREATE OR REPLACE FUNCTION public.enforce_knowledge_graph_relationship_scope()
241
+ RETURNS trigger
242
+ LANGUAGE plpgsql
243
+ AS $$
244
+ DECLARE
245
+ run_tenant uuid;
246
+ run_thread uuid;
247
+ run_source_kind text;
248
+ run_source_ref text;
249
+ source_tenant uuid;
250
+ source_thread uuid;
251
+ source_run uuid;
252
+ source_kind text;
253
+ source_ref text;
254
+ target_tenant uuid;
255
+ target_thread uuid;
256
+ target_run uuid;
257
+ target_kind text;
258
+ target_ref text;
259
+ ontology_tenant uuid;
260
+ BEGIN
261
+ SELECT tenant_id, thread_id, source_kind, source_ref
262
+ INTO run_tenant, run_thread, run_source_kind, run_source_ref
263
+ FROM public.knowledge_graph_ingest_runs
264
+ WHERE id = NEW.ingest_run_id;
265
+
266
+ IF run_tenant IS NOT NULL
267
+ AND (
268
+ run_tenant != NEW.tenant_id
269
+ OR run_thread IS DISTINCT FROM NEW.thread_id
270
+ OR run_source_kind != NEW.source_kind
271
+ OR run_source_ref != NEW.source_ref
272
+ ) THEN
273
+ RAISE EXCEPTION 'knowledge graph relationship run scope mismatch for run %', NEW.ingest_run_id;
274
+ END IF;
275
+
276
+ SELECT tenant_id, thread_id, ingest_run_id, source_kind, source_ref
277
+ INTO source_tenant, source_thread, source_run, source_kind, source_ref
278
+ FROM public.knowledge_graph_entities
279
+ WHERE id = NEW.source_entity_id;
280
+
281
+ SELECT tenant_id, thread_id, ingest_run_id, source_kind, source_ref
282
+ INTO target_tenant, target_thread, target_run, target_kind, target_ref
283
+ FROM public.knowledge_graph_entities
284
+ WHERE id = NEW.target_entity_id;
285
+
286
+ IF source_tenant IS NOT NULL
287
+ AND (
288
+ source_tenant != NEW.tenant_id
289
+ OR source_thread IS DISTINCT FROM NEW.thread_id
290
+ OR source_run != NEW.ingest_run_id
291
+ OR source_kind != NEW.source_kind
292
+ OR source_ref != NEW.source_ref
293
+ ) THEN
294
+ RAISE EXCEPTION 'knowledge graph relationship source scope mismatch for entity %', NEW.source_entity_id;
295
+ END IF;
296
+
297
+ IF target_tenant IS NOT NULL
298
+ AND (
299
+ target_tenant != NEW.tenant_id
300
+ OR target_thread IS DISTINCT FROM NEW.thread_id
301
+ OR target_run != NEW.ingest_run_id
302
+ OR target_kind != NEW.source_kind
303
+ OR target_ref != NEW.source_ref
304
+ ) THEN
305
+ RAISE EXCEPTION 'knowledge graph relationship target scope mismatch for entity %', NEW.target_entity_id;
306
+ END IF;
307
+
308
+ IF NEW.ontology_relationship_type_id IS NOT NULL THEN
309
+ SELECT tenant_id INTO ontology_tenant
310
+ FROM ontology.relationship_types
311
+ WHERE id = NEW.ontology_relationship_type_id;
312
+
313
+ IF ontology_tenant IS NOT NULL AND ontology_tenant != NEW.tenant_id THEN
314
+ RAISE EXCEPTION 'knowledge graph relationship ontology tenant mismatch for relationship type %', NEW.ontology_relationship_type_id;
315
+ END IF;
316
+ END IF;
317
+
318
+ RETURN NEW;
319
+ END;
320
+ $$;
321
+
322
+ CREATE OR REPLACE FUNCTION public.enforce_knowledge_graph_evidence_scope()
323
+ RETURNS trigger
324
+ LANGUAGE plpgsql
325
+ AS $$
326
+ DECLARE
327
+ run_tenant uuid;
328
+ run_thread uuid;
329
+ run_source_kind text;
330
+ run_source_ref text;
331
+ entity_tenant uuid;
332
+ entity_thread uuid;
333
+ entity_run uuid;
334
+ entity_kind text;
335
+ entity_ref text;
336
+ relationship_tenant uuid;
337
+ relationship_thread uuid;
338
+ relationship_run uuid;
339
+ relationship_kind text;
340
+ relationship_ref text;
341
+ message_tenant uuid;
342
+ message_thread uuid;
343
+ BEGIN
344
+ SELECT tenant_id, thread_id, source_kind, source_ref
345
+ INTO run_tenant, run_thread, run_source_kind, run_source_ref
346
+ FROM public.knowledge_graph_ingest_runs
347
+ WHERE id = NEW.ingest_run_id;
348
+
349
+ IF run_tenant IS NOT NULL
350
+ AND (
351
+ run_tenant != NEW.tenant_id
352
+ OR run_thread IS DISTINCT FROM NEW.thread_id
353
+ OR run_source_kind != NEW.source_kind
354
+ OR run_source_ref != NEW.source_ref
355
+ ) THEN
356
+ RAISE EXCEPTION 'knowledge graph evidence run scope mismatch for run %', NEW.ingest_run_id;
357
+ END IF;
358
+
359
+ IF NEW.entity_id IS NOT NULL THEN
360
+ SELECT tenant_id, thread_id, ingest_run_id, source_kind, source_ref
361
+ INTO entity_tenant, entity_thread, entity_run, entity_kind, entity_ref
362
+ FROM public.knowledge_graph_entities
363
+ WHERE id = NEW.entity_id;
364
+
365
+ IF entity_tenant IS NOT NULL
366
+ AND (
367
+ entity_tenant != NEW.tenant_id
368
+ OR entity_thread IS DISTINCT FROM NEW.thread_id
369
+ OR entity_run != NEW.ingest_run_id
370
+ OR entity_kind != NEW.source_kind
371
+ OR entity_ref != NEW.source_ref
372
+ ) THEN
373
+ RAISE EXCEPTION 'knowledge graph evidence entity scope mismatch for entity %', NEW.entity_id;
374
+ END IF;
375
+ END IF;
376
+
377
+ IF NEW.relationship_id IS NOT NULL THEN
378
+ SELECT tenant_id, thread_id, ingest_run_id, source_kind, source_ref
379
+ INTO relationship_tenant, relationship_thread, relationship_run, relationship_kind, relationship_ref
380
+ FROM public.knowledge_graph_relationships
381
+ WHERE id = NEW.relationship_id;
382
+
383
+ IF relationship_tenant IS NOT NULL
384
+ AND (
385
+ relationship_tenant != NEW.tenant_id
386
+ OR relationship_thread IS DISTINCT FROM NEW.thread_id
387
+ OR relationship_run != NEW.ingest_run_id
388
+ OR relationship_kind != NEW.source_kind
389
+ OR relationship_ref != NEW.source_ref
390
+ ) THEN
391
+ RAISE EXCEPTION 'knowledge graph evidence relationship scope mismatch for relationship %', NEW.relationship_id;
392
+ END IF;
393
+ END IF;
394
+
395
+ IF NEW.message_id IS NOT NULL THEN
396
+ SELECT tenant_id, thread_id INTO message_tenant, message_thread
397
+ FROM public.messages
398
+ WHERE id = NEW.message_id;
399
+
400
+ IF message_tenant IS NOT NULL
401
+ AND (
402
+ message_tenant != NEW.tenant_id
403
+ OR message_thread IS DISTINCT FROM NEW.thread_id
404
+ ) THEN
405
+ RAISE EXCEPTION 'knowledge graph evidence message scope mismatch for message %', NEW.message_id;
406
+ END IF;
407
+ END IF;
408
+
409
+ RETURN NEW;
410
+ END;
411
+ $$;
412
+
413
+ COMMIT;
@@ -0,0 +1,211 @@
1
+ -- Purpose: qualify Knowledge Graph source-scope trigger queries after source-declared fallback inserts relationships.
2
+ -- Apply manually: psql "$DATABASE_URL" -v ON_ERROR_STOP=1 -f packages/database-pg/drizzle/0147_knowledge_graph_scope_trigger_qualification.sql
3
+ -- creates-function: public.enforce_knowledge_graph_relationship_scope
4
+ -- creates-function: public.enforce_knowledge_graph_evidence_scope
5
+
6
+ \set ON_ERROR_STOP on
7
+
8
+ BEGIN;
9
+
10
+ CREATE OR REPLACE FUNCTION public.enforce_knowledge_graph_relationship_scope()
11
+ RETURNS trigger
12
+ LANGUAGE plpgsql
13
+ AS $$
14
+ DECLARE
15
+ run_tenant uuid;
16
+ run_thread uuid;
17
+ run_source_kind text;
18
+ run_source_ref text;
19
+ source_tenant uuid;
20
+ source_thread uuid;
21
+ source_run uuid;
22
+ source_entity_kind text;
23
+ source_entity_ref text;
24
+ target_tenant uuid;
25
+ target_thread uuid;
26
+ target_run uuid;
27
+ target_kind text;
28
+ target_ref text;
29
+ ontology_tenant uuid;
30
+ BEGIN
31
+ SELECT
32
+ r.tenant_id,
33
+ r.thread_id,
34
+ r.source_kind,
35
+ r.source_ref
36
+ INTO run_tenant, run_thread, run_source_kind, run_source_ref
37
+ FROM public.knowledge_graph_ingest_runs AS r
38
+ WHERE r.id = NEW.ingest_run_id;
39
+
40
+ IF run_tenant IS NOT NULL
41
+ AND (
42
+ run_tenant != NEW.tenant_id
43
+ OR run_thread IS DISTINCT FROM NEW.thread_id
44
+ OR run_source_kind != NEW.source_kind
45
+ OR run_source_ref != NEW.source_ref
46
+ ) THEN
47
+ RAISE EXCEPTION 'knowledge graph relationship run scope mismatch for run %', NEW.ingest_run_id;
48
+ END IF;
49
+
50
+ SELECT
51
+ e.tenant_id,
52
+ e.thread_id,
53
+ e.ingest_run_id,
54
+ e.source_kind,
55
+ e.source_ref
56
+ INTO source_tenant, source_thread, source_run, source_entity_kind, source_entity_ref
57
+ FROM public.knowledge_graph_entities AS e
58
+ WHERE e.id = NEW.source_entity_id;
59
+
60
+ SELECT
61
+ e.tenant_id,
62
+ e.thread_id,
63
+ e.ingest_run_id,
64
+ e.source_kind,
65
+ e.source_ref
66
+ INTO target_tenant, target_thread, target_run, target_kind, target_ref
67
+ FROM public.knowledge_graph_entities AS e
68
+ WHERE e.id = NEW.target_entity_id;
69
+
70
+ IF source_tenant IS NOT NULL
71
+ AND (
72
+ source_tenant != NEW.tenant_id
73
+ OR source_thread IS DISTINCT FROM NEW.thread_id
74
+ OR source_run != NEW.ingest_run_id
75
+ OR source_entity_kind != NEW.source_kind
76
+ OR source_entity_ref != NEW.source_ref
77
+ ) THEN
78
+ RAISE EXCEPTION 'knowledge graph relationship source scope mismatch for entity %', NEW.source_entity_id;
79
+ END IF;
80
+
81
+ IF target_tenant IS NOT NULL
82
+ AND (
83
+ target_tenant != NEW.tenant_id
84
+ OR target_thread IS DISTINCT FROM NEW.thread_id
85
+ OR target_run != NEW.ingest_run_id
86
+ OR target_kind != NEW.source_kind
87
+ OR target_ref != NEW.source_ref
88
+ ) THEN
89
+ RAISE EXCEPTION 'knowledge graph relationship target scope mismatch for entity %', NEW.target_entity_id;
90
+ END IF;
91
+
92
+ IF NEW.ontology_relationship_type_id IS NOT NULL THEN
93
+ SELECT rt.tenant_id INTO ontology_tenant
94
+ FROM ontology.relationship_types AS rt
95
+ WHERE rt.id = NEW.ontology_relationship_type_id;
96
+
97
+ IF ontology_tenant IS NOT NULL AND ontology_tenant != NEW.tenant_id THEN
98
+ RAISE EXCEPTION 'knowledge graph relationship ontology tenant mismatch for relationship type %', NEW.ontology_relationship_type_id;
99
+ END IF;
100
+ END IF;
101
+
102
+ RETURN NEW;
103
+ END;
104
+ $$;
105
+
106
+ CREATE OR REPLACE FUNCTION public.enforce_knowledge_graph_evidence_scope()
107
+ RETURNS trigger
108
+ LANGUAGE plpgsql
109
+ AS $$
110
+ DECLARE
111
+ run_tenant uuid;
112
+ run_thread uuid;
113
+ run_source_kind text;
114
+ run_source_ref text;
115
+ entity_tenant uuid;
116
+ entity_thread uuid;
117
+ entity_run uuid;
118
+ entity_kind text;
119
+ entity_ref text;
120
+ relationship_tenant uuid;
121
+ relationship_thread uuid;
122
+ relationship_run uuid;
123
+ relationship_kind text;
124
+ relationship_ref text;
125
+ message_tenant uuid;
126
+ message_thread uuid;
127
+ BEGIN
128
+ SELECT
129
+ r.tenant_id,
130
+ r.thread_id,
131
+ r.source_kind,
132
+ r.source_ref
133
+ INTO run_tenant, run_thread, run_source_kind, run_source_ref
134
+ FROM public.knowledge_graph_ingest_runs AS r
135
+ WHERE r.id = NEW.ingest_run_id;
136
+
137
+ IF run_tenant IS NOT NULL
138
+ AND (
139
+ run_tenant != NEW.tenant_id
140
+ OR run_thread IS DISTINCT FROM NEW.thread_id
141
+ OR run_source_kind != NEW.source_kind
142
+ OR run_source_ref != NEW.source_ref
143
+ ) THEN
144
+ RAISE EXCEPTION 'knowledge graph evidence run scope mismatch for run %', NEW.ingest_run_id;
145
+ END IF;
146
+
147
+ IF NEW.entity_id IS NOT NULL THEN
148
+ SELECT
149
+ e.tenant_id,
150
+ e.thread_id,
151
+ e.ingest_run_id,
152
+ e.source_kind,
153
+ e.source_ref
154
+ INTO entity_tenant, entity_thread, entity_run, entity_kind, entity_ref
155
+ FROM public.knowledge_graph_entities AS e
156
+ WHERE e.id = NEW.entity_id;
157
+
158
+ IF entity_tenant IS NOT NULL
159
+ AND (
160
+ entity_tenant != NEW.tenant_id
161
+ OR entity_thread IS DISTINCT FROM NEW.thread_id
162
+ OR entity_run != NEW.ingest_run_id
163
+ OR entity_kind != NEW.source_kind
164
+ OR entity_ref != NEW.source_ref
165
+ ) THEN
166
+ RAISE EXCEPTION 'knowledge graph evidence entity scope mismatch for entity %', NEW.entity_id;
167
+ END IF;
168
+ END IF;
169
+
170
+ IF NEW.relationship_id IS NOT NULL THEN
171
+ SELECT
172
+ r.tenant_id,
173
+ r.thread_id,
174
+ r.ingest_run_id,
175
+ r.source_kind,
176
+ r.source_ref
177
+ INTO relationship_tenant, relationship_thread, relationship_run, relationship_kind, relationship_ref
178
+ FROM public.knowledge_graph_relationships AS r
179
+ WHERE r.id = NEW.relationship_id;
180
+
181
+ IF relationship_tenant IS NOT NULL
182
+ AND (
183
+ relationship_tenant != NEW.tenant_id
184
+ OR relationship_thread IS DISTINCT FROM NEW.thread_id
185
+ OR relationship_run != NEW.ingest_run_id
186
+ OR relationship_kind != NEW.source_kind
187
+ OR relationship_ref != NEW.source_ref
188
+ ) THEN
189
+ RAISE EXCEPTION 'knowledge graph evidence relationship scope mismatch for relationship %', NEW.relationship_id;
190
+ END IF;
191
+ END IF;
192
+
193
+ IF NEW.message_id IS NOT NULL THEN
194
+ SELECT m.tenant_id, m.thread_id INTO message_tenant, message_thread
195
+ FROM public.messages AS m
196
+ WHERE m.id = NEW.message_id;
197
+
198
+ IF message_tenant IS NOT NULL
199
+ AND (
200
+ message_tenant != NEW.tenant_id
201
+ OR message_thread IS DISTINCT FROM NEW.thread_id
202
+ ) THEN
203
+ RAISE EXCEPTION 'knowledge graph evidence message scope mismatch for message %', NEW.message_id;
204
+ END IF;
205
+ END IF;
206
+
207
+ RETURN NEW;
208
+ END;
209
+ $$;
210
+
211
+ COMMIT;