@aws/nx-plugin 1.0.0-rc.91 → 1.0.0-rc.93

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.
Files changed (81) hide show
  1. package/migrations.json +6 -1
  2. package/package.json +1 -1
  3. package/src/internal/test-matrix/generator.js +28 -0
  4. package/src/internal/test-matrix/generator.js.map +1 -1
  5. package/src/migrations/latest/react-website-unique-dev-ports/metadata.json +3 -0
  6. package/src/migrations/latest/react-website-unique-dev-ports/migration.d.ts +6 -0
  7. package/src/migrations/latest/react-website-unique-dev-ports/migration.js +79 -0
  8. package/src/migrations/latest/react-website-unique-dev-ports/migration.js.map +1 -0
  9. package/src/py/agent/__snapshots__/generator.protocols.spec.ts.snap +90 -115
  10. package/src/py/agent/files/package/main.py.template +13 -0
  11. package/src/py/agent/generator.d.ts +6 -1
  12. package/src/py/agent/generator.js +82 -45
  13. package/src/py/agent/generator.js.map +1 -1
  14. package/src/py/agent/schema.d.js.map +1 -1
  15. package/src/py/agent/schema.d.ts +2 -1
  16. package/src/py/agent/schema.json +2 -2
  17. package/src/py/mcp-server/__snapshots__/generator.spec.ts.snap +64 -113
  18. package/src/py/mcp-server/files/package/main.py.template +13 -0
  19. package/src/py/mcp-server/generator.d.ts +6 -1
  20. package/src/py/mcp-server/generator.js +79 -43
  21. package/src/py/mcp-server/generator.js.map +1 -1
  22. package/src/py/mcp-server/schema.d.js.map +1 -1
  23. package/src/py/mcp-server/schema.d.ts +2 -1
  24. package/src/py/mcp-server/schema.json +2 -2
  25. package/src/py/rdb/__snapshots__/generator.spec.ts.snap +12 -59
  26. package/src/ts/agent/__snapshots__/generator.spec.ts.snap +77 -114
  27. package/src/ts/agent/generator.d.ts +26 -1
  28. package/src/ts/agent/generator.js +71 -45
  29. package/src/ts/agent/generator.js.map +1 -1
  30. package/src/ts/agent/schema.d.js.map +1 -1
  31. package/src/ts/agent/schema.d.ts +2 -1
  32. package/src/ts/agent/schema.json +2 -2
  33. package/src/ts/mcp-server/__snapshots__/generator.spec.ts.snap +64 -113
  34. package/src/ts/mcp-server/generator.d.ts +26 -1
  35. package/src/ts/mcp-server/generator.js +66 -38
  36. package/src/ts/mcp-server/generator.js.map +1 -1
  37. package/src/ts/mcp-server/schema.d.js.map +1 -1
  38. package/src/ts/mcp-server/schema.d.ts +2 -1
  39. package/src/ts/mcp-server/schema.json +2 -2
  40. package/src/ts/rdb/__snapshots__/generator.spec.ts.snap +16 -110
  41. package/src/ts/react-website/app/__snapshots__/generator.spec.ts.snap +2 -0
  42. package/src/ts/react-website/app/generator.js +16 -0
  43. package/src/ts/react-website/app/generator.js.map +1 -1
  44. package/src/ts/react-website/cognito-auth/generator.js +14 -2
  45. package/src/ts/react-website/cognito-auth/generator.js.map +1 -1
  46. package/src/utils/agent-core-constructs/agent-core-constructs.d.ts +25 -6
  47. package/src/utils/agent-core-constructs/agent-core-constructs.js +36 -7
  48. package/src/utils/agent-core-constructs/agent-core-constructs.js.map +1 -1
  49. package/src/utils/agent-core-constructs/files/cdk/app/agent-core/__nameKebabCase__/__nameKebabCase__.ts.template +20 -4
  50. package/src/utils/agent-core-constructs/files/terraform/app/agent-core/__nameKebabCase__/__nameKebabCase__.tf.template +34 -1
  51. package/src/utils/agent-core-constructs/files/terraform/core/agent-core/runtime.tf.template +51 -112
  52. package/src/utils/agent-core-constructs/files/terraform/core/agent-core-code/runtime.tf.template +204 -0
  53. package/src/utils/agent-core-constructs/files/terraform/core/agent-core-container/runtime.tf.template +235 -0
  54. package/src/utils/agent-core-packaging.d.ts +119 -0
  55. package/src/utils/agent-core-packaging.js +131 -0
  56. package/src/utils/agent-core-packaging.js.map +1 -0
  57. package/src/utils/agent-core-runtime-resolution.d.ts +35 -0
  58. package/src/utils/agent-core-runtime-resolution.js +68 -0
  59. package/src/utils/agent-core-runtime-resolution.js.map +1 -0
  60. package/src/utils/files/terraform/src/core/asset-ecr/asset-ecr.tf.template +137 -0
  61. package/src/utils/identity-constructs/files/cdk/core/user-identity.ts.template +1 -1
  62. package/src/utils/identity-constructs/files/terraform/core/user-identity/identity/identity.tf.template +1 -4
  63. package/src/utils/identity-constructs/identity-constructs.d.ts +22 -2
  64. package/src/utils/identity-constructs/identity-constructs.js +75 -5
  65. package/src/utils/identity-constructs/identity-constructs.js.map +1 -1
  66. package/src/utils/port.d.ts +5 -0
  67. package/src/utils/port.js +1 -1
  68. package/src/utils/port.js.map +1 -1
  69. package/src/utils/rdb-constructs/files/terraform/app/dbs/__nameKebabCase__/__nameKebabCase__.tf.template +12 -59
  70. package/src/utils/version-upgrade-migration/sync-embedded-versions.js +30 -3
  71. package/src/utils/version-upgrade-migration/sync-embedded-versions.js.map +1 -1
  72. package/src/utils/versions.d.ts +20 -0
  73. package/src/utils/versions.js +17 -0
  74. package/src/utils/versions.js.map +1 -1
  75. /package/src/ts/mcp-server/files/{http.ts.template → app/http.ts.template} +0 -0
  76. /package/src/ts/mcp-server/files/{index.ts.template → app/index.ts.template} +0 -0
  77. /package/src/ts/mcp-server/files/{resources → app/resources}/sample-guidance.ts.template +0 -0
  78. /package/src/ts/mcp-server/files/{server.ts.template → app/server.ts.template} +0 -0
  79. /package/src/ts/mcp-server/files/{stdio.ts.template → app/stdio.ts.template} +0 -0
  80. /package/src/ts/mcp-server/files/{tools → app/tools}/divide.ts.template +0 -0
  81. /package/src/ts/mcp-server/files/{Dockerfile.template → deploy/Dockerfile.template} +0 -0
@@ -1039,6 +1039,16 @@ variable "appconfig_application_id" {
1039
1039
  type = string
1040
1040
  }
1041
1041
 
1042
+ variable "asset_ecr_repository_url" {
1043
+ description = "URL of the shared asset ECR repository the agent's image is published to. Instantiate the \`core/asset-ecr\` module once per deployment and pass its \`repository_url\` output here."
1044
+ type = string
1045
+ }
1046
+
1047
+ variable "asset_ecr_repository_arn" {
1048
+ description = "ARN of the shared asset ECR repository (from \`core/asset-ecr.repository_arn\`), used to scope the runtime's image pull grant to it."
1049
+ type = string
1050
+ }
1051
+
1042
1052
  variable "session_force_destroy" {
1043
1053
  description = "Whether to allow the session bucket to be destroyed even if it still contains objects."
1044
1054
  type = bool
@@ -1191,9 +1201,11 @@ resource "aws_cloudwatch_log_delivery" "session" {
1191
1201
  }
1192
1202
 
1193
1203
  module "agent_core_runtime" {
1194
- source = "../../../core/agent-core"
1204
+ source = "../../../core/agent-core-container"
1195
1205
  agent_runtime_name = "TerraformSnapshotAgent"
1196
1206
  docker_image_tag = "proj-terraform-snapshot-agent:latest"
1207
+ asset_ecr_repository_url = var.asset_ecr_repository_url
1208
+ asset_ecr_repository_arn = var.asset_ecr_repository_arn
1197
1209
  server_protocol = "HTTP"
1198
1210
  enable_vpc = var.enable_vpc
1199
1211
  vpc_id = var.vpc_id
@@ -1297,10 +1309,6 @@ exports[`ts#agent generator > should match snapshot for Terraform generated file
1297
1309
  source = "hashicorp/aws"
1298
1310
  version = "6.62.0"
1299
1311
  }
1300
- external = {
1301
- source = "hashicorp/external"
1302
- version = "2.4.1"
1303
- }
1304
1312
  null = {
1305
1313
  source = "hashicorp/null"
1306
1314
  version = "3.3.1"
@@ -1344,9 +1352,36 @@ variable "authorizer_configuration" {
1344
1352
  default = null
1345
1353
  }
1346
1354
 
1347
- variable "docker_image_tag" {
1348
- description = "Name of the docker image tag to use as the agent core runtime"
1349
- type = string
1355
+ variable "container_configuration" {
1356
+ description = "Container artifact for this runtime. Set exactly one of this or \`code_configuration\`; the \`agent-core-container\` module renders it."
1357
+ type = object({
1358
+ container_uri = string
1359
+ })
1360
+ default = null
1361
+ }
1362
+
1363
+ variable "code_configuration" {
1364
+ description = "Code artifact for this runtime. Set exactly one of this or \`container_configuration\`; the \`agent-core-code\` module renders it."
1365
+ type = object({
1366
+ entry_point = list(string)
1367
+ runtime = string
1368
+ s3_bucket = string
1369
+ s3_key = string
1370
+ })
1371
+ default = null
1372
+
1373
+ validation {
1374
+ # Evaluated at plan time, since Terraform defers validation that reads
1375
+ # another variable.
1376
+ condition = (var.code_configuration == null) != (var.container_configuration == null)
1377
+ error_message = "Set exactly one of code_configuration or container_configuration."
1378
+ }
1379
+ }
1380
+
1381
+ variable "artifact_dependencies" {
1382
+ description = "Resources the artifact is produced by (an image push or a code upload), so the runtime is created only once they exist."
1383
+ type = list(any)
1384
+ default = []
1350
1385
  }
1351
1386
 
1352
1387
  variable "env" {
@@ -1409,47 +1444,6 @@ resource "random_id" "unique_suffix" {
1409
1444
  byte_length = 4
1410
1445
  }
1411
1446
 
1412
- # ECR Repository
1413
- resource "aws_ecr_repository" "agent_core_repository" {
1414
- #checkov:skip=CKV_AWS_136:AES256 encryption is sufficient for ECR repositories
1415
- name = "\${lower(var.agent_runtime_name)}_repository_\${random_id.unique_suffix.hex}"
1416
-
1417
- image_tag_mutability = "IMMUTABLE"
1418
- force_delete = true
1419
-
1420
- image_scanning_configuration {
1421
- scan_on_push = true
1422
- }
1423
-
1424
- tags = var.tags
1425
- }
1426
-
1427
- # ECR Repository Policy
1428
- resource "aws_ecr_repository_policy" "agent_core_ecr_policy" {
1429
- repository = aws_ecr_repository.agent_core_repository.name
1430
-
1431
- policy = jsonencode({
1432
- Version = "2012-10-17"
1433
- Statement = [
1434
- {
1435
- Sid = "AllowPushPull"
1436
- Effect = "Allow"
1437
- Principal = {
1438
- AWS = "arn:aws:iam::\${local.aws_account_id}:root"
1439
- }
1440
- Action = [
1441
- "ecr:GetDownloadUrlForLayer",
1442
- "ecr:BatchGetImage",
1443
- "ecr:BatchCheckLayerAvailability",
1444
- "ecr:PutImage",
1445
- "ecr:InitiateLayerUpload",
1446
- "ecr:UploadLayerPart",
1447
- "ecr:CompleteLayerUpload"
1448
- ]
1449
- }
1450
- ]
1451
- })
1452
- }
1453
1447
 
1454
1448
  # IAM Role for Agent Core Runtime
1455
1449
  resource "aws_iam_role" "agent_core_runtime_role" {
@@ -1488,27 +1482,6 @@ resource "aws_iam_policy" "agent_core_runtime_policy" {
1488
1482
  policy = jsonencode({
1489
1483
  Version = "2012-10-17"
1490
1484
  Statement = concat([
1491
- {
1492
- Sid = "ECRImageAccess"
1493
- Effect = "Allow"
1494
- Action = [
1495
- "ecr:BatchGetImage",
1496
- "ecr:GetDownloadUrlForLayer"
1497
- ]
1498
- Resource = [
1499
- aws_ecr_repository.agent_core_repository.arn
1500
- ]
1501
- },
1502
- {
1503
- Sid = "ECRTokenAccess"
1504
- Effect = "Allow"
1505
- Action = [
1506
- "ecr:GetAuthorizationToken"
1507
- ]
1508
- Resource = [
1509
- "*"
1510
- ]
1511
- },
1512
1485
  {
1513
1486
  "Effect" : "Allow",
1514
1487
  "Action" : [
@@ -1583,46 +1556,6 @@ resource "aws_iam_role_policy_attachment" "agent_core_policy" {
1583
1556
  policy_arn = aws_iam_policy.agent_core_runtime_policy.arn
1584
1557
  }
1585
1558
 
1586
- # Data source to get container image digest
1587
- data "external" "docker_digest" {
1588
- program = ["sh", "-c", "echo '{\\"digest\\":\\"'$(docker inspect \${var.docker_image_tag} --format '{{.Id}}')'\\"}' "]
1589
- }
1590
-
1591
- locals {
1592
- # Content-based, immutable image tag derived from the local image digest
1593
- image_tag = replace(data.external.docker_digest.result.digest, "sha256:", "")
1594
- }
1595
-
1596
- # Null resource for container image publish
1597
- resource "null_resource" "docker_publish" {
1598
- triggers = {
1599
- docker_digest = data.external.docker_digest.result.digest
1600
- repository_url = aws_ecr_repository.agent_core_repository.repository_url
1601
- docker_image_tag = var.docker_image_tag
1602
- image_tag = local.image_tag
1603
- }
1604
-
1605
- provisioner "local-exec" {
1606
- command = <<-EOT
1607
- # Get ECR login token
1608
- aws ecr get-login-password --region "$AWS_REGION" | docker login --username AWS --password-stdin "$REPOSITORY_URL"
1609
-
1610
- # Tag the image with the immutable content-based tag
1611
- docker tag "$DOCKER_IMAGE_TAG" "$REPOSITORY_URL:$IMAGE_TAG"
1612
-
1613
- # Push the image
1614
- docker push "$REPOSITORY_URL:$IMAGE_TAG"
1615
- EOT
1616
- environment = {
1617
- AWS_REGION = local.aws_region
1618
- REPOSITORY_URL = self.triggers.repository_url
1619
- DOCKER_IMAGE_TAG = self.triggers.docker_image_tag
1620
- IMAGE_TAG = self.triggers.image_tag
1621
- }
1622
- }
1623
-
1624
- depends_on = [aws_ecr_repository_policy.agent_core_ecr_policy]
1625
- }
1626
1559
 
1627
1560
  # Security group for the agent core runtime, used when running inside a VPC
1628
1561
  resource "aws_security_group" "agent_core_runtime" {
@@ -1653,8 +1586,26 @@ resource "aws_bedrockagentcore_agent_runtime" "agent_runtime" {
1653
1586
  role_arn = aws_iam_role.agent_core_runtime_role.arn
1654
1587
 
1655
1588
  agent_runtime_artifact {
1656
- container_configuration {
1657
- container_uri = "\${aws_ecr_repository.agent_core_repository.repository_url}:\${local.image_tag}"
1589
+ dynamic "container_configuration" {
1590
+ for_each = var.container_configuration != null ? [var.container_configuration] : []
1591
+ content {
1592
+ container_uri = container_configuration.value.container_uri
1593
+ }
1594
+ }
1595
+
1596
+ dynamic "code_configuration" {
1597
+ for_each = var.code_configuration != null ? [var.code_configuration] : []
1598
+ content {
1599
+ entry_point = code_configuration.value.entry_point
1600
+ runtime = code_configuration.value.runtime
1601
+
1602
+ code {
1603
+ s3 {
1604
+ bucket = code_configuration.value.s3_bucket
1605
+ prefix = code_configuration.value.s3_key
1606
+ }
1607
+ }
1608
+ }
1658
1609
  }
1659
1610
  }
1660
1611
 
@@ -1698,7 +1649,7 @@ resource "aws_bedrockagentcore_agent_runtime" "agent_runtime" {
1698
1649
  tags = var.tags
1699
1650
 
1700
1651
  depends_on = [
1701
- null_resource.docker_publish,
1652
+ var.artifact_dependencies,
1702
1653
  aws_iam_role_policy_attachment.agent_core_policy
1703
1654
  ]
1704
1655
  }
@@ -2287,15 +2238,27 @@ variable "appconfig_application_id" {
2287
2238
  type = string
2288
2239
  }
2289
2240
 
2241
+ variable "asset_ecr_repository_url" {
2242
+ description = "URL of the shared asset ECR repository the agent's image is published to. Instantiate the \`core/asset-ecr\` module once per deployment and pass its \`repository_url\` output here."
2243
+ type = string
2244
+ }
2245
+
2246
+ variable "asset_ecr_repository_arn" {
2247
+ description = "ARN of the shared asset ECR repository (from \`core/asset-ecr.repository_arn\`), used to scope the runtime's image pull grant to it."
2248
+ type = string
2249
+ }
2250
+
2290
2251
  variable "appconfig_application_arn" {
2291
2252
  description = "ARN of the shared runtime-config AppConfig application (from \`core/runtime-config/appconfig.application_arn\`). Used to scope the IAM read permission granted to the agent runtime."
2292
2253
  type = string
2293
2254
  }
2294
2255
 
2295
2256
  module "agent_core_runtime" {
2296
- source = "../../../core/agent-core"
2257
+ source = "../../../core/agent-core-container"
2297
2258
  agent_runtime_name = "InMemoryTerraformAgent"
2298
2259
  docker_image_tag = "proj-in-memory-terraform-agent:latest"
2260
+ asset_ecr_repository_url = var.asset_ecr_repository_url
2261
+ asset_ecr_repository_arn = var.asset_ecr_repository_arn
2299
2262
  server_protocol = "HTTP"
2300
2263
  enable_vpc = var.enable_vpc
2301
2264
  vpc_id = var.vpc_id
@@ -5,7 +5,7 @@
5
5
  import { type GeneratorCallback, type Tree } from '@nx/devkit';
6
6
  import { type NxGeneratorInfo } from '../../utils/nx.js';
7
7
  import type { IacMetadata } from '../../utils/shared-constructs-constants.js';
8
- import type { TsAgentGeneratorSchema } from './schema';
8
+ import type { TsAgentGeneratorSchema, TsAgentInfra } from './schema';
9
9
  /** The metadata this generator records, which its predicates read. */
10
10
  export interface TsAgentMetadata extends IacMetadata {
11
11
  readonly port: number;
@@ -13,6 +13,11 @@ export interface TsAgentMetadata extends IacMetadata {
13
13
  readonly auth: string;
14
14
  readonly protocol: string;
15
15
  readonly session: string;
16
+ /**
17
+ * How this component is packaged and hosted, so a consumer can tell a
18
+ * code-packaged runtime from a container-packaged one without re-deriving it.
19
+ */
20
+ readonly infra: TsAgentInfra;
16
21
  }
17
22
  export declare const DEPENDENCIES: import("../../utils/declared-dependencies.js").DependencyDeclaration<readonly [{
18
23
  readonly name: "zod";
@@ -194,6 +199,26 @@ export declare const DEPENDENCIES: import("../../utils/declared-dependencies.js"
194
199
  readonly name: "@opentelemetry/propagator-jaeger";
195
200
  } & {
196
201
  versionOnly: true;
202
+ }, {
203
+ readonly name: "ncp";
204
+ } & {
205
+ versionOnly: true;
206
+ }, {
207
+ readonly name: "rimraf";
208
+ } & {
209
+ versionOnly: true;
210
+ }, {
211
+ readonly name: "make-dir-cli";
212
+ } & {
213
+ versionOnly: true;
214
+ }, {
215
+ readonly name: "cpy-cli";
216
+ } & {
217
+ versionOnly: true;
218
+ }, {
219
+ readonly name: "@aws/aws-distro-opentelemetry-node-autoinstrumentation";
220
+ } & {
221
+ versionOnly: true;
197
222
  }], readonly [{
198
223
  readonly name: "boto3";
199
224
  readonly when: (m: IacMetadata) => boolean;
@@ -6,6 +6,7 @@ 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
8
  import { AGENT_CORE_CONSTRUCTS_PY_DEPENDENCIES, addAgentInfra } from "../../utils/agent-core-constructs/agent-core-constructs.js";
9
+ import { addTypeScriptCodePackageTarget, agentCoreNodeRuntime, CODE_PACKAGE_DEPENDENCIES, isAgentCoreHosted, isContainerHosted } from "../../utils/agent-core-packaging.js";
9
10
  import { addTypeScriptBundleTarget, BUNDLE_DEPENDENCIES } from "../../utils/bundle/bundle.js";
10
11
  import { resolveContainers } from "../../utils/containers.js";
11
12
  import { declareDependencies, ownedElsewhere } from "../../utils/declared-dependencies.js";
@@ -159,7 +160,8 @@ export const DEPENDENCIES = declareDependencies()({
159
160
  ...ownedElsewhere(DOCKER_DEPENDENCIES),
160
161
  ...ownedElsewhere(SHARED_CONSTRUCTS_DEPENDENCIES),
161
162
  ...ownedElsewhere(NODE_IMAGE_DEPENDENCIES),
162
- ...ownedElsewhere(ADOT_IMAGE_DEPENDENCIES)
163
+ ...ownedElsewhere(ADOT_IMAGE_DEPENDENCIES),
164
+ ...ownedElsewhere(CODE_PACKAGE_DEPENDENCIES)
163
165
  ],
164
166
  py: ownedElsewhere(AGENT_CORE_CONSTRUCTS_PY_DEPENDENCIES)
165
167
  });
@@ -232,7 +234,8 @@ export const tsAgentGenerator = async (tree, options)=>{
232
234
  overwriteStrategy: OverwriteStrategy.KeepExisting
233
235
  });
234
236
  }
235
- if (infra === 'agentcore') {
237
+ if (isAgentCoreHosted(infra)) {
238
+ const container = isContainerHosted(infra);
236
239
  const containers = await resolveContainers(tree, 'inherit');
237
240
  const dockerImageTag = `${getNpmScope(tree)}-${name}:latest`;
238
241
  // Add bundle target
@@ -240,47 +243,70 @@ export const tsAgentGenerator = async (tree, options)=>{
240
243
  targetFilePath: `${targetSourceDirRelativeToProjectRoot}/index.ts`,
241
244
  bundleOutputDir: joinPathFragments('agent', name)
242
245
  }, DEPENDENCIES);
243
- // Add the Dockerfile
244
- generateFiles(tree, joinPathFragments(import.meta.dirname, 'files', 'deploy'), targetSourceDir, {
245
- distDir,
246
- name,
247
- protocol,
248
- adotVersion: TS_VERSIONS['@aws/aws-distro-opentelemetry-node-autoinstrumentation'],
249
- jaegerVersion: TS_VERSIONS['@opentelemetry/propagator-jaeger'],
250
- nodeBaseImage: BASE_IMAGES.node,
251
- ...nodeImageVersions(),
252
- ...esmVars(tree)
253
- }, {
254
- overwriteStrategy: OverwriteStrategy.KeepExisting
255
- });
256
- const dockerOutputDir = joinPathFragments('dist', project.root, 'bundle', 'agent', name);
257
- const dockerTargetName = `${agentTargetPrefix}-docker`;
258
- const fs = new FsCommands(tree, DEPENDENCIES);
259
- project.targets[dockerTargetName] = {
260
- cache: IMAGE_BUILD_CACHE,
261
- executor: 'nx:run-commands',
262
- options: {
263
- commands: [
264
- fs.cp(`${targetSourceDir}/Dockerfile`, `${dockerOutputDir}/Dockerfile`),
265
- `${containers} build --platform linux/arm64 -t ${dockerImageTag} ${dockerOutputDir}`
266
- ],
267
- parallel: false
268
- },
269
- dependsOn: [
270
- 'bundle'
271
- ]
272
- };
273
- addDependencyToTargetIfNotPresent(project, 'docker', dockerTargetName);
274
- addArtifactDependencyToTargets(project, 'docker');
275
- addDockerScanTarget(tree, {
276
- project,
277
- containerEngine: containers,
278
- trivyTargetName: `${agentTargetPrefix}-trivy`,
279
- dockerTargetName,
280
- imageTags: [
281
- dockerImageTag
282
- ]
283
- }, DEPENDENCIES);
246
+ const bundleOutputDir = joinPathFragments('dist', project.root, 'bundle', 'agent', name);
247
+ let artifact;
248
+ if (container) {
249
+ // Add the Dockerfile
250
+ generateFiles(tree, joinPathFragments(import.meta.dirname, 'files', 'deploy'), targetSourceDir, {
251
+ distDir,
252
+ name,
253
+ protocol,
254
+ adotVersion: TS_VERSIONS['@aws/aws-distro-opentelemetry-node-autoinstrumentation'],
255
+ jaegerVersion: TS_VERSIONS['@opentelemetry/propagator-jaeger'],
256
+ nodeBaseImage: BASE_IMAGES.node,
257
+ ...nodeImageVersions(),
258
+ ...esmVars(tree)
259
+ }, {
260
+ overwriteStrategy: OverwriteStrategy.KeepExisting
261
+ });
262
+ const dockerTargetName = `${agentTargetPrefix}-docker`;
263
+ const fs = new FsCommands(tree, DEPENDENCIES);
264
+ project.targets[dockerTargetName] = {
265
+ cache: IMAGE_BUILD_CACHE,
266
+ executor: 'nx:run-commands',
267
+ options: {
268
+ commands: [
269
+ fs.cp(`${targetSourceDir}/Dockerfile`, `${bundleOutputDir}/Dockerfile`),
270
+ `${containers} build --platform linux/arm64 -t ${dockerImageTag} ${bundleOutputDir}`
271
+ ],
272
+ parallel: false
273
+ },
274
+ dependsOn: [
275
+ 'bundle'
276
+ ]
277
+ };
278
+ addDependencyToTargetIfNotPresent(project, 'docker', dockerTargetName);
279
+ addArtifactDependencyToTargets(project, 'docker');
280
+ addDockerScanTarget(tree, {
281
+ project,
282
+ containerEngine: containers,
283
+ trivyTargetName: `${agentTargetPrefix}-trivy`,
284
+ dockerTargetName,
285
+ imageTags: [
286
+ dockerImageTag
287
+ ]
288
+ }, DEPENDENCIES);
289
+ artifact = {
290
+ type: 'container',
291
+ dockerImageTag,
292
+ outputDir: bundleOutputDir
293
+ };
294
+ } else {
295
+ const packageOutputDir = joinPathFragments('dist', project.root, 'package', 'agent', name);
296
+ addTypeScriptCodePackageTarget(tree, {
297
+ project,
298
+ targetName: `${agentTargetPrefix}-package`,
299
+ bundleTargetName: 'bundle',
300
+ bundleOutputDir,
301
+ packageOutputDir
302
+ }, DEPENDENCIES);
303
+ artifact = {
304
+ type: 'code',
305
+ outputDir: packageOutputDir,
306
+ runtime: agentCoreNodeRuntime(),
307
+ entryPoint: 'index.js'
308
+ };
309
+ }
284
310
  // Add shared constructs
285
311
  await sharedConstructsGenerator(tree, {
286
312
  iac
@@ -291,8 +317,7 @@ export const tsAgentGenerator = async (tree, options)=>{
291
317
  agentNameKebabCase: name,
292
318
  agentNameClassName,
293
319
  projectName: project.name,
294
- dockerImageTag,
295
- dockerOutputDir,
320
+ artifact,
296
321
  iac,
297
322
  auth,
298
323
  session,
@@ -312,6 +337,7 @@ export const tsAgentGenerator = async (tree, options)=>{
312
337
  // Recorded below and read by the declaration's predicates, so the packages
313
338
  // added here are exactly the ones the version sync will own.
314
339
  const metadata = {
340
+ infra,
315
341
  port: localDevPort,
316
342
  rc: agentNameClassName,
317
343
  auth,
@@ -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.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 IMAGE_BUILD_CACHE,\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 addArtifactDependencyToTargets,\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: IMAGE_BUILD_CACHE,\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 addArtifactDependencyToTargets(project, '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","IMAGE_BUILD_CACHE","NODE_IMAGE_DEPENDENCIES","nodeImageVersions","formatFilesInSubtree","FS_DEPENDENCIES","FsCommands","resolveIac","installDependencies","addGeneratorMetricsIfApplicable","esmVars","kebabCase","toClassName","getNpmScope","addArtifactDependencyToTargets","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","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 type AgentCoreArtifact,\n addAgentInfra,\n} from '../../utils/agent-core-constructs/agent-core-constructs.js';\nimport {\n addTypeScriptCodePackageTarget,\n agentCoreNodeRuntime,\n CODE_PACKAGE_DEPENDENCIES,\n isAgentCoreHosted,\n isContainerHosted,\n} from '../../utils/agent-core-packaging.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 IMAGE_BUILD_CACHE,\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 addArtifactDependencyToTargets,\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, TsAgentInfra } 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 * How this component is packaged and hosted, so a consumer can tell a\n * code-packaged runtime from a container-packaged one without re-deriving it.\n */\n readonly infra: TsAgentInfra;\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 ...ownedElsewhere(CODE_PACKAGE_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 (isAgentCoreHosted(infra)) {\n const container = isContainerHosted(infra);\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 const bundleOutputDir = joinPathFragments(\n 'dist',\n project.root,\n 'bundle',\n 'agent',\n name,\n );\n\n let artifact: AgentCoreArtifact;\n\n if (container) {\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[\n '@aws/aws-distro-opentelemetry-node-autoinstrumentation'\n ],\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 dockerTargetName = `${agentTargetPrefix}-docker`;\n\n const fs = new FsCommands(tree, DEPENDENCIES);\n project.targets[dockerTargetName] = {\n cache: IMAGE_BUILD_CACHE,\n executor: 'nx:run-commands',\n options: {\n commands: [\n fs.cp(\n `${targetSourceDir}/Dockerfile`,\n `${bundleOutputDir}/Dockerfile`,\n ),\n `${containers} build --platform linux/arm64 -t ${dockerImageTag} ${bundleOutputDir}`,\n ],\n parallel: false,\n },\n dependsOn: ['bundle'],\n };\n\n addDependencyToTargetIfNotPresent(project, 'docker', dockerTargetName);\n addArtifactDependencyToTargets(project, '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 artifact = {\n type: 'container',\n dockerImageTag,\n outputDir: bundleOutputDir,\n };\n } else {\n const packageOutputDir = joinPathFragments(\n 'dist',\n project.root,\n 'package',\n 'agent',\n name,\n );\n addTypeScriptCodePackageTarget(\n tree,\n {\n project,\n targetName: `${agentTargetPrefix}-package`,\n bundleTargetName: 'bundle',\n bundleOutputDir,\n packageOutputDir,\n },\n DEPENDENCIES,\n );\n\n artifact = {\n type: 'code',\n outputDir: packageOutputDir,\n runtime: agentCoreNodeRuntime(),\n entryPoint: 'index.js',\n };\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 artifact,\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 infra,\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","addTypeScriptCodePackageTarget","agentCoreNodeRuntime","CODE_PACKAGE_DEPENDENCIES","isAgentCoreHosted","isContainerHosted","addTypeScriptBundleTarget","BUNDLE_DEPENDENCIES","resolveContainers","declareDependencies","ownedElsewhere","ADOT_IMAGE_DEPENDENCIES","addDockerScanTarget","DOCKER_DEPENDENCIES","IMAGE_BUILD_CACHE","NODE_IMAGE_DEPENDENCIES","nodeImageVersions","formatFilesInSubtree","FS_DEPENDENCIES","FsCommands","resolveIac","installDependencies","addGeneratorMetricsIfApplicable","esmVars","kebabCase","toClassName","getNpmScope","addArtifactDependencyToTargets","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","container","containers","dockerImageTag","targetFilePath","bundleOutputDir","artifact","adotVersion","jaegerVersion","nodeBaseImage","node","dockerTargetName","fs","targets","cache","executor","commands","cp","parallel","dependsOn","containerEngine","trivyTargetName","imageTags","type","outputDir","packageOutputDir","targetName","bundleTargetName","runtime","entryPoint","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 +1 @@
1
- {"version":3,"sources":["../../../../../../packages/nx-plugin/src/ts/agent/schema.d.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { IacOption } from '../../utils/iac.js';\n\nexport type TsAgentFramework = 'strands';\nexport type TsAgentInfra = 'agentcore' | 'none';\nexport type AgentProtocol = 'http' | 'a2a' | 'ag-ui';\n\nexport type TsAgentAuth = 'iam' | 'cognito';\n\nexport type TsAgentSession = 's3' | 'in-memory';\n\nexport interface TsAgentGeneratorSchema {\n project: string;\n framework?: TsAgentFramework;\n name?: string;\n infra?: TsAgentInfra;\n auth?: TsAgentAuth;\n protocol?: AgentProtocol;\n session?: TsAgentSession;\n iac: IacOption;\n preferInstallDependencies?: boolean;\n}\n"],"names":[],"mappings":"AAAA;;;CAGC,GAYD,WAUC"}
1
+ {"version":3,"sources":["../../../../../../packages/nx-plugin/src/ts/agent/schema.d.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { AgentCoreInfra } from '../../utils/agent-core-packaging.js';\nimport { IacOption } from '../../utils/iac.js';\n\nexport type TsAgentFramework = 'strands';\nexport type TsAgentInfra = AgentCoreInfra;\nexport type AgentProtocol = 'http' | 'a2a' | 'ag-ui';\n\nexport type TsAgentAuth = 'iam' | 'cognito';\n\nexport type TsAgentSession = 's3' | 'in-memory';\n\nexport interface TsAgentGeneratorSchema {\n project: string;\n framework?: TsAgentFramework;\n name?: string;\n infra?: TsAgentInfra;\n auth?: TsAgentAuth;\n protocol?: AgentProtocol;\n session?: TsAgentSession;\n iac: IacOption;\n preferInstallDependencies?: boolean;\n}\n"],"names":[],"mappings":"AAAA;;;CAGC,GAaD,WAUC"}
@@ -3,10 +3,11 @@
3
3
  * SPDX-License-Identifier: Apache-2.0
4
4
  */
5
5
 
6
+ import { AgentCoreInfra } from '../../utils/agent-core-packaging.js';
6
7
  import { IacOption } from '../../utils/iac.js';
7
8
 
8
9
  export type TsAgentFramework = 'strands';
9
- export type TsAgentInfra = 'agentcore' | 'none';
10
+ export type TsAgentInfra = AgentCoreInfra;
10
11
  export type AgentProtocol = 'http' | 'a2a' | 'ag-ui';
11
12
 
12
13
  export type TsAgentAuth = 'iam' | 'cognito';
@@ -55,9 +55,9 @@
55
55
  },
56
56
  "infra": {
57
57
  "type": "string",
58
- "description": "The type of infrastructure to host your Agent.",
58
+ "description": "The type of infrastructure to host your Agent. agentcore deploys your code as a zip to an AgentCore managed runtime for the fastest build and deploy cycle. agentcore-ecr builds and hosts a container image instead, for OS-level control or an established container pipeline.",
59
59
  "x-prompt": "How would you like to host your Agent server?",
60
- "enum": ["agentcore", "none"],
60
+ "enum": ["agentcore", "agentcore-ecr", "none"],
61
61
  "default": "agentcore",
62
62
  "x-priority": "important"
63
63
  },