@aws/nx-plugin 1.0.0-rc.31 → 1.0.0-rc.32

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.
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3
3
  * SPDX-License-Identifier: Apache-2.0
4
- */ import { addDependenciesToPackageJson, detectPackageManager, generateFiles, joinPathFragments, OverwriteStrategy, readJson, updateJson, updateProjectConfiguration, writeJson } from "@nx/devkit";
4
+ */ import { addDependenciesToPackageJson, detectPackageManager, generateFiles, joinPathFragments, OverwriteStrategy, readJson, updateJson, updateProjectConfiguration } from "@nx/devkit";
5
5
  import { ensureLicenseExceptions } from "../../license/config.js";
6
6
  import { MCP_INSPECTOR_EXCEPTIONS } from "../../license/known-exceptions.js";
7
7
  import { addMcpServerInfra } from "../../utils/agent-core-constructs/agent-core-constructs.js";
@@ -38,27 +38,11 @@ export const tsMcpServerGenerator = async (tree, options)=>{
38
38
  console.warn('Warning: auth is ignored when no infrastructure is configured (no infrastructure is generated)');
39
39
  }
40
40
  const auth = options.auth ?? 'iam';
41
- // Create a package.json if one doesn't exist, since we want to add the server as a bin target
42
41
  const projectPackageJsonPath = joinPathFragments(project.root, 'package.json');
43
- if (!tree.exists(projectPackageJsonPath)) {
44
- // Default to esm if no package.json found
45
- writeJson(tree, projectPackageJsonPath, {
46
- name: project.name,
47
- type: 'module'
48
- });
49
- }
50
- // Generate esm if the package.json is of type module, otherwise we generate commonjs
51
- // We support commonjs here because nx plugins must be commonjs
52
- // https://github.com/nrwl/nx/issues/15682
53
- const esm = readJson(tree, projectPackageJsonPath).type === 'module';
54
- // Add a target for running the MCP server with stdio transport
55
- // This allows for the project to be published to npm and then configured with npx, ie:
56
- // npx -p my-package mcp-server
57
- updateJson(tree, projectPackageJsonPath, (pkg)=>{
58
- pkg.bin ??= {};
59
- pkg.bin[name] = `${relativeSourceDir}/stdio.js`;
60
- return pkg;
61
- });
42
+ // Generate esm if the module system is esm, otherwise commonjs. Projects
43
+ // don't typically have their own package.json (dependencies are declared in
44
+ // the workspace root), so fall back to the root which is esm by default.
45
+ const esm = readJson(tree, tree.exists(projectPackageJsonPath) ? projectPackageJsonPath : 'package.json').type === 'module';
62
46
  // Generate example server
63
47
  generateFiles(tree, joinPathFragments(import.meta.dirname, 'files'), targetSourceDir, {
64
48
  name,
@@ -133,7 +117,11 @@ export const tsMcpServerGenerator = async (tree, options)=>{
133
117
  tree.delete(joinPathFragments(targetSourceDir, 'Dockerfile'));
134
118
  }
135
119
  addDependenciesToPackageJson(tree, deps, devDeps);
136
- addDependenciesToPackageJson(tree, deps, devDeps, projectPackageJsonPath);
120
+ // Add to the project's package.json too if it has one (e.g. nx plugins),
121
+ // otherwise dependencies live in the workspace root only.
122
+ if (tree.exists(projectPackageJsonPath)) {
123
+ addDependenciesToPackageJson(tree, deps, devDeps, projectPackageJsonPath);
124
+ }
137
125
  // @modelcontextprotocol/sdk declares zod as a peer dependency with a wide range
138
126
  // (^3.25 || ^4.0). Yarn does not dedupe the peer to the workspace's pinned zod, so
139
127
  // without a resolution it installs a separate zod under the SDK's own node_modules.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../packages/nx-plugin/src/ts/mcp-server/generator.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport {\n addDependenciesToPackageJson,\n detectPackageManager,\n type GeneratorCallback,\n generateFiles,\n joinPathFragments,\n OverwriteStrategy,\n readJson,\n type Tree,\n updateJson,\n updateProjectConfiguration,\n writeJson,\n} from '@nx/devkit';\nimport { ensureLicenseExceptions } from '../../license/config';\nimport { MCP_INSPECTOR_EXCEPTIONS } from '../../license/known-exceptions';\nimport { addMcpServerInfra } from '../../utils/agent-core-constructs/agent-core-constructs';\nimport { addTypeScriptBundleTarget } from '../../utils/bundle/bundle';\nimport { resolveContainers } from '../../utils/containers';\nimport { formatFilesInSubtree } from '../../utils/format';\nimport { FsCommands } from '../../utils/fs';\nimport { resolveIac } from '../../utils/iac';\nimport { installDependencies } from '../../utils/install';\nimport { addGeneratorMetricsIfApplicable } from '../../utils/metrics';\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 { sharedConstructsGenerator } from '../../utils/shared-constructs';\nimport { TS_VERSIONS, withVersions } from '../../utils/versions';\nimport type { TsMcpServerGeneratorSchema } from './schema';\n\nexport const TS_MCP_SERVER_GENERATOR_INFO: NxGeneratorInfo = getGeneratorInfo(\n import.meta.filename,\n);\n\nexport const tsMcpServerGenerator = async (\n tree: Tree,\n options: TsMcpServerGeneratorSchema,\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())}-mcp-server`;\n const name = kebabCase(options.name || defaultName);\n const mcpServerNameClassName = toClassName(name);\n const mcpTargetPrefix = options.name ? name : 'mcp-server';\n const targetSourceDirRelativeToProjectRoot = joinPathFragments(\n 'src',\n mcpTargetPrefix,\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\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 // Create a package.json if one doesn't exist, since we want to add the server as a bin target\n const projectPackageJsonPath = joinPathFragments(\n project.root,\n 'package.json',\n );\n if (!tree.exists(projectPackageJsonPath)) {\n // Default to esm if no package.json found\n writeJson(tree, projectPackageJsonPath, {\n name: project.name,\n type: 'module',\n });\n }\n\n // Generate esm if the package.json is of type module, otherwise we generate commonjs\n // We support commonjs here because nx plugins must be commonjs\n // https://github.com/nrwl/nx/issues/15682\n const esm = readJson(tree, projectPackageJsonPath).type === 'module';\n\n // Add a target for running the MCP server with stdio transport\n // This allows for the project to be published to npm and then configured with npx, ie:\n // npx -p my-package mcp-server\n updateJson(tree, projectPackageJsonPath, (pkg) => {\n pkg.bin ??= {};\n pkg.bin[name] = `${relativeSourceDir}/stdio.js`;\n return pkg;\n });\n\n // Generate example server\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files'),\n targetSourceDir,\n {\n name,\n esm,\n distDir,\n adotVersion:\n TS_VERSIONS['@aws/aws-distro-opentelemetry-node-autoinstrumentation'],\n },\n { overwriteStrategy: OverwriteStrategy.KeepExisting },\n );\n\n // Add dependencies\n const deps = withVersions([\n '@modelcontextprotocol/sdk',\n 'zod',\n 'express',\n '@aws-lambda-powertools/parameters',\n '@aws-sdk/client-appconfigdata',\n ]);\n const devDeps = withVersions([\n 'tsx',\n '@types/express',\n '@modelcontextprotocol/inspector',\n ]);\n\n // Add hosting based on infra\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(tree, project, {\n targetFilePath: `${targetSourceDirRelativeToProjectRoot}/http.ts`,\n bundleOutputDir: joinPathFragments('mcp', name),\n });\n\n const dockerOutputDir = joinPathFragments(\n 'dist',\n project.root,\n 'bundle',\n 'mcp',\n name,\n );\n const dockerTargetName = `${mcpTargetPrefix}-docker`;\n\n const fs = new FsCommands(tree);\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 // Add shared constructs\n const iac = await resolveIac(tree, options.iac);\n await sharedConstructsGenerator(tree, { iac });\n\n // Add the construct to deploy the mcp server\n await addMcpServerInfra(tree, {\n mcpServerNameKebabCase: name,\n mcpServerNameClassName,\n projectName: project.name,\n dockerImageTag,\n dockerOutputDir,\n iac,\n auth,\n containers,\n });\n } else {\n // No Dockerfile needed for non-hosted MCP\n tree.delete(joinPathFragments(targetSourceDir, 'Dockerfile'));\n }\n\n addDependenciesToPackageJson(tree, deps, devDeps);\n addDependenciesToPackageJson(tree, deps, devDeps, projectPackageJsonPath);\n\n // @modelcontextprotocol/sdk declares zod as a peer dependency with a wide range\n // (^3.25 || ^4.0). Yarn does not dedupe the peer to the workspace's pinned zod, so\n // without a resolution it installs a separate zod under the SDK's own node_modules.\n // The two zod copies have structurally incompatible types, which breaks type\n // inference for registerTool inputSchema. Scope the resolution to the SDK so\n // other consumers (e.g. @tanstack/router-generator pinning zod@3) are unaffected.\n if (detectPackageManager() === 'yarn') {\n updateJson(tree, 'package.json', (packageJson) => {\n packageJson.resolutions = {\n ...packageJson.resolutions,\n '**/@modelcontextprotocol/sdk/zod': TS_VERSIONS['zod'],\n };\n return packageJson;\n });\n }\n\n const localDevPort = assignPort(tree, project, 8000, {\n component: { info: TS_MCP_SERVER_GENERATOR_INFO, name: mcpTargetPrefix },\n });\n\n const mcpTargets = {\n ...project.targets,\n // Add targets for running the MCP server\n [`${mcpTargetPrefix}-serve-stdio`]: {\n executor: 'nx:run-commands',\n continuous: true,\n options: {\n commands: [`tsx --watch ${relativeSourceDir}/stdio.ts`],\n cwd: '{projectRoot}',\n },\n },\n [`${mcpTargetPrefix}-serve`]: {\n executor: 'nx:run-commands',\n continuous: true,\n options: {\n commands: [`tsx --watch ${relativeSourceDir}/http.ts`],\n cwd: '{projectRoot}',\n env: {\n PORT: `${localDevPort}`,\n },\n },\n },\n [`${mcpTargetPrefix}-dev`]: {\n executor: 'nx:run-commands',\n continuous: true,\n options: {\n commands: [`tsx --watch ${relativeSourceDir}/http.ts`],\n cwd: '{projectRoot}',\n env: {\n PORT: `${localDevPort}`,\n LOCAL_DEV: 'true',\n },\n },\n },\n [`${mcpTargetPrefix}-inspect`]: {\n executor: 'nx:run-commands',\n continuous: true,\n // Launch the inspector against the locally served HTTP server. The dev\n // target starts the server and any connected dependencies (e.g. a local\n // database).\n dependsOn: [`${mcpTargetPrefix}-dev`],\n options: {\n commands: [\n `mcp-inspector --transport http --server-url http://localhost:${localDevPort}/mcp`,\n ],\n cwd: '{projectRoot}',\n },\n },\n [`${mcpTargetPrefix}-inspect-stdio`]: {\n executor: 'nx:run-commands',\n continuous: true,\n options: {\n commands: [\n `mcp-inspector -- tsx --watch ${relativeSourceDir}/stdio.ts`,\n ],\n cwd: '{projectRoot}',\n },\n },\n };\n\n // Aggregate `<mcp>-dev` under the project-level `dev` target.\n addComponentDevTarget(mcpTargets, `${mcpTargetPrefix}-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(mcpTargets),\n });\n\n addComponentGeneratorMetadata(\n tree,\n project.name,\n TS_MCP_SERVER_GENERATOR_INFO,\n targetSourceDirRelativeToProjectRoot,\n mcpTargetPrefix,\n {\n port: localDevPort,\n rc: mcpServerNameClassName,\n auth,\n },\n );\n\n await addGeneratorMetricsIfApplicable(tree, [TS_MCP_SERVER_GENERATOR_INFO]);\n\n await ensureLicenseExceptions(tree, MCP_INSPECTOR_EXCEPTIONS);\n\n await formatFilesInSubtree(tree);\n return () =>\n installDependencies(tree, options.preferInstallDependencies, {\n languages: ['typescript'],\n });\n};\n\nexport default tsMcpServerGenerator;\n"],"names":["addDependenciesToPackageJson","detectPackageManager","generateFiles","joinPathFragments","OverwriteStrategy","readJson","updateJson","updateProjectConfiguration","writeJson","ensureLicenseExceptions","MCP_INSPECTOR_EXCEPTIONS","addMcpServerInfra","addTypeScriptBundleTarget","resolveContainers","formatFilesInSubtree","FsCommands","resolveIac","installDependencies","addGeneratorMetricsIfApplicable","kebabCase","toClassName","getNpmScope","addComponentDevTarget","addComponentGeneratorMetadata","addDependencyToTargetIfNotPresent","getGeneratorInfo","readProjectConfigurationUnqualified","sortObjectKeys","assignPort","sharedConstructsGenerator","TS_VERSIONS","withVersions","TS_MCP_SERVER_GENERATOR_INFO","filename","tsMcpServerGenerator","tree","options","project","exists","root","Error","defaultName","name","split","pop","mcpServerNameClassName","mcpTargetPrefix","targetSourceDirRelativeToProjectRoot","targetSourceDir","relativeSourceDir","replace","distDir","infra","auth","console","warn","projectPackageJsonPath","type","esm","pkg","bin","dirname","adotVersion","overwriteStrategy","KeepExisting","deps","devDeps","containers","dockerImageTag","targetFilePath","bundleOutputDir","dockerOutputDir","dockerTargetName","fs","targets","cache","outputs","executor","commands","cp","parallel","dependsOn","iac","mcpServerNameKebabCase","projectName","delete","packageJson","resolutions","localDevPort","component","info","mcpTargets","continuous","cwd","env","PORT","LOCAL_DEV","port","rc","preferInstallDependencies","languages"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../../packages/nx-plugin/src/ts/mcp-server/generator.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport {\n addDependenciesToPackageJson,\n detectPackageManager,\n type GeneratorCallback,\n generateFiles,\n joinPathFragments,\n OverwriteStrategy,\n readJson,\n type Tree,\n updateJson,\n updateProjectConfiguration,\n} from '@nx/devkit';\nimport { ensureLicenseExceptions } from '../../license/config';\nimport { MCP_INSPECTOR_EXCEPTIONS } from '../../license/known-exceptions';\nimport { addMcpServerInfra } from '../../utils/agent-core-constructs/agent-core-constructs';\nimport { addTypeScriptBundleTarget } from '../../utils/bundle/bundle';\nimport { resolveContainers } from '../../utils/containers';\nimport { formatFilesInSubtree } from '../../utils/format';\nimport { FsCommands } from '../../utils/fs';\nimport { resolveIac } from '../../utils/iac';\nimport { installDependencies } from '../../utils/install';\nimport { addGeneratorMetricsIfApplicable } from '../../utils/metrics';\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 { sharedConstructsGenerator } from '../../utils/shared-constructs';\nimport { TS_VERSIONS, withVersions } from '../../utils/versions';\nimport type { TsMcpServerGeneratorSchema } from './schema';\n\nexport const TS_MCP_SERVER_GENERATOR_INFO: NxGeneratorInfo = getGeneratorInfo(\n import.meta.filename,\n);\n\nexport const tsMcpServerGenerator = async (\n tree: Tree,\n options: TsMcpServerGeneratorSchema,\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())}-mcp-server`;\n const name = kebabCase(options.name || defaultName);\n const mcpServerNameClassName = toClassName(name);\n const mcpTargetPrefix = options.name ? name : 'mcp-server';\n const targetSourceDirRelativeToProjectRoot = joinPathFragments(\n 'src',\n mcpTargetPrefix,\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\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 projectPackageJsonPath = joinPathFragments(\n project.root,\n 'package.json',\n );\n\n // Generate esm if the module system is esm, otherwise commonjs. Projects\n // don't typically have their own package.json (dependencies are declared in\n // the workspace root), so fall back to the root which is esm by default.\n const esm =\n readJson(\n tree,\n tree.exists(projectPackageJsonPath)\n ? projectPackageJsonPath\n : 'package.json',\n ).type === 'module';\n\n // Generate example server\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files'),\n targetSourceDir,\n {\n name,\n esm,\n distDir,\n adotVersion:\n TS_VERSIONS['@aws/aws-distro-opentelemetry-node-autoinstrumentation'],\n },\n { overwriteStrategy: OverwriteStrategy.KeepExisting },\n );\n\n // Add dependencies\n const deps = withVersions([\n '@modelcontextprotocol/sdk',\n 'zod',\n 'express',\n '@aws-lambda-powertools/parameters',\n '@aws-sdk/client-appconfigdata',\n ]);\n const devDeps = withVersions([\n 'tsx',\n '@types/express',\n '@modelcontextprotocol/inspector',\n ]);\n\n // Add hosting based on infra\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(tree, project, {\n targetFilePath: `${targetSourceDirRelativeToProjectRoot}/http.ts`,\n bundleOutputDir: joinPathFragments('mcp', name),\n });\n\n const dockerOutputDir = joinPathFragments(\n 'dist',\n project.root,\n 'bundle',\n 'mcp',\n name,\n );\n const dockerTargetName = `${mcpTargetPrefix}-docker`;\n\n const fs = new FsCommands(tree);\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 // Add shared constructs\n const iac = await resolveIac(tree, options.iac);\n await sharedConstructsGenerator(tree, { iac });\n\n // Add the construct to deploy the mcp server\n await addMcpServerInfra(tree, {\n mcpServerNameKebabCase: name,\n mcpServerNameClassName,\n projectName: project.name,\n dockerImageTag,\n dockerOutputDir,\n iac,\n auth,\n containers,\n });\n } else {\n // No Dockerfile needed for non-hosted MCP\n tree.delete(joinPathFragments(targetSourceDir, 'Dockerfile'));\n }\n\n addDependenciesToPackageJson(tree, deps, devDeps);\n // Add to the project's package.json too if it has one (e.g. nx plugins),\n // otherwise dependencies live in the workspace root only.\n if (tree.exists(projectPackageJsonPath)) {\n addDependenciesToPackageJson(tree, deps, devDeps, projectPackageJsonPath);\n }\n\n // @modelcontextprotocol/sdk declares zod as a peer dependency with a wide range\n // (^3.25 || ^4.0). Yarn does not dedupe the peer to the workspace's pinned zod, so\n // without a resolution it installs a separate zod under the SDK's own node_modules.\n // The two zod copies have structurally incompatible types, which breaks type\n // inference for registerTool inputSchema. Scope the resolution to the SDK so\n // other consumers (e.g. @tanstack/router-generator pinning zod@3) are unaffected.\n if (detectPackageManager() === 'yarn') {\n updateJson(tree, 'package.json', (packageJson) => {\n packageJson.resolutions = {\n ...packageJson.resolutions,\n '**/@modelcontextprotocol/sdk/zod': TS_VERSIONS['zod'],\n };\n return packageJson;\n });\n }\n\n const localDevPort = assignPort(tree, project, 8000, {\n component: { info: TS_MCP_SERVER_GENERATOR_INFO, name: mcpTargetPrefix },\n });\n\n const mcpTargets = {\n ...project.targets,\n // Add targets for running the MCP server\n [`${mcpTargetPrefix}-serve-stdio`]: {\n executor: 'nx:run-commands',\n continuous: true,\n options: {\n commands: [`tsx --watch ${relativeSourceDir}/stdio.ts`],\n cwd: '{projectRoot}',\n },\n },\n [`${mcpTargetPrefix}-serve`]: {\n executor: 'nx:run-commands',\n continuous: true,\n options: {\n commands: [`tsx --watch ${relativeSourceDir}/http.ts`],\n cwd: '{projectRoot}',\n env: {\n PORT: `${localDevPort}`,\n },\n },\n },\n [`${mcpTargetPrefix}-dev`]: {\n executor: 'nx:run-commands',\n continuous: true,\n options: {\n commands: [`tsx --watch ${relativeSourceDir}/http.ts`],\n cwd: '{projectRoot}',\n env: {\n PORT: `${localDevPort}`,\n LOCAL_DEV: 'true',\n },\n },\n },\n [`${mcpTargetPrefix}-inspect`]: {\n executor: 'nx:run-commands',\n continuous: true,\n // Launch the inspector against the locally served HTTP server. The dev\n // target starts the server and any connected dependencies (e.g. a local\n // database).\n dependsOn: [`${mcpTargetPrefix}-dev`],\n options: {\n commands: [\n `mcp-inspector --transport http --server-url http://localhost:${localDevPort}/mcp`,\n ],\n cwd: '{projectRoot}',\n },\n },\n [`${mcpTargetPrefix}-inspect-stdio`]: {\n executor: 'nx:run-commands',\n continuous: true,\n options: {\n commands: [\n `mcp-inspector -- tsx --watch ${relativeSourceDir}/stdio.ts`,\n ],\n cwd: '{projectRoot}',\n },\n },\n };\n\n // Aggregate `<mcp>-dev` under the project-level `dev` target.\n addComponentDevTarget(mcpTargets, `${mcpTargetPrefix}-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(mcpTargets),\n });\n\n addComponentGeneratorMetadata(\n tree,\n project.name,\n TS_MCP_SERVER_GENERATOR_INFO,\n targetSourceDirRelativeToProjectRoot,\n mcpTargetPrefix,\n {\n port: localDevPort,\n rc: mcpServerNameClassName,\n auth,\n },\n );\n\n await addGeneratorMetricsIfApplicable(tree, [TS_MCP_SERVER_GENERATOR_INFO]);\n\n await ensureLicenseExceptions(tree, MCP_INSPECTOR_EXCEPTIONS);\n\n await formatFilesInSubtree(tree);\n return () =>\n installDependencies(tree, options.preferInstallDependencies, {\n languages: ['typescript'],\n });\n};\n\nexport default tsMcpServerGenerator;\n"],"names":["addDependenciesToPackageJson","detectPackageManager","generateFiles","joinPathFragments","OverwriteStrategy","readJson","updateJson","updateProjectConfiguration","ensureLicenseExceptions","MCP_INSPECTOR_EXCEPTIONS","addMcpServerInfra","addTypeScriptBundleTarget","resolveContainers","formatFilesInSubtree","FsCommands","resolveIac","installDependencies","addGeneratorMetricsIfApplicable","kebabCase","toClassName","getNpmScope","addComponentDevTarget","addComponentGeneratorMetadata","addDependencyToTargetIfNotPresent","getGeneratorInfo","readProjectConfigurationUnqualified","sortObjectKeys","assignPort","sharedConstructsGenerator","TS_VERSIONS","withVersions","TS_MCP_SERVER_GENERATOR_INFO","filename","tsMcpServerGenerator","tree","options","project","exists","root","Error","defaultName","name","split","pop","mcpServerNameClassName","mcpTargetPrefix","targetSourceDirRelativeToProjectRoot","targetSourceDir","relativeSourceDir","replace","distDir","infra","auth","console","warn","projectPackageJsonPath","esm","type","dirname","adotVersion","overwriteStrategy","KeepExisting","deps","devDeps","containers","dockerImageTag","targetFilePath","bundleOutputDir","dockerOutputDir","dockerTargetName","fs","targets","cache","outputs","executor","commands","cp","parallel","dependsOn","iac","mcpServerNameKebabCase","projectName","delete","packageJson","resolutions","localDevPort","component","info","mcpTargets","continuous","cwd","env","PORT","LOCAL_DEV","port","rc","preferInstallDependencies","languages"],"mappings":"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"}
@@ -43,6 +43,30 @@ variable "asset_bucket_name" {
43
43
  type = string
44
44
  }
45
45
 
46
+ # VPC Configuration (optional)
47
+ variable "enable_vpc" {
48
+ description = "Deploy the Lambda function into a VPC. Set alongside vpc_id/subnet_ids."
49
+ type = bool
50
+ default = false
51
+ }
52
+
53
+ variable "vpc_id" {
54
+ description = "VPC ID to deploy the Lambda function into. Required when enable_vpc is true."
55
+ type = string
56
+ default = null
57
+
58
+ validation {
59
+ condition = !var.enable_vpc || (var.vpc_id != null && var.subnet_ids != null)
60
+ error_message = "vpc_id and subnet_ids must be set when enable_vpc is true."
61
+ }
62
+ }
63
+
64
+ variable "subnet_ids" {
65
+ description = "Subnet IDs to deploy the Lambda function into. Required when enable_vpc is true."
66
+ type = list(string)
67
+ default = null
68
+ }
69
+
46
70
  # CORS Configuration (passed to core module)
47
71
  variable "cors_allow_credentials" {
48
72
  description = "Whether to allow credentials in CORS requests"
@@ -129,10 +153,32 @@ module "http_api" {
129
153
  tags = var.tags
130
154
  }
131
155
 
156
+ # Security group for the API Lambda function, used when deployed into a VPC
157
+ resource "aws_security_group" "api_lambda" {
158
+ count = var.enable_vpc ? 1 : 0
159
+
160
+ #checkov:skip=CKV2_AWS_5:Attached to api_lambda via vpc_config block; Checkov cannot resolve this reference
161
+ name_prefix = "<%- apiNameKebabCase %>-lambda-"
162
+ description = "Security group for the <%- apiNameClassName %> API Lambda function"
163
+ vpc_id = var.vpc_id
164
+ tags = var.tags
165
+ }
166
+
167
+ resource "aws_vpc_security_group_egress_rule" "api_lambda_https" {
168
+ count = var.enable_vpc ? 1 : 0
169
+
170
+ security_group_id = aws_security_group.api_lambda[0].id
171
+ cidr_ipv4 = "0.0.0.0/0"
172
+ from_port = 443
173
+ to_port = 443
174
+ ip_protocol = "tcp"
175
+ description = "Allow outbound HTTPS to AWS service endpoints"
176
+ }
177
+
132
178
  # Lambda function
133
179
  # This configures a single "router" lambda to serve all requests
134
180
  resource "aws_lambda_function" "api_lambda" {
135
- #checkov:skip=CKV_AWS_117:Lambda function does not need to be in VPC for this use case
181
+ #checkov:skip=CKV_AWS_117:Lambda function is optionally deployed into a VPC via vpc_id/subnet_ids; not required for this use case
136
182
  #checkov:skip=CKV_AWS_116:Dead Letter Queue not required for this simple API use case
137
183
  #checkov:skip=CKV_AWS_272:Code signing not required for this use case
138
184
  #checkov:skip=CKV_AWS_115:Concurrent execution limit not required for this use case
@@ -163,6 +209,14 @@ resource "aws_lambda_function" "api_lambda" {
163
209
  mode = "Active"
164
210
  }
165
211
 
212
+ dynamic "vpc_config" {
213
+ for_each = var.enable_vpc ? [1] : []
214
+ content {
215
+ subnet_ids = var.subnet_ids
216
+ security_group_ids = [aws_security_group.api_lambda[0].id]
217
+ }
218
+ }
219
+
166
220
  <%_ if (backend.type === 'fastapi') { _%>
167
221
  # Enable SnapStart for faster cold starts
168
222
  snap_start {
@@ -181,6 +235,8 @@ resource "aws_lambda_function" "api_lambda" {
181
235
  }
182
236
 
183
237
  tags = var.tags
238
+
239
+ depends_on = [aws_iam_role_policy_attachment.lambda_vpc_access]
184
240
  }
185
241
 
186
242
  # IAM role for Lambda execution
@@ -215,6 +271,13 @@ resource "aws_iam_role_policy_attachment" "lambda_xray_execution" {
215
271
  role = aws_iam_role.lambda_execution_role.name
216
272
  }
217
273
 
274
+ # Attach VPC access policy to Lambda role when deployed into a VPC
275
+ resource "aws_iam_role_policy_attachment" "lambda_vpc_access" {
276
+ count = var.enable_vpc ? 1 : 0
277
+ policy_arn = "arn:aws:iam::aws:policy/service-role/AWSLambdaVPCAccessExecutionRole"
278
+ role = aws_iam_role.lambda_execution_role.name
279
+ }
280
+
218
281
  # Additional IAM policies for Lambda (if provided)
219
282
  resource "aws_iam_role_policy" "lambda_additional_policies" {
220
283
  count = length(var.additional_iam_policy_statements) > 0 ? 1 : 0
@@ -527,6 +590,11 @@ output "lambda_execution_role_name" {
527
590
  value = aws_iam_role.lambda_execution_role.name
528
591
  }
529
592
 
593
+ output "security_group_id" {
594
+ description = "Security group ID of the API Lambda function, for use in ingress rules on resources it must reach (e.g. a database). Null unless enable_vpc is true."
595
+ value = var.enable_vpc ? aws_security_group.api_lambda[0].id : null
596
+ }
597
+
530
598
  # Integration Outputs
531
599
  output "integration_id" {
532
600
  description = "ID of the Lambda integration"
@@ -43,6 +43,30 @@ variable "asset_bucket_name" {
43
43
  type = string
44
44
  }
45
45
 
46
+ # VPC Configuration (optional)
47
+ variable "enable_vpc" {
48
+ description = "Deploy the Lambda function into a VPC. Set alongside vpc_id/subnet_ids."
49
+ type = bool
50
+ default = false
51
+ }
52
+
53
+ variable "vpc_id" {
54
+ description = "VPC ID to deploy the Lambda function into. Required when enable_vpc is true."
55
+ type = string
56
+ default = null
57
+
58
+ validation {
59
+ condition = !var.enable_vpc || (var.vpc_id != null && var.subnet_ids != null)
60
+ error_message = "vpc_id and subnet_ids must be set when enable_vpc is true."
61
+ }
62
+ }
63
+
64
+ variable "subnet_ids" {
65
+ description = "Subnet IDs to deploy the Lambda function into. Required when enable_vpc is true."
66
+ type = list(string)
67
+ default = null
68
+ }
69
+
46
70
  # CORS Configuration (passed to core module)
47
71
 
48
72
  variable "cors_allow_headers" {
@@ -139,9 +163,31 @@ resource "aws_wafv2_web_acl_association" "api_waf_association" {
139
163
  depends_on = [aws_api_gateway_stage.api_stage]
140
164
  }
141
165
 
166
+ # Security group for the API Lambda function, used when deployed into a VPC
167
+ resource "aws_security_group" "api_lambda" {
168
+ count = var.enable_vpc ? 1 : 0
169
+
170
+ #checkov:skip=CKV2_AWS_5:Attached to api_lambda via vpc_config block; Checkov cannot resolve this reference
171
+ name_prefix = "<%- apiNameKebabCase %>-lambda-"
172
+ description = "Security group for the <%- apiNameClassName %> API Lambda function"
173
+ vpc_id = var.vpc_id
174
+ tags = var.tags
175
+ }
176
+
177
+ resource "aws_vpc_security_group_egress_rule" "api_lambda_https" {
178
+ count = var.enable_vpc ? 1 : 0
179
+
180
+ security_group_id = aws_security_group.api_lambda[0].id
181
+ cidr_ipv4 = "0.0.0.0/0"
182
+ from_port = 443
183
+ to_port = 443
184
+ ip_protocol = "tcp"
185
+ description = "Allow outbound HTTPS to AWS service endpoints"
186
+ }
187
+
142
188
  # Lambda function
143
189
  resource "aws_lambda_function" "api_lambda" {
144
- #checkov:skip=CKV_AWS_117:Lambda function does not need to be in VPC for this use case
190
+ #checkov:skip=CKV_AWS_117:Lambda function is optionally deployed into a VPC via vpc_id/subnet_ids; not required for this use case
145
191
  #checkov:skip=CKV_AWS_116:Dead Letter Queue not required for this simple API use case
146
192
  #checkov:skip=CKV_AWS_272:Code signing not required for this use case
147
193
  #checkov:skip=CKV_AWS_115:Concurrent execution limit not required for this use case
@@ -172,6 +218,14 @@ resource "aws_lambda_function" "api_lambda" {
172
218
  mode = "Active"
173
219
  }
174
220
 
221
+ dynamic "vpc_config" {
222
+ for_each = var.enable_vpc ? [1] : []
223
+ content {
224
+ subnet_ids = var.subnet_ids
225
+ security_group_ids = [aws_security_group.api_lambda[0].id]
226
+ }
227
+ }
228
+
175
229
  <%_ if (backend.type === 'fastapi') { _%>
176
230
  # Enable SnapStart for faster cold starts
177
231
  snap_start {
@@ -190,6 +244,8 @@ resource "aws_lambda_function" "api_lambda" {
190
244
  }
191
245
 
192
246
  tags = var.tags
247
+
248
+ depends_on = [aws_iam_role_policy_attachment.lambda_vpc_access]
193
249
  }
194
250
 
195
251
  # IAM role for Lambda execution
@@ -224,6 +280,13 @@ resource "aws_iam_role_policy_attachment" "lambda_xray_execution" {
224
280
  role = aws_iam_role.lambda_execution_role.name
225
281
  }
226
282
 
283
+ # Attach VPC access policy to Lambda role when deployed into a VPC
284
+ resource "aws_iam_role_policy_attachment" "lambda_vpc_access" {
285
+ count = var.enable_vpc ? 1 : 0
286
+ policy_arn = "arn:aws:iam::aws:policy/service-role/AWSLambdaVPCAccessExecutionRole"
287
+ role = aws_iam_role.lambda_execution_role.name
288
+ }
289
+
227
290
  # Additional IAM policies for Lambda (if provided)
228
291
  resource "aws_iam_role_policy" "lambda_additional_policies" {
229
292
  count = length(var.additional_iam_policy_statements) > 0 ? 1 : 0
@@ -794,6 +857,11 @@ output "lambda_execution_role_name" {
794
857
  value = aws_iam_role.lambda_execution_role.name
795
858
  }
796
859
 
860
+ output "security_group_id" {
861
+ description = "Security group ID of the API Lambda function, for use in ingress rules on resources it must reach (e.g. a database). Null unless enable_vpc is true."
862
+ value = var.enable_vpc ? aws_security_group.api_lambda[0].id : null
863
+ }
864
+
797
865
  # Integration Outputs
798
866
  output "integration_id" {
799
867
  description = "ID of the Lambda integration"
@@ -68,9 +68,9 @@ export declare const TS_VERSIONS: {
68
68
  readonly '@smithy/types': "4.15.0";
69
69
  readonly '@vitest/coverage-v8': "4.1.9";
70
70
  readonly '@vitest/ui': "4.1.9";
71
- readonly '@astrojs/react': "5.0.7";
72
- readonly '@astrojs/starlight': "0.40.0";
73
- readonly astro: "6.4.8";
71
+ readonly '@astrojs/react': "6.0.1";
72
+ readonly '@astrojs/starlight': "0.41.3";
73
+ readonly astro: "7.0.6";
74
74
  readonly aws4fetch: "1.0.20";
75
75
  readonly 'aws-cdk': "2.1129.0";
76
76
  readonly 'aws-cdk-lib': "2.260.0";
@@ -110,7 +110,7 @@ export declare const TS_VERSIONS: {
110
110
  readonly rolldown: "1.1.3";
111
111
  readonly 'simple-git': "3.36.0";
112
112
  readonly 'source-map-support': "0.5.21";
113
- readonly 'starlight-blog': "0.26.1";
113
+ readonly 'starlight-blog': "0.27.0";
114
114
  readonly tailwindcss: "4.2.2";
115
115
  readonly '@tailwindcss/vite': "4.2.2";
116
116
  readonly tsx: "4.22.4";
@@ -130,7 +130,7 @@ export type ITsDepVersion = keyof typeof TS_VERSIONS;
130
130
  * Add versions to the given dependencies
131
131
  */
132
132
  export declare const withVersions: (deps: ITsDepVersion[]) => {
133
- [k: string]: "0.3.13" | "0.12.0" | "3.1075.0" | "3.972.48" | "1.0.0-alpha.10" | "2.33.1" | "7.7.0" | "22.2.1" | "10.2.1" | "23.0.1" | "1.11.1" | "1.15.43" | "1.29.0" | "0.19.0" | "0.2.3" | "0.0.57" | "0.3.0" | "1.61.2" | "7.8.2" | "1.7.0" | "1.170.16" | "1.168.18" | "1.167.17" | "1.162.0" | "1.162.2" | "3.0.197" | "1.0.146" | "3.0.1320" | "1.0.61" | "5.101.2" | "11.18.0" | "25.9.4" | "8.10.162" | "2.8.19" | "8.20.0" | "8.18.1" | "5.0.6" | "4.6.2" | "4.5.2" | "4.8.2" | "4.15.0" | "4.1.9" | "5.0.7" | "0.40.0" | "6.4.8" | "1.0.20" | "2.1129.0" | "2.260.0" | "3.12.0" | "10.6.0" | "2.8.6" | "5.6.2" | "0.7.1" | "2.1.1" | "14.0.3" | "3.9.1" | "0.28.1" | "1.0.31" | "1.0.5" | "2.5.1" | "7.8.0" | "6.0.1" | "3.1.5" | "5.2.1" | "3.3.3" | "9.1.7" | "11.3.5" | "11.0.4" | "4.0.0" | "3.5.3" | "2.0.0" | "19.6.6" | "3.5.0" | "8.22.0" | "3.3.1" | "19.2.7" | "6.1.3" | "1.1.3" | "3.36.0" | "0.5.21" | "0.26.1" | "4.2.2" | "4.22.4" | "1.22.0" | "1.6.0" | "4.12.0" | "1.4.0" | "3.6.0" | "8.1.0" | "6.0.3" | "4.4.3" | "8.21.0";
133
+ [k: string]: "0.3.13" | "0.12.0" | "3.1075.0" | "3.972.48" | "1.0.0-alpha.10" | "2.33.1" | "7.7.0" | "22.2.1" | "10.2.1" | "23.0.1" | "1.11.1" | "1.15.43" | "1.29.0" | "0.19.0" | "0.2.3" | "0.0.57" | "0.3.0" | "1.61.2" | "7.8.2" | "1.7.0" | "1.170.16" | "1.168.18" | "1.167.17" | "1.162.0" | "1.162.2" | "3.0.197" | "1.0.146" | "3.0.1320" | "1.0.61" | "5.101.2" | "11.18.0" | "25.9.4" | "8.10.162" | "2.8.19" | "8.20.0" | "8.18.1" | "5.0.6" | "4.6.2" | "4.5.2" | "4.8.2" | "4.15.0" | "4.1.9" | "6.0.1" | "0.41.3" | "7.0.6" | "1.0.20" | "2.1129.0" | "2.260.0" | "3.12.0" | "10.6.0" | "2.8.6" | "5.6.2" | "0.7.1" | "2.1.1" | "14.0.3" | "3.9.1" | "0.28.1" | "1.0.31" | "1.0.5" | "2.5.1" | "7.8.0" | "3.1.5" | "5.2.1" | "3.3.3" | "9.1.7" | "11.3.5" | "11.0.4" | "4.0.0" | "3.5.3" | "2.0.0" | "19.6.6" | "3.5.0" | "8.22.0" | "3.3.1" | "19.2.7" | "6.1.3" | "1.1.3" | "3.36.0" | "0.5.21" | "0.27.0" | "4.2.2" | "4.22.4" | "1.22.0" | "1.6.0" | "4.12.0" | "1.4.0" | "3.6.0" | "8.1.0" | "6.0.3" | "4.4.3" | "8.21.0";
134
134
  };
135
135
  /**
136
136
  * Versions for Python dependencies added by generators
@@ -66,9 +66,9 @@
66
66
  '@smithy/types': '4.15.0',
67
67
  '@vitest/coverage-v8': '4.1.9',
68
68
  '@vitest/ui': '4.1.9',
69
- '@astrojs/react': '5.0.7',
70
- '@astrojs/starlight': '0.40.0',
71
- astro: '6.4.8',
69
+ '@astrojs/react': '6.0.1',
70
+ '@astrojs/starlight': '0.41.3',
71
+ astro: '7.0.6',
72
72
  aws4fetch: '1.0.20',
73
73
  'aws-cdk': '2.1129.0',
74
74
  'aws-cdk-lib': '2.260.0',
@@ -108,7 +108,7 @@
108
108
  rolldown: '1.1.3',
109
109
  'simple-git': '3.36.0',
110
110
  'source-map-support': '0.5.21',
111
- 'starlight-blog': '0.26.1',
111
+ 'starlight-blog': '0.27.0',
112
112
  tailwindcss: '4.2.2',
113
113
  '@tailwindcss/vite': '4.2.2',
114
114
  tsx: '4.22.4',
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../packages/nx-plugin/src/utils/versions.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * Versons for TypeScript dependencies added by generators\n */\nexport const TS_VERSIONS = {\n '@a2a-js/sdk': '0.3.13',\n '@aws/aws-distro-opentelemetry-node-autoinstrumentation': '0.12.0',\n '@aws-sdk/client-dynamodb': '3.1075.0',\n '@aws-sdk/client-bedrock-runtime': '3.1075.0',\n '@aws-sdk/client-s3': '3.1075.0',\n '@aws-sdk/client-sts': '3.1075.0',\n '@aws-sdk/credential-providers': '3.1075.0',\n '@aws-sdk/credential-provider-cognito-identity': '3.972.48',\n '@aws-sdk/client-secrets-manager': '3.1075.0',\n '@aws-sdk/rds-signer': '3.1075.0',\n '@aws-smithy/server-apigateway': '1.0.0-alpha.10',\n '@aws-smithy/server-node': '1.0.0-alpha.10',\n '@aws-lambda-powertools/logger': '2.33.1',\n '@aws-lambda-powertools/metrics': '2.33.1',\n '@aws-lambda-powertools/parameters': '2.33.1',\n '@aws-lambda-powertools/tracer': '2.33.1',\n '@aws-lambda-powertools/parser': '2.33.1',\n '@aws-sdk/client-appconfigdata': '3.1075.0',\n '@middy/core': '7.7.0',\n '@nxlv/python': '22.2.1',\n '@nx-extend/terraform': '10.2.1',\n '@nx/devkit': '23.0.1',\n '@nx/react': '23.0.1',\n 'create-nx-workspace': '23.0.1',\n '@swc-node/register': '1.11.1',\n '@swc/core': '1.15.43',\n '@modelcontextprotocol/sdk': '1.29.0',\n '@modelcontextprotocol/inspector': '0.19.0',\n '@ag-ui/aws-strands': '0.2.3',\n '@ag-ui/client': '0.0.57',\n '@ag-ui/core': '0.0.57',\n '@ag-ui/encoder': '0.0.57',\n 'agent-chat-cli': '0.3.0',\n '@copilotkit/react-core': '1.61.2',\n rxjs: '7.8.2',\n '@strands-agents/sdk': '1.7.0',\n '@tanstack/react-router': '1.170.16',\n '@tanstack/router-plugin': '1.168.18',\n '@tanstack/router-generator': '1.167.17',\n '@tanstack/virtual-file-routes': '1.162.0',\n '@tanstack/router-utils': '1.162.2',\n '@cloudscape-design/board-components': '3.0.197',\n '@cloudscape-design/chat-components': '1.0.146',\n '@cloudscape-design/components': '3.0.1320',\n '@cloudscape-design/global-styles': '1.0.61',\n '@tanstack/react-query': '5.101.2',\n '@tanstack/react-query-devtools': '5.101.2',\n '@trpc/tanstack-react-query': '11.18.0',\n '@trpc/client': '11.18.0',\n '@trpc/server': '11.18.0',\n '@types/node': '25.9.4',\n '@types/aws-lambda': '8.10.162',\n '@types/cors': '2.8.19',\n '@types/pg': '8.20.0',\n '@types/ws': '8.18.1',\n '@types/express': '5.0.6',\n '@smithy/config-resolver': '4.6.2',\n '@smithy/node-config-provider': '4.5.2',\n '@smithy/node-http-handler': '4.8.2',\n '@smithy/types': '4.15.0',\n '@vitest/coverage-v8': '4.1.9',\n '@vitest/ui': '4.1.9',\n '@astrojs/react': '5.0.7',\n '@astrojs/starlight': '0.40.0',\n astro: '6.4.8',\n aws4fetch: '1.0.20',\n 'aws-cdk': '2.1129.0',\n 'aws-cdk-lib': '2.260.0',\n 'aws-xray-sdk-core': '3.12.0',\n constructs: '10.6.0',\n cors: '2.8.6',\n chalk: '5.6.2',\n 'class-variance-authority': '0.7.1',\n clsx: '2.1.1',\n commander: '14.0.3',\n electrodb: '3.9.1',\n esbuild: '0.28.1',\n 'event-source-polyfill': '1.0.31',\n '@types/event-source-polyfill': '1.0.5',\n '@biomejs/biome': '2.5.1',\n '@prisma/adapter-mariadb': '7.8.0',\n '@prisma/adapter-pg': '7.8.0',\n '@prisma/client': '7.8.0',\n ejs: '6.0.1',\n '@types/ejs': '3.1.5',\n express: '5.2.1',\n 'fast-glob': '3.3.3',\n husky: '9.1.7',\n 'fs-extra': '11.3.5',\n '@types/fs-extra': '11.0.4',\n 'make-dir-cli': '4.0.0',\n mariadb: '3.5.3',\n ncp: '2.0.0',\n 'npm-check-updates': '19.6.6',\n 'oidc-client-ts': '3.5.0',\n pg: '8.22.0',\n prisma: '7.8.0',\n 'react-oidc-context': '3.3.1',\n react: '19.2.7',\n 'react-dom': '19.2.7',\n rimraf: '6.1.3',\n rolldown: '1.1.3',\n 'simple-git': '3.36.0',\n 'source-map-support': '0.5.21',\n 'starlight-blog': '0.26.1',\n tailwindcss: '4.2.2',\n '@tailwindcss/vite': '4.2.2',\n tsx: '4.22.4',\n 'lucide-react': '1.22.0',\n 'radix-ui': '1.6.0',\n shadcn: '4.12.0',\n 'tw-animate-css': '1.4.0',\n 'tailwind-merge': '3.6.0',\n vite: '8.1.0',\n typescript: '6.0.3',\n vitest: '4.1.9',\n zod: '4.4.3',\n ws: '8.21.0',\n} as const;\nexport type ITsDepVersion = keyof typeof TS_VERSIONS;\n\n/**\n * Add versions to the given dependencies\n */\nexport const withVersions = (deps: ITsDepVersion[]) =>\n Object.fromEntries(deps.map((dep) => [dep, TS_VERSIONS[dep]]));\n\n/**\n * Versions for Python dependencies added by generators\n */\nexport const PY_VERSIONS = {\n 'a2a-sdk': '==0.3.26',\n 'ag-ui-langgraph': '==0.0.42',\n 'ag-ui-protocol': '==0.1.19',\n 'ag-ui-strands': '==0.2.2',\n 'aws-lambda-powertools': '==3.31.0',\n 'aws-lambda-powertools[tracer]': '==3.31.0',\n 'aws-lambda-powertools[parser]': '==3.31.0',\n 'aws-opentelemetry-distro': '==0.18.0',\n 'bedrock-agentcore': '==1.15.1',\n boto3: '==1.43.37',\n checkov: '==3.3.6',\n fastapi: '==0.138.2',\n 'fastapi[standard]': '==0.138.2',\n httpx: '==0.28.1',\n langchain: '==1.3.11',\n 'langchain-aws': '==1.6.1',\n 'langchain-mcp-adapters': '==0.3.0',\n langgraph: '==1.2.7',\n mcp: '==1.28.1',\n 'pip-check-updates': '==0.29.0',\n 'pip-licenses': '==5.5.5',\n 'strands-agents': '==1.45.0',\n 'strands-agents[a2a]': '==1.45.0',\n 'strands-agents-tools': '==0.8.2',\n ty: '==0.0.55',\n pynamodb: '==6.1.0',\n uvicorn: '==0.49.0',\n} as const;\nexport type IPyDepVersion = keyof typeof PY_VERSIONS;\n\n/**\n * Add versions to the given dependencies\n */\nexport const withPyVersions = (deps: IPyDepVersion[]) =>\n deps.map((dep) => `${dep}${PY_VERSIONS[dep]}`);\n\n/**\n * Versions for vendored tools\n */\nexport const VENDORED_VERSIONS = {\n 'git-secrets': '1.3.0',\n} as const;\n\n/**\n * Exact versions for Terraform providers used by generated `.tf` modules.\n * Pinned exactly (no range operator) so generated infrastructure is reproducible.\n */\nexport const TERRAFORM_VERSIONS = {\n aws: '6.52.0',\n random: '3.9.0',\n null: '3.3.0',\n archive: '2.8.0',\n external: '2.4.0',\n local: '2.9.0',\n} as const;\nexport type ITerraformProviderVersion = keyof typeof TERRAFORM_VERSIONS;\n\n/**\n * Substitution variables exposing Terraform provider version constraints to\n * generated `.tf` templates (e.g. `version = \"<%- awsProviderVersion %>\"`)\n */\nexport const terraformProviderVersions = () => ({\n awsProviderVersion: TERRAFORM_VERSIONS.aws,\n randomProviderVersion: TERRAFORM_VERSIONS.random,\n nullProviderVersion: TERRAFORM_VERSIONS.null,\n archiveProviderVersion: TERRAFORM_VERSIONS.archive,\n externalProviderVersion: TERRAFORM_VERSIONS.external,\n localProviderVersion: TERRAFORM_VERSIONS.local,\n});\n"],"names":["TS_VERSIONS","rxjs","astro","aws4fetch","constructs","cors","chalk","clsx","commander","electrodb","esbuild","ejs","express","husky","mariadb","ncp","pg","prisma","react","rimraf","rolldown","tailwindcss","tsx","shadcn","vite","typescript","vitest","zod","ws","withVersions","deps","Object","fromEntries","map","dep","PY_VERSIONS","boto3","checkov","fastapi","httpx","langchain","langgraph","mcp","ty","pynamodb","uvicorn","withPyVersions","VENDORED_VERSIONS","TERRAFORM_VERSIONS","aws","random","null","archive","external","local","terraformProviderVersions","awsProviderVersion","randomProviderVersion","nullProviderVersion","archiveProviderVersion","externalProviderVersion","localProviderVersion"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../packages/nx-plugin/src/utils/versions.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * Versons for TypeScript dependencies added by generators\n */\nexport const TS_VERSIONS = {\n '@a2a-js/sdk': '0.3.13',\n '@aws/aws-distro-opentelemetry-node-autoinstrumentation': '0.12.0',\n '@aws-sdk/client-dynamodb': '3.1075.0',\n '@aws-sdk/client-bedrock-runtime': '3.1075.0',\n '@aws-sdk/client-s3': '3.1075.0',\n '@aws-sdk/client-sts': '3.1075.0',\n '@aws-sdk/credential-providers': '3.1075.0',\n '@aws-sdk/credential-provider-cognito-identity': '3.972.48',\n '@aws-sdk/client-secrets-manager': '3.1075.0',\n '@aws-sdk/rds-signer': '3.1075.0',\n '@aws-smithy/server-apigateway': '1.0.0-alpha.10',\n '@aws-smithy/server-node': '1.0.0-alpha.10',\n '@aws-lambda-powertools/logger': '2.33.1',\n '@aws-lambda-powertools/metrics': '2.33.1',\n '@aws-lambda-powertools/parameters': '2.33.1',\n '@aws-lambda-powertools/tracer': '2.33.1',\n '@aws-lambda-powertools/parser': '2.33.1',\n '@aws-sdk/client-appconfigdata': '3.1075.0',\n '@middy/core': '7.7.0',\n '@nxlv/python': '22.2.1',\n '@nx-extend/terraform': '10.2.1',\n '@nx/devkit': '23.0.1',\n '@nx/react': '23.0.1',\n 'create-nx-workspace': '23.0.1',\n '@swc-node/register': '1.11.1',\n '@swc/core': '1.15.43',\n '@modelcontextprotocol/sdk': '1.29.0',\n '@modelcontextprotocol/inspector': '0.19.0',\n '@ag-ui/aws-strands': '0.2.3',\n '@ag-ui/client': '0.0.57',\n '@ag-ui/core': '0.0.57',\n '@ag-ui/encoder': '0.0.57',\n 'agent-chat-cli': '0.3.0',\n '@copilotkit/react-core': '1.61.2',\n rxjs: '7.8.2',\n '@strands-agents/sdk': '1.7.0',\n '@tanstack/react-router': '1.170.16',\n '@tanstack/router-plugin': '1.168.18',\n '@tanstack/router-generator': '1.167.17',\n '@tanstack/virtual-file-routes': '1.162.0',\n '@tanstack/router-utils': '1.162.2',\n '@cloudscape-design/board-components': '3.0.197',\n '@cloudscape-design/chat-components': '1.0.146',\n '@cloudscape-design/components': '3.0.1320',\n '@cloudscape-design/global-styles': '1.0.61',\n '@tanstack/react-query': '5.101.2',\n '@tanstack/react-query-devtools': '5.101.2',\n '@trpc/tanstack-react-query': '11.18.0',\n '@trpc/client': '11.18.0',\n '@trpc/server': '11.18.0',\n '@types/node': '25.9.4',\n '@types/aws-lambda': '8.10.162',\n '@types/cors': '2.8.19',\n '@types/pg': '8.20.0',\n '@types/ws': '8.18.1',\n '@types/express': '5.0.6',\n '@smithy/config-resolver': '4.6.2',\n '@smithy/node-config-provider': '4.5.2',\n '@smithy/node-http-handler': '4.8.2',\n '@smithy/types': '4.15.0',\n '@vitest/coverage-v8': '4.1.9',\n '@vitest/ui': '4.1.9',\n '@astrojs/react': '6.0.1',\n '@astrojs/starlight': '0.41.3',\n astro: '7.0.6',\n aws4fetch: '1.0.20',\n 'aws-cdk': '2.1129.0',\n 'aws-cdk-lib': '2.260.0',\n 'aws-xray-sdk-core': '3.12.0',\n constructs: '10.6.0',\n cors: '2.8.6',\n chalk: '5.6.2',\n 'class-variance-authority': '0.7.1',\n clsx: '2.1.1',\n commander: '14.0.3',\n electrodb: '3.9.1',\n esbuild: '0.28.1',\n 'event-source-polyfill': '1.0.31',\n '@types/event-source-polyfill': '1.0.5',\n '@biomejs/biome': '2.5.1',\n '@prisma/adapter-mariadb': '7.8.0',\n '@prisma/adapter-pg': '7.8.0',\n '@prisma/client': '7.8.0',\n ejs: '6.0.1',\n '@types/ejs': '3.1.5',\n express: '5.2.1',\n 'fast-glob': '3.3.3',\n husky: '9.1.7',\n 'fs-extra': '11.3.5',\n '@types/fs-extra': '11.0.4',\n 'make-dir-cli': '4.0.0',\n mariadb: '3.5.3',\n ncp: '2.0.0',\n 'npm-check-updates': '19.6.6',\n 'oidc-client-ts': '3.5.0',\n pg: '8.22.0',\n prisma: '7.8.0',\n 'react-oidc-context': '3.3.1',\n react: '19.2.7',\n 'react-dom': '19.2.7',\n rimraf: '6.1.3',\n rolldown: '1.1.3',\n 'simple-git': '3.36.0',\n 'source-map-support': '0.5.21',\n 'starlight-blog': '0.27.0',\n tailwindcss: '4.2.2',\n '@tailwindcss/vite': '4.2.2',\n tsx: '4.22.4',\n 'lucide-react': '1.22.0',\n 'radix-ui': '1.6.0',\n shadcn: '4.12.0',\n 'tw-animate-css': '1.4.0',\n 'tailwind-merge': '3.6.0',\n vite: '8.1.0',\n typescript: '6.0.3',\n vitest: '4.1.9',\n zod: '4.4.3',\n ws: '8.21.0',\n} as const;\nexport type ITsDepVersion = keyof typeof TS_VERSIONS;\n\n/**\n * Add versions to the given dependencies\n */\nexport const withVersions = (deps: ITsDepVersion[]) =>\n Object.fromEntries(deps.map((dep) => [dep, TS_VERSIONS[dep]]));\n\n/**\n * Versions for Python dependencies added by generators\n */\nexport const PY_VERSIONS = {\n 'a2a-sdk': '==0.3.26',\n 'ag-ui-langgraph': '==0.0.42',\n 'ag-ui-protocol': '==0.1.19',\n 'ag-ui-strands': '==0.2.2',\n 'aws-lambda-powertools': '==3.31.0',\n 'aws-lambda-powertools[tracer]': '==3.31.0',\n 'aws-lambda-powertools[parser]': '==3.31.0',\n 'aws-opentelemetry-distro': '==0.18.0',\n 'bedrock-agentcore': '==1.15.1',\n boto3: '==1.43.37',\n checkov: '==3.3.6',\n fastapi: '==0.138.2',\n 'fastapi[standard]': '==0.138.2',\n httpx: '==0.28.1',\n langchain: '==1.3.11',\n 'langchain-aws': '==1.6.1',\n 'langchain-mcp-adapters': '==0.3.0',\n langgraph: '==1.2.7',\n mcp: '==1.28.1',\n 'pip-check-updates': '==0.29.0',\n 'pip-licenses': '==5.5.5',\n 'strands-agents': '==1.45.0',\n 'strands-agents[a2a]': '==1.45.0',\n 'strands-agents-tools': '==0.8.2',\n ty: '==0.0.55',\n pynamodb: '==6.1.0',\n uvicorn: '==0.49.0',\n} as const;\nexport type IPyDepVersion = keyof typeof PY_VERSIONS;\n\n/**\n * Add versions to the given dependencies\n */\nexport const withPyVersions = (deps: IPyDepVersion[]) =>\n deps.map((dep) => `${dep}${PY_VERSIONS[dep]}`);\n\n/**\n * Versions for vendored tools\n */\nexport const VENDORED_VERSIONS = {\n 'git-secrets': '1.3.0',\n} as const;\n\n/**\n * Exact versions for Terraform providers used by generated `.tf` modules.\n * Pinned exactly (no range operator) so generated infrastructure is reproducible.\n */\nexport const TERRAFORM_VERSIONS = {\n aws: '6.52.0',\n random: '3.9.0',\n null: '3.3.0',\n archive: '2.8.0',\n external: '2.4.0',\n local: '2.9.0',\n} as const;\nexport type ITerraformProviderVersion = keyof typeof TERRAFORM_VERSIONS;\n\n/**\n * Substitution variables exposing Terraform provider version constraints to\n * generated `.tf` templates (e.g. `version = \"<%- awsProviderVersion %>\"`)\n */\nexport const terraformProviderVersions = () => ({\n awsProviderVersion: TERRAFORM_VERSIONS.aws,\n randomProviderVersion: TERRAFORM_VERSIONS.random,\n nullProviderVersion: TERRAFORM_VERSIONS.null,\n archiveProviderVersion: TERRAFORM_VERSIONS.archive,\n externalProviderVersion: TERRAFORM_VERSIONS.external,\n localProviderVersion: TERRAFORM_VERSIONS.local,\n});\n"],"names":["TS_VERSIONS","rxjs","astro","aws4fetch","constructs","cors","chalk","clsx","commander","electrodb","esbuild","ejs","express","husky","mariadb","ncp","pg","prisma","react","rimraf","rolldown","tailwindcss","tsx","shadcn","vite","typescript","vitest","zod","ws","withVersions","deps","Object","fromEntries","map","dep","PY_VERSIONS","boto3","checkov","fastapi","httpx","langchain","langgraph","mcp","ty","pynamodb","uvicorn","withPyVersions","VENDORED_VERSIONS","TERRAFORM_VERSIONS","aws","random","null","archive","external","local","terraformProviderVersions","awsProviderVersion","randomProviderVersion","nullProviderVersion","archiveProviderVersion","externalProviderVersion","localProviderVersion"],"mappings":"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"}