@aws/nx-plugin 1.0.15 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/README.md +1 -0
  2. package/generators.json +8 -0
  3. package/migrations.json +6 -1
  4. package/package.json +1 -1
  5. package/src/internal/test-matrix/generator.js +6 -1
  6. package/src/internal/test-matrix/generator.js.map +1 -1
  7. package/src/migrations/latest/ts-agent-guardrails-synth-input/metadata.json +3 -0
  8. package/src/migrations/latest/ts-agent-guardrails-synth-input/migration.d.ts +22 -0
  9. package/src/migrations/latest/ts-agent-guardrails-synth-input/migration.js +42 -0
  10. package/src/migrations/latest/ts-agent-guardrails-synth-input/migration.js.map +1 -0
  11. package/src/preset/__snapshots__/generator.spec.ts.snap +2 -0
  12. package/src/sdk/ts.d.ts +2 -0
  13. package/src/sdk/ts.js +2 -0
  14. package/src/sdk/ts.js.map +1 -1
  15. package/src/ts/agent/guardrails/__snapshots__/generator.spec.ts.snap +1625 -0
  16. package/src/ts/agent/guardrails/files/agent/guardrail.json.template +16 -0
  17. package/src/ts/agent/guardrails/files/agent/guardrail.ts.template +86 -0
  18. package/src/ts/agent/guardrails/generator.d.ts +10 -0
  19. package/src/ts/agent/guardrails/generator.js +120 -0
  20. package/src/ts/agent/guardrails/generator.js.map +1 -0
  21. package/src/ts/agent/guardrails/schema.d.js +6 -0
  22. package/src/ts/agent/guardrails/schema.d.js.map +1 -0
  23. package/src/ts/agent/guardrails/schema.d.ts +9 -0
  24. package/src/ts/agent/guardrails/schema.json +25 -0
  25. package/src/ts/agent/guardrails/synth-inputs.d.ts +19 -0
  26. package/src/ts/agent/guardrails/synth-inputs.js +50 -0
  27. package/src/ts/agent/guardrails/synth-inputs.js.map +1 -0
  28. package/src/utils/guardrail-constructs/files/cdk/app/guardrails/__nameKebabCase__/__nameKebabCase__-guardrail.ts.template +128 -0
  29. package/src/utils/guardrail-constructs/files/terraform/app/guardrails/__nameKebabCase__/__nameKebabCase__-guardrail.tf.template +108 -0
  30. package/src/utils/guardrail-constructs/guardrail-constructs.d.ts +31 -0
  31. package/src/utils/guardrail-constructs/guardrail-constructs.js +54 -0
  32. package/src/utils/guardrail-constructs/guardrail-constructs.js.map +1 -0
  33. package/src/utils/guardrail-constructs/guardrail-wiring.d.ts +35 -0
  34. package/src/utils/guardrail-constructs/guardrail-wiring.js +61 -0
  35. package/src/utils/guardrail-constructs/guardrail-wiring.js.map +1 -0
package/README.md CHANGED
@@ -102,6 +102,7 @@ pnpm nx g @aws/nx-plugin:ts#infra
102
102
  | `ts#mcp-server` | MCP server (TypeScript) |
103
103
  | `ts#dcr-proxy` | OAuth DCR proxy construct for Cognito-authenticated MCP servers |
104
104
  | `ts#agent` | [Strands Agent](https://strandsagents.com/) (TypeScript) |
105
+ | `ts#agent#guardrails` | Amazon Bedrock Guardrail for a TypeScript Agent (experimental) |
105
106
  | `ts#nx-generator` | Nx generator scaffold |
106
107
  | `ts#docs` | Documentation site (Astro + Starlight) |
107
108
  | `smithy#project` | Smithy model project — a service model, or a shape library shared between Smithy projects |
package/generators.json CHANGED
@@ -350,6 +350,14 @@
350
350
  "metric": "g30",
351
351
  "guidePages": ["ts-agent"]
352
352
  },
353
+ "ts#agent#guardrails": {
354
+ "factory": "./src/ts/agent/guardrails/generator",
355
+ "schema": "./src/ts/agent/guardrails/schema.json",
356
+ "description": "Add an Amazon Bedrock Guardrail to a TypeScript Agent",
357
+ "metric": "g76",
358
+ "guidePages": ["ts-agent-guardrails"],
359
+ "experimental": true
360
+ },
353
361
  "ts#agent#mcp-connection": {
354
362
  "factory": "./src/ts/agent/mcp-connection/generator",
355
363
  "schema": "./src/ts/agent/mcp-connection/schema.json",
package/migrations.json CHANGED
@@ -7,6 +7,11 @@
7
7
  "description": "Add the strands-agents-tools pillow override to the workspace root pyproject.toml uv override-dependencies",
8
8
  "implementation": "./src/migrations/latest/py-agent-pillow-override/migration"
9
9
  },
10
+ "latest-ts-agent-guardrails-synth-input": {
11
+ "version": "1.1.1",
12
+ "description": "Add each CDK-guarded TypeScript agent's guardrail.json to the synth inputs of the CDK infrastructure, so a policy change is synthesised instead of served from the Nx cache",
13
+ "implementation": "./src/migrations/latest/ts-agent-guardrails-synth-input/migration"
14
+ },
10
15
  "v1.0.0-rc.50-0001-modernize-function-props-cast": {
11
16
  "version": "1.0.0-rc.50",
12
17
  "description": "Replace the legacy angle-bracket FunctionProps type assertion with the modern as syntax in generated API constructs",
@@ -423,7 +428,7 @@
423
428
  "implementation": "./src/migrations/v1.0.9/0001-py-dynamodb-bind-base-model-meta/migration"
424
429
  },
425
430
  "sync-vended-versions": {
426
- "version": "1.0.15",
431
+ "version": "1.1.1",
427
432
  "description": "Sync vended dependency versions and the tracked plugin version to those vended by this release",
428
433
  "implementation": "./src/utils/version-upgrade-migration/migration"
429
434
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aws/nx-plugin",
3
- "version": "1.0.15",
3
+ "version": "1.1.1",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://github.com/awslabs/nx-plugin-for-aws.git",
@@ -8,7 +8,7 @@ import { licenseGenerator } from "../../sdk/license.js";
8
8
  import { pyAgentGenerator, pyApiGenerator, pyDynamoDBGenerator, pyLambdaFunctionGenerator, pyMcpServerGenerator, pyProjectGenerator, pyRdbGenerator } from "../../sdk/py.js";
9
9
  import { smithyProjectGenerator } from "../../sdk/smithy.js";
10
10
  import { terraformProjectGenerator } from "../../sdk/terraform.js";
11
- import { tsAgentGenerator, tsApiGenerator, tsDcrProxyGenerator, tsDocsGenerator, tsDynamoDBGenerator, tsInfraGenerator, tsLambdaFunctionGenerator, tsMcpServerGenerator, tsNxGeneratorGenerator, tsNxMigrationGenerator, tsNxPluginGenerator, tsProjectGenerator, tsRdbGenerator, tsWebsiteAuthGenerator, tsWebsiteGenerator } from "../../sdk/ts.js";
11
+ import { tsAgentGenerator, tsAgentGuardrailsGenerator, tsApiGenerator, tsDcrProxyGenerator, tsDocsGenerator, tsDynamoDBGenerator, tsInfraGenerator, tsLambdaFunctionGenerator, tsMcpServerGenerator, tsNxGeneratorGenerator, tsNxMigrationGenerator, tsNxPluginGenerator, tsProjectGenerator, tsRdbGenerator, tsWebsiteAuthGenerator, tsWebsiteGenerator } from "../../sdk/ts.js";
12
12
  import { installDependencies } from "../../utils/install.js";
13
13
  import { toSnakeCase } from "../../utils/names.js";
14
14
  import { getNpmScope, getNpmScopePrefix } from "../../utils/npm-scope.js";
@@ -309,6 +309,11 @@ import { getNpmScope, getNpmScopePrefix } from "../../utils/npm-scope.js";
309
309
  ...defaults
310
310
  });
311
311
  }
312
+ // Guard the default agent, which has AgentCore infrastructure.
313
+ await tsAgentGuardrailsGenerator(tree, {
314
+ project: 'ts-project',
315
+ agent: 'agent'
316
+ });
312
317
  // Python agents: Strands across every protocol, plus LangChain in its own
313
318
  // project — langchain's dependency closure would push the zip-bundled Lambda
314
319
  // in py-project past its unzipped size limit.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../packages/nx-plugin/src/internal/test-matrix/generator.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport type { GeneratorCallback, Tree } from '@nx/devkit';\nimport { agentcoreGatewayGenerator } from '../../sdk/agentcore-gateway.js';\nimport { agentcoreHarnessGenerator } from '../../sdk/agentcore-harness.js';\nimport {\n type ConnectionGeneratorSchema,\n connectionGenerator,\n} from '../../sdk/connection.js';\nimport { licenseGenerator } from '../../sdk/license.js';\nimport {\n type PyAgentGeneratorSchema,\n type PyApiGeneratorSchema,\n type PyRdbGeneratorSchema,\n pyAgentGenerator,\n pyApiGenerator,\n pyDynamoDBGenerator,\n pyLambdaFunctionGenerator,\n pyMcpServerGenerator,\n pyProjectGenerator,\n pyRdbGenerator,\n} from '../../sdk/py.js';\nimport { smithyProjectGenerator } from '../../sdk/smithy.js';\nimport { terraformProjectGenerator } from '../../sdk/terraform.js';\nimport {\n type TsAgentGeneratorSchema,\n type TsApiGeneratorSchema,\n type TsNxMigrationGeneratorSchema,\n type TsRdbGeneratorSchema,\n tsAgentGenerator,\n tsApiGenerator,\n tsDcrProxyGenerator,\n tsDocsGenerator,\n tsDynamoDBGenerator,\n tsInfraGenerator,\n tsLambdaFunctionGenerator,\n tsMcpServerGenerator,\n tsNxGeneratorGenerator,\n tsNxMigrationGenerator,\n tsNxPluginGenerator,\n tsProjectGenerator,\n tsRdbGenerator,\n tsWebsiteAuthGenerator,\n tsWebsiteGenerator,\n} from '../../sdk/ts.js';\nimport { installDependencies } from '../../utils/install.js';\nimport { toSnakeCase } from '../../utils/names.js';\nimport { getNpmScope, getNpmScopePrefix } from '../../utils/npm-scope.js';\nimport type { InternalTestMatrixGeneratorSchema } from './schema';\n\n/**\n * Scaffolds every generator, component and connection permutation the e2e tests\n * cover, by composing the generators in-process on a single tree.\n *\n * This ships with the plugin so each released version carries the matrix of the\n * generators *it* had. A test upgrading an old workspace scaffolds with the\n * released version's own matrix and never has to reason about which generators\n * existed when — driving the CLI from the test repo instead would couple the\n * test to a generator list that only describes today's plugin.\n *\n * Hidden and undocumented: it exists for the e2e suite, not for users.\n *\n * Options are typed against each generator's schema, so adding a required option\n * or changing an enum breaks the build here rather than silently reducing\n * coverage.\n *\n * Projects are generated with `preferInstallDependencies: false` by default and\n * the returned callback installs once. Nothing composed here reads the project\n * graph (only `ts#sync` does, which is not part of the matrix), so no\n * intermediate install is needed.\n */\nexport const internalTestMatrixGenerator = async (\n tree: Tree,\n options: InternalTestMatrixGeneratorSchema = {},\n): Promise<GeneratorCallback> => {\n const preferInstallDependencies = options.preferInstallDependencies ?? false;\n const defaults = { preferInstallDependencies };\n const projectDefaults = { ...defaults, directory: 'packages' };\n // Fully-qualified project names, which differ per language: TypeScript\n // projects are scope-prefixed, Python ones are dotted snake_case. Derived from\n // the workspace rather than hardcoded, so the matrix works in any workspace.\n const ts = (name: string) => `${getNpmScopePrefix(tree)}${name}`;\n const py = (name: string) =>\n `${toSnakeCase(getNpmScope(tree))}.${toSnakeCase(name)}`;\n\n // The infrastructure project every other generator deploys into. Which\n // generator owns it depends on the workspace's IaC provider, so the caller\n // asks for the one matching the workspace it created.\n if (options.infra === 'terraform') {\n await terraformProjectGenerator(tree, {\n name: 'infra',\n type: 'application',\n ...projectDefaults,\n });\n } else {\n await tsInfraGenerator(tree, { name: 'infra', ...projectDefaults });\n // A second CDK app with stage config, which only ts#infra offers.\n await tsInfraGenerator(tree, {\n name: 'infra-with-stages',\n stageConfig: true,\n ...projectDefaults,\n });\n }\n\n // Websites (with and without TanStack Router), a docs site, and auth on each.\n await tsWebsiteGenerator(tree, {\n name: 'website',\n iac: 'inherit',\n ...projectDefaults,\n });\n await tsWebsiteGenerator(tree, {\n name: 'website-no-router',\n tanstackRouter: false,\n iac: 'inherit',\n ...projectDefaults,\n });\n await tsDocsGenerator(tree, { name: 'docs-site', ...defaults });\n await tsWebsiteAuthGenerator(tree, {\n project: ts('website'),\n cognitoDomain: 'test',\n allowSignup: true,\n iac: 'inherit',\n ...defaults,\n });\n await tsWebsiteAuthGenerator(tree, {\n project: ts('website-no-router'),\n cognitoDomain: 'test-no-router',\n allowSignup: true,\n iac: 'inherit',\n ...defaults,\n });\n\n // tRPC APIs — REST + HTTP, with Cognito and custom auth.\n const tsApis: TsApiGeneratorSchema[] = [\n { name: 'my-api', infra: 'rest-lambda', auth: 'iam', iac: 'inherit' },\n { name: 'my-api-http', infra: 'http-lambda', auth: 'iam', iac: 'inherit' },\n // The APIs above take the default `isolated` integration pattern; these\n // cover `shared`.\n {\n name: 'my-api-shared',\n infra: 'rest-lambda',\n auth: 'iam',\n integrationPattern: 'shared',\n iac: 'inherit',\n },\n {\n name: 'my-api-shared-http',\n infra: 'http-lambda',\n auth: 'iam',\n integrationPattern: 'shared',\n iac: 'inherit',\n },\n {\n name: 'my-api-custom',\n infra: 'rest-lambda',\n auth: 'custom',\n iac: 'inherit',\n },\n {\n name: 'my-api-custom-http',\n infra: 'http-lambda',\n auth: 'custom',\n iac: 'inherit',\n },\n {\n name: 'my-smithy-api',\n framework: 'smithy',\n infra: 'rest-lambda',\n auth: 'iam',\n iac: 'inherit',\n },\n ];\n for (const api of tsApis) {\n await tsApiGenerator(tree, { ...api, ...projectDefaults });\n }\n\n // A Smithy shape library; `my-smithy-api` covers consuming one.\n await smithyProjectGenerator(tree, {\n name: 'my-shapes',\n type: 'shapes',\n ...projectDefaults,\n });\n\n // Python FastAPI — REST + HTTP, with Cognito and custom auth.\n const pyApis: PyApiGeneratorSchema[] = [\n { name: 'py-api', infra: 'rest-lambda', auth: 'iam', iac: 'inherit' },\n { name: 'py-api-http', infra: 'http-lambda', auth: 'iam', iac: 'inherit' },\n {\n name: 'py-api-custom',\n infra: 'rest-lambda',\n auth: 'custom',\n iac: 'inherit',\n },\n {\n name: 'py-api-custom-http',\n infra: 'http-lambda',\n auth: 'custom',\n iac: 'inherit',\n },\n ];\n for (const api of pyApis) {\n await pyApiGenerator(tree, { ...api, ...projectDefaults });\n }\n\n // Library projects hosting the components below, each with a lambda function.\n await pyProjectGenerator(tree, {\n name: 'py-project',\n type: 'application',\n ...projectDefaults,\n });\n await tsProjectGenerator(tree, { name: 'ts-project', ...projectDefaults });\n await pyLambdaFunctionGenerator(tree, {\n project: py('py-project'),\n name: 'my-function',\n event: 'Any',\n iac: 'inherit',\n ...defaults,\n });\n await tsLambdaFunctionGenerator(tree, {\n project: 'ts-project',\n name: 'my-function',\n event: 'Any',\n iac: 'inherit',\n ...defaults,\n });\n\n // MCP servers — uninfra'd and hosted on AgentCore.\n await pyMcpServerGenerator(tree, {\n project: 'py_project',\n name: 'my-mcp-server',\n infra: 'agentcore',\n iac: 'inherit',\n ...defaults,\n });\n await tsMcpServerGenerator(tree, {\n project: 'ts-project',\n name: 'my-mcp-server',\n infra: 'none',\n iac: 'inherit',\n ...defaults,\n });\n await tsMcpServerGenerator(tree, {\n project: 'ts-project',\n name: 'hosted-mcp-server',\n infra: 'agentcore',\n iac: 'inherit',\n ...defaults,\n });\n // Container-packaged variants, so both packagings are covered and a workspace\n // mixing them vends one copy of the shared runtime module.\n await tsMcpServerGenerator(tree, {\n project: 'ts-project',\n name: 'ecr-mcp-server',\n infra: 'agentcore-ecr',\n iac: 'inherit',\n ...defaults,\n });\n await pyMcpServerGenerator(tree, {\n project: 'py_project',\n name: 'ecr-mcp-server',\n infra: 'agentcore-ecr',\n iac: 'inherit',\n ...defaults,\n });\n\n // OAuth DCR proxy for Cognito-authenticated MCP servers.\n await tsDcrProxyGenerator(tree, {\n name: 'my-dcr-proxy',\n iac: 'inherit',\n ...projectDefaults,\n });\n\n // TypeScript agents across every protocol and auth permutation. The unnamed\n // one takes the generator's default name, which the connections below use.\n const tsAgents: TsAgentGeneratorSchema[] = [\n {\n project: 'ts-project',\n name: 'my-ts-agent',\n infra: 'none',\n iac: 'inherit',\n },\n { project: 'ts-project', infra: 'agentcore', iac: 'inherit' },\n {\n project: 'ts-project',\n name: 'my-ts-ecr-agent',\n infra: 'agentcore-ecr',\n iac: 'inherit',\n },\n {\n project: 'ts-project',\n name: 'my-ts-a2a-agent',\n protocol: 'a2a',\n infra: 'agentcore',\n iac: 'inherit',\n },\n {\n project: 'ts-project',\n name: 'my-ts-a2a-agent-cognito',\n protocol: 'a2a',\n auth: 'cognito',\n infra: 'agentcore',\n iac: 'inherit',\n },\n {\n project: 'ts-project',\n name: 'my-ts-agui-agent',\n protocol: 'ag-ui',\n infra: 'agentcore',\n iac: 'inherit',\n },\n ];\n for (const agent of tsAgents) {\n await tsAgentGenerator(tree, { ...agent, ...defaults });\n }\n\n // Python agents: Strands across every protocol, plus LangChain in its own\n // project — langchain's dependency closure would push the zip-bundled Lambda\n // in py-project past its unzipped size limit.\n const pyAgents: PyAgentGeneratorSchema[] = [\n {\n project: 'py_project',\n name: 'my-agent',\n infra: 'agentcore',\n iac: 'inherit',\n },\n {\n project: 'py_project',\n name: 'my-py-ecr-agent',\n infra: 'agentcore-ecr',\n iac: 'inherit',\n },\n {\n project: 'py_project',\n name: 'my-py-a2a-agent',\n protocol: 'a2a',\n infra: 'agentcore',\n iac: 'inherit',\n },\n {\n project: 'py_project',\n name: 'my-py-a2a-agent-cognito',\n protocol: 'a2a',\n auth: 'cognito',\n infra: 'agentcore',\n iac: 'inherit',\n },\n {\n project: 'py_project',\n name: 'my-py-agui-agent',\n protocol: 'ag-ui',\n infra: 'agentcore',\n iac: 'inherit',\n },\n ];\n for (const agent of pyAgents) {\n await pyAgentGenerator(tree, { ...agent, ...defaults });\n }\n await pyProjectGenerator(tree, {\n name: 'py-langchain-project',\n type: 'application',\n ...projectDefaults,\n });\n const langchainAgents: PyAgentGeneratorSchema[] = [\n {\n project: 'py_langchain_project',\n name: 'my-py-langchain-agent',\n protocol: 'ag-ui',\n iac: 'inherit',\n },\n {\n project: 'py_langchain_project',\n name: 'my-py-langchain-http-agent',\n protocol: 'http',\n iac: 'inherit',\n },\n {\n project: 'py_langchain_project',\n name: 'my-py-langchain-a2a-agent',\n protocol: 'a2a',\n iac: 'inherit',\n },\n ];\n for (const agent of langchainAgents) {\n await pyAgentGenerator(tree, {\n ...agent,\n framework: 'langchain',\n infra: 'agentcore',\n ...defaults,\n });\n }\n\n // AgentCore gateways, including a parent fronting the first (chained), and\n // an http-protocol gateway fronting agent runtime targets.\n await agentcoreGatewayGenerator(tree, {\n name: 'my-gateway',\n iac: 'inherit',\n ...projectDefaults,\n });\n await agentcoreGatewayGenerator(tree, {\n name: 'parent-gateway',\n iac: 'inherit',\n ...projectDefaults,\n });\n await agentcoreGatewayGenerator(tree, {\n name: 'agent-gateway',\n protocol: 'http',\n iac: 'inherit',\n ...projectDefaults,\n });\n\n // AgentCore Harness — a standalone invocation project.\n await agentcoreHarnessGenerator(tree, {\n name: 'my-harness',\n infra: 'agentcore',\n iac: 'inherit',\n ...projectDefaults,\n });\n\n // Databases — DynamoDB, plus Aurora across both engines and ORMs.\n await tsDynamoDBGenerator(tree, {\n name: 'my-table',\n framework: 'electrodb',\n infra: 'dynamodb',\n iac: 'inherit',\n ...projectDefaults,\n });\n await pyDynamoDBGenerator(tree, {\n name: 'my-py-table',\n framework: 'pynamodb',\n infra: 'dynamodb',\n iac: 'inherit',\n ...projectDefaults,\n });\n const tsRdbs: TsRdbGeneratorSchema[] = [\n {\n name: 'postgres-db',\n infra: 'aurora',\n engine: 'postgres',\n framework: 'prisma',\n iac: 'inherit',\n },\n {\n name: 'my-sql-db',\n infra: 'aurora',\n engine: 'mysql',\n framework: 'prisma',\n iac: 'inherit',\n },\n ];\n for (const rdb of tsRdbs) {\n await tsRdbGenerator(tree, { ...rdb, ...projectDefaults });\n }\n const pyRdbs: PyRdbGeneratorSchema[] = [\n {\n name: 'py-postgres-db',\n infra: 'aurora',\n engine: 'postgres',\n framework: 'sqlmodel',\n iac: 'inherit',\n },\n {\n name: 'py-mysql-db',\n infra: 'aurora',\n engine: 'mysql',\n framework: 'sqlmodel',\n iac: 'inherit',\n },\n ];\n for (const rdb of pyRdbs) {\n await pyRdbGenerator(tree, { ...rdb, ...projectDefaults });\n }\n\n // Every connection edge the matrix covers.\n const connections: ConnectionGeneratorSchema[] = [\n // Website -> API\n { sourceProject: ts('website'), targetProject: ts('my-api') },\n { sourceProject: ts('website-no-router'), targetProject: ts('my-api') },\n { sourceProject: 'website', targetProject: 'py_api' },\n { sourceProject: 'website', targetProject: 'my-smithy-api' },\n // Agent -> MCP server\n {\n sourceProject: 'ts-project',\n sourceComponent: 'agent',\n targetProject: 'ts-project',\n targetComponent: 'hosted-mcp-server',\n },\n {\n sourceProject: 'ts-project',\n sourceComponent: 'my-ts-agui-agent',\n targetProject: 'ts-project',\n targetComponent: 'hosted-mcp-server',\n },\n {\n sourceProject: 'ts-project',\n sourceComponent: 'agent',\n targetProject: 'py_project',\n targetComponent: 'my-mcp-server',\n },\n {\n sourceProject: 'py_project',\n sourceComponent: 'my-agent',\n targetProject: 'py_project',\n targetComponent: 'my-mcp-server',\n },\n {\n sourceProject: 'py_langchain_project',\n sourceComponent: 'my-py-langchain-agent',\n targetProject: 'py_project',\n targetComponent: 'my-mcp-server',\n },\n // HTTP agent <-> A2A agent\n {\n sourceProject: 'ts-project',\n sourceComponent: 'agent',\n targetProject: 'ts-project',\n targetComponent: 'my-ts-a2a-agent',\n },\n {\n sourceProject: 'ts-project',\n sourceComponent: 'agent',\n targetProject: 'py_project',\n targetComponent: 'my-py-a2a-agent',\n },\n {\n sourceProject: 'py_project',\n sourceComponent: 'my-agent',\n targetProject: 'ts-project',\n targetComponent: 'my-ts-a2a-agent',\n },\n {\n sourceProject: 'py_project',\n sourceComponent: 'my-agent',\n targetProject: 'py_project',\n targetComponent: 'my-py-a2a-agent',\n },\n {\n sourceProject: 'py_langchain_project',\n sourceComponent: 'my-py-langchain-agent',\n targetProject: 'py_project',\n targetComponent: 'my-py-a2a-agent',\n },\n // Agent -> gateway, gateway -> MCP server, gateway -> gateway\n {\n sourceProject: 'ts-project',\n sourceComponent: 'agent',\n targetProject: ts('my-gateway'),\n },\n {\n sourceProject: 'py_project',\n sourceComponent: 'my-agent',\n targetProject: ts('my-gateway'),\n },\n {\n sourceProject: 'py_langchain_project',\n sourceComponent: 'my-py-langchain-agent',\n targetProject: ts('my-gateway'),\n },\n {\n sourceProject: ts('my-gateway'),\n targetProject: 'ts-project',\n targetComponent: 'hosted-mcp-server',\n },\n {\n sourceProject: ts('my-gateway'),\n targetProject: 'py_project',\n targetComponent: 'my-mcp-server',\n },\n { sourceProject: ts('parent-gateway'), targetProject: ts('my-gateway') },\n // Gateway -> agent (http gateway fronting agent runtime targets: every\n // supported protocol permutation), then website -> gateway.\n {\n sourceProject: ts('agent-gateway'),\n targetProject: 'ts-project',\n targetComponent: 'my-ts-agui-agent',\n },\n {\n sourceProject: ts('agent-gateway'),\n targetProject: 'ts-project',\n targetComponent: 'my-ts-a2a-agent',\n },\n {\n sourceProject: ts('agent-gateway'),\n targetProject: 'py_project',\n targetComponent: 'my-py-agui-agent',\n },\n {\n sourceProject: ts('agent-gateway'),\n targetProject: 'py_project',\n targetComponent: 'my-agent',\n },\n {\n sourceProject: ts('agent-gateway'),\n targetProject: 'py_project',\n targetComponent: 'my-py-a2a-agent',\n },\n {\n sourceProject: ts('website-no-router'),\n targetProject: ts('agent-gateway'),\n },\n // Website -> agent\n {\n sourceProject: ts('website'),\n targetProject: 'ts-project',\n targetComponent: 'agent',\n },\n {\n sourceProject: ts('website'),\n targetProject: 'ts-project',\n targetComponent: 'my-ts-agui-agent',\n },\n {\n sourceProject: ts('website'),\n targetProject: 'py_project',\n targetComponent: 'my-agent',\n },\n {\n sourceProject: ts('website'),\n targetProject: 'py_project',\n targetComponent: 'my-py-agui-agent',\n },\n {\n sourceProject: ts('website'),\n targetProject: 'py_langchain_project',\n targetComponent: 'my-py-langchain-agent',\n },\n {\n sourceProject: ts('website'),\n targetProject: 'py_langchain_project',\n targetComponent: 'my-py-langchain-http-agent',\n },\n // DynamoDB\n { sourceProject: 'my-api', targetProject: ts('my-table') },\n { sourceProject: 'my-smithy-api', targetProject: ts('my-table') },\n {\n sourceProject: 'ts-project',\n sourceComponent: 'my-ts-agent',\n targetProject: ts('my-table'),\n },\n {\n sourceProject: 'ts-project',\n sourceComponent: 'my-mcp-server',\n targetProject: ts('my-table'),\n },\n { sourceProject: 'py_api', targetProject: 'my_py_table' },\n {\n sourceProject: 'py_project',\n sourceComponent: 'my-agent',\n targetProject: 'my_py_table',\n },\n {\n sourceProject: 'py_project',\n sourceComponent: 'my-mcp-server',\n targetProject: 'my_py_table',\n },\n {\n sourceProject: 'py_langchain_project',\n sourceComponent: 'my-py-langchain-http-agent',\n targetProject: 'my_py_table',\n },\n // Relational databases\n { sourceProject: 'py_api', targetProject: 'py_postgres_db' },\n {\n sourceProject: 'py_project',\n sourceComponent: 'my-agent',\n targetProject: 'py_postgres_db',\n },\n {\n sourceProject: 'py_project',\n sourceComponent: 'my-mcp-server',\n targetProject: 'py_postgres_db',\n },\n ];\n for (const connection of connections) {\n await connectionGenerator(tree, { ...connection, ...defaults });\n }\n\n // Licensing, then an Nx plugin with a custom generator.\n await licenseGenerator(tree, {\n license: 'Apache-2.0',\n copyrightHolder: 'Amazon.com, Inc. or its affiliates',\n ...defaults,\n });\n await tsNxPluginGenerator(tree, {\n ...projectDefaults,\n name: 'plugin',\n directory: 'tools',\n });\n await tsNxGeneratorGenerator(tree, {\n project: ts('plugin'),\n name: 'my#generator',\n ...defaults,\n });\n\n // A migration of each kind, so the scaffolded codemods compile and the\n // plugin's migrations.json (created by the first run) registers all three.\n const migrations: Omit<TsNxMigrationGeneratorSchema, 'project'>[] = [\n {\n name: 'rename-foo-target',\n description: 'Rename the foo target to bar',\n },\n {\n name: 'migrate-custom-handlers',\n description: 'Update custom handlers for the new API',\n kind: 'agentic',\n },\n {\n name: 'upgrade-framework',\n description: 'Upgrade the framework and reconcile call sites',\n kind: 'hybrid',\n },\n ];\n for (const migration of migrations) {\n await tsNxMigrationGenerator(tree, {\n ...migration,\n project: ts('plugin'),\n ...defaults,\n });\n }\n\n return () =>\n installDependencies(tree, preferInstallDependencies, {\n languages: ['typescript', 'python'],\n });\n};\n\nexport default internalTestMatrixGenerator;\n"],"names":["agentcoreGatewayGenerator","agentcoreHarnessGenerator","connectionGenerator","licenseGenerator","pyAgentGenerator","pyApiGenerator","pyDynamoDBGenerator","pyLambdaFunctionGenerator","pyMcpServerGenerator","pyProjectGenerator","pyRdbGenerator","smithyProjectGenerator","terraformProjectGenerator","tsAgentGenerator","tsApiGenerator","tsDcrProxyGenerator","tsDocsGenerator","tsDynamoDBGenerator","tsInfraGenerator","tsLambdaFunctionGenerator","tsMcpServerGenerator","tsNxGeneratorGenerator","tsNxMigrationGenerator","tsNxPluginGenerator","tsProjectGenerator","tsRdbGenerator","tsWebsiteAuthGenerator","tsWebsiteGenerator","installDependencies","toSnakeCase","getNpmScope","getNpmScopePrefix","internalTestMatrixGenerator","tree","options","preferInstallDependencies","defaults","projectDefaults","directory","ts","name","py","infra","type","stageConfig","iac","tanstackRouter","project","cognitoDomain","allowSignup","tsApis","auth","integrationPattern","framework","api","pyApis","event","tsAgents","protocol","agent","pyAgents","langchainAgents","tsRdbs","engine","rdb","pyRdbs","connections","sourceProject","targetProject","sourceComponent","targetComponent","connection","license","copyrightHolder","migrations","description","kind","migration","languages"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../../packages/nx-plugin/src/internal/test-matrix/generator.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport type { GeneratorCallback, Tree } from '@nx/devkit';\nimport { agentcoreGatewayGenerator } from '../../sdk/agentcore-gateway.js';\nimport { agentcoreHarnessGenerator } from '../../sdk/agentcore-harness.js';\nimport {\n type ConnectionGeneratorSchema,\n connectionGenerator,\n} from '../../sdk/connection.js';\nimport { licenseGenerator } from '../../sdk/license.js';\nimport {\n type PyAgentGeneratorSchema,\n type PyApiGeneratorSchema,\n type PyRdbGeneratorSchema,\n pyAgentGenerator,\n pyApiGenerator,\n pyDynamoDBGenerator,\n pyLambdaFunctionGenerator,\n pyMcpServerGenerator,\n pyProjectGenerator,\n pyRdbGenerator,\n} from '../../sdk/py.js';\nimport { smithyProjectGenerator } from '../../sdk/smithy.js';\nimport { terraformProjectGenerator } from '../../sdk/terraform.js';\nimport {\n type TsAgentGeneratorSchema,\n type TsApiGeneratorSchema,\n type TsNxMigrationGeneratorSchema,\n type TsRdbGeneratorSchema,\n tsAgentGenerator,\n tsAgentGuardrailsGenerator,\n tsApiGenerator,\n tsDcrProxyGenerator,\n tsDocsGenerator,\n tsDynamoDBGenerator,\n tsInfraGenerator,\n tsLambdaFunctionGenerator,\n tsMcpServerGenerator,\n tsNxGeneratorGenerator,\n tsNxMigrationGenerator,\n tsNxPluginGenerator,\n tsProjectGenerator,\n tsRdbGenerator,\n tsWebsiteAuthGenerator,\n tsWebsiteGenerator,\n} from '../../sdk/ts.js';\nimport { installDependencies } from '../../utils/install.js';\nimport { toSnakeCase } from '../../utils/names.js';\nimport { getNpmScope, getNpmScopePrefix } from '../../utils/npm-scope.js';\nimport type { InternalTestMatrixGeneratorSchema } from './schema';\n\n/**\n * Scaffolds every generator, component and connection permutation the e2e tests\n * cover, by composing the generators in-process on a single tree.\n *\n * This ships with the plugin so each released version carries the matrix of the\n * generators *it* had. A test upgrading an old workspace scaffolds with the\n * released version's own matrix and never has to reason about which generators\n * existed when — driving the CLI from the test repo instead would couple the\n * test to a generator list that only describes today's plugin.\n *\n * Hidden and undocumented: it exists for the e2e suite, not for users.\n *\n * Options are typed against each generator's schema, so adding a required option\n * or changing an enum breaks the build here rather than silently reducing\n * coverage.\n *\n * Projects are generated with `preferInstallDependencies: false` by default and\n * the returned callback installs once. Nothing composed here reads the project\n * graph (only `ts#sync` does, which is not part of the matrix), so no\n * intermediate install is needed.\n */\nexport const internalTestMatrixGenerator = async (\n tree: Tree,\n options: InternalTestMatrixGeneratorSchema = {},\n): Promise<GeneratorCallback> => {\n const preferInstallDependencies = options.preferInstallDependencies ?? false;\n const defaults = { preferInstallDependencies };\n const projectDefaults = { ...defaults, directory: 'packages' };\n // Fully-qualified project names, which differ per language: TypeScript\n // projects are scope-prefixed, Python ones are dotted snake_case. Derived from\n // the workspace rather than hardcoded, so the matrix works in any workspace.\n const ts = (name: string) => `${getNpmScopePrefix(tree)}${name}`;\n const py = (name: string) =>\n `${toSnakeCase(getNpmScope(tree))}.${toSnakeCase(name)}`;\n\n // The infrastructure project every other generator deploys into. Which\n // generator owns it depends on the workspace's IaC provider, so the caller\n // asks for the one matching the workspace it created.\n if (options.infra === 'terraform') {\n await terraformProjectGenerator(tree, {\n name: 'infra',\n type: 'application',\n ...projectDefaults,\n });\n } else {\n await tsInfraGenerator(tree, { name: 'infra', ...projectDefaults });\n // A second CDK app with stage config, which only ts#infra offers.\n await tsInfraGenerator(tree, {\n name: 'infra-with-stages',\n stageConfig: true,\n ...projectDefaults,\n });\n }\n\n // Websites (with and without TanStack Router), a docs site, and auth on each.\n await tsWebsiteGenerator(tree, {\n name: 'website',\n iac: 'inherit',\n ...projectDefaults,\n });\n await tsWebsiteGenerator(tree, {\n name: 'website-no-router',\n tanstackRouter: false,\n iac: 'inherit',\n ...projectDefaults,\n });\n await tsDocsGenerator(tree, { name: 'docs-site', ...defaults });\n await tsWebsiteAuthGenerator(tree, {\n project: ts('website'),\n cognitoDomain: 'test',\n allowSignup: true,\n iac: 'inherit',\n ...defaults,\n });\n await tsWebsiteAuthGenerator(tree, {\n project: ts('website-no-router'),\n cognitoDomain: 'test-no-router',\n allowSignup: true,\n iac: 'inherit',\n ...defaults,\n });\n\n // tRPC APIs — REST + HTTP, with Cognito and custom auth.\n const tsApis: TsApiGeneratorSchema[] = [\n { name: 'my-api', infra: 'rest-lambda', auth: 'iam', iac: 'inherit' },\n { name: 'my-api-http', infra: 'http-lambda', auth: 'iam', iac: 'inherit' },\n // The APIs above take the default `isolated` integration pattern; these\n // cover `shared`.\n {\n name: 'my-api-shared',\n infra: 'rest-lambda',\n auth: 'iam',\n integrationPattern: 'shared',\n iac: 'inherit',\n },\n {\n name: 'my-api-shared-http',\n infra: 'http-lambda',\n auth: 'iam',\n integrationPattern: 'shared',\n iac: 'inherit',\n },\n {\n name: 'my-api-custom',\n infra: 'rest-lambda',\n auth: 'custom',\n iac: 'inherit',\n },\n {\n name: 'my-api-custom-http',\n infra: 'http-lambda',\n auth: 'custom',\n iac: 'inherit',\n },\n {\n name: 'my-smithy-api',\n framework: 'smithy',\n infra: 'rest-lambda',\n auth: 'iam',\n iac: 'inherit',\n },\n ];\n for (const api of tsApis) {\n await tsApiGenerator(tree, { ...api, ...projectDefaults });\n }\n\n // A Smithy shape library; `my-smithy-api` covers consuming one.\n await smithyProjectGenerator(tree, {\n name: 'my-shapes',\n type: 'shapes',\n ...projectDefaults,\n });\n\n // Python FastAPI — REST + HTTP, with Cognito and custom auth.\n const pyApis: PyApiGeneratorSchema[] = [\n { name: 'py-api', infra: 'rest-lambda', auth: 'iam', iac: 'inherit' },\n { name: 'py-api-http', infra: 'http-lambda', auth: 'iam', iac: 'inherit' },\n {\n name: 'py-api-custom',\n infra: 'rest-lambda',\n auth: 'custom',\n iac: 'inherit',\n },\n {\n name: 'py-api-custom-http',\n infra: 'http-lambda',\n auth: 'custom',\n iac: 'inherit',\n },\n ];\n for (const api of pyApis) {\n await pyApiGenerator(tree, { ...api, ...projectDefaults });\n }\n\n // Library projects hosting the components below, each with a lambda function.\n await pyProjectGenerator(tree, {\n name: 'py-project',\n type: 'application',\n ...projectDefaults,\n });\n await tsProjectGenerator(tree, { name: 'ts-project', ...projectDefaults });\n await pyLambdaFunctionGenerator(tree, {\n project: py('py-project'),\n name: 'my-function',\n event: 'Any',\n iac: 'inherit',\n ...defaults,\n });\n await tsLambdaFunctionGenerator(tree, {\n project: 'ts-project',\n name: 'my-function',\n event: 'Any',\n iac: 'inherit',\n ...defaults,\n });\n\n // MCP servers — uninfra'd and hosted on AgentCore.\n await pyMcpServerGenerator(tree, {\n project: 'py_project',\n name: 'my-mcp-server',\n infra: 'agentcore',\n iac: 'inherit',\n ...defaults,\n });\n await tsMcpServerGenerator(tree, {\n project: 'ts-project',\n name: 'my-mcp-server',\n infra: 'none',\n iac: 'inherit',\n ...defaults,\n });\n await tsMcpServerGenerator(tree, {\n project: 'ts-project',\n name: 'hosted-mcp-server',\n infra: 'agentcore',\n iac: 'inherit',\n ...defaults,\n });\n // Container-packaged variants, so both packagings are covered and a workspace\n // mixing them vends one copy of the shared runtime module.\n await tsMcpServerGenerator(tree, {\n project: 'ts-project',\n name: 'ecr-mcp-server',\n infra: 'agentcore-ecr',\n iac: 'inherit',\n ...defaults,\n });\n await pyMcpServerGenerator(tree, {\n project: 'py_project',\n name: 'ecr-mcp-server',\n infra: 'agentcore-ecr',\n iac: 'inherit',\n ...defaults,\n });\n\n // OAuth DCR proxy for Cognito-authenticated MCP servers.\n await tsDcrProxyGenerator(tree, {\n name: 'my-dcr-proxy',\n iac: 'inherit',\n ...projectDefaults,\n });\n\n // TypeScript agents across every protocol and auth permutation. The unnamed\n // one takes the generator's default name, which the connections below use.\n const tsAgents: TsAgentGeneratorSchema[] = [\n {\n project: 'ts-project',\n name: 'my-ts-agent',\n infra: 'none',\n iac: 'inherit',\n },\n { project: 'ts-project', infra: 'agentcore', iac: 'inherit' },\n {\n project: 'ts-project',\n name: 'my-ts-ecr-agent',\n infra: 'agentcore-ecr',\n iac: 'inherit',\n },\n {\n project: 'ts-project',\n name: 'my-ts-a2a-agent',\n protocol: 'a2a',\n infra: 'agentcore',\n iac: 'inherit',\n },\n {\n project: 'ts-project',\n name: 'my-ts-a2a-agent-cognito',\n protocol: 'a2a',\n auth: 'cognito',\n infra: 'agentcore',\n iac: 'inherit',\n },\n {\n project: 'ts-project',\n name: 'my-ts-agui-agent',\n protocol: 'ag-ui',\n infra: 'agentcore',\n iac: 'inherit',\n },\n ];\n for (const agent of tsAgents) {\n await tsAgentGenerator(tree, { ...agent, ...defaults });\n }\n // Guard the default agent, which has AgentCore infrastructure.\n await tsAgentGuardrailsGenerator(tree, {\n project: 'ts-project',\n agent: 'agent',\n });\n\n // Python agents: Strands across every protocol, plus LangChain in its own\n // project — langchain's dependency closure would push the zip-bundled Lambda\n // in py-project past its unzipped size limit.\n const pyAgents: PyAgentGeneratorSchema[] = [\n {\n project: 'py_project',\n name: 'my-agent',\n infra: 'agentcore',\n iac: 'inherit',\n },\n {\n project: 'py_project',\n name: 'my-py-ecr-agent',\n infra: 'agentcore-ecr',\n iac: 'inherit',\n },\n {\n project: 'py_project',\n name: 'my-py-a2a-agent',\n protocol: 'a2a',\n infra: 'agentcore',\n iac: 'inherit',\n },\n {\n project: 'py_project',\n name: 'my-py-a2a-agent-cognito',\n protocol: 'a2a',\n auth: 'cognito',\n infra: 'agentcore',\n iac: 'inherit',\n },\n {\n project: 'py_project',\n name: 'my-py-agui-agent',\n protocol: 'ag-ui',\n infra: 'agentcore',\n iac: 'inherit',\n },\n ];\n for (const agent of pyAgents) {\n await pyAgentGenerator(tree, { ...agent, ...defaults });\n }\n await pyProjectGenerator(tree, {\n name: 'py-langchain-project',\n type: 'application',\n ...projectDefaults,\n });\n const langchainAgents: PyAgentGeneratorSchema[] = [\n {\n project: 'py_langchain_project',\n name: 'my-py-langchain-agent',\n protocol: 'ag-ui',\n iac: 'inherit',\n },\n {\n project: 'py_langchain_project',\n name: 'my-py-langchain-http-agent',\n protocol: 'http',\n iac: 'inherit',\n },\n {\n project: 'py_langchain_project',\n name: 'my-py-langchain-a2a-agent',\n protocol: 'a2a',\n iac: 'inherit',\n },\n ];\n for (const agent of langchainAgents) {\n await pyAgentGenerator(tree, {\n ...agent,\n framework: 'langchain',\n infra: 'agentcore',\n ...defaults,\n });\n }\n\n // AgentCore gateways, including a parent fronting the first (chained), and\n // an http-protocol gateway fronting agent runtime targets.\n await agentcoreGatewayGenerator(tree, {\n name: 'my-gateway',\n iac: 'inherit',\n ...projectDefaults,\n });\n await agentcoreGatewayGenerator(tree, {\n name: 'parent-gateway',\n iac: 'inherit',\n ...projectDefaults,\n });\n await agentcoreGatewayGenerator(tree, {\n name: 'agent-gateway',\n protocol: 'http',\n iac: 'inherit',\n ...projectDefaults,\n });\n\n // AgentCore Harness — a standalone invocation project.\n await agentcoreHarnessGenerator(tree, {\n name: 'my-harness',\n infra: 'agentcore',\n iac: 'inherit',\n ...projectDefaults,\n });\n\n // Databases — DynamoDB, plus Aurora across both engines and ORMs.\n await tsDynamoDBGenerator(tree, {\n name: 'my-table',\n framework: 'electrodb',\n infra: 'dynamodb',\n iac: 'inherit',\n ...projectDefaults,\n });\n await pyDynamoDBGenerator(tree, {\n name: 'my-py-table',\n framework: 'pynamodb',\n infra: 'dynamodb',\n iac: 'inherit',\n ...projectDefaults,\n });\n const tsRdbs: TsRdbGeneratorSchema[] = [\n {\n name: 'postgres-db',\n infra: 'aurora',\n engine: 'postgres',\n framework: 'prisma',\n iac: 'inherit',\n },\n {\n name: 'my-sql-db',\n infra: 'aurora',\n engine: 'mysql',\n framework: 'prisma',\n iac: 'inherit',\n },\n ];\n for (const rdb of tsRdbs) {\n await tsRdbGenerator(tree, { ...rdb, ...projectDefaults });\n }\n const pyRdbs: PyRdbGeneratorSchema[] = [\n {\n name: 'py-postgres-db',\n infra: 'aurora',\n engine: 'postgres',\n framework: 'sqlmodel',\n iac: 'inherit',\n },\n {\n name: 'py-mysql-db',\n infra: 'aurora',\n engine: 'mysql',\n framework: 'sqlmodel',\n iac: 'inherit',\n },\n ];\n for (const rdb of pyRdbs) {\n await pyRdbGenerator(tree, { ...rdb, ...projectDefaults });\n }\n\n // Every connection edge the matrix covers.\n const connections: ConnectionGeneratorSchema[] = [\n // Website -> API\n { sourceProject: ts('website'), targetProject: ts('my-api') },\n { sourceProject: ts('website-no-router'), targetProject: ts('my-api') },\n { sourceProject: 'website', targetProject: 'py_api' },\n { sourceProject: 'website', targetProject: 'my-smithy-api' },\n // Agent -> MCP server\n {\n sourceProject: 'ts-project',\n sourceComponent: 'agent',\n targetProject: 'ts-project',\n targetComponent: 'hosted-mcp-server',\n },\n {\n sourceProject: 'ts-project',\n sourceComponent: 'my-ts-agui-agent',\n targetProject: 'ts-project',\n targetComponent: 'hosted-mcp-server',\n },\n {\n sourceProject: 'ts-project',\n sourceComponent: 'agent',\n targetProject: 'py_project',\n targetComponent: 'my-mcp-server',\n },\n {\n sourceProject: 'py_project',\n sourceComponent: 'my-agent',\n targetProject: 'py_project',\n targetComponent: 'my-mcp-server',\n },\n {\n sourceProject: 'py_langchain_project',\n sourceComponent: 'my-py-langchain-agent',\n targetProject: 'py_project',\n targetComponent: 'my-mcp-server',\n },\n // HTTP agent <-> A2A agent\n {\n sourceProject: 'ts-project',\n sourceComponent: 'agent',\n targetProject: 'ts-project',\n targetComponent: 'my-ts-a2a-agent',\n },\n {\n sourceProject: 'ts-project',\n sourceComponent: 'agent',\n targetProject: 'py_project',\n targetComponent: 'my-py-a2a-agent',\n },\n {\n sourceProject: 'py_project',\n sourceComponent: 'my-agent',\n targetProject: 'ts-project',\n targetComponent: 'my-ts-a2a-agent',\n },\n {\n sourceProject: 'py_project',\n sourceComponent: 'my-agent',\n targetProject: 'py_project',\n targetComponent: 'my-py-a2a-agent',\n },\n {\n sourceProject: 'py_langchain_project',\n sourceComponent: 'my-py-langchain-agent',\n targetProject: 'py_project',\n targetComponent: 'my-py-a2a-agent',\n },\n // Agent -> gateway, gateway -> MCP server, gateway -> gateway\n {\n sourceProject: 'ts-project',\n sourceComponent: 'agent',\n targetProject: ts('my-gateway'),\n },\n {\n sourceProject: 'py_project',\n sourceComponent: 'my-agent',\n targetProject: ts('my-gateway'),\n },\n {\n sourceProject: 'py_langchain_project',\n sourceComponent: 'my-py-langchain-agent',\n targetProject: ts('my-gateway'),\n },\n {\n sourceProject: ts('my-gateway'),\n targetProject: 'ts-project',\n targetComponent: 'hosted-mcp-server',\n },\n {\n sourceProject: ts('my-gateway'),\n targetProject: 'py_project',\n targetComponent: 'my-mcp-server',\n },\n { sourceProject: ts('parent-gateway'), targetProject: ts('my-gateway') },\n // Gateway -> agent (http gateway fronting agent runtime targets: every\n // supported protocol permutation), then website -> gateway.\n {\n sourceProject: ts('agent-gateway'),\n targetProject: 'ts-project',\n targetComponent: 'my-ts-agui-agent',\n },\n {\n sourceProject: ts('agent-gateway'),\n targetProject: 'ts-project',\n targetComponent: 'my-ts-a2a-agent',\n },\n {\n sourceProject: ts('agent-gateway'),\n targetProject: 'py_project',\n targetComponent: 'my-py-agui-agent',\n },\n {\n sourceProject: ts('agent-gateway'),\n targetProject: 'py_project',\n targetComponent: 'my-agent',\n },\n {\n sourceProject: ts('agent-gateway'),\n targetProject: 'py_project',\n targetComponent: 'my-py-a2a-agent',\n },\n {\n sourceProject: ts('website-no-router'),\n targetProject: ts('agent-gateway'),\n },\n // Website -> agent\n {\n sourceProject: ts('website'),\n targetProject: 'ts-project',\n targetComponent: 'agent',\n },\n {\n sourceProject: ts('website'),\n targetProject: 'ts-project',\n targetComponent: 'my-ts-agui-agent',\n },\n {\n sourceProject: ts('website'),\n targetProject: 'py_project',\n targetComponent: 'my-agent',\n },\n {\n sourceProject: ts('website'),\n targetProject: 'py_project',\n targetComponent: 'my-py-agui-agent',\n },\n {\n sourceProject: ts('website'),\n targetProject: 'py_langchain_project',\n targetComponent: 'my-py-langchain-agent',\n },\n {\n sourceProject: ts('website'),\n targetProject: 'py_langchain_project',\n targetComponent: 'my-py-langchain-http-agent',\n },\n // DynamoDB\n { sourceProject: 'my-api', targetProject: ts('my-table') },\n { sourceProject: 'my-smithy-api', targetProject: ts('my-table') },\n {\n sourceProject: 'ts-project',\n sourceComponent: 'my-ts-agent',\n targetProject: ts('my-table'),\n },\n {\n sourceProject: 'ts-project',\n sourceComponent: 'my-mcp-server',\n targetProject: ts('my-table'),\n },\n { sourceProject: 'py_api', targetProject: 'my_py_table' },\n {\n sourceProject: 'py_project',\n sourceComponent: 'my-agent',\n targetProject: 'my_py_table',\n },\n {\n sourceProject: 'py_project',\n sourceComponent: 'my-mcp-server',\n targetProject: 'my_py_table',\n },\n {\n sourceProject: 'py_langchain_project',\n sourceComponent: 'my-py-langchain-http-agent',\n targetProject: 'my_py_table',\n },\n // Relational databases\n { sourceProject: 'py_api', targetProject: 'py_postgres_db' },\n {\n sourceProject: 'py_project',\n sourceComponent: 'my-agent',\n targetProject: 'py_postgres_db',\n },\n {\n sourceProject: 'py_project',\n sourceComponent: 'my-mcp-server',\n targetProject: 'py_postgres_db',\n },\n ];\n for (const connection of connections) {\n await connectionGenerator(tree, { ...connection, ...defaults });\n }\n\n // Licensing, then an Nx plugin with a custom generator.\n await licenseGenerator(tree, {\n license: 'Apache-2.0',\n copyrightHolder: 'Amazon.com, Inc. or its affiliates',\n ...defaults,\n });\n await tsNxPluginGenerator(tree, {\n ...projectDefaults,\n name: 'plugin',\n directory: 'tools',\n });\n await tsNxGeneratorGenerator(tree, {\n project: ts('plugin'),\n name: 'my#generator',\n ...defaults,\n });\n\n // A migration of each kind, so the scaffolded codemods compile and the\n // plugin's migrations.json (created by the first run) registers all three.\n const migrations: Omit<TsNxMigrationGeneratorSchema, 'project'>[] = [\n {\n name: 'rename-foo-target',\n description: 'Rename the foo target to bar',\n },\n {\n name: 'migrate-custom-handlers',\n description: 'Update custom handlers for the new API',\n kind: 'agentic',\n },\n {\n name: 'upgrade-framework',\n description: 'Upgrade the framework and reconcile call sites',\n kind: 'hybrid',\n },\n ];\n for (const migration of migrations) {\n await tsNxMigrationGenerator(tree, {\n ...migration,\n project: ts('plugin'),\n ...defaults,\n });\n }\n\n return () =>\n installDependencies(tree, preferInstallDependencies, {\n languages: ['typescript', 'python'],\n });\n};\n\nexport default internalTestMatrixGenerator;\n"],"names":["agentcoreGatewayGenerator","agentcoreHarnessGenerator","connectionGenerator","licenseGenerator","pyAgentGenerator","pyApiGenerator","pyDynamoDBGenerator","pyLambdaFunctionGenerator","pyMcpServerGenerator","pyProjectGenerator","pyRdbGenerator","smithyProjectGenerator","terraformProjectGenerator","tsAgentGenerator","tsAgentGuardrailsGenerator","tsApiGenerator","tsDcrProxyGenerator","tsDocsGenerator","tsDynamoDBGenerator","tsInfraGenerator","tsLambdaFunctionGenerator","tsMcpServerGenerator","tsNxGeneratorGenerator","tsNxMigrationGenerator","tsNxPluginGenerator","tsProjectGenerator","tsRdbGenerator","tsWebsiteAuthGenerator","tsWebsiteGenerator","installDependencies","toSnakeCase","getNpmScope","getNpmScopePrefix","internalTestMatrixGenerator","tree","options","preferInstallDependencies","defaults","projectDefaults","directory","ts","name","py","infra","type","stageConfig","iac","tanstackRouter","project","cognitoDomain","allowSignup","tsApis","auth","integrationPattern","framework","api","pyApis","event","tsAgents","protocol","agent","pyAgents","langchainAgents","tsRdbs","engine","rdb","pyRdbs","connections","sourceProject","targetProject","sourceComponent","targetComponent","connection","license","copyrightHolder","migrations","description","kind","migration","languages"],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ {
2
+ "description": "Add each CDK-guarded TypeScript agent's guardrail.json to the synth inputs of the CDK infrastructure, so a policy change is synthesised instead of served from the Nx cache"
3
+ }
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3
+ * SPDX-License-Identifier: Apache-2.0
4
+ */
5
+ import { type MigrationReturnObject, type Tree } from '@nx/devkit';
6
+ /**
7
+ * Add each CDK-guarded TypeScript agent's guardrail.json to the `synth` inputs
8
+ * of the CDK infrastructure projects.
9
+ *
10
+ * The CDK guardrail construct reads guardrail.json at synth time to build the
11
+ * guardrail's rules and version description. The file belongs to the agent's
12
+ * project and no task output the infrastructure's `synth` hashes includes it,
13
+ * so without an explicit input a policy change is served from the Nx cache
14
+ * and `deploy-ci` ships the stale template.
15
+ *
16
+ * Guarded agents are found from the `ts#agent#guardrails` components in
17
+ * project metadata, each paired with the `ts#agent` component of the same
18
+ * name, and kept when that agent's IaC is CDK. An infrastructure project
19
+ * whose `synth` has no `inputs` array, or no `synth` target, is left
20
+ * unchanged and reported via `nextSteps`.
21
+ */
22
+ export default function migration(tree: Tree): Promise<MigrationReturnObject>;
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3
+ * SPDX-License-Identifier: Apache-2.0
4
+ */ import { getProjects, joinPathFragments } from "@nx/devkit";
5
+ import { TS_AGENT_GENERATOR_INFO } from "../../../ts/agent/generator.js";
6
+ import { TS_AGENT_GUARDRAILS_GENERATOR_INFO } from "../../../ts/agent/guardrails/generator.js";
7
+ import { addGuardrailPolicySynthInputs } from "../../../ts/agent/guardrails/synth-inputs.js";
8
+ import { formatFilesInSubtree } from "../../../utils/format.js";
9
+ /**
10
+ * Add each CDK-guarded TypeScript agent's guardrail.json to the `synth` inputs
11
+ * of the CDK infrastructure projects.
12
+ *
13
+ * The CDK guardrail construct reads guardrail.json at synth time to build the
14
+ * guardrail's rules and version description. The file belongs to the agent's
15
+ * project and no task output the infrastructure's `synth` hashes includes it,
16
+ * so without an explicit input a policy change is served from the Nx cache
17
+ * and `deploy-ci` ships the stale template.
18
+ *
19
+ * Guarded agents are found from the `ts#agent#guardrails` components in
20
+ * project metadata, each paired with the `ts#agent` component of the same
21
+ * name, and kept when that agent's IaC is CDK. An infrastructure project
22
+ * whose `synth` has no `inputs` array, or no `synth` target, is left
23
+ * unchanged and reported via `nextSteps`.
24
+ */ export default async function migration(tree) {
25
+ const policyPaths = [];
26
+ for (const project of getProjects(tree).values()){
27
+ const components = project.metadata?.components ?? [];
28
+ for (const guardrail of components.filter((c)=>c.generator === TS_AGENT_GUARDRAILS_GENERATOR_INFO.id)){
29
+ const agent = components.find((c)=>c.generator === TS_AGENT_GENERATOR_INFO.id && (c.name ?? 'agent') === guardrail.name);
30
+ if (agent?.iac === 'cdk') {
31
+ policyPaths.push(joinPathFragments(project.root, guardrail.path, 'guardrail.json'));
32
+ }
33
+ }
34
+ }
35
+ const nextSteps = addGuardrailPolicySynthInputs(tree, policyPaths);
36
+ await formatFilesInSubtree(tree);
37
+ return {
38
+ nextSteps
39
+ };
40
+ }
41
+
42
+ //# sourceMappingURL=migration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../../packages/nx-plugin/src/migrations/latest/ts-agent-guardrails-synth-input/migration.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport {\n getProjects,\n joinPathFragments,\n type MigrationReturnObject,\n type Tree,\n} from '@nx/devkit';\nimport { TS_AGENT_GENERATOR_INFO } from '../../../ts/agent/generator.js';\nimport { TS_AGENT_GUARDRAILS_GENERATOR_INFO } from '../../../ts/agent/guardrails/generator.js';\nimport { addGuardrailPolicySynthInputs } from '../../../ts/agent/guardrails/synth-inputs.js';\nimport { formatFilesInSubtree } from '../../../utils/format.js';\nimport type { ComponentMetadata } from '../../../utils/nx.js';\n\n/**\n * Add each CDK-guarded TypeScript agent's guardrail.json to the `synth` inputs\n * of the CDK infrastructure projects.\n *\n * The CDK guardrail construct reads guardrail.json at synth time to build the\n * guardrail's rules and version description. The file belongs to the agent's\n * project and no task output the infrastructure's `synth` hashes includes it,\n * so without an explicit input a policy change is served from the Nx cache\n * and `deploy-ci` ships the stale template.\n *\n * Guarded agents are found from the `ts#agent#guardrails` components in\n * project metadata, each paired with the `ts#agent` component of the same\n * name, and kept when that agent's IaC is CDK. An infrastructure project\n * whose `synth` has no `inputs` array, or no `synth` target, is left\n * unchanged and reported via `nextSteps`.\n */\nexport default async function migration(\n tree: Tree,\n): Promise<MigrationReturnObject> {\n const policyPaths: string[] = [];\n for (const project of getProjects(tree).values()) {\n const components: ComponentMetadata[] =\n (project.metadata as { components?: ComponentMetadata[] } | undefined)\n ?.components ?? [];\n for (const guardrail of components.filter(\n (c) => c.generator === TS_AGENT_GUARDRAILS_GENERATOR_INFO.id,\n )) {\n const agent = components.find(\n (c) =>\n c.generator === TS_AGENT_GENERATOR_INFO.id &&\n (c.name ?? 'agent') === guardrail.name,\n );\n if (agent?.iac === 'cdk') {\n policyPaths.push(\n joinPathFragments(project.root, guardrail.path, 'guardrail.json'),\n );\n }\n }\n }\n\n const nextSteps = addGuardrailPolicySynthInputs(tree, policyPaths);\n\n await formatFilesInSubtree(tree);\n\n return { nextSteps };\n}\n"],"names":["getProjects","joinPathFragments","TS_AGENT_GENERATOR_INFO","TS_AGENT_GUARDRAILS_GENERATOR_INFO","addGuardrailPolicySynthInputs","formatFilesInSubtree","migration","tree","policyPaths","project","values","components","metadata","guardrail","filter","c","generator","id","agent","find","name","iac","push","root","path","nextSteps"],"mappings":"AAAA;;;CAGC,GACD,SACEA,WAAW,EACXC,iBAAiB,QAGZ,aAAa;AACpB,SAASC,uBAAuB,QAAQ,iCAAiC;AACzE,SAASC,kCAAkC,QAAQ,4CAA4C;AAC/F,SAASC,6BAA6B,QAAQ,+CAA+C;AAC7F,SAASC,oBAAoB,QAAQ,2BAA2B;AAGhE;;;;;;;;;;;;;;;CAeC,GACD,eAAe,eAAeC,UAC5BC,IAAU;IAEV,MAAMC,cAAwB,EAAE;IAChC,KAAK,MAAMC,WAAWT,YAAYO,MAAMG,MAAM,GAAI;QAChD,MAAMC,aACJ,AAACF,QAAQG,QAAQ,EACbD,cAAc,EAAE;QACtB,KAAK,MAAME,aAAaF,WAAWG,MAAM,CACvC,CAACC,IAAMA,EAAEC,SAAS,KAAKb,mCAAmCc,EAAE,EAC3D;YACD,MAAMC,QAAQP,WAAWQ,IAAI,CAC3B,CAACJ,IACCA,EAAEC,SAAS,KAAKd,wBAAwBe,EAAE,IAC1C,AAACF,CAAAA,EAAEK,IAAI,IAAI,OAAM,MAAOP,UAAUO,IAAI;YAE1C,IAAIF,OAAOG,QAAQ,OAAO;gBACxBb,YAAYc,IAAI,CACdrB,kBAAkBQ,QAAQc,IAAI,EAAEV,UAAUW,IAAI,EAAE;YAEpD;QACF;IACF;IAEA,MAAMC,YAAYrB,8BAA8BG,MAAMC;IAEtD,MAAMH,qBAAqBE;IAE3B,OAAO;QAAEkB;IAAU;AACrB"}
@@ -139,6 +139,8 @@ The following list of generators are what is currently available in the \`@aws/n
139
139
 
140
140
  - **ts#agent**: Add an AI Agent to a TypeScript project
141
141
 
142
+ - **ts#agent#guardrails**: Add an Amazon Bedrock Guardrail to a TypeScript Agent (experimental)
143
+
142
144
  - **ts#api**: Create a TypeScript API
143
145
 
144
146
  - **ts#rdb**: Create a relational database project
package/src/sdk/ts.d.ts CHANGED
@@ -5,6 +5,8 @@
5
5
  export { tsInfraGenerator } from '../infra/app/generator.js';
6
6
  export type { TsInfraGeneratorSchema } from '../infra/app/schema';
7
7
  export { tsAgentGenerator } from '../ts/agent/generator.js';
8
+ export { tsAgentGuardrailsGenerator } from '../ts/agent/guardrails/generator.js';
9
+ export type { TsAgentGuardrailsGeneratorSchema } from '../ts/agent/guardrails/schema';
8
10
  export type { TsAgentGeneratorSchema } from '../ts/agent/schema';
9
11
  export { tsApiGenerator } from '../ts/api/generator.js';
10
12
  export type { TsApiGeneratorSchema } from '../ts/api/schema';
package/src/sdk/ts.js CHANGED
@@ -5,6 +5,8 @@
5
5
  export { tsInfraGenerator } from "../infra/app/generator.js";
6
6
  // TypeScript Agent Generator
7
7
  export { tsAgentGenerator } from "../ts/agent/generator.js";
8
+ // TypeScript Agent Guardrails Generator
9
+ export { tsAgentGuardrailsGenerator } from "../ts/agent/guardrails/generator.js";
8
10
  // TypeScript API
9
11
  export { tsApiGenerator } from "../ts/api/generator.js";
10
12
  // Astro Documentation Site Generator
package/src/sdk/ts.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../packages/nx-plugin/src/sdk/ts.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n// TypeScript Infrastructure\nexport { tsInfraGenerator } from '../infra/app/generator.js';\nexport type { TsInfraGeneratorSchema } from '../infra/app/schema';\n// TypeScript Agent Generator\nexport { tsAgentGenerator } from '../ts/agent/generator.js';\nexport type { TsAgentGeneratorSchema } from '../ts/agent/schema';\n// TypeScript API\nexport { tsApiGenerator } from '../ts/api/generator.js';\nexport type { TsApiGeneratorSchema } from '../ts/api/schema';\n// Astro Documentation Site Generator\nexport { tsAstroDocsGenerator } from '../ts/astro-docs/generator.js';\nexport type { TsAstroDocsGeneratorSchema } from '../ts/astro-docs/schema';\n// TypeScript DCR Proxy Generator\nexport { tsDcrProxyGenerator } from '../ts/dcr-proxy/generator.js';\nexport type { TsDcrProxyGeneratorSchema } from '../ts/dcr-proxy/schema';\n// Documentation Site Generator\nexport { tsDocsGenerator } from '../ts/docs/generator.js';\nexport type { TsDocsGeneratorSchema } from '../ts/docs/schema';\n// DynamoDB Generator\nexport { tsDynamoDBGenerator } from '../ts/dynamodb/generator.js';\nexport type { TsDynamoDBGeneratorSchema } from '../ts/dynamodb/schema';\n// TypeScript Lambda Function\nexport { tsLambdaFunctionGenerator } from '../ts/lambda-function/generator.js';\nexport type { TsLambdaFunctionGeneratorSchema } from '../ts/lambda-function/schema';\n// TypeScript Project Generator\nexport { tsProjectGenerator } from '../ts/lib/generator.js';\nexport type { TsProjectGeneratorSchema } from '../ts/lib/schema';\n// TypeScript MCP Server Generator\nexport { tsMcpServerGenerator } from '../ts/mcp-server/generator.js';\nexport type { TsMcpServerGeneratorSchema } from '../ts/mcp-server/schema';\n// TypeScript Nx Generator Generator\nexport { tsNxGeneratorGenerator } from '../ts/nx-generator/generator.js';\nexport type { TsNxGeneratorGeneratorSchema } from '../ts/nx-generator/schema';\n// TypeScript Nx Migration Generator\nexport { tsNxMigrationGenerator } from '../ts/nx-migration/generator.js';\nexport type { TsNxMigrationGeneratorSchema } from '../ts/nx-migration/schema';\n// TypeScript Nx Plugin Generator\nexport { tsNxPluginGenerator } from '../ts/nx-plugin/generator.js';\nexport type { TsNxPluginGeneratorSchema } from '../ts/nx-plugin/schema';\n// Relational Database Generator\nexport { tsRdbGenerator } from '../ts/rdb/generator.js';\nexport type { TsRdbGeneratorSchema } from '../ts/rdb/schema';\n// Runtime Config\nexport { runtimeConfigGenerator } from '../ts/react-website/runtime-config/generator.js';\nexport type { RuntimeConfigGeneratorSchema } from '../ts/react-website/runtime-config/schema';\n// TypeScript Website Generator\nexport { tsWebsiteGenerator } from '../ts/website/app/generator.js';\nexport type { TsWebsiteGeneratorSchema } from '../ts/website/app/schema';\n// TypeScript Website Auth Generator\nexport { tsWebsiteAuthGenerator } from '../ts/website/auth/generator.js';\nexport type { TsWebsiteAuthGeneratorSchema } from '../ts/website/auth/schema';\n\n// Shared Constructs\nexport { sharedConstructsGenerator } from '../utils/shared-constructs.js';\n"],"names":["tsInfraGenerator","tsAgentGenerator","tsApiGenerator","tsAstroDocsGenerator","tsDcrProxyGenerator","tsDocsGenerator","tsDynamoDBGenerator","tsLambdaFunctionGenerator","tsProjectGenerator","tsMcpServerGenerator","tsNxGeneratorGenerator","tsNxMigrationGenerator","tsNxPluginGenerator","tsRdbGenerator","runtimeConfigGenerator","tsWebsiteGenerator","tsWebsiteAuthGenerator","sharedConstructsGenerator"],"mappings":"AAAA;;;CAGC,GAED,4BAA4B;AAC5B,SAASA,gBAAgB,QAAQ,4BAA4B;AAE7D,6BAA6B;AAC7B,SAASC,gBAAgB,QAAQ,2BAA2B;AAE5D,iBAAiB;AACjB,SAASC,cAAc,QAAQ,yBAAyB;AAExD,qCAAqC;AACrC,SAASC,oBAAoB,QAAQ,gCAAgC;AAErE,iCAAiC;AACjC,SAASC,mBAAmB,QAAQ,+BAA+B;AAEnE,+BAA+B;AAC/B,SAASC,eAAe,QAAQ,0BAA0B;AAE1D,qBAAqB;AACrB,SAASC,mBAAmB,QAAQ,8BAA8B;AAElE,6BAA6B;AAC7B,SAASC,yBAAyB,QAAQ,qCAAqC;AAE/E,+BAA+B;AAC/B,SAASC,kBAAkB,QAAQ,yBAAyB;AAE5D,kCAAkC;AAClC,SAASC,oBAAoB,QAAQ,gCAAgC;AAErE,oCAAoC;AACpC,SAASC,sBAAsB,QAAQ,kCAAkC;AAEzE,oCAAoC;AACpC,SAASC,sBAAsB,QAAQ,kCAAkC;AAEzE,iCAAiC;AACjC,SAASC,mBAAmB,QAAQ,+BAA+B;AAEnE,gCAAgC;AAChC,SAASC,cAAc,QAAQ,yBAAyB;AAExD,iBAAiB;AACjB,SAASC,sBAAsB,QAAQ,kDAAkD;AAEzF,+BAA+B;AAC/B,SAASC,kBAAkB,QAAQ,iCAAiC;AAEpE,oCAAoC;AACpC,SAASC,sBAAsB,QAAQ,kCAAkC;AAGzE,oBAAoB;AACpB,SAASC,yBAAyB,QAAQ,gCAAgC"}
1
+ {"version":3,"sources":["../../../../../packages/nx-plugin/src/sdk/ts.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n// TypeScript Infrastructure\nexport { tsInfraGenerator } from '../infra/app/generator.js';\nexport type { TsInfraGeneratorSchema } from '../infra/app/schema';\n// TypeScript Agent Generator\nexport { tsAgentGenerator } from '../ts/agent/generator.js';\n// TypeScript Agent Guardrails Generator\nexport { tsAgentGuardrailsGenerator } from '../ts/agent/guardrails/generator.js';\nexport type { TsAgentGuardrailsGeneratorSchema } from '../ts/agent/guardrails/schema';\nexport type { TsAgentGeneratorSchema } from '../ts/agent/schema';\n// TypeScript API\nexport { tsApiGenerator } from '../ts/api/generator.js';\nexport type { TsApiGeneratorSchema } from '../ts/api/schema';\n// Astro Documentation Site Generator\nexport { tsAstroDocsGenerator } from '../ts/astro-docs/generator.js';\nexport type { TsAstroDocsGeneratorSchema } from '../ts/astro-docs/schema';\n// TypeScript DCR Proxy Generator\nexport { tsDcrProxyGenerator } from '../ts/dcr-proxy/generator.js';\nexport type { TsDcrProxyGeneratorSchema } from '../ts/dcr-proxy/schema';\n// Documentation Site Generator\nexport { tsDocsGenerator } from '../ts/docs/generator.js';\nexport type { TsDocsGeneratorSchema } from '../ts/docs/schema';\n// DynamoDB Generator\nexport { tsDynamoDBGenerator } from '../ts/dynamodb/generator.js';\nexport type { TsDynamoDBGeneratorSchema } from '../ts/dynamodb/schema';\n// TypeScript Lambda Function\nexport { tsLambdaFunctionGenerator } from '../ts/lambda-function/generator.js';\nexport type { TsLambdaFunctionGeneratorSchema } from '../ts/lambda-function/schema';\n// TypeScript Project Generator\nexport { tsProjectGenerator } from '../ts/lib/generator.js';\nexport type { TsProjectGeneratorSchema } from '../ts/lib/schema';\n// TypeScript MCP Server Generator\nexport { tsMcpServerGenerator } from '../ts/mcp-server/generator.js';\nexport type { TsMcpServerGeneratorSchema } from '../ts/mcp-server/schema';\n// TypeScript Nx Generator Generator\nexport { tsNxGeneratorGenerator } from '../ts/nx-generator/generator.js';\nexport type { TsNxGeneratorGeneratorSchema } from '../ts/nx-generator/schema';\n// TypeScript Nx Migration Generator\nexport { tsNxMigrationGenerator } from '../ts/nx-migration/generator.js';\nexport type { TsNxMigrationGeneratorSchema } from '../ts/nx-migration/schema';\n// TypeScript Nx Plugin Generator\nexport { tsNxPluginGenerator } from '../ts/nx-plugin/generator.js';\nexport type { TsNxPluginGeneratorSchema } from '../ts/nx-plugin/schema';\n// Relational Database Generator\nexport { tsRdbGenerator } from '../ts/rdb/generator.js';\nexport type { TsRdbGeneratorSchema } from '../ts/rdb/schema';\n// Runtime Config\nexport { runtimeConfigGenerator } from '../ts/react-website/runtime-config/generator.js';\nexport type { RuntimeConfigGeneratorSchema } from '../ts/react-website/runtime-config/schema';\n// TypeScript Website Generator\nexport { tsWebsiteGenerator } from '../ts/website/app/generator.js';\nexport type { TsWebsiteGeneratorSchema } from '../ts/website/app/schema';\n// TypeScript Website Auth Generator\nexport { tsWebsiteAuthGenerator } from '../ts/website/auth/generator.js';\nexport type { TsWebsiteAuthGeneratorSchema } from '../ts/website/auth/schema';\n\n// Shared Constructs\nexport { sharedConstructsGenerator } from '../utils/shared-constructs.js';\n"],"names":["tsInfraGenerator","tsAgentGenerator","tsAgentGuardrailsGenerator","tsApiGenerator","tsAstroDocsGenerator","tsDcrProxyGenerator","tsDocsGenerator","tsDynamoDBGenerator","tsLambdaFunctionGenerator","tsProjectGenerator","tsMcpServerGenerator","tsNxGeneratorGenerator","tsNxMigrationGenerator","tsNxPluginGenerator","tsRdbGenerator","runtimeConfigGenerator","tsWebsiteGenerator","tsWebsiteAuthGenerator","sharedConstructsGenerator"],"mappings":"AAAA;;;CAGC,GAED,4BAA4B;AAC5B,SAASA,gBAAgB,QAAQ,4BAA4B;AAE7D,6BAA6B;AAC7B,SAASC,gBAAgB,QAAQ,2BAA2B;AAC5D,wCAAwC;AACxC,SAASC,0BAA0B,QAAQ,sCAAsC;AAGjF,iBAAiB;AACjB,SAASC,cAAc,QAAQ,yBAAyB;AAExD,qCAAqC;AACrC,SAASC,oBAAoB,QAAQ,gCAAgC;AAErE,iCAAiC;AACjC,SAASC,mBAAmB,QAAQ,+BAA+B;AAEnE,+BAA+B;AAC/B,SAASC,eAAe,QAAQ,0BAA0B;AAE1D,qBAAqB;AACrB,SAASC,mBAAmB,QAAQ,8BAA8B;AAElE,6BAA6B;AAC7B,SAASC,yBAAyB,QAAQ,qCAAqC;AAE/E,+BAA+B;AAC/B,SAASC,kBAAkB,QAAQ,yBAAyB;AAE5D,kCAAkC;AAClC,SAASC,oBAAoB,QAAQ,gCAAgC;AAErE,oCAAoC;AACpC,SAASC,sBAAsB,QAAQ,kCAAkC;AAEzE,oCAAoC;AACpC,SAASC,sBAAsB,QAAQ,kCAAkC;AAEzE,iCAAiC;AACjC,SAASC,mBAAmB,QAAQ,+BAA+B;AAEnE,gCAAgC;AAChC,SAASC,cAAc,QAAQ,yBAAyB;AAExD,iBAAiB;AACjB,SAASC,sBAAsB,QAAQ,kDAAkD;AAEzF,+BAA+B;AAC/B,SAASC,kBAAkB,QAAQ,iCAAiC;AAEpE,oCAAoC;AACpC,SAASC,sBAAsB,QAAQ,kCAAkC;AAGzE,oBAAoB;AACpB,SAASC,yBAAyB,QAAQ,gCAAgC"}