@aws/nx-plugin 0.97.1 → 0.99.0

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 (84) hide show
  1. package/generators.json +17 -1
  2. package/package.json +1 -1
  3. package/src/connection/agent-runtime-config.d.ts +19 -0
  4. package/src/connection/agent-runtime-config.js +52 -0
  5. package/src/connection/agent-runtime-config.js.map +1 -0
  6. package/src/connection/generator.js +15 -5
  7. package/src/connection/generator.js.map +1 -1
  8. package/src/py/fast-api/react/__snapshots__/generator.spec.ts.snap +3 -17
  9. package/src/py/mcp-server/__snapshots__/generator.spec.ts.snap +3 -3
  10. package/src/py/strands-agent/__snapshots__/generator.spec.ts.snap +8 -5
  11. package/src/py/strands-agent/a2a-connection/files/agent-connection/app/__targetAgentSnakeCase___client.py.template +29 -0
  12. package/src/py/strands-agent/a2a-connection/generator.d.ts +10 -0
  13. package/src/py/strands-agent/a2a-connection/generator.js +164 -0
  14. package/src/py/strands-agent/a2a-connection/generator.js.map +1 -0
  15. package/src/py/strands-agent/a2a-connection/schema.d.ts +15 -0
  16. package/src/py/strands-agent/a2a-connection/schema.json +26 -0
  17. package/src/py/strands-agent/files/a2a/main.py.template +33 -0
  18. package/src/py/strands-agent/files/{app → common}/agent.py.template +2 -0
  19. package/src/py/strands-agent/files/deploy/Dockerfile.template +9 -0
  20. package/src/py/strands-agent/generator.js +29 -16
  21. package/src/py/strands-agent/generator.js.map +1 -1
  22. package/src/py/strands-agent/mcp-connection/__snapshots__/generator.spec.ts.snap +9 -63
  23. package/src/py/strands-agent/mcp-connection/files/agent-connection/app/__mcpServerSnakeCase___client.py.template +4 -19
  24. package/src/py/strands-agent/mcp-connection/generator.js +16 -19
  25. package/src/py/strands-agent/mcp-connection/generator.js.map +1 -1
  26. package/src/py/strands-agent/react-connection/__snapshots__/generator.spec.ts.snap +3 -17
  27. package/src/py/strands-agent/react-connection/generator.js +12 -0
  28. package/src/py/strands-agent/react-connection/generator.js.map +1 -1
  29. package/src/py/strands-agent/schema.d.ts +2 -0
  30. package/src/py/strands-agent/schema.json +8 -0
  31. package/src/smithy/react-connection/__snapshots__/generator.spec.ts.snap +3 -17
  32. package/src/ts/mcp-server/__snapshots__/generator.spec.ts.snap +3 -3
  33. package/src/ts/strands-agent/__snapshots__/generator.spec.ts.snap +3 -3
  34. package/src/ts/strands-agent/a2a-connection/files/agent-connection/app/__targetAgentKebabCase__-client.ts.template +27 -0
  35. package/src/ts/strands-agent/a2a-connection/generator.d.ts +10 -0
  36. package/src/ts/strands-agent/a2a-connection/generator.js +119 -0
  37. package/src/ts/strands-agent/a2a-connection/generator.js.map +1 -0
  38. package/src/ts/strands-agent/a2a-connection/schema.d.ts +15 -0
  39. package/src/ts/strands-agent/a2a-connection/schema.json +26 -0
  40. package/src/ts/strands-agent/files/a2a/index.ts.template +28 -0
  41. package/src/ts/strands-agent/files/deploy/Dockerfile.template +4 -0
  42. package/src/ts/strands-agent/generator.js +30 -14
  43. package/src/ts/strands-agent/generator.js.map +1 -1
  44. package/src/ts/strands-agent/mcp-connection/__snapshots__/generator.spec.ts.snap +9 -31
  45. package/src/ts/strands-agent/mcp-connection/files/agent-connection/app/__mcpServerKebabCase__-client.ts.template +2 -9
  46. package/src/ts/strands-agent/mcp-connection/generator.js +4 -2
  47. package/src/ts/strands-agent/mcp-connection/generator.js.map +1 -1
  48. package/src/ts/strands-agent/react-connection/generator.js +12 -0
  49. package/src/ts/strands-agent/react-connection/generator.js.map +1 -1
  50. package/src/ts/strands-agent/schema.d.ts +2 -0
  51. package/src/ts/strands-agent/schema.json +8 -0
  52. package/src/utils/agent-connection/agent-connection.d.ts +31 -3
  53. package/src/utils/agent-connection/agent-connection.js +62 -30
  54. package/src/utils/agent-connection/agent-connection.js.map +1 -1
  55. package/src/utils/agent-connection/files/core-a2a/agentcore-a2a-client.ts.template +134 -0
  56. package/src/utils/agent-connection/files/{core → core-mcp}/agentcore-mcp-client.ts.template +7 -22
  57. package/src/utils/agent-connection/files/core-runtime-config/runtime-config.ts.template +40 -0
  58. package/src/utils/agent-connection/files/py-core-a2a/agentcore_a2a_client.py.template +91 -0
  59. package/src/utils/agent-connection/files/py-core-auth/auth/__init__.py.template +3 -0
  60. package/src/utils/agent-connection/files/py-core-auth/auth/sigv4.py.template +48 -0
  61. package/src/utils/agent-connection/files/{py-core → py-core-mcp}/agentcore_mcp_client.py.template +2 -36
  62. package/src/utils/agent-connection/files/py-core-runtime-config/runtime_config.py.template +44 -0
  63. package/src/utils/agent-core-constructs/agent-core-constructs.d.ts +3 -2
  64. package/src/utils/agent-core-constructs/agent-core-constructs.js +2 -2
  65. package/src/utils/agent-core-constructs/agent-core-constructs.js.map +1 -1
  66. package/src/utils/agent-core-constructs/files/cdk/app/agent-core/__nameKebabCase__/__nameKebabCase__.ts.template +8 -3
  67. package/src/utils/agent-core-constructs/files/terraform/app/agent-core/__nameKebabCase__/__nameKebabCase__.tf.template +1 -1
  68. package/src/utils/ast.d.ts +18 -0
  69. package/src/utils/ast.js +58 -9
  70. package/src/utils/ast.js.map +1 -1
  71. package/src/utils/connection/open-api/files/components/__apiNameClassName__Provider.tsx.template +3 -16
  72. package/src/utils/versions.d.ts +6 -3
  73. package/src/utils/versions.js +5 -2
  74. package/src/utils/versions.js.map +1 -1
  75. /package/src/py/strands-agent/files/{app → common}/__init__.py.template +0 -0
  76. /package/src/py/strands-agent/files/{app → http}/init.py.template +0 -0
  77. /package/src/py/strands-agent/files/{app → http}/main.py.template +0 -0
  78. /package/src/ts/strands-agent/files/{app → common}/agent.ts.template +0 -0
  79. /package/src/ts/strands-agent/files/{app → http}/agent-core-trpc-client.ts.template +0 -0
  80. /package/src/ts/strands-agent/files/{app → http}/client.ts.template +0 -0
  81. /package/src/ts/strands-agent/files/{app → http}/index.ts.template +0 -0
  82. /package/src/ts/strands-agent/files/{app → http}/init.ts.template +0 -0
  83. /package/src/ts/strands-agent/files/{app → http}/router.ts.template +0 -0
  84. /package/src/ts/strands-agent/files/{app → http}/schema/z-async-iterable.ts.template +0 -0
@@ -40,21 +40,27 @@ const pyStrandsAgentGenerator = async (tree, options) => {
40
40
  const targetSourceDir = (0, devkit_1.joinPathFragments)(project.sourceRoot, agentNameSnakeCase);
41
41
  const computeType = options.computeType ?? 'BedrockAgentCoreRuntime';
42
42
  const auth = options.auth ?? 'IAM';
43
- // Generate example agent
44
- (0, devkit_1.generateFiles)(tree, (0, devkit_1.joinPathFragments)(__dirname, 'files', 'app'), targetSourceDir, {
43
+ const protocol = options.protocol ?? 'HTTP';
44
+ const templateContext = {
45
45
  name,
46
46
  agentNameSnakeCase,
47
47
  agentNameClassName,
48
48
  moduleName,
49
- }, { overwriteStrategy: devkit_1.OverwriteStrategy.KeepExisting });
49
+ };
50
+ // Generate common files shared by both protocols
51
+ (0, devkit_1.generateFiles)(tree, (0, devkit_1.joinPathFragments)(__dirname, 'files', 'common'), targetSourceDir, templateContext, { overwriteStrategy: devkit_1.OverwriteStrategy.KeepExisting });
52
+ // Generate protocol-specific files
53
+ (0, devkit_1.generateFiles)(tree, (0, devkit_1.joinPathFragments)(__dirname, 'files', protocol.toLowerCase()), targetSourceDir, templateContext, { overwriteStrategy: devkit_1.OverwriteStrategy.KeepExisting });
50
54
  (0, py_1.addDependenciesToPyProjectToml)(tree, project.root, [
51
55
  'aws-lambda-powertools',
52
56
  'aws-opentelemetry-distro',
53
57
  'bedrock-agentcore',
54
- 'fastapi',
55
58
  'boto3',
59
+ 'fastapi',
56
60
  'mcp',
57
- 'strands-agents',
61
+ ...(protocol === 'A2A'
62
+ ? ['strands-agents[a2a]']
63
+ : ['strands-agents']),
58
64
  'strands-agents-tools',
59
65
  'uvicorn',
60
66
  ]);
@@ -72,9 +78,10 @@ const pyStrandsAgentGenerator = async (tree, options) => {
72
78
  agentNameSnakeCase,
73
79
  moduleName,
74
80
  bundleOutputDir,
81
+ protocol,
75
82
  }, { overwriteStrategy: devkit_1.OverwriteStrategy.KeepExisting });
76
83
  const dockerTargetName = `${agentTargetPrefix}-docker`;
77
- // Add a docker target specific to this MCP server
84
+ // Add a docker target specific to this agent
78
85
  project.targets[dockerTargetName] = {
79
86
  cache: true,
80
87
  executor: 'nx:run-commands',
@@ -99,12 +106,17 @@ const pyStrandsAgentGenerator = async (tree, options) => {
99
106
  iacProvider,
100
107
  projectName: project.name,
101
108
  auth,
109
+ serverProtocol: protocol,
102
110
  });
103
111
  }
104
- // NB: we assign the local dev port from 8081 as 8080 is used by vscode server, and so conflicts
105
- // for those working on remote dev envirionments. The deployed agent in agentcore still runs on
106
- // 8080 as per the agentcore contract.
107
- const localDevPort = (0, port_1.assignPort)(tree, project, 8081);
112
+ // A2A servers use port 9000 as per the Strands A2A SDK default and AgentCore A2A contract.
113
+ // HTTP agents use port 8081+ to avoid conflict with VS Code server on 8080.
114
+ const localDevPortStart = protocol === 'A2A' ? 9000 : 8081;
115
+ const localDevPort = (0, port_1.assignPort)(tree, project, localDevPortStart);
116
+ // Both protocols use fastapi dev for hot reload:
117
+ // - HTTP: FastAPI app directly defined in init.py
118
+ // - A2A: A2AServer.to_fastapi_app() creates a FastAPI app in main.py
119
+ const serveCommand = `uv run fastapi dev ${moduleName}/${agentNameSnakeCase}/main.py --port ${localDevPort}`;
108
120
  (0, devkit_1.updateProjectConfiguration)(tree, project.name, {
109
121
  ...project,
110
122
  targets: {
@@ -112,21 +124,21 @@ const pyStrandsAgentGenerator = async (tree, options) => {
112
124
  [`${agentTargetPrefix}-serve`]: {
113
125
  executor: 'nx:run-commands',
114
126
  options: {
115
- commands: [
116
- `uv run fastapi dev ${moduleName}/${agentNameSnakeCase}/main.py --port ${localDevPort}`,
117
- ],
127
+ commands: [serveCommand],
118
128
  cwd: '{projectRoot}',
129
+ env: {
130
+ PORT: `${localDevPort}`,
131
+ },
119
132
  },
120
133
  continuous: true,
121
134
  },
122
135
  [`${agentTargetPrefix}-serve-local`]: {
123
136
  executor: 'nx:run-commands',
124
137
  options: {
125
- commands: [
126
- `uv run fastapi dev ${moduleName}/${agentNameSnakeCase}/main.py --port ${localDevPort}`,
127
- ],
138
+ commands: [serveCommand],
128
139
  cwd: '{projectRoot}',
129
140
  env: {
141
+ PORT: `${localDevPort}`,
130
142
  SERVE_LOCAL: 'true',
131
143
  },
132
144
  },
@@ -138,6 +150,7 @@ const pyStrandsAgentGenerator = async (tree, options) => {
138
150
  port: localDevPort,
139
151
  rc: agentNameClassName,
140
152
  auth,
153
+ protocol,
141
154
  });
142
155
  await (0, metrics_1.addGeneratorMetricsIfApplicable)(tree, [
143
156
  exports.PY_STRANDS_AGENT_GENERATOR_INFO,
@@ -1 +1 @@
1
- {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../packages/nx-plugin/src/py/strands-agent/generator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../packages/nx-plugin/src/py/strands-agent/generator.ts"],"names":[],"mappings":"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"}
@@ -10,50 +10,12 @@ __all__ = ["InventoryMcpClient"]
10
10
  `;
11
11
 
12
12
  exports[`py#strands-agent#mcp-connection generator > should match snapshot for generated files > agentcore_mcp_client.py 1`] = `
13
- "import hashlib
14
- from collections.abc import Generator
15
- from typing import Any
16
-
17
- import boto3
13
+ "import boto3
18
14
  import httpx
19
- from botocore.auth import SigV4Auth
20
- from botocore.awsrequest import AWSRequest
21
15
  from mcp.client.streamable_http import streamablehttp_client
22
16
  from strands.tools.mcp.mcp_client import MCPClient
23
17
 
24
-
25
- class SigV4HTTPXAuth(httpx.Auth):
26
- """HTTPX Auth class that signs requests with AWS SigV4."""
27
-
28
- def __init__(self, credentials: Any, region: str):
29
- self.credentials = credentials
30
- self.service = "bedrock-agentcore"
31
- self.region = region
32
- self.signer = SigV4Auth(credentials, self.service, region)
33
-
34
- def auth_flow(
35
- self, request: httpx.Request
36
- ) -> Generator[httpx.Request, httpx.Response, None]:
37
- headers = dict(request.headers)
38
-
39
- headers.pop("connection", None)
40
- headers["x-amz-content-sha256"] = hashlib.sha256(
41
- request.content if request.content else b""
42
- ).hexdigest()
43
-
44
- aws_request = AWSRequest(
45
- method=request.method,
46
- url=str(request.url),
47
- data=request.content,
48
- headers=headers,
49
- )
50
-
51
- self.signer.add_auth(aws_request)
52
-
53
- request.headers.clear()
54
- request.headers.update(dict(aws_request.headers))
55
-
56
- yield request
18
+ from .auth import SigV4HTTPXAuth
57
19
 
58
20
 
59
21
  class AgentCoreMCPClient:
@@ -104,7 +66,7 @@ class AgentCoreMCPClient:
104
66
  return AgentCoreMCPClient._create(
105
67
  agent_runtime_arn=agent_runtime_arn,
106
68
  session_id=session_id,
107
- auth_handler=SigV4HTTPXAuth(credentials, region),
69
+ auth_handler=SigV4HTTPXAuth(credentials, "bedrock-agentcore", region),
108
70
  )
109
71
 
110
72
  @staticmethod
@@ -132,12 +94,13 @@ class AgentCoreMCPClient:
132
94
  exports[`py#strands-agent#mcp-connection generator > should match snapshot for generated files > inventory_mcp_client.py 1`] = `
133
95
  "import os
134
96
 
135
- from aws_lambda_powertools.utilities import parameters
136
- from botocore.config import Config
137
97
  from mcp.client.streamable_http import streamablehttp_client
138
98
  from strands.tools.mcp.mcp_client import MCPClient
139
99
 
140
100
  from proj_agent_connection.core.agentcore_mcp_client import AgentCoreMCPClient
101
+ from proj_agent_connection.core.runtime_config import (
102
+ get_connected_agent_runtime_arn,
103
+ )
141
104
 
142
105
 
143
106
  class InventoryMcpClient:
@@ -155,33 +118,16 @@ class InventoryMcpClient:
155
118
  if os.environ.get("SERVE_LOCAL") == "true":
156
119
  return MCPClient(lambda: streamablehttp_client("http://localhost:8082/mcp"))
157
120
 
158
- arn = InventoryMcpClient._get_arn()
159
121
  return AgentCoreMCPClient.with_iam_auth(
160
- agent_runtime_arn=arn,
122
+ agent_runtime_arn=get_connected_agent_runtime_arn("InventoryMcp"),
161
123
  session_id=session_id,
162
124
  )
163
-
164
- @staticmethod
165
- def _get_arn() -> str:
166
- """Resolve the InventoryMcp ARN from runtime config (AppConfig)."""
167
- region = os.environ.get("AWS_REGION", os.environ.get("AWS_DEFAULT_REGION"))
168
- provider_kwargs = {}
169
- if region:
170
- provider_kwargs["config"] = Config(region_name=region)
171
- provider = parameters.AppConfigProvider(
172
- environment="default",
173
- application=os.environ["RUNTIME_CONFIG_APP_ID"],
174
- **provider_kwargs,
175
- )
176
- config = provider.get("connection", transform="json")
177
- return config["agentRuntimes"]["InventoryMcp"]
178
125
  "
179
126
  `;
180
127
 
181
128
  exports[`py#strands-agent#mcp-connection generator > should match snapshot for generated files > transformed-agent.py 1`] = `
182
- "from contextlib import contextmanager
183
-
184
- from proj_agent_connection import InventoryMcpClient
129
+ "from proj_agent_connection import InventoryMcpClient
130
+ from contextlib import contextmanager
185
131
 
186
132
  from strands import Agent, tool
187
133
  from strands_tools import current_time
@@ -1,11 +1,12 @@
1
1
  import os
2
2
 
3
- from aws_lambda_powertools.utilities import parameters
4
- from botocore.config import Config
5
3
  from mcp.client.streamable_http import streamablehttp_client
6
4
  from strands.tools.mcp.mcp_client import MCPClient
7
5
 
8
6
  from <%- agentConnectionModuleName %>.core.agentcore_mcp_client import AgentCoreMCPClient
7
+ from <%- agentConnectionModuleName %>.core.runtime_config import (
8
+ get_connected_agent_runtime_arn,
9
+ )
9
10
 
10
11
 
11
12
  class <%- mcpServerClassName %>Client:
@@ -23,23 +24,7 @@ class <%- mcpServerClassName %>Client:
23
24
  if os.environ.get("SERVE_LOCAL") == "true":
24
25
  return MCPClient(lambda: streamablehttp_client("http://localhost:<%- mcpServerPort %>/mcp"))
25
26
 
26
- arn = <%- mcpServerClassName %>Client._get_arn()
27
27
  return AgentCoreMCPClient.with_iam_auth(
28
- agent_runtime_arn=arn,
28
+ agent_runtime_arn=get_connected_agent_runtime_arn("<%- mcpServerClassName %>"),
29
29
  session_id=session_id,
30
30
  )
31
-
32
- @staticmethod
33
- def _get_arn() -> str:
34
- """Resolve the <%- mcpServerClassName %> ARN from runtime config (AppConfig)."""
35
- region = os.environ.get("AWS_REGION", os.environ.get("AWS_DEFAULT_REGION"))
36
- provider_kwargs = {}
37
- if region:
38
- provider_kwargs["config"] = Config(region_name=region)
39
- provider = parameters.AppConfigProvider(
40
- environment="default",
41
- application=os.environ["RUNTIME_CONFIG_APP_ID"],
42
- **provider_kwargs,
43
- )
44
- config = provider.get("connection", transform="json")
45
- return config["agentRuntimes"]["<%- mcpServerClassName %>"]
@@ -31,11 +31,21 @@ const pyStrandsAgentMcpConnectionGenerator = async (tree, options) => {
31
31
  const mcpServerClassName = mcpComponent.rc;
32
32
  const mcpServerSnakeCase = (0, names_1.snakeCase)(mcpServerClassName);
33
33
  const mcpServerPort = mcpComponent.port ?? 8000;
34
- // 1. Ensure the shared Python agent-connection project exists
34
+ // 1. Ensure the shared Python agent-connection project exists + has the
35
+ // MCP core client and its shared SigV4 auth helper.
35
36
  await (0, agent_connection_1.ensurePythonAgentConnectionProject)(tree);
37
+ (0, agent_connection_1.addPythonCoreClient)(tree, 'auth');
38
+ (0, agent_connection_1.addPythonCoreClient)(tree, 'mcp');
36
39
  const agentConnectionProjectDir = (0, agent_connection_1.getPythonAgentConnectionProjectDir)(tree);
37
40
  const agentConnectionModuleName = (0, agent_connection_1.getPythonAgentConnectionModuleName)(tree);
38
41
  const agentConnectionPackageName = (0, agent_connection_1.getPythonAgentConnectionPackageName)(tree);
42
+ // Python deps required by the MCP core client + shared auth helper.
43
+ (0, py_1.addDependenciesToPyProjectToml)(tree, agentConnectionProjectDir, [
44
+ 'boto3',
45
+ 'httpx',
46
+ 'mcp',
47
+ 'strands-agents',
48
+ ]);
39
49
  // 2. Generate the per-connection client into the shared agent-connection project
40
50
  const appDir = (0, devkit_1.joinPathFragments)(agentConnectionProjectDir, agentConnectionModuleName, 'app');
41
51
  (0, devkit_1.generateFiles)(tree, (0, devkit_1.joinPathFragments)(__dirname, 'files', 'agent-connection', 'app'), appDir, {
@@ -52,10 +62,6 @@ const pyStrandsAgentMcpConnectionGenerator = async (tree, options) => {
52
62
  // Add re-export to module __init__.py
53
63
  const moduleInitPath = (0, devkit_1.joinPathFragments)(agentConnectionProjectDir, agentConnectionModuleName, '__init__.py');
54
64
  await (0, agent_connection_1.addPythonReExport)(tree, moduleInitPath, `.app.${mcpServerSnakeCase}_client`, `${mcpServerClassName}Client`);
55
- // Add aws-lambda-powertools dependency to the agent-connection project
56
- (0, py_1.addDependenciesToPyProjectToml)(tree, agentConnectionProjectDir, [
57
- 'aws-lambda-powertools',
58
- ]);
59
65
  // 3. Transform agent.py to add MCP client import and usage
60
66
  const agentSourceDir = (0, devkit_1.joinPathFragments)(sourceProject.root, agentComponent.path ?? 'src');
61
67
  const agentFilePath = (0, devkit_1.joinPathFragments)(agentSourceDir, 'agent.py');
@@ -93,23 +99,14 @@ const pyStrandsAgentMcpConnectionGenerator = async (tree, options) => {
93
99
  };
94
100
  exports.pyStrandsAgentMcpConnectionGenerator = pyStrandsAgentMcpConnectionGenerator;
95
101
  /**
96
- * Add an import for the MCP client class to agent.py using GritQL.
102
+ * Add an import for the MCP client class to agent.py.
97
103
  *
98
- * If the agent-connection module is already imported, appends the new client
99
- * using +=. Otherwise adds a new import statement after contextlib.
100
- * Ruff will sort imports correctly when formatFilesInSubtree runs.
104
+ * Delegates to the shared `addPythonDestructuredImport` helper which either
105
+ * appends to an existing `from <module> import ...` line or prepends a new
106
+ * import statement (ruff sorts imports on the next format pass).
101
107
  */
102
108
  const addImportToAgentFile = async (tree, filePath, agentConnectionModuleName, clientClassName) => {
103
- if (await (0, ast_1.matchGritQL)(tree, filePath, `\`${clientClassName}\``)) {
104
- return;
105
- }
106
- // Try to append to existing import from the same module using +=
107
- const appended = await (0, ast_1.applyGritQL)(tree, filePath, py(`\`from ${agentConnectionModuleName} import $names\` where { $names += \`, ${clientClassName}\` }`));
108
- if (!appended) {
109
- // No existing import — add a new one after the first import.
110
- // Ruff will sort it into the correct position.
111
- await (0, ast_1.applyGritQL)(tree, filePath, py(`\`from contextlib import contextmanager\` as $imp => \`$imp\nfrom ${agentConnectionModuleName} import ${clientClassName}\``));
112
- }
109
+ await (0, ast_1.addPythonDestructuredImport)(tree, filePath, [clientClassName], agentConnectionModuleName);
113
110
  };
114
111
  /**
115
112
  * Add MCP tools to the Agent's tools array using GritQL.
@@ -1 +1 @@
1
- {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../../packages/nx-plugin/src/py/strands-agent/mcp-connection/generator.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACH,uCAQoB;AAEpB,0CAI2B;AAC3B,oDAAyE;AACzE,kDAA6D;AAC7D,gDAAiD;AACjD,0CAG2B;AAC3B,uFAM0D;AAC1D,4CAA8D;AAE9D,qDAAqD;AACrD,MAAM,EAAE,GAAG,CAAC,OAAe,EAAE,EAAE,CAAC,oBAAoB,OAAO,EAAE,CAAC;AAEjD,QAAA,8CAA8C,GACzD,IAAA,qBAAgB,EAAC,UAAU,CAAC,CAAC;AAExB,MAAM,oCAAoC,GAAG,KAAK,EACvD,IAAU,EACV,OAAmD,EACvB,EAAE;IAC9B,MAAM,aAAa,GAAG,IAAA,wCAAmC,EACvD,IAAI,EACJ,OAAO,CAAC,aAAa,CACtB,CAAC;IACF,MAAM,aAAa,GAAG,IAAA,wCAAmC,EACvD,IAAI,EACJ,OAAO,CAAC,aAAa,CACtB,CAAC;IAEF,MAAM,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC;IAC/C,MAAM,YAAY,GAAG,OAAO,CAAC,eAAe,CAAC;IAE7C,IAAI,CAAC,cAAc,IAAI,CAAC,YAAY,EAAE,CAAC;QACrC,MAAM,IAAI,KAAK,CACb,mGAAmG,CACpG,CAAC;IACJ,CAAC;IAED,IAAI,YAAY,CAAC,IAAI,IAAI,YAAY,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;QACrD,MAAM,IAAI,KAAK,CACb,0EAA0E,YAAY,CAAC,IAAI,WAAW,YAAY,CAAC,IAAI,mBAAmB,CAC3I,CAAC;IACJ,CAAC;IAED,MAAM,gBAAgB,GAAG,YAAY,CAAC,IAAI,IAAI,YAAY,CAAC;IAC3D,MAAM,kBAAkB,GAAG,YAAY,CAAC,EAAY,CAAC;IACrD,MAAM,kBAAkB,GAAG,IAAA,iBAAS,EAAC,kBAAkB,CAAC,CAAC;IACzD,MAAM,aAAa,GAAG,YAAY,CAAC,IAAI,IAAI,IAAI,CAAC;IAEhD,8DAA8D;IAC9D,MAAM,IAAA,qDAAkC,EAAC,IAAI,CAAC,CAAC;IAE/C,MAAM,yBAAyB,GAAG,IAAA,qDAAkC,EAAC,IAAI,CAAC,CAAC;IAC3E,MAAM,yBAAyB,GAAG,IAAA,qDAAkC,EAAC,IAAI,CAAC,CAAC;IAC3E,MAAM,0BAA0B,GAAG,IAAA,sDAAmC,EAAC,IAAI,CAAC,CAAC;IAE7E,iFAAiF;IACjF,MAAM,MAAM,GAAG,IAAA,0BAAiB,EAC9B,yBAAyB,EACzB,yBAAyB,EACzB,KAAK,CACN,CAAC;IACF,IAAA,sBAAa,EACX,IAAI,EACJ,IAAA,0BAAiB,EAAC,SAAS,EAAE,OAAO,EAAE,kBAAkB,EAAE,KAAK,CAAC,EAChE,MAAM,EACN;QACE,kBAAkB;QAClB,kBAAkB;QAClB,aAAa;QACb,yBAAyB;KAC1B,EACD,EAAE,iBAAiB,EAAE,0BAAiB,CAAC,YAAY,EAAE,CACtD,CAAC;IAEF,gCAAgC;IAChC,MAAM,WAAW,GAAG,IAAA,0BAAiB,EAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAC7D,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC;QAC9B,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IAC9B,CAAC;IAED,sCAAsC;IACtC,MAAM,cAAc,GAAG,IAAA,0BAAiB,EACtC,yBAAyB,EACzB,yBAAyB,EACzB,aAAa,CACd,CAAC;IACF,MAAM,IAAA,oCAAiB,EACrB,IAAI,EACJ,cAAc,EACd,QAAQ,kBAAkB,SAAS,EACnC,GAAG,kBAAkB,QAAQ,CAC9B,CAAC;IAEF,uEAAuE;IACvE,IAAA,mCAA8B,EAAC,IAAI,EAAE,yBAAyB,EAAE;QAC9D,uBAAuB;KACxB,CAAC,CAAC;IAEH,2DAA2D;IAC3D,MAAM,cAAc,GAAG,IAAA,0BAAiB,EACtC,aAAa,CAAC,IAAI,EAClB,cAAc,CAAC,IAAI,IAAI,KAAK,CAC7B,CAAC;IACF,MAAM,aAAa,GAAG,IAAA,0BAAiB,EAAC,cAAc,EAAE,UAAU,CAAC,CAAC;IAEpE,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC;QAC/B,MAAM,eAAe,GAAG,GAAG,kBAAkB,QAAQ,CAAC;QACtD,MAAM,aAAa,GAAG,kBAAkB,CAAC;QAEzC,MAAM,oBAAoB,CACxB,IAAI,EACJ,aAAa,EACb,yBAAyB,EACzB,eAAe,CAChB,CAAC;QACF,MAAM,kBAAkB,CAAC,IAAI,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC;QAC7D,MAAM,sBAAsB,CAC1B,IAAI,EACJ,aAAa,EACb,eAAe,EACf,aAAa,CACd,CAAC;IACJ,CAAC;IAED,6EAA6E;IAC7E,IAAA,sCAAiC,EAC/B,IAAI,EACJ,aAAa,CAAC,IAAI,EAClB,0BAA0B,CAC3B,CAAC;IAEF,4CAA4C;IAC5C,MAAM,SAAS,GAAG,cAAc,CAAC,IAAI,IAAI,OAAO,CAAC;IACjD,MAAM,oBAAoB,GAAG,GAAG,SAAS,cAAc,CAAC;IACxD,MAAM,uBAAuB,GAAG,GAAG,gBAAgB,cAAc,CAAC;IAElE,IAAI,aAAa,CAAC,OAAO,EAAE,CAAC,oBAAoB,CAAC,EAAE,CAAC;QAClD,MAAM,MAAM,GAAG,aAAa,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;QAC3D,MAAM,CAAC,SAAS,GAAG;YACjB,GAAG,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC;YAC3B;gBACE,QAAQ,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC;gBAC9B,MAAM,EAAE,uBAAuB;aAChC;SACF,CAAC;QACF,IAAA,mCAA0B,EAAC,IAAI,EAAE,aAAa,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;IACtE,CAAC;IAED,MAAM,IAAA,yCAA+B,EAAC,IAAI,EAAE;QAC1C,sDAA8C;KAC/C,CAAC,CAAC;IAEH,MAAM,IAAA,6BAAoB,EAAC,IAAI,CAAC,CAAC;IACjC,OAAO,GAAG,EAAE;QACV,IAAA,4BAAmB,EAAC,IAAI,CAAC,CAAC;IAC5B,CAAC,CAAC;AACJ,CAAC,CAAC;AA7IW,QAAA,oCAAoC,wCA6I/C;AAEF;;;;;;GAMG;AACH,MAAM,oBAAoB,GAAG,KAAK,EAChC,IAAU,EACV,QAAgB,EAChB,yBAAiC,EACjC,eAAuB,EACR,EAAE;IACjB,IAAI,MAAM,IAAA,iBAAW,EAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,eAAe,IAAI,CAAC,EAAE,CAAC;QAChE,OAAO;IACT,CAAC;IAED,iEAAiE;IACjE,MAAM,QAAQ,GAAG,MAAM,IAAA,iBAAW,EAChC,IAAI,EACJ,QAAQ,EACR,EAAE,CACA,UAAU,yBAAyB,0CAA0C,eAAe,MAAM,CACnG,CACF,CAAC;IAEF,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,6DAA6D;QAC7D,+CAA+C;QAC/C,MAAM,IAAA,iBAAW,EACf,IAAI,EACJ,QAAQ,EACR,EAAE,CACA,qEAAqE,yBAAyB,WAAW,eAAe,IAAI,CAC7H,CACF,CAAC;IACJ,CAAC;AACH,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,kBAAkB,GAAG,KAAK,EAC9B,IAAU,EACV,QAAgB,EAChB,aAAqB,EACN,EAAE;IACjB,IACE,MAAM,IAAA,iBAAW,EAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,aAAa,sBAAsB,CAAC,EAC3E,CAAC;QACD,OAAO;IACT,CAAC;IAED,MAAM,IAAA,iBAAW,EACf,IAAI,EACJ,QAAQ,EACR,EAAE,CAAC;2BACoB,aAAa;;kBAEtB,aAAa;;kDAEmB,aAAa;;EAE7D,CAAC,CACA,CAAC;AACJ,CAAC,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,sBAAsB,GAAG,KAAK,EAClC,IAAU,EACV,QAAgB,EAChB,eAAuB,EACvB,aAAqB,EACN,EAAE;IACjB,IAAI,MAAM,IAAA,iBAAW,EAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,eAAe,eAAe,CAAC,EAAE,CAAC;QAC3E,OAAO;IACT,CAAC;IAED,sDAAsD;IACtD,6EAA6E;IAC7E,MAAM,WAAW,GAAG,MAAM,IAAA,iBAAW,EACnC,IAAI,EACJ,QAAQ,EACR,EAAE,CAAC;6BACsB,aAAa;kBACxB,aAAa;EAC7B,CAAC,CACA,CAAC;IAEF,IAAI,WAAW,EAAE,CAAC;QAChB,wEAAwE;QACxE,MAAM,IAAA,iBAAW,EACf,IAAI,EACJ,QAAQ,EACR,EAAE,CAAC;+BACsB,eAAe;iBAC7B,aAAa,MAAM,eAAe;EACjD,CAAC,CACE,CAAC;QACF,OAAO;IACT,CAAC;IAED,0EAA0E;IAC1E,uEAAuE;IACvE,uEAAuE;IACvE,MAAM,IAAA,iBAAW,EACf,IAAI,EACJ,QAAQ,EACR,EAAE,CAAC;;;;;MAKD,aAAa,MAAM,eAAe;;UAE9B,aAAa;;gBAEP,CAAC,CACd,CAAC;AACJ,CAAC,CAAC;AAEF,kBAAe,4CAAoC,CAAC"}
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../../packages/nx-plugin/src/py/strands-agent/mcp-connection/generator.ts"],"names":[],"mappings":"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"}
@@ -104,23 +104,9 @@ const useCreateTestAgentClient = (): TestAgent => {
104
104
  const auth = useAuth();
105
105
  const user = auth?.user;
106
106
  const cognitoClient: typeof fetch = (url, init) => {
107
- const headers = { Authorization: \`Bearer \${user?.id_token}\` };
108
- const existingHeaders = init?.headers;
109
-
110
- return fetch(url, {
111
- ...init,
112
- headers: !existingHeaders
113
- ? headers
114
- : existingHeaders instanceof Headers
115
- ? (() => {
116
- const h = new Headers(existingHeaders);
117
- Object.entries(headers).forEach(([k, v]) => h.append(k, v));
118
- return h;
119
- })()
120
- : Array.isArray(existingHeaders)
121
- ? [...existingHeaders, ...Object.entries(headers)]
122
- : { ...existingHeaders, ...headers },
123
- });
107
+ const headers = new Headers(init?.headers);
108
+ headers.set('Authorization', \`Bearer \${user?.id_token}\`);
109
+ return fetch(url, { ...init, headers });
124
110
  };
125
111
  return useMemo(
126
112
  () =>
@@ -10,6 +10,7 @@ const format_1 = require("../../../utils/format");
10
10
  const nx_1 = require("../../../utils/nx");
11
11
  const metrics_1 = require("../../../utils/metrics");
12
12
  const react_1 = require("../../../utils/connection/open-api/react");
13
+ const agent_runtime_config_1 = require("../../../connection/agent-runtime-config");
13
14
  const names_1 = require("../../../utils/names");
14
15
  const object_1 = require("../../../utils/object");
15
16
  const serve_local_1 = require("./serve-local");
@@ -24,6 +25,10 @@ const pyStrandsAgentReactConnectionGenerator = async (tree, options) => {
24
25
  const agentNameClassName = targetComponent?.rc ?? (0, names_1.toClassName)(agentName);
25
26
  const agentPort = targetComponent?.port ?? metadata?.ports?.[0] ?? 8081;
26
27
  const auth = targetComponent?.auth ?? metadata?.auth ?? 'IAM';
28
+ if (targetComponent?.protocol === 'A2A') {
29
+ throw new Error(`Cannot connect a React website to an A2A agent. ` +
30
+ `Consider generating an agent with the HTTP protocol instead.`);
31
+ }
27
32
  // Determine the module name from the project source root
28
33
  const moduleName = getModuleName(agentProjectConfig);
29
34
  const agentNameSnakeCase = (0, names_1.toSnakeCase)(agentName);
@@ -79,6 +84,13 @@ const pyStrandsAgentReactConnectionGenerator = async (tree, options) => {
79
84
  port: agentPort,
80
85
  targetComponent,
81
86
  });
87
+ // Expose the agent's runtime ARN to the frontend via the 'connection'
88
+ // namespace (which is published to runtime-config.json). The agent construct
89
+ // itself only registers to the 'agentcore' namespace by default.
90
+ await (0, agent_runtime_config_1.addAgentRuntimeToConnectionNamespace)(tree, {
91
+ agentNameKebabCase: (0, names_1.kebabCase)(agentNameClassName),
92
+ agentNameClassName,
93
+ });
82
94
  await (0, metrics_1.addGeneratorMetricsIfApplicable)(tree, [
83
95
  exports.PY_STRANDS_AGENT_REACT_CONNECTION_GENERATOR_INFO,
84
96
  ]);
@@ -1 +1 @@
1
- {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../../packages/nx-plugin/src/py/strands-agent/react-connection/generator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../../packages/nx-plugin/src/py/strands-agent/react-connection/generator.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,7 @@
6
6
  import { IacProviderOption } from '../../utils/iac';
7
7
 
8
8
  export type PyStrandsAgentComputeType = 'BedrockAgentCoreRuntime' | 'None';
9
+ export type StrandsAgentProtocol = 'HTTP' | 'A2A';
9
10
 
10
11
  export type PyStrandsAgentAuth = 'IAM' | 'Cognito';
11
12
 
@@ -14,5 +15,6 @@ export interface PyStrandsAgentGeneratorSchema {
14
15
  name?: string;
15
16
  computeType?: PyStrandsAgentComputeType;
16
17
  auth?: PyStrandsAgentAuth;
18
+ protocol?: StrandsAgentProtocol;
17
19
  iacProvider: IacProviderOption;
18
20
  }
@@ -36,6 +36,14 @@
36
36
  "x-prompt": "How would you like to authenticate with your Strands Agent?",
37
37
  "x-priority": "important"
38
38
  },
39
+ "protocol": {
40
+ "type": "string",
41
+ "description": "The server protocol for your Strands Agent. HTTP exposes a FastAPI HTTP server. A2A exposes an Agent-to-Agent protocol server.",
42
+ "x-prompt": "Which protocol would you like to use for your Strands Agent?",
43
+ "enum": ["HTTP", "A2A"],
44
+ "default": "HTTP",
45
+ "x-priority": "important"
46
+ },
39
47
  "iacProvider": {
40
48
  "type": "string",
41
49
  "description": "The preferred IaC provider. By default this is inherited from your initial selection.",
@@ -104,23 +104,9 @@ const useCreateTestApiClient = (): TestApi => {
104
104
  const auth = useAuth();
105
105
  const user = auth?.user;
106
106
  const cognitoClient: typeof fetch = (url, init) => {
107
- const headers = { Authorization: \`Bearer \${user?.id_token}\` };
108
- const existingHeaders = init?.headers;
109
-
110
- return fetch(url, {
111
- ...init,
112
- headers: !existingHeaders
113
- ? headers
114
- : existingHeaders instanceof Headers
115
- ? (() => {
116
- const h = new Headers(existingHeaders);
117
- Object.entries(headers).forEach(([k, v]) => h.append(k, v));
118
- return h;
119
- })()
120
- : Array.isArray(existingHeaders)
121
- ? [...existingHeaders, ...Object.entries(headers)]
122
- : { ...existingHeaders, ...headers },
123
- });
107
+ const headers = new Headers(init?.headers);
108
+ headers.set('Authorization', \`Bearer \${user?.id_token}\`);
109
+ return fetch(url, { ...init, headers });
124
110
  };
125
111
  return useMemo(
126
112
  () =>
@@ -76,8 +76,8 @@ export class SnapshotBedrockServer extends Construct implements IGrantable {
76
76
 
77
77
  rc.grantReadAppConfig(this.agentCoreRuntime);
78
78
 
79
- rc.set('connection', 'agentRuntimes', {
80
- ...rc.get('connection').agentRuntimes,
79
+ rc.set('agentcore', 'agentRuntimes', {
80
+ ...rc.get('agentcore').agentRuntimes,
81
81
  SnapshotBedrockServer: this.agentCoreRuntime.agentRuntimeArn,
82
82
  });
83
83
  }
@@ -543,7 +543,7 @@ module "agent_core_runtime" {
543
543
  module "add_agent_runtime_to_runtime_config" {
544
544
  source = "../../../core/runtime-config/entry"
545
545
 
546
- namespace = "connection"
546
+ namespace = "agentcore"
547
547
  key = "agentRuntimes"
548
548
  value = { "TerraformSnapshotServer" = module.agent_core_runtime.agent_core_runtime_arn }
549
549
 
@@ -80,8 +80,8 @@ export class SnapshotBedrockAgent extends Construct implements IGrantable {
80
80
 
81
81
  rc.grantReadAppConfig(this.agentCoreRuntime);
82
82
 
83
- rc.set('connection', 'agentRuntimes', {
84
- ...rc.get('connection').agentRuntimes,
83
+ rc.set('agentcore', 'agentRuntimes', {
84
+ ...rc.get('agentcore').agentRuntimes,
85
85
  SnapshotBedrockAgent: this.agentCoreRuntime.agentRuntimeArn,
86
86
  });
87
87
  }
@@ -188,7 +188,7 @@ module "agent_core_runtime" {
188
188
  module "add_agent_runtime_to_runtime_config" {
189
189
  source = "../../../core/runtime-config/entry"
190
190
 
191
- namespace = "connection"
191
+ namespace = "agentcore"
192
192
  key = "agentRuntimes"
193
193
  value = { "TerraformSnapshotAgent" = module.agent_core_runtime.agent_core_runtime_arn }
194
194
 
@@ -0,0 +1,27 @@
1
+ import { A2AAgent } from '@strands-agents/sdk/a2a';
2
+ import { AgentCoreA2aClient } from '../core/agentcore-a2a-client.js';
3
+ import { getConnectedAgentRuntimeArn } from '../core/runtime-config.js';
4
+
5
+ /**
6
+ * Client for connecting to the <%- targetAgentClassName %> A2A agent.
7
+ *
8
+ * In deployed mode: resolves the AgentCore runtime ARN from runtime config
9
+ * and uses a SigV4-authenticated A2A transport.
10
+ *
11
+ * In local mode (SERVE_LOCAL env var set): connects directly to the local
12
+ * A2A server over plain HTTP.
13
+ */
14
+ export class <%- targetAgentClassName %>Client {
15
+ static async create(sessionId: string): Promise<A2AAgent> {
16
+ if (process.env.SERVE_LOCAL === 'true') {
17
+ return new A2AAgent({
18
+ url: 'http://localhost:<%- targetAgentPort %>/',
19
+ });
20
+ }
21
+
22
+ return AgentCoreA2aClient.withIamAuth({
23
+ agentRuntimeArn: await getConnectedAgentRuntimeArn('<%- targetAgentClassName %>'),
24
+ sessionId,
25
+ });
26
+ }
27
+ }
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3
+ * SPDX-License-Identifier: Apache-2.0
4
+ */
5
+ import { GeneratorCallback, Tree } from '@nx/devkit';
6
+ import { TsStrandsAgentA2aConnectionGeneratorSchema } from './schema';
7
+ import { NxGeneratorInfo } from '../../../utils/nx';
8
+ export declare const TS_STRANDS_AGENT_A2A_CONNECTION_GENERATOR_INFO: NxGeneratorInfo;
9
+ export declare const tsStrandsAgentA2aConnectionGenerator: (tree: Tree, options: TsStrandsAgentA2aConnectionGeneratorSchema) => Promise<GeneratorCallback>;
10
+ export default tsStrandsAgentA2aConnectionGenerator;