@aws/nx-plugin 1.0.0-rc.21 → 1.0.0-rc.23

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 (59) hide show
  1. package/package.json +1 -1
  2. package/src/license/generator.js +22 -8
  3. package/src/license/generator.js.map +1 -1
  4. package/src/license/known-exceptions.d.ts +1 -0
  5. package/src/license/known-exceptions.js +13 -1
  6. package/src/license/known-exceptions.js.map +1 -1
  7. package/src/py/agent/__snapshots__/generator.spec.ts.snap +167 -3
  8. package/src/py/agent/a2a-connection/files/langchain/agent-connection/app/__targetAgentSnakeCase___client_langchain.py.template +28 -0
  9. package/src/py/agent/a2a-connection/generator.js +59 -31
  10. package/src/py/agent/a2a-connection/generator.js.map +1 -1
  11. package/src/py/agent/files/a2a-langchain/main.py.template +89 -0
  12. package/src/py/agent/files/ag-ui-langchain/main.py.template +83 -0
  13. package/src/py/agent/files/common-langchain/agent.py.template +30 -0
  14. package/src/py/agent/files/http-langchain/main.py.template +84 -0
  15. package/src/py/agent/gateway-connection/files/langchain/agent-connection/app/__gatewaySnakeCase___client_langchain.py.template +34 -0
  16. package/src/py/agent/gateway-connection/generator.js +15 -9
  17. package/src/py/agent/gateway-connection/generator.js.map +1 -1
  18. package/src/py/agent/generator.js +69 -14
  19. package/src/py/agent/generator.js.map +1 -1
  20. package/src/py/agent/mcp-connection/files/langchain/agent-connection/app/__mcpServerSnakeCase___client_langchain.py.template +30 -0
  21. package/src/py/agent/mcp-connection/generator.js +15 -11
  22. package/src/py/agent/mcp-connection/generator.js.map +1 -1
  23. package/src/py/agent/react-connection/serve-local.js +9 -1
  24. package/src/py/agent/react-connection/serve-local.js.map +1 -1
  25. package/src/py/agent/schema.d.ts +1 -1
  26. package/src/py/agent/schema.json +1 -1
  27. package/src/py/dynamodb/agent-connection/generator.js +1 -1
  28. package/src/py/dynamodb/agent-connection/generator.js.map +1 -1
  29. package/src/py/dynamodb/fast-api-connection/generator.js +1 -1
  30. package/src/py/dynamodb/fast-api-connection/generator.js.map +1 -1
  31. package/src/py/dynamodb/mcp-server-connection/generator.js +1 -1
  32. package/src/py/dynamodb/mcp-server-connection/generator.js.map +1 -1
  33. package/src/py/mcp-server/__snapshots__/generator.spec.ts.snap +1 -1
  34. package/src/py/project/generator.d.ts +14 -1
  35. package/src/py/project/generator.js +12 -2
  36. package/src/py/project/generator.js.map +1 -1
  37. package/src/ts/agent/__snapshots__/generator.spec.ts.snap +1 -1
  38. package/src/ts/mcp-server/__snapshots__/generator.spec.ts.snap +1 -1
  39. package/src/ts/rdb/__snapshots__/generator.spec.ts.snap +4 -0
  40. package/src/ts/rdb/files/src/utils.ts.template +2 -0
  41. package/src/ts/react-website/app/__snapshots__/generator.spec.ts.snap +25 -72
  42. package/src/ts/react-website/cognito-auth/__snapshots__/generator.terraform.spec.ts.snap +17 -4
  43. package/src/utils/agent-connection/agent-connection.d.ts +58 -9
  44. package/src/utils/agent-connection/agent-connection.js +146 -13
  45. package/src/utils/agent-connection/agent-connection.js.map +1 -1
  46. package/src/utils/agent-connection/files/py-core-langchain/a2a/agentcore_a2a_client_langchain.py.template +99 -0
  47. package/src/utils/agent-connection/files/py-core-langchain/gateway/agentcore_gateway_mcp_client_langchain.py.template +57 -0
  48. package/src/utils/agent-connection/files/py-core-langchain/mcp/agentcore_mcp_client_langchain.py.template +64 -0
  49. package/src/utils/agent-core-constructs/files/terraform/core/agent-core/runtime.tf.template +1 -1
  50. package/src/utils/identity-constructs/files/terraform/core/user-identity/add-callback-url/add-callback-url.tf.template +17 -4
  51. package/src/utils/names.d.ts +16 -0
  52. package/src/utils/names.js +18 -1
  53. package/src/utils/names.js.map +1 -1
  54. package/src/utils/py.d.ts +14 -1
  55. package/src/utils/py.js +34 -7
  56. package/src/utils/py.js.map +1 -1
  57. package/src/utils/versions.d.ts +6 -0
  58. package/src/utils/versions.js +6 -0
  59. package/src/utils/versions.js.map +1 -1
@@ -5,7 +5,7 @@
5
5
 
6
6
  import { IacOption } from '../../utils/iac';
7
7
 
8
- export type PyAgentFramework = 'strands';
8
+ export type PyAgentFramework = 'strands' | 'langchain';
9
9
  export type PyAgentInfra = 'agentcore' | 'none';
10
10
  export type AgentProtocol = 'http' | 'a2a' | 'ag-ui';
11
11
 
@@ -19,7 +19,7 @@
19
19
  "type": "string",
20
20
  "description": "The agent SDK to use.",
21
21
  "x-prompt": "Which agent SDK would you like to use?",
22
- "enum": ["strands"],
22
+ "enum": ["strands", "langchain"],
23
23
  "default": "strands",
24
24
  "x-priority": "important"
25
25
  },
@@ -15,7 +15,7 @@ exports.PY_DYNAMODB_AGENT_CONNECTION_GENERATOR_INFO = (0, nx_1.getGeneratorInfo)
15
15
  const pyDynamoDBAgentConnectionGenerator = async (tree, options) => {
16
16
  const sourceProject = (0, nx_1.readProjectConfigurationUnqualified)(tree, options.sourceProject);
17
17
  const targetProject = (0, nx_1.readProjectConfigurationUnqualified)(tree, options.targetProject);
18
- (0, py_1.addWorkspaceDependencyToPyProject)(tree, sourceProject.root, targetProject.name);
18
+ (0, py_1.addWorkspaceDependencyToPyProject)(tree, sourceProject, targetProject);
19
19
  const agentName = options.sourceComponent?.name ?? 'agent';
20
20
  const serveLocalTarget = `${agentName}-serve-local`;
21
21
  if (sourceProject.targets?.[serveLocalTarget]) {
@@ -1 +1 @@
1
- {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../../packages/nx-plugin/src/py/dynamodb/agent-connection/generator.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACH,uCAKoB;AACpB,kDAA6D;AAC7D,oDAAyE;AACzE,0CAK2B;AAC3B,4DAAgE;AAChE,0CAAsE;AAGzD,QAAA,2CAA2C,GACtD,IAAA,qBAAgB,EAAC,UAAU,CAAC,CAAC;AAExB,MAAM,kCAAkC,GAAG,KAAK,EACrD,IAAU,EACV,OAAiD,EACrB,EAAE;IAC9B,MAAM,aAAa,GAAG,IAAA,wCAAmC,EACvD,IAAI,EACJ,OAAO,CAAC,aAAa,CACtB,CAAC;IACF,MAAM,aAAa,GAAG,IAAA,wCAAmC,EACvD,IAAI,EACJ,OAAO,CAAC,aAAa,CACtB,CAAC;IAEF,IAAA,sCAAiC,EAC/B,IAAI,EACJ,aAAa,CAAC,IAAI,EAClB,aAAa,CAAC,IAAK,CACpB,CAAC;IAEF,MAAM,SAAS,GAAG,OAAO,CAAC,eAAe,EAAE,IAAI,IAAI,OAAO,CAAC;IAC3D,MAAM,gBAAgB,GAAG,GAAG,SAAS,cAAc,CAAC;IAEpD,IAAI,aAAa,CAAC,OAAO,EAAE,CAAC,gBAAgB,CAAC,EAAE,CAAC;QAC9C,IAAA,sCAAiC,EAAC,aAAa,EAAE,gBAAgB,EAAE;YACjE,QAAQ,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC;YAC9B,MAAM,EAAE,aAAa;SACtB,CAAC,CAAC;QACH,IAAA,mCAA0B,EAAC,IAAI,EAAE,aAAa,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;IACtE,CAAC;IAED,MAAM,IAAA,yCAA+B,EAAC,IAAI,EAAE;QAC1C,mDAA2C;KAC5C,CAAC,CAAC;IACH,MAAM,IAAA,6BAAoB,EAAC,IAAI,CAAC,CAAC;IACjC,OAAO,KAAK,IAAI,EAAE;QAChB,IAAA,4BAAmB,EAAC,IAAI,CAAC,CAAC;QAC1B,MAAM,IAAI,wBAAU,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,oBAAM,EAAE,EAAE,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;IAChE,CAAC,CAAC;AACJ,CAAC,CAAC;AAtCW,QAAA,kCAAkC,sCAsC7C;AAEF,kBAAe,0CAAkC,CAAC"}
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../../packages/nx-plugin/src/py/dynamodb/agent-connection/generator.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACH,uCAKoB;AACpB,kDAA6D;AAC7D,oDAAyE;AACzE,0CAK2B;AAC3B,4DAAgE;AAChE,0CAAsE;AAGzD,QAAA,2CAA2C,GACtD,IAAA,qBAAgB,EAAC,UAAU,CAAC,CAAC;AAExB,MAAM,kCAAkC,GAAG,KAAK,EACrD,IAAU,EACV,OAAiD,EACrB,EAAE;IAC9B,MAAM,aAAa,GAAG,IAAA,wCAAmC,EACvD,IAAI,EACJ,OAAO,CAAC,aAAa,CACtB,CAAC;IACF,MAAM,aAAa,GAAG,IAAA,wCAAmC,EACvD,IAAI,EACJ,OAAO,CAAC,aAAa,CACtB,CAAC;IAEF,IAAA,sCAAiC,EAAC,IAAI,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC;IAEtE,MAAM,SAAS,GAAG,OAAO,CAAC,eAAe,EAAE,IAAI,IAAI,OAAO,CAAC;IAC3D,MAAM,gBAAgB,GAAG,GAAG,SAAS,cAAc,CAAC;IAEpD,IAAI,aAAa,CAAC,OAAO,EAAE,CAAC,gBAAgB,CAAC,EAAE,CAAC;QAC9C,IAAA,sCAAiC,EAAC,aAAa,EAAE,gBAAgB,EAAE;YACjE,QAAQ,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC;YAC9B,MAAM,EAAE,aAAa;SACtB,CAAC,CAAC;QACH,IAAA,mCAA0B,EAAC,IAAI,EAAE,aAAa,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;IACtE,CAAC;IAED,MAAM,IAAA,yCAA+B,EAAC,IAAI,EAAE;QAC1C,mDAA2C;KAC5C,CAAC,CAAC;IACH,MAAM,IAAA,6BAAoB,EAAC,IAAI,CAAC,CAAC;IACjC,OAAO,KAAK,IAAI,EAAE;QAChB,IAAA,4BAAmB,EAAC,IAAI,CAAC,CAAC;QAC1B,MAAM,IAAI,wBAAU,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,oBAAM,EAAE,EAAE,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;IAChE,CAAC,CAAC;AACJ,CAAC,CAAC;AAlCW,QAAA,kCAAkC,sCAkC7C;AAEF,kBAAe,0CAAkC,CAAC"}
@@ -15,7 +15,7 @@ exports.PY_DYNAMODB_FAST_API_CONNECTION_GENERATOR_INFO = (0, nx_1.getGeneratorIn
15
15
  const pyDynamoDBFastApiConnectionGenerator = async (tree, options) => {
16
16
  const sourceProject = (0, nx_1.readProjectConfigurationUnqualified)(tree, options.sourceProject);
17
17
  const targetProject = (0, nx_1.readProjectConfigurationUnqualified)(tree, options.targetProject);
18
- (0, py_1.addWorkspaceDependencyToPyProject)(tree, sourceProject.root, targetProject.name);
18
+ (0, py_1.addWorkspaceDependencyToPyProject)(tree, sourceProject, targetProject);
19
19
  if (sourceProject.targets?.['serve-local']) {
20
20
  (0, nx_1.addDependencyToTargetIfNotPresent)(sourceProject, 'serve-local', {
21
21
  projects: [targetProject.name],
@@ -1 +1 @@
1
- {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../../packages/nx-plugin/src/py/dynamodb/fast-api-connection/generator.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACH,uCAKoB;AACpB,kDAA6D;AAC7D,oDAAyE;AACzE,0CAK2B;AAC3B,4DAAgE;AAChE,0CAAsE;AAGzD,QAAA,8CAA8C,GACzD,IAAA,qBAAgB,EAAC,UAAU,CAAC,CAAC;AAExB,MAAM,oCAAoC,GAAG,KAAK,EACvD,IAAU,EACV,OAAmD,EACvB,EAAE;IAC9B,MAAM,aAAa,GAAG,IAAA,wCAAmC,EACvD,IAAI,EACJ,OAAO,CAAC,aAAa,CACtB,CAAC;IACF,MAAM,aAAa,GAAG,IAAA,wCAAmC,EACvD,IAAI,EACJ,OAAO,CAAC,aAAa,CACtB,CAAC;IAEF,IAAA,sCAAiC,EAC/B,IAAI,EACJ,aAAa,CAAC,IAAI,EAClB,aAAa,CAAC,IAAK,CACpB,CAAC;IAEF,IAAI,aAAa,CAAC,OAAO,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC;QAC3C,IAAA,sCAAiC,EAAC,aAAa,EAAE,aAAa,EAAE;YAC9D,QAAQ,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC;YAC9B,MAAM,EAAE,aAAa;SACtB,CAAC,CAAC;QACH,IAAA,mCAA0B,EAAC,IAAI,EAAE,aAAa,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;IACtE,CAAC;IAED,MAAM,IAAA,yCAA+B,EAAC,IAAI,EAAE;QAC1C,sDAA8C;KAC/C,CAAC,CAAC;IACH,MAAM,IAAA,6BAAoB,EAAC,IAAI,CAAC,CAAC;IACjC,OAAO,KAAK,IAAI,EAAE;QAChB,IAAA,4BAAmB,EAAC,IAAI,CAAC,CAAC;QAC1B,MAAM,IAAI,wBAAU,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,oBAAM,EAAE,EAAE,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;IAChE,CAAC,CAAC;AACJ,CAAC,CAAC;AAnCW,QAAA,oCAAoC,wCAmC/C;AAEF,kBAAe,4CAAoC,CAAC"}
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../../packages/nx-plugin/src/py/dynamodb/fast-api-connection/generator.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACH,uCAKoB;AACpB,kDAA6D;AAC7D,oDAAyE;AACzE,0CAK2B;AAC3B,4DAAgE;AAChE,0CAAsE;AAGzD,QAAA,8CAA8C,GACzD,IAAA,qBAAgB,EAAC,UAAU,CAAC,CAAC;AAExB,MAAM,oCAAoC,GAAG,KAAK,EACvD,IAAU,EACV,OAAmD,EACvB,EAAE;IAC9B,MAAM,aAAa,GAAG,IAAA,wCAAmC,EACvD,IAAI,EACJ,OAAO,CAAC,aAAa,CACtB,CAAC;IACF,MAAM,aAAa,GAAG,IAAA,wCAAmC,EACvD,IAAI,EACJ,OAAO,CAAC,aAAa,CACtB,CAAC;IAEF,IAAA,sCAAiC,EAAC,IAAI,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC;IAEtE,IAAI,aAAa,CAAC,OAAO,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC;QAC3C,IAAA,sCAAiC,EAAC,aAAa,EAAE,aAAa,EAAE;YAC9D,QAAQ,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC;YAC9B,MAAM,EAAE,aAAa;SACtB,CAAC,CAAC;QACH,IAAA,mCAA0B,EAAC,IAAI,EAAE,aAAa,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;IACtE,CAAC;IAED,MAAM,IAAA,yCAA+B,EAAC,IAAI,EAAE;QAC1C,sDAA8C;KAC/C,CAAC,CAAC;IACH,MAAM,IAAA,6BAAoB,EAAC,IAAI,CAAC,CAAC;IACjC,OAAO,KAAK,IAAI,EAAE;QAChB,IAAA,4BAAmB,EAAC,IAAI,CAAC,CAAC;QAC1B,MAAM,IAAI,wBAAU,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,oBAAM,EAAE,EAAE,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;IAChE,CAAC,CAAC;AACJ,CAAC,CAAC;AA/BW,QAAA,oCAAoC,wCA+B/C;AAEF,kBAAe,4CAAoC,CAAC"}
@@ -15,7 +15,7 @@ exports.PY_DYNAMODB_MCP_SERVER_CONNECTION_GENERATOR_INFO = (0, nx_1.getGenerator
15
15
  const pyDynamoDBMcpServerConnectionGenerator = async (tree, options) => {
16
16
  const sourceProject = (0, nx_1.readProjectConfigurationUnqualified)(tree, options.sourceProject);
17
17
  const targetProject = (0, nx_1.readProjectConfigurationUnqualified)(tree, options.targetProject);
18
- (0, py_1.addWorkspaceDependencyToPyProject)(tree, sourceProject.root, targetProject.name);
18
+ (0, py_1.addWorkspaceDependencyToPyProject)(tree, sourceProject, targetProject);
19
19
  const mcpServerName = options.sourceComponent?.name ?? 'mcp-server';
20
20
  const serveLocalTarget = `${mcpServerName}-serve-local`;
21
21
  if (sourceProject.targets?.[serveLocalTarget]) {
@@ -1 +1 @@
1
- {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../../packages/nx-plugin/src/py/dynamodb/mcp-server-connection/generator.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACH,uCAKoB;AACpB,kDAA6D;AAC7D,oDAAyE;AACzE,0CAK2B;AAC3B,4DAAgE;AAChE,0CAAsE;AAGzD,QAAA,gDAAgD,GAC3D,IAAA,qBAAgB,EAAC,UAAU,CAAC,CAAC;AAExB,MAAM,sCAAsC,GAAG,KAAK,EACzD,IAAU,EACV,OAAqD,EACzB,EAAE;IAC9B,MAAM,aAAa,GAAG,IAAA,wCAAmC,EACvD,IAAI,EACJ,OAAO,CAAC,aAAa,CACtB,CAAC;IACF,MAAM,aAAa,GAAG,IAAA,wCAAmC,EACvD,IAAI,EACJ,OAAO,CAAC,aAAa,CACtB,CAAC;IAEF,IAAA,sCAAiC,EAC/B,IAAI,EACJ,aAAa,CAAC,IAAI,EAClB,aAAa,CAAC,IAAK,CACpB,CAAC;IAEF,MAAM,aAAa,GAAG,OAAO,CAAC,eAAe,EAAE,IAAI,IAAI,YAAY,CAAC;IACpE,MAAM,gBAAgB,GAAG,GAAG,aAAa,cAAc,CAAC;IAExD,IAAI,aAAa,CAAC,OAAO,EAAE,CAAC,gBAAgB,CAAC,EAAE,CAAC;QAC9C,IAAA,sCAAiC,EAAC,aAAa,EAAE,gBAAgB,EAAE;YACjE,QAAQ,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC;YAC9B,MAAM,EAAE,aAAa;SACtB,CAAC,CAAC;QACH,IAAA,mCAA0B,EAAC,IAAI,EAAE,aAAa,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;IACtE,CAAC;IAED,MAAM,IAAA,yCAA+B,EAAC,IAAI,EAAE;QAC1C,wDAAgD;KACjD,CAAC,CAAC;IACH,MAAM,IAAA,6BAAoB,EAAC,IAAI,CAAC,CAAC;IACjC,OAAO,KAAK,IAAI,EAAE;QAChB,IAAA,4BAAmB,EAAC,IAAI,CAAC,CAAC;QAC1B,MAAM,IAAI,wBAAU,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,oBAAM,EAAE,EAAE,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;IAChE,CAAC,CAAC;AACJ,CAAC,CAAC;AAtCW,QAAA,sCAAsC,0CAsCjD;AAEF,kBAAe,8CAAsC,CAAC"}
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../../packages/nx-plugin/src/py/dynamodb/mcp-server-connection/generator.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACH,uCAKoB;AACpB,kDAA6D;AAC7D,oDAAyE;AACzE,0CAK2B;AAC3B,4DAAgE;AAChE,0CAAsE;AAGzD,QAAA,gDAAgD,GAC3D,IAAA,qBAAgB,EAAC,UAAU,CAAC,CAAC;AAExB,MAAM,sCAAsC,GAAG,KAAK,EACzD,IAAU,EACV,OAAqD,EACzB,EAAE;IAC9B,MAAM,aAAa,GAAG,IAAA,wCAAmC,EACvD,IAAI,EACJ,OAAO,CAAC,aAAa,CACtB,CAAC;IACF,MAAM,aAAa,GAAG,IAAA,wCAAmC,EACvD,IAAI,EACJ,OAAO,CAAC,aAAa,CACtB,CAAC;IAEF,IAAA,sCAAiC,EAAC,IAAI,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC;IAEtE,MAAM,aAAa,GAAG,OAAO,CAAC,eAAe,EAAE,IAAI,IAAI,YAAY,CAAC;IACpE,MAAM,gBAAgB,GAAG,GAAG,aAAa,cAAc,CAAC;IAExD,IAAI,aAAa,CAAC,OAAO,EAAE,CAAC,gBAAgB,CAAC,EAAE,CAAC;QAC9C,IAAA,sCAAiC,EAAC,aAAa,EAAE,gBAAgB,EAAE;YACjE,QAAQ,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC;YAC9B,MAAM,EAAE,aAAa;SACtB,CAAC,CAAC;QACH,IAAA,mCAA0B,EAAC,IAAI,EAAE,aAAa,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;IACtE,CAAC;IAED,MAAM,IAAA,yCAA+B,EAAC,IAAI,EAAE;QAC1C,wDAAgD;KACjD,CAAC,CAAC;IACH,MAAM,IAAA,6BAAoB,EAAC,IAAI,CAAC,CAAC;IACjC,OAAO,KAAK,IAAI,EAAE;QAChB,IAAA,4BAAmB,EAAC,IAAI,CAAC,CAAC;QAC1B,MAAM,IAAI,wBAAU,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,oBAAM,EAAE,EAAE,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;IAChE,CAAC,CAAC;AACJ,CAAC,CAAC;AAlCW,QAAA,sCAAsC,0CAkCjD;AAEF,kBAAe,8CAAsC,CAAC"}
@@ -509,7 +509,7 @@ initialize_request = json.dumps({
509
509
  },
510
510
  })
511
511
 
512
- deadline = time.time() + 3 * 60
512
+ deadline = time.time() + 5 * 60
513
513
  while True:
514
514
  try:
515
515
  client.invoke_agent_runtime(
@@ -8,9 +8,22 @@ import type { PyProjectGeneratorSchema } from './schema';
8
8
  export declare const PY_PROJECT_GENERATOR_INFO: NxGeneratorInfo;
9
9
  export interface PyProjectDetails {
10
10
  /**
11
- * Full package name including scope (eg foo.bar)
11
+ * Fully qualified Nx project id including scope, in dot notation (eg foo.bar).
12
+ * This is the identifier Nx uses (readProjectConfiguration, the project
13
+ * graph, target references) and is intentionally kept dotted.
12
14
  */
13
15
  readonly fullyQualifiedName: string;
16
+ /**
17
+ * PEP 503 normalised Python distribution name (eg foo-bar). This is the name
18
+ * written to the project's `[project].name`, the root `[tool.uv.sources]`
19
+ * key, and any inter-project dependency string. It is hyphenated (not dotted)
20
+ * so `uv` and `@nxlv/python` can match it: uv writes `uv.lock` keyed by the
21
+ * PEP 503 hyphenated name, and `@nxlv/python`'s dependency inference splits a
22
+ * dotted name on `.` and so would otherwise drop the edge entirely. Keeping
23
+ * the distribution name decoupled from `fullyQualifiedName` is what lets the
24
+ * workspace dependency edge appear in the Nx project graph.
25
+ */
26
+ readonly distributionName: string;
14
27
  /**
15
28
  * Directory of the library relative to the root
16
29
  */
@@ -26,16 +26,19 @@ const getPyProjectDetails = (tree, schema) => {
26
26
  const normalizedName = (0, names_1.toSnakeCase)(schema.name);
27
27
  const normalizedModuleName = (0, names_1.toSnakeCase)(schema.moduleName ?? `${scope}_${normalizedName}`);
28
28
  const fullyQualifiedName = `${scope}.${normalizedName}`;
29
+ // The Python distribution name is the PEP 503 normalised form of the
30
+ // fully qualified name: hyphenated, never dotted. See PyProjectDetails.
31
+ const distributionName = (0, names_1.normalizeDistributionName)(fullyQualifiedName);
29
32
  // NB: interactive nx generator cli can pass empty string
30
33
  const dir = (0, devkit_1.joinPathFragments)(schema.directory || '.', schema.subDirectory || normalizedName);
31
- return { dir, fullyQualifiedName, normalizedModuleName };
34
+ return { dir, fullyQualifiedName, distributionName, normalizedModuleName };
32
35
  };
33
36
  exports.getPyProjectDetails = getPyProjectDetails;
34
37
  /**
35
38
  * Generates a Python project
36
39
  */
37
40
  const pyProjectGenerator = async (tree, schema) => {
38
- const { dir, normalizedModuleName, fullyQualifiedName } = (0, exports.getPyProjectDetails)(tree, schema);
41
+ const { dir, normalizedModuleName, fullyQualifiedName, distributionName } = (0, exports.getPyProjectDetails)(tree, schema);
39
42
  const pythonPlugin = (0, versions_1.withVersions)(['@nxlv/python']);
40
43
  (0, devkit_1.addDependenciesToPackageJson)(tree, {}, pythonPlugin);
41
44
  Object.entries(pythonPlugin).forEach(([name, version]) => (0, devkit_1.ensurePackage)(name, version));
@@ -70,7 +73,14 @@ const pyProjectGenerator = async (tree, schema) => {
70
73
  });
71
74
  }
72
75
  await (0, nxlv_python_1.uvProjectGenerator)(tree, {
76
+ // The Nx project id (and `uv.workspace.members` etc.) keys off `name`, so
77
+ // keep it dotted. `packageName` is the separate PEP 503 distribution name
78
+ // written to `[project].name` and the root `[tool.uv.sources]` key; it is
79
+ // hyphenated so `@nxlv/python` infers the workspace dependency edge (it
80
+ // splits a dotted name on `.` and would otherwise drop it). This split is
81
+ // the whole fix (see PyProjectDetails.distributionName).
73
82
  name: fullyQualifiedName,
83
+ packageName: distributionName,
74
84
  publishable: false,
75
85
  buildLockedVersions: true,
76
86
  buildBundleLocalDependencies: true,
@@ -1 +1 @@
1
- {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../packages/nx-plugin/src/py/project/generator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../packages/nx-plugin/src/py/project/generator.ts"],"names":[],"mappings":"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"}
@@ -1201,7 +1201,7 @@ initialize_request = json.dumps({
1201
1201
  },
1202
1202
  })
1203
1203
 
1204
- deadline = time.time() + 3 * 60
1204
+ deadline = time.time() + 5 * 60
1205
1205
  while True:
1206
1206
  try:
1207
1207
  client.invoke_agent_runtime(
@@ -509,7 +509,7 @@ initialize_request = json.dumps({
509
509
  },
510
510
  })
511
511
 
512
- deadline = time.time() + 3 * 60
512
+ deadline = time.time() + 5 * 60
513
513
  while True:
514
514
  try:
515
515
  client.invoke_agent_runtime(
@@ -297,6 +297,8 @@ const transientErrorPatterns = [
297
297
  'ECONNREFUSED',
298
298
  'ENOTFOUND',
299
299
  'P1000', // Prisma: authentication failed
300
+ 'P1001', // Prisma: can't reach database server
301
+ 'P1002', // Prisma: database server reached but timed out
300
302
  'ER_ACCESS_DENIED_ERROR', // MySQL: access denied
301
303
  ];
302
304
 
@@ -4104,6 +4106,8 @@ const transientErrorPatterns = [
4104
4106
  'ECONNREFUSED',
4105
4107
  'ENOTFOUND',
4106
4108
  'P1000', // Prisma: authentication failed
4109
+ 'P1001', // Prisma: can't reach database server
4110
+ 'P1002', // Prisma: database server reached but timed out
4107
4111
  'ER_ACCESS_DENIED_ERROR', // MySQL: access denied
4108
4112
  ];
4109
4113
 
@@ -95,6 +95,8 @@ const transientErrorPatterns = [
95
95
  'ECONNREFUSED',
96
96
  'ENOTFOUND',
97
97
  'P1000', // Prisma: authentication failed
98
+ 'P1001', // Prisma: can't reach database server
99
+ 'P1002', // Prisma: database server reached but timed out
98
100
  'ER_ACCESS_DENIED_ERROR', // MySQL: access denied
99
101
  ];
100
102
 
@@ -7,8 +7,6 @@ import { tanstackRouter } from '@tanstack/router-plugin/vite';
7
7
  /// <reference types='vitest' />
8
8
  import { defineConfig } from 'vite';
9
9
  import react from '@vitejs/plugin-react';
10
- import { nxViteTsPaths } from '@nx/vite/plugins/nx-tsconfig-paths.plugin';
11
- import { nxCopyAssetsPlugin } from '@nx/vite/plugins/nx-copy-assets.plugin';
12
10
 
13
11
  export default defineConfig(() => ({
14
12
  root: import.meta.dirname,
@@ -27,13 +25,11 @@ export default defineConfig(() => ({
27
25
  generatedRouteTree: resolve(__dirname, 'src/routeTree.gen.ts'),
28
26
  }),
29
27
  react(),
30
- nxViteTsPaths(),
31
- nxCopyAssetsPlugin(['*.md']),
32
28
  tailwindcss(),
33
29
  ],
34
30
  // Uncomment this if you are using workers.
35
31
  // worker: {
36
- // plugins: () => [ nxViteTsPaths() ],
32
+ // plugins: [],
37
33
  // },
38
34
  build: {
39
35
  outDir: '../dist/test-app',
@@ -52,7 +48,7 @@ export default defineConfig(() => ({
52
48
  include: ['{src,tests}/**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}'],
53
49
  reporters: ['default'],
54
50
  coverage: {
55
- reportsDirectory: '../coverage/test-app',
51
+ reportsDirectory: './test-output/vitest/coverage',
56
52
  provider: 'v8' as const,
57
53
  },
58
54
  },
@@ -68,8 +64,6 @@ import { tanstackRouter } from '@tanstack/router-plugin/vite';
68
64
  /// <reference types='vitest' />
69
65
  import { defineConfig } from 'vite';
70
66
  import react from '@vitejs/plugin-react';
71
- import { nxViteTsPaths } from '@nx/vite/plugins/nx-tsconfig-paths.plugin';
72
- import { nxCopyAssetsPlugin } from '@nx/vite/plugins/nx-copy-assets.plugin';
73
67
 
74
68
  export default defineConfig(() => ({
75
69
  root: import.meta.dirname,
@@ -88,12 +82,10 @@ export default defineConfig(() => ({
88
82
  generatedRouteTree: resolve(__dirname, 'src/routeTree.gen.ts'),
89
83
  }),
90
84
  react(),
91
- nxViteTsPaths(),
92
- nxCopyAssetsPlugin(['*.md']),
93
85
  ],
94
86
  // Uncomment this if you are using workers.
95
87
  // worker: {
96
- // plugins: () => [ nxViteTsPaths() ],
88
+ // plugins: [],
97
89
  // },
98
90
  build: {
99
91
  outDir: '../dist/test-app',
@@ -112,7 +104,7 @@ export default defineConfig(() => ({
112
104
  include: ['{src,tests}/**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}'],
113
105
  reporters: ['default'],
114
106
  coverage: {
115
- reportsDirectory: '../coverage/test-app',
107
+ reportsDirectory: './test-output/vitest/coverage',
116
108
  provider: 'v8' as const,
117
109
  },
118
110
  },
@@ -961,18 +953,7 @@ vitest.config.*.timestamp*
961
953
  runtime-config.json"
962
954
  `;
963
955
 
964
- exports[`react-website generator > Tanstack router integration > should generate website with no router correctly > .prettierignore 1`] = `
965
- "# Add files here to ignore them from prettier formatting
966
- /dist
967
- /coverage
968
- /.nx/cache
969
- /.nx/workspace-data"
970
- `;
971
-
972
- exports[`react-website generator > Tanstack router integration > should generate website with no router correctly > .prettierrc 1`] = `
973
- "{ "singleQuote": true }
974
- "
975
- `;
956
+ exports[`react-website generator > Tanstack router integration > should generate website with no router correctly > .prettierrc 1`] = `"{"singleQuote":true}"`;
976
957
 
977
958
  exports[`react-website generator > Tanstack router integration > should generate website with no router correctly > biome.json 1`] = `
978
959
  "{
@@ -1145,7 +1126,6 @@ exports[`react-website generator > Tanstack router integration > should generate
1145
1126
  "@vitest/ui": "4.1.8",
1146
1127
  "jiti": "2.4.2",
1147
1128
  "jsdom": "~22.1.0",
1148
- "prettier": "~3.6.2",
1149
1129
  "typescript": "~5.9.2",
1150
1130
  "vite": "8.0.16",
1151
1131
  "vitest": "4.1.8"
@@ -2009,9 +1989,9 @@ export default defineConfig(() => ({
2009
1989
 
2010
1990
  exports[`react-website generator > Tanstack router integration > should generate website with no router correctly > pnpm-workspace.yaml 1`] = `
2011
1991
  "packages:
2012
- - 'packages/*'
2013
- - 'test-app'
2014
- - 'packages/common/*'
1992
+ - "packages/*"
1993
+ - "test-app"
1994
+ - "packages/common/*"
2015
1995
  "
2016
1996
  `;
2017
1997
 
@@ -2066,7 +2046,7 @@ In order to integrate with cognito or trpc backends, you need to have a \`runtim
2066
2046
  `;
2067
2047
 
2068
2048
  exports[`react-website generator > Tanstack router integration > should generate website with no router correctly > test-app/index.html 1`] = `
2069
- "<!doctype html>
2049
+ "<!DOCTYPE html>
2070
2050
  <html lang="en">
2071
2051
  <head>
2072
2052
  <meta charset="utf-8" />
@@ -2467,9 +2447,9 @@ exports[`react-website generator > Tanstack router integration > should generate
2467
2447
 
2468
2448
  exports[`react-website generator > Tanstack router integration > should generate website with no router correctly > test-app/tsconfig.spec.json 1`] = `
2469
2449
  "{
2470
- "extends": "./tsconfig.json",
2450
+ "extends": "../tsconfig.base.json",
2471
2451
  "compilerOptions": {
2472
- "outDir": "../dist/out-tsc",
2452
+ "outDir": "./out-tsc/vitest",
2473
2453
  "types": [
2474
2454
  "vitest/globals",
2475
2455
  "vitest/importMeta",
@@ -2509,8 +2489,6 @@ exports[`react-website generator > Tanstack router integration > should generate
2509
2489
  /// <reference types='vitest' />
2510
2490
  import { defineConfig } from 'vite';
2511
2491
  import react from '@vitejs/plugin-react';
2512
- import { nxViteTsPaths } from '@nx/vite/plugins/nx-tsconfig-paths.plugin';
2513
- import { nxCopyAssetsPlugin } from '@nx/vite/plugins/nx-copy-assets.plugin';
2514
2492
 
2515
2493
  export default defineConfig(() => ({
2516
2494
  root: import.meta.dirname,
@@ -2523,15 +2501,10 @@ export default defineConfig(() => ({
2523
2501
  port: 4300,
2524
2502
  host: 'localhost',
2525
2503
  },
2526
- plugins: [
2527
- react(),
2528
- nxViteTsPaths(),
2529
- nxCopyAssetsPlugin(['*.md']),
2530
- tailwindcss(),
2531
- ],
2504
+ plugins: [react(), tailwindcss()],
2532
2505
  // Uncomment this if you are using workers.
2533
2506
  // worker: {
2534
- // plugins: () => [ nxViteTsPaths() ],
2507
+ // plugins: [],
2535
2508
  // },
2536
2509
  build: {
2537
2510
  outDir: '../dist/test-app',
@@ -2550,7 +2523,7 @@ export default defineConfig(() => ({
2550
2523
  include: ['{src,tests}/**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}'],
2551
2524
  reporters: ['default'],
2552
2525
  coverage: {
2553
- reportsDirectory: '../coverage/test-app',
2526
+ reportsDirectory: './test-output/vitest/coverage',
2554
2527
  provider: 'v8' as const,
2555
2528
  },
2556
2529
  },
@@ -2603,18 +2576,7 @@ vitest.config.*.timestamp*
2603
2576
  runtime-config.json"
2604
2577
  `;
2605
2578
 
2606
- exports[`react-website generator > Tanstack router integration > should generate website with router correctly > .prettierignore 1`] = `
2607
- "# Add files here to ignore them from prettier formatting
2608
- /dist
2609
- /coverage
2610
- /.nx/cache
2611
- /.nx/workspace-data"
2612
- `;
2613
-
2614
- exports[`react-website generator > Tanstack router integration > should generate website with router correctly > .prettierrc 1`] = `
2615
- "{ "singleQuote": true }
2616
- "
2617
- `;
2579
+ exports[`react-website generator > Tanstack router integration > should generate website with router correctly > .prettierrc 1`] = `"{"singleQuote":true}"`;
2618
2580
 
2619
2581
  exports[`react-website generator > Tanstack router integration > should generate website with router correctly > biome.json 1`] = `
2620
2582
  "{
@@ -2792,7 +2754,6 @@ exports[`react-website generator > Tanstack router integration > should generate
2792
2754
  "@vitest/ui": "4.1.8",
2793
2755
  "jiti": "2.4.2",
2794
2756
  "jsdom": "~22.1.0",
2795
- "prettier": "~3.6.2",
2796
2757
  "typescript": "~5.9.2",
2797
2758
  "vite": "8.0.16",
2798
2759
  "vitest": "4.1.8"
@@ -3656,9 +3617,9 @@ export default defineConfig(() => ({
3656
3617
 
3657
3618
  exports[`react-website generator > Tanstack router integration > should generate website with router correctly > pnpm-workspace.yaml 1`] = `
3658
3619
  "packages:
3659
- - 'packages/*'
3660
- - 'test-app'
3661
- - 'packages/common/*'
3620
+ - "packages/*"
3621
+ - "test-app"
3622
+ - "packages/common/*"
3662
3623
  "
3663
3624
  `;
3664
3625
 
@@ -3713,7 +3674,7 @@ In order to integrate with cognito or trpc backends, you need to have a \`runtim
3713
3674
  `;
3714
3675
 
3715
3676
  exports[`react-website generator > Tanstack router integration > should generate website with router correctly > test-app/index.html 1`] = `
3716
- "<!doctype html>
3677
+ "<!DOCTYPE html>
3717
3678
  <html lang="en">
3718
3679
  <head>
3719
3680
  <meta charset="utf-8" />
@@ -4298,9 +4259,9 @@ exports[`react-website generator > Tanstack router integration > should generate
4298
4259
 
4299
4260
  exports[`react-website generator > Tanstack router integration > should generate website with router correctly > test-app/tsconfig.spec.json 1`] = `
4300
4261
  "{
4301
- "extends": "./tsconfig.json",
4262
+ "extends": "../tsconfig.base.json",
4302
4263
  "compilerOptions": {
4303
- "outDir": "../dist/out-tsc",
4264
+ "outDir": "./out-tsc/vitest",
4304
4265
  "types": [
4305
4266
  "vitest/globals",
4306
4267
  "vitest/importMeta",
@@ -4342,8 +4303,6 @@ import { tanstackRouter } from '@tanstack/router-plugin/vite';
4342
4303
  /// <reference types='vitest' />
4343
4304
  import { defineConfig } from 'vite';
4344
4305
  import react from '@vitejs/plugin-react';
4345
- import { nxViteTsPaths } from '@nx/vite/plugins/nx-tsconfig-paths.plugin';
4346
- import { nxCopyAssetsPlugin } from '@nx/vite/plugins/nx-copy-assets.plugin';
4347
4306
 
4348
4307
  export default defineConfig(() => ({
4349
4308
  root: import.meta.dirname,
@@ -4362,13 +4321,11 @@ export default defineConfig(() => ({
4362
4321
  generatedRouteTree: resolve(__dirname, 'src/routeTree.gen.ts'),
4363
4322
  }),
4364
4323
  react(),
4365
- nxViteTsPaths(),
4366
- nxCopyAssetsPlugin(['*.md']),
4367
4324
  tailwindcss(),
4368
4325
  ],
4369
4326
  // Uncomment this if you are using workers.
4370
4327
  // worker: {
4371
- // plugins: () => [ nxViteTsPaths() ],
4328
+ // plugins: [],
4372
4329
  // },
4373
4330
  build: {
4374
4331
  outDir: '../dist/test-app',
@@ -4387,7 +4344,7 @@ export default defineConfig(() => ({
4387
4344
  include: ['{src,tests}/**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}'],
4388
4345
  reporters: ['default'],
4389
4346
  coverage: {
4390
- reportsDirectory: '../coverage/test-app',
4347
+ reportsDirectory: './test-output/vitest/coverage',
4391
4348
  provider: 'v8' as const,
4392
4349
  },
4393
4350
  },
@@ -4459,8 +4416,6 @@ import { tanstackRouter } from '@tanstack/router-plugin/vite';
4459
4416
  /// <reference types='vitest' />
4460
4417
  import { defineConfig } from 'vite';
4461
4418
  import react from '@vitejs/plugin-react';
4462
- import { nxViteTsPaths } from '@nx/vite/plugins/nx-tsconfig-paths.plugin';
4463
- import { nxCopyAssetsPlugin } from '@nx/vite/plugins/nx-copy-assets.plugin';
4464
4419
 
4465
4420
  export default defineConfig(() => ({
4466
4421
  root: import.meta.dirname,
@@ -4479,13 +4434,11 @@ export default defineConfig(() => ({
4479
4434
  generatedRouteTree: resolve(__dirname, 'src/routeTree.gen.ts'),
4480
4435
  }),
4481
4436
  react(),
4482
- nxViteTsPaths(),
4483
- nxCopyAssetsPlugin(['*.md']),
4484
4437
  tailwindcss(),
4485
4438
  ],
4486
4439
  // Uncomment this if you are using workers.
4487
4440
  // worker: {
4488
- // plugins: () => [ nxViteTsPaths() ],
4441
+ // plugins: [],
4489
4442
  // },
4490
4443
  build: {
4491
4444
  outDir: '../dist/test-app',
@@ -4504,7 +4457,7 @@ export default defineConfig(() => ({
4504
4457
  include: ['{src,tests}/**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}'],
4505
4458
  reporters: ['default'],
4506
4459
  coverage: {
4507
- reportsDirectory: '../coverage/test-app',
4460
+ reportsDirectory: './test-output/vitest/coverage',
4508
4461
  provider: 'v8' as const,
4509
4462
  },
4510
4463
  },
@@ -67,6 +67,7 @@ resource "null_resource" "add_callback_url" {
67
67
  import boto3
68
68
  import os
69
69
  import sys
70
+ import time
70
71
 
71
72
  # Configuration
72
73
  user_pool_id = os.environ['USER_POOL_ID']
@@ -76,12 +77,24 @@ new_callback_url = os.environ['NEW_CALLBACK_URL']
76
77
  # Initialize Cognito client
77
78
  cognito = boto3.client('cognito-idp')
78
79
 
80
+ # A freshly created user pool / client can take several minutes to become
81
+ # visible to describe_user_pool_client, so retry on ResourceNotFoundException.
82
+ def describe_with_retry():
83
+ deadline = time.time() + 5 * 60
84
+ while True:
85
+ try:
86
+ return cognito.describe_user_pool_client(
87
+ UserPoolId=user_pool_id,
88
+ ClientId=client_id,
89
+ )
90
+ except cognito.exceptions.ResourceNotFoundException:
91
+ if time.time() >= deadline:
92
+ raise
93
+ time.sleep(5)
94
+
79
95
  try:
80
96
  # Get current user pool client configuration
81
- response = cognito.describe_user_pool_client(
82
- UserPoolId=user_pool_id,
83
- ClientId=client_id
84
- )
97
+ response = describe_with_retry()
85
98
 
86
99
  client_config = response['UserPoolClient']
87
100
  current_callback_urls = client_config.get('CallbackURLs', [])