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,217 @@
1
+ -- Purpose: make Spaces the required parent container for every Thread.
2
+ -- Plan: docs/plans/2026-05-19-003-feat-spaces-customer-onboarding-v1-plan.md (U13 follow-up)
3
+ -- Apply manually: psql "$DATABASE_URL" -v ON_ERROR_STOP=1 -f packages/database-pg/drizzle/0109_space_owned_threads.sql
4
+ -- creates-constraint: public.threads.threads_space_id_required
5
+ -- creates-constraint: public.thread_participants.thread_participants_space_id_required
6
+
7
+ \set ON_ERROR_STOP on
8
+
9
+ BEGIN;
10
+
11
+ SET LOCAL lock_timeout = '5s';
12
+ SET LOCAL statement_timeout = '120s';
13
+
14
+ INSERT INTO public.spaces (
15
+ tenant_id,
16
+ slug,
17
+ name,
18
+ description,
19
+ prompt,
20
+ status,
21
+ kind,
22
+ template_key,
23
+ config
24
+ )
25
+ SELECT
26
+ t.id,
27
+ 'general',
28
+ 'General',
29
+ 'Default Space for conversations that are not part of a configured workflow.',
30
+ 'Use this Space for general collaboration, ad hoc questions, and Threads that do not belong to a specialized workflow.',
31
+ 'active',
32
+ 'custom',
33
+ 'general',
34
+ '{"workflow":"general","version":1,"source":"space_owned_threads_migration"}'::jsonb
35
+ FROM public.tenants t
36
+ ON CONFLICT (tenant_id, slug)
37
+ DO UPDATE SET
38
+ name = EXCLUDED.name,
39
+ description = EXCLUDED.description,
40
+ prompt = EXCLUDED.prompt,
41
+ status = 'active',
42
+ kind = EXCLUDED.kind,
43
+ template_key = EXCLUDED.template_key,
44
+ config = EXCLUDED.config,
45
+ updated_at = now();
46
+
47
+ INSERT INTO public.spaces (
48
+ tenant_id,
49
+ slug,
50
+ name,
51
+ description,
52
+ prompt,
53
+ status,
54
+ kind,
55
+ template_key,
56
+ config
57
+ )
58
+ SELECT
59
+ t.id,
60
+ 'customer-onboarding',
61
+ 'Customer Onboarding',
62
+ 'Closed-won customer onboarding cases, checklist coordination, and LastMile task links.',
63
+ 'Coordinate customer onboarding after a closed-won opportunity. Keep the Thread factual, ask humans for missing source information, and keep required checklist tasks moving.',
64
+ 'active',
65
+ 'customer_onboarding',
66
+ 'customer_onboarding',
67
+ '{"workflow":"customer_onboarding","version":1,"source":"space_owned_threads_migration"}'::jsonb
68
+ FROM public.tenants t
69
+ ON CONFLICT (tenant_id, slug)
70
+ DO UPDATE SET
71
+ name = EXCLUDED.name,
72
+ description = EXCLUDED.description,
73
+ prompt = COALESCE(public.spaces.prompt, EXCLUDED.prompt),
74
+ status = 'active',
75
+ kind = EXCLUDED.kind,
76
+ template_key = EXCLUDED.template_key,
77
+ config = COALESCE(public.spaces.config, EXCLUDED.config),
78
+ updated_at = now();
79
+
80
+ INSERT INTO public.space_members (
81
+ tenant_id,
82
+ space_id,
83
+ user_id,
84
+ role,
85
+ notification_preference
86
+ )
87
+ SELECT
88
+ u.tenant_id,
89
+ s.id,
90
+ u.id,
91
+ 'member',
92
+ 'subscribed'
93
+ FROM public.users u
94
+ JOIN public.spaces s
95
+ ON s.tenant_id = u.tenant_id
96
+ WHERE u.tenant_id IS NOT NULL
97
+ AND s.slug IN ('general', 'customer-onboarding')
98
+ ON CONFLICT (tenant_id, space_id, user_id)
99
+ DO NOTHING;
100
+
101
+ UPDATE public.threads t
102
+ SET
103
+ space_id = CASE
104
+ WHEN t.metadata ? 'customerOnboarding' THEN onboarding.id
105
+ ELSE general.id
106
+ END,
107
+ updated_at = now()
108
+ FROM public.spaces general
109
+ JOIN public.spaces onboarding
110
+ ON onboarding.tenant_id = general.tenant_id
111
+ AND onboarding.slug = 'customer-onboarding'
112
+ WHERE general.tenant_id = t.tenant_id
113
+ AND general.slug = 'general'
114
+ AND t.space_id IS NULL;
115
+
116
+ UPDATE public.thread_participants tp
117
+ SET
118
+ space_id = t.space_id,
119
+ updated_at = now()
120
+ FROM public.threads t
121
+ WHERE tp.thread_id = t.id
122
+ AND tp.space_id IS NULL
123
+ AND t.space_id IS NOT NULL;
124
+
125
+ INSERT INTO public.thread_participants (
126
+ tenant_id,
127
+ thread_id,
128
+ space_id,
129
+ participant_type,
130
+ user_id,
131
+ role,
132
+ source,
133
+ notification_preference
134
+ )
135
+ SELECT
136
+ t.tenant_id,
137
+ t.id,
138
+ t.space_id,
139
+ 'user',
140
+ t.user_id,
141
+ CASE WHEN t.created_by_id = t.user_id::text THEN 'requester' ELSE 'member' END,
142
+ 'space_owned_threads_backfill',
143
+ 'subscribed'
144
+ FROM public.threads t
145
+ WHERE t.space_id IS NOT NULL
146
+ AND t.user_id IS NOT NULL
147
+ ON CONFLICT DO NOTHING;
148
+
149
+ INSERT INTO public.thread_participants (
150
+ tenant_id,
151
+ thread_id,
152
+ space_id,
153
+ participant_type,
154
+ agent_id,
155
+ role,
156
+ source,
157
+ notification_preference
158
+ )
159
+ SELECT
160
+ t.tenant_id,
161
+ t.id,
162
+ t.space_id,
163
+ 'agent',
164
+ t.agent_id,
165
+ 'agent',
166
+ 'space_owned_threads_backfill',
167
+ 'mentions'
168
+ FROM public.threads t
169
+ WHERE t.space_id IS NOT NULL
170
+ AND t.agent_id IS NOT NULL
171
+ ON CONFLICT DO NOTHING;
172
+
173
+ ALTER TABLE public.threads
174
+ DROP CONSTRAINT IF EXISTS threads_space_id_spaces_id_fk;
175
+
176
+ ALTER TABLE public.threads
177
+ DROP CONSTRAINT IF EXISTS threads_space_id_required;
178
+
179
+ ALTER TABLE public.threads
180
+ ALTER COLUMN space_id SET NOT NULL;
181
+
182
+ ALTER TABLE public.threads
183
+ ADD CONSTRAINT threads_space_id_spaces_id_fk
184
+ FOREIGN KEY (space_id)
185
+ REFERENCES public.spaces(id)
186
+ ON DELETE RESTRICT;
187
+
188
+ ALTER TABLE public.threads
189
+ ADD CONSTRAINT threads_space_id_required
190
+ CHECK (space_id IS NOT NULL) NOT VALID;
191
+
192
+ ALTER TABLE public.threads
193
+ VALIDATE CONSTRAINT threads_space_id_required;
194
+
195
+ ALTER TABLE public.thread_participants
196
+ DROP CONSTRAINT IF EXISTS thread_participants_space_id_spaces_id_fk;
197
+
198
+ ALTER TABLE public.thread_participants
199
+ DROP CONSTRAINT IF EXISTS thread_participants_space_id_required;
200
+
201
+ ALTER TABLE public.thread_participants
202
+ ALTER COLUMN space_id SET NOT NULL;
203
+
204
+ ALTER TABLE public.thread_participants
205
+ ADD CONSTRAINT thread_participants_space_id_spaces_id_fk
206
+ FOREIGN KEY (space_id)
207
+ REFERENCES public.spaces(id)
208
+ ON DELETE RESTRICT;
209
+
210
+ ALTER TABLE public.thread_participants
211
+ ADD CONSTRAINT thread_participants_space_id_required
212
+ CHECK (space_id IS NOT NULL) NOT VALID;
213
+
214
+ ALTER TABLE public.thread_participants
215
+ VALIDATE CONSTRAINT thread_participants_space_id_required;
216
+
217
+ COMMIT;
@@ -0,0 +1,21 @@
1
+ -- Purpose: add participant-scoped read state for collaborative Space Threads.
2
+ -- Plan: docs/plans/2026-05-19-005-feat-spaces-collaborative-chat-ui-plan.md (U1)
3
+ -- Apply manually: psql "$DATABASE_URL" -v ON_ERROR_STOP=1 -f packages/database-pg/drizzle/0110_thread_participant_read_state.sql
4
+ -- creates-column: public.thread_participants.last_read_at
5
+ -- creates: public.idx_thread_participants_user_unread
6
+
7
+ \set ON_ERROR_STOP on
8
+
9
+ BEGIN;
10
+
11
+ SET LOCAL lock_timeout = '5s';
12
+ SET LOCAL statement_timeout = '120s';
13
+
14
+ ALTER TABLE public.thread_participants
15
+ ADD COLUMN IF NOT EXISTS last_read_at timestamptz;
16
+
17
+ CREATE INDEX IF NOT EXISTS idx_thread_participants_user_unread
18
+ ON public.thread_participants (tenant_id, user_id, last_read_at)
19
+ WHERE participant_type = 'user' AND user_id IS NOT NULL;
20
+
21
+ COMMIT;
@@ -0,0 +1,38 @@
1
+ -- Purpose: make agent names tenant-unique so they can serve as mention identities.
2
+ -- Plan: docs/plans/2026-05-20-001-fix-agent-mentions-and-unread-routing-plan.md (U1)
3
+ -- Apply manually: psql "$DATABASE_URL" -v ON_ERROR_STOP=1 -f packages/database-pg/drizzle/0111_agents_tenant_name_unique.sql
4
+ -- creates: public.uq_agents_tenant_name_active
5
+
6
+ \set ON_ERROR_STOP on
7
+
8
+ BEGIN;
9
+
10
+ SET LOCAL lock_timeout = '5s';
11
+ SET LOCAL statement_timeout = '120s';
12
+
13
+ DO $$
14
+ DECLARE
15
+ duplicate_count integer;
16
+ BEGIN
17
+ SELECT COUNT(*)::integer
18
+ INTO duplicate_count
19
+ FROM (
20
+ SELECT tenant_id, lower(trim(name)) AS normalized_name
21
+ FROM public.agents
22
+ WHERE status <> 'archived'
23
+ GROUP BY tenant_id, lower(trim(name))
24
+ HAVING COUNT(*) > 1
25
+ ) duplicates;
26
+
27
+ IF duplicate_count > 0 THEN
28
+ RAISE EXCEPTION
29
+ 'Cannot create uq_agents_tenant_name_active: % active tenant/name duplicate group(s) exist',
30
+ duplicate_count;
31
+ END IF;
32
+ END $$;
33
+
34
+ CREATE UNIQUE INDEX IF NOT EXISTS uq_agents_tenant_name_active
35
+ ON public.agents (tenant_id, lower(trim(name)))
36
+ WHERE status <> 'archived';
37
+
38
+ COMMIT;
@@ -0,0 +1,138 @@
1
+ -- Purpose: recast Spaces as contextual workrooms with context/tool/MCP policy surfaces.
2
+ -- Plan: docs/plans/2026-05-20-003-spaces-as-agent-contextual-workrooms-template-removal-plan.md (U3)
3
+ -- Apply manually: psql "$DATABASE_URL" -v ON_ERROR_STOP=1 -f packages/database-pg/drizzle/0112_recast_spaces_as_contextual_workrooms.sql
4
+ -- creates-column: public.spaces.icon
5
+ -- creates-column: public.spaces.category
6
+ -- creates-column: public.spaces.context_config
7
+ -- creates-column: public.spaces.connected_data_config
8
+ -- creates-column: public.spaces.tool_policy
9
+ -- creates-column: public.spaces.mcp_policy
10
+ -- creates-column: public.spaces.agent_availability_policy
11
+ -- creates-column: public.spaces.trigger_config
12
+ -- creates-column: public.spaces.render_diagnostics
13
+ -- creates: public.space_mcp_servers
14
+ -- creates: public.uq_space_mcp_servers
15
+ -- creates: public.idx_space_mcp_servers_space
16
+ -- creates: public.idx_space_mcp_servers_server
17
+ -- creates-trigger: public.space_mcp_servers.space_mcp_servers_tenant_guard
18
+ -- creates-constraint: public.space_mcp_servers.space_mcp_servers_tenant_id_tenants_id_fk
19
+ -- creates-constraint: public.space_mcp_servers.space_mcp_servers_space_id_spaces_id_fk
20
+ -- creates-constraint: public.space_mcp_servers.space_mcp_servers_mcp_server_id_tenant_mcp_servers_id_fk
21
+
22
+ \set ON_ERROR_STOP on
23
+
24
+ BEGIN;
25
+
26
+ SET LOCAL lock_timeout = '5s';
27
+ SET LOCAL statement_timeout = '120s';
28
+
29
+ ALTER TABLE public.spaces
30
+ ADD COLUMN IF NOT EXISTS icon text,
31
+ ADD COLUMN IF NOT EXISTS category text,
32
+ ADD COLUMN IF NOT EXISTS context_config jsonb,
33
+ ADD COLUMN IF NOT EXISTS connected_data_config jsonb,
34
+ ADD COLUMN IF NOT EXISTS tool_policy jsonb,
35
+ ADD COLUMN IF NOT EXISTS mcp_policy jsonb,
36
+ ADD COLUMN IF NOT EXISTS agent_availability_policy jsonb,
37
+ ADD COLUMN IF NOT EXISTS trigger_config jsonb,
38
+ ADD COLUMN IF NOT EXISTS render_diagnostics jsonb;
39
+
40
+ CREATE TABLE IF NOT EXISTS public.space_mcp_servers (
41
+ id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
42
+ tenant_id uuid NOT NULL,
43
+ space_id uuid NOT NULL,
44
+ mcp_server_id uuid NOT NULL,
45
+ enabled boolean NOT NULL DEFAULT true,
46
+ config jsonb,
47
+ created_at timestamptz NOT NULL DEFAULT now(),
48
+ updated_at timestamptz NOT NULL DEFAULT now(),
49
+ CONSTRAINT space_mcp_servers_tenant_id_tenants_id_fk
50
+ FOREIGN KEY (tenant_id)
51
+ REFERENCES public.tenants(id)
52
+ ON DELETE CASCADE,
53
+ CONSTRAINT space_mcp_servers_space_id_spaces_id_fk
54
+ FOREIGN KEY (space_id)
55
+ REFERENCES public.spaces(id)
56
+ ON DELETE CASCADE,
57
+ CONSTRAINT space_mcp_servers_mcp_server_id_tenant_mcp_servers_id_fk
58
+ FOREIGN KEY (mcp_server_id)
59
+ REFERENCES public.tenant_mcp_servers(id)
60
+ );
61
+
62
+ CREATE UNIQUE INDEX IF NOT EXISTS uq_space_mcp_servers
63
+ ON public.space_mcp_servers (space_id, mcp_server_id);
64
+
65
+ CREATE INDEX IF NOT EXISTS idx_space_mcp_servers_space
66
+ ON public.space_mcp_servers (tenant_id, space_id);
67
+
68
+ CREATE INDEX IF NOT EXISTS idx_space_mcp_servers_server
69
+ ON public.space_mcp_servers (tenant_id, mcp_server_id);
70
+
71
+ CREATE OR REPLACE FUNCTION public.enforce_space_child_tenant()
72
+ RETURNS trigger
73
+ LANGUAGE plpgsql
74
+ AS $$
75
+ DECLARE
76
+ target_tenant_id uuid;
77
+ BEGIN
78
+ SELECT tenant_id INTO target_tenant_id
79
+ FROM public.spaces
80
+ WHERE id = NEW.space_id;
81
+
82
+ IF target_tenant_id IS NULL OR target_tenant_id <> NEW.tenant_id THEN
83
+ RAISE EXCEPTION 'space child tenant mismatch for space %', NEW.space_id
84
+ USING ERRCODE = '23514';
85
+ END IF;
86
+
87
+ IF TG_TABLE_NAME = 'space_members' THEN
88
+ SELECT tenant_id INTO target_tenant_id
89
+ FROM public.users
90
+ WHERE id = NEW.user_id;
91
+
92
+ IF target_tenant_id IS NULL OR target_tenant_id <> NEW.tenant_id THEN
93
+ RAISE EXCEPTION 'space member tenant mismatch for user %', NEW.user_id
94
+ USING ERRCODE = '23514';
95
+ END IF;
96
+ ELSIF TG_TABLE_NAME = 'space_agent_assignments' THEN
97
+ SELECT tenant_id INTO target_tenant_id
98
+ FROM public.agents
99
+ WHERE id = NEW.agent_id;
100
+
101
+ IF target_tenant_id IS NULL OR target_tenant_id <> NEW.tenant_id THEN
102
+ RAISE EXCEPTION 'space agent assignment tenant mismatch for agent %', NEW.agent_id
103
+ USING ERRCODE = '23514';
104
+ END IF;
105
+ ELSIF TG_TABLE_NAME = 'space_checklist_items' THEN
106
+ SELECT tenant_id INTO target_tenant_id
107
+ FROM public.space_checklist_templates
108
+ WHERE id = NEW.template_id;
109
+
110
+ IF target_tenant_id IS NULL OR target_tenant_id <> NEW.tenant_id THEN
111
+ RAISE EXCEPTION 'space checklist item tenant mismatch for template %', NEW.template_id
112
+ USING ERRCODE = '23514';
113
+ END IF;
114
+ ELSIF TG_TABLE_NAME = 'space_mcp_servers' THEN
115
+ SELECT tenant_id INTO target_tenant_id
116
+ FROM public.tenant_mcp_servers
117
+ WHERE id = NEW.mcp_server_id;
118
+
119
+ IF target_tenant_id IS NULL OR target_tenant_id <> NEW.tenant_id THEN
120
+ RAISE EXCEPTION 'space MCP server tenant mismatch for MCP server %', NEW.mcp_server_id
121
+ USING ERRCODE = '23514';
122
+ END IF;
123
+ END IF;
124
+
125
+ RETURN NEW;
126
+ END;
127
+ $$;
128
+
129
+ DROP TRIGGER IF EXISTS space_mcp_servers_tenant_guard
130
+ ON public.space_mcp_servers;
131
+
132
+ CREATE TRIGGER space_mcp_servers_tenant_guard
133
+ BEFORE INSERT OR UPDATE
134
+ ON public.space_mcp_servers
135
+ FOR EACH ROW
136
+ EXECUTE FUNCTION public.enforce_space_child_tenant();
137
+
138
+ COMMIT;
@@ -0,0 +1,48 @@
1
+ -- Purpose: move durable runtime and operational policy fields from Templates onto Agents.
2
+ -- Plan: docs/plans/2026-05-20-003-spaces-as-agent-contextual-workrooms-template-removal-plan.md (U4)
3
+ -- Apply manually: psql "$DATABASE_URL" -v ON_ERROR_STOP=1 -f packages/database-pg/drizzle/0113_agents_own_runtime_fields.sql
4
+ -- creates-column: public.agents.model
5
+ -- creates-column: public.agents.guardrail_id
6
+ -- creates-column: public.agents.blocked_tools
7
+ -- creates-column: public.agents.sandbox
8
+ -- creates-column: public.agents.browser
9
+ -- creates-column: public.agents.web_search
10
+ -- creates-column: public.agents.send_email
11
+ -- creates-column: public.agents.context_engine
12
+ -- creates-constraint: public.agents.agents_guardrail_id_guardrails_id_fk
13
+
14
+ \set ON_ERROR_STOP on
15
+
16
+ BEGIN;
17
+
18
+ SET LOCAL lock_timeout = '5s';
19
+ SET LOCAL statement_timeout = '120s';
20
+
21
+ ALTER TABLE public.agents
22
+ ADD COLUMN IF NOT EXISTS model text,
23
+ ADD COLUMN IF NOT EXISTS guardrail_id uuid,
24
+ ADD COLUMN IF NOT EXISTS blocked_tools jsonb,
25
+ ADD COLUMN IF NOT EXISTS sandbox jsonb,
26
+ ADD COLUMN IF NOT EXISTS browser jsonb,
27
+ ADD COLUMN IF NOT EXISTS web_search jsonb DEFAULT '{"enabled": true}'::jsonb,
28
+ ADD COLUMN IF NOT EXISTS send_email jsonb DEFAULT '{"enabled": true}'::jsonb,
29
+ ADD COLUMN IF NOT EXISTS context_engine jsonb DEFAULT '{"enabled": true}'::jsonb,
30
+ ALTER COLUMN template_id DROP NOT NULL;
31
+
32
+ DO $$
33
+ BEGIN
34
+ IF NOT EXISTS (
35
+ SELECT 1
36
+ FROM pg_constraint
37
+ WHERE conname = 'agents_guardrail_id_guardrails_id_fk'
38
+ AND conrelid = 'public.agents'::regclass
39
+ ) THEN
40
+ ALTER TABLE public.agents
41
+ ADD CONSTRAINT agents_guardrail_id_guardrails_id_fk
42
+ FOREIGN KEY (guardrail_id)
43
+ REFERENCES public.guardrails(id);
44
+ END IF;
45
+ END
46
+ $$;
47
+
48
+ COMMIT;