@aws/nx-plugin 1.0.0-rc.56 → 1.0.0-rc.58
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 +2917 -1295
- package/migrations.json +34 -24
- package/package.json +13 -13
- package/src/agentcore-gateway/generator.d.ts +16 -1
- package/src/agentcore-gateway/generator.js +3 -2
- package/src/agentcore-gateway/generator.js.map +1 -1
- package/src/agentcore-gateway/schema.json +1 -0
- package/src/connection/scaffold-catalog.d.ts +160 -0
- package/src/connection/scaffold-catalog.js +207 -0
- package/src/connection/scaffold-catalog.js.map +1 -0
- package/src/connection/schema-resolver.d.ts +5 -0
- package/src/connection/schema-resolver.js +27 -0
- package/src/connection/schema-resolver.js.map +1 -0
- package/src/infra/app/__snapshots__/generator.spec.ts.snap +7 -7
- package/src/migrations/latest/smithy-ssdk-bundle-pins/migration.js +78 -0
- package/src/migrations/latest/smithy-ssdk-bundle-pins/migration.js.map +1 -0
- package/src/migrations/v1.0.0-rc.50/modernize-function-props-cast/migration.js.map +1 -0
- package/src/migrations/v1.0.0-rc.50/restrict-cors-to-custom-domains/migration.js.map +1 -0
- package/src/migrations/v1.0.0-rc.50/terraform-bootstrap-adopt-existing-bucket/migration.d.ts +6 -0
- package/src/migrations/v1.0.0-rc.50/terraform-bootstrap-adopt-existing-bucket/migration.js.map +1 -0
- package/src/migrations/v1.0.0-rc.52/user-identity-waf-allow-localhost-callback/migration.js.map +1 -0
- package/src/migrations/v1.0.0-rc.54/order-access-log-delivery-after-bucket-policy/migration.js.map +1 -0
- package/src/migrations/v1.0.0-rc.55/backfill-generator-metadata/migration.js.map +1 -0
- package/src/migrations/v1.0.0-rc.56/dynamodb-local-remove-optimize-flag/migration.js.map +1 -0
- package/src/migrations/v1.0.0-rc.57/ts-agent-session-management-support/migration.d.ts +6 -0
- package/src/migrations/v1.0.0-rc.57/ts-agent-session-management-support/migration.js +449 -0
- package/src/migrations/v1.0.0-rc.57/ts-agent-session-management-support/migration.js.map +1 -0
- package/src/preset/__snapshots__/generator.spec.ts.snap +5 -5
- package/src/py/agent/__snapshots__/generator.constructs.spec.ts.snap +11 -9
- package/src/py/agent/__snapshots__/generator.frameworks.spec.ts.snap +20 -20
- package/src/py/agent/__snapshots__/generator.protocols.spec.ts.snap +3 -3
- package/src/py/agent/a2a-connection/__snapshots__/generator.spec.ts.snap +2 -1
- package/src/py/agent/a2a-connection/files/agent-connection/app/__targetAgentSnakeCase___client_strands.py.template +2 -1
- package/src/py/agent/a2a-connection/files/langchain/agent-connection/app/__targetAgentSnakeCase___client_langchain.py.template +2 -1
- package/src/py/agent/a2a-connection/generator.d.ts +1 -1
- package/src/py/agent/gateway-connection/generator.d.ts +1 -1
- package/src/py/agent/generator.js +4 -0
- package/src/py/agent/generator.js.map +1 -1
- package/src/py/agent/mcp-connection/__snapshots__/generator.spec.ts.snap +2 -1
- package/src/py/agent/mcp-connection/files/agent-connection/app/__mcpServerSnakeCase___client_strands.py.template +2 -1
- package/src/py/agent/mcp-connection/files/langchain/agent-connection/app/__mcpServerSnakeCase___client_langchain.py.template +2 -1
- package/src/py/agent/mcp-connection/generator.d.ts +1 -1
- package/src/py/agent/react-connection/__snapshots__/generator.spec.ts.snap +6 -0
- package/src/py/agent/schema.d.js.map +1 -1
- package/src/py/agent/schema.d.ts +3 -0
- package/src/py/agent/schema.json +9 -0
- package/src/py/dynamodb/__snapshots__/generator.spec.ts.snap +2 -2
- package/src/py/dynamodb/schema.json +1 -0
- package/src/py/fast-api/__snapshots__/generator.terraform.spec.ts.snap +12 -12
- package/src/py/fast-api/generator.d.ts +5 -0
- package/src/py/fast-api/generator.js +3 -2
- package/src/py/fast-api/generator.js.map +1 -1
- package/src/py/fast-api/schema.json +1 -0
- package/src/py/lambda-function/__snapshots__/generator.spec.ts.snap +2 -2
- package/src/py/mcp-server/__snapshots__/generator.spec.ts.snap +9 -7
- package/src/py/mcp-server/schema.json +1 -0
- package/src/py/rdb/__snapshots__/generator.spec.ts.snap +2 -2
- package/src/py/rdb/schema.json +1 -0
- package/src/smithy/project/__snapshots__/generator.spec.ts.snap +4 -4
- package/src/smithy/project/files/service/build.Dockerfile.template +2 -2
- package/src/smithy/project/generator.d.ts +25 -0
- package/src/smithy/project/generator.js +24 -3
- package/src/smithy/project/generator.js.map +1 -1
- package/src/smithy/ts/api/__snapshots__/generator.spec.ts.snap +7 -7
- package/src/smithy/ts/api/generator.d.ts +6 -1
- package/src/smithy/ts/api/generator.js +3 -2
- package/src/smithy/ts/api/generator.js.map +1 -1
- package/src/smithy/ts/api/schema.json +1 -0
- package/src/trpc/backend/__snapshots__/generator.spec.ts.snap +12 -12
- package/src/trpc/backend/generator.d.ts +6 -1
- package/src/trpc/backend/generator.js +3 -2
- package/src/trpc/backend/generator.js.map +1 -1
- package/src/trpc/backend/schema.json +1 -0
- package/src/ts/agent/__snapshots__/generator.spec.ts.snap +668 -24
- package/src/ts/agent/a2a-connection/__snapshots__/generator.spec.ts.snap +2 -1
- package/src/ts/agent/a2a-connection/files/agent-connection/app/__targetAgentKebabCase__-client-strands.ts.template +1 -1
- package/src/ts/agent/files/ag-ui/index.ts.template +10 -1
- package/src/ts/agent/files/common/agent.ts.template +11 -3
- package/src/ts/agent/files/common/session.ts.template +43 -0
- package/src/ts/agent/gateway-connection/__snapshots__/generator.spec.ts.snap +1 -0
- package/src/ts/agent/generator.d.ts +36 -1
- package/src/ts/agent/generator.js +28 -4
- package/src/ts/agent/generator.js.map +1 -1
- package/src/ts/agent/mcp-connection/__snapshots__/generator.spec.ts.snap +2 -1
- package/src/ts/agent/mcp-connection/files/agent-connection/app/__mcpServerKebabCase__-client-strands.ts.template +2 -1
- package/src/ts/agent/react-connection/__snapshots__/generator.spec.ts.snap +8 -4
- package/src/ts/agent/react-connection/files/src/components/__agentNameClassName__AgentClientProvider.tsx.template +2 -1
- package/src/ts/agent/schema.d.js.map +1 -1
- package/src/ts/agent/schema.d.ts +3 -0
- package/src/ts/agent/schema.json +9 -0
- package/src/ts/dcr-proxy/__snapshots__/generator.spec.ts.snap +1 -1
- package/src/ts/dynamodb/__snapshots__/generator.spec.ts.snap +2 -2
- package/src/ts/dynamodb/schema.json +1 -0
- package/src/ts/lambda-function/__snapshots__/generator.spec.ts.snap +2 -2
- package/src/ts/mcp-server/__snapshots__/generator.spec.ts.snap +6 -4
- package/src/ts/mcp-server/generator.d.ts +32 -1
- package/src/ts/mcp-server/generator.js +7 -4
- package/src/ts/mcp-server/generator.js.map +1 -1
- package/src/ts/mcp-server/schema.json +1 -0
- package/src/ts/rdb/__snapshots__/generator.spec.ts.snap +6 -6
- package/src/ts/rdb/generator.d.ts +8 -0
- package/src/ts/rdb/generator.js +3 -2
- package/src/ts/rdb/generator.js.map +1 -1
- package/src/ts/rdb/schema.json +1 -0
- package/src/ts/react-website/app/__snapshots__/generator.spec.ts.snap +61 -45
- package/src/ts/react-website/app/generator.d.ts +6 -1
- package/src/ts/react-website/app/generator.js +3 -2
- package/src/ts/react-website/app/generator.js.map +1 -1
- package/src/ts/react-website/app/schema.json +1 -0
- package/src/ts/react-website/cognito-auth/__snapshots__/generator.terraform.spec.ts.snap +2 -2
- package/src/ts/react-website/cognito-auth/generator.d.ts +6 -1
- package/src/ts/react-website/cognito-auth/generator.js +3 -2
- package/src/ts/react-website/cognito-auth/generator.js.map +1 -1
- package/src/utils/agent-chat/files/common/agentcore.ts.template +2 -2
- package/src/utils/agent-connection/agent-connection.js +4 -0
- package/src/utils/agent-connection/agent-connection.js.map +1 -1
- package/src/utils/agent-connection/files/core-runtime-config/runtime-config.ts.template +11 -1
- package/src/utils/agent-connection/files/core-strands/base/model-errors-strands.ts.template +26 -15
- package/src/utils/agent-connection/files/core-strands/base/tool-errors-strands.ts.template +23 -16
- package/src/utils/agent-connection/files/py-core-runtime-config/runtime_config.py.template +4 -3
- package/src/utils/agent-core-constructs/agent-core-constructs.d.ts +22 -0
- package/src/utils/agent-core-constructs/agent-core-constructs.js +29 -2
- 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 +131 -3
- package/src/utils/agent-core-constructs/files/terraform/app/agent-core/__nameKebabCase__/__nameKebabCase__.tf.template +180 -1
- package/src/utils/api-constructs/api-constructs.d.ts +9 -0
- package/src/utils/api-constructs/api-constructs.js +11 -1
- package/src/utils/api-constructs/api-constructs.js.map +1 -1
- package/src/utils/ast.d.ts +5 -0
- package/src/utils/ast.js +25 -0
- package/src/utils/ast.js.map +1 -1
- package/src/utils/connection/open-api/files/components/__apiNameClassName__Provider.tsx.template +2 -0
- package/src/utils/docker.d.ts +27 -2
- package/src/utils/docker.js +31 -2
- package/src/utils/docker.js.map +1 -1
- package/src/utils/identity-constructs/identity-constructs.d.ts +10 -0
- package/src/utils/identity-constructs/identity-constructs.js +11 -1
- package/src/utils/identity-constructs/identity-constructs.js.map +1 -1
- package/src/utils/shared-constructs-constants.d.ts +6 -0
- package/src/utils/shared-constructs-constants.js +5 -0
- package/src/utils/shared-constructs-constants.js.map +1 -1
- package/src/utils/version-upgrade-migration/owned-dependencies.d.ts +26 -0
- package/src/utils/version-upgrade-migration/owned-dependencies.js +52 -4
- package/src/utils/version-upgrade-migration/owned-dependencies.js.map +1 -1
- package/src/utils/version-upgrade-migration/register.d.ts +5 -1
- package/src/utils/version-upgrade-migration/register.js +6 -2
- package/src/utils/version-upgrade-migration/register.js.map +1 -1
- package/src/utils/version-upgrade-migration/sync-embedded-versions.d.ts +26 -0
- package/src/utils/version-upgrade-migration/sync-embedded-versions.js +304 -0
- package/src/utils/version-upgrade-migration/sync-embedded-versions.js.map +1 -0
- package/src/utils/version-upgrade-migration/sync-vended-versions.js +14 -0
- package/src/utils/version-upgrade-migration/sync-vended-versions.js.map +1 -1
- package/src/utils/versions.d.ts +90 -77
- package/src/utils/versions.js +86 -75
- package/src/utils/versions.js.map +1 -1
- package/src/utils/website-constructs/website-constructs.d.ts +11 -0
- package/src/utils/website-constructs/website-constructs.js +12 -1
- package/src/utils/website-constructs/website-constructs.js.map +1 -1
- package/src/migrations/latest/backfill-generator-metadata/migration.js.map +0 -1
- package/src/migrations/latest/dynamodb-local-remove-optimize-flag/migration.js.map +0 -1
- package/src/migrations/latest/modernize-function-props-cast/migration.js.map +0 -1
- package/src/migrations/latest/order-access-log-delivery-after-bucket-policy/migration.js.map +0 -1
- package/src/migrations/latest/restrict-cors-to-custom-domains/migration.js.map +0 -1
- package/src/migrations/latest/terraform-bootstrap-adopt-existing-bucket/migration.js.map +0 -1
- package/src/migrations/latest/user-identity-waf-allow-localhost-callback/migration.js.map +0 -1
- /package/src/migrations/latest/{modernize-function-props-cast → smithy-ssdk-bundle-pins}/migration.d.ts +0 -0
- /package/src/migrations/{latest/restrict-cors-to-custom-domains → v1.0.0-rc.50/modernize-function-props-cast}/migration.d.ts +0 -0
- /package/src/migrations/{latest → v1.0.0-rc.50}/modernize-function-props-cast/migration.js +0 -0
- /package/src/migrations/{latest/terraform-bootstrap-adopt-existing-bucket → v1.0.0-rc.50/restrict-cors-to-custom-domains}/migration.d.ts +0 -0
- /package/src/migrations/{latest → v1.0.0-rc.50}/restrict-cors-to-custom-domains/migration.js +0 -0
- /package/src/migrations/{latest → v1.0.0-rc.50}/terraform-bootstrap-adopt-existing-bucket/migration.js +0 -0
- /package/src/migrations/{latest/dynamodb-local-remove-optimize-flag → v1.0.0-rc.52/user-identity-waf-allow-localhost-callback}/migration.d.ts +0 -0
- /package/src/migrations/{latest → v1.0.0-rc.52}/user-identity-waf-allow-localhost-callback/migration.js +0 -0
- /package/src/migrations/{latest → v1.0.0-rc.54}/order-access-log-delivery-after-bucket-policy/migration.d.ts +0 -0
- /package/src/migrations/{latest → v1.0.0-rc.54}/order-access-log-delivery-after-bucket-policy/migration.js +0 -0
- /package/src/migrations/{latest → v1.0.0-rc.55}/backfill-generator-metadata/migration.d.ts +0 -0
- /package/src/migrations/{latest → v1.0.0-rc.55}/backfill-generator-metadata/migration.js +0 -0
- /package/src/migrations/{latest/user-identity-waf-allow-localhost-callback → v1.0.0-rc.56/dynamodb-local-remove-optimize-flag}/migration.d.ts +0 -0
- /package/src/migrations/{latest → v1.0.0-rc.56}/dynamodb-local-remove-optimize-flag/migration.js +0 -0
|
@@ -5,6 +5,7 @@ exports[`ts#agent#a2a-connection generator > should match snapshot for agent-con
|
|
|
5
5
|
export * from './core/tool-errors-strands.js';
|
|
6
6
|
export * from './core/model-errors-strands.js';
|
|
7
7
|
export * from './core/with-session-id-strands.js';
|
|
8
|
+
export * from './core/runtime-config.js';
|
|
8
9
|
export * from './core/session-context.js';
|
|
9
10
|
// Export your library code here
|
|
10
11
|
"
|
|
@@ -244,7 +245,7 @@ export class RemoteClientStrands {
|
|
|
244
245
|
});
|
|
245
246
|
}
|
|
246
247
|
const config = await getAgentCoreRuntimeConfig();
|
|
247
|
-
const agentRuntimeArn = config.agentRuntimes?.['Remote'];
|
|
248
|
+
const agentRuntimeArn = config.agentRuntimes?.['Remote']?.arn;
|
|
248
249
|
if (!agentRuntimeArn) {
|
|
249
250
|
throw new Error(
|
|
250
251
|
\`No connected agent runtime named 'Remote' found in runtime configuration.\`,
|
|
@@ -12,7 +12,7 @@ export class <%- targetAgentClassName %>ClientStrands {
|
|
|
12
12
|
}
|
|
13
13
|
const config = await getAgentCoreRuntimeConfig();
|
|
14
14
|
const agentRuntimeArn =
|
|
15
|
-
config.agentRuntimes?.['<%- targetAgentClassName %>'];
|
|
15
|
+
config.agentRuntimes?.['<%- targetAgentClassName %>']?.arn;
|
|
16
16
|
if (!agentRuntimeArn) {
|
|
17
17
|
throw new Error(
|
|
18
18
|
`No connected agent runtime named '<%- targetAgentClassName %>' found in runtime configuration.`,
|
|
@@ -7,8 +7,13 @@ import {
|
|
|
7
7
|
import express, { type Request, type Response, type NextFunction } from 'express';
|
|
8
8
|
import cors from 'cors';
|
|
9
9
|
import { randomUUID } from 'node:crypto';
|
|
10
|
-
import {
|
|
10
|
+
import {
|
|
11
|
+
ModelErrorLoggingPlugin,
|
|
12
|
+
ToolErrorLoggingPlugin,
|
|
13
|
+
runWithSessionId,
|
|
14
|
+
} from '<%- agentConnectionImport %>';
|
|
11
15
|
import { getAgent } from './agent<% if (esm) { %>.js<% } %>';
|
|
16
|
+
import { getSessionManager } from './session<% if (esm) { %>.js<% } %>';
|
|
12
17
|
|
|
13
18
|
const PORT = parseInt(process.env.PORT || '8080');
|
|
14
19
|
const HOST = '0.0.0.0';
|
|
@@ -32,6 +37,10 @@ void (async () => {
|
|
|
32
37
|
agent,
|
|
33
38
|
name: '<%= agentNameClassName %>',
|
|
34
39
|
description: 'A Strands Agent exposed via the AG-UI protocol.',
|
|
40
|
+
plugins: [new ModelErrorLoggingPlugin(), new ToolErrorLoggingPlugin()],
|
|
41
|
+
config: {
|
|
42
|
+
sessionManagerProvider: getSessionManager,
|
|
43
|
+
},
|
|
35
44
|
});
|
|
36
45
|
|
|
37
46
|
// Built up manually (mirroring createStrandsApp's defaults) rather than via createStrandsApp
|
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
import { Agent, tool } from '@strands-agents/sdk';
|
|
2
|
-
|
|
2
|
+
<%_ if (protocol !== 'ag-ui') { _%>
|
|
3
|
+
import {
|
|
4
|
+
ModelErrorLoggingPlugin,
|
|
5
|
+
ToolErrorLoggingPlugin,
|
|
6
|
+
} from '<%- agentConnectionImport %>';
|
|
7
|
+
import { getSessionManager } from './session<% if (esm) { %>.js<% } %>';
|
|
8
|
+
<%_ } _%>
|
|
3
9
|
import { z } from 'zod';
|
|
4
10
|
|
|
5
11
|
const multiply = tool({
|
|
@@ -18,8 +24,10 @@ export const getAgent = async () => {
|
|
|
18
24
|
Use your tools for mathematical tasks.
|
|
19
25
|
Refer to tools as your 'spellbook'.`,
|
|
20
26
|
tools: [multiply],
|
|
27
|
+
<%_ if (protocol !== 'ag-ui') { _%>
|
|
28
|
+
sessionManager: await getSessionManager(),
|
|
29
|
+
plugins: [new ModelErrorLoggingPlugin(), new ToolErrorLoggingPlugin()],
|
|
30
|
+
<%_ } _%>
|
|
21
31
|
});
|
|
22
|
-
logModelErrors(agent);
|
|
23
|
-
logToolErrors(agent);
|
|
24
32
|
return agent;
|
|
25
33
|
};
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { SessionManager } from '@strands-agents/sdk';
|
|
2
|
+
import { LocalFileStorage<% if (session === 's3') { %>, S3Storage<% } else { %>, InMemoryStorage<% } %> } from '@strands-agents/sdk/storage';
|
|
3
|
+
import {
|
|
4
|
+
getCurrentSessionId,
|
|
5
|
+
<%_ if (session === 's3') { _%>
|
|
6
|
+
getAgentCoreRuntimeConfig,
|
|
7
|
+
<%_ } _%>
|
|
8
|
+
} from '<%- agentConnectionImport %>';
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Returns a SessionManager for persisting conversation state across
|
|
12
|
+
* invocations. Local development always uses local file storage for
|
|
13
|
+
* convenience, regardless of the configured session option. Without a
|
|
14
|
+
* configured session option, conversation state is kept in memory only and
|
|
15
|
+
* does not survive process restarts.
|
|
16
|
+
*/
|
|
17
|
+
export const getSessionManager = async (): Promise<SessionManager> => {
|
|
18
|
+
const sessionId = getCurrentSessionId();
|
|
19
|
+
if (!sessionId) {
|
|
20
|
+
throw new Error(
|
|
21
|
+
'No current session id — cannot resolve a SessionManager outside of a request scope.',
|
|
22
|
+
);
|
|
23
|
+
}
|
|
24
|
+
if (process.env.LOCAL_DEV === 'true') {
|
|
25
|
+
return new SessionManager({
|
|
26
|
+
sessionId,
|
|
27
|
+
storage: new LocalFileStorage('<%- localSessionsDir %>'),
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
<%_ if (session === 's3') { _%>
|
|
31
|
+
const config = await getAgentCoreRuntimeConfig();
|
|
32
|
+
const bucketName =
|
|
33
|
+
config.agentRuntimes?.['<%- agentNameClassName %>']?.session?.bucketName;
|
|
34
|
+
if (!bucketName) {
|
|
35
|
+
throw new Error(
|
|
36
|
+
"No S3 bucket configured for this agent's session in runtime configuration.",
|
|
37
|
+
);
|
|
38
|
+
}
|
|
39
|
+
return new SessionManager({ sessionId, storage: new S3Storage(bucketName) });
|
|
40
|
+
<%_ } else { _%>
|
|
41
|
+
return new SessionManager({ sessionId, storage: new InMemoryStorage() });
|
|
42
|
+
<%_ } _%>
|
|
43
|
+
};
|
|
@@ -5,6 +5,7 @@ exports[`ts#agent#gateway-connection generator > should match snapshot for agent
|
|
|
5
5
|
export * from './core/tool-errors-strands.js';
|
|
6
6
|
export * from './core/model-errors-strands.js';
|
|
7
7
|
export * from './core/with-session-id-strands.js';
|
|
8
|
+
export * from './core/runtime-config.js';
|
|
8
9
|
export * from './core/session-context.js';
|
|
9
10
|
// Export your library code here
|
|
10
11
|
"
|
|
@@ -12,6 +12,7 @@ export interface TsAgentMetadata extends IacMetadata {
|
|
|
12
12
|
readonly rc: string;
|
|
13
13
|
readonly auth: string;
|
|
14
14
|
readonly protocol: string;
|
|
15
|
+
readonly session: string;
|
|
15
16
|
}
|
|
16
17
|
export declare const DEPENDENCIES: import("../../utils/declared-dependencies").DependencyDeclaration<readonly [{
|
|
17
18
|
readonly name: "zod";
|
|
@@ -25,6 +26,9 @@ export declare const DEPENDENCIES: import("../../utils/declared-dependencies").D
|
|
|
25
26
|
readonly name: "@aws-lambda-powertools/parameters";
|
|
26
27
|
}, {
|
|
27
28
|
readonly name: "@modelcontextprotocol/sdk";
|
|
29
|
+
}, {
|
|
30
|
+
readonly name: "@aws-sdk/client-s3";
|
|
31
|
+
readonly when: (m: TsAgentMetadata) => boolean;
|
|
28
32
|
}, {
|
|
29
33
|
readonly name: "express";
|
|
30
34
|
readonly when: (m: TsAgentMetadata) => boolean;
|
|
@@ -166,7 +170,38 @@ export declare const DEPENDENCIES: import("../../utils/declared-dependencies").D
|
|
|
166
170
|
readonly name: "@types/node";
|
|
167
171
|
} & {
|
|
168
172
|
versionOnly: true;
|
|
169
|
-
}
|
|
173
|
+
}, {
|
|
174
|
+
readonly name: "npm";
|
|
175
|
+
} & {
|
|
176
|
+
versionOnly: true;
|
|
177
|
+
}, {
|
|
178
|
+
readonly name: "minimatch";
|
|
179
|
+
} & {
|
|
180
|
+
versionOnly: true;
|
|
181
|
+
}, {
|
|
182
|
+
readonly name: "@aws/aws-distro-opentelemetry-node-autoinstrumentation";
|
|
183
|
+
} & {
|
|
184
|
+
versionOnly: true;
|
|
185
|
+
}, {
|
|
186
|
+
readonly name: "@opentelemetry/propagator-jaeger";
|
|
187
|
+
} & {
|
|
188
|
+
versionOnly: true;
|
|
189
|
+
}], readonly [{
|
|
190
|
+
readonly name: "boto3";
|
|
191
|
+
readonly when: (m: IacMetadata) => boolean;
|
|
192
|
+
} & {
|
|
193
|
+
versionOnly: true;
|
|
194
|
+
}, {
|
|
195
|
+
readonly name: "httpx";
|
|
196
|
+
readonly when: (m: IacMetadata) => boolean;
|
|
197
|
+
} & {
|
|
198
|
+
versionOnly: true;
|
|
199
|
+
}, {
|
|
200
|
+
readonly name: "mcp";
|
|
201
|
+
readonly when: (m: IacMetadata) => boolean;
|
|
202
|
+
} & {
|
|
203
|
+
versionOnly: true;
|
|
204
|
+
}]>;
|
|
170
205
|
export declare const TS_AGENT_GENERATOR_INFO: NxGeneratorInfo;
|
|
171
206
|
export declare const tsAgentGenerator: (tree: Tree, options: TsAgentGeneratorSchema) => Promise<GeneratorCallback>;
|
|
172
207
|
export default tsAgentGenerator;
|
|
@@ -5,11 +5,11 @@
|
|
|
5
5
|
import { addTsDependencies } from "../../utils/add-dependencies.js";
|
|
6
6
|
import { addAgentChatScripts } from "../../utils/agent-chat/agent-chat.js";
|
|
7
7
|
import { AGENT_CONNECTION_DEPENDENCIES, addTypeScriptFrameworkBase, ensureTypeScriptAgentConnectionProject } from "../../utils/agent-connection/agent-connection.js";
|
|
8
|
-
import { addAgentInfra } from "../../utils/agent-core-constructs/agent-core-constructs.js";
|
|
8
|
+
import { AGENT_CORE_CONSTRUCTS_PY_DEPENDENCIES, addAgentInfra } from "../../utils/agent-core-constructs/agent-core-constructs.js";
|
|
9
9
|
import { addTypeScriptBundleTarget, BUNDLE_DEPENDENCIES } from "../../utils/bundle/bundle.js";
|
|
10
10
|
import { resolveContainers } from "../../utils/containers.js";
|
|
11
11
|
import { declareDependencies, ownedElsewhere } from "../../utils/declared-dependencies.js";
|
|
12
|
-
import { addDockerScanTarget, DOCKER_DEPENDENCIES, nodeImageVersions } from "../../utils/docker.js";
|
|
12
|
+
import { ADOT_IMAGE_DEPENDENCIES, addDockerScanTarget, DOCKER_DEPENDENCIES, NODE_IMAGE_DEPENDENCIES, nodeImageVersions } from "../../utils/docker.js";
|
|
13
13
|
import { formatFilesInSubtree } from "../../utils/format.js";
|
|
14
14
|
import { FS_DEPENDENCIES, FsCommands } from "../../utils/fs.js";
|
|
15
15
|
import { resolveIac } from "../../utils/iac.js";
|
|
@@ -20,6 +20,7 @@ import { kebabCase, toClassName } from "../../utils/names.js";
|
|
|
20
20
|
import { getNpmScope } from "../../utils/npm-scope.js";
|
|
21
21
|
import { addComponentDevTarget, addComponentGeneratorMetadata, addDependencyToTargetIfNotPresent, getGeneratorInfo, readProjectConfigurationUnqualified } from "../../utils/nx.js";
|
|
22
22
|
import { sortObjectKeys } from "../../utils/object.js";
|
|
23
|
+
import { getRelativePathToRootByDirectory } from "../../utils/paths.js";
|
|
23
24
|
import { assignPort } from "../../utils/port.js";
|
|
24
25
|
import { SHARED_CONSTRUCTS_DEPENDENCIES, sharedConstructsGenerator } from "../../utils/shared-constructs.js";
|
|
25
26
|
import { BASE_IMAGES, TS_VERSIONS } from "../../utils/versions.js";
|
|
@@ -45,6 +46,10 @@ export const DEPENDENCIES = declareDependencies()({
|
|
|
45
46
|
{
|
|
46
47
|
name: '@modelcontextprotocol/sdk'
|
|
47
48
|
},
|
|
49
|
+
{
|
|
50
|
+
name: '@aws-sdk/client-s3',
|
|
51
|
+
when: (m)=>m.session === 's3'
|
|
52
|
+
},
|
|
48
53
|
{
|
|
49
54
|
name: 'express',
|
|
50
55
|
when: (m)=>m.protocol !== 'http'
|
|
@@ -152,8 +157,11 @@ export const DEPENDENCIES = declareDependencies()({
|
|
|
152
157
|
...ownedElsewhere(BUNDLE_DEPENDENCIES),
|
|
153
158
|
...ownedElsewhere(FS_DEPENDENCIES),
|
|
154
159
|
...ownedElsewhere(DOCKER_DEPENDENCIES),
|
|
155
|
-
...ownedElsewhere(SHARED_CONSTRUCTS_DEPENDENCIES)
|
|
156
|
-
|
|
160
|
+
...ownedElsewhere(SHARED_CONSTRUCTS_DEPENDENCIES),
|
|
161
|
+
...ownedElsewhere(NODE_IMAGE_DEPENDENCIES),
|
|
162
|
+
...ownedElsewhere(ADOT_IMAGE_DEPENDENCIES)
|
|
163
|
+
],
|
|
164
|
+
py: ownedElsewhere(AGENT_CORE_CONSTRUCTS_PY_DEPENDENCIES)
|
|
157
165
|
});
|
|
158
166
|
export const TS_AGENT_GENERATOR_INFO = getGeneratorInfo(import.meta.filename);
|
|
159
167
|
export const tsAgentGenerator = async (tree, options)=>{
|
|
@@ -179,6 +187,17 @@ export const tsAgentGenerator = async (tree, options)=>{
|
|
|
179
187
|
console.warn('Warning: auth is ignored when no infrastructure is configured (no infrastructure is generated)');
|
|
180
188
|
}
|
|
181
189
|
const auth = options.auth ?? 'iam';
|
|
190
|
+
const session = options.session ?? 's3';
|
|
191
|
+
if (infra === 'none' && session !== 'in-memory') {
|
|
192
|
+
console.warn('Warning: session is ignored when no infrastructure is configured (no infrastructure is generated)');
|
|
193
|
+
}
|
|
194
|
+
// Local-dev session storage lives at the workspace root
|
|
195
|
+
// (`tmp/agents/strands/<agent-name>`), not inside the project, so each agent
|
|
196
|
+
// gets its own storage directory. The `-dev`/`-serve` targets run with
|
|
197
|
+
// cwd={projectRoot}, so compute that directory relative to the project root
|
|
198
|
+
// here rather than resolving it at runtime (e.g. via import.meta.url),
|
|
199
|
+
// which would need an extra runtime helper.
|
|
200
|
+
const localSessionsDir = joinPathFragments(getRelativePathToRootByDirectory(project.root), `tmp/agents/strands/${name}`);
|
|
182
201
|
// Ensure the shared agent-connection project exists so the server entry
|
|
183
202
|
// point can import `runWithSessionId` and propagate the AgentCore session
|
|
184
203
|
// ID to any downstream MCP / A2A clients a later connection generator
|
|
@@ -191,6 +210,9 @@ export const tsAgentGenerator = async (tree, options)=>{
|
|
|
191
210
|
name,
|
|
192
211
|
agentNameClassName,
|
|
193
212
|
distDir,
|
|
213
|
+
protocol,
|
|
214
|
+
session,
|
|
215
|
+
localSessionsDir,
|
|
194
216
|
agentConnectionImport: `@${getNpmScope(tree)}/agent-connection`,
|
|
195
217
|
...esmVars(tree)
|
|
196
218
|
};
|
|
@@ -268,6 +290,7 @@ export const tsAgentGenerator = async (tree, options)=>{
|
|
|
268
290
|
dockerOutputDir,
|
|
269
291
|
iac,
|
|
270
292
|
auth,
|
|
293
|
+
session,
|
|
271
294
|
serverProtocol: infraProtocol,
|
|
272
295
|
containers
|
|
273
296
|
});
|
|
@@ -288,6 +311,7 @@ export const tsAgentGenerator = async (tree, options)=>{
|
|
|
288
311
|
rc: agentNameClassName,
|
|
289
312
|
auth,
|
|
290
313
|
protocol,
|
|
314
|
+
session,
|
|
291
315
|
...iac ? {
|
|
292
316
|
iac
|
|
293
317
|
} : {}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../packages/nx-plugin/src/ts/agent/generator.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport {\n type GeneratorCallback,\n generateFiles,\n joinPathFragments,\n OverwriteStrategy,\n type Tree,\n updateProjectConfiguration,\n} from '@nx/devkit';\nimport { addTsDependencies } from '../../utils/add-dependencies';\nimport { addAgentChatScripts } from '../../utils/agent-chat/agent-chat';\nimport {\n AGENT_CONNECTION_DEPENDENCIES,\n addTypeScriptFrameworkBase,\n ensureTypeScriptAgentConnectionProject,\n} from '../../utils/agent-connection/agent-connection';\nimport { addAgentInfra } from '../../utils/agent-core-constructs/agent-core-constructs';\nimport {\n addTypeScriptBundleTarget,\n BUNDLE_DEPENDENCIES,\n} from '../../utils/bundle/bundle';\nimport { resolveContainers } from '../../utils/containers';\nimport {\n declareDependencies,\n ownedElsewhere,\n} from '../../utils/declared-dependencies';\nimport {\n addDockerScanTarget,\n DOCKER_DEPENDENCIES,\n nodeImageVersions,\n} from '../../utils/docker';\nimport { formatFilesInSubtree } from '../../utils/format';\nimport { FS_DEPENDENCIES, FsCommands } from '../../utils/fs';\nimport { resolveIac } from '../../utils/iac';\nimport { installDependencies } from '../../utils/install';\nimport { addGeneratorMetricsIfApplicable } from '../../utils/metrics';\nimport { esmVars } from '../../utils/module-format';\nimport { kebabCase, toClassName } from '../../utils/names';\nimport { getNpmScope } from '../../utils/npm-scope';\nimport {\n addComponentDevTarget,\n addComponentGeneratorMetadata,\n addDependencyToTargetIfNotPresent,\n getGeneratorInfo,\n type NxGeneratorInfo,\n readProjectConfigurationUnqualified,\n} from '../../utils/nx';\nimport { sortObjectKeys } from '../../utils/object';\nimport { assignPort } from '../../utils/port';\nimport {\n SHARED_CONSTRUCTS_DEPENDENCIES,\n sharedConstructsGenerator,\n} from '../../utils/shared-constructs';\nimport type { IacMetadata } from '../../utils/shared-constructs-constants';\nimport { BASE_IMAGES, TS_VERSIONS, withVersions } from '../../utils/versions';\nimport type { TsAgentGeneratorSchema } from './schema';\n\n/** The metadata this generator records, which its predicates read. */\nexport interface TsAgentMetadata extends IacMetadata {\n readonly port: number;\n readonly rc: string;\n readonly auth: string;\n readonly protocol: string;\n}\n\n// Each entry names the branch it belongs to, so the same declaration drives both\n// adding and the version sync.\nexport const DEPENDENCIES = declareDependencies<TsAgentMetadata>()({\n ts: [\n { name: 'zod' },\n { name: '@strands-agents/sdk' },\n { name: '@aws-sdk/credential-providers' },\n { name: '@aws-sdk/client-appconfigdata' },\n { name: '@aws-lambda-powertools/parameters' },\n { name: '@modelcontextprotocol/sdk' },\n { name: 'express', when: (m) => m.protocol !== 'http' },\n { name: '@a2a-js/sdk', when: (m) => m.protocol === 'a2a' },\n { name: '@ag-ui/aws-strands', when: (m) => m.protocol === 'ag-ui' },\n // @ag-ui/aws-strands declares these as peer dependencies but statically\n // imports them, so they must be installed for the bundler to inline them.\n { name: '@ag-ui/a2ui-toolkit', when: (m) => m.protocol === 'ag-ui' },\n { name: '@ag-ui/client', when: (m) => m.protocol === 'ag-ui' },\n { name: '@ag-ui/core', when: (m) => m.protocol === 'ag-ui' },\n { name: '@ag-ui/encoder', when: (m) => m.protocol === 'ag-ui' },\n { name: '@trpc/server', when: (m) => m.protocol === 'http' },\n { name: '@trpc/client', when: (m) => m.protocol === 'http' },\n { name: 'ws', when: (m) => m.protocol === 'http' },\n { name: 'cors', when: (m) => m.protocol !== 'a2a' },\n { name: 'aws4fetch', when: (m) => m.protocol === 'http' },\n { name: 'aws4fetch', when: (m) => m.auth === 'iam', dev: true },\n {\n name: '@aws-sdk/credential-providers',\n when: (m) => m.auth === 'iam',\n dev: true,\n },\n { name: '@types/node', dev: true },\n // The chat CLI runs standalone via tsx and resolves the deployed agent from\n // AppConfig when `RUNTIME_CONFIG_APP_ID` is set.\n { name: 'agent-chat-cli', dev: true },\n { name: '@aws-lambda-powertools/parameters', dev: true },\n { name: '@aws-sdk/client-appconfigdata', dev: true },\n // A2A chat builds a signed @a2a-js client factory for the deployed agent.\n { name: '@a2a-js/sdk', when: (m) => m.protocol === 'a2a', dev: true },\n { name: '@types/express', when: (m) => m.protocol !== 'http', dev: true },\n { name: '@types/ws', when: (m) => m.protocol === 'http', dev: true },\n { name: '@types/cors', dev: true },\n { name: 'tsx', dev: true, root: true },\n ...ownedElsewhere(AGENT_CONNECTION_DEPENDENCIES),\n ...ownedElsewhere(BUNDLE_DEPENDENCIES),\n ...ownedElsewhere(FS_DEPENDENCIES),\n ...ownedElsewhere(DOCKER_DEPENDENCIES),\n ...ownedElsewhere(SHARED_CONSTRUCTS_DEPENDENCIES),\n ],\n});\n\nexport const TS_AGENT_GENERATOR_INFO: NxGeneratorInfo = getGeneratorInfo(\n import.meta.filename,\n);\n\nexport const tsAgentGenerator = async (\n tree: Tree,\n options: TsAgentGeneratorSchema,\n): Promise<GeneratorCallback> => {\n const project = readProjectConfigurationUnqualified(tree, options.project);\n\n if (!tree.exists(joinPathFragments(project.root, 'tsconfig.json'))) {\n throw new Error(\n `Unsupported project ${options.project}. Expected a TypeScript project (with a tsconfig.json)`,\n );\n }\n\n const defaultName = `${kebabCase(project.name.split('/').pop())}-agent`;\n const name = kebabCase(options.name || defaultName);\n const agentNameClassName = toClassName(name);\n const agentTargetPrefix = options.name ? name : 'agent';\n const targetSourceDirRelativeToProjectRoot = joinPathFragments(\n 'src',\n agentTargetPrefix,\n );\n const targetSourceDir = joinPathFragments(\n project.root,\n targetSourceDirRelativeToProjectRoot,\n );\n const relativeSourceDir = targetSourceDir.replace(project.root + '/', './');\n const distDir = joinPathFragments('dist', project.root);\n\n const infra = options.infra ?? 'agentcore';\n const protocol = options.protocol ?? 'http';\n\n // Recorded in the metadata below so the version sync can tell a CDK\n // project from a Terraform one; undefined when no infrastructure was\n // generated, in which case neither provider's packages were added.\n const iac =\n infra !== 'none' ? await resolveIac(tree, options.iac) : undefined;\n\n if (infra === 'none' && options.auth && options.auth !== 'iam') {\n console.warn(\n 'Warning: auth is ignored when no infrastructure is configured (no infrastructure is generated)',\n );\n }\n\n const auth = options.auth ?? 'iam';\n\n // Ensure the shared agent-connection project exists so the server entry\n // point can import `runWithSessionId` and propagate the AgentCore session\n // ID to any downstream MCP / A2A clients a later connection generator\n // wires into this agent.\n await ensureTypeScriptAgentConnectionProject(tree, DEPENDENCIES);\n // The agent server imports the framework base helpers (session cache + model\n // error logging) regardless of whether a connection client is wired in.\n await addTypeScriptFrameworkBase(tree, DEPENDENCIES);\n\n const templateContext = {\n name,\n agentNameClassName,\n distDir,\n agentConnectionImport: `@${getNpmScope(tree)}/agent-connection`,\n ...esmVars(tree),\n };\n\n // Generate common files shared by both protocols\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files', 'common'),\n targetSourceDir,\n templateContext,\n { overwriteStrategy: OverwriteStrategy.KeepExisting },\n );\n\n // Generate protocol-specific files\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files', protocol.toLowerCase()),\n targetSourceDir,\n templateContext,\n { overwriteStrategy: OverwriteStrategy.KeepExisting },\n );\n\n if (infra === 'agentcore') {\n const containers = await resolveContainers(tree, 'inherit');\n const dockerImageTag = `${getNpmScope(tree)}-${name}:latest`;\n\n // Add bundle target\n await addTypeScriptBundleTarget(\n tree,\n project,\n {\n targetFilePath: `${targetSourceDirRelativeToProjectRoot}/index.ts`,\n bundleOutputDir: joinPathFragments('agent', name),\n },\n DEPENDENCIES,\n );\n\n // Add the Dockerfile\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files', 'deploy'),\n targetSourceDir,\n {\n distDir,\n name,\n protocol,\n adotVersion:\n TS_VERSIONS['@aws/aws-distro-opentelemetry-node-autoinstrumentation'],\n jaegerVersion: TS_VERSIONS['@opentelemetry/propagator-jaeger'],\n nodeBaseImage: BASE_IMAGES.node,\n ...nodeImageVersions(),\n ...esmVars(tree),\n },\n { overwriteStrategy: OverwriteStrategy.KeepExisting },\n );\n\n const dockerOutputDir = joinPathFragments(\n 'dist',\n project.root,\n 'bundle',\n 'agent',\n name,\n );\n const dockerTargetName = `${agentTargetPrefix}-docker`;\n\n const fs = new FsCommands(tree, DEPENDENCIES);\n project.targets[dockerTargetName] = {\n cache: true,\n outputs: [`{workspaceRoot}/${dockerOutputDir}/Dockerfile`],\n executor: 'nx:run-commands',\n options: {\n commands: [\n fs.cp(\n `${targetSourceDir}/Dockerfile`,\n `${dockerOutputDir}/Dockerfile`,\n ),\n `${containers} build --platform linux/arm64 -t ${dockerImageTag} ${dockerOutputDir}`,\n ],\n parallel: false,\n },\n dependsOn: ['bundle'],\n };\n\n addDependencyToTargetIfNotPresent(project, 'docker', dockerTargetName);\n addDependencyToTargetIfNotPresent(project, 'build', 'docker');\n\n addDockerScanTarget(\n tree,\n {\n project,\n containerEngine: containers,\n trivyTargetName: `${agentTargetPrefix}-trivy`,\n dockerTargetName,\n imageTags: [dockerImageTag],\n },\n DEPENDENCIES,\n );\n\n // Add shared constructs\n await sharedConstructsGenerator(tree, { iac }, DEPENDENCIES);\n\n // AG-UI uses HTTP as the AgentCore protocol type (AG-UI is HTTP-based with SSE over POST).\n const infraProtocol: 'http' | 'a2a' =\n protocol === 'ag-ui' ? 'http' : (protocol as 'http' | 'a2a');\n\n await addAgentInfra(tree, {\n agentNameKebabCase: name,\n agentNameClassName,\n projectName: project.name,\n dockerImageTag,\n dockerOutputDir,\n iac,\n auth,\n serverProtocol: infraProtocol,\n containers,\n });\n }\n\n // A2A servers use port 9000 as per the Strands A2A SDK default and AgentCore A2A contract.\n // HTTP and AG-UI agents use port 8081+ to avoid conflict with VS Code server on 8080.\n const localDevPortStart = protocol === 'a2a' ? 9000 : 8081;\n const localDevPort = assignPort(tree, project, localDevPortStart, {\n component: { info: TS_AGENT_GENERATOR_INFO, name: agentTargetPrefix },\n });\n\n // Recorded below and read by the declaration's predicates, so the packages\n // added here are exactly the ones the version sync will own.\n const metadata: TsAgentMetadata = {\n port: localDevPort,\n rc: agentNameClassName,\n auth,\n protocol,\n ...(iac ? { iac } : {}),\n };\n\n addTsDependencies(tree, DEPENDENCIES, {\n metadata,\n projectRoot: project.root,\n });\n\n // Every protocol gets a standalone `chat.ts`. It connects to the local\n // `dev` server by default, or to the deployed agent (with the\n // appropriate auth) when `RUNTIME_CONFIG_APP_ID` is set.\n const scriptsDir = joinPathFragments(\n project.root,\n 'scripts',\n agentTargetPrefix,\n );\n addAgentChatScripts(tree, {\n scriptsDir,\n protocol,\n language: 'ts',\n agentNameClassName,\n auth,\n relativeAgentImport: `../../${targetSourceDirRelativeToProjectRoot}`,\n });\n\n const chatUrl =\n protocol === 'http'\n ? `ws://localhost:${localDevPort}/ws`\n : protocol === 'ag-ui'\n ? `http://localhost:${localDevPort}/invocations`\n : `http://localhost:${localDevPort}`;\n const chatCommand = `tsx ./scripts/${agentTargetPrefix}/chat.ts`;\n\n const agentTargets = {\n ...project.targets,\n [`${agentTargetPrefix}-serve`]: {\n executor: 'nx:run-commands',\n continuous: true,\n options: {\n commands: [`tsx --watch ${relativeSourceDir}/index.ts`],\n cwd: '{projectRoot}',\n env: {\n PORT: `${localDevPort}`,\n },\n },\n },\n [`${agentTargetPrefix}-dev`]: {\n executor: 'nx:run-commands',\n continuous: true,\n options: {\n commands: [`tsx --watch ${relativeSourceDir}/index.ts`],\n cwd: '{projectRoot}',\n env: {\n PORT: `${localDevPort}`,\n LOCAL_DEV: 'true',\n },\n },\n },\n [`${agentTargetPrefix}-chat`]: {\n executor: 'nx:run-commands',\n options: {\n commands: [chatCommand],\n cwd: '{projectRoot}',\n env: {\n URL: chatUrl,\n },\n },\n },\n };\n\n // Aggregate `<agent>-dev` under the project-level `dev` target.\n addComponentDevTarget(agentTargets, `${agentTargetPrefix}-dev`);\n\n updateProjectConfiguration(tree, project.name, {\n ...project,\n // Sort targets so their order is stable regardless of insertion order on\n // first run vs re-run.\n targets: sortObjectKeys(agentTargets),\n });\n\n addComponentGeneratorMetadata(\n tree,\n project.name,\n TS_AGENT_GENERATOR_INFO,\n targetSourceDirRelativeToProjectRoot,\n agentTargetPrefix,\n metadata,\n );\n\n await addGeneratorMetricsIfApplicable(tree, [TS_AGENT_GENERATOR_INFO]);\n\n await formatFilesInSubtree(tree);\n return () =>\n installDependencies(tree, options.preferInstallDependencies, {\n languages: ['typescript'],\n });\n};\n\nexport default tsAgentGenerator;\n"],"names":["generateFiles","joinPathFragments","OverwriteStrategy","updateProjectConfiguration","addTsDependencies","addAgentChatScripts","AGENT_CONNECTION_DEPENDENCIES","addTypeScriptFrameworkBase","ensureTypeScriptAgentConnectionProject","addAgentInfra","addTypeScriptBundleTarget","BUNDLE_DEPENDENCIES","resolveContainers","declareDependencies","ownedElsewhere","addDockerScanTarget","DOCKER_DEPENDENCIES","nodeImageVersions","formatFilesInSubtree","FS_DEPENDENCIES","FsCommands","resolveIac","installDependencies","addGeneratorMetricsIfApplicable","esmVars","kebabCase","toClassName","getNpmScope","addComponentDevTarget","addComponentGeneratorMetadata","addDependencyToTargetIfNotPresent","getGeneratorInfo","readProjectConfigurationUnqualified","sortObjectKeys","assignPort","SHARED_CONSTRUCTS_DEPENDENCIES","sharedConstructsGenerator","BASE_IMAGES","TS_VERSIONS","DEPENDENCIES","ts","name","when","m","protocol","auth","dev","root","TS_AGENT_GENERATOR_INFO","filename","tsAgentGenerator","tree","options","project","exists","Error","defaultName","split","pop","agentNameClassName","agentTargetPrefix","targetSourceDirRelativeToProjectRoot","targetSourceDir","relativeSourceDir","replace","distDir","infra","iac","undefined","console","warn","templateContext","agentConnectionImport","dirname","overwriteStrategy","KeepExisting","toLowerCase","containers","dockerImageTag","targetFilePath","bundleOutputDir","adotVersion","jaegerVersion","nodeBaseImage","node","dockerOutputDir","dockerTargetName","fs","targets","cache","outputs","executor","commands","cp","parallel","dependsOn","containerEngine","trivyTargetName","imageTags","infraProtocol","agentNameKebabCase","projectName","serverProtocol","localDevPortStart","localDevPort","component","info","metadata","port","rc","projectRoot","scriptsDir","language","relativeAgentImport","chatUrl","chatCommand","agentTargets","continuous","cwd","env","PORT","LOCAL_DEV","URL","preferInstallDependencies","languages"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../../../packages/nx-plugin/src/ts/agent/generator.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport {\n type GeneratorCallback,\n generateFiles,\n joinPathFragments,\n OverwriteStrategy,\n type Tree,\n updateProjectConfiguration,\n} from '@nx/devkit';\nimport { addTsDependencies } from '../../utils/add-dependencies';\nimport { addAgentChatScripts } from '../../utils/agent-chat/agent-chat';\nimport {\n AGENT_CONNECTION_DEPENDENCIES,\n addTypeScriptFrameworkBase,\n ensureTypeScriptAgentConnectionProject,\n} from '../../utils/agent-connection/agent-connection';\nimport {\n AGENT_CORE_CONSTRUCTS_PY_DEPENDENCIES,\n addAgentInfra,\n} from '../../utils/agent-core-constructs/agent-core-constructs';\nimport {\n addTypeScriptBundleTarget,\n BUNDLE_DEPENDENCIES,\n} from '../../utils/bundle/bundle';\nimport { resolveContainers } from '../../utils/containers';\nimport {\n declareDependencies,\n ownedElsewhere,\n} from '../../utils/declared-dependencies';\nimport {\n ADOT_IMAGE_DEPENDENCIES,\n addDockerScanTarget,\n DOCKER_DEPENDENCIES,\n NODE_IMAGE_DEPENDENCIES,\n nodeImageVersions,\n} from '../../utils/docker';\nimport { formatFilesInSubtree } from '../../utils/format';\nimport { FS_DEPENDENCIES, FsCommands } from '../../utils/fs';\nimport { resolveIac } from '../../utils/iac';\nimport { installDependencies } from '../../utils/install';\nimport { addGeneratorMetricsIfApplicable } from '../../utils/metrics';\nimport { esmVars } from '../../utils/module-format';\nimport { kebabCase, toClassName } from '../../utils/names';\nimport { getNpmScope } from '../../utils/npm-scope';\nimport {\n addComponentDevTarget,\n addComponentGeneratorMetadata,\n addDependencyToTargetIfNotPresent,\n getGeneratorInfo,\n type NxGeneratorInfo,\n readProjectConfigurationUnqualified,\n} from '../../utils/nx';\nimport { sortObjectKeys } from '../../utils/object';\nimport { getRelativePathToRootByDirectory } from '../../utils/paths';\nimport { assignPort } from '../../utils/port';\nimport {\n SHARED_CONSTRUCTS_DEPENDENCIES,\n sharedConstructsGenerator,\n} from '../../utils/shared-constructs';\nimport type { IacMetadata } from '../../utils/shared-constructs-constants';\nimport { BASE_IMAGES, TS_VERSIONS } from '../../utils/versions';\nimport type { TsAgentGeneratorSchema } from './schema';\n\n/** The metadata this generator records, which its predicates read. */\nexport interface TsAgentMetadata extends IacMetadata {\n readonly port: number;\n readonly rc: string;\n readonly auth: string;\n readonly protocol: string;\n readonly session: string;\n}\n\n// Each entry names the branch it belongs to, so the same declaration drives both\n// adding and the version sync.\nexport const DEPENDENCIES = declareDependencies<TsAgentMetadata>()({\n ts: [\n { name: 'zod' },\n { name: '@strands-agents/sdk' },\n { name: '@aws-sdk/credential-providers' },\n { name: '@aws-sdk/client-appconfigdata' },\n { name: '@aws-lambda-powertools/parameters' },\n { name: '@modelcontextprotocol/sdk' },\n { name: '@aws-sdk/client-s3', when: (m) => m.session === 's3' },\n { name: 'express', when: (m) => m.protocol !== 'http' },\n { name: '@a2a-js/sdk', when: (m) => m.protocol === 'a2a' },\n { name: '@ag-ui/aws-strands', when: (m) => m.protocol === 'ag-ui' },\n // @ag-ui/aws-strands declares these as peer dependencies but statically\n // imports them, so they must be installed for the bundler to inline them.\n { name: '@ag-ui/a2ui-toolkit', when: (m) => m.protocol === 'ag-ui' },\n { name: '@ag-ui/client', when: (m) => m.protocol === 'ag-ui' },\n { name: '@ag-ui/core', when: (m) => m.protocol === 'ag-ui' },\n { name: '@ag-ui/encoder', when: (m) => m.protocol === 'ag-ui' },\n { name: '@trpc/server', when: (m) => m.protocol === 'http' },\n { name: '@trpc/client', when: (m) => m.protocol === 'http' },\n { name: 'ws', when: (m) => m.protocol === 'http' },\n { name: 'cors', when: (m) => m.protocol !== 'a2a' },\n { name: 'aws4fetch', when: (m) => m.protocol === 'http' },\n { name: 'aws4fetch', when: (m) => m.auth === 'iam', dev: true },\n {\n name: '@aws-sdk/credential-providers',\n when: (m) => m.auth === 'iam',\n dev: true,\n },\n { name: '@types/node', dev: true },\n // The chat CLI runs standalone via tsx and resolves the deployed agent from\n // AppConfig when `RUNTIME_CONFIG_APP_ID` is set.\n { name: 'agent-chat-cli', dev: true },\n { name: '@aws-lambda-powertools/parameters', dev: true },\n { name: '@aws-sdk/client-appconfigdata', dev: true },\n // A2A chat builds a signed @a2a-js client factory for the deployed agent.\n { name: '@a2a-js/sdk', when: (m) => m.protocol === 'a2a', dev: true },\n { name: '@types/express', when: (m) => m.protocol !== 'http', dev: true },\n { name: '@types/ws', when: (m) => m.protocol === 'http', dev: true },\n { name: '@types/cors', dev: true },\n { name: 'tsx', dev: true, root: true },\n ...ownedElsewhere(AGENT_CONNECTION_DEPENDENCIES),\n ...ownedElsewhere(BUNDLE_DEPENDENCIES),\n ...ownedElsewhere(FS_DEPENDENCIES),\n ...ownedElsewhere(DOCKER_DEPENDENCIES),\n ...ownedElsewhere(SHARED_CONSTRUCTS_DEPENDENCIES),\n ...ownedElsewhere(NODE_IMAGE_DEPENDENCIES),\n ...ownedElsewhere(ADOT_IMAGE_DEPENDENCIES),\n ],\n py: ownedElsewhere(AGENT_CORE_CONSTRUCTS_PY_DEPENDENCIES),\n});\n\nexport const TS_AGENT_GENERATOR_INFO: NxGeneratorInfo = getGeneratorInfo(\n import.meta.filename,\n);\n\nexport const tsAgentGenerator = async (\n tree: Tree,\n options: TsAgentGeneratorSchema,\n): Promise<GeneratorCallback> => {\n const project = readProjectConfigurationUnqualified(tree, options.project);\n\n if (!tree.exists(joinPathFragments(project.root, 'tsconfig.json'))) {\n throw new Error(\n `Unsupported project ${options.project}. Expected a TypeScript project (with a tsconfig.json)`,\n );\n }\n\n const defaultName = `${kebabCase(project.name.split('/').pop())}-agent`;\n const name = kebabCase(options.name || defaultName);\n const agentNameClassName = toClassName(name);\n const agentTargetPrefix = options.name ? name : 'agent';\n const targetSourceDirRelativeToProjectRoot = joinPathFragments(\n 'src',\n agentTargetPrefix,\n );\n const targetSourceDir = joinPathFragments(\n project.root,\n targetSourceDirRelativeToProjectRoot,\n );\n const relativeSourceDir = targetSourceDir.replace(project.root + '/', './');\n const distDir = joinPathFragments('dist', project.root);\n\n const infra = options.infra ?? 'agentcore';\n const protocol = options.protocol ?? 'http';\n\n // Recorded in the metadata below so the version sync can tell a CDK\n // project from a Terraform one; undefined when no infrastructure was\n // generated, in which case neither provider's packages were added.\n const iac =\n infra !== 'none' ? await resolveIac(tree, options.iac) : undefined;\n\n if (infra === 'none' && options.auth && options.auth !== 'iam') {\n console.warn(\n 'Warning: auth is ignored when no infrastructure is configured (no infrastructure is generated)',\n );\n }\n\n const auth = options.auth ?? 'iam';\n\n const session = options.session ?? 's3';\n\n if (infra === 'none' && session !== 'in-memory') {\n console.warn(\n 'Warning: session is ignored when no infrastructure is configured (no infrastructure is generated)',\n );\n }\n\n // Local-dev session storage lives at the workspace root\n // (`tmp/agents/strands/<agent-name>`), not inside the project, so each agent\n // gets its own storage directory. The `-dev`/`-serve` targets run with\n // cwd={projectRoot}, so compute that directory relative to the project root\n // here rather than resolving it at runtime (e.g. via import.meta.url),\n // which would need an extra runtime helper.\n const localSessionsDir = joinPathFragments(\n getRelativePathToRootByDirectory(project.root),\n `tmp/agents/strands/${name}`,\n );\n\n // Ensure the shared agent-connection project exists so the server entry\n // point can import `runWithSessionId` and propagate the AgentCore session\n // ID to any downstream MCP / A2A clients a later connection generator\n // wires into this agent.\n await ensureTypeScriptAgentConnectionProject(tree, DEPENDENCIES);\n // The agent server imports the framework base helpers (session cache + model\n // error logging) regardless of whether a connection client is wired in.\n await addTypeScriptFrameworkBase(tree, DEPENDENCIES);\n\n const templateContext = {\n name,\n agentNameClassName,\n distDir,\n protocol,\n session,\n localSessionsDir,\n agentConnectionImport: `@${getNpmScope(tree)}/agent-connection`,\n ...esmVars(tree),\n };\n\n // Generate common files shared by both protocols\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files', 'common'),\n targetSourceDir,\n templateContext,\n { overwriteStrategy: OverwriteStrategy.KeepExisting },\n );\n\n // Generate protocol-specific files\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files', protocol.toLowerCase()),\n targetSourceDir,\n templateContext,\n { overwriteStrategy: OverwriteStrategy.KeepExisting },\n );\n\n if (infra === 'agentcore') {\n const containers = await resolveContainers(tree, 'inherit');\n const dockerImageTag = `${getNpmScope(tree)}-${name}:latest`;\n\n // Add bundle target\n await addTypeScriptBundleTarget(\n tree,\n project,\n {\n targetFilePath: `${targetSourceDirRelativeToProjectRoot}/index.ts`,\n bundleOutputDir: joinPathFragments('agent', name),\n },\n DEPENDENCIES,\n );\n\n // Add the Dockerfile\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files', 'deploy'),\n targetSourceDir,\n {\n distDir,\n name,\n protocol,\n adotVersion:\n TS_VERSIONS['@aws/aws-distro-opentelemetry-node-autoinstrumentation'],\n jaegerVersion: TS_VERSIONS['@opentelemetry/propagator-jaeger'],\n nodeBaseImage: BASE_IMAGES.node,\n ...nodeImageVersions(),\n ...esmVars(tree),\n },\n { overwriteStrategy: OverwriteStrategy.KeepExisting },\n );\n\n const dockerOutputDir = joinPathFragments(\n 'dist',\n project.root,\n 'bundle',\n 'agent',\n name,\n );\n const dockerTargetName = `${agentTargetPrefix}-docker`;\n\n const fs = new FsCommands(tree, DEPENDENCIES);\n project.targets[dockerTargetName] = {\n cache: true,\n outputs: [`{workspaceRoot}/${dockerOutputDir}/Dockerfile`],\n executor: 'nx:run-commands',\n options: {\n commands: [\n fs.cp(\n `${targetSourceDir}/Dockerfile`,\n `${dockerOutputDir}/Dockerfile`,\n ),\n `${containers} build --platform linux/arm64 -t ${dockerImageTag} ${dockerOutputDir}`,\n ],\n parallel: false,\n },\n dependsOn: ['bundle'],\n };\n\n addDependencyToTargetIfNotPresent(project, 'docker', dockerTargetName);\n addDependencyToTargetIfNotPresent(project, 'build', 'docker');\n\n addDockerScanTarget(\n tree,\n {\n project,\n containerEngine: containers,\n trivyTargetName: `${agentTargetPrefix}-trivy`,\n dockerTargetName,\n imageTags: [dockerImageTag],\n },\n DEPENDENCIES,\n );\n\n // Add shared constructs\n await sharedConstructsGenerator(tree, { iac }, DEPENDENCIES);\n\n // AG-UI uses HTTP as the AgentCore protocol type (AG-UI is HTTP-based with SSE over POST).\n const infraProtocol: 'http' | 'a2a' =\n protocol === 'ag-ui' ? 'http' : (protocol as 'http' | 'a2a');\n\n await addAgentInfra(tree, {\n agentNameKebabCase: name,\n agentNameClassName,\n projectName: project.name,\n dockerImageTag,\n dockerOutputDir,\n iac,\n auth,\n session,\n serverProtocol: infraProtocol,\n containers,\n });\n }\n\n // A2A servers use port 9000 as per the Strands A2A SDK default and AgentCore A2A contract.\n // HTTP and AG-UI agents use port 8081+ to avoid conflict with VS Code server on 8080.\n const localDevPortStart = protocol === 'a2a' ? 9000 : 8081;\n const localDevPort = assignPort(tree, project, localDevPortStart, {\n component: { info: TS_AGENT_GENERATOR_INFO, name: agentTargetPrefix },\n });\n\n // Recorded below and read by the declaration's predicates, so the packages\n // added here are exactly the ones the version sync will own.\n const metadata: TsAgentMetadata = {\n port: localDevPort,\n rc: agentNameClassName,\n auth,\n protocol,\n session,\n ...(iac ? { iac } : {}),\n };\n\n addTsDependencies(tree, DEPENDENCIES, {\n metadata,\n projectRoot: project.root,\n });\n\n // Every protocol gets a standalone `chat.ts`. It connects to the local\n // `dev` server by default, or to the deployed agent (with the\n // appropriate auth) when `RUNTIME_CONFIG_APP_ID` is set.\n const scriptsDir = joinPathFragments(\n project.root,\n 'scripts',\n agentTargetPrefix,\n );\n addAgentChatScripts(tree, {\n scriptsDir,\n protocol,\n language: 'ts',\n agentNameClassName,\n auth,\n relativeAgentImport: `../../${targetSourceDirRelativeToProjectRoot}`,\n });\n\n const chatUrl =\n protocol === 'http'\n ? `ws://localhost:${localDevPort}/ws`\n : protocol === 'ag-ui'\n ? `http://localhost:${localDevPort}/invocations`\n : `http://localhost:${localDevPort}`;\n const chatCommand = `tsx ./scripts/${agentTargetPrefix}/chat.ts`;\n\n const agentTargets = {\n ...project.targets,\n [`${agentTargetPrefix}-serve`]: {\n executor: 'nx:run-commands',\n continuous: true,\n options: {\n commands: [`tsx --watch ${relativeSourceDir}/index.ts`],\n cwd: '{projectRoot}',\n env: {\n PORT: `${localDevPort}`,\n },\n },\n },\n [`${agentTargetPrefix}-dev`]: {\n executor: 'nx:run-commands',\n continuous: true,\n options: {\n commands: [`tsx --watch ${relativeSourceDir}/index.ts`],\n cwd: '{projectRoot}',\n env: {\n PORT: `${localDevPort}`,\n LOCAL_DEV: 'true',\n },\n },\n },\n [`${agentTargetPrefix}-chat`]: {\n executor: 'nx:run-commands',\n options: {\n commands: [chatCommand],\n cwd: '{projectRoot}',\n env: {\n URL: chatUrl,\n },\n },\n },\n };\n\n // Aggregate `<agent>-dev` under the project-level `dev` target.\n addComponentDevTarget(agentTargets, `${agentTargetPrefix}-dev`);\n\n updateProjectConfiguration(tree, project.name, {\n ...project,\n // Sort targets so their order is stable regardless of insertion order on\n // first run vs re-run.\n targets: sortObjectKeys(agentTargets),\n });\n\n addComponentGeneratorMetadata(\n tree,\n project.name,\n TS_AGENT_GENERATOR_INFO,\n targetSourceDirRelativeToProjectRoot,\n agentTargetPrefix,\n metadata,\n );\n\n await addGeneratorMetricsIfApplicable(tree, [TS_AGENT_GENERATOR_INFO]);\n\n await formatFilesInSubtree(tree);\n return () =>\n installDependencies(tree, options.preferInstallDependencies, {\n languages: ['typescript'],\n });\n};\n\nexport default tsAgentGenerator;\n"],"names":["generateFiles","joinPathFragments","OverwriteStrategy","updateProjectConfiguration","addTsDependencies","addAgentChatScripts","AGENT_CONNECTION_DEPENDENCIES","addTypeScriptFrameworkBase","ensureTypeScriptAgentConnectionProject","AGENT_CORE_CONSTRUCTS_PY_DEPENDENCIES","addAgentInfra","addTypeScriptBundleTarget","BUNDLE_DEPENDENCIES","resolveContainers","declareDependencies","ownedElsewhere","ADOT_IMAGE_DEPENDENCIES","addDockerScanTarget","DOCKER_DEPENDENCIES","NODE_IMAGE_DEPENDENCIES","nodeImageVersions","formatFilesInSubtree","FS_DEPENDENCIES","FsCommands","resolveIac","installDependencies","addGeneratorMetricsIfApplicable","esmVars","kebabCase","toClassName","getNpmScope","addComponentDevTarget","addComponentGeneratorMetadata","addDependencyToTargetIfNotPresent","getGeneratorInfo","readProjectConfigurationUnqualified","sortObjectKeys","getRelativePathToRootByDirectory","assignPort","SHARED_CONSTRUCTS_DEPENDENCIES","sharedConstructsGenerator","BASE_IMAGES","TS_VERSIONS","DEPENDENCIES","ts","name","when","m","session","protocol","auth","dev","root","py","TS_AGENT_GENERATOR_INFO","filename","tsAgentGenerator","tree","options","project","exists","Error","defaultName","split","pop","agentNameClassName","agentTargetPrefix","targetSourceDirRelativeToProjectRoot","targetSourceDir","relativeSourceDir","replace","distDir","infra","iac","undefined","console","warn","localSessionsDir","templateContext","agentConnectionImport","dirname","overwriteStrategy","KeepExisting","toLowerCase","containers","dockerImageTag","targetFilePath","bundleOutputDir","adotVersion","jaegerVersion","nodeBaseImage","node","dockerOutputDir","dockerTargetName","fs","targets","cache","outputs","executor","commands","cp","parallel","dependsOn","containerEngine","trivyTargetName","imageTags","infraProtocol","agentNameKebabCase","projectName","serverProtocol","localDevPortStart","localDevPort","component","info","metadata","port","rc","projectRoot","scriptsDir","language","relativeAgentImport","chatUrl","chatCommand","agentTargets","continuous","cwd","env","PORT","LOCAL_DEV","URL","preferInstallDependencies","languages"],"mappings":"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"}
|
|
@@ -5,6 +5,7 @@ exports[`ts#agent#mcp-connection generator > should match snapshot for agent-con
|
|
|
5
5
|
export * from './core/tool-errors-strands.js';
|
|
6
6
|
export * from './core/model-errors-strands.js';
|
|
7
7
|
export * from './core/with-session-id-strands.js';
|
|
8
|
+
export * from './core/runtime-config.js';
|
|
8
9
|
export * from './core/session-context.js';
|
|
9
10
|
// Export your library code here
|
|
10
11
|
"
|
|
@@ -231,7 +232,7 @@ export class InventoryMcpClientStrands {
|
|
|
231
232
|
});
|
|
232
233
|
}
|
|
233
234
|
const config = await getAgentCoreRuntimeConfig();
|
|
234
|
-
const agentRuntimeArn = config.agentRuntimes?.['InventoryMcp'];
|
|
235
|
+
const agentRuntimeArn = config.agentRuntimes?.['InventoryMcp']?.arn;
|
|
235
236
|
if (!agentRuntimeArn) {
|
|
236
237
|
throw new Error(
|
|
237
238
|
\`No connected MCP server runtime named 'InventoryMcp' found in runtime configuration.\`,
|
|
@@ -11,7 +11,8 @@ export class <%- mcpServerClassName %>ClientStrands {
|
|
|
11
11
|
});
|
|
12
12
|
}
|
|
13
13
|
const config = await getAgentCoreRuntimeConfig();
|
|
14
|
-
const agentRuntimeArn =
|
|
14
|
+
const agentRuntimeArn =
|
|
15
|
+
config.agentRuntimes?.['<%- mcpServerClassName %>']?.arn;
|
|
15
16
|
if (!agentRuntimeArn) {
|
|
16
17
|
throw new Error(
|
|
17
18
|
`No connected MCP server runtime named '<%- mcpServerClassName %>' found in runtime configuration.`,
|
|
@@ -39,7 +39,8 @@ export const TestAgentAgentClientProvider: FC<PropsWithChildren> = ({
|
|
|
39
39
|
const sigv4Client = useSigV4();
|
|
40
40
|
|
|
41
41
|
const container = useMemo<TestAgentAgentTRPCContextValue>(() => {
|
|
42
|
-
//
|
|
42
|
+
// A local-dev override is a plain URL; otherwise it's the agent's
|
|
43
|
+
// runtime ARN, so build a WebSocket URL from it.
|
|
43
44
|
const wsUrl = agentRuntimeValue.startsWith('arn:')
|
|
44
45
|
? buildAgentCoreWsUrl(agentRuntimeValue)
|
|
45
46
|
: agentRuntimeValue;
|
|
@@ -155,7 +156,8 @@ export const TestAgentAgentClientProvider: FC<PropsWithChildren> = ({
|
|
|
155
156
|
const accessToken = auth?.user?.access_token;
|
|
156
157
|
|
|
157
158
|
const container = useMemo<TestAgentAgentTRPCContextValue>(() => {
|
|
158
|
-
//
|
|
159
|
+
// A local-dev override is a plain URL; otherwise it's the agent's
|
|
160
|
+
// runtime ARN, so build a WebSocket URL from it.
|
|
159
161
|
const wsUrl = agentRuntimeValue.startsWith('arn:')
|
|
160
162
|
? buildAgentCoreWsUrl(agentRuntimeValue)
|
|
161
163
|
: agentRuntimeValue;
|
|
@@ -245,7 +247,8 @@ export const TestAgentAgentClientProvider: FC<PropsWithChildren> = ({
|
|
|
245
247
|
const sigv4Client = useSigV4();
|
|
246
248
|
|
|
247
249
|
const container = useMemo<TestAgentAgentTRPCContextValue>(() => {
|
|
248
|
-
//
|
|
250
|
+
// A local-dev override is a plain URL; otherwise it's the agent's
|
|
251
|
+
// runtime ARN, so build a WebSocket URL from it.
|
|
249
252
|
const wsUrl = agentRuntimeValue.startsWith('arn:')
|
|
250
253
|
? buildAgentCoreWsUrl(agentRuntimeValue)
|
|
251
254
|
: agentRuntimeValue;
|
|
@@ -320,7 +323,8 @@ export const TestAgentAgentClientProvider: FC<PropsWithChildren> = ({
|
|
|
320
323
|
const agentRuntimeValue = runtimeConfig.agentRuntimes.TestAgent;
|
|
321
324
|
|
|
322
325
|
const container = useMemo<TestAgentAgentTRPCContextValue>(() => {
|
|
323
|
-
//
|
|
326
|
+
// A local-dev override is a plain URL; otherwise it's the agent's
|
|
327
|
+
// runtime ARN, so build a WebSocket URL from it.
|
|
324
328
|
const wsUrl = agentRuntimeValue.startsWith('arn:')
|
|
325
329
|
? buildAgentCoreWsUrl(agentRuntimeValue)
|
|
326
330
|
: agentRuntimeValue;
|
|
@@ -51,7 +51,8 @@ export const <%= agentNameClassName %>AgentClientProvider: FC<PropsWithChildren>
|
|
|
51
51
|
<%_ } _%>
|
|
52
52
|
|
|
53
53
|
const container = useMemo<<%= agentNameClassName %>AgentTRPCContextValue>(() => {
|
|
54
|
-
//
|
|
54
|
+
// A local-dev override is a plain URL; otherwise it's the agent's
|
|
55
|
+
// runtime ARN, so build a WebSocket URL from it.
|
|
55
56
|
const wsUrl = agentRuntimeValue.startsWith('arn:')
|
|
56
57
|
? buildAgentCoreWsUrl(agentRuntimeValue)
|
|
57
58
|
: agentRuntimeValue;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../packages/nx-plugin/src/ts/agent/schema.d.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { IacOption } from '../../utils/iac';\n\nexport type TsAgentFramework = 'strands';\nexport type TsAgentInfra = 'agentcore' | 'none';\nexport type AgentProtocol = 'http' | 'a2a' | 'ag-ui';\n\nexport type TsAgentAuth = 'iam' | 'cognito';\n\nexport interface TsAgentGeneratorSchema {\n project: string;\n framework?: TsAgentFramework;\n name?: string;\n infra?: TsAgentInfra;\n auth?: TsAgentAuth;\n protocol?: AgentProtocol;\n iac: IacOption;\n preferInstallDependencies?: boolean;\n}\n"],"names":[],"mappings":"AAAA;;;CAGC,
|
|
1
|
+
{"version":3,"sources":["../../../../../../packages/nx-plugin/src/ts/agent/schema.d.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { IacOption } from '../../utils/iac';\n\nexport type TsAgentFramework = 'strands';\nexport type TsAgentInfra = 'agentcore' | 'none';\nexport type AgentProtocol = 'http' | 'a2a' | 'ag-ui';\n\nexport type TsAgentAuth = 'iam' | 'cognito';\n\nexport type TsAgentSession = 's3' | 'in-memory';\n\nexport interface TsAgentGeneratorSchema {\n project: string;\n framework?: TsAgentFramework;\n name?: string;\n infra?: TsAgentInfra;\n auth?: TsAgentAuth;\n protocol?: AgentProtocol;\n session?: TsAgentSession;\n iac: IacOption;\n preferInstallDependencies?: boolean;\n}\n"],"names":[],"mappings":"AAAA;;;CAGC,GAYD,WAUC"}
|
package/src/ts/agent/schema.d.ts
CHANGED
|
@@ -11,6 +11,8 @@ export type AgentProtocol = 'http' | 'a2a' | 'ag-ui';
|
|
|
11
11
|
|
|
12
12
|
export type TsAgentAuth = 'iam' | 'cognito';
|
|
13
13
|
|
|
14
|
+
export type TsAgentSession = 's3' | 'in-memory';
|
|
15
|
+
|
|
14
16
|
export interface TsAgentGeneratorSchema {
|
|
15
17
|
project: string;
|
|
16
18
|
framework?: TsAgentFramework;
|
|
@@ -18,6 +20,7 @@ export interface TsAgentGeneratorSchema {
|
|
|
18
20
|
infra?: TsAgentInfra;
|
|
19
21
|
auth?: TsAgentAuth;
|
|
20
22
|
protocol?: AgentProtocol;
|
|
23
|
+
session?: TsAgentSession;
|
|
21
24
|
iac: IacOption;
|
|
22
25
|
preferInstallDependencies?: boolean;
|
|
23
26
|
}
|
package/src/ts/agent/schema.json
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
"$schema": "https://json-schema.org/schema",
|
|
3
3
|
"$id": "ts#agent",
|
|
4
4
|
"title": "ts#agent",
|
|
5
|
+
"x-label": "Agent",
|
|
5
6
|
"description": "Add an AI Agent to a TypeScript project",
|
|
6
7
|
"type": "object",
|
|
7
8
|
"properties": {
|
|
@@ -60,6 +61,14 @@
|
|
|
60
61
|
"default": "agentcore",
|
|
61
62
|
"x-priority": "important"
|
|
62
63
|
},
|
|
64
|
+
"session": {
|
|
65
|
+
"type": "string",
|
|
66
|
+
"description": "The storage used to persist session for your Agent.",
|
|
67
|
+
"x-prompt": "How would you like to persist session for your Agent?",
|
|
68
|
+
"enum": ["s3", "in-memory"],
|
|
69
|
+
"default": "s3",
|
|
70
|
+
"x-priority": "important"
|
|
71
|
+
},
|
|
63
72
|
"preferInstallDependencies": {
|
|
64
73
|
"type": "boolean",
|
|
65
74
|
"description": "Whether to prefer installing dependencies after the generator runs. Set to false to defer installing when batching multiple generators (an install still runs if needed so subsequent generators can compute the Nx project graph); install once at the end.",
|
|
@@ -35,7 +35,7 @@ exports[`ts#dynamodb generator > should generate terraform modules when iac is t
|
|
|
35
35
|
required_providers {
|
|
36
36
|
aws = {
|
|
37
37
|
source = "hashicorp/aws"
|
|
38
|
-
version = "6.
|
|
38
|
+
version = "6.57.1"
|
|
39
39
|
}
|
|
40
40
|
}
|
|
41
41
|
}
|
|
@@ -192,7 +192,7 @@ exports[`ts#dynamodb generator > should generate terraform modules when iac is t
|
|
|
192
192
|
required_providers {
|
|
193
193
|
aws = {
|
|
194
194
|
source = "hashicorp/aws"
|
|
195
|
-
version = "6.
|
|
195
|
+
version = "6.57.1"
|
|
196
196
|
}
|
|
197
197
|
random = {
|
|
198
198
|
source = "hashicorp/random"
|
|
@@ -141,7 +141,7 @@ exports[`ts-lambda-function generator > terraform iac > should generate terrafor
|
|
|
141
141
|
required_providers {
|
|
142
142
|
aws = {
|
|
143
143
|
source = "hashicorp/aws"
|
|
144
|
-
version = "6.
|
|
144
|
+
version = "6.57.1"
|
|
145
145
|
}
|
|
146
146
|
archive = {
|
|
147
147
|
source = "hashicorp/archive"
|
|
@@ -322,7 +322,7 @@ exports[`ts-lambda-function generator > terraform iac > should match snapshot fo
|
|
|
322
322
|
required_providers {
|
|
323
323
|
aws = {
|
|
324
324
|
source = "hashicorp/aws"
|
|
325
|
-
version = "6.
|
|
325
|
+
version = "6.57.1"
|
|
326
326
|
}
|
|
327
327
|
archive = {
|
|
328
328
|
source = "hashicorp/archive"
|