thinkwork-cli 0.13.2 → 1.0.0

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 (231) hide show
  1. package/README.md +3 -14
  2. package/dist/{api-client-JYZXYQJR.js → api-client-4P4JZOBX.js} +1 -1
  3. package/dist/{chunk-Z2F6RJFR.js → chunk-4OMDWYZQ.js} +4 -5
  4. package/dist/{chunk-ILZKG5WV.js → chunk-AD2NIWB5.js} +434 -69
  5. package/dist/chunk-MWQ7RO76.js +137 -0
  6. package/dist/{chunk-DVPBI5HM.js → chunk-OLUQ4U2Z.js} +26 -26
  7. package/dist/{chunk-QOERT44A.js → chunk-YQCYD6NE.js} +57 -44
  8. package/dist/cli.js +4400 -16431
  9. package/dist/commands/enterprise/templates/deploy-repo/scripts/apply-release.mjs +0 -1
  10. package/dist/commands/enterprise/templates/deploy-repo/scripts/smoke.mjs +0 -1
  11. package/dist/commands/enterprise/templates/deploy-repo/terraform/main.tf +0 -14
  12. package/dist/{dist-es-CRV46D5B.js → dist-es-2OTNTL4N.js} +4 -4
  13. package/dist/{dist-es-ENBUC3JP.js → dist-es-2XVAH4BQ.js} +2 -2
  14. package/dist/{dist-es-DCY4IC3Y.js → dist-es-3DPDUJAH.js} +2 -2
  15. package/dist/{dist-es-G7PTG75M.js → dist-es-BNZTBBVC.js} +1 -1
  16. package/dist/{dist-es-GKDBE7E6.js → dist-es-CD2RBDAC.js} +1 -1
  17. package/dist/{dist-es-R7FGL2IB.js → dist-es-I4FW57PS.js} +1 -1
  18. package/dist/{dist-es-USORBXZ5.js → dist-es-KVFWJNDY.js} +4 -4
  19. package/dist/{dist-es-HY3535OI.js → dist-es-PS73DWNL.js} +2 -2
  20. package/dist/{dist-es-LDE437AM.js → dist-es-S3NZQFGT.js} +1 -1
  21. package/dist/{dist-es-G54LBMRN.js → dist-es-SGCA4P32.js} +1 -1
  22. package/dist/{dist-es-Q57SZXZ7.js → dist-es-WBM6J4RA.js} +2 -2
  23. package/dist/{dist-es-P26FWFLT.js → dist-es-ZGVADYIF.js} +8 -8
  24. package/dist/drizzle/0227_analyst_reader_role.sql +17 -26
  25. package/dist/drizzle/0230_analyst_rls.sql +28 -45
  26. package/dist/drizzle/0261_native_auth_control_plane.sql +7 -3
  27. package/dist/drizzle/0270_tool_execution_ledger.sql +115 -0
  28. package/dist/drizzle/0271_ontology_twin_declarations.sql +47 -0
  29. package/dist/drizzle/0272_identity_graph_projection_cursor.sql +23 -0
  30. package/dist/drizzle/0273_twin_materialization_suggestions.sql +29 -0
  31. package/dist/drizzle/0274_tenant_mcp_twin_keys.sql +59 -0
  32. package/dist/drizzle/0275_identity_bulk_rebuild_fence.sql +30 -0
  33. package/dist/drizzle/0276_tool_execution_ledger_allow_cascade_delete.sql +18 -0
  34. package/dist/drizzle/0277_knowledge_base_sources.sql +107 -0
  35. package/dist/drizzle/0278_kb_page_transcription.sql +55 -0
  36. package/dist/drizzle/0279_mcp_servers_off_plugin_provenance.sql +93 -0
  37. package/dist/drizzle/0280_work_item_external_refs_drop_plane_provider.sql +46 -0
  38. package/dist/drizzle/0281_tenant_mcp_twin_keys_expiry_suffix.sql +9 -0
  39. package/dist/drizzle/0282_tenant_mcp_twin_keys_grants.sql +24 -0
  40. package/dist/drizzle/0283_agents_agentcore_runtime_dispatch.sql +13 -0
  41. package/dist/drizzle/0284_user_brain_claims.sql +69 -0
  42. package/dist/drizzle/0285_tenant_mcp_twin_keys_trusted_subsystem.sql +30 -0
  43. package/dist/drizzle/0286_brain_analytics_key.sql +26 -0
  44. package/dist/drizzle/0287_brain_subject.sql +25 -0
  45. package/dist/drizzle/0288_multi_lane_identities.sql +25 -0
  46. package/dist/{loadSso-DJVB7BXE.js → loadSso-ETCXTR4I.js} +2 -2
  47. package/dist/{loadSso-JAMNA3WY.js → loadSso-UBD7KUHE.js} +2 -2
  48. package/dist/plugins/README.md +2 -2
  49. package/dist/plugins/catalog/package.json +0 -3
  50. package/dist/plugins/catalog/src/__tests__/build-catalog.test.ts +6 -3
  51. package/dist/plugins/catalog/src/__tests__/catalog.test.ts +21 -21
  52. package/dist/plugins/catalog/src/__tests__/contracts.test.ts +102 -25
  53. package/dist/plugins/catalog/src/__tests__/plugin-package.test.ts +7 -6
  54. package/dist/plugins/catalog/src/__tests__/plugin-registry.test.ts +0 -15
  55. package/dist/plugins/catalog/src/contracts.ts +15 -0
  56. package/dist/plugins/catalog/src/registry/generated-first-party.ts +0 -18
  57. package/dist/plugins/n8n/test/integrated-app-contract.test.ts +1 -1
  58. package/dist/plugins/twenty/package.json +2 -1
  59. package/dist/plugins/twenty/scripts/LAMBDA_DEPLOY.md +114 -0
  60. package/dist/plugins/twenty/scripts/build-lambda.sh +29 -0
  61. package/dist/plugins/twenty/scripts/configure-product-views.ts +195 -0
  62. package/dist/plugins/twenty/scripts/lambda-handler.ts +49 -0
  63. package/dist/plugins/twenty/scripts/lib/__tests__/load-attachments.test.ts +38 -0
  64. package/dist/plugins/twenty/scripts/lib/__tests__/load-records.test.ts +145 -2
  65. package/dist/plugins/twenty/scripts/lib/__tests__/mappers.test.ts +397 -151
  66. package/dist/plugins/twenty/scripts/lib/__tests__/members-ensure.test.ts +28 -129
  67. package/dist/plugins/twenty/scripts/lib/__tests__/provision-members-db.test.ts +10 -0
  68. package/dist/plugins/twenty/scripts/lib/__tests__/schema-ensure.test.ts +13 -8
  69. package/dist/plugins/twenty/scripts/lib/lastmile-reader.ts +222 -2
  70. package/dist/plugins/twenty/scripts/lib/load-attachments.ts +29 -0
  71. package/dist/plugins/twenty/scripts/lib/load-records.ts +160 -43
  72. package/dist/plugins/twenty/scripts/lib/mappers.ts +368 -152
  73. package/dist/plugins/twenty/scripts/lib/members-ensure.ts +43 -268
  74. package/dist/plugins/twenty/scripts/lib/provision-members-db.ts +57 -0
  75. package/dist/plugins/twenty/scripts/lib/schema-ensure.ts +136 -31
  76. package/dist/plugins/twenty/scripts/migrate-lastmile.ts +254 -152
  77. package/dist/plugins/twenty/scripts/provision-twenty-members.ts +44 -1
  78. package/dist/plugins/twenty/scripts/purge-lastmile-import.ts +178 -0
  79. package/dist/plugins/twenty/scripts/restructure-products.ts +312 -0
  80. package/dist/plugins/twenty/scripts/retag-stage-values.ts +362 -0
  81. package/dist/plugins/twenty/test/manifest.test.ts +2 -4
  82. package/dist/scripts/post-deploy.sh +79 -1
  83. package/dist/{signin-UGDWTGS4.js → signin-5QZNRSOO.js} +2 -2
  84. package/dist/{sso-oidc-Q4VXANXY.js → sso-oidc-XK673P54.js} +2 -2
  85. package/dist/{sts-CWLSE3GH.js → sts-OXI2UALF.js} +6 -134
  86. package/dist/{sts-DNZLNVOV.js → sts-SQW4NBK3.js} +6 -134
  87. package/dist/terraform/examples/greenfield/main.tf +233 -175
  88. package/dist/terraform/examples/greenfield/terraform.tfvars.example +12 -8
  89. package/dist/terraform/modules/app/agentcore-admin/main.tf +47 -0
  90. package/dist/terraform/modules/app/agentcore-code-interpreter/README.md +39 -47
  91. package/dist/terraform/modules/app/agentcore-code-interpreter/main.tf +13 -66
  92. package/dist/terraform/modules/app/agentcore-identity/main.tf +106 -26
  93. package/dist/terraform/modules/app/agentcore-identity/outputs.tf +6 -6
  94. package/dist/terraform/modules/app/agentcore-identity/scripts/bootstrap_twenty_oauth_client.sh +216 -99
  95. package/dist/terraform/modules/app/agentcore-identity/scripts/delete_identity.sh +6 -9
  96. package/dist/terraform/modules/app/agentcore-identity/scripts/delete_workload_identity.sh +19 -0
  97. package/dist/terraform/modules/app/agentcore-identity/scripts/ensure_workload_identity.sh +29 -0
  98. package/dist/terraform/modules/app/agentcore-identity/scripts/read_identity.sh +22 -7
  99. package/dist/terraform/modules/app/agentcore-identity/scripts/reconcile_twenty_identity.sh +17 -46
  100. package/dist/terraform/modules/app/agentcore-identity/scripts/reconcile_twenty_provider.mjs +65 -3
  101. package/dist/terraform/modules/app/agentcore-identity/tests/tainted-marker/after.tf +15 -0
  102. package/dist/terraform/modules/app/agentcore-identity/tests/tainted-marker/before.tf +7 -0
  103. package/dist/terraform/modules/app/agentcore-identity/tests/tainted-marker/identity-after.tf +8 -0
  104. package/dist/terraform/modules/app/agentcore-identity/tests/tainted-marker/identity-before.tf +9 -0
  105. package/dist/terraform/modules/app/agentcore-identity/tests/tainted-marker/thinkwork-after.tf +3 -0
  106. package/dist/terraform/modules/app/agentcore-identity/tests/tainted-marker/thinkwork-before.tf +3 -0
  107. package/dist/terraform/modules/app/agentcore-identity/variables.tf +6 -0
  108. package/dist/terraform/modules/app/agentcore-memory/README.md +46 -9
  109. package/dist/terraform/modules/app/agentcore-memory/main.tf +27 -10
  110. package/dist/terraform/modules/app/agentcore-memory/scripts/create_or_find_memory.sh +156 -24
  111. package/dist/terraform/modules/app/agentcore-pi/README.md +1 -3
  112. package/dist/terraform/modules/app/agentcore-pi/main.tf +42 -52
  113. package/dist/terraform/modules/app/agentcore-pi/outputs.tf +3 -3
  114. package/dist/terraform/modules/app/agentcore-pi/scripts/reconcile_pi_runtime.mjs +175 -0
  115. package/dist/terraform/modules/app/agentcore-pi/variables.tf +35 -28
  116. package/dist/terraform/modules/app/agentcore-platform/main.tf +68 -0
  117. package/dist/terraform/modules/app/agentcore-runtime/main.tf +4 -20
  118. package/dist/terraform/modules/app/capability-broker/main.tf +2 -2
  119. package/dist/terraform/modules/app/capability-broker/variables.tf +11 -0
  120. package/dist/terraform/modules/app/deployment-control-plane/README.md +264 -0
  121. package/dist/terraform/modules/app/deployment-control-plane/buildspec.yml +4 -1
  122. package/dist/terraform/modules/app/deployment-control-plane/main.tf +94 -0
  123. package/dist/terraform/modules/app/deployment-control-plane/outputs.tf +5 -0
  124. package/dist/terraform/modules/app/deployment-control-plane/runner.py +2641 -124
  125. package/dist/terraform/modules/app/deployment-control-plane/test_runner_bundle.py +2034 -154
  126. package/dist/terraform/modules/app/deployment-control-plane/variables.tf +33 -0
  127. package/dist/terraform/modules/app/lambda-api/auth-state.tf +72 -0
  128. package/dist/terraform/modules/app/lambda-api/chat-latency-observability.tf +466 -0
  129. package/dist/terraform/modules/app/lambda-api/dispatch-dlq.tf +55 -0
  130. package/dist/terraform/modules/app/lambda-api/handlers.tf +411 -723
  131. package/dist/terraform/modules/app/lambda-api/iam-grouped.tf +262 -198
  132. package/dist/terraform/modules/app/lambda-api/main.tf +51 -13
  133. package/dist/terraform/modules/app/lambda-api/mcp-oauth.tf +4 -181
  134. package/dist/terraform/modules/app/lambda-api/memory-alarms.tf +3 -28
  135. package/dist/terraform/modules/app/lambda-api/oauth-secrets.tf +1 -2
  136. package/dist/terraform/modules/app/lambda-api/outputs.tf +17 -45
  137. package/dist/terraform/modules/app/lambda-api/turn-assertion.tf +45 -0
  138. package/dist/terraform/modules/app/lambda-api/variables.tf +219 -126
  139. package/dist/{plugins/n8n/terraform → terraform/modules/app}/n8n/README.md +1 -1
  140. package/dist/{plugins/n8n/terraform → terraform/modules/app}/n8n/main.tf +18 -18
  141. package/dist/terraform/modules/app/sandbox-log-scrubber/README.md +11 -10
  142. package/dist/terraform/modules/app/sandbox-log-scrubber/main.tf +5 -5
  143. package/dist/terraform/modules/app/static-site/main.tf +1 -1
  144. package/dist/terraform/modules/app/www-dns/main.tf +9 -27
  145. package/dist/terraform/modules/app/www-dns/variables.tf +4 -10
  146. package/dist/terraform/modules/data/aurora-postgres/README.md +34 -0
  147. package/dist/terraform/modules/data/aurora-postgres/alarms.tf +82 -0
  148. package/dist/terraform/modules/data/aurora-postgres/main.tf +27 -57
  149. package/dist/terraform/modules/data/aurora-postgres/outputs.tf +0 -9
  150. package/dist/terraform/modules/data/aurora-postgres/variables.tf +41 -0
  151. package/dist/terraform/modules/data/s3-buckets/main.tf +5 -6
  152. package/dist/terraform/modules/foundation/cognito/main.tf +81 -8
  153. package/dist/terraform/modules/foundation/cognito/outputs.tf +5 -0
  154. package/dist/terraform/modules/foundation/cognito/variables.tf +24 -12
  155. package/dist/terraform/modules/thinkwork/README.md +5 -1
  156. package/dist/terraform/modules/thinkwork/main.tf +376 -374
  157. package/dist/terraform/modules/thinkwork/outputs.tf +12 -158
  158. package/dist/terraform/modules/thinkwork/variables.tf +246 -89
  159. package/dist/workspace-defaults/files/INSTRUCTIONS.md +9 -11
  160. package/dist/workspace-defaults/files/MEMORY_GUIDE.md +38 -35
  161. package/dist/workspace-defaults/files/ROUTER.md +1 -1
  162. package/dist/workspace-defaults/files/TOOLS.md +9 -39
  163. package/dist/workspace-defaults/files/agents/analyst/INSTRUCTIONS.md +6 -3
  164. package/dist/workspace-defaults/files/catalog-skills/brain-brief-builder/SKILL.md +165 -0
  165. package/dist/workspace-defaults/files/catalog-skills/n8n-workflow-operator/SKILL.md +75 -0
  166. package/dist/workspace-defaults/files/catalog-skills/n8n-workflow-operator/references/mcp-tooling.md +40 -0
  167. package/dist/workspace-defaults/files/catalog-skills/n8n-workflow-operator/references/validation-and-handoff.md +40 -0
  168. package/dist/workspace-defaults/files/catalog-skills/n8n-workflow-operator/references/workflow-authoring.md +46 -0
  169. package/dist/workspace-defaults/files/skills/artifact-builder/references/crm-dashboard.md +1 -1
  170. package/dist/workspace-defaults/files/skills/document-composer/SKILL.md +22 -3
  171. package/package.json +1 -1
  172. package/dist/drizzle/0261_managed_harness_multiplayer.sql +0 -313
  173. package/dist/drizzle/0262_parallel_harness_threads.sql +0 -9
  174. package/dist/drizzle/0264_harness_tool_execution_ledger.sql +0 -113
  175. package/dist/plugins/company-data/README.md +0 -49
  176. package/dist/plugins/company-data/package.json +0 -21
  177. package/dist/plugins/company-data/src/index.ts +0 -30
  178. package/dist/plugins/company-data/src/manifest.ts +0 -26
  179. package/dist/plugins/company-data/test/manifest.test.ts +0 -116
  180. package/dist/plugins/company-data/tsconfig.json +0 -8
  181. package/dist/plugins/company-etl/README.md +0 -46
  182. package/dist/plugins/company-etl/package.json +0 -21
  183. package/dist/plugins/company-etl/src/index.ts +0 -29
  184. package/dist/plugins/company-etl/src/manifest.ts +0 -26
  185. package/dist/plugins/company-etl/test/manifest.test.ts +0 -108
  186. package/dist/plugins/company-etl/tsconfig.json +0 -8
  187. package/dist/plugins/lastmile/README.md +0 -50
  188. package/dist/plugins/lastmile/package.json +0 -23
  189. package/dist/plugins/lastmile/smoke/lastmile-plugin-smoke.mjs +0 -661
  190. package/dist/plugins/lastmile/src/api/tasks-adapter.ts +0 -572
  191. package/dist/plugins/lastmile/src/discovery.fixture.ts +0 -64
  192. package/dist/plugins/lastmile/src/index.ts +0 -46
  193. package/dist/plugins/lastmile/src/manifest.ts +0 -139
  194. package/dist/plugins/lastmile/test/api/tasks-adapter.test.ts +0 -266
  195. package/dist/plugins/lastmile/test/discovery.test.ts +0 -88
  196. package/dist/plugins/lastmile/tsconfig.json +0 -8
  197. package/dist/plugins/n8n/smoke/n8n-managed-app-smoke.mjs +0 -409
  198. package/dist/plugins/twenty/smoke/twenty-managed-app-smoke.mjs +0 -359
  199. package/dist/terraform/modules/app/agentcore-code-interpreter/Dockerfile.sandbox-base +0 -61
  200. package/dist/terraform/modules/app/agentcore-code-interpreter/sandbox/sitecustomize.py +0 -227
  201. package/dist/terraform/modules/app/agentcore-code-interpreter/sandbox/test_sitecustomize.py +0 -277
  202. package/dist/terraform/modules/app/agentcore-code-interpreter/scripts/build_and_push_sandbox_base.sh +0 -70
  203. package/dist/terraform/modules/app/agentcore-gateway/main.tf +0 -305
  204. package/dist/terraform/modules/app/agentcore-gateway/outputs.tf +0 -44
  205. package/dist/terraform/modules/app/agentcore-gateway/scripts/delete_gateway.sh +0 -93
  206. package/dist/terraform/modules/app/agentcore-gateway/scripts/read_gateway.sh +0 -33
  207. package/dist/terraform/modules/app/agentcore-gateway/scripts/reconcile_gateway.sh +0 -543
  208. package/dist/terraform/modules/app/agentcore-gateway/variables.tf +0 -70
  209. package/dist/terraform/modules/app/agentcore-harness/main.tf +0 -330
  210. package/dist/terraform/modules/app/agentcore-harness/outputs.tf +0 -72
  211. package/dist/terraform/modules/app/agentcore-harness/scripts/delete_harness.sh +0 -5
  212. package/dist/terraform/modules/app/agentcore-harness/scripts/harness-lifecycle.mjs +0 -430
  213. package/dist/terraform/modules/app/agentcore-harness/scripts/harness-readback.mjs +0 -180
  214. package/dist/terraform/modules/app/agentcore-harness/scripts/harness-tool-contract.mjs +0 -193
  215. package/dist/terraform/modules/app/agentcore-harness/scripts/prune_harness.sh +0 -5
  216. package/dist/terraform/modules/app/agentcore-harness/scripts/read_harness.sh +0 -5
  217. package/dist/terraform/modules/app/agentcore-harness/scripts/reconcile_harness.sh +0 -5
  218. package/dist/terraform/modules/app/agentcore-harness/variables.tf +0 -96
  219. package/dist/terraform/modules/app/hindsight-memory/README.md +0 -89
  220. package/dist/terraform/modules/app/hindsight-memory/main.tf +0 -411
  221. package/dist/terraform/modules/app/lambda-api/agentcore-harness-alarms.tf +0 -88
  222. package/dist/terraform/modules/app/lambda-api/agentcore-identity-alarms.tf +0 -91
  223. package/dist/terraform/modules/data/bedrock-knowledge-base/main.tf +0 -102
  224. /package/dist/{plugins/n8n/terraform → terraform/modules/app}/n8n/outputs.tf +0 -0
  225. /package/dist/{plugins/n8n/terraform → terraform/modules/app}/n8n/scripts/sync-database.py +0 -0
  226. /package/dist/{plugins/n8n/terraform → terraform/modules/app}/n8n/scripts/test_sync_database.py +0 -0
  227. /package/dist/{plugins/n8n/terraform → terraform/modules/app}/n8n/variables.tf +0 -0
  228. /package/dist/{plugins/twenty/terraform → terraform/modules/app}/twenty/README.md +0 -0
  229. /package/dist/{plugins/twenty/terraform → terraform/modules/app}/twenty/main.tf +0 -0
  230. /package/dist/{plugins/twenty/terraform → terraform/modules/app}/twenty/outputs.tf +0 -0
  231. /package/dist/{plugins/twenty/terraform → terraform/modules/app}/twenty/variables.tf +0 -0
@@ -64,13 +64,13 @@ variable "microsoft_oauth_client_secret" {
64
64
  }
65
65
 
66
66
  variable "microsoft_oauth_tenant" {
67
- description = "Microsoft Entra directory GUID for the deployment's default Microsoft login route. Cognito requires the exact tenant issuer; organizations/common authorities are not valid token issuers."
67
+ description = "Microsoft Entra tenant for the deployment's default Microsoft login route: a directory GUID or one of the Cognito-supported multi-tenant aliases (common, organizations, consumers)."
68
68
  type = string
69
69
  default = ""
70
70
 
71
71
  validation {
72
- condition = var.microsoft_oauth_tenant == "" || can(regex("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$", var.microsoft_oauth_tenant))
73
- error_message = "microsoft_oauth_tenant must be an Entra directory GUID."
72
+ condition = var.microsoft_oauth_tenant == "" || contains(["common", "organizations", "consumers"], var.microsoft_oauth_tenant) || can(regex("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$", var.microsoft_oauth_tenant))
73
+ error_message = "microsoft_oauth_tenant must be an Entra directory GUID or one of the Cognito-supported aliases: common, organizations, consumers."
74
74
  }
75
75
  }
76
76
 
@@ -133,26 +133,51 @@ variable "platform_operator_emails" {
133
133
  default = ""
134
134
  }
135
135
 
136
- variable "analyst_lambda_vpc_egress" {
137
- description = "VPC-attach the analyst data-path Lambdas (graphql-http, analyst-query-broker, analyst-connection-reconciler) to the stack's private subnets so their egress rides the NAT gateway's stable EIP. Enables external analyst data sources that sit behind an IP allowlist: the DBA admits the one NAT IP (see the analyst_egress_ip output) instead of opening the database to the world. Requires private (NAT-routed) subnets."
138
- type = bool
139
- default = false
136
+ # THINK-583 U3 — provisioned concurrency for the two chat-critical zip
137
+ # Lambdas ONLY (KTD5: never the Pi Lambda). Safe default 0 = disabled;
138
+ # the `live` alias is still created so alias-qualified invokers work on
139
+ # every stage and customer stages opt in on their own release cadence.
140
+ # Dev enables 1/1 via scripts/deploy/terraform-vars.sh (deploy.yml is
141
+ # dev-only — same pattern as enable_capability_broker).
142
+
143
+ variable "chat_agent_invoke_provisioned_concurrency" {
144
+ description = "Provisioned concurrency on chat-agent-invoke's `live` alias. 0 = disabled (alias still exists)."
145
+ type = number
146
+ default = 0
147
+ }
148
+
149
+ variable "workspace_renderer_provisioned_concurrency" {
150
+ description = "Provisioned concurrency on workspace-renderer's `live` alias. 0 = disabled (alias still exists)."
151
+ type = number
152
+ default = 0
140
153
  }
141
154
 
142
155
  variable "okf_wiki_efs_enabled" {
143
- description = "Provision the OKF Wiki Navigator EFS current-view substrate and mount it into the okf-efs-refresh Lambda plus Pi."
156
+ description = "DEPRECATED (THINK-589): no-op, removal pending. The OKF wiki EFS feature is dead — no mount, access point, mount target, or client security group is created regardless of this value. It currently only retains the already-provisioned EFS filesystem (PR 2 deletes it behind the destructive-step gates) and, with okf_wiki_create_nat_gateway, the shared NAT egress that non-OKF VPC workloads still ride. Declaration retained so customer-stage passthroughs and tfvars keep working."
144
157
  type = bool
145
158
  default = true
146
159
  }
147
160
 
148
161
  variable "okf_wiki_create_vpc_endpoints" {
149
- description = "Create private AWS service VPC endpoints required by VPC-attached OKF hydrator and Pi Lambdas. Disable only when equivalent NAT or endpoints already exist."
162
+ description = "DEPRECATED (THINK-589): no-op for OKF, removal pending. The OKF hydrator and Pi are no longer VPC-attached. The private VPC endpoints this gates are retained unchanged in PR 1 because their private DNS serves the whole VPC (Neptune twin Lambdas, Twenty); PR 2 re-homes or deletes them."
150
163
  type = bool
151
164
  default = true
152
165
  }
153
166
 
167
+ variable "vpc_interface_endpoint_services" {
168
+ description = "AWS services that get a private interface endpoint in the VPC (service suffixes: secretsmanager, rds-data, bedrock-runtime, logs, ...). null = the legacy full set the stage was built with; [] = none. The private subnets are NAT-routed and the Lambda SGs allow 443 out, so an endpoint only keeps a call on AWS's network — it is a posture choice billed at ~$7.30/mo per ENI, not a reachability requirement. Cost review 2026-08-28."
169
+ type = list(string)
170
+ default = null
171
+ }
172
+
173
+ variable "vpc_interface_endpoint_single_az" {
174
+ description = "Place each interface endpoint in one private subnet instead of every one. Halves the hourly bill; the other AZ's callers cross AZs at $0.01/GB. Cost review 2026-08-28."
175
+ type = bool
176
+ default = false
177
+ }
178
+
154
179
  variable "okf_wiki_create_nat_gateway" {
155
- description = "Create NAT egress for private subnets when OKF EFS attaches Pi to the VPC. Disable only when equivalent public egress already exists."
180
+ description = "DEPRECATED (THINK-589): removal pending. Pi no longer attaches to the VPC for OKF EFS. NAT egress is retained unchanged in PR 1 because Neptune twin Lambdas and other VPC-attached workloads route through it; PR 2 re-homes the gate onto the surviving VPC consumers."
156
181
  type = bool
157
182
  default = true
158
183
  }
@@ -163,6 +188,30 @@ variable "enable_deployment_control_plane" {
163
188
  default = true
164
189
  }
165
190
 
191
+ variable "deployment_runner_in_vpc" {
192
+ description = "Run the deployment runner CodeBuild inside this VPC (private subnets, dedicated runner security group) and grant that group tcp/5432 on the database security group. Rationale (THINK-1082): the runner's psql schema step otherwise reaches Aurora over its public endpoint and depends on the world-open 0.0.0.0/0 -> 5432 rule the aurora-postgres module seeds; a customer that revokes that rule (deliberate lockdown) breaks every deploy at the psql step. Turning this on also turns on the VPC NAT gateway, which a VPC-attached CodeBuild needs to reach GitHub, apt/pip, STS, S3, and Secrets Manager. Ship-inert: default false leaves networking untouched. Applies to the control plane this module embeds (enable_deployment_control_plane); an externally bootstrapped control plane (thinkwork enterprise bootstrap) takes the same inputs through its own root."
193
+ type = bool
194
+ default = false
195
+ }
196
+
197
+ variable "api_lambdas_in_vpc" {
198
+ description = "Attach every database-connected Lambda of the agent (all lambda-api handlers incl. compliance-anchor / compliance-export-runner, the agentcore-admin Lambda, the agentcore-pi runtime, and the already-VPC-attached capability broker) to this VPC's private subnets behind a dedicated api-lambda security group, and grant that group tcp/5432 on the database security group. Rationale (THINK-1082): those functions carry a database connection and, with no vpc_config, reach Aurora only over its public endpoint through the world-open 0.0.0.0/0 -> 5432 rule the aurora-postgres module seeds. When a human revoked that rule on a live customer stage the whole app was down for two hours (auth-me -> DB timeout -> 401 'No tenant assigned'). With this on, the Lambdas reach the database privately and the public rule can be closed (db_public_ingress_cidrs / db_publicly_accessible). Turns on the VPC NAT gateway — VPC-attached Lambdas have no public IP and still need AWS APIs, Bedrock, Slack, GitHub, model providers; NAT data-processing charges apply to that egress. Ship-inert: default false leaves every function byte-identical."
199
+ type = bool
200
+ default = false
201
+ }
202
+
203
+ variable "db_publicly_accessible" {
204
+ description = "aurora-postgres publicly_accessible passthrough (THINK-1082). Default true = today's public endpoint. Set false only after api_lambdas_in_vpc and deployment_runner_in_vpc are live and verified."
205
+ type = bool
206
+ default = true
207
+ }
208
+
209
+ variable "db_public_ingress_cidrs" {
210
+ description = "aurora-postgres public_ingress_cidrs passthrough (THINK-1082): CIDRs seeded as tcp/5432 ingress on a NEW database security group. Default [\"0.0.0.0/0\"] = today's world-open rule; [] = none. The group ignores ingress drift, so shrinking this does not revoke a live rule — the operator revokes it by hand once the clients are in the VPC (see modules/app/deployment-control-plane/README.md, 'Closing the database port')."
211
+ type = list(string)
212
+ default = ["0.0.0.0/0"]
213
+ }
214
+
166
215
  variable "deployment_state_machine_arn" {
167
216
  description = "Existing deployment orchestration Step Functions ARN for environments whose controller is bootstrapped outside this app stack."
168
217
  type = string
@@ -384,10 +433,16 @@ variable "database_engine" {
384
433
  default = "aurora-serverless"
385
434
  }
386
435
 
436
+ variable "external_kb_source_arns" {
437
+ description = "DEPRECATED (THINK-402): Knowledge Bases were removed from the product; this input is inert and ignored. Declaration retained so existing customer-stage -var passthroughs keep working."
438
+ type = list(string)
439
+ default = []
440
+ }
441
+
387
442
  variable "enable_hindsight" {
388
- description = "Enable Hindsight long-term memory. Full ThinkWork installs default this on because Hindsight is the canonical user and Space memory provider; set false only for explicit low-cost/development AgentCore-only deployments."
443
+ description = "DEPRECATED (THINK-407): the Hindsight memory engine and its infrastructure were removed; this input is inert and ignored. Declaration retained so existing customer-stage -var passthroughs and tfvars keep working."
389
444
  type = bool
390
- default = true
445
+ default = false
391
446
  }
392
447
 
393
448
  variable "enable_agentcore_harness" {
@@ -432,46 +487,29 @@ variable "enable_capability_broker" {
432
487
  default = false
433
488
  }
434
489
 
435
- variable "memory_engine" {
436
- description = "Active long-term memory engine for canonical recall/inspect/export. Exactly one engine is authoritative per deployment. Empty auto-selects Hindsight for full installs. Accepted values: 'hindsight' (requires enable_hindsight = true) or 'agentcore' (explicit low-cost/development managed-memory mode). Legacy value 'managed' maps to 'agentcore'."
490
+ variable "auth_state_store" {
491
+ description = "THINK-643: backing store for short-lived auth-flow state (AppSync subscription tickets + connect rate-limit counters). \"postgres\" (default) keeps the Aurora auth_subscription_tickets path; \"dynamo\" provisions thinkwork-<stage>-auth-state and points the auth handlers at it. Ship-inert: dev opts in via the deploy workflow, customer stages on their own cadence."
437
492
  type = string
438
- default = ""
493
+ default = "postgres"
439
494
 
440
495
  validation {
441
- condition = var.memory_engine == "" || contains(["managed", "hindsight", "agentcore"], var.memory_engine)
442
- error_message = "memory_engine must be empty, 'hindsight', 'agentcore', or legacy 'managed'."
496
+ condition = contains(["postgres", "dynamo"], var.auth_state_store)
497
+ error_message = "auth_state_store must be \"postgres\" or \"dynamo\"."
443
498
  }
444
499
  }
445
500
 
446
- variable "hindsight_image_tag" {
447
- description = "Hindsight Docker image tag (used when enable_hindsight = true). 0.8.4 upgrade validated 2026-07-06 (THINK-201): migration rehearsal over a dev-data copy passed (orphan-observation backsweep deletes ~650 broken-provenance rows — expected); retain/recall/consolidation verified; 0.8.4 fixes the Bedrock-Anthropic extraction tool schema AND fails retain loudly (500) instead of silently storing zero units. Known upstream gap: maintenance discovery routines (reconcile sweep, mental-model cron, llm_requests retention) expect functions in the public schema and no-op with warnings when HINDSIGHT_API_DATABASE_SCHEMA != public."
448
- type = string
449
- default = "0.8.4"
450
- }
451
501
 
452
- variable "hindsight_database_name" {
453
- description = "Dedicated Hindsight database name on the primary Aurora cluster (THINK-220 cutover flag). Empty (default) = legacy layout: Hindsight lives in the `hindsight` schema of the primary database and its upstream maintenance discovery no-ops (see hindsight_image_tag note). Set to e.g. \"thinkwork_hindsight\" AFTER the database exists and its data is migrated (plan 2026-07-07-004): flips the Hindsight service, the api Lambdas, and the Pi runtime to that database's `public` schema in one apply."
502
+ variable "memory_engine" {
503
+ description = "DEPRECATED (THINK-407): AgentCore managed memory is the only engine; this input is inert and ignored. Declaration retained so existing customer-stage -var passthroughs and tfvars keep working. Legacy values ('hindsight', 'managed') are accepted and discarded."
454
504
  type = string
455
505
  default = ""
456
- }
457
506
 
458
- variable "hindsight_enable_auto_consolidation" {
459
- description = "Run Hindsight's observation consolidation engine automatically after retain (used when enable_hindsight = true)."
460
- type = bool
461
- default = true
462
- }
463
-
464
- variable "hindsight_consolidation_dedup_threshold" {
465
- description = "Cosine-similarity threshold for Hindsight near-duplicate observation reconciliation (0.0-1.0; 1.0 disables)."
466
- type = string
467
- default = "0.97"
507
+ validation {
508
+ condition = var.memory_engine == "" || contains(["managed", "hindsight", "agentcore"], var.memory_engine)
509
+ error_message = "memory_engine must be empty, 'agentcore', or a legacy value ('hindsight', 'managed'). The input is ignored either way."
510
+ }
468
511
  }
469
512
 
470
- variable "hindsight_observations_mission" {
471
- description = "Service-level default observations mission for Hindsight consolidation. Empty string falls back to the image default. Per-bank config overrides apply on top."
472
- type = string
473
- default = "Synthesize durable, institutional facts about the business: customers, projects, decisions, processes, tools, relationships, and recurring patterns. Filter out ephemeral state, secrets, and personal small talk."
474
- }
475
513
  variable "twenty_provisioned" {
476
514
  description = "Provision the retained Twenty CRM managed-app substrate. Runtime can be parked independently with twenty_runtime_enabled."
477
515
  type = bool
@@ -890,6 +928,17 @@ variable "enable_workspace_orchestration" {
890
928
  default = false
891
929
  }
892
930
 
931
+ variable "agentcore_session_scope" {
932
+ description = "THINK-909/THINK-946 AgentCore runtime session scope. \"thread\" (default) keys the session per thread; \"user\" keys it per (tenant, agent, user) so a new thread lands on the user's warm microVM and reuses its retained MCP connections and toolset (THINK-946). Set \"user\" only after the stage's Pi runtime image dual-accepts both session ids. mcpherson runs \"user\"; every other stage keeps the default."
933
+ type = string
934
+ default = "thread"
935
+
936
+ validation {
937
+ condition = contains(["thread", "user"], var.agentcore_session_scope)
938
+ error_message = "agentcore_session_scope must be \"thread\" or \"user\"."
939
+ }
940
+ }
941
+
893
942
  variable "requester_idle_memory_learning_enabled" {
894
943
  description = "Enable requester-scoped 15-minute idle memory learning."
895
944
  type = bool
@@ -967,6 +1016,24 @@ variable "plugin_catalog_github_token_secret_arn" {
967
1016
  default = ""
968
1017
  }
969
1018
 
1019
+ variable "brain_m2m_platform_agent_secret_arn" {
1020
+ description = "Optional Secrets Manager ARN of the Company Brain platform-agent machine-lane secret (Cognito client-credentials blob, THINK-628). When set, the shared API Lambda role may read it so MCP config build can mint short-lived bearers for the Brain connector. Empty leaves the tkt_ lane untouched."
1021
+ type = string
1022
+ default = ""
1023
+ }
1024
+
1025
+ variable "brain_ops_api_url" {
1026
+ description = "Optional Company Brain ops-api base URL for the Send-to-the-Brain flag path (THINK-781). Empty disables the action."
1027
+ type = string
1028
+ default = ""
1029
+ }
1030
+
1031
+ variable "brain_ops_m2m_secret_arn" {
1032
+ description = "Optional Secrets Manager ARN of the Brain agent-identity m2m secret (ops-api operator pool, scope etl-agent/tasks) used by flagThreadToBrain to POST /flags (THINK-781)."
1033
+ type = string
1034
+ default = ""
1035
+ }
1036
+
970
1037
  variable "database_name" {
971
1038
  description = "Aurora database name"
972
1039
  type = string
@@ -1001,6 +1068,12 @@ variable "skill_trust_runner_enabled" {
1001
1068
  default = true
1002
1069
  }
1003
1070
 
1071
+ variable "release_image_mirror_principal_arns" {
1072
+ description = "IAM principals allowed to push release runtime images (`<releaseVersion>-pi-arm64`) into this stage's AgentCore ECR repository, so the vendor's release pipeline can mirror the arm64 AgentCore Runtime image into this account (THINK-616). Empty by default: cross-account push is opt-in per stage, never implied by deploying this module. ThinkWork-operated customer stages set this to the ThinkWork release account (arn:aws:iam::487219502366:root)."
1073
+ type = list(string)
1074
+ default = []
1075
+ }
1076
+
1004
1077
  variable "manage_bedrock_invocation_logging" {
1005
1078
  description = "Own the account/region-level Bedrock model-invocation logging (log group /thinkwork/bedrock/model-invocations, IAM role, and the account logging configuration). Exactly ONE stage per account+region may manage it — a second stack collides on the log group and would clobber/destroy the account-level config (harness cycle-5 ledger entry)."
1006
1079
  type = bool
@@ -1056,13 +1129,16 @@ variable "admin_logout_urls" {
1056
1129
  ]
1057
1130
  }
1058
1131
 
1059
- variable "desktop_callback_urls" {
1060
- type = list(string)
1061
- default = [
1062
- "thinkwork://oauth/callback",
1063
- "thinkwork-dev://oauth/callback",
1064
- "thinkwork-canary://oauth/callback",
1065
- ]
1132
+ variable "additional_admin_callback_urls" {
1133
+ type = list(string)
1134
+ default = []
1135
+ description = "Extra OAuth callback URLs appended to the web-family Cognito clients, beyond the computed defaults (localhost, customer/app domains, dev console). Customer stacks host the Company Brain console in their own account, so those origins can't be derived here and arrive from the deployment runner (runner-secrets `adminCallbackUrls`). Supply both the bare origin and its /auth/callback variant. Purely additive — empty leaves behavior unchanged."
1136
+ }
1137
+
1138
+ variable "additional_admin_logout_urls" {
1139
+ type = list(string)
1140
+ default = []
1141
+ description = "Extra OAuth logout URLs appended to the web-family Cognito clients (companion to additional_admin_callback_urls; runner-secrets `adminLogoutUrls`)."
1066
1142
  }
1067
1143
 
1068
1144
  variable "cli_callback_urls" {
@@ -1081,6 +1157,24 @@ variable "cli_logout_urls" {
1081
1157
  ]
1082
1158
  }
1083
1159
 
1160
+ variable "console_client_enabled" {
1161
+ description = "Create the optional Company Brain console Cognito app client (U13). Default false = ship-inert; nothing is created and console_client_id is null."
1162
+ type = bool
1163
+ default = false
1164
+ }
1165
+
1166
+ variable "console_callback_urls" {
1167
+ description = "OAuth callback URLs for the console client — must include the console hosting URL BEFORE first login (redirect_mismatch otherwise). Required non-empty when console_client_enabled."
1168
+ type = list(string)
1169
+ default = []
1170
+ }
1171
+
1172
+ variable "console_logout_urls" {
1173
+ description = "OAuth logout URLs for the console client"
1174
+ type = list(string)
1175
+ default = []
1176
+ }
1177
+
1084
1178
  variable "mobile_callback_urls" {
1085
1179
  type = list(string)
1086
1180
  default = ["exp://localhost:8081", "thinkwork://", "thinkwork://auth/callback"]
@@ -1137,22 +1231,6 @@ variable "cognito_denied_app_client_ids" {
1137
1231
  default = []
1138
1232
  }
1139
1233
 
1140
- # ---------------------------------------------------------------------------
1141
- # Docs site (custom domain — optional)
1142
- # ---------------------------------------------------------------------------
1143
-
1144
- variable "docs_domain" {
1145
- description = "Custom domain for the docs site (e.g. docs.thinkwork.ai). Leave empty for CloudFront default."
1146
- type = string
1147
- default = ""
1148
- }
1149
-
1150
- variable "docs_certificate_arn" {
1151
- description = "ACM certificate ARN for the docs domain (us-east-1, required for CloudFront custom domains)"
1152
- type = string
1153
- default = ""
1154
- }
1155
-
1156
1234
  # ---------------------------------------------------------------------------
1157
1235
  # Public website (custom domain — optional)
1158
1236
  # ---------------------------------------------------------------------------
@@ -1243,7 +1321,7 @@ variable "computer_sandbox_certificate_arn" {
1243
1321
  }
1244
1322
 
1245
1323
  variable "computer_sandbox_allowed_parent_origins" {
1246
- description = "Comma-separated list of trusted web parent origins that may frame the sandbox iframe (e.g. 'https://thinkwork.ai,https://dev.thinkwork.ai'). Desktop custom-protocol origins are appended automatically. Wired into the sandbox CSP frame-ancestors directive AND mirrored at iframe-shell build time as __ALLOWED_PARENT_ORIGINS__. The two trust sets MUST stay in sync. Leave empty to allow only desktop custom-protocol parents."
1324
+ description = "Comma-separated list of trusted web parent origins that may frame the sandbox iframe (e.g. 'https://thinkwork.ai,https://dev.thinkwork.ai'). Wired into the sandbox CSP frame-ancestors directive AND mirrored at iframe-shell build time as __ALLOWED_PARENT_ORIGINS__. The two trust sets MUST stay in sync. Leave empty to disallow framing entirely."
1247
1325
  type = string
1248
1326
  default = ""
1249
1327
  }
@@ -1366,8 +1444,8 @@ variable "cognito_invite_sms_message" {
1366
1444
  }
1367
1445
  }
1368
1446
 
1369
- variable "wiki_compile_model_id" {
1370
- description = "Bedrock model id used by the wiki-compile Lambda (leaf planner + aggregation planner + section writer). Any Converse-compatible model works; change without a code deploy."
1447
+ variable "ontology_scan_model_id" {
1448
+ description = "DEPRECATED (THINK-408): the ontology / knowledge-graph subsystem was removed; this variable is accepted for compatibility and has no effect."
1371
1449
  type = string
1372
1450
  default = "openai.gpt-oss-120b-1:0"
1373
1451
  }
@@ -1379,13 +1457,19 @@ variable "brain_source_agent_model_id" {
1379
1457
  }
1380
1458
 
1381
1459
  variable "knowledge_graph_observations_ingest_enabled" {
1382
- description = "Enable the Brain distillation schedule (Hindsight observations -> knowledge graph). Ships disabled (plan 2026-07-03-005 U4)."
1460
+ description = "DEPRECATED (THINK-408): the ontology / knowledge-graph subsystem was removed; this variable is accepted for compatibility and has no effect."
1383
1461
  type = bool
1384
1462
  default = false
1385
1463
  }
1386
1464
 
1387
1465
  variable "ontology_scan_sweep_enabled" {
1388
- description = "Enable the recurring per-tenant ontology suggestion scan sweep (THINK-320 U4/KTD-3). Ships disabled."
1466
+ description = "DEPRECATED (THINK-408): the ontology / knowledge-graph subsystem was removed; this variable is accepted for compatibility and has no effect."
1467
+ type = bool
1468
+ default = false
1469
+ }
1470
+
1471
+ variable "identity_drift_match_enabled" {
1472
+ description = "Enable the recurring per-tenant identity drift match sweep (THINK-321 U7/KTD-7). Ships disabled."
1389
1473
  type = bool
1390
1474
  default = false
1391
1475
  }
@@ -1413,12 +1497,6 @@ variable "wiki_deterministic_linking_enabled" {
1413
1497
  default = "true"
1414
1498
  }
1415
1499
 
1416
- variable "google_places_api_key" {
1417
- description = "Google Places API (New) key used by wiki-compile for POI → city/state/country hierarchy enrichment. Stored as SSM SecureString at /thinkwork/<stage>/google-places/api-key. Empty string = parameter created with a placeholder; operator populates via `aws ssm put-parameter --overwrite`. Compile gracefully degrades to metadata-only rows when the key is absent — never fails compile."
1418
- type = string
1419
- default = ""
1420
- sensitive = true
1421
- }
1422
1500
 
1423
1501
  variable "mapbox_public_token" {
1424
1502
  description = "Mapbox public pk.* token consumed by the apps/web MapView primitive (in @thinkwork/computer-stdlib) for inline map tile rendering inside generated applets. Flows from this variable → terraform output → scripts/build-web.sh → apps/web/.env.production as VITE_MAPBOX_PUBLIC_TOKEN. URL-restrict on the Mapbox dashboard to the deployed `computer.<apex>` host (and any dev hosts) — the token ships in the public Vite bundle, so URL allowlist is the security boundary. Empty string is acceptable: MapView falls back to OpenStreetMap tiles when the env var is unset, so dev environments without an operator-provisioned token still render maps."
@@ -1460,30 +1538,109 @@ variable "compliance_anchor_object_lock_mode" {
1460
1538
  }
1461
1539
  }
1462
1540
 
1463
- variable "analyst_policy_source" {
1464
- description = "THINK-229 KTD5 enforcement flip for the analyst connection policy source: 'row' (default signed sidecar policy is shadow-only) or 'sidecar' (the sidecar block is authoritative). Flip only after clean shadow parity on live traffic."
1465
- type = string
1466
- default = "row"
1541
+ variable "compliance_anchor_retention_days" {
1542
+ description = "Default Object Lock retention in days for the compliance audit-anchor bucket. SOC2 Type 1 baseline is 12 months (365)."
1543
+ type = number
1544
+ default = 365
1467
1545
 
1468
1546
  validation {
1469
- condition = contains(["row", "sidecar"], var.analyst_policy_source)
1470
- error_message = "analyst_policy_source must be 'row' or 'sidecar'."
1547
+ condition = var.compliance_anchor_retention_days > 0
1548
+ error_message = "compliance_anchor_retention_days must be greater than 0."
1471
1549
  }
1472
1550
  }
1473
1551
 
1474
- variable "capability_self_extension_tenants" {
1475
- description = "Governed autonomy opt-in: comma/space-separated tenant ids allowed to autonomously self-extend capabilities. Empty (default) = NO tenant enabled; self-extension ships inert and fail-closed."
1552
+ # ---------------------------------------------------------------------------
1553
+ # Company Brain twin (plan 2026-07-21-001): Neptune wiring for the
1554
+ # identity-graph-projector. Values come from the etl-platform neptune stack's
1555
+ # outputs; all default-empty so stages without the twin deploy unchanged.
1556
+ # ---------------------------------------------------------------------------
1557
+
1558
+ variable "neptune_endpoint" {
1559
+ type = string
1560
+ default = ""
1561
+ description = "Neptune twin cluster writer endpoint (etl-platform neptune stack output; empty = twin disabled)"
1562
+ }
1563
+
1564
+ variable "brain_mcp_url" {
1476
1565
  type = string
1477
1566
  default = ""
1567
+ description = "Platform-served Brain MCP endpoint (consolidation U14). When set, twin-connector provisioning registers agents against it instead of the product /mcp/twin route. Empty = legacy product-served default."
1478
1568
  }
1479
1569
 
1480
- variable "compliance_anchor_retention_days" {
1481
- description = "Default Object Lock retention in days for the compliance audit-anchor bucket. SOC2 Type 1 baseline is 12 months (365)."
1570
+ variable "neptune_cluster_resource_id" {
1571
+ type = string
1572
+ default = ""
1573
+ description = "Neptune cluster resource id (etl-platform neptune stack output) for neptune-db IAM ARNs"
1574
+ }
1575
+
1576
+ variable "neptune_client_security_group_id" {
1577
+ type = string
1578
+ default = ""
1579
+ description = "neptune-client SG id (etl-platform neptune stack output) attached to the identity-graph-projector"
1580
+ }
1581
+
1582
+ variable "neptune_load_bucket" {
1583
+ type = string
1584
+ default = ""
1585
+ description = "Neptune bulk-load staging bucket name (etl-platform neptune stack; empty = bulk-rebuild disabled)"
1586
+ }
1587
+
1588
+ variable "neptune_loader_role_arn" {
1589
+ type = string
1590
+ default = ""
1591
+ description = "IAM role ARN the Neptune cluster assumes to read the load bucket (etl-platform neptune stack; empty = bulk-rebuild disabled)"
1592
+ }
1593
+
1594
+
1595
+ variable "lambda_max_memory_mb" {
1482
1596
  type = number
1483
- default = 365
1597
+ default = 10240
1598
+ description = "Account-level Lambda memory ceiling in MB. Legacy AWS accounts cap function memory at 3008 (raised only via AWS support case); handlers requesting more are clamped so a capped account's deploy doesn't fail mid-apply. Set via the runner-secrets key lambdaMaxMemoryMb on managed deployments."
1599
+ }
1484
1600
 
1485
- validation {
1486
- condition = var.compliance_anchor_retention_days > 0
1487
- error_message = "compliance_anchor_retention_days must be greater than 0."
1488
- }
1601
+ variable "agentcore_runtime_dispatch_enabled" {
1602
+ description = "THINK-585 U6: stage kill-switch for AgentCore Runtime chat dispatch (see lambda-api module)."
1603
+ type = bool
1604
+ default = false
1605
+ }
1606
+
1607
+ ################################################################################
1608
+ # THINK-915 — chat turn-latency observability (passthrough to the lambda-api
1609
+ # module; see terraform/modules/app/lambda-api/chat-latency-observability.tf).
1610
+ ################################################################################
1611
+
1612
+ variable "enable_chat_turn_latency_observability" {
1613
+ description = "THINK-915: create the per-stage chat turn-latency dashboard, the saved turn-timeline Logs Insights query, and the Lambda-native dispatch p95 alarm."
1614
+ type = bool
1615
+ default = true
1616
+ }
1617
+
1618
+ variable "enable_chat_turn_latency_metric_filters" {
1619
+ description = "THINK-915: create the agentcore_phase log metric filters (TurnRuntimeInvokeMs, AgentLoopMs) and the metric-filter-backed p95 alarm. OFF by default because the Lambda log groups are implicit and PutMetricFilter fails on a stage that has never served a chat turn."
1620
+ type = bool
1621
+ default = false
1622
+ }
1623
+
1624
+ variable "chat_turn_latency_metric_namespace" {
1625
+ description = "THINK-915: CloudWatch namespace prefix for the chat phase metrics; the stage is appended (Thinkwork/Chat/<stage>)."
1626
+ type = string
1627
+ default = "Thinkwork/Chat"
1628
+ }
1629
+
1630
+ variable "chat_turn_runtime_log_group_name" {
1631
+ description = "THINK-915: explicit AgentCore Pi runtime log group name. Empty discovers it by prefix at plan time."
1632
+ type = string
1633
+ default = ""
1634
+ }
1635
+
1636
+ variable "chat_turn_p95_alarm_threshold_ms" {
1637
+ description = "THINK-915: p95 threshold (ms) for the whole AgentCore runtime call, breaching on 2 of 3 five-minute periods."
1638
+ type = number
1639
+ default = 30000
1640
+ }
1641
+
1642
+ variable "chat_turn_latency_alarm_actions" {
1643
+ description = "THINK-915: SNS topic ARNs notified by the chat turn-latency alarms. Empty by default (no general alarm topic exists in the stack)."
1644
+ type = list(string)
1645
+ default = []
1489
1646
  }
@@ -154,16 +154,16 @@ fabricate results.
154
154
 
155
155
  You have access to ThinkWork Brain, the platform context layer:
156
156
 
157
- - **Memory** — Hindsight is the durable Brain. The platform saves learned
158
- context after normal turns so future conversations can recall what you learned.
159
- Use direct Hindsight memory tools such as `recall()` and `reflect()` for user
160
- and Space memory. Do not manually retain or journal turns; see
161
- `MEMORY_GUIDE.md` for the memory contract.
157
+ - **Memory** — platform-owned memory is the durable Brain. The platform
158
+ extracts learned context after normal turns so future conversations can recall
159
+ what you learned. Use `recall()` to look memory up and `remember()` only for
160
+ facts the requester explicitly asks you to keep. Do not manually retain or
161
+ journal turns; see `MEMORY_GUIDE.md` for the memory contract.
162
162
  - **Requester profile** — `USER.md` is already in your current prompt when a
163
163
  requester is known. In the rendered workspace, the source file lives at
164
164
  route/path `User/USER.md` (`User/` root, `USER.md` file). Use it directly for
165
- profile, preference, and family facts; do not call memory or Hindsight tools
166
- to re-fetch facts already present there.
165
+ profile, preference, and family facts; do not call memory tools to re-fetch
166
+ facts already present there.
167
167
  - **Workspace notes** — Use workspace file tools for structured working notes,
168
168
  contact lists, and procedural knowledge. Root `memory/` is Agent-owned,
169
169
  `User/memory/` is requester-owned, and `Thread/notes/` is for raw findings
@@ -174,7 +174,7 @@ You have access to ThinkWork Brain, the platform context layer:
174
174
  If `query_context` is available, use it for external or lazy-loaded context such
175
175
  as compiled pages, workspace files, approved search-safe MCP tools, source
176
176
  agents, or web/search providers. It is read-only and returns cited results plus
177
- provider status. Do not use Context Engine queries as a durable Hindsight memory
177
+ provider status. Do not use Context Engine queries as a durable memory
178
178
  backend; use direct memory tools for user and Space memory.
179
179
 
180
180
  ### Thread Management
@@ -191,10 +191,8 @@ workspace style guide says otherwise.
191
191
 
192
192
  ### Brain Sources
193
193
 
194
- Space reference documents are retained into Hindsight as Brain Sources. Use
194
+ Space reference documents are retained into platform memory as Brain Sources. Use
195
195
  direct memory lookup for durable Space document memory.
196
- Use any legacy `knowledge_base_search` tool only if the workspace explicitly
197
- provides it for compatibility.
198
196
 
199
197
  ### Computer Apps
200
198