@aws/nx-plugin 1.0.0-rc.90 → 1.0.0-rc.92
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 +2 -2
- package/migrations.json +32 -27
- package/package.json +4 -4
- package/src/infra/app/__snapshots__/generator.spec.ts.snap +3 -3
- package/src/internal/test-matrix/generator.js +28 -0
- package/src/internal/test-matrix/generator.js.map +1 -1
- package/src/migrations/latest/react-website-unique-dev-ports/metadata.json +3 -0
- package/src/migrations/latest/react-website-unique-dev-ports/migration.js +79 -0
- package/src/migrations/latest/react-website-unique-dev-ports/migration.js.map +1 -0
- package/src/migrations/v1.0.0-rc.87/0001-add-destroy-sandbox-target/migration.js.map +1 -0
- package/src/migrations/v1.0.0-rc.87/0002-terraform-rdb-proxy-iam-connect-grant/migration.js.map +1 -0
- package/src/migrations/v1.0.0-rc.88/0001-python-version-drop-exact-patch/migration.d.ts +6 -0
- package/src/migrations/v1.0.0-rc.88/0001-python-version-drop-exact-patch/migration.js.map +1 -0
- package/src/migrations/v1.0.0-rc.88/0002-react-website-nx-react-express-override/migration.js.map +1 -0
- package/src/migrations/v1.0.0-rc.89/0001-nx-parallel-default/migration.js.map +1 -0
- package/src/preset/__snapshots__/generator.spec.ts.snap +2 -2
- package/src/py/agent/__snapshots__/generator.constructs.spec.ts.snap +2 -2
- package/src/py/agent/__snapshots__/generator.frameworks.spec.ts.snap +1 -1
- package/src/py/agent/__snapshots__/generator.protocols.spec.ts.snap +91 -116
- package/src/py/agent/files/package/main.py.template +13 -0
- package/src/py/agent/generator.d.ts +6 -1
- package/src/py/agent/generator.js +82 -45
- package/src/py/agent/generator.js.map +1 -1
- package/src/py/agent/schema.d.js.map +1 -1
- package/src/py/agent/schema.d.ts +2 -1
- package/src/py/agent/schema.json +2 -2
- package/src/py/mcp-server/__snapshots__/generator.spec.ts.snap +66 -115
- package/src/py/mcp-server/files/package/main.py.template +13 -0
- package/src/py/mcp-server/generator.d.ts +6 -1
- package/src/py/mcp-server/generator.js +79 -43
- package/src/py/mcp-server/generator.js.map +1 -1
- package/src/py/mcp-server/schema.d.js.map +1 -1
- package/src/py/mcp-server/schema.d.ts +2 -1
- package/src/py/mcp-server/schema.json +2 -2
- package/src/py/rdb/__snapshots__/generator.spec.ts.snap +14 -61
- package/src/ts/agent/__snapshots__/generator.spec.ts.snap +78 -115
- package/src/ts/agent/generator.d.ts +26 -1
- package/src/ts/agent/generator.js +71 -45
- package/src/ts/agent/generator.js.map +1 -1
- package/src/ts/agent/schema.d.js.map +1 -1
- package/src/ts/agent/schema.d.ts +2 -1
- package/src/ts/agent/schema.json +2 -2
- package/src/ts/mcp-server/__snapshots__/generator.spec.ts.snap +65 -114
- package/src/ts/mcp-server/generator.d.ts +26 -1
- package/src/ts/mcp-server/generator.js +66 -38
- package/src/ts/mcp-server/generator.js.map +1 -1
- package/src/ts/mcp-server/schema.d.js.map +1 -1
- package/src/ts/mcp-server/schema.d.ts +2 -1
- package/src/ts/mcp-server/schema.json +2 -2
- package/src/ts/rdb/__snapshots__/generator.spec.ts.snap +16 -110
- package/src/ts/react-website/app/__snapshots__/generator.spec.ts.snap +12 -10
- package/src/ts/react-website/app/generator.js +16 -0
- package/src/ts/react-website/app/generator.js.map +1 -1
- package/src/ts/react-website/cognito-auth/__snapshots__/generator.terraform.spec.ts.snap +1 -1
- package/src/ts/react-website/cognito-auth/generator.js +14 -2
- package/src/ts/react-website/cognito-auth/generator.js.map +1 -1
- package/src/utils/agent-core-constructs/agent-core-constructs.d.ts +25 -6
- package/src/utils/agent-core-constructs/agent-core-constructs.js +36 -7
- 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 +20 -4
- package/src/utils/agent-core-constructs/files/terraform/app/agent-core/__nameKebabCase__/__nameKebabCase__.tf.template +34 -1
- package/src/utils/agent-core-constructs/files/terraform/core/agent-core/runtime.tf.template +51 -112
- package/src/utils/agent-core-constructs/files/terraform/core/agent-core-code/runtime.tf.template +204 -0
- package/src/utils/agent-core-constructs/files/terraform/core/agent-core-container/runtime.tf.template +235 -0
- package/src/utils/agent-core-packaging.d.ts +119 -0
- package/src/utils/agent-core-packaging.js +131 -0
- package/src/utils/agent-core-packaging.js.map +1 -0
- package/src/utils/agent-core-runtime-resolution.d.ts +35 -0
- package/src/utils/agent-core-runtime-resolution.js +68 -0
- package/src/utils/agent-core-runtime-resolution.js.map +1 -0
- package/src/utils/files/terraform/src/core/asset-ecr/asset-ecr.tf.template +137 -0
- package/src/utils/identity-constructs/files/cdk/core/user-identity.ts.template +1 -1
- package/src/utils/identity-constructs/files/terraform/core/user-identity/identity/identity.tf.template +1 -4
- package/src/utils/identity-constructs/identity-constructs.d.ts +22 -2
- package/src/utils/identity-constructs/identity-constructs.js +75 -5
- package/src/utils/identity-constructs/identity-constructs.js.map +1 -1
- package/src/utils/port.d.ts +5 -0
- package/src/utils/port.js +1 -1
- package/src/utils/port.js.map +1 -1
- package/src/utils/rdb-constructs/files/terraform/app/dbs/__nameKebabCase__/__nameKebabCase__.tf.template +12 -59
- package/src/utils/versions.d.ts +51 -31
- package/src/utils/versions.js +48 -31
- package/src/utils/versions.js.map +1 -1
- package/src/migrations/latest/add-destroy-sandbox-target/migration.js.map +0 -1
- package/src/migrations/latest/nx-parallel-default/migration.js.map +0 -1
- package/src/migrations/latest/python-version-drop-exact-patch/migration.js.map +0 -1
- package/src/migrations/latest/react-website-nx-react-express-override/migration.js.map +0 -1
- package/src/migrations/latest/terraform-rdb-proxy-iam-connect-grant/migration.js.map +0 -1
- /package/src/migrations/latest/{add-destroy-sandbox-target → react-website-unique-dev-ports}/migration.d.ts +0 -0
- /package/src/migrations/{latest/add-destroy-sandbox-target → v1.0.0-rc.87/0001-add-destroy-sandbox-target}/metadata.json +0 -0
- /package/src/migrations/{latest/python-version-drop-exact-patch → v1.0.0-rc.87/0001-add-destroy-sandbox-target}/migration.d.ts +0 -0
- /package/src/migrations/{latest/add-destroy-sandbox-target → v1.0.0-rc.87/0001-add-destroy-sandbox-target}/migration.js +0 -0
- /package/src/migrations/{latest/terraform-rdb-proxy-iam-connect-grant → v1.0.0-rc.87/0002-terraform-rdb-proxy-iam-connect-grant}/__snapshots__/migration.spec.ts.snap +0 -0
- /package/src/migrations/{latest/terraform-rdb-proxy-iam-connect-grant → v1.0.0-rc.87/0002-terraform-rdb-proxy-iam-connect-grant}/metadata.json +0 -0
- /package/src/migrations/{latest/terraform-rdb-proxy-iam-connect-grant → v1.0.0-rc.87/0002-terraform-rdb-proxy-iam-connect-grant}/migration.d.ts +0 -0
- /package/src/migrations/{latest/terraform-rdb-proxy-iam-connect-grant → v1.0.0-rc.87/0002-terraform-rdb-proxy-iam-connect-grant}/migration.js +0 -0
- /package/src/migrations/{latest/python-version-drop-exact-patch → v1.0.0-rc.88/0001-python-version-drop-exact-patch}/metadata.json +0 -0
- /package/src/migrations/{latest/python-version-drop-exact-patch → v1.0.0-rc.88/0001-python-version-drop-exact-patch}/migration.js +0 -0
- /package/src/migrations/{latest/react-website-nx-react-express-override → v1.0.0-rc.88/0002-react-website-nx-react-express-override}/metadata.json +0 -0
- /package/src/migrations/{latest/react-website-nx-react-express-override → v1.0.0-rc.88/0002-react-website-nx-react-express-override}/migration.d.ts +0 -0
- /package/src/migrations/{latest/react-website-nx-react-express-override → v1.0.0-rc.88/0002-react-website-nx-react-express-override}/migration.js +0 -0
- /package/src/migrations/{latest/nx-parallel-default → v1.0.0-rc.89/0001-nx-parallel-default}/metadata.json +0 -0
- /package/src/migrations/{latest/nx-parallel-default → v1.0.0-rc.89/0001-nx-parallel-default}/migration.d.ts +0 -0
- /package/src/migrations/{latest/nx-parallel-default → v1.0.0-rc.89/0001-nx-parallel-default}/migration.js +0 -0
- /package/src/ts/mcp-server/files/{http.ts.template → app/http.ts.template} +0 -0
- /package/src/ts/mcp-server/files/{index.ts.template → app/index.ts.template} +0 -0
- /package/src/ts/mcp-server/files/{resources → app/resources}/sample-guidance.ts.template +0 -0
- /package/src/ts/mcp-server/files/{server.ts.template → app/server.ts.template} +0 -0
- /package/src/ts/mcp-server/files/{stdio.ts.template → app/stdio.ts.template} +0 -0
- /package/src/ts/mcp-server/files/{tools → app/tools}/divide.ts.template +0 -0
- /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 "
|
|
1348
|
-
description = "
|
|
1349
|
-
type
|
|
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
|
-
|
|
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
|
-
|
|
1652
|
+
var.artifact_dependencies,
|
|
1702
1653
|
aws_iam_role_policy_attachment.agent_core_policy
|
|
1703
1654
|
]
|
|
1704
1655
|
}
|
|
@@ -1715,7 +1666,7 @@ resource "null_resource" "runtime_ready" {
|
|
|
1715
1666
|
|
|
1716
1667
|
provisioner "local-exec" {
|
|
1717
1668
|
command = <<-EOT
|
|
1718
|
-
uv run --with boto3==1.43.
|
|
1669
|
+
uv run --with boto3==1.43.83 python -c "
|
|
1719
1670
|
import boto3
|
|
1720
1671
|
import json
|
|
1721
1672
|
import os
|
|
@@ -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
|
|
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
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
project,
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
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
|
-
|
|
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 =
|
|
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"}
|
package/src/ts/agent/schema.d.ts
CHANGED
|
@@ -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 =
|
|
10
|
+
export type TsAgentInfra = AgentCoreInfra;
|
|
10
11
|
export type AgentProtocol = 'http' | 'a2a' | 'ag-ui';
|
|
11
12
|
|
|
12
13
|
export type TsAgentAuth = 'iam' | 'cognito';
|