@aws/nx-plugin 0.112.1 → 0.114.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.
- package/LICENSE-THIRD-PARTY +957 -429
- package/generators.json +33 -1
- package/package.json +1 -1
- package/src/connection/generator.d.ts +2 -2
- package/src/connection/generator.js +19 -0
- package/src/connection/generator.js.map +1 -1
- package/src/py/project/generator.js +4 -0
- package/src/py/project/generator.js.map +1 -1
- package/src/py/strands-agent/__snapshots__/generator.spec.ts.snap +42 -20
- package/src/py/strands-agent/a2a-connection/files/agent-connection/app/__targetAgentSnakeCase___client.py.template +6 -13
- package/src/py/strands-agent/a2a-connection/generator.js +1 -1
- package/src/py/strands-agent/files/a2a/main.py.template +24 -3
- package/src/py/strands-agent/files/ag-ui/main.py.template +3 -2
- package/src/py/strands-agent/files/common/agent.py.template +1 -2
- package/src/py/strands-agent/files/http/main.py.template +32 -13
- package/src/py/strands-agent/generator.js +11 -0
- package/src/py/strands-agent/generator.js.map +1 -1
- package/src/py/strands-agent/mcp-connection/__snapshots__/generator.spec.ts.snap +66 -59
- package/src/py/strands-agent/mcp-connection/files/agent-connection/app/__mcpServerSnakeCase___client.py.template +6 -14
- package/src/py/strands-agent/mcp-connection/generator.js +3 -3
- package/src/smithy/project/__snapshots__/generator.spec.ts.snap +2 -2
- package/src/smithy/project/files/build.Dockerfile.template +1 -1
- package/src/ts/mcp-server/__snapshots__/generator.spec.ts.snap +4 -3
- package/src/ts/mcp-server/files/http.ts.template +1 -1
- package/src/ts/mcp-server/files/server.ts.template +1 -1
- package/src/ts/mcp-server/files/stdio.ts.template +2 -1
- package/src/ts/nx-plugin/__snapshots__/generator.spec.ts.snap +3 -2
- package/src/ts/rdb/__snapshots__/generator.spec.ts.snap +54 -44
- package/src/ts/rdb/files/src/prisma.ts.template +54 -46
- package/src/ts/rdb/generator.js +3 -0
- package/src/ts/rdb/generator.js.map +1 -1
- package/src/ts/rdb/mcp-server-connection/__snapshots__/generator.spec.ts.snap +117 -0
- package/src/ts/rdb/mcp-server-connection/generator.d.ts +10 -0
- package/src/ts/rdb/mcp-server-connection/generator.js +59 -0
- package/src/ts/rdb/mcp-server-connection/generator.js.map +1 -0
- package/src/ts/rdb/mcp-server-connection/schema.d.ts +14 -0
- package/src/ts/rdb/mcp-server-connection/schema.json +22 -0
- package/src/ts/rdb/smithy-connection/__snapshots__/generator.spec.ts.snap +286 -0
- package/src/ts/rdb/smithy-connection/generator.d.ts +10 -0
- package/src/ts/rdb/smithy-connection/generator.js +72 -0
- package/src/ts/rdb/smithy-connection/generator.js.map +1 -0
- package/src/ts/rdb/smithy-connection/schema.d.ts +12 -0
- package/src/ts/rdb/smithy-connection/schema.json +18 -0
- package/src/ts/rdb/strands-agent-connection/__snapshots__/generator.spec.ts.snap +183 -0
- package/src/ts/rdb/strands-agent-connection/generator.d.ts +10 -0
- package/src/ts/rdb/strands-agent-connection/generator.js +65 -0
- package/src/ts/rdb/strands-agent-connection/generator.js.map +1 -0
- package/src/ts/rdb/strands-agent-connection/schema.d.ts +14 -0
- package/src/ts/rdb/strands-agent-connection/schema.json +22 -0
- package/src/ts/rdb/trpc-connection/__snapshots__/generator.spec.ts.snap +75 -0
- package/src/ts/rdb/trpc-connection/files/src/middleware/__rdbNameKebab__.ts.template +32 -0
- package/src/ts/rdb/trpc-connection/generator.d.ts +10 -0
- package/src/ts/rdb/trpc-connection/generator.js +41 -0
- package/src/ts/rdb/trpc-connection/generator.js.map +1 -0
- package/src/ts/rdb/trpc-connection/schema.d.ts +12 -0
- package/src/ts/rdb/trpc-connection/schema.json +18 -0
- package/src/ts/strands-agent/__snapshots__/generator.spec.ts.snap +17 -7
- package/src/ts/strands-agent/a2a-connection/files/agent-connection/app/__targetAgentKebabCase__-client.ts.template +6 -14
- package/src/ts/strands-agent/a2a-connection/generator.js +2 -3
- package/src/ts/strands-agent/a2a-connection/generator.js.map +1 -1
- package/src/ts/strands-agent/files/a2a/index.ts.template +12 -2
- package/src/ts/strands-agent/files/common/agent.ts.template +2 -4
- package/src/ts/strands-agent/files/http/init.ts.template +12 -1
- package/src/ts/strands-agent/files/http/router.ts.template +3 -2
- package/src/ts/strands-agent/generator.js +7 -0
- package/src/ts/strands-agent/generator.js.map +1 -1
- package/src/ts/strands-agent/mcp-connection/__snapshots__/generator.spec.ts.snap +46 -71
- package/src/ts/strands-agent/mcp-connection/files/agent-connection/app/__mcpServerKebabCase__-client.ts.template +8 -19
- package/src/ts/strands-agent/mcp-connection/generator.js +1 -1
- package/src/ts/strands-agent/mcp-connection/generator.js.map +1 -1
- package/src/utils/agent-connection/agent-connection.js +22 -0
- package/src/utils/agent-connection/agent-connection.js.map +1 -1
- package/src/utils/agent-connection/files/core-a2a/agentcore-a2a-client.ts.template +46 -57
- package/src/utils/agent-connection/files/core-mcp/agentcore-mcp-client.ts.template +35 -51
- package/src/utils/agent-connection/files/core-runtime-config/session-context.ts.template +21 -0
- package/src/utils/agent-connection/files/core-runtime-config/with-session-id.ts.template +27 -0
- package/src/utils/agent-connection/files/py-core-a2a/agentcore_a2a_client.py.template +44 -15
- package/src/utils/agent-connection/files/py-core-mcp/agentcore_mcp_client.py.template +50 -43
- package/src/utils/agent-connection/files/py-core-runtime-config/session_context.py.template +22 -0
- package/src/utils/agent-connection/files/py-core-runtime-config/with_session_id.py.template +44 -0
- package/src/utils/ast.js +9 -2
- package/src/utils/ast.js.map +1 -1
- package/src/utils/bundle/bundle.js +1 -0
- package/src/utils/bundle/bundle.js.map +1 -1
|
@@ -1,16 +1,20 @@
|
|
|
1
1
|
import { A2AExpressServer } from '@strands-agents/sdk/a2a/express';
|
|
2
|
-
import express from 'express';
|
|
2
|
+
import express, { type Request, type Response, type NextFunction } from 'express';
|
|
3
|
+
import { randomUUID } from 'node:crypto';
|
|
4
|
+
import { runWithSessionId, withSessionId } from '<%- agentConnectionImport %>';
|
|
3
5
|
import { getAgent } from './agent.js';
|
|
4
6
|
|
|
5
7
|
const PORT = parseInt(process.env.PORT || '9000');
|
|
6
8
|
const HOST = '0.0.0.0';
|
|
7
9
|
|
|
10
|
+
const SESSION_ID_HEADER = 'x-amzn-bedrock-agentcore-runtime-session-id';
|
|
11
|
+
|
|
8
12
|
void (async () => {
|
|
9
13
|
const httpUrl =
|
|
10
14
|
process.env.AGENTCORE_RUNTIME_URL ?? `http://localhost:${PORT}/`;
|
|
11
15
|
|
|
12
16
|
const server = new A2AExpressServer({
|
|
13
|
-
agent:
|
|
17
|
+
agent: withSessionId(getAgent),
|
|
14
18
|
name: '<%= agentNameClassName %>',
|
|
15
19
|
description:
|
|
16
20
|
'A Strands Agent exposed via the Agent-to-Agent (A2A) protocol.',
|
|
@@ -21,6 +25,12 @@ void (async () => {
|
|
|
21
25
|
|
|
22
26
|
const app = express();
|
|
23
27
|
app.get('/ping', (_req, res) => res.status(200).json({ status: 'Healthy' }));
|
|
28
|
+
// Bind the inbound session (or a fresh UUID) for downstream MCP / A2A calls.
|
|
29
|
+
app.use((req: Request, _res: Response, next: NextFunction) => {
|
|
30
|
+
const header = req.headers[SESSION_ID_HEADER];
|
|
31
|
+
const sessionId = (Array.isArray(header) ? header[0] : header) ?? randomUUID();
|
|
32
|
+
runWithSessionId(sessionId, () => next());
|
|
33
|
+
});
|
|
24
34
|
app.use(server.createMiddleware());
|
|
25
35
|
app.listen(PORT, HOST, () => {
|
|
26
36
|
console.log(`A2A server listening on ${HOST}:${PORT}`);
|
|
@@ -11,12 +11,10 @@ const multiply = tool({
|
|
|
11
11
|
callback: ({ a, b }) => a * b,
|
|
12
12
|
});
|
|
13
13
|
|
|
14
|
-
export const getAgent = async (
|
|
15
|
-
|
|
16
|
-
return new Agent({
|
|
14
|
+
export const getAgent = async () =>
|
|
15
|
+
new Agent({
|
|
17
16
|
systemPrompt: `You are a mathematical wizard.
|
|
18
17
|
Use your tools for mathematical tasks.
|
|
19
18
|
Refer to tools as your 'spellbook'.`,
|
|
20
19
|
tools: [multiply],
|
|
21
20
|
});
|
|
22
|
-
};
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { initTRPC } from '@trpc/server';
|
|
2
|
+
import { enterSessionContext } from '<%- agentConnectionImport %>';
|
|
2
3
|
|
|
3
4
|
export interface Context {
|
|
4
5
|
sessionId: string;
|
|
@@ -6,4 +7,14 @@ export interface Context {
|
|
|
6
7
|
|
|
7
8
|
export const t = initTRPC.context<Context>().create();
|
|
8
9
|
|
|
9
|
-
|
|
10
|
+
/**
|
|
11
|
+
* Bind the inbound session onto the current async flow so downstream MCP /
|
|
12
|
+
* A2A clients forward it on outbound calls. Uses `enterWith` so the binding
|
|
13
|
+
* persists across subscription iterations.
|
|
14
|
+
*/
|
|
15
|
+
const sessionMiddleware = t.middleware(({ ctx, next }) => {
|
|
16
|
+
enterSessionContext(ctx.sessionId);
|
|
17
|
+
return next();
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
export const publicProcedure = t.procedure.use(sessionMiddleware);
|
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
import { publicProcedure, t } from './init.js';
|
|
2
2
|
import { z } from 'zod';
|
|
3
3
|
import { zAsyncIterable } from './schema/z-async-iterable.js';
|
|
4
|
+
import { withSessionId } from '<%- agentConnectionImport %>';
|
|
4
5
|
import { getAgent } from './agent.js';
|
|
5
6
|
|
|
6
7
|
export const router = t.router;
|
|
7
8
|
|
|
9
|
+
const agent = withSessionId(getAgent);
|
|
10
|
+
|
|
8
11
|
export const appRouter = router({
|
|
9
12
|
invoke: publicProcedure
|
|
10
13
|
.input(z.object({ message: z.string() }))
|
|
@@ -15,8 +18,6 @@ export const appRouter = router({
|
|
|
15
18
|
}),
|
|
16
19
|
)
|
|
17
20
|
.subscription(async function* (opts) {
|
|
18
|
-
const agent = await getAgent(opts.ctx.sessionId);
|
|
19
|
-
|
|
20
21
|
for await (const event of agent.stream(opts.input.message)) {
|
|
21
22
|
if (
|
|
22
23
|
event.type === 'modelStreamUpdateEvent' &&
|
|
@@ -18,6 +18,7 @@ const shared_constructs_1 = require("../../utils/shared-constructs");
|
|
|
18
18
|
const agent_core_constructs_1 = require("../../utils/agent-core-constructs/agent-core-constructs");
|
|
19
19
|
const port_1 = require("../../utils/port");
|
|
20
20
|
const fs_1 = require("../../utils/fs");
|
|
21
|
+
const agent_connection_1 = require("../../utils/agent-connection/agent-connection");
|
|
21
22
|
exports.TS_STRANDS_AGENT_GENERATOR_INFO = (0, nx_1.getGeneratorInfo)(__filename);
|
|
22
23
|
const tsStrandsAgentGenerator = async (tree, options) => {
|
|
23
24
|
const project = (0, nx_1.readProjectConfigurationUnqualified)(tree, options.project);
|
|
@@ -40,10 +41,16 @@ const tsStrandsAgentGenerator = async (tree, options) => {
|
|
|
40
41
|
`Use a Python Strands Agent with protocol='AG-UI' instead, or choose 'HTTP' or 'A2A' for TypeScript. ` +
|
|
41
42
|
`Track TypeScript support at https://github.com/strands-agents/sdk-typescript/issues/347`);
|
|
42
43
|
}
|
|
44
|
+
// Ensure the shared agent-connection project exists so the server entry
|
|
45
|
+
// point can import `runWithSessionId` and propagate the AgentCore session
|
|
46
|
+
// ID to any downstream MCP / A2A clients a later connection generator
|
|
47
|
+
// wires into this agent.
|
|
48
|
+
await (0, agent_connection_1.ensureTypeScriptAgentConnectionProject)(tree);
|
|
43
49
|
const templateContext = {
|
|
44
50
|
name,
|
|
45
51
|
agentNameClassName,
|
|
46
52
|
distDir,
|
|
53
|
+
agentConnectionImport: `:${(0, npm_scope_1.getNpmScope)(tree)}/agent-connection`,
|
|
47
54
|
};
|
|
48
55
|
// Generate common files shared by both protocols
|
|
49
56
|
(0, devkit_1.generateFiles)(tree, (0, devkit_1.joinPathFragments)(__dirname, 'files', 'common'), targetSourceDir, templateContext, { overwriteStrategy: devkit_1.OverwriteStrategy.KeepExisting });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../packages/nx-plugin/src/ts/strands-agent/generator.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACH,uCASoB;AAEpB,uCAMwB;AACxB,iDAAsE;AACtE,+CAA0D;AAC1D,6CAA2D;AAC3D,mDAAiE;AACjE,qDAAoD;AACpD,sDAAsE;AACtE,yCAAqD;AACrD,qEAA0E;AAC1E,mGAAwF;AAExF,2CAA8C;AAC9C,uCAA4C;
|
|
1
|
+
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../packages/nx-plugin/src/ts/strands-agent/generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,34 +2,33 @@
|
|
|
2
2
|
|
|
3
3
|
exports[`ts#strands-agent#mcp-connection generator > should match snapshot for agent-connection src files > agent-connection-index.ts 1`] = `
|
|
4
4
|
"export * from './app/inventory-mcp-client.js';
|
|
5
|
+
export * from './core/with-session-id.js';
|
|
6
|
+
export * from './core/session-context.js';
|
|
5
7
|
// Export your library code here
|
|
6
8
|
"
|
|
7
9
|
`;
|
|
8
10
|
|
|
9
11
|
exports[`ts#strands-agent#mcp-connection generator > should match snapshot for agent-connection src files > agentcore-mcp-client.ts 1`] = `
|
|
10
|
-
"import {
|
|
11
|
-
import { McpClient } from '@strands-agents/sdk';
|
|
12
|
+
"import { McpClient } from '@strands-agents/sdk';
|
|
12
13
|
import { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js';
|
|
13
14
|
import { AwsClient } from 'aws4fetch';
|
|
14
15
|
import { fromNodeProviderChain } from '@aws-sdk/credential-providers';
|
|
16
|
+
import { getCurrentSessionId } from './session-context.js';
|
|
17
|
+
|
|
18
|
+
const SESSION_HEADER = 'X-Amzn-Bedrock-AgentCore-Runtime-Session-Id';
|
|
15
19
|
|
|
16
20
|
/**
|
|
17
|
-
* Common options for creating an AgentCore MCP client
|
|
21
|
+
* Common options for creating an AgentCore MCP client.
|
|
18
22
|
*/
|
|
19
23
|
export interface AgentCoreMcpClientOptions {
|
|
20
24
|
/**
|
|
21
|
-
* The ARN of the Bedrock AgentCore Runtime to connect to
|
|
25
|
+
* The ARN of the Bedrock AgentCore Runtime to connect to.
|
|
22
26
|
*/
|
|
23
27
|
agentRuntimeArn: string;
|
|
24
|
-
/**
|
|
25
|
-
* Session ID to include in request headers.
|
|
26
|
-
* Defaults to a random UUID if not provided.
|
|
27
|
-
*/
|
|
28
|
-
sessionId?: string;
|
|
29
28
|
}
|
|
30
29
|
|
|
31
30
|
/**
|
|
32
|
-
* Options for creating an AgentCore MCP client with IAM authentication
|
|
31
|
+
* Options for creating an AgentCore MCP client with IAM authentication.
|
|
33
32
|
*/
|
|
34
33
|
export interface AgentCoreMcpClientIamOptions extends AgentCoreMcpClientOptions {
|
|
35
34
|
/**
|
|
@@ -40,32 +39,34 @@ export interface AgentCoreMcpClientIamOptions extends AgentCoreMcpClientOptions
|
|
|
40
39
|
}
|
|
41
40
|
|
|
42
41
|
/**
|
|
43
|
-
* Options for creating an AgentCore MCP client with JWT authentication
|
|
42
|
+
* Options for creating an AgentCore MCP client with JWT authentication.
|
|
44
43
|
*/
|
|
45
44
|
export interface AgentCoreMcpClientJwtOptions extends AgentCoreMcpClientOptions {
|
|
46
45
|
/**
|
|
47
|
-
* A function which returns the JWT access token used to authenticate
|
|
46
|
+
* A function which returns the JWT access token used to authenticate.
|
|
48
47
|
*/
|
|
49
48
|
accessTokenProvider: () => Promise<string>;
|
|
50
49
|
}
|
|
51
50
|
|
|
52
51
|
/**
|
|
53
|
-
*
|
|
52
|
+
* Options for creating an MCP client with no auth (local dev).
|
|
54
53
|
*/
|
|
54
|
+
export interface AgentCoreMcpClientNoAuthOptions {
|
|
55
|
+
/** Full URL of the local MCP endpoint. */
|
|
56
|
+
url: string;
|
|
57
|
+
}
|
|
58
|
+
|
|
55
59
|
interface CreateOptions {
|
|
56
60
|
url: string;
|
|
57
|
-
sessionId?: string;
|
|
58
61
|
buildHeaders?: () => Promise<Record<string, string>>;
|
|
59
62
|
fetch?: typeof fetch;
|
|
60
63
|
}
|
|
61
64
|
|
|
62
|
-
/**
|
|
63
|
-
* Factory for clients to call MCP servers hosted on Bedrock AgentCore Runtime
|
|
64
|
-
*/
|
|
65
|
+
/** Factory for MCP clients that forward the current async-context session. */
|
|
65
66
|
export class AgentCoreMcpClient {
|
|
66
67
|
/**
|
|
67
|
-
* Construct the invocation URL for an AgentCore runtime ARN and extract
|
|
68
|
-
* ARN format: arn:partition:service:region:account-id:resource
|
|
68
|
+
* Construct the invocation URL for an AgentCore runtime ARN and extract
|
|
69
|
+
* the region. ARN format: arn:partition:service:region:account-id:resource
|
|
69
70
|
*/
|
|
70
71
|
private static buildUrl(agentRuntimeArn: string): {
|
|
71
72
|
region: string;
|
|
@@ -76,78 +77,65 @@ export class AgentCoreMcpClient {
|
|
|
76
77
|
return { region, url };
|
|
77
78
|
}
|
|
78
79
|
|
|
79
|
-
/**
|
|
80
|
-
* Internal method to create an MCP client
|
|
81
|
-
*/
|
|
82
80
|
private static create(options: CreateOptions): McpClient {
|
|
83
81
|
const {
|
|
84
82
|
url,
|
|
85
|
-
sessionId = randomUUID(),
|
|
86
83
|
buildHeaders = async (): Promise<Record<string, string>> => ({}),
|
|
87
84
|
fetch: customFetch,
|
|
88
85
|
} = options;
|
|
89
|
-
|
|
90
|
-
// Create a custom fetch that adds required headers
|
|
91
86
|
const fetchWithHeaders: typeof fetch = async (input, init) => {
|
|
92
87
|
const headers = new Headers(init?.headers);
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
88
|
+
const sessionId = getCurrentSessionId();
|
|
89
|
+
if (sessionId) headers.set(SESSION_HEADER, sessionId);
|
|
90
|
+
const extra = await buildHeaders();
|
|
91
|
+
for (const k of Object.keys(extra)) {
|
|
92
|
+
headers.set(k, extra[k]);
|
|
96
93
|
}
|
|
97
|
-
return (customFetch
|
|
94
|
+
return (customFetch ?? fetch)(input, { ...init, headers });
|
|
98
95
|
};
|
|
99
|
-
|
|
100
|
-
// Create the transport
|
|
101
96
|
const transport = new StreamableHTTPClientTransport(new URL(url), {
|
|
102
97
|
fetch: fetchWithHeaders,
|
|
103
98
|
});
|
|
104
|
-
|
|
105
|
-
// Create and return the MCP client
|
|
106
99
|
return new McpClient({ transport });
|
|
107
100
|
}
|
|
108
101
|
|
|
109
102
|
/**
|
|
110
|
-
*
|
|
103
|
+
* SigV4-authenticated client for a Bedrock AgentCore runtime.
|
|
111
104
|
*/
|
|
112
105
|
static withIamAuth(options: AgentCoreMcpClientIamOptions): McpClient {
|
|
113
|
-
const {
|
|
106
|
+
const { region, url } = AgentCoreMcpClient.buildUrl(
|
|
107
|
+
options.agentRuntimeArn,
|
|
108
|
+
);
|
|
114
109
|
const credentialProvider =
|
|
115
110
|
options.credentialProvider ?? fromNodeProviderChain();
|
|
116
|
-
const { region, url } = AgentCoreMcpClient.buildUrl(agentRuntimeArn);
|
|
117
|
-
|
|
118
|
-
// Create a SigV4 signing fetch function
|
|
119
111
|
const sigv4Fetch: typeof fetch = async (...args) => {
|
|
120
|
-
const credentials = await credentialProvider();
|
|
121
112
|
const client = new AwsClient({
|
|
122
|
-
...
|
|
113
|
+
...(await credentialProvider()),
|
|
123
114
|
service: 'bedrock-agentcore',
|
|
124
115
|
region,
|
|
125
116
|
});
|
|
126
117
|
return client.fetch(...args);
|
|
127
118
|
};
|
|
128
|
-
|
|
129
|
-
return AgentCoreMcpClient.create({
|
|
130
|
-
url,
|
|
131
|
-
sessionId,
|
|
132
|
-
fetch: sigv4Fetch,
|
|
133
|
-
});
|
|
119
|
+
return AgentCoreMcpClient.create({ url, fetch: sigv4Fetch });
|
|
134
120
|
}
|
|
135
121
|
|
|
136
122
|
/**
|
|
137
|
-
*
|
|
123
|
+
* Bearer-authenticated client for a Bedrock AgentCore runtime.
|
|
138
124
|
*/
|
|
139
125
|
static withJwtAuth(options: AgentCoreMcpClientJwtOptions): McpClient {
|
|
140
|
-
const {
|
|
141
|
-
const { url } = AgentCoreMcpClient.buildUrl(agentRuntimeArn);
|
|
142
|
-
|
|
126
|
+
const { url } = AgentCoreMcpClient.buildUrl(options.agentRuntimeArn);
|
|
143
127
|
return AgentCoreMcpClient.create({
|
|
144
128
|
url,
|
|
145
|
-
sessionId,
|
|
146
129
|
buildHeaders: async () => ({
|
|
147
|
-
Authorization: \`Bearer \${await accessTokenProvider()}\`,
|
|
130
|
+
Authorization: \`Bearer \${await options.accessTokenProvider()}\`,
|
|
148
131
|
}),
|
|
149
132
|
});
|
|
150
133
|
}
|
|
134
|
+
|
|
135
|
+
/** For local dev — plain HTTP, no auth. */
|
|
136
|
+
static withoutAuth(options: AgentCoreMcpClientNoAuthOptions): McpClient {
|
|
137
|
+
return AgentCoreMcpClient.create({ url: options.url });
|
|
138
|
+
}
|
|
151
139
|
}
|
|
152
140
|
"
|
|
153
141
|
`;
|
|
@@ -155,31 +143,18 @@ export class AgentCoreMcpClient {
|
|
|
155
143
|
exports[`ts#strands-agent#mcp-connection generator > should match snapshot for agent-connection src files > inventory-mcp-client.ts 1`] = `
|
|
156
144
|
"import { McpClient } from '@strands-agents/sdk';
|
|
157
145
|
import { AgentCoreMcpClient } from '../core/agentcore-mcp-client.js';
|
|
158
|
-
import { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js';
|
|
159
146
|
import { getConnectedAgentRuntimeArn } from '../core/runtime-config.js';
|
|
160
147
|
|
|
161
|
-
/**
|
|
162
|
-
* Client for connecting to the InventoryMcp MCP server.
|
|
163
|
-
*
|
|
164
|
-
* In deployed mode: resolves the AgentCore runtime ARN from runtime config
|
|
165
|
-
* and uses SigV4-authenticated AgentCore transport.
|
|
166
|
-
*
|
|
167
|
-
* In local mode (SERVE_LOCAL env var set): connects directly
|
|
168
|
-
* to the local MCP server via Streamable HTTP.
|
|
169
|
-
*/
|
|
148
|
+
/** Client for the InventoryMcp MCP server. */
|
|
170
149
|
export class InventoryMcpClient {
|
|
171
|
-
static async create(
|
|
150
|
+
static async create(): Promise<McpClient> {
|
|
172
151
|
if (process.env.SERVE_LOCAL === 'true') {
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
);
|
|
177
|
-
return new McpClient({ transport });
|
|
152
|
+
return AgentCoreMcpClient.withoutAuth({
|
|
153
|
+
url: 'http://localhost:8082/mcp',
|
|
154
|
+
});
|
|
178
155
|
}
|
|
179
|
-
|
|
180
156
|
return AgentCoreMcpClient.withIamAuth({
|
|
181
157
|
agentRuntimeArn: await getConnectedAgentRuntimeArn('InventoryMcp'),
|
|
182
|
-
sessionId,
|
|
183
158
|
});
|
|
184
159
|
}
|
|
185
160
|
}
|
|
@@ -199,7 +174,7 @@ const multiply = tool({
|
|
|
199
174
|
});
|
|
200
175
|
|
|
201
176
|
export const getAgent = async (sessionId: string) => {
|
|
202
|
-
const inventoryMcp = await InventoryMcpClient.create(
|
|
177
|
+
const inventoryMcp = await InventoryMcpClient.create();
|
|
203
178
|
return new Agent({
|
|
204
179
|
systemPrompt: 'You are a mathematical wizard.',
|
|
205
180
|
tools: [inventoryMcp, multiply],
|
|
@@ -1,30 +1,19 @@
|
|
|
1
1
|
import { McpClient } from '@strands-agents/sdk';
|
|
2
2
|
import { AgentCoreMcpClient } from '../core/agentcore-mcp-client.js';
|
|
3
|
-
import { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js';
|
|
4
3
|
import { getConnectedAgentRuntimeArn } from '../core/runtime-config.js';
|
|
5
4
|
|
|
6
|
-
/**
|
|
7
|
-
* Client for connecting to the <%- mcpServerClassName %> MCP server.
|
|
8
|
-
*
|
|
9
|
-
* In deployed mode: resolves the AgentCore runtime ARN from runtime config
|
|
10
|
-
* and uses SigV4-authenticated AgentCore transport.
|
|
11
|
-
*
|
|
12
|
-
* In local mode (SERVE_LOCAL env var set): connects directly
|
|
13
|
-
* to the local MCP server via Streamable HTTP.
|
|
14
|
-
*/
|
|
5
|
+
/** Client for the <%- mcpServerClassName %> MCP server. */
|
|
15
6
|
export class <%- mcpServerClassName %>Client {
|
|
16
|
-
static async create(
|
|
7
|
+
static async create(): Promise<McpClient> {
|
|
17
8
|
if (process.env.SERVE_LOCAL === 'true') {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
);
|
|
22
|
-
return new McpClient({ transport });
|
|
9
|
+
return AgentCoreMcpClient.withoutAuth({
|
|
10
|
+
url: 'http://localhost:<%- mcpServerPort %>/mcp',
|
|
11
|
+
});
|
|
23
12
|
}
|
|
24
|
-
|
|
25
13
|
return AgentCoreMcpClient.withIamAuth({
|
|
26
|
-
agentRuntimeArn: await getConnectedAgentRuntimeArn(
|
|
27
|
-
|
|
14
|
+
agentRuntimeArn: await getConnectedAgentRuntimeArn(
|
|
15
|
+
'<%- mcpServerClassName %>',
|
|
16
|
+
),
|
|
28
17
|
});
|
|
29
18
|
}
|
|
30
19
|
}
|
|
@@ -50,7 +50,7 @@ const tsStrandsAgentMcpConnectionGenerator = async (tree, options) => {
|
|
|
50
50
|
const clientVarName = mcpServerClassName.charAt(0).toLowerCase() + mcpServerClassName.slice(1);
|
|
51
51
|
// Add import for the client
|
|
52
52
|
await (0, ast_1.addDestructuredImport)(tree, agentFilePath, [clientClassName], `:${npmScope}/agent-connection`);
|
|
53
|
-
const clientCreationStmt = `const ${clientVarName} = await ${clientClassName}.create(
|
|
53
|
+
const clientCreationStmt = `const ${clientVarName} = await ${clientClassName}.create();`;
|
|
54
54
|
// Transform the arrow function that contains `new Agent`:
|
|
55
55
|
// - Expression body: wrap in block with client creation and return
|
|
56
56
|
// - Block body: prepend client creation statement
|
|
@@ -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":";;;AAAA;;;GAGG;AACH,uCASoB;AAEpB,0CAK2B;AAC3B,oDAAyE;AACzE,kDAA6D;AAC7D,gDAAiD;AACjD,sDAAuD;AACvD,wDAAuD;AACvD,4CAI4B;AAC5B,uFAI0D;AAE7C,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,MAAM,QAAQ,GAAG,IAAA,uBAAW,EAAC,IAAI,CAAC,CAAC;IAEnC,iFAAiF;IACjF,MAAM,IAAA,yDAAsC,EAAC,IAAI,CAAC,CAAC;IACnD,IAAA,0CAAuB,EAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAErC,wDAAwD;IACxD,IAAA,sBAAa,EACX,IAAI,EACJ,IAAA,0BAAiB,EAAC,SAAS,EAAE,OAAO,EAAE,kBAAkB,EAAE,KAAK,CAAC,EAChE,IAAA,0BAAiB,EAAC,+CAA4B,EAAE,KAAK,EAAE,KAAK,CAAC,EAC7D;QACE,kBAAkB;QAClB,kBAAkB;QAClB,aAAa;KACd,EACD,EAAE,iBAAiB,EAAE,0BAAiB,CAAC,YAAY,EAAE,CACtD,CAAC;IAEF,4BAA4B;IAC5B,MAAM,IAAA,mBAAa,EACjB,IAAI,EACJ,IAAA,0BAAiB,EAAC,+CAA4B,EAAE,KAAK,EAAE,UAAU,CAAC,EAClE,SAAS,kBAAkB,YAAY,CACxC,CAAC;IAEF,6CAA6C;IAC7C,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,GACjB,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAE3E,4BAA4B;QAC5B,MAAM,IAAA,2BAAqB,EACzB,IAAI,EACJ,aAAa,EACb,CAAC,eAAe,CAAC,EACjB,IAAI,QAAQ,mBAAmB,CAChC,CAAC;QAEF,MAAM,kBAAkB,GAAG,SAAS,aAAa,YAAY,eAAe,YAAY,CAAC;QAEzF,0DAA0D;QAC1D,mEAAmE;QACnE,kDAAkD;QAClD,MAAM,IAAA,iBAAW,EACf,IAAI,EACJ,aAAa,EACb;IACF,kBAAkB;;yCAEmB,eAAe;IACpD,kBAAkB;;8EAEwD,eAAe,eAAe,CACvG,CAAC;QAEF,oCAAoC;QACpC,MAAM,IAAA,iBAAW,EACf,IAAI,EACJ,aAAa,EACb,oCAAoC,aAAa,oFAAoF,aAAa,MAAM,CACzJ,CAAC;IACJ,CAAC;IAED,+BAA+B;IAC/B,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,IAAA,sCAAiC,EAAC,aAAa,EAAE,oBAAoB,EAAE;YACrE,QAAQ,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC;YAC9B,MAAM,EAAE,uBAAuB;SAChC,CAAC,CAAC;QACH,IAAA,mCAA0B,EAAC,IAAI,EAAE,aAAa,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;IACtE,CAAC;IAED,sEAAsE;IACtE,IAAA,qCAA4B,EAC1B,IAAI,EACJ,IAAA,uBAAY,EAAC;QACX,2BAA2B;QAC3B,qBAAqB;QACrB,mCAAmC;QACnC,+BAA+B;QAC/B,WAAW;QACX,+BAA+B;KAChC,CAAC,EACF,EAAE,CACH,CAAC;IAEF,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;AA3IW,QAAA,oCAAoC,wCA2I/C;AAEF,kBAAe,4CAAoC,CAAC"}
|
|
@@ -87,6 +87,11 @@ async function ensureTypeScriptAgentConnectionProject(tree) {
|
|
|
87
87
|
// Shared core helpers — emitted regardless of which per-protocol core
|
|
88
88
|
// client the caller needs, so both MCP and A2A clients can import from them.
|
|
89
89
|
(0, devkit_1.generateFiles)(tree, (0, devkit_1.joinPathFragments)(__dirname, 'files', 'core-runtime-config'), (0, devkit_1.joinPathFragments)(exports.AGENT_CONNECTION_PROJECT_DIR, 'src', 'core'), {}, { overwriteStrategy: devkit_1.OverwriteStrategy.KeepExisting });
|
|
90
|
+
// Re-export session-context helpers so strands-agent server entry points
|
|
91
|
+
// can set the current session on each inbound request without pulling in
|
|
92
|
+
// the agent-connection internals.
|
|
93
|
+
await (0, ast_1.addStarExport)(tree, (0, devkit_1.joinPathFragments)(exports.AGENT_CONNECTION_PROJECT_DIR, 'src', 'index.ts'), './core/session-context.js');
|
|
94
|
+
await (0, ast_1.addStarExport)(tree, (0, devkit_1.joinPathFragments)(exports.AGENT_CONNECTION_PROJECT_DIR, 'src', 'index.ts'), './core/with-session-id.js');
|
|
90
95
|
}
|
|
91
96
|
/**
|
|
92
97
|
* Emit one of the TypeScript core client templates (mcp or a2a) into the
|
|
@@ -127,6 +132,13 @@ async function ensurePythonAgentConnectionProject(tree) {
|
|
|
127
132
|
// Shared core helpers — emitted regardless of which per-protocol core
|
|
128
133
|
// client the caller needs, so both MCP and A2A clients can import them.
|
|
129
134
|
(0, devkit_1.generateFiles)(tree, (0, devkit_1.joinPathFragments)(__dirname, 'files', 'py-core-runtime-config'), coreDir, {}, { overwriteStrategy: devkit_1.OverwriteStrategy.KeepExisting });
|
|
135
|
+
// Re-export session-context helpers so strands-agent server entry points
|
|
136
|
+
// can set the current session on each inbound request without importing
|
|
137
|
+
// the agent-connection internals directly.
|
|
138
|
+
const moduleInitPath = (0, devkit_1.joinPathFragments)(moduleDir, '__init__.py');
|
|
139
|
+
await addPythonReExport(tree, moduleInitPath, '.core.session_context', 'get_current_session_id');
|
|
140
|
+
await addPythonReExport(tree, moduleInitPath, '.core.session_context', 'session_id_context');
|
|
141
|
+
await addPythonReExport(tree, moduleInitPath, '.core.with_session_id', 'with_session_id');
|
|
130
142
|
// Shared core helpers depend on aws-lambda-powertools for AppConfig access.
|
|
131
143
|
(0, py_1.addDependenciesToPyProjectToml)(tree, projectDir, ['aws-lambda-powertools']);
|
|
132
144
|
}
|
|
@@ -153,6 +165,16 @@ async function addPythonReExport(tree, initFilePath, fromModule, importName) {
|
|
|
153
165
|
}
|
|
154
166
|
const importLine = `from ${fromModule} import ${importName}`;
|
|
155
167
|
const allEntry = `"${importName}"`;
|
|
168
|
+
// If there's already an import from the same module, merge into its name list
|
|
169
|
+
// (ruff I001 rejects two `from X import ...` lines for the same module).
|
|
170
|
+
const mergedImport = await (0, ast_1.applyGritQL)(tree, initFilePath, py(`\`from ${fromModule} import $names\` where {
|
|
171
|
+
$names <: not contains \`${importName}\`,
|
|
172
|
+
$names += \`, ${importName}\`
|
|
173
|
+
}`));
|
|
174
|
+
if (mergedImport) {
|
|
175
|
+
await (0, ast_1.applyGritQL)(tree, initFilePath, py(`\`__all__ = [$items]\` where { $items += \`, ${allEntry}\` }`));
|
|
176
|
+
return;
|
|
177
|
+
}
|
|
156
178
|
// Try to append import after existing import using +=
|
|
157
179
|
const appendedImport = await (0, ast_1.applyGritQL)(tree, initFilePath, py(`\`from $mod import $name\` as $stmt where {
|
|
158
180
|
$program <: not contains \`${importName}\`,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-connection.js","sourceRoot":"","sources":["../../../../../../packages/nx-plugin/src/utils/agent-connection/agent-connection.ts"],"names":[],"mappings":";;;AAmCA,gFAMC;AAKD,gFAMC;AAKD,kFAMC;AAwBD,
|
|
1
|
+
{"version":3,"file":"agent-connection.js","sourceRoot":"","sources":["../../../../../../packages/nx-plugin/src/utils/agent-connection/agent-connection.ts"],"names":[],"mappings":"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"}
|