@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
@@ -0,0 +1,119 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.tsStrandsAgentA2aConnectionGenerator = exports.TS_STRANDS_AGENT_A2A_CONNECTION_GENERATOR_INFO = void 0;
4
+ /**
5
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
6
+ * SPDX-License-Identifier: Apache-2.0
7
+ */
8
+ const devkit_1 = require("@nx/devkit");
9
+ const nx_1 = require("../../../utils/nx");
10
+ const metrics_1 = require("../../../utils/metrics");
11
+ const format_1 = require("../../../utils/format");
12
+ const names_1 = require("../../../utils/names");
13
+ const versions_1 = require("../../../utils/versions");
14
+ const npm_scope_1 = require("../../../utils/npm-scope");
15
+ const ast_1 = require("../../../utils/ast");
16
+ const agent_connection_1 = require("../../../utils/agent-connection/agent-connection");
17
+ exports.TS_STRANDS_AGENT_A2A_CONNECTION_GENERATOR_INFO = (0, nx_1.getGeneratorInfo)(__filename);
18
+ const tsStrandsAgentA2aConnectionGenerator = async (tree, options) => {
19
+ const sourceProject = (0, nx_1.readProjectConfigurationUnqualified)(tree, options.sourceProject);
20
+ const targetProject = (0, nx_1.readProjectConfigurationUnqualified)(tree, options.targetProject);
21
+ const agentComponent = options.sourceComponent;
22
+ const targetAgentComponent = options.targetComponent;
23
+ if (!agentComponent || !targetAgentComponent) {
24
+ throw new Error('Both sourceComponent and targetComponent must be provided for ts#strands-agent -> a2a connections');
25
+ }
26
+ if (targetAgentComponent.protocol !== 'A2A') {
27
+ throw new Error(`Target agent '${targetAgentComponent.name}' uses the ${targetAgentComponent.protocol ?? 'HTTP'} protocol — only A2A agents can be connected as tools.`);
28
+ }
29
+ if (targetAgentComponent.auth && targetAgentComponent.auth !== 'IAM') {
30
+ throw new Error(`A2A agent connection currently only supports IAM authentication, but '${targetAgentComponent.name}' uses '${targetAgentComponent.auth}' authentication.`);
31
+ }
32
+ const targetAgentComponentName = targetAgentComponent.name ?? 'agent';
33
+ const targetAgentClassName = targetAgentComponent.rc;
34
+ const targetAgentKebabCase = (0, names_1.kebabCase)(targetAgentClassName);
35
+ const targetAgentPort = targetAgentComponent.port ?? 9000;
36
+ const npmScope = (0, npm_scope_1.getNpmScope)(tree);
37
+ // 1. Ensure the shared agent-connection project exists + has the A2A core client
38
+ await (0, agent_connection_1.ensureTypeScriptAgentConnectionProject)(tree);
39
+ (0, agent_connection_1.addTypeScriptCoreClient)(tree, 'a2a');
40
+ // 2. Generate the per-connection <Name>Client into app/
41
+ (0, devkit_1.generateFiles)(tree, (0, devkit_1.joinPathFragments)(__dirname, 'files', 'agent-connection', 'app'), (0, devkit_1.joinPathFragments)(agent_connection_1.AGENT_CONNECTION_PROJECT_DIR, 'src', 'app'), {
42
+ targetAgentKebabCase,
43
+ targetAgentClassName,
44
+ targetAgentPort,
45
+ }, { overwriteStrategy: devkit_1.OverwriteStrategy.KeepExisting });
46
+ // Add re-export to index.ts
47
+ await (0, ast_1.addStarExport)(tree, (0, devkit_1.joinPathFragments)(agent_connection_1.AGENT_CONNECTION_PROJECT_DIR, 'src', 'index.ts'), `./app/${targetAgentKebabCase}-client.js`);
48
+ // 3. AST transform agent.ts to add the remote A2A agent as a tool
49
+ const agentSourceDir = (0, devkit_1.joinPathFragments)(sourceProject.root, agentComponent.path ?? 'src');
50
+ const agentFilePath = (0, devkit_1.joinPathFragments)(agentSourceDir, 'agent.ts');
51
+ if (tree.exists(agentFilePath)) {
52
+ const clientClassName = `${targetAgentClassName}Client`;
53
+ const clientVarName = targetAgentClassName.charAt(0).toLowerCase() +
54
+ targetAgentClassName.slice(1);
55
+ const toolName = `ask${targetAgentClassName}`;
56
+ const toolVarName = `${clientVarName}Tool`;
57
+ // Ensure tool + z imports are available
58
+ await (0, ast_1.addDestructuredImport)(tree, agentFilePath, ['tool'], '@strands-agents/sdk');
59
+ await (0, ast_1.addDestructuredImport)(tree, agentFilePath, ['z'], 'zod');
60
+ await (0, ast_1.addDestructuredImport)(tree, agentFilePath, [clientClassName], `:${npmScope}/agent-connection`);
61
+ // Build the tool creation + Agent wiring. We wrap the getAgent body so
62
+ // the client can be created per-invocation (passing through sessionId).
63
+ const toolCreationBlock = `const ${clientVarName} = await ${clientClassName}.create(sessionId);
64
+ const ${toolVarName} = tool({
65
+ name: '${toolName}',
66
+ description: 'Delegate a question to the remote ${targetAgentClassName} A2A agent and return its reply.',
67
+ inputSchema: z.object({ prompt: z.string() }),
68
+ callback: async ({ prompt }) => (await ${clientVarName}.invoke(prompt)).toString(),
69
+ });`;
70
+ // Transform the arrow function that contains `new Agent`:
71
+ // - Expression body: wrap in block with tool creation and return
72
+ // - Block body: prepend tool creation statement
73
+ await (0, ast_1.applyGritQL)(tree, agentFilePath, `or { \`async ($p) => new Agent($args)\` => raw\`async ($p) => {
74
+ ${toolCreationBlock}
75
+ return new Agent($args);
76
+ }\` where { $program <: not contains \`${clientClassName}.create\` }, \`async ($p) => { $body }\` => raw\`async ($p) => {
77
+ ${toolCreationBlock}
78
+ $body
79
+ }\` where { $body <: contains \`new Agent($_)\`, $program <: not contains \`${clientClassName}.create\` } }`);
80
+ // Append the tool to the tools array (after existing items)
81
+ await (0, ast_1.applyGritQL)(tree, agentFilePath, `\`tools: [$items]\` => \`tools: [$items, ${toolVarName}]\` where { $items <: within \`new Agent($_)\`, $items <: not contains \`${toolVarName}\` }`);
82
+ }
83
+ // 4. Set up serve-local target — depend on the target agent's serve-local
84
+ // so running the host's serve-local also spins up the remote A2A agent.
85
+ const agentName = agentComponent.name ?? 'agent';
86
+ const serveLocalTargetName = `${agentName}-serve-local`;
87
+ const targetServeLocalTargetName = `${targetAgentComponentName}-serve-local`;
88
+ if (sourceProject.targets?.[serveLocalTargetName]) {
89
+ const target = sourceProject.targets[serveLocalTargetName];
90
+ target.dependsOn = [
91
+ ...(target.dependsOn ?? []),
92
+ {
93
+ projects: [targetProject.name],
94
+ target: targetServeLocalTargetName,
95
+ },
96
+ ];
97
+ (0, devkit_1.updateProjectConfiguration)(tree, sourceProject.name, sourceProject);
98
+ }
99
+ // 5. Add dependencies
100
+ (0, devkit_1.addDependenciesToPackageJson)(tree, (0, versions_1.withVersions)([
101
+ '@a2a-js/sdk',
102
+ '@strands-agents/sdk',
103
+ '@aws-lambda-powertools/parameters',
104
+ '@aws-sdk/client-appconfigdata',
105
+ 'aws4fetch',
106
+ '@aws-sdk/credential-providers',
107
+ 'zod',
108
+ ]), {});
109
+ await (0, metrics_1.addGeneratorMetricsIfApplicable)(tree, [
110
+ exports.TS_STRANDS_AGENT_A2A_CONNECTION_GENERATOR_INFO,
111
+ ]);
112
+ await (0, format_1.formatFilesInSubtree)(tree);
113
+ return () => {
114
+ (0, devkit_1.installPackagesTask)(tree);
115
+ };
116
+ };
117
+ exports.tsStrandsAgentA2aConnectionGenerator = tsStrandsAgentA2aConnectionGenerator;
118
+ exports.default = exports.tsStrandsAgentA2aConnectionGenerator;
119
+ //# sourceMappingURL=generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../../packages/nx-plugin/src/ts/strands-agent/a2a-connection/generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3
+ * SPDX-License-Identifier: Apache-2.0
4
+ */
5
+ import { ComponentMetadata } from '../../../utils/nx';
6
+
7
+ /**
8
+ * TypeScript types for options defined in schema.json
9
+ */
10
+ export interface TsStrandsAgentA2aConnectionGeneratorSchema {
11
+ sourceProject: string;
12
+ targetProject: string;
13
+ sourceComponent?: ComponentMetadata;
14
+ targetComponent?: ComponentMetadata;
15
+ }
@@ -0,0 +1,26 @@
1
+ {
2
+ "$schema": "https://json-schema.org/schema",
3
+ "$id": "ts#strands-agent#a2a-connection",
4
+ "title": "ts#strands-agent#a2a-connection",
5
+ "description": "Connect a TypeScript Strands Agent to an A2A agent",
6
+ "type": "object",
7
+ "properties": {
8
+ "sourceProject": {
9
+ "type": "string",
10
+ "description": "The project containing the host Strands Agent"
11
+ },
12
+ "targetProject": {
13
+ "type": "string",
14
+ "description": "The project containing the target A2A Strands Agent"
15
+ },
16
+ "sourceComponent": {
17
+ "type": "string",
18
+ "description": "The host agent component name"
19
+ },
20
+ "targetComponent": {
21
+ "type": "string",
22
+ "description": "The target A2A agent component name"
23
+ }
24
+ },
25
+ "required": ["sourceProject", "targetProject"]
26
+ }
@@ -0,0 +1,28 @@
1
+ import { A2AExpressServer } from '@strands-agents/sdk/a2a/express';
2
+ import express from 'express';
3
+ import { getAgent } from './agent.js';
4
+
5
+ const PORT = parseInt(process.env.PORT || '9000');
6
+ const HOST = '0.0.0.0';
7
+
8
+ void (async () => {
9
+ const httpUrl =
10
+ process.env.AGENTCORE_RUNTIME_URL ?? `http://localhost:${PORT}/`;
11
+
12
+ const server = new A2AExpressServer({
13
+ agent: await getAgent('default'),
14
+ name: '<%= agentNameClassName %>',
15
+ description:
16
+ 'A Strands Agent exposed via the Agent-to-Agent (A2A) protocol.',
17
+ host: HOST,
18
+ port: PORT,
19
+ httpUrl,
20
+ });
21
+
22
+ const app = express();
23
+ app.get('/ping', (_req, res) => res.status(200).json({ status: 'Healthy' }));
24
+ app.use(server.createMiddleware());
25
+ app.listen(PORT, HOST, () => {
26
+ console.log(`A2A server listening on ${HOST}:${PORT}`);
27
+ });
28
+ })();
@@ -9,7 +9,11 @@ RUN npm install @aws/aws-distro-opentelemetry-node-autoinstrumentation@<%- adotV
9
9
  # Copy bundled agent
10
10
  COPY --from=workspace <%- distDir %>/bundle/agent/<%- name %>/index.js /app
11
11
 
12
+ <%_ if (protocol === 'A2A') { _%>
13
+ EXPOSE 9000
14
+ <%_ } else { _%>
12
15
  EXPOSE 8080
16
+ <%_ } _%>
13
17
 
14
18
  # Auto-instrument with AWS Distro for OpenTelemetry
15
19
  # https://aws-otel.github.io/docs/getting-started/js-sdk/trace-metric-auto-instr
@@ -33,12 +33,16 @@ const tsStrandsAgentGenerator = async (tree, options) => {
33
33
  const distDir = (0, devkit_1.joinPathFragments)('dist', project.root);
34
34
  const computeType = options.computeType ?? 'BedrockAgentCoreRuntime';
35
35
  const auth = options.auth ?? 'IAM';
36
- // Generate example agent
37
- (0, devkit_1.generateFiles)(tree, (0, devkit_1.joinPathFragments)(__dirname, 'files', 'app'), targetSourceDir, {
36
+ const protocol = options.protocol ?? 'HTTP';
37
+ const templateContext = {
38
38
  name,
39
39
  agentNameClassName,
40
40
  distDir,
41
- }, { overwriteStrategy: devkit_1.OverwriteStrategy.KeepExisting });
41
+ };
42
+ // Generate common files shared by both protocols
43
+ (0, devkit_1.generateFiles)(tree, (0, devkit_1.joinPathFragments)(__dirname, 'files', 'common'), targetSourceDir, templateContext, { overwriteStrategy: devkit_1.OverwriteStrategy.KeepExisting });
44
+ // Generate protocol-specific files
45
+ (0, devkit_1.generateFiles)(tree, (0, devkit_1.joinPathFragments)(__dirname, 'files', protocol.toLowerCase()), targetSourceDir, templateContext, { overwriteStrategy: devkit_1.OverwriteStrategy.KeepExisting });
42
46
  if (computeType === 'BedrockAgentCoreRuntime') {
43
47
  const dockerImageTag = `${(0, npm_scope_1.getNpmScope)(tree)}-${name}:latest`;
44
48
  // Add bundle target
@@ -50,6 +54,7 @@ const tsStrandsAgentGenerator = async (tree, options) => {
50
54
  (0, devkit_1.generateFiles)(tree, (0, devkit_1.joinPathFragments)(__dirname, 'files', 'deploy'), targetSourceDir, {
51
55
  distDir,
52
56
  name,
57
+ protocol,
53
58
  adotVersion: versions_1.TS_VERSIONS['@aws/aws-distro-opentelemetry-node-autoinstrumentation'],
54
59
  }, { overwriteStrategy: devkit_1.OverwriteStrategy.KeepExisting });
55
60
  const dockerTargetName = `${agentTargetPrefix}-docker`;
@@ -73,26 +78,37 @@ const tsStrandsAgentGenerator = async (tree, options) => {
73
78
  dockerImageTag,
74
79
  iacProvider,
75
80
  auth,
81
+ serverProtocol: protocol,
76
82
  });
77
83
  }
78
84
  // Add dependencies
79
85
  (0, devkit_1.addDependenciesToPackageJson)(tree, (0, versions_1.withVersions)([
80
- '@trpc/server',
81
- '@trpc/client',
82
86
  'zod',
83
87
  '@strands-agents/sdk',
84
- 'ws',
85
- 'cors',
86
88
  '@aws-sdk/credential-providers',
87
89
  '@aws-sdk/client-appconfigdata',
88
90
  '@aws-lambda-powertools/parameters',
89
- 'aws4fetch',
90
91
  '@modelcontextprotocol/sdk',
91
- ]), (0, versions_1.withVersions)(['tsx', '@types/ws', '@types/cors', '@types/node']));
92
- // NB: we assign the local dev port from 8081 as 8080 is used by vscode server, and so conflicts
93
- // for those working on remote dev envirionments. The deployed agent in agentcore still runs on
94
- // 8080 as per the agentcore contract.
95
- const localDevPort = (0, port_1.assignPort)(tree, project, 8081);
92
+ ...(protocol === 'A2A'
93
+ ? ['express', '@a2a-js/sdk']
94
+ : [
95
+ '@trpc/server',
96
+ '@trpc/client',
97
+ 'ws',
98
+ 'cors',
99
+ 'aws4fetch',
100
+ ]),
101
+ ]), (0, versions_1.withVersions)([
102
+ 'tsx',
103
+ '@types/node',
104
+ ...(protocol === 'A2A'
105
+ ? ['@types/express']
106
+ : ['@types/ws', '@types/cors']),
107
+ ]));
108
+ // A2A servers use port 9000 as per the Strands A2A SDK default and AgentCore A2A contract.
109
+ // HTTP agents use port 8081+ to avoid conflict with VS Code server on 8080.
110
+ const localDevPortStart = protocol === 'A2A' ? 9000 : 8081;
111
+ const localDevPort = (0, port_1.assignPort)(tree, project, localDevPortStart);
96
112
  (0, devkit_1.updateProjectConfiguration)(tree, project.name, {
97
113
  ...project,
98
114
  targets: {
@@ -122,7 +138,7 @@ const tsStrandsAgentGenerator = async (tree, options) => {
122
138
  },
123
139
  },
124
140
  });
125
- (0, nx_1.addComponentGeneratorMetadata)(tree, project.name, exports.TS_STRANDS_AGENT_GENERATOR_INFO, targetSourceDirRelativeToProjectRoot, agentTargetPrefix, { port: localDevPort, rc: agentNameClassName, auth });
141
+ (0, nx_1.addComponentGeneratorMetadata)(tree, project.name, exports.TS_STRANDS_AGENT_GENERATOR_INFO, targetSourceDirRelativeToProjectRoot, agentTargetPrefix, { port: localDevPort, rc: agentNameClassName, auth, protocol });
126
142
  await (0, metrics_1.addGeneratorMetricsIfApplicable)(tree, [
127
143
  exports.TS_STRANDS_AGENT_GENERATOR_INFO,
128
144
  ]);
@@ -1 +1 @@
1
- {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../packages/nx-plugin/src/ts/strands-agent/generator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../packages/nx-plugin/src/ts/strands-agent/generator.ts"],"names":[],"mappings":"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"}
@@ -83,33 +83,18 @@ export class AgentCoreMcpClient {
83
83
  const {
84
84
  url,
85
85
  sessionId = randomUUID(),
86
- buildHeaders = async () => ({}),
86
+ buildHeaders = async (): Promise<Record<string, string>> => ({}),
87
87
  fetch: customFetch,
88
88
  } = options;
89
89
 
90
90
  // Create a custom fetch that adds required headers
91
91
  const fetchWithHeaders: typeof fetch = async (input, init) => {
92
- const headers = {
93
- 'X-Amzn-Bedrock-AgentCore-Runtime-Session-Id': sessionId,
94
- ...(await buildHeaders()),
95
- };
96
- const existingHeaders = init?.headers;
97
-
98
- const mergedInit = {
99
- ...init,
100
- headers: !existingHeaders
101
- ? headers
102
- : existingHeaders instanceof Headers
103
- ? (() => {
104
- const h = new Headers(existingHeaders);
105
- Object.entries(headers).forEach(([k, v]) => h.append(k, v));
106
- return h;
107
- })()
108
- : Array.isArray(existingHeaders)
109
- ? [...existingHeaders, ...Object.entries(headers)]
110
- : { ...existingHeaders, ...headers },
111
- };
112
- return (customFetch || fetch)(input, mergedInit);
92
+ const headers = new Headers(init?.headers);
93
+ headers.set('X-Amzn-Bedrock-AgentCore-Runtime-Session-Id', sessionId);
94
+ for (const [k, v] of Object.entries(await buildHeaders())) {
95
+ headers.set(k, v);
96
+ }
97
+ return (customFetch || fetch)(input, { ...init, headers });
113
98
  };
114
99
 
115
100
  // Create the transport
@@ -171,7 +156,7 @@ exports[`ts#strands-agent#mcp-connection generator > should match snapshot for a
171
156
  "import { McpClient } from '@strands-agents/sdk';
172
157
  import { AgentCoreMcpClient } from '../core/agentcore-mcp-client.js';
173
158
  import { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js';
174
- import { getAppConfig } from '@aws-lambda-powertools/parameters/appconfig';
159
+ import { getConnectedAgentRuntimeArn } from '../core/runtime-config.js';
175
160
 
176
161
  /**
177
162
  * Client for connecting to the InventoryMcp MCP server.
@@ -192,15 +177,8 @@ export class InventoryMcpClient {
192
177
  return new McpClient({ transport });
193
178
  }
194
179
 
195
- // Deployed: resolve ARN from runtime config, use AgentCore transport
196
- const config = (await getAppConfig('connection', {
197
- application: process.env.RUNTIME_CONFIG_APP_ID!,
198
- environment: 'default',
199
- transform: 'json',
200
- })) as Record<string, any>;
201
-
202
180
  return AgentCoreMcpClient.withIamAuth({
203
- agentRuntimeArn: config.agentRuntimes.InventoryMcp,
181
+ agentRuntimeArn: await getConnectedAgentRuntimeArn('InventoryMcp'),
204
182
  sessionId,
205
183
  });
206
184
  }
@@ -1,7 +1,7 @@
1
1
  import { McpClient } from '@strands-agents/sdk';
2
2
  import { AgentCoreMcpClient } from '../core/agentcore-mcp-client.js';
3
3
  import { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js';
4
- import { getAppConfig } from '@aws-lambda-powertools/parameters/appconfig';
4
+ import { getConnectedAgentRuntimeArn } from '../core/runtime-config.js';
5
5
 
6
6
  /**
7
7
  * Client for connecting to the <%- mcpServerClassName %> MCP server.
@@ -22,15 +22,8 @@ export class <%- mcpServerClassName %>Client {
22
22
  return new McpClient({ transport });
23
23
  }
24
24
 
25
- // Deployed: resolve ARN from runtime config, use AgentCore transport
26
- const config = (await getAppConfig('connection', {
27
- application: process.env.RUNTIME_CONFIG_APP_ID!,
28
- environment: 'default',
29
- transform: 'json',
30
- })) as Record<string, any>;
31
-
32
25
  return AgentCoreMcpClient.withIamAuth({
33
- agentRuntimeArn: config.agentRuntimes.<%- mcpServerClassName %>,
26
+ agentRuntimeArn: await getConnectedAgentRuntimeArn('<%- mcpServerClassName %>'),
34
27
  sessionId,
35
28
  });
36
29
  }
@@ -31,8 +31,9 @@ const tsStrandsAgentMcpConnectionGenerator = async (tree, options) => {
31
31
  const mcpServerKebabCase = (0, names_1.kebabCase)(mcpServerClassName);
32
32
  const mcpServerPort = mcpComponent.port ?? 8000;
33
33
  const npmScope = (0, npm_scope_1.getNpmScope)(tree);
34
- // 1. Ensure the shared agent-connection project exists
34
+ // 1. Ensure the shared agent-connection project exists + has the MCP core client
35
35
  await (0, agent_connection_1.ensureTypeScriptAgentConnectionProject)(tree);
36
+ (0, agent_connection_1.addTypeScriptCoreClient)(tree, 'mcp');
36
37
  // 2. Generate the per-connection <Name>Client into app/
37
38
  (0, devkit_1.generateFiles)(tree, (0, devkit_1.joinPathFragments)(__dirname, 'files', 'agent-connection', 'app'), (0, devkit_1.joinPathFragments)(agent_connection_1.AGENT_CONNECTION_PROJECT_DIR, 'src', 'app'), {
38
39
  mcpServerKebabCase,
@@ -78,9 +79,10 @@ const tsStrandsAgentMcpConnectionGenerator = async (tree, options) => {
78
79
  ];
79
80
  (0, devkit_1.updateProjectConfiguration)(tree, sourceProject.name, sourceProject);
80
81
  }
81
- // 5. Add dependencies
82
+ // 5. Add dependencies required by the MCP core client + vended client
82
83
  (0, devkit_1.addDependenciesToPackageJson)(tree, (0, versions_1.withVersions)([
83
84
  '@modelcontextprotocol/sdk',
85
+ '@strands-agents/sdk',
84
86
  '@aws-lambda-powertools/parameters',
85
87
  '@aws-sdk/client-appconfigdata',
86
88
  'aws4fetch',
@@ -1 +1 @@
1
- {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../../packages/nx-plugin/src/ts/strands-agent/mcp-connection/generator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../../packages/nx-plugin/src/ts/strands-agent/mcp-connection/generator.ts"],"names":[],"mappings":"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"}
@@ -16,6 +16,7 @@ const format_1 = require("../../../utils/format");
16
16
  const nx_1 = require("../../../utils/nx");
17
17
  const metrics_1 = require("../../../utils/metrics");
18
18
  const serve_local_1 = require("./serve-local");
19
+ const agent_runtime_config_1 = require("../../../connection/agent-runtime-config");
19
20
  exports.TS_STRANDS_AGENT_REACT_CONNECTION_GENERATOR_INFO = (0, nx_1.getGeneratorInfo)(__filename);
20
21
  async function tsStrandsAgentReactConnectionGenerator(tree, options) {
21
22
  const frontendProjectConfig = (0, nx_1.readProjectConfigurationUnqualified)(tree, options.sourceProject);
@@ -29,6 +30,10 @@ async function tsStrandsAgentReactConnectionGenerator(tree, options) {
29
30
  const auth = targetComponent?.auth ?? metadata?.auth ?? 'IAM';
30
31
  const agentProjectAlias = (0, npm_scope_1.toScopeAlias)(agentProjectConfig.name);
31
32
  const agentPath = targetComponent?.path ?? 'src/agent';
33
+ if (targetComponent?.protocol === 'A2A') {
34
+ throw new Error(`Cannot connect a React website to an A2A agent. ` +
35
+ `Consider generating an agent with the HTTP protocol instead.`);
36
+ }
32
37
  // Ensure the agent project has a wildcard path entry in tsconfig.base.json
33
38
  // so that deep imports (e.g., for the router type) resolve correctly
34
39
  ensureWildcardPathEntry(tree, agentProjectConfig.name, agentProjectConfig.root);
@@ -68,6 +73,13 @@ async function tsStrandsAgentReactConnectionGenerator(tree, options) {
68
73
  port: agentPort,
69
74
  targetComponent,
70
75
  });
76
+ // Expose the agent's runtime ARN to the frontend via the 'connection'
77
+ // namespace (which is published to runtime-config.json). The agent construct
78
+ // itself only registers to the 'agentcore' namespace by default.
79
+ await (0, agent_runtime_config_1.addAgentRuntimeToConnectionNamespace)(tree, {
80
+ agentNameKebabCase: (0, names_1.kebabCase)(agentNameClassName),
81
+ agentNameClassName,
82
+ });
71
83
  (0, devkit_1.addDependenciesToPackageJson)(tree, (0, versions_1.withVersions)([
72
84
  '@trpc/client',
73
85
  '@tanstack/react-query',
@@ -1 +1 @@
1
- {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../../packages/nx-plugin/src/ts/strands-agent/react-connection/generator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../../packages/nx-plugin/src/ts/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 TsStrandsAgentComputeType = 'BedrockAgentCoreRuntime' | 'None';
9
+ export type StrandsAgentProtocol = 'HTTP' | 'A2A';
9
10
 
10
11
  export type TsStrandsAgentAuth = 'IAM' | 'Cognito';
11
12
 
@@ -14,5 +15,6 @@ export interface TsStrandsAgentGeneratorSchema {
14
15
  name?: string;
15
16
  computeType?: TsStrandsAgentComputeType;
16
17
  auth?: TsStrandsAgentAuth;
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 tRPC/WebSocket 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.",
@@ -17,15 +17,43 @@ export declare function getPythonAgentConnectionModuleName(tree: Tree): string;
17
17
  */
18
18
  export declare function getPythonAgentConnectionPackageName(tree: Tree): string;
19
19
  /**
20
- * Ensure the shared TypeScript agent-connection project exists.
21
- * Creates the project with the core AgentCoreMcpClient if it doesn't exist.
20
+ * Directories (relative to this file) holding per-protocol core client
21
+ * template files. Per-connection generators select which set to emit so
22
+ * the MCP connection doesn't pull in the A2A client (or vice versa).
23
+ */
24
+ export declare const TS_CORE_TEMPLATES: {
25
+ readonly mcp: "core-mcp";
26
+ readonly a2a: "core-a2a";
27
+ };
28
+ export declare const PY_CORE_TEMPLATES: {
29
+ readonly mcp: "py-core-mcp";
30
+ readonly a2a: "py-core-a2a";
31
+ /** Shared SigV4 `httpx.Auth` used by both MCP and A2A clients. */
32
+ readonly auth: "py-core-auth";
33
+ };
34
+ /**
35
+ * Ensure the shared TypeScript agent-connection project exists and has the
36
+ * shared core helpers (runtime-config loader). Per-connection generators
37
+ * are responsible for emitting their own per-protocol core client templates.
22
38
  */
23
39
  export declare function ensureTypeScriptAgentConnectionProject(tree: Tree): Promise<void>;
40
+ /**
41
+ * Emit one of the TypeScript core client templates (mcp or a2a) into the
42
+ * agent-connection project's `src/core/` directory. Safe to call multiple
43
+ * times — `KeepExisting` preserves customised files.
44
+ */
45
+ export declare function addTypeScriptCoreClient(tree: Tree, kind: keyof typeof TS_CORE_TEMPLATES): void;
24
46
  /**
25
47
  * Ensure the shared Python agent-connection project exists.
26
- * Creates the project with the core AgentCoreMCPClient if it doesn't exist.
48
+ * Only creates the project shell per-connection generators are responsible
49
+ * for emitting their own core client templates.
27
50
  */
28
51
  export declare function ensurePythonAgentConnectionProject(tree: Tree): Promise<void>;
52
+ /**
53
+ * Emit a Python core client template (mcp / a2a / shared auth) into the
54
+ * agent-connection project's core directory.
55
+ */
56
+ export declare function addPythonCoreClient(tree: Tree, kind: keyof typeof PY_CORE_TEMPLATES): void;
29
57
  /**
30
58
  * Add a re-export to the Python agent-connection module's __init__.py.
31
59
  * Equivalent to addStarExport for TS.