@aws/nx-plugin 1.0.0-rc.57 → 1.0.0-rc.59
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE-THIRD-PARTY +2917 -1295
- package/generators.json +17 -1
- package/migrations.json +36 -26
- package/package.json +13 -13
- package/src/agentcore-gateway/__snapshots__/generator.spec.ts.snap +273 -0
- package/src/agentcore-gateway/agent-connection/generator.d.ts +19 -0
- package/src/agentcore-gateway/agent-connection/generator.js +90 -0
- package/src/agentcore-gateway/agent-connection/generator.js.map +1 -0
- package/src/agentcore-gateway/agent-connection/schema.d.js +6 -0
- package/src/agentcore-gateway/agent-connection/schema.d.js.map +1 -0
- package/src/agentcore-gateway/agent-connection/schema.d.ts +13 -0
- package/src/agentcore-gateway/agent-connection/schema.json +31 -0
- package/src/agentcore-gateway/attach-upstream.d.ts +16 -0
- package/src/agentcore-gateway/attach-upstream.js +32 -11
- package/src/agentcore-gateway/attach-upstream.js.map +1 -1
- package/src/agentcore-gateway/files/project/http/local-dev.ts.template +77 -0
- package/src/agentcore-gateway/generator.d.ts +17 -1
- package/src/agentcore-gateway/generator.js +25 -12
- package/src/agentcore-gateway/generator.js.map +1 -1
- package/src/agentcore-gateway/react-connection/__snapshots__/generator.spec.ts.snap +68 -0
- package/src/agentcore-gateway/react-connection/generator.d.ts +19 -0
- package/src/agentcore-gateway/react-connection/generator.js +119 -0
- package/src/agentcore-gateway/react-connection/generator.js.map +1 -0
- package/src/agentcore-gateway/react-connection/schema.d.js +6 -0
- package/src/agentcore-gateway/react-connection/schema.d.js.map +1 -0
- package/src/agentcore-gateway/react-connection/schema.d.ts +13 -0
- package/src/agentcore-gateway/react-connection/schema.json +31 -0
- package/src/agentcore-gateway/schema.d.js.map +1 -1
- package/src/agentcore-gateway/schema.d.ts +1 -1
- package/src/agentcore-gateway/schema.json +3 -2
- package/src/connection/agent-local-dev.d.ts +16 -0
- package/src/connection/agent-local-dev.js +44 -2
- package/src/connection/agent-local-dev.js.map +1 -1
- package/src/connection/gateway-runtime-config.d.ts +19 -0
- package/src/connection/gateway-runtime-config.js +47 -0
- package/src/connection/gateway-runtime-config.js.map +1 -0
- package/src/connection/generator.js +5 -0
- package/src/connection/generator.js.map +1 -1
- package/src/connection/scaffold-catalog.d.ts +267 -0
- package/src/connection/scaffold-catalog.js +347 -0
- package/src/connection/scaffold-catalog.js.map +1 -0
- package/src/connection/schema-resolver.d.ts +5 -0
- package/src/connection/schema-resolver.js +27 -0
- package/src/connection/schema-resolver.js.map +1 -0
- package/src/connection/supported-connections.d.ts +9 -0
- package/src/connection/supported-connections.js +12 -0
- package/src/connection/supported-connections.js.map +1 -1
- package/src/infra/app/__snapshots__/generator.spec.ts.snap +7 -7
- package/src/internal/test-matrix/generator.js +39 -1
- package/src/internal/test-matrix/generator.js.map +1 -1
- package/src/migrations/latest/gateway-agent-targets/__snapshots__/migration.spec.ts.snap +223 -0
- package/src/migrations/latest/gateway-agent-targets/metadata.json +3 -0
- package/src/migrations/latest/gateway-agent-targets/migration.js +217 -0
- package/src/migrations/latest/gateway-agent-targets/migration.js.map +1 -0
- package/src/migrations/latest/smithy-ssdk-bundle-pins/metadata.json +3 -0
- package/src/migrations/latest/smithy-ssdk-bundle-pins/migration.js +78 -0
- package/src/migrations/latest/smithy-ssdk-bundle-pins/migration.js.map +1 -0
- package/src/migrations/v1.0.0-rc.50/modernize-function-props-cast/metadata.json +3 -0
- package/src/migrations/v1.0.0-rc.50/modernize-function-props-cast/migration.js.map +1 -0
- package/src/migrations/v1.0.0-rc.50/restrict-cors-to-custom-domains/metadata.json +3 -0
- package/src/migrations/v1.0.0-rc.50/restrict-cors-to-custom-domains/migration.js.map +1 -0
- package/src/migrations/v1.0.0-rc.50/terraform-bootstrap-adopt-existing-bucket/metadata.json +3 -0
- package/src/migrations/v1.0.0-rc.50/terraform-bootstrap-adopt-existing-bucket/migration.js.map +1 -0
- package/src/migrations/v1.0.0-rc.52/user-identity-waf-allow-localhost-callback/metadata.json +3 -0
- package/src/migrations/v1.0.0-rc.52/user-identity-waf-allow-localhost-callback/migration.js.map +1 -0
- package/src/migrations/v1.0.0-rc.54/order-access-log-delivery-after-bucket-policy/metadata.json +3 -0
- package/src/migrations/v1.0.0-rc.54/order-access-log-delivery-after-bucket-policy/migration.js.map +1 -0
- package/src/migrations/v1.0.0-rc.55/backfill-generator-metadata/metadata.json +3 -0
- package/src/migrations/v1.0.0-rc.55/backfill-generator-metadata/migration.js.map +1 -0
- package/src/migrations/v1.0.0-rc.56/dynamodb-local-remove-optimize-flag/metadata.json +3 -0
- package/src/migrations/v1.0.0-rc.56/dynamodb-local-remove-optimize-flag/migration.d.ts +6 -0
- package/src/migrations/v1.0.0-rc.56/dynamodb-local-remove-optimize-flag/migration.js.map +1 -0
- package/src/migrations/v1.0.0-rc.57/ts-agent-session-management-support/metadata.json +3 -0
- package/src/migrations/v1.0.0-rc.57/ts-agent-session-management-support/migration.d.ts +6 -0
- package/src/migrations/v1.0.0-rc.57/ts-agent-session-management-support/migration.js.map +1 -0
- package/src/preset/__snapshots__/generator.spec.ts.snap +5 -5
- package/src/py/agent/__snapshots__/generator.constructs.spec.ts.snap +10 -8
- package/src/py/agent/__snapshots__/generator.frameworks.spec.ts.snap +8 -8
- package/src/py/agent/__snapshots__/generator.protocols.spec.ts.snap +2 -2
- package/src/py/agent/a2a-connection/generator.d.ts +1 -1
- package/src/py/agent/gateway-connection/generator.d.ts +1 -1
- package/src/py/agent/mcp-connection/generator.d.ts +1 -1
- package/src/py/agent/react-connection/generator.d.ts +4 -1
- package/src/py/agent/react-connection/generator.js +35 -14
- package/src/py/agent/react-connection/generator.js.map +1 -1
- package/src/py/agent/schema.json +1 -0
- package/src/py/dynamodb/__snapshots__/generator.spec.ts.snap +2 -2
- package/src/py/dynamodb/schema.json +1 -0
- package/src/py/fast-api/__snapshots__/generator.terraform.spec.ts.snap +12 -12
- package/src/py/fast-api/generator.d.ts +5 -0
- package/src/py/fast-api/generator.js +3 -2
- package/src/py/fast-api/generator.js.map +1 -1
- package/src/py/fast-api/schema.json +1 -0
- package/src/py/lambda-function/__snapshots__/generator.spec.ts.snap +2 -2
- package/src/py/mcp-server/__snapshots__/generator.spec.ts.snap +5 -5
- package/src/py/mcp-server/schema.json +1 -0
- package/src/py/rdb/__snapshots__/generator.spec.ts.snap +2 -2
- package/src/py/rdb/schema.json +1 -0
- package/src/smithy/project/__snapshots__/generator.spec.ts.snap +4 -4
- package/src/smithy/project/files/service/build.Dockerfile.template +2 -2
- package/src/smithy/project/generator.d.ts +25 -0
- package/src/smithy/project/generator.js +24 -3
- package/src/smithy/project/generator.js.map +1 -1
- package/src/smithy/ts/api/__snapshots__/generator.spec.ts.snap +7 -7
- package/src/smithy/ts/api/generator.d.ts +6 -1
- package/src/smithy/ts/api/generator.js +3 -2
- package/src/smithy/ts/api/generator.js.map +1 -1
- package/src/smithy/ts/api/schema.json +1 -0
- package/src/trpc/backend/__snapshots__/generator.spec.ts.snap +12 -12
- package/src/trpc/backend/generator.d.ts +6 -1
- package/src/trpc/backend/generator.js +3 -2
- package/src/trpc/backend/generator.js.map +1 -1
- package/src/trpc/backend/schema.json +1 -0
- package/src/ts/agent/__snapshots__/generator.spec.ts.snap +9 -5
- package/src/ts/agent/generator.d.ts +32 -1
- package/src/ts/agent/generator.js +7 -4
- package/src/ts/agent/generator.js.map +1 -1
- package/src/ts/agent/react-connection/generator.d.ts +16 -1
- package/src/ts/agent/react-connection/generator.js +21 -8
- package/src/ts/agent/react-connection/generator.js.map +1 -1
- package/src/ts/agent/schema.json +1 -0
- package/src/ts/dcr-proxy/__snapshots__/generator.spec.ts.snap +1 -1
- package/src/ts/dynamodb/__snapshots__/generator.spec.ts.snap +2 -2
- package/src/ts/dynamodb/schema.json +1 -0
- package/src/ts/lambda-function/__snapshots__/generator.spec.ts.snap +2 -2
- package/src/ts/mcp-server/__snapshots__/generator.spec.ts.snap +2 -2
- package/src/ts/mcp-server/generator.d.ts +32 -1
- package/src/ts/mcp-server/generator.js +7 -4
- package/src/ts/mcp-server/generator.js.map +1 -1
- package/src/ts/mcp-server/schema.json +1 -0
- package/src/ts/nx-migration/generator.js +40 -27
- package/src/ts/nx-migration/generator.js.map +1 -1
- package/src/ts/rdb/__snapshots__/generator.spec.ts.snap +6 -6
- package/src/ts/rdb/generator.d.ts +8 -0
- package/src/ts/rdb/generator.js +3 -2
- package/src/ts/rdb/generator.js.map +1 -1
- package/src/ts/rdb/schema.json +1 -0
- package/src/ts/react-website/agui/files/common/src/hooks/useAgui__agentNameClassName__.tsx.template +16 -0
- package/src/ts/react-website/agui/generator.d.ts +11 -0
- package/src/ts/react-website/agui/generator.js +11 -7
- package/src/ts/react-website/agui/generator.js.map +1 -1
- package/src/ts/react-website/app/__snapshots__/generator.spec.ts.snap +61 -45
- package/src/ts/react-website/app/generator.d.ts +6 -1
- package/src/ts/react-website/app/generator.js +3 -2
- package/src/ts/react-website/app/generator.js.map +1 -1
- package/src/ts/react-website/app/schema.json +1 -0
- package/src/ts/react-website/cognito-auth/__snapshots__/generator.terraform.spec.ts.snap +2 -2
- package/src/ts/react-website/cognito-auth/generator.d.ts +6 -1
- package/src/ts/react-website/cognito-auth/generator.js +3 -2
- package/src/ts/react-website/cognito-auth/generator.js.map +1 -1
- package/src/utils/agent-core-constructs/agent-core-constructs.d.ts +23 -0
- package/src/utils/agent-core-constructs/agent-core-constructs.js +24 -1
- package/src/utils/agent-core-constructs/agent-core-constructs.js.map +1 -1
- package/src/utils/agent-core-constructs/files/cdk/app/agent-core/__nameKebabCase__/__nameKebabCase__.ts.template +3 -0
- package/src/utils/agent-core-constructs/files/cdk/app/agentcore-gateway/__nameKebabCase__/__nameKebabCase__.ts.template +6 -4
- package/src/utils/agent-core-constructs/files/cdk/core/agentcore-gateway/agentcore-gateway.ts.template +119 -3
- package/src/utils/agent-core-constructs/files/terraform/app/agentcore-gateway/__nameKebabCase__/__nameKebabCase__.tf.template +17 -0
- package/src/utils/api-constructs/api-constructs.d.ts +9 -0
- package/src/utils/api-constructs/api-constructs.js +11 -1
- package/src/utils/api-constructs/api-constructs.js.map +1 -1
- package/src/utils/config/utils.d.ts +5 -0
- package/src/utils/config/utils.js +7 -1
- package/src/utils/config/utils.js.map +1 -1
- package/src/utils/connection/open-api/files/components/__apiNameClassName__Provider.tsx.template +13 -2
- package/src/utils/connection/open-api/react.d.ts +10 -1
- package/src/utils/connection/open-api/react.js +3 -2
- package/src/utils/connection/open-api/react.js.map +1 -1
- package/src/utils/docker.d.ts +27 -2
- package/src/utils/docker.js +31 -2
- package/src/utils/docker.js.map +1 -1
- package/src/utils/identity-constructs/identity-constructs.d.ts +10 -0
- package/src/utils/identity-constructs/identity-constructs.js +11 -1
- package/src/utils/identity-constructs/identity-constructs.js.map +1 -1
- package/src/utils/migration-manifest.d.ts +58 -0
- package/src/utils/migration-manifest.js +76 -0
- package/src/utils/migration-manifest.js.map +1 -0
- package/src/utils/migration-versions.d.ts +2 -0
- package/src/utils/migration-versions.js.map +1 -1
- package/src/utils/shared-constructs-constants.d.ts +6 -0
- package/src/utils/shared-constructs-constants.js +5 -0
- package/src/utils/shared-constructs-constants.js.map +1 -1
- package/src/utils/version-upgrade-migration/owned-dependencies.d.ts +26 -0
- package/src/utils/version-upgrade-migration/owned-dependencies.js +52 -4
- package/src/utils/version-upgrade-migration/owned-dependencies.js.map +1 -1
- package/src/utils/version-upgrade-migration/register.d.ts +9 -3
- package/src/utils/version-upgrade-migration/register.js +18 -14
- package/src/utils/version-upgrade-migration/register.js.map +1 -1
- package/src/utils/version-upgrade-migration/sync-embedded-versions.d.ts +26 -0
- package/src/utils/version-upgrade-migration/sync-embedded-versions.js +304 -0
- package/src/utils/version-upgrade-migration/sync-embedded-versions.js.map +1 -0
- package/src/utils/version-upgrade-migration/sync-vended-versions.js +14 -0
- package/src/utils/version-upgrade-migration/sync-vended-versions.js.map +1 -1
- package/src/utils/versions.d.ts +90 -77
- package/src/utils/versions.js +86 -75
- package/src/utils/versions.js.map +1 -1
- package/src/utils/website-constructs/website-constructs.d.ts +11 -0
- package/src/utils/website-constructs/website-constructs.js +12 -1
- package/src/utils/website-constructs/website-constructs.js.map +1 -1
- package/src/migrations/latest/backfill-generator-metadata/migration.js.map +0 -1
- package/src/migrations/latest/dynamodb-local-remove-optimize-flag/migration.js.map +0 -1
- package/src/migrations/latest/modernize-function-props-cast/migration.js.map +0 -1
- package/src/migrations/latest/order-access-log-delivery-after-bucket-policy/migration.js.map +0 -1
- package/src/migrations/latest/restrict-cors-to-custom-domains/migration.js.map +0 -1
- package/src/migrations/latest/terraform-bootstrap-adopt-existing-bucket/migration.js.map +0 -1
- package/src/migrations/latest/ts-agent-session-management-support/migration.js.map +0 -1
- package/src/migrations/latest/user-identity-waf-allow-localhost-callback/migration.js.map +0 -1
- /package/src/agentcore-gateway/files/project/{local-dev.ts.template → mcp/local-dev.ts.template} +0 -0
- /package/src/migrations/latest/{dynamodb-local-remove-optimize-flag → gateway-agent-targets}/migration.d.ts +0 -0
- /package/src/migrations/latest/{modernize-function-props-cast → smithy-ssdk-bundle-pins}/migration.d.ts +0 -0
- /package/src/migrations/{latest/restrict-cors-to-custom-domains → v1.0.0-rc.50/modernize-function-props-cast}/migration.d.ts +0 -0
- /package/src/migrations/{latest → v1.0.0-rc.50}/modernize-function-props-cast/migration.js +0 -0
- /package/src/migrations/{latest/terraform-bootstrap-adopt-existing-bucket → v1.0.0-rc.50/restrict-cors-to-custom-domains}/migration.d.ts +0 -0
- /package/src/migrations/{latest → v1.0.0-rc.50}/restrict-cors-to-custom-domains/migration.js +0 -0
- /package/src/migrations/{latest/ts-agent-session-management-support → v1.0.0-rc.50/terraform-bootstrap-adopt-existing-bucket}/migration.d.ts +0 -0
- /package/src/migrations/{latest → v1.0.0-rc.50}/terraform-bootstrap-adopt-existing-bucket/migration.js +0 -0
- /package/src/migrations/{latest/order-access-log-delivery-after-bucket-policy → v1.0.0-rc.52/user-identity-waf-allow-localhost-callback}/migration.d.ts +0 -0
- /package/src/migrations/{latest → v1.0.0-rc.52}/user-identity-waf-allow-localhost-callback/migration.js +0 -0
- /package/src/migrations/{latest/user-identity-waf-allow-localhost-callback → v1.0.0-rc.54/order-access-log-delivery-after-bucket-policy}/migration.d.ts +0 -0
- /package/src/migrations/{latest → v1.0.0-rc.54}/order-access-log-delivery-after-bucket-policy/migration.js +0 -0
- /package/src/migrations/{latest → v1.0.0-rc.55}/backfill-generator-metadata/migration.d.ts +0 -0
- /package/src/migrations/{latest → v1.0.0-rc.55}/backfill-generator-metadata/migration.js +0 -0
- /package/src/migrations/{latest → v1.0.0-rc.56}/dynamodb-local-remove-optimize-flag/migration.js +0 -0
- /package/src/migrations/{latest → v1.0.0-rc.57}/ts-agent-session-management-support/migration.js +0 -0
|
@@ -643,7 +643,7 @@ exports[`ts#agent generator > should match snapshot for BedrockAgentCoreRuntime
|
|
|
643
643
|
"FROM public.ecr.aws/docker/library/node:lts-slim
|
|
644
644
|
|
|
645
645
|
# Upgrade npm to a version free of known HIGH/CRITICAL vulnerabilities
|
|
646
|
-
RUN npm install -g npm@12.0.
|
|
646
|
+
RUN npm install -g npm@12.0.2
|
|
647
647
|
|
|
648
648
|
WORKDIR /app
|
|
649
649
|
|
|
@@ -654,8 +654,8 @@ WORKDIR /app
|
|
|
654
654
|
# the runtime only needs node, and npm's own bundled dependencies would
|
|
655
655
|
# otherwise carry vulnerabilities into the image.
|
|
656
656
|
RUN npm init -y \\
|
|
657
|
-
&& npm pkg set "overrides.@opentelemetry/propagator-jaeger=2.
|
|
658
|
-
&& npm pkg set "overrides.minimatch=10.2.
|
|
657
|
+
&& npm pkg set "overrides.@opentelemetry/propagator-jaeger=2.10.0" \\
|
|
658
|
+
&& npm pkg set "overrides.minimatch=10.2.6" \\
|
|
659
659
|
&& npm install @aws/aws-distro-opentelemetry-node-autoinstrumentation@0.12.0 \\
|
|
660
660
|
&& npm uninstall -g npm
|
|
661
661
|
|
|
@@ -722,6 +722,8 @@ export class SnapshotBedrockAgent
|
|
|
722
722
|
{
|
|
723
723
|
public readonly dockerImage: AgentRuntimeArtifact;
|
|
724
724
|
public readonly agentCoreRuntime: Runtime;
|
|
725
|
+
/** Default Gateway target name for this agent. */
|
|
726
|
+
public readonly agentName = 'snapshot-bedrock-agent';
|
|
725
727
|
|
|
726
728
|
constructor(scope: Construct, id: string, props?: SnapshotBedrockAgentProps) {
|
|
727
729
|
super(scope, id);
|
|
@@ -1259,7 +1261,7 @@ exports[`ts#agent generator > should match snapshot for Terraform generated file
|
|
|
1259
1261
|
required_providers {
|
|
1260
1262
|
aws = {
|
|
1261
1263
|
source = "hashicorp/aws"
|
|
1262
|
-
version = "6.
|
|
1264
|
+
version = "6.57.1"
|
|
1263
1265
|
}
|
|
1264
1266
|
null = {
|
|
1265
1267
|
source = "hashicorp/null"
|
|
@@ -1667,7 +1669,7 @@ resource "null_resource" "runtime_ready" {
|
|
|
1667
1669
|
|
|
1668
1670
|
provisioner "local-exec" {
|
|
1669
1671
|
command = <<-EOT
|
|
1670
|
-
uv run --with boto3==1.43.
|
|
1672
|
+
uv run --with boto3==1.43.63 python -c "
|
|
1671
1673
|
import boto3
|
|
1672
1674
|
import json
|
|
1673
1675
|
import os
|
|
@@ -2355,6 +2357,8 @@ export class InMemoryAgent
|
|
|
2355
2357
|
{
|
|
2356
2358
|
public readonly dockerImage: AgentRuntimeArtifact;
|
|
2357
2359
|
public readonly agentCoreRuntime: Runtime;
|
|
2360
|
+
/** Default Gateway target name for this agent. */
|
|
2361
|
+
public readonly agentName = 'in-memory-agent';
|
|
2358
2362
|
|
|
2359
2363
|
constructor(scope: Construct, id: string, props?: InMemoryAgentProps) {
|
|
2360
2364
|
super(scope, id);
|
|
@@ -170,7 +170,38 @@ export declare const DEPENDENCIES: import("../../utils/declared-dependencies").D
|
|
|
170
170
|
readonly name: "@types/node";
|
|
171
171
|
} & {
|
|
172
172
|
versionOnly: true;
|
|
173
|
-
}
|
|
173
|
+
}, {
|
|
174
|
+
readonly name: "npm";
|
|
175
|
+
} & {
|
|
176
|
+
versionOnly: true;
|
|
177
|
+
}, {
|
|
178
|
+
readonly name: "minimatch";
|
|
179
|
+
} & {
|
|
180
|
+
versionOnly: true;
|
|
181
|
+
}, {
|
|
182
|
+
readonly name: "@aws/aws-distro-opentelemetry-node-autoinstrumentation";
|
|
183
|
+
} & {
|
|
184
|
+
versionOnly: true;
|
|
185
|
+
}, {
|
|
186
|
+
readonly name: "@opentelemetry/propagator-jaeger";
|
|
187
|
+
} & {
|
|
188
|
+
versionOnly: true;
|
|
189
|
+
}], readonly [{
|
|
190
|
+
readonly name: "boto3";
|
|
191
|
+
readonly when: (m: IacMetadata) => boolean;
|
|
192
|
+
} & {
|
|
193
|
+
versionOnly: true;
|
|
194
|
+
}, {
|
|
195
|
+
readonly name: "httpx";
|
|
196
|
+
readonly when: (m: IacMetadata) => boolean;
|
|
197
|
+
} & {
|
|
198
|
+
versionOnly: true;
|
|
199
|
+
}, {
|
|
200
|
+
readonly name: "mcp";
|
|
201
|
+
readonly when: (m: IacMetadata) => boolean;
|
|
202
|
+
} & {
|
|
203
|
+
versionOnly: true;
|
|
204
|
+
}]>;
|
|
174
205
|
export declare const TS_AGENT_GENERATOR_INFO: NxGeneratorInfo;
|
|
175
206
|
export declare const tsAgentGenerator: (tree: Tree, options: TsAgentGeneratorSchema) => Promise<GeneratorCallback>;
|
|
176
207
|
export default tsAgentGenerator;
|
|
@@ -5,11 +5,11 @@
|
|
|
5
5
|
import { addTsDependencies } from "../../utils/add-dependencies.js";
|
|
6
6
|
import { addAgentChatScripts } from "../../utils/agent-chat/agent-chat.js";
|
|
7
7
|
import { AGENT_CONNECTION_DEPENDENCIES, addTypeScriptFrameworkBase, ensureTypeScriptAgentConnectionProject } from "../../utils/agent-connection/agent-connection.js";
|
|
8
|
-
import { addAgentInfra } from "../../utils/agent-core-constructs/agent-core-constructs.js";
|
|
8
|
+
import { AGENT_CORE_CONSTRUCTS_PY_DEPENDENCIES, addAgentInfra } from "../../utils/agent-core-constructs/agent-core-constructs.js";
|
|
9
9
|
import { addTypeScriptBundleTarget, BUNDLE_DEPENDENCIES } from "../../utils/bundle/bundle.js";
|
|
10
10
|
import { resolveContainers } from "../../utils/containers.js";
|
|
11
11
|
import { declareDependencies, ownedElsewhere } from "../../utils/declared-dependencies.js";
|
|
12
|
-
import { addDockerScanTarget, DOCKER_DEPENDENCIES, nodeImageVersions } from "../../utils/docker.js";
|
|
12
|
+
import { ADOT_IMAGE_DEPENDENCIES, addDockerScanTarget, DOCKER_DEPENDENCIES, NODE_IMAGE_DEPENDENCIES, nodeImageVersions } from "../../utils/docker.js";
|
|
13
13
|
import { formatFilesInSubtree } from "../../utils/format.js";
|
|
14
14
|
import { FS_DEPENDENCIES, FsCommands } from "../../utils/fs.js";
|
|
15
15
|
import { resolveIac } from "../../utils/iac.js";
|
|
@@ -157,8 +157,11 @@ export const DEPENDENCIES = declareDependencies()({
|
|
|
157
157
|
...ownedElsewhere(BUNDLE_DEPENDENCIES),
|
|
158
158
|
...ownedElsewhere(FS_DEPENDENCIES),
|
|
159
159
|
...ownedElsewhere(DOCKER_DEPENDENCIES),
|
|
160
|
-
...ownedElsewhere(SHARED_CONSTRUCTS_DEPENDENCIES)
|
|
161
|
-
|
|
160
|
+
...ownedElsewhere(SHARED_CONSTRUCTS_DEPENDENCIES),
|
|
161
|
+
...ownedElsewhere(NODE_IMAGE_DEPENDENCIES),
|
|
162
|
+
...ownedElsewhere(ADOT_IMAGE_DEPENDENCIES)
|
|
163
|
+
],
|
|
164
|
+
py: ownedElsewhere(AGENT_CORE_CONSTRUCTS_PY_DEPENDENCIES)
|
|
162
165
|
});
|
|
163
166
|
export const TS_AGENT_GENERATOR_INFO = getGeneratorInfo(import.meta.filename);
|
|
164
167
|
export const tsAgentGenerator = async (tree, options)=>{
|
|
@@ -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 { addAgentInfra } 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 addDockerScanTarget,\n DOCKER_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 ],\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 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","addAgentInfra","addTypeScriptBundleTarget","BUNDLE_DEPENDENCIES","resolveContainers","declareDependencies","ownedElsewhere","addDockerScanTarget","DOCKER_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","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';\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 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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"}
|
|
@@ -192,5 +192,20 @@ export declare const DEPENDENCIES: import("../../../utils/declared-dependencies"
|
|
|
192
192
|
versionOnly: true;
|
|
193
193
|
}], readonly import("../../../utils/declared-dependencies").DeclaredPyDependency<"a2a-sdk" | "ag-ui-langgraph" | "ag-ui-protocol" | "ag-ui-strands" | "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" | "mcp" | "pip-check-updates" | "pip-licenses" | "ruff" | "strands-agents" | "strands-agents[a2a]" | "strands-agents-tools" | "ty" | "pynamodb" | "uvicorn" | "sqlmodel" | "alembic" | "aiomysql" | "asyncpg" | "greenlet", TsAgentReactConnectionMetadata>[]>;
|
|
194
194
|
export declare const TS_AGENT_REACT_CONNECTION_GENERATOR_INFO: NxGeneratorInfo;
|
|
195
|
-
|
|
195
|
+
/**
|
|
196
|
+
* Options for routing the website's requests to the agent through an
|
|
197
|
+
* AgentCore Gateway rather than invoking the runtime directly. The gateway
|
|
198
|
+
* react-connection generator dispatches here once per fronted agent.
|
|
199
|
+
*/
|
|
200
|
+
export interface AgentGatewayRoute {
|
|
201
|
+
/** The gateway's class name, keying its URL in runtime config. */
|
|
202
|
+
gatewayClassName: string;
|
|
203
|
+
/** The agent's gateway target name, forming its path on the gateway. */
|
|
204
|
+
targetName: string;
|
|
205
|
+
/** The gateway's inbound auth, which is what the browser authenticates with. */
|
|
206
|
+
gatewayAuth: string;
|
|
207
|
+
}
|
|
208
|
+
export declare function tsAgentReactConnectionGenerator(tree: Tree, options: ResolvedConnectionOptions & {
|
|
209
|
+
gatewayRoute?: AgentGatewayRoute;
|
|
210
|
+
}): Promise<() => Promise<void>>;
|
|
196
211
|
export default tsAgentReactConnectionGenerator;
|
|
@@ -75,7 +75,8 @@ export async function tsAgentReactConnectionGenerator(tree, options) {
|
|
|
75
75
|
const agentName = targetComponent?.name ?? 'agent';
|
|
76
76
|
const agentNameClassName = targetComponent?.rc ?? toClassName(agentName);
|
|
77
77
|
const agentPort = targetComponent?.port ?? metadata?.ports?.[0] ?? 8081;
|
|
78
|
-
|
|
78
|
+
// Behind a gateway the browser authenticates with the gateway, not the agent.
|
|
79
|
+
const auth = (options.gatewayRoute?.gatewayAuth ?? targetComponent?.auth ?? metadata?.auth ?? 'iam').toLowerCase();
|
|
79
80
|
const agentProjectAlias = agentProjectConfig.name;
|
|
80
81
|
const agentPath = targetComponent?.path ?? 'src/agent';
|
|
81
82
|
// Recorded below and read by the declaration's predicates, so the packages
|
|
@@ -88,19 +89,31 @@ export async function tsAgentReactConnectionGenerator(tree, options) {
|
|
|
88
89
|
if ((targetComponent?.protocol ?? '').toLowerCase() === 'a2a') {
|
|
89
90
|
throw new Error(`Cannot connect a React website to an A2A agent. ` + `Consider generating an agent with the HTTP or AG-UI protocol instead.`);
|
|
90
91
|
}
|
|
92
|
+
// A TypeScript HTTP agent serves tRPC over WebSocket, which AgentCore
|
|
93
|
+
// Gateway does not support, so only AG-UI agents can be reached via a
|
|
94
|
+
// gateway route.
|
|
95
|
+
if (options.gatewayRoute && targetComponent?.protocol !== 'ag-ui') {
|
|
96
|
+
throw new Error(`Cannot connect a React website to agent '${agentName}' via a gateway: a TypeScript HTTP agent serves tRPC over WebSocket, which AgentCore Gateway does not support. Consider the ag-ui protocol instead.`);
|
|
97
|
+
}
|
|
91
98
|
if (targetComponent?.protocol === 'ag-ui') {
|
|
92
99
|
await addAgUiReactConnection(tree, {
|
|
93
100
|
frontendProjectConfig,
|
|
94
101
|
agentName,
|
|
95
102
|
agentNameClassName,
|
|
96
|
-
auth: auth
|
|
97
|
-
|
|
98
|
-
await addTsAgentTargetToLocalDev(tree, frontendProjectConfig.name, agentProjectConfig.name, {
|
|
99
|
-
agentName,
|
|
100
|
-
agentNameClassName,
|
|
101
|
-
port: agentPort,
|
|
102
|
-
targetComponent
|
|
103
|
+
auth: auth,
|
|
104
|
+
gatewayRoute: options.gatewayRoute
|
|
103
105
|
});
|
|
106
|
+
// When routing via a gateway, the gateway react-connection wires the
|
|
107
|
+
// website's dev target to the local gateway (which proxies to the agent)
|
|
108
|
+
// instead of to the agent directly.
|
|
109
|
+
if (!options.gatewayRoute) {
|
|
110
|
+
await addTsAgentTargetToLocalDev(tree, frontendProjectConfig.name, agentProjectConfig.name, {
|
|
111
|
+
agentName,
|
|
112
|
+
agentNameClassName,
|
|
113
|
+
port: agentPort,
|
|
114
|
+
targetComponent
|
|
115
|
+
});
|
|
116
|
+
}
|
|
104
117
|
// Recorded so the version sync knows this connection's dependencies are ours.
|
|
105
118
|
addComponentGeneratorMetadata(tree, frontendProjectConfig.name, TS_AGENT_REACT_CONNECTION_GENERATOR_INFO, toProjectRelativePath(frontendProjectConfig, joinPathFragments(frontendProjectConfig.sourceRoot, 'hooks', `useAgui${agentNameClassName}`)), agentNameClassName, connectionMetadata);
|
|
106
119
|
await addGeneratorMetricsIfApplicable(tree, [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../../packages/nx-plugin/src/ts/agent/react-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 generateFiles,\n joinPathFragments,\n OverwriteStrategy,\n type Tree,\n updateJson,\n} from '@nx/devkit';\nimport { addAgentRuntimeToConnectionNamespace } from '../../../connection/agent-runtime-config';\nimport type { ResolvedConnectionOptions } from '../../../connection/generator';\nimport { addTsDependencies } from '../../../utils/add-dependencies';\nimport { addSingleImport, applyGritQL } from '../../../utils/ast';\nimport {\n declareDependencies,\n onlyWhen,\n ownedElsewhere,\n} from '../../../utils/declared-dependencies';\nimport { formatFilesInSubtree } from '../../../utils/format';\nimport { installDependencies } from '../../../utils/install';\nimport { addGeneratorMetricsIfApplicable } from '../../../utils/metrics';\nimport { kebabCase, toClassName } from '../../../utils/names';\nimport {\n addComponentGeneratorMetadata,\n type ComponentMetadata,\n getGeneratorInfo,\n type NxGeneratorInfo,\n readProjectConfigurationUnqualified,\n} from '../../../utils/nx';\nimport { toProjectRelativePath } from '../../../utils/paths';\nimport {\n DEPENDENCIES as AGUI_DEPENDENCIES,\n type AgUiAuth,\n addAgUiReactConnection,\n resolveAgUiTheme,\n} from '../../react-website/agui/generator';\nimport { runtimeConfigGenerator } from '../../react-website/runtime-config/generator';\nimport { addTsAgentTargetToLocalDev } from './local-dev';\n\n/** The metadata this generator records, which its predicates read. */\nexport interface TsAgentReactConnectionMetadata {\n readonly auth: string;\n readonly protocol: string;\n /** The AG-UI theme module, which the website's `ux` selects. */\n readonly theme: string;\n}\n\n/** The tRPC-over-HTTP path, which the AG-UI path takes none of. */\nconst isHttp = (m: TsAgentReactConnectionMetadata) => m.protocol !== 'ag-ui';\n\n/** The AG-UI path, whose packages `addAgUiReactConnection` adds. */\nconst isAgUi = (m: TsAgentReactConnectionMetadata) => !isHttp(m);\n\n// Each entry names the protocol path it belongs to: the HTTP path's client and\n// auth packages are added here, the AG-UI path's by `addAgUiReactConnection` on\n// this generator's behalf.\nexport const DEPENDENCIES =\n declareDependencies<TsAgentReactConnectionMetadata>()({\n ts: [\n { name: '@trpc/client', when: isHttp },\n { name: '@tanstack/react-query', when: isHttp },\n { name: '@tanstack/react-query-devtools', when: isHttp },\n { name: '@trpc/tanstack-react-query', when: isHttp },\n { name: 'oidc-client-ts', when: (m) => isHttp(m) && m.auth === 'iam' },\n { name: 'aws4fetch', when: (m) => isHttp(m) && m.auth === 'iam' },\n {\n name: '@aws-sdk/credential-provider-cognito-identity',\n when: (m) => isHttp(m) && m.auth === 'iam',\n },\n {\n name: 'react-oidc-context',\n when: (m) => isHttp(m) && (m.auth === 'iam' || m.auth === 'cognito'),\n },\n { name: '@smithy/types', when: isHttp, dev: true },\n // `addAgUiReactConnection` adds these itself, so they are declared for\n // ownership only. Gated on the AG-UI path, and within it on each entry's\n // own theme or auth condition, which the metadata below records.\n ...ownedElsewhere(onlyWhen(AGUI_DEPENDENCIES.ts, isAgUi)),\n ],\n });\n\nexport const TS_AGENT_REACT_CONNECTION_GENERATOR_INFO: NxGeneratorInfo =\n getGeneratorInfo(import.meta.filename);\n\nexport async function tsAgentReactConnectionGenerator(\n tree: Tree,\n options: ResolvedConnectionOptions,\n) {\n const frontendProjectConfig = readProjectConfigurationUnqualified(\n tree,\n options.sourceProject,\n );\n const agentProjectConfig = readProjectConfigurationUnqualified(\n tree,\n options.targetProject,\n );\n\n const targetComponent: ComponentMetadata | undefined =\n options.targetComponent;\n\n // Extract agent metadata from the target component or project metadata\n const metadata = agentProjectConfig.metadata as any;\n const agentName = targetComponent?.name ?? 'agent';\n const agentNameClassName = targetComponent?.rc ?? toClassName(agentName);\n const agentPort = targetComponent?.port ?? metadata?.ports?.[0] ?? 8081;\n const auth = (targetComponent?.auth ?? metadata?.auth ?? 'iam').toLowerCase();\n const agentProjectAlias = agentProjectConfig.name;\n const agentPath = targetComponent?.path ?? 'src/agent';\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: TsAgentReactConnectionMetadata = {\n auth,\n protocol: targetComponent?.protocol ?? 'http',\n theme: resolveAgUiTheme(frontendProjectConfig),\n };\n\n if ((targetComponent?.protocol ?? '').toLowerCase() === 'a2a') {\n throw new Error(\n `Cannot connect a React website to an A2A agent. ` +\n `Consider generating an agent with the HTTP or AG-UI protocol instead.`,\n );\n }\n\n if (targetComponent?.protocol === 'ag-ui') {\n await addAgUiReactConnection(tree, {\n frontendProjectConfig,\n agentName,\n agentNameClassName,\n auth: auth as AgUiAuth,\n });\n\n await addTsAgentTargetToLocalDev(\n tree,\n frontendProjectConfig.name,\n agentProjectConfig.name,\n {\n agentName,\n agentNameClassName,\n port: agentPort,\n targetComponent,\n },\n );\n\n // Recorded so the version sync knows this connection's dependencies are ours.\n addComponentGeneratorMetadata(\n tree,\n frontendProjectConfig.name,\n TS_AGENT_REACT_CONNECTION_GENERATOR_INFO,\n toProjectRelativePath(\n frontendProjectConfig,\n joinPathFragments(\n frontendProjectConfig.sourceRoot,\n 'hooks',\n `useAgui${agentNameClassName}`,\n ),\n ),\n agentNameClassName,\n connectionMetadata,\n );\n\n await addGeneratorMetricsIfApplicable(tree, [\n TS_AGENT_REACT_CONNECTION_GENERATOR_INFO,\n ]);\n\n await formatFilesInSubtree(tree);\n return () =>\n installDependencies(tree, options.preferInstallDependencies, {\n languages: ['typescript'],\n });\n }\n\n // Ensure the agent project has a wildcard path entry in tsconfig.base.json\n // so that deep imports (e.g., for the router type) resolve correctly\n ensureWildcardPathEntry(\n tree,\n agentProjectConfig.name,\n agentProjectConfig.root,\n );\n\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files'),\n frontendProjectConfig.root,\n {\n agentName,\n agentNameClassName,\n auth,\n agentProjectAlias,\n agentPath,\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 = `${agentNameClassName}AgentClientProvider`;\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 agent 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 addTsAgentTargetToLocalDev(\n tree,\n frontendProjectConfig.name,\n agentProjectConfig.name,\n {\n agentName,\n agentNameClassName,\n port: agentPort,\n targetComponent,\n },\n );\n\n // Expose the agent's runtime ARN to the frontend via the 'connection'\n // namespace (which is published to runtime-config.json). The agent construct\n // itself only registers to the 'agentcore' namespace by default.\n await addAgentRuntimeToConnectionNamespace(tree, {\n agentNameKebabCase: kebabCase(agentNameClassName),\n agentNameClassName,\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 TS_AGENT_REACT_CONNECTION_GENERATOR_INFO,\n toProjectRelativePath(\n frontendProjectConfig,\n joinPathFragments(\n frontendProjectConfig.sourceRoot,\n 'components',\n clientProviderName,\n ),\n ),\n agentNameClassName,\n connectionMetadata,\n );\n\n await addGeneratorMetricsIfApplicable(tree, [\n TS_AGENT_REACT_CONNECTION_GENERATOR_INFO,\n ]);\n\n await formatFilesInSubtree(tree);\n return () =>\n installDependencies(tree, options.preferInstallDependencies, {\n languages: ['typescript'],\n });\n}\nexport default tsAgentReactConnectionGenerator;\n\n/**\n * Ensures a wildcard path entry exists in tsconfig.base.json for the given project,\n * allowing deep imports (e.g., `@scope/project/src/agent/router.js`).\n */\nfunction ensureWildcardPathEntry(\n tree: Tree,\n projectName: string,\n projectRoot: string,\n) {\n const tsconfigPath = ['tsconfig.base.json', 'tsconfig.json'].find((p) =>\n tree.exists(p),\n );\n if (!tsconfigPath) return;\n\n updateJson(tree, tsconfigPath, (json) => {\n const paths = json.compilerOptions?.paths ?? {};\n const wildcardKey = `${projectName}/*`;\n if (!paths[wildcardKey]) {\n paths[wildcardKey] = [`./${projectRoot}/*`];\n }\n json.compilerOptions = {\n ...json.compilerOptions,\n paths,\n };\n return json;\n });\n}\n"],"names":["generateFiles","joinPathFragments","OverwriteStrategy","updateJson","addAgentRuntimeToConnectionNamespace","addTsDependencies","addSingleImport","applyGritQL","declareDependencies","onlyWhen","ownedElsewhere","formatFilesInSubtree","installDependencies","addGeneratorMetricsIfApplicable","kebabCase","toClassName","addComponentGeneratorMetadata","getGeneratorInfo","readProjectConfigurationUnqualified","toProjectRelativePath","DEPENDENCIES","AGUI_DEPENDENCIES","addAgUiReactConnection","resolveAgUiTheme","runtimeConfigGenerator","addTsAgentTargetToLocalDev","isHttp","m","protocol","isAgUi","ts","name","when","auth","dev","TS_AGENT_REACT_CONNECTION_GENERATOR_INFO","filename","tsAgentReactConnectionGenerator","tree","options","frontendProjectConfig","sourceProject","agentProjectConfig","targetProject","targetComponent","metadata","agentName","agentNameClassName","rc","agentPort","port","ports","toLowerCase","agentProjectAlias","agentPath","path","connectionMetadata","theme","Error","sourceRoot","preferInstallDependencies","languages","ensureWildcardPathEntry","root","dirname","overwriteStrategy","KeepExisting","project","mainTsxPath","clientProviderName","agentNameKebabCase","projectRoot","projectName","tsconfigPath","find","p","exists","json","paths","compilerOptions","wildcardKey"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../../../../packages/nx-plugin/src/ts/agent/react-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 generateFiles,\n joinPathFragments,\n OverwriteStrategy,\n type Tree,\n updateJson,\n} from '@nx/devkit';\nimport { addAgentRuntimeToConnectionNamespace } from '../../../connection/agent-runtime-config';\nimport type { ResolvedConnectionOptions } from '../../../connection/generator';\nimport { addTsDependencies } from '../../../utils/add-dependencies';\nimport { addSingleImport, applyGritQL } from '../../../utils/ast';\nimport {\n declareDependencies,\n onlyWhen,\n ownedElsewhere,\n} from '../../../utils/declared-dependencies';\nimport { formatFilesInSubtree } from '../../../utils/format';\nimport { installDependencies } from '../../../utils/install';\nimport { addGeneratorMetricsIfApplicable } from '../../../utils/metrics';\nimport { kebabCase, toClassName } from '../../../utils/names';\nimport {\n addComponentGeneratorMetadata,\n type ComponentMetadata,\n getGeneratorInfo,\n type NxGeneratorInfo,\n readProjectConfigurationUnqualified,\n} from '../../../utils/nx';\nimport { toProjectRelativePath } from '../../../utils/paths';\nimport {\n DEPENDENCIES as AGUI_DEPENDENCIES,\n type AgUiAuth,\n addAgUiReactConnection,\n resolveAgUiTheme,\n} from '../../react-website/agui/generator';\nimport { runtimeConfigGenerator } from '../../react-website/runtime-config/generator';\nimport { addTsAgentTargetToLocalDev } from './local-dev';\n\n/** The metadata this generator records, which its predicates read. */\nexport interface TsAgentReactConnectionMetadata {\n readonly auth: string;\n readonly protocol: string;\n /** The AG-UI theme module, which the website's `ux` selects. */\n readonly theme: string;\n}\n\n/** The tRPC-over-HTTP path, which the AG-UI path takes none of. */\nconst isHttp = (m: TsAgentReactConnectionMetadata) => m.protocol !== 'ag-ui';\n\n/** The AG-UI path, whose packages `addAgUiReactConnection` adds. */\nconst isAgUi = (m: TsAgentReactConnectionMetadata) => !isHttp(m);\n\n// Each entry names the protocol path it belongs to: the HTTP path's client and\n// auth packages are added here, the AG-UI path's by `addAgUiReactConnection` on\n// this generator's behalf.\nexport const DEPENDENCIES =\n declareDependencies<TsAgentReactConnectionMetadata>()({\n ts: [\n { name: '@trpc/client', when: isHttp },\n { name: '@tanstack/react-query', when: isHttp },\n { name: '@tanstack/react-query-devtools', when: isHttp },\n { name: '@trpc/tanstack-react-query', when: isHttp },\n { name: 'oidc-client-ts', when: (m) => isHttp(m) && m.auth === 'iam' },\n { name: 'aws4fetch', when: (m) => isHttp(m) && m.auth === 'iam' },\n {\n name: '@aws-sdk/credential-provider-cognito-identity',\n when: (m) => isHttp(m) && m.auth === 'iam',\n },\n {\n name: 'react-oidc-context',\n when: (m) => isHttp(m) && (m.auth === 'iam' || m.auth === 'cognito'),\n },\n { name: '@smithy/types', when: isHttp, dev: true },\n // `addAgUiReactConnection` adds these itself, so they are declared for\n // ownership only. Gated on the AG-UI path, and within it on each entry's\n // own theme or auth condition, which the metadata below records.\n ...ownedElsewhere(onlyWhen(AGUI_DEPENDENCIES.ts, isAgUi)),\n ],\n });\n\nexport const TS_AGENT_REACT_CONNECTION_GENERATOR_INFO: NxGeneratorInfo =\n getGeneratorInfo(import.meta.filename);\n\n/**\n * Options for routing the website's requests to the agent through an\n * AgentCore Gateway rather than invoking the runtime directly. The gateway\n * react-connection generator dispatches here once per fronted agent.\n */\nexport interface AgentGatewayRoute {\n /** The gateway's class name, keying its URL in runtime config. */\n gatewayClassName: string;\n /** The agent's gateway target name, forming its path on the gateway. */\n targetName: string;\n /** The gateway's inbound auth, which is what the browser authenticates with. */\n gatewayAuth: string;\n}\n\nexport async function tsAgentReactConnectionGenerator(\n tree: Tree,\n options: ResolvedConnectionOptions & { gatewayRoute?: AgentGatewayRoute },\n) {\n const frontendProjectConfig = readProjectConfigurationUnqualified(\n tree,\n options.sourceProject,\n );\n const agentProjectConfig = readProjectConfigurationUnqualified(\n tree,\n options.targetProject,\n );\n\n const targetComponent: ComponentMetadata | undefined =\n options.targetComponent;\n\n // Extract agent metadata from the target component or project metadata\n const metadata = agentProjectConfig.metadata as any;\n const agentName = targetComponent?.name ?? 'agent';\n const agentNameClassName = targetComponent?.rc ?? toClassName(agentName);\n const agentPort = targetComponent?.port ?? metadata?.ports?.[0] ?? 8081;\n // Behind a gateway the browser authenticates with the gateway, not the agent.\n const auth = (\n options.gatewayRoute?.gatewayAuth ??\n targetComponent?.auth ??\n metadata?.auth ??\n 'iam'\n ).toLowerCase();\n const agentProjectAlias = agentProjectConfig.name;\n const agentPath = targetComponent?.path ?? 'src/agent';\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: TsAgentReactConnectionMetadata = {\n auth,\n protocol: targetComponent?.protocol ?? 'http',\n theme: resolveAgUiTheme(frontendProjectConfig),\n };\n\n if ((targetComponent?.protocol ?? '').toLowerCase() === 'a2a') {\n throw new Error(\n `Cannot connect a React website to an A2A agent. ` +\n `Consider generating an agent with the HTTP or AG-UI protocol instead.`,\n );\n }\n\n // A TypeScript HTTP agent serves tRPC over WebSocket, which AgentCore\n // Gateway does not support, so only AG-UI agents can be reached via a\n // gateway route.\n if (options.gatewayRoute && targetComponent?.protocol !== 'ag-ui') {\n throw new Error(\n `Cannot connect a React website to agent '${agentName}' via a gateway: a TypeScript HTTP agent serves tRPC over WebSocket, which AgentCore Gateway does not support. Consider the ag-ui protocol instead.`,\n );\n }\n\n if (targetComponent?.protocol === 'ag-ui') {\n await addAgUiReactConnection(tree, {\n frontendProjectConfig,\n agentName,\n agentNameClassName,\n auth: auth as AgUiAuth,\n gatewayRoute: options.gatewayRoute,\n });\n\n // When routing via a gateway, the gateway react-connection wires the\n // website's dev target to the local gateway (which proxies to the agent)\n // instead of to the agent directly.\n if (!options.gatewayRoute) {\n await addTsAgentTargetToLocalDev(\n tree,\n frontendProjectConfig.name,\n agentProjectConfig.name,\n {\n agentName,\n agentNameClassName,\n port: agentPort,\n targetComponent,\n },\n );\n }\n\n // Recorded so the version sync knows this connection's dependencies are ours.\n addComponentGeneratorMetadata(\n tree,\n frontendProjectConfig.name,\n TS_AGENT_REACT_CONNECTION_GENERATOR_INFO,\n toProjectRelativePath(\n frontendProjectConfig,\n joinPathFragments(\n frontendProjectConfig.sourceRoot,\n 'hooks',\n `useAgui${agentNameClassName}`,\n ),\n ),\n agentNameClassName,\n connectionMetadata,\n );\n\n await addGeneratorMetricsIfApplicable(tree, [\n TS_AGENT_REACT_CONNECTION_GENERATOR_INFO,\n ]);\n\n await formatFilesInSubtree(tree);\n return () =>\n installDependencies(tree, options.preferInstallDependencies, {\n languages: ['typescript'],\n });\n }\n\n // Ensure the agent project has a wildcard path entry in tsconfig.base.json\n // so that deep imports (e.g., for the router type) resolve correctly\n ensureWildcardPathEntry(\n tree,\n agentProjectConfig.name,\n agentProjectConfig.root,\n );\n\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files'),\n frontendProjectConfig.root,\n {\n agentName,\n agentNameClassName,\n auth,\n agentProjectAlias,\n agentPath,\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 = `${agentNameClassName}AgentClientProvider`;\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 agent 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 addTsAgentTargetToLocalDev(\n tree,\n frontendProjectConfig.name,\n agentProjectConfig.name,\n {\n agentName,\n agentNameClassName,\n port: agentPort,\n targetComponent,\n },\n );\n\n // Expose the agent's runtime ARN to the frontend via the 'connection'\n // namespace (which is published to runtime-config.json). The agent construct\n // itself only registers to the 'agentcore' namespace by default.\n await addAgentRuntimeToConnectionNamespace(tree, {\n agentNameKebabCase: kebabCase(agentNameClassName),\n agentNameClassName,\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 TS_AGENT_REACT_CONNECTION_GENERATOR_INFO,\n toProjectRelativePath(\n frontendProjectConfig,\n joinPathFragments(\n frontendProjectConfig.sourceRoot,\n 'components',\n clientProviderName,\n ),\n ),\n agentNameClassName,\n connectionMetadata,\n );\n\n await addGeneratorMetricsIfApplicable(tree, [\n TS_AGENT_REACT_CONNECTION_GENERATOR_INFO,\n ]);\n\n await formatFilesInSubtree(tree);\n return () =>\n installDependencies(tree, options.preferInstallDependencies, {\n languages: ['typescript'],\n });\n}\nexport default tsAgentReactConnectionGenerator;\n\n/**\n * Ensures a wildcard path entry exists in tsconfig.base.json for the given project,\n * allowing deep imports (e.g., `@scope/project/src/agent/router.js`).\n */\nfunction ensureWildcardPathEntry(\n tree: Tree,\n projectName: string,\n projectRoot: string,\n) {\n const tsconfigPath = ['tsconfig.base.json', 'tsconfig.json'].find((p) =>\n tree.exists(p),\n );\n if (!tsconfigPath) return;\n\n updateJson(tree, tsconfigPath, (json) => {\n const paths = json.compilerOptions?.paths ?? {};\n const wildcardKey = `${projectName}/*`;\n if (!paths[wildcardKey]) {\n paths[wildcardKey] = [`./${projectRoot}/*`];\n }\n json.compilerOptions = {\n ...json.compilerOptions,\n paths,\n };\n return json;\n });\n}\n"],"names":["generateFiles","joinPathFragments","OverwriteStrategy","updateJson","addAgentRuntimeToConnectionNamespace","addTsDependencies","addSingleImport","applyGritQL","declareDependencies","onlyWhen","ownedElsewhere","formatFilesInSubtree","installDependencies","addGeneratorMetricsIfApplicable","kebabCase","toClassName","addComponentGeneratorMetadata","getGeneratorInfo","readProjectConfigurationUnqualified","toProjectRelativePath","DEPENDENCIES","AGUI_DEPENDENCIES","addAgUiReactConnection","resolveAgUiTheme","runtimeConfigGenerator","addTsAgentTargetToLocalDev","isHttp","m","protocol","isAgUi","ts","name","when","auth","dev","TS_AGENT_REACT_CONNECTION_GENERATOR_INFO","filename","tsAgentReactConnectionGenerator","tree","options","frontendProjectConfig","sourceProject","agentProjectConfig","targetProject","targetComponent","metadata","agentName","agentNameClassName","rc","agentPort","port","ports","gatewayRoute","gatewayAuth","toLowerCase","agentProjectAlias","agentPath","path","connectionMetadata","theme","Error","sourceRoot","preferInstallDependencies","languages","ensureWildcardPathEntry","root","dirname","overwriteStrategy","KeepExisting","project","mainTsxPath","clientProviderName","agentNameKebabCase","projectRoot","projectName","tsconfigPath","find","p","exists","json","paths","compilerOptions","wildcardKey"],"mappings":"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"}
|
package/src/ts/agent/schema.json
CHANGED
|
@@ -35,7 +35,7 @@ exports[`ts#dynamodb generator > should generate terraform modules when iac is t
|
|
|
35
35
|
required_providers {
|
|
36
36
|
aws = {
|
|
37
37
|
source = "hashicorp/aws"
|
|
38
|
-
version = "6.
|
|
38
|
+
version = "6.57.1"
|
|
39
39
|
}
|
|
40
40
|
}
|
|
41
41
|
}
|
|
@@ -192,7 +192,7 @@ exports[`ts#dynamodb generator > should generate terraform modules when iac is t
|
|
|
192
192
|
required_providers {
|
|
193
193
|
aws = {
|
|
194
194
|
source = "hashicorp/aws"
|
|
195
|
-
version = "6.
|
|
195
|
+
version = "6.57.1"
|
|
196
196
|
}
|
|
197
197
|
random = {
|
|
198
198
|
source = "hashicorp/random"
|
|
@@ -141,7 +141,7 @@ exports[`ts-lambda-function generator > terraform iac > should generate terrafor
|
|
|
141
141
|
required_providers {
|
|
142
142
|
aws = {
|
|
143
143
|
source = "hashicorp/aws"
|
|
144
|
-
version = "6.
|
|
144
|
+
version = "6.57.1"
|
|
145
145
|
}
|
|
146
146
|
archive = {
|
|
147
147
|
source = "hashicorp/archive"
|
|
@@ -322,7 +322,7 @@ exports[`ts-lambda-function generator > terraform iac > should match snapshot fo
|
|
|
322
322
|
required_providers {
|
|
323
323
|
aws = {
|
|
324
324
|
source = "hashicorp/aws"
|
|
325
|
-
version = "6.
|
|
325
|
+
version = "6.57.1"
|
|
326
326
|
}
|
|
327
327
|
archive = {
|
|
328
328
|
source = "hashicorp/archive"
|
|
@@ -155,7 +155,7 @@ exports[`ts#mcp-server generator > should match snapshot for Terraform generated
|
|
|
155
155
|
required_providers {
|
|
156
156
|
aws = {
|
|
157
157
|
source = "hashicorp/aws"
|
|
158
|
-
version = "6.
|
|
158
|
+
version = "6.57.1"
|
|
159
159
|
}
|
|
160
160
|
null = {
|
|
161
161
|
source = "hashicorp/null"
|
|
@@ -563,7 +563,7 @@ resource "null_resource" "runtime_ready" {
|
|
|
563
563
|
|
|
564
564
|
provisioner "local-exec" {
|
|
565
565
|
command = <<-EOT
|
|
566
|
-
uv run --with boto3==1.43.
|
|
566
|
+
uv run --with boto3==1.43.63 python -c "
|
|
567
567
|
import boto3
|
|
568
568
|
import json
|
|
569
569
|
import os
|
|
@@ -75,7 +75,38 @@ export declare const DEPENDENCIES: import("../../utils/declared-dependencies").D
|
|
|
75
75
|
readonly name: "@types/node";
|
|
76
76
|
} & {
|
|
77
77
|
versionOnly: true;
|
|
78
|
-
}
|
|
78
|
+
}, {
|
|
79
|
+
readonly name: "npm";
|
|
80
|
+
} & {
|
|
81
|
+
versionOnly: true;
|
|
82
|
+
}, {
|
|
83
|
+
readonly name: "minimatch";
|
|
84
|
+
} & {
|
|
85
|
+
versionOnly: true;
|
|
86
|
+
}, {
|
|
87
|
+
readonly name: "@aws/aws-distro-opentelemetry-node-autoinstrumentation";
|
|
88
|
+
} & {
|
|
89
|
+
versionOnly: true;
|
|
90
|
+
}, {
|
|
91
|
+
readonly name: "@opentelemetry/propagator-jaeger";
|
|
92
|
+
} & {
|
|
93
|
+
versionOnly: true;
|
|
94
|
+
}], readonly [{
|
|
95
|
+
readonly name: "boto3";
|
|
96
|
+
readonly when: (m: IacMetadata) => boolean;
|
|
97
|
+
} & {
|
|
98
|
+
versionOnly: true;
|
|
99
|
+
}, {
|
|
100
|
+
readonly name: "httpx";
|
|
101
|
+
readonly when: (m: IacMetadata) => boolean;
|
|
102
|
+
} & {
|
|
103
|
+
versionOnly: true;
|
|
104
|
+
}, {
|
|
105
|
+
readonly name: "mcp";
|
|
106
|
+
readonly when: (m: IacMetadata) => boolean;
|
|
107
|
+
} & {
|
|
108
|
+
versionOnly: true;
|
|
109
|
+
}]>;
|
|
79
110
|
export declare const TS_MCP_SERVER_GENERATOR_INFO: NxGeneratorInfo;
|
|
80
111
|
export declare const tsMcpServerGenerator: (tree: Tree, options: TsMcpServerGeneratorSchema) => Promise<GeneratorCallback>;
|
|
81
112
|
export default tsMcpServerGenerator;
|
|
@@ -5,11 +5,11 @@
|
|
|
5
5
|
import { ensureLicenseExceptions } from "../../license/config.js";
|
|
6
6
|
import { MCP_INSPECTOR_EXCEPTIONS } from "../../license/known-exceptions.js";
|
|
7
7
|
import { addTsDependencies } from "../../utils/add-dependencies.js";
|
|
8
|
-
import { addMcpServerInfra } from "../../utils/agent-core-constructs/agent-core-constructs.js";
|
|
8
|
+
import { AGENT_CORE_CONSTRUCTS_PY_DEPENDENCIES, addMcpServerInfra } from "../../utils/agent-core-constructs/agent-core-constructs.js";
|
|
9
9
|
import { addTypeScriptBundleTarget, BUNDLE_DEPENDENCIES } from "../../utils/bundle/bundle.js";
|
|
10
10
|
import { resolveContainers } from "../../utils/containers.js";
|
|
11
11
|
import { declareDependencies, ownedElsewhere } from "../../utils/declared-dependencies.js";
|
|
12
|
-
import { addDockerScanTarget, DOCKER_DEPENDENCIES, nodeImageVersions } from "../../utils/docker.js";
|
|
12
|
+
import { ADOT_IMAGE_DEPENDENCIES, addDockerScanTarget, DOCKER_DEPENDENCIES, NODE_IMAGE_DEPENDENCIES, nodeImageVersions } from "../../utils/docker.js";
|
|
13
13
|
import { formatFilesInSubtree } from "../../utils/format.js";
|
|
14
14
|
import { FS_DEPENDENCIES, FsCommands } from "../../utils/fs.js";
|
|
15
15
|
import { resolveIac } from "../../utils/iac.js";
|
|
@@ -58,8 +58,11 @@ export const DEPENDENCIES = declareDependencies()({
|
|
|
58
58
|
...ownedElsewhere(FS_DEPENDENCIES),
|
|
59
59
|
...ownedElsewhere(BUNDLE_DEPENDENCIES),
|
|
60
60
|
...ownedElsewhere(DOCKER_DEPENDENCIES),
|
|
61
|
-
...ownedElsewhere(SHARED_CONSTRUCTS_DEPENDENCIES)
|
|
62
|
-
|
|
61
|
+
...ownedElsewhere(SHARED_CONSTRUCTS_DEPENDENCIES),
|
|
62
|
+
...ownedElsewhere(NODE_IMAGE_DEPENDENCIES),
|
|
63
|
+
...ownedElsewhere(ADOT_IMAGE_DEPENDENCIES)
|
|
64
|
+
],
|
|
65
|
+
py: ownedElsewhere(AGENT_CORE_CONSTRUCTS_PY_DEPENDENCIES)
|
|
63
66
|
});
|
|
64
67
|
export const TS_MCP_SERVER_GENERATOR_INFO = getGeneratorInfo(import.meta.filename);
|
|
65
68
|
export const tsMcpServerGenerator = async (tree, options)=>{
|