thinkwork-cli 0.12.11 → 0.12.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (474) hide show
  1. package/README.md +42 -38
  2. package/dist/{api-client-ASJWIG3Z.js → api-client-4VT3FWOH.js} +1 -1
  3. package/dist/{chunk-JEHV35EU.js → chunk-H7AB42ES.js} +340 -30
  4. package/dist/cli.js +22157 -9229
  5. package/dist/commands/enterprise/templates/deploy-repo/.github/workflows/deploy.yml +17 -6
  6. package/dist/commands/enterprise/templates/deploy-repo/docs/runbook.md +81 -9
  7. package/dist/commands/enterprise/templates/deploy-repo/scripts/apply-release.mjs +183 -21
  8. package/dist/commands/enterprise/templates/deploy-repo/scripts/smoke.mjs +1 -2
  9. package/dist/commands/enterprise/templates/deploy-repo/terraform/main.tf +286 -0
  10. package/dist/drizzle/0000_petite_marvel_apes.sql +1188 -0
  11. package/dist/drizzle/0001_milky_surge.sql +103 -0
  12. package/dist/drizzle/0002_aberrant_mattie_franklin.sql +41 -0
  13. package/dist/drizzle/0003_exotic_ogun.sql +3 -0
  14. package/dist/drizzle/0004_glamorous_magneto.sql +2 -0
  15. package/dist/drizzle/0005_ancient_nocturne.sql +2 -0
  16. package/dist/drizzle/0006_new_colonel_america.sql +2 -0
  17. package/dist/drizzle/0007_unique_external_task_id.sql +31 -0
  18. package/dist/drizzle/0008_external_task_id_column.sql +43 -0
  19. package/dist/drizzle/0009_evaluations.sql +64 -0
  20. package/dist/drizzle/0010_eval_agent_template.sql +2 -0
  21. package/dist/drizzle/0011_eval_run_template.sql +2 -0
  22. package/dist/drizzle/0012_eval_seed_unique.sql +16 -0
  23. package/dist/drizzle/0013_motionless_white_queen.sql +140 -0
  24. package/dist/drizzle/0014_wiki_aggregation.sql +11 -0
  25. package/dist/drizzle/0015_pg_trgm_alias_title_indexes.sql +9 -0
  26. package/dist/drizzle/0016_wiki_schema_drops.sql +24 -0
  27. package/dist/drizzle/0017_wiki_places.sql +46 -0
  28. package/dist/drizzle/0018_agent_workspace_overlay.sql +26 -0
  29. package/dist/drizzle/0018_cool_firebird.sql +24 -0
  30. package/dist/drizzle/0018_skill_runs.sql +84 -0
  31. package/dist/drizzle/0019_condemned_dragon_man.sql +95 -0
  32. package/dist/drizzle/0019_webhook_skill_runs.sql +58 -0
  33. package/dist/drizzle/0020_crazy_the_anarchist.sql +9 -0
  34. package/dist/drizzle/0020_mutation_idempotency.sql +64 -0
  35. package/dist/drizzle/0021_crm_work_links.sql +76 -0
  36. package/dist/drizzle/0021_skill_runs_completion_hmac.sql +33 -0
  37. package/dist/drizzle/0022_add_billing_tables.sql +70 -0
  38. package/dist/drizzle/0022_seed_thinkwork_admin_permissions.sql +160 -0
  39. package/dist/drizzle/0022_stripe_billing_indexes.sql +48 -0
  40. package/dist/drizzle/0023_tenants_deactivation.sql +27 -0
  41. package/dist/drizzle/0024_tenant_mcp_admin_keys.sql +63 -0
  42. package/dist/drizzle/0025_v1_agent_architecture.sql +182 -0
  43. package/dist/drizzle/0026_thread_turns_add_kind.sql +28 -0
  44. package/dist/drizzle/0027_capability_catalog_and_manifests.sql +219 -0
  45. package/dist/drizzle/0028_aws_s3_extension.sql +26 -0
  46. package/dist/drizzle/0029_collapse_execution_types.sql +42 -0
  47. package/dist/drizzle/0030_retire_composition_primitives.sql +48 -0
  48. package/dist/drizzle/0031_thread_cleanup_drops.sql +131 -0
  49. package/dist/drizzle/0032_add_browser_automation_template_config.sql +24 -0
  50. package/dist/drizzle/0033_agent_operation_leases.sql +32 -0
  51. package/dist/drizzle/0034_agent_workspace_events.sql +116 -0
  52. package/dist/drizzle/0035_workspace_review_decisions.sql +19 -0
  53. package/dist/drizzle/0036_user_scoped_memory_wiki.sql +152 -0
  54. package/dist/drizzle/0037_user_profile_operating_model.sql +34 -0
  55. package/dist/drizzle/0042_agent_runtime_selector.sql +41 -0
  56. package/dist/drizzle/0043_wiki_search_tsv_tokenization.sql +48 -0
  57. package/dist/drizzle/0044_add_web_search_template_config.sql +7 -0
  58. package/dist/drizzle/0045_add_send_email_template_config.sql +7 -0
  59. package/dist/drizzle/0046_tenant_mcp_context_tools.sql +26 -0
  60. package/dist/drizzle/0047_add_context_engine_template_config.sql +7 -0
  61. package/dist/drizzle/0048_tenant_context_provider_settings.sql +22 -0
  62. package/dist/drizzle/0050_brain_v0_entity_subtype.sql +29 -0
  63. package/dist/drizzle/0051_brain_v0_tenant_entity_pages.sql +170 -0
  64. package/dist/drizzle/0052_brain_v0_external_refs.sql +41 -0
  65. package/dist/drizzle/0053_brain_v0_unresolved_mentions_subtype.sql +48 -0
  66. package/dist/drizzle/0054_wiki_compile_jobs_input.sql +28 -0
  67. package/dist/drizzle/0055_routines_stepfunctions_substrate.sql +202 -0
  68. package/dist/drizzle/0056_routine_step_events_dedup_idx.sql +25 -0
  69. package/dist/drizzle/0057_archive_legacy_python_routines.sql +36 -0
  70. package/dist/drizzle/0058_routines_visibility_and_owning_agent.sql +61 -0
  71. package/dist/drizzle/0061_routine_execution_asl_version_id.sql +29 -0
  72. package/dist/drizzle/0062_migrate_pi_to_flue.sql +110 -0
  73. package/dist/drizzle/0063_threads_session_data.sql +23 -0
  74. package/dist/drizzle/0064_tenant_credentials.sql +65 -0
  75. package/dist/drizzle/0067_thinkwork_computers_phase_one.sql +174 -0
  76. package/dist/drizzle/0068_drop_system_workflows_and_activation.sql +115 -0
  77. package/dist/drizzle/0069_compliance_schema.sql +364 -0
  78. package/dist/drizzle/0070_compliance_aurora_roles.sql +171 -0
  79. package/dist/drizzle/0072_threads_computer_ownership.sql +24 -0
  80. package/dist/drizzle/0073_compliance_tenant_anchor_state.sql +105 -0
  81. package/dist/drizzle/0074_compliance_event_hash_index.sql +49 -0
  82. package/dist/drizzle/0075_scheduled_jobs_computer_ownership.sql +27 -0
  83. package/dist/drizzle/0076_scheduled_jobs_marco_backfill.sql +69 -0
  84. package/dist/drizzle/0077_computers_primary_agent_id.sql +38 -0
  85. package/dist/drizzle/0078_tenant_customize_catalog.sql +46 -0
  86. package/dist/drizzle/0079_seed_tenant_customize_catalog.sql +53 -0
  87. package/dist/drizzle/0081_routines_catalog_slug.sql +42 -0
  88. package/dist/drizzle/0082_messages_parts_jsonb.sql +52 -0
  89. package/dist/drizzle/0083_computer_runbooks.sql +103 -0
  90. package/dist/drizzle/0084_artifacts_favorited_at.sql +32 -0
  91. package/dist/drizzle/0085_seed_thinkwork_computer_default_template.sql +46 -0
  92. package/dist/drizzle/0086_update_default_template_models.sql +19 -0
  93. package/dist/drizzle/0087_retire_oss_connectors.sql +77 -0
  94. package/dist/drizzle/0088_compliance_event_types_finance_pilot.sql +37 -0
  95. package/dist/drizzle/0089_remove_maniflow_eval_seeds.sql +81 -0
  96. package/dist/drizzle/0089_wiki_schema_extraction.sql +315 -0
  97. package/dist/drizzle/0090_brain_schema_extraction.sql +274 -0
  98. package/dist/drizzle/0091_drop_wiki_brain_compat_views.sql +118 -0
  99. package/dist/drizzle/0092_finish_oss_connector_retirement.sql +97 -0
  100. package/dist/drizzle/0093_eval_runs_scheduled_job_id.sql +23 -0
  101. package/dist/drizzle/0094_slack_workspace_app.sql +140 -0
  102. package/dist/drizzle/0095_eval_runs_computer_id.sql +22 -0
  103. package/dist/drizzle/0096_true_redteam_eval_seed_cleanup.sql +67 -0
  104. package/dist/drizzle/0097_shared_computers.sql +191 -0
  105. package/dist/drizzle/0098_business_ontology.sql +587 -0
  106. package/dist/drizzle/0099_thread_idle_learning.sql +145 -0
  107. package/dist/drizzle/0100_ontology_gated_brain_dynamic_subtypes.sql +7 -0
  108. package/dist/drizzle/0101_ontology_gated_unresolved_mentions_dynamic_subtypes.sql +7 -0
  109. package/dist/drizzle/0102_wiki_brain_owner_repair.sql +87 -0
  110. package/dist/drizzle/0103_brain_section_source_trigger_repair.sql +75 -0
  111. package/dist/drizzle/0104_expand_seed_ontology_for_user_memory.sql +166 -0
  112. package/dist/drizzle/0105_spaces_domain.sql +349 -0
  113. package/dist/drizzle/0106_expand_seed_ontology_for_triples.sql +173 -0
  114. package/dist/drizzle/0106_space_threads_participants.sql +197 -0
  115. package/dist/drizzle/0107_linked_task_mirror.sql +245 -0
  116. package/dist/drizzle/0108_message_mentions.sql +95 -0
  117. package/dist/drizzle/0109_space_owned_threads.sql +217 -0
  118. package/dist/drizzle/0110_thread_participant_read_state.sql +21 -0
  119. package/dist/drizzle/0111_agents_tenant_name_unique.sql +38 -0
  120. package/dist/drizzle/0112_recast_spaces_as_contextual_workrooms.sql +138 -0
  121. package/dist/drizzle/0113_agents_own_runtime_fields.sql +48 -0
  122. package/dist/drizzle/0114_migrate_templates_to_agents_and_spaces.sql +361 -0
  123. package/dist/drizzle/0115_remove_computer_eval_template_dependencies.sql +69 -0
  124. package/dist/drizzle/0116_backfill_thread_participants_access.sql +126 -0
  125. package/dist/drizzle/0117_space_access_mode.sql +40 -0
  126. package/dist/drizzle/0118_normalize_tenant_member_principal_type.sql +41 -0
  127. package/dist/drizzle/0119_space_knowledge_bases.sql +126 -0
  128. package/dist/drizzle/0120_space_automations.sql +58 -0
  129. package/dist/drizzle/0121_drop_computer_runbooks.sql +26 -0
  130. package/dist/drizzle/0122_space_email_triggers.sql +24 -0
  131. package/dist/drizzle/0123_single_platform_agent_and_overrides.sql +58 -0
  132. package/dist/drizzle/0124_thread_turns_finalized_at.sql +17 -0
  133. package/dist/drizzle/0125_drop_space_agent_assignments.sql +42 -0
  134. package/dist/drizzle/0126_migrate_flue_to_pi.sql +42 -0
  135. package/dist/drizzle/0127_runtime_type_observability.sql +28 -0
  136. package/dist/drizzle/0128_drop_eval_test_cases_agent_id.sql +37 -0
  137. package/dist/drizzle/0129_drop_code_factory_tables.sql +43 -0
  138. package/dist/drizzle/0129_eval_results_system_prompt.sql +30 -0
  139. package/dist/drizzle/0130_drop_teams_and_team_id_columns.sql +54 -0
  140. package/dist/drizzle/0131_drop_skill_catalog_and_tenant_skills.sql +33 -0
  141. package/dist/drizzle/0132_drop_computer_tables.sql +31 -0
  142. package/dist/drizzle/0133_drop_seed_view_tombstones.sql +79 -0
  143. package/dist/drizzle/0133_thread_turns_system_prompt.sql +22 -0
  144. package/dist/drizzle/0134_drop_dead_agent_runtime_tables.sql +53 -0
  145. package/dist/drizzle/0135_native_checklist_linked_tasks.sql +48 -0
  146. package/dist/drizzle/0136_goal_ledger.sql +55 -0
  147. package/dist/drizzle/0136_space_email_trigger_status.sql +66 -0
  148. package/dist/drizzle/0137_thread_participant_pins.sql +25 -0
  149. package/dist/drizzle/0138_users_cognito_sub.sql +30 -0
  150. package/dist/drizzle/0139_mobile_turn_client_id.sql +23 -0
  151. package/dist/drizzle/0140_workspace_folder_names.sql +36 -0
  152. package/dist/drizzle/0141_eval_runs_desktop_pi_provenance.sql +31 -0
  153. package/dist/drizzle/0142_pi_only_agent_runtime.sql +61 -0
  154. package/dist/drizzle/0143_add_web_extract_builtin_config.sql +28 -0
  155. package/dist/drizzle/0144_skill_catalog_index.sql +40 -0
  156. package/dist/drizzle/0145_knowledge_graph_thread_ingest.sql +512 -0
  157. package/dist/drizzle/0146_knowledge_graph_source_scope.sql +413 -0
  158. package/dist/drizzle/0147_knowledge_graph_scope_trigger_qualification.sql +211 -0
  159. package/dist/drizzle/0148_user_cost_attribution.sql +171 -0
  160. package/dist/drizzle/0149_managed_mcp_servers.sql +64 -0
  161. package/dist/drizzle/0149_user_model_approvals.sql +89 -0
  162. package/dist/drizzle/0150_bootstrap_first_admin_claim.sql +11 -0
  163. package/dist/drizzle/0151_managed_deployments.sql +91 -0
  164. package/dist/drizzle/0152_agent_profiles.sql +81 -0
  165. package/dist/drizzle/0153_message_mentions_agent_profile.sql +9 -0
  166. package/dist/drizzle/0154_customer_deployment_sessions.sql +61 -0
  167. package/dist/drizzle/0155_tenant_model_catalog.sql +152 -0
  168. package/dist/drizzle/0156_bootstrap_credential_leases.sql +52 -0
  169. package/dist/drizzle/0157_knowledge_graph_observations_source.sql +79 -0
  170. package/dist/drizzle/0158_pending_user_questions.sql +80 -0
  171. package/dist/drizzle/0158_wiki_tenant_scope.sql +38 -0
  172. package/dist/drizzle/0159_agent_profiles_space_local.sql +49 -0
  173. package/dist/drizzle/0159_application_plugins.sql +193 -0
  174. package/dist/drizzle/0159_eval_scoring_version.sql +46 -0
  175. package/dist/drizzle/0160_compliance_event_types_plugins.sql +37 -0
  176. package/dist/drizzle/0160_eval_datasets.sql +75 -0
  177. package/dist/drizzle/0160_eval_results_thread_turn.sql +35 -0
  178. package/dist/drizzle/0161_eval_run_pinning.sql +54 -0
  179. package/dist/drizzle/0161_tenant_mcp_servers_plugin_source.sql +62 -0
  180. package/dist/drizzle/0162_eval_result_override.sql +49 -0
  181. package/dist/drizzle/0163_eval_replay_tool_allowlist.sql +50 -0
  182. package/dist/drizzle/0164_eval_replay_tool_override_mode.sql +52 -0
  183. package/dist/drizzle/0165_plugin_premium_entitlements.sql +153 -0
  184. package/dist/drizzle/0166_company_brain_substrate_contract.sql +386 -0
  185. package/dist/drizzle/0167_company_brain_artifact_manifest_runtime.sql +85 -0
  186. package/dist/drizzle/0168_eval_skill_gate.sql +44 -0
  187. package/dist/drizzle/0169_release_update_jobs.sql +67 -0
  188. package/dist/drizzle/0170_email_channel_plugin.sql +291 -0
  189. package/dist/drizzle/0171_linked_task_external_providers.sql +30 -0
  190. package/dist/drizzle/0172_email_channel_sendgrid_provider.sql +8 -0
  191. package/dist/drizzle/0173_auth_provider_resources.sql +83 -0
  192. package/dist/drizzle/0174_workos_auth_bridges.sql +37 -0
  193. package/dist/drizzle/0175_workos_auth_sessions.sql +38 -0
  194. package/dist/drizzle/0176_n8n_agent_step_runs.sql +107 -0
  195. package/dist/drizzle/0177_workflow_control_plane.sql +281 -0
  196. package/dist/drizzle/0178_workflow_backfill_existing_routines.sql +525 -0
  197. package/dist/drizzle/0179_tenant_goal_budget_settings.sql +21 -0
  198. package/dist/drizzle/0180_skill_drafts.sql +89 -0
  199. package/dist/drizzle/0181_skill_draft_publish_status.sql +21 -0
  200. package/dist/drizzle/0182_agent_loops.sql +260 -0
  201. package/dist/drizzle/0183_okf_artifact_manifests.sql +52 -0
  202. package/dist/drizzle/0184_skill_catalog_trust_cache.sql +35 -0
  203. package/dist/drizzle/0185_agent_loop_space.sql +16 -0
  204. package/dist/drizzle/0186_tenant_mcp_runtime_metadata.sql +10 -0
  205. package/dist/drizzle/0187_native_work_items.sql +220 -0
  206. package/dist/drizzle/0188_company_etl_plugin_rename.sql +99 -0
  207. package/dist/drizzle/0189_trace_cost_substrate.sql +247 -0
  208. package/dist/drizzle/0190_billing_export_reconciliation.sql +101 -0
  209. package/dist/drizzle/0191_open_engine_work_item_queue.sql +66 -0
  210. package/dist/drizzle/0192_work_item_labels.sql +44 -0
  211. package/dist/drizzle/0193_work_item_documents.sql +31 -0
  212. package/dist/drizzle/0194_memory_retain_attempts.sql +103 -0
  213. package/dist/drizzle/0194_work_item_comments.sql +35 -0
  214. package/dist/drizzle/0195_plugin_app_overlays.sql +45 -0
  215. package/dist/drizzle/0196_pi_extensions.sql +118 -0
  216. package/dist/drizzle/0197_eval_profiles.sql +150 -0
  217. package/dist/drizzle/0198_eval_runs_unstable.sql +27 -0
  218. package/dist/drizzle/0199_eval_runs_cost_partial.sql +27 -0
  219. package/dist/drizzle/meta/_journal.json +160 -0
  220. package/dist/plugins/README.md +162 -0
  221. package/dist/plugins/catalog/package.json +40 -0
  222. package/dist/plugins/catalog/scripts/build-catalog.ts +120 -0
  223. package/dist/plugins/catalog/scripts/generate-plugin-registry.ts +144 -0
  224. package/dist/plugins/catalog/src/__tests__/build-catalog.test.ts +86 -0
  225. package/dist/plugins/catalog/src/__tests__/catalog.test.ts +308 -0
  226. package/dist/plugins/catalog/src/__tests__/contracts.test.ts +861 -0
  227. package/dist/plugins/catalog/src/__tests__/plugin-package.test.ts +124 -0
  228. package/dist/plugins/catalog/src/__tests__/plugin-registry.test.ts +120 -0
  229. package/dist/plugins/catalog/src/catalog.ts +434 -0
  230. package/dist/plugins/catalog/src/contracts.ts +1498 -0
  231. package/dist/plugins/catalog/src/index.ts +4 -0
  232. package/dist/plugins/catalog/src/plugin-package.ts +171 -0
  233. package/dist/plugins/catalog/src/registry/generated-first-party.ts +76 -0
  234. package/dist/plugins/catalog/src/registry/index.ts +1 -0
  235. package/dist/plugins/catalog/tsconfig.json +8 -0
  236. package/dist/plugins/company-brain/README.md +37 -0
  237. package/dist/plugins/company-brain/package.json +33 -0
  238. package/dist/plugins/company-brain/runtime/cognee/Dockerfile +11 -0
  239. package/dist/plugins/company-brain/smoke/cognee-managed-app-smoke.mjs +458 -0
  240. package/dist/plugins/company-brain/smoke/cognee-memory-cutover-smoke.mjs +539 -0
  241. package/dist/plugins/company-brain/smoke/company-brain-context-engine-smoke.mjs +312 -0
  242. package/dist/plugins/company-brain/smoke/company-brain-operations-smoke.mjs +449 -0
  243. package/dist/plugins/company-brain/smoke/company-brain-plugin-smoke.mjs +655 -0
  244. package/dist/plugins/company-brain/smoke/hindsight-memory-isolation-smoke.mjs +474 -0
  245. package/dist/plugins/company-brain/src/api/cognee-client.ts +896 -0
  246. package/dist/plugins/company-brain/src/api/cognee-cluster-identity.ts +49 -0
  247. package/dist/plugins/company-brain/src/api/cognee-memory-scope.ts +84 -0
  248. package/dist/plugins/company-brain/src/api/context-engine-provider.ts +888 -0
  249. package/dist/plugins/company-brain/src/api/migration.ts +665 -0
  250. package/dist/plugins/company-brain/src/deployment/cognee-managed-app.ts +396 -0
  251. package/dist/plugins/company-brain/src/index.ts +62 -0
  252. package/dist/plugins/company-brain/src/manifest.ts +112 -0
  253. package/dist/plugins/company-brain/terraform/cognee/README.md +263 -0
  254. package/dist/plugins/company-brain/terraform/cognee/main.tf +766 -0
  255. package/dist/plugins/company-brain/terraform/cognee/outputs.tf +144 -0
  256. package/dist/plugins/company-brain/terraform/cognee/variables.tf +402 -0
  257. package/dist/plugins/company-brain/test/api/cognee-client.test.ts +562 -0
  258. package/dist/plugins/company-brain/test/api/cognee-memory-scope.test.ts +74 -0
  259. package/dist/plugins/company-brain/test/api/context-engine-provider.test.ts +447 -0
  260. package/dist/plugins/company-brain/test/api/migration.test.ts +465 -0
  261. package/dist/plugins/company-brain/test/manifest.test.ts +95 -0
  262. package/dist/plugins/company-brain/tsconfig.json +8 -0
  263. package/dist/plugins/company-data/README.md +49 -0
  264. package/dist/plugins/company-data/package.json +21 -0
  265. package/dist/plugins/company-data/src/index.ts +30 -0
  266. package/dist/plugins/company-data/src/manifest.ts +26 -0
  267. package/dist/plugins/company-data/test/manifest.test.ts +116 -0
  268. package/dist/plugins/company-data/tsconfig.json +8 -0
  269. package/dist/plugins/company-etl/README.md +46 -0
  270. package/dist/plugins/company-etl/package.json +21 -0
  271. package/dist/plugins/company-etl/src/index.ts +29 -0
  272. package/dist/plugins/company-etl/src/manifest.ts +26 -0
  273. package/dist/plugins/company-etl/test/manifest.test.ts +108 -0
  274. package/dist/plugins/company-etl/tsconfig.json +8 -0
  275. package/dist/plugins/email-channel/README.md +41 -0
  276. package/dist/plugins/email-channel/package.json +22 -0
  277. package/dist/plugins/email-channel/src/index.ts +36 -0
  278. package/dist/plugins/email-channel/src/manifest.ts +44 -0
  279. package/dist/plugins/email-channel/src/provider-contract.ts +36 -0
  280. package/dist/plugins/email-channel/test/manifest.test.ts +119 -0
  281. package/dist/plugins/email-channel/tsconfig.json +8 -0
  282. package/dist/plugins/lastmile/README.md +50 -0
  283. package/dist/plugins/lastmile/package.json +23 -0
  284. package/dist/plugins/lastmile/smoke/lastmile-plugin-smoke.mjs +661 -0
  285. package/dist/plugins/lastmile/src/api/tasks-adapter.ts +572 -0
  286. package/dist/plugins/lastmile/src/discovery.fixture.ts +64 -0
  287. package/dist/plugins/lastmile/src/index.ts +46 -0
  288. package/dist/plugins/lastmile/src/manifest.ts +139 -0
  289. package/dist/plugins/lastmile/test/api/tasks-adapter.test.ts +266 -0
  290. package/dist/plugins/lastmile/test/discovery.test.ts +88 -0
  291. package/dist/plugins/lastmile/tsconfig.json +8 -0
  292. package/dist/plugins/n8n/README.md +201 -0
  293. package/dist/plugins/n8n/n8n-app/README.md +33 -0
  294. package/dist/plugins/n8n/n8n-app/package.json +23 -0
  295. package/dist/plugins/n8n/n8n-app/src/application-config.ts +45 -0
  296. package/dist/plugins/n8n/n8n-app/src/front-components/thinkwork-workflows.front-component.tsx +970 -0
  297. package/dist/plugins/n8n/n8n-app/src/lib/n8n-app-data.ts +190 -0
  298. package/dist/plugins/n8n/n8n-app/src/vite-env.d.ts +7 -0
  299. package/dist/plugins/n8n/n8n-app/tsconfig.json +15 -0
  300. package/dist/plugins/n8n/package.json +35 -0
  301. package/dist/plugins/n8n/runtime/Dockerfile +18 -0
  302. package/dist/plugins/n8n/runtime/n8n-task-runners.json +14 -0
  303. package/dist/plugins/n8n/runtime/n8n-task-runners.json.template +14 -0
  304. package/dist/plugins/n8n/runtime/package-lock.json +13 -0
  305. package/dist/plugins/n8n/runtime/package.json +7 -0
  306. package/dist/plugins/n8n/scripts/sync-thinkwork-app.mjs +268 -0
  307. package/dist/plugins/n8n/smoke/README.md +95 -0
  308. package/dist/plugins/n8n/smoke/n8n-agent-step-bridge-smoke.mjs +866 -0
  309. package/dist/plugins/n8n/smoke/n8n-integrated-app-smoke.mjs +262 -0
  310. package/dist/plugins/n8n/smoke/n8n-managed-app-smoke.mjs +409 -0
  311. package/dist/plugins/n8n/smoke/n8n-mcp-smoke.mjs +624 -0
  312. package/dist/plugins/n8n/src/deployment/image-build.ts +172 -0
  313. package/dist/plugins/n8n/src/deployment/managed-app.ts +429 -0
  314. package/dist/plugins/n8n/src/index.ts +79 -0
  315. package/dist/plugins/n8n/src/manifest.ts +403 -0
  316. package/dist/plugins/n8n/src/package-config.ts +186 -0
  317. package/dist/plugins/n8n/src/skills/n8n-workflow-operator/SKILL.md +76 -0
  318. package/dist/plugins/n8n/src/skills/n8n-workflow-operator/references/mcp-tooling.md +40 -0
  319. package/dist/plugins/n8n/src/skills/n8n-workflow-operator/references/validation-and-handoff.md +40 -0
  320. package/dist/plugins/n8n/src/skills/n8n-workflow-operator/references/workflow-authoring.md +45 -0
  321. package/dist/plugins/n8n/terraform/n8n/README.md +113 -0
  322. package/dist/plugins/n8n/terraform/n8n/main.tf +918 -0
  323. package/dist/plugins/n8n/terraform/n8n/outputs.tf +124 -0
  324. package/dist/plugins/n8n/terraform/n8n/scripts/sync-database.py +250 -0
  325. package/dist/plugins/n8n/terraform/n8n/scripts/test_sync_database.py +55 -0
  326. package/dist/plugins/n8n/terraform/n8n/variables.tf +354 -0
  327. package/dist/plugins/n8n/test/image-build.test.ts +118 -0
  328. package/dist/plugins/n8n/test/integrated-app-contract.test.ts +353 -0
  329. package/dist/plugins/n8n/test/manifest.test.ts +278 -0
  330. package/dist/plugins/n8n/test/package-config.test.ts +57 -0
  331. package/dist/plugins/n8n/tsconfig.json +8 -0
  332. package/dist/plugins/sendgrid/README.md +30 -0
  333. package/dist/plugins/sendgrid/package.json +22 -0
  334. package/dist/plugins/sendgrid/src/index.ts +36 -0
  335. package/dist/plugins/sendgrid/src/manifest.ts +37 -0
  336. package/dist/plugins/sendgrid/src/provider-contract.ts +14 -0
  337. package/dist/plugins/sendgrid/test/manifest.test.ts +80 -0
  338. package/dist/plugins/sendgrid/tsconfig.json +8 -0
  339. package/dist/plugins/twenty/README.md +78 -0
  340. package/dist/plugins/twenty/package.json +27 -0
  341. package/dist/plugins/twenty/scripts/__tests__/sync-thinkwork-app.test.mjs +67 -0
  342. package/dist/plugins/twenty/scripts/sync-thinkwork-app.mjs +185 -0
  343. package/dist/plugins/twenty/scripts/wire-thinkwork-workflow.mjs +658 -0
  344. package/dist/plugins/twenty/smoke/twenty-managed-app-smoke.mjs +359 -0
  345. package/dist/plugins/twenty/smoke/twenty-mcp-oauth-smoke.mjs +574 -0
  346. package/dist/plugins/twenty/src/api/cutover.ts +209 -0
  347. package/dist/plugins/twenty/src/deployment/managed-app.ts +253 -0
  348. package/dist/plugins/twenty/src/index.ts +55 -0
  349. package/dist/plugins/twenty/src/manifest.ts +259 -0
  350. package/dist/plugins/twenty/terraform/twenty/README.md +97 -0
  351. package/dist/plugins/twenty/terraform/twenty/main.tf +829 -0
  352. package/dist/plugins/twenty/terraform/twenty/outputs.tf +79 -0
  353. package/dist/plugins/twenty/terraform/twenty/variables.tf +268 -0
  354. package/dist/plugins/twenty/test/api/cutover.test.ts +183 -0
  355. package/dist/plugins/twenty/test/manifest.test.ts +463 -0
  356. package/dist/plugins/twenty/tsconfig.json +9 -0
  357. package/dist/plugins/twenty/twenty-app/.nvmrc +1 -0
  358. package/dist/plugins/twenty/twenty-app/README.md +148 -0
  359. package/dist/plugins/twenty/twenty-app/package.json +30 -0
  360. package/dist/plugins/twenty/twenty-app/src/application-config.ts +44 -0
  361. package/dist/plugins/twenty/twenty-app/src/constants/universal-identifiers.ts +18 -0
  362. package/dist/plugins/twenty/twenty-app/src/default-role.ts +24 -0
  363. package/dist/plugins/twenty/twenty-app/src/front-components/thinkwork-settings.front-component.tsx +299 -0
  364. package/dist/plugins/twenty/twenty-app/src/logic-functions/thinkwork-webhook.logic-function.ts +354 -0
  365. package/dist/plugins/twenty/twenty-app/tsconfig.json +14 -0
  366. package/dist/plugins/twenty/twenty-app/yarn.lock +4144 -0
  367. package/dist/plugins/workos-auth/package.json +22 -0
  368. package/dist/plugins/workos-auth/src/index.ts +30 -0
  369. package/dist/plugins/workos-auth/src/manifest.ts +40 -0
  370. package/dist/plugins/workos-auth/src/provider-contract.ts +39 -0
  371. package/dist/plugins/workos-auth/test/manifest.test.ts +94 -0
  372. package/dist/plugins/workos-auth/tsconfig.json +8 -0
  373. package/dist/scripts/bootstrap-workspace.sh +162 -0
  374. package/dist/scripts/post-deploy.sh +290 -0
  375. package/dist/terraform/examples/greenfield/main.tf +903 -75
  376. package/dist/terraform/examples/greenfield/terraform.tfvars.example +67 -8
  377. package/dist/terraform/modules/app/agentcore-code-interpreter/Dockerfile.sandbox-base +2 -2
  378. package/dist/terraform/modules/app/agentcore-code-interpreter/README.md +8 -9
  379. package/dist/terraform/modules/app/agentcore-code-interpreter/sandbox/sitecustomize.py +227 -0
  380. package/dist/terraform/modules/app/agentcore-code-interpreter/sandbox/test_sitecustomize.py +277 -0
  381. package/dist/terraform/modules/app/agentcore-memory/README.md +6 -6
  382. package/dist/terraform/modules/app/agentcore-memory/main.tf +1 -1
  383. package/dist/terraform/modules/app/agentcore-memory/scripts/create_or_find_memory.sh +40 -9
  384. package/dist/terraform/modules/app/agentcore-pi/README.md +61 -0
  385. package/dist/terraform/modules/app/agentcore-pi/main.tf +453 -0
  386. package/dist/terraform/modules/app/agentcore-pi/outputs.tf +38 -0
  387. package/dist/terraform/modules/app/agentcore-pi/variables.tf +145 -0
  388. package/dist/terraform/modules/app/agentcore-platform/main.tf +83 -0
  389. package/dist/terraform/modules/app/agentcore-runtime/main.tf +9 -11
  390. package/dist/terraform/modules/app/appsync-subscriptions/main.tf +5 -1
  391. package/dist/terraform/modules/app/customer-domain/main.tf +483 -0
  392. package/dist/terraform/modules/app/deployment-control-plane/README.md +47 -0
  393. package/dist/terraform/modules/app/deployment-control-plane/buildspec.yml +24 -0
  394. package/dist/terraform/modules/app/deployment-control-plane/main.tf +614 -0
  395. package/dist/terraform/modules/app/deployment-control-plane/outputs.tf +54 -0
  396. package/dist/terraform/modules/app/deployment-control-plane/runner.py +4720 -0
  397. package/dist/terraform/modules/app/deployment-control-plane/test_runner_bundle.py +3026 -0
  398. package/dist/terraform/modules/app/deployment-control-plane/variables.tf +96 -0
  399. package/dist/terraform/modules/app/hindsight-memory/README.md +25 -23
  400. package/dist/terraform/modules/app/hindsight-memory/main.tf +26 -2
  401. package/dist/terraform/modules/app/lambda-api/eval-fanout.tf +17 -50
  402. package/dist/terraform/modules/app/lambda-api/handlers.tf +1290 -679
  403. package/dist/terraform/modules/app/lambda-api/iam-grouped.tf +933 -0
  404. package/dist/terraform/modules/app/lambda-api/main.tf +14 -527
  405. package/dist/terraform/modules/app/lambda-api/mcp-oauth.tf +3 -19
  406. package/dist/terraform/modules/app/lambda-api/outputs.tf +50 -6
  407. package/dist/terraform/modules/app/lambda-api/runtime-config.tf +163 -0
  408. package/dist/terraform/modules/app/lambda-api/slack-app-secrets.tf +3 -1
  409. package/dist/terraform/modules/app/lambda-api/stripe-secrets.tf +3 -1
  410. package/dist/terraform/modules/app/lambda-api/variables.tf +240 -53
  411. package/dist/terraform/modules/app/lambda-api/workspace-events.tf +2 -25
  412. package/dist/terraform/modules/app/ses-email/main.tf +143 -30
  413. package/dist/terraform/modules/app/static-site/main.tf +4 -3
  414. package/dist/terraform/modules/app/www-dns/main.tf +45 -5
  415. package/dist/terraform/modules/app/www-dns/outputs.tf +10 -0
  416. package/dist/terraform/modules/app/www-dns/variables.tf +24 -0
  417. package/dist/terraform/modules/data/aurora-postgres/main.tf +15 -1
  418. package/dist/terraform/modules/data/compliance-exports-bucket/main.tf +1 -1
  419. package/dist/terraform/modules/data/compliance-exports-bucket/variables.tf +6 -0
  420. package/dist/terraform/modules/foundation/cognito/main.tf +167 -11
  421. package/dist/terraform/modules/foundation/cognito/outputs.tf +5 -0
  422. package/dist/terraform/modules/foundation/cognito/variables.tf +110 -0
  423. package/dist/terraform/modules/foundation/vpc/main.tf +45 -3
  424. package/dist/terraform/modules/foundation/vpc/outputs.tf +20 -0
  425. package/dist/terraform/modules/foundation/vpc/variables.tf +18 -0
  426. package/dist/terraform/modules/thinkwork/README.md +71 -0
  427. package/dist/terraform/modules/thinkwork/main.tf +1325 -174
  428. package/dist/terraform/modules/thinkwork/outputs.tf +457 -24
  429. package/dist/terraform/modules/thinkwork/variables.tf +1169 -93
  430. package/dist/terraform/schema.graphql +82 -9
  431. package/dist/workspace-defaults/files/AGENTS.md +344 -0
  432. package/dist/workspace-defaults/files/CONTEXT.md +8 -0
  433. package/dist/workspace-defaults/files/GUARDRAILS.md +51 -0
  434. package/dist/workspace-defaults/files/MEMORY_GUIDE.md +65 -0
  435. package/dist/workspace-defaults/files/ROUTER.md +24 -0
  436. package/dist/workspace-defaults/files/SPACE.md +62 -0
  437. package/dist/workspace-defaults/files/TOOLS.md +65 -0
  438. package/dist/workspace-defaults/files/USER.md +40 -0
  439. package/dist/workspace-defaults/files/mcp.json +3 -0
  440. package/dist/workspace-defaults/files/memory/contacts.md +13 -0
  441. package/dist/workspace-defaults/files/memory/lessons.md +13 -0
  442. package/dist/workspace-defaults/files/memory/preferences.md +12 -0
  443. package/dist/workspace-defaults/files/skills/.gitkeep +1 -0
  444. package/dist/workspace-defaults/files/skills/artifact-builder/SKILL.md +79 -0
  445. package/dist/workspace-defaults/files/skills/artifact-builder/references/crm-dashboard.md +166 -0
  446. package/dist/workspace-defaults/files/skills/automation-loop-designer/SKILL.md +120 -0
  447. package/dist/workspace-defaults/files/skills/skill-creator/LICENSE.txt +202 -0
  448. package/dist/workspace-defaults/files/skills/skill-creator/SKILL.md +485 -0
  449. package/dist/workspace-defaults/files/skills/skill-creator/UPSTREAM.json +124 -0
  450. package/dist/workspace-defaults/files/skills/skill-creator/agents/analyzer.md +274 -0
  451. package/dist/workspace-defaults/files/skills/skill-creator/agents/comparator.md +202 -0
  452. package/dist/workspace-defaults/files/skills/skill-creator/agents/grader.md +223 -0
  453. package/dist/workspace-defaults/files/skills/skill-creator/assets/eval_review.html +146 -0
  454. package/dist/workspace-defaults/files/skills/skill-creator/eval-viewer/generate_review.py +471 -0
  455. package/dist/workspace-defaults/files/skills/skill-creator/eval-viewer/viewer.html +1325 -0
  456. package/dist/workspace-defaults/files/skills/skill-creator/references/schemas.md +430 -0
  457. package/dist/workspace-defaults/files/skills/skill-creator/scripts/__init__.py +0 -0
  458. package/dist/workspace-defaults/files/skills/skill-creator/scripts/aggregate_benchmark.py +401 -0
  459. package/dist/workspace-defaults/files/skills/skill-creator/scripts/generate_report.py +326 -0
  460. package/dist/workspace-defaults/files/skills/skill-creator/scripts/improve_description.py +247 -0
  461. package/dist/workspace-defaults/files/skills/skill-creator/scripts/package_skill.py +136 -0
  462. package/dist/workspace-defaults/files/skills/skill-creator/scripts/quick_validate.py +103 -0
  463. package/dist/workspace-defaults/files/skills/skill-creator/scripts/run_eval.py +310 -0
  464. package/dist/workspace-defaults/files/skills/skill-creator/scripts/run_loop.py +328 -0
  465. package/dist/workspace-defaults/files/skills/skill-creator/scripts/utils.py +47 -0
  466. package/package.json +1 -1
  467. package/dist/terraform/modules/app/agentcore-flue/README.md +0 -58
  468. package/dist/terraform/modules/app/agentcore-flue/main.tf +0 -323
  469. package/dist/terraform/modules/app/agentcore-flue/outputs.tf +0 -23
  470. package/dist/terraform/modules/app/agentcore-flue/variables.tf +0 -97
  471. package/dist/terraform/modules/app/computer-runtime/README.md +0 -15
  472. package/dist/terraform/modules/app/computer-runtime/main.tf +0 -406
  473. package/dist/terraform/modules/app/computer-runtime/outputs.tf +0 -75
  474. package/dist/terraform/modules/app/computer-runtime/variables.tf +0 -66
@@ -0,0 +1,163 @@
1
+ # ============================================================================
2
+ # SSM runtime-config (plan 2026-06-11-006)
3
+ #
4
+ # All non-identity, non-secret configuration for the api handlers lives in
5
+ # ONE terraform-owned SSM parameter per stage. Handlers read it once per
6
+ # container through the AWS Parameters and Secrets Lambda Extension
7
+ # (@thinkwork/runtime-config; env always wins over the document), so the
8
+ # hard 4KB Lambda env quota (#2375) stops being a deploy-failure class.
9
+ #
10
+ # IAM: the existing ssm-param-read grant in aws_iam_policy.api_data_plane
11
+ # (iam-grouped.tf) already grants ssm:GetParameter on
12
+ # arn:...:parameter/thinkwork/<stage>/*, which covers this parameter,
13
+ # and its secrets-manager grant covers the
14
+ # Secrets Manager reads — no new grants are needed here. R9's inline→managed
15
+ # consolidation happens in U6.
16
+ # ============================================================================
17
+
18
+ locals {
19
+ # AWS Parameters and Secrets Lambda Extension — an AWS-managed public
20
+ # layer whose publisher account id varies per region. Version 18 verified
21
+ # in each listed region on 2026-06-11 (aws lambda get-layer-version-by-arn).
22
+ # Regions not listed run without the layer: @thinkwork/runtime-config
23
+ # falls back to a one-shot SDK GetParameter/GetSecretValue (R5), so this
24
+ # map is an optimization, not a requirement. Bump the version here when
25
+ # AWS retires old layer versions.
26
+ parameters_secrets_extension_arns = {
27
+ us-east-1 = "arn:aws:lambda:us-east-1:177933569100:layer:AWS-Parameters-and-Secrets-Lambda-Extension:18"
28
+ us-east-2 = "arn:aws:lambda:us-east-2:590474943231:layer:AWS-Parameters-and-Secrets-Lambda-Extension:18"
29
+ us-west-1 = "arn:aws:lambda:us-west-1:997803712105:layer:AWS-Parameters-and-Secrets-Lambda-Extension:18"
30
+ us-west-2 = "arn:aws:lambda:us-west-2:345057560386:layer:AWS-Parameters-and-Secrets-Lambda-Extension:18"
31
+ eu-west-1 = "arn:aws:lambda:eu-west-1:015030872274:layer:AWS-Parameters-and-Secrets-Lambda-Extension:18"
32
+ }
33
+
34
+ parameters_secrets_extension_arn = var.parameters_secrets_extension_layer_arn != "" ? var.parameters_secrets_extension_layer_arn : lookup(local.parameters_secrets_extension_arns, var.region, "")
35
+
36
+ api_handler_layers = local.parameters_secrets_extension_arn != "" ? [local.parameters_secrets_extension_arn] : []
37
+
38
+ # The document body: config-class common env + graphql-http's config-class
39
+ # extras. Secrets and identity never enter this map (R4) — it is a plain
40
+ # String parameter visible to anyone with ssm:GetParameter. Empty values
41
+ # (disabled features) are stripped: the loader treats "" as unset on both
42
+ # the env and document layers, so carrying them would only spend bytes.
43
+ runtime_config_document = {
44
+ for key, value in merge(
45
+ local.config_env,
46
+ local.graphql_http_config_env,
47
+ ) : key => value if value != ""
48
+ }
49
+ }
50
+
51
+ # ----------------------------------------------------------------------------
52
+ # Platform secrets (plan 2026-06-11-006 U5/R4)
53
+ #
54
+ # API_AUTH_SECRET and APPSYNC_API_KEY leave plaintext Lambda env: the
55
+ # runtime-config loader prefetches these at cold start (getApiAuthSecret /
56
+ # getAppsyncApiKey accessors, env-wins during the transition window). Names
57
+ # use the `thinkwork/${stage}/...` prefix so the shared role's existing
58
+ # `secretsmanager:GetSecretValue` grant on `thinkwork/*` covers them.
59
+ # The env copies in common_env are dropped one release AFTER this ships
60
+ # (R8 two-release transition) so mid-apply old-code containers never lose
61
+ # their env copy before the prefetch path exists.
62
+ # ----------------------------------------------------------------------------
63
+
64
+ resource "aws_secretsmanager_secret" "api_auth" {
65
+ name = "thinkwork/${var.stage}/api-auth"
66
+ description = "Shared service-auth Bearer secret between platform services. Prefetched at Lambda cold start by @thinkwork/runtime-config."
67
+ tags = {
68
+ Name = "thinkwork-${var.stage}-api-auth"
69
+ Stage = var.stage
70
+ }
71
+ }
72
+
73
+ resource "aws_secretsmanager_secret_version" "api_auth" {
74
+ secret_id = aws_secretsmanager_secret.api_auth.id
75
+ secret_string = var.api_auth_secret
76
+
77
+ # Track the var (no ignore_changes): var.api_auth_secret is authoritative
78
+ # — tfvars on dev, the controller runner on customer environments (which
79
+ # itself reuses this secret's previous value). Pinning the first value
80
+ # here let a runner-side rotation drift env away from Secrets Manager on
81
+ # TEI (v174 apply), which becomes a fleet-wide 401 once the env copy
82
+ # drops (R8). Rotation goes through tfvars / runner secrets, not the
83
+ # console.
84
+ }
85
+
86
+ resource "aws_secretsmanager_secret" "appsync_api_key" {
87
+ name = "thinkwork/${var.stage}/appsync-api-key"
88
+ description = "AppSync API key for subscription notify fan-out. Prefetched at Lambda cold start by @thinkwork/runtime-config."
89
+ tags = {
90
+ Name = "thinkwork-${var.stage}-appsync-api-key"
91
+ Stage = var.stage
92
+ }
93
+ }
94
+
95
+ resource "aws_secretsmanager_secret_version" "appsync_api_key" {
96
+ secret_id = aws_secretsmanager_secret.appsync_api_key.id
97
+ secret_string = var.appsync_api_key
98
+
99
+ # AppSync keys are terraform-rotated (the appsync module recreates them),
100
+ # so track the var here — unlike api_auth there is no operator rotation
101
+ # path outside terraform.
102
+ }
103
+
104
+ # The standalone compliance Lambdas (anchor, export-runner) bundle the
105
+ # runtime-config loader but run under dedicated roles that lack the shared
106
+ # role's ssm grant. Without these, every cold start auto-prime fails
107
+ # AccessDenied and the loader retries on its 15s negative-cache cadence —
108
+ # env-wins keeps them functional (their keys ride their own env blocks),
109
+ # but the doomed GetParameter churn is noise worth closing.
110
+ resource "aws_iam_role_policy" "compliance_anchor_runtime_config_read" {
111
+ count = local.deploy_lambda_handlers && var.compliance_anchor_lambda_role_name != "" ? 1 : 0
112
+ name = "runtime-config-read"
113
+ role = var.compliance_anchor_lambda_role_name
114
+
115
+ policy = jsonencode({
116
+ Version = "2012-10-17"
117
+ Statement = [{
118
+ Effect = "Allow"
119
+ Action = ["ssm:GetParameter"]
120
+ Resource = "arn:aws:ssm:${var.region}:${var.account_id}:parameter/thinkwork/${var.stage}/runtime-config"
121
+ }]
122
+ })
123
+ }
124
+
125
+ resource "aws_iam_role_policy" "compliance_exports_runner_runtime_config_read" {
126
+ count = local.deploy_lambda_handlers && var.compliance_exports_runner_role_name != "" ? 1 : 0
127
+ name = "runtime-config-read"
128
+ role = var.compliance_exports_runner_role_name
129
+
130
+ policy = jsonencode({
131
+ Version = "2012-10-17"
132
+ Statement = [{
133
+ Effect = "Allow"
134
+ Action = ["ssm:GetParameter"]
135
+ Resource = "arn:aws:ssm:${var.region}:${var.account_id}:parameter/thinkwork/${var.stage}/runtime-config"
136
+ }]
137
+ })
138
+ }
139
+
140
+ resource "aws_ssm_parameter" "runtime_config" {
141
+ count = local.deploy_lambda_handlers ? 1 : 0
142
+
143
+ name = "/thinkwork/${var.stage}/runtime-config"
144
+ type = "String"
145
+ # Advanced tier raises the value ceiling from 4KB (which would rebuild the
146
+ # exact quota we are escaping) to 8KB, at ~$0.05/mo per stage.
147
+ tier = "Advanced"
148
+ value = jsonencode(local.runtime_config_document)
149
+
150
+ lifecycle {
151
+ precondition {
152
+ # Growth surfaces at plan time in CI, not as a runtime incident in a
153
+ # customer account. If this ever trips, split the document by concern
154
+ # — the loader's document-merge seam is the extension point.
155
+ condition = length(jsonencode(local.runtime_config_document)) < 7168
156
+ error_message = "runtime-config document exceeds the 7KB plan-time ceiling (8KB advanced-tier hard limit). Split the document or prune keys — do not raise this limit casually."
157
+ }
158
+ }
159
+
160
+ tags = {
161
+ Name = "thinkwork-${var.stage}-runtime-config"
162
+ }
163
+ }
@@ -20,6 +20,7 @@
20
20
  ################################################################################
21
21
 
22
22
  resource "aws_secretsmanager_secret" "slack_app_credentials" {
23
+ count = var.enable_slack_workspace_app ? 1 : 0
23
24
  name = "thinkwork/${var.stage}/slack/app"
24
25
  description = "Slack workspace app credentials (signing_secret, client_id, client_secret). Populate via Secrets Manager; never via tfvars."
25
26
  tags = {
@@ -30,7 +31,8 @@ resource "aws_secretsmanager_secret" "slack_app_credentials" {
30
31
  }
31
32
 
32
33
  resource "aws_secretsmanager_secret_version" "slack_app_credentials_initial" {
33
- secret_id = aws_secretsmanager_secret.slack_app_credentials.id
34
+ count = var.enable_slack_workspace_app ? 1 : 0
35
+ secret_id = aws_secretsmanager_secret.slack_app_credentials[0].id
34
36
  secret_string = jsonencode({
35
37
  signing_secret = ""
36
38
  client_id = ""
@@ -28,6 +28,7 @@
28
28
  ################################################################################
29
29
 
30
30
  resource "aws_secretsmanager_secret" "stripe_api_credentials" {
31
+ count = var.enable_stripe_billing ? 1 : 0
31
32
  name = "thinkwork/${var.stage}/stripe/api-credentials"
32
33
  description = "Stripe API credentials (secret_key, publishable_key, webhook_signing_secret). Populate via `aws secretsmanager put-secret-value`; never via tfvars."
33
34
  tags = {
@@ -38,7 +39,8 @@ resource "aws_secretsmanager_secret" "stripe_api_credentials" {
38
39
  }
39
40
 
40
41
  resource "aws_secretsmanager_secret_version" "stripe_api_credentials_initial" {
41
- secret_id = aws_secretsmanager_secret.stripe_api_credentials.id
42
+ count = var.enable_stripe_billing ? 1 : 0
43
+ secret_id = aws_secretsmanager_secret.stripe_api_credentials[0].id
42
44
  secret_string = jsonencode({
43
45
  secret_key = ""
44
46
  publishable_key = ""
@@ -61,6 +61,36 @@ variable "bucket_arn" {
61
61
  type = string
62
62
  }
63
63
 
64
+ variable "billing_export_bucket_name" {
65
+ description = "Optional S3 bucket containing AWS Data Exports/CUR 2.0 manifests for bill reconciliation. Empty leaves the scheduled reconciler in no-op mode; targeted invokes can still pass a manifest bucket."
66
+ type = string
67
+ default = ""
68
+ }
69
+
70
+ variable "billing_export_manifest_key" {
71
+ description = "Optional S3 key for the latest AWS billing export manifest to import on the scheduled bill reconciler run."
72
+ type = string
73
+ default = ""
74
+ }
75
+
76
+ variable "billing_reconciliation_tolerance_usd" {
77
+ description = "Absolute USD tolerance used when comparing ThinkWork projected aggregate spend to AWS billing export spend."
78
+ type = number
79
+ default = 0.01
80
+ }
81
+
82
+ variable "plugin_catalog_github_token_secret_arn" {
83
+ description = "Optional Secrets Manager ARN/name containing a GitHub token for plugin catalog release-asset fetches. Empty uses unauthenticated GitHub requests."
84
+ type = string
85
+ default = ""
86
+ }
87
+
88
+ variable "brain_artifacts_kms_key_arn" {
89
+ description = "Optional KMS key ARN used to encrypt canonical Company Brain artifacts. AES256 encryption is used when unset."
90
+ type = string
91
+ default = ""
92
+ }
93
+
64
94
  variable "enable_workspace_orchestration" {
65
95
  description = "Enable S3 EventBridge/SQS routing for workspace file orchestration."
66
96
  type = bool
@@ -153,6 +183,12 @@ variable "api_auth_secret" {
153
183
  default = ""
154
184
  }
155
185
 
186
+ variable "bootstrap_credential_lease_kms_key_id" {
187
+ description = "Optional KMS key ID or ARN used by Secrets Manager for temporary bootstrap credential leases. Empty uses the AWS-managed Secrets Manager key."
188
+ type = string
189
+ default = ""
190
+ }
191
+
156
192
  variable "extension_proxy_backends_json" {
157
193
  description = "JSON map of enabled Admin extension ids to allowlisted backend base URLs. Example: {\"customer-module\":{\"baseUrl\":\"https://extension.example.com\"}}"
158
194
  type = string
@@ -203,135 +239,185 @@ variable "agentcore_memory_id" {
203
239
  }
204
240
 
205
241
  variable "memory_engine" {
206
- description = "Active long-term memory engine for this deployment. Exactly one engine is canonical for recall/inspect/export. Defaults to 'hindsight' for hosted ThinkWork; self-hosted/serverless deployments may choose 'agentcore'."
242
+ description = "Active long-term memory engine for this deployment. Exactly one engine is canonical for recall/inspect/export. Hosted ThinkWork may choose 'cognee' when the Company Brain substrate is enabled."
207
243
  type = string
208
244
  default = "hindsight"
209
245
  validation {
210
- condition = contains(["hindsight", "agentcore"], var.memory_engine)
211
- error_message = "memory_engine must be 'hindsight' or 'agentcore'."
246
+ condition = contains(["hindsight", "agentcore", "cognee"], var.memory_engine)
247
+ error_message = "memory_engine must be 'hindsight', 'agentcore', or 'cognee'."
212
248
  }
213
249
  }
214
250
 
215
- variable "agentcore_function_name" {
216
- description = "AgentCore Lambda function name (for direct SDK invoke)"
251
+ variable "cognee_enabled" {
252
+ description = "Whether the Cognee knowledge graph add-on is enabled for this deployment."
253
+ type = bool
254
+ default = false
255
+ }
256
+
257
+ variable "cognee_endpoint" {
258
+ description = "Internal Cognee API endpoint (empty when disabled)."
217
259
  type = string
218
260
  default = ""
219
261
  }
220
262
 
221
- variable "agentcore_flue_function_name" {
222
- description = "Flue AgentCore Lambda function name (for direct SDK invoke); empty until the Flue runtime is provisioned for the stage."
263
+ variable "cognee_log_group_name" {
264
+ description = "CloudWatch log group for Cognee (empty when disabled)."
223
265
  type = string
224
266
  default = ""
225
267
  }
226
268
 
227
- variable "agentcore_function_arn" {
228
- description = "AgentCore Lambda function ARN (used to grant lambda:InvokeFunction)"
269
+ variable "cognee_backend_mode" {
270
+ description = "Selected Cognee backend mode (empty when disabled)."
229
271
  type = string
230
272
  default = ""
231
273
  }
232
274
 
233
- variable "agentcore_flue_function_arn" {
234
- description = "Flue AgentCore Lambda function ARN (used to grant lambda:InvokeFunction)"
275
+ variable "cognee_cluster_arn" {
276
+ description = "ECS cluster ARN for Cognee (empty when disabled)."
235
277
  type = string
236
278
  default = ""
237
279
  }
238
280
 
239
- variable "computer_runtime_cluster_name" {
240
- description = "ECS cluster name for ThinkWork Computer runtime services"
281
+ variable "cognee_service_name" {
282
+ description = "ECS service name for Cognee (empty when disabled)."
241
283
  type = string
242
284
  default = ""
243
285
  }
244
286
 
245
- variable "computer_runtime_cluster_arn" {
246
- description = "ECS cluster ARN for ThinkWork Computer runtime services"
287
+ variable "cognee_worker_subnet_ids" {
288
+ description = "Subnet IDs for the Knowledge Graph ingest worker Lambda VPC attachment. Leave empty to deploy the worker without VPC access."
289
+ type = list(string)
290
+ default = []
291
+ }
292
+
293
+ variable "cognee_worker_security_group_ids" {
294
+ description = "Security group IDs for the Knowledge Graph ingest worker Lambda VPC attachment. Leave empty to deploy the worker without VPC access."
295
+ type = list(string)
296
+ default = []
297
+ }
298
+
299
+ variable "okf_efs_subnet_ids" {
300
+ description = "Subnet IDs for the OKF EFS hydrator Lambda VPC attachment. Leave empty to deploy the hydrator without an EFS mount."
301
+ type = list(string)
302
+ default = []
303
+ }
304
+
305
+ variable "okf_efs_security_group_ids" {
306
+ description = "Security group IDs for the OKF EFS hydrator Lambda VPC attachment. Leave empty to deploy the hydrator without an EFS mount."
307
+ type = list(string)
308
+ default = []
309
+ }
310
+
311
+ variable "okf_efs_mount_target_ids" {
312
+ description = "EFS mount target IDs that must exist before creating the OKF EFS hydrator Lambda."
313
+ type = list(string)
314
+ default = []
315
+ }
316
+
317
+ variable "okf_efs_file_system_arn" {
318
+ description = "EFS file system ARN for the OKF wiki current view. Empty disables EFS IAM grants."
247
319
  type = string
248
320
  default = ""
249
321
  }
250
322
 
251
- variable "computer_runtime_efs_file_system_id" {
252
- description = "Shared EFS file system ID for Computer live workspaces"
323
+ variable "okf_efs_refresh_access_point_arn" {
324
+ description = "EFS access point ARN mounted by the okf-efs-refresh Lambda. Empty disables the mount."
253
325
  type = string
254
326
  default = ""
255
327
  }
256
328
 
257
- variable "computer_runtime_subnet_ids" {
258
- description = "Subnets for Computer runtime ECS services"
259
- type = list(string)
260
- default = []
329
+ variable "okf_efs_mount_path" {
330
+ description = "Local Lambda mount path for the OKF wiki EFS view. Must be under /mnt."
331
+ type = string
332
+ default = "/mnt/thinkwork-okf"
261
333
  }
262
334
 
263
- variable "computer_runtime_assign_public_ip" {
264
- description = "ENABLED or DISABLED for Computer runtime ECS task public IP assignment"
335
+ variable "observation_classifier_model_id" {
336
+ description = "Bedrock model id for the observations promotion-gate classifier. Empty uses the API default (pinned Haiku)."
265
337
  type = string
266
- default = "DISABLED"
267
- validation {
268
- condition = contains(["ENABLED", "DISABLED"], var.computer_runtime_assign_public_ip)
269
- error_message = "computer_runtime_assign_public_ip must be ENABLED or DISABLED."
270
- }
338
+ default = ""
339
+ }
340
+
341
+ variable "twenty_provisioned" {
342
+ description = "Whether the Twenty CRM retained managed-app substrate is provisioned."
343
+ type = bool
344
+ default = false
345
+ }
346
+
347
+ variable "twenty_runtime_enabled" {
348
+ description = "Whether the Twenty CRM server/worker runtime is enabled."
349
+ type = bool
350
+ default = false
271
351
  }
272
352
 
273
- variable "computer_runtime_task_sg_id" {
274
- description = "Security group for Computer runtime ECS tasks"
353
+ variable "twenty_url" {
354
+ description = "Public Twenty CRM URL (empty when not provisioned)."
275
355
  type = string
276
356
  default = ""
277
357
  }
278
358
 
279
- variable "computer_runtime_execution_role_arn" {
280
- description = "ECS execution role ARN for Computer runtime tasks"
359
+ variable "twenty_alb_arn" {
360
+ description = "Public Twenty ALB ARN (empty when not provisioned)."
281
361
  type = string
282
362
  default = ""
283
363
  }
284
364
 
285
- variable "computer_runtime_task_role_arn" {
286
- description = "ECS task role ARN for Computer runtime tasks"
365
+ variable "twenty_target_group_arn" {
366
+ description = "Twenty server target group ARN (empty when not provisioned)."
287
367
  type = string
288
368
  default = ""
289
369
  }
290
370
 
291
- variable "computer_runtime_log_group_name" {
292
- description = "CloudWatch log group for Computer runtime tasks"
371
+ variable "twenty_cluster_arn" {
372
+ description = "ECS cluster ARN for Twenty (empty when not provisioned)."
293
373
  type = string
294
374
  default = ""
295
375
  }
296
376
 
297
- variable "computer_runtime_repository_url" {
298
- description = "ECR repository URL for the Computer runtime image"
377
+ variable "twenty_server_service_name" {
378
+ description = "ECS service name for the Twenty server (empty when not provisioned)."
299
379
  type = string
300
380
  default = ""
301
381
  }
302
382
 
303
- variable "computer_runtime_default_cpu" {
304
- description = "Default Fargate CPU units for Computer runtime tasks"
305
- type = number
306
- default = 256
383
+ variable "twenty_worker_service_name" {
384
+ description = "ECS service name for the Twenty worker (empty when not provisioned)."
385
+ type = string
386
+ default = ""
307
387
  }
308
388
 
309
- variable "computer_runtime_default_memory" {
310
- description = "Default Fargate memory MB for Computer runtime tasks"
311
- type = number
312
- default = 512
389
+ variable "twenty_server_log_group_name" {
390
+ description = "CloudWatch log group for the Twenty server (empty when not provisioned)."
391
+ type = string
392
+ default = ""
313
393
  }
314
394
 
315
- variable "computer_runtime_manager_policy_arn" {
316
- description = "IAM policy ARN granting Computer manager access to ECS/EFS runtime resources"
395
+ variable "twenty_worker_log_group_name" {
396
+ description = "CloudWatch log group for the Twenty worker (empty when not provisioned)."
317
397
  type = string
318
398
  default = ""
319
399
  }
320
400
 
321
- variable "workspace_admin_efs_access_point_arn" {
322
- description = "Shared EFS access point ARN consumed by the workspace-files-efs Lambda. Rooted at /tenants on the Computer runtime EFS file system so a single Lambda can resolve any (tenantId, computerId) at request time."
401
+ variable "agentcore_pi_function_name" {
402
+ description = "Pi AgentCore Lambda function name (for direct SDK invoke); empty until the Pi runtime is provisioned for the stage."
323
403
  type = string
324
404
  default = ""
325
405
  }
326
406
 
327
- variable "workspace_admin_lambda_sg_id" {
328
- description = "Security group ID assigned to the workspace-files-efs Lambda. Allowed NFS into the Computer runtime EFS security group via a sibling ingress rule defined in the computer-runtime module."
407
+ variable "agentcore_pi_function_arn" {
408
+ description = "Pi AgentCore Lambda function ARN (used to grant lambda:InvokeFunction)"
329
409
  type = string
330
410
  default = ""
331
411
  }
332
412
 
413
+ variable "enable_agentcore_pi_invoke_policy" {
414
+ description = "Create the API Lambda IAM policy that permits invoking the Pi AgentCore Lambda."
415
+ type = bool
416
+ default = false
417
+ }
418
+
333
419
  variable "admin_url" {
334
- description = "Admin app URL (e.g. https://d3li9vbqnhv7w.cloudfront.net)"
420
+ description = "Deprecated compatibility input for the unified web app URL (e.g. https://app.thinkwork.ai)."
335
421
  type = string
336
422
  default = ""
337
423
  }
@@ -354,12 +440,24 @@ variable "stripe_price_ids_json" {
354
440
  default = "{}"
355
441
  }
356
442
 
443
+ variable "enable_stripe_billing" {
444
+ description = "Provision Stripe billing Lambdas, API routes, and credentials placeholder secret."
445
+ type = bool
446
+ default = true
447
+ }
448
+
357
449
  variable "stripe_welcome_from_email" {
358
450
  description = "Override From: address on the Stripe post-checkout welcome email. Must be an SES-verified identity. Empty string falls back to the in-code default (hello@agents.thinkwork.ai, which uses the already-verified SES inbound domain). Set to hello@thinkwork.ai once the bare-apex sender identity is verified."
359
451
  type = string
360
452
  default = ""
361
453
  }
362
454
 
455
+ variable "enable_slack_workspace_app" {
456
+ description = "Provision Slack workspace app Lambdas, API routes, and credentials placeholder secret."
457
+ type = bool
458
+ default = true
459
+ }
460
+
363
461
  variable "appsync_realtime_url" {
364
462
  description = "AppSync realtime/WebSocket endpoint URL"
365
463
  type = string
@@ -372,6 +470,18 @@ variable "ecr_repository_url" {
372
470
  default = ""
373
471
  }
374
472
 
473
+ variable "ecr_repository_provisioned" {
474
+ description = "Static flag: an ECR repository exists for image-based handlers AND their image tags are seeded (CI pushes skill-trust-runner-latest for repo-managed stages). count cannot depend on the repository URL attribute (unknown until apply in fresh accounts)."
475
+ type = bool
476
+ default = false
477
+ }
478
+
479
+ variable "manage_bedrock_invocation_logging" {
480
+ description = "Own the account/region-scoped Bedrock model-invocation logging resources (log group, IAM role, account logging configuration). Only one stage per account+region may set this — the log group name is deliberately stage-neutral."
481
+ type = bool
482
+ default = true
483
+ }
484
+
375
485
  variable "cors_allowed_origins" {
376
486
  description = "Allowed CORS origins for the API Gateway. Use [\"*\"] for development."
377
487
  type = list(string)
@@ -396,6 +506,24 @@ variable "company_brain_source_agent_model_id" {
396
506
  default = "us.anthropic.claude-haiku-4-5-20251001-v1:0"
397
507
  }
398
508
 
509
+ variable "company_brain_backdoor_install_key_secret_arn" {
510
+ description = "Optional Secrets Manager ARN containing the temporary Company Brain backdoor install key. Empty disables the backdoor. The raw key is never stored in tfvars or the runtime-config document."
511
+ type = string
512
+ default = ""
513
+ }
514
+
515
+ variable "company_brain_backdoor_install_key_stages" {
516
+ description = "Comma-separated stage allowlist for the temporary Company Brain backdoor install key. Both this value and company_brain_backdoor_install_key_secret_arn must be set for deployed backdoor redemption."
517
+ type = string
518
+ default = ""
519
+ }
520
+
521
+ variable "kg_obs_max_candidates_per_run" {
522
+ description = "Per-run candidate cap for the observations → Knowledge Graph ingest worker (KG_OBS_MAX_CANDIDATES_PER_RUN). Bounds the layered-gate classifier cost AND keeps each Cognee cognify small enough to index within budget on the single dogfood task; truncated runs self-invoke to drain the remaining backlog. Stored as a string because the Lambda reads it verbatim from env."
523
+ type = string
524
+ default = "10"
525
+ }
526
+
399
527
  variable "wiki_aggregation_pass_enabled" {
400
528
  description = "Feature flag for the wiki aggregation pass (parent section rollups + section promotion). Pipeline stops after leaf compile when this is off and never populates hub rollups. Stored as a string because the Lambda reads it verbatim from env; must be 'true' / '1' / 'yes' to enable."
401
529
  type = string
@@ -408,6 +536,17 @@ variable "wiki_deterministic_linking_enabled" {
408
536
  default = "true"
409
537
  }
410
538
 
539
+ variable "wiki_source" {
540
+ description = "Wiki pipeline source dispatch (plan 2026-06-09-004 U10). 'planner' (default) runs the original LLM compile path; 'graph' runs the deterministic graph→wiki materializer over the knowledge-graph mirror and makes successful observation-ingest runs the compile trigger. Variable-ized (not hardcoded) per the wiki-compile env precedent so unrelated deploys don't reset the flag; the Lambda reads it verbatim from env and treats any value other than 'graph' as 'planner'."
541
+ type = string
542
+ default = "planner"
543
+
544
+ validation {
545
+ condition = contains(["planner", "graph"], var.wiki_source)
546
+ error_message = "wiki_source must be 'planner' or 'graph'."
547
+ }
548
+ }
549
+
411
550
  variable "google_places_api_key" {
412
551
  description = "Google Places API (New) key used by wiki-compile for POI → city/state/country hierarchy enrichment. Stored as a SecureString SSM parameter at /thinkwork/<stage>/google-places/api-key. Empty default creates the parameter with a placeholder value; operator populates via `aws ssm put-parameter --overwrite`. The parameter's value has lifecycle.ignore_changes set so CLI rotation sticks across terraform applies. Compile gracefully degrades when the key is absent (metadata-only place rows) — never fails compile."
413
552
  type = string
@@ -482,6 +621,42 @@ variable "routines_log_group_arn" {
482
621
  default = ""
483
622
  }
484
623
 
624
+ variable "deployment_state_machine_arn" {
625
+ description = "ARN of the GitHub-free deployment orchestration state machine. Passed to deployment-sessions and graphql-http so Settings can start release updates."
626
+ type = string
627
+ default = ""
628
+ }
629
+
630
+ variable "deployment_control_plane_enabled" {
631
+ description = "Whether deployment control-plane routes and handlers should be provisioned. Kept separate from deployment_state_machine_arn because the ARN may be apply-time unknown."
632
+ type = bool
633
+ default = false
634
+ }
635
+
636
+ variable "deployment_evidence_bucket" {
637
+ description = "S3 bucket name that stores deployment runner evidence. Passed to deployment-sessions and graphql-http so Settings can report release update evidence."
638
+ type = string
639
+ default = ""
640
+ }
641
+
642
+ variable "deployment_release_version" {
643
+ description = "Selected ThinkWork release version used for managed application deployment jobs."
644
+ type = string
645
+ default = "unresolved"
646
+ }
647
+
648
+ variable "deployment_release_manifest_url" {
649
+ description = "Selected ThinkWork release manifest URL used for managed application deployment jobs."
650
+ type = string
651
+ default = ""
652
+ }
653
+
654
+ variable "deployment_release_manifest_sha256" {
655
+ description = "Selected ThinkWork release manifest SHA-256 used for managed application deployment jobs."
656
+ type = string
657
+ default = ""
658
+ }
659
+
485
660
  # ---------------------------------------------------------------------------
486
661
  # Phase 3 U4 — compliance-outbox-drainer Aurora credentials
487
662
  # ---------------------------------------------------------------------------
@@ -587,3 +762,15 @@ variable "compliance_exports_runner_role_name" {
587
762
  type = string
588
763
  default = ""
589
764
  }
765
+
766
+ variable "knowledge_graph_tool_enabled" {
767
+ description = "Stage gate for the Pi knowledge_graph_search tool (plan 2026-06-09-004 U8). Per-agent tool policy gates on top."
768
+ type = bool
769
+ default = true
770
+ }
771
+
772
+ variable "parameters_secrets_extension_layer_arn" {
773
+ description = "Override for the AWS Parameters and Secrets Lambda Extension layer ARN. Empty uses the per-region map in runtime-config.tf; regions absent from the map run without the layer (the runtime-config loader falls back to SDK reads)."
774
+ type = string
775
+ default = ""
776
+ }
@@ -98,28 +98,5 @@ resource "aws_lambda_event_source_mapping" "workspace_event_dispatcher" {
98
98
  }
99
99
  }
100
100
 
101
- resource "aws_iam_role_policy" "lambda_workspace_events_sqs" {
102
- count = local.workspace_event_enabled ? 1 : 0
103
-
104
- name = "thinkwork-${var.stage}-lambda-workspace-events-sqs"
105
- role = aws_iam_role.lambda.id
106
-
107
- policy = jsonencode({
108
- Version = "2012-10-17"
109
- Statement = [
110
- {
111
- Effect = "Allow"
112
- Action = [
113
- "sqs:ReceiveMessage",
114
- "sqs:DeleteMessage",
115
- "sqs:GetQueueAttributes",
116
- "sqs:ChangeMessageVisibility",
117
- ]
118
- Resource = concat(
119
- [for q in aws_sqs_queue.workspace_event : q.arn],
120
- [for q in aws_sqs_queue.workspace_event_dlq : q.arn],
121
- )
122
- },
123
- ]
124
- })
125
- }
101
+ # The shared-role workspace-event SQS receive grants moved to
102
+ # aws_iam_policy.api_data_plane in iam-grouped.tf (R9).