@aws/nx-plugin 1.0.0-rc.11 → 1.0.0-rc.13
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 +81 -3
- package/generators.json +31 -1
- package/package.json +2 -2
- package/sdk/agentcore-gateway.d.ts +6 -0
- package/sdk/agentcore-gateway.js +11 -0
- package/sdk/agentcore-gateway.js.map +1 -0
- package/sdk/license.d.ts +4 -4
- package/sdk/license.js +5 -4
- package/sdk/license.js.map +1 -1
- package/sdk/py.d.ts +6 -6
- package/sdk/py.js +7 -7
- package/sdk/py.js.map +1 -1
- package/sdk/ts.d.ts +18 -14
- package/sdk/ts.js +38 -32
- package/sdk/ts.js.map +1 -1
- package/src/agentcore-gateway/files/cedar/policies/README.md +52 -0
- package/src/agentcore-gateway/files/cedar/policies/permit-all.cedar +11 -0
- package/src/agentcore-gateway/files/project/serve-local.ts.template +133 -0
- package/src/agentcore-gateway/generator.d.ts +25 -0
- package/src/agentcore-gateway/generator.js +129 -0
- package/src/agentcore-gateway/generator.js.map +1 -0
- package/src/agentcore-gateway/mcp-connection/generator.d.ts +19 -0
- package/src/agentcore-gateway/mcp-connection/generator.js +79 -0
- package/src/agentcore-gateway/mcp-connection/generator.js.map +1 -0
- package/src/agentcore-gateway/mcp-connection/schema.d.ts +12 -0
- package/src/agentcore-gateway/mcp-connection/schema.json +26 -0
- package/src/agentcore-gateway/schema.d.ts +16 -0
- package/src/agentcore-gateway/schema.json +65 -0
- package/src/connection/generator.d.ts +1 -1
- package/src/connection/generator.js +64 -46
- package/src/connection/generator.js.map +1 -1
- package/src/infra/app/__snapshots__/generator.spec.ts.snap +9 -9
- package/src/mcp-server/schema-registry.d.ts +9 -3
- package/src/mcp-server/schema-registry.js +22 -6
- package/src/mcp-server/schema-registry.js.map +1 -1
- package/src/preset/__snapshots__/generator.spec.ts.snap +3 -1
- package/src/py/agent/__snapshots__/generator.spec.ts.snap +629 -7
- package/src/py/agent/a2a-connection/files/agent-connection/app/__targetAgentSnakeCase___client.py.template +9 -3
- package/src/py/agent/a2a-connection/generator.js +1 -1
- package/src/py/agent/a2a-connection/generator.js.map +1 -1
- package/src/py/agent/files/http/init.py.template +5 -23
- package/src/py/agent/gateway-connection/files/agent-connection/app/__gatewaySnakeCase___client.py.template +35 -0
- package/src/py/agent/gateway-connection/generator.d.ts +10 -0
- package/src/py/agent/gateway-connection/generator.js +106 -0
- package/src/py/agent/gateway-connection/generator.js.map +1 -0
- package/src/py/agent/gateway-connection/schema.d.ts +12 -0
- package/src/py/agent/gateway-connection/schema.json +26 -0
- package/src/py/agent/generator.js +27 -22
- package/src/py/agent/generator.js.map +1 -1
- package/src/py/agent/mcp-connection/__snapshots__/generator.spec.ts.snap +8 -4
- package/src/py/agent/mcp-connection/files/agent-connection/app/__mcpServerSnakeCase___client.py.template +9 -3
- package/src/py/agent/mcp-connection/generator.js +2 -72
- package/src/py/agent/mcp-connection/generator.js.map +1 -1
- package/src/py/fast-api/__snapshots__/generator.spec.ts.snap +5 -22
- package/src/py/fast-api/files/app/__name__/init.py.template +5 -22
- package/src/py/mcp-server/__snapshots__/generator.spec.ts.snap +58 -3
- package/src/ts/agent/__snapshots__/generator.spec.ts.snap +619 -2
- package/src/ts/agent/a2a-connection/files/agent-connection/app/__targetAgentKebabCase__-client.ts.template +10 -6
- package/src/ts/agent/gateway-connection/files/agent-connection/app/__gatewayKebabCase__-client.ts.template +30 -0
- package/src/ts/agent/gateway-connection/generator.d.ts +10 -0
- package/src/ts/agent/gateway-connection/generator.js +106 -0
- package/src/ts/agent/gateway-connection/generator.js.map +1 -0
- package/src/ts/agent/gateway-connection/schema.d.ts +12 -0
- package/src/ts/agent/gateway-connection/schema.json +26 -0
- package/src/ts/agent/generator.js +23 -19
- package/src/ts/agent/generator.js.map +1 -1
- package/src/ts/agent/mcp-connection/__snapshots__/generator.spec.ts.snap +9 -4
- package/src/ts/agent/mcp-connection/files/agent-connection/app/__mcpServerKebabCase__-client.ts.template +9 -6
- package/src/ts/agent/mcp-connection/generator.js +1 -13
- package/src/ts/agent/mcp-connection/generator.js.map +1 -1
- package/src/ts/mcp-server/__snapshots__/generator.spec.ts.snap +58 -3
- package/src/ts/nx-generator/generator.js +29 -0
- package/src/ts/nx-generator/generator.js.map +1 -1
- package/src/ts/react-website/app/__snapshots__/generator.spec.ts.snap +86 -39
- package/src/utils/agent-chat/agent-chat.d.ts +31 -0
- package/src/utils/agent-chat/agent-chat.js +30 -0
- package/src/utils/agent-chat/agent-chat.js.map +1 -0
- package/src/utils/agent-chat/files/a2a/chat.ts.template +33 -0
- package/src/utils/agent-chat/files/ag-ui/chat.ts.template +17 -0
- package/src/utils/agent-chat/files/common/agentcore.ts.template +81 -0
- package/src/utils/agent-chat/files/http-py/chat.ts.template +43 -0
- package/src/utils/agent-chat/files/http-ts/chat.ts.template +54 -0
- package/src/utils/agent-connection/agent-connection.d.ts +17 -0
- package/src/utils/agent-connection/agent-connection.js +94 -0
- package/src/utils/agent-connection/agent-connection.js.map +1 -1
- package/src/utils/agent-connection/files/core-gateway/agentcore-gateway-mcp-client.ts.template +78 -0
- package/src/utils/agent-connection/files/core-runtime-config/runtime-config.ts.template +22 -32
- package/src/utils/agent-connection/files/py-core-gateway/agentcore_gateway_mcp_client.py.template +78 -0
- package/src/utils/agent-connection/files/py-core-runtime-config/runtime_config.py.template +5 -18
- package/src/utils/agent-core-constructs/agent-core-constructs.d.ts +8 -0
- package/src/utils/agent-core-constructs/agent-core-constructs.js +54 -1
- package/src/utils/agent-core-constructs/agent-core-constructs.js.map +1 -1
- package/src/utils/agent-core-constructs/files/cdk/app/agent-core/__nameKebabCase__/__nameKebabCase__.ts.template +4 -0
- package/src/utils/agent-core-constructs/files/cdk/app/agentcore-gateway/__nameKebabCase__/__nameKebabCase__.ts.template +37 -0
- package/src/utils/agent-core-constructs/files/cdk/core/agentcore-gateway/agentcore-gateway.ts.template +293 -0
- package/src/utils/agent-core-constructs/files/cdk/core/agentcore-gateway/readiness-probe/index.js.template +55 -0
- package/src/utils/agent-core-constructs/files/terraform/app/agentcore-gateway/__nameKebabCase__/__nameKebabCase__.tf.template +242 -0
- package/src/utils/agent-core-constructs/files/terraform/app/agentcore-gateway/__nameKebabCase__/render-cedar.cjs.template +13 -0
- package/src/utils/agent-core-constructs/files/terraform/core/agent-core/runtime.tf.template +55 -2
- package/src/utils/agent-core-constructs/files/terraform/core/agentcore-gateway/gateway.tf.template +14 -0
- package/src/utils/versions.d.ts +46 -44
- package/src/utils/versions.js +45 -43
- package/src/utils/versions.js.map +1 -1
- package/src/py/agent/scripts/http/chat.ts.template +0 -38
- package/src/ts/agent/scripts/http/chat.ts.template +0 -35
|
@@ -24,10 +24,12 @@ export declare function getPythonAgentConnectionPackageName(tree: Tree): string;
|
|
|
24
24
|
export declare const TS_CORE_TEMPLATES: {
|
|
25
25
|
readonly mcp: "core-mcp";
|
|
26
26
|
readonly a2a: "core-a2a";
|
|
27
|
+
readonly gateway: "core-gateway";
|
|
27
28
|
};
|
|
28
29
|
export declare const PY_CORE_TEMPLATES: {
|
|
29
30
|
readonly mcp: "py-core-mcp";
|
|
30
31
|
readonly a2a: "py-core-a2a";
|
|
32
|
+
readonly gateway: "py-core-gateway";
|
|
31
33
|
/** Shared SigV4 `httpx.Auth` used by both MCP and A2A clients. */
|
|
32
34
|
readonly auth: "py-core-auth";
|
|
33
35
|
};
|
|
@@ -54,6 +56,21 @@ export declare function ensurePythonAgentConnectionProject(tree: Tree): Promise<
|
|
|
54
56
|
* agent-connection project's core directory.
|
|
55
57
|
*/
|
|
56
58
|
export declare function addPythonCoreClient(tree: Tree, kind: keyof typeof PY_CORE_TEMPLATES): void;
|
|
59
|
+
/**
|
|
60
|
+
* Patch a TypeScript agent.ts to create a connection client and register it
|
|
61
|
+
* in the Agent's tools. Used by the MCP and gateway connection generators —
|
|
62
|
+
* the client class must expose a static async `create()` returning a value
|
|
63
|
+
* accepted by `Agent.tools` (e.g. an `McpClient`).
|
|
64
|
+
*/
|
|
65
|
+
export declare function addTypeScriptClientToAgent(tree: Tree, agentFilePath: string, clientClassName: string, clientVarName: string): Promise<void>;
|
|
66
|
+
/**
|
|
67
|
+
* Patch a Python agent.py to create a context-managed connection client,
|
|
68
|
+
* enter it in the `with` block around `yield Agent(...)`, and spread its
|
|
69
|
+
* `list_tools_sync()` into the Agent's tools. Used by the MCP and gateway
|
|
70
|
+
* connection generators — the client class must expose a static `create()`
|
|
71
|
+
* returning a context manager with `list_tools_sync()` (e.g. an `MCPClient`).
|
|
72
|
+
*/
|
|
73
|
+
export declare function addPythonClientToAgent(tree: Tree, agentFilePath: string, clientClassName: string, clientVarName: string): Promise<void>;
|
|
57
74
|
/**
|
|
58
75
|
* Add a re-export to the Python agent-connection module's __init__.py.
|
|
59
76
|
* Equivalent to addStarExport for TS.
|
|
@@ -8,6 +8,8 @@ exports.ensureTypeScriptAgentConnectionProject = ensureTypeScriptAgentConnection
|
|
|
8
8
|
exports.addTypeScriptCoreClient = addTypeScriptCoreClient;
|
|
9
9
|
exports.ensurePythonAgentConnectionProject = ensurePythonAgentConnectionProject;
|
|
10
10
|
exports.addPythonCoreClient = addPythonCoreClient;
|
|
11
|
+
exports.addTypeScriptClientToAgent = addTypeScriptClientToAgent;
|
|
12
|
+
exports.addPythonClientToAgent = addPythonClientToAgent;
|
|
11
13
|
exports.addPythonReExport = addPythonReExport;
|
|
12
14
|
const tslib_1 = require("tslib");
|
|
13
15
|
/**
|
|
@@ -64,10 +66,12 @@ function getPythonAgentConnectionPackageName(tree) {
|
|
|
64
66
|
exports.TS_CORE_TEMPLATES = {
|
|
65
67
|
mcp: 'core-mcp',
|
|
66
68
|
a2a: 'core-a2a',
|
|
69
|
+
gateway: 'core-gateway',
|
|
67
70
|
};
|
|
68
71
|
exports.PY_CORE_TEMPLATES = {
|
|
69
72
|
mcp: 'py-core-mcp',
|
|
70
73
|
a2a: 'py-core-a2a',
|
|
74
|
+
gateway: 'py-core-gateway',
|
|
71
75
|
/** Shared SigV4 `httpx.Auth` used by both MCP and A2A clients. */
|
|
72
76
|
auth: 'py-core-auth',
|
|
73
77
|
};
|
|
@@ -158,6 +162,96 @@ function addPythonCoreClient(tree, kind) {
|
|
|
158
162
|
const coreDir = (0, devkit_1.joinPathFragments)(projectDir, moduleName, 'core');
|
|
159
163
|
(0, devkit_1.generateFiles)(tree, (0, devkit_1.joinPathFragments)(__dirname, 'files', exports.PY_CORE_TEMPLATES[kind]), coreDir, {}, { overwriteStrategy: devkit_1.OverwriteStrategy.KeepExisting });
|
|
160
164
|
}
|
|
165
|
+
/**
|
|
166
|
+
* Patch a TypeScript agent.ts to create a connection client and register it
|
|
167
|
+
* in the Agent's tools. Used by the MCP and gateway connection generators —
|
|
168
|
+
* the client class must expose a static async `create()` returning a value
|
|
169
|
+
* accepted by `Agent.tools` (e.g. an `McpClient`).
|
|
170
|
+
*/
|
|
171
|
+
async function addTypeScriptClientToAgent(tree, agentFilePath, clientClassName, clientVarName) {
|
|
172
|
+
const clientCreationStmt = `const ${clientVarName} = await ${clientClassName}.create();`;
|
|
173
|
+
// Transform the arrow function that contains `new Agent`:
|
|
174
|
+
// - Expression body: wrap in block with client creation and return
|
|
175
|
+
// - Block body: prepend client creation statement
|
|
176
|
+
await (0, ast_1.applyGritQL)(tree, agentFilePath, `or { \`async ($p) => new Agent($args)\` => raw\`async ($p) => {
|
|
177
|
+
${clientCreationStmt}
|
|
178
|
+
return new Agent($args);
|
|
179
|
+
}\` where { $program <: not contains \`${clientClassName}.create\` }, \`async ($p) => { $body }\` => raw\`async ($p) => {
|
|
180
|
+
${clientCreationStmt}
|
|
181
|
+
$body
|
|
182
|
+
}\` where { $body <: contains \`new Agent($_)\`, $program <: not contains \`${clientClassName}.create\` } }`);
|
|
183
|
+
// Prepend the client to the tools array
|
|
184
|
+
await (0, ast_1.applyGritQL)(tree, agentFilePath, `\`tools: [$items]\` => \`tools: [${clientVarName}, $items]\` where { $items <: within \`new Agent($_)\`, $items <: not contains \`${clientVarName}\` }`);
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Patch a Python agent.py to create a context-managed connection client,
|
|
188
|
+
* enter it in the `with` block around `yield Agent(...)`, and spread its
|
|
189
|
+
* `list_tools_sync()` into the Agent's tools. Used by the MCP and gateway
|
|
190
|
+
* connection generators — the client class must expose a static `create()`
|
|
191
|
+
* returning a context manager with `list_tools_sync()` (e.g. an `MCPClient`).
|
|
192
|
+
*/
|
|
193
|
+
async function addPythonClientToAgent(tree, agentFilePath, clientClassName, clientVarName) {
|
|
194
|
+
await addPythonClientTools(tree, agentFilePath, clientVarName);
|
|
195
|
+
await addPythonClientToGetAgent(tree, agentFilePath, clientClassName, clientVarName);
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Append `*<clientVarName>.list_tools_sync()` to the Agent's tools list.
|
|
199
|
+
*/
|
|
200
|
+
const addPythonClientTools = async (tree, filePath, clientVarName) => {
|
|
201
|
+
if (await (0, ast_1.matchGritQL)(tree, filePath, py(`\`${clientVarName}.list_tools_sync()\``))) {
|
|
202
|
+
return;
|
|
203
|
+
}
|
|
204
|
+
await (0, ast_1.applyGritQL)(tree, filePath, py(`\`tools=$old\` where {
|
|
205
|
+
$old <: not contains \`${clientVarName}\`,
|
|
206
|
+
if ($old <: \`[]\`) {
|
|
207
|
+
$old => \`[*${clientVarName}.list_tools_sync()]\`
|
|
208
|
+
} else {
|
|
209
|
+
$old <: \`[$items]\` where { $items += \`, *${clientVarName}.list_tools_sync()\` }
|
|
210
|
+
}
|
|
211
|
+
}`));
|
|
212
|
+
};
|
|
213
|
+
/**
|
|
214
|
+
* Create the client in get_agent and enter it in the `with` block.
|
|
215
|
+
*
|
|
216
|
+
* First connection: rewrites `def get_agent` to wrap the body in a with
|
|
217
|
+
* block. Subsequent connections: adds to the existing with items and
|
|
218
|
+
* prepends the creation line.
|
|
219
|
+
*/
|
|
220
|
+
const addPythonClientToGetAgent = async (tree, filePath, clientClassName, clientVarName) => {
|
|
221
|
+
if (await (0, ast_1.matchGritQL)(tree, filePath, py(`\`${clientClassName}.create()\``))) {
|
|
222
|
+
return;
|
|
223
|
+
}
|
|
224
|
+
// Try the "add to existing with block" pattern first.
|
|
225
|
+
// If it succeeds, there was already a with block from a previous connection.
|
|
226
|
+
const addedToWith = await (0, ast_1.applyGritQL)(tree, filePath, py(`\`with ($items,): $body\` where {
|
|
227
|
+
$items <: not contains \`${clientVarName}\`,
|
|
228
|
+
$items += \`, ${clientVarName}\`
|
|
229
|
+
}`));
|
|
230
|
+
if (addedToWith) {
|
|
231
|
+
// Subsequent connection — prepend the creation line to the function body
|
|
232
|
+
// (a single anchor, so the line is inserted exactly once).
|
|
233
|
+
await (0, ast_1.applyGritQL)(tree, filePath, py(`\`def get_agent($params):
|
|
234
|
+
$body\` where {
|
|
235
|
+
$body <: contains \`yield Agent($_)\`,
|
|
236
|
+
$body <: not contains \`${clientClassName}.create\`
|
|
237
|
+
} => \`def get_agent($params):
|
|
238
|
+
${clientVarName} = ${clientClassName}.create()
|
|
239
|
+
$body\``));
|
|
240
|
+
return;
|
|
241
|
+
}
|
|
242
|
+
// First connection — wrap the existing `def get_agent` body in a single
|
|
243
|
+
// `with (<var>,):` block.
|
|
244
|
+
await (0, ast_1.applyGritQL)(tree, filePath, py(`\`def get_agent($params):
|
|
245
|
+
$body\` where {
|
|
246
|
+
$body <: contains \`yield Agent($_)\`,
|
|
247
|
+
$body <: not contains \`${clientClassName}.create\`
|
|
248
|
+
} => \`def get_agent($params):
|
|
249
|
+
${clientVarName} = ${clientClassName}.create()
|
|
250
|
+
with (
|
|
251
|
+
${clientVarName},
|
|
252
|
+
):
|
|
253
|
+
$body\``));
|
|
254
|
+
};
|
|
161
255
|
/**
|
|
162
256
|
* Add a re-export to the Python agent-connection module's __init__.py.
|
|
163
257
|
* Equivalent to addStarExport for TS.
|
|
@@ -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;
|
|
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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"}
|
package/src/utils/agent-connection/files/core-gateway/agentcore-gateway-mcp-client.ts.template
ADDED
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { McpClient } from '@strands-agents/sdk';
|
|
2
|
+
import { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js';
|
|
3
|
+
import { AwsClient } from 'aws4fetch';
|
|
4
|
+
import { fromNodeProviderChain } from '@aws-sdk/credential-providers';
|
|
5
|
+
import { getCurrentSessionId } from './session-context.js';
|
|
6
|
+
|
|
7
|
+
const SESSION_HEADER = 'X-Amzn-Bedrock-AgentCore-Runtime-Session-Id';
|
|
8
|
+
|
|
9
|
+
export interface AgentCoreGatewayMcpClientIamOptions {
|
|
10
|
+
/**
|
|
11
|
+
* The MCP URL of the AgentCore Gateway, of the form
|
|
12
|
+
* https://<gatewayId>.gateway.bedrock-agentcore.<region>.amazonaws.com/mcp
|
|
13
|
+
*/
|
|
14
|
+
gatewayUrl: string;
|
|
15
|
+
/** AWS region override; by default parsed from `gatewayUrl`. */
|
|
16
|
+
region?: string;
|
|
17
|
+
/** AWS credential provider; defaults to the standard provider chain. */
|
|
18
|
+
credentialProvider?: ReturnType<typeof fromNodeProviderChain>;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Factory for MCP clients that connect to an AgentCore Gateway. Forwards the
|
|
23
|
+
* current async-context session via the AgentCore session header, which the
|
|
24
|
+
* gateway propagates to downstream MCP server targets.
|
|
25
|
+
*/
|
|
26
|
+
export class AgentCoreGatewayMcpClient {
|
|
27
|
+
/** Create a gateway MCP client authenticated with IAM SigV4. */
|
|
28
|
+
static withIamAuth(options: AgentCoreGatewayMcpClientIamOptions): McpClient {
|
|
29
|
+
const credentialProvider =
|
|
30
|
+
options.credentialProvider ?? fromNodeProviderChain();
|
|
31
|
+
const region =
|
|
32
|
+
options.region ?? parseRegionFromGatewayUrl(options.gatewayUrl);
|
|
33
|
+
|
|
34
|
+
const sigv4Fetch: typeof fetch = async (input, init) => {
|
|
35
|
+
const client = new AwsClient({
|
|
36
|
+
...(await credentialProvider()),
|
|
37
|
+
service: 'bedrock-agentcore',
|
|
38
|
+
region,
|
|
39
|
+
});
|
|
40
|
+
return client.fetch(input, {
|
|
41
|
+
...init,
|
|
42
|
+
headers: withSessionHeader(init?.headers),
|
|
43
|
+
});
|
|
44
|
+
};
|
|
45
|
+
return AgentCoreGatewayMcpClient.create(options.gatewayUrl, sigv4Fetch);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/** Plain-HTTP gateway client, for the local gateway started by serve-local. */
|
|
49
|
+
static withoutAuth(options: { gatewayUrl: string }): McpClient {
|
|
50
|
+
const plainFetch: typeof fetch = async (input, init) =>
|
|
51
|
+
fetch(input, { ...init, headers: withSessionHeader(init?.headers) });
|
|
52
|
+
return AgentCoreGatewayMcpClient.create(options.gatewayUrl, plainFetch);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
private static create(gatewayUrl: string, fetchFn: typeof fetch): McpClient {
|
|
56
|
+
const transport = new StreamableHTTPClientTransport(new URL(gatewayUrl), {
|
|
57
|
+
fetch: fetchFn,
|
|
58
|
+
});
|
|
59
|
+
return new McpClient({ transport });
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
const withSessionHeader = (init?: RequestInit['headers']): Headers => {
|
|
64
|
+
const headers = new Headers(init);
|
|
65
|
+
const sessionId = getCurrentSessionId();
|
|
66
|
+
if (sessionId) headers.set(SESSION_HEADER, sessionId);
|
|
67
|
+
return headers;
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
const parseRegionFromGatewayUrl = (gatewayUrl: string): string => {
|
|
71
|
+
const match = /\.bedrock-agentcore\.([^.]+)\.amazonaws\.com/.exec(gatewayUrl);
|
|
72
|
+
if (!match) {
|
|
73
|
+
throw new Error(
|
|
74
|
+
`Cannot determine region from gateway URL '${gatewayUrl}'. Pass region explicitly.`,
|
|
75
|
+
);
|
|
76
|
+
}
|
|
77
|
+
return match[1];
|
|
78
|
+
};
|
|
@@ -1,40 +1,30 @@
|
|
|
1
1
|
import { getAppConfig } from '@aws-lambda-powertools/parameters/appconfig';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* CDK/Terraform construct for this project.
|
|
4
|
+
* Shape of this project's runtime configuration in AppConfig. Keys are the
|
|
5
|
+
* class names of connected target constructs (e.g. `MyAgent`, `MyGateway`).
|
|
7
6
|
*/
|
|
8
|
-
|
|
7
|
+
export interface AgentCoreRuntimeConfig {
|
|
9
8
|
agentRuntimes?: Record<string, string>;
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
if (!application) {
|
|
13
|
-
throw new Error(
|
|
14
|
-
'RUNTIME_CONFIG_APP_ID is not set — cannot resolve connected agent ARNs from AppConfig.',
|
|
15
|
-
);
|
|
16
|
-
}
|
|
17
|
-
return (await getAppConfig('agentcore', {
|
|
18
|
-
application,
|
|
19
|
-
environment: 'default',
|
|
20
|
-
transform: 'json',
|
|
21
|
-
})) as { agentRuntimes?: Record<string, string> };
|
|
22
|
-
};
|
|
9
|
+
gateways?: Record<string, string>;
|
|
10
|
+
}
|
|
23
11
|
|
|
24
12
|
/**
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
13
|
+
* Read the runtime-config `agentcore` namespace from AppConfig.
|
|
14
|
+
* `RUNTIME_CONFIG_APP_ID` is set on the AgentCore runtime by the generated
|
|
15
|
+
* CDK/Terraform construct for this project.
|
|
28
16
|
*/
|
|
29
|
-
export const
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
17
|
+
export const getAgentCoreRuntimeConfig =
|
|
18
|
+
async (): Promise<AgentCoreRuntimeConfig> => {
|
|
19
|
+
const application = process.env.RUNTIME_CONFIG_APP_ID;
|
|
20
|
+
if (!application) {
|
|
21
|
+
throw new Error(
|
|
22
|
+
'RUNTIME_CONFIG_APP_ID is not set — cannot resolve connected agent ARNs from AppConfig.',
|
|
23
|
+
);
|
|
24
|
+
}
|
|
25
|
+
return (await getAppConfig('agentcore', {
|
|
26
|
+
application,
|
|
27
|
+
environment: 'default',
|
|
28
|
+
transform: 'json',
|
|
29
|
+
})) as AgentCoreRuntimeConfig;
|
|
30
|
+
};
|
package/src/utils/agent-connection/files/py-core-gateway/agentcore_gateway_mcp_client.py.template
ADDED
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import re
|
|
2
|
+
|
|
3
|
+
import boto3
|
|
4
|
+
import httpx
|
|
5
|
+
from mcp.client.streamable_http import streamablehttp_client
|
|
6
|
+
from strands.tools.mcp.mcp_client import MCPClient
|
|
7
|
+
|
|
8
|
+
from .auth import SigV4HTTPXAuth
|
|
9
|
+
from .session_context import get_current_session_id
|
|
10
|
+
|
|
11
|
+
SESSION_HEADER = "X-Amzn-Bedrock-AgentCore-Runtime-Session-Id"
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class _SessionHeaderAuth(httpx.Auth):
|
|
15
|
+
"""Stamps the AgentCore session header from the current async context."""
|
|
16
|
+
|
|
17
|
+
requires_request_body = True
|
|
18
|
+
requires_response_body = True
|
|
19
|
+
|
|
20
|
+
def __init__(self, inner: httpx.Auth | None = None):
|
|
21
|
+
self._inner = inner
|
|
22
|
+
|
|
23
|
+
def auth_flow(self, request: httpx.Request): # type: ignore[override]
|
|
24
|
+
sid = get_current_session_id()
|
|
25
|
+
if sid:
|
|
26
|
+
request.headers[SESSION_HEADER] = sid
|
|
27
|
+
if self._inner is None:
|
|
28
|
+
yield request
|
|
29
|
+
return
|
|
30
|
+
yield from self._inner.auth_flow(request)
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def _parse_region_from_gateway_url(gateway_url: str) -> str:
|
|
34
|
+
match = re.search(r"\.bedrock-agentcore\.([^.]+)\.amazonaws\.com", gateway_url)
|
|
35
|
+
if not match:
|
|
36
|
+
raise ValueError(
|
|
37
|
+
f"Cannot determine region from gateway URL '{gateway_url}'. "
|
|
38
|
+
"Pass region explicitly."
|
|
39
|
+
)
|
|
40
|
+
return match.group(1)
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
class AgentCoreGatewayMCPClient:
|
|
44
|
+
"""Factory for MCP clients that connect to an AgentCore Gateway. Forwards
|
|
45
|
+
the current async-context session via the AgentCore session header, which
|
|
46
|
+
the gateway propagates to downstream MCP server targets.
|
|
47
|
+
"""
|
|
48
|
+
|
|
49
|
+
@staticmethod
|
|
50
|
+
def with_iam_auth(
|
|
51
|
+
gateway_url: str,
|
|
52
|
+
region: str | None = None,
|
|
53
|
+
) -> MCPClient:
|
|
54
|
+
"""Create a gateway MCP client authenticated with IAM SigV4."""
|
|
55
|
+
resolved_region = region or _parse_region_from_gateway_url(gateway_url)
|
|
56
|
+
credentials = boto3.Session(region_name=resolved_region).get_credentials()
|
|
57
|
+
return _create_client(
|
|
58
|
+
gateway_url,
|
|
59
|
+
_SessionHeaderAuth(
|
|
60
|
+
SigV4HTTPXAuth(credentials, "bedrock-agentcore", resolved_region),
|
|
61
|
+
),
|
|
62
|
+
)
|
|
63
|
+
|
|
64
|
+
@staticmethod
|
|
65
|
+
def without_auth(gateway_url: str) -> MCPClient:
|
|
66
|
+
"""Plain-HTTP gateway client, for the local gateway started by serve-local."""
|
|
67
|
+
return _create_client(gateway_url, _SessionHeaderAuth())
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
def _create_client(gateway_url: str, auth: httpx.Auth) -> MCPClient:
|
|
71
|
+
return MCPClient(
|
|
72
|
+
lambda: streamablehttp_client(
|
|
73
|
+
gateway_url,
|
|
74
|
+
auth=auth,
|
|
75
|
+
timeout=120,
|
|
76
|
+
terminate_on_close=False,
|
|
77
|
+
)
|
|
78
|
+
)
|
|
@@ -5,9 +5,13 @@ from aws_lambda_powertools.utilities import parameters
|
|
|
5
5
|
from botocore.config import Config
|
|
6
6
|
|
|
7
7
|
|
|
8
|
-
def
|
|
8
|
+
def get_agentcore_runtime_config() -> dict[str, Any]:
|
|
9
9
|
"""Read the runtime-config ``agentcore`` namespace from AppConfig.
|
|
10
10
|
|
|
11
|
+
Returns a dict of the shape ``{"agentRuntimes": {name: arn, ...},
|
|
12
|
+
"gateways": {name: url, ...}}``, where keys are the class names of
|
|
13
|
+
connected target constructs.
|
|
14
|
+
|
|
11
15
|
``RUNTIME_CONFIG_APP_ID`` is set on the AgentCore runtime by the generated
|
|
12
16
|
CDK/Terraform construct for this project.
|
|
13
17
|
"""
|
|
@@ -23,20 +27,3 @@ def _get_agentcore_runtime_config() -> dict[str, Any]:
|
|
|
23
27
|
config=Config(region_name=region) if region else None,
|
|
24
28
|
)
|
|
25
29
|
return cast(dict[str, Any], provider.get("agentcore", transform="json"))
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
def get_connected_agent_runtime_arn(name: str) -> str:
|
|
29
|
-
"""Resolve the AgentCore runtime ARN for a connected agent or MCP server
|
|
30
|
-
from this project's runtime configuration.
|
|
31
|
-
|
|
32
|
-
``name`` must match the class name of the target construct
|
|
33
|
-
(e.g. ``MyAgent``, ``InventoryMcpServer``).
|
|
34
|
-
"""
|
|
35
|
-
config = _get_agentcore_runtime_config()
|
|
36
|
-
agent_runtimes = config.get("agentRuntimes", {}) if config else {}
|
|
37
|
-
arn = agent_runtimes.get(name)
|
|
38
|
-
if not arn:
|
|
39
|
-
raise RuntimeError(
|
|
40
|
-
f"No connected agent runtime named '{name}' found in runtime configuration."
|
|
41
|
-
)
|
|
42
|
-
return arn
|
|
@@ -47,4 +47,12 @@ export interface AddAgentInfraProps {
|
|
|
47
47
|
* Add an agent CDK construct
|
|
48
48
|
*/
|
|
49
49
|
export declare const addAgentInfra: (tree: Tree, options: AddAgentInfraProps & IACProvider) => Promise<void>;
|
|
50
|
+
export interface AddAgentCoreGatewayInfraProps {
|
|
51
|
+
gatewayNameClassName: string;
|
|
52
|
+
gatewayNameKebabCase: string;
|
|
53
|
+
projectName: string;
|
|
54
|
+
projectDirectory: string;
|
|
55
|
+
cedarPolicy: boolean;
|
|
56
|
+
}
|
|
57
|
+
export declare const addAgentCoreGatewayInfra: (tree: Tree, options: AddAgentCoreGatewayInfraProps & IACProvider) => Promise<void>;
|
|
50
58
|
export {};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.addAgentInfra = exports.addMcpServerInfra = void 0;
|
|
3
|
+
exports.addAgentCoreGatewayInfra = exports.addAgentInfra = exports.addMcpServerInfra = void 0;
|
|
4
4
|
/**
|
|
5
5
|
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
6
6
|
* SPDX-License-Identifier: Apache-2.0
|
|
@@ -79,4 +79,57 @@ const addAgentInfra = async (tree, options) => {
|
|
|
79
79
|
});
|
|
80
80
|
};
|
|
81
81
|
exports.addAgentInfra = addAgentInfra;
|
|
82
|
+
const addAgentCoreGatewayInfra = async (tree, options) => {
|
|
83
|
+
switch (options.iac) {
|
|
84
|
+
case 'cdk':
|
|
85
|
+
await addAgentCoreGatewayCDKInfra(tree, options);
|
|
86
|
+
break;
|
|
87
|
+
case 'terraform':
|
|
88
|
+
addAgentCoreGatewayTerraformInfra(tree, options);
|
|
89
|
+
break;
|
|
90
|
+
}
|
|
91
|
+
(0, devkit_1.updateJson)(tree, (0, devkit_1.joinPathFragments)(shared_constructs_constants_1.PACKAGES_DIR, options.iac === 'cdk' ? shared_constructs_constants_1.SHARED_CONSTRUCTS_DIR : shared_constructs_constants_1.SHARED_TERRAFORM_DIR, 'project.json'), (config) => {
|
|
92
|
+
(0, nx_1.addDependencyToTargetIfNotPresent)(config, 'build', `${options.projectName}:build`);
|
|
93
|
+
return config;
|
|
94
|
+
});
|
|
95
|
+
};
|
|
96
|
+
exports.addAgentCoreGatewayInfra = addAgentCoreGatewayInfra;
|
|
97
|
+
const addAgentCoreGatewayCDKInfra = async (tree, options) => {
|
|
98
|
+
// Generic gateway construct (readiness probe, policy engine, Cedar policy
|
|
99
|
+
// loading) shared by all gateways
|
|
100
|
+
(0, devkit_1.generateFiles)(tree, (0, devkit_1.joinPathFragments)(__dirname, 'files', 'cdk', 'core', 'agentcore-gateway'), (0, devkit_1.joinPathFragments)(shared_constructs_constants_1.PACKAGES_DIR, shared_constructs_constants_1.SHARED_CONSTRUCTS_DIR, 'src', 'core', 'agentcore-gateway'), {}, {
|
|
101
|
+
overwriteStrategy: devkit_1.OverwriteStrategy.KeepExisting,
|
|
102
|
+
});
|
|
103
|
+
(0, devkit_1.generateFiles)(tree, (0, devkit_1.joinPathFragments)(__dirname, 'files', 'cdk', 'app', 'agentcore-gateway'), (0, devkit_1.joinPathFragments)(shared_constructs_constants_1.PACKAGES_DIR, shared_constructs_constants_1.SHARED_CONSTRUCTS_DIR, 'src', 'app', 'gateways'), {
|
|
104
|
+
nameClassName: options.gatewayNameClassName,
|
|
105
|
+
nameKebabCase: options.gatewayNameKebabCase,
|
|
106
|
+
projectDirectory: options.projectDirectory,
|
|
107
|
+
cedarPolicy: options.cedarPolicy,
|
|
108
|
+
}, {
|
|
109
|
+
overwriteStrategy: devkit_1.OverwriteStrategy.KeepExisting,
|
|
110
|
+
});
|
|
111
|
+
await (0, ast_1.addStarExport)(tree, (0, devkit_1.joinPathFragments)(shared_constructs_constants_1.PACKAGES_DIR, shared_constructs_constants_1.SHARED_CONSTRUCTS_DIR, 'src', 'core', 'index.ts'), './agentcore-gateway/agentcore-gateway.js');
|
|
112
|
+
await (0, ast_1.addStarExport)(tree, (0, devkit_1.joinPathFragments)(shared_constructs_constants_1.PACKAGES_DIR, shared_constructs_constants_1.SHARED_CONSTRUCTS_DIR, 'src', 'app', 'gateways', 'index.ts'), `./${options.gatewayNameKebabCase}/${options.gatewayNameKebabCase}.js`);
|
|
113
|
+
await (0, ast_1.addStarExport)(tree, (0, devkit_1.joinPathFragments)(shared_constructs_constants_1.PACKAGES_DIR, shared_constructs_constants_1.SHARED_CONSTRUCTS_DIR, 'src', 'app', 'index.ts'), './gateways/index.js');
|
|
114
|
+
};
|
|
115
|
+
const addAgentCoreGatewayTerraformInfra = (tree, options) => {
|
|
116
|
+
(0, devkit_1.generateFiles)(tree, (0, devkit_1.joinPathFragments)(__dirname, 'files', 'terraform', 'core', 'agentcore-gateway'), (0, devkit_1.joinPathFragments)(shared_constructs_constants_1.PACKAGES_DIR, shared_constructs_constants_1.SHARED_TERRAFORM_DIR, 'src', 'core', 'agentcore-gateway'), {}, {
|
|
117
|
+
overwriteStrategy: devkit_1.OverwriteStrategy.KeepExisting,
|
|
118
|
+
});
|
|
119
|
+
(0, devkit_1.generateFiles)(tree, (0, devkit_1.joinPathFragments)(__dirname, 'files', 'terraform', 'app', 'agentcore-gateway'), (0, devkit_1.joinPathFragments)(shared_constructs_constants_1.PACKAGES_DIR, shared_constructs_constants_1.SHARED_TERRAFORM_DIR, 'src', 'app', 'gateways'), {
|
|
120
|
+
nameClassName: options.gatewayNameClassName,
|
|
121
|
+
nameKebabCase: options.gatewayNameKebabCase,
|
|
122
|
+
projectDirectory: options.projectDirectory,
|
|
123
|
+
cedarPolicy: options.cedarPolicy,
|
|
124
|
+
}, {
|
|
125
|
+
overwriteStrategy: devkit_1.OverwriteStrategy.KeepExisting,
|
|
126
|
+
});
|
|
127
|
+
// The Cedar render script is only needed when policies are enabled
|
|
128
|
+
if (!options.cedarPolicy) {
|
|
129
|
+
const renderScript = (0, devkit_1.joinPathFragments)(shared_constructs_constants_1.PACKAGES_DIR, shared_constructs_constants_1.SHARED_TERRAFORM_DIR, 'src', 'app', 'gateways', options.gatewayNameKebabCase, 'render-cedar.cjs');
|
|
130
|
+
if (tree.exists(renderScript)) {
|
|
131
|
+
tree.delete(renderScript);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
};
|
|
82
135
|
//# sourceMappingURL=agent-core-constructs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-core-constructs.js","sourceRoot":"","sources":["../../../../../../packages/nx-plugin/src/utils/agent-core-constructs/agent-core-constructs.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"agent-core-constructs.js","sourceRoot":"","sources":["../../../../../../packages/nx-plugin/src/utils/agent-core-constructs/agent-core-constructs.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACH,uCAOoB;AACpB,gCAAuC;AAGvC,8BAA0D;AAC1D,gFAIwC;AAkBxC,MAAM,iBAAiB,GAAG,KAAK,EAC7B,IAAU,EACV,OAA8C,EAC9C,EAAE;IACF,QAAQ,OAAO,CAAC,GAAG,EAAE,CAAC;QACpB,KAAK,KAAK;YACR,MAAM,oBAAoB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAC1C,MAAM;QACR,KAAK,WAAW;YACd,0BAA0B,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAC1C,MAAM;IACV,CAAC;IAED,qFAAqF;IACrF,IAAA,mBAAU,EACR,IAAI,EACJ,IAAA,0BAAiB,EACf,0CAAY,EACZ,OAAO,CAAC,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,mDAAqB,CAAC,CAAC,CAAC,kDAAoB,EACpE,cAAc,CACf,EACD,CAAC,MAA4B,EAAE,EAAE;QAC/B,IAAA,sCAAiC,EAC/B,MAAM,EACN,OAAO,EACP,GAAG,OAAO,CAAC,WAAW,QAAQ,CAC/B,CAAC;QACF,OAAO,MAAM,CAAC;IAChB,CAAC,CACF,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,oBAAoB,GAAG,KAAK,EAChC,IAAU,EACV,OAA+B,EAC/B,EAAE;IACF,sCAAsC;IACtC,IAAA,sBAAa,EACX,IAAI,EACJ,IAAA,0BAAiB,EAAC,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,CAAC,EACjE,IAAA,0BAAiB,EACf,0CAAY,EACZ,mDAAqB,EACrB,KAAK,EACL,KAAK,EACL,OAAO,CAAC,YAAY,CACrB,EACD,OAAO,EACP;QACE,iBAAiB,EAAE,0BAAiB,CAAC,YAAY;KAClD,CACF,CAAC;IAEF,oCAAoC;IACpC,MAAM,IAAA,mBAAa,EACjB,IAAI,EACJ,IAAA,0BAAiB,EACf,0CAAY,EACZ,mDAAqB,EACrB,KAAK,EACL,KAAK,EACL,OAAO,CAAC,YAAY,EACpB,UAAU,CACX,EACD,KAAK,OAAO,CAAC,aAAa,IAAI,OAAO,CAAC,aAAa,KAAK,CACzD,CAAC;IACF,MAAM,IAAA,mBAAa,EACjB,IAAI,EACJ,IAAA,0BAAiB,EACf,0CAAY,EACZ,mDAAqB,EACrB,KAAK,EACL,KAAK,EACL,UAAU,CACX,EACD,KAAK,OAAO,CAAC,YAAY,WAAW,CACrC,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,0BAA0B,GAAG,CACjC,IAAU,EACV,OAA+B,EAC/B,EAAE;IACF,kCAAkC;IAClC,IAAA,sBAAa,EACX,IAAI,EACJ,IAAA,0BAAiB,EAAC,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,CAAC,EACxE,IAAA,0BAAiB,EACf,0CAAY,EACZ,kDAAoB,EACpB,KAAK,EACL,MAAM,EACN,YAAY,CACb,EACD,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,EAClC;QACE,iBAAiB,EAAE,0BAAiB,CAAC,YAAY;KAClD,CACF,CAAC;IAEF,iDAAiD;IACjD,IAAA,sBAAa,EACX,IAAI,EACJ,IAAA,0BAAiB,EAAC,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,YAAY,CAAC,EACvE,IAAA,0BAAiB,EACf,0CAAY,EACZ,kDAAoB,EACpB,KAAK,EACL,KAAK,EACL,OAAO,CAAC,YAAY,CACrB,EACD,OAAO,EACP;QACE,iBAAiB,EAAE,0BAAiB,CAAC,YAAY;KAClD,CACF,CAAC;AACJ,CAAC,CAAC;AAYF;;GAEG;AACI,MAAM,iBAAiB,GAAG,KAAK,EACpC,IAAU,EACV,OAA6C,EAC7C,EAAE;IACF,MAAM,iBAAiB,CAAC,IAAI,EAAE;QAC5B,aAAa,EAAE,OAAO,CAAC,sBAAsB;QAC7C,aAAa,EAAE,OAAO,CAAC,sBAAsB;QAC7C,cAAc,EAAE,OAAO,CAAC,cAAc;QACtC,eAAe,EAAE,OAAO,CAAC,eAAe;QACxC,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,YAAY,EAAE,aAAa;QAC3B,cAAc,EAAE,KAAK;QACrB,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,UAAU,EAAE,OAAO,CAAC,UAAU;KAC/B,CAAC,CAAC;AACL,CAAC,CAAC;AAhBW,QAAA,iBAAiB,qBAgB5B;AAaF;;GAEG;AACI,MAAM,aAAa,GAAG,KAAK,EAChC,IAAU,EACV,OAAyC,EACzC,EAAE;IACF,MAAM,iBAAiB,CAAC,IAAI,EAAE;QAC5B,aAAa,EAAE,OAAO,CAAC,kBAAkB;QACzC,aAAa,EAAE,OAAO,CAAC,kBAAkB;QACzC,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,cAAc,EAAE,OAAO,CAAC,cAAc;QACtC,eAAe,EAAE,OAAO,CAAC,eAAe;QACxC,YAAY,EAAE,QAAQ;QACtB,cAAc,EAAE,OAAO,CAAC,cAAc,IAAI,MAAM;QAChD,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,UAAU,EAAE,OAAO,CAAC,UAAU;KAC/B,CAAC,CAAC;AACL,CAAC,CAAC;AAhBW,QAAA,aAAa,iBAgBxB;AAUK,MAAM,wBAAwB,GAAG,KAAK,EAC3C,IAAU,EACV,OAAoD,EACpD,EAAE;IACF,QAAQ,OAAO,CAAC,GAAG,EAAE,CAAC;QACpB,KAAK,KAAK;YACR,MAAM,2BAA2B,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YACjD,MAAM;QACR,KAAK,WAAW;YACd,iCAAiC,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YACjD,MAAM;IACV,CAAC;IAED,IAAA,mBAAU,EACR,IAAI,EACJ,IAAA,0BAAiB,EACf,0CAAY,EACZ,OAAO,CAAC,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,mDAAqB,CAAC,CAAC,CAAC,kDAAoB,EACpE,cAAc,CACf,EACD,CAAC,MAA4B,EAAE,EAAE;QAC/B,IAAA,sCAAiC,EAC/B,MAAM,EACN,OAAO,EACP,GAAG,OAAO,CAAC,WAAW,QAAQ,CAC/B,CAAC;QACF,OAAO,MAAM,CAAC;IAChB,CAAC,CACF,CAAC;AACJ,CAAC,CAAC;AA7BW,QAAA,wBAAwB,4BA6BnC;AAEF,MAAM,2BAA2B,GAAG,KAAK,EACvC,IAAU,EACV,OAAsC,EACtC,EAAE;IACF,0EAA0E;IAC1E,kCAAkC;IAClC,IAAA,sBAAa,EACX,IAAI,EACJ,IAAA,0BAAiB,EAAC,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,mBAAmB,CAAC,EACzE,IAAA,0BAAiB,EACf,0CAAY,EACZ,mDAAqB,EACrB,KAAK,EACL,MAAM,EACN,mBAAmB,CACpB,EACD,EAAE,EACF;QACE,iBAAiB,EAAE,0BAAiB,CAAC,YAAY;KAClD,CACF,CAAC;IAEF,IAAA,sBAAa,EACX,IAAI,EACJ,IAAA,0BAAiB,EAAC,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,mBAAmB,CAAC,EACxE,IAAA,0BAAiB,EACf,0CAAY,EACZ,mDAAqB,EACrB,KAAK,EACL,KAAK,EACL,UAAU,CACX,EACD;QACE,aAAa,EAAE,OAAO,CAAC,oBAAoB;QAC3C,aAAa,EAAE,OAAO,CAAC,oBAAoB;QAC3C,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;QAC1C,WAAW,EAAE,OAAO,CAAC,WAAW;KACjC,EACD;QACE,iBAAiB,EAAE,0BAAiB,CAAC,YAAY;KAClD,CACF,CAAC;IAEF,MAAM,IAAA,mBAAa,EACjB,IAAI,EACJ,IAAA,0BAAiB,EACf,0CAAY,EACZ,mDAAqB,EACrB,KAAK,EACL,MAAM,EACN,UAAU,CACX,EACD,0CAA0C,CAC3C,CAAC;IACF,MAAM,IAAA,mBAAa,EACjB,IAAI,EACJ,IAAA,0BAAiB,EACf,0CAAY,EACZ,mDAAqB,EACrB,KAAK,EACL,KAAK,EACL,UAAU,EACV,UAAU,CACX,EACD,KAAK,OAAO,CAAC,oBAAoB,IAAI,OAAO,CAAC,oBAAoB,KAAK,CACvE,CAAC;IACF,MAAM,IAAA,mBAAa,EACjB,IAAI,EACJ,IAAA,0BAAiB,EACf,0CAAY,EACZ,mDAAqB,EACrB,KAAK,EACL,KAAK,EACL,UAAU,CACX,EACD,qBAAqB,CACtB,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,iCAAiC,GAAG,CACxC,IAAU,EACV,OAAsC,EACtC,EAAE;IACF,IAAA,sBAAa,EACX,IAAI,EACJ,IAAA,0BAAiB,EACf,SAAS,EACT,OAAO,EACP,WAAW,EACX,MAAM,EACN,mBAAmB,CACpB,EACD,IAAA,0BAAiB,EACf,0CAAY,EACZ,kDAAoB,EACpB,KAAK,EACL,MAAM,EACN,mBAAmB,CACpB,EACD,EAAE,EACF;QACE,iBAAiB,EAAE,0BAAiB,CAAC,YAAY;KAClD,CACF,CAAC;IAEF,IAAA,sBAAa,EACX,IAAI,EACJ,IAAA,0BAAiB,EACf,SAAS,EACT,OAAO,EACP,WAAW,EACX,KAAK,EACL,mBAAmB,CACpB,EACD,IAAA,0BAAiB,EACf,0CAAY,EACZ,kDAAoB,EACpB,KAAK,EACL,KAAK,EACL,UAAU,CACX,EACD;QACE,aAAa,EAAE,OAAO,CAAC,oBAAoB;QAC3C,aAAa,EAAE,OAAO,CAAC,oBAAoB;QAC3C,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;QAC1C,WAAW,EAAE,OAAO,CAAC,WAAW;KACjC,EACD;QACE,iBAAiB,EAAE,0BAAiB,CAAC,YAAY;KAClD,CACF,CAAC;IAEF,mEAAmE;IACnE,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;QACzB,MAAM,YAAY,GAAG,IAAA,0BAAiB,EACpC,0CAAY,EACZ,kDAAoB,EACpB,KAAK,EACL,KAAK,EACL,UAAU,EACV,OAAO,CAAC,oBAAoB,EAC5B,kBAAkB,CACnB,CAAC;QACF,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC;YAC9B,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -49,6 +49,10 @@ export type <%- nameClassName %>Props = Omit<
|
|
|
49
49
|
export class <%- nameClassName %> extends Construct implements IGrantable, IConnectable {
|
|
50
50
|
public readonly dockerImage: AgentRuntimeArtifact;
|
|
51
51
|
public readonly agentCoreRuntime: Runtime;
|
|
52
|
+
<%_ if (serverProtocol === 'mcp') { _%>
|
|
53
|
+
/** Default Gateway target name for this MCP server. */
|
|
54
|
+
public readonly mcpServerName = '<%- nameKebabCase %>';
|
|
55
|
+
<%_ } _%>
|
|
52
56
|
|
|
53
57
|
constructor(scope: Construct, id: string, props<%_ if (auth !== 'cognito') { _%>?<%_ } _%>: <%- nameClassName %>Props) {
|
|
54
58
|
super(scope, id);
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { Construct } from 'constructs';
|
|
2
|
+
<%_ if (cedarPolicy) { _%>
|
|
3
|
+
import * as path from 'node:path';
|
|
4
|
+
import * as url from 'node:url';
|
|
5
|
+
<%_ } _%>
|
|
6
|
+
import { AgentCoreGateway } from '../../../core/agentcore-gateway/agentcore-gateway.js';
|
|
7
|
+
import { RuntimeConfig } from '../../../core/runtime-config.js';
|
|
8
|
+
<%_ if (cedarPolicy) { _%>
|
|
9
|
+
import { findWorkspaceRoot } from '../../../core/workspace.js';
|
|
10
|
+
<%_ } _%>
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* AgentCore Gateway wired for MCP protocol with IAM inbound auth.
|
|
14
|
+
<%_ if (cedarPolicy) { _%>
|
|
15
|
+
*
|
|
16
|
+
* Cedar policies are loaded from the gateway project's policies/ directory
|
|
17
|
+
* at synth time and attached to a PolicyEngine running in ENFORCE mode.
|
|
18
|
+
<%_ } _%>
|
|
19
|
+
*/
|
|
20
|
+
export class <%- nameClassName %> extends AgentCoreGateway {
|
|
21
|
+
constructor(scope: Construct, id: string) {
|
|
22
|
+
super(scope, id, {
|
|
23
|
+
<%_ if (cedarPolicy) { _%>
|
|
24
|
+
cedarPolicyPath: path.join(
|
|
25
|
+
findWorkspaceRoot(url.fileURLToPath(new URL(import.meta.url))),
|
|
26
|
+
'<%- projectDirectory %>/policies',
|
|
27
|
+
),
|
|
28
|
+
<%_ } _%>
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
const rc = RuntimeConfig.ensure(this);
|
|
32
|
+
rc.set('agentcore', 'gateways', {
|
|
33
|
+
...rc.get('agentcore').gateways,
|
|
34
|
+
<%- nameClassName %>: this.gateway.gatewayUrl,
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
}
|