@aws/nx-plugin 1.0.0-rc.22 → 1.0.0-rc.24
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 +2088 -971
- package/package.json +25 -10
- package/src/agentcore-gateway/attach-upstream.d.ts +7 -7
- package/src/agentcore-gateway/attach-upstream.js +19 -22
- package/src/agentcore-gateway/attach-upstream.js.map +1 -1
- package/src/agentcore-gateway/gateway-connection/generator.d.ts +3 -3
- package/src/agentcore-gateway/gateway-connection/generator.js +42 -45
- package/src/agentcore-gateway/gateway-connection/generator.js.map +1 -1
- package/src/agentcore-gateway/gateway-connection/schema.d.js +6 -0
- package/src/agentcore-gateway/gateway-connection/schema.d.js.map +1 -0
- package/src/agentcore-gateway/generator.js +89 -72
- package/src/agentcore-gateway/generator.js.map +1 -1
- package/src/agentcore-gateway/mcp-connection/generator.d.ts +2 -2
- package/src/agentcore-gateway/mcp-connection/generator.js +24 -30
- package/src/agentcore-gateway/mcp-connection/generator.js.map +1 -1
- package/src/agentcore-gateway/mcp-connection/schema.d.js +6 -0
- package/src/agentcore-gateway/mcp-connection/schema.d.js.map +1 -0
- package/src/agentcore-gateway/schema.d.js +6 -0
- package/src/agentcore-gateway/schema.d.js.map +1 -0
- package/src/bin/aws-nx-mcp.js +14 -0
- package/src/bin/aws-nx-mcp.js.map +1 -0
- package/src/connection/{agent-serve-local.d.ts → agent-local-dev.d.ts} +5 -5
- package/src/connection/agent-local-dev.js +42 -0
- package/src/connection/agent-local-dev.js.map +1 -0
- package/src/connection/agent-runtime-config.js +9 -14
- package/src/connection/agent-runtime-config.js.map +1 -1
- package/src/connection/generator.js +262 -207
- package/src/connection/generator.js.map +1 -1
- package/src/connection/{serve-local.d.ts → local-dev.d.ts} +3 -3
- package/src/connection/local-dev.js +37 -0
- package/src/connection/local-dev.js.map +1 -0
- package/src/connection/schema.d.js +6 -0
- package/src/connection/schema.d.js.map +1 -0
- package/src/index.js +2 -5
- package/src/index.js.map +1 -1
- package/src/infra/app/__snapshots__/generator.spec.ts.snap +4 -26
- package/src/infra/app/generator.js +133 -123
- package/src/infra/app/generator.js.map +1 -1
- package/src/infra/app/schema.d.js +6 -0
- package/src/infra/app/schema.d.js.map +1 -0
- package/src/license/config-types.js +5 -3
- package/src/license/config-types.js.map +1 -1
- package/src/license/config.d.ts +1 -1
- package/src/license/config.js +267 -242
- package/src/license/config.js.map +1 -1
- package/src/license/dependency-check/check.js +51 -46
- package/src/license/dependency-check/check.js.map +1 -1
- package/src/license/dependency-check/collectors/collector.js +41 -71
- package/src/license/dependency-check/collectors/collector.js.map +1 -1
- package/src/license/dependency-check/collectors/npm-collector.js +34 -41
- package/src/license/dependency-check/collectors/npm-collector.js.map +1 -1
- package/src/license/dependency-check/collectors/python-collector.js +55 -62
- package/src/license/dependency-check/collectors/python-collector.js.map +1 -1
- package/src/license/dependency-check/evaluator.js +40 -68
- package/src/license/dependency-check/evaluator.js.map +1 -1
- package/src/license/dependency-check/executor.js +30 -22
- package/src/license/dependency-check/executor.js.map +1 -1
- package/src/license/dependency-check/pre-approved.js +949 -336
- package/src/license/dependency-check/pre-approved.js.map +1 -1
- package/src/license/dependency-check/types.js +2 -3
- package/src/license/dependency-check/types.js.map +1 -1
- package/src/license/generator.js +55 -60
- package/src/license/generator.js.map +1 -1
- package/src/license/index.js +3 -9
- package/src/license/index.js.map +1 -1
- package/src/license/known-exceptions.js +14 -13
- package/src/license/known-exceptions.js.map +1 -1
- package/src/license/schema.d.js +6 -0
- package/src/license/schema.d.js.map +1 -0
- package/src/license/sync/generator.js +94 -119
- package/src/license/sync/generator.js.map +1 -1
- package/src/license/sync/project-file-sync.js +28 -35
- package/src/license/sync/project-file-sync.js.map +1 -1
- package/src/mcp-server/generator-info.js +130 -160
- package/src/mcp-server/generator-info.js.map +1 -1
- package/src/mcp-server/guide-pipeline.js +184 -206
- package/src/mcp-server/guide-pipeline.js.map +1 -1
- package/src/mcp-server/guide-render.js +10 -25
- package/src/mcp-server/guide-render.js.map +1 -1
- package/src/mcp-server/index.js +6 -10
- package/src/mcp-server/index.js.map +1 -1
- package/src/mcp-server/mdx-ast.js +39 -57
- package/src/mcp-server/mdx-ast.js.map +1 -1
- package/src/mcp-server/option-filter.js +33 -47
- package/src/mcp-server/option-filter.js.map +1 -1
- package/src/mcp-server/schema-registry.js +27 -40
- package/src/mcp-server/schema-registry.js.map +1 -1
- package/src/mcp-server/schema.js +9 -7
- package/src/mcp-server/schema.js.map +1 -1
- package/src/mcp-server/server.js +20 -24
- package/src/mcp-server/server.js.map +1 -1
- package/src/mcp-server/tools/create-workspace-command.js +23 -24
- package/src/mcp-server/tools/create-workspace-command.js.map +1 -1
- package/src/mcp-server/tools/general-guidance.js +28 -25
- package/src/mcp-server/tools/general-guidance.js.map +1 -1
- package/src/mcp-server/tools/generator-guide.js +29 -37
- package/src/mcp-server/tools/generator-guide.js.map +1 -1
- package/src/mcp-server/tools/list-generators.js +19 -25
- package/src/mcp-server/tools/list-generators.js.map +1 -1
- package/src/open-api/ts-client/generator.js +16 -26
- package/src/open-api/ts-client/generator.js.map +1 -1
- package/src/open-api/ts-client/schema.d.js +6 -0
- package/src/open-api/ts-client/schema.d.js.map +1 -0
- package/src/open-api/ts-hooks/generator.js +13 -21
- package/src/open-api/ts-hooks/generator.js.map +1 -1
- package/src/open-api/ts-hooks/schema.d.js +6 -0
- package/src/open-api/ts-hooks/schema.d.js.map +1 -0
- package/src/open-api/ts-metadata/generator.js +12 -20
- package/src/open-api/ts-metadata/generator.js.map +1 -1
- package/src/open-api/ts-metadata/schema.d.js +6 -0
- package/src/open-api/ts-metadata/schema.d.js.map +1 -0
- package/src/open-api/utils/codegen-data/languages.js +42 -60
- package/src/open-api/utils/codegen-data/languages.js.map +1 -1
- package/src/open-api/utils/codegen-data/types.js +31 -30
- package/src/open-api/utils/codegen-data/types.js.map +1 -1
- package/src/open-api/utils/codegen-data.js +253 -269
- package/src/open-api/utils/codegen-data.js.map +1 -1
- package/src/open-api/utils/normalise.js +242 -241
- package/src/open-api/utils/normalise.js.map +1 -1
- package/src/open-api/utils/parse.js +8 -14
- package/src/open-api/utils/parse.js.map +1 -1
- package/src/open-api/utils/refs.js +12 -22
- package/src/open-api/utils/refs.js.map +1 -1
- package/src/open-api/utils/types.js +5 -2
- package/src/open-api/utils/types.js.map +1 -1
- package/src/preset/__snapshots__/generator.spec.ts.snap +31 -6
- package/src/preset/generator.d.ts +1 -1
- package/src/preset/generator.js +130 -112
- package/src/preset/generator.js.map +1 -1
- package/src/preset/schema.d.js +6 -0
- package/src/preset/schema.d.js.map +1 -0
- package/src/preset/schema.d.ts +0 -1
- package/src/preset/schema.json +0 -5
- package/src/py/agent/__snapshots__/generator.constructs.spec.ts.snap +304 -0
- package/src/py/agent/__snapshots__/{generator.spec.ts.snap → generator.frameworks.spec.ts.snap} +18 -845
- package/src/py/agent/__snapshots__/generator.protocols.spec.ts.snap +535 -0
- package/src/py/agent/a2a-connection/__snapshots__/generator.spec.ts.snap +1 -2
- package/src/py/agent/a2a-connection/files/agent-connection/app/__targetAgentSnakeCase___client_strands.py.template +1 -1
- package/src/py/agent/a2a-connection/files/langchain/agent-connection/app/__targetAgentSnakeCase___client_langchain.py.template +1 -1
- package/src/py/agent/a2a-connection/generator.js +70 -75
- package/src/py/agent/a2a-connection/generator.js.map +1 -1
- package/src/py/agent/a2a-connection/schema.d.js +8 -0
- package/src/py/agent/a2a-connection/schema.d.js.map +1 -0
- package/src/py/agent/files/ag-ui-langchain/main.py.template +10 -0
- package/src/py/agent/gateway-connection/__snapshots__/generator.spec.ts.snap +6 -8
- package/src/py/agent/gateway-connection/files/agent-connection/app/__gatewaySnakeCase___client_strands.py.template +3 -3
- package/src/py/agent/gateway-connection/files/langchain/agent-connection/app/__gatewaySnakeCase___client_langchain.py.template +3 -3
- package/src/py/agent/gateway-connection/generator.js +61 -58
- package/src/py/agent/gateway-connection/generator.js.map +1 -1
- package/src/py/agent/gateway-connection/schema.d.js +6 -0
- package/src/py/agent/gateway-connection/schema.d.js.map +1 -0
- package/src/py/agent/generator.js +227 -194
- package/src/py/agent/generator.js.map +1 -1
- package/src/py/agent/mcp-connection/__snapshots__/generator.spec.ts.snap +5 -12
- package/src/py/agent/mcp-connection/files/agent-connection/app/__mcpServerSnakeCase___client_strands.py.template +1 -1
- package/src/py/agent/mcp-connection/files/langchain/agent-connection/app/__mcpServerSnakeCase___client_langchain.py.template +1 -1
- package/src/py/agent/mcp-connection/generator.js +53 -52
- package/src/py/agent/mcp-connection/generator.js.map +1 -1
- package/src/py/agent/mcp-connection/schema.d.js +8 -0
- package/src/py/agent/mcp-connection/schema.d.js.map +1 -0
- package/src/py/agent/react-connection/__snapshots__/generator.spec.ts.snap +3 -2
- package/src/py/agent/react-connection/generator.js +51 -58
- package/src/py/agent/react-connection/generator.js.map +1 -1
- package/src/py/agent/react-connection/{serve-local.d.ts → local-dev.d.ts} +4 -4
- package/src/py/agent/react-connection/local-dev.js +36 -0
- package/src/py/agent/react-connection/local-dev.js.map +1 -0
- package/src/py/agent/react-connection/schema.d.js +8 -0
- package/src/py/agent/react-connection/schema.d.js.map +1 -0
- package/src/py/agent/schema.d.js +6 -0
- package/src/py/agent/schema.d.js.map +1 -0
- package/src/py/api/generator.js +12 -12
- package/src/py/api/generator.js.map +1 -1
- package/src/py/api/schema.d.js +6 -0
- package/src/py/api/schema.d.js.map +1 -0
- package/src/py/dynamodb/__snapshots__/generator.spec.ts.snap +68 -28
- package/src/py/dynamodb/agent-connection/__snapshots__/generator.spec.ts.snap +5 -5
- package/src/py/dynamodb/agent-connection/generator.js +27 -29
- package/src/py/dynamodb/agent-connection/generator.js.map +1 -1
- package/src/py/dynamodb/agent-connection/schema.d.js +8 -0
- package/src/py/dynamodb/agent-connection/schema.d.js.map +1 -0
- package/src/py/dynamodb/fast-api-connection/__snapshots__/generator.spec.ts.snap +3 -3
- package/src/py/dynamodb/fast-api-connection/generator.js +26 -28
- package/src/py/dynamodb/fast-api-connection/generator.js.map +1 -1
- package/src/py/dynamodb/fast-api-connection/schema.d.js +8 -0
- package/src/py/dynamodb/fast-api-connection/schema.d.js.map +1 -0
- package/src/py/dynamodb/files/__name__/client.py.template +5 -5
- package/src/py/dynamodb/files/__name__/entities/base.py.template +2 -2
- package/src/py/dynamodb/files/config.json.template +1 -1
- package/src/py/dynamodb/generator.js +63 -62
- package/src/py/dynamodb/generator.js.map +1 -1
- package/src/py/dynamodb/mcp-server-connection/__snapshots__/generator.spec.ts.snap +5 -5
- package/src/py/dynamodb/mcp-server-connection/generator.js +27 -29
- package/src/py/dynamodb/mcp-server-connection/generator.js.map +1 -1
- package/src/py/dynamodb/mcp-server-connection/schema.d.js +8 -0
- package/src/py/dynamodb/mcp-server-connection/schema.d.js.map +1 -0
- package/src/py/dynamodb/schema.d.js +6 -0
- package/src/py/dynamodb/schema.d.js.map +1 -0
- package/src/py/fast-api/__snapshots__/generator.spec.ts.snap +45 -4632
- package/src/py/fast-api/__snapshots__/generator.terraform.spec.ts.snap +4833 -0
- package/src/py/fast-api/generator.js +79 -85
- package/src/py/fast-api/generator.js.map +1 -1
- package/src/py/fast-api/react/__snapshots__/generator.spec.ts.snap +3 -2
- package/src/py/fast-api/react/generator.js +22 -24
- package/src/py/fast-api/react/generator.js.map +1 -1
- package/src/py/fast-api/react/open-api.js +28 -29
- package/src/py/fast-api/react/open-api.js.map +1 -1
- package/src/py/fast-api/react/schema.d.js +6 -0
- package/src/py/fast-api/react/schema.d.js.map +1 -0
- package/src/py/fast-api/schema.d.js +6 -0
- package/src/py/fast-api/schema.d.js.map +1 -0
- package/src/py/lambda-function/__snapshots__/generator.spec.ts.snap +4 -4
- package/src/py/lambda-function/generator.js +57 -58
- package/src/py/lambda-function/generator.js.map +1 -1
- package/src/py/lambda-function/schema.d.js +6 -0
- package/src/py/lambda-function/schema.d.js.map +1 -0
- package/src/py/mcp-server/__snapshots__/generator.spec.ts.snap +5 -5
- package/src/py/mcp-server/generator.js +149 -131
- package/src/py/mcp-server/generator.js.map +1 -1
- package/src/py/mcp-server/schema.d.js +6 -0
- package/src/py/mcp-server/schema.d.js.map +1 -0
- package/src/py/project/generator.d.ts +14 -1
- package/src/py/project/generator.js +137 -88
- package/src/py/project/generator.js.map +1 -1
- package/src/py/project/schema.d.js +6 -0
- package/src/py/project/schema.d.js.map +1 -0
- package/src/sdk/agentcore-gateway.d.ts +6 -0
- package/src/sdk/agentcore-gateway.js +7 -0
- package/src/sdk/agentcore-gateway.js.map +1 -0
- package/src/sdk/connection.d.ts +6 -0
- package/src/sdk/connection.js +6 -0
- package/src/sdk/connection.js.map +1 -0
- package/{sdk → src/sdk}/license.d.ts +4 -4
- package/src/sdk/license.js +7 -0
- package/src/sdk/license.js.map +1 -0
- package/src/sdk/open-api.d.ts +10 -0
- package/src/sdk/open-api.js +8 -0
- package/src/sdk/open-api.js.map +1 -0
- package/src/sdk/py.d.ts +14 -0
- package/src/sdk/py.js +10 -0
- package/src/sdk/py.js.map +1 -0
- package/src/sdk/terraform.d.ts +6 -0
- package/src/sdk/terraform.js +7 -0
- package/src/sdk/terraform.js.map +1 -0
- package/src/sdk/ts.d.ts +33 -0
- package/src/sdk/ts.js +35 -0
- package/src/sdk/ts.js.map +1 -0
- package/{sdk → src/sdk}/utils/ast.d.ts +2 -2
- package/src/sdk/utils/ast.js +7 -0
- package/src/sdk/utils/ast.js.map +1 -0
- package/{sdk → src/sdk}/utils/format.d.ts +1 -1
- package/src/sdk/utils/format.js +6 -0
- package/src/sdk/utils/format.js.map +1 -0
- package/{sdk → src/sdk}/utils/test.d.ts +1 -1
- package/src/sdk/utils/test.js +6 -0
- package/src/sdk/utils/test.js.map +1 -0
- package/src/smithy/project/__snapshots__/generator.spec.ts.snap +2 -8
- package/src/smithy/project/files/build.Dockerfile.template +1 -4
- package/src/smithy/project/generator.js +44 -42
- package/src/smithy/project/generator.js.map +1 -1
- package/src/smithy/project/schema.d.js +6 -0
- package/src/smithy/project/schema.d.js.map +1 -0
- package/src/smithy/react-connection/generator.js +35 -46
- package/src/smithy/react-connection/generator.js.map +1 -1
- package/src/smithy/react-connection/schema.d.js +6 -0
- package/src/smithy/react-connection/schema.d.js.map +1 -0
- package/src/smithy/ts/api/__snapshots__/generator.spec.ts.snap +395 -72
- package/src/smithy/ts/api/generator.js +121 -111
- package/src/smithy/ts/api/generator.js.map +1 -1
- package/src/smithy/ts/api/schema.d.js +6 -0
- package/src/smithy/ts/api/schema.d.js.map +1 -0
- package/src/terraform/project/files/application/src/providers.tf.template +1 -1
- package/src/terraform/project/generator.js +141 -103
- package/src/terraform/project/generator.js.map +1 -1
- package/src/terraform/project/schema.d.js +9 -0
- package/src/terraform/project/schema.d.js.map +1 -0
- package/src/trpc/backend/__snapshots__/generator.spec.ts.snap +336 -92
- package/src/trpc/backend/generator.js +93 -86
- package/src/trpc/backend/generator.js.map +1 -1
- package/src/trpc/backend/schema.d.js +6 -0
- package/src/trpc/backend/schema.d.js.map +1 -0
- package/src/trpc/react/__snapshots__/generator.spec.ts.snap +1 -1
- package/src/trpc/react/generator.js +59 -58
- package/src/trpc/react/generator.js.map +1 -1
- package/src/trpc/react/schema.d.js +6 -0
- package/src/trpc/react/schema.d.js.map +1 -0
- package/src/ts/agent/__snapshots__/generator.spec.ts.snap +11 -11
- package/src/ts/agent/a2a-connection/__snapshots__/generator.spec.ts.snap +1 -1
- package/src/ts/agent/a2a-connection/files/agent-connection/app/__targetAgentKebabCase__-client-strands.ts.template +1 -1
- package/src/ts/agent/a2a-connection/generator.js +58 -54
- package/src/ts/agent/a2a-connection/generator.js.map +1 -1
- package/src/ts/agent/a2a-connection/schema.d.js +8 -0
- package/src/ts/agent/a2a-connection/schema.d.js.map +1 -0
- package/src/ts/agent/gateway-connection/__snapshots__/generator.spec.ts.snap +5 -5
- package/src/ts/agent/gateway-connection/files/agent-connection/app/__gatewayKebabCase__-client-strands.ts.template +3 -3
- package/src/ts/agent/gateway-connection/generator.js +57 -52
- package/src/ts/agent/gateway-connection/generator.js.map +1 -1
- package/src/ts/agent/gateway-connection/schema.d.js +6 -0
- package/src/ts/agent/gateway-connection/schema.d.js.map +1 -0
- package/src/ts/agent/generator.js +165 -136
- package/src/ts/agent/generator.js.map +1 -1
- package/src/ts/agent/mcp-connection/__snapshots__/generator.spec.ts.snap +1 -1
- package/src/ts/agent/mcp-connection/files/agent-connection/app/__mcpServerKebabCase__-client-strands.ts.template +1 -1
- package/src/ts/agent/mcp-connection/generator.js +48 -46
- package/src/ts/agent/mcp-connection/generator.js.map +1 -1
- package/src/ts/agent/mcp-connection/schema.d.js +8 -0
- package/src/ts/agent/mcp-connection/schema.d.js.map +1 -0
- package/src/ts/agent/react-connection/generator.js +79 -79
- package/src/ts/agent/react-connection/generator.js.map +1 -1
- package/src/ts/agent/react-connection/{serve-local.d.ts → local-dev.d.ts} +2 -2
- package/src/ts/agent/react-connection/local-dev.js +17 -0
- package/src/ts/agent/react-connection/local-dev.js.map +1 -0
- package/src/ts/agent/react-connection/schema.d.js +8 -0
- package/src/ts/agent/react-connection/schema.d.js.map +1 -0
- package/src/ts/agent/schema.d.js +6 -0
- package/src/ts/agent/schema.d.js.map +1 -0
- package/src/ts/api/generator.js +16 -18
- package/src/ts/api/generator.js.map +1 -1
- package/src/ts/api/schema.d.js +6 -0
- package/src/ts/api/schema.d.js.map +1 -0
- package/src/ts/astro-docs/__snapshots__/generator.spec.ts.snap +8 -8
- package/src/ts/astro-docs/generator.js +59 -48
- package/src/ts/astro-docs/generator.js.map +1 -1
- package/src/ts/astro-docs/schema.d.js +6 -0
- package/src/ts/astro-docs/schema.d.js.map +1 -0
- package/src/ts/docs/generator.js +10 -10
- package/src/ts/docs/generator.js.map +1 -1
- package/src/ts/docs/schema.d.js +6 -0
- package/src/ts/docs/schema.d.js.map +1 -0
- package/src/ts/dynamodb/__snapshots__/generator.spec.ts.snap +68 -30
- package/src/ts/dynamodb/agent-connection/__snapshots__/generator.spec.ts.snap +5 -5
- package/src/ts/dynamodb/agent-connection/generator.js +21 -23
- package/src/ts/dynamodb/agent-connection/generator.js.map +1 -1
- package/src/ts/dynamodb/agent-connection/schema.d.js +8 -0
- package/src/ts/dynamodb/agent-connection/schema.d.js.map +1 -0
- package/src/ts/dynamodb/files/config.json.template +1 -1
- package/src/ts/dynamodb/files/src/client.ts.template +7 -7
- package/src/ts/dynamodb/generator.js +64 -63
- package/src/ts/dynamodb/generator.js.map +1 -1
- package/src/ts/dynamodb/mcp-server-connection/__snapshots__/generator.spec.ts.snap +5 -5
- package/src/ts/dynamodb/mcp-server-connection/generator.js +21 -23
- package/src/ts/dynamodb/mcp-server-connection/generator.js.map +1 -1
- package/src/ts/dynamodb/mcp-server-connection/schema.d.js +8 -0
- package/src/ts/dynamodb/mcp-server-connection/schema.d.js.map +1 -0
- package/src/ts/dynamodb/schema.d.js +6 -0
- package/src/ts/dynamodb/schema.d.js.map +1 -0
- package/src/ts/dynamodb/smithy-connection/__snapshots__/generator.spec.ts.snap +3 -3
- package/src/ts/dynamodb/smithy-connection/generator.js +20 -22
- package/src/ts/dynamodb/smithy-connection/generator.js.map +1 -1
- package/src/ts/dynamodb/smithy-connection/schema.d.js +8 -0
- package/src/ts/dynamodb/smithy-connection/schema.d.js.map +1 -0
- package/src/ts/dynamodb/trpc-connection/__snapshots__/generator.spec.ts.snap +3 -3
- package/src/ts/dynamodb/trpc-connection/generator.js +20 -22
- package/src/ts/dynamodb/trpc-connection/generator.js.map +1 -1
- package/src/ts/dynamodb/trpc-connection/schema.d.js +8 -0
- package/src/ts/dynamodb/trpc-connection/schema.d.js.map +1 -0
- package/src/ts/lambda-function/__snapshots__/generator.spec.ts.snap +4 -4
- package/src/ts/lambda-function/generator.js +55 -55
- package/src/ts/lambda-function/generator.js.map +1 -1
- package/src/ts/lambda-function/io.js +83 -52
- package/src/ts/lambda-function/io.js.map +1 -1
- package/src/ts/lambda-function/schema.d.js +6 -0
- package/src/ts/lambda-function/schema.d.js.map +1 -0
- package/src/ts/lib/__snapshots__/generator.spec.ts.snap +23 -36
- package/src/ts/lib/biome.js +37 -37
- package/src/ts/lib/biome.js.map +1 -1
- package/src/ts/lib/generator.js +75 -77
- package/src/ts/lib/generator.js.map +1 -1
- package/src/ts/lib/schema.d.js +6 -0
- package/src/ts/lib/schema.d.js.map +1 -0
- package/src/ts/lib/ts-project-utils.js +65 -70
- package/src/ts/lib/ts-project-utils.js.map +1 -1
- package/src/ts/lib/types.js +5 -2
- package/src/ts/lib/types.js.map +1 -1
- package/src/ts/lib/vitest.js +29 -26
- package/src/ts/lib/vitest.js.map +1 -1
- package/src/ts/mcp-server/__snapshots__/generator.spec.ts.snap +5 -5
- package/src/ts/mcp-server/generator.js +157 -138
- package/src/ts/mcp-server/generator.js.map +1 -1
- package/src/ts/mcp-server/schema.d.js +6 -0
- package/src/ts/mcp-server/schema.d.js.map +1 -0
- package/src/ts/nx-generator/__snapshots__/generator.spec.ts.snap +14 -9
- package/src/ts/nx-generator/files/local/generator.ts.template +3 -3
- package/src/ts/nx-generator/files/nx-plugin-for-aws/generator/generator.ts.template +4 -4
- package/src/ts/nx-generator/generator.js +84 -83
- package/src/ts/nx-generator/generator.js.map +1 -1
- package/src/ts/nx-generator/schema.d.js +6 -0
- package/src/ts/nx-generator/schema.d.js.map +1 -0
- package/src/ts/nx-plugin/__snapshots__/generator.spec.ts.snap +30 -18
- package/src/ts/nx-plugin/files/mcp-server/server.ts.template +5 -5
- package/src/ts/nx-plugin/files/mcp-server/tools/create-workspace-command.ts.template +2 -2
- package/src/ts/nx-plugin/files/mcp-server/tools/general-guidance.ts.template +1 -1
- package/src/ts/nx-plugin/files/mcp-server/tools/generator-guide.ts.template +2 -2
- package/src/ts/nx-plugin/files/mcp-server/tools/list-generators.ts.template +2 -2
- package/src/ts/nx-plugin/files/mcp-server/utils.ts.template +3 -3
- package/src/ts/nx-plugin/generator.js +49 -48
- package/src/ts/nx-plugin/generator.js.map +1 -1
- package/src/ts/nx-plugin/schema.d.js +9 -0
- package/src/ts/nx-plugin/schema.d.js.map +1 -0
- package/src/ts/nx-plugin/utils.js +32 -44
- package/src/ts/nx-plugin/utils.js.map +1 -1
- package/src/ts/rdb/__snapshots__/generator.spec.ts.snap +34 -30
- package/src/ts/rdb/agent-connection/__snapshots__/generator.spec.ts.snap +6 -6
- package/src/ts/rdb/agent-connection/generator.js +38 -39
- package/src/ts/rdb/agent-connection/generator.js.map +1 -1
- package/src/ts/rdb/agent-connection/schema.d.js +8 -0
- package/src/ts/rdb/agent-connection/schema.d.js.map +1 -0
- package/src/ts/rdb/files/config.json.template +1 -1
- package/src/ts/rdb/files/prisma.config.ts.template +2 -2
- package/src/ts/rdb/files/src/prisma.ts.template +7 -7
- package/src/ts/rdb/files/src/utils.ts.template +3 -0
- package/src/ts/rdb/generator.js +130 -117
- package/src/ts/rdb/generator.js.map +1 -1
- package/src/ts/rdb/mcp-server-connection/__snapshots__/generator.spec.ts.snap +6 -6
- package/src/ts/rdb/mcp-server-connection/generator.js +36 -37
- package/src/ts/rdb/mcp-server-connection/generator.js.map +1 -1
- package/src/ts/rdb/mcp-server-connection/schema.d.js +8 -0
- package/src/ts/rdb/mcp-server-connection/schema.d.js.map +1 -0
- package/src/ts/rdb/schema.d.js +6 -0
- package/src/ts/rdb/schema.d.js.map +1 -0
- package/src/ts/rdb/smithy-connection/__snapshots__/generator.spec.ts.snap +3 -3
- package/src/ts/rdb/smithy-connection/generator.js +46 -43
- package/src/ts/rdb/smithy-connection/generator.js.map +1 -1
- package/src/ts/rdb/smithy-connection/schema.d.js +8 -0
- package/src/ts/rdb/smithy-connection/schema.d.js.map +1 -0
- package/src/ts/rdb/trpc-connection/__snapshots__/generator.spec.ts.snap +3 -3
- package/src/ts/rdb/trpc-connection/generator.js +36 -31
- package/src/ts/rdb/trpc-connection/generator.js.map +1 -1
- package/src/ts/rdb/trpc-connection/schema.d.js +8 -0
- package/src/ts/rdb/trpc-connection/schema.d.js.map +1 -0
- package/src/ts/rdb/utils.js +9 -11
- package/src/ts/rdb/utils.js.map +1 -1
- package/src/ts/react-website/agui/generator.js +69 -61
- package/src/ts/react-website/agui/generator.js.map +1 -1
- package/src/ts/react-website/app/__snapshots__/generator.spec.ts.snap +179 -332
- package/src/ts/react-website/app/generator.js +197 -188
- package/src/ts/react-website/app/generator.js.map +1 -1
- package/src/ts/react-website/app/schema.d.js +6 -0
- package/src/ts/react-website/app/schema.d.js.map +1 -0
- package/src/ts/react-website/app/schema.json +6 -6
- package/src/ts/react-website/cognito-auth/__snapshots__/generator.spec.ts.snap +118 -4
- package/src/ts/react-website/cognito-auth/__snapshots__/generator.terraform.spec.ts.snap +27 -7
- package/src/ts/react-website/cognito-auth/files/app/components/CognitoAuth/index.tsx.template +2 -2
- package/src/ts/react-website/cognito-auth/generator.js +60 -60
- package/src/ts/react-website/cognito-auth/generator.js.map +1 -1
- package/src/ts/react-website/cognito-auth/schema.d.js +6 -0
- package/src/ts/react-website/cognito-auth/schema.d.js.map +1 -0
- package/src/ts/react-website/cognito-auth/utils.js +34 -32
- package/src/ts/react-website/cognito-auth/utils.js.map +1 -1
- package/src/ts/react-website/runtime-config/__snapshots__/generator.spec.ts.snap +2 -2
- package/src/ts/react-website/runtime-config/files/app/components/RuntimeConfig/index.tsx.template +2 -2
- package/src/ts/react-website/runtime-config/generator.js +29 -31
- package/src/ts/react-website/runtime-config/generator.js.map +1 -1
- package/src/ts/react-website/runtime-config/schema.d.js +6 -0
- package/src/ts/react-website/runtime-config/schema.d.js.map +1 -0
- package/src/ts/sync/generator.js +60 -59
- package/src/ts/sync/generator.js.map +1 -1
- package/src/ts/website/app/generator.js +10 -10
- package/src/ts/website/app/generator.js.map +1 -1
- package/src/ts/website/app/schema.d.js +6 -0
- package/src/ts/website/app/schema.d.js.map +1 -0
- package/src/ts/website/app/schema.json +6 -6
- package/src/ts/website/auth/generator.js +11 -11
- package/src/ts/website/auth/generator.js.map +1 -1
- package/src/ts/website/auth/schema.d.js +6 -0
- package/src/ts/website/auth/schema.d.js.map +1 -0
- package/src/utils/agent-chat/agent-chat.d.ts +1 -1
- package/src/utils/agent-chat/agent-chat.js +11 -12
- package/src/utils/agent-chat/agent-chat.js.map +1 -1
- package/src/utils/agent-chat/files/a2a/chat.ts.template +1 -1
- package/src/utils/agent-chat/files/ag-ui/chat.ts.template +1 -1
- package/src/utils/agent-chat/files/http-py/chat.ts.template +1 -1
- package/src/utils/agent-chat/files/http-ts/chat.ts.template +1 -1
- package/src/utils/agent-connection/agent-connection.d.ts +9 -3
- package/src/utils/agent-connection/agent-connection.js +133 -147
- package/src/utils/agent-connection/agent-connection.js.map +1 -1
- package/src/utils/agent-connection/files/core-gateway/agentcore-gateway-mcp-transport.ts.template +1 -1
- package/src/utils/agent-connection/files/core-strands/gateway/agentcore-gateway-mcp-client-strands.ts.template +1 -1
- package/src/utils/agent-connection/files/py-core-gateway/agentcore_gateway_mcp_transport.py.template +1 -1
- package/src/utils/agent-connection/files/py-core-langchain/gateway/agentcore_gateway_mcp_client_langchain.py.template +1 -1
- package/src/utils/agent-connection/files/py-core-strands/gateway/agentcore_gateway_mcp_client_strands.py.template +1 -1
- package/src/utils/agent-core-constructs/agent-core-constructs.js +53 -50
- package/src/utils/agent-core-constructs/agent-core-constructs.js.map +1 -1
- package/src/utils/agent-core-constructs/files/terraform/app/agentcore-gateway/__nameKebabCase__/__nameKebabCase__.tf.template +4 -4
- package/src/utils/agent-core-constructs/files/terraform/core/agent-core/runtime.tf.template +5 -5
- package/src/utils/agent-core-constructs/files/terraform/core/agentcore-gateway/gateway.tf.template +2 -2
- package/src/utils/api-constructs/api-constructs.js +30 -31
- package/src/utils/api-constructs/api-constructs.js.map +1 -1
- package/src/utils/api-constructs/files/cdk/core/api/http/http-api.ts.template +14 -6
- package/src/utils/api-constructs/files/cdk/core/api/rest/api-gateway-account/index.js.template +58 -0
- package/src/utils/api-constructs/files/cdk/core/api/rest/api-gateway-account.ts.template +82 -0
- package/src/utils/api-constructs/files/cdk/core/api/rest/rest-api.ts.template +28 -14
- package/src/utils/api-constructs/files/terraform/app/apis/http/__apiNameKebabCase__/__apiNameKebabCase__.tf.template +1 -8
- package/src/utils/api-constructs/files/terraform/app/apis/rest/__apiNameKebabCase__/__apiNameKebabCase__.tf.template +91 -4
- package/src/utils/api-constructs/files/terraform/core/api/http/http-api/http-api.tf.template +1 -1
- package/src/utils/api-constructs/files/terraform/core/api/rest/api-gateway-account/api-gateway-account.tf.template +83 -0
- package/src/utils/api-constructs/files/terraform/core/api/rest/rest-api/rest-api.tf.template +5 -11
- package/src/utils/api-constructs/open-api-metadata.js +22 -22
- package/src/utils/api-constructs/open-api-metadata.js.map +1 -1
- package/src/utils/ast/website.js +17 -19
- package/src/utils/ast/website.js.map +1 -1
- package/src/utils/ast.js +72 -97
- package/src/utils/ast.js.map +1 -1
- package/src/utils/bundle/bundle.js +50 -47
- package/src/utils/bundle/bundle.js.map +1 -1
- package/src/utils/commands.js +47 -26
- package/src/utils/commands.js.map +1 -1
- package/src/utils/config/index.d.ts +2 -2
- package/src/utils/config/index.js +5 -4
- package/src/utils/config/index.js.map +1 -1
- package/src/utils/config/utils.js +48 -58
- package/src/utils/config/utils.js.map +1 -1
- package/src/utils/connection/open-api/react.d.ts +5 -5
- package/src/utils/connection/open-api/react.js +81 -77
- package/src/utils/connection/open-api/react.js.map +1 -1
- package/src/utils/containers.js +22 -23
- package/src/utils/containers.js.map +1 -1
- package/src/utils/dynamodb-constructs/dynamodb-constructs.js +32 -33
- package/src/utils/dynamodb-constructs/dynamodb-constructs.js.map +1 -1
- package/src/utils/dynamodb-constructs/files/terraform/app/dynamodb/__nameKebabCase__/__nameKebabCase__.tf.template +12 -2
- package/src/utils/dynamodb-constructs/files/terraform/core/dynamodb/dynamodb.tf.template +1 -1
- package/src/utils/files/common/scripts/src/dynamodb/create-local-table.ts.template +2 -2
- package/src/utils/files/common/scripts/src/dynamodb/pull-image.ts.template +1 -1
- package/src/utils/files/common/scripts/src/dynamodb/start-container.ts.template +17 -2
- package/src/utils/files/common/scripts/src/rdb/mysql/wait-for-mysql-db.ts.template +32 -0
- package/src/utils/files/common/scripts/src/rdb/postgres/wait-for-postgres-db.ts.template +32 -0
- package/src/utils/files/common/scripts/src/rdb/{pull-image.ts.template → shared/pull-image.ts.template} +1 -1
- package/src/utils/files/common/scripts/src/rdb/{start-container.ts.template → shared/start-container.ts.template} +16 -1
- package/src/utils/files/terraform/src/core/asset-bucket/asset-bucket.tf.template +2 -2
- package/src/utils/files/terraform/src/core/runtime-config/appconfig/appconfig.tf.template +1 -1
- package/src/utils/files/terraform/src/core/runtime-config/appconfig-deployment/appconfig-deployment.tf.template +3 -3
- package/src/utils/files/terraform/src/core/runtime-config/entry/entry.tf.template +1 -1
- package/src/utils/files/terraform/src/core/runtime-config/read/read.tf.template +2 -2
- package/src/utils/files/website/hooks/sigv4/useSigV4.tsx.template +1 -1
- package/src/utils/format.js +153 -99
- package/src/utils/format.js.map +1 -1
- package/src/utils/fs.js +14 -13
- package/src/utils/fs.js.map +1 -1
- package/src/utils/function-constructs/files/terraform/app/lambda-functions/__nameKebabCase__/__nameKebabCase__.tf.template +2 -2
- package/src/utils/function-constructs/function-constructs.js +21 -26
- package/src/utils/function-constructs/function-constructs.js.map +1 -1
- package/src/utils/generators.js +18 -20
- package/src/utils/generators.js.map +1 -1
- package/src/utils/git.js +19 -34
- package/src/utils/git.js.map +1 -1
- package/src/utils/iac-providers.js +5 -5
- package/src/utils/iac-providers.js.map +1 -1
- package/src/utils/iac.js +12 -14
- package/src/utils/iac.js.map +1 -1
- package/src/utils/identity-constructs/files/cdk/core/user-identity.ts.template +112 -2
- package/src/utils/identity-constructs/files/terraform/core/user-identity/add-callback-url/add-callback-url.tf.template +19 -6
- package/src/utils/identity-constructs/files/terraform/core/user-identity/identity/identity.tf.template +104 -2
- package/src/utils/identity-constructs/files/terraform/core/user-identity/main.tf.template +7 -0
- package/src/utils/identity-constructs/identity-constructs.js +24 -28
- package/src/utils/identity-constructs/identity-constructs.js.map +1 -1
- package/src/utils/js.js +27 -20
- package/src/utils/js.js.map +1 -1
- package/src/utils/mcp.js +34 -41
- package/src/utils/mcp.js.map +1 -1
- package/src/utils/metrics.js +30 -45
- package/src/utils/metrics.js.map +1 -1
- package/src/utils/mock-project-graph.js +8 -12
- package/src/utils/mock-project-graph.js.map +1 -1
- package/src/utils/names.d.ts +16 -0
- package/src/utils/names.js +39 -48
- package/src/utils/names.js.map +1 -1
- package/src/utils/npm-scope.js +9 -17
- package/src/utils/npm-scope.js.map +1 -1
- package/src/utils/nx.d.ts +18 -2
- package/src/utils/nx.js +111 -74
- package/src/utils/nx.js.map +1 -1
- package/src/utils/nxlv-python.js +27 -15
- package/src/utils/nxlv-python.js.map +1 -1
- package/src/utils/object.js +5 -11
- package/src/utils/object.js.map +1 -1
- package/src/utils/paths.js +11 -15
- package/src/utils/paths.js.map +1 -1
- package/src/utils/pkg-manager.js +4 -9
- package/src/utils/pkg-manager.js.map +1 -1
- package/src/utils/pnpm-workspace.js +22 -22
- package/src/utils/pnpm-workspace.js.map +1 -1
- package/src/utils/port.js +26 -36
- package/src/utils/port.js.map +1 -1
- package/src/utils/py.d.ts +14 -1
- package/src/utils/py.js +63 -45
- package/src/utils/py.js.map +1 -1
- package/src/utils/rdb-constructs/files/terraform/app/dbs/__nameKebabCase__/__nameKebabCase__.tf.template +4 -4
- package/src/utils/rdb-constructs/files/terraform/core/rdb/aurora/aurora.tf.template +3 -3
- package/src/utils/rdb-constructs/rdb-constructs.js +31 -33
- package/src/utils/rdb-constructs/rdb-constructs.js.map +1 -1
- package/src/utils/shared-constructs-constants.js +16 -16
- package/src/utils/shared-constructs-constants.js.map +1 -1
- package/src/utils/shared-constructs.js +57 -54
- package/src/utils/shared-constructs.js.map +1 -1
- package/src/utils/shared-dynamodb-scripts.js +16 -14
- package/src/utils/shared-dynamodb-scripts.js.map +1 -1
- package/src/utils/shared-infra-config.js +30 -31
- package/src/utils/shared-infra-config.js.map +1 -1
- package/src/utils/shared-infra-scripts.js +30 -25
- package/src/utils/shared-infra-scripts.js.map +1 -1
- package/src/utils/shared-rdb-scripts.d.ts +8 -3
- package/src/utils/shared-rdb-scripts.js +21 -13
- package/src/utils/shared-rdb-scripts.js.map +1 -1
- package/src/utils/shared-scripts.js +12 -17
- package/src/utils/shared-scripts.js.map +1 -1
- package/src/utils/shared-shadcn.js +64 -60
- package/src/utils/shared-shadcn.js.map +1 -1
- package/src/utils/test.d.ts +8 -0
- package/src/utils/test.js +33 -25
- package/src/utils/test.js.map +1 -1
- package/src/utils/toml.js +7 -15
- package/src/utils/toml.js.map +1 -1
- package/src/utils/versions.d.ts +31 -4
- package/src/utils/versions.js +40 -23
- package/src/utils/versions.js.map +1 -1
- package/src/utils/website-constructs/files/terraform/app/static-websites/__websiteNameKebabCase__/__websiteNameKebabCase__.tf.template +1 -1
- package/src/utils/website-constructs/files/terraform/core/static-website/static-website.tf.template +4 -4
- package/src/utils/website-constructs/website-constructs.js +31 -30
- package/src/utils/website-constructs/website-constructs.js.map +1 -1
- package/bin/aws-nx-mcp.js +0 -17
- package/bin/aws-nx-mcp.js.map +0 -1
- package/sdk/agentcore-gateway.d.ts +0 -6
- package/sdk/agentcore-gateway.js +0 -11
- package/sdk/agentcore-gateway.js.map +0 -1
- package/sdk/connection.d.ts +0 -6
- package/sdk/connection.js +0 -10
- package/sdk/connection.js.map +0 -1
- package/sdk/license.js +0 -14
- package/sdk/license.js.map +0 -1
- package/sdk/open-api.d.ts +0 -10
- package/sdk/open-api.js +0 -15
- package/sdk/open-api.js.map +0 -1
- package/sdk/py.d.ts +0 -14
- package/sdk/py.js +0 -18
- package/sdk/py.js.map +0 -1
- package/sdk/terraform.d.ts +0 -6
- package/sdk/terraform.js +0 -11
- package/sdk/terraform.js.map +0 -1
- package/sdk/ts.d.ts +0 -33
- package/sdk/ts.js +0 -53
- package/sdk/ts.js.map +0 -1
- package/sdk/utils/ast.js +0 -12
- package/sdk/utils/ast.js.map +0 -1
- package/sdk/utils/format.js +0 -10
- package/sdk/utils/format.js.map +0 -1
- package/sdk/utils/test.js +0 -10
- package/sdk/utils/test.js.map +0 -1
- package/src/connection/agent-serve-local.js +0 -48
- package/src/connection/agent-serve-local.js.map +0 -1
- package/src/connection/serve-local.js +0 -41
- package/src/connection/serve-local.js.map +0 -1
- package/src/py/agent/react-connection/serve-local.js +0 -38
- package/src/py/agent/react-connection/serve-local.js.map +0 -1
- package/src/ts/agent/react-connection/serve-local.js +0 -19
- package/src/ts/agent/react-connection/serve-local.js.map +0 -1
- package/src/utils/files/common/scripts/src/rdb/wait-for-db.ts.template +0 -59
- /package/src/agentcore-gateway/files/project/{serve-local.ts.template → local-dev.ts.template} +0 -0
- /package/{bin → src/bin}/aws-nx-mcp.d.ts +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../packages/nx-plugin/src/py/agent/generator.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../../../packages/nx-plugin/src/py/agent/generator.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport {\n addDependenciesToPackageJson,\n type GeneratorCallback,\n generateFiles,\n installPackagesTask,\n joinPathFragments,\n OverwriteStrategy,\n type Tree,\n updateProjectConfiguration,\n} from '@nx/devkit';\nimport { ensureLicenseExceptions } from '../../license/config';\nimport { AG_UI_LANGGRAPH_EXCEPTIONS } from '../../license/known-exceptions';\nimport { addAgentChatScripts } from '../../utils/agent-chat/agent-chat';\nimport {\n addPythonFrameworkBase,\n ensurePythonAgentConnectionProject,\n getPythonAgentConnectionModuleName,\n getPythonAgentConnectionProject,\n} from '../../utils/agent-connection/agent-connection';\nimport { addAgentInfra } from '../../utils/agent-core-constructs/agent-core-constructs';\nimport { addPythonBundleTarget } from '../../utils/bundle/bundle';\nimport { resolveContainers } from '../../utils/containers';\nimport { formatFilesInSubtree } from '../../utils/format';\nimport { FsCommands } from '../../utils/fs';\nimport { updateGitIgnore } from '../../utils/git';\nimport { resolveIac } from '../../utils/iac';\nimport { addGeneratorMetricsIfApplicable } from '../../utils/metrics';\nimport { kebabCase, toClassName, toSnakeCase } from '../../utils/names';\nimport { getNpmScope } from '../../utils/npm-scope';\nimport {\n addComponentDevTarget,\n addComponentGeneratorMetadata,\n addDependencyToTargetIfNotPresent,\n getGeneratorInfo,\n type NxGeneratorInfo,\n normalizeTargetKeyOrder,\n readProjectConfigurationUnqualified,\n} from '../../utils/nx';\nimport { Logger, UVProvider } from '../../utils/nxlv-python';\nimport { sortObjectKeys } from '../../utils/object';\nimport { toProjectRelativePath } from '../../utils/paths';\nimport { assignPort } from '../../utils/port';\nimport {\n addDependenciesToDependencyGroupInPyProjectToml,\n addDependenciesToPyProjectToml,\n addWorkspaceDependencyToPyProject,\n} from '../../utils/py';\nimport { sharedConstructsGenerator } from '../../utils/shared-constructs';\nimport { withVersions } from '../../utils/versions';\nimport type { PyAgentGeneratorSchema } from './schema';\n\nexport const PY_AGENT_GENERATOR_INFO: NxGeneratorInfo = getGeneratorInfo(\n import.meta.filename,\n);\n\nexport const pyAgentGenerator = async (\n tree: Tree,\n options: PyAgentGeneratorSchema,\n): Promise<GeneratorCallback> => {\n const project = readProjectConfigurationUnqualified(tree, options.project);\n\n const pyProjectPath = joinPathFragments(project.root, 'pyproject.toml');\n\n // Check if the project has a pyproject.toml file\n if (!pyProjectPath) {\n throw new Error(\n `Unsupported project ${options.project}. Expected a Python project (with a pyproject.toml)`,\n );\n }\n\n if (!project.sourceRoot) {\n throw new Error(\n `This project does not have a source root. Please add a source root to the project configuration before running this generator.`,\n );\n }\n\n // Module name is the last part of the source root,\n const sourceParts = project.sourceRoot.split('/');\n const moduleName = sourceParts[sourceParts.length - 1];\n\n const name = kebabCase(\n options.name || `${kebabCase(project.name.split('.').pop())}-agent`,\n );\n const agentTargetPrefix = options.name ? name : 'agent';\n\n const agentNameSnakeCase = toSnakeCase(options.name || 'agent');\n const agentNameClassName = toClassName(name);\n\n const targetSourceDir = joinPathFragments(\n project.sourceRoot,\n agentNameSnakeCase,\n );\n\n const infra = options.infra ?? 'agentcore';\n const protocol = options.protocol ?? 'http';\n const framework = options.framework ?? 'strands';\n\n if (infra === 'none' && options.auth && options.auth !== 'iam') {\n console.warn(\n 'Warning: auth is ignored when no infrastructure is configured (no infrastructure is generated)',\n );\n }\n\n const auth = options.auth ?? 'iam';\n\n // Ensure the shared agent-connection project exists so the server entry\n // point can import `session_id_context` and propagate the AgentCore\n // session ID to any downstream MCP / A2A clients a later connection\n // generator wires into this agent.\n await ensurePythonAgentConnectionProject(tree);\n // The agent server imports the framework base helpers (session cache + model\n // error logging) regardless of whether a connection client is wired in. The\n // langchain framework has no base layer (its AG-UI foundation reuses only the\n // framework-agnostic session context), so this is a no-op for langchain.\n await addPythonFrameworkBase(tree, framework);\n const agentConnectionModuleName = getPythonAgentConnectionModuleName(tree);\n addWorkspaceDependencyToPyProject(\n tree,\n project,\n getPythonAgentConnectionProject(tree),\n );\n\n const templateContext = {\n name,\n agentNameSnakeCase,\n agentNameClassName,\n moduleName,\n agentConnectionModuleName,\n framework,\n };\n\n // Generate common files shared by both protocols. The agent module (agent.py)\n // is framework-specific (Strands yields a contextmanaged Agent; LangChain\n // returns a compiled create_agent graph), so it comes from a per-framework\n // dir. The package __init__.py is framework-agnostic (it stays in `common`).\n generateFiles(\n tree,\n joinPathFragments(\n import.meta.dirname,\n 'files',\n framework === 'langchain' ? 'common-langchain' : 'common',\n ),\n targetSourceDir,\n templateContext,\n { overwriteStrategy: OverwriteStrategy.KeepExisting },\n );\n if (framework === 'langchain') {\n // common-langchain only carries agent.py; the empty package __init__.py is\n // framework-agnostic, so emit it from the shared `common` dir.\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files', 'common'),\n targetSourceDir,\n templateContext,\n { overwriteStrategy: OverwriteStrategy.KeepExisting },\n );\n }\n\n // Generate protocol-specific files. Each protocol's server entry point is\n // framework-specific (Strands yields a contextmanaged Agent; LangChain drives\n // a compiled create_agent graph), so it comes from a per-framework dir\n // `<protocol>-langchain` for LangChain, or `<protocol>` for Strands.\n const protocolLower = protocol.toLowerCase();\n const protocolTemplateDir =\n framework === 'langchain' ? `${protocolLower}-langchain` : protocolLower;\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files', protocolTemplateDir),\n targetSourceDir,\n templateContext,\n { overwriteStrategy: OverwriteStrategy.KeepExisting },\n );\n // The HTTP server's init.py (the FastAPI app + JsonStreamingResponse) is\n // framework-agnostic and the LangChain http main.py reuses it, so emit it\n // from the shared `http` dir. Emitted after the langchain main.py above so\n // KeepExisting preserves that main.py and only adds init.py (the shared dir's\n // own Strands main.py is skipped).\n if (protocolLower === 'http' && framework === 'langchain') {\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files', 'http'),\n targetSourceDir,\n templateContext,\n { overwriteStrategy: OverwriteStrategy.KeepExisting },\n );\n }\n\n addDependenciesToPyProjectToml(tree, project.root, [\n 'aws-lambda-powertools',\n 'aws-opentelemetry-distro',\n 'bedrock-agentcore',\n 'boto3',\n 'fastapi',\n 'mcp',\n ...(framework === 'langchain'\n ? // langchain pulls no Strands dependencies — the langchain model binding\n // (langchain, langchain-aws, langgraph) plus the per-protocol server\n // adapter: ag-ui-langgraph for AG-UI, a2a-sdk for A2A, nothing extra for\n // HTTP (FastAPI is added above for every agent).\n ([\n 'langchain',\n 'langchain-aws',\n 'langgraph',\n ...(protocol === 'ag-ui'\n ? (['ag-ui-protocol', 'ag-ui-langgraph'] as const)\n : protocol === 'a2a'\n ? (['a2a-sdk'] as const)\n : ([] as const)),\n ] as const)\n : protocol === 'a2a'\n ? (['strands-agents[a2a]', 'strands-agents-tools'] as const)\n : protocol === 'ag-ui'\n ? ([\n 'strands-agents',\n 'strands-agents-tools',\n 'ag-ui-protocol',\n 'ag-ui-strands',\n ] as const)\n : (['strands-agents', 'strands-agents-tools'] as const)),\n 'uvicorn',\n ]);\n addDependenciesToDependencyGroupInPyProjectToml(tree, project.root, 'dev', [\n 'fastapi[standard]',\n ]);\n\n if (infra === 'agentcore') {\n const containers = await resolveContainers(tree, 'inherit');\n const dockerImageTag = `${getNpmScope(tree)}-${name}:latest`;\n\n // Add bundle target\n const { bundleTargetName, bundleOutputDir } = addPythonBundleTarget(\n project,\n {\n pythonPlatform: 'aarch64-manylinux_2_28',\n },\n );\n\n // Add the Dockerfile\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files', 'deploy'),\n targetSourceDir,\n {\n agentNameSnakeCase,\n moduleName,\n bundleOutputDir,\n protocol,\n },\n { overwriteStrategy: OverwriteStrategy.KeepExisting },\n );\n\n const dockerOutputDir = joinPathFragments(\n 'dist',\n project.root,\n 'docker',\n name,\n );\n const dockerTargetName = `${agentTargetPrefix}-docker`;\n\n // Add a docker target that prepares the docker context and builds the image\n const fs = new FsCommands(tree);\n project.targets[dockerTargetName] = {\n cache: true,\n executor: 'nx:run-commands',\n options: {\n commands: [\n fs.rm(dockerOutputDir),\n fs.mkdir(dockerOutputDir),\n fs.cp(bundleOutputDir, dockerOutputDir),\n fs.cp(\n `${targetSourceDir}/Dockerfile`,\n `${dockerOutputDir}/Dockerfile`,\n ),\n `${containers} build --platform linux/arm64 -t ${dockerImageTag} ${dockerOutputDir}`,\n ],\n parallel: false,\n },\n dependsOn: [bundleTargetName],\n };\n\n addDependencyToTargetIfNotPresent(project, 'docker', dockerTargetName);\n addDependencyToTargetIfNotPresent(project, 'build', 'docker');\n\n // Add shared constructs\n const iac = await resolveIac(tree, options.iac);\n await sharedConstructsGenerator(tree, { iac });\n\n // Add the construct to deploy the agent.\n // AG-UI uses HTTP as the AgentCore protocol type (AG-UI is HTTP-based with SSE over POST).\n const infraProtocol =\n protocol === 'ag-ui' ? ('http' as const) : (protocol as 'http' | 'a2a');\n await addAgentInfra(tree, {\n agentNameKebabCase: name,\n agentNameClassName,\n dockerImageTag,\n dockerOutputDir,\n iac,\n projectName: project.name,\n auth,\n serverProtocol: infraProtocol,\n containers,\n });\n }\n\n // A2A servers use port 9000 as per the Strands A2A SDK default and AgentCore A2A contract.\n // HTTP and AG-UI agents use port 8081+ to avoid conflict with VS Code server on 8080.\n const localDevPortStart = protocol === 'a2a' ? 9000 : 8081;\n const localDevPort = assignPort(tree, project, localDevPortStart, {\n component: { info: PY_AGENT_GENERATOR_INFO, name: agentTargetPrefix },\n });\n\n // All protocols use fastapi dev for hot reload:\n // - HTTP: FastAPI app directly defined in init.py\n // - A2A: A2AServer.to_fastapi_app() creates a FastAPI app in main.py\n // - AG-UI: create_strands_app() creates a FastAPI app in main.py\n const serveCommand = `uv run fastapi dev ${moduleName}/${agentNameSnakeCase}/main.py --port ${localDevPort}`;\n\n // HTTP chat uses the type-safe TypeScript client generated from the\n // agent's OpenAPI spec (same generated client the react-connection\n // generator produces). A2A and AG-UI speak standard protocols, so\n // we can run `agent-chat-cli` directly as a binary.\n const openApiTargetName = `${agentTargetPrefix}-openapi`;\n const clientGenTargetName = `${agentTargetPrefix}-generate-client`;\n\n const scriptsDir = joinPathFragments(\n project.root,\n 'scripts',\n agentTargetPrefix,\n );\n\n if (protocol === 'http') {\n // Emit the OpenAPI spec generator script (shared with react-connection)\n generateFiles(\n tree,\n joinPathFragments(\n import.meta.dirname,\n 'react-connection',\n 'files',\n 'agent',\n ),\n project.root,\n {\n moduleName,\n agentNameSnakeCase,\n },\n { overwriteStrategy: OverwriteStrategy.KeepExisting },\n );\n\n // Ignore the generated client directory\n updateGitIgnore(tree, project.root, (patterns) => [\n ...patterns,\n `scripts/${agentTargetPrefix}/generated/`,\n ]);\n }\n\n // Every protocol gets a standalone `chat.ts`. It connects to the local\n // `dev` server by default, or to the deployed agent (with the\n // appropriate auth) when `RUNTIME_CONFIG_APP_ID` is set.\n addAgentChatScripts(tree, {\n scriptsDir,\n protocol,\n language: 'py',\n agentNameClassName,\n auth,\n });\n\n // TypeScript deps for the chat CLI, which runs standalone via tsx for every\n // protocol and resolves the deployed agent from AppConfig. `agent-chat-cli`\n // transitively bundles the protocol clients (@a2a-js/sdk, @ag-ui/client).\n addDependenciesToPackageJson(\n tree,\n {},\n withVersions([\n 'agent-chat-cli',\n 'tsx',\n '@types/node',\n '@aws-lambda-powertools/parameters',\n '@aws-sdk/client-appconfigdata',\n ...(auth === 'iam'\n ? (['aws4fetch', '@aws-sdk/credential-providers'] as const)\n : ([] as const)),\n ...(protocol === 'a2a' ? (['@a2a-js/sdk'] as const) : ([] as const)),\n ]),\n );\n\n const chatUrl =\n protocol === 'ag-ui'\n ? `http://localhost:${localDevPort}/invocations`\n : `http://localhost:${localDevPort}`;\n const chatCommand = `tsx ./scripts/${agentTargetPrefix}/chat.ts`;\n\n const httpOnlyTargets =\n protocol === 'http'\n ? {\n [openApiTargetName]: {\n cache: true,\n executor: 'nx:run-commands',\n outputs: [\n `{workspaceRoot}/dist/{projectRoot}/openapi/${agentNameSnakeCase}`,\n ],\n options: {\n commands: [\n `uv run python {projectRoot}/scripts/${agentNameSnakeCase}_openapi.py \"dist/{projectRoot}/openapi/${agentNameSnakeCase}/openapi.json\"`,\n ],\n },\n },\n [clientGenTargetName]: {\n cache: true,\n executor: 'nx:run-commands',\n dependsOn: [openApiTargetName],\n inputs: [\n {\n dependentTasksOutputFiles: '**/*.json',\n },\n ],\n outputs: [`{projectRoot}/scripts/${agentTargetPrefix}/generated`],\n options: {\n commands: [\n `nx g @aws/nx-plugin:open-api#ts-client --openApiSpecPath=\"dist/${project.root}/openapi/${agentNameSnakeCase}/openapi.json\" --outputPath=\"${project.root}/scripts/${agentTargetPrefix}/generated\" --no-interactive`,\n ],\n },\n },\n }\n : {};\n\n const agentTargets = {\n ...project.targets,\n ...httpOnlyTargets,\n [`${agentTargetPrefix}-serve`]: {\n executor: 'nx:run-commands',\n continuous: true,\n options: {\n commands: [serveCommand],\n cwd: '{projectRoot}',\n env: {\n PORT: `${localDevPort}`,\n },\n },\n },\n [`${agentTargetPrefix}-dev`]: {\n executor: 'nx:run-commands',\n continuous: true,\n options: {\n commands: [serveCommand],\n cwd: '{projectRoot}',\n env: {\n PORT: `${localDevPort}`,\n LOCAL_DEV: 'true',\n },\n },\n },\n // HTTP chat imports the generated client, so ensure it's built first.\n // No dev dependency — chat runs standalone against a local or\n // deployed agent. normalizeTargetKeyOrder keeps the conditional dependsOn\n // in Nx 23's serialization order so re-runs stay byte-identical.\n [`${agentTargetPrefix}-chat`]: normalizeTargetKeyOrder({\n executor: 'nx:run-commands',\n options: {\n commands: [chatCommand],\n cwd: '{projectRoot}',\n env: {\n URL: chatUrl,\n },\n },\n ...(protocol === 'http' ? { dependsOn: [clientGenTargetName] } : {}),\n }),\n };\n\n // Aggregate `<agent>-dev` under the project-level `dev` target.\n addComponentDevTarget(agentTargets, `${agentTargetPrefix}-dev`);\n\n updateProjectConfiguration(tree, project.name, {\n ...project,\n targets: sortObjectKeys(agentTargets),\n });\n\n addComponentGeneratorMetadata(\n tree,\n project.name,\n PY_AGENT_GENERATOR_INFO,\n toProjectRelativePath(project, targetSourceDir),\n agentTargetPrefix,\n {\n port: localDevPort,\n rc: agentNameClassName,\n auth,\n protocol,\n // The mcp / gateway connection generators dispatch on this field to pick\n // the Strands vs LangChain Layer-2 client + agent.py transform.\n framework,\n },\n );\n\n await addGeneratorMetricsIfApplicable(tree, [PY_AGENT_GENERATOR_INFO]);\n\n // langchain-core (pulled by every langchain agent regardless of protocol)\n // brings jsonpatch/jsonpointer, whose wheels ship without resolvable SPDX\n // license metadata, so register those exceptions so the workspace license\n // check still passes.\n if (framework === 'langchain') {\n await ensureLicenseExceptions(tree, AG_UI_LANGGRAPH_EXCEPTIONS);\n }\n\n await formatFilesInSubtree(tree);\n return async () => {\n installPackagesTask(tree);\n await new UVProvider(tree.root, new Logger(), tree).install();\n };\n};\n\nexport default pyAgentGenerator;\n"],"names":["addDependenciesToPackageJson","generateFiles","installPackagesTask","joinPathFragments","OverwriteStrategy","updateProjectConfiguration","ensureLicenseExceptions","AG_UI_LANGGRAPH_EXCEPTIONS","addAgentChatScripts","addPythonFrameworkBase","ensurePythonAgentConnectionProject","getPythonAgentConnectionModuleName","getPythonAgentConnectionProject","addAgentInfra","addPythonBundleTarget","resolveContainers","formatFilesInSubtree","FsCommands","updateGitIgnore","resolveIac","addGeneratorMetricsIfApplicable","kebabCase","toClassName","toSnakeCase","getNpmScope","addComponentDevTarget","addComponentGeneratorMetadata","addDependencyToTargetIfNotPresent","getGeneratorInfo","normalizeTargetKeyOrder","readProjectConfigurationUnqualified","Logger","UVProvider","sortObjectKeys","toProjectRelativePath","assignPort","addDependenciesToDependencyGroupInPyProjectToml","addDependenciesToPyProjectToml","addWorkspaceDependencyToPyProject","sharedConstructsGenerator","withVersions","PY_AGENT_GENERATOR_INFO","filename","pyAgentGenerator","tree","options","project","pyProjectPath","root","Error","sourceRoot","sourceParts","split","moduleName","length","name","pop","agentTargetPrefix","agentNameSnakeCase","agentNameClassName","targetSourceDir","infra","protocol","framework","auth","console","warn","agentConnectionModuleName","templateContext","dirname","overwriteStrategy","KeepExisting","protocolLower","toLowerCase","protocolTemplateDir","containers","dockerImageTag","bundleTargetName","bundleOutputDir","pythonPlatform","dockerOutputDir","dockerTargetName","fs","targets","cache","executor","commands","rm","mkdir","cp","parallel","dependsOn","iac","infraProtocol","agentNameKebabCase","projectName","serverProtocol","localDevPortStart","localDevPort","component","info","serveCommand","openApiTargetName","clientGenTargetName","scriptsDir","patterns","language","chatUrl","chatCommand","httpOnlyTargets","outputs","inputs","dependentTasksOutputFiles","agentTargets","continuous","cwd","env","PORT","LOCAL_DEV","URL","port","rc","install"],"mappings":"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"}
|
|
@@ -3,16 +3,11 @@
|
|
|
3
3
|
exports[`py#agent#mcp-connection generator > should match snapshot for generated files > agent-connection-init.py 1`] = `
|
|
4
4
|
""""Automatically generated by Nx."""
|
|
5
5
|
|
|
6
|
-
from .core.session_context import get_current_session_id, session_id_context
|
|
7
|
-
|
|
8
6
|
from .app.inventory_mcp_client_strands import InventoryMcpClientStrands
|
|
9
|
-
|
|
10
7
|
from .core.model_errors_strands import log_model_errors
|
|
11
|
-
|
|
12
|
-
|
|
8
|
+
from .core.session_context import get_current_session_id, session_id_context
|
|
13
9
|
from .core.with_session_id_strands import with_session_id
|
|
14
10
|
|
|
15
|
-
|
|
16
11
|
__all__ = [
|
|
17
12
|
"get_current_session_id",
|
|
18
13
|
"session_id_context",
|
|
@@ -98,7 +93,6 @@ exports[`py#agent#mcp-connection generator > should match snapshot for generated
|
|
|
98
93
|
from typing import Any
|
|
99
94
|
|
|
100
95
|
import boto3
|
|
101
|
-
|
|
102
96
|
from mcp.client.streamable_http import streamablehttp_client
|
|
103
97
|
|
|
104
98
|
from .auth.session import jwt_auth, plain_auth, sigv4_auth
|
|
@@ -140,14 +134,13 @@ def no_auth_transport(url: str) -> TransportFactory:
|
|
|
140
134
|
exports[`py#agent#mcp-connection generator > should match snapshot for generated files > inventory_mcp_client_strands.py 1`] = `
|
|
141
135
|
"import os
|
|
142
136
|
|
|
143
|
-
from strands.tools.mcp.mcp_client import MCPClient
|
|
144
|
-
|
|
145
137
|
from proj_agent_connection.core.agentcore_mcp_client_strands import (
|
|
146
138
|
AgentCoreMCPClientStrands,
|
|
147
139
|
)
|
|
148
140
|
from proj_agent_connection.core.runtime_config import (
|
|
149
141
|
get_agentcore_runtime_config,
|
|
150
142
|
)
|
|
143
|
+
from strands.tools.mcp.mcp_client import MCPClient
|
|
151
144
|
|
|
152
145
|
|
|
153
146
|
class InventoryMcpClientStrands:
|
|
@@ -155,7 +148,7 @@ class InventoryMcpClientStrands:
|
|
|
155
148
|
|
|
156
149
|
@staticmethod
|
|
157
150
|
def create() -> MCPClient:
|
|
158
|
-
if os.environ.get("
|
|
151
|
+
if os.environ.get("LOCAL_DEV") == "true":
|
|
159
152
|
return AgentCoreMCPClientStrands.without_auth("http://localhost:8082/mcp")
|
|
160
153
|
config = get_agentcore_runtime_config()
|
|
161
154
|
agent_runtime_arn = config.get("agentRuntimes", {}).get("InventoryMcp")
|
|
@@ -223,9 +216,9 @@ def plain_auth() -> httpx.Auth:
|
|
|
223
216
|
`;
|
|
224
217
|
|
|
225
218
|
exports[`py#agent#mcp-connection generator > should match snapshot for generated files > transformed-agent.py 1`] = `
|
|
226
|
-
"from
|
|
227
|
-
from contextlib import contextmanager
|
|
219
|
+
"from contextlib import contextmanager
|
|
228
220
|
|
|
221
|
+
from proj_agent_connection import InventoryMcpClientStrands
|
|
229
222
|
from strands import Agent, tool
|
|
230
223
|
from strands_tools import current_time
|
|
231
224
|
|
|
@@ -15,7 +15,7 @@ class <%- mcpServerClassName %>ClientStrands:
|
|
|
15
15
|
|
|
16
16
|
@staticmethod
|
|
17
17
|
def create() -> MCPClient:
|
|
18
|
-
if os.environ.get("
|
|
18
|
+
if os.environ.get("LOCAL_DEV") == "true":
|
|
19
19
|
return AgentCoreMCPClientStrands.without_auth(
|
|
20
20
|
"http://localhost:<%- mcpServerPort %>/mcp"
|
|
21
21
|
)
|
|
@@ -15,7 +15,7 @@ class <%- mcpServerClassName %>ClientLangChain:
|
|
|
15
15
|
|
|
16
16
|
@staticmethod
|
|
17
17
|
def create() -> list[BaseTool]:
|
|
18
|
-
if os.environ.get("
|
|
18
|
+
if os.environ.get("LOCAL_DEV") == "true":
|
|
19
19
|
return AgentCoreMCPClientLangChain.without_auth(
|
|
20
20
|
"http://localhost:<%- mcpServerPort %>/mcp"
|
|
21
21
|
)
|
|
@@ -1,22 +1,18 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.pyAgentMcpConnectionGenerator = exports.PY_AGENT_MCP_CONNECTION_GENERATOR_INFO = void 0;
|
|
4
1
|
/**
|
|
5
2
|
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
6
3
|
* SPDX-License-Identifier: Apache-2.0
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
const
|
|
16
|
-
|
|
17
|
-
const
|
|
18
|
-
const
|
|
19
|
-
const targetProject = (0, nx_1.readProjectConfigurationUnqualified)(tree, options.targetProject);
|
|
4
|
+
*/ import { generateFiles, installPackagesTask, joinPathFragments, OverwriteStrategy, updateProjectConfiguration } from "@nx/devkit";
|
|
5
|
+
import { addPythonCoreClient, addPythonReExport, ensurePythonAgentConnectionProject, getPythonAgentConnectionModuleName, getPythonAgentConnectionProject, getPythonAgentConnectionProjectDir, PY_MCP_FAMILY_CONNECTIONS, resolveAgentFramework } from "../../../utils/agent-connection/agent-connection.js";
|
|
6
|
+
import { addPythonDestructuredImport } from "../../../utils/ast.js";
|
|
7
|
+
import { formatFilesInSubtree } from "../../../utils/format.js";
|
|
8
|
+
import { addGeneratorMetricsIfApplicable } from "../../../utils/metrics.js";
|
|
9
|
+
import { snakeCase } from "../../../utils/names.js";
|
|
10
|
+
import { addDependencyToTargetIfNotPresent, getGeneratorInfo, readProjectConfigurationUnqualified } from "../../../utils/nx.js";
|
|
11
|
+
import { addDependenciesToPyProjectToml, addWorkspaceDependencyToPyProject } from "../../../utils/py.js";
|
|
12
|
+
export const PY_AGENT_MCP_CONNECTION_GENERATOR_INFO = getGeneratorInfo(import.meta.filename);
|
|
13
|
+
export const pyAgentMcpConnectionGenerator = async (tree, options)=>{
|
|
14
|
+
const sourceProject = readProjectConfigurationUnqualified(tree, options.sourceProject);
|
|
15
|
+
const targetProject = readProjectConfigurationUnqualified(tree, options.targetProject);
|
|
20
16
|
const agentComponent = options.sourceComponent;
|
|
21
17
|
const mcpComponent = options.targetComponent;
|
|
22
18
|
if (!agentComponent || !mcpComponent) {
|
|
@@ -27,74 +23,79 @@ const pyAgentMcpConnectionGenerator = async (tree, options) => {
|
|
|
27
23
|
}
|
|
28
24
|
const mcpComponentName = mcpComponent.name ?? 'mcp-server';
|
|
29
25
|
const mcpServerClassName = mcpComponent.rc;
|
|
30
|
-
const mcpServerSnakeCase =
|
|
26
|
+
const mcpServerSnakeCase = snakeCase(mcpServerClassName);
|
|
31
27
|
const mcpServerPort = mcpComponent.port ?? 8000;
|
|
32
28
|
// The source agent's framework selects the client shape, dependencies and the
|
|
33
29
|
// agent.py transform — see PY_MCP_FAMILY_CONNECTIONS (keyed by framework, not a
|
|
34
30
|
// boolean, so a third framework is an additive entry there).
|
|
35
|
-
const framework =
|
|
36
|
-
const connection =
|
|
31
|
+
const framework = resolveAgentFramework(agentComponent.framework);
|
|
32
|
+
const connection = PY_MCP_FAMILY_CONNECTIONS[framework];
|
|
37
33
|
// 1. Ensure the shared Python agent-connection project exists + has the
|
|
38
34
|
// MCP core client (framework Layer-2) and its shared SigV4 auth helper.
|
|
39
|
-
await
|
|
40
|
-
await
|
|
41
|
-
const agentConnectionProjectDir =
|
|
42
|
-
const agentConnectionModuleName =
|
|
43
|
-
const agentConnectionPackageName = (0, agent_connection_1.getPythonAgentConnectionPackageName)(tree);
|
|
35
|
+
await ensurePythonAgentConnectionProject(tree);
|
|
36
|
+
await addPythonCoreClient(tree, 'mcp', framework);
|
|
37
|
+
const agentConnectionProjectDir = getPythonAgentConnectionProjectDir(tree);
|
|
38
|
+
const agentConnectionModuleName = getPythonAgentConnectionModuleName(tree);
|
|
44
39
|
// Shared MCP transport + signed httpx auth deps, plus whatever extra deps the
|
|
45
40
|
// framework's MCP client needs (e.g. langchain-mcp-adapters for LangChain).
|
|
46
|
-
|
|
41
|
+
addDependenciesToPyProjectToml(tree, agentConnectionProjectDir, [
|
|
47
42
|
'boto3',
|
|
48
43
|
'httpx',
|
|
49
44
|
'mcp',
|
|
50
|
-
...connection.deps
|
|
45
|
+
...connection.deps
|
|
51
46
|
]);
|
|
52
47
|
// 2. Generate the per-connection client into the shared agent-connection project
|
|
53
|
-
const appDir =
|
|
54
|
-
|
|
48
|
+
const appDir = joinPathFragments(agentConnectionProjectDir, agentConnectionModuleName, 'app');
|
|
49
|
+
generateFiles(tree, joinPathFragments(import.meta.dirname, 'files', connection.appTemplateSubdir), appDir, {
|
|
55
50
|
mcpServerSnakeCase,
|
|
56
51
|
mcpServerClassName,
|
|
57
52
|
mcpServerPort,
|
|
58
|
-
agentConnectionModuleName
|
|
59
|
-
}, {
|
|
53
|
+
agentConnectionModuleName
|
|
54
|
+
}, {
|
|
55
|
+
overwriteStrategy: OverwriteStrategy.KeepExisting
|
|
56
|
+
});
|
|
60
57
|
// Ensure app/__init__.py exists
|
|
61
|
-
const appInitPath =
|
|
58
|
+
const appInitPath = joinPathFragments(appDir, '__init__.py');
|
|
62
59
|
if (!tree.exists(appInitPath)) {
|
|
63
60
|
tree.write(appInitPath, '');
|
|
64
61
|
}
|
|
65
62
|
// Add re-export to module __init__.py
|
|
66
|
-
const moduleInitPath =
|
|
67
|
-
await
|
|
63
|
+
const moduleInitPath = joinPathFragments(agentConnectionProjectDir, agentConnectionModuleName, '__init__.py');
|
|
64
|
+
await addPythonReExport(tree, moduleInitPath, `.app.${mcpServerSnakeCase}_client_${connection.clientModuleSuffix}`, `${mcpServerClassName}Client${connection.clientClassSuffix}`);
|
|
68
65
|
// 3. Transform agent.py to add MCP client import and usage
|
|
69
|
-
const agentSourceDir =
|
|
70
|
-
const agentFilePath =
|
|
66
|
+
const agentSourceDir = joinPathFragments(sourceProject.root, agentComponent.path ?? 'src');
|
|
67
|
+
const agentFilePath = joinPathFragments(agentSourceDir, 'agent.py');
|
|
71
68
|
if (tree.exists(agentFilePath)) {
|
|
72
69
|
const clientClassName = `${mcpServerClassName}Client${connection.clientClassSuffix}`;
|
|
73
70
|
const clientVarName = mcpServerSnakeCase;
|
|
74
|
-
await
|
|
71
|
+
await addPythonDestructuredImport(tree, agentFilePath, [
|
|
72
|
+
clientClassName
|
|
73
|
+
], agentConnectionModuleName);
|
|
75
74
|
await connection.wireClientIntoAgent(tree, agentFilePath, clientClassName, clientVarName);
|
|
76
75
|
}
|
|
77
76
|
// 4. Add workspace dependency from agent project to agent-connection project
|
|
78
|
-
|
|
79
|
-
// 5. Set up
|
|
77
|
+
addWorkspaceDependencyToPyProject(tree, sourceProject, getPythonAgentConnectionProject(tree));
|
|
78
|
+
// 5. Set up dev target dependencies
|
|
80
79
|
const agentName = agentComponent.name ?? 'agent';
|
|
81
|
-
const
|
|
82
|
-
const
|
|
83
|
-
if (sourceProject.targets?.[
|
|
84
|
-
|
|
85
|
-
projects: [
|
|
86
|
-
|
|
80
|
+
const devTargetName = `${agentName}-dev`;
|
|
81
|
+
const mcpDevTargetName = `${mcpComponentName}-dev`;
|
|
82
|
+
if (sourceProject.targets?.[devTargetName]) {
|
|
83
|
+
addDependencyToTargetIfNotPresent(sourceProject, devTargetName, {
|
|
84
|
+
projects: [
|
|
85
|
+
targetProject.name
|
|
86
|
+
],
|
|
87
|
+
target: mcpDevTargetName
|
|
87
88
|
});
|
|
88
|
-
|
|
89
|
+
updateProjectConfiguration(tree, sourceProject.name, sourceProject);
|
|
89
90
|
}
|
|
90
|
-
await
|
|
91
|
-
|
|
91
|
+
await addGeneratorMetricsIfApplicable(tree, [
|
|
92
|
+
PY_AGENT_MCP_CONNECTION_GENERATOR_INFO
|
|
92
93
|
]);
|
|
93
|
-
await
|
|
94
|
-
return ()
|
|
95
|
-
|
|
94
|
+
await formatFilesInSubtree(tree);
|
|
95
|
+
return ()=>{
|
|
96
|
+
installPackagesTask(tree);
|
|
96
97
|
};
|
|
97
98
|
};
|
|
98
|
-
|
|
99
|
-
|
|
99
|
+
export default pyAgentMcpConnectionGenerator;
|
|
100
|
+
|
|
100
101
|
//# sourceMappingURL=generator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../../packages/nx-plugin/src/py/agent/mcp-connection/generator.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACH,uCAQoB;AACpB,uFAS0D;AAC1D,4CAAiE;AACjE,kDAA6D;AAC7D,oDAAyE;AACzE,gDAAiD;AACjD,0CAK2B;AAC3B,0CAG2B;AAGd,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,YAAY,GAAG,OAAO,CAAC,eAAe,CAAC;IAE7C,IAAI,CAAC,cAAc,IAAI,CAAC,YAAY,EAAE,CAAC;QACrC,MAAM,IAAI,KAAK,CACb,2FAA2F,CAC5F,CAAC;IACJ,CAAC;IAED,IAAI,YAAY,CAAC,IAAI,IAAI,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,KAAK,EAAE,CAAC;QACnE,MAAM,IAAI,KAAK,CACb,0EAA0E,YAAY,CAAC,IAAI,WAAW,YAAY,CAAC,IAAI,mBAAmB,CAC3I,CAAC;IACJ,CAAC;IAED,MAAM,gBAAgB,GAAG,YAAY,CAAC,IAAI,IAAI,YAAY,CAAC;IAC3D,MAAM,kBAAkB,GAAG,YAAY,CAAC,EAAY,CAAC;IACrD,MAAM,kBAAkB,GAAG,IAAA,iBAAS,EAAC,kBAAkB,CAAC,CAAC;IACzD,MAAM,aAAa,GAAG,YAAY,CAAC,IAAI,IAAI,IAAI,CAAC;IAEhD,8EAA8E;IAC9E,gFAAgF;IAChF,6DAA6D;IAC7D,MAAM,SAAS,GAAG,IAAA,wCAAqB,EAAC,cAAc,CAAC,SAAS,CAAC,CAAC;IAClE,MAAM,UAAU,GAAG,4CAAyB,CAAC,SAAS,CAAC,CAAC;IAExD,wEAAwE;IACxE,2EAA2E;IAC3E,MAAM,IAAA,qDAAkC,EAAC,IAAI,CAAC,CAAC;IAC/C,MAAM,IAAA,sCAAmB,EAAC,IAAI,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;IAElD,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,8EAA8E;IAC9E,4EAA4E;IAC5E,IAAA,mCAA8B,EAAC,IAAI,EAAE,yBAAyB,EAAE;QAC9D,OAAO;QACP,OAAO;QACP,KAAK;QACL,GAAG,UAAU,CAAC,IAAI;KACnB,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,UAAU,CAAC,iBAAiB,CAAC,EACnE,MAAM,EACN;QACE,kBAAkB;QAClB,kBAAkB;QAClB,aAAa;QACb,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,kBAAkB,WAAW,UAAU,CAAC,kBAAkB,EAAE,EACpE,GAAG,kBAAkB,SAAS,UAAU,CAAC,iBAAiB,EAAE,CAC7D,CAAC;IAEF,2DAA2D;IAC3D,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,kBAAkB,SAAS,UAAU,CAAC,iBAAiB,EAAE,CAAC;QACrF,MAAM,aAAa,GAAG,kBAAkB,CAAC;QAEzC,MAAM,IAAA,iCAA2B,EAC/B,IAAI,EACJ,aAAa,EACb,CAAC,eAAe,CAAC,EACjB,yBAAyB,CAC1B,CAAC;QACF,MAAM,UAAU,CAAC,mBAAmB,CAClC,IAAI,EACJ,aAAa,EACb,eAAe,EACf,aAAa,CACd,CAAC;IACJ,CAAC;IAED,6EAA6E;IAC7E,IAAA,sCAAiC,EAC/B,IAAI,EACJ,aAAa,CAAC,IAAI,EAClB,0BAA0B,CAC3B,CAAC;IAEF,4CAA4C;IAC5C,MAAM,SAAS,GAAG,cAAc,CAAC,IAAI,IAAI,OAAO,CAAC;IACjD,MAAM,oBAAoB,GAAG,GAAG,SAAS,cAAc,CAAC;IACxD,MAAM,uBAAuB,GAAG,GAAG,gBAAgB,cAAc,CAAC;IAElE,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,uBAAuB;SAChC,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;AApJW,QAAA,6BAA6B,iCAoJxC;AAEF,kBAAe,qCAA6B,CAAC"}
|
|
1
|
+
{"version":3,"sources":["../../../../../../../packages/nx-plugin/src/py/agent/mcp-connection/generator.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport {\n type GeneratorCallback,\n generateFiles,\n installPackagesTask,\n joinPathFragments,\n OverwriteStrategy,\n type Tree,\n updateProjectConfiguration,\n} from '@nx/devkit';\nimport {\n addPythonCoreClient,\n addPythonReExport,\n ensurePythonAgentConnectionProject,\n getPythonAgentConnectionModuleName,\n getPythonAgentConnectionProject,\n getPythonAgentConnectionProjectDir,\n PY_MCP_FAMILY_CONNECTIONS,\n resolveAgentFramework,\n} from '../../../utils/agent-connection/agent-connection';\nimport { addPythonDestructuredImport } from '../../../utils/ast';\nimport { formatFilesInSubtree } from '../../../utils/format';\nimport { addGeneratorMetricsIfApplicable } from '../../../utils/metrics';\nimport { snakeCase } from '../../../utils/names';\nimport {\n addDependencyToTargetIfNotPresent,\n getGeneratorInfo,\n type NxGeneratorInfo,\n readProjectConfigurationUnqualified,\n} from '../../../utils/nx';\nimport {\n addDependenciesToPyProjectToml,\n addWorkspaceDependencyToPyProject,\n} from '../../../utils/py';\nimport type { PyAgentMcpConnectionGeneratorSchema } from './schema';\n\nexport const PY_AGENT_MCP_CONNECTION_GENERATOR_INFO: NxGeneratorInfo =\n getGeneratorInfo(import.meta.filename);\n\nexport const pyAgentMcpConnectionGenerator = async (\n tree: Tree,\n options: PyAgentMcpConnectionGeneratorSchema,\n): Promise<GeneratorCallback> => {\n const sourceProject = readProjectConfigurationUnqualified(\n tree,\n options.sourceProject,\n );\n const targetProject = readProjectConfigurationUnqualified(\n tree,\n options.targetProject,\n );\n\n const agentComponent = options.sourceComponent;\n const mcpComponent = options.targetComponent;\n\n if (!agentComponent || !mcpComponent) {\n throw new Error(\n 'Both sourceComponent and targetComponent must be provided for py#agent -> mcp connections',\n );\n }\n\n if (mcpComponent.auth && mcpComponent.auth.toLowerCase() !== 'iam') {\n throw new Error(\n `MCP server connection currently only supports IAM authentication, but '${mcpComponent.name}' uses '${mcpComponent.auth}' authentication.`,\n );\n }\n\n const mcpComponentName = mcpComponent.name ?? 'mcp-server';\n const mcpServerClassName = mcpComponent.rc as string;\n const mcpServerSnakeCase = snakeCase(mcpServerClassName);\n const mcpServerPort = mcpComponent.port ?? 8000;\n\n // The source agent's framework selects the client shape, dependencies and the\n // agent.py transform — see PY_MCP_FAMILY_CONNECTIONS (keyed by framework, not a\n // boolean, so a third framework is an additive entry there).\n const framework = resolveAgentFramework(agentComponent.framework);\n const connection = PY_MCP_FAMILY_CONNECTIONS[framework];\n\n // 1. Ensure the shared Python agent-connection project exists + has the\n // MCP core client (framework Layer-2) and its shared SigV4 auth helper.\n await ensurePythonAgentConnectionProject(tree);\n await addPythonCoreClient(tree, 'mcp', framework);\n\n const agentConnectionProjectDir = getPythonAgentConnectionProjectDir(tree);\n const agentConnectionModuleName = getPythonAgentConnectionModuleName(tree);\n\n // Shared MCP transport + signed httpx auth deps, plus whatever extra deps the\n // framework's MCP client needs (e.g. langchain-mcp-adapters for LangChain).\n addDependenciesToPyProjectToml(tree, agentConnectionProjectDir, [\n 'boto3',\n 'httpx',\n 'mcp',\n ...connection.deps,\n ]);\n\n // 2. Generate the per-connection client into the shared agent-connection project\n const appDir = joinPathFragments(\n agentConnectionProjectDir,\n agentConnectionModuleName,\n 'app',\n );\n generateFiles(\n tree,\n joinPathFragments(\n import.meta.dirname,\n 'files',\n connection.appTemplateSubdir,\n ),\n appDir,\n {\n mcpServerSnakeCase,\n mcpServerClassName,\n mcpServerPort,\n agentConnectionModuleName,\n },\n { overwriteStrategy: OverwriteStrategy.KeepExisting },\n );\n\n // Ensure app/__init__.py exists\n const appInitPath = joinPathFragments(appDir, '__init__.py');\n if (!tree.exists(appInitPath)) {\n tree.write(appInitPath, '');\n }\n\n // Add re-export to module __init__.py\n const moduleInitPath = joinPathFragments(\n agentConnectionProjectDir,\n agentConnectionModuleName,\n '__init__.py',\n );\n await addPythonReExport(\n tree,\n moduleInitPath,\n `.app.${mcpServerSnakeCase}_client_${connection.clientModuleSuffix}`,\n `${mcpServerClassName}Client${connection.clientClassSuffix}`,\n );\n\n // 3. Transform agent.py to add MCP client import and usage\n const agentSourceDir = joinPathFragments(\n sourceProject.root,\n agentComponent.path ?? 'src',\n );\n const agentFilePath = joinPathFragments(agentSourceDir, 'agent.py');\n\n if (tree.exists(agentFilePath)) {\n const clientClassName = `${mcpServerClassName}Client${connection.clientClassSuffix}`;\n const clientVarName = mcpServerSnakeCase;\n\n await addPythonDestructuredImport(\n tree,\n agentFilePath,\n [clientClassName],\n agentConnectionModuleName,\n );\n await connection.wireClientIntoAgent(\n tree,\n agentFilePath,\n clientClassName,\n clientVarName,\n );\n }\n\n // 4. Add workspace dependency from agent project to agent-connection project\n addWorkspaceDependencyToPyProject(\n tree,\n sourceProject,\n getPythonAgentConnectionProject(tree),\n );\n\n // 5. Set up dev target dependencies\n const agentName = agentComponent.name ?? 'agent';\n const devTargetName = `${agentName}-dev`;\n const mcpDevTargetName = `${mcpComponentName}-dev`;\n\n if (sourceProject.targets?.[devTargetName]) {\n addDependencyToTargetIfNotPresent(sourceProject, devTargetName, {\n projects: [targetProject.name],\n target: mcpDevTargetName,\n });\n updateProjectConfiguration(tree, sourceProject.name, sourceProject);\n }\n\n await addGeneratorMetricsIfApplicable(tree, [\n PY_AGENT_MCP_CONNECTION_GENERATOR_INFO,\n ]);\n\n await formatFilesInSubtree(tree);\n return () => {\n installPackagesTask(tree);\n };\n};\n\nexport default pyAgentMcpConnectionGenerator;\n"],"names":["generateFiles","installPackagesTask","joinPathFragments","OverwriteStrategy","updateProjectConfiguration","addPythonCoreClient","addPythonReExport","ensurePythonAgentConnectionProject","getPythonAgentConnectionModuleName","getPythonAgentConnectionProject","getPythonAgentConnectionProjectDir","PY_MCP_FAMILY_CONNECTIONS","resolveAgentFramework","addPythonDestructuredImport","formatFilesInSubtree","addGeneratorMetricsIfApplicable","snakeCase","addDependencyToTargetIfNotPresent","getGeneratorInfo","readProjectConfigurationUnqualified","addDependenciesToPyProjectToml","addWorkspaceDependencyToPyProject","PY_AGENT_MCP_CONNECTION_GENERATOR_INFO","filename","pyAgentMcpConnectionGenerator","tree","options","sourceProject","targetProject","agentComponent","sourceComponent","mcpComponent","targetComponent","Error","auth","toLowerCase","name","mcpComponentName","mcpServerClassName","rc","mcpServerSnakeCase","mcpServerPort","port","framework","connection","agentConnectionProjectDir","agentConnectionModuleName","deps","appDir","dirname","appTemplateSubdir","overwriteStrategy","KeepExisting","appInitPath","exists","write","moduleInitPath","clientModuleSuffix","clientClassSuffix","agentSourceDir","root","path","agentFilePath","clientClassName","clientVarName","wireClientIntoAgent","agentName","devTargetName","mcpDevTargetName","targets","projects","target"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../../packages/nx-plugin/src/py/agent/mcp-connection/schema.d.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { ComponentMetadata } from '../../../utils/nx';\n\n/**\n * TypeScript types for options defined in schema.json\n */\nexport interface PyAgentMcpConnectionGeneratorSchema {\n sourceProject: string;\n targetProject: string;\n sourceComponent?: ComponentMetadata;\n targetComponent?: ComponentMetadata;\n}\n"],"names":[],"mappings":"AAAA;;;CAGC,GAGD;;CAEC,GACD,WAKC"}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
|
|
2
2
|
|
|
3
3
|
exports[`py strands agent react connection generator > should generate OpenAPI spec script scoped to the agent > agent_openapi.py 1`] = `
|
|
4
|
-
"
|
|
5
|
-
import json
|
|
4
|
+
"import json
|
|
6
5
|
import os
|
|
7
6
|
import sys
|
|
8
7
|
|
|
8
|
+
from agent_project.agent.main import app
|
|
9
|
+
|
|
9
10
|
os.makedirs(os.path.dirname(sys.argv[1]), exist_ok=True)
|
|
10
11
|
with open(sys.argv[1], "w") as f:
|
|
11
12
|
json.dump(app.openapi(), f)
|
|
@@ -1,81 +1,75 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.pyAgentReactConnectionGenerator = exports.PY_AGENT_REACT_CONNECTION_GENERATOR_INFO = void 0;
|
|
4
1
|
/**
|
|
5
2
|
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
6
3
|
* SPDX-License-Identifier: Apache-2.0
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
const
|
|
18
|
-
|
|
19
|
-
const
|
|
20
|
-
const
|
|
21
|
-
const agentProjectConfig = (0, nx_1.readProjectConfigurationUnqualified)(tree, options.targetProject);
|
|
4
|
+
*/ import { generateFiles, installPackagesTask, joinPathFragments, OverwriteStrategy, updateProjectConfiguration } from "@nx/devkit";
|
|
5
|
+
import { addAgentRuntimeToConnectionNamespace } from "../../../connection/agent-runtime-config.js";
|
|
6
|
+
import { addAgUiReactConnection } from "../../../ts/react-website/agui/generator.js";
|
|
7
|
+
import { addOpenApiReactClient } from "../../../utils/connection/open-api/react.js";
|
|
8
|
+
import { formatFilesInSubtree } from "../../../utils/format.js";
|
|
9
|
+
import { addGeneratorMetricsIfApplicable } from "../../../utils/metrics.js";
|
|
10
|
+
import { kebabCase, toClassName, toSnakeCase } from "../../../utils/names.js";
|
|
11
|
+
import { getGeneratorInfo, readProjectConfigurationUnqualified } from "../../../utils/nx.js";
|
|
12
|
+
import { sortObjectKeys } from "../../../utils/object.js";
|
|
13
|
+
import { addPyAgentTargetToLocalDev, openApiClientLocalDevDeps } from "./local-dev.js";
|
|
14
|
+
export const PY_AGENT_REACT_CONNECTION_GENERATOR_INFO = getGeneratorInfo(import.meta.filename);
|
|
15
|
+
export const pyAgentReactConnectionGenerator = async (tree, options)=>{
|
|
16
|
+
const frontendProjectConfig = readProjectConfigurationUnqualified(tree, options.sourceProject);
|
|
17
|
+
const agentProjectConfig = readProjectConfigurationUnqualified(tree, options.targetProject);
|
|
22
18
|
const targetComponent = options.targetComponent;
|
|
23
19
|
// Extract agent metadata from the target component or project metadata
|
|
24
20
|
const metadata = agentProjectConfig.metadata;
|
|
25
21
|
const agentName = targetComponent?.name ?? 'agent';
|
|
26
|
-
const agentNameClassName = targetComponent?.rc ??
|
|
22
|
+
const agentNameClassName = targetComponent?.rc ?? toClassName(agentName);
|
|
27
23
|
const agentPort = targetComponent?.port ?? metadata?.ports?.[0] ?? 8081;
|
|
28
24
|
const auth = (targetComponent?.auth ?? metadata?.auth ?? 'iam').toLowerCase();
|
|
29
25
|
const protocol = (targetComponent?.protocol ?? 'http').toLowerCase();
|
|
30
26
|
if (protocol === 'a2a') {
|
|
31
|
-
throw new Error(`Cannot connect a React website to an A2A agent. ` +
|
|
32
|
-
`Consider generating an agent with the HTTP or AG-UI protocol instead.`);
|
|
27
|
+
throw new Error(`Cannot connect a React website to an A2A agent. ` + `Consider generating an agent with the HTTP or AG-UI protocol instead.`);
|
|
33
28
|
}
|
|
34
|
-
let
|
|
29
|
+
let additionalLocalDevDeps = [];
|
|
35
30
|
if (protocol === 'ag-ui') {
|
|
36
|
-
await
|
|
31
|
+
await addAgUiReactConnection(tree, {
|
|
37
32
|
frontendProjectConfig,
|
|
38
33
|
agentName,
|
|
39
34
|
agentNameClassName,
|
|
40
|
-
auth: auth
|
|
35
|
+
auth: auth
|
|
41
36
|
});
|
|
42
|
-
}
|
|
43
|
-
else {
|
|
37
|
+
} else {
|
|
44
38
|
const moduleName = getModuleName(agentProjectConfig);
|
|
45
|
-
const agentNameSnakeCase =
|
|
39
|
+
const agentNameSnakeCase = toSnakeCase(agentName);
|
|
46
40
|
const agentTargetPrefix = targetComponent?.name ? agentName : 'agent';
|
|
47
41
|
// Add OpenAPI spec generation script scoped to this agent
|
|
48
|
-
|
|
42
|
+
generateFiles(tree, joinPathFragments(import.meta.dirname, 'files/agent'), agentProjectConfig.root, {
|
|
49
43
|
moduleName,
|
|
50
|
-
agentNameSnakeCase
|
|
44
|
+
agentNameSnakeCase
|
|
51
45
|
}, {
|
|
52
|
-
overwriteStrategy:
|
|
46
|
+
overwriteStrategy: OverwriteStrategy.KeepExisting
|
|
53
47
|
});
|
|
54
48
|
// Instrument the OpenAPI spec generation as a target on the agent project
|
|
55
49
|
const openApiTargetName = `${agentTargetPrefix}-openapi`;
|
|
56
|
-
const openApiDist =
|
|
57
|
-
const specPath =
|
|
58
|
-
|
|
50
|
+
const openApiDist = joinPathFragments('dist', agentProjectConfig.root, 'openapi', agentNameSnakeCase);
|
|
51
|
+
const specPath = joinPathFragments(openApiDist, 'openapi.json');
|
|
52
|
+
updateProjectConfiguration(tree, agentProjectConfig.name, {
|
|
59
53
|
...agentProjectConfig,
|
|
60
|
-
targets:
|
|
54
|
+
targets: sortObjectKeys({
|
|
61
55
|
...agentProjectConfig.targets,
|
|
62
56
|
[openApiTargetName]: {
|
|
63
57
|
cache: true,
|
|
64
58
|
executor: 'nx:run-commands',
|
|
65
59
|
outputs: [
|
|
66
|
-
`{workspaceRoot}/dist/{projectRoot}/openapi/${agentNameSnakeCase}
|
|
60
|
+
`{workspaceRoot}/dist/{projectRoot}/openapi/${agentNameSnakeCase}`
|
|
67
61
|
],
|
|
68
62
|
options: {
|
|
69
63
|
commands: [
|
|
70
|
-
`uv run python {projectRoot}/scripts/${agentNameSnakeCase}_openapi.py "dist/{projectRoot}/openapi/${agentNameSnakeCase}/openapi.json"
|
|
71
|
-
]
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
})
|
|
64
|
+
`uv run python {projectRoot}/scripts/${agentNameSnakeCase}_openapi.py "dist/{projectRoot}/openapi/${agentNameSnakeCase}/openapi.json"`
|
|
65
|
+
]
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
})
|
|
75
69
|
});
|
|
76
70
|
// Use the shared OpenAPI react client utility for hooks, providers, and build targets.
|
|
77
|
-
//
|
|
78
|
-
await
|
|
71
|
+
// The dev target is handled separately below using the agent-specific dev target.
|
|
72
|
+
await addOpenApiReactClient(tree, {
|
|
79
73
|
apiName: agentNameClassName,
|
|
80
74
|
frontendProjectConfig,
|
|
81
75
|
backendProjectConfig: agentProjectConfig,
|
|
@@ -85,43 +79,42 @@ const pyAgentReactConnectionGenerator = async (tree, options) => {
|
|
|
85
79
|
auth,
|
|
86
80
|
port: agentPort,
|
|
87
81
|
isAgentRuntime: true,
|
|
88
|
-
|
|
82
|
+
skipLocalDev: true
|
|
89
83
|
});
|
|
90
|
-
|
|
84
|
+
additionalLocalDevDeps = openApiClientLocalDevDeps(agentNameClassName);
|
|
91
85
|
// HTTP only — the AG-UI branch handles this inside addAgUiReactConnection.
|
|
92
86
|
// Agent constructs publish their runtime ARN to the 'agentcore' namespace
|
|
93
87
|
// by default, which isn't exposed to the website; patch them to also
|
|
94
88
|
// publish under 'connection' so the browser can read it.
|
|
95
|
-
await
|
|
96
|
-
agentNameKebabCase:
|
|
97
|
-
agentNameClassName
|
|
89
|
+
await addAgentRuntimeToConnectionNamespace(tree, {
|
|
90
|
+
agentNameKebabCase: kebabCase(agentNameClassName),
|
|
91
|
+
agentNameClassName
|
|
98
92
|
});
|
|
99
93
|
}
|
|
100
|
-
await (
|
|
94
|
+
await addPyAgentTargetToLocalDev(tree, frontendProjectConfig.name, agentProjectConfig.name, {
|
|
101
95
|
agentName,
|
|
102
96
|
agentNameClassName,
|
|
103
97
|
port: agentPort,
|
|
104
98
|
targetComponent,
|
|
105
|
-
additionalDependencyTargets:
|
|
99
|
+
additionalDependencyTargets: additionalLocalDevDeps
|
|
106
100
|
});
|
|
107
|
-
await
|
|
108
|
-
|
|
101
|
+
await addGeneratorMetricsIfApplicable(tree, [
|
|
102
|
+
PY_AGENT_REACT_CONNECTION_GENERATOR_INFO
|
|
109
103
|
]);
|
|
110
|
-
await
|
|
111
|
-
return ()
|
|
112
|
-
|
|
104
|
+
await formatFilesInSubtree(tree);
|
|
105
|
+
return ()=>{
|
|
106
|
+
installPackagesTask(tree);
|
|
113
107
|
};
|
|
114
108
|
};
|
|
115
|
-
exports.pyAgentReactConnectionGenerator = pyAgentReactConnectionGenerator;
|
|
116
109
|
/**
|
|
117
110
|
* Determine the Python module name from the project configuration
|
|
118
|
-
*/
|
|
119
|
-
const getModuleName = (projectConfig) => {
|
|
111
|
+
*/ const getModuleName = (projectConfig)=>{
|
|
120
112
|
if (projectConfig.sourceRoot) {
|
|
121
113
|
const sourceRootParts = projectConfig.sourceRoot.split('/');
|
|
122
114
|
return sourceRootParts[sourceRootParts.length - 1];
|
|
123
115
|
}
|
|
124
116
|
throw new Error(`Could not determine sourceRoot for project ${projectConfig.name}`);
|
|
125
117
|
};
|
|
126
|
-
|
|
118
|
+
export default pyAgentReactConnectionGenerator;
|
|
119
|
+
|
|
127
120
|
//# sourceMappingURL=generator.js.map
|