@aws/agentcore 1.0.0-preview.9 → 1.0.0-rc.3
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 +1218 -145
- package/dist/assets/agent-inspector/index.css.asset +1 -0
- package/dist/assets/agent-inspector/index.js.asset +289 -0
- package/dist/assets/cdk/README.md +43 -17
- package/dist/assets/cdk/bin/cdk.ts +22 -123
- package/dist/assets/cdk/lib/cdk-stack.ts +18 -69
- package/dist/assets/cdk/package.json +6 -13
- package/dist/assets/cdk/tsconfig.json +1 -1
- package/dist/assets/evaluators/python-lambda/README.md +32 -0
- package/dist/assets/evaluators/python-lambda/pyproject.toml +1 -1
- package/dist/assets/templates/a2a-python-strands/README.md +31 -0
- package/dist/assets/templates/a2a-python-strands/main.py +100 -0
- package/dist/assets/templates/a2a-python-strands/memory/session.py +35 -0
- package/dist/assets/templates/a2a-python-strands/model/load.py +6 -0
- package/dist/assets/templates/a2a-python-strands/pyproject.toml +20 -0
- package/dist/assets/templates/agent-python-langchain/README.md +56 -0
- package/dist/assets/{python/a2a/googleadk/base → templates/agent-python-langchain}/gitignore.template +1 -1
- package/dist/assets/templates/agent-python-langchain/main.py +50 -0
- package/dist/assets/templates/agent-python-langchain/model/load.py +9 -0
- package/dist/assets/templates/agent-python-langchain/pyproject.toml +21 -0
- package/dist/assets/templates/agent-python-minimal/README.md +31 -0
- package/dist/assets/templates/agent-python-minimal/main.py +13 -0
- package/dist/assets/templates/agent-python-minimal/pyproject.toml +18 -0
- package/dist/assets/{container/python/Dockerfile → templates/agent-python-strands/Dockerfile.template} +3 -1
- package/dist/assets/templates/agent-python-strands/README.md +60 -0
- package/dist/assets/{python/a2a/langchain_langgraph/base → templates/agent-python-strands}/gitignore.template +1 -1
- package/dist/assets/templates/agent-python-strands/main.py +65 -0
- package/dist/assets/templates/agent-python-strands/memory/__init__.py +0 -0
- package/dist/assets/templates/agent-python-strands/memory/session.py +31 -0
- package/dist/assets/{python/http/strands/base → templates/agent-python-strands}/model/load.py +49 -3
- package/dist/assets/templates/agent-python-strands/parse.py +41 -0
- package/dist/assets/templates/agent-python-strands/pyproject.toml +24 -0
- package/dist/assets/templates/agent-typescript-strands/README.md +50 -0
- package/dist/assets/templates/agent-typescript-strands/gitignore.template +22 -0
- package/dist/assets/templates/agent-typescript-strands/main.ts +77 -0
- package/dist/assets/templates/agent-typescript-strands/memory/memory.ts +33 -0
- package/dist/assets/templates/agent-typescript-strands/model/load.ts +5 -0
- package/dist/assets/templates/agent-typescript-strands/package.json.template +28 -0
- package/dist/assets/templates/agent-typescript-strands/tsconfig.json +19 -0
- package/dist/assets/templates/agent-typescript-vercel/README.md +22 -0
- package/dist/assets/templates/agent-typescript-vercel/gitignore.template +22 -0
- package/dist/assets/templates/agent-typescript-vercel/main.ts +35 -0
- package/dist/assets/templates/agent-typescript-vercel/package.json.template +24 -0
- package/dist/assets/templates/agent-typescript-vercel/tsconfig.json +19 -0
- package/dist/assets/templates/agui-python-strands/README.md +39 -0
- package/dist/assets/{python/a2a/strands/base → templates/agui-python-strands}/gitignore.template +1 -1
- package/dist/assets/{python/agui/strands/base → templates/agui-python-strands}/main.py +11 -14
- package/dist/assets/templates/agui-python-strands/memory/__init__.py +0 -0
- package/dist/assets/templates/agui-python-strands/memory/session.py +35 -0
- package/dist/assets/templates/agui-python-strands/model/load.py +6 -0
- package/dist/assets/templates/agui-python-strands/pyproject.toml +22 -0
- package/dist/assets/{python/http/strands/base → templates/export-harness-python}/README.md +15 -8
- package/dist/assets/templates/export-harness-python/gitignore.template +41 -0
- package/dist/assets/templates/export-harness-python/main.py +584 -0
- package/dist/assets/templates/export-harness-python/mcp_client/client.py +63 -0
- package/dist/assets/templates/export-harness-python/memory/__init__.py +0 -0
- package/dist/assets/templates/export-harness-python/memory/session.py +47 -0
- package/dist/assets/templates/export-harness-python/model/load.py +249 -0
- package/dist/assets/templates/export-harness-python/model/mantle_compat.py +21 -0
- package/dist/assets/templates/export-harness-python/pyproject.toml +22 -0
- package/dist/assets/templates/export-harness-python/skills/fetcher.py +279 -0
- package/dist/assets/templates/harness/harness.yaml +157 -0
- package/dist/assets/templates/mcp-python-fastmcp/README.md +32 -0
- package/dist/assets/templates/mcp-python-fastmcp/gitignore.template +41 -0
- package/dist/assets/templates/mcp-python-fastmcp/main.py +83 -0
- package/dist/assets/{python/mcp/standalone/base → templates/mcp-python-fastmcp}/pyproject.toml +3 -2
- package/dist/assets/templates/shared/env.local.template +11 -0
- package/dist/assets/templates/shared/gitignore.template +19 -0
- package/dist/index.js +4 -27
- package/dist/main.js +1582 -0
- package/package.json +76 -148
- package/LICENSE +0 -175
- package/dist/agent-inspector/index.css +0 -1
- package/dist/agent-inspector/index.js +0 -279
- package/dist/assets/README.md +0 -104
- package/dist/assets/__tests__/__snapshots__/assets.snapshot.test.ts.snap +0 -5673
- package/dist/assets/__tests__/__snapshots__/dockerfile-render.test.ts.snap +0 -77
- package/dist/assets/__tests__/assets.snapshot.test.ts +0 -125
- package/dist/assets/__tests__/dockerfile-render.test.ts +0 -24
- package/dist/assets/agents/AGENTS.md +0 -141
- package/dist/assets/cdk/.prettierrc +0 -8
- package/dist/assets/cdk/jest.config.js +0 -9
- package/dist/assets/cdk/npmignore.template +0 -6
- package/dist/assets/cdk/test/cdk.test.ts +0 -28
- package/dist/assets/harness/invoke.py.template +0 -74
- package/dist/assets/mcp/python/README.md +0 -27
- package/dist/assets/mcp/python/pyproject.toml +0 -22
- package/dist/assets/mcp/python/server.py +0 -117
- package/dist/assets/mcp/python-lambda/README.md +0 -22
- package/dist/assets/mcp/python-lambda/handler.py +0 -144
- package/dist/assets/mcp/python-lambda/pyproject.toml +0 -15
- package/dist/assets/python/a2a/googleadk/base/README.md +0 -22
- package/dist/assets/python/a2a/googleadk/base/main.py +0 -110
- package/dist/assets/python/a2a/googleadk/base/model/load.py +0 -41
- package/dist/assets/python/a2a/googleadk/base/pyproject.toml +0 -20
- package/dist/assets/python/a2a/langchain_langgraph/base/README.md +0 -22
- package/dist/assets/python/a2a/langchain_langgraph/base/main.py +0 -130
- package/dist/assets/python/a2a/langchain_langgraph/base/model/load.py +0 -123
- package/dist/assets/python/a2a/langchain_langgraph/base/pyproject.toml +0 -25
- package/dist/assets/python/a2a/strands/base/README.md +0 -22
- package/dist/assets/python/a2a/strands/base/main.py +0 -107
- package/dist/assets/python/a2a/strands/base/model/load.py +0 -123
- package/dist/assets/python/a2a/strands/base/pyproject.toml +0 -23
- package/dist/assets/python/a2a/strands/capabilities/memory/session.py +0 -43
- package/dist/assets/python/agui/googleadk/base/README.md +0 -30
- package/dist/assets/python/agui/googleadk/base/gitignore.template +0 -41
- package/dist/assets/python/agui/googleadk/base/main.py +0 -31
- package/dist/assets/python/agui/googleadk/base/model/load.py +0 -41
- package/dist/assets/python/agui/googleadk/base/pyproject.toml +0 -24
- package/dist/assets/python/agui/langchain_langgraph/base/README.md +0 -22
- package/dist/assets/python/agui/langchain_langgraph/base/gitignore.template +0 -41
- package/dist/assets/python/agui/langchain_langgraph/base/main.py +0 -74
- package/dist/assets/python/agui/langchain_langgraph/base/model/load.py +0 -123
- package/dist/assets/python/agui/langchain_langgraph/base/pyproject.toml +0 -30
- package/dist/assets/python/agui/strands/base/README.md +0 -22
- package/dist/assets/python/agui/strands/base/gitignore.template +0 -41
- package/dist/assets/python/agui/strands/base/model/__init__.py +0 -1
- package/dist/assets/python/agui/strands/base/model/load.py +0 -123
- package/dist/assets/python/agui/strands/base/pyproject.toml +0 -27
- package/dist/assets/python/agui/strands/capabilities/memory/__init__.py +0 -1
- package/dist/assets/python/agui/strands/capabilities/memory/session.py +0 -43
- package/dist/assets/python/http/autogen/base/README.md +0 -39
- package/dist/assets/python/http/autogen/base/gitignore.template +0 -41
- package/dist/assets/python/http/autogen/base/main.py +0 -112
- package/dist/assets/python/http/autogen/base/mcp_client/__init__.py +0 -1
- package/dist/assets/python/http/autogen/base/mcp_client/client.py +0 -28
- package/dist/assets/python/http/autogen/base/model/__init__.py +0 -1
- package/dist/assets/python/http/autogen/base/model/load.py +0 -136
- package/dist/assets/python/http/autogen/base/pyproject.toml +0 -34
- package/dist/assets/python/http/googleadk/base/README.md +0 -39
- package/dist/assets/python/http/googleadk/base/gitignore.template +0 -41
- package/dist/assets/python/http/googleadk/base/main.py +0 -160
- package/dist/assets/python/http/googleadk/base/mcp_client/__init__.py +0 -1
- package/dist/assets/python/http/googleadk/base/mcp_client/client.py +0 -75
- package/dist/assets/python/http/googleadk/base/model/__init__.py +0 -1
- package/dist/assets/python/http/googleadk/base/model/load.py +0 -41
- package/dist/assets/python/http/googleadk/base/pyproject.toml +0 -22
- package/dist/assets/python/http/langchain_langgraph/base/README.md +0 -39
- package/dist/assets/python/http/langchain_langgraph/base/gitignore.template +0 -41
- package/dist/assets/python/http/langchain_langgraph/base/main.py +0 -176
- package/dist/assets/python/http/langchain_langgraph/base/mcp_client/__init__.py +0 -1
- package/dist/assets/python/http/langchain_langgraph/base/mcp_client/client.py +0 -77
- package/dist/assets/python/http/langchain_langgraph/base/model/__init__.py +0 -1
- package/dist/assets/python/http/langchain_langgraph/base/model/load.py +0 -123
- package/dist/assets/python/http/langchain_langgraph/base/pyproject.toml +0 -37
- package/dist/assets/python/http/openaiagents/base/README.md +0 -39
- package/dist/assets/python/http/openaiagents/base/gitignore.template +0 -41
- package/dist/assets/python/http/openaiagents/base/main.py +0 -169
- package/dist/assets/python/http/openaiagents/base/mcp_client/__init__.py +0 -1
- package/dist/assets/python/http/openaiagents/base/mcp_client/client.py +0 -74
- package/dist/assets/python/http/openaiagents/base/model/__init__.py +0 -1
- package/dist/assets/python/http/openaiagents/base/model/load.py +0 -37
- package/dist/assets/python/http/openaiagents/base/pyproject.toml +0 -21
- package/dist/assets/python/http/strands/base/main.py +0 -217
- package/dist/assets/python/http/strands/base/mcp_client/__init__.py +0 -1
- package/dist/assets/python/http/strands/base/mcp_client/client.py +0 -73
- package/dist/assets/python/http/strands/base/model/__init__.py +0 -1
- package/dist/assets/python/http/strands/base/pyproject.toml +0 -25
- package/dist/assets/python/http/strands/capabilities/memory/__init__.py +0 -1
- package/dist/assets/python/http/strands/capabilities/memory/session.py +0 -44
- package/dist/assets/python/mcp/standalone/base/README.md +0 -36
- package/dist/assets/python/mcp/standalone/base/gitignore.template +0 -41
- package/dist/assets/python/mcp/standalone/base/main.py +0 -25
- package/dist/cli/index.mjs +0 -1718
- package/dist/index.d.ts +0 -9
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/lib/constants.d.ts +0 -37
- package/dist/lib/constants.d.ts.map +0 -1
- package/dist/lib/constants.js +0 -69
- package/dist/lib/constants.js.map +0 -1
- 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 +0 -170
- package/dist/lib/errors/config.js.map +0 -1
- package/dist/lib/errors/index.d.ts +0 -2
- package/dist/lib/errors/index.d.ts.map +0 -1
- package/dist/lib/errors/index.js +0 -18
- package/dist/lib/errors/index.js.map +0 -1
- package/dist/lib/index.d.ts +0 -7
- package/dist/lib/index.d.ts.map +0 -1
- package/dist/lib/index.js +0 -44
- package/dist/lib/index.js.map +0 -1
- package/dist/lib/packaging/build-args.d.ts +0 -6
- package/dist/lib/packaging/build-args.d.ts.map +0 -1
- package/dist/lib/packaging/build-args.js +0 -18
- package/dist/lib/packaging/build-args.js.map +0 -1
- package/dist/lib/packaging/container.d.ts +0 -10
- package/dist/lib/packaging/container.d.ts.map +0 -1
- package/dist/lib/packaging/container.js +0 -78
- package/dist/lib/packaging/container.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/packaging/helpers.d.ts +0 -54
- package/dist/lib/packaging/helpers.d.ts.map +0 -1
- package/dist/lib/packaging/helpers.js +0 -463
- package/dist/lib/packaging/helpers.js.map +0 -1
- package/dist/lib/packaging/index.d.ts +0 -40
- package/dist/lib/packaging/index.d.ts.map +0 -1
- package/dist/lib/packaging/index.js +0 -98
- package/dist/lib/packaging/index.js.map +0 -1
- package/dist/lib/packaging/node.d.ts +0 -22
- package/dist/lib/packaging/node.d.ts.map +0 -1
- package/dist/lib/packaging/node.js +0 -109
- package/dist/lib/packaging/node.js.map +0 -1
- package/dist/lib/packaging/python.d.ts +0 -23
- package/dist/lib/packaging/python.d.ts.map +0 -1
- package/dist/lib/packaging/python.js +0 -165
- package/dist/lib/packaging/python.js.map +0 -1
- package/dist/lib/packaging/types/index.d.ts +0 -2
- package/dist/lib/packaging/types/index.d.ts.map +0 -1
- package/dist/lib/packaging/types/index.js +0 -3
- package/dist/lib/packaging/types/index.js.map +0 -1
- package/dist/lib/packaging/types/packaging.d.ts +0 -57
- package/dist/lib/packaging/types/packaging.d.ts.map +0 -1
- package/dist/lib/packaging/types/packaging.js +0 -3
- package/dist/lib/packaging/types/packaging.js.map +0 -1
- package/dist/lib/packaging/uv.d.ts +0 -7
- package/dist/lib/packaging/uv.d.ts.map +0 -1
- package/dist/lib/packaging/uv.js +0 -40
- package/dist/lib/packaging/uv.js.map +0 -1
- package/dist/lib/schemas/io/config-io.d.ts +0 -119
- package/dist/lib/schemas/io/config-io.d.ts.map +0 -1
- package/dist/lib/schemas/io/config-io.js +0 -323
- package/dist/lib/schemas/io/config-io.js.map +0 -1
- package/dist/lib/schemas/io/global-config.d.ts +0 -33
- package/dist/lib/schemas/io/global-config.d.ts.map +0 -1
- package/dist/lib/schemas/io/global-config.js +0 -89
- package/dist/lib/schemas/io/global-config.js.map +0 -1
- package/dist/lib/schemas/io/index.d.ts +0 -3
- package/dist/lib/schemas/io/index.d.ts.map +0 -1
- package/dist/lib/schemas/io/index.js +0 -18
- package/dist/lib/schemas/io/index.js.map +0 -1
- package/dist/lib/schemas/io/path-resolver.d.ts +0 -119
- package/dist/lib/schemas/io/path-resolver.d.ts.map +0 -1
- package/dist/lib/schemas/io/path-resolver.js +0 -207
- package/dist/lib/schemas/io/path-resolver.js.map +0 -1
- package/dist/lib/utils/aws-account.d.ts +0 -7
- package/dist/lib/utils/aws-account.d.ts.map +0 -1
- package/dist/lib/utils/aws-account.js +0 -24
- package/dist/lib/utils/aws-account.js.map +0 -1
- package/dist/lib/utils/credentials.d.ts +0 -86
- package/dist/lib/utils/credentials.d.ts.map +0 -1
- package/dist/lib/utils/credentials.js +0 -153
- package/dist/lib/utils/credentials.js.map +0 -1
- package/dist/lib/utils/env.d.ts +0 -22
- package/dist/lib/utils/env.d.ts.map +0 -1
- package/dist/lib/utils/env.js +0 -65
- package/dist/lib/utils/env.js.map +0 -1
- package/dist/lib/utils/index.d.ts +0 -9
- package/dist/lib/utils/index.d.ts.map +0 -1
- package/dist/lib/utils/index.js +0 -27
- package/dist/lib/utils/index.js.map +0 -1
- package/dist/lib/utils/json-rpc.d.ts +0 -3
- package/dist/lib/utils/json-rpc.d.ts.map +0 -1
- package/dist/lib/utils/json-rpc.js +0 -27
- package/dist/lib/utils/json-rpc.js.map +0 -1
- package/dist/lib/utils/platform.d.ts +0 -63
- package/dist/lib/utils/platform.d.ts.map +0 -1
- package/dist/lib/utils/platform.js +0 -88
- package/dist/lib/utils/platform.js.map +0 -1
- package/dist/lib/utils/subprocess.d.ts +0 -29
- package/dist/lib/utils/subprocess.d.ts.map +0 -1
- package/dist/lib/utils/subprocess.js +0 -116
- package/dist/lib/utils/subprocess.js.map +0 -1
- package/dist/lib/utils/time-parser.d.ts +0 -11
- package/dist/lib/utils/time-parser.d.ts.map +0 -1
- package/dist/lib/utils/time-parser.js +0 -47
- package/dist/lib/utils/time-parser.js.map +0 -1
- package/dist/lib/utils/zod.d.ts +0 -14
- package/dist/lib/utils/zod.d.ts.map +0 -1
- package/dist/lib/utils/zod.js +0 -32
- package/dist/lib/utils/zod.js.map +0 -1
- package/dist/schema/constants.d.ts +0 -119
- package/dist/schema/constants.d.ts.map +0 -1
- package/dist/schema/constants.js +0 -170
- package/dist/schema/constants.js.map +0 -1
- package/dist/schema/index.d.ts +0 -4
- package/dist/schema/index.d.ts.map +0 -1
- package/dist/schema/index.js +0 -21
- package/dist/schema/index.js.map +0 -1
- package/dist/schema/schemas/agent-env.d.ts +0 -186
- package/dist/schema/schemas/agent-env.d.ts.map +0 -1
- package/dist/schema/schemas/agent-env.js +0 -240
- package/dist/schema/schemas/agent-env.js.map +0 -1
- package/dist/schema/schemas/agentcore-project.d.ts +0 -838
- package/dist/schema/schemas/agentcore-project.d.ts.map +0 -1
- package/dist/schema/schemas/agentcore-project.js +0 -335
- package/dist/schema/schemas/agentcore-project.js.map +0 -1
- package/dist/schema/schemas/auth.d.ts +0 -140
- package/dist/schema/schemas/auth.d.ts.map +0 -1
- package/dist/schema/schemas/auth.js +0 -114
- package/dist/schema/schemas/auth.js.map +0 -1
- package/dist/schema/schemas/aws-targets.d.ts +0 -71
- package/dist/schema/schemas/aws-targets.d.ts.map +0 -1
- package/dist/schema/schemas/aws-targets.js +0 -57
- package/dist/schema/schemas/aws-targets.js.map +0 -1
- package/dist/schema/schemas/deployed-state.d.ts +0 -725
- package/dist/schema/schemas/deployed-state.d.ts.map +0 -1
- package/dist/schema/schemas/deployed-state.js +0 -218
- package/dist/schema/schemas/deployed-state.js.map +0 -1
- package/dist/schema/schemas/index.d.ts +0 -9
- package/dist/schema/schemas/index.d.ts.map +0 -1
- package/dist/schema/schemas/index.js +0 -26
- package/dist/schema/schemas/index.js.map +0 -1
- package/dist/schema/schemas/mcp-defs.d.ts +0 -52
- package/dist/schema/schemas/mcp-defs.d.ts.map +0 -1
- package/dist/schema/schemas/mcp-defs.js +0 -50
- package/dist/schema/schemas/mcp-defs.js.map +0 -1
- package/dist/schema/schemas/mcp.d.ts +0 -820
- package/dist/schema/schemas/mcp.d.ts.map +0 -1
- package/dist/schema/schemas/mcp.js +0 -564
- package/dist/schema/schemas/mcp.js.map +0 -1
- package/dist/schema/schemas/primitives/ab-test.d.ts +0 -141
- package/dist/schema/schemas/primitives/ab-test.d.ts.map +0 -1
- package/dist/schema/schemas/primitives/ab-test.js +0 -97
- package/dist/schema/schemas/primitives/ab-test.js.map +0 -1
- package/dist/schema/schemas/primitives/config-bundle.d.ts +0 -31
- package/dist/schema/schemas/primitives/config-bundle.d.ts.map +0 -1
- package/dist/schema/schemas/primitives/config-bundle.js +0 -38
- package/dist/schema/schemas/primitives/config-bundle.js.map +0 -1
- package/dist/schema/schemas/primitives/evaluator.d.ts +0 -102
- package/dist/schema/schemas/primitives/evaluator.d.ts.map +0 -1
- package/dist/schema/schemas/primitives/evaluator.js +0 -84
- package/dist/schema/schemas/primitives/evaluator.js.map +0 -1
- package/dist/schema/schemas/primitives/harness.d.ts +0 -363
- package/dist/schema/schemas/primitives/harness.d.ts.map +0 -1
- package/dist/schema/schemas/primitives/harness.js +0 -261
- package/dist/schema/schemas/primitives/harness.js.map +0 -1
- package/dist/schema/schemas/primitives/http-gateway.d.ts +0 -21
- package/dist/schema/schemas/primitives/http-gateway.d.ts.map +0 -1
- package/dist/schema/schemas/primitives/http-gateway.js +0 -34
- package/dist/schema/schemas/primitives/http-gateway.js.map +0 -1
- package/dist/schema/schemas/primitives/index.d.ts +0 -15
- package/dist/schema/schemas/primitives/index.d.ts.map +0 -1
- package/dist/schema/schemas/primitives/index.js +0 -61
- package/dist/schema/schemas/primitives/index.js.map +0 -1
- package/dist/schema/schemas/primitives/memory.d.ts +0 -51
- package/dist/schema/schemas/primitives/memory.d.ts.map +0 -1
- package/dist/schema/schemas/primitives/memory.js +0 -73
- package/dist/schema/schemas/primitives/memory.js.map +0 -1
- package/dist/schema/schemas/primitives/online-eval-config.d.ts +0 -14
- package/dist/schema/schemas/primitives/online-eval-config.d.ts.map +0 -1
- package/dist/schema/schemas/primitives/online-eval-config.js +0 -30
- package/dist/schema/schemas/primitives/online-eval-config.js.map +0 -1
- package/dist/schema/schemas/primitives/policy.d.ts +0 -49
- package/dist/schema/schemas/primitives/policy.d.ts.map +0 -1
- package/dist/schema/schemas/primitives/policy.js +0 -62
- package/dist/schema/schemas/primitives/policy.js.map +0 -1
- package/dist/schema/schemas/primitives/tags.d.ts +0 -6
- package/dist/schema/schemas/primitives/tags.d.ts.map +0 -1
- package/dist/schema/schemas/primitives/tags.js +0 -27
- package/dist/schema/schemas/primitives/tags.js.map +0 -1
- package/dist/schema/schemas/zod-util.d.ts +0 -10
- package/dist/schema/schemas/zod-util.d.ts.map +0 -1
- package/dist/schema/schemas/zod-util.js +0 -23
- package/dist/schema/schemas/zod-util.js.map +0 -1
- package/dist/schema/types/index.d.ts +0 -2
- package/dist/schema/types/index.d.ts.map +0 -1
- package/dist/schema/types/index.js +0 -18
- package/dist/schema/types/index.js.map +0 -1
- package/dist/schema/types/path.d.ts +0 -27
- package/dist/schema/types/path.d.ts.map +0 -1
- package/dist/schema/types/path.js +0 -13
- package/dist/schema/types/path.js.map +0 -1
- package/scripts/bump-version.ts +0 -393
- package/scripts/bundle.mjs +0 -219
- package/scripts/check-old-cli.lib.mjs +0 -102
- package/scripts/check-old-cli.mjs +0 -10
- package/scripts/copy-assets.mjs +0 -64
- package/scripts/generate-schema.mjs +0 -40
- package/scripts/run-e2e-local.sh +0 -112
- package/scripts/start-tui-harness.sh +0 -90
- /package/dist/{agent-inspector/favicon.svg → assets/agent-inspector/favicon.svg.asset} +0 -0
- /package/dist/{agent-inspector/index.html → assets/agent-inspector/index.html.asset} +0 -0
- /package/dist/assets/{python/http/strands/base → templates/a2a-python-strands}/gitignore.template +0 -0
- /package/dist/assets/{typescript/.gitkeep → templates/a2a-python-strands/memory/__init__.py} +0 -0
- /package/dist/assets/{python/a2a/googleadk/base → templates/a2a-python-strands}/model/__init__.py +0 -0
- /package/dist/assets/{python/a2a/langchain_langgraph/base → templates/agent-python-langchain}/model/__init__.py +0 -0
- /package/dist/assets/{container/python → templates/agent-python-strands}/dockerignore.template +0 -0
- /package/dist/assets/{python/a2a/strands/base → templates/agent-python-strands}/model/__init__.py +0 -0
- /package/dist/assets/{python/a2a/strands/capabilities/memory → templates/agui-python-strands/model}/__init__.py +0 -0
- /package/dist/assets/{python/agui/googleadk/base/model → templates/export-harness-python/mcp_client}/__init__.py +0 -0
- /package/dist/assets/{python/agui/langchain_langgraph/base → templates/export-harness-python}/model/__init__.py +0 -0
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
from langchain.agents import create_agent
|
|
2
|
+
from langchain.tools import tool
|
|
3
|
+
from langgraph.checkpoint.memory import InMemorySaver
|
|
4
|
+
from bedrock_agentcore.runtime import BedrockAgentCoreApp
|
|
5
|
+
from model.load import load_model
|
|
6
|
+
|
|
7
|
+
app = BedrockAgentCoreApp()
|
|
8
|
+
|
|
9
|
+
SYSTEM_PROMPT = "You are a helpful assistant. Use tools when appropriate."
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
@tool
|
|
13
|
+
def add_numbers(a: int, b: int) -> int:
|
|
14
|
+
"""Return the sum of two numbers"""
|
|
15
|
+
return a + b
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
tools = [add_numbers]
|
|
19
|
+
|
|
20
|
+
agent = create_agent(
|
|
21
|
+
model=load_model(),
|
|
22
|
+
tools=tools,
|
|
23
|
+
system_prompt=SYSTEM_PROMPT,
|
|
24
|
+
checkpointer=InMemorySaver(),
|
|
25
|
+
)
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
@app.entrypoint
|
|
29
|
+
async def invoke(payload, context):
|
|
30
|
+
prompt = payload.get("prompt") if isinstance(payload, dict) else None
|
|
31
|
+
if not isinstance(prompt, str) or not prompt:
|
|
32
|
+
yield {"error": "payload must be a JSON object with a non-empty string 'prompt'"}
|
|
33
|
+
return
|
|
34
|
+
|
|
35
|
+
session_id = context.session_id or "default-session"
|
|
36
|
+
config = {"configurable": {"thread_id": session_id}}
|
|
37
|
+
|
|
38
|
+
async with await agent.astream_events(
|
|
39
|
+
{"messages": [{"role": "user", "content": prompt}]},
|
|
40
|
+
config,
|
|
41
|
+
version="v3",
|
|
42
|
+
) as stream:
|
|
43
|
+
async for message in stream.messages:
|
|
44
|
+
blocks = (await message.output).content_blocks
|
|
45
|
+
if blocks:
|
|
46
|
+
yield {"node": message.node, "content": blocks}
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
if __name__ == "__main__":
|
|
50
|
+
app.run()
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
from langchain.chat_models import init_chat_model
|
|
2
|
+
from langchain_core.language_models import BaseChatModel
|
|
3
|
+
|
|
4
|
+
MODEL_ID = "global.anthropic.claude-sonnet-4-5-20250929-v1:0"
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
def load_model() -> BaseChatModel:
|
|
8
|
+
"""Get a Bedrock chat model using IAM credentials."""
|
|
9
|
+
return init_chat_model(MODEL_ID, model_provider="bedrock_converse")
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["hatchling ~= 1.27.0"]
|
|
3
|
+
build-backend = "hatchling.build"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "{{ name }}"
|
|
7
|
+
version = "0.1.0"
|
|
8
|
+
description = "AgentCore Runtime Application using LangChain"
|
|
9
|
+
readme = "README.md"
|
|
10
|
+
requires-python = ">=3.10"
|
|
11
|
+
dependencies = [
|
|
12
|
+
"aws-opentelemetry-distro ~= 0.19.0",
|
|
13
|
+
"bedrock-agentcore ~= 1.22.0",
|
|
14
|
+
"langchain ~= 1.4.0",
|
|
15
|
+
"langchain-aws ~= 1.7.5",
|
|
16
|
+
"langgraph ~= 1.2.11",
|
|
17
|
+
"opentelemetry-instrumentation-langchain ~= 0.62.3",
|
|
18
|
+
]
|
|
19
|
+
|
|
20
|
+
[tool.hatch.build.targets.wheel]
|
|
21
|
+
packages = ["."]
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# agent-python-minimal
|
|
2
|
+
|
|
3
|
+
A minimal AgentCore Runtime HTTP agent with no agent framework. Its
|
|
4
|
+
`@app.entrypoint` returns a fixed `Hello, world!` message for every
|
|
5
|
+
invocation — a starting point you own and grow into a real agent.
|
|
6
|
+
|
|
7
|
+
## What's here
|
|
8
|
+
|
|
9
|
+
- `main.py` — the agent. A `BedrockAgentCoreApp` wraps the entrypoint that
|
|
10
|
+
receives each invocation payload and returns the response.
|
|
11
|
+
- `pyproject.toml` — Python dependencies, managed with
|
|
12
|
+
[uv](https://docs.astral.sh/uv/). `agentcore project create` has already run
|
|
13
|
+
`uv sync` for you (unless you passed `--skip-install`), so `.venv/` is ready.
|
|
14
|
+
|
|
15
|
+
## Develop
|
|
16
|
+
|
|
17
|
+
Run the agent locally from the project root:
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
agentcore project dev
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Environment variables for local development go in `agentcore/.env.local`
|
|
24
|
+
(gitignored).
|
|
25
|
+
|
|
26
|
+
## Deploy
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
agentcore project deploy
|
|
30
|
+
agentcore project invoke runtime --payload '{"prompt":"Hello!"}'
|
|
31
|
+
```
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
from bedrock_agentcore.runtime import BedrockAgentCoreApp
|
|
2
|
+
|
|
3
|
+
app = BedrockAgentCoreApp()
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
@app.entrypoint
|
|
7
|
+
def invoke(payload, context):
|
|
8
|
+
"""Add agent logic here"""
|
|
9
|
+
return {"message": "Hello, world!"}
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
if __name__ == "__main__":
|
|
13
|
+
app.run()
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["hatchling"]
|
|
3
|
+
build-backend = "hatchling.build"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "agent-python-minimal"
|
|
7
|
+
version = "0.1.0"
|
|
8
|
+
description = "Minimal AgentCore Runtime HTTP agent"
|
|
9
|
+
readme = "README.md"
|
|
10
|
+
requires-python = ">=3.10"
|
|
11
|
+
dependencies = [
|
|
12
|
+
"aws-opentelemetry-distro ~= 0.18.0",
|
|
13
|
+
"bedrock-agentcore ~= 1.9.1",
|
|
14
|
+
"botocore[crt] ~= 1.43.0",
|
|
15
|
+
]
|
|
16
|
+
|
|
17
|
+
[tool.hatch.build.targets.wheel]
|
|
18
|
+
packages = ["."]
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
This is a project generated by the AgentCore CLI!
|
|
2
|
+
|
|
3
|
+
# Layout
|
|
4
|
+
|
|
5
|
+
The generated application code lives at the agent root directory. At the root, there is a `.gitignore` file, an
|
|
6
|
+
`agentcore/` folder which represents the configurations and state associated with this project. Other `agentcore`
|
|
7
|
+
commands like `deploy`, `dev`, and `invoke` rely on the configuration stored here.
|
|
8
|
+
|
|
9
|
+
## Agent Root
|
|
10
|
+
|
|
11
|
+
The main entrypoint to your app is defined in `main.py`. Using the AgentCore SDK `@app.entrypoint` decorator, this
|
|
12
|
+
file defines a Starlette ASGI app with the Strands Agent SDK running within.
|
|
13
|
+
|
|
14
|
+
`model/load.py` instantiates the chosen model provider.
|
|
15
|
+
|
|
16
|
+
## Input Validation
|
|
17
|
+
|
|
18
|
+
Validate invocation input before forwarding it to Strands. Keep plain prompts typed as strings. If the app accepts a
|
|
19
|
+
caller-supplied message history, retain `_strip_trailing_tool_use()` in `parse.py`, which normalizes the history tail
|
|
20
|
+
before invoking the agent.
|
|
21
|
+
|
|
22
|
+
## Payload
|
|
23
|
+
|
|
24
|
+
The Runtime accepts a JSON object. `parse_payload()` reads:
|
|
25
|
+
|
|
26
|
+
- `prompt` (string) — a single user message. Used when `messages` is absent; defaults to `""`.
|
|
27
|
+
- `messages` (array) — a full conversation history (`[{"role": ..., "content": [...]}]`). Takes precedence over `prompt`; trailing `toolUse` blocks are stripped before the agent runs.
|
|
28
|
+
- `actorId` (string, optional) — identifies the end user for Memory scoping (e.g. `/users/{actorId}/facts`). Defaults to `"default"`.
|
|
29
|
+
|
|
30
|
+
Provide either `prompt` or `messages`. The `session_id` is not in the body — it comes from the `X-Amzn-Bedrock-AgentCore-Runtime-Session-Id` header (`context.session_id`); reuse it to continue a conversation.
|
|
31
|
+
|
|
32
|
+
```json
|
|
33
|
+
{ "prompt": "What's the weather?", "actorId": "user-123" }
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## Environment Variables
|
|
37
|
+
|
|
38
|
+
| Variable | Required | Description |
|
|
39
|
+
| --- | --- | --- |
|
|
40
|
+
{{#if identityProviders.[0]}}| `{{identityProviders.[0].envVarName}}` | Yes | {{modelProvider}} API key (local) or Identity provider name (deployed) |
|
|
41
|
+
{{/if}}| `LOCAL_DEV` | No | Set to `1` to use `.env.local` instead of AgentCore Identity |
|
|
42
|
+
|
|
43
|
+
# Developing locally
|
|
44
|
+
|
|
45
|
+
If installation was successful, a virtual environment is already created with dependencies installed.
|
|
46
|
+
|
|
47
|
+
Activate the environment with `source .venv/bin/activate` on macOS/Linux, `.venv\Scripts\activate.bat` in Windows
|
|
48
|
+
Command Prompt, or `.\.venv\Scripts\activate.ps1` in Windows PowerShell.
|
|
49
|
+
|
|
50
|
+
`agentcore project dev` will start a local server on 0.0.0.0:8080.
|
|
51
|
+
|
|
52
|
+
# Deployment
|
|
53
|
+
|
|
54
|
+
After providing credentials, `agentcore project deploy` will deploy your project into Amazon Bedrock AgentCore.
|
|
55
|
+
|
|
56
|
+
Invoke the deployed Runtime with its native payload:
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
agentcore project invoke runtime --payload '{"prompt":"Hello!"}'
|
|
60
|
+
```
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
from functools import lru_cache
|
|
2
|
+
|
|
3
|
+
from strands import Agent, tool
|
|
4
|
+
from strands.agent.conversation_manager.null_conversation_manager import NullConversationManager
|
|
5
|
+
from bedrock_agentcore.runtime import BedrockAgentCoreApp
|
|
6
|
+
from model.load import load_model
|
|
7
|
+
from parse import parse_payload
|
|
8
|
+
from memory.session import get_memory_session_manager
|
|
9
|
+
|
|
10
|
+
DEFAULT_SYSTEM_PROMPT = "You are a helpful assistant. Use tools when appropriate."
|
|
11
|
+
|
|
12
|
+
# Define a collection of tools used by the model
|
|
13
|
+
tools = []
|
|
14
|
+
|
|
15
|
+
# Define a simple function tool
|
|
16
|
+
@tool
|
|
17
|
+
def add_numbers(a: int, b: int) -> int:
|
|
18
|
+
"""Return the sum of two numbers"""
|
|
19
|
+
return a + b
|
|
20
|
+
|
|
21
|
+
tools.append(add_numbers)
|
|
22
|
+
|
|
23
|
+
def _make_conversation_manager():
|
|
24
|
+
return NullConversationManager()
|
|
25
|
+
|
|
26
|
+
@lru_cache(maxsize=128)
|
|
27
|
+
def _get_agent(session_id: str, actor_id: str) -> Agent:
|
|
28
|
+
"""Given a session_id and actor_id, return or construct the corresponding Strands agent.
|
|
29
|
+
Note: caching helps avoid repeated identity fetches on non-bedrock model loads
|
|
30
|
+
and supports in-memory session management for local dev."""
|
|
31
|
+
return Agent(
|
|
32
|
+
model=load_model(),
|
|
33
|
+
session_manager=get_memory_session_manager(session_id, actor_id),
|
|
34
|
+
conversation_manager=_make_conversation_manager(),
|
|
35
|
+
system_prompt=DEFAULT_SYSTEM_PROMPT,
|
|
36
|
+
tools=tools,
|
|
37
|
+
)
|
|
38
|
+
|
|
39
|
+
def create_app():
|
|
40
|
+
app = BedrockAgentCoreApp()
|
|
41
|
+
log = app.logger
|
|
42
|
+
|
|
43
|
+
@app.entrypoint
|
|
44
|
+
async def invoke(payload, context):
|
|
45
|
+
log.info("Invoking Agent.....")
|
|
46
|
+
|
|
47
|
+
session_id = getattr(context, "session_id", None) or "default-session"
|
|
48
|
+
prompt, actor_id = parse_payload(payload)
|
|
49
|
+
|
|
50
|
+
log.info(f"Invoking with session_id={session_id} and actor_id={actor_id}")
|
|
51
|
+
agent = _get_agent(session_id, actor_id)
|
|
52
|
+
|
|
53
|
+
async for event in agent.stream_async(prompt):
|
|
54
|
+
if not isinstance(event, dict) or "event" not in event:
|
|
55
|
+
continue
|
|
56
|
+
cbs = event["event"].get("contentBlockStart")
|
|
57
|
+
if cbs is not None and not cbs.get("start"):
|
|
58
|
+
continue
|
|
59
|
+
yield event
|
|
60
|
+
|
|
61
|
+
return app
|
|
62
|
+
|
|
63
|
+
app = create_app()
|
|
64
|
+
if __name__ == "__main__":
|
|
65
|
+
app.run()
|
|
File without changes
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import os
|
|
2
|
+
from typing import Optional
|
|
3
|
+
|
|
4
|
+
from bedrock_agentcore.memory.integrations.strands.config import AgentCoreMemoryConfig, RetrievalConfig
|
|
5
|
+
from bedrock_agentcore.memory.integrations.strands.session_manager import AgentCoreMemorySessionManager
|
|
6
|
+
|
|
7
|
+
MEMORY_ID = os.getenv("{{memoryEnvVarName}}")
|
|
8
|
+
REGION = os.getenv("AWS_REGION")
|
|
9
|
+
|
|
10
|
+
def get_memory_session_manager(
|
|
11
|
+
session_id: str, actor_id: str,
|
|
12
|
+
) -> Optional[AgentCoreMemorySessionManager]:
|
|
13
|
+
if not MEMORY_ID:
|
|
14
|
+
return None
|
|
15
|
+
|
|
16
|
+
retrieval_config = {
|
|
17
|
+
f"/users/{actor_id}/facts": RetrievalConfig(top_k=3, relevance_score=0.5),
|
|
18
|
+
f"/users/{actor_id}/preferences": RetrievalConfig(top_k=3, relevance_score=0.5),
|
|
19
|
+
f"/episodes/{actor_id}/{session_id}": RetrievalConfig(top_k=5, relevance_score=0.5),
|
|
20
|
+
f"/summaries/{actor_id}": RetrievalConfig(top_k=3, relevance_score=0.5),
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
return AgentCoreMemorySessionManager(
|
|
24
|
+
AgentCoreMemoryConfig(
|
|
25
|
+
memory_id=MEMORY_ID,
|
|
26
|
+
session_id=session_id,
|
|
27
|
+
actor_id=actor_id,
|
|
28
|
+
retrieval_config=retrieval_config,
|
|
29
|
+
),
|
|
30
|
+
REGION,
|
|
31
|
+
)
|
package/dist/assets/{python/http/strands/base → templates/agent-python-strands}/model/load.py
RENAMED
|
@@ -12,7 +12,7 @@ import os
|
|
|
12
12
|
from strands.models.anthropic import AnthropicModel
|
|
13
13
|
from bedrock_agentcore.identity.auth import requires_api_key
|
|
14
14
|
|
|
15
|
-
IDENTITY_PROVIDER_NAME = "{{identityProviders.[0].name}}"
|
|
15
|
+
IDENTITY_PROVIDER_NAME = os.environ.get("{{identityProviders.[0].envVarName}}_NAME", "{{identityProviders.[0].name}}")
|
|
16
16
|
IDENTITY_ENV_VAR = "{{identityProviders.[0].envVarName}}"
|
|
17
17
|
|
|
18
18
|
|
|
@@ -51,7 +51,7 @@ import os
|
|
|
51
51
|
from strands.models.openai import OpenAIModel
|
|
52
52
|
from bedrock_agentcore.identity.auth import requires_api_key
|
|
53
53
|
|
|
54
|
-
IDENTITY_PROVIDER_NAME = "{{identityProviders.[0].name}}"
|
|
54
|
+
IDENTITY_PROVIDER_NAME = os.environ.get("{{identityProviders.[0].envVarName}}_NAME", "{{identityProviders.[0].name}}")
|
|
55
55
|
IDENTITY_ENV_VAR = "{{identityProviders.[0].envVarName}}"
|
|
56
56
|
|
|
57
57
|
|
|
@@ -89,7 +89,7 @@ import os
|
|
|
89
89
|
from strands.models.gemini import GeminiModel
|
|
90
90
|
from bedrock_agentcore.identity.auth import requires_api_key
|
|
91
91
|
|
|
92
|
-
IDENTITY_PROVIDER_NAME = "{{identityProviders.[0].name}}"
|
|
92
|
+
IDENTITY_PROVIDER_NAME = os.environ.get("{{identityProviders.[0].envVarName}}_NAME", "{{identityProviders.[0].name}}")
|
|
93
93
|
IDENTITY_ENV_VAR = "{{identityProviders.[0].envVarName}}"
|
|
94
94
|
|
|
95
95
|
|
|
@@ -121,3 +121,49 @@ def load_model() -> GeminiModel:
|
|
|
121
121
|
model_id="gemini-2.5-flash",
|
|
122
122
|
)
|
|
123
123
|
{{/if}}
|
|
124
|
+
{{#if (eq modelProvider "LiteLLM")}}
|
|
125
|
+
{{#if identityProviders.[0].name}}
|
|
126
|
+
import os
|
|
127
|
+
|
|
128
|
+
{{/if}}
|
|
129
|
+
from strands.models.litellm import LiteLLMModel
|
|
130
|
+
{{#if identityProviders.[0].name}}
|
|
131
|
+
from bedrock_agentcore.identity.auth import requires_api_key
|
|
132
|
+
|
|
133
|
+
IDENTITY_PROVIDER_NAME = os.environ.get("{{identityProviders.[0].envVarName}}_NAME", "{{identityProviders.[0].name}}")
|
|
134
|
+
IDENTITY_ENV_VAR = "{{identityProviders.[0].envVarName}}"
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
@requires_api_key(provider_name=IDENTITY_PROVIDER_NAME)
|
|
138
|
+
def _agentcore_identity_api_key_provider(api_key: str) -> str:
|
|
139
|
+
"""Fetch API key from AgentCore Identity."""
|
|
140
|
+
return api_key
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
def _get_api_key() -> str:
|
|
144
|
+
"""
|
|
145
|
+
Uses AgentCore Identity for API key management in deployed environments.
|
|
146
|
+
For local development, run via 'agentcore dev' which loads agentcore/.env.
|
|
147
|
+
"""
|
|
148
|
+
if os.getenv("LOCAL_DEV") == "1":
|
|
149
|
+
api_key = os.getenv(IDENTITY_ENV_VAR)
|
|
150
|
+
if not api_key:
|
|
151
|
+
raise RuntimeError(
|
|
152
|
+
f"{IDENTITY_ENV_VAR} not found. Add {IDENTITY_ENV_VAR}=your-key to .env.local"
|
|
153
|
+
)
|
|
154
|
+
return api_key
|
|
155
|
+
return _agentcore_identity_api_key_provider()
|
|
156
|
+
{{/if}}
|
|
157
|
+
|
|
158
|
+
|
|
159
|
+
def load_model() -> LiteLLMModel:
|
|
160
|
+
"""Get a LiteLLM model client (proxies to the provider encoded in model_id)."""
|
|
161
|
+
client_args = {}
|
|
162
|
+
{{#if identityProviders.[0].name}}
|
|
163
|
+
client_args["api_key"] = _get_api_key()
|
|
164
|
+
{{/if}}
|
|
165
|
+
return LiteLLMModel(
|
|
166
|
+
client_args=client_args,
|
|
167
|
+
model_id="bedrock/us.anthropic.claude-sonnet-4-5-20250514-v1:0",
|
|
168
|
+
)
|
|
169
|
+
{{/if}}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
from typing import Any
|
|
2
|
+
|
|
3
|
+
def _strip_trailing_tool_use(messages: Any) -> list[dict]:
|
|
4
|
+
"""Strip toolUse blocks from the tail until the last message has none."""
|
|
5
|
+
if not isinstance(messages, list):
|
|
6
|
+
raise ValueError("messages must be a list")
|
|
7
|
+
|
|
8
|
+
messages = list(messages)
|
|
9
|
+
while messages:
|
|
10
|
+
last = messages[-1]
|
|
11
|
+
if not isinstance(last, dict):
|
|
12
|
+
raise ValueError("each message must be an object")
|
|
13
|
+
original_content = last.get("content", [])
|
|
14
|
+
if not isinstance(original_content, list) or not all(isinstance(block, dict) for block in original_content):
|
|
15
|
+
raise ValueError("each message content value must be a list of content blocks")
|
|
16
|
+
|
|
17
|
+
content = [block for block in original_content if "toolUse" not in block]
|
|
18
|
+
if len(content) == len(original_content):
|
|
19
|
+
break
|
|
20
|
+
if content:
|
|
21
|
+
messages[-1] = {**last, "content": content}
|
|
22
|
+
break
|
|
23
|
+
messages.pop()
|
|
24
|
+
|
|
25
|
+
return messages
|
|
26
|
+
|
|
27
|
+
def parse_payload(payload: dict):
|
|
28
|
+
"""Accept a caller-supplied message history or a plain prompt string."""
|
|
29
|
+
if not isinstance(payload, dict):
|
|
30
|
+
raise ValueError("payload must be a JSON object")
|
|
31
|
+
actor_id = payload.get("actorId", "default")
|
|
32
|
+
if not isinstance(actor_id, str):
|
|
33
|
+
raise ValueError("actorId must be a string")
|
|
34
|
+
if not actor_id:
|
|
35
|
+
actor_id = "default"
|
|
36
|
+
if "messages" in payload:
|
|
37
|
+
return _strip_trailing_tool_use(payload["messages"]), actor_id
|
|
38
|
+
prompt = payload.get("prompt", "")
|
|
39
|
+
if not isinstance(prompt, str):
|
|
40
|
+
raise ValueError("prompt must be a string")
|
|
41
|
+
return prompt, actor_id
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["hatchling ~= 1.27.0"]
|
|
3
|
+
build-backend = "hatchling.build"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "{{ name }}"
|
|
7
|
+
version = "0.1.0"
|
|
8
|
+
description = "AgentCore Runtime Application using Strands SDK"
|
|
9
|
+
readme = "README.md"
|
|
10
|
+
requires-python = ">=3.10"
|
|
11
|
+
dependencies = [
|
|
12
|
+
"aws-opentelemetry-distro ~= 0.18.0",
|
|
13
|
+
"bedrock-agentcore ~= 1.9.1",
|
|
14
|
+
"botocore[crt] ~= 1.43.0",
|
|
15
|
+
{{#if (eq modelProvider "Anthropic")}}"strands-agents[anthropic] ~= 1.15.0",
|
|
16
|
+
{{else}}{{#if (eq modelProvider "OpenAI")}}"strands-agents[openai] ~= 1.15.0",
|
|
17
|
+
{{else}}{{#if (eq modelProvider "Gemini")}}"strands-agents[gemini] ~= 1.15.0",
|
|
18
|
+
{{else}}{{#if (eq modelProvider "LiteLLM")}}"strands-agents[litellm] ~= 1.15.0",
|
|
19
|
+
{{else}}"strands-agents ~= 1.15.0",
|
|
20
|
+
{{/if}}{{/if}}{{/if}}{{/if}}
|
|
21
|
+
]
|
|
22
|
+
|
|
23
|
+
[tool.hatch.build.targets.wheel]
|
|
24
|
+
packages = ["."]
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
This is a project generated by the AgentCore CLI!
|
|
2
|
+
|
|
3
|
+
# Layout
|
|
4
|
+
|
|
5
|
+
The generated application code lives at the agent root directory. At the root, there is a `.gitignore` file, an
|
|
6
|
+
`agentcore/` folder which represents the configurations and state associated with this project. Other `agentcore`
|
|
7
|
+
commands like `deploy`, `dev`, and `invoke` rely on the configuration stored here.
|
|
8
|
+
|
|
9
|
+
## Agent Root
|
|
10
|
+
|
|
11
|
+
The main entrypoint to your app is defined in `main.ts`. Using the AgentCore SDK `BedrockAgentCoreApp`, this file
|
|
12
|
+
defines an HTTP server that streams tokens from your chosen Agent framework SDK.
|
|
13
|
+
|
|
14
|
+
`model/load.ts` instantiates your chosen model provider.
|
|
15
|
+
|
|
16
|
+
## Input Validation
|
|
17
|
+
|
|
18
|
+
The generated Zod request schema keeps the prompt and actor ID typed as strings before forwarding them to Strands.
|
|
19
|
+
Retain this validation when extending the request shape, and pass only prompt text to the agent.
|
|
20
|
+
|
|
21
|
+
## Payload
|
|
22
|
+
|
|
23
|
+
The Runtime accepts a JSON object with:
|
|
24
|
+
|
|
25
|
+
- `prompt` (string) — a single user message; defaults to `""`.
|
|
26
|
+
- `actorId` (string, optional) — identifies the end user for Memory scoping (for example,
|
|
27
|
+
`/users/{actorId}/facts`); defaults to `"default"`.
|
|
28
|
+
|
|
29
|
+
The `sessionId` is not in the body. It comes from the
|
|
30
|
+
`X-Amzn-Bedrock-AgentCore-Runtime-Session-Id` header (`context.sessionId`); reuse it to continue a conversation.
|
|
31
|
+
|
|
32
|
+
```json
|
|
33
|
+
{ "prompt": "What's the weather?", "actorId": "user-123" }
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
# Developing locally
|
|
37
|
+
|
|
38
|
+
If installation was successful, `node_modules/` is already populated with dependencies.
|
|
39
|
+
|
|
40
|
+
`agentcore project dev` will start a local server using `tsx watch main.ts` for hot reload on 0.0.0.0:8080.
|
|
41
|
+
|
|
42
|
+
# Deployment
|
|
43
|
+
|
|
44
|
+
After providing credentials, `agentcore project deploy` will deploy your project into Amazon Bedrock AgentCore.
|
|
45
|
+
|
|
46
|
+
Invoke the deployed Runtime with its native payload:
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
agentcore project invoke runtime --payload '{"prompt":"Hello!","actorId":"user-123"}'
|
|
50
|
+
```
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { BedrockAgentCoreApp } from 'bedrock-agentcore/runtime';
|
|
2
|
+
import { Agent, tool, type ToolList } from '@strands-agents/sdk';
|
|
3
|
+
import { z } from 'zod';
|
|
4
|
+
import { loadModel } from './model/load.js';
|
|
5
|
+
import { getOrCreateMemoryManager } from './memory/memory.js';
|
|
6
|
+
|
|
7
|
+
// Define a collection of tools used by the model
|
|
8
|
+
const tools: ToolList = [];
|
|
9
|
+
|
|
10
|
+
// Define a simple function tool — the Zod schema gives us type inference and runtime validation for free
|
|
11
|
+
const addNumbers = tool({
|
|
12
|
+
name: 'add_numbers',
|
|
13
|
+
description: 'Return the sum of two numbers',
|
|
14
|
+
inputSchema: z.object({
|
|
15
|
+
a: z.number(),
|
|
16
|
+
b: z.number(),
|
|
17
|
+
}),
|
|
18
|
+
callback: async ({ a, b }) => a + b,
|
|
19
|
+
});
|
|
20
|
+
tools.push(addNumbers);
|
|
21
|
+
|
|
22
|
+
const SYSTEM_PROMPT = `
|
|
23
|
+
You are a helpful assistant. Use tools when appropriate.
|
|
24
|
+
`;
|
|
25
|
+
|
|
26
|
+
const requestSchema = z.object({
|
|
27
|
+
prompt: z.string().default(''),
|
|
28
|
+
actorId: z.string().default('default').transform((actorId) => actorId || 'default'),
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
const agentCache = new Map<string, Agent>();
|
|
32
|
+
|
|
33
|
+
async function getOrCreateAgent(sessionId: string, actorId: string): Promise<Agent> {
|
|
34
|
+
const key = `${actorId}:${sessionId}`;
|
|
35
|
+
let agent = agentCache.get(key);
|
|
36
|
+
if (agent) return agent;
|
|
37
|
+
|
|
38
|
+
const model = await loadModel();
|
|
39
|
+
agent = new Agent({
|
|
40
|
+
model,
|
|
41
|
+
systemPrompt: SYSTEM_PROMPT,
|
|
42
|
+
tools,
|
|
43
|
+
memoryManager: getOrCreateMemoryManager(sessionId, actorId) ?? undefined,
|
|
44
|
+
});
|
|
45
|
+
agentCache.set(key, agent);
|
|
46
|
+
return agent;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
const app = new BedrockAgentCoreApp({
|
|
50
|
+
invocationHandler: {
|
|
51
|
+
requestSchema,
|
|
52
|
+
async *process(payload, context) {
|
|
53
|
+
const sessionId = context?.sessionId ?? 'default-session';
|
|
54
|
+
const actorId = payload.actorId;
|
|
55
|
+
const agent = await getOrCreateAgent(sessionId, actorId);
|
|
56
|
+
|
|
57
|
+
try {
|
|
58
|
+
for await (const event of agent.stream(payload.prompt)) {
|
|
59
|
+
if (
|
|
60
|
+
event.type === 'modelStreamUpdateEvent' &&
|
|
61
|
+
event.event?.type === 'modelContentBlockDeltaEvent' &&
|
|
62
|
+
event.event.delta?.type === 'textDelta'
|
|
63
|
+
) {
|
|
64
|
+
yield { data: event.event.delta.text };
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
} finally {
|
|
68
|
+
// Drain in-flight createEvent calls before the runtime can reclaim
|
|
69
|
+
// the session microVM. flush() is the durability mechanism — without
|
|
70
|
+
// it, an idle reclamation can lose the tail of the conversation.
|
|
71
|
+
await agent.memoryManager?.flush();
|
|
72
|
+
}
|
|
73
|
+
},
|
|
74
|
+
},
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
app.run({ port: parseInt(process.env.PORT ?? '8080') });
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { MemoryManager } from '@strands-agents/sdk';
|
|
2
|
+
import { createAgentCoreMemoryStores } from 'bedrock-agentcore/experimental/memory/strands';
|
|
3
|
+
|
|
4
|
+
const MEMORY_ID = process.env.{{memoryEnvVarName}};
|
|
5
|
+
|
|
6
|
+
const memoryManagerCache = new Map<string, MemoryManager>();
|
|
7
|
+
|
|
8
|
+
export function getOrCreateMemoryManager(sessionId: string, actorId: string): MemoryManager | null {
|
|
9
|
+
if (!MEMORY_ID) return null;
|
|
10
|
+
|
|
11
|
+
const key = `${actorId}:${sessionId}`;
|
|
12
|
+
let manager = memoryManagerCache.get(key);
|
|
13
|
+
if (manager) return manager;
|
|
14
|
+
|
|
15
|
+
const stores = createAgentCoreMemoryStores({
|
|
16
|
+
memoryId: MEMORY_ID,
|
|
17
|
+
actorId,
|
|
18
|
+
sessionId,
|
|
19
|
+
namespaces: [
|
|
20
|
+
{ namespace: '/users/{actorId}/facts' },
|
|
21
|
+
{ namespace: '/users/{actorId}/preferences' },
|
|
22
|
+
{ namespace: '/episodes/{actorId}/{sessionId}' },
|
|
23
|
+
{ namespace: '/summaries/{actorId}' },
|
|
24
|
+
],
|
|
25
|
+
// readMode defaults to 'per-namespace' (one retrieve call per namespace).
|
|
26
|
+
// Switch to 'subtree' to consolidate to a single hierarchical recall call.
|
|
27
|
+
extraction: true,
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
manager = new MemoryManager({ stores });
|
|
31
|
+
memoryManagerCache.set(key, manager);
|
|
32
|
+
return manager;
|
|
33
|
+
}
|