@aws/nx-plugin 1.0.0-rc.79 → 1.0.0-rc.80
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/generators.json +10 -0
- package/migrations.json +1 -1
- package/package.json +1 -1
- package/src/agentcore-gateway/agent-connection/generator.d.ts +1 -1
- package/src/agentcore-gateway/agent-connection/generator.js.map +1 -1
- package/src/agentcore-gateway/agent-connection/schema.d.js.map +1 -1
- package/src/agentcore-gateway/agent-connection/schema.d.ts +1 -1
- package/src/agentcore-gateway/attach-upstream.js.map +1 -1
- package/src/agentcore-gateway/gateway-connection/generator.d.ts +1 -1
- package/src/agentcore-gateway/gateway-connection/generator.js.map +1 -1
- package/src/agentcore-gateway/gateway-connection/schema.d.js.map +1 -1
- package/src/agentcore-gateway/gateway-connection/schema.d.ts +1 -1
- package/src/agentcore-gateway/generator.d.ts +3 -3
- package/src/agentcore-gateway/generator.js.map +1 -1
- package/src/agentcore-gateway/mcp-connection/generator.d.ts +1 -1
- package/src/agentcore-gateway/mcp-connection/generator.js.map +1 -1
- package/src/agentcore-gateway/mcp-connection/schema.d.js.map +1 -1
- package/src/agentcore-gateway/mcp-connection/schema.d.ts +1 -1
- package/src/agentcore-gateway/react-connection/generator.d.ts +1 -1
- package/src/agentcore-gateway/react-connection/generator.js.map +1 -1
- package/src/agentcore-gateway/react-connection/schema.d.js.map +1 -1
- package/src/agentcore-gateway/react-connection/schema.d.ts +1 -1
- package/src/agentcore-gateway/schema.d.js.map +1 -1
- package/src/agentcore-gateway/schema.d.ts +1 -1
- package/src/agentcore-harness/generator.d.ts +4 -4
- package/src/agentcore-harness/generator.js.map +1 -1
- package/src/agentcore-harness/schema.d.js.map +1 -1
- package/src/agentcore-harness/schema.d.ts +1 -1
- package/src/connection/agent-local-dev.d.ts +1 -1
- package/src/connection/agent-local-dev.js.map +1 -1
- package/src/connection/agent-runtime-config.js.map +1 -1
- package/src/connection/gateway-runtime-config.js.map +1 -1
- package/src/connection/generator.d.ts +2 -2
- package/src/connection/generator.js.map +1 -1
- package/src/connection/local-dev.js.map +1 -1
- package/src/connection/scaffold-catalog.d.ts +1 -1
- package/src/connection/scaffold-catalog.js +6 -6
- package/src/connection/scaffold-catalog.js.map +1 -1
- package/src/connection/schema-resolver.d.ts +1 -1
- package/src/connection/schema-resolver.js.map +1 -1
- package/src/index.d.ts +1 -1
- package/src/index.js.map +1 -1
- package/src/infra/app/generator.d.ts +7 -7
- package/src/infra/app/generator.js.map +1 -1
- package/src/init/generator.d.ts +3 -3
- package/src/init/generator.js.map +1 -1
- package/src/init/schema.d.js.map +1 -1
- package/src/init/schema.d.ts +2 -2
- package/src/internal/test-matrix/generator.js.map +1 -1
- package/src/license/config-types.d.ts +2 -2
- package/src/license/config-types.js.map +1 -1
- package/src/license/config.d.ts +2 -2
- package/src/license/config.js.map +1 -1
- package/src/license/dependency-check/check.d.ts +2 -2
- package/src/license/dependency-check/check.js.map +1 -1
- package/src/license/dependency-check/collectors/collector.js.map +1 -1
- package/src/license/dependency-check/collectors/python-collector.js.map +1 -1
- package/src/license/dependency-check/evaluator.d.ts +1 -1
- package/src/license/dependency-check/evaluator.js.map +1 -1
- package/src/license/dependency-check/executor.js.map +1 -1
- package/src/license/dependency-check/pre-approved.d.ts +1 -1
- package/src/license/dependency-check/pre-approved.js.map +1 -1
- package/src/license/dependency-check/types.d.ts +1 -1
- package/src/license/dependency-check/types.js.map +1 -1
- package/src/license/generator.d.ts +1 -1
- package/src/license/generator.js.map +1 -1
- package/src/license/index.d.ts +4 -4
- package/src/license/index.js.map +1 -1
- package/src/license/known-exceptions.d.ts +1 -1
- package/src/license/known-exceptions.js.map +1 -1
- package/src/license/sync/generator.js.map +1 -1
- package/src/license/sync/project-file-sync.d.ts +1 -1
- package/src/license/sync/project-file-sync.js.map +1 -1
- package/src/mcp-server/dev-server.js.map +1 -1
- package/src/mcp-server/generator-info.d.ts +3 -3
- 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.map +1 -1
- package/src/mcp-server/guide-render.js.map +1 -1
- package/src/mcp-server/index.js.map +1 -1
- package/src/mcp-server/mdx-ast.js.map +1 -1
- package/src/mcp-server/server.js.map +1 -1
- package/src/mcp-server/tools/add-to-existing-project.d.ts +1 -1
- package/src/mcp-server/tools/add-to-existing-project.js.map +1 -1
- package/src/mcp-server/tools/create-workspace-command.js.map +1 -1
- package/src/mcp-server/tools/general-guidance.d.ts +1 -1
- package/src/mcp-server/tools/general-guidance.js +1 -1
- package/src/mcp-server/tools/general-guidance.js.map +1 -1
- package/src/mcp-server/tools/generator-guide.d.ts +1 -1
- package/src/mcp-server/tools/generator-guide.js.map +1 -1
- package/src/mcp-server/tools/list-generators.d.ts +1 -1
- package/src/mcp-server/tools/list-generators.js.map +1 -1
- package/src/mcp-server/tools/upgrade-workspace.d.ts +1 -1
- package/src/mcp-server/tools/upgrade-workspace.js.map +1 -1
- package/src/migrations/latest/apt-security-updates-in-container-images/migration.js.map +1 -1
- package/src/migrations/latest/dynamodb-configurable-encryption/migration.js.map +1 -1
- package/src/migrations/latest/py-agent-ag-ui-hooks/migration.js.map +1 -1
- package/src/migrations/latest/py-agent-session-id-middleware-extraction/migration.js.map +1 -1
- package/src/migrations/latest/remove-mcp-inspector-license-exceptions/migration.js.map +1 -1
- package/src/migrations/latest/static-website-configurable-waf-encryption/migration.js.map +1 -1
- package/src/migrations/latest/ts-agent-session-id-middleware-extraction/migration.js.map +1 -1
- package/src/migrations/latest/user-identity-configurable-mfa/migration.js.map +1 -1
- package/src/migrations/v1.0.0-rc.50/0001-modernize-function-props-cast/migration.js.map +1 -1
- package/src/migrations/v1.0.0-rc.50/0002-restrict-cors-to-custom-domains/migration.js.map +1 -1
- package/src/migrations/v1.0.0-rc.50/0003-terraform-bootstrap-adopt-existing-bucket/migration.js.map +1 -1
- package/src/migrations/v1.0.0-rc.52/0001-user-identity-waf-allow-localhost-callback/migration.js.map +1 -1
- package/src/migrations/v1.0.0-rc.54/0001-order-access-log-delivery-after-bucket-policy/migration.js.map +1 -1
- package/src/migrations/v1.0.0-rc.55/0001-backfill-generator-metadata/migration.d.ts +1 -1
- package/src/migrations/v1.0.0-rc.55/0001-backfill-generator-metadata/migration.js.map +1 -1
- package/src/migrations/v1.0.0-rc.56/0001-dynamodb-local-remove-optimize-flag/migration.js.map +1 -1
- package/src/migrations/v1.0.0-rc.57/0001-ts-agent-session-management-support/migration.js.map +1 -1
- package/src/migrations/v1.0.0-rc.58/0001-smithy-ssdk-bundle-pins/migration.js.map +1 -1
- package/src/migrations/v1.0.0-rc.59/0001-gateway-agent-targets/migration.js.map +1 -1
- package/src/migrations/v1.0.0-rc.60/0001-gateway-cognito-passthrough/migration.js.map +1 -1
- package/src/migrations/v1.0.0-rc.60/0002-waf-log-group-removal/migration.js.map +1 -1
- package/src/migrations/v1.0.0-rc.60/0003-strip-pip-from-python-images/migration.js.map +1 -1
- package/src/migrations/v1.0.0-rc.61/0001-py-agent-lifespan-construction/migration.js.map +1 -1
- package/src/migrations/v1.0.0-rc.62/0001-rename-load-runtime-config-target/migration.js.map +1 -1
- package/src/migrations/v1.0.0-rc.63/0001-add-deploy-sandbox-target/migration.js.map +1 -1
- package/src/migrations/v1.0.0-rc.64/0001-smithy-build-without-docker/migration.js.map +1 -1
- package/src/migrations/v1.0.0-rc.65/0001-vite-config-import-meta-dirname/migration.js.map +1 -1
- package/src/migrations/v1.0.0-rc.65/0002-rolldown-code-splitting/migration.js.map +1 -1
- package/src/migrations/v1.0.0-rc.67/0001-smithy-server-package-rename/migration.js.map +1 -1
- package/src/migrations/v1.0.0-rc.68/0001-translate-script-whole-file-writes/migration.js.map +1 -1
- package/src/migrations/v1.0.0-rc.70/0001-py-agent-a2a-lifespan-construction/migration.js.map +1 -1
- package/src/migrations/v1.0.0-rc.71/0001-py-agent-a2a-httpx-client-per-call/migration.js.map +1 -1
- package/src/migrations/v1.0.0-rc.72/0001-py-agent-session-management-support/migration.js.map +1 -1
- package/src/open-api/ts-client/generator.d.ts +1 -1
- package/src/open-api/ts-client/generator.js.map +1 -1
- package/src/open-api/ts-hooks/generator.d.ts +1 -1
- package/src/open-api/ts-hooks/generator.js.map +1 -1
- package/src/open-api/ts-hooks/generator.spec.tsx +6 -6
- package/src/open-api/ts-metadata/generator.d.ts +1 -1
- package/src/open-api/ts-metadata/generator.js.map +1 -1
- package/src/open-api/utils/codegen-data/languages.d.ts +1 -1
- package/src/open-api/utils/codegen-data/languages.js.map +1 -1
- package/src/open-api/utils/codegen-data.d.ts +2 -2
- package/src/open-api/utils/codegen-data.js.map +1 -1
- package/src/open-api/utils/normalise.d.ts +1 -1
- package/src/open-api/utils/normalise.js.map +1 -1
- package/src/open-api/utils/parse.d.ts +1 -1
- package/src/open-api/utils/parse.js.map +1 -1
- package/src/open-api/utils/parser.d.ts +2 -2
- package/src/open-api/utils/parser.js.map +1 -1
- package/src/open-api/utils/refs.d.ts +1 -1
- package/src/open-api/utils/refs.js.map +1 -1
- package/src/preset/generator.d.ts +3 -3
- package/src/preset/generator.js.map +1 -1
- package/src/preset/schema.d.js.map +1 -1
- package/src/preset/schema.d.ts +3 -3
- package/src/py/agent/a2a-connection/generator.d.ts +3 -3
- package/src/py/agent/a2a-connection/generator.js.map +1 -1
- package/src/py/agent/a2a-connection/schema.d.js.map +1 -1
- package/src/py/agent/a2a-connection/schema.d.ts +1 -1
- package/src/py/agent/gateway-connection/generator.d.ts +3 -3
- package/src/py/agent/gateway-connection/generator.js.map +1 -1
- package/src/py/agent/gateway-connection/schema.d.js.map +1 -1
- package/src/py/agent/gateway-connection/schema.d.ts +1 -1
- package/src/py/agent/generator.d.ts +3 -3
- package/src/py/agent/generator.js.map +1 -1
- package/src/py/agent/mcp-connection/generator.d.ts +3 -3
- package/src/py/agent/mcp-connection/generator.js.map +1 -1
- package/src/py/agent/mcp-connection/schema.d.js.map +1 -1
- package/src/py/agent/mcp-connection/schema.d.ts +1 -1
- package/src/py/agent/react-connection/generator.d.ts +12 -12
- package/src/py/agent/react-connection/generator.js.map +1 -1
- package/src/py/agent/react-connection/local-dev.d.ts +1 -1
- package/src/py/agent/react-connection/local-dev.js.map +1 -1
- package/src/py/agent/react-connection/schema.d.js.map +1 -1
- package/src/py/agent/react-connection/schema.d.ts +1 -1
- package/src/py/agent/schema.d.js.map +1 -1
- package/src/py/agent/schema.d.ts +1 -1
- package/src/py/api/generator.d.ts +1 -1
- package/src/py/api/generator.js.map +1 -1
- package/src/py/api/schema.d.js.map +1 -1
- package/src/py/api/schema.d.ts +1 -1
- package/src/py/dynamodb/agent-connection/generator.d.ts +1 -1
- package/src/py/dynamodb/agent-connection/generator.js.map +1 -1
- package/src/py/dynamodb/agent-connection/schema.d.js.map +1 -1
- package/src/py/dynamodb/agent-connection/schema.d.ts +1 -1
- package/src/py/dynamodb/fast-api-connection/generator.d.ts +1 -1
- package/src/py/dynamodb/fast-api-connection/generator.js.map +1 -1
- package/src/py/dynamodb/generator.d.ts +4 -4
- package/src/py/dynamodb/generator.js.map +1 -1
- package/src/py/dynamodb/mcp-server-connection/generator.d.ts +1 -1
- package/src/py/dynamodb/mcp-server-connection/generator.js.map +1 -1
- package/src/py/dynamodb/mcp-server-connection/schema.d.js.map +1 -1
- package/src/py/dynamodb/mcp-server-connection/schema.d.ts +1 -1
- package/src/py/dynamodb/schema.d.js.map +1 -1
- package/src/py/dynamodb/schema.d.ts +1 -1
- package/src/py/fast-api/generator.d.ts +3 -3
- package/src/py/fast-api/generator.js.map +1 -1
- package/src/py/fast-api/react/generator.d.ts +3 -3
- package/src/py/fast-api/react/generator.js.map +1 -1
- package/src/py/fast-api/react/open-api.js.map +1 -1
- package/src/py/fast-api/schema.d.js.map +1 -1
- package/src/py/fast-api/schema.d.ts +1 -1
- package/src/py/lambda-function/files/handler/__lambdaFunctionSnakeCase__.py.template +1 -1
- package/src/py/lambda-function/generator.d.ts +10 -4
- package/src/py/lambda-function/generator.js +8 -1
- package/src/py/lambda-function/generator.js.map +1 -1
- package/src/py/lambda-function/schema.d.js.map +1 -1
- package/src/py/lambda-function/schema.d.ts +2 -2
- package/src/py/lambda-function/schema.json +1 -1
- package/src/py/mcp-server/generator.d.ts +3 -3
- package/src/py/mcp-server/generator.js.map +1 -1
- package/src/py/mcp-server/schema.d.js.map +1 -1
- package/src/py/mcp-server/schema.d.ts +1 -1
- package/src/py/project/generator.d.ts +2 -2
- package/src/py/project/generator.js.map +1 -1
- package/src/py/project/schema.json +1 -0
- package/src/py/rdb/agent-connection/generator.d.ts +1 -1
- package/src/py/rdb/agent-connection/generator.js.map +1 -1
- package/src/py/rdb/agent-connection/schema.d.js.map +1 -1
- package/src/py/rdb/agent-connection/schema.d.ts +1 -1
- package/src/py/rdb/fast-api-connection/generator.d.ts +1 -1
- package/src/py/rdb/fast-api-connection/generator.js.map +1 -1
- package/src/py/rdb/generator.d.ts +3 -3
- package/src/py/rdb/generator.js.map +1 -1
- package/src/py/rdb/mcp-server-connection/generator.d.ts +1 -1
- package/src/py/rdb/mcp-server-connection/generator.js.map +1 -1
- package/src/py/rdb/mcp-server-connection/schema.d.js.map +1 -1
- package/src/py/rdb/mcp-server-connection/schema.d.ts +1 -1
- package/src/sdk/agentcore-gateway.d.ts +1 -1
- package/src/sdk/agentcore-gateway.js.map +1 -1
- package/src/sdk/agentcore-harness.d.ts +1 -1
- package/src/sdk/agentcore-harness.js.map +1 -1
- package/src/sdk/connection.d.ts +1 -1
- package/src/sdk/connection.js.map +1 -1
- package/src/sdk/license.d.ts +3 -3
- package/src/sdk/license.js.map +1 -1
- package/src/sdk/open-api.d.ts +3 -3
- package/src/sdk/open-api.js.map +1 -1
- package/src/sdk/py.d.ts +7 -7
- package/src/sdk/py.js.map +1 -1
- package/src/sdk/smithy.d.ts +1 -1
- package/src/sdk/smithy.js.map +1 -1
- package/src/sdk/terraform.d.ts +1 -1
- package/src/sdk/terraform.js.map +1 -1
- package/src/sdk/ts.d.ts +18 -18
- package/src/sdk/ts.js.map +1 -1
- package/src/sdk/utils/ast.d.ts +1 -1
- package/src/sdk/utils/ast.js.map +1 -1
- package/src/sdk/utils/format.d.ts +1 -1
- package/src/sdk/utils/format.js.map +1 -1
- package/src/sdk/utils/test.d.ts +1 -1
- package/src/sdk/utils/test.js.map +1 -1
- package/src/smithy/project/generator.d.ts +4 -4
- package/src/smithy/project/generator.js.map +1 -1
- package/src/smithy/react-connection/generator.d.ts +3 -3
- package/src/smithy/react-connection/generator.js.map +1 -1
- package/src/smithy/ts/api/generator.d.ts +3 -3
- package/src/smithy/ts/api/generator.js.map +1 -1
- package/src/smithy/ts/api/schema.d.js.map +1 -1
- package/src/smithy/ts/api/schema.d.ts +1 -1
- package/src/terraform/project/generator.d.ts +5 -5
- package/src/terraform/project/generator.js.map +1 -1
- package/src/trpc/backend/generator.d.ts +3 -3
- package/src/trpc/backend/generator.js.map +1 -1
- package/src/trpc/backend/schema.d.js.map +1 -1
- package/src/trpc/backend/schema.d.ts +1 -1
- package/src/trpc/react/generator.d.ts +3 -3
- package/src/trpc/react/generator.js.map +1 -1
- package/src/ts/agent/a2a-connection/generator.d.ts +3 -3
- package/src/ts/agent/a2a-connection/generator.js.map +1 -1
- package/src/ts/agent/a2a-connection/schema.d.js.map +1 -1
- package/src/ts/agent/a2a-connection/schema.d.ts +1 -1
- package/src/ts/agent/gateway-connection/generator.d.ts +3 -3
- package/src/ts/agent/gateway-connection/generator.js.map +1 -1
- package/src/ts/agent/gateway-connection/schema.d.js.map +1 -1
- package/src/ts/agent/gateway-connection/schema.d.ts +1 -1
- package/src/ts/agent/generator.d.ts +3 -3
- package/src/ts/agent/generator.js.map +1 -1
- package/src/ts/agent/mcp-connection/generator.d.ts +3 -3
- package/src/ts/agent/mcp-connection/generator.js.map +1 -1
- package/src/ts/agent/mcp-connection/schema.d.js.map +1 -1
- package/src/ts/agent/mcp-connection/schema.d.ts +1 -1
- package/src/ts/agent/react-connection/generator.d.ts +11 -11
- package/src/ts/agent/react-connection/generator.js.map +1 -1
- package/src/ts/agent/react-connection/local-dev.d.ts +1 -1
- package/src/ts/agent/react-connection/local-dev.js.map +1 -1
- package/src/ts/agent/react-connection/schema.d.js.map +1 -1
- package/src/ts/agent/react-connection/schema.d.ts +1 -1
- package/src/ts/agent/schema.d.js.map +1 -1
- package/src/ts/agent/schema.d.ts +1 -1
- package/src/ts/api/generator.d.ts +1 -1
- package/src/ts/api/generator.js.map +1 -1
- package/src/ts/api/schema.d.js.map +1 -1
- package/src/ts/api/schema.d.ts +1 -1
- package/src/ts/astro-docs/generator.d.ts +3 -3
- package/src/ts/astro-docs/generator.js.map +1 -1
- package/src/ts/dcr-proxy/generator.d.ts +5 -5
- package/src/ts/dcr-proxy/generator.js.map +1 -1
- package/src/ts/dcr-proxy/schema.d.js.map +1 -1
- package/src/ts/dcr-proxy/schema.d.ts +1 -1
- package/src/ts/docs/generator.d.ts +1 -1
- package/src/ts/docs/generator.js.map +1 -1
- package/src/ts/dynamodb/agent-connection/generator.d.ts +1 -1
- package/src/ts/dynamodb/agent-connection/generator.js.map +1 -1
- package/src/ts/dynamodb/agent-connection/schema.d.js.map +1 -1
- package/src/ts/dynamodb/agent-connection/schema.d.ts +1 -1
- package/src/ts/dynamodb/generator.d.ts +5 -5
- package/src/ts/dynamodb/generator.js +1 -0
- package/src/ts/dynamodb/generator.js.map +1 -1
- package/src/ts/dynamodb/mcp-server-connection/generator.d.ts +1 -1
- package/src/ts/dynamodb/mcp-server-connection/generator.js.map +1 -1
- package/src/ts/dynamodb/mcp-server-connection/schema.d.js.map +1 -1
- package/src/ts/dynamodb/mcp-server-connection/schema.d.ts +1 -1
- package/src/ts/dynamodb/schema.d.js.map +1 -1
- package/src/ts/dynamodb/schema.d.ts +1 -1
- package/src/ts/dynamodb/smithy-connection/generator.d.ts +1 -1
- package/src/ts/dynamodb/smithy-connection/generator.js.map +1 -1
- package/src/ts/dynamodb/trpc-connection/generator.d.ts +1 -1
- package/src/ts/dynamodb/trpc-connection/generator.js.map +1 -1
- package/src/ts/lambda-function/generator.d.ts +5 -5
- package/src/ts/lambda-function/generator.js.map +1 -1
- package/src/ts/lambda-function/schema.d.js.map +1 -1
- package/src/ts/lambda-function/schema.d.ts +1 -1
- package/src/ts/lib/biome.d.ts +1 -1
- package/src/ts/lib/biome.js.map +1 -1
- package/src/ts/lib/generator.d.ts +3 -3
- package/src/ts/lib/generator.js.map +1 -1
- package/src/ts/lib/ts-project-utils.d.ts +3 -3
- 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.map +1 -1
- package/src/ts/mcp-server/generator.d.ts +3 -3
- package/src/ts/mcp-server/generator.js.map +1 -1
- package/src/ts/mcp-server/schema.d.js.map +1 -1
- package/src/ts/mcp-server/schema.d.ts +1 -1
- package/src/ts/nx-generator/generator.d.ts +2 -2
- package/src/ts/nx-generator/generator.js.map +1 -1
- package/src/ts/nx-migration/generator.d.ts +3 -3
- package/src/ts/nx-migration/generator.js.map +1 -1
- package/src/ts/nx-plugin/generator.d.ts +3 -3
- 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.map +1 -1
- package/src/ts/rdb/agent-connection/generator.d.ts +1 -1
- package/src/ts/rdb/agent-connection/generator.js.map +1 -1
- package/src/ts/rdb/agent-connection/schema.d.js.map +1 -1
- package/src/ts/rdb/agent-connection/schema.d.ts +1 -1
- package/src/ts/rdb/generator.d.ts +4 -4
- package/src/ts/rdb/generator.js +1 -0
- package/src/ts/rdb/generator.js.map +1 -1
- package/src/ts/rdb/mcp-server-connection/generator.d.ts +1 -1
- package/src/ts/rdb/mcp-server-connection/generator.js.map +1 -1
- package/src/ts/rdb/mcp-server-connection/schema.d.js.map +1 -1
- package/src/ts/rdb/mcp-server-connection/schema.d.ts +1 -1
- package/src/ts/rdb/schema.d.js.map +1 -1
- package/src/ts/rdb/schema.d.ts +1 -1
- package/src/ts/rdb/smithy-connection/generator.d.ts +1 -1
- package/src/ts/rdb/smithy-connection/generator.js.map +1 -1
- package/src/ts/rdb/trpc-connection/generator.d.ts +1 -1
- package/src/ts/rdb/trpc-connection/generator.js.map +1 -1
- package/src/ts/react-website/agui/generator.d.ts +2 -2
- package/src/ts/react-website/agui/generator.js.map +1 -1
- package/src/ts/react-website/app/generator.d.ts +3 -3
- package/src/ts/react-website/app/generator.js.map +1 -1
- package/src/ts/react-website/app/schema.d.js.map +1 -1
- package/src/ts/react-website/app/schema.d.ts +2 -2
- package/src/ts/react-website/cognito-auth/generator.d.ts +5 -5
- package/src/ts/react-website/cognito-auth/generator.js.map +1 -1
- package/src/ts/react-website/cognito-auth/schema.d.js.map +1 -1
- package/src/ts/react-website/cognito-auth/schema.d.ts +1 -1
- package/src/ts/react-website/cognito-auth/utils.js.map +1 -1
- package/src/ts/react-website/runtime-config/generator.d.ts +1 -1
- package/src/ts/react-website/runtime-config/generator.js.map +1 -1
- package/src/ts/sync/generator.d.ts +1 -1
- package/src/ts/sync/generator.js.map +1 -1
- package/src/ts/website/app/generator.d.ts +1 -1
- package/src/ts/website/app/generator.js.map +1 -1
- package/src/ts/website/app/schema.d.js.map +1 -1
- package/src/ts/website/app/schema.d.ts +2 -2
- package/src/ts/website/auth/generator.d.ts +1 -1
- package/src/ts/website/auth/generator.js.map +1 -1
- package/src/ts/website/auth/schema.d.js.map +1 -1
- package/src/ts/website/auth/schema.d.ts +1 -1
- package/src/utils/add-dependencies.d.ts +1 -1
- package/src/utils/add-dependencies.js.map +1 -1
- package/src/utils/agent-chat/agent-chat.js.map +1 -1
- package/src/utils/agent-connection/agent-connection.d.ts +2 -2
- package/src/utils/agent-connection/agent-connection.js.map +1 -1
- package/src/utils/agent-core-constructs/agent-core-constructs.d.ts +4 -4
- package/src/utils/agent-core-constructs/agent-core-constructs.js.map +1 -1
- package/src/utils/api-constructs/api-constructs.d.ts +3 -3
- package/src/utils/api-constructs/api-constructs.js.map +1 -1
- package/src/utils/api-constructs/open-api-metadata.d.ts +1 -1
- package/src/utils/api-constructs/open-api-metadata.js.map +1 -1
- package/src/utils/ast/website.js.map +1 -1
- package/src/utils/ast.js +6 -0
- package/src/utils/ast.js.map +1 -1
- package/src/utils/bundle/bundle.d.ts +1 -1
- package/src/utils/bundle/bundle.js.map +1 -1
- package/src/utils/commands.d.ts +1 -1
- package/src/utils/commands.js.map +1 -1
- package/src/utils/config/index.d.ts +6 -6
- package/src/utils/config/index.js.map +1 -1
- package/src/utils/config/utils.d.ts +1 -1
- package/src/utils/config/utils.js.map +1 -1
- package/src/utils/connection/open-api/react.d.ts +1 -1
- package/src/utils/connection/open-api/react.js.map +1 -1
- package/src/utils/containers.js.map +1 -1
- package/src/utils/dcr-proxy-constructs/dcr-proxy-constructs.d.ts +1 -1
- package/src/utils/dcr-proxy-constructs/dcr-proxy-constructs.js.map +1 -1
- package/src/utils/declared-dependencies.d.ts +1 -1
- package/src/utils/declared-dependencies.js.map +1 -1
- package/src/utils/dependencies.js.map +1 -1
- package/src/utils/docker.d.ts +1 -1
- package/src/utils/docker.js.map +1 -1
- package/src/utils/dynamodb-constructs/dynamodb-constructs.d.ts +1 -1
- package/src/utils/dynamodb-constructs/dynamodb-constructs.js.map +1 -1
- 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 +1 -1
- package/src/utils/function-constructs/function-constructs.js.map +1 -1
- package/src/utils/iac.d.ts +2 -2
- package/src/utils/iac.js.map +1 -1
- package/src/utils/identity-constructs/identity-constructs.d.ts +2 -2
- package/src/utils/identity-constructs/identity-constructs.js.map +1 -1
- package/src/utils/init.d.ts +3 -3
- package/src/utils/init.js.map +1 -1
- package/src/utils/install.d.ts +1 -1
- package/src/utils/install.js.map +1 -1
- package/src/utils/mcp.js.map +1 -1
- package/src/utils/metrics.d.ts +1 -1
- package/src/utils/metrics.js.map +1 -1
- package/src/utils/migration-manifest.d.ts +1 -1
- package/src/utils/migration-manifest.js.map +1 -1
- package/src/utils/nx.d.ts +3 -3
- package/src/utils/nx.js.map +1 -1
- package/src/utils/paths.js.map +1 -1
- package/src/utils/pkg-manager.d.ts +1 -1
- package/src/utils/pkg-manager.js.map +1 -1
- package/src/utils/pnpm-workspace.js.map +1 -1
- package/src/utils/project-package-json.js.map +1 -1
- package/src/utils/py.d.ts +2 -2
- package/src/utils/py.js.map +1 -1
- package/src/utils/rdb-constructs/rdb-constructs.d.ts +2 -2
- package/src/utils/rdb-constructs/rdb-constructs.js.map +1 -1
- package/src/utils/shared-constructs-constants.js.map +1 -1
- package/src/utils/shared-constructs.d.ts +3 -3
- package/src/utils/shared-constructs.js.map +1 -1
- package/src/utils/shared-dynamodb-scripts.d.ts +1 -1
- package/src/utils/shared-dynamodb-scripts.js.map +1 -1
- package/src/utils/shared-infra-config.js.map +1 -1
- package/src/utils/shared-infra-scripts.d.ts +2 -2
- package/src/utils/shared-infra-scripts.js.map +1 -1
- package/src/utils/shared-rdb-scripts.d.ts +1 -1
- package/src/utils/shared-rdb-scripts.js.map +1 -1
- package/src/utils/shared-scripts.js.map +1 -1
- package/src/utils/shared-shadcn.d.ts +1 -1
- package/src/utils/shared-shadcn.js.map +1 -1
- package/src/utils/smithy.js.map +1 -1
- package/src/utils/test.js.map +1 -1
- package/src/utils/version-upgrade-migration/migration.js.map +1 -1
- package/src/utils/version-upgrade-migration/nx-package-updates.js.map +1 -1
- package/src/utils/version-upgrade-migration/owned-dependencies.d.ts +1 -1
- package/src/utils/version-upgrade-migration/owned-dependencies.js.map +1 -1
- package/src/utils/version-upgrade-migration/register.js.map +1 -1
- package/src/utils/version-upgrade-migration/sync-embedded-versions.d.ts +1 -1
- package/src/utils/version-upgrade-migration/sync-embedded-versions.js.map +1 -1
- package/src/utils/version-upgrade-migration/sync-metrics-version.js.map +1 -1
- package/src/utils/version-upgrade-migration/sync-vended-versions.js.map +1 -1
- package/src/utils/versions.d.ts +1 -1
- package/src/utils/versions.js.map +1 -1
- package/src/utils/website-constructs/website-constructs.d.ts +2 -2
- package/src/utils/website-constructs/website-constructs.js.map +1 -1
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* SPDX-License-Identifier: Apache-2.0
|
|
4
4
|
*/
|
|
5
5
|
import { type Tree } from '@nx/devkit';
|
|
6
|
-
import { type NxGeneratorInfo } from '../../utils/nx';
|
|
6
|
+
import { type NxGeneratorInfo } from '../../utils/nx.js';
|
|
7
7
|
import type { ReactGeneratorSchema } from './schema';
|
|
8
8
|
/** The metadata this generator records, which its predicates read. */
|
|
9
9
|
export interface TrpcReactMetadata {
|
|
@@ -11,7 +11,7 @@ export interface TrpcReactMetadata {
|
|
|
11
11
|
/** Whether the backend is a REST API, which needs the SSE polyfill. */
|
|
12
12
|
readonly isRestApi: boolean;
|
|
13
13
|
}
|
|
14
|
-
export declare const DEPENDENCIES: import("../../utils/declared-dependencies").DependencyDeclaration<readonly [{
|
|
14
|
+
export declare const DEPENDENCIES: import("../../utils/declared-dependencies.js").DependencyDeclaration<readonly [{
|
|
15
15
|
readonly name: "@trpc/client";
|
|
16
16
|
}, {
|
|
17
17
|
readonly name: "@trpc/tanstack-react-query";
|
|
@@ -41,7 +41,7 @@ export declare const DEPENDENCIES: import("../../utils/declared-dependencies").D
|
|
|
41
41
|
readonly name: "@types/event-source-polyfill";
|
|
42
42
|
readonly when: (m: TrpcReactMetadata) => boolean;
|
|
43
43
|
readonly dev: true;
|
|
44
|
-
}], readonly import("../../utils/declared-dependencies").DeclaredPyDependency<"a2a-sdk" | "ag-ui-langgraph" | "ag-ui-protocol" | "ag-ui-strands" | "aiosqlite" | "aws-lambda-powertools" | "aws-lambda-powertools[tracer]" | "aws-lambda-powertools[parser]" | "aws-opentelemetry-distro" | "bedrock-agentcore" | "boto3" | "checkov" | "fastapi" | "fastapi[standard]" | "httpx" | "langchain" | "langchain-aws" | "langchain-mcp-adapters" | "langgraph" | "langgraph-checkpoint-aws" | "langgraph-checkpoint-sqlite" | "mcp" | "pip-check-updates" | "pip-licenses" | "ruff" | "strands-agents" | "strands-agents[a2a]" | "strands-agents-tools" | "ty" | "pynamodb" | "uvicorn" | "sqlmodel" | "alembic" | "aiomysql" | "asyncpg" | "greenlet", TrpcReactMetadata>[]>;
|
|
44
|
+
}], readonly import("../../utils/declared-dependencies.js").DeclaredPyDependency<"a2a-sdk" | "ag-ui-langgraph" | "ag-ui-protocol" | "ag-ui-strands" | "aiosqlite" | "aws-lambda-powertools" | "aws-lambda-powertools[tracer]" | "aws-lambda-powertools[parser]" | "aws-opentelemetry-distro" | "bedrock-agentcore" | "boto3" | "checkov" | "fastapi" | "fastapi[standard]" | "httpx" | "langchain" | "langchain-aws" | "langchain-mcp-adapters" | "langgraph" | "langgraph-checkpoint-aws" | "langgraph-checkpoint-sqlite" | "mcp" | "pip-check-updates" | "pip-licenses" | "ruff" | "strands-agents" | "strands-agents[a2a]" | "strands-agents-tools" | "ty" | "pynamodb" | "uvicorn" | "sqlmodel" | "alembic" | "aiomysql" | "asyncpg" | "greenlet", TrpcReactMetadata>[]>;
|
|
45
45
|
export declare const TRPC_REACT_GENERATOR_INFO: NxGeneratorInfo;
|
|
46
46
|
export declare function reactGenerator(tree: Tree, options: ReactGeneratorSchema): Promise<() => Promise<void>>;
|
|
47
47
|
export default reactGenerator;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../packages/nx-plugin/src/trpc/react/generator.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport {\n generateFiles,\n joinPathFragments,\n OverwriteStrategy,\n type Tree,\n} from '@nx/devkit';\nimport { addTargetToLocalDev } from '../../connection/local-dev';\nimport { runtimeConfigGenerator } from '../../ts/react-website/runtime-config/generator';\nimport { addTsDependencies } from '../../utils/add-dependencies';\nimport { addSingleImport, applyGritQL } from '../../utils/ast';\nimport { declareDependencies } from '../../utils/declared-dependencies';\nimport { formatFilesInSubtree } from '../../utils/format';\nimport { installDependencies } from '../../utils/install';\nimport { addGeneratorMetricsIfApplicable } from '../../utils/metrics';\nimport { toClassName } from '../../utils/names';\nimport {\n addComponentGeneratorMetadata,\n getGeneratorInfo,\n type NxGeneratorInfo,\n readProjectConfigurationUnqualified,\n} from '../../utils/nx';\nimport { toProjectRelativePath } from '../../utils/paths';\nimport type { ReactGeneratorSchema } from './schema';\n\n/** The metadata this generator records, which its predicates read. */\nexport interface TrpcReactMetadata {\n readonly auth: string;\n /** Whether the backend is a REST API, which needs the SSE polyfill. */\n readonly isRestApi: boolean;\n}\n\n// Each entry names the auth and API-type branch it belongs to, so the same\n// declaration drives both adding and the version sync.\nexport const DEPENDENCIES = declareDependencies<TrpcReactMetadata>()({\n ts: [\n { name: '@trpc/client' },\n { name: '@trpc/tanstack-react-query' },\n { name: '@tanstack/react-query' },\n { name: '@tanstack/react-query-devtools' },\n { name: 'event-source-polyfill', when: (m) => m.isRestApi },\n { name: 'oidc-client-ts', when: (m) => m.auth === 'iam' },\n { name: 'aws4fetch', when: (m) => m.auth === 'iam' },\n {\n name: '@aws-sdk/credential-provider-cognito-identity',\n when: (m) => m.auth === 'iam',\n },\n {\n name: 'react-oidc-context',\n when: (m) => m.auth === 'iam' || m.auth === 'cognito',\n },\n { name: '@smithy/types', dev: true },\n {\n name: '@types/event-source-polyfill',\n when: (m) => m.isRestApi,\n dev: true,\n },\n ],\n});\n\nexport const TRPC_REACT_GENERATOR_INFO: NxGeneratorInfo = getGeneratorInfo(\n import.meta.filename,\n);\n\nexport async function reactGenerator(\n tree: Tree,\n options: ReactGeneratorSchema,\n) {\n const frontendProjectConfig = readProjectConfigurationUnqualified(\n tree,\n options.frontendProjectName,\n );\n const backendProjectConfig = readProjectConfigurationUnqualified(\n tree,\n options.backendProjectName,\n );\n /* eslint-disable @typescript-eslint/no-explicit-any */\n const metadata = backendProjectConfig.metadata as any;\n const apiName = metadata.apiName;\n const auth = (metadata.auth ?? 'iam').toLowerCase();\n const port = metadata.port ?? metadata.ports?.[0] ?? 2022;\n const rawInfra = (metadata.infra ?? metadata.computeType ?? '').toLowerCase();\n const isRestApi =\n rawInfra === 'rest-lambda' || rawInfra === 'serverlessapigatewayrestapi';\n const apiNameClassName = toClassName(apiName);\n const backendProjectAlias = backendProjectConfig.name;\n\n // Recorded below and read by the declaration's predicates, so the packages\n // added here are exactly the ones the version sync will own.\n const connectionMetadata: TrpcReactMetadata = { auth, isRestApi };\n\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files'),\n frontendProjectConfig.root,\n {\n apiName,\n apiNameClassName: toClassName(apiName),\n ...options,\n auth,\n isRestApi,\n backendProjectAlias,\n },\n {\n overwriteStrategy: OverwriteStrategy.KeepExisting,\n },\n );\n\n // Generate the tanstack query provider if it does not exist already\n generateFiles(\n tree,\n joinPathFragments(\n import.meta.dirname,\n '../../utils/files/website/components/tanstack-query',\n ),\n joinPathFragments(frontendProjectConfig.sourceRoot, 'components'),\n {},\n {\n overwriteStrategy: OverwriteStrategy.KeepExisting,\n },\n );\n\n if (auth === 'iam') {\n generateFiles(\n tree,\n joinPathFragments(\n import.meta.dirname,\n '../../utils/files/website/hooks/sigv4',\n ),\n joinPathFragments(frontendProjectConfig.sourceRoot, 'hooks'),\n {},\n {\n overwriteStrategy: OverwriteStrategy.KeepExisting,\n },\n );\n }\n\n await runtimeConfigGenerator(tree, {\n project: frontendProjectConfig.name,\n preferInstallDependencies: false,\n });\n\n // update main.tsx\n const mainTsxPath = joinPathFragments(\n frontendProjectConfig.sourceRoot,\n 'main.tsx',\n );\n await addSingleImport(\n tree,\n mainTsxPath,\n 'QueryClientProvider',\n './components/QueryClientProvider',\n );\n\n const clientProviderName = `${apiNameClassName}ClientProvider`;\n await addSingleImport(\n tree,\n mainTsxPath,\n clientProviderName,\n `./components/${clientProviderName}`,\n );\n\n // Wrap <App /> in QueryClientProvider if not already present\n await applyGritQL(\n tree,\n mainTsxPath,\n '`<App />` => `<QueryClientProvider><App /></QueryClientProvider>` where { $program <: not contains `<QueryClientProvider>$_</QueryClientProvider>` }',\n );\n\n // Wrap <App /> in the tRPC client provider if not already present\n await applyGritQL(\n tree,\n mainTsxPath,\n `\\`<App />\\` => \\`<${clientProviderName}><App /></${clientProviderName}>\\` where { $program <: not contains \\`<${clientProviderName}>$_</${clientProviderName}>\\` }`,\n );\n\n await addTargetToLocalDev(\n tree,\n frontendProjectConfig.name,\n backendProjectConfig.name,\n {\n url: `http://localhost:${port}/`,\n apiName,\n },\n );\n\n addTsDependencies(tree, DEPENDENCIES, {\n metadata: connectionMetadata,\n projectRoot: frontendProjectConfig.root,\n });\n\n // Recorded so the version sync knows this connection's dependencies are ours.\n addComponentGeneratorMetadata(\n tree,\n frontendProjectConfig.name,\n TRPC_REACT_GENERATOR_INFO,\n toProjectRelativePath(\n frontendProjectConfig,\n joinPathFragments(\n frontendProjectConfig.sourceRoot,\n 'components',\n clientProviderName,\n ),\n ),\n apiNameClassName,\n connectionMetadata,\n );\n\n await addGeneratorMetricsIfApplicable(tree, [TRPC_REACT_GENERATOR_INFO]);\n\n await formatFilesInSubtree(tree);\n return () =>\n installDependencies(tree, options.preferInstallDependencies, {\n languages: ['typescript'],\n });\n}\nexport default reactGenerator;\n"],"names":["generateFiles","joinPathFragments","OverwriteStrategy","addTargetToLocalDev","runtimeConfigGenerator","addTsDependencies","addSingleImport","applyGritQL","declareDependencies","formatFilesInSubtree","installDependencies","addGeneratorMetricsIfApplicable","toClassName","addComponentGeneratorMetadata","getGeneratorInfo","readProjectConfigurationUnqualified","toProjectRelativePath","DEPENDENCIES","ts","name","when","m","isRestApi","auth","dev","TRPC_REACT_GENERATOR_INFO","filename","reactGenerator","tree","options","frontendProjectConfig","frontendProjectName","backendProjectConfig","backendProjectName","metadata","apiName","toLowerCase","port","ports","rawInfra","infra","computeType","apiNameClassName","backendProjectAlias","connectionMetadata","dirname","root","overwriteStrategy","KeepExisting","sourceRoot","project","preferInstallDependencies","mainTsxPath","clientProviderName","url","projectRoot","languages"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../../../packages/nx-plugin/src/trpc/react/generator.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport {\n generateFiles,\n joinPathFragments,\n OverwriteStrategy,\n type Tree,\n} from '@nx/devkit';\nimport { addTargetToLocalDev } from '../../connection/local-dev.js';\nimport { runtimeConfigGenerator } from '../../ts/react-website/runtime-config/generator.js';\nimport { addTsDependencies } from '../../utils/add-dependencies.js';\nimport { addSingleImport, applyGritQL } from '../../utils/ast.js';\nimport { declareDependencies } from '../../utils/declared-dependencies.js';\nimport { formatFilesInSubtree } from '../../utils/format.js';\nimport { installDependencies } from '../../utils/install.js';\nimport { addGeneratorMetricsIfApplicable } from '../../utils/metrics.js';\nimport { toClassName } from '../../utils/names.js';\nimport {\n addComponentGeneratorMetadata,\n getGeneratorInfo,\n type NxGeneratorInfo,\n readProjectConfigurationUnqualified,\n} from '../../utils/nx.js';\nimport { toProjectRelativePath } from '../../utils/paths.js';\nimport type { ReactGeneratorSchema } from './schema';\n\n/** The metadata this generator records, which its predicates read. */\nexport interface TrpcReactMetadata {\n readonly auth: string;\n /** Whether the backend is a REST API, which needs the SSE polyfill. */\n readonly isRestApi: boolean;\n}\n\n// Each entry names the auth and API-type branch it belongs to, so the same\n// declaration drives both adding and the version sync.\nexport const DEPENDENCIES = declareDependencies<TrpcReactMetadata>()({\n ts: [\n { name: '@trpc/client' },\n { name: '@trpc/tanstack-react-query' },\n { name: '@tanstack/react-query' },\n { name: '@tanstack/react-query-devtools' },\n { name: 'event-source-polyfill', when: (m) => m.isRestApi },\n { name: 'oidc-client-ts', when: (m) => m.auth === 'iam' },\n { name: 'aws4fetch', when: (m) => m.auth === 'iam' },\n {\n name: '@aws-sdk/credential-provider-cognito-identity',\n when: (m) => m.auth === 'iam',\n },\n {\n name: 'react-oidc-context',\n when: (m) => m.auth === 'iam' || m.auth === 'cognito',\n },\n { name: '@smithy/types', dev: true },\n {\n name: '@types/event-source-polyfill',\n when: (m) => m.isRestApi,\n dev: true,\n },\n ],\n});\n\nexport const TRPC_REACT_GENERATOR_INFO: NxGeneratorInfo = getGeneratorInfo(\n import.meta.filename,\n);\n\nexport async function reactGenerator(\n tree: Tree,\n options: ReactGeneratorSchema,\n) {\n const frontendProjectConfig = readProjectConfigurationUnqualified(\n tree,\n options.frontendProjectName,\n );\n const backendProjectConfig = readProjectConfigurationUnqualified(\n tree,\n options.backendProjectName,\n );\n /* eslint-disable @typescript-eslint/no-explicit-any */\n const metadata = backendProjectConfig.metadata as any;\n const apiName = metadata.apiName;\n const auth = (metadata.auth ?? 'iam').toLowerCase();\n const port = metadata.port ?? metadata.ports?.[0] ?? 2022;\n const rawInfra = (metadata.infra ?? metadata.computeType ?? '').toLowerCase();\n const isRestApi =\n rawInfra === 'rest-lambda' || rawInfra === 'serverlessapigatewayrestapi';\n const apiNameClassName = toClassName(apiName);\n const backendProjectAlias = backendProjectConfig.name;\n\n // Recorded below and read by the declaration's predicates, so the packages\n // added here are exactly the ones the version sync will own.\n const connectionMetadata: TrpcReactMetadata = { auth, isRestApi };\n\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files'),\n frontendProjectConfig.root,\n {\n apiName,\n apiNameClassName: toClassName(apiName),\n ...options,\n auth,\n isRestApi,\n backendProjectAlias,\n },\n {\n overwriteStrategy: OverwriteStrategy.KeepExisting,\n },\n );\n\n // Generate the tanstack query provider if it does not exist already\n generateFiles(\n tree,\n joinPathFragments(\n import.meta.dirname,\n '../../utils/files/website/components/tanstack-query',\n ),\n joinPathFragments(frontendProjectConfig.sourceRoot, 'components'),\n {},\n {\n overwriteStrategy: OverwriteStrategy.KeepExisting,\n },\n );\n\n if (auth === 'iam') {\n generateFiles(\n tree,\n joinPathFragments(\n import.meta.dirname,\n '../../utils/files/website/hooks/sigv4',\n ),\n joinPathFragments(frontendProjectConfig.sourceRoot, 'hooks'),\n {},\n {\n overwriteStrategy: OverwriteStrategy.KeepExisting,\n },\n );\n }\n\n await runtimeConfigGenerator(tree, {\n project: frontendProjectConfig.name,\n preferInstallDependencies: false,\n });\n\n // update main.tsx\n const mainTsxPath = joinPathFragments(\n frontendProjectConfig.sourceRoot,\n 'main.tsx',\n );\n await addSingleImport(\n tree,\n mainTsxPath,\n 'QueryClientProvider',\n './components/QueryClientProvider',\n );\n\n const clientProviderName = `${apiNameClassName}ClientProvider`;\n await addSingleImport(\n tree,\n mainTsxPath,\n clientProviderName,\n `./components/${clientProviderName}`,\n );\n\n // Wrap <App /> in QueryClientProvider if not already present\n await applyGritQL(\n tree,\n mainTsxPath,\n '`<App />` => `<QueryClientProvider><App /></QueryClientProvider>` where { $program <: not contains `<QueryClientProvider>$_</QueryClientProvider>` }',\n );\n\n // Wrap <App /> in the tRPC client provider if not already present\n await applyGritQL(\n tree,\n mainTsxPath,\n `\\`<App />\\` => \\`<${clientProviderName}><App /></${clientProviderName}>\\` where { $program <: not contains \\`<${clientProviderName}>$_</${clientProviderName}>\\` }`,\n );\n\n await addTargetToLocalDev(\n tree,\n frontendProjectConfig.name,\n backendProjectConfig.name,\n {\n url: `http://localhost:${port}/`,\n apiName,\n },\n );\n\n addTsDependencies(tree, DEPENDENCIES, {\n metadata: connectionMetadata,\n projectRoot: frontendProjectConfig.root,\n });\n\n // Recorded so the version sync knows this connection's dependencies are ours.\n addComponentGeneratorMetadata(\n tree,\n frontendProjectConfig.name,\n TRPC_REACT_GENERATOR_INFO,\n toProjectRelativePath(\n frontendProjectConfig,\n joinPathFragments(\n frontendProjectConfig.sourceRoot,\n 'components',\n clientProviderName,\n ),\n ),\n apiNameClassName,\n connectionMetadata,\n );\n\n await addGeneratorMetricsIfApplicable(tree, [TRPC_REACT_GENERATOR_INFO]);\n\n await formatFilesInSubtree(tree);\n return () =>\n installDependencies(tree, options.preferInstallDependencies, {\n languages: ['typescript'],\n });\n}\nexport default reactGenerator;\n"],"names":["generateFiles","joinPathFragments","OverwriteStrategy","addTargetToLocalDev","runtimeConfigGenerator","addTsDependencies","addSingleImport","applyGritQL","declareDependencies","formatFilesInSubtree","installDependencies","addGeneratorMetricsIfApplicable","toClassName","addComponentGeneratorMetadata","getGeneratorInfo","readProjectConfigurationUnqualified","toProjectRelativePath","DEPENDENCIES","ts","name","when","m","isRestApi","auth","dev","TRPC_REACT_GENERATOR_INFO","filename","reactGenerator","tree","options","frontendProjectConfig","frontendProjectName","backendProjectConfig","backendProjectName","metadata","apiName","toLowerCase","port","ports","rawInfra","infra","computeType","apiNameClassName","backendProjectAlias","connectionMetadata","dirname","root","overwriteStrategy","KeepExisting","sourceRoot","project","preferInstallDependencies","mainTsxPath","clientProviderName","url","projectRoot","languages"],"mappings":"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"}
|
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
* SPDX-License-Identifier: Apache-2.0
|
|
4
4
|
*/
|
|
5
5
|
import { type GeneratorCallback, type Tree } from '@nx/devkit';
|
|
6
|
-
import { type NxGeneratorInfo } from '../../../utils/nx';
|
|
6
|
+
import { type NxGeneratorInfo } from '../../../utils/nx.js';
|
|
7
7
|
import type { TsAgentA2aConnectionGeneratorSchema } from './schema';
|
|
8
|
-
export declare const DEPENDENCIES: import("../../../utils/declared-dependencies").DependencyDeclaration<readonly [{
|
|
8
|
+
export declare const DEPENDENCIES: import("../../../utils/declared-dependencies.js").DependencyDeclaration<readonly [{
|
|
9
9
|
readonly name: "@a2a-js/sdk";
|
|
10
10
|
readonly root: true;
|
|
11
11
|
}, {
|
|
@@ -50,7 +50,7 @@ export declare const DEPENDENCIES: import("../../../utils/declared-dependencies"
|
|
|
50
50
|
readonly name: "@strands-agents/sdk";
|
|
51
51
|
} & {
|
|
52
52
|
versionOnly: true;
|
|
53
|
-
}], readonly import("../../../utils/declared-dependencies").DeclaredPyDependency<"a2a-sdk" | "ag-ui-langgraph" | "ag-ui-protocol" | "ag-ui-strands" | "aiosqlite" | "aws-lambda-powertools" | "aws-lambda-powertools[tracer]" | "aws-lambda-powertools[parser]" | "aws-opentelemetry-distro" | "bedrock-agentcore" | "boto3" | "checkov" | "fastapi" | "fastapi[standard]" | "httpx" | "langchain" | "langchain-aws" | "langchain-mcp-adapters" | "langgraph" | "langgraph-checkpoint-aws" | "langgraph-checkpoint-sqlite" | "mcp" | "pip-check-updates" | "pip-licenses" | "ruff" | "strands-agents" | "strands-agents[a2a]" | "strands-agents-tools" | "ty" | "pynamodb" | "uvicorn" | "sqlmodel" | "alembic" | "aiomysql" | "asyncpg" | "greenlet", Record<string, never>>[]>;
|
|
53
|
+
}], readonly import("../../../utils/declared-dependencies.js").DeclaredPyDependency<"a2a-sdk" | "ag-ui-langgraph" | "ag-ui-protocol" | "ag-ui-strands" | "aiosqlite" | "aws-lambda-powertools" | "aws-lambda-powertools[tracer]" | "aws-lambda-powertools[parser]" | "aws-opentelemetry-distro" | "bedrock-agentcore" | "boto3" | "checkov" | "fastapi" | "fastapi[standard]" | "httpx" | "langchain" | "langchain-aws" | "langchain-mcp-adapters" | "langgraph" | "langgraph-checkpoint-aws" | "langgraph-checkpoint-sqlite" | "mcp" | "pip-check-updates" | "pip-licenses" | "ruff" | "strands-agents" | "strands-agents[a2a]" | "strands-agents-tools" | "ty" | "pynamodb" | "uvicorn" | "sqlmodel" | "alembic" | "aiomysql" | "asyncpg" | "greenlet", Record<string, never>>[]>;
|
|
54
54
|
export declare const TS_AGENT_A2A_CONNECTION_GENERATOR_INFO: NxGeneratorInfo;
|
|
55
55
|
export declare const tsAgentA2aConnectionGenerator: (tree: Tree, options: TsAgentA2aConnectionGeneratorSchema) => Promise<GeneratorCallback>;
|
|
56
56
|
export default tsAgentA2aConnectionGenerator;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../../packages/nx-plugin/src/ts/agent/a2a-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 joinPathFragments,\n OverwriteStrategy,\n type Tree,\n updateProjectConfiguration,\n} from '@nx/devkit';\nimport { addTsDependencies } from '../../../utils/add-dependencies';\nimport {\n AGENT_CONNECTION_DEPENDENCIES,\n AGENT_CONNECTION_PROJECT_DIR,\n addTypeScriptCoreClient,\n ensureTypeScriptAgentConnectionProject,\n} from '../../../utils/agent-connection/agent-connection';\nimport {\n addDestructuredImport,\n addStarExport,\n appendToArrayViaGritQL,\n applyGritQL,\n} from '../../../utils/ast';\nimport {\n declareDependencies,\n ownedElsewhere,\n} from '../../../utils/declared-dependencies';\nimport { formatFilesInSubtree } from '../../../utils/format';\nimport { installDependencies } from '../../../utils/install';\nimport { addGeneratorMetricsIfApplicable } from '../../../utils/metrics';\nimport { esmVars } from '../../../utils/module-format';\nimport { kebabCase } from '../../../utils/names';\nimport { getNpmScope } from '../../../utils/npm-scope';\nimport {\n addComponentGeneratorMetadata,\n addDependencyToTargetIfNotPresent,\n getGeneratorInfo,\n type NxGeneratorInfo,\n readProjectConfigurationUnqualified,\n} from '../../../utils/nx';\nimport { toProjectRelativePath } from '../../../utils/paths';\nimport type { TsAgentA2aConnectionGeneratorSchema } from './schema';\n\n// The A2A core client + vended client need these whatever the connection's\n// options, so no entry is conditional.\n// The A2A client the generated agent code imports, plus the AppConfig lookup and\n// sigv4 signing it resolves the remote agent with. Added to the workspace root,\n// where this connection has always put them.\nexport const DEPENDENCIES = declareDependencies()({\n ts: [\n { name: '@a2a-js/sdk', root: true },\n { name: '@strands-agents/sdk', root: true },\n { name: '@aws-lambda-powertools/parameters', root: true },\n { name: '@aws-sdk/client-appconfigdata', root: true },\n { name: 'aws4fetch', root: true },\n { name: '@aws-sdk/credential-providers', root: true },\n { name: 'zod', root: true },\n ...ownedElsewhere(AGENT_CONNECTION_DEPENDENCIES),\n ],\n});\n\nexport const TS_AGENT_A2A_CONNECTION_GENERATOR_INFO: NxGeneratorInfo =\n getGeneratorInfo(import.meta.filename);\n\nexport const tsAgentA2aConnectionGenerator = async (\n tree: Tree,\n options: TsAgentA2aConnectionGeneratorSchema,\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 targetAgentComponent = options.targetComponent;\n\n if (!agentComponent || !targetAgentComponent) {\n throw new Error(\n 'Both sourceComponent and targetComponent must be provided for ts#agent -> a2a connections',\n );\n }\n\n if ((targetAgentComponent.protocol ?? '').toLowerCase() !== 'a2a') {\n throw new Error(\n `Target agent '${targetAgentComponent.name}' uses the ${targetAgentComponent.protocol ?? 'http'} protocol — only A2A agents can be connected as tools.`,\n );\n }\n\n if (\n targetAgentComponent.auth &&\n targetAgentComponent.auth.toLowerCase() !== 'iam'\n ) {\n throw new Error(\n `A2A agent connection currently only supports IAM authentication, but '${targetAgentComponent.name}' uses '${targetAgentComponent.auth}' authentication.`,\n );\n }\n\n const targetAgentComponentName = targetAgentComponent.name ?? 'agent';\n const targetAgentClassName = targetAgentComponent.rc as string;\n const targetAgentKebabCase = kebabCase(targetAgentClassName);\n const targetAgentPort = targetAgentComponent.port ?? 9000;\n\n const npmScope = getNpmScope(tree);\n\n // 1. Ensure the shared agent-connection project exists + has the A2A core client\n await ensureTypeScriptAgentConnectionProject(tree, DEPENDENCIES);\n await addTypeScriptCoreClient(tree, 'a2a', DEPENDENCIES);\n\n // 2. Generate the per-connection <Name>Client into app/\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files', 'agent-connection', 'app'),\n joinPathFragments(AGENT_CONNECTION_PROJECT_DIR, 'src', 'app'),\n {\n targetAgentKebabCase,\n targetAgentClassName,\n targetAgentPort,\n ...esmVars(tree),\n },\n { overwriteStrategy: OverwriteStrategy.KeepExisting },\n );\n\n // Add re-export to index.ts\n await addStarExport(\n tree,\n joinPathFragments(AGENT_CONNECTION_PROJECT_DIR, 'src', 'index.ts'),\n `./app/${targetAgentKebabCase}-client-strands.js`,\n );\n\n // 3. AST transform agent.ts to add the remote A2A agent as a tool\n const agentSourceDir = joinPathFragments(\n sourceProject.root,\n agentComponent.path ?? 'src',\n );\n const agentFilePath = joinPathFragments(agentSourceDir, 'agent.ts');\n\n if (tree.exists(agentFilePath)) {\n const clientClassName = `${targetAgentClassName}ClientStrands`;\n const clientVarName =\n targetAgentClassName.charAt(0).toLowerCase() +\n targetAgentClassName.slice(1);\n const toolName = `ask${targetAgentClassName}`;\n const toolVarName = `${clientVarName}Tool`;\n\n // Ensure tool + z imports are available\n await addDestructuredImport(\n tree,\n agentFilePath,\n ['tool'],\n '@strands-agents/sdk',\n );\n await addDestructuredImport(tree, agentFilePath, ['z'], 'zod');\n await addDestructuredImport(\n tree,\n agentFilePath,\n [clientClassName],\n `@${npmScope}/agent-connection`,\n );\n\n // Build the tool creation + Agent wiring.\n const toolCreationBlock = `const ${clientVarName} = await ${clientClassName}.create();\n const ${toolVarName} = tool({\n name: '${toolName}',\n description: 'Delegate a question to the remote ${targetAgentClassName} A2A agent and return its reply.',\n inputSchema: z.object({ prompt: z.string() }),\n callback: async ({ prompt }) => (await ${clientVarName}.invoke(prompt)).toString(),\n });`;\n\n // Transform the arrow function that contains `new Agent`:\n // - Expression body: wrap in block with tool creation and return\n // - Block body: prepend tool creation statement\n await applyGritQL(\n tree,\n agentFilePath,\n `or { \\`async ($p) => new Agent($args)\\` => raw\\`async ($p) => {\n ${toolCreationBlock}\n return new Agent($args);\n}\\` where { $program <: not contains \\`${clientClassName}.create\\` }, \\`async ($p) => { $body }\\` => raw\\`async ($p) => {\n ${toolCreationBlock}\n $body\n}\\` where { $body <: contains \\`new Agent($_)\\`, $program <: not contains \\`${clientClassName}.create\\` } }`,\n );\n\n // Append the tool to the tools array (after existing items)\n await appendToArrayViaGritQL(tree, agentFilePath, 'tools:', toolVarName, {\n scope: 'new Agent($_)',\n });\n }\n\n // 4. Set up dev target — depend on the target agent's dev\n // so running the host's dev also spins up the remote A2A agent.\n const agentName = agentComponent.name ?? 'agent';\n const devTargetName = `${agentName}-dev`;\n const targetDevTargetName = `${targetAgentComponentName}-dev`;\n\n if (sourceProject.targets?.[devTargetName]) {\n addDependencyToTargetIfNotPresent(sourceProject, devTargetName, {\n projects: [targetProject.name],\n target: targetDevTargetName,\n });\n updateProjectConfiguration(tree, sourceProject.name, sourceProject);\n }\n\n // 5. Add dependencies to the workspace root manifest\n addTsDependencies(tree, DEPENDENCIES);\n\n // Recorded so the version sync knows this connection's dependencies are ours.\n addComponentGeneratorMetadata(\n tree,\n sourceProject.name,\n TS_AGENT_A2A_CONNECTION_GENERATOR_INFO,\n toProjectRelativePath(sourceProject, agentFilePath),\n targetAgentClassName,\n // The source component this connection is made from, so the pair is\n // identifiable rather than just the two projects.\n { sourcePath: options.sourceComponent?.path },\n );\n\n await addGeneratorMetricsIfApplicable(tree, [\n TS_AGENT_A2A_CONNECTION_GENERATOR_INFO,\n ]);\n\n await formatFilesInSubtree(tree);\n return () =>\n installDependencies(tree, options.preferInstallDependencies, {\n languages: ['typescript'],\n });\n};\n\nexport default tsAgentA2aConnectionGenerator;\n"],"names":["generateFiles","joinPathFragments","OverwriteStrategy","updateProjectConfiguration","addTsDependencies","AGENT_CONNECTION_DEPENDENCIES","AGENT_CONNECTION_PROJECT_DIR","addTypeScriptCoreClient","ensureTypeScriptAgentConnectionProject","addDestructuredImport","addStarExport","appendToArrayViaGritQL","applyGritQL","declareDependencies","ownedElsewhere","formatFilesInSubtree","installDependencies","addGeneratorMetricsIfApplicable","esmVars","kebabCase","getNpmScope","addComponentGeneratorMetadata","addDependencyToTargetIfNotPresent","getGeneratorInfo","readProjectConfigurationUnqualified","toProjectRelativePath","DEPENDENCIES","ts","name","root","TS_AGENT_A2A_CONNECTION_GENERATOR_INFO","filename","tsAgentA2aConnectionGenerator","tree","options","sourceProject","targetProject","agentComponent","sourceComponent","targetAgentComponent","targetComponent","Error","protocol","toLowerCase","auth","targetAgentComponentName","targetAgentClassName","rc","targetAgentKebabCase","targetAgentPort","port","npmScope","dirname","overwriteStrategy","KeepExisting","agentSourceDir","path","agentFilePath","exists","clientClassName","clientVarName","charAt","slice","toolName","toolVarName","toolCreationBlock","scope","agentName","devTargetName","targetDevTargetName","targets","projects","target","sourcePath","preferInstallDependencies","languages"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../../../../packages/nx-plugin/src/ts/agent/a2a-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 joinPathFragments,\n OverwriteStrategy,\n type Tree,\n updateProjectConfiguration,\n} from '@nx/devkit';\nimport { addTsDependencies } from '../../../utils/add-dependencies.js';\nimport {\n AGENT_CONNECTION_DEPENDENCIES,\n AGENT_CONNECTION_PROJECT_DIR,\n addTypeScriptCoreClient,\n ensureTypeScriptAgentConnectionProject,\n} from '../../../utils/agent-connection/agent-connection.js';\nimport {\n addDestructuredImport,\n addStarExport,\n appendToArrayViaGritQL,\n applyGritQL,\n} from '../../../utils/ast.js';\nimport {\n declareDependencies,\n ownedElsewhere,\n} from '../../../utils/declared-dependencies.js';\nimport { formatFilesInSubtree } from '../../../utils/format.js';\nimport { installDependencies } from '../../../utils/install.js';\nimport { addGeneratorMetricsIfApplicable } from '../../../utils/metrics.js';\nimport { esmVars } from '../../../utils/module-format.js';\nimport { kebabCase } from '../../../utils/names.js';\nimport { getNpmScope } from '../../../utils/npm-scope.js';\nimport {\n addComponentGeneratorMetadata,\n addDependencyToTargetIfNotPresent,\n getGeneratorInfo,\n type NxGeneratorInfo,\n readProjectConfigurationUnqualified,\n} from '../../../utils/nx.js';\nimport { toProjectRelativePath } from '../../../utils/paths.js';\nimport type { TsAgentA2aConnectionGeneratorSchema } from './schema';\n\n// The A2A core client + vended client need these whatever the connection's\n// options, so no entry is conditional.\n// The A2A client the generated agent code imports, plus the AppConfig lookup and\n// sigv4 signing it resolves the remote agent with. Added to the workspace root,\n// where this connection has always put them.\nexport const DEPENDENCIES = declareDependencies()({\n ts: [\n { name: '@a2a-js/sdk', root: true },\n { name: '@strands-agents/sdk', root: true },\n { name: '@aws-lambda-powertools/parameters', root: true },\n { name: '@aws-sdk/client-appconfigdata', root: true },\n { name: 'aws4fetch', root: true },\n { name: '@aws-sdk/credential-providers', root: true },\n { name: 'zod', root: true },\n ...ownedElsewhere(AGENT_CONNECTION_DEPENDENCIES),\n ],\n});\n\nexport const TS_AGENT_A2A_CONNECTION_GENERATOR_INFO: NxGeneratorInfo =\n getGeneratorInfo(import.meta.filename);\n\nexport const tsAgentA2aConnectionGenerator = async (\n tree: Tree,\n options: TsAgentA2aConnectionGeneratorSchema,\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 targetAgentComponent = options.targetComponent;\n\n if (!agentComponent || !targetAgentComponent) {\n throw new Error(\n 'Both sourceComponent and targetComponent must be provided for ts#agent -> a2a connections',\n );\n }\n\n if ((targetAgentComponent.protocol ?? '').toLowerCase() !== 'a2a') {\n throw new Error(\n `Target agent '${targetAgentComponent.name}' uses the ${targetAgentComponent.protocol ?? 'http'} protocol — only A2A agents can be connected as tools.`,\n );\n }\n\n if (\n targetAgentComponent.auth &&\n targetAgentComponent.auth.toLowerCase() !== 'iam'\n ) {\n throw new Error(\n `A2A agent connection currently only supports IAM authentication, but '${targetAgentComponent.name}' uses '${targetAgentComponent.auth}' authentication.`,\n );\n }\n\n const targetAgentComponentName = targetAgentComponent.name ?? 'agent';\n const targetAgentClassName = targetAgentComponent.rc as string;\n const targetAgentKebabCase = kebabCase(targetAgentClassName);\n const targetAgentPort = targetAgentComponent.port ?? 9000;\n\n const npmScope = getNpmScope(tree);\n\n // 1. Ensure the shared agent-connection project exists + has the A2A core client\n await ensureTypeScriptAgentConnectionProject(tree, DEPENDENCIES);\n await addTypeScriptCoreClient(tree, 'a2a', DEPENDENCIES);\n\n // 2. Generate the per-connection <Name>Client into app/\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files', 'agent-connection', 'app'),\n joinPathFragments(AGENT_CONNECTION_PROJECT_DIR, 'src', 'app'),\n {\n targetAgentKebabCase,\n targetAgentClassName,\n targetAgentPort,\n ...esmVars(tree),\n },\n { overwriteStrategy: OverwriteStrategy.KeepExisting },\n );\n\n // Add re-export to index.ts\n await addStarExport(\n tree,\n joinPathFragments(AGENT_CONNECTION_PROJECT_DIR, 'src', 'index.ts'),\n `./app/${targetAgentKebabCase}-client-strands.js`,\n );\n\n // 3. AST transform agent.ts to add the remote A2A agent as a tool\n const agentSourceDir = joinPathFragments(\n sourceProject.root,\n agentComponent.path ?? 'src',\n );\n const agentFilePath = joinPathFragments(agentSourceDir, 'agent.ts');\n\n if (tree.exists(agentFilePath)) {\n const clientClassName = `${targetAgentClassName}ClientStrands`;\n const clientVarName =\n targetAgentClassName.charAt(0).toLowerCase() +\n targetAgentClassName.slice(1);\n const toolName = `ask${targetAgentClassName}`;\n const toolVarName = `${clientVarName}Tool`;\n\n // Ensure tool + z imports are available\n await addDestructuredImport(\n tree,\n agentFilePath,\n ['tool'],\n '@strands-agents/sdk',\n );\n await addDestructuredImport(tree, agentFilePath, ['z'], 'zod');\n await addDestructuredImport(\n tree,\n agentFilePath,\n [clientClassName],\n `@${npmScope}/agent-connection`,\n );\n\n // Build the tool creation + Agent wiring.\n const toolCreationBlock = `const ${clientVarName} = await ${clientClassName}.create();\n const ${toolVarName} = tool({\n name: '${toolName}',\n description: 'Delegate a question to the remote ${targetAgentClassName} A2A agent and return its reply.',\n inputSchema: z.object({ prompt: z.string() }),\n callback: async ({ prompt }) => (await ${clientVarName}.invoke(prompt)).toString(),\n });`;\n\n // Transform the arrow function that contains `new Agent`:\n // - Expression body: wrap in block with tool creation and return\n // - Block body: prepend tool creation statement\n await applyGritQL(\n tree,\n agentFilePath,\n `or { \\`async ($p) => new Agent($args)\\` => raw\\`async ($p) => {\n ${toolCreationBlock}\n return new Agent($args);\n}\\` where { $program <: not contains \\`${clientClassName}.create\\` }, \\`async ($p) => { $body }\\` => raw\\`async ($p) => {\n ${toolCreationBlock}\n $body\n}\\` where { $body <: contains \\`new Agent($_)\\`, $program <: not contains \\`${clientClassName}.create\\` } }`,\n );\n\n // Append the tool to the tools array (after existing items)\n await appendToArrayViaGritQL(tree, agentFilePath, 'tools:', toolVarName, {\n scope: 'new Agent($_)',\n });\n }\n\n // 4. Set up dev target — depend on the target agent's dev\n // so running the host's dev also spins up the remote A2A agent.\n const agentName = agentComponent.name ?? 'agent';\n const devTargetName = `${agentName}-dev`;\n const targetDevTargetName = `${targetAgentComponentName}-dev`;\n\n if (sourceProject.targets?.[devTargetName]) {\n addDependencyToTargetIfNotPresent(sourceProject, devTargetName, {\n projects: [targetProject.name],\n target: targetDevTargetName,\n });\n updateProjectConfiguration(tree, sourceProject.name, sourceProject);\n }\n\n // 5. Add dependencies to the workspace root manifest\n addTsDependencies(tree, DEPENDENCIES);\n\n // Recorded so the version sync knows this connection's dependencies are ours.\n addComponentGeneratorMetadata(\n tree,\n sourceProject.name,\n TS_AGENT_A2A_CONNECTION_GENERATOR_INFO,\n toProjectRelativePath(sourceProject, agentFilePath),\n targetAgentClassName,\n // The source component this connection is made from, so the pair is\n // identifiable rather than just the two projects.\n { sourcePath: options.sourceComponent?.path },\n );\n\n await addGeneratorMetricsIfApplicable(tree, [\n TS_AGENT_A2A_CONNECTION_GENERATOR_INFO,\n ]);\n\n await formatFilesInSubtree(tree);\n return () =>\n installDependencies(tree, options.preferInstallDependencies, {\n languages: ['typescript'],\n });\n};\n\nexport default tsAgentA2aConnectionGenerator;\n"],"names":["generateFiles","joinPathFragments","OverwriteStrategy","updateProjectConfiguration","addTsDependencies","AGENT_CONNECTION_DEPENDENCIES","AGENT_CONNECTION_PROJECT_DIR","addTypeScriptCoreClient","ensureTypeScriptAgentConnectionProject","addDestructuredImport","addStarExport","appendToArrayViaGritQL","applyGritQL","declareDependencies","ownedElsewhere","formatFilesInSubtree","installDependencies","addGeneratorMetricsIfApplicable","esmVars","kebabCase","getNpmScope","addComponentGeneratorMetadata","addDependencyToTargetIfNotPresent","getGeneratorInfo","readProjectConfigurationUnqualified","toProjectRelativePath","DEPENDENCIES","ts","name","root","TS_AGENT_A2A_CONNECTION_GENERATOR_INFO","filename","tsAgentA2aConnectionGenerator","tree","options","sourceProject","targetProject","agentComponent","sourceComponent","targetAgentComponent","targetComponent","Error","protocol","toLowerCase","auth","targetAgentComponentName","targetAgentClassName","rc","targetAgentKebabCase","targetAgentPort","port","npmScope","dirname","overwriteStrategy","KeepExisting","agentSourceDir","path","agentFilePath","exists","clientClassName","clientVarName","charAt","slice","toolName","toolVarName","toolCreationBlock","scope","agentName","devTargetName","targetDevTargetName","targets","projects","target","sourcePath","preferInstallDependencies","languages"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../../packages/nx-plugin/src/ts/agent/a2a-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 TsAgentA2aConnectionGeneratorSchema {\n sourceProject: string;\n targetProject: string;\n sourceComponent?: ComponentMetadata;\n targetComponent?: ComponentMetadata;\n preferInstallDependencies?: boolean;\n}\n"],"names":[],"mappings":"AAAA;;;CAGC,GAGD;;CAEC,GACD,WAMC"}
|
|
1
|
+
{"version":3,"sources":["../../../../../../../packages/nx-plugin/src/ts/agent/a2a-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.js';\n\n/**\n * TypeScript types for options defined in schema.json\n */\nexport interface TsAgentA2aConnectionGeneratorSchema {\n sourceProject: string;\n targetProject: string;\n sourceComponent?: ComponentMetadata;\n targetComponent?: ComponentMetadata;\n preferInstallDependencies?: boolean;\n}\n"],"names":[],"mappings":"AAAA;;;CAGC,GAGD;;CAEC,GACD,WAMC"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
3
3
|
* SPDX-License-Identifier: Apache-2.0
|
|
4
4
|
*/
|
|
5
|
-
import { ComponentMetadata } from '../../../utils/nx';
|
|
5
|
+
import { ComponentMetadata } from '../../../utils/nx.js';
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
8
|
* TypeScript types for options defined in schema.json
|
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
* SPDX-License-Identifier: Apache-2.0
|
|
4
4
|
*/
|
|
5
5
|
import { type GeneratorCallback, type Tree } from '@nx/devkit';
|
|
6
|
-
import { type NxGeneratorInfo } from '../../../utils/nx';
|
|
6
|
+
import { type NxGeneratorInfo } from '../../../utils/nx.js';
|
|
7
7
|
import type { TsAgentGatewayConnectionGeneratorSchema } from './schema';
|
|
8
|
-
export declare const DEPENDENCIES: import("../../../utils/declared-dependencies").DependencyDeclaration<readonly [{
|
|
8
|
+
export declare const DEPENDENCIES: import("../../../utils/declared-dependencies.js").DependencyDeclaration<readonly [{
|
|
9
9
|
readonly name: "@modelcontextprotocol/sdk";
|
|
10
10
|
}, {
|
|
11
11
|
readonly name: "@strands-agents/sdk";
|
|
@@ -41,7 +41,7 @@ export declare const DEPENDENCIES: import("../../../utils/declared-dependencies"
|
|
|
41
41
|
readonly name: "@strands-agents/sdk";
|
|
42
42
|
} & {
|
|
43
43
|
versionOnly: true;
|
|
44
|
-
}], readonly import("../../../utils/declared-dependencies").DeclaredPyDependency<"a2a-sdk" | "ag-ui-langgraph" | "ag-ui-protocol" | "ag-ui-strands" | "aiosqlite" | "aws-lambda-powertools" | "aws-lambda-powertools[tracer]" | "aws-lambda-powertools[parser]" | "aws-opentelemetry-distro" | "bedrock-agentcore" | "boto3" | "checkov" | "fastapi" | "fastapi[standard]" | "httpx" | "langchain" | "langchain-aws" | "langchain-mcp-adapters" | "langgraph" | "langgraph-checkpoint-aws" | "langgraph-checkpoint-sqlite" | "mcp" | "pip-check-updates" | "pip-licenses" | "ruff" | "strands-agents" | "strands-agents[a2a]" | "strands-agents-tools" | "ty" | "pynamodb" | "uvicorn" | "sqlmodel" | "alembic" | "aiomysql" | "asyncpg" | "greenlet", Record<string, never>>[]>;
|
|
44
|
+
}], readonly import("../../../utils/declared-dependencies.js").DeclaredPyDependency<"a2a-sdk" | "ag-ui-langgraph" | "ag-ui-protocol" | "ag-ui-strands" | "aiosqlite" | "aws-lambda-powertools" | "aws-lambda-powertools[tracer]" | "aws-lambda-powertools[parser]" | "aws-opentelemetry-distro" | "bedrock-agentcore" | "boto3" | "checkov" | "fastapi" | "fastapi[standard]" | "httpx" | "langchain" | "langchain-aws" | "langchain-mcp-adapters" | "langgraph" | "langgraph-checkpoint-aws" | "langgraph-checkpoint-sqlite" | "mcp" | "pip-check-updates" | "pip-licenses" | "ruff" | "strands-agents" | "strands-agents[a2a]" | "strands-agents-tools" | "ty" | "pynamodb" | "uvicorn" | "sqlmodel" | "alembic" | "aiomysql" | "asyncpg" | "greenlet", Record<string, never>>[]>;
|
|
45
45
|
export declare const TS_AGENT_GATEWAY_CONNECTION_GENERATOR_INFO: NxGeneratorInfo;
|
|
46
46
|
export declare const tsAgentGatewayConnectionGenerator: (tree: Tree, options: TsAgentGatewayConnectionGeneratorSchema) => Promise<GeneratorCallback>;
|
|
47
47
|
export default tsAgentGatewayConnectionGenerator;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../../packages/nx-plugin/src/ts/agent/gateway-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 joinPathFragments,\n OverwriteStrategy,\n type Tree,\n updateProjectConfiguration,\n} from '@nx/devkit';\nimport { readAgentCoreGatewayMetadata } from '../../../agentcore-gateway/generator';\nimport { addTsDependencies } from '../../../utils/add-dependencies';\nimport {\n AGENT_CONNECTION_DEPENDENCIES,\n AGENT_CONNECTION_PROJECT_DIR,\n addTypeScriptClientToAgent,\n addTypeScriptCoreClient,\n ensureTypeScriptAgentConnectionProject,\n} from '../../../utils/agent-connection/agent-connection';\nimport { addDestructuredImport, addStarExport } from '../../../utils/ast';\nimport {\n declareDependencies,\n ownedElsewhere,\n} from '../../../utils/declared-dependencies';\nimport { formatFilesInSubtree } from '../../../utils/format';\nimport { installDependencies } from '../../../utils/install';\nimport { addGeneratorMetricsIfApplicable } from '../../../utils/metrics';\nimport { esmVars } from '../../../utils/module-format';\nimport { kebabCase } from '../../../utils/names';\nimport { getNpmScope } from '../../../utils/npm-scope';\nimport {\n addComponentGeneratorMetadata,\n addDependencyToTargetIfNotPresent,\n getGeneratorInfo,\n type NxGeneratorInfo,\n readProjectConfigurationUnqualified,\n} from '../../../utils/nx';\nimport { toProjectRelativePath } from '../../../utils/paths';\nimport type { TsAgentGatewayConnectionGeneratorSchema } from './schema';\n\n// The gateway core client + vended client need these whatever the connection's\n// options, so no entry is conditional.\nexport const DEPENDENCIES = declareDependencies()({\n ts: [\n { name: '@modelcontextprotocol/sdk' },\n { name: '@strands-agents/sdk' },\n { name: '@aws-lambda-powertools/parameters' },\n { name: '@aws-sdk/client-appconfigdata' },\n { name: 'aws4fetch' },\n { name: '@aws-sdk/credential-providers' },\n ...ownedElsewhere(AGENT_CONNECTION_DEPENDENCIES),\n ],\n});\n\nexport const TS_AGENT_GATEWAY_CONNECTION_GENERATOR_INFO: NxGeneratorInfo =\n getGeneratorInfo(import.meta.filename);\n\nexport const tsAgentGatewayConnectionGenerator = async (\n tree: Tree,\n options: TsAgentGatewayConnectionGeneratorSchema,\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 if (!agentComponent) {\n throw new Error(\n 'sourceComponent must be provided for ts#agent -> agentcore-gateway connections',\n );\n }\n const gateway = readAgentCoreGatewayMetadata(targetProject);\n\n if (gateway.protocol !== 'mcp') {\n throw new Error(\n `Gateway '${gateway.name}' has protocol='${gateway.protocol}'. Only MCP-protocol gateways are supported.`,\n );\n }\n if (gateway.auth !== 'iam') {\n throw new Error(\n `Gateway '${gateway.name}' uses auth='${gateway.auth}'. Agent connections currently require the gateway to use IAM authentication.`,\n );\n }\n if (agentComponent.auth && agentComponent.auth !== 'iam') {\n throw new Error(\n `Agent '${agentComponent.name}' uses auth='${agentComponent.auth}'. Only IAM-authenticated agents can connect to IAM gateways.`,\n );\n }\n\n const gatewayClassName = gateway.rc;\n const gatewayKebabCase = kebabCase(gatewayClassName);\n // A gateway is its own standalone project, so it exposes plain serve / dev.\n const gatewayServeTargetName = 'serve';\n const gatewayDevTargetName = 'dev';\n\n const npmScope = getNpmScope(tree);\n\n // 1. Ensure the shared agent-connection project exists + has the gateway\n // core client template.\n await ensureTypeScriptAgentConnectionProject(tree, DEPENDENCIES);\n await addTypeScriptCoreClient(tree, 'gateway', DEPENDENCIES);\n\n // 2. Generate the per-connection <Gateway>Client into app/. Local mode\n // points at the gateway project's local gateway port.\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files', 'agent-connection', 'app'),\n joinPathFragments(AGENT_CONNECTION_PROJECT_DIR, 'src', 'app'),\n {\n gatewayKebabCase,\n gatewayClassName,\n gatewayPort: gateway.port,\n ...esmVars(tree),\n },\n { overwriteStrategy: OverwriteStrategy.KeepExisting },\n );\n\n // Re-export from the agent-connection index\n await addStarExport(\n tree,\n joinPathFragments(AGENT_CONNECTION_PROJECT_DIR, 'src', 'index.ts'),\n `./app/${gatewayKebabCase}-client-strands.js`,\n );\n\n // 3. AST-transform agent.ts to add the gateway client (an McpClient in\n // both deployed and local modes) to the agent's tools.\n const agentSourceDir = joinPathFragments(\n sourceProject.root,\n agentComponent.path ?? 'src',\n );\n const agentFilePath = joinPathFragments(agentSourceDir, 'agent.ts');\n\n if (tree.exists(agentFilePath)) {\n const clientClassName = `${gatewayClassName}ClientStrands`;\n const clientVarName =\n gatewayClassName.charAt(0).toLowerCase() + gatewayClassName.slice(1);\n\n await addDestructuredImport(\n tree,\n agentFilePath,\n [clientClassName],\n `@${npmScope}/agent-connection`,\n );\n await addTypeScriptClientToAgent(\n tree,\n agentFilePath,\n clientClassName,\n clientVarName,\n );\n }\n\n // 4. Wire dev chain — agent's dev depends on gateway's\n // aggregator target, which transitively starts each attached MCP server.\n const agentName = agentComponent.name ?? 'agent';\n const serveTargetName = `${agentName}-serve`;\n const devTargetName = `${agentName}-dev`;\n let projectConfigChanged = false;\n if (sourceProject.targets?.[serveTargetName]) {\n addDependencyToTargetIfNotPresent(sourceProject, serveTargetName, {\n projects: [targetProject.name],\n target: gatewayServeTargetName,\n });\n projectConfigChanged = true;\n }\n if (sourceProject.targets?.[devTargetName]) {\n addDependencyToTargetIfNotPresent(sourceProject, devTargetName, {\n projects: [targetProject.name],\n target: gatewayDevTargetName,\n });\n projectConfigChanged = true;\n }\n if (projectConfigChanged) {\n updateProjectConfiguration(tree, sourceProject.name, sourceProject);\n }\n\n // 5. Dependencies\n addTsDependencies(tree, DEPENDENCIES, { projectRoot: sourceProject.root });\n\n // Recorded so the version sync knows this connection's dependencies are ours.\n addComponentGeneratorMetadata(\n tree,\n sourceProject.name,\n TS_AGENT_GATEWAY_CONNECTION_GENERATOR_INFO,\n toProjectRelativePath(sourceProject, agentFilePath),\n gatewayClassName,\n // The source component this connection is made from, so the pair is\n // identifiable rather than just the two projects.\n { sourcePath: options.sourceComponent?.path },\n );\n\n await addGeneratorMetricsIfApplicable(tree, [\n TS_AGENT_GATEWAY_CONNECTION_GENERATOR_INFO,\n ]);\n\n await formatFilesInSubtree(tree);\n return () =>\n installDependencies(tree, options.preferInstallDependencies, {\n languages: ['typescript'],\n });\n};\n\nexport default tsAgentGatewayConnectionGenerator;\n"],"names":["generateFiles","joinPathFragments","OverwriteStrategy","updateProjectConfiguration","readAgentCoreGatewayMetadata","addTsDependencies","AGENT_CONNECTION_DEPENDENCIES","AGENT_CONNECTION_PROJECT_DIR","addTypeScriptClientToAgent","addTypeScriptCoreClient","ensureTypeScriptAgentConnectionProject","addDestructuredImport","addStarExport","declareDependencies","ownedElsewhere","formatFilesInSubtree","installDependencies","addGeneratorMetricsIfApplicable","esmVars","kebabCase","getNpmScope","addComponentGeneratorMetadata","addDependencyToTargetIfNotPresent","getGeneratorInfo","readProjectConfigurationUnqualified","toProjectRelativePath","DEPENDENCIES","ts","name","TS_AGENT_GATEWAY_CONNECTION_GENERATOR_INFO","filename","tsAgentGatewayConnectionGenerator","tree","options","sourceProject","targetProject","agentComponent","sourceComponent","Error","gateway","protocol","auth","gatewayClassName","rc","gatewayKebabCase","gatewayServeTargetName","gatewayDevTargetName","npmScope","dirname","gatewayPort","port","overwriteStrategy","KeepExisting","agentSourceDir","root","path","agentFilePath","exists","clientClassName","clientVarName","charAt","toLowerCase","slice","agentName","serveTargetName","devTargetName","projectConfigChanged","targets","projects","target","projectRoot","sourcePath","preferInstallDependencies","languages"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../../../../packages/nx-plugin/src/ts/agent/gateway-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 joinPathFragments,\n OverwriteStrategy,\n type Tree,\n updateProjectConfiguration,\n} from '@nx/devkit';\nimport { readAgentCoreGatewayMetadata } from '../../../agentcore-gateway/generator.js';\nimport { addTsDependencies } from '../../../utils/add-dependencies.js';\nimport {\n AGENT_CONNECTION_DEPENDENCIES,\n AGENT_CONNECTION_PROJECT_DIR,\n addTypeScriptClientToAgent,\n addTypeScriptCoreClient,\n ensureTypeScriptAgentConnectionProject,\n} from '../../../utils/agent-connection/agent-connection.js';\nimport { addDestructuredImport, addStarExport } from '../../../utils/ast.js';\nimport {\n declareDependencies,\n ownedElsewhere,\n} from '../../../utils/declared-dependencies.js';\nimport { formatFilesInSubtree } from '../../../utils/format.js';\nimport { installDependencies } from '../../../utils/install.js';\nimport { addGeneratorMetricsIfApplicable } from '../../../utils/metrics.js';\nimport { esmVars } from '../../../utils/module-format.js';\nimport { kebabCase } from '../../../utils/names.js';\nimport { getNpmScope } from '../../../utils/npm-scope.js';\nimport {\n addComponentGeneratorMetadata,\n addDependencyToTargetIfNotPresent,\n getGeneratorInfo,\n type NxGeneratorInfo,\n readProjectConfigurationUnqualified,\n} from '../../../utils/nx.js';\nimport { toProjectRelativePath } from '../../../utils/paths.js';\nimport type { TsAgentGatewayConnectionGeneratorSchema } from './schema';\n\n// The gateway core client + vended client need these whatever the connection's\n// options, so no entry is conditional.\nexport const DEPENDENCIES = declareDependencies()({\n ts: [\n { name: '@modelcontextprotocol/sdk' },\n { name: '@strands-agents/sdk' },\n { name: '@aws-lambda-powertools/parameters' },\n { name: '@aws-sdk/client-appconfigdata' },\n { name: 'aws4fetch' },\n { name: '@aws-sdk/credential-providers' },\n ...ownedElsewhere(AGENT_CONNECTION_DEPENDENCIES),\n ],\n});\n\nexport const TS_AGENT_GATEWAY_CONNECTION_GENERATOR_INFO: NxGeneratorInfo =\n getGeneratorInfo(import.meta.filename);\n\nexport const tsAgentGatewayConnectionGenerator = async (\n tree: Tree,\n options: TsAgentGatewayConnectionGeneratorSchema,\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 if (!agentComponent) {\n throw new Error(\n 'sourceComponent must be provided for ts#agent -> agentcore-gateway connections',\n );\n }\n const gateway = readAgentCoreGatewayMetadata(targetProject);\n\n if (gateway.protocol !== 'mcp') {\n throw new Error(\n `Gateway '${gateway.name}' has protocol='${gateway.protocol}'. Only MCP-protocol gateways are supported.`,\n );\n }\n if (gateway.auth !== 'iam') {\n throw new Error(\n `Gateway '${gateway.name}' uses auth='${gateway.auth}'. Agent connections currently require the gateway to use IAM authentication.`,\n );\n }\n if (agentComponent.auth && agentComponent.auth !== 'iam') {\n throw new Error(\n `Agent '${agentComponent.name}' uses auth='${agentComponent.auth}'. Only IAM-authenticated agents can connect to IAM gateways.`,\n );\n }\n\n const gatewayClassName = gateway.rc;\n const gatewayKebabCase = kebabCase(gatewayClassName);\n // A gateway is its own standalone project, so it exposes plain serve / dev.\n const gatewayServeTargetName = 'serve';\n const gatewayDevTargetName = 'dev';\n\n const npmScope = getNpmScope(tree);\n\n // 1. Ensure the shared agent-connection project exists + has the gateway\n // core client template.\n await ensureTypeScriptAgentConnectionProject(tree, DEPENDENCIES);\n await addTypeScriptCoreClient(tree, 'gateway', DEPENDENCIES);\n\n // 2. Generate the per-connection <Gateway>Client into app/. Local mode\n // points at the gateway project's local gateway port.\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files', 'agent-connection', 'app'),\n joinPathFragments(AGENT_CONNECTION_PROJECT_DIR, 'src', 'app'),\n {\n gatewayKebabCase,\n gatewayClassName,\n gatewayPort: gateway.port,\n ...esmVars(tree),\n },\n { overwriteStrategy: OverwriteStrategy.KeepExisting },\n );\n\n // Re-export from the agent-connection index\n await addStarExport(\n tree,\n joinPathFragments(AGENT_CONNECTION_PROJECT_DIR, 'src', 'index.ts'),\n `./app/${gatewayKebabCase}-client-strands.js`,\n );\n\n // 3. AST-transform agent.ts to add the gateway client (an McpClient in\n // both deployed and local modes) to the agent's tools.\n const agentSourceDir = joinPathFragments(\n sourceProject.root,\n agentComponent.path ?? 'src',\n );\n const agentFilePath = joinPathFragments(agentSourceDir, 'agent.ts');\n\n if (tree.exists(agentFilePath)) {\n const clientClassName = `${gatewayClassName}ClientStrands`;\n const clientVarName =\n gatewayClassName.charAt(0).toLowerCase() + gatewayClassName.slice(1);\n\n await addDestructuredImport(\n tree,\n agentFilePath,\n [clientClassName],\n `@${npmScope}/agent-connection`,\n );\n await addTypeScriptClientToAgent(\n tree,\n agentFilePath,\n clientClassName,\n clientVarName,\n );\n }\n\n // 4. Wire dev chain — agent's dev depends on gateway's\n // aggregator target, which transitively starts each attached MCP server.\n const agentName = agentComponent.name ?? 'agent';\n const serveTargetName = `${agentName}-serve`;\n const devTargetName = `${agentName}-dev`;\n let projectConfigChanged = false;\n if (sourceProject.targets?.[serveTargetName]) {\n addDependencyToTargetIfNotPresent(sourceProject, serveTargetName, {\n projects: [targetProject.name],\n target: gatewayServeTargetName,\n });\n projectConfigChanged = true;\n }\n if (sourceProject.targets?.[devTargetName]) {\n addDependencyToTargetIfNotPresent(sourceProject, devTargetName, {\n projects: [targetProject.name],\n target: gatewayDevTargetName,\n });\n projectConfigChanged = true;\n }\n if (projectConfigChanged) {\n updateProjectConfiguration(tree, sourceProject.name, sourceProject);\n }\n\n // 5. Dependencies\n addTsDependencies(tree, DEPENDENCIES, { projectRoot: sourceProject.root });\n\n // Recorded so the version sync knows this connection's dependencies are ours.\n addComponentGeneratorMetadata(\n tree,\n sourceProject.name,\n TS_AGENT_GATEWAY_CONNECTION_GENERATOR_INFO,\n toProjectRelativePath(sourceProject, agentFilePath),\n gatewayClassName,\n // The source component this connection is made from, so the pair is\n // identifiable rather than just the two projects.\n { sourcePath: options.sourceComponent?.path },\n );\n\n await addGeneratorMetricsIfApplicable(tree, [\n TS_AGENT_GATEWAY_CONNECTION_GENERATOR_INFO,\n ]);\n\n await formatFilesInSubtree(tree);\n return () =>\n installDependencies(tree, options.preferInstallDependencies, {\n languages: ['typescript'],\n });\n};\n\nexport default tsAgentGatewayConnectionGenerator;\n"],"names":["generateFiles","joinPathFragments","OverwriteStrategy","updateProjectConfiguration","readAgentCoreGatewayMetadata","addTsDependencies","AGENT_CONNECTION_DEPENDENCIES","AGENT_CONNECTION_PROJECT_DIR","addTypeScriptClientToAgent","addTypeScriptCoreClient","ensureTypeScriptAgentConnectionProject","addDestructuredImport","addStarExport","declareDependencies","ownedElsewhere","formatFilesInSubtree","installDependencies","addGeneratorMetricsIfApplicable","esmVars","kebabCase","getNpmScope","addComponentGeneratorMetadata","addDependencyToTargetIfNotPresent","getGeneratorInfo","readProjectConfigurationUnqualified","toProjectRelativePath","DEPENDENCIES","ts","name","TS_AGENT_GATEWAY_CONNECTION_GENERATOR_INFO","filename","tsAgentGatewayConnectionGenerator","tree","options","sourceProject","targetProject","agentComponent","sourceComponent","Error","gateway","protocol","auth","gatewayClassName","rc","gatewayKebabCase","gatewayServeTargetName","gatewayDevTargetName","npmScope","dirname","gatewayPort","port","overwriteStrategy","KeepExisting","agentSourceDir","root","path","agentFilePath","exists","clientClassName","clientVarName","charAt","toLowerCase","slice","agentName","serveTargetName","devTargetName","projectConfigChanged","targets","projects","target","projectRoot","sourcePath","preferInstallDependencies","languages"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../../packages/nx-plugin/src/ts/agent/gateway-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 type { ComponentMetadata } from '../../../utils/nx';\n\nexport interface TsAgentGatewayConnectionGeneratorSchema {\n sourceProject: string;\n targetProject: string;\n sourceComponent?: ComponentMetadata;\n targetComponent?: ComponentMetadata;\n preferInstallDependencies?: boolean;\n}\n"],"names":[],"mappings":"AAAA;;;CAGC,GAGD,WAMC"}
|
|
1
|
+
{"version":3,"sources":["../../../../../../../packages/nx-plugin/src/ts/agent/gateway-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 type { ComponentMetadata } from '../../../utils/nx.js';\n\nexport interface TsAgentGatewayConnectionGeneratorSchema {\n sourceProject: string;\n targetProject: string;\n sourceComponent?: ComponentMetadata;\n targetComponent?: ComponentMetadata;\n preferInstallDependencies?: boolean;\n}\n"],"names":[],"mappings":"AAAA;;;CAGC,GAGD,WAMC"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
3
3
|
* SPDX-License-Identifier: Apache-2.0
|
|
4
4
|
*/
|
|
5
|
-
import type { ComponentMetadata } from '../../../utils/nx';
|
|
5
|
+
import type { ComponentMetadata } from '../../../utils/nx.js';
|
|
6
6
|
|
|
7
7
|
export interface TsAgentGatewayConnectionGeneratorSchema {
|
|
8
8
|
sourceProject: string;
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
* SPDX-License-Identifier: Apache-2.0
|
|
4
4
|
*/
|
|
5
5
|
import { type GeneratorCallback, type Tree } from '@nx/devkit';
|
|
6
|
-
import { type NxGeneratorInfo } from '../../utils/nx';
|
|
7
|
-
import type { IacMetadata } from '../../utils/shared-constructs-constants';
|
|
6
|
+
import { type NxGeneratorInfo } from '../../utils/nx.js';
|
|
7
|
+
import type { IacMetadata } from '../../utils/shared-constructs-constants.js';
|
|
8
8
|
import type { TsAgentGeneratorSchema } from './schema';
|
|
9
9
|
/** The metadata this generator records, which its predicates read. */
|
|
10
10
|
export interface TsAgentMetadata extends IacMetadata {
|
|
@@ -14,7 +14,7 @@ export interface TsAgentMetadata extends IacMetadata {
|
|
|
14
14
|
readonly protocol: string;
|
|
15
15
|
readonly session: string;
|
|
16
16
|
}
|
|
17
|
-
export declare const DEPENDENCIES: import("../../utils/declared-dependencies").DependencyDeclaration<readonly [{
|
|
17
|
+
export declare const DEPENDENCIES: import("../../utils/declared-dependencies.js").DependencyDeclaration<readonly [{
|
|
18
18
|
readonly name: "zod";
|
|
19
19
|
}, {
|
|
20
20
|
readonly name: "@strands-agents/sdk";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../packages/nx-plugin/src/ts/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 type GeneratorCallback,\n generateFiles,\n joinPathFragments,\n OverwriteStrategy,\n type Tree,\n updateProjectConfiguration,\n} from '@nx/devkit';\nimport { addTsDependencies } from '../../utils/add-dependencies';\nimport { addAgentChatScripts } from '../../utils/agent-chat/agent-chat';\nimport {\n AGENT_CONNECTION_DEPENDENCIES,\n addTypeScriptFrameworkBase,\n ensureTypeScriptAgentConnectionProject,\n} from '../../utils/agent-connection/agent-connection';\nimport {\n AGENT_CORE_CONSTRUCTS_PY_DEPENDENCIES,\n addAgentInfra,\n} from '../../utils/agent-core-constructs/agent-core-constructs';\nimport {\n addTypeScriptBundleTarget,\n BUNDLE_DEPENDENCIES,\n} from '../../utils/bundle/bundle';\nimport { resolveContainers } from '../../utils/containers';\nimport {\n declareDependencies,\n ownedElsewhere,\n} from '../../utils/declared-dependencies';\nimport {\n ADOT_IMAGE_DEPENDENCIES,\n addDockerScanTarget,\n DOCKER_DEPENDENCIES,\n NODE_IMAGE_DEPENDENCIES,\n nodeImageVersions,\n} from '../../utils/docker';\nimport { formatFilesInSubtree } from '../../utils/format';\nimport { FS_DEPENDENCIES, FsCommands } from '../../utils/fs';\nimport { resolveIac } from '../../utils/iac';\nimport { installDependencies } from '../../utils/install';\nimport { addGeneratorMetricsIfApplicable } from '../../utils/metrics';\nimport { esmVars } from '../../utils/module-format';\nimport { kebabCase, toClassName } from '../../utils/names';\nimport { getNpmScope } from '../../utils/npm-scope';\nimport {\n addComponentDevTarget,\n addComponentGeneratorMetadata,\n addDependencyToTargetIfNotPresent,\n getGeneratorInfo,\n type NxGeneratorInfo,\n readProjectConfigurationUnqualified,\n} from '../../utils/nx';\nimport { sortObjectKeys } from '../../utils/object';\nimport { getRelativePathToRootByDirectory } from '../../utils/paths';\nimport { assignPort } from '../../utils/port';\nimport {\n SHARED_CONSTRUCTS_DEPENDENCIES,\n sharedConstructsGenerator,\n} from '../../utils/shared-constructs';\nimport type { IacMetadata } from '../../utils/shared-constructs-constants';\nimport { BASE_IMAGES, TS_VERSIONS } from '../../utils/versions';\nimport type { TsAgentGeneratorSchema } from './schema';\n\n/** The metadata this generator records, which its predicates read. */\nexport interface TsAgentMetadata extends IacMetadata {\n readonly port: number;\n readonly rc: string;\n readonly auth: string;\n readonly protocol: string;\n readonly session: string;\n}\n\n// Each entry names the branch it belongs to, so the same declaration drives both\n// adding and the version sync.\nexport const DEPENDENCIES = declareDependencies<TsAgentMetadata>()({\n ts: [\n { name: 'zod' },\n { name: '@strands-agents/sdk' },\n { name: '@aws-sdk/credential-providers' },\n { name: '@aws-sdk/client-appconfigdata' },\n { name: '@aws-lambda-powertools/parameters' },\n { name: '@modelcontextprotocol/sdk' },\n { name: '@aws-sdk/client-s3', when: (m) => m.session === 's3' },\n { name: 'express', when: (m) => m.protocol !== 'http' },\n { name: '@a2a-js/sdk', when: (m) => m.protocol === 'a2a' },\n { name: '@ag-ui/aws-strands', when: (m) => m.protocol === 'ag-ui' },\n // @ag-ui/aws-strands declares these as peer dependencies but statically\n // imports them, so they must be installed for the bundler to inline them.\n { name: '@ag-ui/a2ui-toolkit', when: (m) => m.protocol === 'ag-ui' },\n { name: '@ag-ui/client', when: (m) => m.protocol === 'ag-ui' },\n { name: '@ag-ui/core', when: (m) => m.protocol === 'ag-ui' },\n { name: '@ag-ui/encoder', when: (m) => m.protocol === 'ag-ui' },\n { name: '@trpc/server', when: (m) => m.protocol === 'http' },\n { name: '@trpc/client', when: (m) => m.protocol === 'http' },\n { name: 'ws', when: (m) => m.protocol === 'http' },\n { name: 'cors', when: (m) => m.protocol !== 'a2a' },\n { name: 'aws4fetch', when: (m) => m.protocol === 'http' },\n { name: 'aws4fetch', when: (m) => m.auth === 'iam', dev: true },\n {\n name: '@aws-sdk/credential-providers',\n when: (m) => m.auth === 'iam',\n dev: true,\n },\n { name: '@types/node', dev: true },\n // The chat CLI runs standalone via tsx and resolves the deployed agent from\n // AppConfig when `RUNTIME_CONFIG_APP_ID` is set.\n { name: 'agent-chat-cli', dev: true },\n { name: '@aws-lambda-powertools/parameters', dev: true },\n { name: '@aws-sdk/client-appconfigdata', dev: true },\n // A2A chat builds a signed @a2a-js client factory for the deployed agent.\n { name: '@a2a-js/sdk', when: (m) => m.protocol === 'a2a', dev: true },\n { name: '@types/express', when: (m) => m.protocol !== 'http', dev: true },\n { name: '@types/ws', when: (m) => m.protocol === 'http', dev: true },\n { name: '@types/cors', dev: true },\n { name: 'tsx', dev: true, root: true },\n ...ownedElsewhere(AGENT_CONNECTION_DEPENDENCIES),\n ...ownedElsewhere(BUNDLE_DEPENDENCIES),\n ...ownedElsewhere(FS_DEPENDENCIES),\n ...ownedElsewhere(DOCKER_DEPENDENCIES),\n ...ownedElsewhere(SHARED_CONSTRUCTS_DEPENDENCIES),\n ...ownedElsewhere(NODE_IMAGE_DEPENDENCIES),\n ...ownedElsewhere(ADOT_IMAGE_DEPENDENCIES),\n ],\n py: ownedElsewhere(AGENT_CORE_CONSTRUCTS_PY_DEPENDENCIES),\n});\n\nexport const TS_AGENT_GENERATOR_INFO: NxGeneratorInfo = getGeneratorInfo(\n import.meta.filename,\n);\n\nexport const tsAgentGenerator = async (\n tree: Tree,\n options: TsAgentGeneratorSchema,\n): Promise<GeneratorCallback> => {\n const project = readProjectConfigurationUnqualified(tree, options.project);\n\n if (!tree.exists(joinPathFragments(project.root, 'tsconfig.json'))) {\n throw new Error(\n `Unsupported project ${options.project}. Expected a TypeScript project (with a tsconfig.json)`,\n );\n }\n\n const defaultName = `${kebabCase(project.name.split('/').pop())}-agent`;\n const name = kebabCase(options.name || defaultName);\n const agentNameClassName = toClassName(name);\n const agentTargetPrefix = options.name ? name : 'agent';\n const targetSourceDirRelativeToProjectRoot = joinPathFragments(\n 'src',\n agentTargetPrefix,\n );\n const targetSourceDir = joinPathFragments(\n project.root,\n targetSourceDirRelativeToProjectRoot,\n );\n const relativeSourceDir = targetSourceDir.replace(project.root + '/', './');\n const distDir = joinPathFragments('dist', project.root);\n\n const infra = options.infra ?? 'agentcore';\n const protocol = options.protocol ?? 'http';\n\n // Recorded in the metadata below so the version sync can tell a CDK\n // project from a Terraform one; undefined when no infrastructure was\n // generated, in which case neither provider's packages were added.\n const iac =\n infra !== 'none' ? await resolveIac(tree, options.iac) : undefined;\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 const session = options.session ?? 's3';\n\n if (infra === 'none' && session !== 'in-memory') {\n console.warn(\n 'Warning: session is ignored when no infrastructure is configured (no infrastructure is generated)',\n );\n }\n\n // Local-dev session storage lives at the workspace root\n // (`tmp/agents/strands/<agent-name>`), not inside the project, so each agent\n // gets its own storage directory. The `-dev`/`-serve` targets run with\n // cwd={projectRoot}, so compute that directory relative to the project root\n // here rather than resolving it at runtime (e.g. via import.meta.url),\n // which would need an extra runtime helper.\n const localSessionsDir = joinPathFragments(\n getRelativePathToRootByDirectory(project.root),\n `tmp/agents/strands/${name}`,\n );\n\n // Ensure the shared agent-connection project exists so the server entry\n // point can import `runWithSessionId` and propagate the AgentCore session\n // ID to any downstream MCP / A2A clients a later connection generator\n // wires into this agent.\n await ensureTypeScriptAgentConnectionProject(tree, DEPENDENCIES);\n // The agent server imports the framework base helpers (session cache + model\n // error logging) regardless of whether a connection client is wired in.\n await addTypeScriptFrameworkBase(tree, DEPENDENCIES);\n\n const templateContext = {\n name,\n agentNameClassName,\n distDir,\n protocol,\n session,\n localSessionsDir,\n agentConnectionImport: `@${getNpmScope(tree)}/agent-connection`,\n ...esmVars(tree),\n };\n\n // Generate common files shared by both protocols\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files', 'common'),\n targetSourceDir,\n templateContext,\n { overwriteStrategy: OverwriteStrategy.KeepExisting },\n );\n\n // Generate protocol-specific files\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files', protocol.toLowerCase()),\n targetSourceDir,\n templateContext,\n { overwriteStrategy: OverwriteStrategy.KeepExisting },\n );\n\n // AG-UI and A2A both mount an Express app and share the same session-id\n // middleware; HTTP relies on tRPC's createContext instead and has no\n // Express dependency to support it.\n if (protocol === 'ag-ui' || protocol === 'a2a') {\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files', 'common-express'),\n targetSourceDir,\n templateContext,\n { overwriteStrategy: OverwriteStrategy.KeepExisting },\n );\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 await addTypeScriptBundleTarget(\n tree,\n project,\n {\n targetFilePath: `${targetSourceDirRelativeToProjectRoot}/index.ts`,\n bundleOutputDir: joinPathFragments('agent', name),\n },\n DEPENDENCIES,\n );\n\n // Add the Dockerfile\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files', 'deploy'),\n targetSourceDir,\n {\n distDir,\n name,\n protocol,\n adotVersion:\n TS_VERSIONS['@aws/aws-distro-opentelemetry-node-autoinstrumentation'],\n jaegerVersion: TS_VERSIONS['@opentelemetry/propagator-jaeger'],\n nodeBaseImage: BASE_IMAGES.node,\n ...nodeImageVersions(),\n ...esmVars(tree),\n },\n { overwriteStrategy: OverwriteStrategy.KeepExisting },\n );\n\n const dockerOutputDir = joinPathFragments(\n 'dist',\n project.root,\n 'bundle',\n 'agent',\n name,\n );\n const dockerTargetName = `${agentTargetPrefix}-docker`;\n\n const fs = new FsCommands(tree, DEPENDENCIES);\n project.targets[dockerTargetName] = {\n cache: true,\n outputs: [`{workspaceRoot}/${dockerOutputDir}/Dockerfile`],\n executor: 'nx:run-commands',\n options: {\n commands: [\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: ['bundle'],\n };\n\n addDependencyToTargetIfNotPresent(project, 'docker', dockerTargetName);\n addDependencyToTargetIfNotPresent(project, 'build', 'docker');\n\n addDockerScanTarget(\n tree,\n {\n project,\n containerEngine: containers,\n trivyTargetName: `${agentTargetPrefix}-trivy`,\n dockerTargetName,\n imageTags: [dockerImageTag],\n },\n DEPENDENCIES,\n );\n\n // Add shared constructs\n await sharedConstructsGenerator(tree, { iac }, DEPENDENCIES);\n\n // AG-UI uses HTTP as the AgentCore protocol type (AG-UI is HTTP-based with SSE over POST).\n const infraProtocol: 'http' | 'a2a' =\n protocol === 'ag-ui' ? 'http' : (protocol as 'http' | 'a2a');\n\n await addAgentInfra(tree, {\n agentNameKebabCase: name,\n agentNameClassName,\n projectName: project.name,\n dockerImageTag,\n dockerOutputDir,\n iac,\n auth,\n session,\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: TS_AGENT_GENERATOR_INFO, name: agentTargetPrefix },\n });\n\n // Recorded below and read by the declaration's predicates, so the packages\n // added here are exactly the ones the version sync will own.\n const metadata: TsAgentMetadata = {\n port: localDevPort,\n rc: agentNameClassName,\n auth,\n protocol,\n session,\n ...(iac ? { iac } : {}),\n };\n\n addTsDependencies(tree, DEPENDENCIES, {\n metadata,\n projectRoot: project.root,\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 const scriptsDir = joinPathFragments(\n project.root,\n 'scripts',\n agentTargetPrefix,\n );\n addAgentChatScripts(tree, {\n scriptsDir,\n protocol,\n language: 'ts',\n agentNameClassName,\n auth,\n relativeAgentImport: `../../${targetSourceDirRelativeToProjectRoot}`,\n });\n\n const chatUrl =\n protocol === 'http'\n ? `ws://localhost:${localDevPort}/ws`\n : protocol === 'ag-ui'\n ? `http://localhost:${localDevPort}/invocations`\n : `http://localhost:${localDevPort}`;\n const chatCommand = `tsx ./scripts/${agentTargetPrefix}/chat.ts`;\n\n const agentTargets = {\n ...project.targets,\n [`${agentTargetPrefix}-serve`]: {\n executor: 'nx:run-commands',\n continuous: true,\n options: {\n commands: [`tsx --watch ${relativeSourceDir}/index.ts`],\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: [`tsx --watch ${relativeSourceDir}/index.ts`],\n cwd: '{projectRoot}',\n env: {\n PORT: `${localDevPort}`,\n LOCAL_DEV: 'true',\n },\n },\n },\n [`${agentTargetPrefix}-chat`]: {\n executor: 'nx:run-commands',\n options: {\n commands: [chatCommand],\n cwd: '{projectRoot}',\n env: {\n URL: chatUrl,\n },\n },\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 // Sort targets so their order is stable regardless of insertion order on\n // first run vs re-run.\n targets: sortObjectKeys(agentTargets),\n });\n\n addComponentGeneratorMetadata(\n tree,\n project.name,\n TS_AGENT_GENERATOR_INFO,\n targetSourceDirRelativeToProjectRoot,\n agentTargetPrefix,\n metadata,\n );\n\n await addGeneratorMetricsIfApplicable(tree, [TS_AGENT_GENERATOR_INFO]);\n\n await formatFilesInSubtree(tree);\n return () =>\n installDependencies(tree, options.preferInstallDependencies, {\n languages: ['typescript'],\n });\n};\n\nexport default tsAgentGenerator;\n"],"names":["generateFiles","joinPathFragments","OverwriteStrategy","updateProjectConfiguration","addTsDependencies","addAgentChatScripts","AGENT_CONNECTION_DEPENDENCIES","addTypeScriptFrameworkBase","ensureTypeScriptAgentConnectionProject","AGENT_CORE_CONSTRUCTS_PY_DEPENDENCIES","addAgentInfra","addTypeScriptBundleTarget","BUNDLE_DEPENDENCIES","resolveContainers","declareDependencies","ownedElsewhere","ADOT_IMAGE_DEPENDENCIES","addDockerScanTarget","DOCKER_DEPENDENCIES","NODE_IMAGE_DEPENDENCIES","nodeImageVersions","formatFilesInSubtree","FS_DEPENDENCIES","FsCommands","resolveIac","installDependencies","addGeneratorMetricsIfApplicable","esmVars","kebabCase","toClassName","getNpmScope","addComponentDevTarget","addComponentGeneratorMetadata","addDependencyToTargetIfNotPresent","getGeneratorInfo","readProjectConfigurationUnqualified","sortObjectKeys","getRelativePathToRootByDirectory","assignPort","SHARED_CONSTRUCTS_DEPENDENCIES","sharedConstructsGenerator","BASE_IMAGES","TS_VERSIONS","DEPENDENCIES","ts","name","when","m","session","protocol","auth","dev","root","py","TS_AGENT_GENERATOR_INFO","filename","tsAgentGenerator","tree","options","project","exists","Error","defaultName","split","pop","agentNameClassName","agentTargetPrefix","targetSourceDirRelativeToProjectRoot","targetSourceDir","relativeSourceDir","replace","distDir","infra","iac","undefined","console","warn","localSessionsDir","templateContext","agentConnectionImport","dirname","overwriteStrategy","KeepExisting","toLowerCase","containers","dockerImageTag","targetFilePath","bundleOutputDir","adotVersion","jaegerVersion","nodeBaseImage","node","dockerOutputDir","dockerTargetName","fs","targets","cache","outputs","executor","commands","cp","parallel","dependsOn","containerEngine","trivyTargetName","imageTags","infraProtocol","agentNameKebabCase","projectName","serverProtocol","localDevPortStart","localDevPort","component","info","metadata","port","rc","projectRoot","scriptsDir","language","relativeAgentImport","chatUrl","chatCommand","agentTargets","continuous","cwd","env","PORT","LOCAL_DEV","URL","preferInstallDependencies","languages"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../../../packages/nx-plugin/src/ts/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 type GeneratorCallback,\n generateFiles,\n joinPathFragments,\n OverwriteStrategy,\n type Tree,\n updateProjectConfiguration,\n} from '@nx/devkit';\nimport { addTsDependencies } from '../../utils/add-dependencies.js';\nimport { addAgentChatScripts } from '../../utils/agent-chat/agent-chat.js';\nimport {\n AGENT_CONNECTION_DEPENDENCIES,\n addTypeScriptFrameworkBase,\n ensureTypeScriptAgentConnectionProject,\n} from '../../utils/agent-connection/agent-connection.js';\nimport {\n AGENT_CORE_CONSTRUCTS_PY_DEPENDENCIES,\n addAgentInfra,\n} from '../../utils/agent-core-constructs/agent-core-constructs.js';\nimport {\n addTypeScriptBundleTarget,\n BUNDLE_DEPENDENCIES,\n} from '../../utils/bundle/bundle.js';\nimport { resolveContainers } from '../../utils/containers.js';\nimport {\n declareDependencies,\n ownedElsewhere,\n} from '../../utils/declared-dependencies.js';\nimport {\n ADOT_IMAGE_DEPENDENCIES,\n addDockerScanTarget,\n DOCKER_DEPENDENCIES,\n NODE_IMAGE_DEPENDENCIES,\n nodeImageVersions,\n} from '../../utils/docker.js';\nimport { formatFilesInSubtree } from '../../utils/format.js';\nimport { FS_DEPENDENCIES, FsCommands } from '../../utils/fs.js';\nimport { resolveIac } from '../../utils/iac.js';\nimport { installDependencies } from '../../utils/install.js';\nimport { addGeneratorMetricsIfApplicable } from '../../utils/metrics.js';\nimport { esmVars } from '../../utils/module-format.js';\nimport { kebabCase, toClassName } from '../../utils/names.js';\nimport { getNpmScope } from '../../utils/npm-scope.js';\nimport {\n addComponentDevTarget,\n addComponentGeneratorMetadata,\n addDependencyToTargetIfNotPresent,\n getGeneratorInfo,\n type NxGeneratorInfo,\n readProjectConfigurationUnqualified,\n} from '../../utils/nx.js';\nimport { sortObjectKeys } from '../../utils/object.js';\nimport { getRelativePathToRootByDirectory } from '../../utils/paths.js';\nimport { assignPort } from '../../utils/port.js';\nimport {\n SHARED_CONSTRUCTS_DEPENDENCIES,\n sharedConstructsGenerator,\n} from '../../utils/shared-constructs.js';\nimport type { IacMetadata } from '../../utils/shared-constructs-constants.js';\nimport { BASE_IMAGES, TS_VERSIONS } from '../../utils/versions.js';\nimport type { TsAgentGeneratorSchema } from './schema';\n\n/** The metadata this generator records, which its predicates read. */\nexport interface TsAgentMetadata extends IacMetadata {\n readonly port: number;\n readonly rc: string;\n readonly auth: string;\n readonly protocol: string;\n readonly session: string;\n}\n\n// Each entry names the branch it belongs to, so the same declaration drives both\n// adding and the version sync.\nexport const DEPENDENCIES = declareDependencies<TsAgentMetadata>()({\n ts: [\n { name: 'zod' },\n { name: '@strands-agents/sdk' },\n { name: '@aws-sdk/credential-providers' },\n { name: '@aws-sdk/client-appconfigdata' },\n { name: '@aws-lambda-powertools/parameters' },\n { name: '@modelcontextprotocol/sdk' },\n { name: '@aws-sdk/client-s3', when: (m) => m.session === 's3' },\n { name: 'express', when: (m) => m.protocol !== 'http' },\n { name: '@a2a-js/sdk', when: (m) => m.protocol === 'a2a' },\n { name: '@ag-ui/aws-strands', when: (m) => m.protocol === 'ag-ui' },\n // @ag-ui/aws-strands declares these as peer dependencies but statically\n // imports them, so they must be installed for the bundler to inline them.\n { name: '@ag-ui/a2ui-toolkit', when: (m) => m.protocol === 'ag-ui' },\n { name: '@ag-ui/client', when: (m) => m.protocol === 'ag-ui' },\n { name: '@ag-ui/core', when: (m) => m.protocol === 'ag-ui' },\n { name: '@ag-ui/encoder', when: (m) => m.protocol === 'ag-ui' },\n { name: '@trpc/server', when: (m) => m.protocol === 'http' },\n { name: '@trpc/client', when: (m) => m.protocol === 'http' },\n { name: 'ws', when: (m) => m.protocol === 'http' },\n { name: 'cors', when: (m) => m.protocol !== 'a2a' },\n { name: 'aws4fetch', when: (m) => m.protocol === 'http' },\n { name: 'aws4fetch', when: (m) => m.auth === 'iam', dev: true },\n {\n name: '@aws-sdk/credential-providers',\n when: (m) => m.auth === 'iam',\n dev: true,\n },\n { name: '@types/node', dev: true },\n // The chat CLI runs standalone via tsx and resolves the deployed agent from\n // AppConfig when `RUNTIME_CONFIG_APP_ID` is set.\n { name: 'agent-chat-cli', dev: true },\n { name: '@aws-lambda-powertools/parameters', dev: true },\n { name: '@aws-sdk/client-appconfigdata', dev: true },\n // A2A chat builds a signed @a2a-js client factory for the deployed agent.\n { name: '@a2a-js/sdk', when: (m) => m.protocol === 'a2a', dev: true },\n { name: '@types/express', when: (m) => m.protocol !== 'http', dev: true },\n { name: '@types/ws', when: (m) => m.protocol === 'http', dev: true },\n { name: '@types/cors', dev: true },\n { name: 'tsx', dev: true, root: true },\n ...ownedElsewhere(AGENT_CONNECTION_DEPENDENCIES),\n ...ownedElsewhere(BUNDLE_DEPENDENCIES),\n ...ownedElsewhere(FS_DEPENDENCIES),\n ...ownedElsewhere(DOCKER_DEPENDENCIES),\n ...ownedElsewhere(SHARED_CONSTRUCTS_DEPENDENCIES),\n ...ownedElsewhere(NODE_IMAGE_DEPENDENCIES),\n ...ownedElsewhere(ADOT_IMAGE_DEPENDENCIES),\n ],\n py: ownedElsewhere(AGENT_CORE_CONSTRUCTS_PY_DEPENDENCIES),\n});\n\nexport const TS_AGENT_GENERATOR_INFO: NxGeneratorInfo = getGeneratorInfo(\n import.meta.filename,\n);\n\nexport const tsAgentGenerator = async (\n tree: Tree,\n options: TsAgentGeneratorSchema,\n): Promise<GeneratorCallback> => {\n const project = readProjectConfigurationUnqualified(tree, options.project);\n\n if (!tree.exists(joinPathFragments(project.root, 'tsconfig.json'))) {\n throw new Error(\n `Unsupported project ${options.project}. Expected a TypeScript project (with a tsconfig.json)`,\n );\n }\n\n const defaultName = `${kebabCase(project.name.split('/').pop())}-agent`;\n const name = kebabCase(options.name || defaultName);\n const agentNameClassName = toClassName(name);\n const agentTargetPrefix = options.name ? name : 'agent';\n const targetSourceDirRelativeToProjectRoot = joinPathFragments(\n 'src',\n agentTargetPrefix,\n );\n const targetSourceDir = joinPathFragments(\n project.root,\n targetSourceDirRelativeToProjectRoot,\n );\n const relativeSourceDir = targetSourceDir.replace(project.root + '/', './');\n const distDir = joinPathFragments('dist', project.root);\n\n const infra = options.infra ?? 'agentcore';\n const protocol = options.protocol ?? 'http';\n\n // Recorded in the metadata below so the version sync can tell a CDK\n // project from a Terraform one; undefined when no infrastructure was\n // generated, in which case neither provider's packages were added.\n const iac =\n infra !== 'none' ? await resolveIac(tree, options.iac) : undefined;\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 const session = options.session ?? 's3';\n\n if (infra === 'none' && session !== 'in-memory') {\n console.warn(\n 'Warning: session is ignored when no infrastructure is configured (no infrastructure is generated)',\n );\n }\n\n // Local-dev session storage lives at the workspace root\n // (`tmp/agents/strands/<agent-name>`), not inside the project, so each agent\n // gets its own storage directory. The `-dev`/`-serve` targets run with\n // cwd={projectRoot}, so compute that directory relative to the project root\n // here rather than resolving it at runtime (e.g. via import.meta.url),\n // which would need an extra runtime helper.\n const localSessionsDir = joinPathFragments(\n getRelativePathToRootByDirectory(project.root),\n `tmp/agents/strands/${name}`,\n );\n\n // Ensure the shared agent-connection project exists so the server entry\n // point can import `runWithSessionId` and propagate the AgentCore session\n // ID to any downstream MCP / A2A clients a later connection generator\n // wires into this agent.\n await ensureTypeScriptAgentConnectionProject(tree, DEPENDENCIES);\n // The agent server imports the framework base helpers (session cache + model\n // error logging) regardless of whether a connection client is wired in.\n await addTypeScriptFrameworkBase(tree, DEPENDENCIES);\n\n const templateContext = {\n name,\n agentNameClassName,\n distDir,\n protocol,\n session,\n localSessionsDir,\n agentConnectionImport: `@${getNpmScope(tree)}/agent-connection`,\n ...esmVars(tree),\n };\n\n // Generate common files shared by both protocols\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files', 'common'),\n targetSourceDir,\n templateContext,\n { overwriteStrategy: OverwriteStrategy.KeepExisting },\n );\n\n // Generate protocol-specific files\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files', protocol.toLowerCase()),\n targetSourceDir,\n templateContext,\n { overwriteStrategy: OverwriteStrategy.KeepExisting },\n );\n\n // AG-UI and A2A both mount an Express app and share the same session-id\n // middleware; HTTP relies on tRPC's createContext instead and has no\n // Express dependency to support it.\n if (protocol === 'ag-ui' || protocol === 'a2a') {\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files', 'common-express'),\n targetSourceDir,\n templateContext,\n { overwriteStrategy: OverwriteStrategy.KeepExisting },\n );\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 await addTypeScriptBundleTarget(\n tree,\n project,\n {\n targetFilePath: `${targetSourceDirRelativeToProjectRoot}/index.ts`,\n bundleOutputDir: joinPathFragments('agent', name),\n },\n DEPENDENCIES,\n );\n\n // Add the Dockerfile\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files', 'deploy'),\n targetSourceDir,\n {\n distDir,\n name,\n protocol,\n adotVersion:\n TS_VERSIONS['@aws/aws-distro-opentelemetry-node-autoinstrumentation'],\n jaegerVersion: TS_VERSIONS['@opentelemetry/propagator-jaeger'],\n nodeBaseImage: BASE_IMAGES.node,\n ...nodeImageVersions(),\n ...esmVars(tree),\n },\n { overwriteStrategy: OverwriteStrategy.KeepExisting },\n );\n\n const dockerOutputDir = joinPathFragments(\n 'dist',\n project.root,\n 'bundle',\n 'agent',\n name,\n );\n const dockerTargetName = `${agentTargetPrefix}-docker`;\n\n const fs = new FsCommands(tree, DEPENDENCIES);\n project.targets[dockerTargetName] = {\n cache: true,\n outputs: [`{workspaceRoot}/${dockerOutputDir}/Dockerfile`],\n executor: 'nx:run-commands',\n options: {\n commands: [\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: ['bundle'],\n };\n\n addDependencyToTargetIfNotPresent(project, 'docker', dockerTargetName);\n addDependencyToTargetIfNotPresent(project, 'build', 'docker');\n\n addDockerScanTarget(\n tree,\n {\n project,\n containerEngine: containers,\n trivyTargetName: `${agentTargetPrefix}-trivy`,\n dockerTargetName,\n imageTags: [dockerImageTag],\n },\n DEPENDENCIES,\n );\n\n // Add shared constructs\n await sharedConstructsGenerator(tree, { iac }, DEPENDENCIES);\n\n // AG-UI uses HTTP as the AgentCore protocol type (AG-UI is HTTP-based with SSE over POST).\n const infraProtocol: 'http' | 'a2a' =\n protocol === 'ag-ui' ? 'http' : (protocol as 'http' | 'a2a');\n\n await addAgentInfra(tree, {\n agentNameKebabCase: name,\n agentNameClassName,\n projectName: project.name,\n dockerImageTag,\n dockerOutputDir,\n iac,\n auth,\n session,\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: TS_AGENT_GENERATOR_INFO, name: agentTargetPrefix },\n });\n\n // Recorded below and read by the declaration's predicates, so the packages\n // added here are exactly the ones the version sync will own.\n const metadata: TsAgentMetadata = {\n port: localDevPort,\n rc: agentNameClassName,\n auth,\n protocol,\n session,\n ...(iac ? { iac } : {}),\n };\n\n addTsDependencies(tree, DEPENDENCIES, {\n metadata,\n projectRoot: project.root,\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 const scriptsDir = joinPathFragments(\n project.root,\n 'scripts',\n agentTargetPrefix,\n );\n addAgentChatScripts(tree, {\n scriptsDir,\n protocol,\n language: 'ts',\n agentNameClassName,\n auth,\n relativeAgentImport: `../../${targetSourceDirRelativeToProjectRoot}`,\n });\n\n const chatUrl =\n protocol === 'http'\n ? `ws://localhost:${localDevPort}/ws`\n : protocol === 'ag-ui'\n ? `http://localhost:${localDevPort}/invocations`\n : `http://localhost:${localDevPort}`;\n const chatCommand = `tsx ./scripts/${agentTargetPrefix}/chat.ts`;\n\n const agentTargets = {\n ...project.targets,\n [`${agentTargetPrefix}-serve`]: {\n executor: 'nx:run-commands',\n continuous: true,\n options: {\n commands: [`tsx --watch ${relativeSourceDir}/index.ts`],\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: [`tsx --watch ${relativeSourceDir}/index.ts`],\n cwd: '{projectRoot}',\n env: {\n PORT: `${localDevPort}`,\n LOCAL_DEV: 'true',\n },\n },\n },\n [`${agentTargetPrefix}-chat`]: {\n executor: 'nx:run-commands',\n options: {\n commands: [chatCommand],\n cwd: '{projectRoot}',\n env: {\n URL: chatUrl,\n },\n },\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 // Sort targets so their order is stable regardless of insertion order on\n // first run vs re-run.\n targets: sortObjectKeys(agentTargets),\n });\n\n addComponentGeneratorMetadata(\n tree,\n project.name,\n TS_AGENT_GENERATOR_INFO,\n targetSourceDirRelativeToProjectRoot,\n agentTargetPrefix,\n metadata,\n );\n\n await addGeneratorMetricsIfApplicable(tree, [TS_AGENT_GENERATOR_INFO]);\n\n await formatFilesInSubtree(tree);\n return () =>\n installDependencies(tree, options.preferInstallDependencies, {\n languages: ['typescript'],\n });\n};\n\nexport default tsAgentGenerator;\n"],"names":["generateFiles","joinPathFragments","OverwriteStrategy","updateProjectConfiguration","addTsDependencies","addAgentChatScripts","AGENT_CONNECTION_DEPENDENCIES","addTypeScriptFrameworkBase","ensureTypeScriptAgentConnectionProject","AGENT_CORE_CONSTRUCTS_PY_DEPENDENCIES","addAgentInfra","addTypeScriptBundleTarget","BUNDLE_DEPENDENCIES","resolveContainers","declareDependencies","ownedElsewhere","ADOT_IMAGE_DEPENDENCIES","addDockerScanTarget","DOCKER_DEPENDENCIES","NODE_IMAGE_DEPENDENCIES","nodeImageVersions","formatFilesInSubtree","FS_DEPENDENCIES","FsCommands","resolveIac","installDependencies","addGeneratorMetricsIfApplicable","esmVars","kebabCase","toClassName","getNpmScope","addComponentDevTarget","addComponentGeneratorMetadata","addDependencyToTargetIfNotPresent","getGeneratorInfo","readProjectConfigurationUnqualified","sortObjectKeys","getRelativePathToRootByDirectory","assignPort","SHARED_CONSTRUCTS_DEPENDENCIES","sharedConstructsGenerator","BASE_IMAGES","TS_VERSIONS","DEPENDENCIES","ts","name","when","m","session","protocol","auth","dev","root","py","TS_AGENT_GENERATOR_INFO","filename","tsAgentGenerator","tree","options","project","exists","Error","defaultName","split","pop","agentNameClassName","agentTargetPrefix","targetSourceDirRelativeToProjectRoot","targetSourceDir","relativeSourceDir","replace","distDir","infra","iac","undefined","console","warn","localSessionsDir","templateContext","agentConnectionImport","dirname","overwriteStrategy","KeepExisting","toLowerCase","containers","dockerImageTag","targetFilePath","bundleOutputDir","adotVersion","jaegerVersion","nodeBaseImage","node","dockerOutputDir","dockerTargetName","fs","targets","cache","outputs","executor","commands","cp","parallel","dependsOn","containerEngine","trivyTargetName","imageTags","infraProtocol","agentNameKebabCase","projectName","serverProtocol","localDevPortStart","localDevPort","component","info","metadata","port","rc","projectRoot","scriptsDir","language","relativeAgentImport","chatUrl","chatCommand","agentTargets","continuous","cwd","env","PORT","LOCAL_DEV","URL","preferInstallDependencies","languages"],"mappings":"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"}
|
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
* SPDX-License-Identifier: Apache-2.0
|
|
4
4
|
*/
|
|
5
5
|
import { type GeneratorCallback, type Tree } from '@nx/devkit';
|
|
6
|
-
import { type NxGeneratorInfo } from '../../../utils/nx';
|
|
6
|
+
import { type NxGeneratorInfo } from '../../../utils/nx.js';
|
|
7
7
|
import type { TsAgentMcpConnectionGeneratorSchema } from './schema';
|
|
8
|
-
export declare const DEPENDENCIES: import("../../../utils/declared-dependencies").DependencyDeclaration<readonly [{
|
|
8
|
+
export declare const DEPENDENCIES: import("../../../utils/declared-dependencies.js").DependencyDeclaration<readonly [{
|
|
9
9
|
readonly name: "@modelcontextprotocol/sdk";
|
|
10
10
|
}, {
|
|
11
11
|
readonly name: "@strands-agents/sdk";
|
|
@@ -41,7 +41,7 @@ export declare const DEPENDENCIES: import("../../../utils/declared-dependencies"
|
|
|
41
41
|
readonly name: "@strands-agents/sdk";
|
|
42
42
|
} & {
|
|
43
43
|
versionOnly: true;
|
|
44
|
-
}], readonly import("../../../utils/declared-dependencies").DeclaredPyDependency<"a2a-sdk" | "ag-ui-langgraph" | "ag-ui-protocol" | "ag-ui-strands" | "aiosqlite" | "aws-lambda-powertools" | "aws-lambda-powertools[tracer]" | "aws-lambda-powertools[parser]" | "aws-opentelemetry-distro" | "bedrock-agentcore" | "boto3" | "checkov" | "fastapi" | "fastapi[standard]" | "httpx" | "langchain" | "langchain-aws" | "langchain-mcp-adapters" | "langgraph" | "langgraph-checkpoint-aws" | "langgraph-checkpoint-sqlite" | "mcp" | "pip-check-updates" | "pip-licenses" | "ruff" | "strands-agents" | "strands-agents[a2a]" | "strands-agents-tools" | "ty" | "pynamodb" | "uvicorn" | "sqlmodel" | "alembic" | "aiomysql" | "asyncpg" | "greenlet", Record<string, never>>[]>;
|
|
44
|
+
}], readonly import("../../../utils/declared-dependencies.js").DeclaredPyDependency<"a2a-sdk" | "ag-ui-langgraph" | "ag-ui-protocol" | "ag-ui-strands" | "aiosqlite" | "aws-lambda-powertools" | "aws-lambda-powertools[tracer]" | "aws-lambda-powertools[parser]" | "aws-opentelemetry-distro" | "bedrock-agentcore" | "boto3" | "checkov" | "fastapi" | "fastapi[standard]" | "httpx" | "langchain" | "langchain-aws" | "langchain-mcp-adapters" | "langgraph" | "langgraph-checkpoint-aws" | "langgraph-checkpoint-sqlite" | "mcp" | "pip-check-updates" | "pip-licenses" | "ruff" | "strands-agents" | "strands-agents[a2a]" | "strands-agents-tools" | "ty" | "pynamodb" | "uvicorn" | "sqlmodel" | "alembic" | "aiomysql" | "asyncpg" | "greenlet", Record<string, never>>[]>;
|
|
45
45
|
export declare const TS_AGENT_MCP_CONNECTION_GENERATOR_INFO: NxGeneratorInfo;
|
|
46
46
|
export declare const tsAgentMcpConnectionGenerator: (tree: Tree, options: TsAgentMcpConnectionGeneratorSchema) => Promise<GeneratorCallback>;
|
|
47
47
|
export default tsAgentMcpConnectionGenerator;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../../packages/nx-plugin/src/ts/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 joinPathFragments,\n OverwriteStrategy,\n type Tree,\n updateProjectConfiguration,\n} from '@nx/devkit';\nimport { addTsDependencies } from '../../../utils/add-dependencies';\nimport {\n AGENT_CONNECTION_DEPENDENCIES,\n AGENT_CONNECTION_PROJECT_DIR,\n addTypeScriptClientToAgent,\n addTypeScriptCoreClient,\n ensureTypeScriptAgentConnectionProject,\n} from '../../../utils/agent-connection/agent-connection';\nimport { addDestructuredImport, addStarExport } from '../../../utils/ast';\nimport {\n declareDependencies,\n ownedElsewhere,\n} from '../../../utils/declared-dependencies';\nimport { formatFilesInSubtree } from '../../../utils/format';\nimport { installDependencies } from '../../../utils/install';\nimport { addGeneratorMetricsIfApplicable } from '../../../utils/metrics';\nimport { esmVars } from '../../../utils/module-format';\nimport { kebabCase } from '../../../utils/names';\nimport { getNpmScope } from '../../../utils/npm-scope';\nimport {\n addComponentGeneratorMetadata,\n addDependencyToTargetIfNotPresent,\n getGeneratorInfo,\n type NxGeneratorInfo,\n readProjectConfigurationUnqualified,\n} from '../../../utils/nx';\nimport { toProjectRelativePath } from '../../../utils/paths';\nimport type { TsAgentMcpConnectionGeneratorSchema } from './schema';\n\n// The MCP core client + vended client need these whatever the connection's\n// options, so no entry is conditional.\nexport const DEPENDENCIES = declareDependencies()({\n ts: [\n { name: '@modelcontextprotocol/sdk' },\n { name: '@strands-agents/sdk' },\n { name: '@aws-lambda-powertools/parameters' },\n { name: '@aws-sdk/client-appconfigdata' },\n { name: 'aws4fetch' },\n { name: '@aws-sdk/credential-providers' },\n ...ownedElsewhere(AGENT_CONNECTION_DEPENDENCIES),\n ],\n});\n\nexport const TS_AGENT_MCP_CONNECTION_GENERATOR_INFO: NxGeneratorInfo =\n getGeneratorInfo(import.meta.filename);\n\nexport const tsAgentMcpConnectionGenerator = async (\n tree: Tree,\n options: TsAgentMcpConnectionGeneratorSchema,\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 ts#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 mcpServerKebabCase = kebabCase(mcpServerClassName);\n const mcpServerPort = mcpComponent.port ?? 8000;\n\n const npmScope = getNpmScope(tree);\n\n // 1. Ensure the shared agent-connection project exists + has the MCP core client\n await ensureTypeScriptAgentConnectionProject(tree, DEPENDENCIES);\n await addTypeScriptCoreClient(tree, 'mcp', DEPENDENCIES);\n\n // 2. Generate the per-connection <Name>Client into app/\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files', 'agent-connection', 'app'),\n joinPathFragments(AGENT_CONNECTION_PROJECT_DIR, 'src', 'app'),\n {\n mcpServerKebabCase,\n mcpServerClassName,\n mcpServerPort,\n ...esmVars(tree),\n },\n { overwriteStrategy: OverwriteStrategy.KeepExisting },\n );\n\n // Add re-export to index.ts\n await addStarExport(\n tree,\n joinPathFragments(AGENT_CONNECTION_PROJECT_DIR, 'src', 'index.ts'),\n `./app/${mcpServerKebabCase}-client-strands.js`,\n );\n\n // 3. AST transform agent.ts to add MCP tools\n const agentSourceDir = joinPathFragments(\n sourceProject.root,\n agentComponent.path ?? 'src',\n );\n const agentFilePath = joinPathFragments(agentSourceDir, 'agent.ts');\n\n if (tree.exists(agentFilePath)) {\n const clientClassName = `${mcpServerClassName}ClientStrands`;\n const clientVarName =\n mcpServerClassName.charAt(0).toLowerCase() + mcpServerClassName.slice(1);\n\n // Add import for the client\n await addDestructuredImport(\n tree,\n agentFilePath,\n [clientClassName],\n `@${npmScope}/agent-connection`,\n );\n\n await addTypeScriptClientToAgent(\n tree,\n agentFilePath,\n clientClassName,\n clientVarName,\n );\n }\n\n // 4. Set up dev target\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 // 5. Add dependencies required by the MCP core client + vended client\n addTsDependencies(tree, DEPENDENCIES, { projectRoot: sourceProject.root });\n\n // Recorded so the version sync knows this connection's dependencies are ours.\n addComponentGeneratorMetadata(\n tree,\n sourceProject.name,\n TS_AGENT_MCP_CONNECTION_GENERATOR_INFO,\n toProjectRelativePath(sourceProject, agentFilePath),\n mcpServerClassName,\n // The source component this connection is made from, so the pair is\n // identifiable rather than just the two projects.\n { sourcePath: options.sourceComponent?.path },\n );\n\n await addGeneratorMetricsIfApplicable(tree, [\n TS_AGENT_MCP_CONNECTION_GENERATOR_INFO,\n ]);\n\n await formatFilesInSubtree(tree);\n return () =>\n installDependencies(tree, options.preferInstallDependencies, {\n languages: ['typescript'],\n });\n};\n\nexport default tsAgentMcpConnectionGenerator;\n"],"names":["generateFiles","joinPathFragments","OverwriteStrategy","updateProjectConfiguration","addTsDependencies","AGENT_CONNECTION_DEPENDENCIES","AGENT_CONNECTION_PROJECT_DIR","addTypeScriptClientToAgent","addTypeScriptCoreClient","ensureTypeScriptAgentConnectionProject","addDestructuredImport","addStarExport","declareDependencies","ownedElsewhere","formatFilesInSubtree","installDependencies","addGeneratorMetricsIfApplicable","esmVars","kebabCase","getNpmScope","addComponentGeneratorMetadata","addDependencyToTargetIfNotPresent","getGeneratorInfo","readProjectConfigurationUnqualified","toProjectRelativePath","DEPENDENCIES","ts","name","TS_AGENT_MCP_CONNECTION_GENERATOR_INFO","filename","tsAgentMcpConnectionGenerator","tree","options","sourceProject","targetProject","agentComponent","sourceComponent","mcpComponent","targetComponent","Error","auth","toLowerCase","mcpComponentName","mcpServerClassName","rc","mcpServerKebabCase","mcpServerPort","port","npmScope","dirname","overwriteStrategy","KeepExisting","agentSourceDir","root","path","agentFilePath","exists","clientClassName","clientVarName","charAt","slice","agentName","devTargetName","mcpDevTargetName","targets","projects","target","projectRoot","sourcePath","preferInstallDependencies","languages"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../../../../packages/nx-plugin/src/ts/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 joinPathFragments,\n OverwriteStrategy,\n type Tree,\n updateProjectConfiguration,\n} from '@nx/devkit';\nimport { addTsDependencies } from '../../../utils/add-dependencies.js';\nimport {\n AGENT_CONNECTION_DEPENDENCIES,\n AGENT_CONNECTION_PROJECT_DIR,\n addTypeScriptClientToAgent,\n addTypeScriptCoreClient,\n ensureTypeScriptAgentConnectionProject,\n} from '../../../utils/agent-connection/agent-connection.js';\nimport { addDestructuredImport, addStarExport } from '../../../utils/ast.js';\nimport {\n declareDependencies,\n ownedElsewhere,\n} from '../../../utils/declared-dependencies.js';\nimport { formatFilesInSubtree } from '../../../utils/format.js';\nimport { installDependencies } from '../../../utils/install.js';\nimport { addGeneratorMetricsIfApplicable } from '../../../utils/metrics.js';\nimport { esmVars } from '../../../utils/module-format.js';\nimport { kebabCase } from '../../../utils/names.js';\nimport { getNpmScope } from '../../../utils/npm-scope.js';\nimport {\n addComponentGeneratorMetadata,\n addDependencyToTargetIfNotPresent,\n getGeneratorInfo,\n type NxGeneratorInfo,\n readProjectConfigurationUnqualified,\n} from '../../../utils/nx.js';\nimport { toProjectRelativePath } from '../../../utils/paths.js';\nimport type { TsAgentMcpConnectionGeneratorSchema } from './schema';\n\n// The MCP core client + vended client need these whatever the connection's\n// options, so no entry is conditional.\nexport const DEPENDENCIES = declareDependencies()({\n ts: [\n { name: '@modelcontextprotocol/sdk' },\n { name: '@strands-agents/sdk' },\n { name: '@aws-lambda-powertools/parameters' },\n { name: '@aws-sdk/client-appconfigdata' },\n { name: 'aws4fetch' },\n { name: '@aws-sdk/credential-providers' },\n ...ownedElsewhere(AGENT_CONNECTION_DEPENDENCIES),\n ],\n});\n\nexport const TS_AGENT_MCP_CONNECTION_GENERATOR_INFO: NxGeneratorInfo =\n getGeneratorInfo(import.meta.filename);\n\nexport const tsAgentMcpConnectionGenerator = async (\n tree: Tree,\n options: TsAgentMcpConnectionGeneratorSchema,\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 ts#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 mcpServerKebabCase = kebabCase(mcpServerClassName);\n const mcpServerPort = mcpComponent.port ?? 8000;\n\n const npmScope = getNpmScope(tree);\n\n // 1. Ensure the shared agent-connection project exists + has the MCP core client\n await ensureTypeScriptAgentConnectionProject(tree, DEPENDENCIES);\n await addTypeScriptCoreClient(tree, 'mcp', DEPENDENCIES);\n\n // 2. Generate the per-connection <Name>Client into app/\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files', 'agent-connection', 'app'),\n joinPathFragments(AGENT_CONNECTION_PROJECT_DIR, 'src', 'app'),\n {\n mcpServerKebabCase,\n mcpServerClassName,\n mcpServerPort,\n ...esmVars(tree),\n },\n { overwriteStrategy: OverwriteStrategy.KeepExisting },\n );\n\n // Add re-export to index.ts\n await addStarExport(\n tree,\n joinPathFragments(AGENT_CONNECTION_PROJECT_DIR, 'src', 'index.ts'),\n `./app/${mcpServerKebabCase}-client-strands.js`,\n );\n\n // 3. AST transform agent.ts to add MCP tools\n const agentSourceDir = joinPathFragments(\n sourceProject.root,\n agentComponent.path ?? 'src',\n );\n const agentFilePath = joinPathFragments(agentSourceDir, 'agent.ts');\n\n if (tree.exists(agentFilePath)) {\n const clientClassName = `${mcpServerClassName}ClientStrands`;\n const clientVarName =\n mcpServerClassName.charAt(0).toLowerCase() + mcpServerClassName.slice(1);\n\n // Add import for the client\n await addDestructuredImport(\n tree,\n agentFilePath,\n [clientClassName],\n `@${npmScope}/agent-connection`,\n );\n\n await addTypeScriptClientToAgent(\n tree,\n agentFilePath,\n clientClassName,\n clientVarName,\n );\n }\n\n // 4. Set up dev target\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 // 5. Add dependencies required by the MCP core client + vended client\n addTsDependencies(tree, DEPENDENCIES, { projectRoot: sourceProject.root });\n\n // Recorded so the version sync knows this connection's dependencies are ours.\n addComponentGeneratorMetadata(\n tree,\n sourceProject.name,\n TS_AGENT_MCP_CONNECTION_GENERATOR_INFO,\n toProjectRelativePath(sourceProject, agentFilePath),\n mcpServerClassName,\n // The source component this connection is made from, so the pair is\n // identifiable rather than just the two projects.\n { sourcePath: options.sourceComponent?.path },\n );\n\n await addGeneratorMetricsIfApplicable(tree, [\n TS_AGENT_MCP_CONNECTION_GENERATOR_INFO,\n ]);\n\n await formatFilesInSubtree(tree);\n return () =>\n installDependencies(tree, options.preferInstallDependencies, {\n languages: ['typescript'],\n });\n};\n\nexport default tsAgentMcpConnectionGenerator;\n"],"names":["generateFiles","joinPathFragments","OverwriteStrategy","updateProjectConfiguration","addTsDependencies","AGENT_CONNECTION_DEPENDENCIES","AGENT_CONNECTION_PROJECT_DIR","addTypeScriptClientToAgent","addTypeScriptCoreClient","ensureTypeScriptAgentConnectionProject","addDestructuredImport","addStarExport","declareDependencies","ownedElsewhere","formatFilesInSubtree","installDependencies","addGeneratorMetricsIfApplicable","esmVars","kebabCase","getNpmScope","addComponentGeneratorMetadata","addDependencyToTargetIfNotPresent","getGeneratorInfo","readProjectConfigurationUnqualified","toProjectRelativePath","DEPENDENCIES","ts","name","TS_AGENT_MCP_CONNECTION_GENERATOR_INFO","filename","tsAgentMcpConnectionGenerator","tree","options","sourceProject","targetProject","agentComponent","sourceComponent","mcpComponent","targetComponent","Error","auth","toLowerCase","mcpComponentName","mcpServerClassName","rc","mcpServerKebabCase","mcpServerPort","port","npmScope","dirname","overwriteStrategy","KeepExisting","agentSourceDir","root","path","agentFilePath","exists","clientClassName","clientVarName","charAt","slice","agentName","devTargetName","mcpDevTargetName","targets","projects","target","projectRoot","sourcePath","preferInstallDependencies","languages"],"mappings":"AAAA;;;CAGC,GACD,SAEEA,aAAa,EACbC,iBAAiB,EACjBC,iBAAiB,EAEjBC,0BAA0B,QACrB,aAAa;AACpB,SAASC,iBAAiB,QAAQ,qCAAqC;AACvE,SACEC,6BAA6B,EAC7BC,4BAA4B,EAC5BC,0BAA0B,EAC1BC,uBAAuB,EACvBC,sCAAsC,QACjC,sDAAsD;AAC7D,SAASC,qBAAqB,EAAEC,aAAa,QAAQ,wBAAwB;AAC7E,SACEC,mBAAmB,EACnBC,cAAc,QACT,0CAA0C;AACjD,SAASC,oBAAoB,QAAQ,2BAA2B;AAChE,SAASC,mBAAmB,QAAQ,4BAA4B;AAChE,SAASC,+BAA+B,QAAQ,4BAA4B;AAC5E,SAASC,OAAO,QAAQ,kCAAkC;AAC1D,SAASC,SAAS,QAAQ,0BAA0B;AACpD,SAASC,WAAW,QAAQ,8BAA8B;AAC1D,SACEC,6BAA6B,EAC7BC,iCAAiC,EACjCC,gBAAgB,EAEhBC,mCAAmC,QAC9B,uBAAuB;AAC9B,SAASC,qBAAqB,QAAQ,0BAA0B;AAGhE,2EAA2E;AAC3E,uCAAuC;AACvC,OAAO,MAAMC,eAAeb,sBAAsB;IAChDc,IAAI;QACF;YAAEC,MAAM;QAA4B;QACpC;YAAEA,MAAM;QAAsB;QAC9B;YAAEA,MAAM;QAAoC;QAC5C;YAAEA,MAAM;QAAgC;QACxC;YAAEA,MAAM;QAAY;QACpB;YAAEA,MAAM;QAAgC;WACrCd,eAAeR;KACnB;AACH,GAAG;AAEH,OAAO,MAAMuB,yCACXN,iBAAiB,YAAYO,QAAQ,EAAE;AAEzC,OAAO,MAAMC,gCAAgC,OAC3CC,MACAC;IAEA,MAAMC,gBAAgBV,oCACpBQ,MACAC,QAAQC,aAAa;IAEvB,MAAMC,gBAAgBX,oCACpBQ,MACAC,QAAQE,aAAa;IAGvB,MAAMC,iBAAiBH,QAAQI,eAAe;IAC9C,MAAMC,eAAeL,QAAQM,eAAe;IAE5C,IAAI,CAACH,kBAAkB,CAACE,cAAc;QACpC,MAAM,IAAIE,MACR;IAEJ;IAEA,IAAIF,aAAaG,IAAI,IAAIH,aAAaG,IAAI,CAACC,WAAW,OAAO,OAAO;QAClE,MAAM,IAAIF,MACR,CAAC,uEAAuE,EAAEF,aAAaV,IAAI,CAAC,QAAQ,EAAEU,aAAaG,IAAI,CAAC,iBAAiB,CAAC;IAE9I;IAEA,MAAME,mBAAmBL,aAAaV,IAAI,IAAI;IAC9C,MAAMgB,qBAAqBN,aAAaO,EAAE;IAC1C,MAAMC,qBAAqB3B,UAAUyB;IACrC,MAAMG,gBAAgBT,aAAaU,IAAI,IAAI;IAE3C,MAAMC,WAAW7B,YAAYY;IAE7B,iFAAiF;IACjF,MAAMtB,uCAAuCsB,MAAMN;IACnD,MAAMjB,wBAAwBuB,MAAM,OAAON;IAE3C,wDAAwD;IACxDzB,cACE+B,MACA9B,kBAAkB,YAAYgD,OAAO,EAAE,SAAS,oBAAoB,QACpEhD,kBAAkBK,8BAA8B,OAAO,QACvD;QACEuC;QACAF;QACAG;QACA,GAAG7B,QAAQc,KAAK;IAClB,GACA;QAAEmB,mBAAmBhD,kBAAkBiD,YAAY;IAAC;IAGtD,4BAA4B;IAC5B,MAAMxC,cACJoB,MACA9B,kBAAkBK,8BAA8B,OAAO,aACvD,CAAC,MAAM,EAAEuC,mBAAmB,kBAAkB,CAAC;IAGjD,6CAA6C;IAC7C,MAAMO,iBAAiBnD,kBACrBgC,cAAcoB,IAAI,EAClBlB,eAAemB,IAAI,IAAI;IAEzB,MAAMC,gBAAgBtD,kBAAkBmD,gBAAgB;IAExD,IAAIrB,KAAKyB,MAAM,CAACD,gBAAgB;QAC9B,MAAME,kBAAkB,GAAGd,mBAAmB,aAAa,CAAC;QAC5D,MAAMe,gBACJf,mBAAmBgB,MAAM,CAAC,GAAGlB,WAAW,KAAKE,mBAAmBiB,KAAK,CAAC;QAExE,4BAA4B;QAC5B,MAAMlD,sBACJqB,MACAwB,eACA;YAACE;SAAgB,EACjB,CAAC,CAAC,EAAET,SAAS,iBAAiB,CAAC;QAGjC,MAAMzC,2BACJwB,MACAwB,eACAE,iBACAC;IAEJ;IAEA,uBAAuB;IACvB,MAAMG,YAAY1B,eAAeR,IAAI,IAAI;IACzC,MAAMmC,gBAAgB,GAAGD,UAAU,IAAI,CAAC;IACxC,MAAME,mBAAmB,GAAGrB,iBAAiB,IAAI,CAAC;IAElD,IAAIT,cAAc+B,OAAO,EAAE,CAACF,cAAc,EAAE;QAC1CzC,kCAAkCY,eAAe6B,eAAe;YAC9DG,UAAU;gBAAC/B,cAAcP,IAAI;aAAC;YAC9BuC,QAAQH;QACV;QACA5D,2BAA2B4B,MAAME,cAAcN,IAAI,EAAEM;IACvD;IAEA,sEAAsE;IACtE7B,kBAAkB2B,MAAMN,cAAc;QAAE0C,aAAalC,cAAcoB,IAAI;IAAC;IAExE,8EAA8E;IAC9EjC,8BACEW,MACAE,cAAcN,IAAI,EAClBC,wCACAJ,sBAAsBS,eAAesB,gBACrCZ,oBACA,oEAAoE;IACpE,kDAAkD;IAClD;QAAEyB,YAAYpC,QAAQI,eAAe,EAAEkB;IAAK;IAG9C,MAAMtC,gCAAgCe,MAAM;QAC1CH;KACD;IAED,MAAMd,qBAAqBiB;IAC3B,OAAO,IACLhB,oBAAoBgB,MAAMC,QAAQqC,yBAAyB,EAAE;YAC3DC,WAAW;gBAAC;aAAa;QAC3B;AACJ,EAAE;AAEF,eAAexC,8BAA8B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../../packages/nx-plugin/src/ts/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 TsAgentMcpConnectionGeneratorSchema {\n sourceProject: string;\n targetProject: string;\n sourceComponent?: ComponentMetadata;\n targetComponent?: ComponentMetadata;\n preferInstallDependencies?: boolean;\n}\n"],"names":[],"mappings":"AAAA;;;CAGC,GAGD;;CAEC,GACD,WAMC"}
|
|
1
|
+
{"version":3,"sources":["../../../../../../../packages/nx-plugin/src/ts/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.js';\n\n/**\n * TypeScript types for options defined in schema.json\n */\nexport interface TsAgentMcpConnectionGeneratorSchema {\n sourceProject: string;\n targetProject: string;\n sourceComponent?: ComponentMetadata;\n targetComponent?: ComponentMetadata;\n preferInstallDependencies?: boolean;\n}\n"],"names":[],"mappings":"AAAA;;;CAGC,GAGD;;CAEC,GACD,WAMC"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
3
3
|
* SPDX-License-Identifier: Apache-2.0
|
|
4
4
|
*/
|
|
5
|
-
import { ComponentMetadata } from '../../../utils/nx';
|
|
5
|
+
import { ComponentMetadata } from '../../../utils/nx.js';
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
8
|
* TypeScript types for options defined in schema.json
|