@aws/nx-plugin 1.0.0-rc.2 → 1.0.0-rc.21
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/LICENSE-THIRD-PARTY +3552 -4179
- package/README.md +8 -8
- package/executors.json +9 -0
- package/generators.json +100 -1
- package/package.json +16 -12
- package/sdk/agentcore-gateway.d.ts +6 -0
- package/sdk/agentcore-gateway.js +11 -0
- package/sdk/agentcore-gateway.js.map +1 -0
- package/sdk/license.d.ts +8 -0
- package/sdk/license.js +14 -0
- package/sdk/license.js.map +1 -0
- package/sdk/py.d.ts +6 -6
- package/sdk/py.js +7 -7
- package/sdk/py.js.map +1 -1
- package/sdk/ts.d.ts +18 -14
- package/sdk/ts.js +38 -32
- package/sdk/ts.js.map +1 -1
- package/src/agentcore-gateway/attach-upstream.d.ts +33 -0
- package/src/agentcore-gateway/attach-upstream.js +41 -0
- package/src/agentcore-gateway/attach-upstream.js.map +1 -0
- package/src/agentcore-gateway/files/cedar/policies/README.md +52 -0
- package/src/agentcore-gateway/files/cedar/policies/permit-all.cedar +11 -0
- package/src/agentcore-gateway/files/project/serve-local.ts.template +134 -0
- package/src/agentcore-gateway/gateway-connection/generator.d.ts +21 -0
- package/src/agentcore-gateway/gateway-connection/generator.js +102 -0
- package/src/agentcore-gateway/gateway-connection/generator.js.map +1 -0
- package/src/agentcore-gateway/gateway-connection/schema.d.ts +12 -0
- package/src/agentcore-gateway/gateway-connection/schema.json +26 -0
- package/src/agentcore-gateway/generator.d.ts +25 -0
- package/src/agentcore-gateway/generator.js +129 -0
- package/src/agentcore-gateway/generator.js.map +1 -0
- package/src/agentcore-gateway/mcp-connection/generator.d.ts +19 -0
- package/src/agentcore-gateway/mcp-connection/generator.js +63 -0
- package/src/agentcore-gateway/mcp-connection/generator.js.map +1 -0
- package/src/agentcore-gateway/mcp-connection/schema.d.ts +12 -0
- package/src/agentcore-gateway/mcp-connection/schema.json +26 -0
- package/src/agentcore-gateway/schema.d.ts +16 -0
- package/src/agentcore-gateway/schema.json +65 -0
- package/src/connection/agent-runtime-config.d.ts +1 -1
- package/src/connection/agent-runtime-config.js.map +1 -1
- package/src/connection/agent-serve-local.d.ts +2 -2
- package/src/connection/agent-serve-local.js +1 -1
- package/src/connection/agent-serve-local.js.map +1 -1
- package/src/connection/generator.d.ts +5 -5
- package/src/connection/generator.js +93 -37
- package/src/connection/generator.js.map +1 -1
- package/src/connection/serve-local.d.ts +1 -1
- package/src/connection/serve-local.js +1 -1
- package/src/connection/serve-local.js.map +1 -1
- package/src/infra/app/__snapshots__/generator.spec.ts.snap +47 -58
- package/src/infra/app/generator.d.ts +3 -3
- package/src/infra/app/generator.js +19 -17
- package/src/infra/app/generator.js.map +1 -1
- package/src/license/__snapshots__/config.spec.ts.snap +23 -0
- package/src/license/config-types.d.ts +18 -1
- package/src/license/config-types.js +4 -0
- package/src/license/config-types.js.map +1 -1
- package/src/license/config.d.ts +65 -7
- package/src/license/config.js +315 -7
- package/src/license/config.js.map +1 -1
- package/src/license/dependency-check/check.d.ts +16 -0
- package/src/license/dependency-check/check.js +111 -0
- package/src/license/dependency-check/check.js.map +1 -0
- package/src/license/dependency-check/collectors/collector.d.ts +21 -0
- package/src/license/dependency-check/collectors/collector.js +76 -0
- package/src/license/dependency-check/collectors/collector.js.map +1 -0
- package/src/license/dependency-check/collectors/npm-collector.d.ts +10 -0
- package/src/license/dependency-check/collectors/npm-collector.js +75 -0
- package/src/license/dependency-check/collectors/npm-collector.js.map +1 -0
- package/src/license/dependency-check/collectors/python-collector.d.ts +23 -0
- package/src/license/dependency-check/collectors/python-collector.js +121 -0
- package/src/license/dependency-check/collectors/python-collector.js.map +1 -0
- package/src/license/dependency-check/evaluator.d.ts +9 -0
- package/src/license/dependency-check/evaluator.js +122 -0
- package/src/license/dependency-check/evaluator.js.map +1 -0
- package/src/license/dependency-check/executor-schema.json +6 -0
- package/src/license/dependency-check/executor.d.ts +9 -0
- package/src/license/dependency-check/executor.js +43 -0
- package/src/license/dependency-check/executor.js.map +1 -0
- package/src/license/dependency-check/pre-approved.d.ts +6 -0
- package/src/license/dependency-check/pre-approved.js +1280 -0
- package/src/license/dependency-check/pre-approved.js.map +1 -0
- package/src/license/dependency-check/types.d.ts +45 -0
- package/src/license/dependency-check/types.js +7 -0
- package/src/license/dependency-check/types.js.map +1 -0
- package/src/license/generator.d.ts +3 -3
- package/src/license/generator.js +102 -14
- package/src/license/generator.js.map +1 -1
- package/src/license/index.d.ts +8 -0
- package/src/license/index.js +13 -0
- package/src/license/index.js.map +1 -0
- package/src/license/known-exceptions.d.ts +6 -0
- package/src/license/known-exceptions.js +26 -0
- package/src/license/known-exceptions.js.map +1 -0
- package/src/license/schema.d.ts +5 -0
- package/src/license/schema.json +6 -0
- package/src/license/sync/generator.d.ts +2 -2
- package/src/license/sync/generator.js +15 -15
- package/src/license/sync/generator.js.map +1 -1
- package/src/license/sync/project-file-sync.d.ts +3 -3
- package/src/license/sync/project-file-sync.js.map +1 -1
- package/src/mcp-server/generator-info.d.ts +5 -1
- package/src/mcp-server/generator-info.js +7 -7
- package/src/mcp-server/generator-info.js.map +1 -1
- package/src/mcp-server/guide-pipeline.d.ts +1 -1
- package/src/mcp-server/guide-pipeline.js +2 -2
- package/src/mcp-server/guide-pipeline.js.map +1 -1
- package/src/mcp-server/mdx-ast.js +4 -0
- package/src/mcp-server/mdx-ast.js.map +1 -1
- package/src/mcp-server/schema-registry.d.ts +9 -3
- package/src/mcp-server/schema-registry.js +22 -6
- package/src/mcp-server/schema-registry.js.map +1 -1
- package/src/mcp-server/server.js +3 -3
- package/src/mcp-server/server.js.map +1 -1
- package/src/mcp-server/tools/create-workspace-command.d.ts +1 -1
- package/src/mcp-server/tools/create-workspace-command.js +4 -4
- package/src/mcp-server/tools/create-workspace-command.js.map +1 -1
- package/src/mcp-server/tools/general-guidance.d.ts +2 -2
- package/src/mcp-server/tools/general-guidance.js +2 -2
- package/src/mcp-server/tools/general-guidance.js.map +1 -1
- package/src/mcp-server/tools/generator-guide.d.ts +2 -2
- package/src/mcp-server/tools/generator-guide.js.map +1 -1
- package/src/mcp-server/tools/list-generators.d.ts +2 -2
- package/src/mcp-server/tools/list-generators.js +1 -1
- package/src/mcp-server/tools/list-generators.js.map +1 -1
- package/src/open-api/ts-client/__snapshots__/generator.reserved-keywords.spec.ts.snap +1 -1
- package/src/open-api/ts-client/generator.d.ts +3 -3
- package/src/open-api/ts-client/generator.js +2 -2
- package/src/open-api/ts-client/generator.js.map +1 -1
- package/src/open-api/ts-hooks/generator.d.ts +3 -3
- package/src/open-api/ts-hooks/generator.js +2 -2
- package/src/open-api/ts-hooks/generator.js.map +1 -1
- package/src/open-api/ts-hooks/generator.spec.tsx +14 -14
- package/src/open-api/ts-metadata/generator.d.ts +3 -3
- package/src/open-api/ts-metadata/generator.js +1 -1
- package/src/open-api/ts-metadata/generator.js.map +1 -1
- package/src/open-api/utils/codegen-data/languages.d.ts +5 -1
- package/src/open-api/utils/codegen-data/languages.js +4 -4
- package/src/open-api/utils/codegen-data/languages.js.map +1 -1
- package/src/open-api/utils/codegen-data.d.ts +6 -2
- package/src/open-api/utils/codegen-data.js +6 -6
- package/src/open-api/utils/codegen-data.js.map +1 -1
- package/src/open-api/utils/normalise.d.ts +5 -1
- package/src/open-api/utils/normalise.js +5 -5
- package/src/open-api/utils/normalise.js.map +1 -1
- package/src/open-api/utils/parse.d.ts +2 -2
- package/src/open-api/utils/parse.js +4 -0
- package/src/open-api/utils/parse.js.map +1 -1
- package/src/open-api/utils/refs.d.ts +1 -1
- package/src/preset/__snapshots__/generator.spec.ts.snap +131 -13
- package/src/preset/generator.d.ts +4 -4
- package/src/preset/generator.js +21 -14
- package/src/preset/generator.js.map +1 -1
- package/src/preset/schema.d.ts +3 -1
- package/src/preset/schema.json +5 -0
- package/src/py/agent/__snapshots__/generator.spec.ts.snap +659 -21
- package/src/py/agent/a2a-connection/__snapshots__/generator.spec.ts.snap +201 -0
- package/src/py/agent/a2a-connection/files/agent-connection/app/__targetAgentSnakeCase___client_strands.py.template +30 -0
- package/src/py/agent/a2a-connection/generator.d.ts +3 -3
- package/src/py/agent/a2a-connection/generator.js +11 -10
- package/src/py/agent/a2a-connection/generator.js.map +1 -1
- package/src/py/agent/files/common/agent.py.template +2 -0
- package/src/py/agent/files/http/init.py.template +7 -25
- package/src/py/agent/files/http/main.py.template +2 -3
- package/src/py/agent/gateway-connection/__snapshots__/generator.spec.ts.snap +197 -0
- package/src/py/agent/gateway-connection/files/agent-connection/app/__gatewaySnakeCase___client_strands.py.template +35 -0
- package/src/py/agent/gateway-connection/generator.d.ts +10 -0
- package/src/py/agent/gateway-connection/generator.js +106 -0
- package/src/py/agent/gateway-connection/generator.js.map +1 -0
- package/src/py/agent/gateway-connection/schema.d.ts +12 -0
- package/src/py/agent/gateway-connection/schema.json +26 -0
- package/src/py/agent/generator.d.ts +3 -3
- package/src/py/agent/generator.js +47 -38
- package/src/py/agent/generator.js.map +1 -1
- package/src/py/agent/mcp-connection/__snapshots__/generator.spec.ts.snap +167 -81
- package/src/py/agent/mcp-connection/files/agent-connection/app/__mcpServerSnakeCase___client_strands.py.template +30 -0
- package/src/py/agent/mcp-connection/generator.d.ts +3 -3
- package/src/py/agent/mcp-connection/generator.js +11 -81
- package/src/py/agent/mcp-connection/generator.js.map +1 -1
- package/src/py/agent/react-connection/__snapshots__/generator.spec.ts.snap +8 -17
- package/src/py/agent/react-connection/generator.d.ts +3 -3
- package/src/py/agent/react-connection/generator.js +4 -4
- package/src/py/agent/react-connection/generator.js.map +1 -1
- package/src/py/agent/react-connection/serve-local.d.ts +2 -2
- package/src/py/agent/react-connection/serve-local.js.map +1 -1
- package/src/py/api/generator.d.ts +3 -3
- package/src/py/api/generator.js.map +1 -1
- package/src/py/dynamodb/__snapshots__/generator.spec.ts.snap +1486 -0
- package/src/py/dynamodb/agent-connection/__snapshots__/generator.spec.ts.snap +45 -0
- package/src/py/dynamodb/agent-connection/generator.d.ts +10 -0
- package/src/py/dynamodb/agent-connection/generator.js +39 -0
- package/src/py/dynamodb/agent-connection/generator.js.map +1 -0
- package/src/py/dynamodb/agent-connection/schema.d.ts +14 -0
- package/src/py/dynamodb/agent-connection/schema.json +22 -0
- package/src/py/dynamodb/fast-api-connection/__snapshots__/generator.spec.ts.snap +23 -0
- package/src/py/dynamodb/fast-api-connection/generator.d.ts +10 -0
- package/src/py/dynamodb/fast-api-connection/generator.js +37 -0
- package/src/py/dynamodb/fast-api-connection/generator.js.map +1 -0
- package/src/py/dynamodb/fast-api-connection/schema.d.ts +12 -0
- package/src/py/dynamodb/fast-api-connection/schema.json +18 -0
- package/src/py/dynamodb/files/__name__/__init__.py.template +6 -0
- package/src/py/dynamodb/files/__name__/client.py.template +39 -0
- package/src/py/dynamodb/files/__name__/entities/__init__.py.template +4 -0
- package/src/py/dynamodb/files/__name__/entities/base.py.template +63 -0
- package/src/py/dynamodb/files/__name__/entities/example.py.template +64 -0
- package/src/py/dynamodb/files/config.json.template +24 -0
- package/src/py/dynamodb/generator.d.ts +10 -0
- package/src/py/dynamodb/generator.js +106 -0
- package/src/py/dynamodb/generator.js.map +1 -0
- package/src/py/dynamodb/mcp-server-connection/__snapshots__/generator.spec.ts.snap +45 -0
- package/src/py/dynamodb/mcp-server-connection/generator.d.ts +10 -0
- package/src/py/dynamodb/mcp-server-connection/generator.js +39 -0
- package/src/py/dynamodb/mcp-server-connection/generator.js.map +1 -0
- package/src/py/dynamodb/mcp-server-connection/schema.d.ts +14 -0
- package/src/py/dynamodb/mcp-server-connection/schema.json +22 -0
- package/src/py/dynamodb/schema.d.ts +15 -0
- package/src/py/dynamodb/schema.json +70 -0
- package/src/py/fast-api/__snapshots__/generator.spec.ts.snap +167 -39
- package/src/py/fast-api/files/app/__name__/init.py.template +5 -22
- package/src/py/fast-api/files/app/__name__/main.py.template +4 -1
- package/src/py/fast-api/generator.d.ts +3 -3
- package/src/py/fast-api/generator.js +23 -17
- package/src/py/fast-api/generator.js.map +1 -1
- package/src/py/fast-api/react/__snapshots__/generator.spec.ts.snap +1 -1
- package/src/py/fast-api/react/generator.d.ts +3 -3
- package/src/py/fast-api/react/generator.js +2 -2
- package/src/py/fast-api/react/generator.js.map +1 -1
- package/src/py/fast-api/react/open-api.d.ts +1 -1
- package/src/py/fast-api/react/open-api.js +5 -2
- package/src/py/fast-api/react/open-api.js.map +1 -1
- package/src/py/lambda-function/generator.d.ts +3 -3
- package/src/py/lambda-function/generator.js +11 -11
- package/src/py/lambda-function/generator.js.map +1 -1
- package/src/py/mcp-server/__snapshots__/generator.spec.ts.snap +83 -13
- package/src/py/mcp-server/generator.d.ts +3 -3
- package/src/py/mcp-server/generator.js +33 -26
- package/src/py/mcp-server/generator.js.map +1 -1
- package/src/py/project/generator.d.ts +3 -3
- package/src/py/project/generator.js +96 -70
- package/src/py/project/generator.js.map +1 -1
- package/src/smithy/project/__snapshots__/generator.spec.ts.snap +19 -16
- package/src/smithy/project/files/build.Dockerfile.template +1 -0
- package/src/smithy/project/files/src/operations/echo.smithy.template +1 -0
- package/src/smithy/project/generator.d.ts +3 -3
- package/src/smithy/project/generator.js +30 -28
- package/src/smithy/project/generator.js.map +1 -1
- package/src/smithy/react-connection/__snapshots__/generator.spec.ts.snap +1 -1
- package/src/smithy/react-connection/generator.d.ts +3 -3
- package/src/smithy/react-connection/generator.js +3 -3
- package/src/smithy/react-connection/generator.js.map +1 -1
- package/src/smithy/ts/api/__snapshots__/generator.spec.ts.snap +14 -34
- package/src/smithy/ts/api/generator.d.ts +3 -3
- package/src/smithy/ts/api/generator.js +18 -12
- package/src/smithy/ts/api/generator.js.map +1 -1
- package/src/terraform/project/files/application/src/main.tf.template +6 -1
- package/src/terraform/project/generator.d.ts +3 -3
- package/src/terraform/project/generator.js +13 -8
- package/src/terraform/project/generator.js.map +1 -1
- package/src/trpc/backend/__snapshots__/generator.spec.ts.snap +163 -18
- package/src/trpc/backend/files/src/procedures/echo.ts.template +1 -1
- package/src/trpc/backend/files/src/schema/echo.ts.template +2 -2
- package/src/trpc/backend/generator.d.ts +3 -3
- package/src/trpc/backend/generator.js +11 -10
- package/src/trpc/backend/generator.js.map +1 -1
- package/src/trpc/backend/schema.d.ts +2 -2
- package/src/trpc/react/__snapshots__/generator.spec.ts.snap +3 -3
- package/src/trpc/react/files/src/components/__apiNameClassName__ClientProvider.tsx.template +3 -3
- package/src/trpc/react/generator.d.ts +3 -3
- package/src/trpc/react/generator.js +5 -5
- package/src/trpc/react/generator.js.map +1 -1
- package/src/ts/agent/__snapshots__/generator.spec.ts.snap +652 -14
- package/src/ts/agent/a2a-connection/__snapshots__/generator.spec.ts.snap +256 -0
- package/src/ts/agent/a2a-connection/files/agent-connection/app/__targetAgentKebabCase__-client-strands.ts.template +23 -0
- package/src/ts/agent/a2a-connection/generator.d.ts +3 -3
- package/src/ts/agent/a2a-connection/generator.js +8 -8
- package/src/ts/agent/a2a-connection/generator.js.map +1 -1
- package/src/ts/agent/files/common/agent.ts.template +6 -2
- package/src/ts/agent/files/http/router.ts.template +1 -1
- package/src/ts/agent/gateway-connection/__snapshots__/generator.spec.ts.snap +220 -0
- package/src/ts/agent/gateway-connection/files/agent-connection/app/__gatewayKebabCase__-client-strands.ts.template +30 -0
- package/src/ts/agent/gateway-connection/generator.d.ts +10 -0
- package/src/ts/agent/gateway-connection/generator.js +106 -0
- package/src/ts/agent/gateway-connection/generator.js.map +1 -0
- package/src/ts/agent/gateway-connection/schema.d.ts +12 -0
- package/src/ts/agent/gateway-connection/schema.json +26 -0
- package/src/ts/agent/generator.d.ts +3 -3
- package/src/ts/agent/generator.js +44 -32
- package/src/ts/agent/generator.js.map +1 -1
- package/src/ts/agent/mcp-connection/__snapshots__/generator.spec.ts.snap +191 -110
- package/src/ts/agent/mcp-connection/files/agent-connection/app/__mcpServerKebabCase__-client-strands.ts.template +22 -0
- package/src/ts/agent/mcp-connection/generator.d.ts +3 -3
- package/src/ts/agent/mcp-connection/generator.js +9 -21
- package/src/ts/agent/mcp-connection/generator.js.map +1 -1
- package/src/ts/agent/react-connection/generator.d.ts +3 -3
- package/src/ts/agent/react-connection/generator.js +9 -9
- package/src/ts/agent/react-connection/generator.js.map +1 -1
- package/src/ts/agent/react-connection/serve-local.d.ts +2 -2
- package/src/ts/api/generator.d.ts +3 -3
- package/src/ts/api/generator.js +4 -4
- package/src/ts/api/generator.js.map +1 -1
- package/src/ts/api/schema.d.ts +2 -1
- package/src/ts/astro-docs/__snapshots__/generator.spec.ts.snap +7 -8
- package/src/ts/astro-docs/generator.d.ts +3 -3
- package/src/ts/astro-docs/generator.js +14 -11
- package/src/ts/astro-docs/generator.js.map +1 -1
- package/src/ts/docs/generator.d.ts +3 -3
- package/src/ts/docs/generator.js.map +1 -1
- package/src/ts/dynamodb/__snapshots__/generator.spec.ts.snap +1352 -0
- package/src/ts/dynamodb/agent-connection/__snapshots__/generator.spec.ts.snap +45 -0
- package/src/ts/dynamodb/agent-connection/generator.d.ts +10 -0
- package/src/ts/dynamodb/agent-connection/generator.js +32 -0
- package/src/ts/dynamodb/agent-connection/generator.js.map +1 -0
- package/src/ts/dynamodb/agent-connection/schema.d.ts +14 -0
- package/src/ts/dynamodb/agent-connection/schema.json +22 -0
- package/src/ts/dynamodb/files/config.json.template +24 -0
- package/src/ts/dynamodb/files/src/client.ts.template +61 -0
- package/src/ts/dynamodb/files/src/entities/example.ts.template +47 -0
- package/src/ts/dynamodb/files/src/entities/index.ts.template +1 -0
- package/src/ts/dynamodb/files/src/index.ts.template +2 -0
- package/src/ts/dynamodb/generator.d.ts +10 -0
- package/src/ts/dynamodb/generator.js +111 -0
- package/src/ts/dynamodb/generator.js.map +1 -0
- package/src/ts/dynamodb/mcp-server-connection/__snapshots__/generator.spec.ts.snap +45 -0
- package/src/ts/dynamodb/mcp-server-connection/generator.d.ts +10 -0
- package/src/ts/dynamodb/mcp-server-connection/generator.js +32 -0
- package/src/ts/dynamodb/mcp-server-connection/generator.js.map +1 -0
- package/src/ts/dynamodb/mcp-server-connection/schema.d.ts +14 -0
- package/src/ts/dynamodb/mcp-server-connection/schema.json +22 -0
- package/src/ts/dynamodb/schema.d.ts +15 -0
- package/src/ts/dynamodb/schema.json +70 -0
- package/src/ts/dynamodb/smithy-connection/__snapshots__/generator.spec.ts.snap +23 -0
- package/src/ts/dynamodb/smithy-connection/generator.d.ts +10 -0
- package/src/ts/dynamodb/smithy-connection/generator.js +30 -0
- package/src/ts/dynamodb/smithy-connection/generator.js.map +1 -0
- package/src/ts/dynamodb/smithy-connection/schema.d.ts +12 -0
- package/src/ts/dynamodb/smithy-connection/schema.json +18 -0
- package/src/ts/dynamodb/trpc-connection/__snapshots__/generator.spec.ts.snap +23 -0
- package/src/ts/dynamodb/trpc-connection/generator.d.ts +10 -0
- package/src/ts/dynamodb/trpc-connection/generator.js +30 -0
- package/src/ts/dynamodb/trpc-connection/generator.js.map +1 -0
- package/src/ts/dynamodb/trpc-connection/schema.d.ts +12 -0
- package/src/ts/dynamodb/trpc-connection/schema.json +18 -0
- package/src/ts/lambda-function/generator.d.ts +3 -3
- package/src/ts/lambda-function/generator.js +8 -8
- package/src/ts/lambda-function/generator.js.map +1 -1
- package/src/ts/lib/__snapshots__/generator.spec.ts.snap +32 -65
- package/src/ts/lib/__snapshots__/vitest.spec.ts.snap +24 -0
- package/src/ts/lib/biome.d.ts +7 -0
- package/src/ts/lib/biome.js +58 -0
- package/src/ts/lib/biome.js.map +1 -0
- package/src/ts/lib/generator.d.ts +3 -3
- package/src/ts/lib/generator.js +27 -29
- package/src/ts/lib/generator.js.map +1 -1
- package/src/ts/lib/grit/vitest-pass-with-no-tests.grit +1 -4
- package/src/ts/lib/ts-project-utils.d.ts +12 -2
- package/src/ts/lib/ts-project-utils.js +30 -10
- package/src/ts/lib/ts-project-utils.js.map +1 -1
- package/src/ts/lib/vitest.d.ts +2 -2
- package/src/ts/lib/vitest.js +1 -1
- package/src/ts/lib/vitest.js.map +1 -1
- package/src/ts/mcp-server/__snapshots__/generator.spec.ts.snap +82 -12
- package/src/ts/mcp-server/generator.d.ts +3 -3
- package/src/ts/mcp-server/generator.js +34 -12
- package/src/ts/mcp-server/generator.js.map +1 -1
- package/src/ts/nx-generator/__snapshots__/generator.spec.ts.snap +19 -14
- package/src/ts/nx-generator/generator.d.ts +2 -2
- package/src/ts/nx-generator/generator.js +52 -19
- package/src/ts/nx-generator/generator.js.map +1 -1
- package/src/ts/nx-plugin/generator.d.ts +3 -3
- package/src/ts/nx-plugin/generator.js +10 -9
- package/src/ts/nx-plugin/generator.js.map +1 -1
- package/src/ts/nx-plugin/utils.d.ts +1 -1
- package/src/ts/nx-plugin/utils.js +10 -4
- package/src/ts/nx-plugin/utils.js.map +1 -1
- package/src/ts/rdb/__snapshots__/generator.spec.ts.snap +252 -388
- package/src/ts/rdb/agent-connection/generator.d.ts +3 -3
- package/src/ts/rdb/agent-connection/generator.js +4 -4
- package/src/ts/rdb/agent-connection/generator.js.map +1 -1
- package/src/ts/rdb/files/config.json.template +14 -0
- package/src/ts/rdb/files/prisma.config.ts.template +5 -4
- package/src/ts/rdb/files/src/index.ts.template +0 -1
- package/src/ts/rdb/files/src/prisma.ts.template +26 -21
- package/src/ts/rdb/generator.d.ts +3 -7
- package/src/ts/rdb/generator.js +52 -41
- package/src/ts/rdb/generator.js.map +1 -1
- package/src/ts/rdb/mcp-server-connection/generator.d.ts +3 -3
- package/src/ts/rdb/mcp-server-connection/generator.js +4 -4
- package/src/ts/rdb/mcp-server-connection/generator.js.map +1 -1
- package/src/ts/rdb/smithy-connection/generator.d.ts +3 -3
- package/src/ts/rdb/smithy-connection/generator.js +4 -4
- package/src/ts/rdb/smithy-connection/generator.js.map +1 -1
- package/src/ts/rdb/trpc-connection/generator.d.ts +3 -3
- package/src/ts/rdb/trpc-connection/generator.js +3 -3
- package/src/ts/rdb/trpc-connection/generator.js.map +1 -1
- package/src/ts/rdb/utils.d.ts +1 -1
- package/src/ts/react-website/agui/files/common/src/hooks/useAgui__agentNameClassName__.tsx.template +1 -16
- package/src/ts/react-website/agui/generator.d.ts +1 -1
- package/src/ts/react-website/agui/generator.js +4 -5
- package/src/ts/react-website/agui/generator.js.map +1 -1
- package/src/ts/react-website/app/__snapshots__/generator.spec.ts.snap +530 -367
- package/src/ts/react-website/app/generator.d.ts +3 -3
- package/src/ts/react-website/app/generator.js +21 -17
- package/src/ts/react-website/app/generator.js.map +1 -1
- package/src/ts/react-website/cognito-auth/__snapshots__/generator.spec.ts.snap +1 -7
- package/src/ts/react-website/cognito-auth/__snapshots__/generator.terraform.spec.ts.snap +9 -3
- package/src/ts/react-website/cognito-auth/__snapshots__/generator.ux-provider.spec.ts.snap +0 -20
- package/src/ts/react-website/cognito-auth/generator.d.ts +3 -3
- package/src/ts/react-website/cognito-auth/generator.js +10 -13
- package/src/ts/react-website/cognito-auth/generator.js.map +1 -1
- package/src/ts/react-website/cognito-auth/grit/cloudscape-auth-menu.grit +8 -6
- package/src/ts/react-website/cognito-auth/grit/cognito-auth-wrapper.grit +1 -1
- package/src/ts/react-website/cognito-auth/grit/none-auth-menu.grit +1 -0
- package/src/ts/react-website/cognito-auth/grit/shadcn-auth-menu.grit +3 -1
- package/src/ts/react-website/cognito-auth/grit/shadcn-state-declarations.grit +3 -1
- package/src/ts/react-website/cognito-auth/utils.d.ts +1 -1
- package/src/ts/react-website/cognito-auth/utils.js +1 -1
- package/src/ts/react-website/cognito-auth/utils.js.map +1 -1
- package/src/ts/react-website/runtime-config/generator.d.ts +3 -3
- package/src/ts/react-website/runtime-config/generator.js +4 -4
- package/src/ts/react-website/runtime-config/generator.js.map +1 -1
- package/src/ts/sync/generator.d.ts +3 -3
- package/src/ts/sync/generator.js +2 -2
- package/src/ts/sync/generator.js.map +1 -1
- package/src/ts/website/app/generator.d.ts +3 -3
- package/src/ts/website/app/generator.js +1 -1
- package/src/ts/website/app/generator.js.map +1 -1
- package/src/ts/website/auth/generator.d.ts +3 -3
- package/src/ts/website/auth/generator.js +1 -1
- package/src/ts/website/auth/generator.js.map +1 -1
- package/src/utils/agent-chat/agent-chat.d.ts +31 -0
- package/src/utils/agent-chat/agent-chat.js +30 -0
- package/src/utils/agent-chat/agent-chat.js.map +1 -0
- package/src/utils/agent-chat/files/a2a/chat.ts.template +33 -0
- package/src/utils/agent-chat/files/ag-ui/chat.ts.template +17 -0
- package/src/utils/agent-chat/files/common/agentcore.ts.template +81 -0
- package/src/utils/agent-chat/files/http-py/chat.ts.template +43 -0
- package/src/utils/agent-chat/files/http-ts/chat.ts.template +54 -0
- package/src/utils/agent-connection/agent-connection.d.ts +67 -24
- package/src/utils/agent-connection/agent-connection.js +236 -44
- package/src/utils/agent-connection/agent-connection.js.map +1 -1
- package/src/utils/agent-connection/files/core-a2a/agentcore-a2a-client-config.ts.template +93 -0
- package/src/utils/agent-connection/files/core-auth/agentcore-endpoints.ts.template +37 -0
- package/src/utils/agent-connection/files/core-auth/agentcore-fetch.ts.template +54 -0
- package/src/utils/agent-connection/files/core-gateway/agentcore-gateway-mcp-transport.ts.template +41 -0
- package/src/utils/agent-connection/files/core-mcp/agentcore-mcp-transport.ts.template +70 -0
- package/src/utils/agent-connection/files/core-runtime-config/runtime-config.ts.template +22 -32
- package/src/utils/agent-connection/files/core-shared/agentcore-transport.ts.template +39 -0
- package/src/utils/agent-connection/files/core-strands/a2a/agentcore-a2a-client-strands.ts.template +61 -0
- package/src/utils/agent-connection/files/core-strands/base/model-errors-strands.ts.template +36 -0
- package/src/utils/agent-connection/files/core-strands/gateway/agentcore-gateway-mcp-client-strands.ts.template +26 -0
- package/src/utils/agent-connection/files/core-strands/mcp/agentcore-mcp-client-strands.ts.template +27 -0
- package/src/utils/agent-connection/files/py-core-a2a/agentcore_a2a_client_config.py.template +43 -0
- package/src/utils/agent-connection/files/py-core-auth/agentcore_endpoints.py.template +47 -0
- package/src/utils/agent-connection/files/py-core-auth/auth/session.py.template +51 -0
- package/src/utils/agent-connection/files/py-core-gateway/agentcore_gateway_mcp_transport.py.template +28 -0
- package/src/utils/agent-connection/files/py-core-mcp/agentcore_mcp_transport.py.template +34 -0
- package/src/utils/agent-connection/files/py-core-runtime-config/runtime_config.py.template +5 -18
- package/src/utils/agent-connection/files/py-core-shared/agentcore_transport.py.template +40 -0
- package/src/utils/agent-connection/files/py-core-strands/a2a/agentcore_a2a_client_strands.py.template +66 -0
- package/src/utils/agent-connection/files/py-core-strands/base/model_errors_strands.py.template +40 -0
- package/src/utils/agent-connection/files/py-core-strands/gateway/agentcore_gateway_mcp_client_strands.py.template +22 -0
- package/src/utils/agent-connection/files/py-core-strands/mcp/agentcore_mcp_client_strands.py.template +30 -0
- package/src/utils/agent-core-constructs/agent-core-constructs.d.ts +11 -3
- package/src/utils/agent-core-constructs/agent-core-constructs.js +57 -12
- package/src/utils/agent-core-constructs/agent-core-constructs.js.map +1 -1
- package/src/utils/agent-core-constructs/files/cdk/app/agent-core/__nameKebabCase__/__nameKebabCase__.ts.template +4 -0
- package/src/utils/agent-core-constructs/files/cdk/app/agentcore-gateway/__nameKebabCase__/__nameKebabCase__.ts.template +40 -0
- package/src/utils/agent-core-constructs/files/cdk/core/agentcore-gateway/agentcore-gateway.ts.template +375 -0
- package/src/utils/agent-core-constructs/files/cdk/core/agentcore-gateway/readiness-probe/index.js.template +55 -0
- package/src/utils/agent-core-constructs/files/terraform/app/agentcore-gateway/__nameKebabCase__/__nameKebabCase__.tf.template +335 -0
- package/src/utils/agent-core-constructs/files/terraform/app/agentcore-gateway/__nameKebabCase__/render-cedar.cjs.template +13 -0
- package/src/utils/agent-core-constructs/files/terraform/core/agent-core/runtime.tf.template +77 -9
- package/src/utils/agent-core-constructs/files/terraform/core/agentcore-gateway/gateway.tf.template +14 -0
- package/src/utils/api-constructs/api-constructs.d.ts +2 -2
- package/src/utils/api-constructs/api-constructs.js +1 -1
- package/src/utils/api-constructs/api-constructs.js.map +1 -1
- package/src/utils/api-constructs/files/cdk/app/apis/rest/__apiNameKebabCase__.ts.template +3 -0
- package/src/utils/api-constructs/files/cdk/core/api/http/http-api.ts.template +9 -0
- package/src/utils/api-constructs/files/cdk/core/api/rest/rest-api.ts.template +23 -1
- package/src/utils/api-constructs/files/cdk/core/api/utils/utils.ts.template +61 -7
- package/src/utils/api-constructs/files/terraform/app/apis/rest/__apiNameKebabCase__/__apiNameKebabCase__.tf.template +3 -0
- package/src/utils/api-constructs/open-api-metadata.d.ts +2 -2
- package/src/utils/api-constructs/open-api-metadata.js.map +1 -1
- package/src/utils/ast/website.d.ts +5 -1
- package/src/utils/ast/website.js +3 -3
- package/src/utils/ast/website.js.map +1 -1
- package/src/utils/ast.d.ts +33 -1
- package/src/utils/ast.js +89 -4
- package/src/utils/ast.js.map +1 -1
- package/src/utils/bundle/bundle.d.ts +1 -1
- package/src/utils/bundle/bundle.js +2 -2
- package/src/utils/bundle/bundle.js.map +1 -1
- package/src/utils/config/index.d.ts +5 -5
- package/src/utils/config/utils.d.ts +13 -3
- package/src/utils/config/utils.js +37 -5
- package/src/utils/config/utils.js.map +1 -1
- package/src/utils/connection/open-api/files/components/__apiNameClassName__Provider.tsx.template +1 -1
- package/src/utils/connection/open-api/react.d.ts +1 -1
- package/src/utils/connection/open-api/react.js +4 -4
- package/src/utils/connection/open-api/react.js.map +1 -1
- package/src/utils/containers.d.ts +1 -1
- package/src/utils/dynamodb-constructs/dynamodb-constructs.d.ts +18 -0
- package/src/utils/dynamodb-constructs/dynamodb-constructs.js +49 -0
- package/src/utils/dynamodb-constructs/dynamodb-constructs.js.map +1 -0
- package/src/utils/dynamodb-constructs/files/cdk/app/dynamodb/__nameKebabCase__.ts.template +43 -0
- package/src/utils/dynamodb-constructs/files/cdk/core/dynamodb.ts.template +105 -0
- package/src/utils/dynamodb-constructs/files/terraform/app/dynamodb/__nameKebabCase__/__nameKebabCase__.tf.template +62 -0
- package/src/utils/dynamodb-constructs/files/terraform/core/dynamodb/dynamodb.tf.template +155 -0
- package/src/utils/files/common/scripts/src/dynamodb/create-local-table.ts.template +195 -0
- package/src/utils/files/common/scripts/src/dynamodb/pull-image.ts.template +13 -0
- package/src/utils/files/common/scripts/src/dynamodb/start-container.ts.template +91 -0
- package/src/utils/files/common/scripts/src/rdb/pull-image.ts.template +16 -0
- package/src/utils/files/common/scripts/src/rdb/start-container.ts.template +102 -0
- package/src/utils/files/common/scripts/src/rdb/wait-for-db.ts.template +59 -0
- package/src/utils/files/terraform/src/core/runtime-config/appconfig-deployment/appconfig-deployment.tf.template +9 -3
- package/src/utils/files/terraform/src/core/runtime-config/read/read.tf.template +7 -2
- package/src/utils/format.d.ts +45 -2
- package/src/utils/format.js +167 -46
- package/src/utils/format.js.map +1 -1
- package/src/utils/fs.d.ts +1 -1
- package/src/utils/fs.js.map +1 -1
- package/src/utils/function-constructs/function-constructs.d.ts +2 -2
- package/src/utils/function-constructs/function-constructs.js +1 -1
- package/src/utils/function-constructs/function-constructs.js.map +1 -1
- package/src/utils/generators.d.ts +4 -0
- package/src/utils/generators.js +4 -4
- package/src/utils/generators.js.map +1 -1
- package/src/utils/git.d.ts +1 -1
- package/src/utils/git.js.map +1 -1
- package/src/utils/iac.d.ts +1 -1
- package/src/utils/iac.js.map +1 -1
- package/src/utils/identity-constructs/files/cdk/core/user-identity.ts.template +1 -5
- package/src/utils/identity-constructs/files/terraform/core/user-identity/add-callback-url/add-callback-url.tf.template +9 -3
- package/src/utils/identity-constructs/files/terraform/core/user-identity/identity/identity.tf.template +2 -4
- package/src/utils/identity-constructs/identity-constructs.d.ts +2 -2
- package/src/utils/identity-constructs/identity-constructs.js +1 -1
- package/src/utils/identity-constructs/identity-constructs.js.map +1 -1
- package/src/utils/js.d.ts +4 -0
- package/src/utils/js.js +4 -4
- package/src/utils/js.js.map +1 -1
- package/src/utils/mcp.d.ts +25 -0
- package/src/utils/mcp.js +81 -0
- package/src/utils/mcp.js.map +1 -0
- package/src/utils/metrics.d.ts +9 -3
- package/src/utils/metrics.js +58 -28
- package/src/utils/metrics.js.map +1 -1
- package/src/utils/npm-scope.d.ts +1 -1
- package/src/utils/npm-scope.js.map +1 -1
- package/src/utils/nx.d.ts +7 -2
- package/src/utils/nx.js +46 -14
- package/src/utils/nx.js.map +1 -1
- package/src/utils/nxlv-python.d.ts +1 -1
- package/src/utils/paths.d.ts +1 -1
- package/src/utils/pnpm-workspace.d.ts +1 -1
- package/src/utils/pnpm-workspace.js.map +1 -1
- package/src/utils/port.d.ts +31 -3
- package/src/utils/port.js +74 -4
- package/src/utils/port.js.map +1 -1
- package/src/utils/py.d.ts +2 -2
- package/src/utils/py.js +13 -6
- package/src/utils/py.js.map +1 -1
- package/src/utils/rdb-constructs/files/cdk/app/dbs/__nameKebabCase__.ts.template +12 -2
- package/src/utils/rdb-constructs/files/cdk/core/rdb/aurora.ts.template +30 -1
- package/src/utils/rdb-constructs/files/terraform/app/dbs/__nameKebabCase__/__nameKebabCase__.tf.template +38 -16
- package/src/utils/rdb-constructs/files/terraform/core/rdb/aurora/aurora.tf.template +28 -13
- package/src/utils/rdb-constructs/rdb-constructs.d.ts +5 -4
- package/src/utils/rdb-constructs/rdb-constructs.js +3 -11
- package/src/utils/rdb-constructs/rdb-constructs.js.map +1 -1
- package/src/utils/shared-constructs-constants.d.ts +1 -0
- package/src/utils/shared-constructs-constants.js +2 -1
- package/src/utils/shared-constructs-constants.js.map +1 -1
- package/src/utils/shared-constructs.d.ts +2 -2
- package/src/utils/shared-constructs.js +7 -7
- package/src/utils/shared-constructs.js.map +1 -1
- package/src/utils/shared-dynamodb-scripts.d.ts +11 -0
- package/src/utils/shared-dynamodb-scripts.js +23 -0
- package/src/utils/shared-dynamodb-scripts.js.map +1 -0
- package/src/utils/shared-infra-config.d.ts +1 -1
- package/src/utils/shared-infra-config.js +1 -1
- package/src/utils/shared-infra-config.js.map +1 -1
- package/src/utils/shared-infra-scripts.d.ts +11 -0
- package/src/utils/shared-infra-scripts.js +35 -0
- package/src/utils/shared-infra-scripts.js.map +1 -0
- package/src/utils/shared-rdb-scripts.d.ts +11 -0
- package/src/utils/shared-rdb-scripts.js +20 -0
- package/src/utils/shared-rdb-scripts.js.map +1 -0
- package/src/utils/shared-scripts.d.ts +2 -5
- package/src/utils/shared-scripts.js +2 -23
- package/src/utils/shared-scripts.js.map +1 -1
- package/src/utils/shared-shadcn.d.ts +1 -1
- package/src/utils/shared-shadcn.js +1 -13
- package/src/utils/shared-shadcn.js.map +1 -1
- package/src/utils/test.d.ts +5 -1
- package/src/utils/test.js +9 -5
- package/src/utils/test.js.map +1 -1
- package/src/utils/toml.d.ts +1 -1
- package/src/utils/toml.js +4 -0
- package/src/utils/toml.js.map +1 -1
- package/src/utils/versions.d.ts +82 -83
- package/src/utils/versions.js +81 -82
- package/src/utils/versions.js.map +1 -1
- package/src/utils/website-constructs/files/cdk/core/static-website.ts.template +72 -5
- package/src/utils/website-constructs/files/terraform/core/static-website/static-website.tf.template +63 -15
- package/src/utils/website-constructs/website-constructs.d.ts +2 -2
- package/src/utils/website-constructs/website-constructs.js +1 -1
- package/src/utils/website-constructs/website-constructs.js.map +1 -1
- package/src/py/agent/a2a-connection/files/agent-connection/app/__targetAgentSnakeCase___client.py.template +0 -22
- package/src/py/agent/mcp-connection/files/agent-connection/app/__mcpServerSnakeCase___client.py.template +0 -22
- package/src/py/agent/scripts/http/chat.ts.template +0 -38
- package/src/ts/agent/a2a-connection/files/agent-connection/app/__targetAgentKebabCase__-client.ts.template +0 -19
- package/src/ts/agent/mcp-connection/files/agent-connection/app/__mcpServerKebabCase__-client.ts.template +0 -19
- package/src/ts/agent/scripts/http/chat.ts.template +0 -35
- package/src/ts/lib/eslint.d.ts +0 -14
- package/src/ts/lib/eslint.js +0 -90
- package/src/ts/lib/eslint.js.map +0 -1
- package/src/ts/lib/grit/eslint-dependency-checks-warn.grit +0 -1
- package/src/ts/rdb/files/scripts/docker-pull.ts.template +0 -15
- package/src/ts/rdb/files/scripts/docker-start.ts.template +0 -84
- package/src/ts/rdb/files/scripts/wait-for-db.ts.template +0 -55
- package/src/ts/rdb/files/src/constants.ts.template +0 -8
- package/src/utils/agent-connection/files/core-a2a/agentcore-a2a-client.ts.template +0 -123
- package/src/utils/agent-connection/files/core-mcp/agentcore-mcp-client.ts.template +0 -128
- package/src/utils/agent-connection/files/py-core-a2a/agentcore_a2a_client.py.template +0 -120
- package/src/utils/agent-connection/files/py-core-mcp/agentcore_mcp_client.py.template +0 -89
- /package/src/utils/agent-connection/files/{core-runtime-config/with-session-id.ts.template → core-strands/base/with-session-id-strands.ts.template} +0 -0
- /package/src/utils/agent-connection/files/{py-core-runtime-config/with_session_id.py.template → py-core-strands/base/with_session_id_strands.py.template} +0 -0
- /package/src/utils/files/common/scripts/src/{index.ts.template → infra/index.ts.template} +0 -0
- /package/src/utils/files/common/scripts/src/{infra-deploy.ts.template → infra/infra-deploy.ts.template} +0 -0
- /package/src/utils/files/common/scripts/src/{infra-destroy.ts.template → infra/infra-destroy.ts.template} +0 -0
- /package/src/utils/files/common/scripts/src/{stage-credentials → infra/stage-credentials}/cdk-command.ts.template +0 -0
- /package/src/utils/files/common/scripts/src/{stage-credentials → infra/stage-credentials}/credentials.ts.template +0 -0
- /package/src/utils/files/common/scripts/src/{stage-credentials → infra/stage-credentials}/run.ts.template +0 -0
- /package/src/utils/files/common/scripts/src/{stage-credentials → infra/stage-credentials}/stage-parser.ts.template +0 -0
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
|
|
2
|
+
|
|
3
|
+
exports[`py#agent#a2a-connection generator > should match snapshot for agent-connection core files > agentcore_a2a_client_config.py 1`] = `
|
|
4
|
+
"from collections.abc import Callable
|
|
5
|
+
|
|
6
|
+
import boto3
|
|
7
|
+
import httpx
|
|
8
|
+
from a2a.client import ClientConfig
|
|
9
|
+
|
|
10
|
+
from .agentcore_endpoints import a2a_url_from_arn, region_from_arn
|
|
11
|
+
from .auth.session import jwt_auth, plain_auth, sigv4_auth
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def _config(url: str, auth: httpx.Auth) -> tuple[str, ClientConfig]:
|
|
15
|
+
httpx_client = httpx.AsyncClient(auth=auth, timeout=120)
|
|
16
|
+
return url, ClientConfig(httpx_client=httpx_client, streaming=False)
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class AgentCoreA2aClientConfig:
|
|
20
|
+
"""Factory for A2A client configs that connect to a Bedrock AgentCore
|
|
21
|
+
runtime. Each forwards the current async-context session via the AgentCore
|
|
22
|
+
session header. Framework-agnostic — wrap the result in a framework's
|
|
23
|
+
A2A client."""
|
|
24
|
+
|
|
25
|
+
@staticmethod
|
|
26
|
+
def with_iam_auth(agent_runtime_arn: str) -> tuple[str, ClientConfig]:
|
|
27
|
+
"""SigV4-authenticated A2A client config for a Bedrock AgentCore runtime."""
|
|
28
|
+
region = region_from_arn(agent_runtime_arn)
|
|
29
|
+
credentials = boto3.Session(region_name=region).get_credentials()
|
|
30
|
+
return _config(
|
|
31
|
+
a2a_url_from_arn(agent_runtime_arn), sigv4_auth(credentials, region)
|
|
32
|
+
)
|
|
33
|
+
|
|
34
|
+
@staticmethod
|
|
35
|
+
def with_jwt_auth(
|
|
36
|
+
agent_runtime_arn: str, access_token_provider: Callable[[], str]
|
|
37
|
+
) -> tuple[str, ClientConfig]:
|
|
38
|
+
"""Bearer-authenticated A2A client config for a Bedrock AgentCore runtime."""
|
|
39
|
+
return _config(
|
|
40
|
+
a2a_url_from_arn(agent_runtime_arn), jwt_auth(access_token_provider)
|
|
41
|
+
)
|
|
42
|
+
|
|
43
|
+
@staticmethod
|
|
44
|
+
def without_auth(url: str) -> tuple[str, ClientConfig]:
|
|
45
|
+
"""Plain-HTTP A2A client config — for local dev."""
|
|
46
|
+
return _config(url, plain_auth())
|
|
47
|
+
"
|
|
48
|
+
`;
|
|
49
|
+
|
|
50
|
+
exports[`py#agent#a2a-connection generator > should match snapshot for agent-connection core files > agentcore_a2a_client_strands.py 1`] = `
|
|
51
|
+
"from collections.abc import Callable
|
|
52
|
+
|
|
53
|
+
from strands.agent.a2a_agent import A2AAgent
|
|
54
|
+
|
|
55
|
+
from .agentcore_a2a_client_config import AgentCoreA2aClientConfig
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
def _build(config: tuple, *, name: str | None, description: str | None) -> A2AAgent:
|
|
59
|
+
url, client_config = config
|
|
60
|
+
kwargs: dict = {"endpoint": url, "client_config": client_config}
|
|
61
|
+
if name:
|
|
62
|
+
kwargs["name"] = name
|
|
63
|
+
if description:
|
|
64
|
+
kwargs["description"] = description
|
|
65
|
+
return A2AAgent(**kwargs)
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
class AgentCoreA2aClientStrands:
|
|
69
|
+
"""Factory for Strands A2A clients that connect to an AgentCore runtime."""
|
|
70
|
+
|
|
71
|
+
@staticmethod
|
|
72
|
+
def with_iam_auth(
|
|
73
|
+
agent_runtime_arn: str,
|
|
74
|
+
*,
|
|
75
|
+
name: str | None = None,
|
|
76
|
+
description: str | None = None,
|
|
77
|
+
) -> A2AAgent:
|
|
78
|
+
"""SigV4-authenticated client for a Bedrock AgentCore runtime."""
|
|
79
|
+
return _build(
|
|
80
|
+
AgentCoreA2aClientConfig.with_iam_auth(agent_runtime_arn),
|
|
81
|
+
name=name,
|
|
82
|
+
description=description,
|
|
83
|
+
)
|
|
84
|
+
|
|
85
|
+
@staticmethod
|
|
86
|
+
def with_jwt_auth(
|
|
87
|
+
agent_runtime_arn: str,
|
|
88
|
+
access_token_provider: Callable[[], str],
|
|
89
|
+
*,
|
|
90
|
+
name: str | None = None,
|
|
91
|
+
description: str | None = None,
|
|
92
|
+
) -> A2AAgent:
|
|
93
|
+
"""Bearer-authenticated client for a Bedrock AgentCore runtime."""
|
|
94
|
+
return _build(
|
|
95
|
+
AgentCoreA2aClientConfig.with_jwt_auth(
|
|
96
|
+
agent_runtime_arn, access_token_provider
|
|
97
|
+
),
|
|
98
|
+
name=name,
|
|
99
|
+
description=description,
|
|
100
|
+
)
|
|
101
|
+
|
|
102
|
+
@staticmethod
|
|
103
|
+
def without_auth(
|
|
104
|
+
url: str,
|
|
105
|
+
*,
|
|
106
|
+
name: str | None = None,
|
|
107
|
+
description: str | None = None,
|
|
108
|
+
) -> A2AAgent:
|
|
109
|
+
"""Plain-HTTP client — for local dev."""
|
|
110
|
+
return _build(
|
|
111
|
+
AgentCoreA2aClientConfig.without_auth(url),
|
|
112
|
+
name=name,
|
|
113
|
+
description=description,
|
|
114
|
+
)
|
|
115
|
+
"
|
|
116
|
+
`;
|
|
117
|
+
|
|
118
|
+
exports[`py#agent#a2a-connection generator > should match snapshot for agent-connection core files > remote_client_strands.py 1`] = `
|
|
119
|
+
"import os
|
|
120
|
+
|
|
121
|
+
from strands.agent.a2a_agent import A2AAgent
|
|
122
|
+
|
|
123
|
+
from test_agent_connection.core.agentcore_a2a_client_strands import (
|
|
124
|
+
AgentCoreA2aClientStrands,
|
|
125
|
+
)
|
|
126
|
+
from test_agent_connection.core.runtime_config import (
|
|
127
|
+
get_agentcore_runtime_config,
|
|
128
|
+
)
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
class RemoteClientStrands:
|
|
132
|
+
"""Strands client for the Remote A2A agent."""
|
|
133
|
+
|
|
134
|
+
@staticmethod
|
|
135
|
+
def create() -> A2AAgent:
|
|
136
|
+
if os.environ.get("SERVE_LOCAL") == "true":
|
|
137
|
+
return AgentCoreA2aClientStrands.without_auth("http://localhost:9001/")
|
|
138
|
+
config = get_agentcore_runtime_config()
|
|
139
|
+
agent_runtime_arn = config.get("agentRuntimes", {}).get("Remote")
|
|
140
|
+
if not agent_runtime_arn:
|
|
141
|
+
raise RuntimeError(
|
|
142
|
+
"No connected agent runtime named 'Remote' found in runtime configuration."
|
|
143
|
+
)
|
|
144
|
+
return AgentCoreA2aClientStrands.with_iam_auth(agent_runtime_arn)
|
|
145
|
+
"
|
|
146
|
+
`;
|
|
147
|
+
|
|
148
|
+
exports[`py#agent#a2a-connection generator > should match snapshot for agent-connection core files > session.py 1`] = `
|
|
149
|
+
"from collections.abc import Callable
|
|
150
|
+
|
|
151
|
+
import httpx
|
|
152
|
+
|
|
153
|
+
from ..session_context import get_current_session_id
|
|
154
|
+
from .sigv4 import SigV4HTTPXAuth
|
|
155
|
+
|
|
156
|
+
SESSION_HEADER = "X-Amzn-Bedrock-AgentCore-Runtime-Session-Id"
|
|
157
|
+
|
|
158
|
+
|
|
159
|
+
class SessionHeaderAuth(httpx.Auth):
|
|
160
|
+
"""Stamps the AgentCore session header from the current async context,
|
|
161
|
+
then delegates to an optional inner auth (e.g. SigV4)."""
|
|
162
|
+
|
|
163
|
+
requires_request_body = True
|
|
164
|
+
requires_response_body = True
|
|
165
|
+
|
|
166
|
+
def __init__(self, inner: httpx.Auth | None = None):
|
|
167
|
+
self._inner = inner
|
|
168
|
+
|
|
169
|
+
def auth_flow(self, request: httpx.Request): # type: ignore[override]
|
|
170
|
+
sid = get_current_session_id()
|
|
171
|
+
if sid:
|
|
172
|
+
request.headers[SESSION_HEADER] = sid
|
|
173
|
+
if self._inner is None:
|
|
174
|
+
yield request
|
|
175
|
+
return
|
|
176
|
+
yield from self._inner.auth_flow(request)
|
|
177
|
+
|
|
178
|
+
|
|
179
|
+
def sigv4_auth(
|
|
180
|
+
credentials, region: str, service: str = "bedrock-agentcore"
|
|
181
|
+
) -> httpx.Auth:
|
|
182
|
+
"""Session-forwarding SigV4 auth (per-request, body-aware)."""
|
|
183
|
+
return SessionHeaderAuth(SigV4HTTPXAuth(credentials, service, region))
|
|
184
|
+
|
|
185
|
+
|
|
186
|
+
def jwt_auth(access_token_provider: Callable[[], str]) -> httpx.Auth:
|
|
187
|
+
"""Session-forwarding bearer-token auth."""
|
|
188
|
+
|
|
189
|
+
class _Bearer(httpx.Auth):
|
|
190
|
+
def auth_flow(self, request: httpx.Request):
|
|
191
|
+
request.headers["Authorization"] = f"Bearer {access_token_provider()}"
|
|
192
|
+
yield request
|
|
193
|
+
|
|
194
|
+
return SessionHeaderAuth(_Bearer())
|
|
195
|
+
|
|
196
|
+
|
|
197
|
+
def plain_auth() -> httpx.Auth:
|
|
198
|
+
"""Session-forwarding plain auth — for local dev."""
|
|
199
|
+
return SessionHeaderAuth()
|
|
200
|
+
"
|
|
201
|
+
`;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import os
|
|
2
|
+
|
|
3
|
+
from strands.agent.a2a_agent import A2AAgent
|
|
4
|
+
|
|
5
|
+
from <%- agentConnectionModuleName %>.core.agentcore_a2a_client_strands import (
|
|
6
|
+
AgentCoreA2aClientStrands,
|
|
7
|
+
)
|
|
8
|
+
from <%- agentConnectionModuleName %>.core.runtime_config import (
|
|
9
|
+
get_agentcore_runtime_config,
|
|
10
|
+
)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class <%- targetAgentClassName %>ClientStrands:
|
|
14
|
+
"""Strands client for the <%- targetAgentClassName %> A2A agent."""
|
|
15
|
+
|
|
16
|
+
@staticmethod
|
|
17
|
+
def create() -> A2AAgent:
|
|
18
|
+
if os.environ.get("SERVE_LOCAL") == "true":
|
|
19
|
+
return AgentCoreA2aClientStrands.without_auth(
|
|
20
|
+
"http://localhost:<%- targetAgentPort %>/"
|
|
21
|
+
)
|
|
22
|
+
config = get_agentcore_runtime_config()
|
|
23
|
+
agent_runtime_arn = config.get("agentRuntimes", {}).get(
|
|
24
|
+
"<%- targetAgentClassName %>"
|
|
25
|
+
)
|
|
26
|
+
if not agent_runtime_arn:
|
|
27
|
+
raise RuntimeError(
|
|
28
|
+
"No connected agent runtime named '<%- targetAgentClassName %>' found in runtime configuration."
|
|
29
|
+
)
|
|
30
|
+
return AgentCoreA2aClientStrands.with_iam_auth(agent_runtime_arn)
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
3
3
|
* SPDX-License-Identifier: Apache-2.0
|
|
4
4
|
*/
|
|
5
|
-
import { GeneratorCallback, Tree } from '@nx/devkit';
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
5
|
+
import { type GeneratorCallback, type Tree } from '@nx/devkit';
|
|
6
|
+
import { type NxGeneratorInfo } from '../../../utils/nx';
|
|
7
|
+
import type { PyAgentA2aConnectionGeneratorSchema } from './schema';
|
|
8
8
|
export declare const PY_AGENT_A2A_CONNECTION_GENERATOR_INFO: NxGeneratorInfo;
|
|
9
9
|
export declare const pyAgentA2aConnectionGenerator: (tree: Tree, options: PyAgentA2aConnectionGeneratorSchema) => Promise<GeneratorCallback>;
|
|
10
10
|
export default pyAgentA2aConnectionGenerator;
|
|
@@ -6,13 +6,13 @@ exports.pyAgentA2aConnectionGenerator = exports.PY_AGENT_A2A_CONNECTION_GENERATO
|
|
|
6
6
|
* SPDX-License-Identifier: Apache-2.0
|
|
7
7
|
*/
|
|
8
8
|
const devkit_1 = require("@nx/devkit");
|
|
9
|
-
const
|
|
10
|
-
const
|
|
9
|
+
const agent_connection_1 = require("../../../utils/agent-connection/agent-connection");
|
|
10
|
+
const ast_1 = require("../../../utils/ast");
|
|
11
11
|
const format_1 = require("../../../utils/format");
|
|
12
|
+
const metrics_1 = require("../../../utils/metrics");
|
|
12
13
|
const names_1 = require("../../../utils/names");
|
|
14
|
+
const nx_1 = require("../../../utils/nx");
|
|
13
15
|
const py_1 = require("../../../utils/py");
|
|
14
|
-
const agent_connection_1 = require("../../../utils/agent-connection/agent-connection");
|
|
15
|
-
const ast_1 = require("../../../utils/ast");
|
|
16
16
|
/** Prefix a GritQL pattern with `language python` */
|
|
17
17
|
const py = (pattern) => `language python\n${pattern}`;
|
|
18
18
|
exports.PY_AGENT_A2A_CONNECTION_GENERATOR_INFO = (0, nx_1.getGeneratorInfo)(__filename);
|
|
@@ -38,12 +38,13 @@ const pyAgentA2aConnectionGenerator = async (tree, options) => {
|
|
|
38
38
|
// 1. Ensure the shared Python agent-connection project exists + has the
|
|
39
39
|
// A2A core client and its shared SigV4 auth helper.
|
|
40
40
|
await (0, agent_connection_1.ensurePythonAgentConnectionProject)(tree);
|
|
41
|
-
(0, agent_connection_1.addPythonCoreClient)(tree, '
|
|
42
|
-
(0, agent_connection_1.addPythonCoreClient)(tree, 'a2a');
|
|
41
|
+
await (0, agent_connection_1.addPythonCoreClient)(tree, 'a2a');
|
|
43
42
|
const agentConnectionProjectDir = (0, agent_connection_1.getPythonAgentConnectionProjectDir)(tree);
|
|
44
43
|
const agentConnectionModuleName = (0, agent_connection_1.getPythonAgentConnectionModuleName)(tree);
|
|
45
44
|
const agentConnectionPackageName = (0, agent_connection_1.getPythonAgentConnectionPackageName)(tree);
|
|
46
|
-
//
|
|
45
|
+
// Layer 0/1 deps for the A2A client config + shared auth helper, plus the
|
|
46
|
+
// Strands A2A extra the framework's A2A client needs (the base strands-agents
|
|
47
|
+
// dependency is added by addPythonCoreClient).
|
|
47
48
|
(0, py_1.addDependenciesToPyProjectToml)(tree, agentConnectionProjectDir, [
|
|
48
49
|
'boto3',
|
|
49
50
|
'httpx',
|
|
@@ -64,12 +65,12 @@ const pyAgentA2aConnectionGenerator = async (tree, options) => {
|
|
|
64
65
|
}
|
|
65
66
|
// Add re-export to module __init__.py
|
|
66
67
|
const moduleInitPath = (0, devkit_1.joinPathFragments)(agentConnectionProjectDir, agentConnectionModuleName, '__init__.py');
|
|
67
|
-
await (0, agent_connection_1.addPythonReExport)(tree, moduleInitPath, `.app.${targetAgentSnakeCase}
|
|
68
|
+
await (0, agent_connection_1.addPythonReExport)(tree, moduleInitPath, `.app.${targetAgentSnakeCase}_client_strands`, `${targetAgentClassName}ClientStrands`);
|
|
68
69
|
// 3. Transform agent.py to add the A2A client import + wrap it as a tool
|
|
69
70
|
const agentSourceDir = (0, devkit_1.joinPathFragments)(sourceProject.root, agentComponent.path ?? 'src');
|
|
70
71
|
const agentFilePath = (0, devkit_1.joinPathFragments)(agentSourceDir, 'agent.py');
|
|
71
72
|
if (tree.exists(agentFilePath)) {
|
|
72
|
-
const clientClassName = `${targetAgentClassName}
|
|
73
|
+
const clientClassName = `${targetAgentClassName}ClientStrands`;
|
|
73
74
|
const clientVarName = targetAgentSnakeCase;
|
|
74
75
|
const toolName = `ask_${targetAgentSnakeCase}`;
|
|
75
76
|
await addImportToAgentFile(tree, agentFilePath, agentConnectionModuleName, clientClassName);
|
|
@@ -133,7 +134,7 @@ const addToolToAgent = async (tree, filePath, toolName) => {
|
|
|
133
134
|
* top of the function body.
|
|
134
135
|
*/
|
|
135
136
|
const addClientToolToGetAgent = async (tree, filePath, clientClassName, clientVarName, toolName, targetAgentClassName) => {
|
|
136
|
-
if (await (0, ast_1.matchGritQL)(tree, filePath, `\`${clientClassName}.create\``)) {
|
|
137
|
+
if (await (0, ast_1.matchGritQL)(tree, filePath, py(`\`${clientClassName}.create\``))) {
|
|
137
138
|
return;
|
|
138
139
|
}
|
|
139
140
|
// The tool function we'll insert. Strands tools in Python are just
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../../packages/nx-plugin/src/py/agent/a2a-connection/generator.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACH,uCAQoB;
|
|
1
|
+
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../../packages/nx-plugin/src/py/agent/a2a-connection/generator.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACH,uCAQoB;AACpB,uFAO0D;AAC1D,4CAI4B;AAC5B,kDAA6D;AAC7D,oDAAyE;AACzE,gDAAiD;AACjD,0CAK2B;AAC3B,0CAG2B;AAG3B,qDAAqD;AACrD,MAAM,EAAE,GAAG,CAAC,OAAe,EAAE,EAAE,CAAC,oBAAoB,OAAO,EAAE,CAAC;AAEjD,QAAA,sCAAsC,GACjD,IAAA,qBAAgB,EAAC,UAAU,CAAC,CAAC;AAExB,MAAM,6BAA6B,GAAG,KAAK,EAChD,IAAU,EACV,OAA4C,EAChB,EAAE;IAC9B,MAAM,aAAa,GAAG,IAAA,wCAAmC,EACvD,IAAI,EACJ,OAAO,CAAC,aAAa,CACtB,CAAC;IACF,MAAM,aAAa,GAAG,IAAA,wCAAmC,EACvD,IAAI,EACJ,OAAO,CAAC,aAAa,CACtB,CAAC;IAEF,MAAM,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC;IAC/C,MAAM,oBAAoB,GAAG,OAAO,CAAC,eAAe,CAAC;IAErD,IAAI,CAAC,cAAc,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC7C,MAAM,IAAI,KAAK,CACb,2FAA2F,CAC5F,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,oBAAoB,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,KAAK,KAAK,EAAE,CAAC;QAClE,MAAM,IAAI,KAAK,CACb,iBAAiB,oBAAoB,CAAC,IAAI,cAAc,oBAAoB,CAAC,QAAQ,IAAI,MAAM,wDAAwD,CACxJ,CAAC;IACJ,CAAC;IAED,IACE,oBAAoB,CAAC,IAAI;QACzB,oBAAoB,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,KAAK,EACjD,CAAC;QACD,MAAM,IAAI,KAAK,CACb,yEAAyE,oBAAoB,CAAC,IAAI,WAAW,oBAAoB,CAAC,IAAI,mBAAmB,CAC1J,CAAC;IACJ,CAAC;IAED,MAAM,wBAAwB,GAAG,oBAAoB,CAAC,IAAI,IAAI,OAAO,CAAC;IACtE,MAAM,oBAAoB,GAAG,oBAAoB,CAAC,EAAY,CAAC;IAC/D,MAAM,oBAAoB,GAAG,IAAA,iBAAS,EAAC,oBAAoB,CAAC,CAAC;IAC7D,MAAM,eAAe,GAAG,oBAAoB,CAAC,IAAI,IAAI,IAAI,CAAC;IAE1D,wEAAwE;IACxE,uDAAuD;IACvD,MAAM,IAAA,qDAAkC,EAAC,IAAI,CAAC,CAAC;IAC/C,MAAM,IAAA,sCAAmB,EAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAEvC,MAAM,yBAAyB,GAAG,IAAA,qDAAkC,EAAC,IAAI,CAAC,CAAC;IAC3E,MAAM,yBAAyB,GAAG,IAAA,qDAAkC,EAAC,IAAI,CAAC,CAAC;IAC3E,MAAM,0BAA0B,GAAG,IAAA,sDAAmC,EAAC,IAAI,CAAC,CAAC;IAE7E,0EAA0E;IAC1E,8EAA8E;IAC9E,+CAA+C;IAC/C,IAAA,mCAA8B,EAAC,IAAI,EAAE,yBAAyB,EAAE;QAC9D,OAAO;QACP,OAAO;QACP,qBAAqB;KACtB,CAAC,CAAC;IAEH,iFAAiF;IACjF,MAAM,MAAM,GAAG,IAAA,0BAAiB,EAC9B,yBAAyB,EACzB,yBAAyB,EACzB,KAAK,CACN,CAAC;IACF,IAAA,sBAAa,EACX,IAAI,EACJ,IAAA,0BAAiB,EAAC,SAAS,EAAE,OAAO,EAAE,kBAAkB,EAAE,KAAK,CAAC,EAChE,MAAM,EACN;QACE,oBAAoB;QACpB,oBAAoB;QACpB,eAAe;QACf,yBAAyB;KAC1B,EACD,EAAE,iBAAiB,EAAE,0BAAiB,CAAC,YAAY,EAAE,CACtD,CAAC;IAEF,gCAAgC;IAChC,MAAM,WAAW,GAAG,IAAA,0BAAiB,EAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAC7D,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC;QAC9B,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IAC9B,CAAC;IAED,sCAAsC;IACtC,MAAM,cAAc,GAAG,IAAA,0BAAiB,EACtC,yBAAyB,EACzB,yBAAyB,EACzB,aAAa,CACd,CAAC;IACF,MAAM,IAAA,oCAAiB,EACrB,IAAI,EACJ,cAAc,EACd,QAAQ,oBAAoB,iBAAiB,EAC7C,GAAG,oBAAoB,eAAe,CACvC,CAAC;IAEF,yEAAyE;IACzE,MAAM,cAAc,GAAG,IAAA,0BAAiB,EACtC,aAAa,CAAC,IAAI,EAClB,cAAc,CAAC,IAAI,IAAI,KAAK,CAC7B,CAAC;IACF,MAAM,aAAa,GAAG,IAAA,0BAAiB,EAAC,cAAc,EAAE,UAAU,CAAC,CAAC;IAEpE,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC;QAC/B,MAAM,eAAe,GAAG,GAAG,oBAAoB,eAAe,CAAC;QAC/D,MAAM,aAAa,GAAG,oBAAoB,CAAC;QAC3C,MAAM,QAAQ,GAAG,OAAO,oBAAoB,EAAE,CAAC;QAE/C,MAAM,oBAAoB,CACxB,IAAI,EACJ,aAAa,EACb,yBAAyB,EACzB,eAAe,CAChB,CAAC;QACF,MAAM,cAAc,CAAC,IAAI,EAAE,aAAa,EAAE,QAAQ,CAAC,CAAC;QACpD,MAAM,uBAAuB,CAC3B,IAAI,EACJ,aAAa,EACb,eAAe,EACf,aAAa,EACb,QAAQ,EACR,oBAAoB,CACrB,CAAC;IACJ,CAAC;IAED,6EAA6E;IAC7E,IAAA,sCAAiC,EAC/B,IAAI,EACJ,aAAa,CAAC,IAAI,EAClB,0BAA0B,CAC3B,CAAC;IAEF,0EAA0E;IAC1E,MAAM,SAAS,GAAG,cAAc,CAAC,IAAI,IAAI,OAAO,CAAC;IACjD,MAAM,oBAAoB,GAAG,GAAG,SAAS,cAAc,CAAC;IACxD,MAAM,0BAA0B,GAAG,GAAG,wBAAwB,cAAc,CAAC;IAE7E,IAAI,aAAa,CAAC,OAAO,EAAE,CAAC,oBAAoB,CAAC,EAAE,CAAC;QAClD,IAAA,sCAAiC,EAAC,aAAa,EAAE,oBAAoB,EAAE;YACrE,QAAQ,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC;YAC9B,MAAM,EAAE,0BAA0B;SACnC,CAAC,CAAC;QACH,IAAA,mCAA0B,EAAC,IAAI,EAAE,aAAa,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;IACtE,CAAC;IAED,MAAM,IAAA,yCAA+B,EAAC,IAAI,EAAE;QAC1C,8CAAsC;KACvC,CAAC,CAAC;IAEH,MAAM,IAAA,6BAAoB,EAAC,IAAI,CAAC,CAAC;IACjC,OAAO,GAAG,EAAE;QACV,IAAA,4BAAmB,EAAC,IAAI,CAAC,CAAC;IAC5B,CAAC,CAAC;AACJ,CAAC,CAAC;AA3JW,QAAA,6BAA6B,iCA2JxC;AAEF;;;;GAIG;AACH,MAAM,oBAAoB,GAAG,KAAK,EAChC,IAAU,EACV,QAAgB,EAChB,yBAAiC,EACjC,eAAuB,EACR,EAAE;IACjB,MAAM,IAAA,iCAA2B,EAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC,CAAC;IACvE,MAAM,IAAA,iCAA2B,EAC/B,IAAI,EACJ,QAAQ,EACR,CAAC,eAAe,CAAC,EACjB,yBAAyB,CAC1B,CAAC;AACJ,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,cAAc,GAAG,KAAK,EAC1B,IAAU,EACV,QAAgB,EAChB,QAAgB,EACD,EAAE;IACjB,MAAM,IAAA,iBAAW,EACf,IAAI,EACJ,QAAQ,EACR,EAAE,CAAC;;2BAEoB,QAAQ;;iBAElB,QAAQ;;iDAEwB,QAAQ;;EAEvD,CAAC,CACA,CAAC;AACJ,CAAC,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,uBAAuB,GAAG,KAAK,EACnC,IAAU,EACV,QAAgB,EAChB,eAAuB,EACvB,aAAqB,EACrB,QAAgB,EAChB,oBAA4B,EACb,EAAE;IACjB,IAAI,MAAM,IAAA,iBAAW,EAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,CAAC,KAAK,eAAe,WAAW,CAAC,CAAC,EAAE,CAAC;QAC3E,OAAO;IACT,CAAC;IAED,mEAAmE;IACnE,oEAAoE;IACpE,sEAAsE;IACtE,MAAM,SAAS,GAAG,GAAG,aAAa,MAAM,eAAe;;;UAG/C,QAAQ;+CAC6B,oBAAoB;qBAC9C,aAAa;CACjC,CAAC;IAEA,kEAAkE;IAClE,yEAAyE;IACzE,yCAAyC;IACzC,MAAM,IAAA,iBAAW,EACf,IAAI,EACJ,QAAQ,EACR,EAAE,CAAC;;;4BAGqB,eAAe;;MAErC,SAAS;YACH,CAAC,CACV,CAAC;AACJ,CAAC,CAAC;AAEF,kBAAe,qCAA6B,CAAC"}
|
|
@@ -2,6 +2,7 @@ from contextlib import contextmanager
|
|
|
2
2
|
|
|
3
3
|
from strands import Agent, tool
|
|
4
4
|
from strands_tools import current_time
|
|
5
|
+
from <%- agentConnectionModuleName %> import log_model_errors
|
|
5
6
|
|
|
6
7
|
|
|
7
8
|
@tool
|
|
@@ -20,4 +21,5 @@ Use your tools for mathematical tasks.
|
|
|
20
21
|
Refer to tools as your 'spellbook'.
|
|
21
22
|
""",
|
|
22
23
|
tools=[subtract, current_time],
|
|
24
|
+
hooks=[log_model_errors],
|
|
23
25
|
)
|
|
@@ -1,11 +1,10 @@
|
|
|
1
|
+
import logging
|
|
1
2
|
from collections.abc import AsyncIterator
|
|
2
3
|
from typing import Any
|
|
3
4
|
|
|
4
5
|
from fastapi import FastAPI
|
|
5
6
|
from fastapi.middleware.cors import CORSMiddleware
|
|
6
|
-
from fastapi.openapi.utils import get_openapi
|
|
7
7
|
from fastapi.responses import JSONResponse, StreamingResponse
|
|
8
|
-
from fastapi.routing import APIRoute
|
|
9
8
|
from pydantic import BaseModel
|
|
10
9
|
from starlette.middleware.exceptions import ExceptionMiddleware
|
|
11
10
|
|
|
@@ -61,7 +60,11 @@ class JsonStreamingResponse(StreamingResponse):
|
|
|
61
60
|
}
|
|
62
61
|
|
|
63
62
|
|
|
64
|
-
app = FastAPI(
|
|
63
|
+
app = FastAPI(
|
|
64
|
+
title="<%= agentNameClassName %>",
|
|
65
|
+
responses={500: {"model": InternalServerErrorDetails}},
|
|
66
|
+
generate_unique_id_function=lambda route: route.name,
|
|
67
|
+
)
|
|
65
68
|
|
|
66
69
|
# Add cors middleware
|
|
67
70
|
app.add_middleware(CORSMiddleware, allow_origins=["*"], allow_methods=["*"], allow_headers=["*"])
|
|
@@ -72,28 +75,7 @@ app.add_middleware(ExceptionMiddleware, handlers=app.exception_handlers)
|
|
|
72
75
|
|
|
73
76
|
@app.exception_handler(Exception)
|
|
74
77
|
async def unhandled_exception_handler(request, err):
|
|
75
|
-
|
|
76
|
-
print(err)
|
|
78
|
+
logging.exception("Unhandled exception while handling request")
|
|
77
79
|
return JSONResponse(
|
|
78
80
|
status_code=500, content=InternalServerErrorDetails(detail="Internal Server Error").model_dump()
|
|
79
81
|
)
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
def custom_openapi() -> dict[str, Any]:
|
|
83
|
-
if app.openapi_schema:
|
|
84
|
-
return app.openapi_schema
|
|
85
|
-
for route in app.routes:
|
|
86
|
-
if isinstance(route, APIRoute):
|
|
87
|
-
route.operation_id = route.name
|
|
88
|
-
openapi_schema = get_openapi(
|
|
89
|
-
title=app.title,
|
|
90
|
-
version=app.version,
|
|
91
|
-
openapi_version=app.openapi_version,
|
|
92
|
-
description=app.description,
|
|
93
|
-
routes=app.routes,
|
|
94
|
-
)
|
|
95
|
-
app.openapi_schema = openapi_schema
|
|
96
|
-
return app.openapi_schema
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
app.openapi = custom_openapi # ty: ignore[invalid-assignment]
|
|
@@ -3,7 +3,7 @@ import uuid
|
|
|
3
3
|
import uvicorn
|
|
4
4
|
from bedrock_agentcore.runtime.models import PingStatus
|
|
5
5
|
from fastapi import Request
|
|
6
|
-
from pydantic import BaseModel
|
|
6
|
+
from pydantic import BaseModel, Field
|
|
7
7
|
from starlette.middleware.base import BaseHTTPMiddleware
|
|
8
8
|
from <%- agentConnectionModuleName %> import session_id_context, with_session_id
|
|
9
9
|
|
|
@@ -21,7 +21,7 @@ _agent = _agent_ctx.__enter__()
|
|
|
21
21
|
|
|
22
22
|
|
|
23
23
|
class InvokeInput(BaseModel):
|
|
24
|
-
message: str
|
|
24
|
+
message: str = Field(max_length=100000)
|
|
25
25
|
|
|
26
26
|
|
|
27
27
|
class StreamChunk(BaseModel):
|
|
@@ -32,7 +32,6 @@ async def handle_invoke(input: InvokeInput):
|
|
|
32
32
|
"""Streaming handler for agent invocation"""
|
|
33
33
|
stream = _agent.stream_async(input.message)
|
|
34
34
|
async for event in stream:
|
|
35
|
-
print(event)
|
|
36
35
|
text = event.get("event", {}).get("contentBlockDelta", {}).get("delta", {}).get("text")
|
|
37
36
|
if text is not None:
|
|
38
37
|
yield StreamChunk(content=text)
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
|
|
2
|
+
|
|
3
|
+
exports[`py#agent#gateway-connection generator > should match snapshot for agent-connection core files > agentcore_gateway_mcp_client_strands.py 1`] = `
|
|
4
|
+
"from strands.tools.mcp.mcp_client import MCPClient
|
|
5
|
+
|
|
6
|
+
from .agentcore_gateway_mcp_transport import AgentCoreGatewayMCPTransport
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class AgentCoreGatewayMCPClientStrands:
|
|
10
|
+
"""Factory for Strands MCP clients that connect to an AgentCore Gateway."""
|
|
11
|
+
|
|
12
|
+
@staticmethod
|
|
13
|
+
def with_iam_auth(
|
|
14
|
+
gateway_url: str,
|
|
15
|
+
region: str | None = None,
|
|
16
|
+
) -> MCPClient:
|
|
17
|
+
"""Create a gateway MCP client authenticated with IAM SigV4."""
|
|
18
|
+
return MCPClient(
|
|
19
|
+
AgentCoreGatewayMCPTransport.with_iam_auth(gateway_url, region)
|
|
20
|
+
)
|
|
21
|
+
|
|
22
|
+
@staticmethod
|
|
23
|
+
def without_auth(gateway_url: str) -> MCPClient:
|
|
24
|
+
"""Plain-HTTP gateway client, for the local gateway started by serve-local."""
|
|
25
|
+
return MCPClient(AgentCoreGatewayMCPTransport.without_auth(gateway_url))
|
|
26
|
+
"
|
|
27
|
+
`;
|
|
28
|
+
|
|
29
|
+
exports[`py#agent#gateway-connection generator > should match snapshot for agent-connection core files > agentcore_gateway_mcp_transport.py 1`] = `
|
|
30
|
+
"from .agentcore_endpoints import region_from_gateway_url
|
|
31
|
+
from .agentcore_transport import (
|
|
32
|
+
TransportFactory,
|
|
33
|
+
no_auth_transport,
|
|
34
|
+
sigv4_transport,
|
|
35
|
+
)
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
class AgentCoreGatewayMCPTransport:
|
|
39
|
+
"""Factory for MCP transport factories that connect to an AgentCore Gateway.
|
|
40
|
+
Forwards the current async-context session via the AgentCore session header,
|
|
41
|
+
which the gateway propagates to downstream MCP server targets.
|
|
42
|
+
"""
|
|
43
|
+
|
|
44
|
+
@staticmethod
|
|
45
|
+
def with_iam_auth(
|
|
46
|
+
gateway_url: str,
|
|
47
|
+
region: str | None = None,
|
|
48
|
+
) -> TransportFactory:
|
|
49
|
+
"""Create a gateway MCP transport authenticated with IAM SigV4."""
|
|
50
|
+
return sigv4_transport(
|
|
51
|
+
gateway_url, region or region_from_gateway_url(gateway_url)
|
|
52
|
+
)
|
|
53
|
+
|
|
54
|
+
@staticmethod
|
|
55
|
+
def without_auth(gateway_url: str) -> TransportFactory:
|
|
56
|
+
"""Plain-HTTP gateway transport, for the local gateway started by serve-local."""
|
|
57
|
+
return no_auth_transport(gateway_url)
|
|
58
|
+
"
|
|
59
|
+
`;
|
|
60
|
+
|
|
61
|
+
exports[`py#agent#gateway-connection generator > should match snapshot for agent-connection core files > agentcore_transport.py 1`] = `
|
|
62
|
+
"from collections.abc import Callable
|
|
63
|
+
from typing import Any
|
|
64
|
+
|
|
65
|
+
import boto3
|
|
66
|
+
|
|
67
|
+
from mcp.client.streamable_http import streamablehttp_client
|
|
68
|
+
|
|
69
|
+
from .auth.session import jwt_auth, plain_auth, sigv4_auth
|
|
70
|
+
|
|
71
|
+
# Agent frameworks wrap a transport *factory* — a no-arg callable returning a
|
|
72
|
+
# streamable-HTTP transport context manager. Typed as \`\`Any\`\` so this layer
|
|
73
|
+
# stays free of any framework-specific transport type.
|
|
74
|
+
TransportFactory = Callable[[], Any]
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
def _factory(url: str, auth) -> TransportFactory:
|
|
78
|
+
return lambda: streamablehttp_client(
|
|
79
|
+
url,
|
|
80
|
+
auth=auth,
|
|
81
|
+
timeout=120,
|
|
82
|
+
terminate_on_close=False,
|
|
83
|
+
)
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
def sigv4_transport(url: str, region: str) -> TransportFactory:
|
|
87
|
+
"""SigV4-signed transport factory for a resolved AgentCore endpoint."""
|
|
88
|
+
credentials = boto3.Session(region_name=region).get_credentials()
|
|
89
|
+
return _factory(url, sigv4_auth(credentials, region))
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
def jwt_transport(
|
|
93
|
+
url: str, access_token_provider: Callable[[], str]
|
|
94
|
+
) -> TransportFactory:
|
|
95
|
+
"""Bearer-token transport factory for a resolved AgentCore endpoint."""
|
|
96
|
+
return _factory(url, jwt_auth(access_token_provider))
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
def no_auth_transport(url: str) -> TransportFactory:
|
|
100
|
+
"""Plain-HTTP transport factory — for local dev."""
|
|
101
|
+
return _factory(url, plain_auth())
|
|
102
|
+
"
|
|
103
|
+
`;
|
|
104
|
+
|
|
105
|
+
exports[`py#agent#gateway-connection generator > should match snapshot for agent-connection core files > my_gateway_client_strands.py 1`] = `
|
|
106
|
+
"import os
|
|
107
|
+
|
|
108
|
+
from strands.tools.mcp.mcp_client import MCPClient
|
|
109
|
+
|
|
110
|
+
from proj_agent_connection.core.agentcore_gateway_mcp_client_strands import (
|
|
111
|
+
AgentCoreGatewayMCPClientStrands,
|
|
112
|
+
)
|
|
113
|
+
from proj_agent_connection.core.runtime_config import (
|
|
114
|
+
get_agentcore_runtime_config,
|
|
115
|
+
)
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
class MyGatewayClientStrands:
|
|
119
|
+
"""Strands client for the MyGateway AgentCore Gateway.
|
|
120
|
+
|
|
121
|
+
Deployed: a SigV4-signed MCP client pointing at the gateway URL.
|
|
122
|
+
Local (\`\`SERVE_LOCAL=true\`\`): a plain-HTTP client pointing at the local
|
|
123
|
+
gateway started by the gateway project's serve-local target. The local
|
|
124
|
+
gateway aggregates every attached MCP server but does not evaluate
|
|
125
|
+
Cedar policies.
|
|
126
|
+
"""
|
|
127
|
+
|
|
128
|
+
@staticmethod
|
|
129
|
+
def create() -> MCPClient:
|
|
130
|
+
if os.environ.get("SERVE_LOCAL") == "true":
|
|
131
|
+
return AgentCoreGatewayMCPClientStrands.without_auth(
|
|
132
|
+
gateway_url="http://localhost:8100/mcp"
|
|
133
|
+
)
|
|
134
|
+
config = get_agentcore_runtime_config()
|
|
135
|
+
gateway_url = config.get("gateways", {}).get("MyGateway")
|
|
136
|
+
if not gateway_url:
|
|
137
|
+
raise RuntimeError(
|
|
138
|
+
"No connected gateway named 'MyGateway' found in runtime configuration."
|
|
139
|
+
)
|
|
140
|
+
return AgentCoreGatewayMCPClientStrands.with_iam_auth(gateway_url=gateway_url)
|
|
141
|
+
"
|
|
142
|
+
`;
|
|
143
|
+
|
|
144
|
+
exports[`py#agent#gateway-connection generator > should match snapshot for agent-connection core files > session.py 1`] = `
|
|
145
|
+
"from collections.abc import Callable
|
|
146
|
+
|
|
147
|
+
import httpx
|
|
148
|
+
|
|
149
|
+
from ..session_context import get_current_session_id
|
|
150
|
+
from .sigv4 import SigV4HTTPXAuth
|
|
151
|
+
|
|
152
|
+
SESSION_HEADER = "X-Amzn-Bedrock-AgentCore-Runtime-Session-Id"
|
|
153
|
+
|
|
154
|
+
|
|
155
|
+
class SessionHeaderAuth(httpx.Auth):
|
|
156
|
+
"""Stamps the AgentCore session header from the current async context,
|
|
157
|
+
then delegates to an optional inner auth (e.g. SigV4)."""
|
|
158
|
+
|
|
159
|
+
requires_request_body = True
|
|
160
|
+
requires_response_body = True
|
|
161
|
+
|
|
162
|
+
def __init__(self, inner: httpx.Auth | None = None):
|
|
163
|
+
self._inner = inner
|
|
164
|
+
|
|
165
|
+
def auth_flow(self, request: httpx.Request): # type: ignore[override]
|
|
166
|
+
sid = get_current_session_id()
|
|
167
|
+
if sid:
|
|
168
|
+
request.headers[SESSION_HEADER] = sid
|
|
169
|
+
if self._inner is None:
|
|
170
|
+
yield request
|
|
171
|
+
return
|
|
172
|
+
yield from self._inner.auth_flow(request)
|
|
173
|
+
|
|
174
|
+
|
|
175
|
+
def sigv4_auth(
|
|
176
|
+
credentials, region: str, service: str = "bedrock-agentcore"
|
|
177
|
+
) -> httpx.Auth:
|
|
178
|
+
"""Session-forwarding SigV4 auth (per-request, body-aware)."""
|
|
179
|
+
return SessionHeaderAuth(SigV4HTTPXAuth(credentials, service, region))
|
|
180
|
+
|
|
181
|
+
|
|
182
|
+
def jwt_auth(access_token_provider: Callable[[], str]) -> httpx.Auth:
|
|
183
|
+
"""Session-forwarding bearer-token auth."""
|
|
184
|
+
|
|
185
|
+
class _Bearer(httpx.Auth):
|
|
186
|
+
def auth_flow(self, request: httpx.Request):
|
|
187
|
+
request.headers["Authorization"] = f"Bearer {access_token_provider()}"
|
|
188
|
+
yield request
|
|
189
|
+
|
|
190
|
+
return SessionHeaderAuth(_Bearer())
|
|
191
|
+
|
|
192
|
+
|
|
193
|
+
def plain_auth() -> httpx.Auth:
|
|
194
|
+
"""Session-forwarding plain auth — for local dev."""
|
|
195
|
+
return SessionHeaderAuth()
|
|
196
|
+
"
|
|
197
|
+
`;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import os
|
|
2
|
+
|
|
3
|
+
from strands.tools.mcp.mcp_client import MCPClient
|
|
4
|
+
|
|
5
|
+
from <%- agentConnectionModuleName %>.core.agentcore_gateway_mcp_client_strands import (
|
|
6
|
+
AgentCoreGatewayMCPClientStrands,
|
|
7
|
+
)
|
|
8
|
+
from <%- agentConnectionModuleName %>.core.runtime_config import (
|
|
9
|
+
get_agentcore_runtime_config,
|
|
10
|
+
)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class <%- gatewayClassName %>ClientStrands:
|
|
14
|
+
"""Strands client for the <%- gatewayClassName %> AgentCore Gateway.
|
|
15
|
+
|
|
16
|
+
Deployed: a SigV4-signed MCP client pointing at the gateway URL.
|
|
17
|
+
Local (``SERVE_LOCAL=true``): a plain-HTTP client pointing at the local
|
|
18
|
+
gateway started by the gateway project's serve-local target. The local
|
|
19
|
+
gateway aggregates every attached MCP server but does not evaluate
|
|
20
|
+
Cedar policies.
|
|
21
|
+
"""
|
|
22
|
+
|
|
23
|
+
@staticmethod
|
|
24
|
+
def create() -> MCPClient:
|
|
25
|
+
if os.environ.get("SERVE_LOCAL") == "true":
|
|
26
|
+
return AgentCoreGatewayMCPClientStrands.without_auth(
|
|
27
|
+
gateway_url="http://localhost:<%- gatewayPort %>/mcp"
|
|
28
|
+
)
|
|
29
|
+
config = get_agentcore_runtime_config()
|
|
30
|
+
gateway_url = config.get("gateways", {}).get("<%- gatewayClassName %>")
|
|
31
|
+
if not gateway_url:
|
|
32
|
+
raise RuntimeError(
|
|
33
|
+
"No connected gateway named '<%- gatewayClassName %>' found in runtime configuration."
|
|
34
|
+
)
|
|
35
|
+
return AgentCoreGatewayMCPClientStrands.with_iam_auth(gateway_url=gateway_url)
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
3
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
*/
|
|
5
|
+
import { type GeneratorCallback, type Tree } from '@nx/devkit';
|
|
6
|
+
import { type NxGeneratorInfo } from '../../../utils/nx';
|
|
7
|
+
import type { PyAgentGatewayConnectionGeneratorSchema } from './schema';
|
|
8
|
+
export declare const PY_AGENT_GATEWAY_CONNECTION_GENERATOR_INFO: NxGeneratorInfo;
|
|
9
|
+
export declare const pyAgentGatewayConnectionGenerator: (tree: Tree, options: PyAgentGatewayConnectionGeneratorSchema) => Promise<GeneratorCallback>;
|
|
10
|
+
export default pyAgentGatewayConnectionGenerator;
|