thinkwork-cli 0.12.12 → 0.12.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (474) hide show
  1. package/README.md +42 -38
  2. package/dist/{api-client-ASJWIG3Z.js → api-client-4VT3FWOH.js} +1 -1
  3. package/dist/{chunk-JEHV35EU.js → chunk-H7AB42ES.js} +340 -30
  4. package/dist/cli.js +22123 -9219
  5. package/dist/commands/enterprise/templates/deploy-repo/.github/workflows/deploy.yml +17 -6
  6. package/dist/commands/enterprise/templates/deploy-repo/docs/runbook.md +81 -9
  7. package/dist/commands/enterprise/templates/deploy-repo/scripts/apply-release.mjs +183 -21
  8. package/dist/commands/enterprise/templates/deploy-repo/scripts/smoke.mjs +1 -2
  9. package/dist/commands/enterprise/templates/deploy-repo/terraform/main.tf +286 -0
  10. package/dist/drizzle/0000_petite_marvel_apes.sql +1188 -0
  11. package/dist/drizzle/0001_milky_surge.sql +103 -0
  12. package/dist/drizzle/0002_aberrant_mattie_franklin.sql +41 -0
  13. package/dist/drizzle/0003_exotic_ogun.sql +3 -0
  14. package/dist/drizzle/0004_glamorous_magneto.sql +2 -0
  15. package/dist/drizzle/0005_ancient_nocturne.sql +2 -0
  16. package/dist/drizzle/0006_new_colonel_america.sql +2 -0
  17. package/dist/drizzle/0007_unique_external_task_id.sql +31 -0
  18. package/dist/drizzle/0008_external_task_id_column.sql +43 -0
  19. package/dist/drizzle/0009_evaluations.sql +64 -0
  20. package/dist/drizzle/0010_eval_agent_template.sql +2 -0
  21. package/dist/drizzle/0011_eval_run_template.sql +2 -0
  22. package/dist/drizzle/0012_eval_seed_unique.sql +16 -0
  23. package/dist/drizzle/0013_motionless_white_queen.sql +140 -0
  24. package/dist/drizzle/0014_wiki_aggregation.sql +11 -0
  25. package/dist/drizzle/0015_pg_trgm_alias_title_indexes.sql +9 -0
  26. package/dist/drizzle/0016_wiki_schema_drops.sql +24 -0
  27. package/dist/drizzle/0017_wiki_places.sql +46 -0
  28. package/dist/drizzle/0018_agent_workspace_overlay.sql +26 -0
  29. package/dist/drizzle/0018_cool_firebird.sql +24 -0
  30. package/dist/drizzle/0018_skill_runs.sql +84 -0
  31. package/dist/drizzle/0019_condemned_dragon_man.sql +95 -0
  32. package/dist/drizzle/0019_webhook_skill_runs.sql +58 -0
  33. package/dist/drizzle/0020_crazy_the_anarchist.sql +9 -0
  34. package/dist/drizzle/0020_mutation_idempotency.sql +64 -0
  35. package/dist/drizzle/0021_crm_work_links.sql +76 -0
  36. package/dist/drizzle/0021_skill_runs_completion_hmac.sql +33 -0
  37. package/dist/drizzle/0022_add_billing_tables.sql +70 -0
  38. package/dist/drizzle/0022_seed_thinkwork_admin_permissions.sql +160 -0
  39. package/dist/drizzle/0022_stripe_billing_indexes.sql +48 -0
  40. package/dist/drizzle/0023_tenants_deactivation.sql +27 -0
  41. package/dist/drizzle/0024_tenant_mcp_admin_keys.sql +63 -0
  42. package/dist/drizzle/0025_v1_agent_architecture.sql +182 -0
  43. package/dist/drizzle/0026_thread_turns_add_kind.sql +28 -0
  44. package/dist/drizzle/0027_capability_catalog_and_manifests.sql +219 -0
  45. package/dist/drizzle/0028_aws_s3_extension.sql +26 -0
  46. package/dist/drizzle/0029_collapse_execution_types.sql +42 -0
  47. package/dist/drizzle/0030_retire_composition_primitives.sql +48 -0
  48. package/dist/drizzle/0031_thread_cleanup_drops.sql +131 -0
  49. package/dist/drizzle/0032_add_browser_automation_template_config.sql +24 -0
  50. package/dist/drizzle/0033_agent_operation_leases.sql +32 -0
  51. package/dist/drizzle/0034_agent_workspace_events.sql +116 -0
  52. package/dist/drizzle/0035_workspace_review_decisions.sql +19 -0
  53. package/dist/drizzle/0036_user_scoped_memory_wiki.sql +152 -0
  54. package/dist/drizzle/0037_user_profile_operating_model.sql +34 -0
  55. package/dist/drizzle/0042_agent_runtime_selector.sql +41 -0
  56. package/dist/drizzle/0043_wiki_search_tsv_tokenization.sql +48 -0
  57. package/dist/drizzle/0044_add_web_search_template_config.sql +7 -0
  58. package/dist/drizzle/0045_add_send_email_template_config.sql +7 -0
  59. package/dist/drizzle/0046_tenant_mcp_context_tools.sql +26 -0
  60. package/dist/drizzle/0047_add_context_engine_template_config.sql +7 -0
  61. package/dist/drizzle/0048_tenant_context_provider_settings.sql +22 -0
  62. package/dist/drizzle/0050_brain_v0_entity_subtype.sql +29 -0
  63. package/dist/drizzle/0051_brain_v0_tenant_entity_pages.sql +170 -0
  64. package/dist/drizzle/0052_brain_v0_external_refs.sql +41 -0
  65. package/dist/drizzle/0053_brain_v0_unresolved_mentions_subtype.sql +48 -0
  66. package/dist/drizzle/0054_wiki_compile_jobs_input.sql +28 -0
  67. package/dist/drizzle/0055_routines_stepfunctions_substrate.sql +202 -0
  68. package/dist/drizzle/0056_routine_step_events_dedup_idx.sql +25 -0
  69. package/dist/drizzle/0057_archive_legacy_python_routines.sql +36 -0
  70. package/dist/drizzle/0058_routines_visibility_and_owning_agent.sql +61 -0
  71. package/dist/drizzle/0061_routine_execution_asl_version_id.sql +29 -0
  72. package/dist/drizzle/0062_migrate_pi_to_flue.sql +110 -0
  73. package/dist/drizzle/0063_threads_session_data.sql +23 -0
  74. package/dist/drizzle/0064_tenant_credentials.sql +65 -0
  75. package/dist/drizzle/0067_thinkwork_computers_phase_one.sql +174 -0
  76. package/dist/drizzle/0068_drop_system_workflows_and_activation.sql +115 -0
  77. package/dist/drizzle/0069_compliance_schema.sql +364 -0
  78. package/dist/drizzle/0070_compliance_aurora_roles.sql +171 -0
  79. package/dist/drizzle/0072_threads_computer_ownership.sql +24 -0
  80. package/dist/drizzle/0073_compliance_tenant_anchor_state.sql +105 -0
  81. package/dist/drizzle/0074_compliance_event_hash_index.sql +49 -0
  82. package/dist/drizzle/0075_scheduled_jobs_computer_ownership.sql +27 -0
  83. package/dist/drizzle/0076_scheduled_jobs_marco_backfill.sql +69 -0
  84. package/dist/drizzle/0077_computers_primary_agent_id.sql +38 -0
  85. package/dist/drizzle/0078_tenant_customize_catalog.sql +46 -0
  86. package/dist/drizzle/0079_seed_tenant_customize_catalog.sql +53 -0
  87. package/dist/drizzle/0081_routines_catalog_slug.sql +42 -0
  88. package/dist/drizzle/0082_messages_parts_jsonb.sql +52 -0
  89. package/dist/drizzle/0083_computer_runbooks.sql +103 -0
  90. package/dist/drizzle/0084_artifacts_favorited_at.sql +32 -0
  91. package/dist/drizzle/0085_seed_thinkwork_computer_default_template.sql +46 -0
  92. package/dist/drizzle/0086_update_default_template_models.sql +19 -0
  93. package/dist/drizzle/0087_retire_oss_connectors.sql +77 -0
  94. package/dist/drizzle/0088_compliance_event_types_finance_pilot.sql +37 -0
  95. package/dist/drizzle/0089_remove_maniflow_eval_seeds.sql +81 -0
  96. package/dist/drizzle/0089_wiki_schema_extraction.sql +315 -0
  97. package/dist/drizzle/0090_brain_schema_extraction.sql +274 -0
  98. package/dist/drizzle/0091_drop_wiki_brain_compat_views.sql +118 -0
  99. package/dist/drizzle/0092_finish_oss_connector_retirement.sql +97 -0
  100. package/dist/drizzle/0093_eval_runs_scheduled_job_id.sql +23 -0
  101. package/dist/drizzle/0094_slack_workspace_app.sql +140 -0
  102. package/dist/drizzle/0095_eval_runs_computer_id.sql +22 -0
  103. package/dist/drizzle/0096_true_redteam_eval_seed_cleanup.sql +67 -0
  104. package/dist/drizzle/0097_shared_computers.sql +191 -0
  105. package/dist/drizzle/0098_business_ontology.sql +587 -0
  106. package/dist/drizzle/0099_thread_idle_learning.sql +145 -0
  107. package/dist/drizzle/0100_ontology_gated_brain_dynamic_subtypes.sql +7 -0
  108. package/dist/drizzle/0101_ontology_gated_unresolved_mentions_dynamic_subtypes.sql +7 -0
  109. package/dist/drizzle/0102_wiki_brain_owner_repair.sql +87 -0
  110. package/dist/drizzle/0103_brain_section_source_trigger_repair.sql +75 -0
  111. package/dist/drizzle/0104_expand_seed_ontology_for_user_memory.sql +166 -0
  112. package/dist/drizzle/0105_spaces_domain.sql +349 -0
  113. package/dist/drizzle/0106_expand_seed_ontology_for_triples.sql +173 -0
  114. package/dist/drizzle/0106_space_threads_participants.sql +197 -0
  115. package/dist/drizzle/0107_linked_task_mirror.sql +245 -0
  116. package/dist/drizzle/0108_message_mentions.sql +95 -0
  117. package/dist/drizzle/0109_space_owned_threads.sql +217 -0
  118. package/dist/drizzle/0110_thread_participant_read_state.sql +21 -0
  119. package/dist/drizzle/0111_agents_tenant_name_unique.sql +38 -0
  120. package/dist/drizzle/0112_recast_spaces_as_contextual_workrooms.sql +138 -0
  121. package/dist/drizzle/0113_agents_own_runtime_fields.sql +48 -0
  122. package/dist/drizzle/0114_migrate_templates_to_agents_and_spaces.sql +361 -0
  123. package/dist/drizzle/0115_remove_computer_eval_template_dependencies.sql +69 -0
  124. package/dist/drizzle/0116_backfill_thread_participants_access.sql +126 -0
  125. package/dist/drizzle/0117_space_access_mode.sql +40 -0
  126. package/dist/drizzle/0118_normalize_tenant_member_principal_type.sql +41 -0
  127. package/dist/drizzle/0119_space_knowledge_bases.sql +126 -0
  128. package/dist/drizzle/0120_space_automations.sql +58 -0
  129. package/dist/drizzle/0121_drop_computer_runbooks.sql +26 -0
  130. package/dist/drizzle/0122_space_email_triggers.sql +24 -0
  131. package/dist/drizzle/0123_single_platform_agent_and_overrides.sql +58 -0
  132. package/dist/drizzle/0124_thread_turns_finalized_at.sql +17 -0
  133. package/dist/drizzle/0125_drop_space_agent_assignments.sql +42 -0
  134. package/dist/drizzle/0126_migrate_flue_to_pi.sql +42 -0
  135. package/dist/drizzle/0127_runtime_type_observability.sql +28 -0
  136. package/dist/drizzle/0128_drop_eval_test_cases_agent_id.sql +37 -0
  137. package/dist/drizzle/0129_drop_code_factory_tables.sql +43 -0
  138. package/dist/drizzle/0129_eval_results_system_prompt.sql +30 -0
  139. package/dist/drizzle/0130_drop_teams_and_team_id_columns.sql +54 -0
  140. package/dist/drizzle/0131_drop_skill_catalog_and_tenant_skills.sql +33 -0
  141. package/dist/drizzle/0132_drop_computer_tables.sql +31 -0
  142. package/dist/drizzle/0133_drop_seed_view_tombstones.sql +79 -0
  143. package/dist/drizzle/0133_thread_turns_system_prompt.sql +22 -0
  144. package/dist/drizzle/0134_drop_dead_agent_runtime_tables.sql +53 -0
  145. package/dist/drizzle/0135_native_checklist_linked_tasks.sql +48 -0
  146. package/dist/drizzle/0136_goal_ledger.sql +55 -0
  147. package/dist/drizzle/0136_space_email_trigger_status.sql +66 -0
  148. package/dist/drizzle/0137_thread_participant_pins.sql +25 -0
  149. package/dist/drizzle/0138_users_cognito_sub.sql +30 -0
  150. package/dist/drizzle/0139_mobile_turn_client_id.sql +23 -0
  151. package/dist/drizzle/0140_workspace_folder_names.sql +36 -0
  152. package/dist/drizzle/0141_eval_runs_desktop_pi_provenance.sql +31 -0
  153. package/dist/drizzle/0142_pi_only_agent_runtime.sql +61 -0
  154. package/dist/drizzle/0143_add_web_extract_builtin_config.sql +28 -0
  155. package/dist/drizzle/0144_skill_catalog_index.sql +40 -0
  156. package/dist/drizzle/0145_knowledge_graph_thread_ingest.sql +512 -0
  157. package/dist/drizzle/0146_knowledge_graph_source_scope.sql +413 -0
  158. package/dist/drizzle/0147_knowledge_graph_scope_trigger_qualification.sql +211 -0
  159. package/dist/drizzle/0148_user_cost_attribution.sql +171 -0
  160. package/dist/drizzle/0149_managed_mcp_servers.sql +64 -0
  161. package/dist/drizzle/0149_user_model_approvals.sql +89 -0
  162. package/dist/drizzle/0150_bootstrap_first_admin_claim.sql +11 -0
  163. package/dist/drizzle/0151_managed_deployments.sql +91 -0
  164. package/dist/drizzle/0152_agent_profiles.sql +81 -0
  165. package/dist/drizzle/0153_message_mentions_agent_profile.sql +9 -0
  166. package/dist/drizzle/0154_customer_deployment_sessions.sql +61 -0
  167. package/dist/drizzle/0155_tenant_model_catalog.sql +152 -0
  168. package/dist/drizzle/0156_bootstrap_credential_leases.sql +52 -0
  169. package/dist/drizzle/0157_knowledge_graph_observations_source.sql +79 -0
  170. package/dist/drizzle/0158_pending_user_questions.sql +80 -0
  171. package/dist/drizzle/0158_wiki_tenant_scope.sql +38 -0
  172. package/dist/drizzle/0159_agent_profiles_space_local.sql +49 -0
  173. package/dist/drizzle/0159_application_plugins.sql +193 -0
  174. package/dist/drizzle/0159_eval_scoring_version.sql +46 -0
  175. package/dist/drizzle/0160_compliance_event_types_plugins.sql +37 -0
  176. package/dist/drizzle/0160_eval_datasets.sql +75 -0
  177. package/dist/drizzle/0160_eval_results_thread_turn.sql +35 -0
  178. package/dist/drizzle/0161_eval_run_pinning.sql +54 -0
  179. package/dist/drizzle/0161_tenant_mcp_servers_plugin_source.sql +62 -0
  180. package/dist/drizzle/0162_eval_result_override.sql +49 -0
  181. package/dist/drizzle/0163_eval_replay_tool_allowlist.sql +50 -0
  182. package/dist/drizzle/0164_eval_replay_tool_override_mode.sql +52 -0
  183. package/dist/drizzle/0165_plugin_premium_entitlements.sql +153 -0
  184. package/dist/drizzle/0166_company_brain_substrate_contract.sql +386 -0
  185. package/dist/drizzle/0167_company_brain_artifact_manifest_runtime.sql +85 -0
  186. package/dist/drizzle/0168_eval_skill_gate.sql +44 -0
  187. package/dist/drizzle/0169_release_update_jobs.sql +67 -0
  188. package/dist/drizzle/0170_email_channel_plugin.sql +291 -0
  189. package/dist/drizzle/0171_linked_task_external_providers.sql +30 -0
  190. package/dist/drizzle/0172_email_channel_sendgrid_provider.sql +8 -0
  191. package/dist/drizzle/0173_auth_provider_resources.sql +83 -0
  192. package/dist/drizzle/0174_workos_auth_bridges.sql +37 -0
  193. package/dist/drizzle/0175_workos_auth_sessions.sql +38 -0
  194. package/dist/drizzle/0176_n8n_agent_step_runs.sql +107 -0
  195. package/dist/drizzle/0177_workflow_control_plane.sql +281 -0
  196. package/dist/drizzle/0178_workflow_backfill_existing_routines.sql +525 -0
  197. package/dist/drizzle/0179_tenant_goal_budget_settings.sql +21 -0
  198. package/dist/drizzle/0180_skill_drafts.sql +89 -0
  199. package/dist/drizzle/0181_skill_draft_publish_status.sql +21 -0
  200. package/dist/drizzle/0182_agent_loops.sql +260 -0
  201. package/dist/drizzle/0183_okf_artifact_manifests.sql +52 -0
  202. package/dist/drizzle/0184_skill_catalog_trust_cache.sql +35 -0
  203. package/dist/drizzle/0185_agent_loop_space.sql +16 -0
  204. package/dist/drizzle/0186_tenant_mcp_runtime_metadata.sql +10 -0
  205. package/dist/drizzle/0187_native_work_items.sql +220 -0
  206. package/dist/drizzle/0188_company_etl_plugin_rename.sql +99 -0
  207. package/dist/drizzle/0189_trace_cost_substrate.sql +247 -0
  208. package/dist/drizzle/0190_billing_export_reconciliation.sql +101 -0
  209. package/dist/drizzle/0191_open_engine_work_item_queue.sql +66 -0
  210. package/dist/drizzle/0192_work_item_labels.sql +44 -0
  211. package/dist/drizzle/0193_work_item_documents.sql +31 -0
  212. package/dist/drizzle/0194_memory_retain_attempts.sql +103 -0
  213. package/dist/drizzle/0194_work_item_comments.sql +35 -0
  214. package/dist/drizzle/0195_plugin_app_overlays.sql +45 -0
  215. package/dist/drizzle/0196_pi_extensions.sql +118 -0
  216. package/dist/drizzle/0197_eval_profiles.sql +150 -0
  217. package/dist/drizzle/0198_eval_runs_unstable.sql +27 -0
  218. package/dist/drizzle/0199_eval_runs_cost_partial.sql +27 -0
  219. package/dist/drizzle/meta/_journal.json +160 -0
  220. package/dist/plugins/README.md +162 -0
  221. package/dist/plugins/catalog/package.json +40 -0
  222. package/dist/plugins/catalog/scripts/build-catalog.ts +120 -0
  223. package/dist/plugins/catalog/scripts/generate-plugin-registry.ts +144 -0
  224. package/dist/plugins/catalog/src/__tests__/build-catalog.test.ts +86 -0
  225. package/dist/plugins/catalog/src/__tests__/catalog.test.ts +308 -0
  226. package/dist/plugins/catalog/src/__tests__/contracts.test.ts +861 -0
  227. package/dist/plugins/catalog/src/__tests__/plugin-package.test.ts +124 -0
  228. package/dist/plugins/catalog/src/__tests__/plugin-registry.test.ts +120 -0
  229. package/dist/plugins/catalog/src/catalog.ts +434 -0
  230. package/dist/plugins/catalog/src/contracts.ts +1498 -0
  231. package/dist/plugins/catalog/src/index.ts +4 -0
  232. package/dist/plugins/catalog/src/plugin-package.ts +171 -0
  233. package/dist/plugins/catalog/src/registry/generated-first-party.ts +76 -0
  234. package/dist/plugins/catalog/src/registry/index.ts +1 -0
  235. package/dist/plugins/catalog/tsconfig.json +8 -0
  236. package/dist/plugins/company-brain/README.md +37 -0
  237. package/dist/plugins/company-brain/package.json +33 -0
  238. package/dist/plugins/company-brain/runtime/cognee/Dockerfile +11 -0
  239. package/dist/plugins/company-brain/smoke/cognee-managed-app-smoke.mjs +458 -0
  240. package/dist/plugins/company-brain/smoke/cognee-memory-cutover-smoke.mjs +539 -0
  241. package/dist/plugins/company-brain/smoke/company-brain-context-engine-smoke.mjs +312 -0
  242. package/dist/plugins/company-brain/smoke/company-brain-operations-smoke.mjs +449 -0
  243. package/dist/plugins/company-brain/smoke/company-brain-plugin-smoke.mjs +655 -0
  244. package/dist/plugins/company-brain/smoke/hindsight-memory-isolation-smoke.mjs +474 -0
  245. package/dist/plugins/company-brain/src/api/cognee-client.ts +896 -0
  246. package/dist/plugins/company-brain/src/api/cognee-cluster-identity.ts +49 -0
  247. package/dist/plugins/company-brain/src/api/cognee-memory-scope.ts +84 -0
  248. package/dist/plugins/company-brain/src/api/context-engine-provider.ts +888 -0
  249. package/dist/plugins/company-brain/src/api/migration.ts +665 -0
  250. package/dist/plugins/company-brain/src/deployment/cognee-managed-app.ts +396 -0
  251. package/dist/plugins/company-brain/src/index.ts +62 -0
  252. package/dist/plugins/company-brain/src/manifest.ts +112 -0
  253. package/dist/plugins/company-brain/terraform/cognee/README.md +263 -0
  254. package/dist/plugins/company-brain/terraform/cognee/main.tf +766 -0
  255. package/dist/plugins/company-brain/terraform/cognee/outputs.tf +144 -0
  256. package/dist/plugins/company-brain/terraform/cognee/variables.tf +402 -0
  257. package/dist/plugins/company-brain/test/api/cognee-client.test.ts +562 -0
  258. package/dist/plugins/company-brain/test/api/cognee-memory-scope.test.ts +74 -0
  259. package/dist/plugins/company-brain/test/api/context-engine-provider.test.ts +447 -0
  260. package/dist/plugins/company-brain/test/api/migration.test.ts +465 -0
  261. package/dist/plugins/company-brain/test/manifest.test.ts +95 -0
  262. package/dist/plugins/company-brain/tsconfig.json +8 -0
  263. package/dist/plugins/company-data/README.md +49 -0
  264. package/dist/plugins/company-data/package.json +21 -0
  265. package/dist/plugins/company-data/src/index.ts +30 -0
  266. package/dist/plugins/company-data/src/manifest.ts +26 -0
  267. package/dist/plugins/company-data/test/manifest.test.ts +116 -0
  268. package/dist/plugins/company-data/tsconfig.json +8 -0
  269. package/dist/plugins/company-etl/README.md +46 -0
  270. package/dist/plugins/company-etl/package.json +21 -0
  271. package/dist/plugins/company-etl/src/index.ts +29 -0
  272. package/dist/plugins/company-etl/src/manifest.ts +26 -0
  273. package/dist/plugins/company-etl/test/manifest.test.ts +108 -0
  274. package/dist/plugins/company-etl/tsconfig.json +8 -0
  275. package/dist/plugins/email-channel/README.md +41 -0
  276. package/dist/plugins/email-channel/package.json +22 -0
  277. package/dist/plugins/email-channel/src/index.ts +36 -0
  278. package/dist/plugins/email-channel/src/manifest.ts +44 -0
  279. package/dist/plugins/email-channel/src/provider-contract.ts +36 -0
  280. package/dist/plugins/email-channel/test/manifest.test.ts +119 -0
  281. package/dist/plugins/email-channel/tsconfig.json +8 -0
  282. package/dist/plugins/lastmile/README.md +50 -0
  283. package/dist/plugins/lastmile/package.json +23 -0
  284. package/dist/plugins/lastmile/smoke/lastmile-plugin-smoke.mjs +661 -0
  285. package/dist/plugins/lastmile/src/api/tasks-adapter.ts +572 -0
  286. package/dist/plugins/lastmile/src/discovery.fixture.ts +64 -0
  287. package/dist/plugins/lastmile/src/index.ts +46 -0
  288. package/dist/plugins/lastmile/src/manifest.ts +139 -0
  289. package/dist/plugins/lastmile/test/api/tasks-adapter.test.ts +266 -0
  290. package/dist/plugins/lastmile/test/discovery.test.ts +88 -0
  291. package/dist/plugins/lastmile/tsconfig.json +8 -0
  292. package/dist/plugins/n8n/README.md +201 -0
  293. package/dist/plugins/n8n/n8n-app/README.md +33 -0
  294. package/dist/plugins/n8n/n8n-app/package.json +23 -0
  295. package/dist/plugins/n8n/n8n-app/src/application-config.ts +45 -0
  296. package/dist/plugins/n8n/n8n-app/src/front-components/thinkwork-workflows.front-component.tsx +970 -0
  297. package/dist/plugins/n8n/n8n-app/src/lib/n8n-app-data.ts +190 -0
  298. package/dist/plugins/n8n/n8n-app/src/vite-env.d.ts +7 -0
  299. package/dist/plugins/n8n/n8n-app/tsconfig.json +15 -0
  300. package/dist/plugins/n8n/package.json +35 -0
  301. package/dist/plugins/n8n/runtime/Dockerfile +18 -0
  302. package/dist/plugins/n8n/runtime/n8n-task-runners.json +14 -0
  303. package/dist/plugins/n8n/runtime/n8n-task-runners.json.template +14 -0
  304. package/dist/plugins/n8n/runtime/package-lock.json +13 -0
  305. package/dist/plugins/n8n/runtime/package.json +7 -0
  306. package/dist/plugins/n8n/scripts/sync-thinkwork-app.mjs +268 -0
  307. package/dist/plugins/n8n/smoke/README.md +95 -0
  308. package/dist/plugins/n8n/smoke/n8n-agent-step-bridge-smoke.mjs +866 -0
  309. package/dist/plugins/n8n/smoke/n8n-integrated-app-smoke.mjs +262 -0
  310. package/dist/plugins/n8n/smoke/n8n-managed-app-smoke.mjs +409 -0
  311. package/dist/plugins/n8n/smoke/n8n-mcp-smoke.mjs +624 -0
  312. package/dist/plugins/n8n/src/deployment/image-build.ts +172 -0
  313. package/dist/plugins/n8n/src/deployment/managed-app.ts +429 -0
  314. package/dist/plugins/n8n/src/index.ts +79 -0
  315. package/dist/plugins/n8n/src/manifest.ts +403 -0
  316. package/dist/plugins/n8n/src/package-config.ts +186 -0
  317. package/dist/plugins/n8n/src/skills/n8n-workflow-operator/SKILL.md +76 -0
  318. package/dist/plugins/n8n/src/skills/n8n-workflow-operator/references/mcp-tooling.md +40 -0
  319. package/dist/plugins/n8n/src/skills/n8n-workflow-operator/references/validation-and-handoff.md +40 -0
  320. package/dist/plugins/n8n/src/skills/n8n-workflow-operator/references/workflow-authoring.md +45 -0
  321. package/dist/plugins/n8n/terraform/n8n/README.md +113 -0
  322. package/dist/plugins/n8n/terraform/n8n/main.tf +918 -0
  323. package/dist/plugins/n8n/terraform/n8n/outputs.tf +124 -0
  324. package/dist/plugins/n8n/terraform/n8n/scripts/sync-database.py +250 -0
  325. package/dist/plugins/n8n/terraform/n8n/scripts/test_sync_database.py +55 -0
  326. package/dist/plugins/n8n/terraform/n8n/variables.tf +354 -0
  327. package/dist/plugins/n8n/test/image-build.test.ts +118 -0
  328. package/dist/plugins/n8n/test/integrated-app-contract.test.ts +353 -0
  329. package/dist/plugins/n8n/test/manifest.test.ts +278 -0
  330. package/dist/plugins/n8n/test/package-config.test.ts +57 -0
  331. package/dist/plugins/n8n/tsconfig.json +8 -0
  332. package/dist/plugins/sendgrid/README.md +30 -0
  333. package/dist/plugins/sendgrid/package.json +22 -0
  334. package/dist/plugins/sendgrid/src/index.ts +36 -0
  335. package/dist/plugins/sendgrid/src/manifest.ts +37 -0
  336. package/dist/plugins/sendgrid/src/provider-contract.ts +14 -0
  337. package/dist/plugins/sendgrid/test/manifest.test.ts +80 -0
  338. package/dist/plugins/sendgrid/tsconfig.json +8 -0
  339. package/dist/plugins/twenty/README.md +78 -0
  340. package/dist/plugins/twenty/package.json +27 -0
  341. package/dist/plugins/twenty/scripts/__tests__/sync-thinkwork-app.test.mjs +67 -0
  342. package/dist/plugins/twenty/scripts/sync-thinkwork-app.mjs +185 -0
  343. package/dist/plugins/twenty/scripts/wire-thinkwork-workflow.mjs +658 -0
  344. package/dist/plugins/twenty/smoke/twenty-managed-app-smoke.mjs +359 -0
  345. package/dist/plugins/twenty/smoke/twenty-mcp-oauth-smoke.mjs +574 -0
  346. package/dist/plugins/twenty/src/api/cutover.ts +209 -0
  347. package/dist/plugins/twenty/src/deployment/managed-app.ts +253 -0
  348. package/dist/plugins/twenty/src/index.ts +55 -0
  349. package/dist/plugins/twenty/src/manifest.ts +259 -0
  350. package/dist/plugins/twenty/terraform/twenty/README.md +97 -0
  351. package/dist/plugins/twenty/terraform/twenty/main.tf +829 -0
  352. package/dist/plugins/twenty/terraform/twenty/outputs.tf +79 -0
  353. package/dist/plugins/twenty/terraform/twenty/variables.tf +268 -0
  354. package/dist/plugins/twenty/test/api/cutover.test.ts +183 -0
  355. package/dist/plugins/twenty/test/manifest.test.ts +463 -0
  356. package/dist/plugins/twenty/tsconfig.json +9 -0
  357. package/dist/plugins/twenty/twenty-app/.nvmrc +1 -0
  358. package/dist/plugins/twenty/twenty-app/README.md +148 -0
  359. package/dist/plugins/twenty/twenty-app/package.json +30 -0
  360. package/dist/plugins/twenty/twenty-app/src/application-config.ts +44 -0
  361. package/dist/plugins/twenty/twenty-app/src/constants/universal-identifiers.ts +18 -0
  362. package/dist/plugins/twenty/twenty-app/src/default-role.ts +24 -0
  363. package/dist/plugins/twenty/twenty-app/src/front-components/thinkwork-settings.front-component.tsx +299 -0
  364. package/dist/plugins/twenty/twenty-app/src/logic-functions/thinkwork-webhook.logic-function.ts +354 -0
  365. package/dist/plugins/twenty/twenty-app/tsconfig.json +14 -0
  366. package/dist/plugins/twenty/twenty-app/yarn.lock +4144 -0
  367. package/dist/plugins/workos-auth/package.json +22 -0
  368. package/dist/plugins/workos-auth/src/index.ts +30 -0
  369. package/dist/plugins/workos-auth/src/manifest.ts +40 -0
  370. package/dist/plugins/workos-auth/src/provider-contract.ts +39 -0
  371. package/dist/plugins/workos-auth/test/manifest.test.ts +94 -0
  372. package/dist/plugins/workos-auth/tsconfig.json +8 -0
  373. package/dist/scripts/bootstrap-workspace.sh +162 -0
  374. package/dist/scripts/post-deploy.sh +290 -0
  375. package/dist/terraform/examples/greenfield/main.tf +903 -75
  376. package/dist/terraform/examples/greenfield/terraform.tfvars.example +67 -8
  377. package/dist/terraform/modules/app/agentcore-code-interpreter/Dockerfile.sandbox-base +2 -2
  378. package/dist/terraform/modules/app/agentcore-code-interpreter/README.md +8 -9
  379. package/dist/terraform/modules/app/agentcore-code-interpreter/sandbox/sitecustomize.py +227 -0
  380. package/dist/terraform/modules/app/agentcore-code-interpreter/sandbox/test_sitecustomize.py +277 -0
  381. package/dist/terraform/modules/app/agentcore-memory/README.md +6 -6
  382. package/dist/terraform/modules/app/agentcore-memory/main.tf +1 -1
  383. package/dist/terraform/modules/app/agentcore-memory/scripts/create_or_find_memory.sh +40 -9
  384. package/dist/terraform/modules/app/agentcore-pi/README.md +61 -0
  385. package/dist/terraform/modules/app/agentcore-pi/main.tf +453 -0
  386. package/dist/terraform/modules/app/agentcore-pi/outputs.tf +38 -0
  387. package/dist/terraform/modules/app/agentcore-pi/variables.tf +145 -0
  388. package/dist/terraform/modules/app/agentcore-platform/main.tf +83 -0
  389. package/dist/terraform/modules/app/agentcore-runtime/main.tf +9 -11
  390. package/dist/terraform/modules/app/appsync-subscriptions/main.tf +5 -1
  391. package/dist/terraform/modules/app/customer-domain/main.tf +483 -0
  392. package/dist/terraform/modules/app/deployment-control-plane/README.md +47 -0
  393. package/dist/terraform/modules/app/deployment-control-plane/buildspec.yml +24 -0
  394. package/dist/terraform/modules/app/deployment-control-plane/main.tf +614 -0
  395. package/dist/terraform/modules/app/deployment-control-plane/outputs.tf +54 -0
  396. package/dist/terraform/modules/app/deployment-control-plane/runner.py +4720 -0
  397. package/dist/terraform/modules/app/deployment-control-plane/test_runner_bundle.py +3026 -0
  398. package/dist/terraform/modules/app/deployment-control-plane/variables.tf +96 -0
  399. package/dist/terraform/modules/app/hindsight-memory/README.md +25 -23
  400. package/dist/terraform/modules/app/hindsight-memory/main.tf +26 -2
  401. package/dist/terraform/modules/app/lambda-api/eval-fanout.tf +17 -50
  402. package/dist/terraform/modules/app/lambda-api/handlers.tf +1290 -679
  403. package/dist/terraform/modules/app/lambda-api/iam-grouped.tf +933 -0
  404. package/dist/terraform/modules/app/lambda-api/main.tf +14 -527
  405. package/dist/terraform/modules/app/lambda-api/mcp-oauth.tf +3 -19
  406. package/dist/terraform/modules/app/lambda-api/outputs.tf +50 -6
  407. package/dist/terraform/modules/app/lambda-api/runtime-config.tf +163 -0
  408. package/dist/terraform/modules/app/lambda-api/slack-app-secrets.tf +3 -1
  409. package/dist/terraform/modules/app/lambda-api/stripe-secrets.tf +3 -1
  410. package/dist/terraform/modules/app/lambda-api/variables.tf +240 -53
  411. package/dist/terraform/modules/app/lambda-api/workspace-events.tf +2 -25
  412. package/dist/terraform/modules/app/ses-email/main.tf +143 -30
  413. package/dist/terraform/modules/app/static-site/main.tf +4 -3
  414. package/dist/terraform/modules/app/www-dns/main.tf +45 -5
  415. package/dist/terraform/modules/app/www-dns/outputs.tf +10 -0
  416. package/dist/terraform/modules/app/www-dns/variables.tf +24 -0
  417. package/dist/terraform/modules/data/aurora-postgres/main.tf +15 -1
  418. package/dist/terraform/modules/data/compliance-exports-bucket/main.tf +1 -1
  419. package/dist/terraform/modules/data/compliance-exports-bucket/variables.tf +6 -0
  420. package/dist/terraform/modules/foundation/cognito/main.tf +167 -11
  421. package/dist/terraform/modules/foundation/cognito/outputs.tf +5 -0
  422. package/dist/terraform/modules/foundation/cognito/variables.tf +110 -0
  423. package/dist/terraform/modules/foundation/vpc/main.tf +45 -3
  424. package/dist/terraform/modules/foundation/vpc/outputs.tf +20 -0
  425. package/dist/terraform/modules/foundation/vpc/variables.tf +18 -0
  426. package/dist/terraform/modules/thinkwork/README.md +71 -0
  427. package/dist/terraform/modules/thinkwork/main.tf +1325 -174
  428. package/dist/terraform/modules/thinkwork/outputs.tf +457 -24
  429. package/dist/terraform/modules/thinkwork/variables.tf +1169 -93
  430. package/dist/terraform/schema.graphql +82 -9
  431. package/dist/workspace-defaults/files/AGENTS.md +344 -0
  432. package/dist/workspace-defaults/files/CONTEXT.md +8 -0
  433. package/dist/workspace-defaults/files/GUARDRAILS.md +51 -0
  434. package/dist/workspace-defaults/files/MEMORY_GUIDE.md +65 -0
  435. package/dist/workspace-defaults/files/ROUTER.md +24 -0
  436. package/dist/workspace-defaults/files/SPACE.md +62 -0
  437. package/dist/workspace-defaults/files/TOOLS.md +65 -0
  438. package/dist/workspace-defaults/files/USER.md +40 -0
  439. package/dist/workspace-defaults/files/mcp.json +3 -0
  440. package/dist/workspace-defaults/files/memory/contacts.md +13 -0
  441. package/dist/workspace-defaults/files/memory/lessons.md +13 -0
  442. package/dist/workspace-defaults/files/memory/preferences.md +12 -0
  443. package/dist/workspace-defaults/files/skills/.gitkeep +1 -0
  444. package/dist/workspace-defaults/files/skills/artifact-builder/SKILL.md +79 -0
  445. package/dist/workspace-defaults/files/skills/artifact-builder/references/crm-dashboard.md +166 -0
  446. package/dist/workspace-defaults/files/skills/automation-loop-designer/SKILL.md +120 -0
  447. package/dist/workspace-defaults/files/skills/skill-creator/LICENSE.txt +202 -0
  448. package/dist/workspace-defaults/files/skills/skill-creator/SKILL.md +485 -0
  449. package/dist/workspace-defaults/files/skills/skill-creator/UPSTREAM.json +124 -0
  450. package/dist/workspace-defaults/files/skills/skill-creator/agents/analyzer.md +274 -0
  451. package/dist/workspace-defaults/files/skills/skill-creator/agents/comparator.md +202 -0
  452. package/dist/workspace-defaults/files/skills/skill-creator/agents/grader.md +223 -0
  453. package/dist/workspace-defaults/files/skills/skill-creator/assets/eval_review.html +146 -0
  454. package/dist/workspace-defaults/files/skills/skill-creator/eval-viewer/generate_review.py +471 -0
  455. package/dist/workspace-defaults/files/skills/skill-creator/eval-viewer/viewer.html +1325 -0
  456. package/dist/workspace-defaults/files/skills/skill-creator/references/schemas.md +430 -0
  457. package/dist/workspace-defaults/files/skills/skill-creator/scripts/__init__.py +0 -0
  458. package/dist/workspace-defaults/files/skills/skill-creator/scripts/aggregate_benchmark.py +401 -0
  459. package/dist/workspace-defaults/files/skills/skill-creator/scripts/generate_report.py +326 -0
  460. package/dist/workspace-defaults/files/skills/skill-creator/scripts/improve_description.py +247 -0
  461. package/dist/workspace-defaults/files/skills/skill-creator/scripts/package_skill.py +136 -0
  462. package/dist/workspace-defaults/files/skills/skill-creator/scripts/quick_validate.py +103 -0
  463. package/dist/workspace-defaults/files/skills/skill-creator/scripts/run_eval.py +310 -0
  464. package/dist/workspace-defaults/files/skills/skill-creator/scripts/run_loop.py +328 -0
  465. package/dist/workspace-defaults/files/skills/skill-creator/scripts/utils.py +47 -0
  466. package/package.json +1 -1
  467. package/dist/terraform/modules/app/agentcore-flue/README.md +0 -58
  468. package/dist/terraform/modules/app/agentcore-flue/main.tf +0 -323
  469. package/dist/terraform/modules/app/agentcore-flue/outputs.tf +0 -23
  470. package/dist/terraform/modules/app/agentcore-flue/variables.tf +0 -97
  471. package/dist/terraform/modules/app/computer-runtime/README.md +0 -15
  472. package/dist/terraform/modules/app/computer-runtime/main.tf +0 -406
  473. package/dist/terraform/modules/app/computer-runtime/outputs.tf +0 -75
  474. package/dist/terraform/modules/app/computer-runtime/variables.tf +0 -66
@@ -18,6 +18,12 @@
18
18
 
19
19
  data "aws_caller_identity" "current" {}
20
20
 
21
+ locals {
22
+ cognee_worker_vpc_enabled = var.cognee_enabled && length(var.cognee_worker_subnet_ids) > 0 && length(var.cognee_worker_security_group_ids) > 0
23
+ okf_efs_vpc_enabled = length(var.okf_efs_subnet_ids) > 0 && length(var.okf_efs_security_group_ids) > 0
24
+ api_base_url = var.custom_domain != "" ? "https://${var.custom_domain}" : trimsuffix(aws_apigatewayv2_stage.default.invoke_url, "/")
25
+ }
26
+
21
27
  ################################################################################
22
28
  # API Gateway V2 — HTTP API
23
29
  ################################################################################
@@ -144,536 +150,17 @@ resource "aws_iam_role_policy_attachment" "lambda_basic" {
144
150
  policy_arn = "arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
145
151
  }
146
152
 
147
- resource "aws_iam_role_policy_attachment" "computer_runtime_manager" {
148
- # No count guard: module.computer_runtime is unconditional (see
149
- # terraform/modules/thinkwork/main.tf), so the policy ARN is always
150
- # populated. A `count = var.X != "" ? 1 : 0` guard fails terraform
151
- # plan with "Invalid count argument" because var.X resolves from
152
- # aws_iam_policy.manager.arn — a computed attribute only known at
153
- # apply time, not at plan time. If a future caller wants to make
154
- # this attachment conditional, gate it on a known-at-plan-time
155
- # boolean variable rather than the ARN string.
156
- role = aws_iam_role.lambda.name
157
- policy_arn = var.computer_runtime_manager_policy_arn
158
- }
159
-
160
- resource "aws_iam_role_policy" "lambda_rds" {
161
- name = "rds-data-api"
162
- role = aws_iam_role.lambda.id
163
-
164
- policy = jsonencode({
165
- Version = "2012-10-17"
166
- Statement = [{
167
- Effect = "Allow"
168
- Action = [
169
- "rds-data:ExecuteStatement",
170
- "rds-data:BatchExecuteStatement",
171
- "rds-data:BeginTransaction",
172
- "rds-data:CommitTransaction",
173
- "rds-data:RollbackTransaction",
174
- ]
175
- Resource = var.db_cluster_arn
176
- }]
177
- })
178
- }
179
-
180
- resource "aws_iam_role_policy" "lambda_secrets" {
181
- name = "secrets-manager"
182
- role = aws_iam_role.lambda.id
183
-
184
- policy = jsonencode({
185
- Version = "2012-10-17"
186
- Statement = [
187
- {
188
- Effect = "Allow"
189
- Action = ["secretsmanager:GetSecretValue"]
190
- Resource = var.graphql_db_secret_arn
191
- },
192
- {
193
- Effect = "Allow"
194
- Action = [
195
- "secretsmanager:CreateSecret",
196
- "secretsmanager:UpdateSecret",
197
- "secretsmanager:DeleteSecret",
198
- "secretsmanager:GetSecretValue"
199
- ]
200
- Resource = "arn:aws:secretsmanager:${var.region}:${var.account_id}:secret:thinkwork/*"
201
- }
202
- ]
203
- })
204
- }
205
-
206
- resource "aws_iam_role_policy" "lambda_s3" {
207
- name = "s3-access"
208
- role = aws_iam_role.lambda.id
209
-
210
- policy = jsonencode({
211
- Version = "2012-10-17"
212
- Statement = [{
213
- Effect = "Allow"
214
- Action = [
215
- "s3:GetObject",
216
- "s3:PutObject",
217
- "s3:DeleteObject",
218
- "s3:ListBucket",
219
- ]
220
- Resource = [
221
- var.bucket_arn,
222
- "${var.bucket_arn}/*",
223
- ]
224
- }]
225
- })
226
- }
227
-
228
- resource "aws_iam_role_policy" "lambda_cognito" {
229
- name = "cognito-access"
230
- role = aws_iam_role.lambda.id
231
-
232
- policy = jsonencode({
233
- Version = "2012-10-17"
234
- Statement = [{
235
- Effect = "Allow"
236
- Action = [
237
- "cognito-idp:AdminCreateUser",
238
- "cognito-idp:AdminGetUser",
239
- "cognito-idp:AdminUpdateUserAttributes",
240
- "cognito-idp:ListUsers",
241
- ]
242
- Resource = var.user_pool_arn
243
- }]
244
- })
245
- }
246
-
247
- resource "aws_iam_role_policy" "lambda_cloudwatch_read" {
248
- name = "cloudwatch-logs-read"
249
- role = aws_iam_role.lambda.id
250
-
251
- policy = jsonencode({
252
- Version = "2012-10-17"
253
- Statement = [{
254
- Effect = "Allow"
255
- Action = ["logs:FilterLogEvents", "logs:GetLogEvents", "logs:DescribeLogGroups"]
256
- Resource = "arn:aws:logs:${var.region}:${var.account_id}:log-group:*model-invocations*"
257
- }]
258
- })
259
- }
260
-
261
- resource "aws_iam_role_policy" "lambda_bedrock" {
262
- name = "bedrock-invoke"
263
- role = aws_iam_role.lambda.id
264
-
265
- # Cross-region inference profiles (us.anthropic.claude-*) require
266
- # `bedrock:InvokeModel` on the *inference-profile* ARN AND on the
267
- # underlying foundation-model ARN in *every* region the profile can
268
- # route to (e.g. us-east-2 for us.anthropic.claude-haiku-4-5). The
269
- # region wildcard below covers all of them. Needed by the eval-runner
270
- # llm-rubric judge and any handler that calls Converse with a profile ID.
271
- policy = jsonencode({
272
- Version = "2012-10-17"
273
- Statement = [{
274
- Effect = "Allow"
275
- Action = ["bedrock:InvokeModel", "bedrock:InvokeModelWithResponseStream"]
276
- Resource = [
277
- "arn:aws:bedrock:*::foundation-model/*",
278
- "arn:aws:bedrock:*:${var.account_id}:inference-profile/*",
279
- ]
280
- }]
281
- })
282
- }
283
-
284
- # SES send permissions for the email-send handler. Scoped to any
285
- # verified identity in this account+region so the email-send Lambda
286
- # can SendRawEmail from agents.thinkwork.ai (and any other domain
287
- # identity a future deployment might add).
288
- resource "aws_iam_role_policy" "lambda_ses_send" {
289
- name = "ses-send"
290
- role = aws_iam_role.lambda.id
291
-
292
- policy = jsonencode({
293
- Version = "2012-10-17"
294
- Statement = [{
295
- Effect = "Allow"
296
- Action = [
297
- "ses:SendEmail",
298
- "ses:SendRawEmail",
299
- ]
300
- Resource = [
301
- "arn:aws:ses:${var.region}:${var.account_id}:identity/*",
302
- "arn:aws:ses:${var.region}:${var.account_id}:configuration-set/*",
303
- ]
304
- }]
305
- })
306
- }
307
-
308
- # Allow API Lambdas to directly invoke the AgentCore Lambda. Used by
309
- # chat-agent-invoke (and future wake-up/retry paths) via InvokeCommand.
310
- resource "aws_iam_role_policy" "lambda_agentcore_invoke" {
311
- count = var.agentcore_function_arn != "" ? 1 : 0
312
- name = "agentcore-invoke"
313
- role = aws_iam_role.lambda.id
314
-
315
- policy = jsonencode({
316
- Version = "2012-10-17"
317
- Statement = [{
318
- Effect = "Allow"
319
- Action = [
320
- "lambda:InvokeFunction",
321
- ]
322
- Resource = compact([
323
- var.agentcore_function_arn,
324
- "${var.agentcore_function_arn}:*",
325
- var.agentcore_flue_function_arn,
326
- var.agentcore_flue_function_arn != "" ? "${var.agentcore_flue_function_arn}:*" : "",
327
- ])
328
- }]
329
- })
330
- }
331
-
332
- # Eval-runner: invoke the AgentCore Runtime data plane to run an agent
333
- # under test, and call AgentCore Evaluations.Evaluate to score the
334
- # resulting spans. Both APIs are on the bedrock-agentcore service. Also
335
- # allow reading spans + log events from CloudWatch Logs (aws/spans is
336
- # the Transaction Search destination; the runtime log groups carry the
337
- # OTel scope=strands.telemetry.tracer log records that EvaluateCommand
338
- # requires alongside the spans).
339
- resource "aws_iam_role_policy" "lambda_eval_runner" {
340
- name = "eval-runner-bedrock-agentcore"
341
- role = aws_iam_role.lambda.id
342
-
343
- policy = jsonencode({
344
- Version = "2012-10-17"
345
- Statement = [
346
- {
347
- Sid = "AgentCoreInvokeRuntime"
348
- Effect = "Allow"
349
- Action = ["bedrock-agentcore:InvokeAgentRuntime"]
350
- Resource = "arn:aws:bedrock-agentcore:${var.region}:${var.account_id}:runtime/*"
351
- },
352
- {
353
- Sid = "AgentCoreEvaluate"
354
- Effect = "Allow"
355
- Action = [
356
- "bedrock-agentcore:Evaluate",
357
- "bedrock-agentcore:GetEvaluator",
358
- "bedrock-agentcore:ListEvaluators",
359
- ]
360
- Resource = "*"
361
- },
362
- {
363
- Sid = "EvalSpansRead"
364
- Effect = "Allow"
365
- Action = [
366
- "logs:FilterLogEvents",
367
- "logs:GetLogEvents",
368
- "logs:DescribeLogGroups",
369
- "logs:DescribeLogStreams",
370
- ]
371
- Resource = [
372
- "arn:aws:logs:${var.region}:${var.account_id}:log-group:aws/spans",
373
- "arn:aws:logs:${var.region}:${var.account_id}:log-group:aws/spans:*",
374
- "arn:aws:logs:${var.region}:${var.account_id}:log-group:/aws/bedrock-agentcore/runtimes/*",
375
- "arn:aws:logs:${var.region}:${var.account_id}:log-group:/aws/bedrock-agentcore/runtimes/*:*",
376
- ]
377
- },
378
- {
379
- Sid = "SsmReadEvalRunnerCfg"
380
- Effect = "Allow"
381
- Action = ["ssm:GetParameter", "ssm:GetParameters"]
382
- Resource = "arn:aws:ssm:${var.region}:${var.account_id}:parameter/thinkwork/${var.stage}/agentcore/runtime-id-*"
383
- },
384
- ]
385
- })
386
- }
387
-
388
- # AgentCore Memory read access for the GraphQL memory resolvers.
389
- # memoryRecords / memorySearch call ListMemoryRecordsCommand to fetch
390
- # records across the tenant's agents.
391
- resource "aws_iam_role_policy" "lambda_agentcore_memory" {
392
- name = "agentcore-memory-rw"
393
- role = aws_iam_role.lambda.id
394
-
395
- policy = jsonencode({
396
- Version = "2012-10-17"
397
- Statement = [{
398
- Effect = "Allow"
399
- Action = [
400
- "bedrock-agentcore:ListMemoryRecords",
401
- "bedrock-agentcore:RetrieveMemoryRecords",
402
- "bedrock-agentcore:GetMemoryRecord",
403
- "bedrock-agentcore:BatchCreateMemoryRecords",
404
- "bedrock-agentcore:BatchUpdateMemoryRecords",
405
- "bedrock-agentcore:BatchDeleteMemoryRecords",
406
- "bedrock-agentcore:DeleteMemoryRecord",
407
- ]
408
- Resource = "*"
409
- }]
410
- })
411
- }
153
+ # All other IAM grants for aws_iam_role.lambda live in the four grouped
154
+ # customer-managed policies in iam-grouped.tf (R9, plan 2026-06-11-006 U6).
155
+ # Do not add inline aws_iam_role_policy resources to this role: the inline
156
+ # aggregate hit IAM's 10,240-byte cap on 2026-06-11 (#2378/#2379). New grants
157
+ # go into the grouped managed policies, never inline.
412
158
 
413
- # graphql-http's sendMessage mutation reads SSM parameters like
414
- # /thinkwork/${stage}/chat-agent-invoke-fn-arn to discover the direct
415
- # Lambda targets for cross-function invocation. Without this, the SSM
416
- # GetParameter call fails with AccessDenied, the caller silently
417
- # catches the error, and sendMessage falls back to the wakeup-processor
418
- # path — which doesn't load messages_history from Aurora. That's why
419
- # multi-turn chat was losing prior context: history was only loaded on
420
- # the direct path, which never ran.
421
- resource "aws_iam_role_policy" "lambda_ssm_read" {
422
- name = "ssm-param-read"
423
- role = aws_iam_role.lambda.id
424
-
425
- policy = jsonencode({
426
- Version = "2012-10-17"
427
- Statement = [
428
- {
429
- Effect = "Allow"
430
- Action = [
431
- "ssm:GetParameter",
432
- "ssm:GetParameters",
433
- ]
434
- Resource = "arn:aws:ssm:${var.region}:${var.account_id}:parameter/thinkwork/${var.stage}/*"
435
- },
436
- # SecureString parameters (e.g. /thinkwork/<stage>/google-places/api-key)
437
- # are encrypted with the default AWS-managed SSM key. The default key's
438
- # resource policy auto-grants Decrypt to any IAM principal with
439
- # ssm:GetParameter on the parameter via `kms:ViaService = ssm.*`, so
440
- # this explicit grant is a belt-and-suspenders clarification. If we
441
- # later move to a customer-managed KMS key, this is the scope that
442
- # needs updating.
443
- {
444
- Effect = "Allow"
445
- Action = ["kms:Decrypt"]
446
- Resource = "*"
447
- Condition = {
448
- StringEquals = {
449
- "kms:ViaService" = "ssm.${var.region}.amazonaws.com"
450
- }
451
- }
452
- },
453
- ]
454
- })
455
- }
159
+ resource "aws_iam_role_policy_attachment" "lambda_cognee_worker_vpc_access" {
160
+ count = local.cognee_worker_vpc_enabled || local.okf_efs_vpc_enabled ? 1 : 0
456
161
 
457
- # job-schedule-manager creates/updates/deletes EventBridge Scheduler
458
- # schedules (and the thinkwork-jobs schedule group on first use). Without
459
- # these permissions the manager Lambda threw silently and every scheduled
460
- # automation was orphaned with eb_schedule_name = null.
461
- resource "aws_iam_role_policy" "lambda_scheduler" {
462
- name = "eventbridge-scheduler-rw"
463
- role = aws_iam_role.lambda.id
464
-
465
- policy = jsonencode({
466
- Version = "2012-10-17"
467
- Statement = [
468
- {
469
- Effect = "Allow"
470
- Action = [
471
- "scheduler:CreateSchedule",
472
- "scheduler:UpdateSchedule",
473
- "scheduler:DeleteSchedule",
474
- "scheduler:GetSchedule",
475
- "scheduler:ListSchedules",
476
- "scheduler:CreateScheduleGroup",
477
- "scheduler:GetScheduleGroup",
478
- "scheduler:DeleteScheduleGroup",
479
- "scheduler:TagResource",
480
- ]
481
- Resource = "*"
482
- },
483
- # Scheduler.CreateSchedule takes a RoleArn for the target; AWS requires
484
- # the caller to have iam:PassRole on that role. Without this the
485
- # CreateSchedule call fails with AccessDenied even if the scheduler
486
- # permissions above are set.
487
- {
488
- Effect = "Allow"
489
- Action = ["iam:PassRole"]
490
- Resource = var.job_scheduler_role_arn != "" ? var.job_scheduler_role_arn : "*"
491
- },
492
- ]
493
- })
494
- }
495
-
496
- # Allow API handler Lambdas to invoke each other directly. sendMessage
497
- # dispatches to chat-agent-invoke for instant chat response; the memory
498
- # resolvers reach knowledge-base-manager and job-schedule-manager for
499
- # admin-driven operations. The existing lambda_agentcore_invoke policy
500
- # covers the Strands runtime Lambda only — this one covers internal
501
- # api-to-api calls. ARNs are constructed deterministically from the
502
- # handler naming pattern so we don't create a dependency cycle with the
503
- # handler resource.
504
- resource "aws_iam_role_policy" "lambda_api_cross_invoke" {
505
- name = "api-cross-function-invoke"
506
- role = aws_iam_role.lambda.id
507
-
508
- policy = jsonencode({
509
- Version = "2012-10-17"
510
- Statement = [{
511
- Effect = "Allow"
512
- Action = ["lambda:InvokeFunction"]
513
- Resource = [
514
- "arn:aws:lambda:${var.region}:${var.account_id}:function:thinkwork-${var.stage}-api-chat-agent-invoke",
515
- "arn:aws:lambda:${var.region}:${var.account_id}:function:thinkwork-${var.stage}-api-knowledge-base-manager",
516
- "arn:aws:lambda:${var.region}:${var.account_id}:function:thinkwork-${var.stage}-api-job-schedule-manager",
517
- # eval-runner: graphql-http's startEvalRun mutation Event-invokes
518
- # this asynchronously after inserting the eval_runs row.
519
- "arn:aws:lambda:${var.region}:${var.account_id}:function:thinkwork-${var.stage}-api-eval-runner",
520
- # wiki-compile: memory-retain Event-invokes this after a successful
521
- # retainTurn when the tenant's wiki_compile_enabled flag is on.
522
- # compileWikiNow admin mutation also Event-invokes.
523
- "arn:aws:lambda:${var.region}:${var.account_id}:function:thinkwork-${var.stage}-api-wiki-compile",
524
- # wiki-bootstrap-import: bootstrapJournalImport admin mutation
525
- # Event-invokes this for the long-running ingest path.
526
- "arn:aws:lambda:${var.region}:${var.account_id}:function:thinkwork-${var.stage}-api-wiki-bootstrap-import",
527
- # ontology-scan: startOntologySuggestionScan Event-invokes this
528
- # after inserting a durable scan job row.
529
- "arn:aws:lambda:${var.region}:${var.account_id}:function:thinkwork-${var.stage}-api-ontology-scan",
530
- # ontology-reprocess: approveOntologyChangeSet Event-invokes this
531
- # after inserting a durable reprocess job row.
532
- "arn:aws:lambda:${var.region}:${var.account_id}:function:thinkwork-${var.stage}-api-ontology-reprocess",
533
- # routine-resume: routine-approval-bridge (Phase B U8) invokes
534
- # this with RequestResponse after a HITL decideInboxItem
535
- # decision. Calls SendTaskSuccess/SendTaskFailure on the SFN
536
- # task token; idempotent on already-consumed tokens.
537
- "arn:aws:lambda:${var.region}:${var.account_id}:function:thinkwork-${var.stage}-api-routine-resume",
538
- # workspace-files-efs: workspace-files invokes this (RequestResponse)
539
- # for Computer-target list/get to bypass the computer_tasks queue
540
- # and read EFS directly. Standalone resource below.
541
- "arn:aws:lambda:${var.region}:${var.account_id}:function:thinkwork-${var.stage}-api-workspace-files-efs",
542
- ]
543
- }]
544
- })
545
- }
546
-
547
- resource "aws_iam_policy" "thread_idle_memory_learning_invoke" {
548
- name = "thinkwork-${var.stage}-thread-idle-memory-learning-invoke"
549
- description = "Allow API job-trigger Lambda to invoke requester idle memory learning worker."
550
-
551
- policy = jsonencode({
552
- Version = "2012-10-17"
553
- Statement = [{
554
- Effect = "Allow"
555
- Action = ["lambda:InvokeFunction"]
556
- Resource = "arn:aws:lambda:${var.region}:${var.account_id}:function:thinkwork-${var.stage}-api-thread-idle-memory-learning"
557
- }]
558
- })
559
- }
560
-
561
- resource "aws_iam_role_policy_attachment" "lambda_thread_idle_memory_learning_invoke" {
562
162
  role = aws_iam_role.lambda.name
563
- policy_arn = aws_iam_policy.thread_idle_memory_learning_invoke.arn
564
- }
565
-
566
- # Step Functions admin operations — for createRoutine / publishRoutineVersion
567
- # / triggerRoutineRun / updateRoutine resolvers (Phase B U7) and the
568
- # routine-asl-validator Lambda (Phase A U5). State-machine ARNs follow the
569
- # naming convention `thinkwork-${stage}-routine-*`; aliases follow the
570
- # state-machine ARN with a colon-separated alias name.
571
- resource "aws_iam_role_policy" "lambda_routines_stepfunctions" {
572
- name = "routines-step-functions"
573
- role = aws_iam_role.lambda.id
574
-
575
- policy = jsonencode({
576
- Version = "2012-10-17"
577
- Statement = [
578
- {
579
- Sid = "RoutineStateMachineLifecycle"
580
- Effect = "Allow"
581
- Action = [
582
- "states:CreateStateMachine",
583
- "states:UpdateStateMachine",
584
- "states:DeleteStateMachine",
585
- "states:DescribeStateMachine",
586
- "states:ListStateMachines",
587
- "states:TagResource",
588
- "states:UntagResource",
589
- "states:PublishStateMachineVersion",
590
- "states:DeleteStateMachineVersion",
591
- "states:ListStateMachineVersions",
592
- "states:CreateStateMachineAlias",
593
- "states:UpdateStateMachineAlias",
594
- "states:DeleteStateMachineAlias",
595
- "states:DescribeStateMachineAlias",
596
- "states:ListStateMachineAliases",
597
- "states:DescribeStateMachineForExecution",
598
- ]
599
- Resource = "arn:aws:states:${var.region}:${var.account_id}:stateMachine:thinkwork-${var.stage}-routine-*"
600
- },
601
- {
602
- Sid = "RoutineExecution"
603
- Effect = "Allow"
604
- Action = [
605
- "states:StartExecution",
606
- "states:StartSyncExecution",
607
- "states:StopExecution",
608
- "states:DescribeExecution",
609
- "states:ListExecutions",
610
- "states:GetExecutionHistory",
611
- ]
612
- Resource = [
613
- "arn:aws:states:${var.region}:${var.account_id}:stateMachine:thinkwork-${var.stage}-routine-*",
614
- "arn:aws:states:${var.region}:${var.account_id}:execution:thinkwork-${var.stage}-routine-*:*",
615
- ]
616
- },
617
- {
618
- Sid = "RoutineTaskTokens"
619
- Effect = "Allow"
620
- Action = [
621
- "states:SendTaskSuccess",
622
- "states:SendTaskFailure",
623
- "states:SendTaskHeartbeat",
624
- ]
625
- Resource = "*"
626
- },
627
- {
628
- Sid = "RoutineValidate"
629
- Effect = "Allow"
630
- Action = ["states:ValidateStateMachineDefinition"]
631
- Resource = "*"
632
- },
633
- {
634
- # PassRole so the createRoutine resolver can hand the routines
635
- # execution role to a newly-created state machine. Scoped to the
636
- # specific role created by the routines-stepfunctions module.
637
- Sid = "RoutinePassExecutionRole"
638
- Effect = "Allow"
639
- Action = ["iam:PassRole"]
640
- Resource = "arn:aws:iam::${var.account_id}:role/thinkwork-${var.stage}-routines-execution-role"
641
- Condition = {
642
- StringEquals = {
643
- "iam:PassedToService" = "states.amazonaws.com"
644
- }
645
- }
646
- },
647
- {
648
- # routine-task-python (Phase B U6) wraps the AgentCore code
649
- # interpreter so SFN can run `python` recipe states. Three calls
650
- # per Task: Start session, Invoke, Stop. Resource is `*` because
651
- # interpreter sessions are runtime-scoped, not provisioned.
652
- Sid = "RoutineTaskPythonCodeInterpreter"
653
- Effect = "Allow"
654
- Action = [
655
- "bedrock-agentcore:StartCodeInterpreterSession",
656
- "bedrock-agentcore:InvokeCodeInterpreter",
657
- "bedrock-agentcore:StopCodeInterpreterSession",
658
- "bedrock-agentcore:GetCodeInterpreterSession",
659
- ]
660
- Resource = "*"
661
- },
662
- {
663
- # routine-task-python S3 offload — full stdout/stderr land in
664
- # the per-stage routine-output bucket under
665
- # <tenantId>/<sfn-execution-id>/<nodeId>/{stdout,stderr}.log.
666
- # PutObject only — the read path is GraphQL-fronted and runs
667
- # under the graphql-http handler's role, not this one.
668
- Sid = "RoutineTaskPythonS3Offload"
669
- Effect = "Allow"
670
- Action = [
671
- "s3:PutObject",
672
- ]
673
- Resource = "arn:aws:s3:::thinkwork-${var.stage}-routine-output/*"
674
- },
675
- ]
676
- })
163
+ policy_arn = "arn:aws:iam::aws:policy/service-role/AWSLambdaVPCAccessExecutionRole"
677
164
  }
678
165
 
679
166
  ################################################################################
@@ -2,7 +2,7 @@ locals {
2
2
  mcp_oauth_api_base_url = "https://${aws_apigatewayv2_api.main.id}.execute-api.${var.region}.amazonaws.com"
3
3
  mcp_oauth_cognito_base_url = var.cognito_auth_domain != "" ? "https://${var.cognito_auth_domain}.auth.${var.region}.amazoncognito.com" : ""
4
4
  mcp_oauth_identity_providers = var.google_oauth_client_id != "" ? ["Google", "COGNITO"] : ["COGNITO"]
5
- mcp_oauth_logo_path = "${path.module}/../../../../apps/admin/public/logo.png"
5
+ mcp_oauth_logo_path = "${path.module}/../../../../apps/web/public/logo.png"
6
6
  }
7
7
 
8
8
  resource "aws_dynamodb_table" "mcp_oauth_revocations" {
@@ -98,21 +98,5 @@ resource "aws_cognito_user_pool_ui_customization" "mcp_oauth" {
98
98
  CSS
99
99
  }
100
100
 
101
- resource "aws_iam_role_policy" "lambda_mcp_oauth_revocations" {
102
- name = "mcp-oauth-revocations"
103
- role = aws_iam_role.lambda.id
104
-
105
- policy = jsonencode({
106
- Version = "2012-10-17"
107
- Statement = [
108
- {
109
- Effect = "Allow"
110
- Action = [
111
- "dynamodb:GetItem",
112
- "dynamodb:PutItem"
113
- ]
114
- Resource = aws_dynamodb_table.mcp_oauth_revocations.arn
115
- }
116
- ]
117
- })
118
- }
101
+ # The shared-role DynamoDB grant for the revocations table moved to
102
+ # aws_iam_policy.api_data_plane in iam-grouped.tf (R9).
@@ -4,8 +4,8 @@ output "api_id" {
4
4
  }
5
5
 
6
6
  output "api_endpoint" {
7
- description = "API Gateway V2 endpoint URL"
8
- value = aws_apigatewayv2_stage.default.invoke_url
7
+ description = "Public HTTP API base URL. Uses the custom domain when configured so VPC runtimes with execute-api private DNS can still call service callbacks."
8
+ value = local.api_base_url
9
9
  }
10
10
 
11
11
  output "api_execution_arn" {
@@ -34,23 +34,67 @@ output "lambda_artifact_mode" {
34
34
  }
35
35
 
36
36
  output "memory_retain_fn_name" {
37
- description = "Memory-retain Lambda function name. Strands runtime invokes this directly to push conversational turns into the active memory engine."
37
+ description = "Memory-retain Lambda function name. Pi invokes this directly to push conversational turns into the active memory engine."
38
38
  value = local.deploy_lambda_handlers ? aws_lambda_function.handler["memory-retain"].function_name : ""
39
39
  }
40
40
 
41
41
  output "memory_retain_fn_arn" {
42
- description = "Memory-retain Lambda ARN. Used to grant lambda:InvokeFunction to the agentcore-runtime role."
42
+ description = "Memory-retain Lambda ARN. Used to grant lambda:InvokeFunction to the Pi runtime role."
43
43
  value = local.deploy_lambda_handlers ? aws_lambda_function.handler["memory-retain"].arn : ""
44
44
  }
45
45
 
46
+ output "knowledge_graph_thread_ingest_fn_name" {
47
+ description = "Knowledge Graph thread ingest worker Lambda function name."
48
+ value = local.deploy_lambda_handlers ? aws_lambda_function.handler["knowledge-graph-thread-ingest"].function_name : ""
49
+ }
50
+
51
+ output "knowledge_graph_thread_ingest_fn_arn" {
52
+ description = "Knowledge Graph thread ingest worker Lambda ARN."
53
+ value = local.deploy_lambda_handlers ? aws_lambda_function.handler["knowledge-graph-thread-ingest"].arn : ""
54
+ }
55
+
56
+ output "okf_efs_refresh_fn_name" {
57
+ description = "OKF EFS refresh Lambda function name."
58
+ value = local.deploy_lambda_handlers ? aws_lambda_function.handler["okf-efs-refresh"].function_name : ""
59
+ }
60
+
61
+ output "okf_efs_refresh_fn_arn" {
62
+ description = "OKF EFS refresh Lambda ARN."
63
+ value = local.deploy_lambda_handlers ? aws_lambda_function.handler["okf-efs-refresh"].arn : ""
64
+ }
65
+
66
+ output "brain_artifacts_bucket_name" {
67
+ description = "Canonical Company Brain S3 bucket for source artifacts, ingestion manifests, migration snapshots, vault projections, and exports."
68
+ value = aws_s3_bucket.brain_artifacts.bucket
69
+ }
70
+
71
+ output "brain_artifacts_bucket_arn" {
72
+ description = "ARN of the canonical Company Brain artifact bucket."
73
+ value = aws_s3_bucket.brain_artifacts.arn
74
+ }
75
+
76
+ output "billing_export_bucket_name" {
77
+ description = "Configured AWS billing export bucket consumed by the THNK-74 bill reconciler, or empty when not configured."
78
+ value = var.billing_export_bucket_name
79
+ }
80
+
81
+ output "billing_export_manifest_key" {
82
+ description = "Configured AWS billing export manifest key consumed by the THNK-74 bill reconciler, or empty when not configured."
83
+ value = var.billing_export_manifest_key
84
+ }
85
+
46
86
  output "email_inbound_fn_arn" {
47
87
  description = "email-inbound Lambda ARN. Used by the SES module to wire the receipt rule Lambda action."
48
- value = local.deploy_lambda_handlers ? aws_lambda_function.handler["email-inbound"].arn : ""
88
+ # Statically constructed (not a resource attribute): SES/customer-domain gate
89
+ # count on this value, and an apply-time-unknown breaks the FIRST apply in a
90
+ # fresh account ("Invalid count argument" — THINK-118 harness cycle 4).
91
+ value = local.deploy_lambda_handlers ? "arn:aws:lambda:${var.region}:${var.account_id}:function:thinkwork-${var.stage}-api-email-inbound" : ""
49
92
  }
50
93
 
51
94
  output "email_inbound_fn_name" {
52
95
  description = "email-inbound Lambda function name. Used by the SES module for lambda:InvokeFunction permissions."
53
- value = local.deploy_lambda_handlers ? aws_lambda_function.handler["email-inbound"].function_name : ""
96
+ # Static for the same fresh-account plan-time reason as email_inbound_fn_arn.
97
+ value = local.deploy_lambda_handlers ? "thinkwork-${var.stage}-api-email-inbound" : ""
54
98
  }
55
99
 
56
100
  # ---------------------------------------------------------------------------