@aws/nx-plugin 1.0.0-rc.24 → 1.0.0-rc.25

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 (297) hide show
  1. package/LICENSE-THIRD-PARTY +2020 -702
  2. package/package.json +6 -6
  3. package/src/agentcore-gateway/gateway-connection/generator.d.ts +1 -1
  4. package/src/agentcore-gateway/gateway-connection/generator.js +7 -5
  5. package/src/agentcore-gateway/gateway-connection/generator.js.map +1 -1
  6. package/src/agentcore-gateway/gateway-connection/schema.d.js.map +1 -1
  7. package/src/agentcore-gateway/gateway-connection/schema.d.ts +1 -0
  8. package/src/agentcore-gateway/gateway-connection/schema.json +5 -0
  9. package/src/agentcore-gateway/generator.js +7 -4
  10. package/src/agentcore-gateway/generator.js.map +1 -1
  11. package/src/agentcore-gateway/mcp-connection/generator.d.ts +1 -1
  12. package/src/agentcore-gateway/mcp-connection/generator.js +7 -5
  13. package/src/agentcore-gateway/mcp-connection/generator.js.map +1 -1
  14. package/src/agentcore-gateway/mcp-connection/schema.d.js.map +1 -1
  15. package/src/agentcore-gateway/mcp-connection/schema.d.ts +1 -0
  16. package/src/agentcore-gateway/mcp-connection/schema.json +5 -0
  17. package/src/agentcore-gateway/schema.d.js.map +1 -1
  18. package/src/agentcore-gateway/schema.d.ts +1 -0
  19. package/src/agentcore-gateway/schema.json +5 -0
  20. package/src/connection/generator.d.ts +1 -0
  21. package/src/connection/generator.js +8 -4
  22. package/src/connection/generator.js.map +1 -1
  23. package/src/connection/schema.d.js.map +1 -1
  24. package/src/connection/schema.d.ts +1 -0
  25. package/src/connection/schema.json +5 -0
  26. package/src/infra/app/__snapshots__/generator.spec.ts.snap +29 -21
  27. package/src/infra/app/generator.js +12 -6
  28. package/src/infra/app/generator.js.map +1 -1
  29. package/src/infra/app/schema.d.js.map +1 -1
  30. package/src/infra/app/schema.d.ts +1 -1
  31. package/src/infra/app/schema.json +5 -0
  32. package/src/license/schema.d.js.map +1 -1
  33. package/src/license/schema.d.ts +2 -0
  34. package/src/license/schema.json +5 -0
  35. package/src/mcp-server/tools/general-guidance.js +17 -0
  36. package/src/mcp-server/tools/general-guidance.js.map +1 -1
  37. package/src/preset/__snapshots__/generator.spec.ts.snap +1 -1
  38. package/src/preset/generator.d.ts +1 -1
  39. package/src/preset/generator.js +8 -5
  40. package/src/preset/generator.js.map +1 -1
  41. package/src/preset/schema.d.js.map +1 -1
  42. package/src/preset/schema.d.ts +1 -0
  43. package/src/preset/schema.json +5 -0
  44. package/src/py/agent/__snapshots__/generator.constructs.spec.ts.snap +9 -9
  45. package/src/py/agent/__snapshots__/generator.frameworks.spec.ts.snap +10 -10
  46. package/src/py/agent/__snapshots__/generator.protocols.spec.ts.snap +1 -1
  47. package/src/py/agent/a2a-connection/generator.js +7 -4
  48. package/src/py/agent/a2a-connection/generator.js.map +1 -1
  49. package/src/py/agent/a2a-connection/schema.d.js.map +1 -1
  50. package/src/py/agent/a2a-connection/schema.d.ts +1 -0
  51. package/src/py/agent/a2a-connection/schema.json +5 -0
  52. package/src/py/agent/gateway-connection/generator.js +7 -4
  53. package/src/py/agent/gateway-connection/generator.js.map +1 -1
  54. package/src/py/agent/gateway-connection/schema.d.js.map +1 -1
  55. package/src/py/agent/gateway-connection/schema.d.ts +1 -0
  56. package/src/py/agent/gateway-connection/schema.json +5 -0
  57. package/src/py/agent/generator.js +8 -6
  58. package/src/py/agent/generator.js.map +1 -1
  59. package/src/py/agent/mcp-connection/generator.js +7 -4
  60. package/src/py/agent/mcp-connection/generator.js.map +1 -1
  61. package/src/py/agent/mcp-connection/schema.d.js.map +1 -1
  62. package/src/py/agent/mcp-connection/schema.d.ts +1 -0
  63. package/src/py/agent/mcp-connection/schema.json +5 -0
  64. package/src/py/agent/react-connection/generator.d.ts +1 -1
  65. package/src/py/agent/react-connection/generator.js +7 -4
  66. package/src/py/agent/react-connection/generator.js.map +1 -1
  67. package/src/py/agent/react-connection/schema.d.js.map +1 -1
  68. package/src/py/agent/react-connection/schema.d.ts +1 -0
  69. package/src/py/agent/react-connection/schema.json +5 -0
  70. package/src/py/agent/schema.d.js.map +1 -1
  71. package/src/py/agent/schema.d.ts +1 -0
  72. package/src/py/agent/schema.json +5 -0
  73. package/src/py/api/generator.js +2 -1
  74. package/src/py/api/generator.js.map +1 -1
  75. package/src/py/api/schema.d.js.map +1 -1
  76. package/src/py/api/schema.d.ts +1 -0
  77. package/src/py/api/schema.json +5 -0
  78. package/src/py/dynamodb/agent-connection/generator.js +8 -6
  79. package/src/py/dynamodb/agent-connection/generator.js.map +1 -1
  80. package/src/py/dynamodb/agent-connection/schema.d.js.map +1 -1
  81. package/src/py/dynamodb/agent-connection/schema.d.ts +1 -0
  82. package/src/py/dynamodb/agent-connection/schema.json +5 -0
  83. package/src/py/dynamodb/fast-api-connection/generator.js +8 -6
  84. package/src/py/dynamodb/fast-api-connection/generator.js.map +1 -1
  85. package/src/py/dynamodb/fast-api-connection/schema.d.js.map +1 -1
  86. package/src/py/dynamodb/fast-api-connection/schema.d.ts +1 -0
  87. package/src/py/dynamodb/fast-api-connection/schema.json +5 -0
  88. package/src/py/dynamodb/generator.js +10 -7
  89. package/src/py/dynamodb/generator.js.map +1 -1
  90. package/src/py/dynamodb/mcp-server-connection/generator.js +8 -6
  91. package/src/py/dynamodb/mcp-server-connection/generator.js.map +1 -1
  92. package/src/py/dynamodb/mcp-server-connection/schema.d.js.map +1 -1
  93. package/src/py/dynamodb/mcp-server-connection/schema.d.ts +1 -0
  94. package/src/py/dynamodb/mcp-server-connection/schema.json +5 -0
  95. package/src/py/dynamodb/schema.d.js.map +1 -1
  96. package/src/py/dynamodb/schema.d.ts +1 -0
  97. package/src/py/dynamodb/schema.json +5 -0
  98. package/src/py/fast-api/generator.js +10 -7
  99. package/src/py/fast-api/generator.js.map +1 -1
  100. package/src/py/fast-api/react/generator.d.ts +2 -2
  101. package/src/py/fast-api/react/generator.js +7 -5
  102. package/src/py/fast-api/react/generator.js.map +1 -1
  103. package/src/py/fast-api/react/schema.d.js.map +1 -1
  104. package/src/py/fast-api/react/schema.d.ts +1 -0
  105. package/src/py/fast-api/react/schema.json +5 -0
  106. package/src/py/fast-api/schema.d.js.map +1 -1
  107. package/src/py/fast-api/schema.d.ts +1 -0
  108. package/src/py/fast-api/schema.json +5 -0
  109. package/src/py/lambda-function/generator.js +8 -6
  110. package/src/py/lambda-function/generator.js.map +1 -1
  111. package/src/py/lambda-function/schema.d.js.map +1 -1
  112. package/src/py/lambda-function/schema.d.ts +1 -0
  113. package/src/py/lambda-function/schema.json +5 -0
  114. package/src/py/mcp-server/__snapshots__/generator.spec.ts.snap +5 -5
  115. package/src/py/mcp-server/generator.js +8 -6
  116. package/src/py/mcp-server/generator.js.map +1 -1
  117. package/src/py/mcp-server/schema.d.js.map +1 -1
  118. package/src/py/mcp-server/schema.d.ts +1 -0
  119. package/src/py/mcp-server/schema.json +5 -0
  120. package/src/py/project/generator.js +9 -6
  121. package/src/py/project/generator.js.map +1 -1
  122. package/src/py/project/schema.d.js.map +1 -1
  123. package/src/py/project/schema.d.ts +1 -0
  124. package/src/py/project/schema.json +5 -0
  125. package/src/sdk/open-api.d.ts +1 -1
  126. package/src/sdk/open-api.js +1 -1
  127. package/src/sdk/open-api.js.map +1 -1
  128. package/src/sdk/utils/ast.d.ts +1 -2
  129. package/src/sdk/utils/ast.js +1 -2
  130. package/src/sdk/utils/ast.js.map +1 -1
  131. package/src/smithy/project/generator.js +7 -4
  132. package/src/smithy/project/generator.js.map +1 -1
  133. package/src/smithy/project/schema.d.js.map +1 -1
  134. package/src/smithy/project/schema.d.ts +1 -0
  135. package/src/smithy/project/schema.json +5 -0
  136. package/src/smithy/react-connection/generator.js +7 -4
  137. package/src/smithy/react-connection/generator.js.map +1 -1
  138. package/src/smithy/react-connection/schema.d.js.map +1 -1
  139. package/src/smithy/react-connection/schema.d.ts +1 -0
  140. package/src/smithy/react-connection/schema.json +5 -0
  141. package/src/smithy/ts/api/generator.js +11 -6
  142. package/src/smithy/ts/api/generator.js.map +1 -1
  143. package/src/smithy/ts/api/schema.d.js.map +1 -1
  144. package/src/smithy/ts/api/schema.d.ts +1 -0
  145. package/src/smithy/ts/api/schema.json +5 -0
  146. package/src/terraform/project/generator.js +13 -4
  147. package/src/terraform/project/generator.js.map +1 -1
  148. package/src/terraform/project/schema.d.js.map +1 -1
  149. package/src/terraform/project/schema.d.ts +1 -0
  150. package/src/terraform/project/schema.json +5 -0
  151. package/src/trpc/backend/generator.d.ts +1 -1
  152. package/src/trpc/backend/generator.js +9 -5
  153. package/src/trpc/backend/generator.js.map +1 -1
  154. package/src/trpc/backend/schema.d.js.map +1 -1
  155. package/src/trpc/backend/schema.d.ts +1 -0
  156. package/src/trpc/backend/schema.json +5 -0
  157. package/src/trpc/react/generator.d.ts +1 -1
  158. package/src/trpc/react/generator.js +9 -5
  159. package/src/trpc/react/generator.js.map +1 -1
  160. package/src/trpc/react/schema.d.js.map +1 -1
  161. package/src/trpc/react/schema.d.ts +1 -0
  162. package/src/trpc/react/schema.json +5 -0
  163. package/src/ts/agent/__snapshots__/generator.spec.ts.snap +2 -2
  164. package/src/ts/agent/a2a-connection/generator.js +7 -4
  165. package/src/ts/agent/a2a-connection/generator.js.map +1 -1
  166. package/src/ts/agent/a2a-connection/schema.d.js.map +1 -1
  167. package/src/ts/agent/a2a-connection/schema.d.ts +1 -0
  168. package/src/ts/agent/a2a-connection/schema.json +5 -0
  169. package/src/ts/agent/gateway-connection/generator.js +7 -4
  170. package/src/ts/agent/gateway-connection/generator.js.map +1 -1
  171. package/src/ts/agent/gateway-connection/schema.d.js.map +1 -1
  172. package/src/ts/agent/gateway-connection/schema.d.ts +1 -0
  173. package/src/ts/agent/gateway-connection/schema.json +5 -0
  174. package/src/ts/agent/generator.js +7 -4
  175. package/src/ts/agent/generator.js.map +1 -1
  176. package/src/ts/agent/mcp-connection/generator.js +7 -4
  177. package/src/ts/agent/mcp-connection/generator.js.map +1 -1
  178. package/src/ts/agent/mcp-connection/schema.d.js.map +1 -1
  179. package/src/ts/agent/mcp-connection/schema.d.ts +1 -0
  180. package/src/ts/agent/mcp-connection/schema.json +5 -0
  181. package/src/ts/agent/react-connection/generator.d.ts +1 -1
  182. package/src/ts/agent/react-connection/generator.js +14 -8
  183. package/src/ts/agent/react-connection/generator.js.map +1 -1
  184. package/src/ts/agent/react-connection/schema.d.js.map +1 -1
  185. package/src/ts/agent/react-connection/schema.d.ts +1 -0
  186. package/src/ts/agent/react-connection/schema.json +5 -0
  187. package/src/ts/agent/schema.d.js.map +1 -1
  188. package/src/ts/agent/schema.d.ts +1 -0
  189. package/src/ts/agent/schema.json +5 -0
  190. package/src/ts/api/generator.js +4 -2
  191. package/src/ts/api/generator.js.map +1 -1
  192. package/src/ts/api/schema.d.js.map +1 -1
  193. package/src/ts/api/schema.d.ts +1 -0
  194. package/src/ts/api/schema.json +5 -0
  195. package/src/ts/astro-docs/generator.js +7 -6
  196. package/src/ts/astro-docs/generator.js.map +1 -1
  197. package/src/ts/astro-docs/schema.d.js.map +1 -1
  198. package/src/ts/astro-docs/schema.d.ts +2 -2
  199. package/src/ts/astro-docs/schema.json +3 -3
  200. package/src/ts/docs/schema.d.js.map +1 -1
  201. package/src/ts/docs/schema.d.ts +1 -4
  202. package/src/ts/docs/schema.json +3 -3
  203. package/src/ts/dynamodb/agent-connection/schema.d.js.map +1 -1
  204. package/src/ts/dynamodb/agent-connection/schema.d.ts +1 -0
  205. package/src/ts/dynamodb/agent-connection/schema.json +5 -0
  206. package/src/ts/dynamodb/generator.js +9 -5
  207. package/src/ts/dynamodb/generator.js.map +1 -1
  208. package/src/ts/dynamodb/mcp-server-connection/schema.d.js.map +1 -1
  209. package/src/ts/dynamodb/mcp-server-connection/schema.d.ts +1 -0
  210. package/src/ts/dynamodb/mcp-server-connection/schema.json +5 -0
  211. package/src/ts/dynamodb/schema.d.js.map +1 -1
  212. package/src/ts/dynamodb/schema.d.ts +1 -0
  213. package/src/ts/dynamodb/schema.json +5 -0
  214. package/src/ts/dynamodb/smithy-connection/schema.d.js.map +1 -1
  215. package/src/ts/dynamodb/smithy-connection/schema.d.ts +1 -0
  216. package/src/ts/dynamodb/smithy-connection/schema.json +5 -0
  217. package/src/ts/dynamodb/trpc-connection/schema.d.js.map +1 -1
  218. package/src/ts/dynamodb/trpc-connection/schema.d.ts +1 -0
  219. package/src/ts/dynamodb/trpc-connection/schema.json +5 -0
  220. package/src/ts/lambda-function/generator.js +7 -4
  221. package/src/ts/lambda-function/generator.js.map +1 -1
  222. package/src/ts/lambda-function/schema.d.js.map +1 -1
  223. package/src/ts/lambda-function/schema.d.ts +1 -0
  224. package/src/ts/lambda-function/schema.json +5 -0
  225. package/src/ts/lib/generator.js +10 -6
  226. package/src/ts/lib/generator.js.map +1 -1
  227. package/src/ts/lib/schema.d.js.map +1 -1
  228. package/src/ts/lib/schema.d.ts +1 -1
  229. package/src/ts/lib/schema.json +5 -0
  230. package/src/ts/mcp-server/__snapshots__/generator.spec.ts.snap +2 -2
  231. package/src/ts/mcp-server/generator.js +7 -4
  232. package/src/ts/mcp-server/generator.js.map +1 -1
  233. package/src/ts/mcp-server/schema.d.js.map +1 -1
  234. package/src/ts/mcp-server/schema.d.ts +1 -0
  235. package/src/ts/mcp-server/schema.json +5 -0
  236. package/src/ts/nx-generator/__snapshots__/generator.spec.ts.snap +18 -8
  237. package/src/ts/nx-generator/files/common/schema.d.ts.template +1 -0
  238. package/src/ts/nx-generator/files/common/schema.json.template +5 -0
  239. package/src/ts/nx-generator/files/nx-plugin-for-aws/generator/generator.ts.template +3 -4
  240. package/src/ts/nx-generator/generator.js +7 -4
  241. package/src/ts/nx-generator/generator.js.map +1 -1
  242. package/src/ts/nx-generator/schema.d.js.map +1 -1
  243. package/src/ts/nx-generator/schema.d.ts +1 -0
  244. package/src/ts/nx-generator/schema.json +5 -0
  245. package/src/ts/nx-plugin/generator.js +13 -6
  246. package/src/ts/nx-plugin/generator.js.map +1 -1
  247. package/src/ts/nx-plugin/schema.json +5 -0
  248. package/src/ts/rdb/agent-connection/schema.d.js.map +1 -1
  249. package/src/ts/rdb/agent-connection/schema.d.ts +1 -0
  250. package/src/ts/rdb/agent-connection/schema.json +5 -0
  251. package/src/ts/rdb/generator.js +9 -5
  252. package/src/ts/rdb/generator.js.map +1 -1
  253. package/src/ts/rdb/mcp-server-connection/schema.d.js.map +1 -1
  254. package/src/ts/rdb/mcp-server-connection/schema.d.ts +1 -0
  255. package/src/ts/rdb/mcp-server-connection/schema.json +5 -0
  256. package/src/ts/rdb/schema.d.js.map +1 -1
  257. package/src/ts/rdb/schema.d.ts +1 -0
  258. package/src/ts/rdb/schema.json +5 -0
  259. package/src/ts/rdb/smithy-connection/schema.d.js.map +1 -1
  260. package/src/ts/rdb/smithy-connection/schema.d.ts +1 -0
  261. package/src/ts/rdb/smithy-connection/schema.json +5 -0
  262. package/src/ts/rdb/trpc-connection/schema.d.js.map +1 -1
  263. package/src/ts/rdb/trpc-connection/schema.d.ts +1 -0
  264. package/src/ts/rdb/trpc-connection/schema.json +5 -0
  265. package/src/ts/react-website/app/__snapshots__/generator.spec.ts.snap +26 -26
  266. package/src/ts/react-website/app/generator.d.ts +1 -1
  267. package/src/ts/react-website/app/generator.js +18 -6
  268. package/src/ts/react-website/app/generator.js.map +1 -1
  269. package/src/ts/react-website/app/schema.d.js.map +1 -1
  270. package/src/ts/react-website/app/schema.d.ts +1 -1
  271. package/src/ts/react-website/app/schema.json +5 -0
  272. package/src/ts/react-website/cognito-auth/__snapshots__/generator.terraform.spec.ts.snap +1 -1
  273. package/src/ts/react-website/cognito-auth/generator.d.ts +1 -1
  274. package/src/ts/react-website/cognito-auth/generator.js +9 -5
  275. package/src/ts/react-website/cognito-auth/generator.js.map +1 -1
  276. package/src/ts/react-website/cognito-auth/schema.d.js.map +1 -1
  277. package/src/ts/react-website/cognito-auth/schema.d.ts +1 -0
  278. package/src/ts/react-website/cognito-auth/schema.json +5 -0
  279. package/src/ts/react-website/runtime-config/schema.d.js.map +1 -1
  280. package/src/ts/react-website/runtime-config/schema.d.ts +1 -0
  281. package/src/ts/react-website/runtime-config/schema.json +5 -0
  282. package/src/ts/website/app/schema.d.js.map +1 -1
  283. package/src/ts/website/app/schema.d.ts +1 -1
  284. package/src/ts/website/app/schema.json +5 -0
  285. package/src/ts/website/auth/generator.d.ts +1 -1
  286. package/src/ts/website/auth/generator.js +2 -1
  287. package/src/ts/website/auth/generator.js.map +1 -1
  288. package/src/ts/website/auth/schema.d.js.map +1 -1
  289. package/src/ts/website/auth/schema.d.ts +1 -0
  290. package/src/ts/website/auth/schema.json +5 -0
  291. package/src/utils/files/common/scripts/src/infra/stage-credentials/cdk-command.ts.template +11 -3
  292. package/src/utils/install.d.ts +32 -0
  293. package/src/utils/install.js +56 -0
  294. package/src/utils/install.js.map +1 -0
  295. package/src/utils/versions.d.ts +64 -64
  296. package/src/utils/versions.js +63 -63
  297. package/src/utils/versions.js.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../packages/nx-plugin/src/ts/agent/gateway-connection/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 type GeneratorCallback,\n generateFiles,\n installPackagesTask,\n joinPathFragments,\n OverwriteStrategy,\n type Tree,\n updateProjectConfiguration,\n} from '@nx/devkit';\nimport { readAgentCoreGatewayMetadata } from '../../../agentcore-gateway/generator';\nimport {\n AGENT_CONNECTION_PROJECT_DIR,\n addTypeScriptClientToAgent,\n addTypeScriptCoreClient,\n ensureTypeScriptAgentConnectionProject,\n} from '../../../utils/agent-connection/agent-connection';\nimport { addDestructuredImport, addStarExport } from '../../../utils/ast';\nimport { formatFilesInSubtree } from '../../../utils/format';\nimport { addGeneratorMetricsIfApplicable } from '../../../utils/metrics';\nimport { kebabCase } from '../../../utils/names';\nimport { getNpmScope } from '../../../utils/npm-scope';\nimport {\n addDependencyToTargetIfNotPresent,\n getGeneratorInfo,\n type NxGeneratorInfo,\n readProjectConfigurationUnqualified,\n} from '../../../utils/nx';\nimport { withVersions } from '../../../utils/versions';\nimport type { TsAgentGatewayConnectionGeneratorSchema } from './schema';\n\nexport const TS_AGENT_GATEWAY_CONNECTION_GENERATOR_INFO: NxGeneratorInfo =\n getGeneratorInfo(import.meta.filename);\n\nexport const tsAgentGatewayConnectionGenerator = async (\n tree: Tree,\n options: TsAgentGatewayConnectionGeneratorSchema,\n): Promise<GeneratorCallback> => {\n const sourceProject = readProjectConfigurationUnqualified(\n tree,\n options.sourceProject,\n );\n const targetProject = readProjectConfigurationUnqualified(\n tree,\n options.targetProject,\n );\n\n const agentComponent = options.sourceComponent;\n if (!agentComponent) {\n throw new Error(\n 'sourceComponent must be provided for ts#agent -> agentcore-gateway connections',\n );\n }\n const gateway = readAgentCoreGatewayMetadata(targetProject);\n\n if (gateway.protocol !== 'mcp') {\n throw new Error(\n `Gateway '${gateway.name}' has protocol='${gateway.protocol}'. Only MCP-protocol gateways are supported.`,\n );\n }\n if (gateway.auth !== 'iam') {\n throw new Error(\n `Gateway '${gateway.name}' uses auth='${gateway.auth}'. Only IAM-authenticated gateways are supported in v1.`,\n );\n }\n if (agentComponent.auth && agentComponent.auth !== 'iam') {\n throw new Error(\n `Agent '${agentComponent.name}' uses auth='${agentComponent.auth}'. Only IAM-authenticated agents can connect to IAM gateways.`,\n );\n }\n\n const gatewayClassName = gateway.rc;\n const gatewayKebabCase = kebabCase(gatewayClassName);\n // A gateway is its own standalone project, so it exposes plain serve / dev.\n const gatewayServeTargetName = 'serve';\n const gatewayDevTargetName = 'dev';\n\n const npmScope = getNpmScope(tree);\n\n // 1. Ensure the shared agent-connection project exists + has the gateway\n // core client template.\n await ensureTypeScriptAgentConnectionProject(tree);\n await addTypeScriptCoreClient(tree, 'gateway');\n\n // 2. Generate the per-connection <Gateway>Client into app/. Local mode\n // points at the gateway project's local gateway port.\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files', 'agent-connection', 'app'),\n joinPathFragments(AGENT_CONNECTION_PROJECT_DIR, 'src', 'app'),\n {\n gatewayKebabCase,\n gatewayClassName,\n gatewayPort: gateway.port,\n },\n { overwriteStrategy: OverwriteStrategy.KeepExisting },\n );\n\n // Re-export from the agent-connection index\n await addStarExport(\n tree,\n joinPathFragments(AGENT_CONNECTION_PROJECT_DIR, 'src', 'index.ts'),\n `./app/${gatewayKebabCase}-client-strands.js`,\n );\n\n // 3. AST-transform agent.ts to add the gateway client (an McpClient in\n // both deployed and local modes) to the agent's tools.\n const agentSourceDir = joinPathFragments(\n sourceProject.root,\n agentComponent.path ?? 'src',\n );\n const agentFilePath = joinPathFragments(agentSourceDir, 'agent.ts');\n\n if (tree.exists(agentFilePath)) {\n const clientClassName = `${gatewayClassName}ClientStrands`;\n const clientVarName =\n gatewayClassName.charAt(0).toLowerCase() + gatewayClassName.slice(1);\n\n await addDestructuredImport(\n tree,\n agentFilePath,\n [clientClassName],\n `:${npmScope}/agent-connection`,\n );\n await addTypeScriptClientToAgent(\n tree,\n agentFilePath,\n clientClassName,\n clientVarName,\n );\n }\n\n // 4. Wire dev chain — agent's dev depends on gateway's\n // aggregator target, which transitively starts each attached MCP server.\n const agentName = agentComponent.name ?? 'agent';\n const serveTargetName = `${agentName}-serve`;\n const devTargetName = `${agentName}-dev`;\n let projectConfigChanged = false;\n if (sourceProject.targets?.[serveTargetName]) {\n addDependencyToTargetIfNotPresent(sourceProject, serveTargetName, {\n projects: [targetProject.name],\n target: gatewayServeTargetName,\n });\n projectConfigChanged = true;\n }\n if (sourceProject.targets?.[devTargetName]) {\n addDependencyToTargetIfNotPresent(sourceProject, devTargetName, {\n projects: [targetProject.name],\n target: gatewayDevTargetName,\n });\n projectConfigChanged = true;\n }\n if (projectConfigChanged) {\n updateProjectConfiguration(tree, sourceProject.name, sourceProject);\n }\n\n // 5. Dependencies\n addDependenciesToPackageJson(\n tree,\n withVersions([\n '@modelcontextprotocol/sdk',\n '@strands-agents/sdk',\n '@aws-lambda-powertools/parameters',\n '@aws-sdk/client-appconfigdata',\n 'aws4fetch',\n '@aws-sdk/credential-providers',\n ]),\n {},\n );\n\n await addGeneratorMetricsIfApplicable(tree, [\n TS_AGENT_GATEWAY_CONNECTION_GENERATOR_INFO,\n ]);\n\n await formatFilesInSubtree(tree);\n return () => {\n installPackagesTask(tree);\n };\n};\n\nexport default tsAgentGatewayConnectionGenerator;\n"],"names":["addDependenciesToPackageJson","generateFiles","installPackagesTask","joinPathFragments","OverwriteStrategy","updateProjectConfiguration","readAgentCoreGatewayMetadata","AGENT_CONNECTION_PROJECT_DIR","addTypeScriptClientToAgent","addTypeScriptCoreClient","ensureTypeScriptAgentConnectionProject","addDestructuredImport","addStarExport","formatFilesInSubtree","addGeneratorMetricsIfApplicable","kebabCase","getNpmScope","addDependencyToTargetIfNotPresent","getGeneratorInfo","readProjectConfigurationUnqualified","withVersions","TS_AGENT_GATEWAY_CONNECTION_GENERATOR_INFO","filename","tsAgentGatewayConnectionGenerator","tree","options","sourceProject","targetProject","agentComponent","sourceComponent","Error","gateway","protocol","name","auth","gatewayClassName","rc","gatewayKebabCase","gatewayServeTargetName","gatewayDevTargetName","npmScope","dirname","gatewayPort","port","overwriteStrategy","KeepExisting","agentSourceDir","root","path","agentFilePath","exists","clientClassName","clientVarName","charAt","toLowerCase","slice","agentName","serveTargetName","devTargetName","projectConfigChanged","targets","projects","target"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../../../packages/nx-plugin/src/ts/agent/gateway-connection/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 type GeneratorCallback,\n generateFiles,\n joinPathFragments,\n OverwriteStrategy,\n type Tree,\n updateProjectConfiguration,\n} from '@nx/devkit';\nimport { readAgentCoreGatewayMetadata } from '../../../agentcore-gateway/generator';\nimport {\n AGENT_CONNECTION_PROJECT_DIR,\n addTypeScriptClientToAgent,\n addTypeScriptCoreClient,\n ensureTypeScriptAgentConnectionProject,\n} from '../../../utils/agent-connection/agent-connection';\nimport { addDestructuredImport, addStarExport } from '../../../utils/ast';\nimport { formatFilesInSubtree } from '../../../utils/format';\nimport { installDependencies } from '../../../utils/install';\nimport { addGeneratorMetricsIfApplicable } from '../../../utils/metrics';\nimport { kebabCase } from '../../../utils/names';\nimport { getNpmScope } from '../../../utils/npm-scope';\nimport {\n addDependencyToTargetIfNotPresent,\n getGeneratorInfo,\n type NxGeneratorInfo,\n readProjectConfigurationUnqualified,\n} from '../../../utils/nx';\nimport { withVersions } from '../../../utils/versions';\nimport type { TsAgentGatewayConnectionGeneratorSchema } from './schema';\n\nexport const TS_AGENT_GATEWAY_CONNECTION_GENERATOR_INFO: NxGeneratorInfo =\n getGeneratorInfo(import.meta.filename);\n\nexport const tsAgentGatewayConnectionGenerator = async (\n tree: Tree,\n options: TsAgentGatewayConnectionGeneratorSchema,\n): Promise<GeneratorCallback> => {\n const sourceProject = readProjectConfigurationUnqualified(\n tree,\n options.sourceProject,\n );\n const targetProject = readProjectConfigurationUnqualified(\n tree,\n options.targetProject,\n );\n\n const agentComponent = options.sourceComponent;\n if (!agentComponent) {\n throw new Error(\n 'sourceComponent must be provided for ts#agent -> agentcore-gateway connections',\n );\n }\n const gateway = readAgentCoreGatewayMetadata(targetProject);\n\n if (gateway.protocol !== 'mcp') {\n throw new Error(\n `Gateway '${gateway.name}' has protocol='${gateway.protocol}'. Only MCP-protocol gateways are supported.`,\n );\n }\n if (gateway.auth !== 'iam') {\n throw new Error(\n `Gateway '${gateway.name}' uses auth='${gateway.auth}'. Only IAM-authenticated gateways are supported in v1.`,\n );\n }\n if (agentComponent.auth && agentComponent.auth !== 'iam') {\n throw new Error(\n `Agent '${agentComponent.name}' uses auth='${agentComponent.auth}'. Only IAM-authenticated agents can connect to IAM gateways.`,\n );\n }\n\n const gatewayClassName = gateway.rc;\n const gatewayKebabCase = kebabCase(gatewayClassName);\n // A gateway is its own standalone project, so it exposes plain serve / dev.\n const gatewayServeTargetName = 'serve';\n const gatewayDevTargetName = 'dev';\n\n const npmScope = getNpmScope(tree);\n\n // 1. Ensure the shared agent-connection project exists + has the gateway\n // core client template.\n await ensureTypeScriptAgentConnectionProject(tree);\n await addTypeScriptCoreClient(tree, 'gateway');\n\n // 2. Generate the per-connection <Gateway>Client into app/. Local mode\n // points at the gateway project's local gateway port.\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files', 'agent-connection', 'app'),\n joinPathFragments(AGENT_CONNECTION_PROJECT_DIR, 'src', 'app'),\n {\n gatewayKebabCase,\n gatewayClassName,\n gatewayPort: gateway.port,\n },\n { overwriteStrategy: OverwriteStrategy.KeepExisting },\n );\n\n // Re-export from the agent-connection index\n await addStarExport(\n tree,\n joinPathFragments(AGENT_CONNECTION_PROJECT_DIR, 'src', 'index.ts'),\n `./app/${gatewayKebabCase}-client-strands.js`,\n );\n\n // 3. AST-transform agent.ts to add the gateway client (an McpClient in\n // both deployed and local modes) to the agent's tools.\n const agentSourceDir = joinPathFragments(\n sourceProject.root,\n agentComponent.path ?? 'src',\n );\n const agentFilePath = joinPathFragments(agentSourceDir, 'agent.ts');\n\n if (tree.exists(agentFilePath)) {\n const clientClassName = `${gatewayClassName}ClientStrands`;\n const clientVarName =\n gatewayClassName.charAt(0).toLowerCase() + gatewayClassName.slice(1);\n\n await addDestructuredImport(\n tree,\n agentFilePath,\n [clientClassName],\n `:${npmScope}/agent-connection`,\n );\n await addTypeScriptClientToAgent(\n tree,\n agentFilePath,\n clientClassName,\n clientVarName,\n );\n }\n\n // 4. Wire dev chain — agent's dev depends on gateway's\n // aggregator target, which transitively starts each attached MCP server.\n const agentName = agentComponent.name ?? 'agent';\n const serveTargetName = `${agentName}-serve`;\n const devTargetName = `${agentName}-dev`;\n let projectConfigChanged = false;\n if (sourceProject.targets?.[serveTargetName]) {\n addDependencyToTargetIfNotPresent(sourceProject, serveTargetName, {\n projects: [targetProject.name],\n target: gatewayServeTargetName,\n });\n projectConfigChanged = true;\n }\n if (sourceProject.targets?.[devTargetName]) {\n addDependencyToTargetIfNotPresent(sourceProject, devTargetName, {\n projects: [targetProject.name],\n target: gatewayDevTargetName,\n });\n projectConfigChanged = true;\n }\n if (projectConfigChanged) {\n updateProjectConfiguration(tree, sourceProject.name, sourceProject);\n }\n\n // 5. Dependencies\n addDependenciesToPackageJson(\n tree,\n withVersions([\n '@modelcontextprotocol/sdk',\n '@strands-agents/sdk',\n '@aws-lambda-powertools/parameters',\n '@aws-sdk/client-appconfigdata',\n 'aws4fetch',\n '@aws-sdk/credential-providers',\n ]),\n {},\n );\n\n await addGeneratorMetricsIfApplicable(tree, [\n TS_AGENT_GATEWAY_CONNECTION_GENERATOR_INFO,\n ]);\n\n await formatFilesInSubtree(tree);\n return () =>\n installDependencies(tree, options.preferInstallDependencies, {\n languages: ['typescript'],\n });\n};\n\nexport default tsAgentGatewayConnectionGenerator;\n"],"names":["addDependenciesToPackageJson","generateFiles","joinPathFragments","OverwriteStrategy","updateProjectConfiguration","readAgentCoreGatewayMetadata","AGENT_CONNECTION_PROJECT_DIR","addTypeScriptClientToAgent","addTypeScriptCoreClient","ensureTypeScriptAgentConnectionProject","addDestructuredImport","addStarExport","formatFilesInSubtree","installDependencies","addGeneratorMetricsIfApplicable","kebabCase","getNpmScope","addDependencyToTargetIfNotPresent","getGeneratorInfo","readProjectConfigurationUnqualified","withVersions","TS_AGENT_GATEWAY_CONNECTION_GENERATOR_INFO","filename","tsAgentGatewayConnectionGenerator","tree","options","sourceProject","targetProject","agentComponent","sourceComponent","Error","gateway","protocol","name","auth","gatewayClassName","rc","gatewayKebabCase","gatewayServeTargetName","gatewayDevTargetName","npmScope","dirname","gatewayPort","port","overwriteStrategy","KeepExisting","agentSourceDir","root","path","agentFilePath","exists","clientClassName","clientVarName","charAt","toLowerCase","slice","agentName","serveTargetName","devTargetName","projectConfigChanged","targets","projects","target","preferInstallDependencies","languages"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../packages/nx-plugin/src/ts/agent/gateway-connection/schema.d.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport type { ComponentMetadata } from '../../../utils/nx';\n\nexport interface TsAgentGatewayConnectionGeneratorSchema {\n sourceProject: string;\n targetProject: string;\n sourceComponent?: ComponentMetadata;\n targetComponent?: ComponentMetadata;\n}\n"],"names":[],"mappings":"AAAA;;;CAGC,GAGD,WAKC"}
1
+ {"version":3,"sources":["../../../../../../../packages/nx-plugin/src/ts/agent/gateway-connection/schema.d.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport type { ComponentMetadata } from '../../../utils/nx';\n\nexport interface TsAgentGatewayConnectionGeneratorSchema {\n sourceProject: string;\n targetProject: string;\n sourceComponent?: ComponentMetadata;\n targetComponent?: ComponentMetadata;\n preferInstallDependencies?: boolean;\n}\n"],"names":[],"mappings":"AAAA;;;CAGC,GAGD,WAMC"}
@@ -9,4 +9,5 @@ export interface TsAgentGatewayConnectionGeneratorSchema {
9
9
  targetProject: string;
10
10
  sourceComponent?: ComponentMetadata;
11
11
  targetComponent?: ComponentMetadata;
12
+ preferInstallDependencies?: boolean;
12
13
  }
@@ -20,6 +20,11 @@
20
20
  "targetComponent": {
21
21
  "type": "string",
22
22
  "description": "The gateway component in the target project"
23
+ },
24
+ "preferInstallDependencies": {
25
+ "type": "boolean",
26
+ "description": "Whether to prefer installing dependencies after the generator runs. Set to false to defer installing when batching multiple generators (an install still runs if needed so subsequent generators can compute the Nx project graph); install once at the end.",
27
+ "default": true
23
28
  }
24
29
  },
25
30
  "required": ["sourceProject", "targetProject"]
@@ -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, generateFiles, installPackagesTask, joinPathFragments, OverwriteStrategy, updateProjectConfiguration } from "@nx/devkit";
4
+ */ import { addDependenciesToPackageJson, generateFiles, joinPathFragments, OverwriteStrategy, updateProjectConfiguration } from "@nx/devkit";
5
5
  import { addAgentChatScripts } from "../../utils/agent-chat/agent-chat.js";
6
6
  import { addTypeScriptFrameworkBase, ensureTypeScriptAgentConnectionProject } from "../../utils/agent-connection/agent-connection.js";
7
7
  import { addAgentInfra } from "../../utils/agent-core-constructs/agent-core-constructs.js";
@@ -10,6 +10,7 @@ import { resolveContainers } from "../../utils/containers.js";
10
10
  import { formatFilesInSubtree } from "../../utils/format.js";
11
11
  import { FsCommands } from "../../utils/fs.js";
12
12
  import { resolveIac } from "../../utils/iac.js";
13
+ import { installDependencies } from "../../utils/install.js";
13
14
  import { addGeneratorMetricsIfApplicable } from "../../utils/metrics.js";
14
15
  import { kebabCase, toClassName } from "../../utils/names.js";
15
16
  import { getNpmScope } from "../../utils/npm-scope.js";
@@ -249,9 +250,11 @@ export const tsAgentGenerator = async (tree, options)=>{
249
250
  TS_AGENT_GENERATOR_INFO
250
251
  ]);
251
252
  await formatFilesInSubtree(tree);
252
- return ()=>{
253
- installPackagesTask(tree);
254
- };
253
+ return ()=>installDependencies(tree, options.preferInstallDependencies, {
254
+ languages: [
255
+ 'typescript'
256
+ ]
257
+ });
255
258
  };
256
259
  export default tsAgentGenerator;
257
260
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../packages/nx-plugin/src/ts/agent/generator.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport {\n addDependenciesToPackageJson,\n type GeneratorCallback,\n generateFiles,\n installPackagesTask,\n joinPathFragments,\n OverwriteStrategy,\n type Tree,\n updateProjectConfiguration,\n} from '@nx/devkit';\nimport { addAgentChatScripts } from '../../utils/agent-chat/agent-chat';\nimport {\n addTypeScriptFrameworkBase,\n ensureTypeScriptAgentConnectionProject,\n} from '../../utils/agent-connection/agent-connection';\nimport { addAgentInfra } 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 { 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 { TsAgentGeneratorSchema } from './schema';\n\nexport const TS_AGENT_GENERATOR_INFO: NxGeneratorInfo = getGeneratorInfo(\n import.meta.filename,\n);\n\nexport const tsAgentGenerator = async (\n tree: Tree,\n options: TsAgentGeneratorSchema,\n): Promise<GeneratorCallback> => {\n const project = readProjectConfigurationUnqualified(tree, options.project);\n\n if (!tree.exists(joinPathFragments(project.root, 'tsconfig.json'))) {\n throw new Error(\n `Unsupported project ${options.project}. Expected a TypeScript project (with a tsconfig.json)`,\n );\n }\n\n const defaultName = `${kebabCase(project.name.split('/').pop())}-agent`;\n const name = kebabCase(options.name || defaultName);\n const agentNameClassName = toClassName(name);\n const agentTargetPrefix = options.name ? name : 'agent';\n const targetSourceDirRelativeToProjectRoot = joinPathFragments(\n 'src',\n agentTargetPrefix,\n );\n const targetSourceDir = joinPathFragments(\n project.root,\n targetSourceDirRelativeToProjectRoot,\n );\n const relativeSourceDir = targetSourceDir.replace(project.root + '/', './');\n const distDir = joinPathFragments('dist', project.root);\n\n const infra = options.infra ?? 'agentcore';\n const protocol = options.protocol ?? 'http';\n\n if (infra === 'none' && options.auth && options.auth !== 'iam') {\n console.warn(\n 'Warning: auth is ignored when no infrastructure is configured (no infrastructure is generated)',\n );\n }\n\n const auth = options.auth ?? 'iam';\n\n // Ensure the shared agent-connection project exists so the server entry\n // point can import `runWithSessionId` and propagate the AgentCore session\n // ID to any downstream MCP / A2A clients a later connection generator\n // wires into this agent.\n await ensureTypeScriptAgentConnectionProject(tree);\n // The agent server imports the framework base helpers (session cache + model\n // error logging) regardless of whether a connection client is wired in.\n await addTypeScriptFrameworkBase(tree);\n\n const templateContext = {\n name,\n agentNameClassName,\n distDir,\n agentConnectionImport: `:${getNpmScope(tree)}/agent-connection`,\n };\n\n // Generate common files shared by both protocols\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files', 'common'),\n targetSourceDir,\n templateContext,\n { overwriteStrategy: OverwriteStrategy.KeepExisting },\n );\n\n // Generate protocol-specific files\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files', protocol.toLowerCase()),\n targetSourceDir,\n templateContext,\n { overwriteStrategy: OverwriteStrategy.KeepExisting },\n );\n\n if (infra === 'agentcore') {\n const containers = await resolveContainers(tree, 'inherit');\n const dockerImageTag = `${getNpmScope(tree)}-${name}:latest`;\n\n // Add bundle target\n await addTypeScriptBundleTarget(tree, project, {\n targetFilePath: `${targetSourceDirRelativeToProjectRoot}/index.ts`,\n bundleOutputDir: joinPathFragments('agent', name),\n });\n\n // Add the Dockerfile\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files', 'deploy'),\n targetSourceDir,\n {\n distDir,\n name,\n protocol,\n adotVersion:\n TS_VERSIONS['@aws/aws-distro-opentelemetry-node-autoinstrumentation'],\n },\n { overwriteStrategy: OverwriteStrategy.KeepExisting },\n );\n\n const dockerOutputDir = joinPathFragments(\n 'dist',\n project.root,\n 'bundle',\n 'agent',\n name,\n );\n const dockerTargetName = `${agentTargetPrefix}-docker`;\n\n const fs = new FsCommands(tree);\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 // AG-UI uses HTTP as the AgentCore protocol type (AG-UI is HTTP-based with SSE over POST).\n const infraProtocol: 'http' | 'a2a' =\n protocol === 'ag-ui' ? 'http' : (protocol as 'http' | 'a2a');\n\n await addAgentInfra(tree, {\n agentNameKebabCase: name,\n agentNameClassName,\n projectName: project.name,\n dockerImageTag,\n dockerOutputDir,\n iac,\n auth,\n serverProtocol: infraProtocol,\n containers,\n });\n }\n\n // Add dependencies\n addDependenciesToPackageJson(\n tree,\n withVersions([\n 'zod',\n '@strands-agents/sdk',\n '@aws-sdk/credential-providers',\n '@aws-sdk/client-appconfigdata',\n '@aws-lambda-powertools/parameters',\n '@modelcontextprotocol/sdk',\n ...(protocol === 'a2a'\n ? (['express', '@a2a-js/sdk'] as const)\n : protocol === 'ag-ui'\n ? ([\n '@ag-ui/aws-strands',\n '@ag-ui/core',\n '@ag-ui/encoder',\n 'express',\n 'cors',\n ] as const)\n : ([\n '@trpc/server',\n '@trpc/client',\n 'ws',\n 'cors',\n 'aws4fetch',\n ] as const)),\n ]),\n withVersions([\n // The chat CLI runs standalone via tsx for every protocol, and resolves\n // the deployed agent from AppConfig when `RUNTIME_CONFIG_APP_ID` is set.\n 'tsx',\n '@types/node',\n 'agent-chat-cli',\n '@aws-lambda-powertools/parameters',\n '@aws-sdk/client-appconfigdata',\n ...(auth === 'iam'\n ? (['aws4fetch', '@aws-sdk/credential-providers'] as const)\n : ([] as const)),\n // A2A chat builds a signed @a2a-js client factory for the deployed agent.\n ...(protocol === 'a2a' ? (['@a2a-js/sdk'] as const) : ([] as const)),\n ...(protocol === 'a2a' || protocol === 'ag-ui'\n ? (['@types/express', '@types/cors'] as const)\n : (['@types/ws', '@types/cors'] as const)),\n ]),\n );\n\n // A2A servers use port 9000 as per the Strands A2A SDK default and AgentCore A2A contract.\n // HTTP and AG-UI agents use port 8081+ to avoid conflict with VS Code server on 8080.\n const localDevPortStart = protocol === 'a2a' ? 9000 : 8081;\n const localDevPort = assignPort(tree, project, localDevPortStart, {\n component: { info: TS_AGENT_GENERATOR_INFO, name: agentTargetPrefix },\n });\n\n // Every protocol gets a standalone `chat.ts`. It connects to the local\n // `dev` server by default, or to the deployed agent (with the\n // appropriate auth) when `RUNTIME_CONFIG_APP_ID` is set.\n const scriptsDir = joinPathFragments(\n project.root,\n 'scripts',\n agentTargetPrefix,\n );\n addAgentChatScripts(tree, {\n scriptsDir,\n protocol,\n language: 'ts',\n agentNameClassName,\n auth,\n relativeAgentImport: `../../${targetSourceDirRelativeToProjectRoot}`,\n });\n\n const chatUrl =\n protocol === 'http'\n ? `ws://localhost:${localDevPort}/ws`\n : protocol === 'ag-ui'\n ? `http://localhost:${localDevPort}/invocations`\n : `http://localhost:${localDevPort}`;\n const chatCommand = `tsx ./scripts/${agentTargetPrefix}/chat.ts`;\n\n const agentTargets = {\n ...project.targets,\n [`${agentTargetPrefix}-serve`]: {\n executor: 'nx:run-commands',\n continuous: true,\n options: {\n commands: [`tsx --watch ${relativeSourceDir}/index.ts`],\n cwd: '{projectRoot}',\n env: {\n PORT: `${localDevPort}`,\n },\n },\n },\n [`${agentTargetPrefix}-dev`]: {\n executor: 'nx:run-commands',\n continuous: true,\n options: {\n commands: [`tsx --watch ${relativeSourceDir}/index.ts`],\n cwd: '{projectRoot}',\n env: {\n PORT: `${localDevPort}`,\n LOCAL_DEV: 'true',\n },\n },\n },\n [`${agentTargetPrefix}-chat`]: {\n executor: 'nx:run-commands',\n options: {\n commands: [chatCommand],\n cwd: '{projectRoot}',\n env: {\n URL: chatUrl,\n },\n },\n },\n };\n\n // Aggregate `<agent>-dev` under the project-level `dev` target.\n addComponentDevTarget(agentTargets, `${agentTargetPrefix}-dev`);\n\n updateProjectConfiguration(tree, project.name, {\n ...project,\n // Sort targets so their order is stable regardless of insertion order on\n // first run vs re-run.\n targets: sortObjectKeys(agentTargets),\n });\n\n addComponentGeneratorMetadata(\n tree,\n project.name,\n TS_AGENT_GENERATOR_INFO,\n targetSourceDirRelativeToProjectRoot,\n agentTargetPrefix,\n { port: localDevPort, rc: agentNameClassName, auth, protocol },\n );\n\n await addGeneratorMetricsIfApplicable(tree, [TS_AGENT_GENERATOR_INFO]);\n\n await formatFilesInSubtree(tree);\n return () => {\n installPackagesTask(tree);\n };\n};\n\nexport default tsAgentGenerator;\n"],"names":["addDependenciesToPackageJson","generateFiles","installPackagesTask","joinPathFragments","OverwriteStrategy","updateProjectConfiguration","addAgentChatScripts","addTypeScriptFrameworkBase","ensureTypeScriptAgentConnectionProject","addAgentInfra","addTypeScriptBundleTarget","resolveContainers","formatFilesInSubtree","FsCommands","resolveIac","addGeneratorMetricsIfApplicable","kebabCase","toClassName","getNpmScope","addComponentDevTarget","addComponentGeneratorMetadata","addDependencyToTargetIfNotPresent","getGeneratorInfo","readProjectConfigurationUnqualified","sortObjectKeys","assignPort","sharedConstructsGenerator","TS_VERSIONS","withVersions","TS_AGENT_GENERATOR_INFO","filename","tsAgentGenerator","tree","options","project","exists","root","Error","defaultName","name","split","pop","agentNameClassName","agentTargetPrefix","targetSourceDirRelativeToProjectRoot","targetSourceDir","relativeSourceDir","replace","distDir","infra","protocol","auth","console","warn","templateContext","agentConnectionImport","dirname","overwriteStrategy","KeepExisting","toLowerCase","containers","dockerImageTag","targetFilePath","bundleOutputDir","adotVersion","dockerOutputDir","dockerTargetName","fs","targets","cache","outputs","executor","commands","cp","parallel","dependsOn","iac","infraProtocol","agentNameKebabCase","projectName","serverProtocol","localDevPortStart","localDevPort","component","info","scriptsDir","language","relativeAgentImport","chatUrl","chatCommand","agentTargets","continuous","cwd","env","PORT","LOCAL_DEV","URL","port","rc"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../../packages/nx-plugin/src/ts/agent/generator.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport {\n addDependenciesToPackageJson,\n type GeneratorCallback,\n generateFiles,\n joinPathFragments,\n OverwriteStrategy,\n type Tree,\n updateProjectConfiguration,\n} from '@nx/devkit';\nimport { addAgentChatScripts } from '../../utils/agent-chat/agent-chat';\nimport {\n addTypeScriptFrameworkBase,\n ensureTypeScriptAgentConnectionProject,\n} from '../../utils/agent-connection/agent-connection';\nimport { addAgentInfra } 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 { TsAgentGeneratorSchema } from './schema';\n\nexport const TS_AGENT_GENERATOR_INFO: NxGeneratorInfo = getGeneratorInfo(\n import.meta.filename,\n);\n\nexport const tsAgentGenerator = async (\n tree: Tree,\n options: TsAgentGeneratorSchema,\n): Promise<GeneratorCallback> => {\n const project = readProjectConfigurationUnqualified(tree, options.project);\n\n if (!tree.exists(joinPathFragments(project.root, 'tsconfig.json'))) {\n throw new Error(\n `Unsupported project ${options.project}. Expected a TypeScript project (with a tsconfig.json)`,\n );\n }\n\n const defaultName = `${kebabCase(project.name.split('/').pop())}-agent`;\n const name = kebabCase(options.name || defaultName);\n const agentNameClassName = toClassName(name);\n const agentTargetPrefix = options.name ? name : 'agent';\n const targetSourceDirRelativeToProjectRoot = joinPathFragments(\n 'src',\n agentTargetPrefix,\n );\n const targetSourceDir = joinPathFragments(\n project.root,\n targetSourceDirRelativeToProjectRoot,\n );\n const relativeSourceDir = targetSourceDir.replace(project.root + '/', './');\n const distDir = joinPathFragments('dist', project.root);\n\n const infra = options.infra ?? 'agentcore';\n const protocol = options.protocol ?? 'http';\n\n if (infra === 'none' && options.auth && options.auth !== 'iam') {\n console.warn(\n 'Warning: auth is ignored when no infrastructure is configured (no infrastructure is generated)',\n );\n }\n\n const auth = options.auth ?? 'iam';\n\n // Ensure the shared agent-connection project exists so the server entry\n // point can import `runWithSessionId` and propagate the AgentCore session\n // ID to any downstream MCP / A2A clients a later connection generator\n // wires into this agent.\n await ensureTypeScriptAgentConnectionProject(tree);\n // The agent server imports the framework base helpers (session cache + model\n // error logging) regardless of whether a connection client is wired in.\n await addTypeScriptFrameworkBase(tree);\n\n const templateContext = {\n name,\n agentNameClassName,\n distDir,\n agentConnectionImport: `:${getNpmScope(tree)}/agent-connection`,\n };\n\n // Generate common files shared by both protocols\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files', 'common'),\n targetSourceDir,\n templateContext,\n { overwriteStrategy: OverwriteStrategy.KeepExisting },\n );\n\n // Generate protocol-specific files\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files', protocol.toLowerCase()),\n targetSourceDir,\n templateContext,\n { overwriteStrategy: OverwriteStrategy.KeepExisting },\n );\n\n if (infra === 'agentcore') {\n const containers = await resolveContainers(tree, 'inherit');\n const dockerImageTag = `${getNpmScope(tree)}-${name}:latest`;\n\n // Add bundle target\n await addTypeScriptBundleTarget(tree, project, {\n targetFilePath: `${targetSourceDirRelativeToProjectRoot}/index.ts`,\n bundleOutputDir: joinPathFragments('agent', name),\n });\n\n // Add the Dockerfile\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files', 'deploy'),\n targetSourceDir,\n {\n distDir,\n name,\n protocol,\n adotVersion:\n TS_VERSIONS['@aws/aws-distro-opentelemetry-node-autoinstrumentation'],\n },\n { overwriteStrategy: OverwriteStrategy.KeepExisting },\n );\n\n const dockerOutputDir = joinPathFragments(\n 'dist',\n project.root,\n 'bundle',\n 'agent',\n name,\n );\n const dockerTargetName = `${agentTargetPrefix}-docker`;\n\n const fs = new FsCommands(tree);\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 // AG-UI uses HTTP as the AgentCore protocol type (AG-UI is HTTP-based with SSE over POST).\n const infraProtocol: 'http' | 'a2a' =\n protocol === 'ag-ui' ? 'http' : (protocol as 'http' | 'a2a');\n\n await addAgentInfra(tree, {\n agentNameKebabCase: name,\n agentNameClassName,\n projectName: project.name,\n dockerImageTag,\n dockerOutputDir,\n iac,\n auth,\n serverProtocol: infraProtocol,\n containers,\n });\n }\n\n // Add dependencies\n addDependenciesToPackageJson(\n tree,\n withVersions([\n 'zod',\n '@strands-agents/sdk',\n '@aws-sdk/credential-providers',\n '@aws-sdk/client-appconfigdata',\n '@aws-lambda-powertools/parameters',\n '@modelcontextprotocol/sdk',\n ...(protocol === 'a2a'\n ? (['express', '@a2a-js/sdk'] as const)\n : protocol === 'ag-ui'\n ? ([\n '@ag-ui/aws-strands',\n '@ag-ui/core',\n '@ag-ui/encoder',\n 'express',\n 'cors',\n ] as const)\n : ([\n '@trpc/server',\n '@trpc/client',\n 'ws',\n 'cors',\n 'aws4fetch',\n ] as const)),\n ]),\n withVersions([\n // The chat CLI runs standalone via tsx for every protocol, and resolves\n // the deployed agent from AppConfig when `RUNTIME_CONFIG_APP_ID` is set.\n 'tsx',\n '@types/node',\n 'agent-chat-cli',\n '@aws-lambda-powertools/parameters',\n '@aws-sdk/client-appconfigdata',\n ...(auth === 'iam'\n ? (['aws4fetch', '@aws-sdk/credential-providers'] as const)\n : ([] as const)),\n // A2A chat builds a signed @a2a-js client factory for the deployed agent.\n ...(protocol === 'a2a' ? (['@a2a-js/sdk'] as const) : ([] as const)),\n ...(protocol === 'a2a' || protocol === 'ag-ui'\n ? (['@types/express', '@types/cors'] as const)\n : (['@types/ws', '@types/cors'] as const)),\n ]),\n );\n\n // A2A servers use port 9000 as per the Strands A2A SDK default and AgentCore A2A contract.\n // HTTP and AG-UI agents use port 8081+ to avoid conflict with VS Code server on 8080.\n const localDevPortStart = protocol === 'a2a' ? 9000 : 8081;\n const localDevPort = assignPort(tree, project, localDevPortStart, {\n component: { info: TS_AGENT_GENERATOR_INFO, name: agentTargetPrefix },\n });\n\n // Every protocol gets a standalone `chat.ts`. It connects to the local\n // `dev` server by default, or to the deployed agent (with the\n // appropriate auth) when `RUNTIME_CONFIG_APP_ID` is set.\n const scriptsDir = joinPathFragments(\n project.root,\n 'scripts',\n agentTargetPrefix,\n );\n addAgentChatScripts(tree, {\n scriptsDir,\n protocol,\n language: 'ts',\n agentNameClassName,\n auth,\n relativeAgentImport: `../../${targetSourceDirRelativeToProjectRoot}`,\n });\n\n const chatUrl =\n protocol === 'http'\n ? `ws://localhost:${localDevPort}/ws`\n : protocol === 'ag-ui'\n ? `http://localhost:${localDevPort}/invocations`\n : `http://localhost:${localDevPort}`;\n const chatCommand = `tsx ./scripts/${agentTargetPrefix}/chat.ts`;\n\n const agentTargets = {\n ...project.targets,\n [`${agentTargetPrefix}-serve`]: {\n executor: 'nx:run-commands',\n continuous: true,\n options: {\n commands: [`tsx --watch ${relativeSourceDir}/index.ts`],\n cwd: '{projectRoot}',\n env: {\n PORT: `${localDevPort}`,\n },\n },\n },\n [`${agentTargetPrefix}-dev`]: {\n executor: 'nx:run-commands',\n continuous: true,\n options: {\n commands: [`tsx --watch ${relativeSourceDir}/index.ts`],\n cwd: '{projectRoot}',\n env: {\n PORT: `${localDevPort}`,\n LOCAL_DEV: 'true',\n },\n },\n },\n [`${agentTargetPrefix}-chat`]: {\n executor: 'nx:run-commands',\n options: {\n commands: [chatCommand],\n cwd: '{projectRoot}',\n env: {\n URL: chatUrl,\n },\n },\n },\n };\n\n // Aggregate `<agent>-dev` under the project-level `dev` target.\n addComponentDevTarget(agentTargets, `${agentTargetPrefix}-dev`);\n\n updateProjectConfiguration(tree, project.name, {\n ...project,\n // Sort targets so their order is stable regardless of insertion order on\n // first run vs re-run.\n targets: sortObjectKeys(agentTargets),\n });\n\n addComponentGeneratorMetadata(\n tree,\n project.name,\n TS_AGENT_GENERATOR_INFO,\n targetSourceDirRelativeToProjectRoot,\n agentTargetPrefix,\n { port: localDevPort, rc: agentNameClassName, auth, protocol },\n );\n\n await addGeneratorMetricsIfApplicable(tree, [TS_AGENT_GENERATOR_INFO]);\n\n await formatFilesInSubtree(tree);\n return () =>\n installDependencies(tree, options.preferInstallDependencies, {\n languages: ['typescript'],\n });\n};\n\nexport default tsAgentGenerator;\n"],"names":["addDependenciesToPackageJson","generateFiles","joinPathFragments","OverwriteStrategy","updateProjectConfiguration","addAgentChatScripts","addTypeScriptFrameworkBase","ensureTypeScriptAgentConnectionProject","addAgentInfra","addTypeScriptBundleTarget","resolveContainers","formatFilesInSubtree","FsCommands","resolveIac","installDependencies","addGeneratorMetricsIfApplicable","kebabCase","toClassName","getNpmScope","addComponentDevTarget","addComponentGeneratorMetadata","addDependencyToTargetIfNotPresent","getGeneratorInfo","readProjectConfigurationUnqualified","sortObjectKeys","assignPort","sharedConstructsGenerator","TS_VERSIONS","withVersions","TS_AGENT_GENERATOR_INFO","filename","tsAgentGenerator","tree","options","project","exists","root","Error","defaultName","name","split","pop","agentNameClassName","agentTargetPrefix","targetSourceDirRelativeToProjectRoot","targetSourceDir","relativeSourceDir","replace","distDir","infra","protocol","auth","console","warn","templateContext","agentConnectionImport","dirname","overwriteStrategy","KeepExisting","toLowerCase","containers","dockerImageTag","targetFilePath","bundleOutputDir","adotVersion","dockerOutputDir","dockerTargetName","fs","targets","cache","outputs","executor","commands","cp","parallel","dependsOn","iac","infraProtocol","agentNameKebabCase","projectName","serverProtocol","localDevPortStart","localDevPort","component","info","scriptsDir","language","relativeAgentImport","chatUrl","chatCommand","agentTargets","continuous","cwd","env","PORT","LOCAL_DEV","URL","port","rc","preferInstallDependencies","languages"],"mappings":"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"}
@@ -1,10 +1,11 @@
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, generateFiles, installPackagesTask, joinPathFragments, OverwriteStrategy, updateProjectConfiguration } from "@nx/devkit";
4
+ */ import { addDependenciesToPackageJson, generateFiles, joinPathFragments, OverwriteStrategy, updateProjectConfiguration } from "@nx/devkit";
5
5
  import { AGENT_CONNECTION_PROJECT_DIR, addTypeScriptClientToAgent, addTypeScriptCoreClient, ensureTypeScriptAgentConnectionProject } from "../../../utils/agent-connection/agent-connection.js";
6
6
  import { addDestructuredImport, addStarExport } from "../../../utils/ast.js";
7
7
  import { formatFilesInSubtree } from "../../../utils/format.js";
8
+ import { installDependencies } from "../../../utils/install.js";
8
9
  import { addGeneratorMetricsIfApplicable } from "../../../utils/metrics.js";
9
10
  import { kebabCase } from "../../../utils/names.js";
10
11
  import { getNpmScope } from "../../../utils/npm-scope.js";
@@ -78,9 +79,11 @@ export const tsAgentMcpConnectionGenerator = async (tree, options)=>{
78
79
  TS_AGENT_MCP_CONNECTION_GENERATOR_INFO
79
80
  ]);
80
81
  await formatFilesInSubtree(tree);
81
- return ()=>{
82
- installPackagesTask(tree);
83
- };
82
+ return ()=>installDependencies(tree, options.preferInstallDependencies, {
83
+ languages: [
84
+ 'typescript'
85
+ ]
86
+ });
84
87
  };
85
88
  export default tsAgentMcpConnectionGenerator;
86
89
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../packages/nx-plugin/src/ts/agent/mcp-connection/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 type GeneratorCallback,\n generateFiles,\n installPackagesTask,\n joinPathFragments,\n OverwriteStrategy,\n type Tree,\n updateProjectConfiguration,\n} from '@nx/devkit';\nimport {\n AGENT_CONNECTION_PROJECT_DIR,\n addTypeScriptClientToAgent,\n addTypeScriptCoreClient,\n ensureTypeScriptAgentConnectionProject,\n} from '../../../utils/agent-connection/agent-connection';\nimport { addDestructuredImport, addStarExport } from '../../../utils/ast';\nimport { formatFilesInSubtree } from '../../../utils/format';\nimport { addGeneratorMetricsIfApplicable } from '../../../utils/metrics';\nimport { kebabCase } from '../../../utils/names';\nimport { getNpmScope } from '../../../utils/npm-scope';\nimport {\n addDependencyToTargetIfNotPresent,\n getGeneratorInfo,\n type NxGeneratorInfo,\n readProjectConfigurationUnqualified,\n} from '../../../utils/nx';\nimport { withVersions } from '../../../utils/versions';\nimport type { TsAgentMcpConnectionGeneratorSchema } from './schema';\n\nexport const TS_AGENT_MCP_CONNECTION_GENERATOR_INFO: NxGeneratorInfo =\n getGeneratorInfo(import.meta.filename);\n\nexport const tsAgentMcpConnectionGenerator = async (\n tree: Tree,\n options: TsAgentMcpConnectionGeneratorSchema,\n): Promise<GeneratorCallback> => {\n const sourceProject = readProjectConfigurationUnqualified(\n tree,\n options.sourceProject,\n );\n const targetProject = readProjectConfigurationUnqualified(\n tree,\n options.targetProject,\n );\n\n const agentComponent = options.sourceComponent;\n const mcpComponent = options.targetComponent;\n\n if (!agentComponent || !mcpComponent) {\n throw new Error(\n 'Both sourceComponent and targetComponent must be provided for ts#agent -> mcp connections',\n );\n }\n\n if (mcpComponent.auth && mcpComponent.auth.toLowerCase() !== 'iam') {\n throw new Error(\n `MCP server connection currently only supports IAM authentication, but '${mcpComponent.name}' uses '${mcpComponent.auth}' authentication.`,\n );\n }\n\n const mcpComponentName = mcpComponent.name ?? 'mcp-server';\n const mcpServerClassName = mcpComponent.rc as string;\n const mcpServerKebabCase = kebabCase(mcpServerClassName);\n const mcpServerPort = mcpComponent.port ?? 8000;\n\n const npmScope = getNpmScope(tree);\n\n // 1. Ensure the shared agent-connection project exists + has the MCP core client\n await ensureTypeScriptAgentConnectionProject(tree);\n await addTypeScriptCoreClient(tree, 'mcp');\n\n // 2. Generate the per-connection <Name>Client into app/\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files', 'agent-connection', 'app'),\n joinPathFragments(AGENT_CONNECTION_PROJECT_DIR, 'src', 'app'),\n {\n mcpServerKebabCase,\n mcpServerClassName,\n mcpServerPort,\n },\n { overwriteStrategy: OverwriteStrategy.KeepExisting },\n );\n\n // Add re-export to index.ts\n await addStarExport(\n tree,\n joinPathFragments(AGENT_CONNECTION_PROJECT_DIR, 'src', 'index.ts'),\n `./app/${mcpServerKebabCase}-client-strands.js`,\n );\n\n // 3. AST transform agent.ts to add MCP tools\n const agentSourceDir = joinPathFragments(\n sourceProject.root,\n agentComponent.path ?? 'src',\n );\n const agentFilePath = joinPathFragments(agentSourceDir, 'agent.ts');\n\n if (tree.exists(agentFilePath)) {\n const clientClassName = `${mcpServerClassName}ClientStrands`;\n const clientVarName =\n mcpServerClassName.charAt(0).toLowerCase() + mcpServerClassName.slice(1);\n\n // Add import for the client\n await addDestructuredImport(\n tree,\n agentFilePath,\n [clientClassName],\n `:${npmScope}/agent-connection`,\n );\n\n await addTypeScriptClientToAgent(\n tree,\n agentFilePath,\n clientClassName,\n clientVarName,\n );\n }\n\n // 4. Set up dev target\n const agentName = agentComponent.name ?? 'agent';\n const devTargetName = `${agentName}-dev`;\n const mcpDevTargetName = `${mcpComponentName}-dev`;\n\n if (sourceProject.targets?.[devTargetName]) {\n addDependencyToTargetIfNotPresent(sourceProject, devTargetName, {\n projects: [targetProject.name],\n target: mcpDevTargetName,\n });\n updateProjectConfiguration(tree, sourceProject.name, sourceProject);\n }\n\n // 5. Add dependencies required by the MCP core client + vended client\n addDependenciesToPackageJson(\n tree,\n withVersions([\n '@modelcontextprotocol/sdk',\n '@strands-agents/sdk',\n '@aws-lambda-powertools/parameters',\n '@aws-sdk/client-appconfigdata',\n 'aws4fetch',\n '@aws-sdk/credential-providers',\n ]),\n {},\n );\n\n await addGeneratorMetricsIfApplicable(tree, [\n TS_AGENT_MCP_CONNECTION_GENERATOR_INFO,\n ]);\n\n await formatFilesInSubtree(tree);\n return () => {\n installPackagesTask(tree);\n };\n};\n\nexport default tsAgentMcpConnectionGenerator;\n"],"names":["addDependenciesToPackageJson","generateFiles","installPackagesTask","joinPathFragments","OverwriteStrategy","updateProjectConfiguration","AGENT_CONNECTION_PROJECT_DIR","addTypeScriptClientToAgent","addTypeScriptCoreClient","ensureTypeScriptAgentConnectionProject","addDestructuredImport","addStarExport","formatFilesInSubtree","addGeneratorMetricsIfApplicable","kebabCase","getNpmScope","addDependencyToTargetIfNotPresent","getGeneratorInfo","readProjectConfigurationUnqualified","withVersions","TS_AGENT_MCP_CONNECTION_GENERATOR_INFO","filename","tsAgentMcpConnectionGenerator","tree","options","sourceProject","targetProject","agentComponent","sourceComponent","mcpComponent","targetComponent","Error","auth","toLowerCase","name","mcpComponentName","mcpServerClassName","rc","mcpServerKebabCase","mcpServerPort","port","npmScope","dirname","overwriteStrategy","KeepExisting","agentSourceDir","root","path","agentFilePath","exists","clientClassName","clientVarName","charAt","slice","agentName","devTargetName","mcpDevTargetName","targets","projects","target"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../../../packages/nx-plugin/src/ts/agent/mcp-connection/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 type GeneratorCallback,\n generateFiles,\n joinPathFragments,\n OverwriteStrategy,\n type Tree,\n updateProjectConfiguration,\n} from '@nx/devkit';\nimport {\n AGENT_CONNECTION_PROJECT_DIR,\n addTypeScriptClientToAgent,\n addTypeScriptCoreClient,\n ensureTypeScriptAgentConnectionProject,\n} from '../../../utils/agent-connection/agent-connection';\nimport { addDestructuredImport, addStarExport } from '../../../utils/ast';\nimport { formatFilesInSubtree } from '../../../utils/format';\nimport { installDependencies } from '../../../utils/install';\nimport { addGeneratorMetricsIfApplicable } from '../../../utils/metrics';\nimport { kebabCase } from '../../../utils/names';\nimport { getNpmScope } from '../../../utils/npm-scope';\nimport {\n addDependencyToTargetIfNotPresent,\n getGeneratorInfo,\n type NxGeneratorInfo,\n readProjectConfigurationUnqualified,\n} from '../../../utils/nx';\nimport { withVersions } from '../../../utils/versions';\nimport type { TsAgentMcpConnectionGeneratorSchema } from './schema';\n\nexport const TS_AGENT_MCP_CONNECTION_GENERATOR_INFO: NxGeneratorInfo =\n getGeneratorInfo(import.meta.filename);\n\nexport const tsAgentMcpConnectionGenerator = async (\n tree: Tree,\n options: TsAgentMcpConnectionGeneratorSchema,\n): Promise<GeneratorCallback> => {\n const sourceProject = readProjectConfigurationUnqualified(\n tree,\n options.sourceProject,\n );\n const targetProject = readProjectConfigurationUnqualified(\n tree,\n options.targetProject,\n );\n\n const agentComponent = options.sourceComponent;\n const mcpComponent = options.targetComponent;\n\n if (!agentComponent || !mcpComponent) {\n throw new Error(\n 'Both sourceComponent and targetComponent must be provided for ts#agent -> mcp connections',\n );\n }\n\n if (mcpComponent.auth && mcpComponent.auth.toLowerCase() !== 'iam') {\n throw new Error(\n `MCP server connection currently only supports IAM authentication, but '${mcpComponent.name}' uses '${mcpComponent.auth}' authentication.`,\n );\n }\n\n const mcpComponentName = mcpComponent.name ?? 'mcp-server';\n const mcpServerClassName = mcpComponent.rc as string;\n const mcpServerKebabCase = kebabCase(mcpServerClassName);\n const mcpServerPort = mcpComponent.port ?? 8000;\n\n const npmScope = getNpmScope(tree);\n\n // 1. Ensure the shared agent-connection project exists + has the MCP core client\n await ensureTypeScriptAgentConnectionProject(tree);\n await addTypeScriptCoreClient(tree, 'mcp');\n\n // 2. Generate the per-connection <Name>Client into app/\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files', 'agent-connection', 'app'),\n joinPathFragments(AGENT_CONNECTION_PROJECT_DIR, 'src', 'app'),\n {\n mcpServerKebabCase,\n mcpServerClassName,\n mcpServerPort,\n },\n { overwriteStrategy: OverwriteStrategy.KeepExisting },\n );\n\n // Add re-export to index.ts\n await addStarExport(\n tree,\n joinPathFragments(AGENT_CONNECTION_PROJECT_DIR, 'src', 'index.ts'),\n `./app/${mcpServerKebabCase}-client-strands.js`,\n );\n\n // 3. AST transform agent.ts to add MCP tools\n const agentSourceDir = joinPathFragments(\n sourceProject.root,\n agentComponent.path ?? 'src',\n );\n const agentFilePath = joinPathFragments(agentSourceDir, 'agent.ts');\n\n if (tree.exists(agentFilePath)) {\n const clientClassName = `${mcpServerClassName}ClientStrands`;\n const clientVarName =\n mcpServerClassName.charAt(0).toLowerCase() + mcpServerClassName.slice(1);\n\n // Add import for the client\n await addDestructuredImport(\n tree,\n agentFilePath,\n [clientClassName],\n `:${npmScope}/agent-connection`,\n );\n\n await addTypeScriptClientToAgent(\n tree,\n agentFilePath,\n clientClassName,\n clientVarName,\n );\n }\n\n // 4. Set up dev target\n const agentName = agentComponent.name ?? 'agent';\n const devTargetName = `${agentName}-dev`;\n const mcpDevTargetName = `${mcpComponentName}-dev`;\n\n if (sourceProject.targets?.[devTargetName]) {\n addDependencyToTargetIfNotPresent(sourceProject, devTargetName, {\n projects: [targetProject.name],\n target: mcpDevTargetName,\n });\n updateProjectConfiguration(tree, sourceProject.name, sourceProject);\n }\n\n // 5. Add dependencies required by the MCP core client + vended client\n addDependenciesToPackageJson(\n tree,\n withVersions([\n '@modelcontextprotocol/sdk',\n '@strands-agents/sdk',\n '@aws-lambda-powertools/parameters',\n '@aws-sdk/client-appconfigdata',\n 'aws4fetch',\n '@aws-sdk/credential-providers',\n ]),\n {},\n );\n\n await addGeneratorMetricsIfApplicable(tree, [\n TS_AGENT_MCP_CONNECTION_GENERATOR_INFO,\n ]);\n\n await formatFilesInSubtree(tree);\n return () =>\n installDependencies(tree, options.preferInstallDependencies, {\n languages: ['typescript'],\n });\n};\n\nexport default tsAgentMcpConnectionGenerator;\n"],"names":["addDependenciesToPackageJson","generateFiles","joinPathFragments","OverwriteStrategy","updateProjectConfiguration","AGENT_CONNECTION_PROJECT_DIR","addTypeScriptClientToAgent","addTypeScriptCoreClient","ensureTypeScriptAgentConnectionProject","addDestructuredImport","addStarExport","formatFilesInSubtree","installDependencies","addGeneratorMetricsIfApplicable","kebabCase","getNpmScope","addDependencyToTargetIfNotPresent","getGeneratorInfo","readProjectConfigurationUnqualified","withVersions","TS_AGENT_MCP_CONNECTION_GENERATOR_INFO","filename","tsAgentMcpConnectionGenerator","tree","options","sourceProject","targetProject","agentComponent","sourceComponent","mcpComponent","targetComponent","Error","auth","toLowerCase","name","mcpComponentName","mcpServerClassName","rc","mcpServerKebabCase","mcpServerPort","port","npmScope","dirname","overwriteStrategy","KeepExisting","agentSourceDir","root","path","agentFilePath","exists","clientClassName","clientVarName","charAt","slice","agentName","devTargetName","mcpDevTargetName","targets","projects","target","preferInstallDependencies","languages"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../packages/nx-plugin/src/ts/agent/mcp-connection/schema.d.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { ComponentMetadata } from '../../../utils/nx';\n\n/**\n * TypeScript types for options defined in schema.json\n */\nexport interface TsAgentMcpConnectionGeneratorSchema {\n sourceProject: string;\n targetProject: string;\n sourceComponent?: ComponentMetadata;\n targetComponent?: ComponentMetadata;\n}\n"],"names":[],"mappings":"AAAA;;;CAGC,GAGD;;CAEC,GACD,WAKC"}
1
+ {"version":3,"sources":["../../../../../../../packages/nx-plugin/src/ts/agent/mcp-connection/schema.d.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { ComponentMetadata } from '../../../utils/nx';\n\n/**\n * TypeScript types for options defined in schema.json\n */\nexport interface TsAgentMcpConnectionGeneratorSchema {\n sourceProject: string;\n targetProject: string;\n sourceComponent?: ComponentMetadata;\n targetComponent?: ComponentMetadata;\n preferInstallDependencies?: boolean;\n}\n"],"names":[],"mappings":"AAAA;;;CAGC,GAGD;;CAEC,GACD,WAMC"}
@@ -12,4 +12,5 @@ export interface TsAgentMcpConnectionGeneratorSchema {
12
12
  targetProject: string;
13
13
  sourceComponent?: ComponentMetadata;
14
14
  targetComponent?: ComponentMetadata;
15
+ preferInstallDependencies?: boolean;
15
16
  }
@@ -20,6 +20,11 @@
20
20
  "targetComponent": {
21
21
  "type": "string",
22
22
  "description": "The MCP server component name"
23
+ },
24
+ "preferInstallDependencies": {
25
+ "type": "boolean",
26
+ "description": "Whether to prefer installing dependencies after the generator runs. Set to false to defer installing when batching multiple generators (an install still runs if needed so subsequent generators can compute the Nx project graph); install once at the end.",
27
+ "default": true
23
28
  }
24
29
  },
25
30
  "required": ["sourceProject", "targetProject"]
@@ -6,5 +6,5 @@ import { type Tree } from '@nx/devkit';
6
6
  import type { ResolvedConnectionOptions } from '../../../connection/generator';
7
7
  import { type NxGeneratorInfo } from '../../../utils/nx';
8
8
  export declare const TS_AGENT_REACT_CONNECTION_GENERATOR_INFO: NxGeneratorInfo;
9
- export declare function tsAgentReactConnectionGenerator(tree: Tree, options: ResolvedConnectionOptions): Promise<() => void>;
9
+ export declare function tsAgentReactConnectionGenerator(tree: Tree, options: ResolvedConnectionOptions): Promise<() => Promise<void>>;
10
10
  export default tsAgentReactConnectionGenerator;
@@ -1,10 +1,11 @@
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, generateFiles, installPackagesTask, joinPathFragments, OverwriteStrategy, updateJson } from "@nx/devkit";
4
+ */ import { addDependenciesToPackageJson, generateFiles, joinPathFragments, OverwriteStrategy, updateJson } from "@nx/devkit";
5
5
  import { addAgentRuntimeToConnectionNamespace } from "../../../connection/agent-runtime-config.js";
6
6
  import { addSingleImport, applyGritQL } from "../../../utils/ast.js";
7
7
  import { formatFilesInSubtree } from "../../../utils/format.js";
8
+ import { installDependencies } from "../../../utils/install.js";
8
9
  import { addGeneratorMetricsIfApplicable } from "../../../utils/metrics.js";
9
10
  import { kebabCase, toClassName } from "../../../utils/names.js";
10
11
  import { toScopeAlias } from "../../../utils/npm-scope.js";
@@ -46,9 +47,11 @@ export async function tsAgentReactConnectionGenerator(tree, options) {
46
47
  TS_AGENT_REACT_CONNECTION_GENERATOR_INFO
47
48
  ]);
48
49
  await formatFilesInSubtree(tree);
49
- return ()=>{
50
- installPackagesTask(tree);
51
- };
50
+ return ()=>installDependencies(tree, options.preferInstallDependencies, {
51
+ languages: [
52
+ 'typescript'
53
+ ]
54
+ });
52
55
  }
53
56
  // Ensure the agent project has a wildcard path entry in tsconfig.base.json
54
57
  // so that deep imports (e.g., for the router type) resolve correctly
@@ -72,7 +75,8 @@ export async function tsAgentReactConnectionGenerator(tree, options) {
72
75
  });
73
76
  }
74
77
  await runtimeConfigGenerator(tree, {
75
- project: frontendProjectConfig.name
78
+ project: frontendProjectConfig.name,
79
+ preferInstallDependencies: false
76
80
  });
77
81
  // update main.tsx
78
82
  const mainTsxPath = joinPathFragments(frontendProjectConfig.sourceRoot, 'main.tsx');
@@ -117,9 +121,11 @@ export async function tsAgentReactConnectionGenerator(tree, options) {
117
121
  TS_AGENT_REACT_CONNECTION_GENERATOR_INFO
118
122
  ]);
119
123
  await formatFilesInSubtree(tree);
120
- return ()=>{
121
- installPackagesTask(tree);
122
- };
124
+ return ()=>installDependencies(tree, options.preferInstallDependencies, {
125
+ languages: [
126
+ 'typescript'
127
+ ]
128
+ });
123
129
  }
124
130
  export default tsAgentReactConnectionGenerator;
125
131
  /**
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../packages/nx-plugin/src/ts/agent/react-connection/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 generateFiles,\n installPackagesTask,\n joinPathFragments,\n OverwriteStrategy,\n type Tree,\n updateJson,\n} from '@nx/devkit';\nimport { addAgentRuntimeToConnectionNamespace } from '../../../connection/agent-runtime-config';\nimport type { ResolvedConnectionOptions } from '../../../connection/generator';\nimport { addSingleImport, applyGritQL } from '../../../utils/ast';\nimport { formatFilesInSubtree } from '../../../utils/format';\nimport { addGeneratorMetricsIfApplicable } from '../../../utils/metrics';\nimport { kebabCase, toClassName } from '../../../utils/names';\nimport { toScopeAlias } from '../../../utils/npm-scope';\nimport {\n type ComponentMetadata,\n getGeneratorInfo,\n type NxGeneratorInfo,\n readProjectConfigurationUnqualified,\n} from '../../../utils/nx';\nimport { withVersions } from '../../../utils/versions';\nimport {\n type AgUiAuth,\n addAgUiReactConnection,\n} from '../../react-website/agui/generator';\nimport { runtimeConfigGenerator } from '../../react-website/runtime-config/generator';\nimport { addTsAgentTargetToLocalDev } from './local-dev';\n\nexport const TS_AGENT_REACT_CONNECTION_GENERATOR_INFO: NxGeneratorInfo =\n getGeneratorInfo(import.meta.filename);\n\nexport async function tsAgentReactConnectionGenerator(\n tree: Tree,\n options: ResolvedConnectionOptions,\n) {\n const frontendProjectConfig = readProjectConfigurationUnqualified(\n tree,\n options.sourceProject,\n );\n const agentProjectConfig = readProjectConfigurationUnqualified(\n tree,\n options.targetProject,\n );\n\n const targetComponent: ComponentMetadata | undefined =\n options.targetComponent;\n\n // Extract agent metadata from the target component or project metadata\n const metadata = agentProjectConfig.metadata as any;\n const agentName = targetComponent?.name ?? 'agent';\n const agentNameClassName = targetComponent?.rc ?? toClassName(agentName);\n const agentPort = targetComponent?.port ?? metadata?.ports?.[0] ?? 8081;\n const auth = (targetComponent?.auth ?? metadata?.auth ?? 'iam').toLowerCase();\n const agentProjectAlias = toScopeAlias(agentProjectConfig.name);\n const agentPath = targetComponent?.path ?? 'src/agent';\n\n if ((targetComponent?.protocol ?? '').toLowerCase() === 'a2a') {\n throw new Error(\n `Cannot connect a React website to an A2A agent. ` +\n `Consider generating an agent with the HTTP or AG-UI protocol instead.`,\n );\n }\n\n if (targetComponent?.protocol === 'ag-ui') {\n await addAgUiReactConnection(tree, {\n frontendProjectConfig,\n agentName,\n agentNameClassName,\n auth: auth as AgUiAuth,\n });\n\n await addTsAgentTargetToLocalDev(\n tree,\n frontendProjectConfig.name,\n agentProjectConfig.name,\n {\n agentName,\n agentNameClassName,\n port: agentPort,\n targetComponent,\n },\n );\n\n await addGeneratorMetricsIfApplicable(tree, [\n TS_AGENT_REACT_CONNECTION_GENERATOR_INFO,\n ]);\n\n await formatFilesInSubtree(tree);\n return () => {\n installPackagesTask(tree);\n };\n }\n\n // Ensure the agent project has a wildcard path entry in tsconfig.base.json\n // so that deep imports (e.g., for the router type) resolve correctly\n ensureWildcardPathEntry(\n tree,\n agentProjectConfig.name,\n agentProjectConfig.root,\n );\n\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files'),\n frontendProjectConfig.root,\n {\n agentName,\n agentNameClassName,\n auth,\n agentProjectAlias,\n agentPath,\n },\n {\n overwriteStrategy: OverwriteStrategy.KeepExisting,\n },\n );\n\n // Generate the tanstack query provider if it does not exist already\n generateFiles(\n tree,\n joinPathFragments(\n import.meta.dirname,\n '../../../utils/files/website/components/tanstack-query',\n ),\n joinPathFragments(frontendProjectConfig.sourceRoot, 'components'),\n {},\n {\n overwriteStrategy: OverwriteStrategy.KeepExisting,\n },\n );\n\n if (auth === 'iam') {\n generateFiles(\n tree,\n joinPathFragments(\n import.meta.dirname,\n '../../../utils/files/website/hooks/sigv4',\n ),\n joinPathFragments(frontendProjectConfig.sourceRoot, 'hooks'),\n {},\n {\n overwriteStrategy: OverwriteStrategy.KeepExisting,\n },\n );\n }\n\n await runtimeConfigGenerator(tree, {\n project: frontendProjectConfig.name,\n });\n\n // update main.tsx\n const mainTsxPath = joinPathFragments(\n frontendProjectConfig.sourceRoot,\n 'main.tsx',\n );\n await addSingleImport(\n tree,\n mainTsxPath,\n 'QueryClientProvider',\n './components/QueryClientProvider',\n );\n\n const clientProviderName = `${agentNameClassName}AgentClientProvider`;\n await addSingleImport(\n tree,\n mainTsxPath,\n clientProviderName,\n `./components/${clientProviderName}`,\n );\n\n // Wrap <App /> in QueryClientProvider if not already present\n await applyGritQL(\n tree,\n mainTsxPath,\n '`<App />` => `<QueryClientProvider><App /></QueryClientProvider>` where { $program <: not contains `<QueryClientProvider>$_</QueryClientProvider>` }',\n );\n\n // Wrap <App /> in the agent client provider if not already present\n await applyGritQL(\n tree,\n mainTsxPath,\n `\\`<App />\\` => \\`<${clientProviderName}><App /></${clientProviderName}>\\` where { $program <: not contains \\`<${clientProviderName}>$_</${clientProviderName}>\\` }`,\n );\n\n await addTsAgentTargetToLocalDev(\n tree,\n frontendProjectConfig.name,\n agentProjectConfig.name,\n {\n agentName,\n agentNameClassName,\n port: agentPort,\n targetComponent,\n },\n );\n\n // Expose the agent's runtime ARN to the frontend via the 'connection'\n // namespace (which is published to runtime-config.json). The agent construct\n // itself only registers to the 'agentcore' namespace by default.\n await addAgentRuntimeToConnectionNamespace(tree, {\n agentNameKebabCase: kebabCase(agentNameClassName),\n agentNameClassName,\n });\n\n addDependenciesToPackageJson(\n tree,\n withVersions([\n '@trpc/client',\n '@tanstack/react-query',\n '@tanstack/react-query-devtools',\n '@trpc/tanstack-react-query',\n ...((auth === 'iam'\n ? [\n 'oidc-client-ts',\n 'aws4fetch',\n '@aws-sdk/credential-provider-cognito-identity',\n 'react-oidc-context',\n ]\n : []) as any),\n ...((auth === 'cognito' ? ['react-oidc-context'] : []) as any),\n ]),\n withVersions(['@smithy/types']),\n );\n\n await addGeneratorMetricsIfApplicable(tree, [\n TS_AGENT_REACT_CONNECTION_GENERATOR_INFO,\n ]);\n\n await formatFilesInSubtree(tree);\n return () => {\n installPackagesTask(tree);\n };\n}\nexport default tsAgentReactConnectionGenerator;\n\n/**\n * Ensures a wildcard path entry exists in tsconfig.base.json for the given project,\n * allowing deep imports (e.g., `:scope/project/src/agent/router.js`).\n * Both the scope alias and npm package name forms are added.\n */\nfunction ensureWildcardPathEntry(\n tree: Tree,\n projectName: string,\n projectRoot: string,\n) {\n const tsconfigPath = ['tsconfig.base.json', 'tsconfig.json'].find((p) =>\n tree.exists(p),\n );\n if (!tsconfigPath) return;\n\n const wildcardValue = [`./${projectRoot}/*`];\n const scopeAlias = toScopeAlias(projectName);\n\n updateJson(tree, tsconfigPath, (json) => {\n const paths = json.compilerOptions?.paths ?? {};\n // Add wildcard for the scope alias (used by generated templates)\n const scopeWildcardKey = `${scopeAlias}/*`;\n if (!paths[scopeWildcardKey]) {\n paths[scopeWildcardKey] = wildcardValue;\n }\n // Also add wildcard for the npm package name\n const npmWildcardKey = `${projectName}/*`;\n if (!paths[npmWildcardKey]) {\n paths[npmWildcardKey] = wildcardValue;\n }\n json.compilerOptions = {\n ...json.compilerOptions,\n paths,\n };\n return json;\n });\n}\n"],"names":["addDependenciesToPackageJson","generateFiles","installPackagesTask","joinPathFragments","OverwriteStrategy","updateJson","addAgentRuntimeToConnectionNamespace","addSingleImport","applyGritQL","formatFilesInSubtree","addGeneratorMetricsIfApplicable","kebabCase","toClassName","toScopeAlias","getGeneratorInfo","readProjectConfigurationUnqualified","withVersions","addAgUiReactConnection","runtimeConfigGenerator","addTsAgentTargetToLocalDev","TS_AGENT_REACT_CONNECTION_GENERATOR_INFO","filename","tsAgentReactConnectionGenerator","tree","options","frontendProjectConfig","sourceProject","agentProjectConfig","targetProject","targetComponent","metadata","agentName","name","agentNameClassName","rc","agentPort","port","ports","auth","toLowerCase","agentProjectAlias","agentPath","path","protocol","Error","ensureWildcardPathEntry","root","dirname","overwriteStrategy","KeepExisting","sourceRoot","project","mainTsxPath","clientProviderName","agentNameKebabCase","projectName","projectRoot","tsconfigPath","find","p","exists","wildcardValue","scopeAlias","json","paths","compilerOptions","scopeWildcardKey","npmWildcardKey"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../../../packages/nx-plugin/src/ts/agent/react-connection/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 generateFiles,\n joinPathFragments,\n OverwriteStrategy,\n type Tree,\n updateJson,\n} from '@nx/devkit';\nimport { addAgentRuntimeToConnectionNamespace } from '../../../connection/agent-runtime-config';\nimport type { ResolvedConnectionOptions } from '../../../connection/generator';\nimport { addSingleImport, applyGritQL } from '../../../utils/ast';\nimport { formatFilesInSubtree } from '../../../utils/format';\nimport { installDependencies } from '../../../utils/install';\nimport { addGeneratorMetricsIfApplicable } from '../../../utils/metrics';\nimport { kebabCase, toClassName } from '../../../utils/names';\nimport { toScopeAlias } from '../../../utils/npm-scope';\nimport {\n type ComponentMetadata,\n getGeneratorInfo,\n type NxGeneratorInfo,\n readProjectConfigurationUnqualified,\n} from '../../../utils/nx';\nimport { withVersions } from '../../../utils/versions';\nimport {\n type AgUiAuth,\n addAgUiReactConnection,\n} from '../../react-website/agui/generator';\nimport { runtimeConfigGenerator } from '../../react-website/runtime-config/generator';\nimport { addTsAgentTargetToLocalDev } from './local-dev';\n\nexport const TS_AGENT_REACT_CONNECTION_GENERATOR_INFO: NxGeneratorInfo =\n getGeneratorInfo(import.meta.filename);\n\nexport async function tsAgentReactConnectionGenerator(\n tree: Tree,\n options: ResolvedConnectionOptions,\n) {\n const frontendProjectConfig = readProjectConfigurationUnqualified(\n tree,\n options.sourceProject,\n );\n const agentProjectConfig = readProjectConfigurationUnqualified(\n tree,\n options.targetProject,\n );\n\n const targetComponent: ComponentMetadata | undefined =\n options.targetComponent;\n\n // Extract agent metadata from the target component or project metadata\n const metadata = agentProjectConfig.metadata as any;\n const agentName = targetComponent?.name ?? 'agent';\n const agentNameClassName = targetComponent?.rc ?? toClassName(agentName);\n const agentPort = targetComponent?.port ?? metadata?.ports?.[0] ?? 8081;\n const auth = (targetComponent?.auth ?? metadata?.auth ?? 'iam').toLowerCase();\n const agentProjectAlias = toScopeAlias(agentProjectConfig.name);\n const agentPath = targetComponent?.path ?? 'src/agent';\n\n if ((targetComponent?.protocol ?? '').toLowerCase() === 'a2a') {\n throw new Error(\n `Cannot connect a React website to an A2A agent. ` +\n `Consider generating an agent with the HTTP or AG-UI protocol instead.`,\n );\n }\n\n if (targetComponent?.protocol === 'ag-ui') {\n await addAgUiReactConnection(tree, {\n frontendProjectConfig,\n agentName,\n agentNameClassName,\n auth: auth as AgUiAuth,\n });\n\n await addTsAgentTargetToLocalDev(\n tree,\n frontendProjectConfig.name,\n agentProjectConfig.name,\n {\n agentName,\n agentNameClassName,\n port: agentPort,\n targetComponent,\n },\n );\n\n await addGeneratorMetricsIfApplicable(tree, [\n TS_AGENT_REACT_CONNECTION_GENERATOR_INFO,\n ]);\n\n await formatFilesInSubtree(tree);\n return () =>\n installDependencies(tree, options.preferInstallDependencies, {\n languages: ['typescript'],\n });\n }\n\n // Ensure the agent project has a wildcard path entry in tsconfig.base.json\n // so that deep imports (e.g., for the router type) resolve correctly\n ensureWildcardPathEntry(\n tree,\n agentProjectConfig.name,\n agentProjectConfig.root,\n );\n\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files'),\n frontendProjectConfig.root,\n {\n agentName,\n agentNameClassName,\n auth,\n agentProjectAlias,\n agentPath,\n },\n {\n overwriteStrategy: OverwriteStrategy.KeepExisting,\n },\n );\n\n // Generate the tanstack query provider if it does not exist already\n generateFiles(\n tree,\n joinPathFragments(\n import.meta.dirname,\n '../../../utils/files/website/components/tanstack-query',\n ),\n joinPathFragments(frontendProjectConfig.sourceRoot, 'components'),\n {},\n {\n overwriteStrategy: OverwriteStrategy.KeepExisting,\n },\n );\n\n if (auth === 'iam') {\n generateFiles(\n tree,\n joinPathFragments(\n import.meta.dirname,\n '../../../utils/files/website/hooks/sigv4',\n ),\n joinPathFragments(frontendProjectConfig.sourceRoot, 'hooks'),\n {},\n {\n overwriteStrategy: OverwriteStrategy.KeepExisting,\n },\n );\n }\n\n await runtimeConfigGenerator(tree, {\n project: frontendProjectConfig.name,\n preferInstallDependencies: false,\n });\n\n // update main.tsx\n const mainTsxPath = joinPathFragments(\n frontendProjectConfig.sourceRoot,\n 'main.tsx',\n );\n await addSingleImport(\n tree,\n mainTsxPath,\n 'QueryClientProvider',\n './components/QueryClientProvider',\n );\n\n const clientProviderName = `${agentNameClassName}AgentClientProvider`;\n await addSingleImport(\n tree,\n mainTsxPath,\n clientProviderName,\n `./components/${clientProviderName}`,\n );\n\n // Wrap <App /> in QueryClientProvider if not already present\n await applyGritQL(\n tree,\n mainTsxPath,\n '`<App />` => `<QueryClientProvider><App /></QueryClientProvider>` where { $program <: not contains `<QueryClientProvider>$_</QueryClientProvider>` }',\n );\n\n // Wrap <App /> in the agent client provider if not already present\n await applyGritQL(\n tree,\n mainTsxPath,\n `\\`<App />\\` => \\`<${clientProviderName}><App /></${clientProviderName}>\\` where { $program <: not contains \\`<${clientProviderName}>$_</${clientProviderName}>\\` }`,\n );\n\n await addTsAgentTargetToLocalDev(\n tree,\n frontendProjectConfig.name,\n agentProjectConfig.name,\n {\n agentName,\n agentNameClassName,\n port: agentPort,\n targetComponent,\n },\n );\n\n // Expose the agent's runtime ARN to the frontend via the 'connection'\n // namespace (which is published to runtime-config.json). The agent construct\n // itself only registers to the 'agentcore' namespace by default.\n await addAgentRuntimeToConnectionNamespace(tree, {\n agentNameKebabCase: kebabCase(agentNameClassName),\n agentNameClassName,\n });\n\n addDependenciesToPackageJson(\n tree,\n withVersions([\n '@trpc/client',\n '@tanstack/react-query',\n '@tanstack/react-query-devtools',\n '@trpc/tanstack-react-query',\n ...((auth === 'iam'\n ? [\n 'oidc-client-ts',\n 'aws4fetch',\n '@aws-sdk/credential-provider-cognito-identity',\n 'react-oidc-context',\n ]\n : []) as any),\n ...((auth === 'cognito' ? ['react-oidc-context'] : []) as any),\n ]),\n withVersions(['@smithy/types']),\n );\n\n await addGeneratorMetricsIfApplicable(tree, [\n TS_AGENT_REACT_CONNECTION_GENERATOR_INFO,\n ]);\n\n await formatFilesInSubtree(tree);\n return () =>\n installDependencies(tree, options.preferInstallDependencies, {\n languages: ['typescript'],\n });\n}\nexport default tsAgentReactConnectionGenerator;\n\n/**\n * Ensures a wildcard path entry exists in tsconfig.base.json for the given project,\n * allowing deep imports (e.g., `:scope/project/src/agent/router.js`).\n * Both the scope alias and npm package name forms are added.\n */\nfunction ensureWildcardPathEntry(\n tree: Tree,\n projectName: string,\n projectRoot: string,\n) {\n const tsconfigPath = ['tsconfig.base.json', 'tsconfig.json'].find((p) =>\n tree.exists(p),\n );\n if (!tsconfigPath) return;\n\n const wildcardValue = [`./${projectRoot}/*`];\n const scopeAlias = toScopeAlias(projectName);\n\n updateJson(tree, tsconfigPath, (json) => {\n const paths = json.compilerOptions?.paths ?? {};\n // Add wildcard for the scope alias (used by generated templates)\n const scopeWildcardKey = `${scopeAlias}/*`;\n if (!paths[scopeWildcardKey]) {\n paths[scopeWildcardKey] = wildcardValue;\n }\n // Also add wildcard for the npm package name\n const npmWildcardKey = `${projectName}/*`;\n if (!paths[npmWildcardKey]) {\n paths[npmWildcardKey] = wildcardValue;\n }\n json.compilerOptions = {\n ...json.compilerOptions,\n paths,\n };\n return json;\n });\n}\n"],"names":["addDependenciesToPackageJson","generateFiles","joinPathFragments","OverwriteStrategy","updateJson","addAgentRuntimeToConnectionNamespace","addSingleImport","applyGritQL","formatFilesInSubtree","installDependencies","addGeneratorMetricsIfApplicable","kebabCase","toClassName","toScopeAlias","getGeneratorInfo","readProjectConfigurationUnqualified","withVersions","addAgUiReactConnection","runtimeConfigGenerator","addTsAgentTargetToLocalDev","TS_AGENT_REACT_CONNECTION_GENERATOR_INFO","filename","tsAgentReactConnectionGenerator","tree","options","frontendProjectConfig","sourceProject","agentProjectConfig","targetProject","targetComponent","metadata","agentName","name","agentNameClassName","rc","agentPort","port","ports","auth","toLowerCase","agentProjectAlias","agentPath","path","protocol","Error","preferInstallDependencies","languages","ensureWildcardPathEntry","root","dirname","overwriteStrategy","KeepExisting","sourceRoot","project","mainTsxPath","clientProviderName","agentNameKebabCase","projectName","projectRoot","tsconfigPath","find","p","exists","wildcardValue","scopeAlias","json","paths","compilerOptions","scopeWildcardKey","npmWildcardKey"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../packages/nx-plugin/src/ts/agent/react-connection/schema.d.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { ComponentMetadata } from '../../../utils/nx';\n\n/**\n * TypeScript types for options defined in schema.json\n */\nexport interface TsAgentReactConnectionGeneratorSchema {\n sourceProject: string;\n targetProject: string;\n sourceComponent?: ComponentMetadata;\n targetComponent?: ComponentMetadata;\n}\n"],"names":[],"mappings":"AAAA;;;CAGC,GAGD;;CAEC,GACD,WAKC"}
1
+ {"version":3,"sources":["../../../../../../../packages/nx-plugin/src/ts/agent/react-connection/schema.d.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { ComponentMetadata } from '../../../utils/nx';\n\n/**\n * TypeScript types for options defined in schema.json\n */\nexport interface TsAgentReactConnectionGeneratorSchema {\n sourceProject: string;\n targetProject: string;\n sourceComponent?: ComponentMetadata;\n targetComponent?: ComponentMetadata;\n preferInstallDependencies?: boolean;\n}\n"],"names":[],"mappings":"AAAA;;;CAGC,GAGD;;CAEC,GACD,WAMC"}
@@ -12,4 +12,5 @@ export interface TsAgentReactConnectionGeneratorSchema {
12
12
  targetProject: string;
13
13
  sourceComponent?: ComponentMetadata;
14
14
  targetComponent?: ComponentMetadata;
15
+ preferInstallDependencies?: boolean;
15
16
  }
@@ -20,6 +20,11 @@
20
20
  "targetComponent": {
21
21
  "type": "string",
22
22
  "description": "The Agent component name"
23
+ },
24
+ "preferInstallDependencies": {
25
+ "type": "boolean",
26
+ "description": "Whether to prefer installing dependencies after the generator runs. Set to false to defer installing when batching multiple generators (an install still runs if needed so subsequent generators can compute the Nx project graph); install once at the end.",
27
+ "default": true
23
28
  }
24
29
  },
25
30
  "required": ["sourceProject", "targetProject"]
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../packages/nx-plugin/src/ts/agent/schema.d.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { IacOption } from '../../utils/iac';\n\nexport type TsAgentFramework = 'strands';\nexport type TsAgentInfra = 'agentcore' | 'none';\nexport type AgentProtocol = 'http' | 'a2a' | 'ag-ui';\n\nexport type TsAgentAuth = 'iam' | 'cognito';\n\nexport interface TsAgentGeneratorSchema {\n project: string;\n framework?: TsAgentFramework;\n name?: string;\n infra?: TsAgentInfra;\n auth?: TsAgentAuth;\n protocol?: AgentProtocol;\n iac: IacOption;\n}\n"],"names":[],"mappings":"AAAA;;;CAGC,GAUD,WAQC"}
1
+ {"version":3,"sources":["../../../../../../packages/nx-plugin/src/ts/agent/schema.d.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { IacOption } from '../../utils/iac';\n\nexport type TsAgentFramework = 'strands';\nexport type TsAgentInfra = 'agentcore' | 'none';\nexport type AgentProtocol = 'http' | 'a2a' | 'ag-ui';\n\nexport type TsAgentAuth = 'iam' | 'cognito';\n\nexport interface TsAgentGeneratorSchema {\n project: string;\n framework?: TsAgentFramework;\n name?: string;\n infra?: TsAgentInfra;\n auth?: TsAgentAuth;\n protocol?: AgentProtocol;\n iac: IacOption;\n preferInstallDependencies?: boolean;\n}\n"],"names":[],"mappings":"AAAA;;;CAGC,GAUD,WASC"}
@@ -19,4 +19,5 @@ export interface TsAgentGeneratorSchema {
19
19
  auth?: TsAgentAuth;
20
20
  protocol?: AgentProtocol;
21
21
  iac: IacOption;
22
+ preferInstallDependencies?: boolean;
22
23
  }
@@ -59,6 +59,11 @@
59
59
  "enum": ["agentcore", "none"],
60
60
  "default": "agentcore",
61
61
  "x-priority": "important"
62
+ },
63
+ "preferInstallDependencies": {
64
+ "type": "boolean",
65
+ "description": "Whether to prefer installing dependencies after the generator runs. Set to false to defer installing when batching multiple generators (an install still runs if needed so subsequent generators can compute the Nx project graph); install once at the end.",
66
+ "default": true
62
67
  }
63
68
  },
64
69
  "required": ["project"]
@@ -16,7 +16,8 @@ export async function tsApiGenerator(tree, options) {
16
16
  auth: options.auth,
17
17
  directory: options.directory,
18
18
  subDirectory: options.subDirectory,
19
- iac: options.iac
19
+ iac: options.iac,
20
+ preferInstallDependencies: options.preferInstallDependencies
20
21
  });
21
22
  case 'smithy':
22
23
  return tsSmithyApiGenerator(tree, {
@@ -27,7 +28,8 @@ export async function tsApiGenerator(tree, options) {
27
28
  auth: options.auth,
28
29
  directory: options.directory,
29
30
  subDirectory: options.subDirectory,
30
- iac: options.iac
31
+ iac: options.iac,
32
+ preferInstallDependencies: options.preferInstallDependencies
31
33
  });
32
34
  }
33
35
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../packages/nx-plugin/src/ts/api/generator.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport type { Tree } from '@nx/devkit';\nimport { tsSmithyApiGenerator } from '../../smithy/ts/api/generator';\nimport { tsTrpcApiGenerator } from '../../trpc/backend/generator';\nimport { getGeneratorInfo, type NxGeneratorInfo } from '../../utils/nx';\nimport type { TsApiGeneratorSchema } from './schema';\n\nexport const TS_API_GENERATOR_INFO: NxGeneratorInfo = getGeneratorInfo(\n import.meta.filename,\n);\n\nexport async function tsApiGenerator(\n tree: Tree,\n options: TsApiGeneratorSchema,\n) {\n const framework = options.framework ?? 'trpc';\n\n switch (framework) {\n case 'trpc':\n return tsTrpcApiGenerator(tree, {\n name: options.name,\n infra: options.infra,\n integrationPattern: options.integrationPattern,\n auth: options.auth,\n directory: options.directory,\n subDirectory: options.subDirectory,\n iac: options.iac,\n });\n case 'smithy':\n return tsSmithyApiGenerator(tree, {\n name: options.name,\n namespace: options.namespace,\n infra:\n options.infra === 'none'\n ? 'none'\n : ((options.infra ?? 'rest-lambda') as 'rest-lambda'),\n integrationPattern: options.integrationPattern,\n auth: options.auth,\n directory: options.directory,\n subDirectory: options.subDirectory,\n iac: options.iac,\n });\n }\n}\n\nexport default tsApiGenerator;\n"],"names":["tsSmithyApiGenerator","tsTrpcApiGenerator","getGeneratorInfo","TS_API_GENERATOR_INFO","filename","tsApiGenerator","tree","options","framework","name","infra","integrationPattern","auth","directory","subDirectory","iac","namespace"],"mappings":"AAAA;;;CAGC,GAED,SAASA,oBAAoB,QAAQ,mCAAgC;AACrE,SAASC,kBAAkB,QAAQ,kCAA+B;AAClE,SAASC,gBAAgB,QAA8B,oBAAiB;AAGxE,OAAO,MAAMC,wBAAyCD,iBACpD,YAAYE,QAAQ,EACpB;AAEF,OAAO,eAAeC,eACpBC,IAAU,EACVC,OAA6B;IAE7B,MAAMC,YAAYD,QAAQC,SAAS,IAAI;IAEvC,OAAQA;QACN,KAAK;YACH,OAAOP,mBAAmBK,MAAM;gBAC9BG,MAAMF,QAAQE,IAAI;gBAClBC,OAAOH,QAAQG,KAAK;gBACpBC,oBAAoBJ,QAAQI,kBAAkB;gBAC9CC,MAAML,QAAQK,IAAI;gBAClBC,WAAWN,QAAQM,SAAS;gBAC5BC,cAAcP,QAAQO,YAAY;gBAClCC,KAAKR,QAAQQ,GAAG;YAClB;QACF,KAAK;YACH,OAAOf,qBAAqBM,MAAM;gBAChCG,MAAMF,QAAQE,IAAI;gBAClBO,WAAWT,QAAQS,SAAS;gBAC5BN,OACEH,QAAQG,KAAK,KAAK,SACd,SACEH,QAAQG,KAAK,IAAI;gBACzBC,oBAAoBJ,QAAQI,kBAAkB;gBAC9CC,MAAML,QAAQK,IAAI;gBAClBC,WAAWN,QAAQM,SAAS;gBAC5BC,cAAcP,QAAQO,YAAY;gBAClCC,KAAKR,QAAQQ,GAAG;YAClB;IACJ;AACF;AAEA,eAAeV,eAAe"}
1
+ {"version":3,"sources":["../../../../../../packages/nx-plugin/src/ts/api/generator.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport type { Tree } from '@nx/devkit';\nimport { tsSmithyApiGenerator } from '../../smithy/ts/api/generator';\nimport { tsTrpcApiGenerator } from '../../trpc/backend/generator';\nimport { getGeneratorInfo, type NxGeneratorInfo } from '../../utils/nx';\nimport type { TsApiGeneratorSchema } from './schema';\n\nexport const TS_API_GENERATOR_INFO: NxGeneratorInfo = getGeneratorInfo(\n import.meta.filename,\n);\n\nexport async function tsApiGenerator(\n tree: Tree,\n options: TsApiGeneratorSchema,\n) {\n const framework = options.framework ?? 'trpc';\n\n switch (framework) {\n case 'trpc':\n return tsTrpcApiGenerator(tree, {\n name: options.name,\n infra: options.infra,\n integrationPattern: options.integrationPattern,\n auth: options.auth,\n directory: options.directory,\n subDirectory: options.subDirectory,\n iac: options.iac,\n preferInstallDependencies: options.preferInstallDependencies,\n });\n case 'smithy':\n return tsSmithyApiGenerator(tree, {\n name: options.name,\n namespace: options.namespace,\n infra:\n options.infra === 'none'\n ? 'none'\n : ((options.infra ?? 'rest-lambda') as 'rest-lambda'),\n integrationPattern: options.integrationPattern,\n auth: options.auth,\n directory: options.directory,\n subDirectory: options.subDirectory,\n iac: options.iac,\n preferInstallDependencies: options.preferInstallDependencies,\n });\n }\n}\n\nexport default tsApiGenerator;\n"],"names":["tsSmithyApiGenerator","tsTrpcApiGenerator","getGeneratorInfo","TS_API_GENERATOR_INFO","filename","tsApiGenerator","tree","options","framework","name","infra","integrationPattern","auth","directory","subDirectory","iac","preferInstallDependencies","namespace"],"mappings":"AAAA;;;CAGC,GAED,SAASA,oBAAoB,QAAQ,mCAAgC;AACrE,SAASC,kBAAkB,QAAQ,kCAA+B;AAClE,SAASC,gBAAgB,QAA8B,oBAAiB;AAGxE,OAAO,MAAMC,wBAAyCD,iBACpD,YAAYE,QAAQ,EACpB;AAEF,OAAO,eAAeC,eACpBC,IAAU,EACVC,OAA6B;IAE7B,MAAMC,YAAYD,QAAQC,SAAS,IAAI;IAEvC,OAAQA;QACN,KAAK;YACH,OAAOP,mBAAmBK,MAAM;gBAC9BG,MAAMF,QAAQE,IAAI;gBAClBC,OAAOH,QAAQG,KAAK;gBACpBC,oBAAoBJ,QAAQI,kBAAkB;gBAC9CC,MAAML,QAAQK,IAAI;gBAClBC,WAAWN,QAAQM,SAAS;gBAC5BC,cAAcP,QAAQO,YAAY;gBAClCC,KAAKR,QAAQQ,GAAG;gBAChBC,2BAA2BT,QAAQS,yBAAyB;YAC9D;QACF,KAAK;YACH,OAAOhB,qBAAqBM,MAAM;gBAChCG,MAAMF,QAAQE,IAAI;gBAClBQ,WAAWV,QAAQU,SAAS;gBAC5BP,OACEH,QAAQG,KAAK,KAAK,SACd,SACEH,QAAQG,KAAK,IAAI;gBACzBC,oBAAoBJ,QAAQI,kBAAkB;gBAC9CC,MAAML,QAAQK,IAAI;gBAClBC,WAAWN,QAAQM,SAAS;gBAC5BC,cAAcP,QAAQO,YAAY;gBAClCC,KAAKR,QAAQQ,GAAG;gBAChBC,2BAA2BT,QAAQS,yBAAyB;YAC9D;IACJ;AACF;AAEA,eAAeX,eAAe"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../packages/nx-plugin/src/ts/api/schema.d.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { IacOption } from '../../utils/iac';\nimport { TsProjectGeneratorSchema } from '../lib/schema';\n\nexport interface TsApiGeneratorSchema {\n name: string;\n framework?: 'trpc' | 'smithy';\n namespace?: string;\n infra: 'rest-lambda' | 'http-lambda' | 'none';\n integrationPattern?: 'isolated' | 'shared';\n auth: 'iam' | 'cognito' | 'custom';\n directory?: TsProjectGeneratorSchema['directory'];\n subDirectory?: TsProjectGeneratorSchema['subDirectory'];\n iac: IacOption;\n}\n"],"names":[],"mappings":"AAAA;;;CAGC,GAKD,WAUC"}
1
+ {"version":3,"sources":["../../../../../../packages/nx-plugin/src/ts/api/schema.d.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { IacOption } from '../../utils/iac';\nimport { TsProjectGeneratorSchema } from '../lib/schema';\n\nexport interface TsApiGeneratorSchema {\n name: string;\n framework?: 'trpc' | 'smithy';\n namespace?: string;\n infra: 'rest-lambda' | 'http-lambda' | 'none';\n integrationPattern?: 'isolated' | 'shared';\n auth: 'iam' | 'cognito' | 'custom';\n directory?: TsProjectGeneratorSchema['directory'];\n subDirectory?: TsProjectGeneratorSchema['subDirectory'];\n iac: IacOption;\n preferInstallDependencies?: boolean;\n}\n"],"names":[],"mappings":"AAAA;;;CAGC,GAKD,WAWC"}
@@ -16,4 +16,5 @@ export interface TsApiGeneratorSchema {
16
16
  directory?: TsProjectGeneratorSchema['directory'];
17
17
  subDirectory?: TsProjectGeneratorSchema['subDirectory'];
18
18
  iac: IacOption;
19
+ preferInstallDependencies?: boolean;
19
20
  }
@@ -99,6 +99,11 @@
99
99
  "enum": ["rest-lambda", "http-lambda", "none"],
100
100
  "x-prompt": "What infrastructure would you like to deploy your API with?",
101
101
  "x-priority": "important"
102
+ },
103
+ "preferInstallDependencies": {
104
+ "type": "boolean",
105
+ "description": "Whether to prefer installing dependencies after the generator runs. Set to false to defer installing when batching multiple generators (an install still runs if needed so subsequent generators can compute the Nx project graph); install once at the end.",
106
+ "default": true
102
107
  }
103
108
  },
104
109
  "required": ["name"]