thinkwork-cli 0.12.12 → 0.12.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (475) hide show
  1. package/README.md +42 -38
  2. package/dist/{api-client-ASJWIG3Z.js → api-client-JUBCQQDF.js} +1 -1
  3. package/dist/{chunk-JEHV35EU.js → chunk-STY44FQO.js} +353 -30
  4. package/dist/cli.js +23823 -10151
  5. package/dist/commands/enterprise/templates/deploy-repo/.github/workflows/deploy.yml +17 -6
  6. package/dist/commands/enterprise/templates/deploy-repo/docs/runbook.md +81 -9
  7. package/dist/commands/enterprise/templates/deploy-repo/scripts/apply-release.mjs +183 -21
  8. package/dist/commands/enterprise/templates/deploy-repo/scripts/smoke.mjs +1 -2
  9. package/dist/commands/enterprise/templates/deploy-repo/terraform/main.tf +286 -0
  10. package/dist/drizzle/0000_petite_marvel_apes.sql +1188 -0
  11. package/dist/drizzle/0001_milky_surge.sql +103 -0
  12. package/dist/drizzle/0002_aberrant_mattie_franklin.sql +41 -0
  13. package/dist/drizzle/0003_exotic_ogun.sql +3 -0
  14. package/dist/drizzle/0004_glamorous_magneto.sql +2 -0
  15. package/dist/drizzle/0005_ancient_nocturne.sql +2 -0
  16. package/dist/drizzle/0006_new_colonel_america.sql +2 -0
  17. package/dist/drizzle/0007_unique_external_task_id.sql +31 -0
  18. package/dist/drizzle/0008_external_task_id_column.sql +43 -0
  19. package/dist/drizzle/0009_evaluations.sql +64 -0
  20. package/dist/drizzle/0010_eval_agent_template.sql +2 -0
  21. package/dist/drizzle/0011_eval_run_template.sql +2 -0
  22. package/dist/drizzle/0012_eval_seed_unique.sql +16 -0
  23. package/dist/drizzle/0013_motionless_white_queen.sql +140 -0
  24. package/dist/drizzle/0014_wiki_aggregation.sql +11 -0
  25. package/dist/drizzle/0015_pg_trgm_alias_title_indexes.sql +9 -0
  26. package/dist/drizzle/0016_wiki_schema_drops.sql +24 -0
  27. package/dist/drizzle/0017_wiki_places.sql +46 -0
  28. package/dist/drizzle/0018_agent_workspace_overlay.sql +26 -0
  29. package/dist/drizzle/0018_cool_firebird.sql +24 -0
  30. package/dist/drizzle/0018_skill_runs.sql +84 -0
  31. package/dist/drizzle/0019_condemned_dragon_man.sql +95 -0
  32. package/dist/drizzle/0019_webhook_skill_runs.sql +58 -0
  33. package/dist/drizzle/0020_crazy_the_anarchist.sql +9 -0
  34. package/dist/drizzle/0020_mutation_idempotency.sql +64 -0
  35. package/dist/drizzle/0021_crm_work_links.sql +76 -0
  36. package/dist/drizzle/0021_skill_runs_completion_hmac.sql +33 -0
  37. package/dist/drizzle/0022_add_billing_tables.sql +70 -0
  38. package/dist/drizzle/0022_seed_thinkwork_admin_permissions.sql +160 -0
  39. package/dist/drizzle/0022_stripe_billing_indexes.sql +48 -0
  40. package/dist/drizzle/0023_tenants_deactivation.sql +27 -0
  41. package/dist/drizzle/0024_tenant_mcp_admin_keys.sql +63 -0
  42. package/dist/drizzle/0025_v1_agent_architecture.sql +182 -0
  43. package/dist/drizzle/0026_thread_turns_add_kind.sql +28 -0
  44. package/dist/drizzle/0027_capability_catalog_and_manifests.sql +219 -0
  45. package/dist/drizzle/0028_aws_s3_extension.sql +26 -0
  46. package/dist/drizzle/0029_collapse_execution_types.sql +42 -0
  47. package/dist/drizzle/0030_retire_composition_primitives.sql +48 -0
  48. package/dist/drizzle/0031_thread_cleanup_drops.sql +131 -0
  49. package/dist/drizzle/0032_add_browser_automation_template_config.sql +24 -0
  50. package/dist/drizzle/0033_agent_operation_leases.sql +32 -0
  51. package/dist/drizzle/0034_agent_workspace_events.sql +116 -0
  52. package/dist/drizzle/0035_workspace_review_decisions.sql +19 -0
  53. package/dist/drizzle/0036_user_scoped_memory_wiki.sql +152 -0
  54. package/dist/drizzle/0037_user_profile_operating_model.sql +34 -0
  55. package/dist/drizzle/0042_agent_runtime_selector.sql +41 -0
  56. package/dist/drizzle/0043_wiki_search_tsv_tokenization.sql +48 -0
  57. package/dist/drizzle/0044_add_web_search_template_config.sql +7 -0
  58. package/dist/drizzle/0045_add_send_email_template_config.sql +7 -0
  59. package/dist/drizzle/0046_tenant_mcp_context_tools.sql +26 -0
  60. package/dist/drizzle/0047_add_context_engine_template_config.sql +7 -0
  61. package/dist/drizzle/0048_tenant_context_provider_settings.sql +22 -0
  62. package/dist/drizzle/0050_brain_v0_entity_subtype.sql +29 -0
  63. package/dist/drizzle/0051_brain_v0_tenant_entity_pages.sql +170 -0
  64. package/dist/drizzle/0052_brain_v0_external_refs.sql +41 -0
  65. package/dist/drizzle/0053_brain_v0_unresolved_mentions_subtype.sql +48 -0
  66. package/dist/drizzle/0054_wiki_compile_jobs_input.sql +28 -0
  67. package/dist/drizzle/0055_routines_stepfunctions_substrate.sql +202 -0
  68. package/dist/drizzle/0056_routine_step_events_dedup_idx.sql +25 -0
  69. package/dist/drizzle/0057_archive_legacy_python_routines.sql +36 -0
  70. package/dist/drizzle/0058_routines_visibility_and_owning_agent.sql +61 -0
  71. package/dist/drizzle/0061_routine_execution_asl_version_id.sql +29 -0
  72. package/dist/drizzle/0062_migrate_pi_to_flue.sql +110 -0
  73. package/dist/drizzle/0063_threads_session_data.sql +23 -0
  74. package/dist/drizzle/0064_tenant_credentials.sql +65 -0
  75. package/dist/drizzle/0067_thinkwork_computers_phase_one.sql +174 -0
  76. package/dist/drizzle/0068_drop_system_workflows_and_activation.sql +115 -0
  77. package/dist/drizzle/0069_compliance_schema.sql +364 -0
  78. package/dist/drizzle/0070_compliance_aurora_roles.sql +171 -0
  79. package/dist/drizzle/0072_threads_computer_ownership.sql +24 -0
  80. package/dist/drizzle/0073_compliance_tenant_anchor_state.sql +105 -0
  81. package/dist/drizzle/0074_compliance_event_hash_index.sql +49 -0
  82. package/dist/drizzle/0075_scheduled_jobs_computer_ownership.sql +27 -0
  83. package/dist/drizzle/0076_scheduled_jobs_marco_backfill.sql +69 -0
  84. package/dist/drizzle/0077_computers_primary_agent_id.sql +38 -0
  85. package/dist/drizzle/0078_tenant_customize_catalog.sql +46 -0
  86. package/dist/drizzle/0079_seed_tenant_customize_catalog.sql +53 -0
  87. package/dist/drizzle/0081_routines_catalog_slug.sql +42 -0
  88. package/dist/drizzle/0082_messages_parts_jsonb.sql +52 -0
  89. package/dist/drizzle/0083_computer_runbooks.sql +103 -0
  90. package/dist/drizzle/0084_artifacts_favorited_at.sql +32 -0
  91. package/dist/drizzle/0085_seed_thinkwork_computer_default_template.sql +46 -0
  92. package/dist/drizzle/0086_update_default_template_models.sql +19 -0
  93. package/dist/drizzle/0087_retire_oss_connectors.sql +77 -0
  94. package/dist/drizzle/0088_compliance_event_types_finance_pilot.sql +37 -0
  95. package/dist/drizzle/0089_remove_maniflow_eval_seeds.sql +81 -0
  96. package/dist/drizzle/0089_wiki_schema_extraction.sql +315 -0
  97. package/dist/drizzle/0090_brain_schema_extraction.sql +274 -0
  98. package/dist/drizzle/0091_drop_wiki_brain_compat_views.sql +118 -0
  99. package/dist/drizzle/0092_finish_oss_connector_retirement.sql +97 -0
  100. package/dist/drizzle/0093_eval_runs_scheduled_job_id.sql +23 -0
  101. package/dist/drizzle/0094_slack_workspace_app.sql +140 -0
  102. package/dist/drizzle/0095_eval_runs_computer_id.sql +22 -0
  103. package/dist/drizzle/0096_true_redteam_eval_seed_cleanup.sql +67 -0
  104. package/dist/drizzle/0097_shared_computers.sql +191 -0
  105. package/dist/drizzle/0098_business_ontology.sql +587 -0
  106. package/dist/drizzle/0099_thread_idle_learning.sql +145 -0
  107. package/dist/drizzle/0100_ontology_gated_brain_dynamic_subtypes.sql +7 -0
  108. package/dist/drizzle/0101_ontology_gated_unresolved_mentions_dynamic_subtypes.sql +7 -0
  109. package/dist/drizzle/0102_wiki_brain_owner_repair.sql +87 -0
  110. package/dist/drizzle/0103_brain_section_source_trigger_repair.sql +75 -0
  111. package/dist/drizzle/0104_expand_seed_ontology_for_user_memory.sql +166 -0
  112. package/dist/drizzle/0105_spaces_domain.sql +349 -0
  113. package/dist/drizzle/0106_expand_seed_ontology_for_triples.sql +173 -0
  114. package/dist/drizzle/0106_space_threads_participants.sql +197 -0
  115. package/dist/drizzle/0107_linked_task_mirror.sql +245 -0
  116. package/dist/drizzle/0108_message_mentions.sql +95 -0
  117. package/dist/drizzle/0109_space_owned_threads.sql +217 -0
  118. package/dist/drizzle/0110_thread_participant_read_state.sql +21 -0
  119. package/dist/drizzle/0111_agents_tenant_name_unique.sql +38 -0
  120. package/dist/drizzle/0112_recast_spaces_as_contextual_workrooms.sql +138 -0
  121. package/dist/drizzle/0113_agents_own_runtime_fields.sql +48 -0
  122. package/dist/drizzle/0114_migrate_templates_to_agents_and_spaces.sql +361 -0
  123. package/dist/drizzle/0115_remove_computer_eval_template_dependencies.sql +69 -0
  124. package/dist/drizzle/0116_backfill_thread_participants_access.sql +126 -0
  125. package/dist/drizzle/0117_space_access_mode.sql +40 -0
  126. package/dist/drizzle/0118_normalize_tenant_member_principal_type.sql +41 -0
  127. package/dist/drizzle/0119_space_knowledge_bases.sql +126 -0
  128. package/dist/drizzle/0120_space_automations.sql +58 -0
  129. package/dist/drizzle/0121_drop_computer_runbooks.sql +26 -0
  130. package/dist/drizzle/0122_space_email_triggers.sql +24 -0
  131. package/dist/drizzle/0123_single_platform_agent_and_overrides.sql +58 -0
  132. package/dist/drizzle/0124_thread_turns_finalized_at.sql +17 -0
  133. package/dist/drizzle/0125_drop_space_agent_assignments.sql +42 -0
  134. package/dist/drizzle/0126_migrate_flue_to_pi.sql +42 -0
  135. package/dist/drizzle/0127_runtime_type_observability.sql +28 -0
  136. package/dist/drizzle/0128_drop_eval_test_cases_agent_id.sql +37 -0
  137. package/dist/drizzle/0129_drop_code_factory_tables.sql +43 -0
  138. package/dist/drizzle/0129_eval_results_system_prompt.sql +30 -0
  139. package/dist/drizzle/0130_drop_teams_and_team_id_columns.sql +54 -0
  140. package/dist/drizzle/0131_drop_skill_catalog_and_tenant_skills.sql +33 -0
  141. package/dist/drizzle/0132_drop_computer_tables.sql +31 -0
  142. package/dist/drizzle/0133_drop_seed_view_tombstones.sql +79 -0
  143. package/dist/drizzle/0133_thread_turns_system_prompt.sql +22 -0
  144. package/dist/drizzle/0134_drop_dead_agent_runtime_tables.sql +53 -0
  145. package/dist/drizzle/0135_native_checklist_linked_tasks.sql +48 -0
  146. package/dist/drizzle/0136_goal_ledger.sql +55 -0
  147. package/dist/drizzle/0136_space_email_trigger_status.sql +66 -0
  148. package/dist/drizzle/0137_thread_participant_pins.sql +25 -0
  149. package/dist/drizzle/0138_users_cognito_sub.sql +30 -0
  150. package/dist/drizzle/0139_mobile_turn_client_id.sql +23 -0
  151. package/dist/drizzle/0140_workspace_folder_names.sql +36 -0
  152. package/dist/drizzle/0141_eval_runs_desktop_pi_provenance.sql +31 -0
  153. package/dist/drizzle/0142_pi_only_agent_runtime.sql +61 -0
  154. package/dist/drizzle/0143_add_web_extract_builtin_config.sql +28 -0
  155. package/dist/drizzle/0144_skill_catalog_index.sql +40 -0
  156. package/dist/drizzle/0145_knowledge_graph_thread_ingest.sql +512 -0
  157. package/dist/drizzle/0146_knowledge_graph_source_scope.sql +413 -0
  158. package/dist/drizzle/0147_knowledge_graph_scope_trigger_qualification.sql +211 -0
  159. package/dist/drizzle/0148_user_cost_attribution.sql +171 -0
  160. package/dist/drizzle/0149_managed_mcp_servers.sql +64 -0
  161. package/dist/drizzle/0149_user_model_approvals.sql +89 -0
  162. package/dist/drizzle/0150_bootstrap_first_admin_claim.sql +11 -0
  163. package/dist/drizzle/0151_managed_deployments.sql +91 -0
  164. package/dist/drizzle/0152_agent_profiles.sql +81 -0
  165. package/dist/drizzle/0153_message_mentions_agent_profile.sql +9 -0
  166. package/dist/drizzle/0154_customer_deployment_sessions.sql +61 -0
  167. package/dist/drizzle/0155_tenant_model_catalog.sql +152 -0
  168. package/dist/drizzle/0156_bootstrap_credential_leases.sql +52 -0
  169. package/dist/drizzle/0157_knowledge_graph_observations_source.sql +79 -0
  170. package/dist/drizzle/0158_pending_user_questions.sql +80 -0
  171. package/dist/drizzle/0158_wiki_tenant_scope.sql +38 -0
  172. package/dist/drizzle/0159_agent_profiles_space_local.sql +49 -0
  173. package/dist/drizzle/0159_application_plugins.sql +193 -0
  174. package/dist/drizzle/0159_eval_scoring_version.sql +46 -0
  175. package/dist/drizzle/0160_compliance_event_types_plugins.sql +37 -0
  176. package/dist/drizzle/0160_eval_datasets.sql +75 -0
  177. package/dist/drizzle/0160_eval_results_thread_turn.sql +35 -0
  178. package/dist/drizzle/0161_eval_run_pinning.sql +54 -0
  179. package/dist/drizzle/0161_tenant_mcp_servers_plugin_source.sql +62 -0
  180. package/dist/drizzle/0162_eval_result_override.sql +49 -0
  181. package/dist/drizzle/0163_eval_replay_tool_allowlist.sql +50 -0
  182. package/dist/drizzle/0164_eval_replay_tool_override_mode.sql +52 -0
  183. package/dist/drizzle/0165_plugin_premium_entitlements.sql +153 -0
  184. package/dist/drizzle/0166_company_brain_substrate_contract.sql +386 -0
  185. package/dist/drizzle/0167_company_brain_artifact_manifest_runtime.sql +85 -0
  186. package/dist/drizzle/0168_eval_skill_gate.sql +44 -0
  187. package/dist/drizzle/0169_release_update_jobs.sql +67 -0
  188. package/dist/drizzle/0170_email_channel_plugin.sql +291 -0
  189. package/dist/drizzle/0171_linked_task_external_providers.sql +30 -0
  190. package/dist/drizzle/0172_email_channel_sendgrid_provider.sql +8 -0
  191. package/dist/drizzle/0173_auth_provider_resources.sql +83 -0
  192. package/dist/drizzle/0174_workos_auth_bridges.sql +37 -0
  193. package/dist/drizzle/0175_workos_auth_sessions.sql +38 -0
  194. package/dist/drizzle/0176_n8n_agent_step_runs.sql +107 -0
  195. package/dist/drizzle/0177_workflow_control_plane.sql +281 -0
  196. package/dist/drizzle/0178_workflow_backfill_existing_routines.sql +525 -0
  197. package/dist/drizzle/0179_tenant_goal_budget_settings.sql +21 -0
  198. package/dist/drizzle/0180_skill_drafts.sql +89 -0
  199. package/dist/drizzle/0181_skill_draft_publish_status.sql +21 -0
  200. package/dist/drizzle/0182_agent_loops.sql +260 -0
  201. package/dist/drizzle/0183_okf_artifact_manifests.sql +52 -0
  202. package/dist/drizzle/0184_skill_catalog_trust_cache.sql +35 -0
  203. package/dist/drizzle/0185_agent_loop_space.sql +16 -0
  204. package/dist/drizzle/0186_tenant_mcp_runtime_metadata.sql +10 -0
  205. package/dist/drizzle/0187_native_work_items.sql +220 -0
  206. package/dist/drizzle/0188_company_etl_plugin_rename.sql +99 -0
  207. package/dist/drizzle/0189_trace_cost_substrate.sql +247 -0
  208. package/dist/drizzle/0190_billing_export_reconciliation.sql +101 -0
  209. package/dist/drizzle/0191_open_engine_work_item_queue.sql +66 -0
  210. package/dist/drizzle/0192_work_item_labels.sql +44 -0
  211. package/dist/drizzle/0193_work_item_documents.sql +31 -0
  212. package/dist/drizzle/0194_memory_retain_attempts.sql +103 -0
  213. package/dist/drizzle/0194_work_item_comments.sql +35 -0
  214. package/dist/drizzle/0195_plugin_app_overlays.sql +45 -0
  215. package/dist/drizzle/0196_pi_extensions.sql +118 -0
  216. package/dist/drizzle/0197_eval_profiles.sql +150 -0
  217. package/dist/drizzle/0197_rcm_context_columns.sql +28 -0
  218. package/dist/drizzle/0198_eval_runs_unstable.sql +27 -0
  219. package/dist/drizzle/0199_eval_runs_cost_partial.sql +27 -0
  220. package/dist/drizzle/meta/_journal.json +160 -0
  221. package/dist/plugins/README.md +162 -0
  222. package/dist/plugins/catalog/package.json +40 -0
  223. package/dist/plugins/catalog/scripts/build-catalog.ts +120 -0
  224. package/dist/plugins/catalog/scripts/generate-plugin-registry.ts +144 -0
  225. package/dist/plugins/catalog/src/__tests__/build-catalog.test.ts +86 -0
  226. package/dist/plugins/catalog/src/__tests__/catalog.test.ts +308 -0
  227. package/dist/plugins/catalog/src/__tests__/contracts.test.ts +861 -0
  228. package/dist/plugins/catalog/src/__tests__/plugin-package.test.ts +124 -0
  229. package/dist/plugins/catalog/src/__tests__/plugin-registry.test.ts +120 -0
  230. package/dist/plugins/catalog/src/catalog.ts +434 -0
  231. package/dist/plugins/catalog/src/contracts.ts +1498 -0
  232. package/dist/plugins/catalog/src/index.ts +4 -0
  233. package/dist/plugins/catalog/src/plugin-package.ts +171 -0
  234. package/dist/plugins/catalog/src/registry/generated-first-party.ts +76 -0
  235. package/dist/plugins/catalog/src/registry/index.ts +1 -0
  236. package/dist/plugins/catalog/tsconfig.json +8 -0
  237. package/dist/plugins/company-brain/README.md +37 -0
  238. package/dist/plugins/company-brain/package.json +33 -0
  239. package/dist/plugins/company-brain/runtime/cognee/Dockerfile +11 -0
  240. package/dist/plugins/company-brain/smoke/cognee-managed-app-smoke.mjs +458 -0
  241. package/dist/plugins/company-brain/smoke/cognee-memory-cutover-smoke.mjs +539 -0
  242. package/dist/plugins/company-brain/smoke/company-brain-context-engine-smoke.mjs +312 -0
  243. package/dist/plugins/company-brain/smoke/company-brain-operations-smoke.mjs +449 -0
  244. package/dist/plugins/company-brain/smoke/company-brain-plugin-smoke.mjs +655 -0
  245. package/dist/plugins/company-brain/smoke/hindsight-memory-isolation-smoke.mjs +474 -0
  246. package/dist/plugins/company-brain/src/api/cognee-client.ts +896 -0
  247. package/dist/plugins/company-brain/src/api/cognee-cluster-identity.ts +49 -0
  248. package/dist/plugins/company-brain/src/api/cognee-memory-scope.ts +84 -0
  249. package/dist/plugins/company-brain/src/api/context-engine-provider.ts +888 -0
  250. package/dist/plugins/company-brain/src/api/migration.ts +665 -0
  251. package/dist/plugins/company-brain/src/deployment/cognee-managed-app.ts +396 -0
  252. package/dist/plugins/company-brain/src/index.ts +62 -0
  253. package/dist/plugins/company-brain/src/manifest.ts +112 -0
  254. package/dist/plugins/company-brain/terraform/cognee/README.md +263 -0
  255. package/dist/plugins/company-brain/terraform/cognee/main.tf +766 -0
  256. package/dist/plugins/company-brain/terraform/cognee/outputs.tf +144 -0
  257. package/dist/plugins/company-brain/terraform/cognee/variables.tf +402 -0
  258. package/dist/plugins/company-brain/test/api/cognee-client.test.ts +562 -0
  259. package/dist/plugins/company-brain/test/api/cognee-memory-scope.test.ts +74 -0
  260. package/dist/plugins/company-brain/test/api/context-engine-provider.test.ts +447 -0
  261. package/dist/plugins/company-brain/test/api/migration.test.ts +465 -0
  262. package/dist/plugins/company-brain/test/manifest.test.ts +95 -0
  263. package/dist/plugins/company-brain/tsconfig.json +8 -0
  264. package/dist/plugins/company-data/README.md +49 -0
  265. package/dist/plugins/company-data/package.json +21 -0
  266. package/dist/plugins/company-data/src/index.ts +30 -0
  267. package/dist/plugins/company-data/src/manifest.ts +26 -0
  268. package/dist/plugins/company-data/test/manifest.test.ts +116 -0
  269. package/dist/plugins/company-data/tsconfig.json +8 -0
  270. package/dist/plugins/company-etl/README.md +46 -0
  271. package/dist/plugins/company-etl/package.json +21 -0
  272. package/dist/plugins/company-etl/src/index.ts +29 -0
  273. package/dist/plugins/company-etl/src/manifest.ts +26 -0
  274. package/dist/plugins/company-etl/test/manifest.test.ts +108 -0
  275. package/dist/plugins/company-etl/tsconfig.json +8 -0
  276. package/dist/plugins/email-channel/README.md +41 -0
  277. package/dist/plugins/email-channel/package.json +22 -0
  278. package/dist/plugins/email-channel/src/index.ts +36 -0
  279. package/dist/plugins/email-channel/src/manifest.ts +44 -0
  280. package/dist/plugins/email-channel/src/provider-contract.ts +36 -0
  281. package/dist/plugins/email-channel/test/manifest.test.ts +119 -0
  282. package/dist/plugins/email-channel/tsconfig.json +8 -0
  283. package/dist/plugins/lastmile/README.md +50 -0
  284. package/dist/plugins/lastmile/package.json +23 -0
  285. package/dist/plugins/lastmile/smoke/lastmile-plugin-smoke.mjs +661 -0
  286. package/dist/plugins/lastmile/src/api/tasks-adapter.ts +572 -0
  287. package/dist/plugins/lastmile/src/discovery.fixture.ts +64 -0
  288. package/dist/plugins/lastmile/src/index.ts +46 -0
  289. package/dist/plugins/lastmile/src/manifest.ts +139 -0
  290. package/dist/plugins/lastmile/test/api/tasks-adapter.test.ts +266 -0
  291. package/dist/plugins/lastmile/test/discovery.test.ts +88 -0
  292. package/dist/plugins/lastmile/tsconfig.json +8 -0
  293. package/dist/plugins/n8n/README.md +201 -0
  294. package/dist/plugins/n8n/n8n-app/README.md +33 -0
  295. package/dist/plugins/n8n/n8n-app/package.json +23 -0
  296. package/dist/plugins/n8n/n8n-app/src/application-config.ts +45 -0
  297. package/dist/plugins/n8n/n8n-app/src/front-components/thinkwork-workflows.front-component.tsx +970 -0
  298. package/dist/plugins/n8n/n8n-app/src/lib/n8n-app-data.ts +190 -0
  299. package/dist/plugins/n8n/n8n-app/src/vite-env.d.ts +7 -0
  300. package/dist/plugins/n8n/n8n-app/tsconfig.json +15 -0
  301. package/dist/plugins/n8n/package.json +35 -0
  302. package/dist/plugins/n8n/runtime/Dockerfile +18 -0
  303. package/dist/plugins/n8n/runtime/n8n-task-runners.json +14 -0
  304. package/dist/plugins/n8n/runtime/n8n-task-runners.json.template +14 -0
  305. package/dist/plugins/n8n/runtime/package-lock.json +13 -0
  306. package/dist/plugins/n8n/runtime/package.json +7 -0
  307. package/dist/plugins/n8n/scripts/sync-thinkwork-app.mjs +268 -0
  308. package/dist/plugins/n8n/smoke/README.md +95 -0
  309. package/dist/plugins/n8n/smoke/n8n-agent-step-bridge-smoke.mjs +866 -0
  310. package/dist/plugins/n8n/smoke/n8n-integrated-app-smoke.mjs +262 -0
  311. package/dist/plugins/n8n/smoke/n8n-managed-app-smoke.mjs +409 -0
  312. package/dist/plugins/n8n/smoke/n8n-mcp-smoke.mjs +624 -0
  313. package/dist/plugins/n8n/src/deployment/image-build.ts +172 -0
  314. package/dist/plugins/n8n/src/deployment/managed-app.ts +429 -0
  315. package/dist/plugins/n8n/src/index.ts +79 -0
  316. package/dist/plugins/n8n/src/manifest.ts +403 -0
  317. package/dist/plugins/n8n/src/package-config.ts +186 -0
  318. package/dist/plugins/n8n/src/skills/n8n-workflow-operator/SKILL.md +76 -0
  319. package/dist/plugins/n8n/src/skills/n8n-workflow-operator/references/mcp-tooling.md +40 -0
  320. package/dist/plugins/n8n/src/skills/n8n-workflow-operator/references/validation-and-handoff.md +40 -0
  321. package/dist/plugins/n8n/src/skills/n8n-workflow-operator/references/workflow-authoring.md +45 -0
  322. package/dist/plugins/n8n/terraform/n8n/README.md +113 -0
  323. package/dist/plugins/n8n/terraform/n8n/main.tf +918 -0
  324. package/dist/plugins/n8n/terraform/n8n/outputs.tf +124 -0
  325. package/dist/plugins/n8n/terraform/n8n/scripts/sync-database.py +250 -0
  326. package/dist/plugins/n8n/terraform/n8n/scripts/test_sync_database.py +55 -0
  327. package/dist/plugins/n8n/terraform/n8n/variables.tf +354 -0
  328. package/dist/plugins/n8n/test/image-build.test.ts +118 -0
  329. package/dist/plugins/n8n/test/integrated-app-contract.test.ts +353 -0
  330. package/dist/plugins/n8n/test/manifest.test.ts +278 -0
  331. package/dist/plugins/n8n/test/package-config.test.ts +57 -0
  332. package/dist/plugins/n8n/tsconfig.json +8 -0
  333. package/dist/plugins/sendgrid/README.md +30 -0
  334. package/dist/plugins/sendgrid/package.json +22 -0
  335. package/dist/plugins/sendgrid/src/index.ts +36 -0
  336. package/dist/plugins/sendgrid/src/manifest.ts +37 -0
  337. package/dist/plugins/sendgrid/src/provider-contract.ts +14 -0
  338. package/dist/plugins/sendgrid/test/manifest.test.ts +80 -0
  339. package/dist/plugins/sendgrid/tsconfig.json +8 -0
  340. package/dist/plugins/twenty/README.md +78 -0
  341. package/dist/plugins/twenty/package.json +27 -0
  342. package/dist/plugins/twenty/scripts/__tests__/sync-thinkwork-app.test.mjs +67 -0
  343. package/dist/plugins/twenty/scripts/sync-thinkwork-app.mjs +185 -0
  344. package/dist/plugins/twenty/scripts/wire-thinkwork-workflow.mjs +658 -0
  345. package/dist/plugins/twenty/smoke/twenty-managed-app-smoke.mjs +359 -0
  346. package/dist/plugins/twenty/smoke/twenty-mcp-oauth-smoke.mjs +574 -0
  347. package/dist/plugins/twenty/src/api/cutover.ts +209 -0
  348. package/dist/plugins/twenty/src/deployment/managed-app.ts +253 -0
  349. package/dist/plugins/twenty/src/index.ts +55 -0
  350. package/dist/plugins/twenty/src/manifest.ts +259 -0
  351. package/dist/plugins/twenty/terraform/twenty/README.md +97 -0
  352. package/dist/plugins/twenty/terraform/twenty/main.tf +829 -0
  353. package/dist/plugins/twenty/terraform/twenty/outputs.tf +79 -0
  354. package/dist/plugins/twenty/terraform/twenty/variables.tf +268 -0
  355. package/dist/plugins/twenty/test/api/cutover.test.ts +183 -0
  356. package/dist/plugins/twenty/test/manifest.test.ts +463 -0
  357. package/dist/plugins/twenty/tsconfig.json +9 -0
  358. package/dist/plugins/twenty/twenty-app/.nvmrc +1 -0
  359. package/dist/plugins/twenty/twenty-app/README.md +148 -0
  360. package/dist/plugins/twenty/twenty-app/package.json +30 -0
  361. package/dist/plugins/twenty/twenty-app/src/application-config.ts +44 -0
  362. package/dist/plugins/twenty/twenty-app/src/constants/universal-identifiers.ts +18 -0
  363. package/dist/plugins/twenty/twenty-app/src/default-role.ts +24 -0
  364. package/dist/plugins/twenty/twenty-app/src/front-components/thinkwork-settings.front-component.tsx +299 -0
  365. package/dist/plugins/twenty/twenty-app/src/logic-functions/thinkwork-webhook.logic-function.ts +354 -0
  366. package/dist/plugins/twenty/twenty-app/tsconfig.json +14 -0
  367. package/dist/plugins/twenty/twenty-app/yarn.lock +4144 -0
  368. package/dist/plugins/workos-auth/package.json +22 -0
  369. package/dist/plugins/workos-auth/src/index.ts +30 -0
  370. package/dist/plugins/workos-auth/src/manifest.ts +40 -0
  371. package/dist/plugins/workos-auth/src/provider-contract.ts +39 -0
  372. package/dist/plugins/workos-auth/test/manifest.test.ts +94 -0
  373. package/dist/plugins/workos-auth/tsconfig.json +8 -0
  374. package/dist/scripts/bootstrap-workspace.sh +162 -0
  375. package/dist/scripts/post-deploy.sh +290 -0
  376. package/dist/terraform/examples/greenfield/main.tf +903 -75
  377. package/dist/terraform/examples/greenfield/terraform.tfvars.example +67 -8
  378. package/dist/terraform/modules/app/agentcore-code-interpreter/Dockerfile.sandbox-base +2 -2
  379. package/dist/terraform/modules/app/agentcore-code-interpreter/README.md +8 -9
  380. package/dist/terraform/modules/app/agentcore-code-interpreter/sandbox/sitecustomize.py +227 -0
  381. package/dist/terraform/modules/app/agentcore-code-interpreter/sandbox/test_sitecustomize.py +277 -0
  382. package/dist/terraform/modules/app/agentcore-memory/README.md +6 -6
  383. package/dist/terraform/modules/app/agentcore-memory/main.tf +1 -1
  384. package/dist/terraform/modules/app/agentcore-memory/scripts/create_or_find_memory.sh +40 -9
  385. package/dist/terraform/modules/app/agentcore-pi/README.md +61 -0
  386. package/dist/terraform/modules/app/agentcore-pi/main.tf +466 -0
  387. package/dist/terraform/modules/app/agentcore-pi/outputs.tf +38 -0
  388. package/dist/terraform/modules/app/agentcore-pi/variables.tf +145 -0
  389. package/dist/terraform/modules/app/agentcore-platform/main.tf +83 -0
  390. package/dist/terraform/modules/app/agentcore-runtime/main.tf +9 -11
  391. package/dist/terraform/modules/app/appsync-subscriptions/main.tf +5 -1
  392. package/dist/terraform/modules/app/customer-domain/main.tf +483 -0
  393. package/dist/terraform/modules/app/deployment-control-plane/README.md +47 -0
  394. package/dist/terraform/modules/app/deployment-control-plane/buildspec.yml +24 -0
  395. package/dist/terraform/modules/app/deployment-control-plane/main.tf +614 -0
  396. package/dist/terraform/modules/app/deployment-control-plane/outputs.tf +54 -0
  397. package/dist/terraform/modules/app/deployment-control-plane/runner.py +4720 -0
  398. package/dist/terraform/modules/app/deployment-control-plane/test_runner_bundle.py +3026 -0
  399. package/dist/terraform/modules/app/deployment-control-plane/variables.tf +96 -0
  400. package/dist/terraform/modules/app/hindsight-memory/README.md +25 -23
  401. package/dist/terraform/modules/app/hindsight-memory/main.tf +26 -2
  402. package/dist/terraform/modules/app/lambda-api/eval-fanout.tf +17 -50
  403. package/dist/terraform/modules/app/lambda-api/handlers.tf +1290 -679
  404. package/dist/terraform/modules/app/lambda-api/iam-grouped.tf +933 -0
  405. package/dist/terraform/modules/app/lambda-api/main.tf +14 -527
  406. package/dist/terraform/modules/app/lambda-api/mcp-oauth.tf +3 -19
  407. package/dist/terraform/modules/app/lambda-api/outputs.tf +50 -6
  408. package/dist/terraform/modules/app/lambda-api/runtime-config.tf +163 -0
  409. package/dist/terraform/modules/app/lambda-api/slack-app-secrets.tf +3 -1
  410. package/dist/terraform/modules/app/lambda-api/stripe-secrets.tf +3 -1
  411. package/dist/terraform/modules/app/lambda-api/variables.tf +240 -53
  412. package/dist/terraform/modules/app/lambda-api/workspace-events.tf +2 -25
  413. package/dist/terraform/modules/app/ses-email/main.tf +143 -30
  414. package/dist/terraform/modules/app/static-site/main.tf +4 -3
  415. package/dist/terraform/modules/app/www-dns/main.tf +45 -5
  416. package/dist/terraform/modules/app/www-dns/outputs.tf +10 -0
  417. package/dist/terraform/modules/app/www-dns/variables.tf +24 -0
  418. package/dist/terraform/modules/data/aurora-postgres/main.tf +15 -1
  419. package/dist/terraform/modules/data/compliance-exports-bucket/main.tf +1 -1
  420. package/dist/terraform/modules/data/compliance-exports-bucket/variables.tf +6 -0
  421. package/dist/terraform/modules/foundation/cognito/main.tf +167 -11
  422. package/dist/terraform/modules/foundation/cognito/outputs.tf +5 -0
  423. package/dist/terraform/modules/foundation/cognito/variables.tf +110 -0
  424. package/dist/terraform/modules/foundation/vpc/main.tf +45 -3
  425. package/dist/terraform/modules/foundation/vpc/outputs.tf +20 -0
  426. package/dist/terraform/modules/foundation/vpc/variables.tf +18 -0
  427. package/dist/terraform/modules/thinkwork/README.md +71 -0
  428. package/dist/terraform/modules/thinkwork/main.tf +1325 -174
  429. package/dist/terraform/modules/thinkwork/outputs.tf +457 -24
  430. package/dist/terraform/modules/thinkwork/variables.tf +1169 -93
  431. package/dist/terraform/schema.graphql +82 -9
  432. package/dist/workspace-defaults/files/AGENTS.md +344 -0
  433. package/dist/workspace-defaults/files/CONTEXT.md +8 -0
  434. package/dist/workspace-defaults/files/GUARDRAILS.md +51 -0
  435. package/dist/workspace-defaults/files/MEMORY_GUIDE.md +65 -0
  436. package/dist/workspace-defaults/files/ROUTER.md +24 -0
  437. package/dist/workspace-defaults/files/SPACE.md +62 -0
  438. package/dist/workspace-defaults/files/TOOLS.md +65 -0
  439. package/dist/workspace-defaults/files/USER.md +40 -0
  440. package/dist/workspace-defaults/files/mcp.json +3 -0
  441. package/dist/workspace-defaults/files/memory/contacts.md +13 -0
  442. package/dist/workspace-defaults/files/memory/lessons.md +13 -0
  443. package/dist/workspace-defaults/files/memory/preferences.md +12 -0
  444. package/dist/workspace-defaults/files/skills/.gitkeep +1 -0
  445. package/dist/workspace-defaults/files/skills/artifact-builder/SKILL.md +79 -0
  446. package/dist/workspace-defaults/files/skills/artifact-builder/references/crm-dashboard.md +166 -0
  447. package/dist/workspace-defaults/files/skills/automation-loop-designer/SKILL.md +120 -0
  448. package/dist/workspace-defaults/files/skills/skill-creator/LICENSE.txt +202 -0
  449. package/dist/workspace-defaults/files/skills/skill-creator/SKILL.md +485 -0
  450. package/dist/workspace-defaults/files/skills/skill-creator/UPSTREAM.json +124 -0
  451. package/dist/workspace-defaults/files/skills/skill-creator/agents/analyzer.md +274 -0
  452. package/dist/workspace-defaults/files/skills/skill-creator/agents/comparator.md +202 -0
  453. package/dist/workspace-defaults/files/skills/skill-creator/agents/grader.md +223 -0
  454. package/dist/workspace-defaults/files/skills/skill-creator/assets/eval_review.html +146 -0
  455. package/dist/workspace-defaults/files/skills/skill-creator/eval-viewer/generate_review.py +471 -0
  456. package/dist/workspace-defaults/files/skills/skill-creator/eval-viewer/viewer.html +1325 -0
  457. package/dist/workspace-defaults/files/skills/skill-creator/references/schemas.md +430 -0
  458. package/dist/workspace-defaults/files/skills/skill-creator/scripts/__init__.py +0 -0
  459. package/dist/workspace-defaults/files/skills/skill-creator/scripts/aggregate_benchmark.py +401 -0
  460. package/dist/workspace-defaults/files/skills/skill-creator/scripts/generate_report.py +326 -0
  461. package/dist/workspace-defaults/files/skills/skill-creator/scripts/improve_description.py +247 -0
  462. package/dist/workspace-defaults/files/skills/skill-creator/scripts/package_skill.py +136 -0
  463. package/dist/workspace-defaults/files/skills/skill-creator/scripts/quick_validate.py +103 -0
  464. package/dist/workspace-defaults/files/skills/skill-creator/scripts/run_eval.py +310 -0
  465. package/dist/workspace-defaults/files/skills/skill-creator/scripts/run_loop.py +328 -0
  466. package/dist/workspace-defaults/files/skills/skill-creator/scripts/utils.py +47 -0
  467. package/package.json +2 -1
  468. package/dist/terraform/modules/app/agentcore-flue/README.md +0 -58
  469. package/dist/terraform/modules/app/agentcore-flue/main.tf +0 -323
  470. package/dist/terraform/modules/app/agentcore-flue/outputs.tf +0 -23
  471. package/dist/terraform/modules/app/agentcore-flue/variables.tf +0 -97
  472. package/dist/terraform/modules/app/computer-runtime/README.md +0 -15
  473. package/dist/terraform/modules/app/computer-runtime/main.tf +0 -406
  474. package/dist/terraform/modules/app/computer-runtime/outputs.tf +0 -75
  475. package/dist/terraform/modules/app/computer-runtime/variables.tf +0 -66
@@ -0,0 +1,349 @@
1
+ -- Purpose: add tenant-scoped Spaces for collaborative onboarding workflows.
2
+ -- Plan: docs/plans/2026-05-19-003-feat-spaces-customer-onboarding-v1-plan.md (U2)
3
+ -- Apply manually: psql "$DATABASE_URL" -v ON_ERROR_STOP=1 -f packages/database-pg/drizzle/0105_spaces_domain.sql
4
+ -- creates: public.spaces
5
+ -- creates: public.space_members
6
+ -- creates: public.space_checklist_templates
7
+ -- creates: public.space_checklist_items
8
+ -- creates: public.space_integrations
9
+ -- creates: public.uq_spaces_tenant_slug
10
+ -- creates: public.idx_spaces_tenant_status
11
+ -- creates: public.idx_spaces_tenant_template
12
+ -- creates: public.uq_space_members_user
13
+ -- creates: public.idx_space_members_tenant_user
14
+ -- creates: public.idx_space_members_space
15
+ -- creates: public.uq_space_checklist_templates_key
16
+ -- creates: public.idx_space_checklist_templates_space
17
+ -- creates: public.uq_space_checklist_items_key
18
+ -- creates: public.idx_space_checklist_items_template
19
+ -- creates: public.idx_space_checklist_items_space
20
+ -- creates: public.uq_space_integrations_provider
21
+ -- creates: public.idx_space_integrations_space
22
+ -- creates-function: public.enforce_space_child_tenant
23
+ -- creates-trigger: public.space_members.space_members_tenant_guard
24
+ -- creates-trigger: public.space_checklist_templates.space_checklist_templates_tenant_guard
25
+ -- creates-trigger: public.space_checklist_items.space_checklist_items_tenant_guard
26
+ -- creates-trigger: public.space_integrations.space_integrations_tenant_guard
27
+ -- creates-constraint: public.spaces.spaces_tenant_id_tenants_id_fk
28
+ -- creates-constraint: public.spaces.spaces_status_allowed
29
+ -- creates-constraint: public.spaces.spaces_kind_allowed
30
+ -- creates-constraint: public.space_members.space_members_tenant_id_tenants_id_fk
31
+ -- creates-constraint: public.space_members.space_members_space_id_spaces_id_fk
32
+ -- creates-constraint: public.space_members.space_members_user_id_users_id_fk
33
+ -- creates-constraint: public.space_members.space_members_role_allowed
34
+ -- creates-constraint: public.space_members.space_members_notification_preference_allowed
35
+ -- creates-constraint: public.space_checklist_templates.space_checklist_templates_tenant_id_tenants_id_fk
36
+ -- creates-constraint: public.space_checklist_templates.space_checklist_templates_space_id_spaces_id_fk
37
+ -- creates-constraint: public.space_checklist_items.space_checklist_items_tenant_id_tenants_id_fk
38
+ -- creates-constraint: public.space_checklist_items.space_checklist_items_space_id_spaces_id_fk
39
+ -- creates-constraint: public.space_checklist_items.space_checklist_items_template_id_space_checklist_templates_id_fk
40
+ -- creates-constraint: public.space_integrations.space_integrations_tenant_id_tenants_id_fk
41
+ -- creates-constraint: public.space_integrations.space_integrations_space_id_spaces_id_fk
42
+ -- creates-constraint: public.space_integrations.space_integrations_provider_allowed
43
+ -- creates-constraint: public.space_integrations.space_integrations_status_allowed
44
+ -- creates-constraint: public.space_integrations.space_integrations_writeback_policy_allowed
45
+
46
+ \set ON_ERROR_STOP on
47
+
48
+ BEGIN;
49
+
50
+ SET LOCAL lock_timeout = '5s';
51
+ SET LOCAL statement_timeout = '120s';
52
+
53
+ CREATE TABLE IF NOT EXISTS public.spaces (
54
+ id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
55
+ tenant_id uuid NOT NULL,
56
+ slug text NOT NULL,
57
+ name text NOT NULL,
58
+ description text,
59
+ prompt text,
60
+ status text NOT NULL DEFAULT 'active',
61
+ kind text NOT NULL DEFAULT 'custom',
62
+ template_key text,
63
+ config jsonb,
64
+ created_at timestamptz NOT NULL DEFAULT now(),
65
+ updated_at timestamptz NOT NULL DEFAULT now(),
66
+ CONSTRAINT spaces_tenant_id_tenants_id_fk
67
+ FOREIGN KEY (tenant_id)
68
+ REFERENCES public.tenants(id)
69
+ ON DELETE CASCADE,
70
+ CONSTRAINT spaces_status_allowed
71
+ CHECK (status IN ('active', 'archived')),
72
+ CONSTRAINT spaces_kind_allowed
73
+ CHECK (kind IN ('custom', 'customer_onboarding'))
74
+ );
75
+
76
+ CREATE UNIQUE INDEX IF NOT EXISTS uq_spaces_tenant_slug
77
+ ON public.spaces (tenant_id, slug);
78
+
79
+ CREATE INDEX IF NOT EXISTS idx_spaces_tenant_status
80
+ ON public.spaces (tenant_id, status);
81
+
82
+ CREATE INDEX IF NOT EXISTS idx_spaces_tenant_template
83
+ ON public.spaces (tenant_id, template_key);
84
+
85
+ CREATE TABLE IF NOT EXISTS public.space_members (
86
+ id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
87
+ tenant_id uuid NOT NULL,
88
+ space_id uuid NOT NULL,
89
+ user_id uuid NOT NULL,
90
+ role text NOT NULL DEFAULT 'member',
91
+ notification_preference text NOT NULL DEFAULT 'subscribed',
92
+ created_at timestamptz NOT NULL DEFAULT now(),
93
+ updated_at timestamptz NOT NULL DEFAULT now(),
94
+ CONSTRAINT space_members_tenant_id_tenants_id_fk
95
+ FOREIGN KEY (tenant_id)
96
+ REFERENCES public.tenants(id)
97
+ ON DELETE CASCADE,
98
+ CONSTRAINT space_members_space_id_spaces_id_fk
99
+ FOREIGN KEY (space_id)
100
+ REFERENCES public.spaces(id)
101
+ ON DELETE CASCADE,
102
+ CONSTRAINT space_members_user_id_users_id_fk
103
+ FOREIGN KEY (user_id)
104
+ REFERENCES public.users(id)
105
+ ON DELETE CASCADE,
106
+ CONSTRAINT space_members_role_allowed
107
+ CHECK (role IN ('owner', 'admin', 'member', 'viewer')),
108
+ CONSTRAINT space_members_notification_preference_allowed
109
+ CHECK (notification_preference IN ('subscribed', 'mentions', 'muted'))
110
+ );
111
+
112
+ CREATE UNIQUE INDEX IF NOT EXISTS uq_space_members_user
113
+ ON public.space_members (tenant_id, space_id, user_id);
114
+
115
+ CREATE INDEX IF NOT EXISTS idx_space_members_tenant_user
116
+ ON public.space_members (tenant_id, user_id);
117
+
118
+ CREATE INDEX IF NOT EXISTS idx_space_members_space
119
+ ON public.space_members (space_id);
120
+
121
+ CREATE TABLE IF NOT EXISTS public.space_agent_assignments (
122
+ id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
123
+ tenant_id uuid NOT NULL,
124
+ space_id uuid NOT NULL,
125
+ agent_id uuid NOT NULL,
126
+ local_role text,
127
+ local_instructions text,
128
+ auto_subscribe boolean NOT NULL DEFAULT true,
129
+ allowed_capabilities jsonb,
130
+ allowed_tools jsonb,
131
+ status text NOT NULL DEFAULT 'active',
132
+ created_at timestamptz NOT NULL DEFAULT now(),
133
+ updated_at timestamptz NOT NULL DEFAULT now(),
134
+ CONSTRAINT space_agent_assignments_tenant_id_tenants_id_fk
135
+ FOREIGN KEY (tenant_id)
136
+ REFERENCES public.tenants(id)
137
+ ON DELETE CASCADE,
138
+ CONSTRAINT space_agent_assignments_space_id_spaces_id_fk
139
+ FOREIGN KEY (space_id)
140
+ REFERENCES public.spaces(id)
141
+ ON DELETE CASCADE,
142
+ CONSTRAINT space_agent_assignments_agent_id_agents_id_fk
143
+ FOREIGN KEY (agent_id)
144
+ REFERENCES public.agents(id)
145
+ ON DELETE CASCADE,
146
+ CONSTRAINT space_agent_assignments_status_allowed
147
+ CHECK (status IN ('active', 'paused', 'archived'))
148
+ );
149
+
150
+ CREATE UNIQUE INDEX IF NOT EXISTS uq_space_agent_assignments_agent
151
+ ON public.space_agent_assignments (tenant_id, space_id, agent_id);
152
+
153
+ CREATE INDEX IF NOT EXISTS idx_space_agent_assignments_agent
154
+ ON public.space_agent_assignments (tenant_id, agent_id);
155
+
156
+ CREATE INDEX IF NOT EXISTS idx_space_agent_assignments_space
157
+ ON public.space_agent_assignments (space_id);
158
+
159
+ CREATE TABLE IF NOT EXISTS public.space_checklist_templates (
160
+ id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
161
+ tenant_id uuid NOT NULL,
162
+ space_id uuid NOT NULL,
163
+ key text NOT NULL,
164
+ name text NOT NULL,
165
+ description text,
166
+ config jsonb,
167
+ created_at timestamptz NOT NULL DEFAULT now(),
168
+ updated_at timestamptz NOT NULL DEFAULT now(),
169
+ CONSTRAINT space_checklist_templates_tenant_id_tenants_id_fk
170
+ FOREIGN KEY (tenant_id)
171
+ REFERENCES public.tenants(id)
172
+ ON DELETE CASCADE,
173
+ CONSTRAINT space_checklist_templates_space_id_spaces_id_fk
174
+ FOREIGN KEY (space_id)
175
+ REFERENCES public.spaces(id)
176
+ ON DELETE CASCADE
177
+ );
178
+
179
+ CREATE UNIQUE INDEX IF NOT EXISTS uq_space_checklist_templates_key
180
+ ON public.space_checklist_templates (tenant_id, space_id, key);
181
+
182
+ CREATE INDEX IF NOT EXISTS idx_space_checklist_templates_space
183
+ ON public.space_checklist_templates (space_id);
184
+
185
+ CREATE TABLE IF NOT EXISTS public.space_checklist_items (
186
+ id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
187
+ tenant_id uuid NOT NULL,
188
+ space_id uuid NOT NULL,
189
+ template_id uuid NOT NULL,
190
+ key text NOT NULL,
191
+ title text NOT NULL,
192
+ description text,
193
+ role_key text,
194
+ required boolean NOT NULL DEFAULT true,
195
+ sort_order integer NOT NULL DEFAULT 0,
196
+ external_task_template jsonb,
197
+ created_at timestamptz NOT NULL DEFAULT now(),
198
+ updated_at timestamptz NOT NULL DEFAULT now(),
199
+ CONSTRAINT space_checklist_items_tenant_id_tenants_id_fk
200
+ FOREIGN KEY (tenant_id)
201
+ REFERENCES public.tenants(id)
202
+ ON DELETE CASCADE,
203
+ CONSTRAINT space_checklist_items_space_id_spaces_id_fk
204
+ FOREIGN KEY (space_id)
205
+ REFERENCES public.spaces(id)
206
+ ON DELETE CASCADE,
207
+ CONSTRAINT space_checklist_items_template_id_space_checklist_templates_id_fk
208
+ FOREIGN KEY (template_id)
209
+ REFERENCES public.space_checklist_templates(id)
210
+ ON DELETE CASCADE
211
+ );
212
+
213
+ CREATE UNIQUE INDEX IF NOT EXISTS uq_space_checklist_items_key
214
+ ON public.space_checklist_items (tenant_id, template_id, key);
215
+
216
+ CREATE INDEX IF NOT EXISTS idx_space_checklist_items_template
217
+ ON public.space_checklist_items (template_id);
218
+
219
+ CREATE INDEX IF NOT EXISTS idx_space_checklist_items_space
220
+ ON public.space_checklist_items (space_id);
221
+
222
+ CREATE TABLE IF NOT EXISTS public.space_integrations (
223
+ id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
224
+ tenant_id uuid NOT NULL,
225
+ space_id uuid NOT NULL,
226
+ provider text NOT NULL,
227
+ status text NOT NULL DEFAULT 'active',
228
+ writeback_policy text NOT NULL DEFAULT 'disabled',
229
+ config jsonb,
230
+ webhook_config_ref text,
231
+ created_at timestamptz NOT NULL DEFAULT now(),
232
+ updated_at timestamptz NOT NULL DEFAULT now(),
233
+ CONSTRAINT space_integrations_tenant_id_tenants_id_fk
234
+ FOREIGN KEY (tenant_id)
235
+ REFERENCES public.tenants(id)
236
+ ON DELETE CASCADE,
237
+ CONSTRAINT space_integrations_space_id_spaces_id_fk
238
+ FOREIGN KEY (space_id)
239
+ REFERENCES public.spaces(id)
240
+ ON DELETE CASCADE,
241
+ CONSTRAINT space_integrations_provider_allowed
242
+ CHECK (provider IN ('lastmile_tasks', 'webhook')),
243
+ CONSTRAINT space_integrations_status_allowed
244
+ CHECK (status IN ('active', 'paused', 'archived')),
245
+ CONSTRAINT space_integrations_writeback_policy_allowed
246
+ CHECK (writeback_policy IN ('disabled', 'status_only', 'status_and_comments'))
247
+ );
248
+
249
+ CREATE UNIQUE INDEX IF NOT EXISTS uq_space_integrations_provider
250
+ ON public.space_integrations (tenant_id, space_id, provider);
251
+
252
+ CREATE INDEX IF NOT EXISTS idx_space_integrations_space
253
+ ON public.space_integrations (space_id);
254
+
255
+ CREATE OR REPLACE FUNCTION public.enforce_space_child_tenant()
256
+ RETURNS trigger
257
+ LANGUAGE plpgsql
258
+ AS $$
259
+ DECLARE
260
+ target_tenant_id uuid;
261
+ BEGIN
262
+ SELECT tenant_id INTO target_tenant_id
263
+ FROM public.spaces
264
+ WHERE id = NEW.space_id;
265
+
266
+ IF target_tenant_id IS NULL OR target_tenant_id <> NEW.tenant_id THEN
267
+ RAISE EXCEPTION 'space child tenant mismatch for space %', NEW.space_id
268
+ USING ERRCODE = '23514';
269
+ END IF;
270
+
271
+ IF TG_TABLE_NAME = 'space_members' THEN
272
+ SELECT tenant_id INTO target_tenant_id
273
+ FROM public.users
274
+ WHERE id = NEW.user_id;
275
+
276
+ IF target_tenant_id IS NULL OR target_tenant_id <> NEW.tenant_id THEN
277
+ RAISE EXCEPTION 'space member tenant mismatch for user %', NEW.user_id
278
+ USING ERRCODE = '23514';
279
+ END IF;
280
+ ELSIF TG_TABLE_NAME = 'space_agent_assignments' THEN
281
+ SELECT tenant_id INTO target_tenant_id
282
+ FROM public.agents
283
+ WHERE id = NEW.agent_id;
284
+
285
+ IF target_tenant_id IS NULL OR target_tenant_id <> NEW.tenant_id THEN
286
+ RAISE EXCEPTION 'space agent assignment tenant mismatch for agent %', NEW.agent_id
287
+ USING ERRCODE = '23514';
288
+ END IF;
289
+ ELSIF TG_TABLE_NAME = 'space_checklist_items' THEN
290
+ SELECT tenant_id INTO target_tenant_id
291
+ FROM public.space_checklist_templates
292
+ WHERE id = NEW.template_id;
293
+
294
+ IF target_tenant_id IS NULL OR target_tenant_id <> NEW.tenant_id THEN
295
+ RAISE EXCEPTION 'space checklist item tenant mismatch for template %', NEW.template_id
296
+ USING ERRCODE = '23514';
297
+ END IF;
298
+ END IF;
299
+
300
+ RETURN NEW;
301
+ END;
302
+ $$;
303
+
304
+ DROP TRIGGER IF EXISTS space_members_tenant_guard
305
+ ON public.space_members;
306
+
307
+ CREATE TRIGGER space_members_tenant_guard
308
+ BEFORE INSERT OR UPDATE
309
+ ON public.space_members
310
+ FOR EACH ROW
311
+ EXECUTE FUNCTION public.enforce_space_child_tenant();
312
+
313
+ DROP TRIGGER IF EXISTS space_agent_assignments_tenant_guard
314
+ ON public.space_agent_assignments;
315
+
316
+ CREATE TRIGGER space_agent_assignments_tenant_guard
317
+ BEFORE INSERT OR UPDATE
318
+ ON public.space_agent_assignments
319
+ FOR EACH ROW
320
+ EXECUTE FUNCTION public.enforce_space_child_tenant();
321
+
322
+ DROP TRIGGER IF EXISTS space_checklist_templates_tenant_guard
323
+ ON public.space_checklist_templates;
324
+
325
+ CREATE TRIGGER space_checklist_templates_tenant_guard
326
+ BEFORE INSERT OR UPDATE
327
+ ON public.space_checklist_templates
328
+ FOR EACH ROW
329
+ EXECUTE FUNCTION public.enforce_space_child_tenant();
330
+
331
+ DROP TRIGGER IF EXISTS space_checklist_items_tenant_guard
332
+ ON public.space_checklist_items;
333
+
334
+ CREATE TRIGGER space_checklist_items_tenant_guard
335
+ BEFORE INSERT OR UPDATE
336
+ ON public.space_checklist_items
337
+ FOR EACH ROW
338
+ EXECUTE FUNCTION public.enforce_space_child_tenant();
339
+
340
+ DROP TRIGGER IF EXISTS space_integrations_tenant_guard
341
+ ON public.space_integrations;
342
+
343
+ CREATE TRIGGER space_integrations_tenant_guard
344
+ BEFORE INSERT OR UPDATE
345
+ ON public.space_integrations
346
+ FOR EACH ROW
347
+ EXECUTE FUNCTION public.enforce_space_child_tenant();
348
+
349
+ COMMIT;
@@ -0,0 +1,173 @@
1
+ -- Expand the approved seed ontology so ontology-backed wiki pages can form
2
+ -- useful subject-predicate-object triples instead of isolated nodes.
3
+ --
4
+ -- creates: public.view_seed_ontology_triples_expanded
5
+
6
+ WITH seed(slug, name, broad_type, description, guidance_notes, aliases) AS (
7
+ VALUES
8
+ ('activity', 'Activity', 'event', 'A dated event, class, camp, attraction, festival, or planned thing-to-do.', 'Use Activity for events and experiences; use Venue for the named physical location that hosts or contains them.', ARRAY['event', 'attraction', 'camp', 'class', 'festival', 'thing to do']::text[])
9
+ ),
10
+ active_versions AS (
11
+ SELECT DISTINCT ON (tenant_id) id, tenant_id
12
+ FROM ontology.versions
13
+ WHERE status = 'active'
14
+ ORDER BY tenant_id, version_number DESC
15
+ )
16
+ INSERT INTO ontology.entity_types (
17
+ tenant_id,
18
+ version_id,
19
+ slug,
20
+ name,
21
+ broad_type,
22
+ description,
23
+ guidance_notes,
24
+ aliases,
25
+ lifecycle_status,
26
+ approved_at
27
+ )
28
+ SELECT
29
+ v.tenant_id,
30
+ v.id,
31
+ seed.slug,
32
+ seed.name,
33
+ seed.broad_type,
34
+ seed.description,
35
+ seed.guidance_notes,
36
+ seed.aliases,
37
+ 'approved',
38
+ now()
39
+ FROM active_versions v
40
+ CROSS JOIN seed
41
+ ON CONFLICT (tenant_id, slug) DO UPDATE
42
+ SET
43
+ name = EXCLUDED.name,
44
+ broad_type = EXCLUDED.broad_type,
45
+ description = EXCLUDED.description,
46
+ guidance_notes = EXCLUDED.guidance_notes,
47
+ aliases = EXCLUDED.aliases,
48
+ lifecycle_status = 'approved',
49
+ approved_at = COALESCE(ontology.entity_types.approved_at, now()),
50
+ updated_at = now();
51
+
52
+ WITH seed(slug, name, inverse_name, source_slug, target_slug, description, source_type_slugs, target_type_slugs) AS (
53
+ VALUES
54
+ ('lives_in', 'Lives in', 'Home of', 'person', 'place', 'Connects a person to a home city, region, or place of residence.', ARRAY['person']::text[], ARRAY['place']::text[]),
55
+ ('visited', 'Visited', 'Visited by', 'person', 'venue', 'Connects a person to a place, venue, trip, or activity they visited, attended, or experienced.', ARRAY['person']::text[], ARRAY['venue', 'place', 'trip', 'activity']::text[]),
56
+ ('interested_in', 'Interested in', 'Interest of', 'person', 'activity', 'Connects a person to a potential activity, venue, place, or preference they are considering or like.', ARRAY['person']::text[], ARRAY['activity', 'venue', 'place', 'preference']::text[]),
57
+ ('takes_place_at', 'Takes place at', 'Hosts activity', 'activity', 'place', 'Connects an activity, event, or trip to the venue or place where it happens.', ARRAY['activity', 'trip']::text[], ARRAY['venue', 'place']::text[]),
58
+ ('has_order', 'Has order', 'Order for', 'customer', 'order', 'Connects a customer to an order or commercial transaction.', ARRAY['customer']::text[], ARRAY['order']::text[]),
59
+ ('fulfilled_at', 'Fulfilled at', 'Fulfillment site for', 'order', 'place', 'Connects an order to a pickup, delivery, terminal, or service place.', ARRAY['order']::text[], ARRAY['place', 'venue']::text[]),
60
+ ('serves_place', 'Serves place', 'Served by', 'customer', 'place', 'Connects a customer or service organization to a service area or operating place.', ARRAY['customer']::text[], ARRAY['place']::text[]),
61
+ ('related_case', 'Related case', 'Related case', 'support_case', 'support_case', 'Connects support cases that describe the same incident, regression, or follow-up.', ARRAY['support_case']::text[], ARRAY['support_case']::text[])
62
+ )
63
+ INSERT INTO ontology.relationship_types (
64
+ tenant_id,
65
+ version_id,
66
+ slug,
67
+ name,
68
+ inverse_name,
69
+ source_entity_type_id,
70
+ target_entity_type_id,
71
+ source_type_slugs,
72
+ target_type_slugs,
73
+ description,
74
+ lifecycle_status,
75
+ approved_at
76
+ )
77
+ SELECT
78
+ source_type.tenant_id,
79
+ source_type.version_id,
80
+ seed.slug,
81
+ seed.name,
82
+ seed.inverse_name,
83
+ source_type.id,
84
+ target_type.id,
85
+ seed.source_type_slugs,
86
+ seed.target_type_slugs,
87
+ seed.description,
88
+ 'approved',
89
+ now()
90
+ FROM seed
91
+ JOIN ontology.entity_types source_type
92
+ ON source_type.slug = seed.source_slug
93
+ JOIN ontology.entity_types target_type
94
+ ON target_type.tenant_id = source_type.tenant_id
95
+ AND target_type.slug = seed.target_slug
96
+ ON CONFLICT (tenant_id, slug) DO UPDATE
97
+ SET
98
+ name = EXCLUDED.name,
99
+ inverse_name = EXCLUDED.inverse_name,
100
+ source_entity_type_id = EXCLUDED.source_entity_type_id,
101
+ target_entity_type_id = EXCLUDED.target_entity_type_id,
102
+ source_type_slugs = EXCLUDED.source_type_slugs,
103
+ target_type_slugs = EXCLUDED.target_type_slugs,
104
+ description = EXCLUDED.description,
105
+ lifecycle_status = 'approved',
106
+ approved_at = COALESCE(ontology.relationship_types.approved_at, now()),
107
+ updated_at = now();
108
+
109
+ WITH expanded(slug, source_type_slugs, target_type_slugs, source_slug, target_slug) AS (
110
+ VALUES
111
+ ('located_in', ARRAY['venue', 'place', 'activity']::text[], ARRAY['place']::text[], 'venue', 'place'),
112
+ ('about_place', ARRAY['trip', 'preference', 'activity']::text[], ARRAY['place']::text[], 'trip', 'place'),
113
+ ('involves_person', ARRAY['project', 'task', 'trip', 'decision', 'support_case', 'order', 'activity', 'venue', 'preference']::text[], ARRAY['person']::text[], 'project', 'person'),
114
+ ('has_task', ARRAY['project', 'commitment', 'support_case', 'person']::text[], ARRAY['task']::text[], 'project', 'task')
115
+ )
116
+ UPDATE ontology.relationship_types relationship
117
+ SET
118
+ source_entity_type_id = source_type.id,
119
+ target_entity_type_id = target_type.id,
120
+ source_type_slugs = expanded.source_type_slugs,
121
+ target_type_slugs = expanded.target_type_slugs,
122
+ lifecycle_status = 'approved',
123
+ approved_at = COALESCE(relationship.approved_at, now()),
124
+ updated_at = now()
125
+ FROM expanded
126
+ JOIN ontology.entity_types source_type
127
+ ON source_type.slug = expanded.source_slug
128
+ JOIN ontology.entity_types target_type
129
+ ON target_type.tenant_id = source_type.tenant_id
130
+ AND target_type.slug = expanded.target_slug
131
+ WHERE relationship.tenant_id = source_type.tenant_id
132
+ AND relationship.slug = expanded.slug;
133
+
134
+ WITH seed(entity_slug, slug, heading, facet_type, position, prompt) AS (
135
+ VALUES
136
+ ('activity', 'overview', 'Overview', 'compiled', 10, 'Summarize what the activity is and why it matters.'),
137
+ ('activity', 'schedule', 'Schedule', 'activity', 20, 'Capture dates, times, seasonality, and status when present.'),
138
+ ('activity', 'location', 'Location', 'relationship', 30, 'Capture the venue or place where the activity happens.'),
139
+ ('activity', 'participants', 'Participants', 'relationship', 40, 'Capture people involved, attending, or interested.')
140
+ )
141
+ INSERT INTO ontology.facet_templates (
142
+ tenant_id,
143
+ entity_type_id,
144
+ slug,
145
+ heading,
146
+ facet_type,
147
+ position,
148
+ prompt,
149
+ lifecycle_status
150
+ )
151
+ SELECT
152
+ entity_types.tenant_id,
153
+ entity_types.id,
154
+ seed.slug,
155
+ seed.heading,
156
+ seed.facet_type,
157
+ seed.position,
158
+ seed.prompt,
159
+ 'approved'
160
+ FROM seed
161
+ JOIN ontology.entity_types
162
+ ON entity_types.slug = seed.entity_slug
163
+ ON CONFLICT (entity_type_id, slug) DO UPDATE
164
+ SET
165
+ heading = EXCLUDED.heading,
166
+ facet_type = EXCLUDED.facet_type,
167
+ position = EXCLUDED.position,
168
+ prompt = EXCLUDED.prompt,
169
+ lifecycle_status = 'approved',
170
+ updated_at = now();
171
+
172
+ CREATE OR REPLACE VIEW public.view_seed_ontology_triples_expanded AS
173
+ SELECT true AS expanded;