@aws/agentcore 1.0.0-preview.2 → 1.0.0-preview.20
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 +193 -33
- package/dist/agent-inspector/index.css +1 -1
- package/dist/agent-inspector/index.js +99 -84
- package/dist/assets/__tests__/__snapshots__/assets.snapshot.test.ts.snap +3132 -366
- package/dist/assets/__tests__/__snapshots__/dockerfile-render.test.ts.snap +6 -2
- package/dist/assets/__tests__/assets.snapshot.test.ts +10 -24
- package/dist/assets/__tests__/googleadk-session-eviction.test.ts +87 -0
- package/dist/assets/__tests__/summarization-namespace.test.ts +43 -0
- package/dist/assets/agents/AGENTS.md +87 -11
- package/dist/assets/cdk/bin/cdk.ts +87 -26
- package/dist/assets/cdk/lib/cdk-stack.ts +185 -55
- package/dist/assets/cdk/package.json +1 -1
- package/dist/assets/cdk/test/cdk.test.ts +4 -0
- package/dist/assets/container/python/Dockerfile +7 -1
- package/dist/assets/container/typescript/Dockerfile +25 -0
- package/dist/assets/container/typescript/dockerignore.template +24 -0
- package/dist/assets/datasets/predefined-v1.jsonl +3 -0
- package/dist/assets/datasets/simulated-v1.jsonl +3 -0
- package/dist/assets/python/a2a/googleadk/base/main.py +24 -16
- package/dist/assets/python/a2a/googleadk/base/pyproject.toml +3 -3
- package/dist/assets/python/a2a/langchain_langgraph/base/main.py +24 -16
- package/dist/assets/python/a2a/langchain_langgraph/base/pyproject.toml +3 -2
- package/dist/assets/python/a2a/strands/base/main.py +23 -17
- package/dist/assets/python/a2a/strands/base/pyproject.toml +2 -2
- package/dist/assets/python/a2a/strands/capabilities/memory/session.py +10 -2
- package/dist/assets/python/agui/googleadk/base/main.py +62 -2
- package/dist/assets/python/agui/googleadk/base/pyproject.toml +3 -3
- package/dist/assets/python/agui/langchain_langgraph/base/main.py +56 -0
- package/dist/assets/python/agui/langchain_langgraph/base/pyproject.toml +2 -1
- package/dist/assets/python/agui/strands/base/main.py +63 -1
- package/dist/assets/python/agui/strands/base/pyproject.toml +1 -1
- package/dist/assets/python/agui/strands/capabilities/memory/session.py +10 -2
- package/dist/assets/python/http/autogen/base/main.py +60 -29
- package/dist/assets/python/http/autogen/base/pyproject.toml +1 -1
- package/dist/assets/python/http/googleadk/base/main.py +69 -24
- package/dist/assets/python/http/googleadk/base/mcp_client/client.py +7 -7
- package/dist/assets/python/http/googleadk/base/pyproject.toml +2 -1
- package/dist/assets/python/http/langchain_langgraph/base/main.py +115 -24
- package/dist/assets/python/http/langchain_langgraph/base/mcp_client/client.py +10 -8
- package/dist/assets/python/http/langchain_langgraph/base/pyproject.toml +3 -2
- package/dist/assets/python/http/openaiagents/base/main.py +61 -32
- package/dist/assets/python/http/openaiagents/base/mcp_client/client.py +4 -4
- package/dist/assets/python/http/openaiagents/base/pyproject.toml +2 -2
- package/dist/assets/python/http/strands/base/main.py +571 -47
- package/dist/assets/python/http/strands/base/mcp_client/client.py +49 -6
- package/dist/assets/python/http/strands/base/model/load.py +119 -3
- package/dist/assets/python/http/strands/base/model/mantle_compat.py +21 -0
- package/dist/assets/python/http/strands/base/pyproject.toml +9 -3
- package/dist/assets/python/http/strands/base/skills/fetcher.py +279 -0
- package/dist/assets/python/http/strands/capabilities/execution-limits/hooks/execution_limits.py +54 -0
- package/dist/assets/python/http/strands/capabilities/memory/session.py +10 -2
- package/dist/assets/python/http/strands/capabilities/payments/__init__.py +4 -0
- package/dist/assets/python/http/strands/capabilities/payments/payments.py +142 -0
- package/dist/assets/python/mcp/standalone/base/main.py +58 -0
- package/dist/assets/typescript/http/strands/base/README.md +37 -0
- package/dist/assets/typescript/http/strands/base/gitignore.template +22 -0
- package/dist/assets/typescript/http/strands/base/main.ts +144 -0
- package/dist/assets/typescript/http/strands/base/mcp_client/client.ts +11 -0
- package/dist/assets/typescript/http/strands/base/model/load.ts +102 -0
- package/dist/assets/typescript/http/strands/base/package.json +38 -0
- package/dist/assets/typescript/http/strands/base/tsconfig.json +19 -0
- package/dist/assets/typescript/http/strands/capabilities/memory/memory.ts +52 -0
- package/dist/assets/typescript/http/vercelai/base/README.md +37 -0
- package/dist/assets/typescript/http/vercelai/base/gitignore.template +22 -0
- package/dist/assets/typescript/http/vercelai/base/main.ts +64 -0
- package/dist/assets/typescript/http/vercelai/base/model/load.ts +121 -0
- package/dist/assets/typescript/http/vercelai/base/package.json +35 -0
- package/dist/assets/typescript/http/vercelai/base/tsconfig.json +19 -0
- package/dist/cli/index.mjs +1416 -568
- package/dist/lib/errors/index.d.ts +1 -1
- package/dist/lib/errors/index.d.ts.map +1 -1
- package/dist/lib/errors/index.js +1 -1
- package/dist/lib/errors/index.js.map +1 -1
- package/dist/lib/errors/types.d.ts +259 -0
- package/dist/lib/errors/types.d.ts.map +1 -0
- package/dist/lib/errors/types.js +402 -0
- package/dist/lib/errors/types.js.map +1 -0
- package/dist/lib/errors/zod.d.ts +8 -0
- package/dist/lib/errors/zod.d.ts.map +1 -0
- package/dist/lib/errors/{config.js → zod.js} +8 -81
- package/dist/lib/errors/zod.js.map +1 -0
- package/dist/lib/index.d.ts +3 -0
- package/dist/lib/index.d.ts.map +1 -1
- package/dist/lib/index.js +4 -1
- package/dist/lib/index.js.map +1 -1
- package/dist/lib/packaging/build-args.js +2 -2
- package/dist/lib/packaging/build-args.js.map +1 -1
- package/dist/lib/packaging/container.js +5 -5
- package/dist/lib/packaging/container.js.map +1 -1
- package/dist/lib/packaging/helpers.d.ts +16 -0
- package/dist/lib/packaging/helpers.d.ts.map +1 -1
- package/dist/lib/packaging/helpers.js +127 -29
- package/dist/lib/packaging/helpers.js.map +1 -1
- package/dist/lib/packaging/index.d.ts +0 -1
- package/dist/lib/packaging/index.d.ts.map +1 -1
- package/dist/lib/packaging/index.js +4 -19
- package/dist/lib/packaging/index.js.map +1 -1
- package/dist/lib/packaging/node.d.ts +2 -2
- package/dist/lib/packaging/node.d.ts.map +1 -1
- package/dist/lib/packaging/node.js +83 -38
- package/dist/lib/packaging/node.js.map +1 -1
- package/dist/lib/packaging/python.js +12 -12
- package/dist/lib/packaging/python.js.map +1 -1
- package/dist/lib/result.d.ts +50 -0
- package/dist/lib/result.d.ts.map +1 -0
- package/dist/lib/result.js +49 -0
- package/dist/lib/result.js.map +1 -0
- package/dist/lib/schemas/io/config-io.d.ts +8 -0
- package/dist/lib/schemas/io/config-io.d.ts.map +1 -1
- package/dist/lib/schemas/io/config-io.js +21 -3
- package/dist/lib/schemas/io/config-io.js.map +1 -1
- package/dist/lib/schemas/io/global-config.d.ts +40 -0
- package/dist/lib/schemas/io/global-config.d.ts.map +1 -0
- package/dist/lib/schemas/io/global-config.js +118 -0
- package/dist/lib/schemas/io/global-config.js.map +1 -0
- package/dist/lib/schemas/io/index.d.ts +1 -2
- package/dist/lib/schemas/io/index.d.ts.map +1 -1
- package/dist/lib/schemas/io/index.js +1 -4
- package/dist/lib/schemas/io/index.js.map +1 -1
- package/dist/lib/schemas/io/path-resolver.d.ts +0 -6
- package/dist/lib/schemas/io/path-resolver.d.ts.map +1 -1
- package/dist/lib/schemas/io/path-resolver.js +3 -13
- package/dist/lib/schemas/io/path-resolver.js.map +1 -1
- package/dist/lib/secrets/cipher.d.ts +12 -0
- package/dist/lib/secrets/cipher.d.ts.map +1 -0
- package/dist/lib/secrets/cipher.js +54 -0
- package/dist/lib/secrets/cipher.js.map +1 -0
- package/dist/lib/secrets/index.d.ts +4 -0
- package/dist/lib/secrets/index.d.ts.map +1 -0
- package/dist/lib/secrets/index.js +15 -0
- package/dist/lib/secrets/index.js.map +1 -0
- package/dist/lib/secrets/key-provider.d.ts +16 -0
- package/dist/lib/secrets/key-provider.d.ts.map +1 -0
- package/dist/lib/secrets/key-provider.js +191 -0
- package/dist/lib/secrets/key-provider.js.map +1 -0
- package/dist/lib/secrets/sensitive-keys.d.ts +21 -0
- package/dist/lib/secrets/sensitive-keys.d.ts.map +1 -0
- package/dist/lib/secrets/sensitive-keys.js +67 -0
- package/dist/lib/secrets/sensitive-keys.js.map +1 -0
- package/dist/lib/time-constants.d.ts +5 -0
- package/dist/lib/time-constants.d.ts.map +1 -0
- package/dist/lib/time-constants.js +8 -0
- package/dist/lib/time-constants.js.map +1 -0
- package/dist/lib/utils/env.d.ts +8 -2
- package/dist/lib/utils/env.d.ts.map +1 -1
- package/dist/lib/utils/env.js +65 -17
- package/dist/lib/utils/env.js.map +1 -1
- package/dist/lib/utils/index.d.ts +3 -2
- package/dist/lib/utils/index.d.ts.map +1 -1
- package/dist/lib/utils/index.js +6 -1
- package/dist/lib/utils/index.js.map +1 -1
- package/dist/lib/utils/polling.d.ts +31 -0
- package/dist/lib/utils/polling.d.ts.map +1 -0
- package/dist/lib/utils/polling.js +61 -0
- package/dist/lib/utils/polling.js.map +1 -0
- package/dist/lib/utils/zod.d.ts +16 -0
- package/dist/lib/utils/zod.d.ts.map +1 -1
- package/dist/lib/utils/zod.js +45 -0
- package/dist/lib/utils/zod.js.map +1 -1
- package/dist/schema/constants.d.ts +56 -2
- package/dist/schema/constants.d.ts.map +1 -1
- package/dist/schema/constants.js +82 -7
- package/dist/schema/constants.js.map +1 -1
- package/dist/schema/schemas/agent-env.d.ts +156 -6
- package/dist/schema/schemas/agent-env.d.ts.map +1 -1
- package/dist/schema/schemas/agent-env.js +186 -13
- package/dist/schema/schemas/agent-env.js.map +1 -1
- package/dist/schema/schemas/agentcore-project.d.ts +446 -11
- package/dist/schema/schemas/agentcore-project.d.ts.map +1 -1
- package/dist/schema/schemas/agentcore-project.js +283 -18
- package/dist/schema/schemas/agentcore-project.js.map +1 -1
- package/dist/schema/schemas/auth.d.ts +174 -0
- package/dist/schema/schemas/auth.d.ts.map +1 -1
- package/dist/schema/schemas/auth.js +127 -3
- package/dist/schema/schemas/auth.js.map +1 -1
- package/dist/schema/schemas/connections.d.ts +185 -0
- package/dist/schema/schemas/connections.d.ts.map +1 -0
- package/dist/schema/schemas/connections.js +176 -0
- package/dist/schema/schemas/connections.js.map +1 -0
- package/dist/schema/schemas/deployed-state.d.ts +361 -5
- package/dist/schema/schemas/deployed-state.d.ts.map +1 -1
- package/dist/schema/schemas/deployed-state.js +105 -2
- package/dist/schema/schemas/deployed-state.js.map +1 -1
- package/dist/schema/schemas/index.d.ts +1 -0
- package/dist/schema/schemas/index.d.ts.map +1 -1
- package/dist/schema/schemas/index.js +1 -0
- package/dist/schema/schemas/index.js.map +1 -1
- package/dist/schema/schemas/mcp-defs.d.ts +2 -1
- package/dist/schema/schemas/mcp-defs.d.ts.map +1 -1
- package/dist/schema/schemas/mcp-defs.js +3 -2
- package/dist/schema/schemas/mcp-defs.js.map +1 -1
- package/dist/schema/schemas/mcp.d.ts +197 -0
- package/dist/schema/schemas/mcp.d.ts.map +1 -1
- package/dist/schema/schemas/mcp.js +342 -6
- package/dist/schema/schemas/mcp.js.map +1 -1
- package/dist/schema/schemas/primitives/ab-test.d.ts +135 -0
- package/dist/schema/schemas/primitives/ab-test.d.ts.map +1 -0
- package/dist/schema/schemas/primitives/ab-test.js +95 -0
- package/dist/schema/schemas/primitives/ab-test.js.map +1 -0
- package/dist/schema/schemas/primitives/config-bundle.d.ts +32 -0
- package/dist/schema/schemas/primitives/config-bundle.d.ts.map +1 -0
- package/dist/schema/schemas/primitives/config-bundle.js +41 -0
- package/dist/schema/schemas/primitives/config-bundle.js.map +1 -0
- package/dist/schema/schemas/primitives/dataset.d.ts +48 -0
- package/dist/schema/schemas/primitives/dataset.d.ts.map +1 -0
- package/dist/schema/schemas/primitives/dataset.js +58 -0
- package/dist/schema/schemas/primitives/dataset.js.map +1 -0
- package/dist/schema/schemas/primitives/evaluator.d.ts +8 -0
- package/dist/schema/schemas/primitives/evaluator.d.ts.map +1 -1
- package/dist/schema/schemas/primitives/evaluator.js +17 -1
- package/dist/schema/schemas/primitives/evaluator.js.map +1 -1
- package/dist/schema/schemas/primitives/harness.d.ts +377 -19
- package/dist/schema/schemas/primitives/harness.d.ts.map +1 -1
- package/dist/schema/schemas/primitives/harness.js +379 -24
- package/dist/schema/schemas/primitives/harness.js.map +1 -1
- package/dist/schema/schemas/primitives/index.d.ts +13 -7
- package/dist/schema/schemas/primitives/index.d.ts.map +1 -1
- package/dist/schema/schemas/primitives/index.js +37 -1
- package/dist/schema/schemas/primitives/index.js.map +1 -1
- package/dist/schema/schemas/primitives/knowledge-base.d.ts +104 -0
- package/dist/schema/schemas/primitives/knowledge-base.d.ts.map +1 -0
- package/dist/schema/schemas/primitives/knowledge-base.js +99 -0
- package/dist/schema/schemas/primitives/knowledge-base.js.map +1 -0
- package/dist/schema/schemas/primitives/memory.d.ts +22 -4
- package/dist/schema/schemas/primitives/memory.d.ts.map +1 -1
- package/dist/schema/schemas/primitives/memory.js +57 -16
- package/dist/schema/schemas/primitives/memory.js.map +1 -1
- package/dist/schema/schemas/primitives/online-eval-config.d.ts +21 -2
- package/dist/schema/schemas/primitives/online-eval-config.d.ts.map +1 -1
- package/dist/schema/schemas/primitives/online-eval-config.js +45 -5
- package/dist/schema/schemas/primitives/online-eval-config.js.map +1 -1
- package/dist/schema/schemas/primitives/payment.d.ts +54 -0
- package/dist/schema/schemas/primitives/payment.d.ts.map +1 -0
- package/dist/schema/schemas/primitives/payment.js +79 -0
- package/dist/schema/schemas/primitives/payment.js.map +1 -0
- package/dist/schema/schemas/primitives/policy.d.ts +26 -0
- package/dist/schema/schemas/primitives/policy.d.ts.map +1 -1
- package/dist/schema/schemas/primitives/policy.js +5 -1
- package/dist/schema/schemas/primitives/policy.js.map +1 -1
- package/npm-shrinkwrap.json +17013 -0
- package/package.json +43 -21
- package/scripts/bump-version.ts +4 -4
- package/scripts/bundle.mjs +70 -41
- package/scripts/run-e2e-dev.sh +56 -0
- package/scripts/run-e2e-local.sh +145 -0
- package/dist/lib/errors/config.d.ts +0 -49
- package/dist/lib/errors/config.d.ts.map +0 -1
- package/dist/lib/errors/config.js.map +0 -1
- package/dist/lib/packaging/errors.d.ts +0 -16
- package/dist/lib/packaging/errors.d.ts.map +0 -1
- package/dist/lib/packaging/errors.js +0 -36
- package/dist/lib/packaging/errors.js.map +0 -1
- package/dist/lib/schemas/io/cli-config.d.ts +0 -12
- package/dist/lib/schemas/io/cli-config.d.ts.map +0 -1
- package/dist/lib/schemas/io/cli-config.js +0 -35
- package/dist/lib/schemas/io/cli-config.js.map +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aws/agentcore",
|
|
3
|
-
"version": "1.0.0-preview.
|
|
3
|
+
"version": "1.0.0-preview.20",
|
|
4
4
|
"description": "CLI for Amazon Bedrock AgentCore",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"repository": {
|
|
@@ -41,6 +41,7 @@
|
|
|
41
41
|
"files": [
|
|
42
42
|
"dist",
|
|
43
43
|
"scripts",
|
|
44
|
+
"npm-shrinkwrap.json",
|
|
44
45
|
"!dist/mcp-harness"
|
|
45
46
|
],
|
|
46
47
|
"scripts": {
|
|
@@ -52,11 +53,11 @@
|
|
|
52
53
|
"build:assets": "node scripts/copy-assets.mjs",
|
|
53
54
|
"build:harness": "BUILD_HARNESS=1 node esbuild.config.mjs",
|
|
54
55
|
"cli": "npx tsx src/cli/index.ts",
|
|
55
|
-
"typecheck": "tsc --noEmit",
|
|
56
|
-
"lint": "eslint src/",
|
|
57
|
-
"lint:fix": "eslint src/ --fix",
|
|
58
|
-
"format": "prettier --write .",
|
|
59
|
-
"format:check": "prettier --check .",
|
|
56
|
+
"typecheck": "tsc --noEmit --incremental",
|
|
57
|
+
"lint": "eslint --cache src/",
|
|
58
|
+
"lint:fix": "eslint --cache src/ --fix",
|
|
59
|
+
"format": "prettier --cache --write .",
|
|
60
|
+
"format:check": "prettier --cache --check .",
|
|
60
61
|
"secrets:check": "secretlint '**/*'",
|
|
61
62
|
"security:audit": "npm audit --audit-level=high --omit=dev",
|
|
62
63
|
"clean": "node -e \"require('fs').rmSync('dist', {recursive: true, force: true})\"",
|
|
@@ -64,35 +65,44 @@
|
|
|
64
65
|
"test": "vitest run --project unit",
|
|
65
66
|
"test:all": "vitest run",
|
|
66
67
|
"test:watch": "vitest --project unit",
|
|
67
|
-
"test:integ": "vitest run --project integ",
|
|
68
|
+
"test:integ": "npm run build && vitest run --project integ",
|
|
68
69
|
"test:unit": "vitest run --project unit --coverage",
|
|
69
70
|
"test:e2e": "vitest run --project e2e",
|
|
70
71
|
"test:update-snapshots": "vitest run --project unit --update",
|
|
71
72
|
"test:tui": "npm run build:harness && vitest run --project tui",
|
|
73
|
+
"test:browser": "npx playwright test --config browser-tests/playwright.config.ts",
|
|
72
74
|
"bundle": "node scripts/bundle.mjs"
|
|
73
75
|
},
|
|
74
76
|
"dependencies": {
|
|
75
|
-
"@aws-cdk/
|
|
77
|
+
"@aws-cdk/cdk-assets-lib": "^1.4.10",
|
|
78
|
+
"@aws-cdk/toolkit-lib": "^1.28.0",
|
|
76
79
|
"@aws-sdk/client-application-signals": "^3.1003.0",
|
|
77
80
|
"@aws-sdk/client-bedrock": "^3.1012.0",
|
|
78
81
|
"@aws-sdk/client-bedrock-agent": "^3.1012.0",
|
|
79
|
-
"@aws-sdk/client-bedrock-agentcore": "^3.
|
|
80
|
-
"@aws-sdk/client-bedrock-agentcore-control": "^3.
|
|
82
|
+
"@aws-sdk/client-bedrock-agentcore": "^3.1061.0",
|
|
83
|
+
"@aws-sdk/client-bedrock-agentcore-control": "^3.1061.0",
|
|
81
84
|
"@aws-sdk/client-bedrock-runtime": "^3.893.0",
|
|
82
85
|
"@aws-sdk/client-cloudformation": "^3.893.0",
|
|
83
86
|
"@aws-sdk/client-cloudwatch-logs": "^3.893.0",
|
|
87
|
+
"@aws-sdk/client-efs": "^3.1067.0",
|
|
84
88
|
"@aws-sdk/client-resource-groups-tagging-api": "^3.893.0",
|
|
85
89
|
"@aws-sdk/client-s3": "^3.1012.0",
|
|
90
|
+
"@aws-sdk/client-s3files": "^3.1067.0",
|
|
86
91
|
"@aws-sdk/client-sts": "^3.893.0",
|
|
87
92
|
"@aws-sdk/client-xray": "^3.1003.0",
|
|
88
93
|
"@aws-sdk/credential-providers": "^3.893.0",
|
|
89
|
-
"@aws/
|
|
94
|
+
"@aws-sdk/region-config-resolver": "^3.972.13",
|
|
95
|
+
"@aws/agent-inspector": "0.6.1",
|
|
90
96
|
"@commander-js/extra-typings": "^14.0.0",
|
|
91
|
-
"@opentelemetry/api": "^1.9.
|
|
97
|
+
"@opentelemetry/api": "^1.9.1",
|
|
98
|
+
"@opentelemetry/exporter-metrics-otlp-http": "^0.215.0",
|
|
92
99
|
"@opentelemetry/otlp-transformer": "^0.213.0",
|
|
100
|
+
"@opentelemetry/resources": "^2.6.1",
|
|
101
|
+
"@opentelemetry/sdk-metrics": "^2.6.1",
|
|
93
102
|
"@smithy/shared-ini-file-loader": "^4.4.2",
|
|
94
103
|
"commander": "^14.0.2",
|
|
95
104
|
"dotenv": "^17.2.3",
|
|
105
|
+
"fast-json-stable-stringify": "^2.1.0",
|
|
96
106
|
"fflate": "^0.8.2",
|
|
97
107
|
"handlebars": "^4.7.8",
|
|
98
108
|
"ink": "^6.6.0",
|
|
@@ -100,29 +110,35 @@
|
|
|
100
110
|
"ink-spinner": "^5.0.0",
|
|
101
111
|
"js-yaml": "^4.1.1",
|
|
102
112
|
"react": "^19.2.3",
|
|
113
|
+
"ws": "^8.21.0",
|
|
103
114
|
"yaml": "^2.8.3",
|
|
104
115
|
"zod": "^4.3.5"
|
|
105
116
|
},
|
|
117
|
+
"optionalDependencies": {
|
|
118
|
+
"@napi-rs/keyring": "^1.3.0"
|
|
119
|
+
},
|
|
106
120
|
"peerDependencies": {
|
|
107
|
-
"aws-cdk-lib": "^2.
|
|
121
|
+
"aws-cdk-lib": "^2.258.0",
|
|
108
122
|
"constructs": "^10.0.0"
|
|
109
123
|
},
|
|
110
124
|
"devDependencies": {
|
|
111
125
|
"@aws-sdk/client-cognito-identity-provider": "^3.1018.0",
|
|
112
126
|
"@eslint/js": "^9.39.2",
|
|
113
127
|
"@modelcontextprotocol/sdk": "^1.0.0",
|
|
114
|
-
"@
|
|
128
|
+
"@playwright/test": "^1.59.1",
|
|
129
|
+
"@secretlint/secretlint-rule-preset-recommend": "^12.2.0",
|
|
115
130
|
"@trivago/prettier-plugin-sort-imports": "^6.0.2",
|
|
116
131
|
"@types/js-yaml": "^4.0.9",
|
|
117
132
|
"@types/node": "^25.0.3",
|
|
118
133
|
"@types/react": "^19.2.7",
|
|
134
|
+
"@types/ws": "^8.18.1",
|
|
119
135
|
"@typescript-eslint/eslint-plugin": "^8.50.0",
|
|
120
136
|
"@typescript-eslint/parser": "^8.50.0",
|
|
121
137
|
"@vitest/coverage-v8": "^4.0.18",
|
|
122
138
|
"@xterm/headless": "^6.0.0",
|
|
123
|
-
"aws-cdk-lib": "^2.
|
|
139
|
+
"aws-cdk-lib": "^2.258.0",
|
|
124
140
|
"constructs": "^10.4.4",
|
|
125
|
-
"esbuild": "^0.
|
|
141
|
+
"esbuild": "^0.28.0",
|
|
126
142
|
"eslint": "^9.39.4",
|
|
127
143
|
"eslint-config-prettier": "^10.1.8",
|
|
128
144
|
"eslint-import-resolver-typescript": "^4.4.4",
|
|
@@ -133,10 +149,12 @@
|
|
|
133
149
|
"eslint-plugin-security": "^4.0.0",
|
|
134
150
|
"husky": "^9.1.7",
|
|
135
151
|
"ink-testing-library": "^4.0.0",
|
|
152
|
+
"jose": "^6.2.3",
|
|
136
153
|
"lint-staged": "^16.2.7",
|
|
137
154
|
"node-pty": "^1.1.0",
|
|
138
155
|
"prettier": "^3.7.4",
|
|
139
|
-
"secretlint": "^
|
|
156
|
+
"secretlint": "^12.2.0",
|
|
157
|
+
"strip-ansi": "^7.2.0",
|
|
140
158
|
"tsx": "^4.21.0",
|
|
141
159
|
"typescript": "^5",
|
|
142
160
|
"typescript-eslint": "^8.50.1",
|
|
@@ -144,23 +162,27 @@
|
|
|
144
162
|
},
|
|
145
163
|
"overridesComments": {
|
|
146
164
|
"minimatch": "GHSA-7r86-cg39-jmmj, GHSA-23c5-xmqv-rm74: minimatch 10.0.0-10.2.2 has ReDoS vulnerabilities. Multiple transitive deps (eslint, typescript-eslint, eslint-plugin-import, eslint-plugin-react, prettier-plugin-sort-imports, aws-cdk-lib) pin older versions. Remove this override once upstream packages update their minimatch dependency to >=10.2.3.",
|
|
165
|
+
"glob": "glob <12 is deprecated and emits npm install warnings (https://github.com/isaacs/node-glob). Pulled in transitively via archiver-utils@5.0.2 (latest), which still pins glob@^10.0.0. archiver-utils only uses glob.sync(pattern, options), which remains compatible in glob@13. Remove this override once archiver-utils updates its glob dependency.",
|
|
147
166
|
"fast-xml-parser": "GHSA-8gc5-j5rx-235r, GHSA-jp2q-39xq-3w4g: fast-xml-parser <=5.5.6 has entity expansion bypass (CVE-2026-33036, CVE-2026-33349). Transitive via @aws-sdk/xml-builder. Remove once @aws-sdk updates to fast-xml-parser >=5.5.7.",
|
|
148
|
-
"@aws-sdk/xml-builder": "aws/aws-sdk-js-v3#7867: @aws-sdk/xml-builder <3.972.14 does not configure maxTotalExpansions on fast-xml-parser, causing 'Entity expansion limit exceeded' on large CloudFormation responses. Remove once @aws-sdk/client-* deps are bumped past 3.972.14."
|
|
167
|
+
"@aws-sdk/xml-builder": "aws/aws-sdk-js-v3#7867: @aws-sdk/xml-builder <3.972.14 does not configure maxTotalExpansions on fast-xml-parser, causing 'Entity expansion limit exceeded' on large CloudFormation responses. Remove once @aws-sdk/client-* deps are bumped past 3.972.14.",
|
|
168
|
+
"protobufjs": "GHSA-f38q-mgvj-vph7, GHSA-wcpc-wj8m-hjx6, GHSA-94rc-8x27-4472: protobufjs <=7.6.2 / 8.0.0-8.5.0 has property shadowing and DoS vulnerabilities. Transitive via @opentelemetry/otlp-transformer. Remove once @opentelemetry updates to protobufjs >=7.6.3 or >=8.5.1."
|
|
149
169
|
},
|
|
150
170
|
"overrides": {
|
|
151
171
|
"minimatch": "10.2.4",
|
|
172
|
+
"glob": "^13.0.0",
|
|
152
173
|
"fast-xml-parser": "5.5.7",
|
|
153
|
-
"@aws-sdk/xml-builder": "3.972.15"
|
|
174
|
+
"@aws-sdk/xml-builder": "3.972.15",
|
|
175
|
+
"protobufjs": ">=7.6.3"
|
|
154
176
|
},
|
|
155
177
|
"engines": {
|
|
156
178
|
"node": ">=20"
|
|
157
179
|
},
|
|
158
180
|
"lint-staged": {
|
|
159
181
|
"*.{ts,tsx}": [
|
|
160
|
-
"eslint --max-warnings=10"
|
|
182
|
+
"eslint --cache --max-warnings=10"
|
|
161
183
|
],
|
|
162
184
|
"*.{ts,tsx,js,jsx,json,md,css,html,yml,yaml}": [
|
|
163
|
-
"prettier --check"
|
|
185
|
+
"prettier --cache --check"
|
|
164
186
|
],
|
|
165
187
|
"*": [
|
|
166
188
|
"secretlint"
|
package/scripts/bump-version.ts
CHANGED
|
@@ -183,7 +183,7 @@ function getGitLog(sinceTag?: string): string {
|
|
|
183
183
|
} else {
|
|
184
184
|
// Try to get the last tag
|
|
185
185
|
try {
|
|
186
|
-
const lastTag = execSync(
|
|
186
|
+
const lastTag = execSync("git describe --tags --abbrev=0 --match 'v*'", { encoding: 'utf-8' }).trim();
|
|
187
187
|
cmd += ` ${lastTag}..HEAD`;
|
|
188
188
|
} catch {
|
|
189
189
|
// No tags exist, get last 20 commits
|
|
@@ -218,11 +218,11 @@ function categorizeCommits(gitLog: string): CategorizedChanges {
|
|
|
218
218
|
|
|
219
219
|
const msg = trimmed.slice(2).trim();
|
|
220
220
|
|
|
221
|
-
if (
|
|
221
|
+
if (/^(feat|feature)(\(.*?\))?:/.test(msg)) {
|
|
222
222
|
result.features.push(msg);
|
|
223
|
-
} else if (
|
|
223
|
+
} else if (/^(fix|bugfix)(\(.*?\))?:/.test(msg)) {
|
|
224
224
|
result.fixes.push(msg);
|
|
225
|
-
} else if (
|
|
225
|
+
} else if (/^docs?(\(.*?\))?:/.test(msg)) {
|
|
226
226
|
result.docs.push(msg);
|
|
227
227
|
} else {
|
|
228
228
|
result.other.push(msg);
|
package/scripts/bundle.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* bundle.mjs — Single command to build CLI + CDK constructs
|
|
2
|
+
* bundle.mjs — Single command to build CLI + CDK constructs into one tarball.
|
|
3
3
|
*
|
|
4
4
|
* This is a testing-only workflow. It does NOT modify the default build or
|
|
5
5
|
* deployment flow. The normal `npm run build` + `npm pack` pipeline is unchanged.
|
|
@@ -9,16 +9,19 @@
|
|
|
9
9
|
* At `agentcore create` time, CDKRenderer detects this tarball and installs it
|
|
10
10
|
* after the normal `npm install`, overriding the registry version.
|
|
11
11
|
*
|
|
12
|
-
* It also builds the @aws/agent-inspector frontend and copies its dist-assets
|
|
13
|
-
* into the CLI's dist/agent-inspector/ directory, overriding the npm registry version.
|
|
14
|
-
*
|
|
15
12
|
* Usage:
|
|
16
13
|
* node scripts/bundle.mjs
|
|
17
14
|
* npm run bundle
|
|
18
15
|
*
|
|
19
16
|
* Environment variables:
|
|
20
|
-
* AGENTCORE_CDK_PATH
|
|
21
|
-
*
|
|
17
|
+
* AGENTCORE_CDK_PATH — path to the agentcore-l3-cdk-constructs repo.
|
|
18
|
+
* Falls back to ../agentcore-l3-cdk-constructs, then clones from GitHub.
|
|
19
|
+
* AGENTCORE_INSPECTOR_PATH — path to the agent-inspector repo.
|
|
20
|
+
* Falls back to ../agent-inspector. If found, builds and bundles
|
|
21
|
+
* the local version instead of the npm-installed one.
|
|
22
|
+
* AGENTCORE_TARBALL_OUTPUT — output path (without .tgz) for the tarball. Relative to cwd.
|
|
23
|
+
* AGENTCORE_TARBALL_VERSION_SUFFIX — version prerelease suffix (e.g. "abc12-def34").
|
|
24
|
+
* Defaults to a timestamp if not set.
|
|
22
25
|
*/
|
|
23
26
|
import { execFileSync } from 'node:child_process';
|
|
24
27
|
import * as fs from 'node:fs';
|
|
@@ -80,18 +83,19 @@ function resolveCdkPath() {
|
|
|
80
83
|
}
|
|
81
84
|
|
|
82
85
|
/**
|
|
83
|
-
* Resolve
|
|
84
|
-
* 1.
|
|
86
|
+
* Resolve a local agent-inspector repo path. Priority:
|
|
87
|
+
* 1. AGENTCORE_INSPECTOR_PATH env var
|
|
85
88
|
* 2. Sibling directory ../agent-inspector
|
|
89
|
+
* 3. null (use npm-installed version)
|
|
86
90
|
*/
|
|
87
91
|
function resolveInspectorPath() {
|
|
88
|
-
if (process.env.
|
|
89
|
-
const p = path.resolve(process.env.
|
|
92
|
+
if (process.env.AGENTCORE_INSPECTOR_PATH) {
|
|
93
|
+
const p = path.resolve(process.env.AGENTCORE_INSPECTOR_PATH);
|
|
90
94
|
if (fs.existsSync(path.join(p, 'package.json'))) {
|
|
91
|
-
log(`Using agent-inspector from
|
|
95
|
+
log(`Using agent-inspector from AGENTCORE_INSPECTOR_PATH: ${p}`);
|
|
92
96
|
return p;
|
|
93
97
|
}
|
|
94
|
-
console.warn(` WARNING:
|
|
98
|
+
console.warn(` WARNING: AGENTCORE_INSPECTOR_PATH=${p} does not contain package.json, ignoring.`);
|
|
95
99
|
}
|
|
96
100
|
|
|
97
101
|
const sibling = path.resolve(cliRoot, '..', 'agent-inspector');
|
|
@@ -109,8 +113,14 @@ function resolveInspectorPath() {
|
|
|
109
113
|
|
|
110
114
|
log('Starting bundle process...');
|
|
111
115
|
|
|
112
|
-
const
|
|
113
|
-
|
|
116
|
+
const now = new Date();
|
|
117
|
+
const timestamp = now.toISOString().replace(/[-:T]/g, '').slice(0, 14);
|
|
118
|
+
const versionSuffix = process.env.AGENTCORE_TARBALL_VERSION_SUFFIX || timestamp;
|
|
119
|
+
if (!/^[\w.-]+$/.test(versionSuffix)) {
|
|
120
|
+
console.error(`ERROR: Invalid version suffix: ${versionSuffix}`);
|
|
121
|
+
process.exit(1);
|
|
122
|
+
}
|
|
123
|
+
log(`Bundle version suffix: ${versionSuffix}`);
|
|
114
124
|
|
|
115
125
|
// Helper to bump a package version with a unique e2e timestamp tag.
|
|
116
126
|
// Saves the original version so it can be restored after packing.
|
|
@@ -119,7 +129,9 @@ function bumpVersion(pkgDir) {
|
|
|
119
129
|
const pkg = JSON.parse(fs.readFileSync(pkgJsonPath, 'utf8'));
|
|
120
130
|
const originalVersion = pkg.version;
|
|
121
131
|
const baseVersion = originalVersion.split('-')[0];
|
|
122
|
-
|
|
132
|
+
const prerelease = originalVersion.includes('-') ? originalVersion.split('-').slice(1).join('-') : '';
|
|
133
|
+
const tag = prerelease ? `${prerelease}-${versionSuffix}` : versionSuffix;
|
|
134
|
+
pkg.version = `${baseVersion}-${tag}`;
|
|
123
135
|
fs.writeFileSync(pkgJsonPath, JSON.stringify(pkg, null, 2) + '\n');
|
|
124
136
|
log(`Bumped ${pkg.name} version: ${originalVersion} -> ${pkg.version}`);
|
|
125
137
|
return { pkgJsonPath, originalVersion, bumpedVersion: pkg.version };
|
|
@@ -131,6 +143,17 @@ function restoreVersion({ pkgJsonPath, originalVersion }) {
|
|
|
131
143
|
fs.writeFileSync(pkgJsonPath, JSON.stringify(pkg, null, 2) + '\n');
|
|
132
144
|
}
|
|
133
145
|
|
|
146
|
+
/**
|
|
147
|
+
* If AGENTCORE_TARBALL_OUTPUT is set, return a resolved path using it as base.
|
|
148
|
+
* Always appends .tgz.
|
|
149
|
+
*/
|
|
150
|
+
function resolveTarballPath(tarballPath) {
|
|
151
|
+
const envPath = process.env.AGENTCORE_TARBALL_OUTPUT;
|
|
152
|
+
if (!envPath) return tarballPath;
|
|
153
|
+
const base = envPath.replace(/\.tgz$/, '');
|
|
154
|
+
return path.resolve(`${base}.tgz`);
|
|
155
|
+
}
|
|
156
|
+
|
|
134
157
|
// Step 1: Resolve and build CDK constructs
|
|
135
158
|
const cdkPath = resolveCdkPath();
|
|
136
159
|
|
|
@@ -164,12 +187,7 @@ run('npm', ['install'], { cwd: cliRoot });
|
|
|
164
187
|
log('Building CLI...');
|
|
165
188
|
run('npm', ['run', 'build'], { cwd: cliRoot });
|
|
166
189
|
|
|
167
|
-
// Step
|
|
168
|
-
const bundledTarballDest = path.join(cliRoot, 'dist', 'assets', 'bundled-agentcore-cdk.tgz');
|
|
169
|
-
fs.copyFileSync(cdkTarballSrc, bundledTarballDest);
|
|
170
|
-
log(`Placed CDK tarball at ${bundledTarballDest}`);
|
|
171
|
-
|
|
172
|
-
// Step 5: Build and bundle agent-inspector frontend (overrides the npm version)
|
|
190
|
+
// Step 3.5: If local agent-inspector is available, build and overwrite dist/agent-inspector/
|
|
173
191
|
const inspectorPath = resolveInspectorPath();
|
|
174
192
|
if (inspectorPath) {
|
|
175
193
|
log('Installing agent-inspector dependencies...');
|
|
@@ -178,24 +196,26 @@ if (inspectorPath) {
|
|
|
178
196
|
log('Building agent-inspector...');
|
|
179
197
|
run('npm', ['run', 'build'], { cwd: inspectorPath });
|
|
180
198
|
|
|
181
|
-
const
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
if (fs.existsSync(inspectorDistSrc)) {
|
|
185
|
-
if (fs.existsSync(inspectorDistDest)) {
|
|
186
|
-
fs.rmSync(inspectorDistDest, { recursive: true });
|
|
187
|
-
}
|
|
188
|
-
fs.cpSync(inspectorDistSrc, inspectorDistDest, { recursive: true });
|
|
189
|
-
log(`Copied agent-inspector frontend to ${inspectorDistDest}`);
|
|
190
|
-
} else {
|
|
191
|
-
console.error(`ERROR: agent-inspector build did not produce dist-assets/ at ${inspectorDistSrc}`);
|
|
199
|
+
const inspectorDistAssets = path.join(inspectorPath, 'dist-assets');
|
|
200
|
+
if (!fs.existsSync(inspectorDistAssets)) {
|
|
201
|
+
console.error(`ERROR: agent-inspector build did not produce dist-assets/ at ${inspectorDistAssets}`);
|
|
192
202
|
process.exit(1);
|
|
193
203
|
}
|
|
194
|
-
|
|
195
|
-
|
|
204
|
+
|
|
205
|
+
const inspectorDest = path.join(cliRoot, 'dist', 'agent-inspector');
|
|
206
|
+
if (fs.existsSync(inspectorDest)) {
|
|
207
|
+
fs.rmSync(inspectorDest, { recursive: true });
|
|
208
|
+
}
|
|
209
|
+
fs.cpSync(inspectorDistAssets, inspectorDest, { recursive: true });
|
|
210
|
+
log(`Replaced dist/agent-inspector/ with local build from ${inspectorPath}`);
|
|
196
211
|
}
|
|
197
212
|
|
|
198
|
-
// Step
|
|
213
|
+
// Step 4: Copy CDK tarball into dist/assets/ so CDKRenderer can detect it
|
|
214
|
+
const bundledTarballDest = path.join(cliRoot, 'dist', 'assets', 'bundled-agentcore-cdk.tgz');
|
|
215
|
+
fs.copyFileSync(cdkTarballSrc, bundledTarballDest);
|
|
216
|
+
log(`Placed CDK tarball at ${bundledTarballDest}`);
|
|
217
|
+
|
|
218
|
+
// Step 5: Bump CLI version and pack into final tarball (includes the bundled CDK tarball)
|
|
199
219
|
const cliVersionInfo = bumpVersion(cliRoot);
|
|
200
220
|
try {
|
|
201
221
|
log('Packing CLI tarball...');
|
|
@@ -207,10 +227,19 @@ try {
|
|
|
207
227
|
const cliTarballName = `aws-agentcore-${cliVersionInfo.bumpedVersion}.tgz`;
|
|
208
228
|
const cliTarballPath = path.join(cliRoot, cliTarballName);
|
|
209
229
|
|
|
210
|
-
if (fs.existsSync(cliTarballPath)) {
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
230
|
+
if (!fs.existsSync(cliTarballPath)) {
|
|
231
|
+
console.error(`ERROR: Expected tarball at ${cliTarballPath} but not found.`);
|
|
232
|
+
process.exit(1);
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
const finalTarballPath = resolveTarballPath(cliTarballPath);
|
|
236
|
+
if (finalTarballPath !== cliTarballPath) {
|
|
237
|
+
fs.mkdirSync(path.dirname(finalTarballPath), { recursive: true });
|
|
238
|
+
fs.renameSync(cliTarballPath, finalTarballPath);
|
|
239
|
+
log(`Renamed tarball to: ${finalTarballPath}`);
|
|
216
240
|
}
|
|
241
|
+
|
|
242
|
+
// Final output
|
|
243
|
+
log(`Done! Tarball: ${finalTarballPath}`);
|
|
244
|
+
log(`Install with: npm install -g ${finalTarballPath}`);
|
|
245
|
+
log('When you run agentcore create, the bundled CDK constructs will be installed automatically.');
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Run E2E tests against your dev account using local credentials.
|
|
3
|
+
#
|
|
4
|
+
# Usage:
|
|
5
|
+
# ./scripts/run-e2e-dev.sh # runs strands-bedrock.test.ts
|
|
6
|
+
# ./scripts/run-e2e-dev.sh --all # runs the full e2e suite
|
|
7
|
+
# ./scripts/run-e2e-dev.sh e2e-tests/foo.test.ts # runs a specific test file
|
|
8
|
+
|
|
9
|
+
set -euo pipefail
|
|
10
|
+
|
|
11
|
+
REGION="${AWS_REGION:-us-east-1}"
|
|
12
|
+
|
|
13
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
14
|
+
REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
|
15
|
+
|
|
16
|
+
# ── Parse arguments ────────────────────────────────────────────────────────────
|
|
17
|
+
RUN_ALL=false
|
|
18
|
+
TEST_FILES=()
|
|
19
|
+
for arg in "$@"; do
|
|
20
|
+
if [[ "$arg" == "--all" ]]; then
|
|
21
|
+
RUN_ALL=true
|
|
22
|
+
else
|
|
23
|
+
TEST_FILES+=("$arg")
|
|
24
|
+
fi
|
|
25
|
+
done
|
|
26
|
+
|
|
27
|
+
# ── Build & install CLI from source ────────────────────────────────────────────
|
|
28
|
+
cd "$REPO_ROOT"
|
|
29
|
+
npm run build
|
|
30
|
+
TARBALL=$(npm pack | tail -1)
|
|
31
|
+
npm install -g "$TARBALL"
|
|
32
|
+
echo "=== Installed: $(agentcore --version) ==="
|
|
33
|
+
|
|
34
|
+
# ── Set env vars for tests ─────────────────────────────────────────────────────
|
|
35
|
+
export AWS_REGION="$REGION"
|
|
36
|
+
export AWS_ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text)
|
|
37
|
+
|
|
38
|
+
# ── Run tests ──────────────────────────────────────────────────────────────────
|
|
39
|
+
cd "$REPO_ROOT"
|
|
40
|
+
|
|
41
|
+
EXCLUDE_API_KEY_TESTS=(
|
|
42
|
+
--exclude 'e2e-tests/*-anthropic*'
|
|
43
|
+
--exclude 'e2e-tests/*-openai*'
|
|
44
|
+
--exclude 'e2e-tests/*-gemini*'
|
|
45
|
+
)
|
|
46
|
+
|
|
47
|
+
if [[ "$RUN_ALL" == "true" ]]; then
|
|
48
|
+
echo "=== Running full e2e suite ==="
|
|
49
|
+
npx vitest run --project e2e
|
|
50
|
+
elif [[ ${#TEST_FILES[@]} -gt 0 ]]; then
|
|
51
|
+
echo "=== Running: ${TEST_FILES[*]} ==="
|
|
52
|
+
npx vitest run --project e2e "${TEST_FILES[@]}"
|
|
53
|
+
else
|
|
54
|
+
echo "=== Running all Bedrock/IAM tests (excluding API-key-dependent tests) ==="
|
|
55
|
+
npx vitest run --project e2e "${EXCLUDE_API_KEY_TESTS[@]}"
|
|
56
|
+
fi
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Run E2E tests locally in the CI account, replicating the GitHub Actions e2e-tests.yml workflow.
|
|
3
|
+
#
|
|
4
|
+
# Required env vars:
|
|
5
|
+
# E2E_ROLE_ARN — IAM role ARN to assume (grants access to the test account)
|
|
6
|
+
# E2E_SECRET_ARN — Secrets Manager ARN containing ANTHROPIC_API_KEY, OPENAI_API_KEY, GEMINI_API_KEY,
|
|
7
|
+
# and (for payments tests) CDP_API_KEY_ID, CDP_API_KEY_SECRET, CDP_WALLET_SECRET
|
|
8
|
+
#
|
|
9
|
+
# Optional env vars:
|
|
10
|
+
# AWS_REGION — defaults to us-east-1
|
|
11
|
+
# CDK_REPO_PATH — local path to CDK constructs repo; if set, builds and uses it as CDK_TARBALL
|
|
12
|
+
#
|
|
13
|
+
# Usage:
|
|
14
|
+
# export E2E_ROLE_ARN=arn:aws:iam::<account>:role/<role>
|
|
15
|
+
# export E2E_SECRET_ARN=arn:aws:secretsmanager:<region>:<account>:secret:<name>
|
|
16
|
+
# ./scripts/run-e2e-local.sh # runs strands-bedrock.test.ts (CI default)
|
|
17
|
+
# ./scripts/run-e2e-local.sh --all # runs the full e2e suite
|
|
18
|
+
# ./scripts/run-e2e-local.sh e2e-tests/foo.test.ts # runs a specific test file
|
|
19
|
+
#
|
|
20
|
+
# Prerequisites: aws CLI, node >=20.19, npm, git, uv, jq
|
|
21
|
+
|
|
22
|
+
set -euo pipefail
|
|
23
|
+
|
|
24
|
+
ROLE_ARN="${E2E_ROLE_ARN:-}"
|
|
25
|
+
SECRET_ARN="${E2E_SECRET_ARN:-}"
|
|
26
|
+
AWS_REGION="${AWS_REGION:-us-east-1}"
|
|
27
|
+
|
|
28
|
+
if [[ -z "$ROLE_ARN" ]]; then
|
|
29
|
+
echo "❌ E2E_ROLE_ARN is not set. Export it before running this script:"
|
|
30
|
+
echo " export E2E_ROLE_ARN=arn:aws:iam::<account>:role/<role-name>"
|
|
31
|
+
exit 1
|
|
32
|
+
fi
|
|
33
|
+
|
|
34
|
+
if [[ -z "$SECRET_ARN" ]]; then
|
|
35
|
+
echo "❌ E2E_SECRET_ARN is not set. Export it before running this script:"
|
|
36
|
+
echo " export E2E_SECRET_ARN=arn:aws:secretsmanager:<region>:<account>:secret:<name>"
|
|
37
|
+
exit 1
|
|
38
|
+
fi
|
|
39
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
40
|
+
REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
|
41
|
+
|
|
42
|
+
# ── Parse arguments ────────────────────────────────────────────────────────────
|
|
43
|
+
RUN_ALL=false
|
|
44
|
+
TEST_FILES=()
|
|
45
|
+
for arg in "$@"; do
|
|
46
|
+
if [[ "$arg" == "--all" ]]; then
|
|
47
|
+
RUN_ALL=true
|
|
48
|
+
else
|
|
49
|
+
TEST_FILES+=("$arg")
|
|
50
|
+
fi
|
|
51
|
+
done
|
|
52
|
+
|
|
53
|
+
echo "=== Assuming IAM role ==="
|
|
54
|
+
CREDS=$(aws sts assume-role \
|
|
55
|
+
--role-arn "$ROLE_ARN" \
|
|
56
|
+
--role-session-name "local-e2e-$(date +%s)" \
|
|
57
|
+
--duration-seconds 3600 \
|
|
58
|
+
--query 'Credentials.[AccessKeyId,SecretAccessKey,SessionToken]' \
|
|
59
|
+
--output text)
|
|
60
|
+
|
|
61
|
+
export AWS_ACCESS_KEY_ID=$(echo "$CREDS" | awk '{print $1}')
|
|
62
|
+
export AWS_SECRET_ACCESS_KEY=$(echo "$CREDS" | awk '{print $2}')
|
|
63
|
+
export AWS_SESSION_TOKEN=$(echo "$CREDS" | awk '{print $3}')
|
|
64
|
+
export AWS_REGION
|
|
65
|
+
|
|
66
|
+
echo "✅ Assumed role successfully"
|
|
67
|
+
|
|
68
|
+
echo "=== Fetching API keys from Secrets Manager ==="
|
|
69
|
+
SECRET_JSON=$(aws secretsmanager get-secret-value \
|
|
70
|
+
--secret-id "$SECRET_ARN" \
|
|
71
|
+
--region "$AWS_REGION" \
|
|
72
|
+
--query SecretString \
|
|
73
|
+
--output text)
|
|
74
|
+
|
|
75
|
+
# Mirror the GitHub workflow: parse-json-secrets maps keys to E2E_<KEY> then
|
|
76
|
+
# the workflow maps them to the bare names the tests expect.
|
|
77
|
+
export ANTHROPIC_API_KEY=$(echo "$SECRET_JSON" | jq -r '.ANTHROPIC_API_KEY // empty')
|
|
78
|
+
export OPENAI_API_KEY=$(echo "$SECRET_JSON" | jq -r '.OPENAI_API_KEY // empty')
|
|
79
|
+
export GEMINI_API_KEY=$(echo "$SECRET_JSON" | jq -r '.GEMINI_API_KEY // empty')
|
|
80
|
+
|
|
81
|
+
# Filesystem (BYO EFS / S3 Files) test inputs — required by strands-bedrock-byo-filesystem.test.ts.
|
|
82
|
+
export E2E_EFS_ACCESS_POINT_ARN=$(echo "$SECRET_JSON" | jq -r '.EFS_ACCESS_POINT_ARN // empty')
|
|
83
|
+
export E2E_S3_ACCESS_POINT_ARN=$(echo "$SECRET_JSON" | jq -r '.S3_ACCESS_POINT_ARN // empty')
|
|
84
|
+
export E2E_FILESYSTEM_SUBNET_ID=$(echo "$SECRET_JSON" | jq -r '.FILESYSTEM_SUBNET_ID // empty')
|
|
85
|
+
export E2E_FILESYSTEM_SECURITY_GROUP_ID=$(echo "$SECRET_JSON" | jq -r '.FILESYSTEM_SECURITY_GROUP_ID // empty')
|
|
86
|
+
|
|
87
|
+
# Payments (CDP) test inputs — required by payment-strands-bedrock.test.ts.
|
|
88
|
+
export CDP_API_KEY_ID=$(echo "$SECRET_JSON" | jq -r '.CDP_API_KEY_ID // empty')
|
|
89
|
+
export CDP_API_KEY_SECRET=$(echo "$SECRET_JSON" | jq -r '.CDP_API_KEY_SECRET // empty')
|
|
90
|
+
export CDP_WALLET_SECRET=$(echo "$SECRET_JSON" | jq -r '.CDP_WALLET_SECRET // empty')
|
|
91
|
+
|
|
92
|
+
echo "✅ Secrets loaded (keys present: $(echo "$SECRET_JSON" | jq -r 'keys | join(", ")')"
|
|
93
|
+
|
|
94
|
+
echo "=== Setting AWS account env var ==="
|
|
95
|
+
export AWS_ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text)
|
|
96
|
+
echo "✅ AWS_ACCOUNT_ID=$AWS_ACCOUNT_ID AWS_REGION=$AWS_REGION"
|
|
97
|
+
|
|
98
|
+
cd "$REPO_ROOT"
|
|
99
|
+
|
|
100
|
+
echo "=== Verifying git is configured (required for agentcore create) ==="
|
|
101
|
+
git_email="$(git config --global user.email || true)"
|
|
102
|
+
git_name="$(git config --global user.name || true)"
|
|
103
|
+
|
|
104
|
+
if [ -z "$git_email" ] || [ -z "$git_name" ]; then
|
|
105
|
+
echo "ERROR: git is not configured. 'agentcore create' requires a global git identity." >&2
|
|
106
|
+
echo "Set it with:" >&2
|
|
107
|
+
echo " git config --global user.email \"you@example.com\"" >&2
|
|
108
|
+
echo " git config --global user.name \"Your Name\"" >&2
|
|
109
|
+
exit 1
|
|
110
|
+
fi
|
|
111
|
+
|
|
112
|
+
echo "git configured as: $git_name <$git_email>"
|
|
113
|
+
|
|
114
|
+
echo "=== Installing dependencies ==="
|
|
115
|
+
npm ci
|
|
116
|
+
|
|
117
|
+
echo "=== Building CLI ==="
|
|
118
|
+
npm run build
|
|
119
|
+
|
|
120
|
+
echo "=== Installing CLI globally ==="
|
|
121
|
+
TARBALL=$(npm pack | tail -1)
|
|
122
|
+
npm install -g "$TARBALL"
|
|
123
|
+
echo "✅ Installed: $(agentcore --version)"
|
|
124
|
+
|
|
125
|
+
echo "=== Running E2E tests ==="
|
|
126
|
+
if [[ -n "${CDK_REPO_PATH:-}" ]]; then
|
|
127
|
+
echo "=== Building CDK constructs from $CDK_REPO_PATH ==="
|
|
128
|
+
pushd "$CDK_REPO_PATH" > /dev/null
|
|
129
|
+
npm ci
|
|
130
|
+
npm run build
|
|
131
|
+
CDK_TARBALL_NAME=$(npm pack | tail -1)
|
|
132
|
+
export CDK_TARBALL="$CDK_REPO_PATH/$CDK_TARBALL_NAME"
|
|
133
|
+
popd > /dev/null
|
|
134
|
+
echo "✅ CDK_TARBALL=$CDK_TARBALL"
|
|
135
|
+
fi
|
|
136
|
+
if [[ "$RUN_ALL" == "true" ]]; then
|
|
137
|
+
echo "Running full e2e suite"
|
|
138
|
+
npx vitest run --project e2e
|
|
139
|
+
elif [[ ${#TEST_FILES[@]} -gt 0 ]]; then
|
|
140
|
+
echo "Running: ${TEST_FILES[*]}"
|
|
141
|
+
npx vitest run --project e2e "${TEST_FILES[@]}"
|
|
142
|
+
else
|
|
143
|
+
echo "Running default: e2e-tests/strands-bedrock.test.ts"
|
|
144
|
+
npx vitest run --project e2e e2e-tests/strands-bedrock.test.ts
|
|
145
|
+
fi
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
import { ZodError } from 'zod';
|
|
2
|
-
/**
|
|
3
|
-
* Base class for all config-related errors
|
|
4
|
-
*/
|
|
5
|
-
export declare abstract class ConfigError extends Error {
|
|
6
|
-
protected constructor(message: string);
|
|
7
|
-
}
|
|
8
|
-
/**
|
|
9
|
-
* Thrown when a config file doesn't exist
|
|
10
|
-
*/
|
|
11
|
-
export declare class ConfigNotFoundError extends ConfigError {
|
|
12
|
-
readonly filePath: string;
|
|
13
|
-
readonly fileType: string;
|
|
14
|
-
constructor(filePath: string, fileType: string);
|
|
15
|
-
}
|
|
16
|
-
/**
|
|
17
|
-
* Thrown when a config file can't be read
|
|
18
|
-
*/
|
|
19
|
-
export declare class ConfigReadError extends ConfigError {
|
|
20
|
-
readonly filePath: string;
|
|
21
|
-
readonly cause: unknown;
|
|
22
|
-
constructor(filePath: string, cause: unknown);
|
|
23
|
-
}
|
|
24
|
-
/**
|
|
25
|
-
* Thrown when a config file can't be written
|
|
26
|
-
*/
|
|
27
|
-
export declare class ConfigWriteError extends ConfigError {
|
|
28
|
-
readonly filePath: string;
|
|
29
|
-
readonly cause: unknown;
|
|
30
|
-
constructor(filePath: string, cause: unknown);
|
|
31
|
-
}
|
|
32
|
-
/**
|
|
33
|
-
* Thrown when config validation fails
|
|
34
|
-
*/
|
|
35
|
-
export declare class ConfigValidationError extends ConfigError {
|
|
36
|
-
readonly filePath: string;
|
|
37
|
-
readonly fileType: string;
|
|
38
|
-
readonly zodError: ZodError;
|
|
39
|
-
constructor(filePath: string, fileType: string, zodError: ZodError);
|
|
40
|
-
}
|
|
41
|
-
/**
|
|
42
|
-
* Thrown when JSON parsing fails
|
|
43
|
-
*/
|
|
44
|
-
export declare class ConfigParseError extends ConfigError {
|
|
45
|
-
readonly filePath: string;
|
|
46
|
-
readonly cause: unknown;
|
|
47
|
-
constructor(filePath: string, cause: unknown);
|
|
48
|
-
}
|
|
49
|
-
//# sourceMappingURL=config.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/lib/errors/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAE/B;;GAEG;AACH,8BAAsB,WAAY,SAAQ,KAAK;IAC7C,SAAS,aAAa,OAAO,EAAE,MAAM;CAKtC;AAED;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,WAAW;aAEhC,QAAQ,EAAE,MAAM;aAChB,QAAQ,EAAE,MAAM;gBADhB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM;CAInC;AAED;;GAEG;AACH,qBAAa,eAAgB,SAAQ,WAAW;aAE5B,QAAQ,EAAE,MAAM;aACP,KAAK,EAAE,OAAO;gBADvB,QAAQ,EAAE,MAAM,EACP,KAAK,EAAE,OAAO;CAK1C;AAED;;GAEG;AACH,qBAAa,gBAAiB,SAAQ,WAAW;aAE7B,QAAQ,EAAE,MAAM;aACP,KAAK,EAAE,OAAO;gBADvB,QAAQ,EAAE,MAAM,EACP,KAAK,EAAE,OAAO;CAK1C;AA8GD;;GAEG;AACH,qBAAa,qBAAsB,SAAQ,WAAW;aAElC,QAAQ,EAAE,MAAM;aAChB,QAAQ,EAAE,MAAM;aAChB,QAAQ,EAAE,QAAQ;gBAFlB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,QAAQ;CAKrC;AAED;;GAEG;AACH,qBAAa,gBAAiB,SAAQ,WAAW;aAE7B,QAAQ,EAAE,MAAM;aACP,KAAK,EAAE,OAAO;gBADvB,QAAQ,EAAE,MAAM,EACP,KAAK,EAAE,OAAO;CAK1C"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/lib/errors/config.ts"],"names":[],"mappings":"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"}
|