@aws/nx-plugin 1.0.0-rc.57 → 1.0.0-rc.59

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 (223) hide show
  1. package/LICENSE-THIRD-PARTY +2917 -1295
  2. package/generators.json +17 -1
  3. package/migrations.json +36 -26
  4. package/package.json +13 -13
  5. package/src/agentcore-gateway/__snapshots__/generator.spec.ts.snap +273 -0
  6. package/src/agentcore-gateway/agent-connection/generator.d.ts +19 -0
  7. package/src/agentcore-gateway/agent-connection/generator.js +90 -0
  8. package/src/agentcore-gateway/agent-connection/generator.js.map +1 -0
  9. package/src/agentcore-gateway/agent-connection/schema.d.js +6 -0
  10. package/src/agentcore-gateway/agent-connection/schema.d.js.map +1 -0
  11. package/src/agentcore-gateway/agent-connection/schema.d.ts +13 -0
  12. package/src/agentcore-gateway/agent-connection/schema.json +31 -0
  13. package/src/agentcore-gateway/attach-upstream.d.ts +16 -0
  14. package/src/agentcore-gateway/attach-upstream.js +32 -11
  15. package/src/agentcore-gateway/attach-upstream.js.map +1 -1
  16. package/src/agentcore-gateway/files/project/http/local-dev.ts.template +77 -0
  17. package/src/agentcore-gateway/generator.d.ts +17 -1
  18. package/src/agentcore-gateway/generator.js +25 -12
  19. package/src/agentcore-gateway/generator.js.map +1 -1
  20. package/src/agentcore-gateway/react-connection/__snapshots__/generator.spec.ts.snap +68 -0
  21. package/src/agentcore-gateway/react-connection/generator.d.ts +19 -0
  22. package/src/agentcore-gateway/react-connection/generator.js +119 -0
  23. package/src/agentcore-gateway/react-connection/generator.js.map +1 -0
  24. package/src/agentcore-gateway/react-connection/schema.d.js +6 -0
  25. package/src/agentcore-gateway/react-connection/schema.d.js.map +1 -0
  26. package/src/agentcore-gateway/react-connection/schema.d.ts +13 -0
  27. package/src/agentcore-gateway/react-connection/schema.json +31 -0
  28. package/src/agentcore-gateway/schema.d.js.map +1 -1
  29. package/src/agentcore-gateway/schema.d.ts +1 -1
  30. package/src/agentcore-gateway/schema.json +3 -2
  31. package/src/connection/agent-local-dev.d.ts +16 -0
  32. package/src/connection/agent-local-dev.js +44 -2
  33. package/src/connection/agent-local-dev.js.map +1 -1
  34. package/src/connection/gateway-runtime-config.d.ts +19 -0
  35. package/src/connection/gateway-runtime-config.js +47 -0
  36. package/src/connection/gateway-runtime-config.js.map +1 -0
  37. package/src/connection/generator.js +5 -0
  38. package/src/connection/generator.js.map +1 -1
  39. package/src/connection/scaffold-catalog.d.ts +267 -0
  40. package/src/connection/scaffold-catalog.js +347 -0
  41. package/src/connection/scaffold-catalog.js.map +1 -0
  42. package/src/connection/schema-resolver.d.ts +5 -0
  43. package/src/connection/schema-resolver.js +27 -0
  44. package/src/connection/schema-resolver.js.map +1 -0
  45. package/src/connection/supported-connections.d.ts +9 -0
  46. package/src/connection/supported-connections.js +12 -0
  47. package/src/connection/supported-connections.js.map +1 -1
  48. package/src/infra/app/__snapshots__/generator.spec.ts.snap +7 -7
  49. package/src/internal/test-matrix/generator.js +39 -1
  50. package/src/internal/test-matrix/generator.js.map +1 -1
  51. package/src/migrations/latest/gateway-agent-targets/__snapshots__/migration.spec.ts.snap +223 -0
  52. package/src/migrations/latest/gateway-agent-targets/metadata.json +3 -0
  53. package/src/migrations/latest/gateway-agent-targets/migration.js +217 -0
  54. package/src/migrations/latest/gateway-agent-targets/migration.js.map +1 -0
  55. package/src/migrations/latest/smithy-ssdk-bundle-pins/metadata.json +3 -0
  56. package/src/migrations/latest/smithy-ssdk-bundle-pins/migration.js +78 -0
  57. package/src/migrations/latest/smithy-ssdk-bundle-pins/migration.js.map +1 -0
  58. package/src/migrations/v1.0.0-rc.50/modernize-function-props-cast/metadata.json +3 -0
  59. package/src/migrations/v1.0.0-rc.50/modernize-function-props-cast/migration.js.map +1 -0
  60. package/src/migrations/v1.0.0-rc.50/restrict-cors-to-custom-domains/metadata.json +3 -0
  61. package/src/migrations/v1.0.0-rc.50/restrict-cors-to-custom-domains/migration.js.map +1 -0
  62. package/src/migrations/v1.0.0-rc.50/terraform-bootstrap-adopt-existing-bucket/metadata.json +3 -0
  63. package/src/migrations/v1.0.0-rc.50/terraform-bootstrap-adopt-existing-bucket/migration.js.map +1 -0
  64. package/src/migrations/v1.0.0-rc.52/user-identity-waf-allow-localhost-callback/metadata.json +3 -0
  65. package/src/migrations/v1.0.0-rc.52/user-identity-waf-allow-localhost-callback/migration.js.map +1 -0
  66. package/src/migrations/v1.0.0-rc.54/order-access-log-delivery-after-bucket-policy/metadata.json +3 -0
  67. package/src/migrations/v1.0.0-rc.54/order-access-log-delivery-after-bucket-policy/migration.js.map +1 -0
  68. package/src/migrations/v1.0.0-rc.55/backfill-generator-metadata/metadata.json +3 -0
  69. package/src/migrations/v1.0.0-rc.55/backfill-generator-metadata/migration.js.map +1 -0
  70. package/src/migrations/v1.0.0-rc.56/dynamodb-local-remove-optimize-flag/metadata.json +3 -0
  71. package/src/migrations/v1.0.0-rc.56/dynamodb-local-remove-optimize-flag/migration.d.ts +6 -0
  72. package/src/migrations/v1.0.0-rc.56/dynamodb-local-remove-optimize-flag/migration.js.map +1 -0
  73. package/src/migrations/v1.0.0-rc.57/ts-agent-session-management-support/metadata.json +3 -0
  74. package/src/migrations/v1.0.0-rc.57/ts-agent-session-management-support/migration.d.ts +6 -0
  75. package/src/migrations/v1.0.0-rc.57/ts-agent-session-management-support/migration.js.map +1 -0
  76. package/src/preset/__snapshots__/generator.spec.ts.snap +5 -5
  77. package/src/py/agent/__snapshots__/generator.constructs.spec.ts.snap +10 -8
  78. package/src/py/agent/__snapshots__/generator.frameworks.spec.ts.snap +8 -8
  79. package/src/py/agent/__snapshots__/generator.protocols.spec.ts.snap +2 -2
  80. package/src/py/agent/a2a-connection/generator.d.ts +1 -1
  81. package/src/py/agent/gateway-connection/generator.d.ts +1 -1
  82. package/src/py/agent/mcp-connection/generator.d.ts +1 -1
  83. package/src/py/agent/react-connection/generator.d.ts +4 -1
  84. package/src/py/agent/react-connection/generator.js +35 -14
  85. package/src/py/agent/react-connection/generator.js.map +1 -1
  86. package/src/py/agent/schema.json +1 -0
  87. package/src/py/dynamodb/__snapshots__/generator.spec.ts.snap +2 -2
  88. package/src/py/dynamodb/schema.json +1 -0
  89. package/src/py/fast-api/__snapshots__/generator.terraform.spec.ts.snap +12 -12
  90. package/src/py/fast-api/generator.d.ts +5 -0
  91. package/src/py/fast-api/generator.js +3 -2
  92. package/src/py/fast-api/generator.js.map +1 -1
  93. package/src/py/fast-api/schema.json +1 -0
  94. package/src/py/lambda-function/__snapshots__/generator.spec.ts.snap +2 -2
  95. package/src/py/mcp-server/__snapshots__/generator.spec.ts.snap +5 -5
  96. package/src/py/mcp-server/schema.json +1 -0
  97. package/src/py/rdb/__snapshots__/generator.spec.ts.snap +2 -2
  98. package/src/py/rdb/schema.json +1 -0
  99. package/src/smithy/project/__snapshots__/generator.spec.ts.snap +4 -4
  100. package/src/smithy/project/files/service/build.Dockerfile.template +2 -2
  101. package/src/smithy/project/generator.d.ts +25 -0
  102. package/src/smithy/project/generator.js +24 -3
  103. package/src/smithy/project/generator.js.map +1 -1
  104. package/src/smithy/ts/api/__snapshots__/generator.spec.ts.snap +7 -7
  105. package/src/smithy/ts/api/generator.d.ts +6 -1
  106. package/src/smithy/ts/api/generator.js +3 -2
  107. package/src/smithy/ts/api/generator.js.map +1 -1
  108. package/src/smithy/ts/api/schema.json +1 -0
  109. package/src/trpc/backend/__snapshots__/generator.spec.ts.snap +12 -12
  110. package/src/trpc/backend/generator.d.ts +6 -1
  111. package/src/trpc/backend/generator.js +3 -2
  112. package/src/trpc/backend/generator.js.map +1 -1
  113. package/src/trpc/backend/schema.json +1 -0
  114. package/src/ts/agent/__snapshots__/generator.spec.ts.snap +9 -5
  115. package/src/ts/agent/generator.d.ts +32 -1
  116. package/src/ts/agent/generator.js +7 -4
  117. package/src/ts/agent/generator.js.map +1 -1
  118. package/src/ts/agent/react-connection/generator.d.ts +16 -1
  119. package/src/ts/agent/react-connection/generator.js +21 -8
  120. package/src/ts/agent/react-connection/generator.js.map +1 -1
  121. package/src/ts/agent/schema.json +1 -0
  122. package/src/ts/dcr-proxy/__snapshots__/generator.spec.ts.snap +1 -1
  123. package/src/ts/dynamodb/__snapshots__/generator.spec.ts.snap +2 -2
  124. package/src/ts/dynamodb/schema.json +1 -0
  125. package/src/ts/lambda-function/__snapshots__/generator.spec.ts.snap +2 -2
  126. package/src/ts/mcp-server/__snapshots__/generator.spec.ts.snap +2 -2
  127. package/src/ts/mcp-server/generator.d.ts +32 -1
  128. package/src/ts/mcp-server/generator.js +7 -4
  129. package/src/ts/mcp-server/generator.js.map +1 -1
  130. package/src/ts/mcp-server/schema.json +1 -0
  131. package/src/ts/nx-migration/generator.js +40 -27
  132. package/src/ts/nx-migration/generator.js.map +1 -1
  133. package/src/ts/rdb/__snapshots__/generator.spec.ts.snap +6 -6
  134. package/src/ts/rdb/generator.d.ts +8 -0
  135. package/src/ts/rdb/generator.js +3 -2
  136. package/src/ts/rdb/generator.js.map +1 -1
  137. package/src/ts/rdb/schema.json +1 -0
  138. package/src/ts/react-website/agui/files/common/src/hooks/useAgui__agentNameClassName__.tsx.template +16 -0
  139. package/src/ts/react-website/agui/generator.d.ts +11 -0
  140. package/src/ts/react-website/agui/generator.js +11 -7
  141. package/src/ts/react-website/agui/generator.js.map +1 -1
  142. package/src/ts/react-website/app/__snapshots__/generator.spec.ts.snap +61 -45
  143. package/src/ts/react-website/app/generator.d.ts +6 -1
  144. package/src/ts/react-website/app/generator.js +3 -2
  145. package/src/ts/react-website/app/generator.js.map +1 -1
  146. package/src/ts/react-website/app/schema.json +1 -0
  147. package/src/ts/react-website/cognito-auth/__snapshots__/generator.terraform.spec.ts.snap +2 -2
  148. package/src/ts/react-website/cognito-auth/generator.d.ts +6 -1
  149. package/src/ts/react-website/cognito-auth/generator.js +3 -2
  150. package/src/ts/react-website/cognito-auth/generator.js.map +1 -1
  151. package/src/utils/agent-core-constructs/agent-core-constructs.d.ts +23 -0
  152. package/src/utils/agent-core-constructs/agent-core-constructs.js +24 -1
  153. package/src/utils/agent-core-constructs/agent-core-constructs.js.map +1 -1
  154. package/src/utils/agent-core-constructs/files/cdk/app/agent-core/__nameKebabCase__/__nameKebabCase__.ts.template +3 -0
  155. package/src/utils/agent-core-constructs/files/cdk/app/agentcore-gateway/__nameKebabCase__/__nameKebabCase__.ts.template +6 -4
  156. package/src/utils/agent-core-constructs/files/cdk/core/agentcore-gateway/agentcore-gateway.ts.template +119 -3
  157. package/src/utils/agent-core-constructs/files/terraform/app/agentcore-gateway/__nameKebabCase__/__nameKebabCase__.tf.template +17 -0
  158. package/src/utils/api-constructs/api-constructs.d.ts +9 -0
  159. package/src/utils/api-constructs/api-constructs.js +11 -1
  160. package/src/utils/api-constructs/api-constructs.js.map +1 -1
  161. package/src/utils/config/utils.d.ts +5 -0
  162. package/src/utils/config/utils.js +7 -1
  163. package/src/utils/config/utils.js.map +1 -1
  164. package/src/utils/connection/open-api/files/components/__apiNameClassName__Provider.tsx.template +13 -2
  165. package/src/utils/connection/open-api/react.d.ts +10 -1
  166. package/src/utils/connection/open-api/react.js +3 -2
  167. package/src/utils/connection/open-api/react.js.map +1 -1
  168. package/src/utils/docker.d.ts +27 -2
  169. package/src/utils/docker.js +31 -2
  170. package/src/utils/docker.js.map +1 -1
  171. package/src/utils/identity-constructs/identity-constructs.d.ts +10 -0
  172. package/src/utils/identity-constructs/identity-constructs.js +11 -1
  173. package/src/utils/identity-constructs/identity-constructs.js.map +1 -1
  174. package/src/utils/migration-manifest.d.ts +58 -0
  175. package/src/utils/migration-manifest.js +76 -0
  176. package/src/utils/migration-manifest.js.map +1 -0
  177. package/src/utils/migration-versions.d.ts +2 -0
  178. package/src/utils/migration-versions.js.map +1 -1
  179. package/src/utils/shared-constructs-constants.d.ts +6 -0
  180. package/src/utils/shared-constructs-constants.js +5 -0
  181. package/src/utils/shared-constructs-constants.js.map +1 -1
  182. package/src/utils/version-upgrade-migration/owned-dependencies.d.ts +26 -0
  183. package/src/utils/version-upgrade-migration/owned-dependencies.js +52 -4
  184. package/src/utils/version-upgrade-migration/owned-dependencies.js.map +1 -1
  185. package/src/utils/version-upgrade-migration/register.d.ts +9 -3
  186. package/src/utils/version-upgrade-migration/register.js +18 -14
  187. package/src/utils/version-upgrade-migration/register.js.map +1 -1
  188. package/src/utils/version-upgrade-migration/sync-embedded-versions.d.ts +26 -0
  189. package/src/utils/version-upgrade-migration/sync-embedded-versions.js +304 -0
  190. package/src/utils/version-upgrade-migration/sync-embedded-versions.js.map +1 -0
  191. package/src/utils/version-upgrade-migration/sync-vended-versions.js +14 -0
  192. package/src/utils/version-upgrade-migration/sync-vended-versions.js.map +1 -1
  193. package/src/utils/versions.d.ts +90 -77
  194. package/src/utils/versions.js +86 -75
  195. package/src/utils/versions.js.map +1 -1
  196. package/src/utils/website-constructs/website-constructs.d.ts +11 -0
  197. package/src/utils/website-constructs/website-constructs.js +12 -1
  198. package/src/utils/website-constructs/website-constructs.js.map +1 -1
  199. package/src/migrations/latest/backfill-generator-metadata/migration.js.map +0 -1
  200. package/src/migrations/latest/dynamodb-local-remove-optimize-flag/migration.js.map +0 -1
  201. package/src/migrations/latest/modernize-function-props-cast/migration.js.map +0 -1
  202. package/src/migrations/latest/order-access-log-delivery-after-bucket-policy/migration.js.map +0 -1
  203. package/src/migrations/latest/restrict-cors-to-custom-domains/migration.js.map +0 -1
  204. package/src/migrations/latest/terraform-bootstrap-adopt-existing-bucket/migration.js.map +0 -1
  205. package/src/migrations/latest/ts-agent-session-management-support/migration.js.map +0 -1
  206. package/src/migrations/latest/user-identity-waf-allow-localhost-callback/migration.js.map +0 -1
  207. /package/src/agentcore-gateway/files/project/{local-dev.ts.template → mcp/local-dev.ts.template} +0 -0
  208. /package/src/migrations/latest/{dynamodb-local-remove-optimize-flag → gateway-agent-targets}/migration.d.ts +0 -0
  209. /package/src/migrations/latest/{modernize-function-props-cast → smithy-ssdk-bundle-pins}/migration.d.ts +0 -0
  210. /package/src/migrations/{latest/restrict-cors-to-custom-domains → v1.0.0-rc.50/modernize-function-props-cast}/migration.d.ts +0 -0
  211. /package/src/migrations/{latest → v1.0.0-rc.50}/modernize-function-props-cast/migration.js +0 -0
  212. /package/src/migrations/{latest/terraform-bootstrap-adopt-existing-bucket → v1.0.0-rc.50/restrict-cors-to-custom-domains}/migration.d.ts +0 -0
  213. /package/src/migrations/{latest → v1.0.0-rc.50}/restrict-cors-to-custom-domains/migration.js +0 -0
  214. /package/src/migrations/{latest/ts-agent-session-management-support → v1.0.0-rc.50/terraform-bootstrap-adopt-existing-bucket}/migration.d.ts +0 -0
  215. /package/src/migrations/{latest → v1.0.0-rc.50}/terraform-bootstrap-adopt-existing-bucket/migration.js +0 -0
  216. /package/src/migrations/{latest/order-access-log-delivery-after-bucket-policy → v1.0.0-rc.52/user-identity-waf-allow-localhost-callback}/migration.d.ts +0 -0
  217. /package/src/migrations/{latest → v1.0.0-rc.52}/user-identity-waf-allow-localhost-callback/migration.js +0 -0
  218. /package/src/migrations/{latest/user-identity-waf-allow-localhost-callback → v1.0.0-rc.54/order-access-log-delivery-after-bucket-policy}/migration.d.ts +0 -0
  219. /package/src/migrations/{latest → v1.0.0-rc.54}/order-access-log-delivery-after-bucket-policy/migration.js +0 -0
  220. /package/src/migrations/{latest → v1.0.0-rc.55}/backfill-generator-metadata/migration.d.ts +0 -0
  221. /package/src/migrations/{latest → v1.0.0-rc.55}/backfill-generator-metadata/migration.js +0 -0
  222. /package/src/migrations/{latest → v1.0.0-rc.56}/dynamodb-local-remove-optimize-flag/migration.js +0 -0
  223. /package/src/migrations/{latest → v1.0.0-rc.57}/ts-agent-session-management-support/migration.js +0 -0
@@ -10,7 +10,7 @@ import type { PyAgentMcpConnectionGeneratorSchema } from './schema';
10
10
  export interface PyAgentMcpConnectionMetadata {
11
11
  readonly framework: AgentFramework;
12
12
  }
13
- export declare const DEPENDENCIES: import("../../../utils/declared-dependencies").DependencyDeclaration<readonly import("../../../utils/declared-dependencies").DeclaredTsDependency<"@a2a-js/sdk" | "@aws/aws-distro-opentelemetry-node-autoinstrumentation" | "@opentelemetry/propagator-jaeger" | "minimatch" | "@aws-sdk/client-dynamodb" | "@aws-sdk/client-api-gateway" | "@aws-sdk/client-iam" | "@aws-sdk/client-bedrock-agentcore" | "@aws-sdk/client-bedrock-runtime" | "@aws-sdk/client-s3" | "@aws-sdk/client-sts" | "@aws-sdk/credential-providers" | "@aws-sdk/credential-provider-cognito-identity" | "@aws-sdk/client-secrets-manager" | "@aws-sdk/rds-signer" | "@aws-smithy/server-apigateway" | "@aws-smithy/server-node" | "@aws-lambda-powertools/logger" | "@aws-lambda-powertools/metrics" | "@aws-lambda-powertools/parameters" | "@aws-lambda-powertools/tracer" | "@aws-lambda-powertools/parser" | "@aws-sdk/client-appconfigdata" | "@middy/core" | "@nxlv/python" | "@nx-extend/terraform" | "nx" | "@nx/devkit" | "@nx/js" | "@nx/react" | "@nx/vite" | "@nx/vitest" | "@nx/workspace" | "create-nx-workspace" | "@swc-node/register" | "@swc/core" | "@modelcontextprotocol/sdk" | "@modelcontextprotocol/inspector" | "@ag-ui/a2ui-toolkit" | "@ag-ui/aws-strands" | "@ag-ui/client" | "@ag-ui/core" | "@ag-ui/encoder" | "agent-chat-cli" | "@copilotkit/react-core" | "rxjs" | "@strands-agents/sdk" | "@tanstack/react-router" | "@tanstack/router-plugin" | "@tanstack/router-generator" | "@tanstack/virtual-file-routes" | "@tanstack/router-utils" | "@cloudscape-design/board-components" | "@cloudscape-design/chat-components" | "@cloudscape-design/components" | "@cloudscape-design/global-styles" | "@tanstack/react-query" | "@tanstack/react-query-devtools" | "@trpc/tanstack-react-query" | "@trpc/client" | "@trpc/server" | "@types/node" | "@types/aws-lambda" | "@types/cors" | "@types/pg" | "@types/ws" | "@types/express" | "@smithy/config-resolver" | "@smithy/node-config-provider" | "@smithy/node-http-handler" | "@smithy/types" | "@vitest/coverage-v8" | "@vitest/ui" | "@astrojs/react" | "@astrojs/starlight" | "astro" | "aws4fetch" | "aws-cdk" | "aws-cdk-lib" | "aws-xray-sdk-core" | "constructs" | "cors" | "chalk" | "class-variance-authority" | "clsx" | "commander" | "electrodb" | "esbuild" | "event-source-polyfill" | "@types/event-source-polyfill" | "@biomejs/biome" | "@prisma/adapter-mariadb" | "@prisma/adapter-pg" | "@prisma/client" | "ejs" | "@types/ejs" | "express" | "fast-glob" | "husky" | "fs-extra" | "@types/fs-extra" | "make-dir-cli" | "mariadb" | "ncp" | "npm" | "npm-check-updates" | "oidc-client-ts" | "pg" | "prisma" | "react-oidc-context" | "react" | "react-dom" | "rimraf" | "rolldown" | "simple-git" | "source-map-support" | "starlight-blog" | "tailwindcss" | "@tailwindcss/vite" | "tsx" | "lucide-react" | "radix-ui" | "shadcn" | "tw-animate-css" | "tailwind-merge" | "vite" | "typescript" | "vitest" | "zod" | "ws", PyAgentMcpConnectionMetadata>[], readonly [{
13
+ export declare const DEPENDENCIES: import("../../../utils/declared-dependencies").DependencyDeclaration<readonly import("../../../utils/declared-dependencies").DeclaredTsDependency<"@a2a-js/sdk" | "@aws/aws-distro-opentelemetry-node-autoinstrumentation" | "@opentelemetry/propagator-jaeger" | "minimatch" | "@aws-sdk/client-dynamodb" | "@aws-sdk/client-api-gateway" | "@aws-sdk/client-iam" | "@aws-sdk/client-bedrock-agentcore" | "@aws-sdk/client-bedrock-runtime" | "@aws-sdk/client-s3" | "@aws-sdk/client-sts" | "@aws-sdk/credential-providers" | "@aws-sdk/credential-provider-cognito-identity" | "@aws-sdk/client-secrets-manager" | "@aws-sdk/rds-signer" | "@aws-smithy/server-apigateway" | "@aws-smithy/server-node" | "@aws-lambda-powertools/logger" | "@aws-lambda-powertools/metrics" | "@aws-lambda-powertools/parameters" | "@aws-lambda-powertools/tracer" | "@aws-lambda-powertools/parser" | "@aws-sdk/client-appconfigdata" | "@middy/core" | "@nxlv/python" | "@nx-extend/terraform" | "nx" | "@nx/devkit" | "@nx/js" | "@nx/react" | "@nx/vite" | "@nx/vitest" | "@nx/workspace" | "create-nx-workspace" | "@swc-node/register" | "@swc/core" | "@modelcontextprotocol/sdk" | "@modelcontextprotocol/inspector" | "@ag-ui/a2ui-toolkit" | "@ag-ui/aws-strands" | "@ag-ui/client" | "@ag-ui/core" | "@ag-ui/encoder" | "agent-chat-cli" | "@copilotkit/react-core" | "rxjs" | "@strands-agents/sdk" | "@tanstack/react-router" | "@tanstack/router-plugin" | "@tanstack/router-generator" | "@tanstack/virtual-file-routes" | "@tanstack/router-utils" | "@cloudscape-design/board-components" | "@cloudscape-design/chat-components" | "@cloudscape-design/components" | "@cloudscape-design/global-styles" | "@tanstack/react-query" | "@tanstack/react-query-devtools" | "@trpc/tanstack-react-query" | "@trpc/client" | "@trpc/server" | "@types/node" | "@types/aws-lambda" | "@types/cors" | "@types/pg" | "@types/ws" | "@types/express" | "@smithy/config-resolver" | "@smithy/node-config-provider" | "@smithy/node-http-handler" | "@smithy/types" | "@vitest/coverage-v8" | "@vitest/ui" | "@astrojs/react" | "@astrojs/starlight" | "astro" | "aws4fetch" | "aws-cdk" | "aws-cdk-lib" | "aws-xray-sdk-core" | "constructs" | "cors" | "chalk" | "class-variance-authority" | "clsx" | "commander" | "electrodb" | "esbuild" | "event-source-polyfill" | "@types/event-source-polyfill" | "@biomejs/biome" | "@prisma/adapter-mariadb" | "@prisma/adapter-pg" | "@prisma/client" | "ejs" | "@types/ejs" | "express" | "fast-glob" | "husky" | "fs-extra" | "@types/fs-extra" | "make-dir-cli" | "mariadb" | "ncp" | "npm" | "npm-check-updates" | "oidc-client-ts" | "pg" | "prisma" | "react-oidc-context" | "react" | "react-dom" | "rimraf" | "rolldown" | "rolldown-plugin-dts" | "@rollup/plugin-esm-shim" | "simple-git" | "source-map-support" | "starlight-blog" | "tailwindcss" | "@tailwindcss/vite" | "tsx" | "lucide-react" | "radix-ui" | "shadcn" | "tw-animate-css" | "tailwind-merge" | "vite" | "typescript" | "vitest" | "zod" | "ws", PyAgentMcpConnectionMetadata>[], readonly [{
14
14
  readonly name: "boto3";
15
15
  }, {
16
16
  readonly name: "httpx";
@@ -4,6 +4,7 @@
4
4
  */
5
5
  import { type Tree } from '@nx/devkit';
6
6
  import type { ResolvedConnectionOptions } from '../../../connection/generator';
7
+ import type { AgentGatewayRoute } from '../../../ts/agent/react-connection/generator';
7
8
  import { type NxGeneratorInfo } from '../../../utils/nx';
8
9
  /** The metadata this generator records, which its predicates read. */
9
10
  export interface PyAgentReactConnectionMetadata {
@@ -152,5 +153,7 @@ export declare const DEPENDENCIES: import("../../../utils/declared-dependencies"
152
153
  when: (m: PyAgentReactConnectionMetadata) => boolean;
153
154
  }], readonly import("../../../utils/declared-dependencies").DeclaredPyDependency<"a2a-sdk" | "ag-ui-langgraph" | "ag-ui-protocol" | "ag-ui-strands" | "aws-lambda-powertools" | "aws-lambda-powertools[tracer]" | "aws-lambda-powertools[parser]" | "aws-opentelemetry-distro" | "bedrock-agentcore" | "boto3" | "checkov" | "fastapi" | "fastapi[standard]" | "httpx" | "langchain" | "langchain-aws" | "langchain-mcp-adapters" | "langgraph" | "mcp" | "pip-check-updates" | "pip-licenses" | "ruff" | "strands-agents" | "strands-agents[a2a]" | "strands-agents-tools" | "ty" | "pynamodb" | "uvicorn" | "sqlmodel" | "alembic" | "aiomysql" | "asyncpg" | "greenlet", PyAgentReactConnectionMetadata>[]>;
154
155
  export declare const PY_AGENT_REACT_CONNECTION_GENERATOR_INFO: NxGeneratorInfo;
155
- export declare const pyAgentReactConnectionGenerator: (tree: Tree, options: ResolvedConnectionOptions) => Promise<() => Promise<void>>;
156
+ export declare const pyAgentReactConnectionGenerator: (tree: Tree, options: ResolvedConnectionOptions & {
157
+ gatewayRoute?: AgentGatewayRoute;
158
+ }) => Promise<() => Promise<void>>;
156
159
  export default pyAgentReactConnectionGenerator;
@@ -10,7 +10,7 @@ import { formatFilesInSubtree } from "../../../utils/format.js";
10
10
  import { installDependencies } from "../../../utils/install.js";
11
11
  import { addGeneratorMetricsIfApplicable } from "../../../utils/metrics.js";
12
12
  import { kebabCase, toClassName, toSnakeCase } from "../../../utils/names.js";
13
- import { addComponentGeneratorMetadata, getGeneratorInfo, readProjectConfigurationUnqualified } from "../../../utils/nx.js";
13
+ import { addComponentGeneratorMetadata, addDependencyToTargetIfNotPresent, getGeneratorInfo, readProjectConfigurationUnqualified } from "../../../utils/nx.js";
14
14
  import { sortObjectKeys } from "../../../utils/object.js";
15
15
  import { toProjectRelativePath } from "../../../utils/paths.js";
16
16
  import { addPyAgentTargetToLocalDev, openApiClientLocalDevDeps } from "./local-dev.js";
@@ -36,7 +36,8 @@ export const pyAgentReactConnectionGenerator = async (tree, options)=>{
36
36
  const agentName = targetComponent?.name ?? 'agent';
37
37
  const agentNameClassName = targetComponent?.rc ?? toClassName(agentName);
38
38
  const agentPort = targetComponent?.port ?? metadata?.ports?.[0] ?? 8081;
39
- const auth = (targetComponent?.auth ?? metadata?.auth ?? 'iam').toLowerCase();
39
+ // Behind a gateway the browser authenticates with the gateway, not the agent.
40
+ const auth = (options.gatewayRoute?.gatewayAuth ?? targetComponent?.auth ?? metadata?.auth ?? 'iam').toLowerCase();
40
41
  const protocol = (targetComponent?.protocol ?? 'http').toLowerCase();
41
42
  // Recorded below and read by the declaration's predicates, so the packages
42
43
  // added here are exactly the ones the version sync will own.
@@ -54,7 +55,8 @@ export const pyAgentReactConnectionGenerator = async (tree, options)=>{
54
55
  frontendProjectConfig,
55
56
  agentName,
56
57
  agentNameClassName,
57
- auth: auth
58
+ auth: auth,
59
+ gatewayRoute: options.gatewayRoute
58
60
  });
59
61
  } else {
60
62
  const moduleName = getModuleName(agentProjectConfig);
@@ -101,25 +103,44 @@ export const pyAgentReactConnectionGenerator = async (tree, options)=>{
101
103
  auth,
102
104
  port: agentPort,
103
105
  isAgentRuntime: true,
106
+ gatewayRoute: options.gatewayRoute,
104
107
  skipLocalDev: true
105
108
  }, DEPENDENCIES);
106
109
  additionalLocalDevDeps = openApiClientLocalDevDeps(agentNameClassName);
107
110
  // HTTP only — the AG-UI branch handles this inside addAgUiReactConnection.
108
111
  // Agent constructs publish their runtime ARN to the 'agentcore' namespace
109
112
  // by default, which isn't exposed to the website; patch them to also
110
- // publish under 'connection' so the browser can read it.
111
- await addAgentRuntimeToConnectionNamespace(tree, {
112
- agentNameKebabCase: kebabCase(agentNameClassName),
113
- agentNameClassName
113
+ // publish under 'connection' so the browser can read it. When routing via
114
+ // a gateway, the gateway publishes its own URL instead.
115
+ if (!options.gatewayRoute) {
116
+ await addAgentRuntimeToConnectionNamespace(tree, {
117
+ agentNameKebabCase: kebabCase(agentNameClassName),
118
+ agentNameClassName
119
+ });
120
+ }
121
+ }
122
+ if (options.gatewayRoute) {
123
+ // The gateway react-connection wires the website's dev target to the
124
+ // local gateway (which proxies to the agent); only the OpenAPI client
125
+ // generation targets are still needed here.
126
+ if (additionalLocalDevDeps.length > 0) {
127
+ const websiteConfig = readProjectConfigurationUnqualified(tree, frontendProjectConfig.name);
128
+ if (websiteConfig.targets?.['dev']) {
129
+ for (const additional of additionalLocalDevDeps){
130
+ addDependencyToTargetIfNotPresent(websiteConfig, 'dev', additional);
131
+ }
132
+ updateProjectConfiguration(tree, websiteConfig.name, websiteConfig);
133
+ }
134
+ }
135
+ } else {
136
+ await addPyAgentTargetToLocalDev(tree, frontendProjectConfig.name, agentProjectConfig.name, {
137
+ agentName,
138
+ agentNameClassName,
139
+ port: agentPort,
140
+ targetComponent,
141
+ additionalDependencyTargets: additionalLocalDevDeps
114
142
  });
115
143
  }
116
- await addPyAgentTargetToLocalDev(tree, frontendProjectConfig.name, agentProjectConfig.name, {
117
- agentName,
118
- agentNameClassName,
119
- port: agentPort,
120
- targetComponent,
121
- additionalDependencyTargets: additionalLocalDevDeps
122
- });
123
144
  // Recorded so the version sync knows this connection's dependencies are ours.
124
145
  addComponentGeneratorMetadata(tree, frontendProjectConfig.name, PY_AGENT_REACT_CONNECTION_GENERATOR_INFO, toProjectRelativePath(frontendProjectConfig, protocol === 'ag-ui' ? joinPathFragments(frontendProjectConfig.sourceRoot, 'hooks', `useAgui${agentNameClassName}`) : joinPathFragments(frontendProjectConfig.sourceRoot, 'components', `${agentNameClassName}Provider`)), agentNameClassName, connectionMetadata);
125
146
  await addGeneratorMetricsIfApplicable(tree, [
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../packages/nx-plugin/src/py/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 generateFiles,\n joinPathFragments,\n OverwriteStrategy,\n type Tree,\n updateProjectConfiguration,\n} from '@nx/devkit';\nimport { addAgentRuntimeToConnectionNamespace } from '../../../connection/agent-runtime-config';\nimport type { ResolvedConnectionOptions } from '../../../connection/generator';\nimport {\n DEPENDENCIES as AGUI_DEPENDENCIES,\n type AgUiAuth,\n addAgUiReactConnection,\n resolveAgUiTheme,\n} from '../../../ts/react-website/agui/generator';\nimport {\n addOpenApiReactClient,\n OPEN_API_REACT_DEPENDENCIES,\n} from '../../../utils/connection/open-api/react';\nimport {\n declareDependencies,\n onlyWhen,\n} from '../../../utils/declared-dependencies';\nimport { formatFilesInSubtree } from '../../../utils/format';\nimport { installDependencies } from '../../../utils/install';\nimport { addGeneratorMetricsIfApplicable } from '../../../utils/metrics';\nimport { kebabCase, toClassName, toSnakeCase } from '../../../utils/names';\nimport {\n addComponentGeneratorMetadata,\n type ComponentMetadata,\n getGeneratorInfo,\n type NxGeneratorInfo,\n readProjectConfigurationUnqualified,\n} from '../../../utils/nx';\nimport { sortObjectKeys } from '../../../utils/object';\nimport { toProjectRelativePath } from '../../../utils/paths';\nimport {\n addPyAgentTargetToLocalDev,\n openApiClientLocalDevDeps,\n} from './local-dev';\n\n/** The metadata this generator records, which its predicates read. */\nexport interface PyAgentReactConnectionMetadata {\n readonly protocol: string;\n readonly auth: string;\n /** The AG-UI theme module, which the website's `ux` selects. */\n readonly theme: string;\n}\n\n/** The OpenAPI-over-HTTP path, which the AG-UI path takes none of. */\nconst isHttp = (m: PyAgentReactConnectionMetadata) => m.protocol !== 'ag-ui';\n\n/** The AG-UI path, whose packages `addAgUiReactConnection` adds. */\nconst isAgUi = (m: PyAgentReactConnectionMetadata) => !isHttp(m);\n\n// Each entry names the protocol path it belongs to: the HTTP path's OpenAPI\n// client packages are added by `addOpenApiReactClient`, the AG-UI path's by\n// `addAgUiReactConnection`, both on this generator's behalf. The AG-UI entries\n// keep their own theme and auth conditions, which the metadata below records.\nexport const DEPENDENCIES =\n declareDependencies<PyAgentReactConnectionMetadata>()({\n ts: [\n ...onlyWhen(OPEN_API_REACT_DEPENDENCIES, isHttp),\n ...onlyWhen(AGUI_DEPENDENCIES.ts, isAgUi),\n ],\n });\n\nexport const PY_AGENT_REACT_CONNECTION_GENERATOR_INFO: NxGeneratorInfo =\n getGeneratorInfo(import.meta.filename);\n\nexport const pyAgentReactConnectionGenerator = async (\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 protocol = (targetComponent?.protocol ?? 'http').toLowerCase();\n\n // Recorded below and read by the declaration's predicates, so the packages\n // added here are exactly the ones the version sync will own.\n const connectionMetadata: PyAgentReactConnectionMetadata = {\n protocol,\n auth,\n theme: resolveAgUiTheme(frontendProjectConfig),\n };\n\n if (protocol === '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 let additionalLocalDevDeps: string[] = [];\n\n if (protocol === 'ag-ui') {\n await addAgUiReactConnection(tree, {\n frontendProjectConfig,\n agentName,\n agentNameClassName,\n auth: auth as AgUiAuth,\n });\n } else {\n const moduleName = getModuleName(agentProjectConfig);\n const agentNameSnakeCase = toSnakeCase(agentName);\n const agentTargetPrefix = targetComponent?.name ? agentName : 'agent';\n\n // Add OpenAPI spec generation script scoped to this agent\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files/agent'),\n agentProjectConfig.root,\n {\n moduleName,\n agentNameSnakeCase,\n },\n {\n overwriteStrategy: OverwriteStrategy.KeepExisting,\n },\n );\n\n // Instrument the OpenAPI spec generation as a target on the agent project\n const openApiTargetName = `${agentTargetPrefix}-openapi`;\n const openApiDist = joinPathFragments(\n 'dist',\n agentProjectConfig.root,\n 'openapi',\n agentNameSnakeCase,\n );\n const specPath = joinPathFragments(openApiDist, 'openapi.json');\n\n updateProjectConfiguration(tree, agentProjectConfig.name, {\n ...agentProjectConfig,\n targets: sortObjectKeys({\n ...agentProjectConfig.targets,\n [openApiTargetName]: {\n cache: true,\n executor: 'nx:run-commands',\n outputs: [\n `{workspaceRoot}/dist/{projectRoot}/openapi/${agentNameSnakeCase}`,\n ],\n options: {\n commands: [\n `uv run python {projectRoot}/scripts/${agentNameSnakeCase}_openapi.py \"dist/{projectRoot}/openapi/${agentNameSnakeCase}/openapi.json\"`,\n ],\n },\n },\n }),\n });\n\n // Use the shared OpenAPI react client utility for hooks, providers, and build targets.\n // The dev target is handled separately below using the agent-specific dev target.\n await addOpenApiReactClient(\n tree,\n {\n apiName: agentNameClassName,\n frontendProjectConfig,\n backendProjectConfig: agentProjectConfig,\n specBuildProject: agentProjectConfig,\n specPath,\n specBuildTargetName: `${agentProjectConfig.name}:${openApiTargetName}`,\n auth,\n port: agentPort,\n isAgentRuntime: true,\n skipLocalDev: true,\n },\n DEPENDENCIES,\n );\n\n additionalLocalDevDeps = openApiClientLocalDevDeps(agentNameClassName);\n\n // HTTP only — the AG-UI branch handles this inside addAgUiReactConnection.\n // Agent constructs publish their runtime ARN to the 'agentcore' namespace\n // by default, which isn't exposed to the website; patch them to also\n // publish under 'connection' so the browser can read it.\n await addAgentRuntimeToConnectionNamespace(tree, {\n agentNameKebabCase: kebabCase(agentNameClassName),\n agentNameClassName,\n });\n }\n\n await addPyAgentTargetToLocalDev(\n tree,\n frontendProjectConfig.name,\n agentProjectConfig.name,\n {\n agentName,\n agentNameClassName,\n port: agentPort,\n targetComponent,\n additionalDependencyTargets: additionalLocalDevDeps,\n },\n );\n\n // Recorded so the version sync knows this connection's dependencies are ours.\n addComponentGeneratorMetadata(\n tree,\n frontendProjectConfig.name,\n PY_AGENT_REACT_CONNECTION_GENERATOR_INFO,\n toProjectRelativePath(\n frontendProjectConfig,\n protocol === 'ag-ui'\n ? joinPathFragments(\n frontendProjectConfig.sourceRoot,\n 'hooks',\n `useAgui${agentNameClassName}`,\n )\n : joinPathFragments(\n frontendProjectConfig.sourceRoot,\n 'components',\n `${agentNameClassName}Provider`,\n ),\n ),\n agentNameClassName,\n connectionMetadata,\n );\n\n await addGeneratorMetricsIfApplicable(tree, [\n PY_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/**\n * Determine the Python module name from the project configuration\n */\nconst getModuleName = (\n projectConfig: ReturnType<typeof readProjectConfigurationUnqualified>,\n): string => {\n if (projectConfig.sourceRoot) {\n const sourceRootParts = projectConfig.sourceRoot.split('/');\n return sourceRootParts[sourceRootParts.length - 1];\n }\n throw new Error(\n `Could not determine sourceRoot for project ${projectConfig.name}`,\n );\n};\n\nexport default pyAgentReactConnectionGenerator;\n"],"names":["generateFiles","joinPathFragments","OverwriteStrategy","updateProjectConfiguration","addAgentRuntimeToConnectionNamespace","DEPENDENCIES","AGUI_DEPENDENCIES","addAgUiReactConnection","resolveAgUiTheme","addOpenApiReactClient","OPEN_API_REACT_DEPENDENCIES","declareDependencies","onlyWhen","formatFilesInSubtree","installDependencies","addGeneratorMetricsIfApplicable","kebabCase","toClassName","toSnakeCase","addComponentGeneratorMetadata","getGeneratorInfo","readProjectConfigurationUnqualified","sortObjectKeys","toProjectRelativePath","addPyAgentTargetToLocalDev","openApiClientLocalDevDeps","isHttp","m","protocol","isAgUi","ts","PY_AGENT_REACT_CONNECTION_GENERATOR_INFO","filename","pyAgentReactConnectionGenerator","tree","options","frontendProjectConfig","sourceProject","agentProjectConfig","targetProject","targetComponent","metadata","agentName","name","agentNameClassName","rc","agentPort","port","ports","auth","toLowerCase","connectionMetadata","theme","Error","additionalLocalDevDeps","moduleName","getModuleName","agentNameSnakeCase","agentTargetPrefix","dirname","root","overwriteStrategy","KeepExisting","openApiTargetName","openApiDist","specPath","targets","cache","executor","outputs","commands","apiName","backendProjectConfig","specBuildProject","specBuildTargetName","isAgentRuntime","skipLocalDev","agentNameKebabCase","additionalDependencyTargets","sourceRoot","preferInstallDependencies","languages","projectConfig","sourceRootParts","split","length"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../../../packages/nx-plugin/src/py/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 generateFiles,\n joinPathFragments,\n OverwriteStrategy,\n type Tree,\n updateProjectConfiguration,\n} from '@nx/devkit';\nimport { addAgentRuntimeToConnectionNamespace } from '../../../connection/agent-runtime-config';\nimport type { ResolvedConnectionOptions } from '../../../connection/generator';\nimport type { AgentGatewayRoute } from '../../../ts/agent/react-connection/generator';\nimport {\n DEPENDENCIES as AGUI_DEPENDENCIES,\n type AgUiAuth,\n addAgUiReactConnection,\n resolveAgUiTheme,\n} from '../../../ts/react-website/agui/generator';\nimport {\n addOpenApiReactClient,\n OPEN_API_REACT_DEPENDENCIES,\n} from '../../../utils/connection/open-api/react';\nimport {\n declareDependencies,\n onlyWhen,\n} from '../../../utils/declared-dependencies';\nimport { formatFilesInSubtree } from '../../../utils/format';\nimport { installDependencies } from '../../../utils/install';\nimport { addGeneratorMetricsIfApplicable } from '../../../utils/metrics';\nimport { kebabCase, toClassName, toSnakeCase } from '../../../utils/names';\nimport {\n addComponentGeneratorMetadata,\n addDependencyToTargetIfNotPresent,\n type ComponentMetadata,\n getGeneratorInfo,\n type NxGeneratorInfo,\n readProjectConfigurationUnqualified,\n} from '../../../utils/nx';\nimport { sortObjectKeys } from '../../../utils/object';\nimport { toProjectRelativePath } from '../../../utils/paths';\nimport {\n addPyAgentTargetToLocalDev,\n openApiClientLocalDevDeps,\n} from './local-dev';\n\n/** The metadata this generator records, which its predicates read. */\nexport interface PyAgentReactConnectionMetadata {\n readonly protocol: string;\n readonly auth: string;\n /** The AG-UI theme module, which the website's `ux` selects. */\n readonly theme: string;\n}\n\n/** The OpenAPI-over-HTTP path, which the AG-UI path takes none of. */\nconst isHttp = (m: PyAgentReactConnectionMetadata) => m.protocol !== 'ag-ui';\n\n/** The AG-UI path, whose packages `addAgUiReactConnection` adds. */\nconst isAgUi = (m: PyAgentReactConnectionMetadata) => !isHttp(m);\n\n// Each entry names the protocol path it belongs to: the HTTP path's OpenAPI\n// client packages are added by `addOpenApiReactClient`, the AG-UI path's by\n// `addAgUiReactConnection`, both on this generator's behalf. The AG-UI entries\n// keep their own theme and auth conditions, which the metadata below records.\nexport const DEPENDENCIES =\n declareDependencies<PyAgentReactConnectionMetadata>()({\n ts: [\n ...onlyWhen(OPEN_API_REACT_DEPENDENCIES, isHttp),\n ...onlyWhen(AGUI_DEPENDENCIES.ts, isAgUi),\n ],\n });\n\nexport const PY_AGENT_REACT_CONNECTION_GENERATOR_INFO: NxGeneratorInfo =\n getGeneratorInfo(import.meta.filename);\n\nexport const pyAgentReactConnectionGenerator = async (\n tree: Tree,\n options: ResolvedConnectionOptions & { gatewayRoute?: AgentGatewayRoute },\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 // Behind a gateway the browser authenticates with the gateway, not the agent.\n const auth = (\n options.gatewayRoute?.gatewayAuth ??\n targetComponent?.auth ??\n metadata?.auth ??\n 'iam'\n ).toLowerCase();\n const protocol = (targetComponent?.protocol ?? 'http').toLowerCase();\n\n // Recorded below and read by the declaration's predicates, so the packages\n // added here are exactly the ones the version sync will own.\n const connectionMetadata: PyAgentReactConnectionMetadata = {\n protocol,\n auth,\n theme: resolveAgUiTheme(frontendProjectConfig),\n };\n\n if (protocol === '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 let additionalLocalDevDeps: string[] = [];\n\n if (protocol === 'ag-ui') {\n await addAgUiReactConnection(tree, {\n frontendProjectConfig,\n agentName,\n agentNameClassName,\n auth: auth as AgUiAuth,\n gatewayRoute: options.gatewayRoute,\n });\n } else {\n const moduleName = getModuleName(agentProjectConfig);\n const agentNameSnakeCase = toSnakeCase(agentName);\n const agentTargetPrefix = targetComponent?.name ? agentName : 'agent';\n\n // Add OpenAPI spec generation script scoped to this agent\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, 'files/agent'),\n agentProjectConfig.root,\n {\n moduleName,\n agentNameSnakeCase,\n },\n {\n overwriteStrategy: OverwriteStrategy.KeepExisting,\n },\n );\n\n // Instrument the OpenAPI spec generation as a target on the agent project\n const openApiTargetName = `${agentTargetPrefix}-openapi`;\n const openApiDist = joinPathFragments(\n 'dist',\n agentProjectConfig.root,\n 'openapi',\n agentNameSnakeCase,\n );\n const specPath = joinPathFragments(openApiDist, 'openapi.json');\n\n updateProjectConfiguration(tree, agentProjectConfig.name, {\n ...agentProjectConfig,\n targets: sortObjectKeys({\n ...agentProjectConfig.targets,\n [openApiTargetName]: {\n cache: true,\n executor: 'nx:run-commands',\n outputs: [\n `{workspaceRoot}/dist/{projectRoot}/openapi/${agentNameSnakeCase}`,\n ],\n options: {\n commands: [\n `uv run python {projectRoot}/scripts/${agentNameSnakeCase}_openapi.py \"dist/{projectRoot}/openapi/${agentNameSnakeCase}/openapi.json\"`,\n ],\n },\n },\n }),\n });\n\n // Use the shared OpenAPI react client utility for hooks, providers, and build targets.\n // The dev target is handled separately below using the agent-specific dev target.\n await addOpenApiReactClient(\n tree,\n {\n apiName: agentNameClassName,\n frontendProjectConfig,\n backendProjectConfig: agentProjectConfig,\n specBuildProject: agentProjectConfig,\n specPath,\n specBuildTargetName: `${agentProjectConfig.name}:${openApiTargetName}`,\n auth,\n port: agentPort,\n isAgentRuntime: true,\n gatewayRoute: options.gatewayRoute,\n skipLocalDev: true,\n },\n DEPENDENCIES,\n );\n\n additionalLocalDevDeps = openApiClientLocalDevDeps(agentNameClassName);\n\n // HTTP only — the AG-UI branch handles this inside addAgUiReactConnection.\n // Agent constructs publish their runtime ARN to the 'agentcore' namespace\n // by default, which isn't exposed to the website; patch them to also\n // publish under 'connection' so the browser can read it. When routing via\n // a gateway, the gateway publishes its own URL instead.\n if (!options.gatewayRoute) {\n await addAgentRuntimeToConnectionNamespace(tree, {\n agentNameKebabCase: kebabCase(agentNameClassName),\n agentNameClassName,\n });\n }\n }\n\n if (options.gatewayRoute) {\n // The gateway react-connection wires the website's dev target to the\n // local gateway (which proxies to the agent); only the OpenAPI client\n // generation targets are still needed here.\n if (additionalLocalDevDeps.length > 0) {\n const websiteConfig = readProjectConfigurationUnqualified(\n tree,\n frontendProjectConfig.name,\n );\n if (websiteConfig.targets?.['dev']) {\n for (const additional of additionalLocalDevDeps) {\n addDependencyToTargetIfNotPresent(websiteConfig, 'dev', additional);\n }\n updateProjectConfiguration(tree, websiteConfig.name, websiteConfig);\n }\n }\n } else {\n await addPyAgentTargetToLocalDev(\n tree,\n frontendProjectConfig.name,\n agentProjectConfig.name,\n {\n agentName,\n agentNameClassName,\n port: agentPort,\n targetComponent,\n additionalDependencyTargets: additionalLocalDevDeps,\n },\n );\n }\n\n // Recorded so the version sync knows this connection's dependencies are ours.\n addComponentGeneratorMetadata(\n tree,\n frontendProjectConfig.name,\n PY_AGENT_REACT_CONNECTION_GENERATOR_INFO,\n toProjectRelativePath(\n frontendProjectConfig,\n protocol === 'ag-ui'\n ? joinPathFragments(\n frontendProjectConfig.sourceRoot,\n 'hooks',\n `useAgui${agentNameClassName}`,\n )\n : joinPathFragments(\n frontendProjectConfig.sourceRoot,\n 'components',\n `${agentNameClassName}Provider`,\n ),\n ),\n agentNameClassName,\n connectionMetadata,\n );\n\n await addGeneratorMetricsIfApplicable(tree, [\n PY_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/**\n * Determine the Python module name from the project configuration\n */\nconst getModuleName = (\n projectConfig: ReturnType<typeof readProjectConfigurationUnqualified>,\n): string => {\n if (projectConfig.sourceRoot) {\n const sourceRootParts = projectConfig.sourceRoot.split('/');\n return sourceRootParts[sourceRootParts.length - 1];\n }\n throw new Error(\n `Could not determine sourceRoot for project ${projectConfig.name}`,\n );\n};\n\nexport default pyAgentReactConnectionGenerator;\n"],"names":["generateFiles","joinPathFragments","OverwriteStrategy","updateProjectConfiguration","addAgentRuntimeToConnectionNamespace","DEPENDENCIES","AGUI_DEPENDENCIES","addAgUiReactConnection","resolveAgUiTheme","addOpenApiReactClient","OPEN_API_REACT_DEPENDENCIES","declareDependencies","onlyWhen","formatFilesInSubtree","installDependencies","addGeneratorMetricsIfApplicable","kebabCase","toClassName","toSnakeCase","addComponentGeneratorMetadata","addDependencyToTargetIfNotPresent","getGeneratorInfo","readProjectConfigurationUnqualified","sortObjectKeys","toProjectRelativePath","addPyAgentTargetToLocalDev","openApiClientLocalDevDeps","isHttp","m","protocol","isAgUi","ts","PY_AGENT_REACT_CONNECTION_GENERATOR_INFO","filename","pyAgentReactConnectionGenerator","tree","options","frontendProjectConfig","sourceProject","agentProjectConfig","targetProject","targetComponent","metadata","agentName","name","agentNameClassName","rc","agentPort","port","ports","auth","gatewayRoute","gatewayAuth","toLowerCase","connectionMetadata","theme","Error","additionalLocalDevDeps","moduleName","getModuleName","agentNameSnakeCase","agentTargetPrefix","dirname","root","overwriteStrategy","KeepExisting","openApiTargetName","openApiDist","specPath","targets","cache","executor","outputs","commands","apiName","backendProjectConfig","specBuildProject","specBuildTargetName","isAgentRuntime","skipLocalDev","agentNameKebabCase","length","websiteConfig","additional","additionalDependencyTargets","sourceRoot","preferInstallDependencies","languages","projectConfig","sourceRootParts","split"],"mappings":"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"}
@@ -2,6 +2,7 @@
2
2
  "$schema": "https://json-schema.org/schema",
3
3
  "$id": "py#agent",
4
4
  "title": "py#agent",
5
+ "x-label": "Agent",
5
6
  "description": "Add an AI Agent to a Python project",
6
7
  "type": "object",
7
8
  "properties": {
@@ -35,7 +35,7 @@ exports[`py#dynamodb generator > should generate terraform modules when iac is t
35
35
  required_providers {
36
36
  aws = {
37
37
  source = "hashicorp/aws"
38
- version = "6.55.0"
38
+ version = "6.57.1"
39
39
  }
40
40
  }
41
41
  }
@@ -192,7 +192,7 @@ exports[`py#dynamodb generator > should generate terraform modules when iac is t
192
192
  required_providers {
193
193
  aws = {
194
194
  source = "hashicorp/aws"
195
- version = "6.55.0"
195
+ version = "6.57.1"
196
196
  }
197
197
  random = {
198
198
  source = "hashicorp/random"
@@ -2,6 +2,7 @@
2
2
  "$schema": "https://json-schema.org/schema",
3
3
  "$id": "py#dynamodb",
4
4
  "title": "py#dynamodb",
5
+ "x-label": "DynamoDB",
5
6
  "description": "Create a Python DynamoDB project",
6
7
  "type": "object",
7
8
  "properties": {
@@ -11,7 +11,7 @@ terraform {
11
11
  required_providers {
12
12
  aws = {
13
13
  source = "hashicorp/aws"
14
- version = "6.55.0"
14
+ version = "6.57.1"
15
15
  }
16
16
  }
17
17
  }
@@ -258,7 +258,7 @@ output "api_log_group_arn" {
258
258
  required_providers {
259
259
  aws = {
260
260
  source = "hashicorp/aws"
261
- version = "6.55.0"
261
+ version = "6.57.1"
262
262
  }
263
263
  }
264
264
  }
@@ -771,7 +771,7 @@ terraform {
771
771
  required_providers {
772
772
  aws = {
773
773
  source = "hashicorp/aws"
774
- version = "6.55.0"
774
+ version = "6.57.1"
775
775
  }
776
776
  }
777
777
  }
@@ -1018,7 +1018,7 @@ output "api_log_group_arn" {
1018
1018
  required_providers {
1019
1019
  aws = {
1020
1020
  source = "hashicorp/aws"
1021
- version = "6.55.0"
1021
+ version = "6.57.1"
1022
1022
  }
1023
1023
  }
1024
1024
  }
@@ -1603,7 +1603,7 @@ terraform {
1603
1603
  required_providers {
1604
1604
  aws = {
1605
1605
  source = "hashicorp/aws"
1606
- version = "6.55.0"
1606
+ version = "6.57.1"
1607
1607
  }
1608
1608
  }
1609
1609
  }
@@ -1850,7 +1850,7 @@ output "api_log_group_arn" {
1850
1850
  required_providers {
1851
1851
  aws = {
1852
1852
  source = "hashicorp/aws"
1853
- version = "6.55.0"
1853
+ version = "6.57.1"
1854
1854
  }
1855
1855
  }
1856
1856
  }
@@ -2340,7 +2340,7 @@ terraform {
2340
2340
  required_providers {
2341
2341
  aws = {
2342
2342
  source = "hashicorp/aws"
2343
- version = "6.55.0"
2343
+ version = "6.57.1"
2344
2344
  }
2345
2345
  random = {
2346
2346
  source = "hashicorp/random"
@@ -2596,7 +2596,7 @@ output "waf_web_acl_arn" {
2596
2596
  required_providers {
2597
2597
  aws = {
2598
2598
  source = "hashicorp/aws"
2599
- version = "6.55.0"
2599
+ version = "6.57.1"
2600
2600
  }
2601
2601
  }
2602
2602
  }
@@ -3346,7 +3346,7 @@ terraform {
3346
3346
  required_providers {
3347
3347
  aws = {
3348
3348
  source = "hashicorp/aws"
3349
- version = "6.55.0"
3349
+ version = "6.57.1"
3350
3350
  }
3351
3351
  random = {
3352
3352
  source = "hashicorp/random"
@@ -3602,7 +3602,7 @@ output "waf_web_acl_arn" {
3602
3602
  required_providers {
3603
3603
  aws = {
3604
3604
  source = "hashicorp/aws"
3605
- version = "6.55.0"
3605
+ version = "6.57.1"
3606
3606
  }
3607
3607
  }
3608
3608
  }
@@ -4341,7 +4341,7 @@ terraform {
4341
4341
  required_providers {
4342
4342
  aws = {
4343
4343
  source = "hashicorp/aws"
4344
- version = "6.55.0"
4344
+ version = "6.57.1"
4345
4345
  }
4346
4346
  random = {
4347
4347
  source = "hashicorp/random"
@@ -4597,7 +4597,7 @@ output "waf_web_acl_arn" {
4597
4597
  required_providers {
4598
4598
  aws = {
4599
4599
  source = "hashicorp/aws"
4600
- version = "6.55.0"
4600
+ version = "6.57.1"
4601
4601
  }
4602
4602
  }
4603
4603
  }
@@ -67,6 +67,11 @@ export declare const DEPENDENCIES: import("../../utils/declared-dependencies").D
67
67
  }, {
68
68
  readonly name: "fastapi[standard]";
69
69
  readonly group: "dev";
70
+ }, {
71
+ readonly name: "boto3";
72
+ readonly when: (m: IacMetadata) => boolean;
73
+ } & {
74
+ versionOnly: true;
70
75
  }]>;
71
76
  export declare const FAST_API_GENERATOR_INFO: NxGeneratorInfo;
72
77
  /**
@@ -3,7 +3,7 @@
3
3
  * SPDX-License-Identifier: Apache-2.0
4
4
  */ import { generateFiles, joinPathFragments, OverwriteStrategy, readProjectConfiguration, updateProjectConfiguration } from "@nx/devkit";
5
5
  import { addPyDependencies } from "../../utils/add-dependencies.js";
6
- import { API_CONSTRUCTS_DEPENDENCIES, addApiGatewayInfra } from "../../utils/api-constructs/api-constructs.js";
6
+ import { API_CONSTRUCTS_DEPENDENCIES, API_CONSTRUCTS_PY_DEPENDENCIES, addApiGatewayInfra } from "../../utils/api-constructs/api-constructs.js";
7
7
  import { addSharedConstructsOpenApiMetadataGenerateTarget } from "../../utils/api-constructs/open-api-metadata.js";
8
8
  import { addPythonBundleTarget } from "../../utils/bundle/bundle.js";
9
9
  import { declareDependencies, ownedElsewhere } from "../../utils/declared-dependencies.js";
@@ -47,7 +47,8 @@ export const DEPENDENCIES = declareDependencies()({
47
47
  {
48
48
  name: 'fastapi[standard]',
49
49
  group: 'dev'
50
- }
50
+ },
51
+ ...ownedElsewhere(API_CONSTRUCTS_PY_DEPENDENCIES)
51
52
  ]
52
53
  });
53
54
  export const FAST_API_GENERATOR_INFO = getGeneratorInfo(import.meta.filename);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../packages/nx-plugin/src/py/fast-api/generator.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport {\n type GeneratorCallback,\n generateFiles,\n joinPathFragments,\n OverwriteStrategy,\n type ProjectConfiguration,\n readProjectConfiguration,\n type Tree,\n updateProjectConfiguration,\n} from '@nx/devkit';\nimport { addPyDependencies } from '../../utils/add-dependencies';\nimport {\n API_CONSTRUCTS_DEPENDENCIES,\n addApiGatewayInfra,\n} from '../../utils/api-constructs/api-constructs';\nimport { addSharedConstructsOpenApiMetadataGenerateTarget } from '../../utils/api-constructs/open-api-metadata';\nimport { addPythonBundleTarget } from '../../utils/bundle/bundle';\nimport {\n declareDependencies,\n ownedElsewhere,\n} from '../../utils/declared-dependencies';\nimport { formatFilesInSubtree } from '../../utils/format';\nimport { FS_DEPENDENCIES, FsCommands } from '../../utils/fs';\nimport { resolveIac } from '../../utils/iac';\nimport { installDependencies } from '../../utils/install';\nimport { addGeneratorMetricsIfApplicable } from '../../utils/metrics';\nimport { toClassName, toKebabCase } from '../../utils/names';\nimport {\n addGeneratorMetadata,\n getGeneratorInfo,\n type NxGeneratorInfo,\n} from '../../utils/nx';\nimport { sortObjectKeys } from '../../utils/object';\nimport { assignPort } from '../../utils/port';\nimport {\n SHARED_CONSTRUCTS_DEPENDENCIES,\n sharedConstructsGenerator,\n} from '../../utils/shared-constructs';\nimport type { IacMetadata } from '../../utils/shared-constructs-constants';\nimport pyProjectGenerator, { getPyProjectDetails } from '../project/generator';\nimport { addOpenApiGeneration } from './react/open-api';\nimport type { PyFastApiProjectGeneratorSchema } from './schema';\n\n/** The metadata this generator records, which its predicates read. */\nexport interface PyFastApiMetadata extends IacMetadata {\n readonly apiName: string;\n readonly apiType: string;\n readonly auth: PyFastApiProjectGeneratorSchema['auth'];\n}\n\nexport const DEPENDENCIES = declareDependencies<PyFastApiMetadata>()({\n ts: [\n ...ownedElsewhere(FS_DEPENDENCIES),\n ...ownedElsewhere(SHARED_CONSTRUCTS_DEPENDENCIES),\n ...ownedElsewhere(API_CONSTRUCTS_DEPENDENCIES),\n ],\n py: [\n { name: 'fastapi' },\n { name: 'uvicorn' },\n { name: 'aws-lambda-powertools' },\n { name: 'aws-lambda-powertools[tracer]' },\n // The custom authorizer handler parses its event with the parser extra.\n {\n name: 'aws-lambda-powertools[parser]',\n when: (m) => m.auth === 'custom',\n },\n // `fastapi dev` runs the local server.\n { name: 'fastapi[standard]', group: 'dev' },\n ],\n});\n\nexport const FAST_API_GENERATOR_INFO: NxGeneratorInfo = getGeneratorInfo(\n import.meta.filename,\n);\n\n/**\n * Generates a Python FastAPI project\n */\nexport const pyFastApiProjectGenerator = async (\n tree: Tree,\n schema: PyFastApiProjectGeneratorSchema,\n): Promise<GeneratorCallback> => {\n const integrationPattern = getIntegrationPattern(schema);\n\n const { dir, normalizedModuleName, fullyQualifiedName } = getPyProjectDetails(\n tree,\n {\n name: schema.name,\n directory: schema.directory,\n subDirectory: schema.subDirectory,\n moduleName: schema.moduleName,\n },\n );\n const apiNameKebabCase = toKebabCase(schema.name);\n const apiNameClassName = toClassName(schema.name);\n\n let projectExists: boolean;\n try {\n readProjectConfiguration(tree, fullyQualifiedName);\n projectExists = true;\n } catch {\n projectExists = false;\n }\n\n if (!projectExists) {\n await pyProjectGenerator(tree, {\n name: schema.name,\n directory: schema.directory,\n subDirectory: schema.subDirectory,\n moduleName: normalizedModuleName,\n type: 'application',\n preferInstallDependencies: false,\n });\n }\n\n const projectConfig = readProjectConfiguration(tree, fullyQualifiedName);\n const port = assignPort(tree, projectConfig, 8000);\n\n const { bundleOutputDir, bundleTargetName } =\n addPythonBundleTarget(projectConfig);\n\n // Add a command to copy run.sh to the bundle output for Lambda Web Adapter\n const fs = new FsCommands(tree, DEPENDENCIES);\n const bundleTarget = projectConfig.targets[bundleTargetName];\n const copyRunShCommand = fs.cp(\n `{projectRoot}/run.sh`,\n `dist/{projectRoot}/${bundleTargetName}/run.sh`,\n );\n if (!bundleTarget.options.commands.includes(copyRunShCommand)) {\n bundleTarget.options.commands = [\n ...bundleTarget.options.commands,\n copyRunShCommand,\n ];\n }\n\n projectConfig.targets.serve = {\n executor: '@nxlv/python:run-commands',\n continuous: true,\n options: {\n command: `uv run fastapi dev ${normalizedModuleName}/main.py --port ${port}`,\n cwd: '{projectRoot}',\n },\n };\n\n projectConfig.targets['dev'] = {\n ...projectConfig.targets['dev'],\n ...projectConfig.targets.serve,\n options: {\n ...projectConfig.targets.serve.options,\n env: {\n LOCAL_DEV: 'true',\n },\n },\n };\n\n // Recorded in the metadata below so the version sync can tell a CDK\n // project from a Terraform one; undefined when no infrastructure was\n // generated, in which case neither provider's packages were added.\n const iac =\n schema.infra !== 'none' ? await resolveIac(tree, schema.iac) : undefined;\n\n // Recorded below and read by the declaration's predicates, so the packages\n // added here are exactly the ones the version sync will own.\n const metadata: PyFastApiMetadata = {\n apiName: schema.name,\n apiType: 'fast-api',\n auth: schema.auth,\n ...(iac ? { iac } : {}),\n };\n\n projectConfig.metadata = {\n ...projectConfig.metadata,\n ...metadata,\n } as any;\n\n projectConfig.targets = sortObjectKeys(projectConfig.targets);\n updateProjectConfiguration(tree, fullyQualifiedName, projectConfig);\n\n // Add OpenAPI spec generation to the project, run as part of build\n const { specPath } = addOpenApiGeneration(tree, { project: projectConfig });\n\n [\n joinPathFragments(dir, normalizedModuleName, 'hello.py'),\n joinPathFragments(dir, 'tests', 'test_hello.py'),\n ].forEach((f) => tree.delete(f));\n\n // User-owned source files: preserve any existing copies so re-running does\n // not clobber user edits (and does not reformat them nondeterministically).\n generateFiles(\n tree, // the virtual file system\n joinPathFragments(import.meta.dirname, 'files', 'app'), // path to the file templates\n dir, // destination path of the files\n {\n name: normalizedModuleName,\n apiNameClassName,\n infra: schema.infra,\n },\n {\n overwriteStrategy: OverwriteStrategy.KeepExisting,\n },\n );\n\n if (schema.infra !== 'none') {\n await sharedConstructsGenerator(\n tree,\n {\n iac,\n },\n DEPENDENCIES,\n );\n\n if (schema.auth === 'custom') {\n const authorizerType = schema.infra === 'http-lambda' ? 'http' : 'rest';\n generateFiles(\n tree,\n joinPathFragments(\n import.meta.dirname,\n '..',\n '..',\n 'utils',\n 'api-constructs',\n 'files',\n 'py-authorizer',\n authorizerType,\n ),\n joinPathFragments(dir, normalizedModuleName),\n {},\n {\n overwriteStrategy: OverwriteStrategy.KeepExisting,\n },\n );\n }\n\n // Add the CDK construct to deploy the FastAPI to shared constructs\n await addApiGatewayInfra(\n tree,\n {\n apiProjectName: projectConfig.name,\n apiNameClassName,\n apiNameKebabCase,\n constructType: schema.infra === 'http-lambda' ? 'http' : 'rest',\n backend: {\n type: 'fastapi',\n moduleName: normalizedModuleName,\n bundleOutputDir,\n integrationPattern,\n },\n auth: schema.auth,\n iac,\n },\n DEPENDENCIES,\n );\n\n addSharedConstructsOpenApiMetadataGenerateTarget(tree, {\n iac,\n apiNameKebabCase,\n specPath,\n specBuildTargetName: `${projectConfig.name}:openapi`,\n });\n }\n\n addPyDependencies(tree, DEPENDENCIES, { metadata, projectRoot: dir });\n\n addGeneratorMetadata(tree, fullyQualifiedName, FAST_API_GENERATOR_INFO);\n\n await addGeneratorMetricsIfApplicable(tree, [FAST_API_GENERATOR_INFO]);\n\n await formatFilesInSubtree(tree);\n\n return () =>\n installDependencies(tree, schema.preferInstallDependencies, {\n languages: ['typescript', 'python'],\n });\n};\n\nconst getIntegrationPattern = (\n schema: PyFastApiProjectGeneratorSchema,\n): 'isolated' | 'shared' => schema.integrationPattern ?? 'isolated';\n\nexport default pyFastApiProjectGenerator;\n"],"names":["generateFiles","joinPathFragments","OverwriteStrategy","readProjectConfiguration","updateProjectConfiguration","addPyDependencies","API_CONSTRUCTS_DEPENDENCIES","addApiGatewayInfra","addSharedConstructsOpenApiMetadataGenerateTarget","addPythonBundleTarget","declareDependencies","ownedElsewhere","formatFilesInSubtree","FS_DEPENDENCIES","FsCommands","resolveIac","installDependencies","addGeneratorMetricsIfApplicable","toClassName","toKebabCase","addGeneratorMetadata","getGeneratorInfo","sortObjectKeys","assignPort","SHARED_CONSTRUCTS_DEPENDENCIES","sharedConstructsGenerator","pyProjectGenerator","getPyProjectDetails","addOpenApiGeneration","DEPENDENCIES","ts","py","name","when","m","auth","group","FAST_API_GENERATOR_INFO","filename","pyFastApiProjectGenerator","tree","schema","integrationPattern","getIntegrationPattern","dir","normalizedModuleName","fullyQualifiedName","directory","subDirectory","moduleName","apiNameKebabCase","apiNameClassName","projectExists","type","preferInstallDependencies","projectConfig","port","bundleOutputDir","bundleTargetName","fs","bundleTarget","targets","copyRunShCommand","cp","options","commands","includes","serve","executor","continuous","command","cwd","env","LOCAL_DEV","iac","infra","undefined","metadata","apiName","apiType","specPath","project","forEach","f","delete","dirname","overwriteStrategy","KeepExisting","authorizerType","apiProjectName","constructType","backend","specBuildTargetName","projectRoot","languages"],"mappings":"AAAA;;;CAGC,GACD,SAEEA,aAAa,EACbC,iBAAiB,EACjBC,iBAAiB,EAEjBC,wBAAwB,EAExBC,0BAA0B,QACrB,aAAa;AACpB,SAASC,iBAAiB,QAAQ,kCAA+B;AACjE,SACEC,2BAA2B,EAC3BC,kBAAkB,QACb,+CAA4C;AACnD,SAASC,gDAAgD,QAAQ,kDAA+C;AAChH,SAASC,qBAAqB,QAAQ,+BAA4B;AAClE,SACEC,mBAAmB,EACnBC,cAAc,QACT,uCAAoC;AAC3C,SAASC,oBAAoB,QAAQ,wBAAqB;AAC1D,SAASC,eAAe,EAAEC,UAAU,QAAQ,oBAAiB;AAC7D,SAASC,UAAU,QAAQ,qBAAkB;AAC7C,SAASC,mBAAmB,QAAQ,yBAAsB;AAC1D,SAASC,+BAA+B,QAAQ,yBAAsB;AACtE,SAASC,WAAW,EAAEC,WAAW,QAAQ,uBAAoB;AAC7D,SACEC,oBAAoB,EACpBC,gBAAgB,QAEX,oBAAiB;AACxB,SAASC,cAAc,QAAQ,wBAAqB;AACpD,SAASC,UAAU,QAAQ,sBAAmB;AAC9C,SACEC,8BAA8B,EAC9BC,yBAAyB,QACpB,mCAAgC;AAEvC,OAAOC,sBAAsBC,mBAAmB,QAAQ,0BAAuB;AAC/E,SAASC,oBAAoB,QAAQ,sBAAmB;AAUxD,OAAO,MAAMC,eAAenB,sBAAyC;IACnEoB,IAAI;WACCnB,eAAeE;WACfF,eAAea;WACfb,eAAeL;KACnB;IACDyB,IAAI;QACF;YAAEC,MAAM;QAAU;QAClB;YAAEA,MAAM;QAAU;QAClB;YAAEA,MAAM;QAAwB;QAChC;YAAEA,MAAM;QAAgC;QACxC,wEAAwE;QACxE;YACEA,MAAM;YACNC,MAAM,CAACC,IAAMA,EAAEC,IAAI,KAAK;QAC1B;QACA,uCAAuC;QACvC;YAAEH,MAAM;YAAqBI,OAAO;QAAM;KAC3C;AACH,GAAG;AAEH,OAAO,MAAMC,0BAA2ChB,iBACtD,YAAYiB,QAAQ,EACpB;AAEF;;CAEC,GACD,OAAO,MAAMC,4BAA4B,OACvCC,MACAC;IAEA,MAAMC,qBAAqBC,sBAAsBF;IAEjD,MAAM,EAAEG,GAAG,EAAEC,oBAAoB,EAAEC,kBAAkB,EAAE,GAAGnB,oBACxDa,MACA;QACER,MAAMS,OAAOT,IAAI;QACjBe,WAAWN,OAAOM,SAAS;QAC3BC,cAAcP,OAAOO,YAAY;QACjCC,YAAYR,OAAOQ,UAAU;IAC/B;IAEF,MAAMC,mBAAmB/B,YAAYsB,OAAOT,IAAI;IAChD,MAAMmB,mBAAmBjC,YAAYuB,OAAOT,IAAI;IAEhD,IAAIoB;IACJ,IAAI;QACFjD,yBAAyBqC,MAAMM;QAC/BM,gBAAgB;IAClB,EAAE,OAAM;QACNA,gBAAgB;IAClB;IAEA,IAAI,CAACA,eAAe;QAClB,MAAM1B,mBAAmBc,MAAM;YAC7BR,MAAMS,OAAOT,IAAI;YACjBe,WAAWN,OAAOM,SAAS;YAC3BC,cAAcP,OAAOO,YAAY;YACjCC,YAAYJ;YACZQ,MAAM;YACNC,2BAA2B;QAC7B;IACF;IAEA,MAAMC,gBAAgBpD,yBAAyBqC,MAAMM;IACrD,MAAMU,OAAOjC,WAAWiB,MAAMe,eAAe;IAE7C,MAAM,EAAEE,eAAe,EAAEC,gBAAgB,EAAE,GACzCjD,sBAAsB8C;IAExB,2EAA2E;IAC3E,MAAMI,KAAK,IAAI7C,WAAW0B,MAAMX;IAChC,MAAM+B,eAAeL,cAAcM,OAAO,CAACH,iBAAiB;IAC5D,MAAMI,mBAAmBH,GAAGI,EAAE,CAC5B,CAAC,oBAAoB,CAAC,EACtB,CAAC,mBAAmB,EAAEL,iBAAiB,OAAO,CAAC;IAEjD,IAAI,CAACE,aAAaI,OAAO,CAACC,QAAQ,CAACC,QAAQ,CAACJ,mBAAmB;QAC7DF,aAAaI,OAAO,CAACC,QAAQ,GAAG;eAC3BL,aAAaI,OAAO,CAACC,QAAQ;YAChCH;SACD;IACH;IAEAP,cAAcM,OAAO,CAACM,KAAK,GAAG;QAC5BC,UAAU;QACVC,YAAY;QACZL,SAAS;YACPM,SAAS,CAAC,mBAAmB,EAAEzB,qBAAqB,gBAAgB,EAAEW,MAAM;YAC5Ee,KAAK;QACP;IACF;IAEAhB,cAAcM,OAAO,CAAC,MAAM,GAAG;QAC7B,GAAGN,cAAcM,OAAO,CAAC,MAAM;QAC/B,GAAGN,cAAcM,OAAO,CAACM,KAAK;QAC9BH,SAAS;YACP,GAAGT,cAAcM,OAAO,CAACM,KAAK,CAACH,OAAO;YACtCQ,KAAK;gBACHC,WAAW;YACb;QACF;IACF;IAEA,oEAAoE;IACpE,qEAAqE;IACrE,mEAAmE;IACnE,MAAMC,MACJjC,OAAOkC,KAAK,KAAK,SAAS,MAAM5D,WAAWyB,MAAMC,OAAOiC,GAAG,IAAIE;IAEjE,2EAA2E;IAC3E,6DAA6D;IAC7D,MAAMC,WAA8B;QAClCC,SAASrC,OAAOT,IAAI;QACpB+C,SAAS;QACT5C,MAAMM,OAAON,IAAI;QACjB,GAAIuC,MAAM;YAAEA;QAAI,IAAI,CAAC,CAAC;IACxB;IAEAnB,cAAcsB,QAAQ,GAAG;QACvB,GAAGtB,cAAcsB,QAAQ;QACzB,GAAGA,QAAQ;IACb;IAEAtB,cAAcM,OAAO,GAAGvC,eAAeiC,cAAcM,OAAO;IAC5DzD,2BAA2BoC,MAAMM,oBAAoBS;IAErD,mEAAmE;IACnE,MAAM,EAAEyB,QAAQ,EAAE,GAAGpD,qBAAqBY,MAAM;QAAEyC,SAAS1B;IAAc;IAEzE;QACEtD,kBAAkB2C,KAAKC,sBAAsB;QAC7C5C,kBAAkB2C,KAAK,SAAS;KACjC,CAACsC,OAAO,CAAC,CAACC,IAAM3C,KAAK4C,MAAM,CAACD;IAE7B,2EAA2E;IAC3E,4EAA4E;IAC5EnF,cACEwC,MACAvC,kBAAkB,YAAYoF,OAAO,EAAE,SAAS,QAChDzC,KACA;QACEZ,MAAMa;QACNM;QACAwB,OAAOlC,OAAOkC,KAAK;IACrB,GACA;QACEW,mBAAmBpF,kBAAkBqF,YAAY;IACnD;IAGF,IAAI9C,OAAOkC,KAAK,KAAK,QAAQ;QAC3B,MAAMlD,0BACJe,MACA;YACEkC;QACF,GACA7C;QAGF,IAAIY,OAAON,IAAI,KAAK,UAAU;YAC5B,MAAMqD,iBAAiB/C,OAAOkC,KAAK,KAAK,gBAAgB,SAAS;YACjE3E,cACEwC,MACAvC,kBACE,YAAYoF,OAAO,EACnB,MACA,MACA,SACA,kBACA,SACA,iBACAG,iBAEFvF,kBAAkB2C,KAAKC,uBACvB,CAAC,GACD;gBACEyC,mBAAmBpF,kBAAkBqF,YAAY;YACnD;QAEJ;QAEA,mEAAmE;QACnE,MAAMhF,mBACJiC,MACA;YACEiD,gBAAgBlC,cAAcvB,IAAI;YAClCmB;YACAD;YACAwC,eAAejD,OAAOkC,KAAK,KAAK,gBAAgB,SAAS;YACzDgB,SAAS;gBACPtC,MAAM;gBACNJ,YAAYJ;gBACZY;gBACAf;YACF;YACAP,MAAMM,OAAON,IAAI;YACjBuC;QACF,GACA7C;QAGFrB,iDAAiDgC,MAAM;YACrDkC;YACAxB;YACA8B;YACAY,qBAAqB,GAAGrC,cAAcvB,IAAI,CAAC,QAAQ,CAAC;QACtD;IACF;IAEA3B,kBAAkBmC,MAAMX,cAAc;QAAEgD;QAAUgB,aAAajD;IAAI;IAEnExB,qBAAqBoB,MAAMM,oBAAoBT;IAE/C,MAAMpB,gCAAgCuB,MAAM;QAACH;KAAwB;IAErE,MAAMzB,qBAAqB4B;IAE3B,OAAO,IACLxB,oBAAoBwB,MAAMC,OAAOa,yBAAyB,EAAE;YAC1DwC,WAAW;gBAAC;gBAAc;aAAS;QACrC;AACJ,EAAE;AAEF,MAAMnD,wBAAwB,CAC5BF,SAC0BA,OAAOC,kBAAkB,IAAI;AAEzD,eAAeH,0BAA0B"}
1
+ {"version":3,"sources":["../../../../../../packages/nx-plugin/src/py/fast-api/generator.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport {\n type GeneratorCallback,\n generateFiles,\n joinPathFragments,\n OverwriteStrategy,\n type ProjectConfiguration,\n readProjectConfiguration,\n type Tree,\n updateProjectConfiguration,\n} from '@nx/devkit';\nimport { addPyDependencies } from '../../utils/add-dependencies';\nimport {\n API_CONSTRUCTS_DEPENDENCIES,\n API_CONSTRUCTS_PY_DEPENDENCIES,\n addApiGatewayInfra,\n} from '../../utils/api-constructs/api-constructs';\nimport { addSharedConstructsOpenApiMetadataGenerateTarget } from '../../utils/api-constructs/open-api-metadata';\nimport { addPythonBundleTarget } from '../../utils/bundle/bundle';\nimport {\n declareDependencies,\n ownedElsewhere,\n} from '../../utils/declared-dependencies';\nimport { formatFilesInSubtree } from '../../utils/format';\nimport { FS_DEPENDENCIES, FsCommands } from '../../utils/fs';\nimport { resolveIac } from '../../utils/iac';\nimport { installDependencies } from '../../utils/install';\nimport { addGeneratorMetricsIfApplicable } from '../../utils/metrics';\nimport { toClassName, toKebabCase } from '../../utils/names';\nimport {\n addGeneratorMetadata,\n getGeneratorInfo,\n type NxGeneratorInfo,\n} from '../../utils/nx';\nimport { sortObjectKeys } from '../../utils/object';\nimport { assignPort } from '../../utils/port';\nimport {\n SHARED_CONSTRUCTS_DEPENDENCIES,\n sharedConstructsGenerator,\n} from '../../utils/shared-constructs';\nimport type { IacMetadata } from '../../utils/shared-constructs-constants';\nimport pyProjectGenerator, { getPyProjectDetails } from '../project/generator';\nimport { addOpenApiGeneration } from './react/open-api';\nimport type { PyFastApiProjectGeneratorSchema } from './schema';\n\n/** The metadata this generator records, which its predicates read. */\nexport interface PyFastApiMetadata extends IacMetadata {\n readonly apiName: string;\n readonly apiType: string;\n readonly auth: PyFastApiProjectGeneratorSchema['auth'];\n}\n\nexport const DEPENDENCIES = declareDependencies<PyFastApiMetadata>()({\n ts: [\n ...ownedElsewhere(FS_DEPENDENCIES),\n ...ownedElsewhere(SHARED_CONSTRUCTS_DEPENDENCIES),\n ...ownedElsewhere(API_CONSTRUCTS_DEPENDENCIES),\n ],\n py: [\n { name: 'fastapi' },\n { name: 'uvicorn' },\n { name: 'aws-lambda-powertools' },\n { name: 'aws-lambda-powertools[tracer]' },\n // The custom authorizer handler parses its event with the parser extra.\n {\n name: 'aws-lambda-powertools[parser]',\n when: (m) => m.auth === 'custom',\n },\n // `fastapi dev` runs the local server.\n { name: 'fastapi[standard]', group: 'dev' },\n ...ownedElsewhere(API_CONSTRUCTS_PY_DEPENDENCIES),\n ],\n});\n\nexport const FAST_API_GENERATOR_INFO: NxGeneratorInfo = getGeneratorInfo(\n import.meta.filename,\n);\n\n/**\n * Generates a Python FastAPI project\n */\nexport const pyFastApiProjectGenerator = async (\n tree: Tree,\n schema: PyFastApiProjectGeneratorSchema,\n): Promise<GeneratorCallback> => {\n const integrationPattern = getIntegrationPattern(schema);\n\n const { dir, normalizedModuleName, fullyQualifiedName } = getPyProjectDetails(\n tree,\n {\n name: schema.name,\n directory: schema.directory,\n subDirectory: schema.subDirectory,\n moduleName: schema.moduleName,\n },\n );\n const apiNameKebabCase = toKebabCase(schema.name);\n const apiNameClassName = toClassName(schema.name);\n\n let projectExists: boolean;\n try {\n readProjectConfiguration(tree, fullyQualifiedName);\n projectExists = true;\n } catch {\n projectExists = false;\n }\n\n if (!projectExists) {\n await pyProjectGenerator(tree, {\n name: schema.name,\n directory: schema.directory,\n subDirectory: schema.subDirectory,\n moduleName: normalizedModuleName,\n type: 'application',\n preferInstallDependencies: false,\n });\n }\n\n const projectConfig = readProjectConfiguration(tree, fullyQualifiedName);\n const port = assignPort(tree, projectConfig, 8000);\n\n const { bundleOutputDir, bundleTargetName } =\n addPythonBundleTarget(projectConfig);\n\n // Add a command to copy run.sh to the bundle output for Lambda Web Adapter\n const fs = new FsCommands(tree, DEPENDENCIES);\n const bundleTarget = projectConfig.targets[bundleTargetName];\n const copyRunShCommand = fs.cp(\n `{projectRoot}/run.sh`,\n `dist/{projectRoot}/${bundleTargetName}/run.sh`,\n );\n if (!bundleTarget.options.commands.includes(copyRunShCommand)) {\n bundleTarget.options.commands = [\n ...bundleTarget.options.commands,\n copyRunShCommand,\n ];\n }\n\n projectConfig.targets.serve = {\n executor: '@nxlv/python:run-commands',\n continuous: true,\n options: {\n command: `uv run fastapi dev ${normalizedModuleName}/main.py --port ${port}`,\n cwd: '{projectRoot}',\n },\n };\n\n projectConfig.targets['dev'] = {\n ...projectConfig.targets['dev'],\n ...projectConfig.targets.serve,\n options: {\n ...projectConfig.targets.serve.options,\n env: {\n LOCAL_DEV: 'true',\n },\n },\n };\n\n // Recorded in the metadata below so the version sync can tell a CDK\n // project from a Terraform one; undefined when no infrastructure was\n // generated, in which case neither provider's packages were added.\n const iac =\n schema.infra !== 'none' ? await resolveIac(tree, schema.iac) : undefined;\n\n // Recorded below and read by the declaration's predicates, so the packages\n // added here are exactly the ones the version sync will own.\n const metadata: PyFastApiMetadata = {\n apiName: schema.name,\n apiType: 'fast-api',\n auth: schema.auth,\n ...(iac ? { iac } : {}),\n };\n\n projectConfig.metadata = {\n ...projectConfig.metadata,\n ...metadata,\n } as any;\n\n projectConfig.targets = sortObjectKeys(projectConfig.targets);\n updateProjectConfiguration(tree, fullyQualifiedName, projectConfig);\n\n // Add OpenAPI spec generation to the project, run as part of build\n const { specPath } = addOpenApiGeneration(tree, { project: projectConfig });\n\n [\n joinPathFragments(dir, normalizedModuleName, 'hello.py'),\n joinPathFragments(dir, 'tests', 'test_hello.py'),\n ].forEach((f) => tree.delete(f));\n\n // User-owned source files: preserve any existing copies so re-running does\n // not clobber user edits (and does not reformat them nondeterministically).\n generateFiles(\n tree, // the virtual file system\n joinPathFragments(import.meta.dirname, 'files', 'app'), // path to the file templates\n dir, // destination path of the files\n {\n name: normalizedModuleName,\n apiNameClassName,\n infra: schema.infra,\n },\n {\n overwriteStrategy: OverwriteStrategy.KeepExisting,\n },\n );\n\n if (schema.infra !== 'none') {\n await sharedConstructsGenerator(\n tree,\n {\n iac,\n },\n DEPENDENCIES,\n );\n\n if (schema.auth === 'custom') {\n const authorizerType = schema.infra === 'http-lambda' ? 'http' : 'rest';\n generateFiles(\n tree,\n joinPathFragments(\n import.meta.dirname,\n '..',\n '..',\n 'utils',\n 'api-constructs',\n 'files',\n 'py-authorizer',\n authorizerType,\n ),\n joinPathFragments(dir, normalizedModuleName),\n {},\n {\n overwriteStrategy: OverwriteStrategy.KeepExisting,\n },\n );\n }\n\n // Add the CDK construct to deploy the FastAPI to shared constructs\n await addApiGatewayInfra(\n tree,\n {\n apiProjectName: projectConfig.name,\n apiNameClassName,\n apiNameKebabCase,\n constructType: schema.infra === 'http-lambda' ? 'http' : 'rest',\n backend: {\n type: 'fastapi',\n moduleName: normalizedModuleName,\n bundleOutputDir,\n integrationPattern,\n },\n auth: schema.auth,\n iac,\n },\n DEPENDENCIES,\n );\n\n addSharedConstructsOpenApiMetadataGenerateTarget(tree, {\n iac,\n apiNameKebabCase,\n specPath,\n specBuildTargetName: `${projectConfig.name}:openapi`,\n });\n }\n\n addPyDependencies(tree, DEPENDENCIES, { metadata, projectRoot: dir });\n\n addGeneratorMetadata(tree, fullyQualifiedName, FAST_API_GENERATOR_INFO);\n\n await addGeneratorMetricsIfApplicable(tree, [FAST_API_GENERATOR_INFO]);\n\n await formatFilesInSubtree(tree);\n\n return () =>\n installDependencies(tree, schema.preferInstallDependencies, {\n languages: ['typescript', 'python'],\n });\n};\n\nconst getIntegrationPattern = (\n schema: PyFastApiProjectGeneratorSchema,\n): 'isolated' | 'shared' => schema.integrationPattern ?? 'isolated';\n\nexport default pyFastApiProjectGenerator;\n"],"names":["generateFiles","joinPathFragments","OverwriteStrategy","readProjectConfiguration","updateProjectConfiguration","addPyDependencies","API_CONSTRUCTS_DEPENDENCIES","API_CONSTRUCTS_PY_DEPENDENCIES","addApiGatewayInfra","addSharedConstructsOpenApiMetadataGenerateTarget","addPythonBundleTarget","declareDependencies","ownedElsewhere","formatFilesInSubtree","FS_DEPENDENCIES","FsCommands","resolveIac","installDependencies","addGeneratorMetricsIfApplicable","toClassName","toKebabCase","addGeneratorMetadata","getGeneratorInfo","sortObjectKeys","assignPort","SHARED_CONSTRUCTS_DEPENDENCIES","sharedConstructsGenerator","pyProjectGenerator","getPyProjectDetails","addOpenApiGeneration","DEPENDENCIES","ts","py","name","when","m","auth","group","FAST_API_GENERATOR_INFO","filename","pyFastApiProjectGenerator","tree","schema","integrationPattern","getIntegrationPattern","dir","normalizedModuleName","fullyQualifiedName","directory","subDirectory","moduleName","apiNameKebabCase","apiNameClassName","projectExists","type","preferInstallDependencies","projectConfig","port","bundleOutputDir","bundleTargetName","fs","bundleTarget","targets","copyRunShCommand","cp","options","commands","includes","serve","executor","continuous","command","cwd","env","LOCAL_DEV","iac","infra","undefined","metadata","apiName","apiType","specPath","project","forEach","f","delete","dirname","overwriteStrategy","KeepExisting","authorizerType","apiProjectName","constructType","backend","specBuildTargetName","projectRoot","languages"],"mappings":"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"}
@@ -2,6 +2,7 @@
2
2
  "$schema": "https://json-schema.org/schema",
3
3
  "$id": "PyFastApi",
4
4
  "title": "Create a Python FastAPI project",
5
+ "x-label": "FastAPI",
5
6
  "description": "Create a Python FastAPI project",
6
7
  "type": "object",
7
8
  "properties": {
@@ -70,7 +70,7 @@ exports[`lambda-handler project generator > terraform iac > should generate terr
70
70
  required_providers {
71
71
  aws = {
72
72
  source = "hashicorp/aws"
73
- version = "6.55.0"
73
+ version = "6.57.1"
74
74
  }
75
75
  archive = {
76
76
  source = "hashicorp/archive"
@@ -251,7 +251,7 @@ exports[`lambda-handler project generator > terraform iac > should match snapsho
251
251
  required_providers {
252
252
  aws = {
253
253
  source = "hashicorp/aws"
254
- version = "6.55.0"
254
+ version = "6.57.1"
255
255
  }
256
256
  archive = {
257
257
  source = "hashicorp/archive"
@@ -155,7 +155,7 @@ exports[`py#mcp-server generator > should match snapshot for Terraform generated
155
155
  required_providers {
156
156
  aws = {
157
157
  source = "hashicorp/aws"
158
- version = "6.55.0"
158
+ version = "6.57.1"
159
159
  }
160
160
  null = {
161
161
  source = "hashicorp/null"
@@ -563,7 +563,7 @@ resource "null_resource" "runtime_ready" {
563
563
 
564
564
  provisioner "local-exec" {
565
565
  command = <<-EOT
566
- uv run --with boto3==1.43.51 python -c "
566
+ uv run --with boto3==1.43.63 python -c "
567
567
  import boto3
568
568
  import json
569
569
  import os
@@ -840,9 +840,9 @@ version = "0.1.0"
840
840
  dependencies = [
841
841
  "aws-lambda-powertools==3.31.1",
842
842
  "mcp==1.28.1",
843
- "uvicorn==0.51.0",
844
- "boto3==1.43.51",
845
- "aws-opentelemetry-distro==0.18.0"
843
+ "uvicorn==0.52.1",
844
+ "boto3==1.43.63",
845
+ "aws-opentelemetry-distro==0.19.0"
846
846
  ]
847
847
 
848
848
  [dependency-groups]
@@ -2,6 +2,7 @@
2
2
  "$schema": "https://json-schema.org/schema",
3
3
  "$id": "py#mcp-server",
4
4
  "title": "py#mcp-server",
5
+ "x-label": "MCP Server",
5
6
  "description": "Generate a Python Model Context Protocol (MCP) server for providing context to Large Language Models",
6
7
  "type": "object",
7
8
  "properties": {
@@ -214,7 +214,7 @@ exports[`py#rdb generator > should generate Terraform modules 1`] = `
214
214
  }
215
215
  aws = {
216
216
  source = "hashicorp/aws"
217
- version = "6.55.0"
217
+ version = "6.57.1"
218
218
  }
219
219
  null = {
220
220
  source = "hashicorp/null"
@@ -1501,7 +1501,7 @@ dependencies = [
1501
1501
  "alembic==1.18.5",
1502
1502
  "greenlet==3.5.4",
1503
1503
  "asyncpg==0.31.0",
1504
- "boto3==1.43.51",
1504
+ "boto3==1.43.63",
1505
1505
  "aws-lambda-powertools==3.31.1"
1506
1506
  ]
1507
1507
 
@@ -2,6 +2,7 @@
2
2
  "$schema": "https://json-schema.org/schema",
3
3
  "$id": "py#rdb",
4
4
  "title": "py#rdb",
5
+ "x-label": "Relational Database",
5
6
  "description": "Create a Python relational database project",
6
7
  "type": "object",
7
8
  "properties": {
@@ -256,7 +256,7 @@ RUN smithy-install/smithy/install
256
256
 
257
257
  # Add node dependencies for bundling
258
258
  WORKDIR /project
259
- RUN npm i -g pnpm@11.1.1 rolldown@1.0.0-beta.38
259
+ RUN npm i -g pnpm@11.1.1 rolldown@1.2.2
260
260
 
261
261
  # Copy project files
262
262
  COPY smithy-build.json .
@@ -278,7 +278,7 @@ RUN --mount=type=cache,target=/root/.local/share/pnpm/store,id=pnpm-store \\
278
278
 
279
279
  # Install rolldown plugins with pnpm cache mount
280
280
  RUN --mount=type=cache,target=/root/.local/share/pnpm/store,id=pnpm-store \\
281
- pnpm add -D rolldown-plugin-dts@0.16.5 @rollup/plugin-esm-shim@0.1.8
281
+ pnpm add -D rolldown-plugin-dts@0.28.0 @rollup/plugin-esm-shim@0.1.8
282
282
 
283
283
  RUN cat <<EOF > rolldown.config.js
284
284
  import { dts } from 'rolldown-plugin-dts';
@@ -500,7 +500,7 @@ RUN smithy-install/smithy/install
500
500
 
501
501
  # Add node dependencies for bundling
502
502
  WORKDIR /project
503
- RUN npm i -g pnpm@11.1.1 rolldown@1.0.0-beta.38
503
+ RUN npm i -g pnpm@11.1.1 rolldown@1.2.2
504
504
 
505
505
  # Copy project files
506
506
  COPY smithy-build.json .
@@ -522,7 +522,7 @@ RUN --mount=type=cache,target=/root/.local/share/pnpm/store,id=pnpm-store \\
522
522
 
523
523
  # Install rolldown plugins with pnpm cache mount
524
524
  RUN --mount=type=cache,target=/root/.local/share/pnpm/store,id=pnpm-store \\
525
- pnpm add -D rolldown-plugin-dts@0.16.5 @rollup/plugin-esm-shim@0.1.8
525
+ pnpm add -D rolldown-plugin-dts@0.28.0 @rollup/plugin-esm-shim@0.1.8
526
526
 
527
527
  RUN cat <<EOF > rolldown.config.js
528
528
  import { dts } from 'rolldown-plugin-dts';
@@ -17,7 +17,7 @@ RUN smithy-install/smithy/install
17
17
 
18
18
  # Add node dependencies for bundling
19
19
  WORKDIR /project
20
- RUN npm i -g pnpm@11.1.1 rolldown@1.0.0-beta.38
20
+ RUN npm i -g pnpm@11.1.1 rolldown@<%- rolldownVersion %>
21
21
 
22
22
  # Copy project files
23
23
  COPY smithy-build.json .
@@ -39,7 +39,7 @@ RUN --mount=type=cache,target=/root/.local/share/pnpm/store,id=pnpm-store \
39
39
 
40
40
  # Install rolldown plugins with pnpm cache mount
41
41
  RUN --mount=type=cache,target=/root/.local/share/pnpm/store,id=pnpm-store \
42
- pnpm add -D rolldown-plugin-dts@0.16.5 @rollup/plugin-esm-shim@0.1.8
42
+ pnpm add -D rolldown-plugin-dts@<%- rolldownDtsVersion %> @rollup/plugin-esm-shim@<%- esmShimVersion %>
43
43
 
44
44
  RUN cat <<EOF > rolldown.config.js
45
45
  import { dts } from 'rolldown-plugin-dts';