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.
- package/README.md +3 -14
- package/dist/{api-client-JYZXYQJR.js → api-client-4P4JZOBX.js} +1 -1
- package/dist/{chunk-Z2F6RJFR.js → chunk-4OMDWYZQ.js} +4 -5
- package/dist/{chunk-ILZKG5WV.js → chunk-AD2NIWB5.js} +434 -69
- package/dist/chunk-MWQ7RO76.js +137 -0
- package/dist/{chunk-DVPBI5HM.js → chunk-OLUQ4U2Z.js} +26 -26
- package/dist/{chunk-QOERT44A.js → chunk-YQCYD6NE.js} +57 -44
- package/dist/cli.js +4400 -16431
- 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-CRV46D5B.js → dist-es-2OTNTL4N.js} +4 -4
- package/dist/{dist-es-ENBUC3JP.js → dist-es-2XVAH4BQ.js} +2 -2
- package/dist/{dist-es-DCY4IC3Y.js → dist-es-3DPDUJAH.js} +2 -2
- package/dist/{dist-es-G7PTG75M.js → dist-es-BNZTBBVC.js} +1 -1
- package/dist/{dist-es-GKDBE7E6.js → dist-es-CD2RBDAC.js} +1 -1
- package/dist/{dist-es-R7FGL2IB.js → dist-es-I4FW57PS.js} +1 -1
- package/dist/{dist-es-USORBXZ5.js → dist-es-KVFWJNDY.js} +4 -4
- package/dist/{dist-es-HY3535OI.js → dist-es-PS73DWNL.js} +2 -2
- package/dist/{dist-es-LDE437AM.js → dist-es-S3NZQFGT.js} +1 -1
- package/dist/{dist-es-G54LBMRN.js → dist-es-SGCA4P32.js} +1 -1
- package/dist/{dist-es-Q57SZXZ7.js → dist-es-WBM6J4RA.js} +2 -2
- package/dist/{dist-es-P26FWFLT.js → dist-es-ZGVADYIF.js} +8 -8
- package/dist/drizzle/0227_analyst_reader_role.sql +17 -26
- package/dist/drizzle/0230_analyst_rls.sql +28 -45
- package/dist/drizzle/0261_native_auth_control_plane.sql +7 -3
- 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/{loadSso-DJVB7BXE.js → loadSso-ETCXTR4I.js} +2 -2
- package/dist/{loadSso-JAMNA3WY.js → loadSso-UBD7KUHE.js} +2 -2
- package/dist/plugins/README.md +2 -2
- package/dist/plugins/catalog/package.json +0 -3
- package/dist/plugins/catalog/src/__tests__/build-catalog.test.ts +6 -3
- package/dist/plugins/catalog/src/__tests__/catalog.test.ts +21 -21
- package/dist/plugins/catalog/src/__tests__/contracts.test.ts +102 -25
- package/dist/plugins/catalog/src/__tests__/plugin-package.test.ts +7 -6
- package/dist/plugins/catalog/src/__tests__/plugin-registry.test.ts +0 -15
- package/dist/plugins/catalog/src/contracts.ts +15 -0
- package/dist/plugins/catalog/src/registry/generated-first-party.ts +0 -18
- 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-UGDWTGS4.js → signin-5QZNRSOO.js} +2 -2
- package/dist/{sso-oidc-Q4VXANXY.js → sso-oidc-XK673P54.js} +2 -2
- package/dist/{sts-CWLSE3GH.js → sts-OXI2UALF.js} +6 -134
- package/dist/{sts-DNZLNVOV.js → sts-SQW4NBK3.js} +6 -134
- package/dist/terraform/examples/greenfield/main.tf +233 -175
- package/dist/terraform/examples/greenfield/terraform.tfvars.example +12 -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 +106 -26
- package/dist/terraform/modules/app/agentcore-identity/outputs.tf +6 -6
- package/dist/terraform/modules/app/agentcore-identity/scripts/bootstrap_twenty_oauth_client.sh +216 -99
- package/dist/terraform/modules/app/agentcore-identity/scripts/delete_identity.sh +6 -9
- 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 +22 -7
- package/dist/terraform/modules/app/agentcore-identity/scripts/reconcile_twenty_identity.sh +17 -46
- package/dist/terraform/modules/app/agentcore-identity/scripts/reconcile_twenty_provider.mjs +65 -3
- 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 +6 -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/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 +2641 -124
- package/dist/terraform/modules/app/deployment-control-plane/test_runner_bundle.py +2034 -154
- 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 +411 -723
- package/dist/terraform/modules/app/lambda-api/iam-grouped.tf +262 -198
- package/dist/terraform/modules/app/lambda-api/main.tf +51 -13
- package/dist/terraform/modules/app/lambda-api/mcp-oauth.tf +4 -181
- 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 -45
- package/dist/terraform/modules/app/lambda-api/turn-assertion.tf +45 -0
- package/dist/terraform/modules/app/lambda-api/variables.tf +219 -126
- 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 +81 -8
- package/dist/terraform/modules/foundation/cognito/outputs.tf +5 -0
- package/dist/terraform/modules/foundation/cognito/variables.tf +24 -12
- package/dist/terraform/modules/thinkwork/README.md +5 -1
- package/dist/terraform/modules/thinkwork/main.tf +376 -374
- package/dist/terraform/modules/thinkwork/outputs.tf +12 -158
- package/dist/terraform/modules/thinkwork/variables.tf +246 -89
- 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/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 +1 -1
- package/dist/drizzle/0261_managed_harness_multiplayer.sql +0 -313
- package/dist/drizzle/0262_parallel_harness_threads.sql +0 -9
- package/dist/drizzle/0264_harness_tool_execution_ledger.sql +0 -113
- 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/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-gateway/main.tf +0 -305
- package/dist/terraform/modules/app/agentcore-gateway/outputs.tf +0 -44
- package/dist/terraform/modules/app/agentcore-gateway/scripts/delete_gateway.sh +0 -93
- package/dist/terraform/modules/app/agentcore-gateway/scripts/read_gateway.sh +0 -33
- package/dist/terraform/modules/app/agentcore-gateway/scripts/reconcile_gateway.sh +0 -543
- package/dist/terraform/modules/app/agentcore-gateway/variables.tf +0 -70
- package/dist/terraform/modules/app/agentcore-harness/main.tf +0 -330
- package/dist/terraform/modules/app/agentcore-harness/outputs.tf +0 -72
- package/dist/terraform/modules/app/agentcore-harness/scripts/delete_harness.sh +0 -5
- package/dist/terraform/modules/app/agentcore-harness/scripts/harness-lifecycle.mjs +0 -430
- package/dist/terraform/modules/app/agentcore-harness/scripts/harness-readback.mjs +0 -180
- package/dist/terraform/modules/app/agentcore-harness/scripts/harness-tool-contract.mjs +0 -193
- package/dist/terraform/modules/app/agentcore-harness/scripts/prune_harness.sh +0 -5
- package/dist/terraform/modules/app/agentcore-harness/scripts/read_harness.sh +0 -5
- package/dist/terraform/modules/app/agentcore-harness/scripts/reconcile_harness.sh +0 -5
- package/dist/terraform/modules/app/agentcore-harness/variables.tf +0 -96
- 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/app/lambda-api/agentcore-harness-alarms.tf +0 -88
- package/dist/terraform/modules/app/lambda-api/agentcore-identity-alarms.tf +0 -91
- 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,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,88 +0,0 @@
|
|
|
1
|
-
################################################################################
|
|
2
|
-
# AgentCore Harness retirement-soak operational gates.
|
|
3
|
-
#
|
|
4
|
-
# These use native AWS/Lambda metrics so they work on a fresh stage without
|
|
5
|
-
# pre-creating or importing implicit log groups. alarm_actions remain empty,
|
|
6
|
-
# consistent with the other non-cost operational alarms in this module.
|
|
7
|
-
################################################################################
|
|
8
|
-
|
|
9
|
-
resource "aws_cloudwatch_metric_alarm" "agentcore_harness_runner_errors" {
|
|
10
|
-
count = local.deploy_lambda_handlers && var.enable_agentcore_multiplayer_proof ? 1 : 0
|
|
11
|
-
|
|
12
|
-
alarm_name = "thinkwork-${var.stage}-agentcore-harness-runner-errors"
|
|
13
|
-
alarm_description = "The AgentCore Harness runner crashed. The turn fails closed and must be reconciled before the retirement soak can pass."
|
|
14
|
-
namespace = "AWS/Lambda"
|
|
15
|
-
metric_name = "Errors"
|
|
16
|
-
statistic = "Sum"
|
|
17
|
-
period = 60
|
|
18
|
-
evaluation_periods = 1
|
|
19
|
-
threshold = 1
|
|
20
|
-
comparison_operator = "GreaterThanOrEqualToThreshold"
|
|
21
|
-
treat_missing_data = "notBreaching"
|
|
22
|
-
alarm_actions = []
|
|
23
|
-
|
|
24
|
-
dimensions = {
|
|
25
|
-
FunctionName = aws_lambda_function.handler["harness-runner"].function_name
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
resource "aws_cloudwatch_metric_alarm" "agentcore_harness_runner_throttles" {
|
|
29
|
-
count = local.deploy_lambda_handlers && var.enable_agentcore_multiplayer_proof ? 1 : 0
|
|
30
|
-
|
|
31
|
-
alarm_name = "thinkwork-${var.stage}-agentcore-harness-runner-throttles"
|
|
32
|
-
alarm_description = "AgentCore Harness turns are being throttled before execution; capacity admission or account concurrency is insufficient."
|
|
33
|
-
namespace = "AWS/Lambda"
|
|
34
|
-
metric_name = "Throttles"
|
|
35
|
-
statistic = "Sum"
|
|
36
|
-
period = 60
|
|
37
|
-
evaluation_periods = 1
|
|
38
|
-
threshold = 1
|
|
39
|
-
comparison_operator = "GreaterThanOrEqualToThreshold"
|
|
40
|
-
treat_missing_data = "notBreaching"
|
|
41
|
-
alarm_actions = []
|
|
42
|
-
|
|
43
|
-
dimensions = {
|
|
44
|
-
FunctionName = aws_lambda_function.handler["harness-runner"].function_name
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
resource "aws_cloudwatch_metric_alarm" "agentcore_harness_runner_p95" {
|
|
49
|
-
count = local.deploy_lambda_handlers && var.enable_agentcore_multiplayer_proof ? 1 : 0
|
|
50
|
-
|
|
51
|
-
alarm_name = "thinkwork-${var.stage}-agentcore-harness-runner-p95"
|
|
52
|
-
alarm_description = "AgentCore Harness runner p95 exceeded the 120-second retirement-certification threshold."
|
|
53
|
-
namespace = "AWS/Lambda"
|
|
54
|
-
metric_name = "Duration"
|
|
55
|
-
extended_statistic = "p95"
|
|
56
|
-
period = 300
|
|
57
|
-
evaluation_periods = 5
|
|
58
|
-
datapoints_to_alarm = 3
|
|
59
|
-
threshold = 120000
|
|
60
|
-
comparison_operator = "GreaterThanThreshold"
|
|
61
|
-
treat_missing_data = "notBreaching"
|
|
62
|
-
alarm_actions = []
|
|
63
|
-
|
|
64
|
-
dimensions = {
|
|
65
|
-
FunctionName = aws_lambda_function.handler["harness-runner"].function_name
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
resource "aws_cloudwatch_metric_alarm" "agentcore_harness_runner_async_age" {
|
|
70
|
-
count = local.deploy_lambda_handlers && var.enable_agentcore_multiplayer_proof ? 1 : 0
|
|
71
|
-
|
|
72
|
-
alarm_name = "thinkwork-${var.stage}-agentcore-harness-runner-async-age"
|
|
73
|
-
alarm_description = "AgentCore Harness Event invocations waited more than 60 seconds before execution; the runtime path is backlogged."
|
|
74
|
-
namespace = "AWS/Lambda"
|
|
75
|
-
metric_name = "AsyncEventAge"
|
|
76
|
-
extended_statistic = "p95"
|
|
77
|
-
period = 60
|
|
78
|
-
evaluation_periods = 3
|
|
79
|
-
datapoints_to_alarm = 2
|
|
80
|
-
threshold = 60000
|
|
81
|
-
comparison_operator = "GreaterThanThreshold"
|
|
82
|
-
treat_missing_data = "notBreaching"
|
|
83
|
-
alarm_actions = []
|
|
84
|
-
|
|
85
|
-
dimensions = {
|
|
86
|
-
FunctionName = aws_lambda_function.handler["harness-runner"].function_name
|
|
87
|
-
}
|
|
88
|
-
}
|
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
################################################################################
|
|
2
|
-
# THINK-316 U9 — assertion mint operational gates
|
|
3
|
-
#
|
|
4
|
-
# The mint emits redacted EMF metrics around only the KMS Sign call. These
|
|
5
|
-
# alarms encode the frozen U9 latency and failure thresholds; no assertion,
|
|
6
|
-
# subject, tenant, key id, or other caller material is emitted as a dimension.
|
|
7
|
-
################################################################################
|
|
8
|
-
|
|
9
|
-
resource "aws_cloudwatch_metric_alarm" "agentcore_turn_assertion_kms_p95" {
|
|
10
|
-
count = var.enable_agentcore_multiplayer_proof ? 1 : 0
|
|
11
|
-
|
|
12
|
-
alarm_name = "thinkwork-${var.stage}-agentcore-turn-assertion-kms-p95"
|
|
13
|
-
alarm_description = "AgentCore turn assertion KMS signing p95 exceeded the frozen 100 ms U9 gate."
|
|
14
|
-
namespace = "ThinkWork/AgentCore"
|
|
15
|
-
metric_name = "TurnAssertionKmsSignLatency"
|
|
16
|
-
extended_statistic = "p95"
|
|
17
|
-
comparison_operator = "GreaterThanThreshold"
|
|
18
|
-
threshold = 100
|
|
19
|
-
period = 60
|
|
20
|
-
evaluation_periods = 5
|
|
21
|
-
datapoints_to_alarm = 3
|
|
22
|
-
treat_missing_data = "notBreaching"
|
|
23
|
-
alarm_actions = []
|
|
24
|
-
|
|
25
|
-
dimensions = {
|
|
26
|
-
Stage = var.stage
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
resource "aws_cloudwatch_metric_alarm" "agentcore_turn_assertion_kms_p99" {
|
|
31
|
-
count = var.enable_agentcore_multiplayer_proof ? 1 : 0
|
|
32
|
-
|
|
33
|
-
alarm_name = "thinkwork-${var.stage}-agentcore-turn-assertion-kms-p99"
|
|
34
|
-
alarm_description = "AgentCore turn assertion KMS signing p99 exceeded the frozen 250 ms U9 gate."
|
|
35
|
-
namespace = "ThinkWork/AgentCore"
|
|
36
|
-
metric_name = "TurnAssertionKmsSignLatency"
|
|
37
|
-
extended_statistic = "p99"
|
|
38
|
-
comparison_operator = "GreaterThanThreshold"
|
|
39
|
-
threshold = 250
|
|
40
|
-
period = 60
|
|
41
|
-
evaluation_periods = 5
|
|
42
|
-
datapoints_to_alarm = 3
|
|
43
|
-
treat_missing_data = "notBreaching"
|
|
44
|
-
alarm_actions = []
|
|
45
|
-
|
|
46
|
-
dimensions = {
|
|
47
|
-
Stage = var.stage
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
resource "aws_cloudwatch_metric_alarm" "agentcore_turn_assertion_kms_failures" {
|
|
52
|
-
count = var.enable_agentcore_multiplayer_proof ? 1 : 0
|
|
53
|
-
|
|
54
|
-
alarm_name = "thinkwork-${var.stage}-agentcore-turn-assertion-kms-failures"
|
|
55
|
-
alarm_description = "AgentCore turn assertion KMS signing failed; new Harness/Gateway assertions fail closed."
|
|
56
|
-
namespace = "ThinkWork/AgentCore"
|
|
57
|
-
metric_name = "TurnAssertionKmsSignFailures"
|
|
58
|
-
statistic = "Sum"
|
|
59
|
-
comparison_operator = "GreaterThanThreshold"
|
|
60
|
-
threshold = 0
|
|
61
|
-
period = 60
|
|
62
|
-
evaluation_periods = 1
|
|
63
|
-
datapoints_to_alarm = 1
|
|
64
|
-
treat_missing_data = "notBreaching"
|
|
65
|
-
alarm_actions = []
|
|
66
|
-
|
|
67
|
-
dimensions = {
|
|
68
|
-
Stage = var.stage
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
resource "aws_cloudwatch_metric_alarm" "agentcore_turn_assertion_lambda_errors" {
|
|
73
|
-
count = var.enable_agentcore_multiplayer_proof ? 1 : 0
|
|
74
|
-
|
|
75
|
-
alarm_name = "thinkwork-${var.stage}-agentcore-turn-assertion-errors"
|
|
76
|
-
alarm_description = "The internal AgentCore assertion mint Lambda failed. No fallback assertion is issued."
|
|
77
|
-
namespace = "AWS/Lambda"
|
|
78
|
-
metric_name = "Errors"
|
|
79
|
-
statistic = "Sum"
|
|
80
|
-
comparison_operator = "GreaterThanThreshold"
|
|
81
|
-
threshold = 0
|
|
82
|
-
period = 60
|
|
83
|
-
evaluation_periods = 1
|
|
84
|
-
datapoints_to_alarm = 1
|
|
85
|
-
treat_missing_data = "notBreaching"
|
|
86
|
-
alarm_actions = []
|
|
87
|
-
|
|
88
|
-
dimensions = {
|
|
89
|
-
FunctionName = aws_lambda_function.handler["turn-assertion-mint"].function_name
|
|
90
|
-
}
|
|
91
|
-
}
|
|
@@ -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
|