@aws/nx-plugin 1.3.1 → 1.3.3

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 (56) hide show
  1. package/LICENSE-THIRD-PARTY +21421 -10904
  2. package/migrations.json +11 -6
  3. package/package.json +4 -4
  4. package/src/agentcore-gateway/__snapshots__/generator.spec.ts.snap +1 -1
  5. package/src/greengrass/component/python/__snapshots__/generator.spec.ts.snap +2 -2
  6. package/src/infra/app/__snapshots__/generator.spec.ts.snap +3 -3
  7. package/src/migrations/v1.0.15/0001-py-agent-pillow-override/migration.d.ts +5 -5
  8. package/src/migrations/v1.0.15/0001-py-agent-pillow-override/migration.js +75 -3
  9. package/src/migrations/v1.0.15/0001-py-agent-pillow-override/migration.js.map +1 -1
  10. package/src/migrations/v1.3.1/0001-biome-markdown-yaml-formatter-off/migration.js.map +1 -0
  11. package/src/migrations/v1.3.2/0001-py-agentcore-launcher/metadata.json +3 -0
  12. package/src/migrations/v1.3.2/0001-py-agentcore-launcher/migration.d.ts +7 -0
  13. package/src/migrations/v1.3.2/0001-py-agentcore-launcher/migration.js +100 -0
  14. package/src/migrations/v1.3.2/0001-py-agentcore-launcher/migration.js.map +1 -0
  15. package/src/preset/__snapshots__/generator.spec.ts.snap +2 -2
  16. package/src/py/agent/__snapshots__/generator.constructs.spec.ts.snap +6 -6
  17. package/src/py/agent/__snapshots__/generator.frameworks.spec.ts.snap +7 -7
  18. package/src/py/agent/__snapshots__/generator.protocols.spec.ts.snap +4 -4
  19. package/src/py/agent/generator.js +2 -2
  20. package/src/py/agent/generator.js.map +1 -1
  21. package/src/py/agent/guardrails/__snapshots__/generator.spec.ts.snap +6 -6
  22. package/src/py/dynamodb/__snapshots__/generator.spec.ts.snap +2 -2
  23. package/src/py/fast-api/__snapshots__/generator.terraform.spec.ts.snap +12 -12
  24. package/src/py/lambda-function/__snapshots__/generator.spec.ts.snap +2 -2
  25. package/src/py/mcp-server/__snapshots__/generator.spec.ts.snap +5 -5
  26. package/src/py/mcp-server/generator.js +2 -2
  27. package/src/py/mcp-server/generator.js.map +1 -1
  28. package/src/py/rdb/__snapshots__/generator.spec.ts.snap +3 -3
  29. package/src/smithy/project/__snapshots__/generator.spec.ts.snap +7 -7
  30. package/src/smithy/ts/api/__snapshots__/generator.spec.ts.snap +8 -8
  31. package/src/trpc/backend/__snapshots__/generator.spec.ts.snap +12 -12
  32. package/src/ts/agent/__snapshots__/generator.spec.ts.snap +3 -3
  33. package/src/ts/agent/guardrails/__snapshots__/generator.spec.ts.snap +3 -3
  34. package/src/ts/dcr-proxy/__snapshots__/generator.spec.ts.snap +1 -1
  35. package/src/ts/dynamodb/__snapshots__/generator.spec.ts.snap +2 -2
  36. package/src/ts/lambda-function/__snapshots__/generator.spec.ts.snap +2 -2
  37. package/src/ts/mcp-server/__snapshots__/generator.spec.ts.snap +2 -2
  38. package/src/ts/rdb/__snapshots__/generator.spec.ts.snap +4 -4
  39. package/src/ts/react-website/app/__snapshots__/generator.spec.ts.snap +14 -14
  40. package/src/ts/react-website/cognito-auth/__snapshots__/generator.terraform.spec.ts.snap +2 -2
  41. package/src/utils/agent-core-constructs/files/cdk/app/agent-core/__nameKebabCase__/__nameKebabCase__.ts.template +1 -1
  42. package/src/utils/agent-core-constructs/files/terraform/core/agent-core-code/runtime.tf.template +1 -1
  43. package/src/utils/agent-core-packaging.d.ts +7 -4
  44. package/src/utils/agent-core-packaging.js +28 -6
  45. package/src/utils/agent-core-packaging.js.map +1 -1
  46. package/src/utils/py.d.ts +0 -10
  47. package/src/utils/py.js +2 -59
  48. package/src/utils/py.js.map +1 -1
  49. package/src/utils/test/fake-aws/fake_aws.py +8 -2
  50. package/src/utils/versions.d.ts +62 -70
  51. package/src/utils/versions.js +60 -73
  52. package/src/utils/versions.js.map +1 -1
  53. package/src/migrations/latest/biome-markdown-yaml-formatter-off/migration.js.map +0 -1
  54. /package/src/migrations/{latest/biome-markdown-yaml-formatter-off → v1.3.1/0001-biome-markdown-yaml-formatter-off}/metadata.json +0 -0
  55. /package/src/migrations/{latest/biome-markdown-yaml-formatter-off → v1.3.1/0001-biome-markdown-yaml-formatter-off}/migration.d.ts +0 -0
  56. /package/src/migrations/{latest/biome-markdown-yaml-formatter-off → v1.3.1/0001-biome-markdown-yaml-formatter-off}/migration.js +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../packages/nx-plugin/src/utils/agent-core-packaging.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport {\n joinPathFragments,\n type ProjectConfiguration,\n type Tree,\n} from '@nx/devkit';\nimport {\n type DependencyDeclaration,\n forDependencies,\n type MustDeclare,\n} from './declared-dependencies.js';\nimport { FS_DEPENDENCIES, FsCommands } from './fs.js';\nimport {\n addArtifactDependencyToTargets,\n normalizeTargetKeyOrder,\n} from './nx.js';\nimport {\n agentCoreRuntime,\n type ITsDepVersion,\n TS_VERSIONS,\n} from './versions.js';\n\n/**\n * How an AgentCore Runtime's artifact is packaged and hosted.\n *\n * `agentcore` uploads a `.zip` of the built code to S3 and runs it on an\n * AgentCore managed language runtime, which skips the container build, ECR\n * repository and image push entirely — the fastest build and deploy cycle.\n * `agentcore-ecr` builds an arm64 container image and hosts it from ECR, for\n * workloads needing OS-level control (e.g. native system libraries) or an\n * established container pipeline.\n */\nexport const AGENT_CORE_INFRA = ['agentcore', 'agentcore-ecr', 'none'] as const;\n\nexport type AgentCoreInfra = (typeof AGENT_CORE_INFRA)[number];\n\n/** Whether the given infra option hosts on AgentCore Runtime at all. */\nexport const isAgentCoreHosted = (infra: AgentCoreInfra): boolean =>\n infra === 'agentcore' || infra === 'agentcore-ecr';\n\n/** Whether the given infra option builds and hosts a container image. */\nexport const isContainerHosted = (infra: AgentCoreInfra): boolean =>\n infra === 'agentcore-ecr';\n\n/** The AgentCore managed runtime a TypeScript component targets. */\nexport const agentCoreNodeRuntime = (): string => agentCoreRuntime('node');\n\n/** The AgentCore managed runtime a Python component targets. */\nexport const agentCorePythonRuntime = (): string => agentCoreRuntime('python');\n\n/**\n * Dependencies a caller must declare to add a code (`.zip`) packaging target.\n *\n * The TypeScript package target vendors the AWS Distro for OpenTelemetry into\n * the package directory, so its version is declared here (spread through\n * `ownedElsewhere` by callers, since the install targets the built package\n * rather than any workspace manifest).\n */\nexport const CODE_PACKAGE_DEPENDENCIES = [\n ...FS_DEPENDENCIES,\n { name: '@aws/aws-distro-opentelemetry-node-autoinstrumentation' },\n] as const satisfies readonly { name: ITsDepVersion }[];\n\nexport interface AddTypeScriptCodePackageTargetOptions {\n /** Project configuration to add the target to (mutated in place). */\n readonly project: ProjectConfiguration;\n /** Name of the packaging target to add, e.g. `agent-package`. */\n readonly targetName: string;\n /** Name of the target producing the bundled `index.js`, depended on here. */\n readonly bundleTargetName: string;\n /** Directory holding the bundled `index.js`, relative to the workspace root. */\n readonly bundleOutputDir: string;\n /** Directory to assemble the deployable package in, relative to the workspace root. */\n readonly packageOutputDir: string;\n}\n\n/**\n * Name of the target that installs ADOT for the project's code packages. Every\n * code package in a project vendors the same thing, so they share one.\n */\nexport const ADOT_VENDOR_TARGET_NAME = 'agent-core-vendor';\n\n/**\n * Directory the vendor target installs into, relative to the workspace root.\n *\n * A sibling of the `package` directory rather than a path inside it: Nx replaces\n * a cached target's whole declared output directory on restore, so an output\n * nested inside another target's output would have each wipe the other's work on\n * a cache hit.\n */\nexport const adotVendorDir = (projectRoot: string): string =>\n joinPathFragments('dist', projectRoot, 'agent-core-vendor');\n\n/**\n * Add a target assembling the deployable code package for a TypeScript\n * AgentCore Runtime.\n *\n * The package is the rolldown bundle plus a vendored AWS Distro for\n * OpenTelemetry install. AgentCore rejects a code package with no OpenTelemetry\n * dependencies present (`CREATE_FAILED`: \"OpenTelemetry instrumentation\n * executable not found\"), so ADOT must ship inside the package rather than\n * being installed at runtime — the `opentelemetry-instrument` entry point\n * prefix resolves it from there.\n *\n * The install is scoped to its own directory with `--prefix` and `--no-save`, so\n * it never touches the project's own manifest. `--omit=dev` keeps the package to\n * what the runtime loads. ADOT is pure JavaScript with no native binaries, so the\n * package is architecture independent even though AgentCore only runs arm64.\n *\n * Vendoring is a separate target so Nx caches it independently of the source. It\n * depends on nothing but the pinned ADOT version, which the install command\n * carries and Nx hashes as part of the target's configuration, so it declares no\n * `inputs`: editing an agent replays a directory copy rather than re-running the\n * install, while bumping the version still invalidates it.\n */\nexport const addTypeScriptCodePackageTarget = <\n const D extends DependencyDeclaration,\n>(\n tree: Tree,\n options: AddTypeScriptCodePackageTargetOptions,\n declaration: D & MustDeclare<typeof CODE_PACKAGE_DEPENDENCIES, D>,\n): void => {\n const {\n project,\n targetName,\n bundleTargetName,\n bundleOutputDir,\n packageOutputDir,\n } = options;\n\n const fs = new FsCommands(\n tree,\n forDependencies<typeof FS_DEPENDENCIES>(declaration),\n );\n const adotVersion =\n TS_VERSIONS['@aws/aws-distro-opentelemetry-node-autoinstrumentation'];\n const vendorDir = adotVendorDir(project.root);\n\n project.targets ??= {};\n\n // Shared by every code package in the project, so only added once.\n project.targets[ADOT_VENDOR_TARGET_NAME] ??= {\n cache: true,\n inputs: [],\n outputs: [`{workspaceRoot}/${vendorDir}`],\n executor: 'nx:run-commands',\n options: {\n commands: [\n fs.rm(vendorDir),\n fs.mkdir(vendorDir),\n `npm install --prefix ${vendorDir} --no-save --no-audit --no-fund --omit=dev @aws/aws-distro-opentelemetry-node-autoinstrumentation@${adotVersion}`,\n ],\n parallel: false,\n },\n };\n\n project.targets[targetName] = normalizeTargetKeyOrder({\n cache: true,\n inputs: ['default'],\n outputs: [`{workspaceRoot}/${packageOutputDir}`],\n executor: 'nx:run-commands',\n options: {\n commands: [\n fs.rm(packageOutputDir),\n fs.mkdir(packageOutputDir),\n fs.cpFile(\n joinPathFragments(bundleOutputDir, 'index.js'),\n joinPathFragments(packageOutputDir, 'index.js'),\n ),\n fs.cpDir(\n joinPathFragments(vendorDir, 'node_modules'),\n joinPathFragments(packageOutputDir, 'node_modules'),\n ),\n ],\n parallel: false,\n },\n dependsOn: [bundleTargetName, ADOT_VENDOR_TARGET_NAME],\n });\n\n addArtifactDependencyToTargets(project, targetName);\n};\n\nexport interface AddPythonCodePackageTargetOptions {\n /** Project configuration to add the target to (mutated in place). */\n readonly project: ProjectConfiguration;\n /** Name of the packaging target to add, e.g. `agent-package`. */\n readonly targetName: string;\n /** Name of the arm64 bundle target, depended on here. */\n readonly bundleTargetName: string;\n /** Directory holding the arm64 bundle, relative to the workspace root. */\n readonly bundleOutputDir: string;\n /** Directory to assemble the deployable package in, relative to the workspace root. */\n readonly packageOutputDir: string;\n /**\n * The project's source root, which is itself the module directory — copied\n * into the package under {@link moduleName} so the agent's imports resolve.\n */\n readonly sourceRoot: string;\n /** Python module name (the source root's last segment). */\n readonly moduleName: string;\n /**\n * Path to the entry point script, relative to the workspace root. Copied to\n * the package root, where AgentCore's `entryPoint` runs it.\n */\n readonly entryPointPath: string;\n /** File name the entry point takes at the package root. */\n readonly entryPointFileName: string;\n}\n\n/**\n * Add a target assembling the deployable code package for a Python AgentCore\n * Runtime.\n *\n * The package is the arm64 dependency bundle (which already carries\n * `bin/opentelemetry-instrument` from `aws-opentelemetry-distro`, satisfying\n * AgentCore's requirement that OpenTelemetry be present), the project's own\n * module tree, and a root entry point script.\n *\n * The entry point sits at the package root rather than inside the module:\n * AgentCore runs it as a file path, and Python gives a script run that way no\n * parent package, so the agent's own `from .init import app` would raise\n * `ImportError: attempted relative import with no known parent package`. The\n * root script imports the module absolutely instead, which resolves those\n * relative imports normally.\n */\nexport const addPythonCodePackageTarget = <\n const D extends DependencyDeclaration,\n>(\n tree: Tree,\n options: AddPythonCodePackageTargetOptions,\n declaration: D & MustDeclare<typeof FS_DEPENDENCIES, D>,\n): void => {\n const {\n project,\n targetName,\n bundleTargetName,\n bundleOutputDir,\n packageOutputDir,\n sourceRoot,\n moduleName,\n entryPointPath,\n entryPointFileName,\n } = options;\n\n const fs = new FsCommands(\n tree,\n forDependencies<typeof FS_DEPENDENCIES>(declaration),\n );\n\n project.targets ??= {};\n project.targets[targetName] = normalizeTargetKeyOrder({\n cache: true,\n inputs: ['production', '^production'],\n outputs: [`{workspaceRoot}/${packageOutputDir}`],\n executor: 'nx:run-commands',\n options: {\n commands: [\n fs.rm(packageOutputDir),\n fs.mkdir(packageOutputDir),\n fs.cpDir(bundleOutputDir, packageOutputDir),\n fs.cpDir(sourceRoot, joinPathFragments(packageOutputDir, moduleName)),\n fs.cpFile(\n entryPointPath,\n joinPathFragments(packageOutputDir, entryPointFileName),\n ),\n ],\n parallel: false,\n },\n dependsOn: [bundleTargetName],\n });\n\n addArtifactDependencyToTargets(project, targetName);\n};\n"],"names":["joinPathFragments","forDependencies","FS_DEPENDENCIES","FsCommands","addArtifactDependencyToTargets","normalizeTargetKeyOrder","agentCoreRuntime","TS_VERSIONS","AGENT_CORE_INFRA","isAgentCoreHosted","infra","isContainerHosted","agentCoreNodeRuntime","agentCorePythonRuntime","CODE_PACKAGE_DEPENDENCIES","name","ADOT_VENDOR_TARGET_NAME","adotVendorDir","projectRoot","addTypeScriptCodePackageTarget","tree","options","declaration","project","targetName","bundleTargetName","bundleOutputDir","packageOutputDir","fs","adotVersion","vendorDir","root","targets","cache","inputs","outputs","executor","commands","rm","mkdir","parallel","cpFile","cpDir","dependsOn","addPythonCodePackageTarget","sourceRoot","moduleName","entryPointPath","entryPointFileName"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../packages/nx-plugin/src/utils/agent-core-packaging.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { dirname } from 'node:path';\nimport {\n joinPathFragments,\n type ProjectConfiguration,\n type Tree,\n} from '@nx/devkit';\nimport {\n type DependencyDeclaration,\n forDependencies,\n type MustDeclare,\n} from './declared-dependencies.js';\nimport { FS_DEPENDENCIES, FsCommands } from './fs.js';\nimport {\n addArtifactDependencyToTargets,\n normalizeTargetKeyOrder,\n} from './nx.js';\nimport {\n agentCoreRuntime,\n type ITsDepVersion,\n TS_VERSIONS,\n} from './versions.js';\n\n/**\n * How an AgentCore Runtime's artifact is packaged and hosted.\n *\n * `agentcore` uploads a `.zip` of the built code to S3 and runs it on an\n * AgentCore managed language runtime, which skips the container build, ECR\n * repository and image push entirely — the fastest build and deploy cycle.\n * `agentcore-ecr` builds an arm64 container image and hosts it from ECR, for\n * workloads needing OS-level control (e.g. native system libraries) or an\n * established container pipeline.\n */\nexport const AGENT_CORE_INFRA = ['agentcore', 'agentcore-ecr', 'none'] as const;\n\nexport type AgentCoreInfra = (typeof AGENT_CORE_INFRA)[number];\n\n/** Whether the given infra option hosts on AgentCore Runtime at all. */\nexport const isAgentCoreHosted = (infra: AgentCoreInfra): boolean =>\n infra === 'agentcore' || infra === 'agentcore-ecr';\n\n/** Whether the given infra option builds and hosts a container image. */\nexport const isContainerHosted = (infra: AgentCoreInfra): boolean =>\n infra === 'agentcore-ecr';\n\n/** The AgentCore managed runtime a TypeScript component targets. */\nexport const agentCoreNodeRuntime = (): string => agentCoreRuntime('node');\n\n/** The AgentCore managed runtime a Python component targets. */\nexport const agentCorePythonRuntime = (): string => agentCoreRuntime('python');\n\nexport const PYTHON_AGENT_CORE_LAUNCHER = 'agentcore_launcher.py';\n\n/** Run instrumentation with the managed interpreter, independent of console-script shebangs. */\nexport const pythonAgentCoreLauncher = (\n entryPointFileName: string,\n): string => `\\\nimport sys\nfrom pathlib import Path\n\nfrom opentelemetry.instrumentation.auto_instrumentation import run\n\nif __name__ == \"__main__\":\n sys.argv = [\n \"opentelemetry-instrument\",\n sys.executable,\n str(Path(__file__).with_name(${JSON.stringify(entryPointFileName)})),\n *sys.argv[1:],\n ]\n run()\n`;\n\n/**\n * Dependencies a caller must declare to add a code (`.zip`) packaging target.\n *\n * The TypeScript package target vendors the AWS Distro for OpenTelemetry into\n * the package directory, so its version is declared here (spread through\n * `ownedElsewhere` by callers, since the install targets the built package\n * rather than any workspace manifest).\n */\nexport const CODE_PACKAGE_DEPENDENCIES = [\n ...FS_DEPENDENCIES,\n { name: '@aws/aws-distro-opentelemetry-node-autoinstrumentation' },\n] as const satisfies readonly { name: ITsDepVersion }[];\n\nexport interface AddTypeScriptCodePackageTargetOptions {\n /** Project configuration to add the target to (mutated in place). */\n readonly project: ProjectConfiguration;\n /** Name of the packaging target to add, e.g. `agent-package`. */\n readonly targetName: string;\n /** Name of the target producing the bundled `index.js`, depended on here. */\n readonly bundleTargetName: string;\n /** Directory holding the bundled `index.js`, relative to the workspace root. */\n readonly bundleOutputDir: string;\n /** Directory to assemble the deployable package in, relative to the workspace root. */\n readonly packageOutputDir: string;\n}\n\n/**\n * Name of the target that installs ADOT for the project's code packages. Every\n * code package in a project vendors the same thing, so they share one.\n */\nexport const ADOT_VENDOR_TARGET_NAME = 'agent-core-vendor';\n\n/**\n * Directory the vendor target installs into, relative to the workspace root.\n *\n * A sibling of the `package` directory rather than a path inside it: Nx replaces\n * a cached target's whole declared output directory on restore, so an output\n * nested inside another target's output would have each wipe the other's work on\n * a cache hit.\n */\nexport const adotVendorDir = (projectRoot: string): string =>\n joinPathFragments('dist', projectRoot, 'agent-core-vendor');\n\n/**\n * Add a target assembling the deployable code package for a TypeScript\n * AgentCore Runtime.\n *\n * The package is the rolldown bundle plus a vendored AWS Distro for\n * OpenTelemetry install. AgentCore rejects a code package with no OpenTelemetry\n * dependencies present (`CREATE_FAILED`: \"OpenTelemetry instrumentation\n * executable not found\"), so ADOT must ship inside the package rather than\n * being installed at runtime — the `opentelemetry-instrument` entry point\n * prefix resolves it from there.\n *\n * The install is scoped to its own directory with `--prefix` and `--no-save`, so\n * it never touches the project's own manifest. `--omit=dev` keeps the package to\n * what the runtime loads. ADOT is pure JavaScript with no native binaries, so the\n * package is architecture independent even though AgentCore only runs arm64.\n *\n * Vendoring is a separate target so Nx caches it independently of the source. It\n * depends on nothing but the pinned ADOT version, which the install command\n * carries and Nx hashes as part of the target's configuration, so it declares no\n * `inputs`: editing an agent replays a directory copy rather than re-running the\n * install, while bumping the version still invalidates it.\n */\nexport const addTypeScriptCodePackageTarget = <\n const D extends DependencyDeclaration,\n>(\n tree: Tree,\n options: AddTypeScriptCodePackageTargetOptions,\n declaration: D & MustDeclare<typeof CODE_PACKAGE_DEPENDENCIES, D>,\n): void => {\n const {\n project,\n targetName,\n bundleTargetName,\n bundleOutputDir,\n packageOutputDir,\n } = options;\n\n const fs = new FsCommands(\n tree,\n forDependencies<typeof FS_DEPENDENCIES>(declaration),\n );\n const adotVersion =\n TS_VERSIONS['@aws/aws-distro-opentelemetry-node-autoinstrumentation'];\n const vendorDir = adotVendorDir(project.root);\n\n project.targets ??= {};\n\n // Shared by every code package in the project, so only added once.\n project.targets[ADOT_VENDOR_TARGET_NAME] ??= {\n cache: true,\n inputs: [],\n outputs: [`{workspaceRoot}/${vendorDir}`],\n executor: 'nx:run-commands',\n options: {\n commands: [\n fs.rm(vendorDir),\n fs.mkdir(vendorDir),\n `npm install --prefix ${vendorDir} --no-save --no-audit --no-fund --omit=dev @aws/aws-distro-opentelemetry-node-autoinstrumentation@${adotVersion}`,\n ],\n parallel: false,\n },\n };\n\n project.targets[targetName] = normalizeTargetKeyOrder({\n cache: true,\n inputs: ['default'],\n outputs: [`{workspaceRoot}/${packageOutputDir}`],\n executor: 'nx:run-commands',\n options: {\n commands: [\n fs.rm(packageOutputDir),\n fs.mkdir(packageOutputDir),\n fs.cpFile(\n joinPathFragments(bundleOutputDir, 'index.js'),\n joinPathFragments(packageOutputDir, 'index.js'),\n ),\n fs.cpDir(\n joinPathFragments(vendorDir, 'node_modules'),\n joinPathFragments(packageOutputDir, 'node_modules'),\n ),\n ],\n parallel: false,\n },\n dependsOn: [bundleTargetName, ADOT_VENDOR_TARGET_NAME],\n });\n\n addArtifactDependencyToTargets(project, targetName);\n};\n\nexport interface AddPythonCodePackageTargetOptions {\n /** Project configuration to add the target to (mutated in place). */\n readonly project: ProjectConfiguration;\n /** Name of the packaging target to add, e.g. `agent-package`. */\n readonly targetName: string;\n /** Name of the arm64 bundle target, depended on here. */\n readonly bundleTargetName: string;\n /** Directory holding the arm64 bundle, relative to the workspace root. */\n readonly bundleOutputDir: string;\n /** Directory to assemble the deployable package in, relative to the workspace root. */\n readonly packageOutputDir: string;\n /**\n * The project's source root, which is itself the module directory — copied\n * into the package under {@link moduleName} so the agent's imports resolve.\n */\n readonly sourceRoot: string;\n /** Python module name (the source root's last segment). */\n readonly moduleName: string;\n /**\n * Path to the entry point script, relative to the workspace root. Copied to\n * the package root, where AgentCore's `entryPoint` runs it.\n */\n readonly entryPointPath: string;\n /** File name the entry point takes at the package root. */\n readonly entryPointFileName: string;\n}\n\n/**\n * Add a target assembling the deployable code package for a Python AgentCore\n * Runtime.\n *\n * The package contains the arm64 dependency bundle with `aws-opentelemetry-distro`,\n * the project's module tree, its root entry point and an instrumentation launcher.\n * The launcher calls OpenTelemetry's `run()` with `sys.executable` and the original\n * entry point, so a console-script shebang cannot select the build machine's Python.\n *\n * The entry point sits at the package root rather than inside the module:\n * AgentCore runs it as a file path, and Python gives a script run that way no\n * parent package, so the agent's own `from .init import app` would raise\n * `ImportError: attempted relative import with no known parent package`. The\n * root script imports the module absolutely instead, which resolves those\n * relative imports normally.\n */\nexport const addPythonCodePackageTarget = <\n const D extends DependencyDeclaration,\n>(\n tree: Tree,\n options: AddPythonCodePackageTargetOptions,\n declaration: D & MustDeclare<typeof FS_DEPENDENCIES, D>,\n): void => {\n const {\n project,\n targetName,\n bundleTargetName,\n bundleOutputDir,\n packageOutputDir,\n sourceRoot,\n moduleName,\n entryPointPath,\n entryPointFileName,\n } = options;\n\n const fs = new FsCommands(\n tree,\n forDependencies<typeof FS_DEPENDENCIES>(declaration),\n );\n\n const launcherPath = joinPathFragments(\n dirname(entryPointPath),\n PYTHON_AGENT_CORE_LAUNCHER,\n );\n if (!tree.exists(launcherPath)) {\n tree.write(launcherPath, pythonAgentCoreLauncher(entryPointFileName));\n }\n\n project.targets ??= {};\n project.targets[targetName] = normalizeTargetKeyOrder({\n cache: true,\n inputs: ['production', '^production'],\n outputs: [`{workspaceRoot}/${packageOutputDir}`],\n executor: 'nx:run-commands',\n options: {\n commands: [\n fs.rm(packageOutputDir),\n fs.mkdir(packageOutputDir),\n fs.cpDir(bundleOutputDir, packageOutputDir),\n fs.cpDir(sourceRoot, joinPathFragments(packageOutputDir, moduleName)),\n fs.cpFile(\n entryPointPath,\n joinPathFragments(packageOutputDir, entryPointFileName),\n ),\n fs.cpFile(\n launcherPath,\n joinPathFragments(packageOutputDir, PYTHON_AGENT_CORE_LAUNCHER),\n ),\n ],\n parallel: false,\n },\n dependsOn: [bundleTargetName],\n });\n\n addArtifactDependencyToTargets(project, targetName);\n};\n"],"names":["dirname","joinPathFragments","forDependencies","FS_DEPENDENCIES","FsCommands","addArtifactDependencyToTargets","normalizeTargetKeyOrder","agentCoreRuntime","TS_VERSIONS","AGENT_CORE_INFRA","isAgentCoreHosted","infra","isContainerHosted","agentCoreNodeRuntime","agentCorePythonRuntime","PYTHON_AGENT_CORE_LAUNCHER","pythonAgentCoreLauncher","entryPointFileName","JSON","stringify","CODE_PACKAGE_DEPENDENCIES","name","ADOT_VENDOR_TARGET_NAME","adotVendorDir","projectRoot","addTypeScriptCodePackageTarget","tree","options","declaration","project","targetName","bundleTargetName","bundleOutputDir","packageOutputDir","fs","adotVersion","vendorDir","root","targets","cache","inputs","outputs","executor","commands","rm","mkdir","parallel","cpFile","cpDir","dependsOn","addPythonCodePackageTarget","sourceRoot","moduleName","entryPointPath","launcherPath","exists","write"],"mappings":"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"}
package/src/utils/py.d.ts CHANGED
@@ -5,16 +5,6 @@ import { type IPyDepVersion } from './versions.js';
5
5
  * Add dependencies to a pyproject.toml file
6
6
  */
7
7
  export declare const addDependenciesToPyProjectToml: <const D extends DependencyDeclaration>(tree: Tree, projectRoot: string, declaration: D, deps: readonly DeclaredPy<D>[]) => void;
8
- /**
9
- * Add the `PY_UV_OVERRIDES` entries for the packages named in `requirements`
10
- * to the workspace root `[tool.uv] override-dependencies`, which is the only
11
- * place uv reads overrides from.
12
- *
13
- * Existing entries keep their order, and a package the list already overrides
14
- * is left as the user wrote it. The root file is written only when an entry is
15
- * added. Returns whether it was.
16
- */
17
- export declare const addUvOverrideDependencies: (tree: Tree, requirements: readonly string[]) => boolean;
18
8
  export declare const addDependenciesToDependencyGroupInPyProjectToml: <const D extends DependencyDeclaration>(tree: Tree, projectRoot: string, group: string, declaration: D, deps: readonly DeclaredPy<D>[]) => void;
19
9
  export interface UvxWithDep {
20
10
  dep: string;
package/src/utils/py.js CHANGED
@@ -5,8 +5,8 @@
5
5
  import { joinPathFragments } from "@nx/devkit";
6
6
  import { parsePipRequirementsLine } from "pip-requirements-js";
7
7
  import { normalizeDistributionName } from "./names.js";
8
- import { readToml, tryReadToml, updateToml } from "./toml.js";
9
- import { PY_UV_OVERRIDES, PY_VERSIONS, withPyVersions } from "./versions.js";
8
+ import { readToml, updateToml } from "./toml.js";
9
+ import { PY_VERSIONS, withPyVersions } from "./versions.js";
10
10
  // Dedup key that distinguishes bare packages from the same package with
11
11
  // extras (e.g. `foo` vs `foo[bar]`), so adding a bare dep doesn't drop a
12
12
  // previously-added variant with extras.
@@ -43,63 +43,6 @@ const mergeDeps = (declaration, existing, deps)=>{
43
43
  const projectToml = parse(tree.read(joinPathFragments(projectRoot, 'pyproject.toml'), 'utf8'));
44
44
  projectToml.project.dependencies = mergeDeps(declaration, projectToml.project?.dependencies, deps);
45
45
  tree.write(joinPathFragments(projectRoot, 'pyproject.toml'), stringify(projectToml));
46
- addUvOverrideDependencies(tree, projectToml.project.dependencies);
47
- };
48
- // PEP 503 name of a requirement, or undefined for one that names no package or
49
- // cannot be parsed.
50
- const requirementName = (requirement)=>{
51
- if (typeof requirement !== 'string') {
52
- return undefined;
53
- }
54
- try {
55
- const parsed = parsePipRequirementsLine(requirement);
56
- return parsed?.type === 'ProjectName' || parsed?.type === 'ProjectURL' ? normalizeDistributionName(parsed.name) : undefined;
57
- } catch {
58
- return undefined;
59
- }
60
- };
61
- /**
62
- * Add the `PY_UV_OVERRIDES` entries for the packages named in `requirements`
63
- * to the workspace root `[tool.uv] override-dependencies`, which is the only
64
- * place uv reads overrides from.
65
- *
66
- * Existing entries keep their order, and a package the list already overrides
67
- * is left as the user wrote it. The root file is written only when an entry is
68
- * added. Returns whether it was.
69
- */ export const addUvOverrideDependencies = (tree, requirements)=>{
70
- const rootPyprojectPath = 'pyproject.toml';
71
- const toml = tryReadToml(tree, rootPyprojectPath);
72
- if (!toml) {
73
- return false;
74
- }
75
- const names = new Set(requirements.map(requirementName));
76
- const overrides = Object.entries(PY_UV_OVERRIDES).flatMap(([dependency, entries])=>names.has(normalizeDistributionName(dependency)) ? entries : []);
77
- if (overrides.length === 0) {
78
- return false;
79
- }
80
- const existing = toml.tool?.uv?.['override-dependencies'];
81
- if (existing !== undefined && !Array.isArray(existing)) {
82
- return false;
83
- }
84
- const merged = [
85
- ...existing ?? []
86
- ];
87
- const overridden = new Set(merged.map(requirementName));
88
- for (const entry of overrides){
89
- const name = requirementName(entry);
90
- if (!overridden.has(name)) {
91
- merged.push(entry);
92
- overridden.add(name);
93
- }
94
- }
95
- if (merged.length === (existing ?? []).length) {
96
- return false;
97
- }
98
- toml.tool ??= {};
99
- toml.tool.uv ??= {};
100
- toml.tool.uv['override-dependencies'] = merged;
101
- tree.write(rootPyprojectPath, stringify(toml));
102
- return true;
103
46
  };
104
47
  export const addDependenciesToDependencyGroupInPyProjectToml = (tree, projectRoot, group, declaration, deps)=>{
105
48
  const projectToml = parse(tree.read(joinPathFragments(projectRoot, 'pyproject.toml'), 'utf8'));
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../packages/nx-plugin/src/utils/py.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { type JsonMap, parse, stringify } from '@iarna/toml';\nimport { joinPathFragments, type Tree } from '@nx/devkit';\nimport { parsePipRequirementsLine } from 'pip-requirements-js';\nimport type {\n DeclaredPy,\n DependencyDeclaration,\n} from './declared-dependencies.js';\nimport { normalizeDistributionName } from './names.js';\nimport type { UVPyprojectToml } from './nxlv-python.js';\nimport { readToml, tryReadToml, updateToml } from './toml.js';\nimport {\n type IPyDepVersion,\n PY_UV_OVERRIDES,\n PY_VERSIONS,\n withPyVersions,\n} from './versions.js';\n\n// Dedup key that distinguishes bare packages from the same package with\n// extras (e.g. `foo` vs `foo[bar]`), so adding a bare dep doesn't drop a\n// previously-added variant with extras.\nconst depKey = (dep: string): string => {\n const parsed = parsePipRequirementsLine(dep);\n if (parsed?.type !== 'ProjectName') {\n return dep;\n }\n const extras = [...(parsed.extras ?? [])].sort().join(',');\n return extras ? `${parsed.name}[${extras}]` : parsed.name;\n};\n\nconst mergeDeps = (\n declaration: DependencyDeclaration,\n existing: readonly string[] | undefined,\n deps: readonly IPyDepVersion[],\n): string[] => {\n // Update deps in place by key so re-running does not reorder the list:\n // existing deps keep their position (with their version refreshed), and only\n // genuinely-new deps are appended.\n const incoming = new Map(\n withPyVersions(declaration, deps).map((d) => [depKey(d), d]),\n );\n const merged = (existing ?? []).map(\n (dep) => incoming.get(depKey(dep)) ?? dep,\n );\n const existingKeys = new Set((existing ?? []).map(depKey));\n for (const [key, dep] of incoming) {\n if (!existingKeys.has(key)) {\n merged.push(dep);\n }\n }\n return merged;\n};\n\n/**\n * Add dependencies to a pyproject.toml file\n */\nexport const addDependenciesToPyProjectToml = <\n const D extends DependencyDeclaration,\n>(\n tree: Tree,\n projectRoot: string,\n declaration: D,\n deps: readonly DeclaredPy<D>[],\n) => {\n const projectToml = parse(\n tree.read(joinPathFragments(projectRoot, 'pyproject.toml'), 'utf8'),\n ) as UVPyprojectToml;\n projectToml.project.dependencies = mergeDeps(\n declaration,\n projectToml.project?.dependencies,\n deps,\n );\n tree.write(\n joinPathFragments(projectRoot, 'pyproject.toml'),\n stringify(projectToml),\n );\n addUvOverrideDependencies(tree, projectToml.project.dependencies);\n};\n\n// PEP 503 name of a requirement, or undefined for one that names no package or\n// cannot be parsed.\nconst requirementName = (requirement: unknown): string | undefined => {\n if (typeof requirement !== 'string') {\n return undefined;\n }\n try {\n const parsed = parsePipRequirementsLine(requirement);\n return parsed?.type === 'ProjectName' || parsed?.type === 'ProjectURL'\n ? normalizeDistributionName(parsed.name)\n : undefined;\n } catch {\n return undefined;\n }\n};\n\n/**\n * Add the `PY_UV_OVERRIDES` entries for the packages named in `requirements`\n * to the workspace root `[tool.uv] override-dependencies`, which is the only\n * place uv reads overrides from.\n *\n * Existing entries keep their order, and a package the list already overrides\n * is left as the user wrote it. The root file is written only when an entry is\n * added. Returns whether it was.\n */\nexport const addUvOverrideDependencies = (\n tree: Tree,\n requirements: readonly string[],\n): boolean => {\n const rootPyprojectPath = 'pyproject.toml';\n const toml = tryReadToml(tree, rootPyprojectPath) as\n | UVPyprojectToml\n | undefined;\n if (!toml) {\n return false;\n }\n const names = new Set(requirements.map(requirementName));\n const overrides = Object.entries(PY_UV_OVERRIDES).flatMap(\n ([dependency, entries]) =>\n names.has(normalizeDistributionName(dependency)) ? entries : [],\n );\n if (overrides.length === 0) {\n return false;\n }\n\n const existing = toml.tool?.uv?.['override-dependencies'];\n if (existing !== undefined && !Array.isArray(existing)) {\n return false;\n }\n const merged = [...(existing ?? [])];\n const overridden = new Set(merged.map(requirementName));\n for (const entry of overrides) {\n const name = requirementName(entry);\n if (!overridden.has(name)) {\n merged.push(entry);\n overridden.add(name);\n }\n }\n if (merged.length === (existing ?? []).length) {\n return false;\n }\n\n toml.tool ??= {};\n toml.tool.uv ??= {};\n toml.tool.uv['override-dependencies'] = merged;\n tree.write(rootPyprojectPath, stringify(toml as JsonMap));\n return true;\n};\n\nexport const addDependenciesToDependencyGroupInPyProjectToml = <\n const D extends DependencyDeclaration,\n>(\n tree: Tree,\n projectRoot: string,\n group: string,\n declaration: D,\n deps: readonly DeclaredPy<D>[],\n) => {\n const projectToml = parse(\n tree.read(joinPathFragments(projectRoot, 'pyproject.toml'), 'utf8'),\n ) as UVPyprojectToml;\n projectToml['dependency-groups'] = {\n ...projectToml['dependency-groups'],\n [group]: mergeDeps(\n declaration,\n projectToml['dependency-groups']?.[group],\n deps,\n ),\n };\n tree.write(\n joinPathFragments(projectRoot, 'pyproject.toml'),\n stringify(projectToml),\n );\n};\n\nexport interface UvxWithDep {\n dep: string;\n version: string;\n specifier?: string;\n}\n\n/**\n * Render a uvx command for a given dependency\n * Pins the version to the one specified in versions.ts\n * Optionally specify withDeps to render uvx --with dep==version\n */\nexport const uvxCommand = (\n dep: IPyDepVersion,\n args?: string,\n withDeps?: UvxWithDep[],\n): string => {\n // Pins the tool for a one-off invocation; nothing is added to a manifest, so\n // this needs no declaration.\n return `uvx --from ${dep}${PY_VERSIONS[dep]} ${\n withDeps\n ? `${withDeps\n .map(\n ({ dep, version, specifier }) =>\n `--with ${dep}${specifier ?? '=='}${version}`,\n )\n .join(' ')} `\n : ''\n }${dep}${args ? ` ${args}` : ''}`;\n};\n\n/**\n * Resolve the PEP 503 distribution name of a Python project from its\n * `pyproject.toml` `[project].name`, falling back to normalising the supplied\n * Nx project id when the project has no readable pyproject yet.\n *\n * This is the authoritative name uv writes into `uv.lock`, so it is the value\n * that must appear in a dependent's `[project].dependencies` /\n * `[tool.uv.sources]` for `@nxlv/python` to infer the workspace dependency\n * edge. Always normalised so the result is a valid distribution name even if\n * an older project still carries a dotted `[project].name`.\n */\nconst getPyDistributionName = (\n tree: Tree,\n project: { name?: string; root: string },\n): string => {\n const pyprojectPath = joinPathFragments(project.root, 'pyproject.toml');\n const projectName = tree.exists(pyprojectPath)\n ? (readToml(tree, pyprojectPath) as unknown as UVPyprojectToml).project\n ?.name\n : undefined;\n return normalizeDistributionName(projectName ?? project.name ?? '');\n};\n\n/**\n * Add a workspace dependency from one Python project to another.\n * Adds the dependency to [project].dependencies and [tool.uv.sources].\n *\n * Both projects are passed as Nx project configurations (not names): the\n * dependency's PEP 503 distribution name is derived from its own\n * `pyproject.toml` here, so callers cannot accidentally pass the dotted Nx id\n * (which @nxlv/python splits on `.` and drops, losing the project-graph edge).\n * This is the single entry point all generators use to wire a Python workspace\n * dependency.\n */\nexport const addWorkspaceDependencyToPyProject = (\n tree: Tree,\n dependentProject: { name?: string; root: string },\n dependencyProject: { name?: string; root: string },\n): void => {\n const pyprojectPath = joinPathFragments(\n dependentProject.root,\n 'pyproject.toml',\n );\n if (!tree.exists(pyprojectPath)) {\n return;\n }\n\n const distributionName = getPyDistributionName(tree, dependencyProject);\n\n updateToml(tree, pyprojectPath, (toml: UVPyprojectToml) => {\n // Add to [project].dependencies if not already present\n const deps = toml.project?.dependencies ?? [];\n if (\n !deps.some(\n (d) =>\n d === distributionName ||\n d.startsWith(`${distributionName}>=`) ||\n d.startsWith(`${distributionName}==`),\n )\n ) {\n toml.project.dependencies = [...deps, distributionName];\n }\n\n // Add to [tool.uv.sources] with workspace = true\n toml.tool = toml.tool ?? {};\n (toml.tool as any).uv = (toml.tool as any).uv ?? {};\n (toml.tool as any).uv.sources = (toml.tool as any).uv.sources ?? {};\n (toml.tool as any).uv.sources[distributionName] = {\n workspace: true,\n };\n\n return toml;\n });\n};\n"],"names":["parse","stringify","joinPathFragments","parsePipRequirementsLine","normalizeDistributionName","readToml","tryReadToml","updateToml","PY_UV_OVERRIDES","PY_VERSIONS","withPyVersions","depKey","dep","parsed","type","extras","sort","join","name","mergeDeps","declaration","existing","deps","incoming","Map","map","d","merged","get","existingKeys","Set","key","has","push","addDependenciesToPyProjectToml","tree","projectRoot","projectToml","read","project","dependencies","write","addUvOverrideDependencies","requirementName","requirement","undefined","requirements","rootPyprojectPath","toml","names","overrides","Object","entries","flatMap","dependency","length","tool","uv","Array","isArray","overridden","entry","add","addDependenciesToDependencyGroupInPyProjectToml","group","uvxCommand","args","withDeps","version","specifier","getPyDistributionName","pyprojectPath","root","projectName","exists","addWorkspaceDependencyToPyProject","dependentProject","dependencyProject","distributionName","some","startsWith","sources","workspace"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../packages/nx-plugin/src/utils/py.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { parse, stringify } from '@iarna/toml';\nimport { joinPathFragments, type Tree } from '@nx/devkit';\nimport { parsePipRequirementsLine } from 'pip-requirements-js';\nimport type {\n DeclaredPy,\n DependencyDeclaration,\n} from './declared-dependencies.js';\nimport { normalizeDistributionName } from './names.js';\nimport type { UVPyprojectToml } from './nxlv-python.js';\nimport { readToml, updateToml } from './toml.js';\nimport { type IPyDepVersion, PY_VERSIONS, withPyVersions } from './versions.js';\n\n// Dedup key that distinguishes bare packages from the same package with\n// extras (e.g. `foo` vs `foo[bar]`), so adding a bare dep doesn't drop a\n// previously-added variant with extras.\nconst depKey = (dep: string): string => {\n const parsed = parsePipRequirementsLine(dep);\n if (parsed?.type !== 'ProjectName') {\n return dep;\n }\n const extras = [...(parsed.extras ?? [])].sort().join(',');\n return extras ? `${parsed.name}[${extras}]` : parsed.name;\n};\n\nconst mergeDeps = (\n declaration: DependencyDeclaration,\n existing: readonly string[] | undefined,\n deps: readonly IPyDepVersion[],\n): string[] => {\n // Update deps in place by key so re-running does not reorder the list:\n // existing deps keep their position (with their version refreshed), and only\n // genuinely-new deps are appended.\n const incoming = new Map(\n withPyVersions(declaration, deps).map((d) => [depKey(d), d]),\n );\n const merged = (existing ?? []).map(\n (dep) => incoming.get(depKey(dep)) ?? dep,\n );\n const existingKeys = new Set((existing ?? []).map(depKey));\n for (const [key, dep] of incoming) {\n if (!existingKeys.has(key)) {\n merged.push(dep);\n }\n }\n return merged;\n};\n\n/**\n * Add dependencies to a pyproject.toml file\n */\nexport const addDependenciesToPyProjectToml = <\n const D extends DependencyDeclaration,\n>(\n tree: Tree,\n projectRoot: string,\n declaration: D,\n deps: readonly DeclaredPy<D>[],\n) => {\n const projectToml = parse(\n tree.read(joinPathFragments(projectRoot, 'pyproject.toml'), 'utf8'),\n ) as UVPyprojectToml;\n projectToml.project.dependencies = mergeDeps(\n declaration,\n projectToml.project?.dependencies,\n deps,\n );\n tree.write(\n joinPathFragments(projectRoot, 'pyproject.toml'),\n stringify(projectToml),\n );\n};\n\nexport const addDependenciesToDependencyGroupInPyProjectToml = <\n const D extends DependencyDeclaration,\n>(\n tree: Tree,\n projectRoot: string,\n group: string,\n declaration: D,\n deps: readonly DeclaredPy<D>[],\n) => {\n const projectToml = parse(\n tree.read(joinPathFragments(projectRoot, 'pyproject.toml'), 'utf8'),\n ) as UVPyprojectToml;\n projectToml['dependency-groups'] = {\n ...projectToml['dependency-groups'],\n [group]: mergeDeps(\n declaration,\n projectToml['dependency-groups']?.[group],\n deps,\n ),\n };\n tree.write(\n joinPathFragments(projectRoot, 'pyproject.toml'),\n stringify(projectToml),\n );\n};\n\nexport interface UvxWithDep {\n dep: string;\n version: string;\n specifier?: string;\n}\n\n/**\n * Render a uvx command for a given dependency\n * Pins the version to the one specified in versions.ts\n * Optionally specify withDeps to render uvx --with dep==version\n */\nexport const uvxCommand = (\n dep: IPyDepVersion,\n args?: string,\n withDeps?: UvxWithDep[],\n): string => {\n // Pins the tool for a one-off invocation; nothing is added to a manifest, so\n // this needs no declaration.\n return `uvx --from ${dep}${PY_VERSIONS[dep]} ${\n withDeps\n ? `${withDeps\n .map(\n ({ dep, version, specifier }) =>\n `--with ${dep}${specifier ?? '=='}${version}`,\n )\n .join(' ')} `\n : ''\n }${dep}${args ? ` ${args}` : ''}`;\n};\n\n/**\n * Resolve the PEP 503 distribution name of a Python project from its\n * `pyproject.toml` `[project].name`, falling back to normalising the supplied\n * Nx project id when the project has no readable pyproject yet.\n *\n * This is the authoritative name uv writes into `uv.lock`, so it is the value\n * that must appear in a dependent's `[project].dependencies` /\n * `[tool.uv.sources]` for `@nxlv/python` to infer the workspace dependency\n * edge. Always normalised so the result is a valid distribution name even if\n * an older project still carries a dotted `[project].name`.\n */\nconst getPyDistributionName = (\n tree: Tree,\n project: { name?: string; root: string },\n): string => {\n const pyprojectPath = joinPathFragments(project.root, 'pyproject.toml');\n const projectName = tree.exists(pyprojectPath)\n ? (readToml(tree, pyprojectPath) as unknown as UVPyprojectToml).project\n ?.name\n : undefined;\n return normalizeDistributionName(projectName ?? project.name ?? '');\n};\n\n/**\n * Add a workspace dependency from one Python project to another.\n * Adds the dependency to [project].dependencies and [tool.uv.sources].\n *\n * Both projects are passed as Nx project configurations (not names): the\n * dependency's PEP 503 distribution name is derived from its own\n * `pyproject.toml` here, so callers cannot accidentally pass the dotted Nx id\n * (which @nxlv/python splits on `.` and drops, losing the project-graph edge).\n * This is the single entry point all generators use to wire a Python workspace\n * dependency.\n */\nexport const addWorkspaceDependencyToPyProject = (\n tree: Tree,\n dependentProject: { name?: string; root: string },\n dependencyProject: { name?: string; root: string },\n): void => {\n const pyprojectPath = joinPathFragments(\n dependentProject.root,\n 'pyproject.toml',\n );\n if (!tree.exists(pyprojectPath)) {\n return;\n }\n\n const distributionName = getPyDistributionName(tree, dependencyProject);\n\n updateToml(tree, pyprojectPath, (toml: UVPyprojectToml) => {\n // Add to [project].dependencies if not already present\n const deps = toml.project?.dependencies ?? [];\n if (\n !deps.some(\n (d) =>\n d === distributionName ||\n d.startsWith(`${distributionName}>=`) ||\n d.startsWith(`${distributionName}==`),\n )\n ) {\n toml.project.dependencies = [...deps, distributionName];\n }\n\n // Add to [tool.uv.sources] with workspace = true\n toml.tool = toml.tool ?? {};\n (toml.tool as any).uv = (toml.tool as any).uv ?? {};\n (toml.tool as any).uv.sources = (toml.tool as any).uv.sources ?? {};\n (toml.tool as any).uv.sources[distributionName] = {\n workspace: true,\n };\n\n return toml;\n });\n};\n"],"names":["parse","stringify","joinPathFragments","parsePipRequirementsLine","normalizeDistributionName","readToml","updateToml","PY_VERSIONS","withPyVersions","depKey","dep","parsed","type","extras","sort","join","name","mergeDeps","declaration","existing","deps","incoming","Map","map","d","merged","get","existingKeys","Set","key","has","push","addDependenciesToPyProjectToml","tree","projectRoot","projectToml","read","project","dependencies","write","addDependenciesToDependencyGroupInPyProjectToml","group","uvxCommand","args","withDeps","version","specifier","getPyDistributionName","pyprojectPath","root","projectName","exists","undefined","addWorkspaceDependencyToPyProject","dependentProject","dependencyProject","distributionName","toml","some","startsWith","tool","uv","sources","workspace"],"mappings":"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"}
@@ -36,6 +36,12 @@ DENIED_TERM = "stocks"
36
36
  BLOCKED_ANSWER = "Sorry, I can't help with that request."
37
37
 
38
38
 
39
+ class FakeAwsServer(ThreadingHTTPServer):
40
+ """Queue concurrent SDK connection bursts while requests are accepted."""
41
+
42
+ request_queue_size = 128
43
+
44
+
39
45
  def _header(name: str, value: str) -> bytes:
40
46
  n, v = name.encode(), value.encode()
41
47
  return struct.pack("B", len(n)) + n + b"\x07" + struct.pack(">H", len(v)) + v
@@ -196,10 +202,10 @@ def _handler(config_file: str, log_file: str) -> type[BaseHTTPRequestHandler]:
196
202
 
197
203
  def start_server(config_file: str, log_file: str, port: int = 0) -> tuple[ThreadingHTTPServer, int]:
198
204
  """Serve on 127.0.0.1 in a daemon thread; port 0 picks a free port."""
199
- server = ThreadingHTTPServer(("127.0.0.1", port), _handler(config_file, log_file))
205
+ server = FakeAwsServer(("127.0.0.1", port), _handler(config_file, log_file))
200
206
  threading.Thread(target=server.serve_forever, daemon=True).start()
201
207
  return server, server.server_address[1]
202
208
 
203
209
 
204
210
  if __name__ == "__main__":
205
- ThreadingHTTPServer(("127.0.0.1", int(sys.argv[2])), _handler(sys.argv[1], sys.argv[3])).serve_forever()
211
+ FakeAwsServer(("127.0.0.1", int(sys.argv[2])), _handler(sys.argv[1], sys.argv[3])).serve_forever()
@@ -13,27 +13,27 @@ export declare const TS_VERSIONS: {
13
13
  readonly minimatch: "10.2.6";
14
14
  readonly 'deepmerge-ts': "8.0.2";
15
15
  readonly mysql2: "3.24.6";
16
- readonly '@aws-sdk/client-dynamodb': "3.1156.0";
17
- readonly '@aws-sdk/client-api-gateway': "3.1156.0";
18
- readonly '@aws-sdk/client-iam': "3.1156.0";
19
- readonly '@aws-sdk/client-bedrock-agentcore': "3.1156.0";
20
- readonly '@aws-sdk/client-bedrock-runtime': "3.1156.0";
21
- readonly '@aws-sdk/client-greengrassv2': "3.1156.0";
22
- readonly '@aws-sdk/client-s3': "3.1156.0";
23
- readonly '@aws-sdk/client-sts': "3.1156.0";
24
- readonly '@aws-sdk/client-cognito-identity-provider': "3.1156.0";
25
- readonly '@aws-sdk/credential-providers': "3.1156.0";
26
- readonly '@aws-sdk/credential-provider-cognito-identity': "3.972.75";
27
- readonly '@aws-sdk/client-secrets-manager': "3.1156.0";
28
- readonly '@aws-sdk/rds-signer': "3.1156.0";
29
- readonly '@smithy/server-apigateway': "0.3.4";
30
- readonly '@smithy/server-node': "0.3.4";
16
+ readonly '@aws-sdk/client-dynamodb': "3.1161.0";
17
+ readonly '@aws-sdk/client-api-gateway': "3.1161.0";
18
+ readonly '@aws-sdk/client-iam': "3.1161.0";
19
+ readonly '@aws-sdk/client-bedrock-agentcore': "3.1161.0";
20
+ readonly '@aws-sdk/client-bedrock-runtime': "3.1161.0";
21
+ readonly '@aws-sdk/client-greengrassv2': "3.1161.0";
22
+ readonly '@aws-sdk/client-s3': "3.1161.0";
23
+ readonly '@aws-sdk/client-sts': "3.1161.0";
24
+ readonly '@aws-sdk/client-cognito-identity-provider': "3.1161.0";
25
+ readonly '@aws-sdk/credential-providers': "3.1161.0";
26
+ readonly '@aws-sdk/credential-provider-cognito-identity': "3.972.79";
27
+ readonly '@aws-sdk/client-secrets-manager': "3.1161.0";
28
+ readonly '@aws-sdk/rds-signer': "3.1161.0";
29
+ readonly '@smithy/server-apigateway': "0.3.5";
30
+ readonly '@smithy/server-node': "0.3.5";
31
31
  readonly '@aws-lambda-powertools/logger': "2.36.0";
32
32
  readonly '@aws-lambda-powertools/metrics': "2.36.0";
33
33
  readonly '@aws-lambda-powertools/parameters': "2.36.0";
34
34
  readonly '@aws-lambda-powertools/tracer': "2.36.0";
35
35
  readonly '@aws-lambda-powertools/parser': "2.36.0";
36
- readonly '@aws-sdk/client-appconfigdata': "3.1156.0";
36
+ readonly '@aws-sdk/client-appconfigdata': "3.1161.0";
37
37
  readonly '@middy/core': "7.9.2";
38
38
  readonly '@nxlv/python': "23.3.1";
39
39
  readonly '@nx-extend/terraform': "10.4.1";
@@ -46,34 +46,34 @@ export declare const TS_VERSIONS: {
46
46
  readonly '@nx/workspace': "23.3.1";
47
47
  readonly 'create-nx-workspace': "23.3.1";
48
48
  readonly '@swc-node/register': "1.12.1";
49
- readonly '@swc/core': "1.16.20";
49
+ readonly '@swc/core': "1.16.21";
50
50
  readonly '@modelcontextprotocol/sdk': "1.32.2";
51
51
  readonly '@modelcontextprotocol/client': "2.4.0";
52
- readonly '@modelcontextprotocol/inspector': "2.12.0";
52
+ readonly '@modelcontextprotocol/inspector': "2.13.0";
53
53
  readonly '@ag-ui/a2ui-toolkit': "0.0.5";
54
54
  readonly '@ag-ui/aws-strands': "1.0.1";
55
55
  readonly '@ag-ui/client': "1.0.2";
56
56
  readonly '@ag-ui/core': "1.0.2";
57
57
  readonly '@ag-ui/encoder': "1.0.2";
58
58
  readonly 'agent-chat-cli': "0.3.0";
59
- readonly '@copilotkit/react-core': "1.79.1";
59
+ readonly '@copilotkit/react-core': "1.83.0";
60
60
  readonly rxjs: "7.8.2";
61
- readonly '@strands-agents/sdk': "1.22.0";
61
+ readonly '@strands-agents/sdk': "1.23.0";
62
62
  readonly '@tanstack/react-router': "1.170.46";
63
63
  readonly '@tanstack/router-plugin': "1.168.48";
64
64
  readonly '@tanstack/router-generator': "1.167.46";
65
65
  readonly '@tanstack/virtual-file-routes': "1.162.0";
66
66
  readonly '@tanstack/router-utils': "1.162.4";
67
- readonly '@cloudscape-design/board-components': "3.0.240";
68
- readonly '@cloudscape-design/chat-components': "1.0.182";
69
- readonly '@cloudscape-design/components': "3.0.1404";
67
+ readonly '@cloudscape-design/board-components': "3.0.243";
68
+ readonly '@cloudscape-design/chat-components': "1.0.185";
69
+ readonly '@cloudscape-design/components': "3.0.1407";
70
70
  readonly '@cloudscape-design/global-styles': "1.0.71";
71
- readonly '@tanstack/react-query': "5.104.5";
72
- readonly '@tanstack/react-query-devtools': "5.104.5";
73
- readonly '@trpc/tanstack-react-query': "11.19.0";
74
- readonly '@trpc/client': "11.19.0";
75
- readonly '@trpc/server': "11.19.0";
76
- readonly '@types/node': "26.6.5";
71
+ readonly '@tanstack/react-query': "5.105.0";
72
+ readonly '@tanstack/react-query-devtools': "5.105.0";
73
+ readonly '@trpc/tanstack-react-query': "11.22.1";
74
+ readonly '@trpc/client': "11.22.1";
75
+ readonly '@trpc/server': "11.22.1";
76
+ readonly '@types/node': "26.6.6";
77
77
  readonly '@types/aws-lambda': "8.10.164";
78
78
  readonly '@types/cors': "2.8.19";
79
79
  readonly '@types/js-yaml': "4.0.9";
@@ -82,30 +82,30 @@ export declare const TS_VERSIONS: {
82
82
  readonly '@types/express': "5.0.6";
83
83
  readonly '@smithy/config-resolver': "4.7.2";
84
84
  readonly '@smithy/node-config-provider': "4.6.2";
85
- readonly '@smithy/node-http-handler': "4.12.1";
85
+ readonly '@smithy/node-http-handler': "4.14.1";
86
86
  readonly '@smithy/types': "4.19.0";
87
87
  readonly '@vitest/coverage-v8': "5.0.5";
88
88
  readonly '@vitest/ui': "5.0.5";
89
89
  readonly '@astrojs/react': "6.0.6";
90
- readonly '@astrojs/starlight': "0.42.7";
91
- readonly astro: "7.4.2";
90
+ readonly '@astrojs/starlight': "0.42.8";
91
+ readonly astro: "7.4.4";
92
92
  readonly cookie: "2.0.1";
93
93
  readonly aws4fetch: "1.0.20";
94
- readonly 'aws-cdk': "2.1146.1";
95
- readonly 'aws-cdk-lib': "2.274.0";
94
+ readonly 'aws-cdk': "2.1147.0";
95
+ readonly 'aws-cdk-lib': "2.275.0";
96
96
  readonly 'aws-iot-device-sdk-v2': "1.28.2";
97
97
  readonly 'aws-xray-sdk-core': "3.12.0";
98
98
  readonly constructs: "10.8.1";
99
99
  readonly cors: "2.8.6";
100
100
  readonly chalk: "6.0.1";
101
101
  readonly 'class-variance-authority': "0.7.1";
102
- readonly cn: "0.5.0";
102
+ readonly cn: "0.5.1";
103
103
  readonly commander: "15.0.0";
104
104
  readonly electrodb: "3.9.3";
105
105
  readonly esbuild: "0.28.2";
106
106
  readonly 'event-source-polyfill': "1.0.31";
107
107
  readonly '@types/event-source-polyfill': "1.0.5";
108
- readonly '@biomejs/biome': "2.6.3";
108
+ readonly '@biomejs/biome': "2.6.4";
109
109
  readonly '@prisma/adapter-mariadb': "7.10.1";
110
110
  readonly '@prisma/adapter-pg': "7.10.1";
111
111
  readonly '@prisma/client': "7.10.1";
@@ -118,7 +118,7 @@ export declare const TS_VERSIONS: {
118
118
  readonly '@types/fs-extra': "11.0.4";
119
119
  readonly 'js-yaml': "4.3.2";
120
120
  readonly mariadb: "3.5.4";
121
- readonly mise: "2026.10.19";
121
+ readonly mise: "2026.10.25";
122
122
  readonly npm: "12.2.1";
123
123
  readonly 'npm-check-updates': "23.1.1";
124
124
  readonly 'oidc-client-ts': "3.5.0";
@@ -127,8 +127,8 @@ export declare const TS_VERSIONS: {
127
127
  readonly 'react-oidc-context': "3.3.1";
128
128
  readonly react: "19.3.1";
129
129
  readonly 'react-dom': "19.3.1";
130
- readonly rolldown: "1.2.15";
131
- readonly 'rolldown-plugin-dts': "0.28.8";
130
+ readonly rolldown: "1.2.16";
131
+ readonly 'rolldown-plugin-dts': "0.29.0";
132
132
  readonly shx: "0.4.0";
133
133
  readonly 'simple-git': "4.0.2";
134
134
  readonly 'source-map-support': "0.5.21";
@@ -136,16 +136,16 @@ export declare const TS_VERSIONS: {
136
136
  readonly tailwindcss: "4.3.3";
137
137
  readonly '@tailwindcss/vite': "4.3.3";
138
138
  readonly tsx: "4.23.15";
139
- readonly 'lucide-react': "1.61.0";
139
+ readonly 'lucide-react': "1.66.0";
140
140
  readonly 'radix-ui': "1.8.1";
141
- readonly shadcn: "4.22.1";
141
+ readonly shadcn: "4.23.0";
142
142
  readonly 'tw-animate-css': "1.4.0";
143
143
  readonly vite: "8.3.5";
144
144
  readonly typescript: "6.0.3";
145
145
  readonly vitest: "5.0.5";
146
146
  readonly jsdom: "29.1.1";
147
147
  readonly zod: "4.6.7";
148
- readonly ws: "8.22.0";
148
+ readonly ws: "8.22.1";
149
149
  };
150
150
  export type ITsDepVersion = keyof typeof TS_VERSIONS;
151
151
  /**
@@ -200,31 +200,31 @@ export declare const PY_VERSIONS: {
200
200
  readonly 'ag-ui-protocol': "==0.1.22";
201
201
  readonly 'ag-ui-strands': "==0.4.1";
202
202
  readonly aiosqlite: "==0.22.1";
203
- readonly 'aws-lambda-powertools': "==3.37.0";
204
- readonly 'aws-lambda-powertools[tracer]': "==3.37.0";
205
- readonly 'aws-lambda-powertools[parser]': "==3.37.0";
206
- readonly 'aws-opentelemetry-distro': "==0.21.0";
203
+ readonly 'aws-lambda-powertools': "==3.38.0";
204
+ readonly 'aws-lambda-powertools[tracer]': "==3.38.0";
205
+ readonly 'aws-lambda-powertools[parser]': "==3.38.0";
206
+ readonly 'aws-opentelemetry-distro': "==0.22.0";
207
207
  readonly awsiotsdk: "==1.31.0";
208
- readonly 'bedrock-agentcore': "==1.25.0";
209
- readonly boto3: "==1.43.118";
210
- readonly checkov: "==3.3.30";
208
+ readonly 'bedrock-agentcore': "==1.25.2";
209
+ readonly boto3: "==1.43.123";
210
+ readonly checkov: "==3.4.0";
211
211
  readonly fastapi: "==0.162.0";
212
212
  readonly 'fastapi[standard]': "==0.162.0";
213
213
  readonly httpx: "==0.28.1";
214
214
  readonly langchain: "==1.4.7";
215
- readonly 'langchain-aws': "==1.9.0";
215
+ readonly 'langchain-aws': "==1.9.1";
216
216
  readonly 'langchain-mcp-adapters': "==0.3.2";
217
- readonly langgraph: "==1.2.17";
217
+ readonly langgraph: "==1.2.19";
218
218
  readonly 'langgraph-checkpoint-aws': "==1.2.6";
219
- readonly 'langgraph-checkpoint-sqlite': "==3.1.2";
219
+ readonly 'langgraph-checkpoint-sqlite': "==3.1.3";
220
220
  readonly mcp: "==1.28.1";
221
221
  readonly 'pip-check-updates': "==0.29.0";
222
222
  readonly 'pip-licenses': "==5.5.5";
223
- readonly pydantic: "==2.14.1";
224
- readonly ruff: "==0.17.2";
225
- readonly 'strands-agents': "==1.62.0";
226
- readonly 'strands-agents[a2a]': "==1.62.0";
227
- readonly 'strands-agents-tools': "==0.8.10";
223
+ readonly pydantic: "==2.14.2";
224
+ readonly ruff: "==0.17.3";
225
+ readonly 'strands-agents': "==1.63.0";
226
+ readonly 'strands-agents[a2a]': "==1.63.0";
227
+ readonly 'strands-agents-tools': "==0.8.11";
228
228
  readonly ty: "==0.0.89";
229
229
  readonly pynamodb: "==6.1.0";
230
230
  readonly uvicorn: "==0.54.0";
@@ -235,14 +235,6 @@ export declare const PY_VERSIONS: {
235
235
  readonly greenlet: "==3.5.6";
236
236
  };
237
237
  export type IPyDepVersion = keyof typeof PY_VERSIONS;
238
- /**
239
- * Entries for the workspace root `[tool.uv] override-dependencies`, keyed by
240
- * the vended package whose own requirement they override. They are written
241
- * whenever a project depends on the key.
242
- */
243
- export declare const PY_UV_OVERRIDES: {
244
- readonly 'strands-agents-tools': readonly ["pillow>=13.0.0"];
245
- };
246
238
  /**
247
239
  * Add versions to the given dependencies
248
240
  */
@@ -264,7 +256,7 @@ export declare const JAVA_VERSIONS: {
264
256
  readonly 'software.amazon.smithy:smithy-aws-traits': "1.74.1";
265
257
  readonly 'software.amazon.smithy:smithy-validation-model': "1.74.1";
266
258
  readonly 'software.amazon.smithy:smithy-openapi': "1.74.1";
267
- readonly 'software.amazon.smithy.typescript:smithy-aws-typescript-codegen': "0.54.0";
259
+ readonly 'software.amazon.smithy.typescript:smithy-aws-typescript-codegen': "0.55.0";
268
260
  };
269
261
  export type IJavaVersion = keyof typeof JAVA_VERSIONS;
270
262
  /** The Maven coordinates the version update resolves, in declaration order. */
@@ -392,8 +384,8 @@ export declare const terraformLambdaRuntimeVars: () => {
392
384
  * Pinned exactly (no range operator) so generated infrastructure is reproducible.
393
385
  */
394
386
  export declare const TERRAFORM_VERSIONS: {
395
- readonly aws: "6.70.0";
396
- readonly awscc: "1.107.0";
387
+ readonly aws: "6.71.0";
388
+ readonly awscc: "1.108.0";
397
389
  readonly random: "3.9.1";
398
390
  readonly null: "3.3.2";
399
391
  readonly archive: "2.8.1";
@@ -407,8 +399,8 @@ export type ITerraformProviderVersion = keyof typeof TERRAFORM_VERSIONS;
407
399
  * generated `.tf` templates (e.g. `version = "<%- awsProviderVersion %>"`)
408
400
  */
409
401
  export declare const terraformProviderVersions: () => {
410
- awsProviderVersion: "6.70.0";
411
- awsccProviderVersion: "1.107.0";
402
+ awsProviderVersion: "6.71.0";
403
+ awsccProviderVersion: "1.108.0";
412
404
  randomProviderVersion: "3.9.1";
413
405
  nullProviderVersion: "3.3.2";
414
406
  archiveProviderVersion: "2.8.1";