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,525 @@
1
+ -- Backfill first-class Workflow projections for existing Step Functions routines.
2
+ -- Plan: docs/plans/2026-06-20-001-feat-first-class-workflow-control-plane-plan.md (U10).
3
+ --
4
+ -- Apply manually after 0177_workflow_control_plane.sql and after application
5
+ -- code that reads/writes the workflow control plane has been reviewed:
6
+ -- psql "$DATABASE_URL" -v ON_ERROR_STOP=1 -f packages/database-pg/drizzle/0178_workflow_backfill_existing_routines.sql
7
+ --
8
+ -- Drift detection:
9
+ -- bash scripts/db-migrate-manual.sh packages/database-pg/drizzle/0178_workflow_backfill_existing_routines.sql
10
+ --
11
+ -- Pre-flight:
12
+ -- SELECT to_regclass('public.routines') AS routines;
13
+ -- SELECT to_regclass('public.routine_asl_versions') AS routine_asl_versions;
14
+ -- SELECT to_regclass('public.scheduled_jobs') AS scheduled_jobs;
15
+ -- SELECT to_regclass('public.workflows') AS workflows;
16
+ -- SELECT to_regclass('public.workflow_versions') AS workflow_versions;
17
+ -- SELECT to_regclass('public.workflow_triggers') AS workflow_triggers;
18
+ -- SELECT to_regclass('public.workflow_engine_bindings') AS workflow_engine_bindings;
19
+ --
20
+ -- Backfill policy:
21
+ -- - Only routines.engine = 'step_functions' is projected.
22
+ -- - legacy_python routines are skipped; they remain compatibility/internal substrate only.
23
+ -- - Re-running is idempotent through workflows_tenant_slug_uidx,
24
+ -- workflow_versions_workflow_version_uidx, workflow_engine_bindings_step_routine_uidx,
25
+ -- and NOT EXISTS trigger guards.
26
+ --
27
+ -- creates: public.view_workflow_backfill_existing_routines_status
28
+
29
+ DO $$
30
+ BEGIN
31
+ IF to_regclass('public.routines') IS NULL THEN
32
+ RAISE EXCEPTION 'routines not found; apply routine substrate migrations first';
33
+ END IF;
34
+ IF to_regclass('public.routine_asl_versions') IS NULL THEN
35
+ RAISE EXCEPTION 'routine_asl_versions not found; apply Step Functions routine migrations first';
36
+ END IF;
37
+ IF to_regclass('public.scheduled_jobs') IS NULL THEN
38
+ RAISE EXCEPTION 'scheduled_jobs not found; apply trigger/scheduling migrations first';
39
+ END IF;
40
+ IF to_regclass('public.workflows') IS NULL
41
+ OR to_regclass('public.workflow_versions') IS NULL
42
+ OR to_regclass('public.workflow_triggers') IS NULL
43
+ OR to_regclass('public.workflow_engine_bindings') IS NULL
44
+ THEN
45
+ RAISE EXCEPTION 'workflow control-plane tables missing; apply 0177_workflow_control_plane.sql first';
46
+ END IF;
47
+ END $$;
48
+
49
+ WITH eligible_routines AS (
50
+ SELECT
51
+ r.*,
52
+ av.id AS current_asl_version_id,
53
+ av.version_number AS current_asl_version_number,
54
+ CASE
55
+ WHEN EXISTS (
56
+ SELECT 1
57
+ FROM public.scheduled_jobs sj
58
+ WHERE sj.routine_id = r.id
59
+ AND sj.trigger_type IN ('routine_schedule', 'routine_one_time')
60
+ )
61
+ THEN 'schedule'
62
+ ELSE 'manual'
63
+ END AS primary_family,
64
+ CASE
65
+ WHEN r.status IS NOT NULL AND r.status <> 'active' THEN 'disabled'
66
+ WHEN r.state_machine_arn IS NULL OR r.state_machine_alias_arn IS NULL THEN 'blocked_not_ready'
67
+ WHEN av.id IS NULL THEN 'blocked_not_ready'
68
+ ELSE 'ready'
69
+ END AS readiness_state,
70
+ CASE
71
+ WHEN r.status IS NOT NULL AND r.status <> 'active' THEN 'disabled'
72
+ WHEN r.state_machine_arn IS NULL OR r.state_machine_alias_arn IS NULL THEN 'blocked_not_ready'
73
+ WHEN av.id IS NULL THEN 'blocked_not_ready'
74
+ ELSE 'ready'
75
+ END AS binding_status,
76
+ CASE
77
+ WHEN r.status = 'archived' THEN 'archived'
78
+ WHEN av.id IS NULL THEN 'deprecated'
79
+ ELSE 'active'
80
+ END AS lifecycle_status,
81
+ CASE
82
+ WHEN r.status IS NOT NULL AND r.status <> 'active' THEN
83
+ jsonb_build_array(jsonb_build_object('code', 'routine_inactive', 'message', 'Routine is inactive'))
84
+ WHEN r.state_machine_arn IS NULL OR r.state_machine_alias_arn IS NULL THEN
85
+ jsonb_build_array(jsonb_build_object('code', 'missing_state_machine', 'message', 'Routine is missing Step Functions ARNs'))
86
+ WHEN av.id IS NULL THEN
87
+ jsonb_build_array(jsonb_build_object('code', 'missing_current_asl_version', 'message', 'Routine current ASL version was not found'))
88
+ ELSE '[]'::jsonb
89
+ END AS readiness_reasons
90
+ FROM public.routines r
91
+ LEFT JOIN public.routine_asl_versions av
92
+ ON av.routine_id = r.id
93
+ AND av.version_number = r.current_version
94
+ WHERE r.engine = 'step_functions'
95
+ )
96
+ INSERT INTO public.workflows (
97
+ tenant_id,
98
+ name,
99
+ slug,
100
+ description,
101
+ lifecycle_status,
102
+ visibility,
103
+ owner_agent_id,
104
+ primary_trigger_family,
105
+ capability_flags,
106
+ readiness_state,
107
+ readiness_reasons,
108
+ created_at,
109
+ updated_at
110
+ )
111
+ SELECT
112
+ er.tenant_id,
113
+ COALESCE(er.name, 'Untitled routine'),
114
+ 'routine-' || er.id::text,
115
+ er.description,
116
+ er.lifecycle_status,
117
+ CASE WHEN er.visibility = 'tenant_shared' THEN 'tenant_shared' ELSE 'agent_private' END,
118
+ COALESCE(er.owning_agent_id, er.agent_id),
119
+ er.primary_family,
120
+ '{"start":true,"monitor":true,"cancel":true,"retry":false,"replay":false,"evidence":true}'::jsonb,
121
+ er.readiness_state,
122
+ er.readiness_reasons,
123
+ COALESCE(er.created_at, now()),
124
+ now()
125
+ FROM eligible_routines er
126
+ ON CONFLICT (tenant_id, slug)
127
+ DO UPDATE SET
128
+ name = EXCLUDED.name,
129
+ description = EXCLUDED.description,
130
+ lifecycle_status = EXCLUDED.lifecycle_status,
131
+ visibility = EXCLUDED.visibility,
132
+ owner_agent_id = EXCLUDED.owner_agent_id,
133
+ primary_trigger_family = EXCLUDED.primary_trigger_family,
134
+ capability_flags = EXCLUDED.capability_flags,
135
+ readiness_state = EXCLUDED.readiness_state,
136
+ readiness_reasons = EXCLUDED.readiness_reasons,
137
+ updated_at = now();
138
+
139
+ WITH routine_workflows AS (
140
+ SELECT
141
+ r.*,
142
+ w.id AS workflow_id
143
+ FROM public.routines r
144
+ JOIN public.workflows w
145
+ ON w.tenant_id = r.tenant_id
146
+ AND w.slug = 'routine-' || r.id::text
147
+ WHERE r.engine = 'step_functions'
148
+ )
149
+ INSERT INTO public.workflow_versions (
150
+ tenant_id,
151
+ workflow_id,
152
+ version_number,
153
+ version_status,
154
+ source_kind,
155
+ source_metadata,
156
+ definition_snapshot,
157
+ capability_snapshot,
158
+ routine_asl_version_id,
159
+ created_by_actor_type,
160
+ created_by_actor_id,
161
+ published_at,
162
+ created_at
163
+ )
164
+ SELECT
165
+ rw.tenant_id,
166
+ rw.workflow_id,
167
+ av.version_number,
168
+ CASE WHEN av.version_number = rw.current_version THEN 'active' ELSE 'superseded' END,
169
+ 'step_functions_routine',
170
+ jsonb_build_object(
171
+ 'routineId', rw.id,
172
+ 'stateMachineArn', av.state_machine_arn,
173
+ 'versionArn', av.version_arn,
174
+ 'backfillMigration', '0178_workflow_backfill_existing_routines'
175
+ ),
176
+ jsonb_build_object(
177
+ 'routineId', rw.id,
178
+ 'routineName', rw.name,
179
+ 'asl', av.asl_json,
180
+ 'markdownSummary', av.markdown_summary,
181
+ 'stepManifest', av.step_manifest_json
182
+ ),
183
+ '{"start":true,"monitor":true,"cancel":true,"retry":false,"replay":false,"evidence":true}'::jsonb,
184
+ av.id,
185
+ av.published_by_actor_type,
186
+ av.published_by_actor_id,
187
+ COALESCE(av.created_at, now()),
188
+ COALESCE(av.created_at, now())
189
+ FROM routine_workflows rw
190
+ JOIN public.routine_asl_versions av
191
+ ON av.routine_id = rw.id
192
+ ON CONFLICT (workflow_id, version_number)
193
+ DO UPDATE SET
194
+ version_status = EXCLUDED.version_status,
195
+ source_kind = EXCLUDED.source_kind,
196
+ source_metadata = EXCLUDED.source_metadata,
197
+ definition_snapshot = EXCLUDED.definition_snapshot,
198
+ capability_snapshot = EXCLUDED.capability_snapshot,
199
+ routine_asl_version_id = EXCLUDED.routine_asl_version_id,
200
+ created_by_actor_type = EXCLUDED.created_by_actor_type,
201
+ created_by_actor_id = EXCLUDED.created_by_actor_id,
202
+ published_at = EXCLUDED.published_at;
203
+
204
+ WITH current_versions AS (
205
+ SELECT
206
+ r.id AS routine_id,
207
+ w.id AS workflow_id,
208
+ wv.id AS workflow_version_id,
209
+ av.version_number
210
+ FROM public.routines r
211
+ JOIN public.workflows w
212
+ ON w.tenant_id = r.tenant_id
213
+ AND w.slug = 'routine-' || r.id::text
214
+ LEFT JOIN public.routine_asl_versions av
215
+ ON av.routine_id = r.id
216
+ AND av.version_number = r.current_version
217
+ LEFT JOIN public.workflow_versions wv
218
+ ON wv.workflow_id = w.id
219
+ AND wv.routine_asl_version_id = av.id
220
+ WHERE r.engine = 'step_functions'
221
+ )
222
+ UPDATE public.workflows w
223
+ SET
224
+ current_version_id = cv.workflow_version_id,
225
+ current_version_number = cv.version_number,
226
+ updated_at = now()
227
+ FROM current_versions cv
228
+ WHERE w.id = cv.workflow_id;
229
+
230
+ WITH routine_workflows AS (
231
+ SELECT
232
+ r.*,
233
+ w.id AS workflow_id,
234
+ w.current_version_id AS workflow_version_id,
235
+ av.id AS current_asl_version_id,
236
+ av.version_number AS current_asl_version_number,
237
+ CASE
238
+ WHEN r.status IS NOT NULL AND r.status <> 'active' THEN 'disabled'
239
+ WHEN r.state_machine_arn IS NULL OR r.state_machine_alias_arn IS NULL THEN 'blocked_not_ready'
240
+ WHEN av.id IS NULL THEN 'blocked_not_ready'
241
+ ELSE 'ready'
242
+ END AS readiness_state,
243
+ CASE
244
+ WHEN r.status IS NOT NULL AND r.status <> 'active' THEN 'disabled'
245
+ WHEN r.state_machine_arn IS NULL OR r.state_machine_alias_arn IS NULL THEN 'blocked_not_ready'
246
+ WHEN av.id IS NULL THEN 'blocked_not_ready'
247
+ ELSE 'ready'
248
+ END AS binding_status,
249
+ CASE
250
+ WHEN r.status IS NOT NULL AND r.status <> 'active' THEN
251
+ jsonb_build_array(jsonb_build_object('code', 'routine_inactive', 'message', 'Routine is inactive'))
252
+ WHEN r.state_machine_arn IS NULL OR r.state_machine_alias_arn IS NULL THEN
253
+ jsonb_build_array(jsonb_build_object('code', 'missing_state_machine', 'message', 'Routine is missing Step Functions ARNs'))
254
+ WHEN av.id IS NULL THEN
255
+ jsonb_build_array(jsonb_build_object('code', 'missing_current_asl_version', 'message', 'Routine current ASL version was not found'))
256
+ ELSE '[]'::jsonb
257
+ END AS readiness_reasons
258
+ FROM public.routines r
259
+ JOIN public.workflows w
260
+ ON w.tenant_id = r.tenant_id
261
+ AND w.slug = 'routine-' || r.id::text
262
+ LEFT JOIN public.routine_asl_versions av
263
+ ON av.routine_id = r.id
264
+ AND av.version_number = r.current_version
265
+ WHERE r.engine = 'step_functions'
266
+ )
267
+ INSERT INTO public.workflow_engine_bindings (
268
+ tenant_id,
269
+ workflow_id,
270
+ workflow_version_id,
271
+ binding_type,
272
+ binding_status,
273
+ routine_id,
274
+ routine_asl_version_id,
275
+ external_workflow_id,
276
+ external_workflow_name,
277
+ external_version_id,
278
+ connection_ref,
279
+ capability_flags,
280
+ readiness_state,
281
+ readiness_reasons,
282
+ created_at,
283
+ updated_at
284
+ )
285
+ SELECT
286
+ rw.tenant_id,
287
+ rw.workflow_id,
288
+ rw.workflow_version_id,
289
+ 'step_functions_routine',
290
+ rw.binding_status,
291
+ rw.id,
292
+ rw.current_asl_version_id,
293
+ rw.id::text,
294
+ rw.name,
295
+ CASE WHEN rw.current_asl_version_number IS NOT NULL THEN rw.current_asl_version_number::text ELSE NULL END,
296
+ jsonb_build_object(
297
+ 'stateMachineArn', rw.state_machine_arn,
298
+ 'aliasArn', rw.state_machine_alias_arn,
299
+ 'backfillMigration', '0178_workflow_backfill_existing_routines'
300
+ ),
301
+ '{"start":true,"monitor":true,"cancel":true,"retry":false,"replay":false,"evidence":true}'::jsonb,
302
+ rw.readiness_state,
303
+ rw.readiness_reasons,
304
+ now(),
305
+ now()
306
+ FROM routine_workflows rw
307
+ ON CONFLICT (tenant_id, routine_id) WHERE routine_id IS NOT NULL
308
+ DO UPDATE SET
309
+ workflow_id = EXCLUDED.workflow_id,
310
+ workflow_version_id = EXCLUDED.workflow_version_id,
311
+ binding_type = EXCLUDED.binding_type,
312
+ binding_status = EXCLUDED.binding_status,
313
+ routine_asl_version_id = EXCLUDED.routine_asl_version_id,
314
+ external_workflow_id = EXCLUDED.external_workflow_id,
315
+ external_workflow_name = EXCLUDED.external_workflow_name,
316
+ external_version_id = EXCLUDED.external_version_id,
317
+ connection_ref = EXCLUDED.connection_ref,
318
+ capability_flags = EXCLUDED.capability_flags,
319
+ readiness_state = EXCLUDED.readiness_state,
320
+ readiness_reasons = EXCLUDED.readiness_reasons,
321
+ updated_at = now();
322
+
323
+ WITH routine_workflows AS (
324
+ SELECT
325
+ r.*,
326
+ w.id AS workflow_id,
327
+ w.current_version_id AS workflow_version_id,
328
+ w.readiness_state,
329
+ w.readiness_reasons
330
+ FROM public.routines r
331
+ JOIN public.workflows w
332
+ ON w.tenant_id = r.tenant_id
333
+ AND w.slug = 'routine-' || r.id::text
334
+ WHERE r.engine = 'step_functions'
335
+ )
336
+ UPDATE public.workflow_triggers wt
337
+ SET
338
+ workflow_version_id = rw.workflow_version_id,
339
+ enabled = (rw.readiness_state = 'ready'),
340
+ trigger_config = jsonb_build_object('routineId', rw.id),
341
+ actor_contract = jsonb_build_object('agentVisible', rw.visibility = 'tenant_shared'),
342
+ readiness_state = rw.readiness_state,
343
+ readiness_reasons = rw.readiness_reasons,
344
+ updated_at = now()
345
+ FROM routine_workflows rw
346
+ WHERE wt.workflow_id = rw.workflow_id
347
+ AND wt.trigger_family = 'manual'
348
+ AND wt.source_system = 'routine';
349
+
350
+ WITH routine_workflows AS (
351
+ SELECT
352
+ r.*,
353
+ w.id AS workflow_id,
354
+ w.current_version_id AS workflow_version_id,
355
+ w.readiness_state,
356
+ w.readiness_reasons
357
+ FROM public.routines r
358
+ JOIN public.workflows w
359
+ ON w.tenant_id = r.tenant_id
360
+ AND w.slug = 'routine-' || r.id::text
361
+ WHERE r.engine = 'step_functions'
362
+ )
363
+ INSERT INTO public.workflow_triggers (
364
+ tenant_id,
365
+ workflow_id,
366
+ workflow_version_id,
367
+ trigger_family,
368
+ source_system,
369
+ enabled,
370
+ idempotency_required,
371
+ trigger_config,
372
+ actor_contract,
373
+ readiness_state,
374
+ readiness_reasons,
375
+ created_at,
376
+ updated_at
377
+ )
378
+ SELECT
379
+ rw.tenant_id,
380
+ rw.workflow_id,
381
+ rw.workflow_version_id,
382
+ 'manual',
383
+ 'routine',
384
+ (rw.readiness_state = 'ready'),
385
+ false,
386
+ jsonb_build_object('routineId', rw.id),
387
+ jsonb_build_object('agentVisible', rw.visibility = 'tenant_shared'),
388
+ rw.readiness_state,
389
+ rw.readiness_reasons,
390
+ now(),
391
+ now()
392
+ FROM routine_workflows rw
393
+ WHERE NOT EXISTS (
394
+ SELECT 1
395
+ FROM public.workflow_triggers wt
396
+ WHERE wt.workflow_id = rw.workflow_id
397
+ AND wt.trigger_family = 'manual'
398
+ );
399
+
400
+ WITH scheduled_routine_workflows AS (
401
+ SELECT
402
+ r.*,
403
+ w.id AS workflow_id,
404
+ w.current_version_id AS workflow_version_id,
405
+ w.readiness_state,
406
+ w.readiness_reasons
407
+ FROM public.routines r
408
+ JOIN public.workflows w
409
+ ON w.tenant_id = r.tenant_id
410
+ AND w.slug = 'routine-' || r.id::text
411
+ WHERE r.engine = 'step_functions'
412
+ AND EXISTS (
413
+ SELECT 1
414
+ FROM public.scheduled_jobs sj
415
+ WHERE sj.routine_id = r.id
416
+ AND sj.trigger_type IN ('routine_schedule', 'routine_one_time')
417
+ )
418
+ )
419
+ UPDATE public.workflow_triggers wt
420
+ SET
421
+ workflow_version_id = srw.workflow_version_id,
422
+ enabled = (srw.readiness_state = 'ready'),
423
+ trigger_config = jsonb_build_object('routineId', srw.id),
424
+ actor_contract = jsonb_build_object('agentVisible', srw.visibility = 'tenant_shared'),
425
+ readiness_state = srw.readiness_state,
426
+ readiness_reasons = srw.readiness_reasons,
427
+ updated_at = now()
428
+ FROM scheduled_routine_workflows srw
429
+ WHERE wt.workflow_id = srw.workflow_id
430
+ AND wt.trigger_family = 'schedule'
431
+ AND wt.source_system = 'routine';
432
+
433
+ WITH scheduled_routine_workflows AS (
434
+ SELECT
435
+ r.*,
436
+ w.id AS workflow_id,
437
+ w.current_version_id AS workflow_version_id,
438
+ w.readiness_state,
439
+ w.readiness_reasons
440
+ FROM public.routines r
441
+ JOIN public.workflows w
442
+ ON w.tenant_id = r.tenant_id
443
+ AND w.slug = 'routine-' || r.id::text
444
+ WHERE r.engine = 'step_functions'
445
+ AND EXISTS (
446
+ SELECT 1
447
+ FROM public.scheduled_jobs sj
448
+ WHERE sj.routine_id = r.id
449
+ AND sj.trigger_type IN ('routine_schedule', 'routine_one_time')
450
+ )
451
+ )
452
+ INSERT INTO public.workflow_triggers (
453
+ tenant_id,
454
+ workflow_id,
455
+ workflow_version_id,
456
+ trigger_family,
457
+ source_system,
458
+ enabled,
459
+ idempotency_required,
460
+ trigger_config,
461
+ actor_contract,
462
+ readiness_state,
463
+ readiness_reasons,
464
+ created_at,
465
+ updated_at
466
+ )
467
+ SELECT
468
+ srw.tenant_id,
469
+ srw.workflow_id,
470
+ srw.workflow_version_id,
471
+ 'schedule',
472
+ 'routine',
473
+ (srw.readiness_state = 'ready'),
474
+ true,
475
+ jsonb_build_object('routineId', srw.id),
476
+ jsonb_build_object('agentVisible', srw.visibility = 'tenant_shared'),
477
+ srw.readiness_state,
478
+ srw.readiness_reasons,
479
+ now(),
480
+ now()
481
+ FROM scheduled_routine_workflows srw
482
+ WHERE NOT EXISTS (
483
+ SELECT 1
484
+ FROM public.workflow_triggers wt
485
+ WHERE wt.workflow_id = srw.workflow_id
486
+ AND wt.trigger_family = 'schedule'
487
+ );
488
+
489
+ CREATE OR REPLACE VIEW public.view_workflow_backfill_existing_routines_status AS
490
+ SELECT
491
+ (SELECT count(*) FROM public.routines WHERE engine = 'step_functions') AS eligible_step_functions_routines,
492
+ (
493
+ SELECT count(*)
494
+ FROM public.routines r
495
+ JOIN public.workflow_engine_bindings b
496
+ ON b.tenant_id = r.tenant_id
497
+ AND b.routine_id = r.id
498
+ AND b.binding_type = 'step_functions_routine'
499
+ WHERE r.engine = 'step_functions'
500
+ ) AS backfilled_step_functions_bindings,
501
+ (
502
+ SELECT count(*)
503
+ FROM public.routines r
504
+ LEFT JOIN public.workflow_engine_bindings b
505
+ ON b.tenant_id = r.tenant_id
506
+ AND b.routine_id = r.id
507
+ AND b.binding_type = 'step_functions_routine'
508
+ WHERE r.engine = 'step_functions'
509
+ AND b.id IS NULL
510
+ ) AS missing_step_functions_bindings,
511
+ (SELECT count(*) FROM public.routines WHERE engine = 'legacy_python') AS skipped_legacy_python_routines,
512
+ (
513
+ SELECT count(*)
514
+ FROM public.scheduled_jobs sj
515
+ JOIN public.routines r
516
+ ON r.id = sj.routine_id
517
+ LEFT JOIN public.workflow_engine_bindings b
518
+ ON b.tenant_id = r.tenant_id
519
+ AND b.routine_id = r.id
520
+ AND b.binding_type = 'step_functions_routine'
521
+ WHERE r.engine = 'step_functions'
522
+ AND sj.trigger_type IN ('routine_schedule', 'routine_one_time')
523
+ AND sj.enabled = true
524
+ AND (b.workflow_version_id IS NULL OR b.routine_asl_version_id IS NULL)
525
+ ) AS enabled_scheduled_routines_without_version_pin;
@@ -0,0 +1,21 @@
1
+ -- Tenant-level default token budget for composer-launched Pi goal mode.
2
+ -- Plan: docs/plans/2026-06-18-001-feat-pi-goal-composer-mode-plan.md (U7).
3
+ --
4
+ -- creates-column: public.tenant_settings.goal_default_token_budget
5
+ -- creates-constraint: public.tenant_settings.tenant_settings_goal_default_token_budget_check
6
+
7
+ ALTER TABLE public.tenant_settings
8
+ ADD COLUMN IF NOT EXISTS goal_default_token_budget integer;
9
+
10
+ ALTER TABLE public.tenant_settings
11
+ DROP CONSTRAINT IF EXISTS tenant_settings_goal_default_token_budget_check;
12
+
13
+ ALTER TABLE public.tenant_settings
14
+ ADD CONSTRAINT tenant_settings_goal_default_token_budget_check
15
+ CHECK (
16
+ goal_default_token_budget IS NULL
17
+ OR (
18
+ goal_default_token_budget > 0
19
+ AND goal_default_token_budget <= 2000000
20
+ )
21
+ );
@@ -0,0 +1,89 @@
1
+ -- Skill Creator draft lifecycle schema.
2
+ -- Plan: docs/plans/2026-06-21-003-feat-skill-creator-system-plan.md (U1).
3
+ -- Apply manually (no CI migration runner):
4
+ -- psql "$DATABASE_URL" -v ON_ERROR_STOP=1 -f packages/database-pg/drizzle/0180_skill_drafts.sql
5
+ --
6
+ -- Pre-flight:
7
+ -- SELECT to_regclass('public.tenants') AS tenants;
8
+ -- SELECT to_regclass('public.users') AS users;
9
+ -- SELECT to_regclass('public.threads') AS threads;
10
+ -- SELECT to_regclass('public.messages') AS messages;
11
+ --
12
+ -- creates: public.skill_drafts
13
+ -- creates: public.skill_draft_events
14
+ -- creates: public.idx_skill_drafts_tenant_status_updated
15
+ -- creates: public.idx_skill_drafts_tenant_requester
16
+ -- creates: public.uq_skill_drafts_tenant_id
17
+ -- creates: public.idx_skill_draft_events_draft_created
18
+ -- creates: public.idx_skill_draft_events_tenant_type
19
+ -- creates-constraint: public.skill_drafts.skill_drafts_status_check
20
+ -- creates-constraint: public.skill_drafts.skill_drafts_source_kind_check
21
+ -- creates-constraint: public.skill_draft_events.skill_draft_events_type_check
22
+
23
+ DO $$
24
+ BEGIN
25
+ IF to_regclass('public.tenants') IS NULL THEN
26
+ RAISE EXCEPTION 'tenants not found; apply core tenant migrations first';
27
+ END IF;
28
+ IF to_regclass('public.users') IS NULL THEN
29
+ RAISE EXCEPTION 'users not found; apply core user migrations first';
30
+ END IF;
31
+ IF to_regclass('public.threads') IS NULL THEN
32
+ RAISE EXCEPTION 'threads not found; apply thread migrations first';
33
+ END IF;
34
+ IF to_regclass('public.messages') IS NULL THEN
35
+ RAISE EXCEPTION 'messages not found; apply message migrations first';
36
+ END IF;
37
+ END $$;
38
+
39
+ CREATE TABLE IF NOT EXISTS public.skill_drafts (
40
+ id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
41
+ tenant_id uuid NOT NULL REFERENCES public.tenants(id) ON DELETE CASCADE,
42
+ requested_by_user_id uuid NOT NULL REFERENCES public.users(id),
43
+ source_thread_id uuid REFERENCES public.threads(id) ON DELETE SET NULL,
44
+ source_message_id uuid REFERENCES public.messages(id) ON DELETE SET NULL,
45
+ inbox_item_id uuid,
46
+ slug text NOT NULL,
47
+ title text NOT NULL,
48
+ display_name text,
49
+ summary text,
50
+ source_kind text NOT NULL DEFAULT 'thread',
51
+ status text NOT NULL DEFAULT 'draft',
52
+ current_content_hash text,
53
+ draft_s3_prefix text NOT NULL,
54
+ failure_message text,
55
+ rejected_by_user_id uuid REFERENCES public.users(id) ON DELETE SET NULL,
56
+ rejected_at timestamp with time zone,
57
+ published_catalog_slug text,
58
+ published_content_hash text,
59
+ metadata jsonb NOT NULL DEFAULT '{}'::jsonb,
60
+ created_at timestamp with time zone NOT NULL DEFAULT now(),
61
+ updated_at timestamp with time zone NOT NULL DEFAULT now(),
62
+ submitted_at timestamp with time zone,
63
+ CONSTRAINT skill_drafts_status_check CHECK (status IN ('draft','submitted','rejected','failed')),
64
+ CONSTRAINT skill_drafts_source_kind_check CHECK (source_kind IN ('thread','archive','manual','existing_skill'))
65
+ );
66
+
67
+ CREATE INDEX IF NOT EXISTS idx_skill_drafts_tenant_status_updated
68
+ ON public.skill_drafts (tenant_id, status, updated_at);
69
+ CREATE INDEX IF NOT EXISTS idx_skill_drafts_tenant_requester
70
+ ON public.skill_drafts (tenant_id, requested_by_user_id, updated_at);
71
+ CREATE UNIQUE INDEX IF NOT EXISTS uq_skill_drafts_tenant_id
72
+ ON public.skill_drafts (tenant_id, id);
73
+
74
+ CREATE TABLE IF NOT EXISTS public.skill_draft_events (
75
+ id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
76
+ tenant_id uuid NOT NULL REFERENCES public.tenants(id) ON DELETE CASCADE,
77
+ draft_id uuid NOT NULL REFERENCES public.skill_drafts(id) ON DELETE CASCADE,
78
+ actor_user_id uuid REFERENCES public.users(id) ON DELETE SET NULL,
79
+ event_type text NOT NULL,
80
+ message text,
81
+ payload jsonb NOT NULL DEFAULT '{}'::jsonb,
82
+ created_at timestamp with time zone NOT NULL DEFAULT now(),
83
+ CONSTRAINT skill_draft_events_type_check CHECK (event_type IN ('created','updated','submitted','rejected','failed'))
84
+ );
85
+
86
+ CREATE INDEX IF NOT EXISTS idx_skill_draft_events_draft_created
87
+ ON public.skill_draft_events (draft_id, created_at);
88
+ CREATE INDEX IF NOT EXISTS idx_skill_draft_events_tenant_type
89
+ ON public.skill_draft_events (tenant_id, event_type);
@@ -0,0 +1,21 @@
1
+ -- Skill Creator publish lifecycle status.
2
+ -- Plan: docs/plans/2026-06-21-003-feat-skill-creator-system-plan.md (U5).
3
+ -- Apply manually (no CI migration runner):
4
+ -- psql "$DATABASE_URL" -v ON_ERROR_STOP=1 -f packages/database-pg/drizzle/0181_skill_draft_publish_status.sql
5
+ --
6
+ -- creates-constraint: public.skill_drafts.skill_drafts_status_check
7
+ -- creates-constraint: public.skill_draft_events.skill_draft_events_type_check
8
+
9
+ ALTER TABLE public.skill_drafts
10
+ DROP CONSTRAINT IF EXISTS skill_drafts_status_check;
11
+
12
+ ALTER TABLE public.skill_drafts
13
+ ADD CONSTRAINT skill_drafts_status_check
14
+ CHECK (status IN ('draft','submitted','rejected','failed','published'));
15
+
16
+ ALTER TABLE public.skill_draft_events
17
+ DROP CONSTRAINT IF EXISTS skill_draft_events_type_check;
18
+
19
+ ALTER TABLE public.skill_draft_events
20
+ ADD CONSTRAINT skill_draft_events_type_check
21
+ CHECK (event_type IN ('created','updated','submitted','rejected','failed','published'));