thinkwork-cli 0.12.12 → 0.12.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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 +22123 -9219
  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,171 @@
1
+ -- Purpose: add user-level cost attribution and user budget policy support.
2
+ -- Plan: docs/plans/2026-06-05-002-feat-user-cost-budgets-plan.md U1
3
+ -- Apply manually (no CI migration runner):
4
+ -- psql "$DATABASE_URL" -v ON_ERROR_STOP=1 -f packages/database-pg/drizzle/0148_user_cost_attribution.sql
5
+ -- Pre-flight:
6
+ -- SELECT scope, count(*) FROM public.budget_policies GROUP BY scope;
7
+ -- SELECT count(*) FROM public.cost_events WHERE user_id IS NULL;
8
+ -- SELECT column_name FROM information_schema.columns WHERE table_schema = 'public' AND table_name = 'cost_events' AND column_name = 'user_id';
9
+ -- SELECT column_name FROM information_schema.columns WHERE table_schema = 'public' AND table_name = 'budget_policies' AND column_name = 'user_id';
10
+ -- SELECT column_name FROM information_schema.columns WHERE table_schema = 'public' AND table_name = 'scheduled_jobs' AND column_name = 'budget_paused';
11
+ -- creates-column: public.cost_events.user_id
12
+ -- creates-column: public.budget_policies.user_id
13
+ -- creates-column: public.scheduled_jobs.budget_paused
14
+ -- creates-column: public.scheduled_jobs.budget_paused_at
15
+ -- creates-column: public.scheduled_jobs.budget_paused_reason
16
+ -- creates: public.idx_cost_events_user_created
17
+ -- creates: public.idx_budget_policies_user
18
+ -- creates: public.idx_scheduled_jobs_budget_paused
19
+ -- creates-constraint: public.cost_events.cost_events_user_id_users_id_fk
20
+ -- creates-constraint: public.budget_policies.budget_policies_user_id_users_id_fk
21
+ -- creates-constraint: public.budget_policies.budget_policies_scope_check
22
+ -- creates-constraint: public.budget_policies.budget_policies_scope_shape_check
23
+
24
+ \set ON_ERROR_STOP on
25
+
26
+ SET lock_timeout = '5s';
27
+ SET statement_timeout = '15min';
28
+
29
+ SELECT pg_advisory_lock(hashtext('migration:0148_user_cost_attribution'));
30
+
31
+ ALTER TABLE public.cost_events
32
+ ADD COLUMN IF NOT EXISTS user_id uuid;
33
+
34
+ ALTER TABLE public.budget_policies
35
+ ADD COLUMN IF NOT EXISTS user_id uuid;
36
+
37
+ ALTER TABLE public.scheduled_jobs
38
+ ADD COLUMN IF NOT EXISTS budget_paused boolean NOT NULL DEFAULT false,
39
+ ADD COLUMN IF NOT EXISTS budget_paused_at timestamptz,
40
+ ADD COLUMN IF NOT EXISTS budget_paused_reason text;
41
+
42
+ DO $$
43
+ BEGIN
44
+ IF NOT EXISTS (
45
+ SELECT 1
46
+ FROM pg_constraint
47
+ WHERE conname = 'cost_events_user_id_users_id_fk'
48
+ AND conrelid = 'public.cost_events'::regclass
49
+ ) THEN
50
+ ALTER TABLE public.cost_events
51
+ ADD CONSTRAINT cost_events_user_id_users_id_fk
52
+ FOREIGN KEY (user_id)
53
+ REFERENCES public.users(id)
54
+ NOT VALID;
55
+ END IF;
56
+ END $$;
57
+
58
+ DO $$
59
+ BEGIN
60
+ IF NOT EXISTS (
61
+ SELECT 1
62
+ FROM pg_constraint
63
+ WHERE conname = 'budget_policies_user_id_users_id_fk'
64
+ AND conrelid = 'public.budget_policies'::regclass
65
+ ) THEN
66
+ ALTER TABLE public.budget_policies
67
+ ADD CONSTRAINT budget_policies_user_id_users_id_fk
68
+ FOREIGN KEY (user_id)
69
+ REFERENCES public.users(id)
70
+ NOT VALID;
71
+ END IF;
72
+ END $$;
73
+
74
+ DO $$
75
+ BEGIN
76
+ IF NOT EXISTS (
77
+ SELECT 1
78
+ FROM pg_constraint
79
+ WHERE conname = 'budget_policies_scope_check'
80
+ AND conrelid = 'public.budget_policies'::regclass
81
+ ) THEN
82
+ ALTER TABLE public.budget_policies
83
+ ADD CONSTRAINT budget_policies_scope_check
84
+ CHECK (scope IN ('tenant', 'agent', 'user'))
85
+ NOT VALID;
86
+ END IF;
87
+ END $$;
88
+
89
+ DO $$
90
+ BEGIN
91
+ IF NOT EXISTS (
92
+ SELECT 1
93
+ FROM pg_constraint
94
+ WHERE conname = 'budget_policies_scope_shape_check'
95
+ AND conrelid = 'public.budget_policies'::regclass
96
+ ) THEN
97
+ ALTER TABLE public.budget_policies
98
+ ADD CONSTRAINT budget_policies_scope_shape_check
99
+ CHECK (
100
+ (scope = 'tenant' AND agent_id IS NULL AND user_id IS NULL)
101
+ OR (scope = 'agent' AND agent_id IS NOT NULL AND user_id IS NULL)
102
+ OR (scope = 'user' AND agent_id IS NULL AND user_id IS NOT NULL)
103
+ )
104
+ NOT VALID;
105
+ END IF;
106
+ END $$;
107
+
108
+ DROP PROCEDURE IF EXISTS public.backfill_cost_events_user_id_0148(integer);
109
+
110
+ CREATE PROCEDURE public.backfill_cost_events_user_id_0148(batch_size integer)
111
+ LANGUAGE plpgsql
112
+ AS $$
113
+ DECLARE
114
+ updated_count integer;
115
+ BEGIN
116
+ LOOP
117
+ WITH batch AS (
118
+ SELECT ce.id, t.user_id
119
+ FROM public.cost_events ce
120
+ JOIN public.threads t
121
+ ON t.id = ce.thread_id
122
+ AND t.tenant_id = ce.tenant_id
123
+ WHERE ce.user_id IS NULL
124
+ AND t.user_id IS NOT NULL
125
+ ORDER BY ce.created_at, ce.id
126
+ LIMIT batch_size
127
+ FOR UPDATE OF ce SKIP LOCKED
128
+ )
129
+ UPDATE public.cost_events ce
130
+ SET user_id = batch.user_id
131
+ FROM batch
132
+ WHERE ce.id = batch.id;
133
+
134
+ GET DIAGNOSTICS updated_count = ROW_COUNT;
135
+ RAISE NOTICE '0148_user_cost_attribution: backfilled % cost_events rows', updated_count;
136
+ EXIT WHEN updated_count = 0;
137
+
138
+ COMMIT;
139
+ END LOOP;
140
+ END;
141
+ $$;
142
+
143
+ CALL public.backfill_cost_events_user_id_0148(5000);
144
+
145
+ DROP PROCEDURE IF EXISTS public.backfill_cost_events_user_id_0148(integer);
146
+
147
+ CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_cost_events_user_created
148
+ ON public.cost_events (tenant_id, user_id, created_at);
149
+
150
+ CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_budget_policies_user
151
+ ON public.budget_policies (tenant_id, user_id);
152
+
153
+ CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_scheduled_jobs_budget_paused
154
+ ON public.scheduled_jobs (tenant_id, budget_paused);
155
+
156
+ ALTER TABLE public.cost_events
157
+ VALIDATE CONSTRAINT cost_events_user_id_users_id_fk;
158
+
159
+ ALTER TABLE public.budget_policies
160
+ VALIDATE CONSTRAINT budget_policies_user_id_users_id_fk;
161
+
162
+ ALTER TABLE public.budget_policies
163
+ VALIDATE CONSTRAINT budget_policies_scope_check;
164
+
165
+ ALTER TABLE public.budget_policies
166
+ VALIDATE CONSTRAINT budget_policies_scope_shape_check;
167
+
168
+ SELECT pg_advisory_unlock(hashtext('migration:0148_user_cost_attribution'));
169
+
170
+ RESET statement_timeout;
171
+ RESET lock_timeout;
@@ -0,0 +1,64 @@
1
+ -- Purpose: add explicit ownership metadata for ThinkWork-managed MCP servers.
2
+ -- Plan: docs/plans/2026-06-06-003-feat-twenty-crm-mcp-oauth-plan.md U1
3
+ -- Apply manually (no CI migration runner):
4
+ -- psql "$DATABASE_URL" -v ON_ERROR_STOP=1 -f packages/database-pg/drizzle/0149_managed_mcp_servers.sql
5
+ -- Pre-flight:
6
+ -- SELECT column_name FROM information_schema.columns WHERE table_schema = 'public' AND table_name = 'tenant_mcp_servers' AND column_name IN ('management_source', 'managed_application_key');
7
+ -- SELECT to_regclass('public.uq_tenant_mcp_servers_managed_application');
8
+ -- creates-column: public.tenant_mcp_servers.management_source
9
+ -- creates-column: public.tenant_mcp_servers.managed_application_key
10
+ -- creates: public.uq_tenant_mcp_servers_managed_application
11
+ -- creates-constraint: public.tenant_mcp_servers.tenant_mcp_servers_management_source_check_v2
12
+ -- creates-constraint: public.tenant_mcp_servers.tenant_mcp_servers_managed_application_shape_check_v2
13
+
14
+ \set ON_ERROR_STOP on
15
+
16
+ SET lock_timeout = '5s';
17
+ SET statement_timeout = '15min';
18
+
19
+ BEGIN;
20
+
21
+ SELECT pg_advisory_xact_lock(hashtext('migration:0149_managed_mcp_servers'));
22
+
23
+ ALTER TABLE public.tenant_mcp_servers
24
+ ADD COLUMN IF NOT EXISTS management_source text NOT NULL DEFAULT 'manual',
25
+ ADD COLUMN IF NOT EXISTS managed_application_key text;
26
+
27
+ DO $$
28
+ BEGIN
29
+ IF NOT EXISTS (
30
+ SELECT 1
31
+ FROM pg_constraint
32
+ WHERE conname = 'tenant_mcp_servers_management_source_check'
33
+ AND conrelid = 'public.tenant_mcp_servers'::regclass
34
+ ) THEN
35
+ ALTER TABLE public.tenant_mcp_servers
36
+ ADD CONSTRAINT tenant_mcp_servers_management_source_check
37
+ CHECK (management_source IN ('manual', 'managed_application'))
38
+ NOT VALID;
39
+ END IF;
40
+ END $$;
41
+
42
+ DO $$
43
+ BEGIN
44
+ IF NOT EXISTS (
45
+ SELECT 1
46
+ FROM pg_constraint
47
+ WHERE conname = 'tenant_mcp_servers_managed_application_shape_check'
48
+ AND conrelid = 'public.tenant_mcp_servers'::regclass
49
+ ) THEN
50
+ ALTER TABLE public.tenant_mcp_servers
51
+ ADD CONSTRAINT tenant_mcp_servers_managed_application_shape_check
52
+ CHECK (
53
+ (management_source = 'manual' AND managed_application_key IS NULL)
54
+ OR (management_source = 'managed_application' AND managed_application_key IS NOT NULL)
55
+ )
56
+ NOT VALID;
57
+ END IF;
58
+ END $$;
59
+
60
+ CREATE UNIQUE INDEX IF NOT EXISTS uq_tenant_mcp_servers_managed_application
61
+ ON public.tenant_mcp_servers (tenant_id, managed_application_key)
62
+ WHERE managed_application_key IS NOT NULL;
63
+
64
+ COMMIT;
@@ -0,0 +1,89 @@
1
+ -- Purpose: allow tenant admins to approve the model catalog per user.
2
+ -- Plan: docs/plans/2026-06-06-004-feat-model-stacking-tool-routing-plan.md U1
3
+ -- Apply manually (no CI migration runner):
4
+ -- psql "$DATABASE_URL" -v ON_ERROR_STOP=1 -f packages/database-pg/drizzle/0149_user_model_approvals.sql
5
+ -- Pre-flight:
6
+ -- SELECT count(*) FROM public.users WHERE tenant_id IS NOT NULL;
7
+ -- SELECT model_id, is_available FROM public.model_catalog ORDER BY display_name;
8
+ -- creates: public.user_model_approvals
9
+ -- creates: public.uq_user_model_approvals_tenant_user_model
10
+ -- creates: public.idx_user_model_approvals_tenant_user
11
+ -- creates: public.idx_user_model_approvals_model
12
+ -- creates-constraint: public.user_model_approvals.user_model_approvals_tenant_id_tenants_id_fk
13
+ -- creates-constraint: public.user_model_approvals.user_model_approvals_user_id_users_id_fk
14
+ -- creates-constraint: public.user_model_approvals.user_model_approvals_model_id_model_catalog_model_id_fk
15
+
16
+ \set ON_ERROR_STOP on
17
+
18
+ SET lock_timeout = '5s';
19
+ SET statement_timeout = '15min';
20
+
21
+ SELECT pg_advisory_lock(hashtext('migration:0149_user_model_approvals'));
22
+
23
+ CREATE TABLE IF NOT EXISTS public.user_model_approvals (
24
+ id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
25
+ tenant_id uuid NOT NULL,
26
+ user_id uuid NOT NULL,
27
+ model_id text NOT NULL,
28
+ created_at timestamptz NOT NULL DEFAULT now(),
29
+ updated_at timestamptz NOT NULL DEFAULT now(),
30
+ CONSTRAINT user_model_approvals_tenant_id_tenants_id_fk
31
+ FOREIGN KEY (tenant_id)
32
+ REFERENCES public.tenants(id)
33
+ ON DELETE CASCADE,
34
+ CONSTRAINT user_model_approvals_user_id_users_id_fk
35
+ FOREIGN KEY (user_id)
36
+ REFERENCES public.users(id)
37
+ ON DELETE CASCADE,
38
+ CONSTRAINT user_model_approvals_model_id_model_catalog_model_id_fk
39
+ FOREIGN KEY (model_id)
40
+ REFERENCES public.model_catalog(model_id)
41
+ ON DELETE CASCADE
42
+ );
43
+
44
+ CREATE UNIQUE INDEX IF NOT EXISTS uq_user_model_approvals_tenant_user_model
45
+ ON public.user_model_approvals (tenant_id, user_id, model_id);
46
+
47
+ CREATE INDEX IF NOT EXISTS idx_user_model_approvals_tenant_user
48
+ ON public.user_model_approvals (tenant_id, user_id);
49
+
50
+ CREATE INDEX IF NOT EXISTS idx_user_model_approvals_model
51
+ ON public.user_model_approvals (model_id);
52
+
53
+ WITH default_models AS (
54
+ SELECT tenant_id, default_model AS model_id
55
+ FROM public.tenant_settings
56
+ WHERE default_model IS NOT NULL
57
+
58
+ UNION
59
+
60
+ SELECT tenant_id, model AS model_id
61
+ FROM public.agents
62
+ WHERE model IS NOT NULL
63
+ AND status <> 'archived'
64
+
65
+ UNION
66
+
67
+ SELECT tenant_id, model AS model_id
68
+ FROM public.agent_templates
69
+ WHERE model IS NOT NULL
70
+ ),
71
+ available_defaults AS (
72
+ SELECT DISTINCT
73
+ u.tenant_id,
74
+ u.id AS user_id,
75
+ d.model_id
76
+ FROM public.users u
77
+ JOIN default_models d
78
+ ON d.tenant_id = u.tenant_id
79
+ JOIN public.model_catalog mc
80
+ ON mc.model_id = d.model_id
81
+ AND mc.is_available IS TRUE
82
+ WHERE u.tenant_id IS NOT NULL
83
+ )
84
+ INSERT INTO public.user_model_approvals (tenant_id, user_id, model_id)
85
+ SELECT tenant_id, user_id, model_id
86
+ FROM available_defaults
87
+ ON CONFLICT (tenant_id, user_id, model_id) DO NOTHING;
88
+
89
+ SELECT pg_advisory_unlock(hashtext('migration:0149_user_model_approvals'));
@@ -0,0 +1,11 @@
1
+ -- Bootstrap first-admin claim markers.
2
+ --
3
+ -- creates-column: public.tenants.first_admin_claim_required
4
+ -- creates-column: public.tenants.first_admin_claimed_at
5
+ -- creates-column: public.tenants.first_admin_claimed_user_id
6
+
7
+ ALTER TABLE "tenants"
8
+ ADD COLUMN IF NOT EXISTS "first_admin_claim_required" boolean NOT NULL DEFAULT false,
9
+ ADD COLUMN IF NOT EXISTS "first_admin_claimed_at" timestamp with time zone,
10
+ ADD COLUMN IF NOT EXISTS "first_admin_claimed_user_id" uuid;
11
+
@@ -0,0 +1,91 @@
1
+ -- Managed application deployment job domain.
2
+ --
3
+ -- creates: public.managed_applications
4
+ -- creates: public.managed_application_deployment_jobs
5
+ -- creates: public.managed_application_deployment_events
6
+ -- creates: public.managed_applications_tenant_key_uidx
7
+ -- creates: public.managed_applications_tenant_status_idx
8
+ -- creates: public.managed_deployment_jobs_tenant_idempotency_uidx
9
+ -- creates: public.managed_deployment_jobs_tenant_app_idx
10
+ -- creates: public.managed_deployment_jobs_status_idx
11
+ -- creates: public.managed_deployment_events_job_created_idx
12
+ -- creates: public.managed_deployment_events_idempotency_uidx
13
+
14
+ CREATE TABLE IF NOT EXISTS "managed_applications" (
15
+ "id" uuid PRIMARY KEY DEFAULT gen_random_uuid(),
16
+ "tenant_id" uuid NOT NULL REFERENCES "tenants"("id") ON DELETE cascade,
17
+ "key" text NOT NULL,
18
+ "display_name" text NOT NULL,
19
+ "desired_status" text NOT NULL DEFAULT 'disabled',
20
+ "current_status" text NOT NULL DEFAULT 'unknown',
21
+ "desired_config" jsonb NOT NULL DEFAULT '{}'::jsonb,
22
+ "selected_release_version" text,
23
+ "selected_manifest_digest" text,
24
+ "last_job_id" uuid,
25
+ "created_at" timestamp with time zone NOT NULL DEFAULT now(),
26
+ "updated_at" timestamp with time zone NOT NULL DEFAULT now()
27
+ );
28
+
29
+ CREATE UNIQUE INDEX IF NOT EXISTS "managed_applications_tenant_key_uidx"
30
+ ON "managed_applications" ("tenant_id", "key");
31
+
32
+ CREATE INDEX IF NOT EXISTS "managed_applications_tenant_status_idx"
33
+ ON "managed_applications" ("tenant_id", "current_status");
34
+
35
+ CREATE TABLE IF NOT EXISTS "managed_application_deployment_jobs" (
36
+ "id" uuid PRIMARY KEY DEFAULT gen_random_uuid(),
37
+ "tenant_id" uuid NOT NULL REFERENCES "tenants"("id") ON DELETE cascade,
38
+ "application_id" uuid REFERENCES "managed_applications"("id") ON DELETE set null,
39
+ "app_key" text NOT NULL,
40
+ "operation" text NOT NULL,
41
+ "status" text NOT NULL DEFAULT 'planning',
42
+ "idempotency_key" text NOT NULL,
43
+ "requested_by_user_id" uuid,
44
+ "release_version" text NOT NULL,
45
+ "manifest_digest" text NOT NULL,
46
+ "desired_config_version" text NOT NULL,
47
+ "state_machine_arn" text,
48
+ "plan_execution_arn" text,
49
+ "apply_execution_arn" text,
50
+ "codebuild_build_arn" text,
51
+ "plan_digest" text,
52
+ "plan_summary" jsonb NOT NULL DEFAULT '{}'::jsonb,
53
+ "data_impact" jsonb NOT NULL DEFAULT '{}'::jsonb,
54
+ "evidence_bucket" text,
55
+ "evidence_prefix" text,
56
+ "approval_required" boolean NOT NULL DEFAULT true,
57
+ "approved_by_user_id" uuid,
58
+ "approved_at" timestamp with time zone,
59
+ "rejected_by_user_id" uuid,
60
+ "rejected_at" timestamp with time zone,
61
+ "error_message" text,
62
+ "created_at" timestamp with time zone NOT NULL DEFAULT now(),
63
+ "updated_at" timestamp with time zone NOT NULL DEFAULT now()
64
+ );
65
+
66
+ CREATE UNIQUE INDEX IF NOT EXISTS "managed_deployment_jobs_tenant_idempotency_uidx"
67
+ ON "managed_application_deployment_jobs" ("tenant_id", "idempotency_key");
68
+
69
+ CREATE INDEX IF NOT EXISTS "managed_deployment_jobs_tenant_app_idx"
70
+ ON "managed_application_deployment_jobs" ("tenant_id", "app_key");
71
+
72
+ CREATE INDEX IF NOT EXISTS "managed_deployment_jobs_status_idx"
73
+ ON "managed_application_deployment_jobs" ("status");
74
+
75
+ CREATE TABLE IF NOT EXISTS "managed_application_deployment_events" (
76
+ "id" uuid PRIMARY KEY DEFAULT gen_random_uuid(),
77
+ "tenant_id" uuid NOT NULL REFERENCES "tenants"("id") ON DELETE cascade,
78
+ "job_id" uuid NOT NULL REFERENCES "managed_application_deployment_jobs"("id") ON DELETE cascade,
79
+ "event_type" text NOT NULL,
80
+ "message" text NOT NULL,
81
+ "payload" jsonb NOT NULL DEFAULT '{}'::jsonb,
82
+ "idempotency_key" text,
83
+ "created_at" timestamp with time zone NOT NULL DEFAULT now()
84
+ );
85
+
86
+ CREATE INDEX IF NOT EXISTS "managed_deployment_events_job_created_idx"
87
+ ON "managed_application_deployment_events" ("job_id", "created_at");
88
+
89
+ CREATE UNIQUE INDEX IF NOT EXISTS "managed_deployment_events_idempotency_uidx"
90
+ ON "managed_application_deployment_events" ("job_id", "idempotency_key")
91
+ WHERE "idempotency_key" IS NOT NULL;
@@ -0,0 +1,81 @@
1
+ -- Purpose: add tenant-global Agent Profiles for Pi subagent delegation.
2
+ -- Plan: docs/plans/2026-06-07-002-feat-agent-profiles-pi-subagents-plan.md U1
3
+ -- Apply manually (no CI migration runner):
4
+ -- psql "$DATABASE_URL" -v ON_ERROR_STOP=1 -f packages/database-pg/drizzle/0152_agent_profiles.sql
5
+ -- creates: public.agent_profiles
6
+ -- creates: public.agent_profile_space_assignments
7
+ -- creates: public.uq_agent_profiles_tenant_slug
8
+ -- creates: public.uq_agent_profiles_tenant_built_in_key
9
+ -- creates: public.idx_agent_profiles_tenant_enabled
10
+ -- creates: public.uq_agent_profile_space_assignments
11
+ -- creates: public.idx_agent_profile_space_assignments_space
12
+ -- creates-constraint: public.agent_profiles.agent_profiles_tenant_id_tenants_id_fk
13
+ -- creates-constraint: public.agent_profile_space_assignments.agent_profile_space_assignments_profile_id_agent_profiles_id_fk
14
+ -- creates-constraint: public.agent_profile_space_assignments.agent_profile_space_assignments_tenant_id_tenants_id_fk
15
+ -- creates-constraint: public.agent_profile_space_assignments.agent_profile_space_assignments_space_id_spaces_id_fk
16
+
17
+ \set ON_ERROR_STOP on
18
+
19
+ SET lock_timeout = '5s';
20
+ SET statement_timeout = '15min';
21
+
22
+ SELECT pg_advisory_lock(hashtext('migration:0152_agent_profiles'));
23
+
24
+ CREATE TABLE IF NOT EXISTS public.agent_profiles (
25
+ id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
26
+ tenant_id uuid NOT NULL,
27
+ slug text NOT NULL,
28
+ name text NOT NULL,
29
+ description text,
30
+ routing_guidance text,
31
+ instructions text NOT NULL DEFAULT '',
32
+ model_id text NOT NULL,
33
+ enabled boolean NOT NULL DEFAULT true,
34
+ built_in_key text,
35
+ tool_policy jsonb NOT NULL DEFAULT '{}'::jsonb,
36
+ skill_policy jsonb NOT NULL DEFAULT '{}'::jsonb,
37
+ execution_controls jsonb NOT NULL DEFAULT '{}'::jsonb,
38
+ created_at timestamptz NOT NULL DEFAULT now(),
39
+ updated_at timestamptz NOT NULL DEFAULT now(),
40
+ CONSTRAINT agent_profiles_tenant_id_tenants_id_fk
41
+ FOREIGN KEY (tenant_id)
42
+ REFERENCES public.tenants(id)
43
+ ON DELETE CASCADE
44
+ );
45
+
46
+ CREATE UNIQUE INDEX IF NOT EXISTS uq_agent_profiles_tenant_slug
47
+ ON public.agent_profiles (tenant_id, slug);
48
+
49
+ CREATE UNIQUE INDEX IF NOT EXISTS uq_agent_profiles_tenant_built_in_key
50
+ ON public.agent_profiles (tenant_id, built_in_key)
51
+ WHERE built_in_key IS NOT NULL;
52
+
53
+ CREATE INDEX IF NOT EXISTS idx_agent_profiles_tenant_enabled
54
+ ON public.agent_profiles (tenant_id, enabled);
55
+
56
+ CREATE TABLE IF NOT EXISTS public.agent_profile_space_assignments (
57
+ profile_id uuid NOT NULL,
58
+ tenant_id uuid NOT NULL,
59
+ space_id uuid NOT NULL,
60
+ created_at timestamptz NOT NULL DEFAULT now(),
61
+ CONSTRAINT agent_profile_space_assignments_profile_id_agent_profiles_id_fk
62
+ FOREIGN KEY (profile_id)
63
+ REFERENCES public.agent_profiles(id)
64
+ ON DELETE CASCADE,
65
+ CONSTRAINT agent_profile_space_assignments_tenant_id_tenants_id_fk
66
+ FOREIGN KEY (tenant_id)
67
+ REFERENCES public.tenants(id)
68
+ ON DELETE CASCADE,
69
+ CONSTRAINT agent_profile_space_assignments_space_id_spaces_id_fk
70
+ FOREIGN KEY (space_id)
71
+ REFERENCES public.spaces(id)
72
+ ON DELETE CASCADE
73
+ );
74
+
75
+ CREATE UNIQUE INDEX IF NOT EXISTS uq_agent_profile_space_assignments
76
+ ON public.agent_profile_space_assignments (profile_id, space_id);
77
+
78
+ CREATE INDEX IF NOT EXISTS idx_agent_profile_space_assignments_space
79
+ ON public.agent_profile_space_assignments (tenant_id, space_id);
80
+
81
+ SELECT pg_advisory_unlock(hashtext('migration:0152_agent_profiles'));
@@ -0,0 +1,9 @@
1
+ -- Apply manually: psql "$DATABASE_URL" -v ON_ERROR_STOP=1 -f packages/database-pg/drizzle/0153_message_mentions_agent_profile.sql
2
+ -- creates-constraint: public.message_mentions.message_mentions_target_type_allowed
3
+
4
+ ALTER TABLE public.message_mentions
5
+ DROP CONSTRAINT IF EXISTS message_mentions_target_type_allowed;
6
+
7
+ ALTER TABLE public.message_mentions
8
+ ADD CONSTRAINT message_mentions_target_type_allowed
9
+ CHECK (target_type IN ('user', 'agent', 'agent_profile'));
@@ -0,0 +1,61 @@
1
+ -- Browser-first customer deployment session state.
2
+ --
3
+ -- creates: public.customer_deployment_sessions
4
+ -- creates: public.customer_deployment_session_events
5
+ -- creates: public.customer_deployment_sessions_status_idx
6
+ -- creates: public.customer_deployment_sessions_account_region_idx
7
+ -- creates: public.customer_deployment_sessions_tenant_idx
8
+ -- creates: public.customer_deployment_session_events_session_created_idx
9
+ -- creates: public.customer_deployment_session_events_idempotency_uidx
10
+
11
+ CREATE TABLE IF NOT EXISTS "customer_deployment_sessions" (
12
+ "id" uuid PRIMARY KEY DEFAULT gen_random_uuid(),
13
+ "tenant_id" uuid REFERENCES "tenants"("id") ON DELETE set null,
14
+ "status" text NOT NULL DEFAULT 'collecting_inputs',
15
+ "current_step_key" text NOT NULL DEFAULT 'intake',
16
+ "requested_action" text NOT NULL DEFAULT 'deploy',
17
+ "client_token_hash" text NOT NULL,
18
+ "source" text NOT NULL DEFAULT 'browser',
19
+ "customer_name" text NOT NULL,
20
+ "environment_name" text NOT NULL,
21
+ "aws_account_id" text NOT NULL,
22
+ "aws_region" text NOT NULL,
23
+ "availability_zones" jsonb NOT NULL DEFAULT '[]'::jsonb,
24
+ "admin_name" text NOT NULL,
25
+ "admin_email" text NOT NULL,
26
+ "credentials_status" text NOT NULL DEFAULT 'not_connected',
27
+ "runner_mode" text NOT NULL DEFAULT 'hosted',
28
+ "terraform_backend" jsonb NOT NULL DEFAULT '{}'::jsonb,
29
+ "session_config" jsonb NOT NULL DEFAULT '{}'::jsonb,
30
+ "error_message" text,
31
+ "expires_at" timestamp with time zone,
32
+ "created_at" timestamp with time zone NOT NULL DEFAULT now(),
33
+ "updated_at" timestamp with time zone NOT NULL DEFAULT now()
34
+ );
35
+
36
+ CREATE INDEX IF NOT EXISTS "customer_deployment_sessions_status_idx"
37
+ ON "customer_deployment_sessions" ("status");
38
+
39
+ CREATE INDEX IF NOT EXISTS "customer_deployment_sessions_account_region_idx"
40
+ ON "customer_deployment_sessions" ("aws_account_id", "aws_region");
41
+
42
+ CREATE INDEX IF NOT EXISTS "customer_deployment_sessions_tenant_idx"
43
+ ON "customer_deployment_sessions" ("tenant_id");
44
+
45
+ CREATE TABLE IF NOT EXISTS "customer_deployment_session_events" (
46
+ "id" uuid PRIMARY KEY DEFAULT gen_random_uuid(),
47
+ "session_id" uuid NOT NULL REFERENCES "customer_deployment_sessions"("id") ON DELETE cascade,
48
+ "event_type" text NOT NULL,
49
+ "step_key" text,
50
+ "message" text NOT NULL,
51
+ "payload" jsonb NOT NULL DEFAULT '{}'::jsonb,
52
+ "idempotency_key" text,
53
+ "created_at" timestamp with time zone NOT NULL DEFAULT now()
54
+ );
55
+
56
+ CREATE INDEX IF NOT EXISTS "customer_deployment_session_events_session_created_idx"
57
+ ON "customer_deployment_session_events" ("session_id", "created_at");
58
+
59
+ CREATE UNIQUE INDEX IF NOT EXISTS "customer_deployment_session_events_idempotency_uidx"
60
+ ON "customer_deployment_session_events" ("session_id", "idempotency_key")
61
+ WHERE "idempotency_key" IS NOT NULL;