thinkwork-cli 0.12.12 → 0.12.16

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 (475) hide show
  1. package/README.md +42 -38
  2. package/dist/{api-client-ASJWIG3Z.js → api-client-JUBCQQDF.js} +1 -1
  3. package/dist/{chunk-JEHV35EU.js → chunk-STY44FQO.js} +353 -30
  4. package/dist/cli.js +23823 -10151
  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/0197_rcm_context_columns.sql +28 -0
  218. package/dist/drizzle/0198_eval_runs_unstable.sql +27 -0
  219. package/dist/drizzle/0199_eval_runs_cost_partial.sql +27 -0
  220. package/dist/drizzle/meta/_journal.json +160 -0
  221. package/dist/plugins/README.md +162 -0
  222. package/dist/plugins/catalog/package.json +40 -0
  223. package/dist/plugins/catalog/scripts/build-catalog.ts +120 -0
  224. package/dist/plugins/catalog/scripts/generate-plugin-registry.ts +144 -0
  225. package/dist/plugins/catalog/src/__tests__/build-catalog.test.ts +86 -0
  226. package/dist/plugins/catalog/src/__tests__/catalog.test.ts +308 -0
  227. package/dist/plugins/catalog/src/__tests__/contracts.test.ts +861 -0
  228. package/dist/plugins/catalog/src/__tests__/plugin-package.test.ts +124 -0
  229. package/dist/plugins/catalog/src/__tests__/plugin-registry.test.ts +120 -0
  230. package/dist/plugins/catalog/src/catalog.ts +434 -0
  231. package/dist/plugins/catalog/src/contracts.ts +1498 -0
  232. package/dist/plugins/catalog/src/index.ts +4 -0
  233. package/dist/plugins/catalog/src/plugin-package.ts +171 -0
  234. package/dist/plugins/catalog/src/registry/generated-first-party.ts +76 -0
  235. package/dist/plugins/catalog/src/registry/index.ts +1 -0
  236. package/dist/plugins/catalog/tsconfig.json +8 -0
  237. package/dist/plugins/company-brain/README.md +37 -0
  238. package/dist/plugins/company-brain/package.json +33 -0
  239. package/dist/plugins/company-brain/runtime/cognee/Dockerfile +11 -0
  240. package/dist/plugins/company-brain/smoke/cognee-managed-app-smoke.mjs +458 -0
  241. package/dist/plugins/company-brain/smoke/cognee-memory-cutover-smoke.mjs +539 -0
  242. package/dist/plugins/company-brain/smoke/company-brain-context-engine-smoke.mjs +312 -0
  243. package/dist/plugins/company-brain/smoke/company-brain-operations-smoke.mjs +449 -0
  244. package/dist/plugins/company-brain/smoke/company-brain-plugin-smoke.mjs +655 -0
  245. package/dist/plugins/company-brain/smoke/hindsight-memory-isolation-smoke.mjs +474 -0
  246. package/dist/plugins/company-brain/src/api/cognee-client.ts +896 -0
  247. package/dist/plugins/company-brain/src/api/cognee-cluster-identity.ts +49 -0
  248. package/dist/plugins/company-brain/src/api/cognee-memory-scope.ts +84 -0
  249. package/dist/plugins/company-brain/src/api/context-engine-provider.ts +888 -0
  250. package/dist/plugins/company-brain/src/api/migration.ts +665 -0
  251. package/dist/plugins/company-brain/src/deployment/cognee-managed-app.ts +396 -0
  252. package/dist/plugins/company-brain/src/index.ts +62 -0
  253. package/dist/plugins/company-brain/src/manifest.ts +112 -0
  254. package/dist/plugins/company-brain/terraform/cognee/README.md +263 -0
  255. package/dist/plugins/company-brain/terraform/cognee/main.tf +766 -0
  256. package/dist/plugins/company-brain/terraform/cognee/outputs.tf +144 -0
  257. package/dist/plugins/company-brain/terraform/cognee/variables.tf +402 -0
  258. package/dist/plugins/company-brain/test/api/cognee-client.test.ts +562 -0
  259. package/dist/plugins/company-brain/test/api/cognee-memory-scope.test.ts +74 -0
  260. package/dist/plugins/company-brain/test/api/context-engine-provider.test.ts +447 -0
  261. package/dist/plugins/company-brain/test/api/migration.test.ts +465 -0
  262. package/dist/plugins/company-brain/test/manifest.test.ts +95 -0
  263. package/dist/plugins/company-brain/tsconfig.json +8 -0
  264. package/dist/plugins/company-data/README.md +49 -0
  265. package/dist/plugins/company-data/package.json +21 -0
  266. package/dist/plugins/company-data/src/index.ts +30 -0
  267. package/dist/plugins/company-data/src/manifest.ts +26 -0
  268. package/dist/plugins/company-data/test/manifest.test.ts +116 -0
  269. package/dist/plugins/company-data/tsconfig.json +8 -0
  270. package/dist/plugins/company-etl/README.md +46 -0
  271. package/dist/plugins/company-etl/package.json +21 -0
  272. package/dist/plugins/company-etl/src/index.ts +29 -0
  273. package/dist/plugins/company-etl/src/manifest.ts +26 -0
  274. package/dist/plugins/company-etl/test/manifest.test.ts +108 -0
  275. package/dist/plugins/company-etl/tsconfig.json +8 -0
  276. package/dist/plugins/email-channel/README.md +41 -0
  277. package/dist/plugins/email-channel/package.json +22 -0
  278. package/dist/plugins/email-channel/src/index.ts +36 -0
  279. package/dist/plugins/email-channel/src/manifest.ts +44 -0
  280. package/dist/plugins/email-channel/src/provider-contract.ts +36 -0
  281. package/dist/plugins/email-channel/test/manifest.test.ts +119 -0
  282. package/dist/plugins/email-channel/tsconfig.json +8 -0
  283. package/dist/plugins/lastmile/README.md +50 -0
  284. package/dist/plugins/lastmile/package.json +23 -0
  285. package/dist/plugins/lastmile/smoke/lastmile-plugin-smoke.mjs +661 -0
  286. package/dist/plugins/lastmile/src/api/tasks-adapter.ts +572 -0
  287. package/dist/plugins/lastmile/src/discovery.fixture.ts +64 -0
  288. package/dist/plugins/lastmile/src/index.ts +46 -0
  289. package/dist/plugins/lastmile/src/manifest.ts +139 -0
  290. package/dist/plugins/lastmile/test/api/tasks-adapter.test.ts +266 -0
  291. package/dist/plugins/lastmile/test/discovery.test.ts +88 -0
  292. package/dist/plugins/lastmile/tsconfig.json +8 -0
  293. package/dist/plugins/n8n/README.md +201 -0
  294. package/dist/plugins/n8n/n8n-app/README.md +33 -0
  295. package/dist/plugins/n8n/n8n-app/package.json +23 -0
  296. package/dist/plugins/n8n/n8n-app/src/application-config.ts +45 -0
  297. package/dist/plugins/n8n/n8n-app/src/front-components/thinkwork-workflows.front-component.tsx +970 -0
  298. package/dist/plugins/n8n/n8n-app/src/lib/n8n-app-data.ts +190 -0
  299. package/dist/plugins/n8n/n8n-app/src/vite-env.d.ts +7 -0
  300. package/dist/plugins/n8n/n8n-app/tsconfig.json +15 -0
  301. package/dist/plugins/n8n/package.json +35 -0
  302. package/dist/plugins/n8n/runtime/Dockerfile +18 -0
  303. package/dist/plugins/n8n/runtime/n8n-task-runners.json +14 -0
  304. package/dist/plugins/n8n/runtime/n8n-task-runners.json.template +14 -0
  305. package/dist/plugins/n8n/runtime/package-lock.json +13 -0
  306. package/dist/plugins/n8n/runtime/package.json +7 -0
  307. package/dist/plugins/n8n/scripts/sync-thinkwork-app.mjs +268 -0
  308. package/dist/plugins/n8n/smoke/README.md +95 -0
  309. package/dist/plugins/n8n/smoke/n8n-agent-step-bridge-smoke.mjs +866 -0
  310. package/dist/plugins/n8n/smoke/n8n-integrated-app-smoke.mjs +262 -0
  311. package/dist/plugins/n8n/smoke/n8n-managed-app-smoke.mjs +409 -0
  312. package/dist/plugins/n8n/smoke/n8n-mcp-smoke.mjs +624 -0
  313. package/dist/plugins/n8n/src/deployment/image-build.ts +172 -0
  314. package/dist/plugins/n8n/src/deployment/managed-app.ts +429 -0
  315. package/dist/plugins/n8n/src/index.ts +79 -0
  316. package/dist/plugins/n8n/src/manifest.ts +403 -0
  317. package/dist/plugins/n8n/src/package-config.ts +186 -0
  318. package/dist/plugins/n8n/src/skills/n8n-workflow-operator/SKILL.md +76 -0
  319. package/dist/plugins/n8n/src/skills/n8n-workflow-operator/references/mcp-tooling.md +40 -0
  320. package/dist/plugins/n8n/src/skills/n8n-workflow-operator/references/validation-and-handoff.md +40 -0
  321. package/dist/plugins/n8n/src/skills/n8n-workflow-operator/references/workflow-authoring.md +45 -0
  322. package/dist/plugins/n8n/terraform/n8n/README.md +113 -0
  323. package/dist/plugins/n8n/terraform/n8n/main.tf +918 -0
  324. package/dist/plugins/n8n/terraform/n8n/outputs.tf +124 -0
  325. package/dist/plugins/n8n/terraform/n8n/scripts/sync-database.py +250 -0
  326. package/dist/plugins/n8n/terraform/n8n/scripts/test_sync_database.py +55 -0
  327. package/dist/plugins/n8n/terraform/n8n/variables.tf +354 -0
  328. package/dist/plugins/n8n/test/image-build.test.ts +118 -0
  329. package/dist/plugins/n8n/test/integrated-app-contract.test.ts +353 -0
  330. package/dist/plugins/n8n/test/manifest.test.ts +278 -0
  331. package/dist/plugins/n8n/test/package-config.test.ts +57 -0
  332. package/dist/plugins/n8n/tsconfig.json +8 -0
  333. package/dist/plugins/sendgrid/README.md +30 -0
  334. package/dist/plugins/sendgrid/package.json +22 -0
  335. package/dist/plugins/sendgrid/src/index.ts +36 -0
  336. package/dist/plugins/sendgrid/src/manifest.ts +37 -0
  337. package/dist/plugins/sendgrid/src/provider-contract.ts +14 -0
  338. package/dist/plugins/sendgrid/test/manifest.test.ts +80 -0
  339. package/dist/plugins/sendgrid/tsconfig.json +8 -0
  340. package/dist/plugins/twenty/README.md +78 -0
  341. package/dist/plugins/twenty/package.json +27 -0
  342. package/dist/plugins/twenty/scripts/__tests__/sync-thinkwork-app.test.mjs +67 -0
  343. package/dist/plugins/twenty/scripts/sync-thinkwork-app.mjs +185 -0
  344. package/dist/plugins/twenty/scripts/wire-thinkwork-workflow.mjs +658 -0
  345. package/dist/plugins/twenty/smoke/twenty-managed-app-smoke.mjs +359 -0
  346. package/dist/plugins/twenty/smoke/twenty-mcp-oauth-smoke.mjs +574 -0
  347. package/dist/plugins/twenty/src/api/cutover.ts +209 -0
  348. package/dist/plugins/twenty/src/deployment/managed-app.ts +253 -0
  349. package/dist/plugins/twenty/src/index.ts +55 -0
  350. package/dist/plugins/twenty/src/manifest.ts +259 -0
  351. package/dist/plugins/twenty/terraform/twenty/README.md +97 -0
  352. package/dist/plugins/twenty/terraform/twenty/main.tf +829 -0
  353. package/dist/plugins/twenty/terraform/twenty/outputs.tf +79 -0
  354. package/dist/plugins/twenty/terraform/twenty/variables.tf +268 -0
  355. package/dist/plugins/twenty/test/api/cutover.test.ts +183 -0
  356. package/dist/plugins/twenty/test/manifest.test.ts +463 -0
  357. package/dist/plugins/twenty/tsconfig.json +9 -0
  358. package/dist/plugins/twenty/twenty-app/.nvmrc +1 -0
  359. package/dist/plugins/twenty/twenty-app/README.md +148 -0
  360. package/dist/plugins/twenty/twenty-app/package.json +30 -0
  361. package/dist/plugins/twenty/twenty-app/src/application-config.ts +44 -0
  362. package/dist/plugins/twenty/twenty-app/src/constants/universal-identifiers.ts +18 -0
  363. package/dist/plugins/twenty/twenty-app/src/default-role.ts +24 -0
  364. package/dist/plugins/twenty/twenty-app/src/front-components/thinkwork-settings.front-component.tsx +299 -0
  365. package/dist/plugins/twenty/twenty-app/src/logic-functions/thinkwork-webhook.logic-function.ts +354 -0
  366. package/dist/plugins/twenty/twenty-app/tsconfig.json +14 -0
  367. package/dist/plugins/twenty/twenty-app/yarn.lock +4144 -0
  368. package/dist/plugins/workos-auth/package.json +22 -0
  369. package/dist/plugins/workos-auth/src/index.ts +30 -0
  370. package/dist/plugins/workos-auth/src/manifest.ts +40 -0
  371. package/dist/plugins/workos-auth/src/provider-contract.ts +39 -0
  372. package/dist/plugins/workos-auth/test/manifest.test.ts +94 -0
  373. package/dist/plugins/workos-auth/tsconfig.json +8 -0
  374. package/dist/scripts/bootstrap-workspace.sh +162 -0
  375. package/dist/scripts/post-deploy.sh +290 -0
  376. package/dist/terraform/examples/greenfield/main.tf +903 -75
  377. package/dist/terraform/examples/greenfield/terraform.tfvars.example +67 -8
  378. package/dist/terraform/modules/app/agentcore-code-interpreter/Dockerfile.sandbox-base +2 -2
  379. package/dist/terraform/modules/app/agentcore-code-interpreter/README.md +8 -9
  380. package/dist/terraform/modules/app/agentcore-code-interpreter/sandbox/sitecustomize.py +227 -0
  381. package/dist/terraform/modules/app/agentcore-code-interpreter/sandbox/test_sitecustomize.py +277 -0
  382. package/dist/terraform/modules/app/agentcore-memory/README.md +6 -6
  383. package/dist/terraform/modules/app/agentcore-memory/main.tf +1 -1
  384. package/dist/terraform/modules/app/agentcore-memory/scripts/create_or_find_memory.sh +40 -9
  385. package/dist/terraform/modules/app/agentcore-pi/README.md +61 -0
  386. package/dist/terraform/modules/app/agentcore-pi/main.tf +466 -0
  387. package/dist/terraform/modules/app/agentcore-pi/outputs.tf +38 -0
  388. package/dist/terraform/modules/app/agentcore-pi/variables.tf +145 -0
  389. package/dist/terraform/modules/app/agentcore-platform/main.tf +83 -0
  390. package/dist/terraform/modules/app/agentcore-runtime/main.tf +9 -11
  391. package/dist/terraform/modules/app/appsync-subscriptions/main.tf +5 -1
  392. package/dist/terraform/modules/app/customer-domain/main.tf +483 -0
  393. package/dist/terraform/modules/app/deployment-control-plane/README.md +47 -0
  394. package/dist/terraform/modules/app/deployment-control-plane/buildspec.yml +24 -0
  395. package/dist/terraform/modules/app/deployment-control-plane/main.tf +614 -0
  396. package/dist/terraform/modules/app/deployment-control-plane/outputs.tf +54 -0
  397. package/dist/terraform/modules/app/deployment-control-plane/runner.py +4720 -0
  398. package/dist/terraform/modules/app/deployment-control-plane/test_runner_bundle.py +3026 -0
  399. package/dist/terraform/modules/app/deployment-control-plane/variables.tf +96 -0
  400. package/dist/terraform/modules/app/hindsight-memory/README.md +25 -23
  401. package/dist/terraform/modules/app/hindsight-memory/main.tf +26 -2
  402. package/dist/terraform/modules/app/lambda-api/eval-fanout.tf +17 -50
  403. package/dist/terraform/modules/app/lambda-api/handlers.tf +1290 -679
  404. package/dist/terraform/modules/app/lambda-api/iam-grouped.tf +933 -0
  405. package/dist/terraform/modules/app/lambda-api/main.tf +14 -527
  406. package/dist/terraform/modules/app/lambda-api/mcp-oauth.tf +3 -19
  407. package/dist/terraform/modules/app/lambda-api/outputs.tf +50 -6
  408. package/dist/terraform/modules/app/lambda-api/runtime-config.tf +163 -0
  409. package/dist/terraform/modules/app/lambda-api/slack-app-secrets.tf +3 -1
  410. package/dist/terraform/modules/app/lambda-api/stripe-secrets.tf +3 -1
  411. package/dist/terraform/modules/app/lambda-api/variables.tf +240 -53
  412. package/dist/terraform/modules/app/lambda-api/workspace-events.tf +2 -25
  413. package/dist/terraform/modules/app/ses-email/main.tf +143 -30
  414. package/dist/terraform/modules/app/static-site/main.tf +4 -3
  415. package/dist/terraform/modules/app/www-dns/main.tf +45 -5
  416. package/dist/terraform/modules/app/www-dns/outputs.tf +10 -0
  417. package/dist/terraform/modules/app/www-dns/variables.tf +24 -0
  418. package/dist/terraform/modules/data/aurora-postgres/main.tf +15 -1
  419. package/dist/terraform/modules/data/compliance-exports-bucket/main.tf +1 -1
  420. package/dist/terraform/modules/data/compliance-exports-bucket/variables.tf +6 -0
  421. package/dist/terraform/modules/foundation/cognito/main.tf +167 -11
  422. package/dist/terraform/modules/foundation/cognito/outputs.tf +5 -0
  423. package/dist/terraform/modules/foundation/cognito/variables.tf +110 -0
  424. package/dist/terraform/modules/foundation/vpc/main.tf +45 -3
  425. package/dist/terraform/modules/foundation/vpc/outputs.tf +20 -0
  426. package/dist/terraform/modules/foundation/vpc/variables.tf +18 -0
  427. package/dist/terraform/modules/thinkwork/README.md +71 -0
  428. package/dist/terraform/modules/thinkwork/main.tf +1325 -174
  429. package/dist/terraform/modules/thinkwork/outputs.tf +457 -24
  430. package/dist/terraform/modules/thinkwork/variables.tf +1169 -93
  431. package/dist/terraform/schema.graphql +82 -9
  432. package/dist/workspace-defaults/files/AGENTS.md +344 -0
  433. package/dist/workspace-defaults/files/CONTEXT.md +8 -0
  434. package/dist/workspace-defaults/files/GUARDRAILS.md +51 -0
  435. package/dist/workspace-defaults/files/MEMORY_GUIDE.md +65 -0
  436. package/dist/workspace-defaults/files/ROUTER.md +24 -0
  437. package/dist/workspace-defaults/files/SPACE.md +62 -0
  438. package/dist/workspace-defaults/files/TOOLS.md +65 -0
  439. package/dist/workspace-defaults/files/USER.md +40 -0
  440. package/dist/workspace-defaults/files/mcp.json +3 -0
  441. package/dist/workspace-defaults/files/memory/contacts.md +13 -0
  442. package/dist/workspace-defaults/files/memory/lessons.md +13 -0
  443. package/dist/workspace-defaults/files/memory/preferences.md +12 -0
  444. package/dist/workspace-defaults/files/skills/.gitkeep +1 -0
  445. package/dist/workspace-defaults/files/skills/artifact-builder/SKILL.md +79 -0
  446. package/dist/workspace-defaults/files/skills/artifact-builder/references/crm-dashboard.md +166 -0
  447. package/dist/workspace-defaults/files/skills/automation-loop-designer/SKILL.md +120 -0
  448. package/dist/workspace-defaults/files/skills/skill-creator/LICENSE.txt +202 -0
  449. package/dist/workspace-defaults/files/skills/skill-creator/SKILL.md +485 -0
  450. package/dist/workspace-defaults/files/skills/skill-creator/UPSTREAM.json +124 -0
  451. package/dist/workspace-defaults/files/skills/skill-creator/agents/analyzer.md +274 -0
  452. package/dist/workspace-defaults/files/skills/skill-creator/agents/comparator.md +202 -0
  453. package/dist/workspace-defaults/files/skills/skill-creator/agents/grader.md +223 -0
  454. package/dist/workspace-defaults/files/skills/skill-creator/assets/eval_review.html +146 -0
  455. package/dist/workspace-defaults/files/skills/skill-creator/eval-viewer/generate_review.py +471 -0
  456. package/dist/workspace-defaults/files/skills/skill-creator/eval-viewer/viewer.html +1325 -0
  457. package/dist/workspace-defaults/files/skills/skill-creator/references/schemas.md +430 -0
  458. package/dist/workspace-defaults/files/skills/skill-creator/scripts/__init__.py +0 -0
  459. package/dist/workspace-defaults/files/skills/skill-creator/scripts/aggregate_benchmark.py +401 -0
  460. package/dist/workspace-defaults/files/skills/skill-creator/scripts/generate_report.py +326 -0
  461. package/dist/workspace-defaults/files/skills/skill-creator/scripts/improve_description.py +247 -0
  462. package/dist/workspace-defaults/files/skills/skill-creator/scripts/package_skill.py +136 -0
  463. package/dist/workspace-defaults/files/skills/skill-creator/scripts/quick_validate.py +103 -0
  464. package/dist/workspace-defaults/files/skills/skill-creator/scripts/run_eval.py +310 -0
  465. package/dist/workspace-defaults/files/skills/skill-creator/scripts/run_loop.py +328 -0
  466. package/dist/workspace-defaults/files/skills/skill-creator/scripts/utils.py +47 -0
  467. package/package.json +2 -1
  468. package/dist/terraform/modules/app/agentcore-flue/README.md +0 -58
  469. package/dist/terraform/modules/app/agentcore-flue/main.tf +0 -323
  470. package/dist/terraform/modules/app/agentcore-flue/outputs.tf +0 -23
  471. package/dist/terraform/modules/app/agentcore-flue/variables.tf +0 -97
  472. package/dist/terraform/modules/app/computer-runtime/README.md +0 -15
  473. package/dist/terraform/modules/app/computer-runtime/main.tf +0 -406
  474. package/dist/terraform/modules/app/computer-runtime/outputs.tf +0 -75
  475. package/dist/terraform/modules/app/computer-runtime/variables.tf +0 -66
@@ -0,0 +1,103 @@
1
+ CREATE TABLE "workflow_configs" (
2
+ "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
3
+ "tenant_id" uuid NOT NULL,
4
+ "team_id" uuid,
5
+ "dispatch" jsonb,
6
+ "concurrency" jsonb,
7
+ "retry" jsonb,
8
+ "turn_loop" jsonb,
9
+ "workspace" jsonb,
10
+ "stall_detection" jsonb,
11
+ "orchestration" jsonb,
12
+ "session_compaction" jsonb,
13
+ "prompt_template" text,
14
+ "created_at" timestamp with time zone DEFAULT now() NOT NULL,
15
+ "updated_at" timestamp with time zone DEFAULT now() NOT NULL
16
+ );
17
+ --> statement-breakpoint
18
+ CREATE TABLE "agent_mcp_servers" (
19
+ "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
20
+ "agent_id" uuid NOT NULL,
21
+ "tenant_id" uuid NOT NULL,
22
+ "mcp_server_id" uuid NOT NULL,
23
+ "enabled" boolean DEFAULT true NOT NULL,
24
+ "config" jsonb,
25
+ "created_at" timestamp with time zone DEFAULT now() NOT NULL,
26
+ "updated_at" timestamp with time zone DEFAULT now() NOT NULL
27
+ );
28
+ --> statement-breakpoint
29
+ CREATE TABLE "agent_template_mcp_servers" (
30
+ "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
31
+ "template_id" uuid NOT NULL,
32
+ "tenant_id" uuid NOT NULL,
33
+ "mcp_server_id" uuid NOT NULL,
34
+ "enabled" boolean DEFAULT true NOT NULL,
35
+ "config" jsonb,
36
+ "created_at" timestamp with time zone DEFAULT now() NOT NULL,
37
+ "updated_at" timestamp with time zone DEFAULT now() NOT NULL
38
+ );
39
+ --> statement-breakpoint
40
+ CREATE TABLE "tenant_mcp_servers" (
41
+ "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
42
+ "tenant_id" uuid NOT NULL,
43
+ "name" text NOT NULL,
44
+ "slug" text NOT NULL,
45
+ "url" text NOT NULL,
46
+ "transport" text DEFAULT 'streamable-http' NOT NULL,
47
+ "auth_type" text DEFAULT 'none' NOT NULL,
48
+ "auth_config" jsonb,
49
+ "oauth_provider" text,
50
+ "tools" jsonb,
51
+ "enabled" boolean DEFAULT true NOT NULL,
52
+ "created_at" timestamp with time zone DEFAULT now() NOT NULL,
53
+ "updated_at" timestamp with time zone DEFAULT now() NOT NULL
54
+ );
55
+ --> statement-breakpoint
56
+ CREATE TABLE "user_mcp_tokens" (
57
+ "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
58
+ "user_id" uuid NOT NULL,
59
+ "tenant_id" uuid NOT NULL,
60
+ "mcp_server_id" uuid NOT NULL,
61
+ "secret_ref" text NOT NULL,
62
+ "expires_at" timestamp with time zone,
63
+ "status" text DEFAULT 'active' NOT NULL,
64
+ "created_at" timestamp with time zone DEFAULT now() NOT NULL,
65
+ "updated_at" timestamp with time zone DEFAULT now() NOT NULL
66
+ );
67
+ --> statement-breakpoint
68
+ CREATE TABLE "tenant_builtin_tools" (
69
+ "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
70
+ "tenant_id" uuid NOT NULL,
71
+ "tool_slug" text NOT NULL,
72
+ "provider" text,
73
+ "enabled" boolean DEFAULT false NOT NULL,
74
+ "config" jsonb,
75
+ "secret_ref" text,
76
+ "last_tested_at" timestamp with time zone,
77
+ "created_at" timestamp with time zone DEFAULT now() NOT NULL,
78
+ "updated_at" timestamp with time zone DEFAULT now() NOT NULL
79
+ );
80
+ --> statement-breakpoint
81
+ ALTER TABLE "workflow_configs" ADD CONSTRAINT "workflow_configs_tenant_id_tenants_id_fk" FOREIGN KEY ("tenant_id") REFERENCES "public"."tenants"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
82
+ ALTER TABLE "workflow_configs" ADD CONSTRAINT "workflow_configs_team_id_teams_id_fk" FOREIGN KEY ("team_id") REFERENCES "public"."teams"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
83
+ ALTER TABLE "agent_mcp_servers" ADD CONSTRAINT "agent_mcp_servers_agent_id_agents_id_fk" FOREIGN KEY ("agent_id") REFERENCES "public"."agents"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
84
+ ALTER TABLE "agent_mcp_servers" ADD CONSTRAINT "agent_mcp_servers_tenant_id_tenants_id_fk" FOREIGN KEY ("tenant_id") REFERENCES "public"."tenants"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
85
+ ALTER TABLE "agent_mcp_servers" ADD CONSTRAINT "agent_mcp_servers_mcp_server_id_tenant_mcp_servers_id_fk" FOREIGN KEY ("mcp_server_id") REFERENCES "public"."tenant_mcp_servers"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
86
+ ALTER TABLE "agent_template_mcp_servers" ADD CONSTRAINT "agent_template_mcp_servers_tenant_id_tenants_id_fk" FOREIGN KEY ("tenant_id") REFERENCES "public"."tenants"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
87
+ ALTER TABLE "agent_template_mcp_servers" ADD CONSTRAINT "agent_template_mcp_servers_mcp_server_id_tenant_mcp_servers_id_fk" FOREIGN KEY ("mcp_server_id") REFERENCES "public"."tenant_mcp_servers"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
88
+ ALTER TABLE "tenant_mcp_servers" ADD CONSTRAINT "tenant_mcp_servers_tenant_id_tenants_id_fk" FOREIGN KEY ("tenant_id") REFERENCES "public"."tenants"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
89
+ ALTER TABLE "user_mcp_tokens" ADD CONSTRAINT "user_mcp_tokens_tenant_id_tenants_id_fk" FOREIGN KEY ("tenant_id") REFERENCES "public"."tenants"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
90
+ ALTER TABLE "user_mcp_tokens" ADD CONSTRAINT "user_mcp_tokens_mcp_server_id_tenant_mcp_servers_id_fk" FOREIGN KEY ("mcp_server_id") REFERENCES "public"."tenant_mcp_servers"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
91
+ ALTER TABLE "tenant_builtin_tools" ADD CONSTRAINT "tenant_builtin_tools_tenant_id_tenants_id_fk" FOREIGN KEY ("tenant_id") REFERENCES "public"."tenants"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
92
+ CREATE INDEX "workflow_configs_tenant_idx" ON "workflow_configs" USING btree ("tenant_id");--> statement-breakpoint
93
+ CREATE INDEX "workflow_configs_tenant_team_idx" ON "workflow_configs" USING btree ("tenant_id","team_id");--> statement-breakpoint
94
+ CREATE UNIQUE INDEX "uq_agent_mcp_servers" ON "agent_mcp_servers" USING btree ("agent_id","mcp_server_id");--> statement-breakpoint
95
+ CREATE INDEX "idx_agent_mcp_servers_agent" ON "agent_mcp_servers" USING btree ("agent_id");--> statement-breakpoint
96
+ CREATE UNIQUE INDEX "uq_agent_template_mcp_servers" ON "agent_template_mcp_servers" USING btree ("template_id","mcp_server_id");--> statement-breakpoint
97
+ CREATE INDEX "idx_agent_template_mcp_servers_template" ON "agent_template_mcp_servers" USING btree ("template_id");--> statement-breakpoint
98
+ CREATE UNIQUE INDEX "uq_tenant_mcp_servers_slug" ON "tenant_mcp_servers" USING btree ("tenant_id","slug");--> statement-breakpoint
99
+ CREATE INDEX "idx_tenant_mcp_servers_tenant" ON "tenant_mcp_servers" USING btree ("tenant_id");--> statement-breakpoint
100
+ CREATE UNIQUE INDEX "uq_user_mcp_tokens" ON "user_mcp_tokens" USING btree ("user_id","mcp_server_id");--> statement-breakpoint
101
+ CREATE INDEX "idx_user_mcp_tokens_user" ON "user_mcp_tokens" USING btree ("user_id");--> statement-breakpoint
102
+ CREATE UNIQUE INDEX "uq_tenant_builtin_tools" ON "tenant_builtin_tools" USING btree ("tenant_id","tool_slug");--> statement-breakpoint
103
+ CREATE INDEX "idx_tenant_builtin_tools_tenant" ON "tenant_builtin_tools" USING btree ("tenant_id");
@@ -0,0 +1,41 @@
1
+ CREATE TABLE "webhook_deliveries" (
2
+ "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
3
+ "webhook_id" uuid,
4
+ "tenant_id" uuid,
5
+ "target_type" text,
6
+ "provider_id" uuid,
7
+ "provider_name" text,
8
+ "provider_event_id" text,
9
+ "external_task_id" text,
10
+ "provider_user_id" text,
11
+ "normalized_kind" text,
12
+ "received_at" timestamp with time zone DEFAULT now() NOT NULL,
13
+ "source_ip" text,
14
+ "body_preview" text,
15
+ "body_sha256" text,
16
+ "body_size_bytes" integer,
17
+ "headers_safe" jsonb,
18
+ "signature_prefix" text,
19
+ "signature_status" text NOT NULL,
20
+ "resolution_status" text NOT NULL,
21
+ "thread_id" uuid,
22
+ "thread_created" boolean,
23
+ "status_code" integer,
24
+ "error_message" text,
25
+ "duration_ms" integer,
26
+ "retry_count" integer DEFAULT 0 NOT NULL,
27
+ "is_replay" boolean DEFAULT false NOT NULL,
28
+ "created_at" timestamp with time zone DEFAULT now() NOT NULL,
29
+ "updated_at" timestamp with time zone DEFAULT now() NOT NULL
30
+ );
31
+ --> statement-breakpoint
32
+ ALTER TABLE "webhooks" ADD COLUMN "connect_provider_id" uuid;--> statement-breakpoint
33
+ ALTER TABLE "webhook_deliveries" ADD CONSTRAINT "webhook_deliveries_webhook_id_webhooks_id_fk" FOREIGN KEY ("webhook_id") REFERENCES "public"."webhooks"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
34
+ ALTER TABLE "webhook_deliveries" ADD CONSTRAINT "webhook_deliveries_tenant_id_tenants_id_fk" FOREIGN KEY ("tenant_id") REFERENCES "public"."tenants"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
35
+ ALTER TABLE "webhook_deliveries" ADD CONSTRAINT "webhook_deliveries_provider_id_connect_providers_id_fk" FOREIGN KEY ("provider_id") REFERENCES "public"."connect_providers"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
36
+ CREATE INDEX "idx_webhook_deliveries_webhook_received" ON "webhook_deliveries" USING btree ("webhook_id","received_at");--> statement-breakpoint
37
+ CREATE INDEX "idx_webhook_deliveries_tenant_received" ON "webhook_deliveries" USING btree ("tenant_id","received_at");--> statement-breakpoint
38
+ CREATE INDEX "idx_webhook_deliveries_status" ON "webhook_deliveries" USING btree ("resolution_status");--> statement-breakpoint
39
+ CREATE UNIQUE INDEX "uq_webhook_deliveries_provider_event" ON "webhook_deliveries" USING btree ("provider_name","provider_event_id") WHERE provider_event_id IS NOT NULL;--> statement-breakpoint
40
+ ALTER TABLE "webhooks" ADD CONSTRAINT "webhooks_connect_provider_id_connect_providers_id_fk" FOREIGN KEY ("connect_provider_id") REFERENCES "public"."connect_providers"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
41
+ CREATE INDEX "idx_webhooks_provider_tenant" ON "webhooks" USING btree ("connect_provider_id","tenant_id");
@@ -0,0 +1,3 @@
1
+ ALTER TABLE "webhook_deliveries" DROP CONSTRAINT "webhook_deliveries_webhook_id_webhooks_id_fk";
2
+ --> statement-breakpoint
3
+ ALTER TABLE "webhook_deliveries" ADD CONSTRAINT "webhook_deliveries_webhook_id_webhooks_id_fk" FOREIGN KEY ("webhook_id") REFERENCES "public"."webhooks"("id") ON DELETE set null ON UPDATE no action;
@@ -0,0 +1,2 @@
1
+ DROP INDEX "uq_webhook_deliveries_provider_event";--> statement-breakpoint
2
+ CREATE INDEX "idx_webhook_deliveries_provider_event" ON "webhook_deliveries" USING btree ("provider_name","provider_event_id");
@@ -0,0 +1,2 @@
1
+ ALTER TABLE "user_quick_actions" ADD COLUMN "scope" text DEFAULT 'thread' NOT NULL;--> statement-breakpoint
2
+ CREATE INDEX "idx_user_quick_actions_user_tenant_scope" ON "user_quick_actions" USING btree ("user_id","tenant_id","scope");
@@ -0,0 +1,2 @@
1
+ ALTER TABLE "threads" ADD COLUMN "sync_status" text;--> statement-breakpoint
2
+ ALTER TABLE "threads" ADD COLUMN "sync_error" text;
@@ -0,0 +1,31 @@
1
+ -- Defensive unique index on external task correlation key.
2
+ --
3
+ -- Background: a single external task-create can fire multiple webhooks in quick
4
+ -- succession (task.created + assigned/status_changed/updated). Each
5
+ -- lambda invocation races to ensure the thread; without a uniqueness
6
+ -- guarantee, concurrent inserts all succeed and we end up with 4
7
+ -- duplicate threads for the same external task. The application-side
8
+ -- fix (in-process stamping in chat-agent-invoke) closes the race for
9
+ -- MCP-driven creates, but this index is the backstop for any other
10
+ -- code path that could hit the race.
11
+ --
12
+ -- Partial index — only enforces when the external task id is
13
+ -- populated, so pre-sync threads (metadata.workflowId set, no
14
+ -- externalTaskId yet) remain unconstrained.
15
+ --
16
+ -- Heads up for operators: if there are existing duplicate rows with
17
+ -- the same (tenant_id, externalTaskId), this CREATE will fail. Clean
18
+ -- up duplicates manually before applying this migration, e.g.
19
+ -- SELECT tenant_id, metadata->'external'->>'externalTaskId' AS eid,
20
+ -- COUNT(*), array_agg(id ORDER BY created_at) AS ids
21
+ -- FROM threads
22
+ -- WHERE metadata->'external'->>'externalTaskId' IS NOT NULL
23
+ -- GROUP BY 1, 2 HAVING COUNT(*) > 1;
24
+ -- then delete all but the first id per group.
25
+
26
+ CREATE UNIQUE INDEX IF NOT EXISTS "threads_tenant_external_task_id_unique"
27
+ ON "threads" (
28
+ "tenant_id",
29
+ ((metadata -> 'external' ->> 'externalTaskId'))
30
+ )
31
+ WHERE (metadata -> 'external' ->> 'externalTaskId') IS NOT NULL;
@@ -0,0 +1,43 @@
1
+ -- Promote `metadata.external.externalTaskId` to a first-class column.
2
+ --
3
+ -- Background: this id is the hot lookup key for every inbound webhook
4
+ -- (correlation + idempotency), and is used by the mobile Tasks list
5
+ -- and the `ensureExternalTaskThread` upsert. A JSONB-expression index
6
+ -- was the wrong shape. We keep the rest of `metadata.external` in
7
+ -- JSONB (provider, connectionId, latestEnvelope) since those aren't
8
+ -- hot keys.
9
+
10
+ ALTER TABLE "threads" ADD COLUMN IF NOT EXISTS "external_task_id" text;--> statement-breakpoint
11
+
12
+ -- Backfill from existing rows.
13
+ UPDATE "threads"
14
+ SET "external_task_id" = metadata -> 'external' ->> 'externalTaskId'
15
+ WHERE (metadata -> 'external' ->> 'externalTaskId') IS NOT NULL
16
+ AND "external_task_id" IS NULL;--> statement-breakpoint
17
+
18
+ -- Collapse duplicate rows that accumulated before the in-process
19
+ -- stamping fix (chat-agent-invoke). Keeps the earliest row per
20
+ -- (tenant_id, external_task_id) group, deletes the rest. Necessary
21
+ -- prerequisite for the unique index below.
22
+ WITH dupes AS (
23
+ SELECT id,
24
+ ROW_NUMBER() OVER (
25
+ PARTITION BY tenant_id, external_task_id
26
+ ORDER BY created_at ASC, id ASC
27
+ ) AS rn
28
+ FROM "threads"
29
+ WHERE external_task_id IS NOT NULL
30
+ )
31
+ DELETE FROM "threads"
32
+ WHERE id IN (SELECT id FROM dupes WHERE rn > 1);--> statement-breakpoint
33
+
34
+ -- Drop the old JSONB-expression unique index from migration 0007 (if
35
+ -- it was created — the partial index may have failed on deploy if
36
+ -- dupes were present).
37
+ DROP INDEX IF EXISTS "threads_tenant_external_task_id_unique";--> statement-breakpoint
38
+
39
+ -- Defensive unique index on the new column. Partial so pre-sync
40
+ -- threads (NULL external_task_id) remain unconstrained.
41
+ CREATE UNIQUE INDEX IF NOT EXISTS "threads_tenant_external_task_id_unique"
42
+ ON "threads" ("tenant_id", "external_task_id")
43
+ WHERE external_task_id IS NOT NULL;
@@ -0,0 +1,64 @@
1
+ CREATE TABLE "eval_results" (
2
+ "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
3
+ "run_id" uuid NOT NULL,
4
+ "test_case_id" uuid,
5
+ "status" text NOT NULL,
6
+ "score" numeric(5, 4),
7
+ "duration_ms" integer,
8
+ "agent_session_id" text,
9
+ "input" text,
10
+ "expected" text,
11
+ "actual_output" text,
12
+ "evaluator_results" jsonb DEFAULT '[]'::jsonb NOT NULL,
13
+ "assertions" jsonb DEFAULT '[]'::jsonb NOT NULL,
14
+ "error_message" text,
15
+ "created_at" timestamp with time zone DEFAULT now() NOT NULL
16
+ );
17
+ --> statement-breakpoint
18
+ CREATE TABLE "eval_runs" (
19
+ "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
20
+ "tenant_id" uuid NOT NULL,
21
+ "agent_id" uuid,
22
+ "status" text DEFAULT 'pending' NOT NULL,
23
+ "model" text,
24
+ "categories" text[] DEFAULT '{}'::text[] NOT NULL,
25
+ "total_tests" integer DEFAULT 0 NOT NULL,
26
+ "passed" integer DEFAULT 0 NOT NULL,
27
+ "failed" integer DEFAULT 0 NOT NULL,
28
+ "pass_rate" numeric(5, 4),
29
+ "regression" boolean DEFAULT false NOT NULL,
30
+ "cost_usd" numeric(12, 6),
31
+ "error_message" text,
32
+ "started_at" timestamp with time zone,
33
+ "completed_at" timestamp with time zone,
34
+ "created_at" timestamp with time zone DEFAULT now() NOT NULL
35
+ );
36
+ --> statement-breakpoint
37
+ CREATE TABLE "eval_test_cases" (
38
+ "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
39
+ "tenant_id" uuid NOT NULL,
40
+ "name" text NOT NULL,
41
+ "category" text NOT NULL,
42
+ "query" text NOT NULL,
43
+ "system_prompt" text,
44
+ "assertions" jsonb DEFAULT '[]'::jsonb NOT NULL,
45
+ "agentcore_evaluator_ids" text[] DEFAULT '{}'::text[] NOT NULL,
46
+ "tags" text[] DEFAULT '{}'::text[] NOT NULL,
47
+ "enabled" boolean DEFAULT true NOT NULL,
48
+ "source" text DEFAULT 'manual' NOT NULL,
49
+ "created_at" timestamp with time zone DEFAULT now() NOT NULL,
50
+ "updated_at" timestamp with time zone DEFAULT now() NOT NULL
51
+ );
52
+ --> statement-breakpoint
53
+ ALTER TABLE "eval_results" ADD CONSTRAINT "eval_results_run_id_eval_runs_id_fk" FOREIGN KEY ("run_id") REFERENCES "public"."eval_runs"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
54
+ ALTER TABLE "eval_results" ADD CONSTRAINT "eval_results_test_case_id_eval_test_cases_id_fk" FOREIGN KEY ("test_case_id") REFERENCES "public"."eval_test_cases"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
55
+ ALTER TABLE "eval_runs" ADD CONSTRAINT "eval_runs_tenant_id_tenants_id_fk" FOREIGN KEY ("tenant_id") REFERENCES "public"."tenants"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
56
+ ALTER TABLE "eval_runs" ADD CONSTRAINT "eval_runs_agent_id_agents_id_fk" FOREIGN KEY ("agent_id") REFERENCES "public"."agents"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
57
+ ALTER TABLE "eval_test_cases" ADD CONSTRAINT "eval_test_cases_tenant_id_tenants_id_fk" FOREIGN KEY ("tenant_id") REFERENCES "public"."tenants"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
58
+ CREATE INDEX "idx_eval_results_run" ON "eval_results" USING btree ("run_id");--> statement-breakpoint
59
+ CREATE INDEX "idx_eval_results_test_case_created" ON "eval_results" USING btree ("test_case_id","created_at");--> statement-breakpoint
60
+ CREATE INDEX "idx_eval_runs_tenant_created" ON "eval_runs" USING btree ("tenant_id","created_at");--> statement-breakpoint
61
+ CREATE INDEX "idx_eval_runs_tenant_agent_created" ON "eval_runs" USING btree ("tenant_id","agent_id","created_at");--> statement-breakpoint
62
+ CREATE INDEX "idx_eval_runs_tenant_status" ON "eval_runs" USING btree ("tenant_id","status");--> statement-breakpoint
63
+ CREATE INDEX "idx_eval_test_cases_tenant_category" ON "eval_test_cases" USING btree ("tenant_id","category");--> statement-breakpoint
64
+ CREATE INDEX "idx_eval_test_cases_tenant_enabled" ON "eval_test_cases" USING btree ("tenant_id","enabled");
@@ -0,0 +1,2 @@
1
+ ALTER TABLE "eval_test_cases" ADD COLUMN "agent_template_id" uuid;--> statement-breakpoint
2
+ ALTER TABLE "eval_test_cases" ADD CONSTRAINT "eval_test_cases_agent_template_id_agent_templates_id_fk" FOREIGN KEY ("agent_template_id") REFERENCES "public"."agent_templates"("id") ON DELETE no action ON UPDATE no action;
@@ -0,0 +1,2 @@
1
+ ALTER TABLE "eval_runs" ADD COLUMN "agent_template_id" uuid;--> statement-breakpoint
2
+ ALTER TABLE "eval_runs" ADD CONSTRAINT "eval_runs_agent_template_id_agent_templates_id_fk" FOREIGN KEY ("agent_template_id") REFERENCES "public"."agent_templates"("id") ON DELETE no action ON UPDATE no action;
@@ -0,0 +1,16 @@
1
+ -- Idempotency for the seedEvalTestCases mutation. Without this, calling
2
+ -- seedEvalTestCases twice would duplicate every yaml-seed row. The partial
3
+ -- index intentionally scopes to source='yaml-seed' so user-authored tests
4
+ -- can re-use any name they like without colliding with the seed pack.
5
+ --
6
+ -- Apply manually (not registered in drizzle/meta/_journal.json):
7
+ -- psql "$DATABASE_URL" -f packages/database-pg/drizzle/0012_eval_seed_unique.sql
8
+ --
9
+ -- Drift detection:
10
+ -- bash scripts/db-migrate-manual.sh
11
+ --
12
+ -- creates: public.uq_eval_test_cases_tenant_seed_name
13
+
14
+ CREATE UNIQUE INDEX IF NOT EXISTS uq_eval_test_cases_tenant_seed_name
15
+ ON eval_test_cases (tenant_id, name)
16
+ WHERE source = 'yaml-seed';
@@ -0,0 +1,140 @@
1
+ -- Compounding Memory (wiki) schema. pgvector is required for body_embedding
2
+ -- on wiki_page_sections. Extension is idempotent; already installed on dev
3
+ -- Aurora (0.7.4) but needed by any fresh environment.
4
+ CREATE EXTENSION IF NOT EXISTS vector;
5
+ --> statement-breakpoint
6
+ CREATE TABLE "wiki_compile_cursors" (
7
+ "tenant_id" uuid NOT NULL,
8
+ "owner_id" uuid NOT NULL,
9
+ "last_record_updated_at" timestamp with time zone,
10
+ "last_record_id" text,
11
+ "updated_at" timestamp with time zone DEFAULT now() NOT NULL,
12
+ CONSTRAINT "wiki_compile_cursors_pkey" PRIMARY KEY("tenant_id","owner_id")
13
+ );
14
+ --> statement-breakpoint
15
+ CREATE TABLE "wiki_compile_jobs" (
16
+ "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
17
+ "tenant_id" uuid NOT NULL,
18
+ "owner_id" uuid NOT NULL,
19
+ "dedupe_key" text NOT NULL,
20
+ "status" text DEFAULT 'pending' NOT NULL,
21
+ "trigger" text NOT NULL,
22
+ "attempt" integer DEFAULT 0 NOT NULL,
23
+ "claimed_at" timestamp with time zone,
24
+ "started_at" timestamp with time zone,
25
+ "finished_at" timestamp with time zone,
26
+ "error" text,
27
+ "metrics" jsonb,
28
+ "created_at" timestamp with time zone DEFAULT now() NOT NULL,
29
+ CONSTRAINT "wiki_compile_jobs_dedupe_key_unique" UNIQUE("dedupe_key")
30
+ );
31
+ --> statement-breakpoint
32
+ CREATE TABLE "wiki_page_aliases" (
33
+ "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
34
+ "page_id" uuid NOT NULL,
35
+ "alias" text NOT NULL,
36
+ "source" text NOT NULL,
37
+ "created_at" timestamp with time zone DEFAULT now() NOT NULL
38
+ );
39
+ --> statement-breakpoint
40
+ CREATE TABLE "wiki_page_links" (
41
+ "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
42
+ "from_page_id" uuid NOT NULL,
43
+ "to_page_id" uuid NOT NULL,
44
+ "context" text,
45
+ "created_at" timestamp with time zone DEFAULT now() NOT NULL
46
+ );
47
+ --> statement-breakpoint
48
+ CREATE TABLE "wiki_page_sections" (
49
+ "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
50
+ "page_id" uuid NOT NULL,
51
+ "section_slug" text NOT NULL,
52
+ "heading" text NOT NULL,
53
+ "body_md" text NOT NULL,
54
+ "position" integer NOT NULL,
55
+ "body_embedding" vector(1024),
56
+ "last_source_at" timestamp with time zone,
57
+ "created_at" timestamp with time zone DEFAULT now() NOT NULL,
58
+ "updated_at" timestamp with time zone DEFAULT now() NOT NULL
59
+ );
60
+ --> statement-breakpoint
61
+ CREATE TABLE "wiki_pages" (
62
+ "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
63
+ "tenant_id" uuid NOT NULL,
64
+ "owner_id" uuid NOT NULL,
65
+ "type" text NOT NULL,
66
+ "slug" text NOT NULL,
67
+ "title" text NOT NULL,
68
+ "summary" text,
69
+ "body_md" text,
70
+ "search_tsv" "tsvector" GENERATED ALWAYS AS (to_tsvector('english'::regconfig, coalesce(title,'') || ' ' || coalesce(summary,'') || ' ' || coalesce(body_md,''))) STORED,
71
+ "status" text DEFAULT 'active' NOT NULL,
72
+ "last_compiled_at" timestamp with time zone,
73
+ "created_at" timestamp with time zone DEFAULT now() NOT NULL,
74
+ "updated_at" timestamp with time zone DEFAULT now() NOT NULL
75
+ );
76
+ --> statement-breakpoint
77
+ CREATE TABLE "wiki_section_sources" (
78
+ "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
79
+ "section_id" uuid NOT NULL,
80
+ "source_kind" text NOT NULL,
81
+ "source_ref" text NOT NULL,
82
+ "first_seen_at" timestamp with time zone DEFAULT now() NOT NULL
83
+ );
84
+ --> statement-breakpoint
85
+ CREATE TABLE "wiki_unresolved_mentions" (
86
+ "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
87
+ "tenant_id" uuid NOT NULL,
88
+ "owner_id" uuid NOT NULL,
89
+ "alias" text NOT NULL,
90
+ "alias_normalized" text NOT NULL,
91
+ "mention_count" integer DEFAULT 1 NOT NULL,
92
+ "first_seen_at" timestamp with time zone DEFAULT now() NOT NULL,
93
+ "last_seen_at" timestamp with time zone DEFAULT now() NOT NULL,
94
+ "sample_contexts" jsonb DEFAULT '[]'::jsonb NOT NULL,
95
+ "suggested_type" text,
96
+ "status" text DEFAULT 'open' NOT NULL,
97
+ "promoted_page_id" uuid,
98
+ "updated_at" timestamp with time zone DEFAULT now() NOT NULL
99
+ );
100
+ --> statement-breakpoint
101
+ ALTER TABLE "tenants" ADD COLUMN "wiki_compile_enabled" boolean DEFAULT false NOT NULL;--> statement-breakpoint
102
+ ALTER TABLE "wiki_compile_cursors" ADD CONSTRAINT "wiki_compile_cursors_tenant_id_tenants_id_fk" FOREIGN KEY ("tenant_id") REFERENCES "public"."tenants"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
103
+ ALTER TABLE "wiki_compile_cursors" ADD CONSTRAINT "wiki_compile_cursors_owner_id_agents_id_fk" FOREIGN KEY ("owner_id") REFERENCES "public"."agents"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
104
+ ALTER TABLE "wiki_compile_jobs" ADD CONSTRAINT "wiki_compile_jobs_tenant_id_tenants_id_fk" FOREIGN KEY ("tenant_id") REFERENCES "public"."tenants"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
105
+ ALTER TABLE "wiki_compile_jobs" ADD CONSTRAINT "wiki_compile_jobs_owner_id_agents_id_fk" FOREIGN KEY ("owner_id") REFERENCES "public"."agents"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
106
+ ALTER TABLE "wiki_page_aliases" ADD CONSTRAINT "wiki_page_aliases_page_id_wiki_pages_id_fk" FOREIGN KEY ("page_id") REFERENCES "public"."wiki_pages"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
107
+ ALTER TABLE "wiki_page_links" ADD CONSTRAINT "wiki_page_links_from_page_id_wiki_pages_id_fk" FOREIGN KEY ("from_page_id") REFERENCES "public"."wiki_pages"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
108
+ ALTER TABLE "wiki_page_links" ADD CONSTRAINT "wiki_page_links_to_page_id_wiki_pages_id_fk" FOREIGN KEY ("to_page_id") REFERENCES "public"."wiki_pages"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
109
+ ALTER TABLE "wiki_page_sections" ADD CONSTRAINT "wiki_page_sections_page_id_wiki_pages_id_fk" FOREIGN KEY ("page_id") REFERENCES "public"."wiki_pages"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
110
+ ALTER TABLE "wiki_pages" ADD CONSTRAINT "wiki_pages_tenant_id_tenants_id_fk" FOREIGN KEY ("tenant_id") REFERENCES "public"."tenants"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
111
+ ALTER TABLE "wiki_pages" ADD CONSTRAINT "wiki_pages_owner_id_agents_id_fk" FOREIGN KEY ("owner_id") REFERENCES "public"."agents"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
112
+ ALTER TABLE "wiki_section_sources" ADD CONSTRAINT "wiki_section_sources_section_id_wiki_page_sections_id_fk" FOREIGN KEY ("section_id") REFERENCES "public"."wiki_page_sections"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
113
+ ALTER TABLE "wiki_unresolved_mentions" ADD CONSTRAINT "wiki_unresolved_mentions_tenant_id_tenants_id_fk" FOREIGN KEY ("tenant_id") REFERENCES "public"."tenants"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
114
+ ALTER TABLE "wiki_unresolved_mentions" ADD CONSTRAINT "wiki_unresolved_mentions_owner_id_agents_id_fk" FOREIGN KEY ("owner_id") REFERENCES "public"."agents"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
115
+ ALTER TABLE "wiki_unresolved_mentions" ADD CONSTRAINT "wiki_unresolved_mentions_promoted_page_id_wiki_pages_id_fk" FOREIGN KEY ("promoted_page_id") REFERENCES "public"."wiki_pages"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
116
+ CREATE INDEX "idx_wiki_compile_jobs_scope_status_created" ON "wiki_compile_jobs" USING btree ("tenant_id","owner_id","status","created_at");--> statement-breakpoint
117
+ CREATE INDEX "idx_wiki_compile_jobs_status_created" ON "wiki_compile_jobs" USING btree ("status","created_at");--> statement-breakpoint
118
+ CREATE UNIQUE INDEX "uq_wiki_page_aliases_page_alias" ON "wiki_page_aliases" USING btree ("page_id","alias");--> statement-breakpoint
119
+ CREATE INDEX "idx_wiki_page_aliases_alias" ON "wiki_page_aliases" USING btree ("alias");--> statement-breakpoint
120
+ CREATE UNIQUE INDEX "uq_wiki_page_links_from_to" ON "wiki_page_links" USING btree ("from_page_id","to_page_id");--> statement-breakpoint
121
+ CREATE INDEX "idx_wiki_page_links_to" ON "wiki_page_links" USING btree ("to_page_id");--> statement-breakpoint
122
+ CREATE UNIQUE INDEX "uq_wiki_page_sections_page_slug" ON "wiki_page_sections" USING btree ("page_id","section_slug");--> statement-breakpoint
123
+ CREATE INDEX "idx_wiki_page_sections_page_position" ON "wiki_page_sections" USING btree ("page_id","position");--> statement-breakpoint
124
+ CREATE UNIQUE INDEX "uq_wiki_pages_tenant_owner_type_slug" ON "wiki_pages" USING btree ("tenant_id","owner_id","type","slug");--> statement-breakpoint
125
+ CREATE INDEX "idx_wiki_pages_tenant_owner_type_status" ON "wiki_pages" USING btree ("tenant_id","owner_id","type","status");--> statement-breakpoint
126
+ CREATE INDEX "idx_wiki_pages_owner" ON "wiki_pages" USING btree ("owner_id");--> statement-breakpoint
127
+ CREATE INDEX "idx_wiki_pages_last_compiled" ON "wiki_pages" USING btree ("last_compiled_at");--> statement-breakpoint
128
+ CREATE INDEX "idx_wiki_pages_search_tsv" ON "wiki_pages" USING gin ("search_tsv");--> statement-breakpoint
129
+ CREATE UNIQUE INDEX "uq_wiki_section_sources_section_kind_ref" ON "wiki_section_sources" USING btree ("section_id","source_kind","source_ref");--> statement-breakpoint
130
+ CREATE INDEX "idx_wiki_section_sources_kind_ref" ON "wiki_section_sources" USING btree ("source_kind","source_ref");--> statement-breakpoint
131
+ CREATE UNIQUE INDEX "uq_wiki_unresolved_mentions_scope_alias_status" ON "wiki_unresolved_mentions" USING btree ("tenant_id","owner_id","alias_normalized","status");--> statement-breakpoint
132
+ CREATE INDEX "idx_wiki_unresolved_mentions_tenant_owner_status" ON "wiki_unresolved_mentions" USING btree ("tenant_id","owner_id","status");--> statement-breakpoint
133
+ CREATE INDEX "idx_wiki_unresolved_mentions_status_last_seen" ON "wiki_unresolved_mentions" USING btree ("status","last_seen_at");--> statement-breakpoint
134
+ -- Catch-up DROP COLUMNs for threads. The Task-concept strip (commit c4b92d2)
135
+ -- removed these from the Drizzle schema module but never emitted a migration.
136
+ -- Bundling them here keeps the schema snapshot (meta/0012_*_snapshot.json) and
137
+ -- the live DB consistent. Not part of the wiki feature.
138
+ ALTER TABLE "threads" DROP COLUMN IF EXISTS "sync_status";--> statement-breakpoint
139
+ ALTER TABLE "threads" DROP COLUMN IF EXISTS "sync_error";--> statement-breakpoint
140
+ ALTER TABLE "threads" DROP COLUMN IF EXISTS "external_task_id";
@@ -0,0 +1,11 @@
1
+ DROP INDEX "uq_wiki_page_links_from_to";--> statement-breakpoint
2
+ ALTER TABLE "wiki_page_links" ADD COLUMN "kind" text DEFAULT 'reference' NOT NULL;--> statement-breakpoint
3
+ ALTER TABLE "wiki_page_sections" ADD COLUMN "aggregation" jsonb;--> statement-breakpoint
4
+ ALTER TABLE "wiki_pages" ADD COLUMN "parent_page_id" uuid;--> statement-breakpoint
5
+ ALTER TABLE "wiki_pages" ADD COLUMN "hubness_score" integer DEFAULT 0 NOT NULL;--> statement-breakpoint
6
+ ALTER TABLE "wiki_pages" ADD COLUMN "tags" text[] DEFAULT ARRAY[]::text[] NOT NULL;--> statement-breakpoint
7
+ ALTER TABLE "wiki_unresolved_mentions" ADD COLUMN "cluster" jsonb;--> statement-breakpoint
8
+ ALTER TABLE "wiki_pages" ADD CONSTRAINT "wiki_pages_parent_page_id_wiki_pages_id_fk" FOREIGN KEY ("parent_page_id") REFERENCES "public"."wiki_pages"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
9
+ CREATE UNIQUE INDEX "uq_wiki_page_links_from_to_kind" ON "wiki_page_links" USING btree ("from_page_id","to_page_id","kind");--> statement-breakpoint
10
+ CREATE INDEX "idx_wiki_page_links_kind" ON "wiki_page_links" USING btree ("kind");--> statement-breakpoint
11
+ CREATE INDEX "idx_wiki_pages_parent" ON "wiki_pages" USING btree ("parent_page_id");
@@ -0,0 +1,9 @@
1
+ -- Hand-edited: prepend CREATE EXTENSION so greenfield deploys bring pg_trgm
2
+ -- up before the GIN indexes reference `gin_trgm_ops`. On dev / prod RDS the
3
+ -- extension is already installed (shared with Hindsight's similarity filter)
4
+ -- so this is a no-op. `CREATE INDEX CONCURRENTLY` was considered but cannot
5
+ -- run inside a transaction block, and drizzle wraps every migration in one —
6
+ -- the plain form is safe for our table sizes (<10k rows per scope).
7
+ CREATE EXTENSION IF NOT EXISTS pg_trgm;--> statement-breakpoint
8
+ CREATE INDEX "idx_wiki_page_aliases_alias_trgm" ON "wiki_page_aliases" USING gin ("alias" gin_trgm_ops);--> statement-breakpoint
9
+ CREATE INDEX "idx_wiki_pages_title_trgm" ON "wiki_pages" USING gin ("title" gin_trgm_ops);
@@ -0,0 +1,24 @@
1
+ -- Drop two wiki schema columns that were pre-emptively added in anticipation
2
+ -- of features that never shipped and were later killed by adversarial review:
3
+ --
4
+ -- - wiki_page_sections.body_embedding (vector(1024)):
5
+ -- "present but NULL in v1" per the original migration. pgvector
6
+ -- extension stays; only this column goes. Re-add later if embeddings
7
+ -- ship.
8
+ --
9
+ -- - wiki_unresolved_mentions.cluster (jsonb):
10
+ -- cluster enrichment feature was killed and superseded by the Place
11
+ -- capability (see docs/brainstorms/2026-04-21-wiki-place-capability-
12
+ -- requirements.md).
13
+ --
14
+ -- Pre-flight SQL run against dev on 2026-04-21 returned 0/1638 non-null
15
+ -- cluster rows and 0/2279 non-null body_embedding rows. Both columns are
16
+ -- verifiably unused.
17
+ --
18
+ -- Each DROP is wrapped in a DO-block that RE-CHECKS at migration apply time
19
+ -- and RAISEs EXCEPTION if a concurrent writer landed a value between
20
+ -- pre-flight and apply, so silent data loss is impossible.
21
+ DO $$ BEGIN IF (SELECT count(*) FROM wiki_page_sections WHERE body_embedding IS NOT NULL) > 0 THEN RAISE EXCEPTION 'wiki_page_sections.body_embedding contains non-null rows; aborting DROP COLUMN'; END IF; END $$;--> statement-breakpoint
22
+ ALTER TABLE "wiki_page_sections" DROP COLUMN IF EXISTS "body_embedding";--> statement-breakpoint
23
+ DO $$ BEGIN IF (SELECT count(*) FROM wiki_unresolved_mentions WHERE cluster IS NOT NULL) > 0 THEN RAISE EXCEPTION 'wiki_unresolved_mentions.cluster contains non-null rows; aborting DROP COLUMN'; END IF; END $$;--> statement-breakpoint
24
+ ALTER TABLE "wiki_unresolved_mentions" DROP COLUMN IF EXISTS "cluster";
@@ -0,0 +1,46 @@
1
+ -- Wiki Place capability v2 — first-class wiki_places table + wiki_pages.place_id FK.
2
+ --
3
+ -- See docs/plans/2026-04-21-005-feat-wiki-place-capability-v2-plan.md.
4
+ --
5
+ -- Purely additive; no existing rows are rewritten. The partial unique index
6
+ -- on (tenant_id, owner_id, google_place_id) WHERE google_place_id IS NOT NULL
7
+ -- enforces first-seen-wins for Google-sourced places within a scope.
8
+ --
9
+ -- No CI migration runner — apply manually via
10
+ -- psql "$DATABASE_URL" -f packages/database-pg/drizzle/0017_wiki_places.sql
11
+ -- after PR A merges and before any code that references wiki_places runs in
12
+ -- production. See the plan's Documentation / Operational Notes section.
13
+ --
14
+ -- Pre-migration invariant (always true on day one since the table is new;
15
+ -- pattern documented for future loaders):
16
+ -- SELECT tenant_id, owner_id, google_place_id, count(*)
17
+ -- FROM wiki_places
18
+ -- WHERE google_place_id IS NOT NULL
19
+ -- GROUP BY 1, 2, 3 HAVING count(*) > 1;
20
+ -- must return zero rows before the unique index is created.
21
+ CREATE TABLE "wiki_places" (
22
+ "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
23
+ "tenant_id" uuid NOT NULL,
24
+ "owner_id" uuid NOT NULL,
25
+ "name" text NOT NULL,
26
+ "google_place_id" text,
27
+ "geo_lat" numeric(9, 6),
28
+ "geo_lon" numeric(9, 6),
29
+ "address" text,
30
+ "parent_place_id" uuid,
31
+ "place_kind" text,
32
+ "source" text NOT NULL,
33
+ "source_payload" jsonb,
34
+ "created_at" timestamp with time zone DEFAULT now() NOT NULL,
35
+ "updated_at" timestamp with time zone DEFAULT now() NOT NULL
36
+ );
37
+ --> statement-breakpoint
38
+ ALTER TABLE "wiki_pages" ADD COLUMN "place_id" uuid;--> statement-breakpoint
39
+ ALTER TABLE "wiki_places" ADD CONSTRAINT "wiki_places_tenant_id_tenants_id_fk" FOREIGN KEY ("tenant_id") REFERENCES "public"."tenants"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
40
+ ALTER TABLE "wiki_places" ADD CONSTRAINT "wiki_places_owner_id_agents_id_fk" FOREIGN KEY ("owner_id") REFERENCES "public"."agents"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
41
+ ALTER TABLE "wiki_places" ADD CONSTRAINT "wiki_places_parent_place_id_wiki_places_id_fk" FOREIGN KEY ("parent_place_id") REFERENCES "public"."wiki_places"("id") ON DELETE set null ON UPDATE no action;--> statement-breakpoint
42
+ CREATE INDEX "idx_wiki_places_tenant_owner" ON "wiki_places" USING btree ("tenant_id","owner_id");--> statement-breakpoint
43
+ CREATE INDEX "idx_wiki_places_parent" ON "wiki_places" USING btree ("parent_place_id");--> statement-breakpoint
44
+ CREATE UNIQUE INDEX "uq_wiki_places_scope_google_place_id" ON "wiki_places" USING btree ("tenant_id","owner_id","google_place_id") WHERE "wiki_places"."google_place_id" IS NOT NULL;--> statement-breakpoint
45
+ ALTER TABLE "wiki_pages" ADD CONSTRAINT "wiki_pages_place_id_wiki_places_id_fk" FOREIGN KEY ("place_id") REFERENCES "public"."wiki_places"("id") ON DELETE set null ON UPDATE no action;--> statement-breakpoint
46
+ CREATE INDEX "idx_wiki_pages_place_id" ON "wiki_pages" USING btree ("place_id") WHERE "wiki_pages"."place_id" IS NOT NULL;
@@ -0,0 +1,26 @@
1
+ -- Agent workspace overlay foundation — schema additions for Unit 1 of
2
+ -- docs/plans/2026-04-21-006-feat-agent-workspace-overlay-and-seeding-plan.md.
3
+ --
4
+ -- Adds:
5
+ -- • user_profiles.title / .timezone / .pronouns — rendered into agent USER.md
6
+ -- as {{HUMAN_TITLE}} / {{HUMAN_TIMEZONE}} / {{HUMAN_PRONOUNS}} during the
7
+ -- assignment write (Unit 6). Null → renders as "—" so the shape is stable.
8
+ -- • agents.agent_pinned_versions — per-file SHA-256 pins for guardrail-class
9
+ -- workspace files (GUARDRAILS.md, PLATFORM.md, CAPABILITIES.md). Keys are
10
+ -- canonical basenames; values are `sha256:<64-hex>` strings. Null until the
11
+ -- agent is created via createAgentFromTemplate (Unit 8) or converted by the
12
+ -- one-shot migration (Unit 10). Template edits to pinned files surface a
13
+ -- "Template update available" badge; acceptTemplateUpdate advances the hash.
14
+ --
15
+ -- Purely additive; no backfill needed. Column additions with NULL default are
16
+ -- non-blocking in Postgres regardless of row count.
17
+ --
18
+ -- No CI migration runner — apply manually via
19
+ -- psql "$DATABASE_URL" -f packages/database-pg/drizzle/0018_agent_workspace_overlay.sql
20
+ -- after this PR merges and before any Phase 3 Lambda code (Units 6, 8, 10) that
21
+ -- references these columns deploys to production. See the plan's Documentation
22
+ -- / Operational Notes section.
23
+ ALTER TABLE "user_profiles" ADD COLUMN "title" text;--> statement-breakpoint
24
+ ALTER TABLE "user_profiles" ADD COLUMN "timezone" text;--> statement-breakpoint
25
+ ALTER TABLE "user_profiles" ADD COLUMN "pronouns" text;--> statement-breakpoint
26
+ ALTER TABLE "agents" ADD COLUMN "agent_pinned_versions" jsonb;
@@ -0,0 +1,24 @@
1
+ -- Agent self-serve tools — user_profiles columns for Unit 1 of
2
+ -- docs/plans/2026-04-22-003-feat-agent-self-serve-tools-plan.md.
3
+ --
4
+ -- Adds 4 nullable text columns that agents can update through the new
5
+ -- `update_user_profile` tool:
6
+ --
7
+ -- • call_by → rendered into USER.md as {{HUMAN_CALL_BY}}
8
+ -- • notes → rendered into USER.md as {{HUMAN_NOTES}}
9
+ -- • family → rendered into USER.md as {{HUMAN_FAMILY}}
10
+ -- • context → rendered into USER.md as {{HUMAN_CONTEXT}}
11
+ --
12
+ -- USER.md's {{HUMAN_PHONE}} is read from the existing `users.phone`
13
+ -- column (account-level contact info) — no separate profile column.
14
+ --
15
+ -- All nullable with no default — existing rows render "—" for each field
16
+ -- until the agent (or a human via the admin UI) populates them.
17
+ --
18
+ -- Purely additive; ADD COLUMN nullable on Postgres is O(1) regardless of
19
+ -- row count.
20
+
21
+ ALTER TABLE "user_profiles" ADD COLUMN "call_by" text;--> statement-breakpoint
22
+ ALTER TABLE "user_profiles" ADD COLUMN "notes" text;--> statement-breakpoint
23
+ ALTER TABLE "user_profiles" ADD COLUMN "family" text;--> statement-breakpoint
24
+ ALTER TABLE "user_profiles" ADD COLUMN "context" text;