thinkwork-cli 0.13.1 → 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.
- package/README.md +3 -14
- package/dist/{api-client-4DZ266J5.js → api-client-4P4JZOBX.js} +3 -1
- package/dist/bowser-6Z6JFAIR.js +2822 -0
- package/dist/{chunk-Y2WHJECR.js → chunk-4OMDWYZQ.js} +5 -44
- package/dist/chunk-AD2NIWB5.js +6516 -0
- package/dist/chunk-DV3MRBR5.js +43 -0
- package/dist/chunk-EI5ZX7CN.js +522 -0
- package/dist/chunk-EUJ7X6YD.js +126 -0
- package/dist/chunk-GG5WKBOX.js +436 -0
- package/dist/chunk-I64EZSU5.js +358 -0
- package/dist/chunk-KMIJ5KGT.js +128 -0
- package/dist/chunk-MWQ7RO76.js +137 -0
- package/dist/chunk-OCPHU34C.js +996 -0
- package/dist/chunk-OLUQ4U2Z.js +1728 -0
- package/dist/chunk-XYM7PE2A.js +2264 -0
- package/dist/chunk-YQCYD6NE.js +3299 -0
- package/dist/cli.js +49156 -31257
- package/dist/commands/enterprise/templates/deploy-repo/scripts/apply-release.mjs +0 -1
- package/dist/commands/enterprise/templates/deploy-repo/scripts/smoke.mjs +0 -1
- package/dist/commands/enterprise/templates/deploy-repo/terraform/main.tf +0 -14
- package/dist/dist-es-2OTNTL4N.js +315 -0
- package/dist/dist-es-2XVAH4BQ.js +14726 -0
- package/dist/dist-es-3DPDUJAH.js +2000 -0
- package/dist/dist-es-BNZTBBVC.js +176 -0
- package/dist/dist-es-CD2RBDAC.js +88 -0
- package/dist/dist-es-I4FW57PS.js +88 -0
- package/dist/dist-es-KL7Y5NB2.js +377 -0
- package/dist/dist-es-KVFWJNDY.js +318 -0
- package/dist/dist-es-PS73DWNL.js +70 -0
- package/dist/dist-es-S3NZQFGT.js +170 -0
- package/dist/dist-es-SGCA4P32.js +48 -0
- package/dist/dist-es-WBM6J4RA.js +70 -0
- package/dist/dist-es-ZGVADYIF.js +485 -0
- package/dist/dist-es-ZKC2QKD2.js +377 -0
- package/dist/drizzle/0076_scheduled_jobs_marco_backfill.sql +2 -1
- package/dist/drizzle/0079_seed_tenant_customize_catalog.sql +1 -0
- package/dist/drizzle/0090_brain_schema_extraction.sql +10 -0
- package/dist/drizzle/0132_drop_computer_tables.sql +3 -0
- package/dist/drizzle/0160_compliance_event_types_plugins.sql +2 -0
- package/dist/drizzle/0214_think137_drop_judge_evidence_roi.sql +1 -0
- package/dist/drizzle/0216_drop_agent_loop_versions_goal_worker_policy.sql +1 -0
- package/dist/drizzle/0227_analyst_reader_role.sql +17 -20
- package/dist/drizzle/0230_analyst_rls.sql +28 -36
- package/dist/drizzle/0250_kg_schema_extraction.sql +27 -0
- package/dist/drizzle/0251_brain_stragglers.sql +21 -0
- package/dist/drizzle/0253_drop_brain_substrate.sql +2 -0
- package/dist/drizzle/0257_agents_runtime_allow_harness.sql +24 -0
- package/dist/drizzle/0261_native_auth_control_plane.sql +332 -0
- package/dist/drizzle/0262_auth_subscription_tickets.sql +59 -0
- package/dist/drizzle/0263_agentcore_runtime_identifier.sql +69 -0
- package/dist/drizzle/0263_drop_workos_auth_runtime.sql +236 -0
- package/dist/drizzle/0264_auth_enrollment_attempt_limits.sql +15 -0
- package/dist/drizzle/0265_eval_runs_requester_identity.sql +28 -0
- package/dist/drizzle/0265_require_fully_valid_auth_publication.sql +27 -0
- package/dist/drizzle/0266_auth_identity_recovery_grants.sql +9 -0
- package/dist/drizzle/0266_eval_profiles_runtime_type.sql +12 -0
- package/dist/drizzle/0267_ontology_candidate_rejections.sql +53 -0
- package/dist/drizzle/0268_identity_crosswalk_routing.sql +182 -0
- package/dist/drizzle/0269_ontology_system_map.sql +31 -0
- package/dist/drizzle/0270_tool_execution_ledger.sql +115 -0
- package/dist/drizzle/0271_ontology_twin_declarations.sql +47 -0
- package/dist/drizzle/0272_identity_graph_projection_cursor.sql +23 -0
- package/dist/drizzle/0273_twin_materialization_suggestions.sql +29 -0
- package/dist/drizzle/0274_tenant_mcp_twin_keys.sql +59 -0
- package/dist/drizzle/0275_identity_bulk_rebuild_fence.sql +30 -0
- package/dist/drizzle/0276_tool_execution_ledger_allow_cascade_delete.sql +18 -0
- package/dist/drizzle/0277_knowledge_base_sources.sql +107 -0
- package/dist/drizzle/0278_kb_page_transcription.sql +55 -0
- package/dist/drizzle/0279_mcp_servers_off_plugin_provenance.sql +93 -0
- package/dist/drizzle/0280_work_item_external_refs_drop_plane_provider.sql +46 -0
- package/dist/drizzle/0281_tenant_mcp_twin_keys_expiry_suffix.sql +9 -0
- package/dist/drizzle/0282_tenant_mcp_twin_keys_grants.sql +24 -0
- package/dist/drizzle/0283_agents_agentcore_runtime_dispatch.sql +13 -0
- package/dist/drizzle/0284_user_brain_claims.sql +69 -0
- package/dist/drizzle/0285_tenant_mcp_twin_keys_trusted_subsystem.sql +30 -0
- package/dist/drizzle/0286_brain_analytics_key.sql +26 -0
- package/dist/drizzle/0287_brain_subject.sql +25 -0
- package/dist/drizzle/0288_multi_lane_identities.sql +25 -0
- package/dist/event-streams-7JNLJEEL.js +894 -0
- package/dist/event-streams-KDF5RWR6.js +1515 -0
- package/dist/loadSso-ETCXTR4I.js +576 -0
- package/dist/loadSso-UBD7KUHE.js +583 -0
- package/dist/plugins/README.md +2 -2
- package/dist/plugins/catalog/package.json +1 -5
- package/dist/plugins/catalog/src/__tests__/build-catalog.test.ts +6 -4
- package/dist/plugins/catalog/src/__tests__/catalog.test.ts +21 -21
- package/dist/plugins/catalog/src/__tests__/contracts.test.ts +102 -94
- package/dist/plugins/catalog/src/__tests__/plugin-package.test.ts +7 -8
- package/dist/plugins/catalog/src/__tests__/plugin-registry.test.ts +0 -20
- package/dist/plugins/catalog/src/contracts.ts +17 -179
- package/dist/plugins/catalog/src/registry/generated-first-party.ts +0 -24
- package/dist/plugins/n8n/test/integrated-app-contract.test.ts +1 -1
- package/dist/plugins/twenty/package.json +2 -1
- package/dist/plugins/twenty/scripts/LAMBDA_DEPLOY.md +114 -0
- package/dist/plugins/twenty/scripts/build-lambda.sh +29 -0
- package/dist/plugins/twenty/scripts/configure-product-views.ts +195 -0
- package/dist/plugins/twenty/scripts/lambda-handler.ts +49 -0
- package/dist/plugins/twenty/scripts/lib/__tests__/load-attachments.test.ts +38 -0
- package/dist/plugins/twenty/scripts/lib/__tests__/load-records.test.ts +145 -2
- package/dist/plugins/twenty/scripts/lib/__tests__/mappers.test.ts +397 -151
- package/dist/plugins/twenty/scripts/lib/__tests__/members-ensure.test.ts +28 -129
- package/dist/plugins/twenty/scripts/lib/__tests__/provision-members-db.test.ts +10 -0
- package/dist/plugins/twenty/scripts/lib/__tests__/schema-ensure.test.ts +13 -8
- package/dist/plugins/twenty/scripts/lib/lastmile-reader.ts +222 -2
- package/dist/plugins/twenty/scripts/lib/load-attachments.ts +29 -0
- package/dist/plugins/twenty/scripts/lib/load-records.ts +160 -43
- package/dist/plugins/twenty/scripts/lib/mappers.ts +368 -152
- package/dist/plugins/twenty/scripts/lib/members-ensure.ts +43 -268
- package/dist/plugins/twenty/scripts/lib/provision-members-db.ts +57 -0
- package/dist/plugins/twenty/scripts/lib/schema-ensure.ts +136 -31
- package/dist/plugins/twenty/scripts/migrate-lastmile.ts +254 -152
- package/dist/plugins/twenty/scripts/provision-twenty-members.ts +44 -1
- package/dist/plugins/twenty/scripts/purge-lastmile-import.ts +178 -0
- package/dist/plugins/twenty/scripts/restructure-products.ts +312 -0
- package/dist/plugins/twenty/scripts/retag-stage-values.ts +362 -0
- package/dist/plugins/twenty/test/manifest.test.ts +2 -4
- package/dist/scripts/post-deploy.sh +79 -1
- package/dist/signin-5QZNRSOO.js +821 -0
- package/dist/sso-oidc-XK673P54.js +837 -0
- package/dist/sts-OXI2UALF.js +1113 -0
- package/dist/sts-SQW4NBK3.js +1117 -0
- package/dist/terraform/examples/greenfield/main.tf +391 -176
- package/dist/terraform/examples/greenfield/terraform.tfvars.example +26 -8
- package/dist/terraform/modules/app/agentcore-admin/main.tf +47 -0
- package/dist/terraform/modules/app/agentcore-code-interpreter/README.md +39 -47
- package/dist/terraform/modules/app/agentcore-code-interpreter/main.tf +13 -66
- package/dist/terraform/modules/app/agentcore-identity/main.tf +253 -0
- package/dist/terraform/modules/app/agentcore-identity/outputs.tf +51 -0
- package/dist/terraform/modules/app/agentcore-identity/scripts/bootstrap_twenty_oauth_client.sh +239 -0
- package/dist/terraform/modules/app/agentcore-identity/scripts/delete_identity.sh +22 -0
- package/dist/terraform/modules/app/agentcore-identity/scripts/delete_twenty_identity.sh +16 -0
- package/dist/terraform/modules/app/agentcore-identity/scripts/delete_workload_identity.sh +19 -0
- package/dist/terraform/modules/app/agentcore-identity/scripts/ensure_workload_identity.sh +29 -0
- package/dist/terraform/modules/app/agentcore-identity/scripts/read_identity.sh +55 -0
- package/dist/terraform/modules/app/agentcore-identity/scripts/reconcile_identity.sh +73 -0
- package/dist/terraform/modules/app/agentcore-identity/scripts/reconcile_twenty_identity.sh +45 -0
- package/dist/terraform/modules/app/agentcore-identity/scripts/reconcile_twenty_provider.mjs +123 -0
- package/dist/terraform/modules/app/agentcore-identity/tests/tainted-marker/after.tf +15 -0
- package/dist/terraform/modules/app/agentcore-identity/tests/tainted-marker/before.tf +7 -0
- package/dist/terraform/modules/app/agentcore-identity/tests/tainted-marker/identity-after.tf +8 -0
- package/dist/terraform/modules/app/agentcore-identity/tests/tainted-marker/identity-before.tf +9 -0
- package/dist/terraform/modules/app/agentcore-identity/tests/tainted-marker/thinkwork-after.tf +3 -0
- package/dist/terraform/modules/app/agentcore-identity/tests/tainted-marker/thinkwork-before.tf +3 -0
- package/dist/terraform/modules/app/agentcore-identity/variables.tf +60 -0
- package/dist/terraform/modules/app/agentcore-memory/README.md +46 -9
- package/dist/terraform/modules/app/agentcore-memory/main.tf +27 -10
- package/dist/terraform/modules/app/agentcore-memory/scripts/create_or_find_memory.sh +156 -24
- package/dist/terraform/modules/app/agentcore-pi/README.md +1 -3
- package/dist/terraform/modules/app/agentcore-pi/main.tf +42 -52
- package/dist/terraform/modules/app/agentcore-pi/outputs.tf +3 -3
- package/dist/terraform/modules/app/agentcore-pi/scripts/reconcile_pi_runtime.mjs +175 -0
- package/dist/terraform/modules/app/agentcore-pi/variables.tf +35 -28
- package/dist/terraform/modules/app/agentcore-platform/main.tf +68 -0
- package/dist/terraform/modules/app/agentcore-runtime/main.tf +4 -20
- package/dist/terraform/modules/app/appsync-subscriptions/main.tf +127 -21
- package/dist/terraform/modules/app/appsync-subscriptions/outputs.tf +0 -6
- package/dist/terraform/modules/app/appsync-subscriptions/variables.tf +5 -0
- package/dist/terraform/modules/app/capability-broker/main.tf +2 -2
- package/dist/terraform/modules/app/capability-broker/variables.tf +11 -0
- package/dist/terraform/modules/app/deployment-control-plane/README.md +264 -0
- package/dist/terraform/modules/app/deployment-control-plane/buildspec.yml +4 -1
- package/dist/terraform/modules/app/deployment-control-plane/main.tf +94 -0
- package/dist/terraform/modules/app/deployment-control-plane/outputs.tf +5 -0
- package/dist/terraform/modules/app/deployment-control-plane/runner.py +3689 -233
- package/dist/terraform/modules/app/deployment-control-plane/test_runner_bundle.py +2579 -140
- package/dist/terraform/modules/app/deployment-control-plane/variables.tf +33 -0
- package/dist/terraform/modules/app/lambda-api/auth-state.tf +72 -0
- package/dist/terraform/modules/app/lambda-api/chat-latency-observability.tf +466 -0
- package/dist/terraform/modules/app/lambda-api/dispatch-dlq.tf +55 -0
- package/dist/terraform/modules/app/lambda-api/handlers.tf +531 -619
- package/dist/terraform/modules/app/lambda-api/iam-grouped.tf +350 -241
- package/dist/terraform/modules/app/lambda-api/main.tf +75 -13
- package/dist/terraform/modules/app/lambda-api/memory-alarms.tf +3 -28
- package/dist/terraform/modules/app/lambda-api/oauth-secrets.tf +1 -2
- package/dist/terraform/modules/app/lambda-api/outputs.tf +17 -10
- package/dist/terraform/modules/app/lambda-api/runtime-config.tf +3 -21
- package/dist/terraform/modules/app/lambda-api/turn-assertion.tf +45 -0
- package/dist/terraform/modules/app/lambda-api/variables.tf +307 -121
- package/dist/{plugins/n8n/terraform → terraform/modules/app}/n8n/README.md +1 -1
- package/dist/{plugins/n8n/terraform → terraform/modules/app}/n8n/main.tf +18 -18
- package/dist/terraform/modules/app/sandbox-log-scrubber/README.md +11 -10
- package/dist/terraform/modules/app/sandbox-log-scrubber/main.tf +5 -5
- package/dist/terraform/modules/app/static-site/main.tf +1 -1
- package/dist/terraform/modules/app/www-dns/main.tf +9 -27
- package/dist/terraform/modules/app/www-dns/variables.tf +4 -10
- package/dist/terraform/modules/data/aurora-postgres/README.md +34 -0
- package/dist/terraform/modules/data/aurora-postgres/alarms.tf +82 -0
- package/dist/terraform/modules/data/aurora-postgres/main.tf +27 -57
- package/dist/terraform/modules/data/aurora-postgres/outputs.tf +0 -9
- package/dist/terraform/modules/data/aurora-postgres/variables.tf +41 -0
- package/dist/terraform/modules/data/s3-buckets/main.tf +5 -6
- package/dist/terraform/modules/foundation/cognito/main.tf +367 -72
- package/dist/terraform/modules/foundation/cognito/outputs.tf +47 -0
- package/dist/terraform/modules/foundation/cognito/variables.tf +131 -9
- package/dist/terraform/modules/thinkwork/README.md +5 -1
- package/dist/terraform/modules/thinkwork/main.tf +459 -234
- package/dist/terraform/modules/thinkwork/outputs.tf +44 -62
- package/dist/terraform/modules/thinkwork/variables.tf +353 -89
- package/dist/terraform/schema.graphql +69 -36
- package/dist/workspace-defaults/files/INSTRUCTIONS.md +9 -11
- package/dist/workspace-defaults/files/MEMORY_GUIDE.md +38 -35
- package/dist/workspace-defaults/files/ROUTER.md +1 -1
- package/dist/workspace-defaults/files/TOOLS.md +9 -39
- package/dist/workspace-defaults/files/USER.md +1 -0
- package/dist/workspace-defaults/files/agents/analyst/INSTRUCTIONS.md +6 -3
- package/dist/workspace-defaults/files/catalog-skills/brain-brief-builder/SKILL.md +165 -0
- package/dist/workspace-defaults/files/catalog-skills/n8n-workflow-operator/SKILL.md +75 -0
- package/dist/workspace-defaults/files/catalog-skills/n8n-workflow-operator/references/mcp-tooling.md +40 -0
- package/dist/workspace-defaults/files/catalog-skills/n8n-workflow-operator/references/validation-and-handoff.md +40 -0
- package/dist/workspace-defaults/files/catalog-skills/n8n-workflow-operator/references/workflow-authoring.md +46 -0
- package/dist/workspace-defaults/files/skills/artifact-builder/references/crm-dashboard.md +1 -1
- package/dist/workspace-defaults/files/skills/document-composer/SKILL.md +22 -3
- package/package.json +3 -2
- package/dist/drizzle/0261_thread_turns_origin_turn_index.sql +0 -11
- package/dist/plugins/company-data/README.md +0 -49
- package/dist/plugins/company-data/package.json +0 -21
- package/dist/plugins/company-data/src/index.ts +0 -30
- package/dist/plugins/company-data/src/manifest.ts +0 -26
- package/dist/plugins/company-data/test/manifest.test.ts +0 -116
- package/dist/plugins/company-data/tsconfig.json +0 -8
- package/dist/plugins/company-etl/README.md +0 -46
- package/dist/plugins/company-etl/package.json +0 -21
- package/dist/plugins/company-etl/src/index.ts +0 -29
- package/dist/plugins/company-etl/src/manifest.ts +0 -26
- package/dist/plugins/company-etl/test/manifest.test.ts +0 -108
- package/dist/plugins/company-etl/tsconfig.json +0 -8
- package/dist/plugins/lastmile/README.md +0 -50
- package/dist/plugins/lastmile/package.json +0 -23
- package/dist/plugins/lastmile/smoke/lastmile-plugin-smoke.mjs +0 -661
- package/dist/plugins/lastmile/src/api/tasks-adapter.ts +0 -572
- package/dist/plugins/lastmile/src/discovery.fixture.ts +0 -64
- package/dist/plugins/lastmile/src/index.ts +0 -46
- package/dist/plugins/lastmile/src/manifest.ts +0 -139
- package/dist/plugins/lastmile/test/api/tasks-adapter.test.ts +0 -266
- package/dist/plugins/lastmile/test/discovery.test.ts +0 -88
- package/dist/plugins/lastmile/tsconfig.json +0 -8
- package/dist/plugins/n8n/smoke/n8n-managed-app-smoke.mjs +0 -409
- package/dist/plugins/twenty/smoke/twenty-managed-app-smoke.mjs +0 -359
- package/dist/plugins/workos-auth/package.json +0 -22
- package/dist/plugins/workos-auth/src/index.ts +0 -30
- package/dist/plugins/workos-auth/src/manifest.ts +0 -40
- package/dist/plugins/workos-auth/src/provider-contract.ts +0 -39
- package/dist/plugins/workos-auth/test/manifest.test.ts +0 -94
- package/dist/plugins/workos-auth/tsconfig.json +0 -8
- package/dist/terraform/modules/app/agentcore-code-interpreter/Dockerfile.sandbox-base +0 -61
- package/dist/terraform/modules/app/agentcore-code-interpreter/sandbox/sitecustomize.py +0 -227
- package/dist/terraform/modules/app/agentcore-code-interpreter/sandbox/test_sitecustomize.py +0 -277
- package/dist/terraform/modules/app/agentcore-code-interpreter/scripts/build_and_push_sandbox_base.sh +0 -70
- package/dist/terraform/modules/app/agentcore-harness/main.tf +0 -101
- package/dist/terraform/modules/app/agentcore-harness/outputs.tf +0 -9
- package/dist/terraform/modules/app/agentcore-harness/variables.tf +0 -25
- package/dist/terraform/modules/app/hindsight-memory/README.md +0 -89
- package/dist/terraform/modules/app/hindsight-memory/main.tf +0 -411
- package/dist/terraform/modules/data/bedrock-knowledge-base/main.tf +0 -102
- /package/dist/{plugins/n8n/terraform → terraform/modules/app}/n8n/outputs.tf +0 -0
- /package/dist/{plugins/n8n/terraform → terraform/modules/app}/n8n/scripts/sync-database.py +0 -0
- /package/dist/{plugins/n8n/terraform → terraform/modules/app}/n8n/scripts/test_sync_database.py +0 -0
- /package/dist/{plugins/n8n/terraform → terraform/modules/app}/n8n/variables.tf +0 -0
- /package/dist/{plugins/twenty/terraform → terraform/modules/app}/twenty/README.md +0 -0
- /package/dist/{plugins/twenty/terraform → terraform/modules/app}/twenty/main.tf +0 -0
- /package/dist/{plugins/twenty/terraform → terraform/modules/app}/twenty/outputs.tf +0 -0
- /package/dist/{plugins/twenty/terraform → terraform/modules/app}/twenty/variables.tf +0 -0
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
variable "enabled" {
|
|
2
|
-
description = "Create the AgentCore Harness trial IAM surface (THINK-311 U4). Pure-IAM and inert — nothing invokes Harness until U5 — so it defaults on; flip off to remove the role without touching root variables."
|
|
3
|
-
type = bool
|
|
4
|
-
default = true
|
|
5
|
-
}
|
|
6
|
-
|
|
7
|
-
variable "stage" {
|
|
8
|
-
description = "Deployment stage (dev, prod, etc.)"
|
|
9
|
-
type = string
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
variable "region" {
|
|
13
|
-
description = "AWS region"
|
|
14
|
-
type = string
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
variable "account_id" {
|
|
18
|
-
description = "AWS account ID"
|
|
19
|
-
type = string
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
variable "bucket_name" {
|
|
23
|
-
description = "Stage workspace S3 bucket name — Harness microVMs read tenant skill sources under tenants/*"
|
|
24
|
-
type = string
|
|
25
|
-
}
|
|
@@ -1,89 +0,0 @@
|
|
|
1
|
-
# Hindsight Memory Module (canonical user and Space memory)
|
|
2
|
-
|
|
3
|
-
Thinkwork provisions AgentCore managed memory as an AWS platform primitive, but
|
|
4
|
-
full ThinkWork installs use **Hindsight** as the canonical user and Space memory
|
|
5
|
-
provider. AgentCore-only memory remains available as an explicit
|
|
6
|
-
low-cost/development opt-out.
|
|
7
|
-
|
|
8
|
-
## Memory layers
|
|
9
|
-
|
|
10
|
-
| Layer | Backend | Always on | What it stores |
|
|
11
|
-
| --------------------- | ----------------------- | ----------------------------- | ------------------------------------------------------------------------------ |
|
|
12
|
-
| 1. Workspace files | S3 per-agent | Yes | Scratchpad, working files |
|
|
13
|
-
| 2. Thread history | Aurora `messages` table | Yes | Last 30 turns per thread |
|
|
14
|
-
| 3a. Managed long-term | AgentCore Memory | **Yes** | AWS platform memory primitive and low-cost/development fallback |
|
|
15
|
-
| 3b. Product long-term | Hindsight ECS service | **Default for full installs** | Canonical user/Space memory with entity graph + BM25 + cross-encoder reranking |
|
|
16
|
-
|
|
17
|
-
## How retention works
|
|
18
|
-
|
|
19
|
-
The agent container automatically emits a `CreateEvent` into AgentCore
|
|
20
|
-
Memory after every turn (user message + assistant response), via
|
|
21
|
-
`memory.store_turn_pair` in `packages/agentcore/agent-container/memory.py`.
|
|
22
|
-
AgentCore's background strategies extract facts into four namespaces:
|
|
23
|
-
|
|
24
|
-
- `assistant_{actorId}` — semantic facts
|
|
25
|
-
- `preferences_{actorId}` — user preferences
|
|
26
|
-
- `session_{sessionId}` — session summaries
|
|
27
|
-
- `episodes_{actorId}/{sessionId}` — episodic memory
|
|
28
|
-
|
|
29
|
-
The agent reads them back via the `recall()` tool. There is no need for
|
|
30
|
-
the model to call `remember()` for routine facts — it only exists for
|
|
31
|
-
user-driven "please remember X" requests.
|
|
32
|
-
|
|
33
|
-
When Hindsight is enabled, the container ALSO registers
|
|
34
|
-
`hindsight_retain`, `hindsight_recall`, and `hindsight_reflect` tools that
|
|
35
|
-
route to the Hindsight service. `remember()` dual-writes to both backends
|
|
36
|
-
so explicit memories land in both systems.
|
|
37
|
-
|
|
38
|
-
## Usage
|
|
39
|
-
|
|
40
|
-
### Default — Hindsight canonical memory
|
|
41
|
-
|
|
42
|
-
```hcl
|
|
43
|
-
module "thinkwork" {
|
|
44
|
-
source = "thinkwork-ai/thinkwork/aws"
|
|
45
|
-
|
|
46
|
-
stage = "prod"
|
|
47
|
-
# enable_hindsight defaults to true
|
|
48
|
-
}
|
|
49
|
-
```
|
|
50
|
-
|
|
51
|
-
The `terraform/modules/app/agentcore-memory` module is still instantiated, but
|
|
52
|
-
the active user/Space memory engine resolves to Hindsight.
|
|
53
|
-
|
|
54
|
-
### Low-cost/development AgentCore-only opt-out
|
|
55
|
-
|
|
56
|
-
```hcl
|
|
57
|
-
module "thinkwork" {
|
|
58
|
-
source = "thinkwork-ai/thinkwork/aws"
|
|
59
|
-
|
|
60
|
-
stage = "prod"
|
|
61
|
-
enable_hindsight = false
|
|
62
|
-
memory_engine = "agentcore"
|
|
63
|
-
|
|
64
|
-
# This is not the full product memory path.
|
|
65
|
-
}
|
|
66
|
-
```
|
|
67
|
-
|
|
68
|
-
When `enable_hindsight = true`, Terraform creates:
|
|
69
|
-
|
|
70
|
-
- ECS Fargate cluster + service (ARM64, 2 vCPU, 4 GB)
|
|
71
|
-
- Application Load Balancer
|
|
72
|
-
- Security groups (ALB → Hindsight → Aurora ingress)
|
|
73
|
-
- CloudWatch log group
|
|
74
|
-
|
|
75
|
-
Cost: ~$75/mo (ARM64 Fargate + ALB hours).
|
|
76
|
-
|
|
77
|
-
## Turning Hindsight on/off
|
|
78
|
-
|
|
79
|
-
Toggling `enable_hindsight` and re-running `thinkwork deploy`:
|
|
80
|
-
|
|
81
|
-
- **false → true**: creates the ECS + ALB infra. Agents gain the three
|
|
82
|
-
`hindsight_*` tools on their next invoke. The active memory engine resolves
|
|
83
|
-
to Hindsight when `memory_engine` is empty.
|
|
84
|
-
- **true → false**: destroys the ECS + ALB infra. Agents lose the
|
|
85
|
-
`hindsight_*` tools. This should be paired with `memory_engine = "agentcore"`
|
|
86
|
-
for explicit low-cost/development deployments.
|
|
87
|
-
|
|
88
|
-
Memory data is not migrated between backends. Hindsight records and
|
|
89
|
-
AgentCore records live in separate stores.
|
|
@@ -1,411 +0,0 @@
|
|
|
1
|
-
################################################################################
|
|
2
|
-
# Hindsight Memory (Optional Add-On) — App Module
|
|
3
|
-
#
|
|
4
|
-
# Optional ECS Fargate + ALB service for Hindsight long-term memory. Only
|
|
5
|
-
# created when `enable_hindsight = true`. AgentCore managed memory is
|
|
6
|
-
# always on (see ../agentcore-memory) — Hindsight runs alongside it as an
|
|
7
|
-
# add-on, not as a replacement.
|
|
8
|
-
#
|
|
9
|
-
# Hindsight provides hindsight_retain/recall/reflect tools for cross-thread
|
|
10
|
-
# organizational memory with entity-graph traversal and cross-encoder
|
|
11
|
-
# reranking. It runs local embeddings + reranker and uses the shared Aurora
|
|
12
|
-
# PostgreSQL instance with pgvector.
|
|
13
|
-
################################################################################
|
|
14
|
-
|
|
15
|
-
variable "stage" {
|
|
16
|
-
type = string
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
variable "vpc_id" {
|
|
20
|
-
type = string
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
variable "subnet_ids" {
|
|
24
|
-
type = list(string)
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
variable "db_security_group_id" {
|
|
28
|
-
type = string
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
variable "database_url" {
|
|
32
|
-
type = string
|
|
33
|
-
sensitive = true
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
variable "database_name" {
|
|
37
|
-
description = <<-EOT
|
|
38
|
-
Dedicated Hindsight database name (THINK-220). Empty (default) keeps the
|
|
39
|
-
legacy layout: Hindsight lives in the `hindsight` schema of the primary
|
|
40
|
-
database named in database_url. Set (e.g. "thinkwork_hindsight") to point
|
|
41
|
-
the service at that database on the same cluster with schema `public` —
|
|
42
|
-
the vanilla upstream configuration, which its maintenance-loop discovery
|
|
43
|
-
queries require. The database must already exist (bootstrap SQL; Terraform
|
|
44
|
-
cannot CREATE DATABASE inside the cluster).
|
|
45
|
-
EOT
|
|
46
|
-
type = string
|
|
47
|
-
default = ""
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
locals {
|
|
51
|
-
# database_url with its path segment swapped for var.database_name.
|
|
52
|
-
# Matches "...host:port/<db>" with an optional "?query" tail.
|
|
53
|
-
hindsight_database_url = (
|
|
54
|
-
var.database_name == ""
|
|
55
|
-
? var.database_url
|
|
56
|
-
: replace(var.database_url, "/(/[^/?]+)([?].*)?$/", "/${var.database_name}$2")
|
|
57
|
-
)
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
variable "image_tag" {
|
|
61
|
-
description = "Hindsight Docker image tag (ghcr.io/vectorize-io/hindsight:<tag>)"
|
|
62
|
-
type = string
|
|
63
|
-
default = "0.8.4"
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
variable "enable_auto_consolidation" {
|
|
67
|
-
description = "Run Hindsight's observation consolidation engine automatically after retain. Service-level default; per-bank config overrides apply on top."
|
|
68
|
-
type = bool
|
|
69
|
-
default = true
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
variable "consolidation_dedup_threshold" {
|
|
73
|
-
description = "Cosine-similarity threshold for near-duplicate observation reconciliation (0.0-1.0; 1.0 disables). Hindsight default is 0.97 — set explicitly so deploys don't drift with image defaults."
|
|
74
|
-
type = string
|
|
75
|
-
default = "0.97"
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
variable "retain_llm_model" {
|
|
79
|
-
description = "Bedrock model id for Hindsight's retain/extraction pass. Default = Haiku 4.5, validated on image 0.8.4 (THINK-201, 2026-07-06): 12.9% dangling-referent rate vs ~38% for gpt-oss-20b, best usefulness of any measured config, zero Anthropic tool-schema errors (the 0.5.0 incompatibility that caused the THINK-198 incident is fixed upstream). Evidence: docs/solutions/tooling-decisions/hindsight-084-upgrade-validation-2026-07-06.md. Requires image >= 0.8.x for anthropic.* models."
|
|
80
|
-
type = string
|
|
81
|
-
default = "us.anthropic.claude-haiku-4-5-20251001-v1:0"
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
variable "observations_mission" {
|
|
85
|
-
description = "Service-level default observations mission steering what consolidation synthesizes. Empty string omits the env var so the image default applies. Per-bank overrides apply on top."
|
|
86
|
-
type = string
|
|
87
|
-
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."
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
data "aws_region" "current" {}
|
|
91
|
-
|
|
92
|
-
################################################################################
|
|
93
|
-
# ECS Cluster
|
|
94
|
-
################################################################################
|
|
95
|
-
|
|
96
|
-
resource "aws_ecs_cluster" "main" {
|
|
97
|
-
name = "thinkwork-${var.stage}-cluster"
|
|
98
|
-
|
|
99
|
-
setting {
|
|
100
|
-
name = "containerInsights"
|
|
101
|
-
value = "enabled"
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
tags = { Name = "thinkwork-${var.stage}-cluster" }
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
################################################################################
|
|
108
|
-
# IAM
|
|
109
|
-
################################################################################
|
|
110
|
-
|
|
111
|
-
resource "aws_iam_role" "ecs_execution" {
|
|
112
|
-
name = "thinkwork-${var.stage}-hindsight-execution"
|
|
113
|
-
|
|
114
|
-
assume_role_policy = jsonencode({
|
|
115
|
-
Version = "2012-10-17"
|
|
116
|
-
Statement = [{
|
|
117
|
-
Action = "sts:AssumeRole"
|
|
118
|
-
Effect = "Allow"
|
|
119
|
-
Principal = { Service = "ecs-tasks.amazonaws.com" }
|
|
120
|
-
}]
|
|
121
|
-
})
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
resource "aws_iam_role_policy_attachment" "ecs_execution" {
|
|
125
|
-
role = aws_iam_role.ecs_execution.name
|
|
126
|
-
policy_arn = "arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy"
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
resource "aws_iam_role" "ecs_task" {
|
|
130
|
-
name = "thinkwork-${var.stage}-hindsight-task"
|
|
131
|
-
|
|
132
|
-
assume_role_policy = jsonencode({
|
|
133
|
-
Version = "2012-10-17"
|
|
134
|
-
Statement = [{
|
|
135
|
-
Action = "sts:AssumeRole"
|
|
136
|
-
Effect = "Allow"
|
|
137
|
-
Principal = { Service = "ecs-tasks.amazonaws.com" }
|
|
138
|
-
}]
|
|
139
|
-
})
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
resource "aws_iam_role_policy" "bedrock_access" {
|
|
143
|
-
name = "bedrock-access"
|
|
144
|
-
role = aws_iam_role.ecs_task.id
|
|
145
|
-
|
|
146
|
-
policy = jsonencode({
|
|
147
|
-
Version = "2012-10-17"
|
|
148
|
-
Statement = [{
|
|
149
|
-
Effect = "Allow"
|
|
150
|
-
Action = ["bedrock:InvokeModel", "bedrock:InvokeModelWithResponseStream"]
|
|
151
|
-
Resource = "*"
|
|
152
|
-
}]
|
|
153
|
-
})
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
################################################################################
|
|
157
|
-
# Security Groups
|
|
158
|
-
################################################################################
|
|
159
|
-
|
|
160
|
-
resource "aws_security_group" "hindsight" {
|
|
161
|
-
name_prefix = "thinkwork-${var.stage}-hindsight-"
|
|
162
|
-
description = "Hindsight ECS task"
|
|
163
|
-
vpc_id = var.vpc_id
|
|
164
|
-
|
|
165
|
-
ingress {
|
|
166
|
-
description = "ALB to Hindsight API"
|
|
167
|
-
from_port = 8888
|
|
168
|
-
to_port = 8888
|
|
169
|
-
protocol = "tcp"
|
|
170
|
-
security_groups = [aws_security_group.alb.id]
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
egress {
|
|
174
|
-
from_port = 0
|
|
175
|
-
to_port = 0
|
|
176
|
-
protocol = "-1"
|
|
177
|
-
cidr_blocks = ["0.0.0.0/0"]
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
tags = { Name = "thinkwork-${var.stage}-hindsight-sg" }
|
|
181
|
-
lifecycle { create_before_destroy = true }
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
resource "aws_security_group" "alb" {
|
|
185
|
-
name_prefix = "thinkwork-${var.stage}-hindsight-alb-"
|
|
186
|
-
description = "Hindsight ALB"
|
|
187
|
-
vpc_id = var.vpc_id
|
|
188
|
-
|
|
189
|
-
ingress {
|
|
190
|
-
from_port = 80
|
|
191
|
-
to_port = 80
|
|
192
|
-
protocol = "tcp"
|
|
193
|
-
cidr_blocks = ["0.0.0.0/0"]
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
egress {
|
|
197
|
-
from_port = 0
|
|
198
|
-
to_port = 0
|
|
199
|
-
protocol = "-1"
|
|
200
|
-
cidr_blocks = ["0.0.0.0/0"]
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
tags = { Name = "thinkwork-${var.stage}-hindsight-alb-sg" }
|
|
204
|
-
lifecycle { create_before_destroy = true }
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
resource "aws_security_group_rule" "aurora_from_hindsight" {
|
|
208
|
-
type = "ingress"
|
|
209
|
-
from_port = 5432
|
|
210
|
-
to_port = 5432
|
|
211
|
-
protocol = "tcp"
|
|
212
|
-
source_security_group_id = aws_security_group.hindsight.id
|
|
213
|
-
security_group_id = var.db_security_group_id
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
################################################################################
|
|
217
|
-
# ALB
|
|
218
|
-
################################################################################
|
|
219
|
-
|
|
220
|
-
resource "aws_lb" "hindsight" {
|
|
221
|
-
name = "tw-${var.stage}-hindsight"
|
|
222
|
-
internal = false
|
|
223
|
-
load_balancer_type = "application"
|
|
224
|
-
security_groups = [aws_security_group.alb.id]
|
|
225
|
-
subnets = var.subnet_ids
|
|
226
|
-
|
|
227
|
-
# Synchronous retain runs LLM extraction + auto-consolidation and routinely
|
|
228
|
-
# exceeds the 60s ALB default, which returned 504s to the retain Lambda
|
|
229
|
-
# while Hindsight was still working (every dead-lettered retain attempt on
|
|
230
|
-
# dev showed ~60.1-60.5s backend latency). Must stay above the retain
|
|
231
|
-
# Lambda's HINDSIGHT_TIMEOUT_MS so the client, not the ALB, owns timeouts.
|
|
232
|
-
idle_timeout = 300
|
|
233
|
-
|
|
234
|
-
tags = { Name = "thinkwork-${var.stage}-hindsight-alb" }
|
|
235
|
-
}
|
|
236
|
-
|
|
237
|
-
resource "aws_lb_target_group" "hindsight" {
|
|
238
|
-
name = "tw-${var.stage}-hindsight"
|
|
239
|
-
port = 8888
|
|
240
|
-
protocol = "HTTP"
|
|
241
|
-
vpc_id = var.vpc_id
|
|
242
|
-
target_type = "ip"
|
|
243
|
-
|
|
244
|
-
health_check {
|
|
245
|
-
path = "/health"
|
|
246
|
-
port = "8888"
|
|
247
|
-
protocol = "HTTP"
|
|
248
|
-
healthy_threshold = 2
|
|
249
|
-
unhealthy_threshold = 3
|
|
250
|
-
timeout = 10
|
|
251
|
-
interval = 30
|
|
252
|
-
matcher = "200-399"
|
|
253
|
-
}
|
|
254
|
-
|
|
255
|
-
tags = { Name = "thinkwork-${var.stage}-hindsight-tg" }
|
|
256
|
-
}
|
|
257
|
-
|
|
258
|
-
resource "aws_lb_listener" "hindsight" {
|
|
259
|
-
load_balancer_arn = aws_lb.hindsight.arn
|
|
260
|
-
port = 80
|
|
261
|
-
protocol = "HTTP"
|
|
262
|
-
|
|
263
|
-
default_action {
|
|
264
|
-
type = "forward"
|
|
265
|
-
target_group_arn = aws_lb_target_group.hindsight.arn
|
|
266
|
-
}
|
|
267
|
-
}
|
|
268
|
-
|
|
269
|
-
################################################################################
|
|
270
|
-
# CloudWatch Logs
|
|
271
|
-
################################################################################
|
|
272
|
-
|
|
273
|
-
resource "aws_cloudwatch_log_group" "hindsight" {
|
|
274
|
-
name = "/thinkwork/${var.stage}/hindsight"
|
|
275
|
-
retention_in_days = 14
|
|
276
|
-
|
|
277
|
-
tags = { Name = "thinkwork-${var.stage}-hindsight-logs" }
|
|
278
|
-
}
|
|
279
|
-
|
|
280
|
-
################################################################################
|
|
281
|
-
# ECS Task Definition
|
|
282
|
-
################################################################################
|
|
283
|
-
|
|
284
|
-
resource "aws_ecs_task_definition" "hindsight" {
|
|
285
|
-
family = "thinkwork-${var.stage}-hindsight"
|
|
286
|
-
requires_compatibilities = ["FARGATE"]
|
|
287
|
-
network_mode = "awsvpc"
|
|
288
|
-
cpu = 2048
|
|
289
|
-
memory = 4096
|
|
290
|
-
execution_role_arn = aws_iam_role.ecs_execution.arn
|
|
291
|
-
task_role_arn = aws_iam_role.ecs_task.arn
|
|
292
|
-
|
|
293
|
-
lifecycle {
|
|
294
|
-
precondition {
|
|
295
|
-
# A dedicated Hindsight database that is actually the primary database
|
|
296
|
-
# would put Hindsight's `public` schema on top of the thinkwork tables.
|
|
297
|
-
condition = var.database_name == "" || !endswith(split("?", var.database_url)[0], "/${var.database_name}")
|
|
298
|
-
error_message = "database_name must be distinct from the primary database in database_url (THINK-220)."
|
|
299
|
-
}
|
|
300
|
-
}
|
|
301
|
-
|
|
302
|
-
runtime_platform {
|
|
303
|
-
operating_system_family = "LINUX"
|
|
304
|
-
cpu_architecture = "ARM64"
|
|
305
|
-
}
|
|
306
|
-
|
|
307
|
-
container_definitions = jsonencode([{
|
|
308
|
-
name = "hindsight"
|
|
309
|
-
image = "ghcr.io/vectorize-io/hindsight:${var.image_tag}"
|
|
310
|
-
essential = true
|
|
311
|
-
|
|
312
|
-
portMappings = [{
|
|
313
|
-
containerPort = 8888
|
|
314
|
-
protocol = "tcp"
|
|
315
|
-
}]
|
|
316
|
-
|
|
317
|
-
environment = concat([
|
|
318
|
-
{ name = "HINDSIGHT_API_DATABASE_URL", value = local.hindsight_database_url },
|
|
319
|
-
# `public` on a dedicated database is upstream's vanilla layout — the
|
|
320
|
-
# maintenance-loop discovery queries only work there (THINK-220).
|
|
321
|
-
{ name = "HINDSIGHT_API_DATABASE_SCHEMA", value = var.database_name == "" ? "hindsight" : "public" },
|
|
322
|
-
{ name = "HINDSIGHT_API_VECTOR_EXTENSION", value = "pgvector" },
|
|
323
|
-
{ name = "HINDSIGHT_API_TEXT_SEARCH_EXTENSION", value = "native" },
|
|
324
|
-
{ name = "HINDSIGHT_API_RUN_MIGRATIONS_ON_STARTUP", value = "true" },
|
|
325
|
-
{ name = "HINDSIGHT_API_LLM_PROVIDER", value = "bedrock" },
|
|
326
|
-
{ name = "HINDSIGHT_API_LLM_MODEL", value = "openai.gpt-oss-20b-1:0" },
|
|
327
|
-
{ name = "AWS_REGION_NAME", value = data.aws_region.current.name },
|
|
328
|
-
{ name = "AWS_DEFAULT_REGION", value = data.aws_region.current.name },
|
|
329
|
-
{ name = "HINDSIGHT_API_RETAIN_LLM_PROVIDER", value = "bedrock" },
|
|
330
|
-
{ name = "HINDSIGHT_API_RETAIN_LLM_MODEL", value = var.retain_llm_model },
|
|
331
|
-
{ name = "HINDSIGHT_API_REFLECT_LLM_PROVIDER", value = "bedrock" },
|
|
332
|
-
{ name = "HINDSIGHT_API_REFLECT_LLM_MODEL", value = "openai.gpt-oss-120b-1:0" },
|
|
333
|
-
{ name = "HINDSIGHT_API_EMBEDDINGS_PROVIDER", value = "local" },
|
|
334
|
-
{ name = "HINDSIGHT_API_EMBEDDINGS_LOCAL_MODEL", value = "BAAI/bge-small-en-v1.5" },
|
|
335
|
-
{ name = "HINDSIGHT_API_RERANKER_PROVIDER", value = "local" },
|
|
336
|
-
{ name = "HINDSIGHT_API_RERANKER_MAX_CANDIDATES", value = "20" },
|
|
337
|
-
{ name = "HINDSIGHT_API_RERANKER_LOCAL_BUCKET_BATCHING", value = "true" },
|
|
338
|
-
{ name = "HINDSIGHT_API_RERANKER_LOCAL_MAX_CONCURRENT", value = "1" },
|
|
339
|
-
{ name = "HINDSIGHT_API_RECALL_BUDGET_FUNCTION", value = "adaptive" },
|
|
340
|
-
{ name = "HINDSIGHT_API_RECALL_BUDGET_MIN", value = "5" },
|
|
341
|
-
{ name = "HINDSIGHT_API_RECALL_BUDGET_MAX", value = "300" },
|
|
342
|
-
{ name = "HINDSIGHT_API_ENABLE_AUTO_CONSOLIDATION", value = tostring(var.enable_auto_consolidation) },
|
|
343
|
-
{ name = "HINDSIGHT_API_CONSOLIDATION_DEDUP_THRESHOLD", value = var.consolidation_dedup_threshold },
|
|
344
|
-
],
|
|
345
|
-
var.observations_mission != "" ? [
|
|
346
|
-
{ name = "HINDSIGHT_API_OBSERVATIONS_MISSION", value = var.observations_mission },
|
|
347
|
-
] : [],
|
|
348
|
-
)
|
|
349
|
-
|
|
350
|
-
logConfiguration = {
|
|
351
|
-
logDriver = "awslogs"
|
|
352
|
-
options = {
|
|
353
|
-
"awslogs-group" = aws_cloudwatch_log_group.hindsight.name
|
|
354
|
-
"awslogs-region" = data.aws_region.current.name
|
|
355
|
-
"awslogs-stream-prefix" = "hindsight"
|
|
356
|
-
}
|
|
357
|
-
}
|
|
358
|
-
|
|
359
|
-
healthCheck = {
|
|
360
|
-
command = ["CMD-SHELL", "curl -f http://localhost:8888/health || exit 1"]
|
|
361
|
-
interval = 30
|
|
362
|
-
timeout = 10
|
|
363
|
-
retries = 3
|
|
364
|
-
startPeriod = 300
|
|
365
|
-
}
|
|
366
|
-
}])
|
|
367
|
-
|
|
368
|
-
tags = { Name = "thinkwork-${var.stage}-hindsight" }
|
|
369
|
-
}
|
|
370
|
-
|
|
371
|
-
################################################################################
|
|
372
|
-
# ECS Service
|
|
373
|
-
################################################################################
|
|
374
|
-
|
|
375
|
-
resource "aws_ecs_service" "hindsight" {
|
|
376
|
-
name = "thinkwork-${var.stage}-hindsight"
|
|
377
|
-
cluster = aws_ecs_cluster.main.id
|
|
378
|
-
task_definition = aws_ecs_task_definition.hindsight.arn
|
|
379
|
-
desired_count = 1
|
|
380
|
-
launch_type = "FARGATE"
|
|
381
|
-
|
|
382
|
-
network_configuration {
|
|
383
|
-
subnets = var.subnet_ids
|
|
384
|
-
security_groups = [aws_security_group.hindsight.id]
|
|
385
|
-
assign_public_ip = true
|
|
386
|
-
}
|
|
387
|
-
|
|
388
|
-
load_balancer {
|
|
389
|
-
target_group_arn = aws_lb_target_group.hindsight.arn
|
|
390
|
-
container_name = "hindsight"
|
|
391
|
-
container_port = 8888
|
|
392
|
-
}
|
|
393
|
-
|
|
394
|
-
depends_on = [aws_lb_listener.hindsight]
|
|
395
|
-
|
|
396
|
-
tags = { Name = "thinkwork-${var.stage}-hindsight" }
|
|
397
|
-
}
|
|
398
|
-
|
|
399
|
-
################################################################################
|
|
400
|
-
# Outputs
|
|
401
|
-
################################################################################
|
|
402
|
-
|
|
403
|
-
output "hindsight_endpoint" {
|
|
404
|
-
description = "Hindsight API endpoint (ALB URL)"
|
|
405
|
-
value = "http://${aws_lb.hindsight.dns_name}"
|
|
406
|
-
}
|
|
407
|
-
|
|
408
|
-
output "ecs_cluster_arn" {
|
|
409
|
-
description = "ECS cluster ARN"
|
|
410
|
-
value = aws_ecs_cluster.main.arn
|
|
411
|
-
}
|
|
@@ -1,102 +0,0 @@
|
|
|
1
|
-
################################################################################
|
|
2
|
-
# Bedrock Knowledge Base — Data Module
|
|
3
|
-
#
|
|
4
|
-
# Creates the IAM service role that Bedrock Knowledge Bases need to access
|
|
5
|
-
# S3 documents, invoke Titan embeddings, use RDS Data API, and read secrets.
|
|
6
|
-
################################################################################
|
|
7
|
-
|
|
8
|
-
variable "stage" {
|
|
9
|
-
description = "Deployment stage"
|
|
10
|
-
type = string
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
variable "account_id" {
|
|
14
|
-
description = "AWS account ID"
|
|
15
|
-
type = string
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
variable "region" {
|
|
19
|
-
description = "AWS region"
|
|
20
|
-
type = string
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
variable "bucket_name" {
|
|
24
|
-
description = "S3 bucket name for knowledge base documents"
|
|
25
|
-
type = string
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
data "aws_iam_policy_document" "kb_assume" {
|
|
29
|
-
statement {
|
|
30
|
-
effect = "Allow"
|
|
31
|
-
actions = ["sts:AssumeRole"]
|
|
32
|
-
principals {
|
|
33
|
-
type = "Service"
|
|
34
|
-
identifiers = ["bedrock.amazonaws.com"]
|
|
35
|
-
}
|
|
36
|
-
condition {
|
|
37
|
-
test = "StringEquals"
|
|
38
|
-
variable = "aws:SourceAccount"
|
|
39
|
-
values = [var.account_id]
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
resource "aws_iam_role" "kb_service" {
|
|
45
|
-
name = "thinkwork-${var.stage}-kb-service-role"
|
|
46
|
-
assume_role_policy = data.aws_iam_policy_document.kb_assume.json
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
resource "aws_iam_role_policy" "kb_permissions" {
|
|
50
|
-
name = "knowledge-base-permissions"
|
|
51
|
-
role = aws_iam_role.kb_service.id
|
|
52
|
-
|
|
53
|
-
policy = jsonencode({
|
|
54
|
-
Version = "2012-10-17"
|
|
55
|
-
Statement = [
|
|
56
|
-
{
|
|
57
|
-
Sid = "S3ReadDocs"
|
|
58
|
-
Effect = "Allow"
|
|
59
|
-
Action = [
|
|
60
|
-
"s3:GetObject",
|
|
61
|
-
"s3:ListBucket",
|
|
62
|
-
]
|
|
63
|
-
Resource = [
|
|
64
|
-
"arn:aws:s3:::${var.bucket_name}",
|
|
65
|
-
"arn:aws:s3:::${var.bucket_name}/*",
|
|
66
|
-
]
|
|
67
|
-
},
|
|
68
|
-
{
|
|
69
|
-
Sid = "BedrockEmbedding"
|
|
70
|
-
Effect = "Allow"
|
|
71
|
-
Action = ["bedrock:InvokeModel"]
|
|
72
|
-
Resource = "arn:aws:bedrock:${var.region}::foundation-model/amazon.titan-embed-text-v2:0"
|
|
73
|
-
},
|
|
74
|
-
{
|
|
75
|
-
Sid = "RDSDataAPI"
|
|
76
|
-
Effect = "Allow"
|
|
77
|
-
Action = [
|
|
78
|
-
"rds-data:ExecuteStatement",
|
|
79
|
-
"rds-data:BatchExecuteStatement",
|
|
80
|
-
]
|
|
81
|
-
Resource = "*"
|
|
82
|
-
},
|
|
83
|
-
{
|
|
84
|
-
Sid = "RDSDescribe"
|
|
85
|
-
Effect = "Allow"
|
|
86
|
-
Action = ["rds:DescribeDBClusters"]
|
|
87
|
-
Resource = "*"
|
|
88
|
-
},
|
|
89
|
-
{
|
|
90
|
-
Sid = "SecretsManager"
|
|
91
|
-
Effect = "Allow"
|
|
92
|
-
Action = ["secretsmanager:GetSecretValue"]
|
|
93
|
-
Resource = "*"
|
|
94
|
-
},
|
|
95
|
-
]
|
|
96
|
-
})
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
output "kb_service_role_arn" {
|
|
100
|
-
description = "IAM role ARN for Bedrock Knowledge Base service"
|
|
101
|
-
value = aws_iam_role.kb_service.arn
|
|
102
|
-
}
|
|
File without changes
|
|
File without changes
|
/package/dist/{plugins/n8n/terraform → terraform/modules/app}/n8n/scripts/test_sync_database.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|