langgraph-cli 0.4.26__tar.gz → 0.4.27__tar.gz

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 (149) hide show
  1. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/PKG-INFO +2 -2
  2. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/js-examples/yarn.lock +4 -5
  3. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/js-monorepo-example/package.json +1 -1
  4. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/js-monorepo-example/yarn.lock +43 -44
  5. langgraph_cli-0.4.27/langgraph_cli/__init__.py +1 -0
  6. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/langgraph_cli/deploy.py +45 -1
  7. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/pyproject.toml +1 -1
  8. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/tests/unit_tests/test_deploy_helpers.py +155 -0
  9. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/uv-examples/monorepo/apps/agent/pyproject.toml +1 -0
  10. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/uv-examples/monorepo/pyproject.toml +1 -0
  11. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/uv-examples/monorepo/uv.lock +60 -7
  12. langgraph_cli-0.4.27/uv-examples/simple/uv.lock +988 -0
  13. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/uv.lock +7 -7
  14. langgraph_cli-0.4.26/langgraph_cli/__init__.py +0 -1
  15. langgraph_cli-0.4.26/uv-examples/simple/uv.lock +0 -877
  16. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/.gitignore +0 -0
  17. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/LICENSE +0 -0
  18. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/Makefile +0 -0
  19. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/README.md +0 -0
  20. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/examples/.env.example +0 -0
  21. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/examples/.gitignore +0 -0
  22. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/examples/Makefile +0 -0
  23. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/examples/graph_prerelease_reqs/agent.py +0 -0
  24. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/examples/graph_prerelease_reqs/deps/additional_deps/pyproject.toml +0 -0
  25. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/examples/graph_prerelease_reqs/deps/zuper_deps/pyproject.toml +0 -0
  26. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/examples/graph_prerelease_reqs/langgraph.json +0 -0
  27. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/examples/graph_prerelease_reqs/pyproject.toml +0 -0
  28. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/examples/graph_prerelease_reqs_fail/agent.py +0 -0
  29. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/examples/graph_prerelease_reqs_fail/langgraph.json +0 -0
  30. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/examples/graph_prerelease_reqs_fail/pyproject.toml +0 -0
  31. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/examples/graphs/agent.py +0 -0
  32. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/examples/graphs/langgraph.json +0 -0
  33. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/examples/graphs/storm.py +0 -0
  34. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/examples/graphs_reqs_a/__init__.py +0 -0
  35. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/examples/graphs_reqs_a/graphs_submod/__init__.py +0 -0
  36. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/examples/graphs_reqs_a/graphs_submod/agent.py +0 -0
  37. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/examples/graphs_reqs_a/graphs_submod/subprompt.txt +0 -0
  38. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/examples/graphs_reqs_a/hello.py +0 -0
  39. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/examples/graphs_reqs_a/langgraph.json +0 -0
  40. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/examples/graphs_reqs_a/prompt.txt +0 -0
  41. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/examples/graphs_reqs_a/requirements.txt +0 -0
  42. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/examples/graphs_reqs_b/graphs_submod/agent.py +0 -0
  43. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/examples/graphs_reqs_b/graphs_submod/subprompt.txt +0 -0
  44. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/examples/graphs_reqs_b/hello.py +0 -0
  45. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/examples/graphs_reqs_b/langgraph.json +0 -0
  46. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/examples/graphs_reqs_b/prompt.txt +0 -0
  47. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/examples/graphs_reqs_b/requirements.txt +0 -0
  48. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/examples/graphs_reqs_b/utils/__init__.py +0 -0
  49. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/examples/graphs_reqs_b/utils/greeter.py +0 -0
  50. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/examples/langgraph.json +0 -0
  51. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/examples/my_app.py +0 -0
  52. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/examples/pipconf.txt +0 -0
  53. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/examples/poetry.lock +0 -0
  54. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/examples/pyproject.toml +0 -0
  55. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/generate_schema.py +0 -0
  56. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/js-examples/.dockerignore +0 -0
  57. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/js-examples/.editorconfig +0 -0
  58. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/js-examples/.env.example +0 -0
  59. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/js-examples/.eslintrc.cjs +0 -0
  60. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/js-examples/.gitignore +0 -0
  61. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/js-examples/LICENSE +0 -0
  62. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/js-examples/README.md +0 -0
  63. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/js-examples/jest.config.js +0 -0
  64. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/js-examples/langgraph.json +0 -0
  65. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/js-examples/package.json +0 -0
  66. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/js-examples/src/agent/graph.ts +0 -0
  67. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/js-examples/src/agent/state.ts +0 -0
  68. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/js-examples/static/studio.png +0 -0
  69. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/js-examples/tests/agent.test.ts +0 -0
  70. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/js-examples/tests/graph.int.test.ts +0 -0
  71. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/js-examples/tsconfig.json +0 -0
  72. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/js-monorepo-example/.eslintrc.cjs +0 -0
  73. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/js-monorepo-example/apps/agent/langgraph.json +0 -0
  74. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/js-monorepo-example/apps/agent/package.json +0 -0
  75. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/js-monorepo-example/apps/agent/src/graph.ts +0 -0
  76. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/js-monorepo-example/apps/agent/src/state.ts +0 -0
  77. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/js-monorepo-example/apps/agent/tsconfig.json +0 -0
  78. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/js-monorepo-example/libs/shared/package.json +0 -0
  79. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/js-monorepo-example/libs/shared/src/index.ts +0 -0
  80. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/js-monorepo-example/libs/shared/tsconfig.json +0 -0
  81. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/js-monorepo-example/tsconfig.json +0 -0
  82. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/js-monorepo-example/turbo.json +0 -0
  83. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/langgraph_cli/__main__.py +0 -0
  84. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/langgraph_cli/_ignore.py +0 -0
  85. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/langgraph_cli/analytics.py +0 -0
  86. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/langgraph_cli/archive.py +0 -0
  87. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/langgraph_cli/cli.py +0 -0
  88. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/langgraph_cli/config.py +0 -0
  89. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/langgraph_cli/constants.py +0 -0
  90. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/langgraph_cli/docker.py +0 -0
  91. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/langgraph_cli/exec.py +0 -0
  92. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/langgraph_cli/host_backend.py +0 -0
  93. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/langgraph_cli/progress.py +0 -0
  94. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/langgraph_cli/py.typed +0 -0
  95. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/langgraph_cli/schemas.py +0 -0
  96. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/langgraph_cli/templates.py +0 -0
  97. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/langgraph_cli/util.py +0 -0
  98. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/langgraph_cli/uv_lock.py +0 -0
  99. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/langgraph_cli/version.py +0 -0
  100. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/python-monorepo-example/apps/agent/.env.example +0 -0
  101. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/python-monorepo-example/apps/agent/langgraph.json +0 -0
  102. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/python-monorepo-example/apps/agent/pyproject.toml +0 -0
  103. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/python-monorepo-example/apps/agent/src/agent/__init__.py +0 -0
  104. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/python-monorepo-example/apps/agent/src/agent/graph.py +0 -0
  105. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/python-monorepo-example/apps/agent/src/agent/state.py +0 -0
  106. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/python-monorepo-example/libs/common/__init__.py +0 -0
  107. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/python-monorepo-example/libs/common/helpers.py +0 -0
  108. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/python-monorepo-example/libs/shared/pyproject.toml +0 -0
  109. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/python-monorepo-example/libs/shared/src/shared/__init__.py +0 -0
  110. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/python-monorepo-example/libs/shared/src/shared/utils.py +0 -0
  111. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/python-monorepo-example/pyproject.toml +0 -0
  112. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/schemas/schema.json +0 -0
  113. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/schemas/schema.v0.json +0 -0
  114. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/schemas/version.schema.json +0 -0
  115. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/tests/__init__.py +0 -0
  116. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/tests/integration_tests/__init__.py +0 -0
  117. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/tests/integration_tests/test_cli.py +0 -0
  118. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/tests/unit_tests/__init__.py +0 -0
  119. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/tests/unit_tests/agent.py +0 -0
  120. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/tests/unit_tests/cli/__init__.py +0 -0
  121. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/tests/unit_tests/cli/langgraph.json +0 -0
  122. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/tests/unit_tests/cli/pyproject.toml +0 -0
  123. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/tests/unit_tests/cli/test_cli.py +0 -0
  124. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/tests/unit_tests/cli/test_templates.py +0 -0
  125. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/tests/unit_tests/conftest.py +0 -0
  126. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/tests/unit_tests/graphs/agent.py +0 -0
  127. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/tests/unit_tests/helpers.py +0 -0
  128. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/tests/unit_tests/multiplatform/js.mts +0 -0
  129. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/tests/unit_tests/multiplatform/python.py +0 -0
  130. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/tests/unit_tests/pipconfig.txt +0 -0
  131. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/tests/unit_tests/test_archive.py +0 -0
  132. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/tests/unit_tests/test_config.json +0 -0
  133. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/tests/unit_tests/test_config.py +0 -0
  134. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/tests/unit_tests/test_docker.py +0 -0
  135. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/tests/unit_tests/test_host_backend.py +0 -0
  136. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/tests/unit_tests/test_logs_helpers.py +0 -0
  137. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/tests/unit_tests/test_util.py +0 -0
  138. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/uv-examples/monorepo/apps/agent/.env.example +0 -0
  139. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/uv-examples/monorepo/apps/agent/langgraph.json +0 -0
  140. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/uv-examples/monorepo/apps/agent/src/agent/__init__.py +0 -0
  141. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/uv-examples/monorepo/apps/agent/src/agent/graph.py +0 -0
  142. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/uv-examples/monorepo/libs/shared/pyproject.toml +0 -0
  143. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/uv-examples/monorepo/libs/shared/src/shared/__init__.py +0 -0
  144. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/uv-examples/monorepo/libs/shared/src/shared/utils.py +0 -0
  145. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/uv-examples/simple/.env.example +0 -0
  146. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/uv-examples/simple/langgraph.json +0 -0
  147. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/uv-examples/simple/pyproject.toml +0 -0
  148. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/uv-examples/simple/src/agent/__init__.py +0 -0
  149. {langgraph_cli-0.4.26 → langgraph_cli-0.4.27}/uv-examples/simple/src/agent/graph.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: langgraph-cli
3
- Version: 0.4.26
3
+ Version: 0.4.27
4
4
  Summary: CLI for interacting with LangGraph API
5
5
  Project-URL: Source, https://github.com/langchain-ai/langgraph/tree/main/libs/cli
6
6
  Project-URL: Twitter, https://x.com/langchain_oss
@@ -16,7 +16,7 @@ Requires-Dist: pathspec>=0.11.0
16
16
  Requires-Dist: python-dotenv>=0.8.0
17
17
  Requires-Dist: tomli>=2.0.1; python_version < '3.11'
18
18
  Provides-Extra: inmem
19
- Requires-Dist: langgraph-api<0.9.0,>=0.5.35; (python_version >= '3.11') and extra == 'inmem'
19
+ Requires-Dist: langgraph-api<0.10.0,>=0.5.35; (python_version >= '3.11') and extra == 'inmem'
20
20
  Requires-Dist: langgraph-runtime-inmem>=0.7; (python_version >= '3.11') and extra == 'inmem'
21
21
  Description-Content-Type: text/markdown
22
22
 
@@ -3675,12 +3675,11 @@ keyv@^4.5.4:
3675
3675
  json-buffer "3.0.1"
3676
3676
 
3677
3677
  "langsmith@>=0.5.0 <1.0.0":
3678
- version "0.5.20"
3679
- resolved "https://registry.yarnpkg.com/langsmith/-/langsmith-0.5.20.tgz#4021847d2ccd5a86c5eb96060f9bb5f19f80eca5"
3680
- integrity sha512-ULhLM8RswvQDXufLtNtvclHrWCBx8Cb5UPI6lAZC+8Dq59iHsVPz/3Ac9khWNm1VIvChRsuykixD/WrmzuuA3Q==
3678
+ version "0.6.3"
3679
+ resolved "https://registry.yarnpkg.com/langsmith/-/langsmith-0.6.3.tgz#a3d8ad58d66a47d3697e3c69b2be3f6df5233190"
3680
+ integrity sha512-pXrQ4/4myQvjFFOAUmt5pWRrLEZR20gzIJD7MNdUH+5/S5nLI4ZRBo/SYKC6coaYj9pYTfQdBIzcs+3kfJ5uDA==
3681
3681
  dependencies:
3682
3682
  p-queue "6.6.2"
3683
- uuid "10.0.0"
3684
3683
 
3685
3684
  leven@^3.1.0:
3686
3685
  version "3.1.0"
@@ -4848,7 +4847,7 @@ uri-js@^4.2.2:
4848
4847
  dependencies:
4849
4848
  punycode "^2.1.0"
4850
4849
 
4851
- uuid@10.0.0, uuid@^10.0.0:
4850
+ uuid@^10.0.0:
4852
4851
  version "10.0.0"
4853
4852
  resolved "https://registry.yarnpkg.com/uuid/-/uuid-10.0.0.tgz#5a95aa454e6e002725c79055fd42aaba30ca6294"
4854
4853
  integrity sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==
@@ -17,7 +17,7 @@
17
17
  "lint": "eslint 'apps/**/*.ts' 'libs/**/*.ts'"
18
18
  },
19
19
  "devDependencies": {
20
- "turbo": "^2.9.7",
20
+ "turbo": "^2.9.14",
21
21
  "typescript": "^5.9.3",
22
22
  "@tsconfig/recommended": "^1.0.13",
23
23
  "@eslint/eslintrc": "^3.3.5",
@@ -166,35 +166,35 @@
166
166
  resolved "https://registry.yarnpkg.com/@tsconfig/recommended/-/recommended-1.0.13.tgz#269fce3ad04ca70b93269ff44cca81b950f542da"
167
167
  integrity sha512-sySRuBfMKyKO/j2ZAhR8kSembhjuPEV4Ra3AHtmWLq51+iGaudr45crPSzNC5b7/Ctrh9dfUpBuTlYrH6rM58Q==
168
168
 
169
- "@turbo/darwin-64@2.9.7":
170
- version "2.9.7"
171
- resolved "https://registry.yarnpkg.com/@turbo/darwin-64/-/darwin-64-2.9.7.tgz#46fddae01ea7817192dc6ff36a678cc3879b753b"
172
- integrity sha512-wnvOWuVWJ5EUHNKxExEWiGlTeVpLG1L0PCu5MUozyC1P2SHGiWsmpW6/yAuShH91Fa2TAHOvdCRBzriZh4j4Eg==
173
-
174
- "@turbo/darwin-arm64@2.9.7":
175
- version "2.9.7"
176
- resolved "https://registry.yarnpkg.com/@turbo/darwin-arm64/-/darwin-arm64-2.9.7.tgz#cd7cf3a024509af0f59ae3885216d62fd090fdb6"
177
- integrity sha512-mA0FIPMwwN3lodDkQYaGxj6PeT7ZaN5aCEbkKn/WB+ZB9yJdVWA4J83GH7t43jqDc5dcnVluVN5UFx3plRiXhA==
178
-
179
- "@turbo/linux-64@2.9.7":
180
- version "2.9.7"
181
- resolved "https://registry.yarnpkg.com/@turbo/linux-64/-/linux-64-2.9.7.tgz#25ee9a2cb3042498a3203e14653b14041105020f"
182
- integrity sha512-fEbUYpgb5l7P+q+5tsWF2gw+/GSjUsuUTcnfm+f0lozUjgcjLKyOat6PgtAChmIFcTPchCL/8rJ3TvkBy01gfA==
183
-
184
- "@turbo/linux-arm64@2.9.7":
185
- version "2.9.7"
186
- resolved "https://registry.yarnpkg.com/@turbo/linux-arm64/-/linux-arm64-2.9.7.tgz#5b19d6249a50cb8153b8f2bc22ad10bbda614fbe"
187
- integrity sha512-VkUjulo9ytfHKUHOS5gy0XPoh4CTKPXWCL8nLdrlHVi9fSut31ECeUqnm/dAbETP5D4xo9mH9XkJ+qMzGe/zmg==
188
-
189
- "@turbo/windows-64@2.9.7":
190
- version "2.9.7"
191
- resolved "https://registry.yarnpkg.com/@turbo/windows-64/-/windows-64-2.9.7.tgz#900645776fa44ff8333e801d890992736f6dbc72"
192
- integrity sha512-/GWdY6/x4aIHqkYJq596Rpdk1x0MkpRPkJcLAoB3yGRwyUms0+u2F1GnV54IbyAZTeKLRWSJKzNC+QwVGdYchA==
193
-
194
- "@turbo/windows-arm64@2.9.7":
195
- version "2.9.7"
196
- resolved "https://registry.yarnpkg.com/@turbo/windows-arm64/-/windows-arm64-2.9.7.tgz#e678d73fdbcbb12a679403fe7ba070fb67f37810"
197
- integrity sha512-xBBgxCC5PK2+WZ1PPRZdp+aJ0bMBcEbweXWux3RUHJvX9ZodcoQySkrW6qt+ahb+uk8ZjyQodLfDwtVSoYds1w==
169
+ "@turbo/darwin-64@2.9.14":
170
+ version "2.9.14"
171
+ resolved "https://registry.yarnpkg.com/@turbo/darwin-64/-/darwin-64-2.9.14.tgz#b9ec6ac637b9c5fdba5dae9d743f5d121f091242"
172
+ integrity sha512-t7QiPflaEyBE4oayeZtSmu4mEfjgIrcNlNNl1z1dmIVPqEdtA7+CfTf8d7KXsOGPh6aNgWjKxyvQg9uGfDQF+A==
173
+
174
+ "@turbo/darwin-arm64@2.9.14":
175
+ version "2.9.14"
176
+ resolved "https://registry.yarnpkg.com/@turbo/darwin-arm64/-/darwin-arm64-2.9.14.tgz#99d19f3e59842c595d2828c72a2e4ef537408f38"
177
+ integrity sha512-d23147mC9BsCPA9mJ0h/ubcpbRgcJBXbcG3+Vq7YLhjz3IXuvQsJ1UXH8f4MD76ZjJ4m/E4aRdJV+MW88CDfbw==
178
+
179
+ "@turbo/linux-64@2.9.14":
180
+ version "2.9.14"
181
+ resolved "https://registry.yarnpkg.com/@turbo/linux-64/-/linux-64-2.9.14.tgz#9c907434f091cd75529f5496516f79b71935d2bb"
182
+ integrity sha512-P3ZKB5tuUDdDQWuAsACGUR1qv9W7BNWxdxqVJ0kZNuNNPRaVYTPPikLcp79+GiEcW3npsR+KyP38lnQiBc5aSA==
183
+
184
+ "@turbo/linux-arm64@2.9.14":
185
+ version "2.9.14"
186
+ resolved "https://registry.yarnpkg.com/@turbo/linux-arm64/-/linux-arm64-2.9.14.tgz#79ae9060e6ee9e0fb784ae0747e980f582e75313"
187
+ integrity sha512-ZRTlzcUMrrPv9ZuDzRF9n60Ym13bKeG9jDB8WjxyLhWNzV+AJQN+zdpIk3NJYf2zQsGUm1mNar2P0elRzLw25g==
188
+
189
+ "@turbo/windows-64@2.9.14":
190
+ version "2.9.14"
191
+ resolved "https://registry.yarnpkg.com/@turbo/windows-64/-/windows-64-2.9.14.tgz#68a80f299f35189314184c88301caad982d1c0c2"
192
+ integrity sha512-exanwN6sIduZwykYeiTQj8kCmOhazP5WOz3bvXMcYtjhL6Z3iRWLewKrXCBq0bqwSP3iBMb/AerRCnHI4lx46A==
193
+
194
+ "@turbo/windows-arm64@2.9.14":
195
+ version "2.9.14"
196
+ resolved "https://registry.yarnpkg.com/@turbo/windows-arm64/-/windows-arm64-2.9.14.tgz#4dc16684f0ddce53fafe56ad8f55205c4473d17a"
197
+ integrity sha512-fVdCsnmYoKICsycbWuuGp6Jvi51/3G/UluFWuAUCvR8PIW5IJkAk5BM9UF8PSm0Q2IphWHFZjYEgjHsh3B9y/g==
198
198
 
199
199
  "@types/esrecurse@^4.3.1":
200
200
  version "4.3.1"
@@ -1327,12 +1327,11 @@ keyv@^4.5.4:
1327
1327
  json-buffer "3.0.1"
1328
1328
 
1329
1329
  "langsmith@>=0.5.0 <1.0.0":
1330
- version "0.5.20"
1331
- resolved "https://registry.yarnpkg.com/langsmith/-/langsmith-0.5.20.tgz#4021847d2ccd5a86c5eb96060f9bb5f19f80eca5"
1332
- integrity sha512-ULhLM8RswvQDXufLtNtvclHrWCBx8Cb5UPI6lAZC+8Dq59iHsVPz/3Ac9khWNm1VIvChRsuykixD/WrmzuuA3Q==
1330
+ version "0.7.1"
1331
+ resolved "https://registry.yarnpkg.com/langsmith/-/langsmith-0.7.1.tgz#d721ad2e5211f9a5373e8a84eb4fed36b5621971"
1332
+ integrity sha512-Wjk90UjNoY5cBHMlNAC/eZx5clI8jnjBOBW8uJu8+MWBtx0QesNjsUiLtjI+I3UnrpxFFpDqGXcnhBjH654Mqg==
1333
1333
  dependencies:
1334
1334
  p-queue "6.6.2"
1335
- uuid "10.0.0"
1336
1335
 
1337
1336
  levn@^0.4.1:
1338
1337
  version "0.4.1"
@@ -1814,17 +1813,17 @@ tsconfig-paths@^3.15.0:
1814
1813
  minimist "^1.2.6"
1815
1814
  strip-bom "^3.0.0"
1816
1815
 
1817
- turbo@^2.9.7:
1818
- version "2.9.7"
1819
- resolved "https://registry.yarnpkg.com/turbo/-/turbo-2.9.7.tgz#da6d5a821f0bde5174e1a55af6690dad5c2fb004"
1820
- integrity sha512-epxzqVO2s0IxcSWcgb+qKrtco8isfe7g3VtiS6hkYnEK4A9XQDZbrtavQ6MtWR1KoQn+1fUomaQth2rfRHlUlg==
1816
+ turbo@^2.9.14:
1817
+ version "2.9.14"
1818
+ resolved "https://registry.yarnpkg.com/turbo/-/turbo-2.9.14.tgz#d412fcc4c9bd8dba29cec5bbd54d5a74ab2b1bee"
1819
+ integrity sha512-BQqXRr4UoWI3UPFrtznCLykYHxwxWh53iCB57x092jPMjIlW1wnm3N895g5irpiXmnxUhREBB0n6+y8BHhs4nw==
1821
1820
  optionalDependencies:
1822
- "@turbo/darwin-64" "2.9.7"
1823
- "@turbo/darwin-arm64" "2.9.7"
1824
- "@turbo/linux-64" "2.9.7"
1825
- "@turbo/linux-arm64" "2.9.7"
1826
- "@turbo/windows-64" "2.9.7"
1827
- "@turbo/windows-arm64" "2.9.7"
1821
+ "@turbo/darwin-64" "2.9.14"
1822
+ "@turbo/darwin-arm64" "2.9.14"
1823
+ "@turbo/linux-64" "2.9.14"
1824
+ "@turbo/linux-arm64" "2.9.14"
1825
+ "@turbo/windows-64" "2.9.14"
1826
+ "@turbo/windows-arm64" "2.9.14"
1828
1827
 
1829
1828
  type-check@^0.4.0, type-check@~0.4.0:
1830
1829
  version "0.4.0"
@@ -1900,7 +1899,7 @@ uri-js@^4.2.2:
1900
1899
  dependencies:
1901
1900
  punycode "^2.1.0"
1902
1901
 
1903
- uuid@10.0.0, uuid@^10.0.0:
1902
+ uuid@^10.0.0:
1904
1903
  version "10.0.0"
1905
1904
  resolved "https://registry.yarnpkg.com/uuid/-/uuid-10.0.0.tgz#5a95aa454e6e002725c79055fd42aaba30ca6294"
1906
1905
  integrity sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==
@@ -0,0 +1 @@
1
+ __version__ = "0.4.27"
@@ -849,6 +849,41 @@ def _upload_to_gcs(signed_url: str, file_path: str, file_size: int) -> None:
849
849
  # ---------------------------------------------------------------------------
850
850
 
851
851
 
852
+ def _resolve_pushed_image_digest(
853
+ runner,
854
+ *,
855
+ remote_image: str,
856
+ docker_config_dir: str | None,
857
+ verbose: bool,
858
+ ) -> str:
859
+ """Return ``{registry}/{repo}@sha256:<hex>`` for a freshly-pushed image.
860
+
861
+ Reads ``RepoDigests`` via ``docker image inspect`` — the local daemon
862
+ records the registry's manifest digest there after a successful push.
863
+ Falls back to ``remote_image`` with a warning if no matching digest is
864
+ found, rather than failing the deploy.
865
+ """
866
+ # rsplit preserves ``:port`` in the registry host.
867
+ repo_no_tag = remote_image.rsplit(":", 1)[0]
868
+ args: list[str] = ["docker"]
869
+ if docker_config_dir:
870
+ args += ["--config", docker_config_dir]
871
+ args += ["image", "inspect", "--format", "{{json .RepoDigests}}", remote_image]
872
+ stdout, _ = runner.run(subp_exec(*args, collect=True, verbose=verbose))
873
+ try:
874
+ digests = json_mod.loads(stdout or "[]") or []
875
+ except json_mod.JSONDecodeError:
876
+ digests = []
877
+ for d in digests:
878
+ if isinstance(d, str) and d.startswith(f"{repo_no_tag}@sha256:"):
879
+ return d
880
+ _get_emitter().warn(
881
+ f"Could not resolve image digest for {remote_image}; "
882
+ "falling back to the tag-based reference. Re-run with --verbose for details."
883
+ )
884
+ return remote_image
885
+
886
+
852
887
  def _run_local_build(
853
888
  *,
854
889
  client: HostBackendClient,
@@ -1015,9 +1050,18 @@ def _run_local_build(
1015
1050
  raise
1016
1051
  step += 1
1017
1052
 
1053
+ resolved_image = _resolve_pushed_image_digest(
1054
+ runner,
1055
+ remote_image=remote_image,
1056
+ docker_config_dir=None,
1057
+ verbose=verbose,
1058
+ )
1059
+
1018
1060
  # -- Step: Update deployment --
1019
1061
  _log_deploy_step(step, f"Updating deployment {deployment_id}")
1020
- updated = client.update_deployment(deployment_id, remote_image, secrets=secrets)
1062
+ updated = client.update_deployment(
1063
+ deployment_id, resolved_image, secrets=secrets
1064
+ )
1021
1065
 
1022
1066
  return BuildResult(
1023
1067
  updated=updated if isinstance(updated, dict) else {},
@@ -23,7 +23,7 @@ dependencies = [
23
23
  path = "langgraph_cli/__init__.py"
24
24
  [project.optional-dependencies]
25
25
  inmem = [
26
- "langgraph-api>=0.5.35,<0.9.0 ; python_version >= '3.11'",
26
+ "langgraph-api>=0.5.35,<0.10.0 ; python_version >= '3.11'",
27
27
  "langgraph-runtime-inmem>=0.7 ; python_version >= '3.11'",
28
28
  ]
29
29
 
@@ -3,6 +3,7 @@ import io
3
3
  import json
4
4
  import os
5
5
  import sys
6
+ from unittest.mock import MagicMock
6
7
 
7
8
  import click
8
9
  import httpx
@@ -16,6 +17,7 @@ from langgraph_cli.deploy import (
16
17
  _env_without_deployment_name,
17
18
  _parse_env_from_config,
18
19
  _resolve_env_path,
20
+ _resolve_pushed_image_digest,
19
21
  _smith_dashboard_base_url,
20
22
  normalize_image_tag,
21
23
  normalize_name,
@@ -532,3 +534,156 @@ class TestSmithDashboardBaseUrl:
532
534
  _smith_dashboard_base_url("https://custom.example.com")
533
535
  == "https://smith.langchain.com"
534
536
  )
537
+
538
+
539
+ class TestResolvePushedImageDigest:
540
+ """Tests for ``_resolve_pushed_image_digest`` — runner is mocked to
541
+ return the ``(stdout, stderr)`` tuple that ``subp_exec(collect=True)``
542
+ would produce.
543
+ """
544
+
545
+ @staticmethod
546
+ def _runner(stdout: str | None) -> MagicMock:
547
+ # Close the unawaited subp_exec coroutine to silence gc warnings.
548
+ runner = MagicMock()
549
+
550
+ def _run(coro, *args, **kwargs):
551
+ if hasattr(coro, "close"):
552
+ coro.close()
553
+ return (stdout, "")
554
+
555
+ runner.run.side_effect = _run
556
+ return runner
557
+
558
+ def test_happy_path_returns_digest(self):
559
+ runner = self._runner('["us-central1-docker.pkg.dev/proj/repo@sha256:abc123"]')
560
+ out = _resolve_pushed_image_digest(
561
+ runner,
562
+ remote_image="us-central1-docker.pkg.dev/proj/repo:latest",
563
+ docker_config_dir=None,
564
+ verbose=False,
565
+ )
566
+ assert out == "us-central1-docker.pkg.dev/proj/repo@sha256:abc123"
567
+
568
+ def test_filters_to_matching_repo(self):
569
+ # Same image ID can hold digests for multiple repos — pick the one
570
+ # matching the just-pushed repo.
571
+ runner = self._runner(
572
+ json.dumps(
573
+ [
574
+ "other-registry.example.com/some/repo@sha256:000000",
575
+ "us-central1-docker.pkg.dev/proj/repo@sha256:abc123",
576
+ ]
577
+ )
578
+ )
579
+ out = _resolve_pushed_image_digest(
580
+ runner,
581
+ remote_image="us-central1-docker.pkg.dev/proj/repo:v1.2.3",
582
+ docker_config_dir=None,
583
+ verbose=False,
584
+ )
585
+ assert out == "us-central1-docker.pkg.dev/proj/repo@sha256:abc123"
586
+
587
+ def test_empty_repodigests_falls_back_with_warning(self, mocker):
588
+ emitter = mocker.MagicMock()
589
+ mocker.patch("langgraph_cli.deploy._get_emitter", return_value=emitter)
590
+ runner = self._runner("[]")
591
+ remote = "us-central1-docker.pkg.dev/proj/repo:latest"
592
+ out = _resolve_pushed_image_digest(
593
+ runner,
594
+ remote_image=remote,
595
+ docker_config_dir=None,
596
+ verbose=False,
597
+ )
598
+ assert out == remote
599
+ assert emitter.warn.called
600
+ assert remote in emitter.warn.call_args.args[0]
601
+
602
+ def test_null_repodigests_falls_back_with_warning(self, mocker):
603
+ # ``docker inspect --format '{{json .RepoDigests}}'`` emits ``null``
604
+ # when the field is absent.
605
+ emitter = mocker.MagicMock()
606
+ mocker.patch("langgraph_cli.deploy._get_emitter", return_value=emitter)
607
+ runner = self._runner("null")
608
+ remote = "us-central1-docker.pkg.dev/proj/repo:latest"
609
+ out = _resolve_pushed_image_digest(
610
+ runner,
611
+ remote_image=remote,
612
+ docker_config_dir=None,
613
+ verbose=False,
614
+ )
615
+ assert out == remote
616
+ assert emitter.warn.called
617
+
618
+ def test_no_matching_repo_falls_back_with_warning(self, mocker):
619
+ # No matching digest for the pushed repo — warn and fall back to the
620
+ # tag-based ref rather than failing the deploy.
621
+ emitter = mocker.MagicMock()
622
+ mocker.patch("langgraph_cli.deploy._get_emitter", return_value=emitter)
623
+ runner = self._runner('["other-registry.example.com/some/repo@sha256:000000"]')
624
+ remote = "us-central1-docker.pkg.dev/proj/repo:latest"
625
+ out = _resolve_pushed_image_digest(
626
+ runner,
627
+ remote_image=remote,
628
+ docker_config_dir=None,
629
+ verbose=False,
630
+ )
631
+ assert out == remote
632
+ assert emitter.warn.called
633
+
634
+ def test_registry_with_port_in_host(self):
635
+ # Only the rightmost ``:`` (the ``:latest`` tag) should be stripped.
636
+ runner = self._runner('["localhost:5000/repo@sha256:deadbeef"]')
637
+ out = _resolve_pushed_image_digest(
638
+ runner,
639
+ remote_image="localhost:5000/repo:latest",
640
+ docker_config_dir=None,
641
+ verbose=False,
642
+ )
643
+ assert out == "localhost:5000/repo@sha256:deadbeef"
644
+
645
+ @staticmethod
646
+ def _capturing_runner(stdout: str) -> tuple[MagicMock, dict]:
647
+ """Like ``_runner`` but exposes the coroutine for arg introspection.
648
+ Caller must close ``captured["coro"]``.
649
+ """
650
+ runner = MagicMock()
651
+ captured: dict = {}
652
+
653
+ def _run(coro, *args, **kwargs):
654
+ captured["coro"] = coro
655
+ return (stdout, "")
656
+
657
+ runner.run.side_effect = _run
658
+ return runner, captured
659
+
660
+ def test_passes_docker_config_dir(self):
661
+ runner, captured = self._capturing_runner(
662
+ '["us-central1-docker.pkg.dev/proj/repo@sha256:abc"]'
663
+ )
664
+ _resolve_pushed_image_digest(
665
+ runner,
666
+ remote_image="us-central1-docker.pkg.dev/proj/repo:latest",
667
+ docker_config_dir="/tmp/some-cfg",
668
+ verbose=False,
669
+ )
670
+ frame_locals = captured["coro"].cr_frame.f_locals
671
+ assert frame_locals["cmd"] == "docker"
672
+ assert "--config" in frame_locals["args"]
673
+ cfg_idx = frame_locals["args"].index("--config")
674
+ assert frame_locals["args"][cfg_idx + 1] == "/tmp/some-cfg"
675
+ captured["coro"].close()
676
+
677
+ def test_omits_docker_config_dir_when_none(self):
678
+ runner, captured = self._capturing_runner(
679
+ '["us-central1-docker.pkg.dev/proj/repo@sha256:abc"]'
680
+ )
681
+ _resolve_pushed_image_digest(
682
+ runner,
683
+ remote_image="us-central1-docker.pkg.dev/proj/repo:latest",
684
+ docker_config_dir=None,
685
+ verbose=False,
686
+ )
687
+ frame_locals = captured["coro"].cr_frame.f_locals
688
+ assert "--config" not in frame_locals["args"]
689
+ captured["coro"].close()
@@ -7,6 +7,7 @@ dependencies = [
7
7
  "langgraph>=0.6.0,<2",
8
8
  "langchain-core>=0.2.14",
9
9
  "shared",
10
+ "langgraph-checkpoint-postgres>=3.0.0"
10
11
  ]
11
12
 
12
13
  [build-system]
@@ -6,6 +6,7 @@ requires-python = ">=3.11"
6
6
  dependencies = [
7
7
  "langgraph>=0.6.0,<2",
8
8
  "langchain-core>=1.3.3",
9
+ "langgraph-checkpoint-postgres>=3.0.0"
9
10
  ]
10
11
 
11
12
  [tool.uv.workspace]
@@ -16,13 +16,15 @@ source = { editable = "apps/agent" }
16
16
  dependencies = [
17
17
  { name = "langchain-core" },
18
18
  { name = "langgraph" },
19
+ { name = "langgraph-checkpoint-postgres" },
19
20
  { name = "shared" },
20
21
  ]
21
22
 
22
23
  [package.metadata]
23
24
  requires-dist = [
24
- { name = "langchain-core", specifier = ">=1.3.3" },
25
+ { name = "langchain-core", specifier = ">=0.2.14" },
25
26
  { name = "langgraph", specifier = ">=0.6.0,<2" },
27
+ { name = "langgraph-checkpoint-postgres", specifier = ">=3.0.0" },
26
28
  { name = "shared", editable = "libs/shared" },
27
29
  ]
28
30
 
@@ -275,6 +277,21 @@ wheels = [
275
277
  { url = "https://files.pythonhosted.org/packages/65/4c/09a4a0c42f5d2fc38d6c4d67884788eff7fd2cfdf367fdf7033de908b4c0/langgraph_checkpoint-4.0.1-py3-none-any.whl", hash = "sha256:e3adcd7a0e0166f3b48b8cf508ce0ea366e7420b5a73aa81289888727769b034", size = 50453, upload-time = "2026-02-27T21:06:14.293Z" },
276
278
  ]
277
279
 
280
+ [[package]]
281
+ name = "langgraph-checkpoint-postgres"
282
+ version = "3.0.5"
283
+ source = { registry = "https://pypi.org/simple" }
284
+ dependencies = [
285
+ { name = "langgraph-checkpoint" },
286
+ { name = "orjson" },
287
+ { name = "psycopg" },
288
+ { name = "psycopg-pool" },
289
+ ]
290
+ sdist = { url = "https://files.pythonhosted.org/packages/95/7a/8f439966643d32111248a225e6cb33a182d07c90de780c4dbfc1e0377832/langgraph_checkpoint_postgres-3.0.5.tar.gz", hash = "sha256:a8fd7278a63f4f849b5cbc7884a15ca8f41e7d5f7467d0a66b31e8c24492f7eb", size = 127856, upload-time = "2026-03-18T21:25:29.785Z" }
291
+ wheels = [
292
+ { url = "https://files.pythonhosted.org/packages/e8/87/b0f98b33a67204bca9d5619bcd9574222f6b025cf3c125eedcec9a50ecbc/langgraph_checkpoint_postgres-3.0.5-py3-none-any.whl", hash = "sha256:86d7040a88fd70087eaafb72251d796696a0a2d856168f5c11ef620771411552", size = 42907, upload-time = "2026-03-18T21:25:28.75Z" },
293
+ ]
294
+
278
295
  [[package]]
279
296
  name = "langgraph-prebuilt"
280
297
  version = "1.0.9"
@@ -303,7 +320,7 @@ wheels = [
303
320
 
304
321
  [[package]]
305
322
  name = "langsmith"
306
- version = "0.7.31"
323
+ version = "0.8.0"
307
324
  source = { registry = "https://pypi.org/simple" }
308
325
  dependencies = [
309
326
  { name = "httpx" },
@@ -316,9 +333,9 @@ dependencies = [
316
333
  { name = "xxhash" },
317
334
  { name = "zstandard" },
318
335
  ]
319
- sdist = { url = "https://files.pythonhosted.org/packages/e6/11/696019490992db5c87774dc20515529ef42a01e1d770fb754ed6d9b12fb0/langsmith-0.7.31.tar.gz", hash = "sha256:331ee4f7c26bb5be4022b9859b7d7b122cbf8c9d01d9f530114c1914b0349ffb", size = 1178480, upload-time = "2026-04-14T17:55:41.242Z" }
336
+ sdist = { url = "https://files.pythonhosted.org/packages/a8/64/95f1f013531395f4e8ed73caeee780f65c7c58fe028cb543f8937b45611b/langsmith-0.8.0.tar.gz", hash = "sha256:59fe5b2a56bbbe14a08aa76691f84b49e8675dd21e11b57d80c6db8c08bac2e3", size = 4432996, upload-time = "2026-04-30T22:13:07.341Z" }
320
337
  wheels = [
321
- { url = "https://files.pythonhosted.org/packages/1d/a1/a013cf458c301cda86a213dd153ce0a01c93f1ab5833f951e6a44c9763ce/langsmith-0.7.31-py3-none-any.whl", hash = "sha256:0291d49203f6e80dda011af1afda61eb0595a4d697adb684590a8805e1d61fb6", size = 373276, upload-time = "2026-04-14T17:55:39.677Z" },
338
+ { url = "https://files.pythonhosted.org/packages/f3/e1/a4be2e696c9473bb53298df398237da5674704d781d4b748ed35aeef592a/langsmith-0.8.0-py3-none-any.whl", hash = "sha256:12cc4bc5622b835a6d841964d6034df3617bdb912dae0c1381fd0a68a9b3a3ef", size = 393268, upload-time = "2026-04-30T22:13:05.56Z" },
322
339
  ]
323
340
 
324
341
  [[package]]
@@ -446,6 +463,31 @@ wheels = [
446
463
  { url = "https://files.pythonhosted.org/packages/b7/b9/c538f279a4e237a006a2c98387d081e9eb060d203d8ed34467cc0f0b9b53/packaging-26.0-py3-none-any.whl", hash = "sha256:b36f1fef9334a5588b4166f8bcd26a14e521f2b55e6b9de3aaa80d3ff7a37529", size = 74366, upload-time = "2026-01-21T20:50:37.788Z" },
447
464
  ]
448
465
 
466
+ [[package]]
467
+ name = "psycopg"
468
+ version = "3.3.4"
469
+ source = { registry = "https://pypi.org/simple" }
470
+ dependencies = [
471
+ { name = "typing-extensions", marker = "python_full_version < '3.13'" },
472
+ { name = "tzdata", marker = "sys_platform == 'win32'" },
473
+ ]
474
+ sdist = { url = "https://files.pythonhosted.org/packages/db/2f/cb91e5502ec9de1de6f1b76cfbf69531932725361168bb06963620c77e2e/psycopg-3.3.4.tar.gz", hash = "sha256:e21207764952cff81b6b8bdacad9a3939f2793367fdac2987b3aac36a651b5bc", size = 165799, upload-time = "2026-05-01T23:31:55.179Z" }
475
+ wheels = [
476
+ { url = "https://files.pythonhosted.org/packages/5c/e0/7b3dee031daae7743609ce3c746565d4a3ed7c2c186479eb48e34e838c64/psycopg-3.3.4-py3-none-any.whl", hash = "sha256:b6bbc25ccf05c8fad3b061d9db2ef0909a555171b84b07f29458a447253d679a", size = 213001, upload-time = "2026-05-01T23:20:50.816Z" },
477
+ ]
478
+
479
+ [[package]]
480
+ name = "psycopg-pool"
481
+ version = "3.3.1"
482
+ source = { registry = "https://pypi.org/simple" }
483
+ dependencies = [
484
+ { name = "typing-extensions" },
485
+ ]
486
+ sdist = { url = "https://files.pythonhosted.org/packages/90/82/7a23d26039827ecd4ebe93905651029ddd307c5182ad59296dfb6f67b528/psycopg_pool-3.3.1.tar.gz", hash = "sha256:b10b10b7a175d5cc1592147dc5b7eec8a9e0834eb3ed2c4a92c858e2f51eb63c", size = 31661, upload-time = "2026-05-01T23:31:59.809Z" }
487
+ wheels = [
488
+ { url = "https://files.pythonhosted.org/packages/37/ed/89c2c620af0e1660354cd8aabf9f5b21f911597ce22acb37c805d6c86bc8/psycopg_pool-3.3.1-py3-none-any.whl", hash = "sha256:2af5b432941c4c9ad5c87b3fa410aec910ec8f7c122855897983a06c45f2e4b5", size = 40023, upload-time = "2026-05-01T23:31:53.136Z" },
489
+ ]
490
+
449
491
  [[package]]
450
492
  name = "pydantic"
451
493
  version = "2.12.5"
@@ -675,13 +717,22 @@ wheels = [
675
717
  { url = "https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl", hash = "sha256:4ed1cacbdc298c220f1bd249ed5287caa16f34d44ef4e9c3d0cbad5b521545e7", size = 14611, upload-time = "2025-10-01T02:14:40.154Z" },
676
718
  ]
677
719
 
720
+ [[package]]
721
+ name = "tzdata"
722
+ version = "2026.2"
723
+ source = { registry = "https://pypi.org/simple" }
724
+ sdist = { url = "https://files.pythonhosted.org/packages/ba/19/1b9b0e29f30c6d35cb345486df41110984ea67ae69dddbc0e8a100999493/tzdata-2026.2.tar.gz", hash = "sha256:9173fde7d80d9018e02a662e168e5a2d04f87c41ea174b139fbef642eda62d10", size = 198254, upload-time = "2026-04-24T15:22:08.651Z" }
725
+ wheels = [
726
+ { url = "https://files.pythonhosted.org/packages/ce/e4/dccd7f47c4b64213ac01ef921a1337ee6e30e8c6466046018326977efd95/tzdata-2026.2-py2.py3-none-any.whl", hash = "sha256:bbe9af844f658da81a5f95019480da3a89415801f6cc966806612cc7169bffe7", size = 349321, upload-time = "2026-04-24T15:22:05.876Z" },
727
+ ]
728
+
678
729
  [[package]]
679
730
  name = "urllib3"
680
- version = "2.6.3"
731
+ version = "2.7.0"
681
732
  source = { registry = "https://pypi.org/simple" }
682
- sdist = { url = "https://files.pythonhosted.org/packages/c7/24/5f1b3bdffd70275f6661c76461e25f024d5a38a46f04aaca912426a2b1d3/urllib3-2.6.3.tar.gz", hash = "sha256:1b62b6884944a57dbe321509ab94fd4d3b307075e0c2eae991ac71ee15ad38ed", size = 435556, upload-time = "2026-01-07T16:24:43.925Z" }
733
+ sdist = { url = "https://files.pythonhosted.org/packages/53/0c/06f8b233b8fd13b9e5ee11424ef85419ba0d8ba0b3138bf360be2ff56953/urllib3-2.7.0.tar.gz", hash = "sha256:231e0ec3b63ceb14667c67be60f2f2c40a518cb38b03af60abc813da26505f4c", size = 433602, upload-time = "2026-05-07T16:13:18.596Z" }
683
734
  wheels = [
684
- { url = "https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl", hash = "sha256:bf272323e553dfb2e87d9bfd225ca7b0f467b919d7bbd355436d3fd37cb0acd4", size = 131584, upload-time = "2026-01-07T16:24:42.685Z" },
735
+ { url = "https://files.pythonhosted.org/packages/7f/3e/5db95bcf282c52709639744ca2a8b149baccf648e39c8cc87553df9eae0c/urllib3-2.7.0-py3-none-any.whl", hash = "sha256:9fb4c81ebbb1ce9531cce37674bbc6f1360472bc18ca9a553ede278ef7276897", size = 131087, upload-time = "2026-05-07T16:13:17.151Z" },
685
736
  ]
686
737
 
687
738
  [[package]]
@@ -720,12 +771,14 @@ source = { virtual = "." }
720
771
  dependencies = [
721
772
  { name = "langchain-core" },
722
773
  { name = "langgraph" },
774
+ { name = "langgraph-checkpoint-postgres" },
723
775
  ]
724
776
 
725
777
  [package.metadata]
726
778
  requires-dist = [
727
779
  { name = "langchain-core", specifier = ">=1.3.3" },
728
780
  { name = "langgraph", specifier = ">=0.6.0,<2" },
781
+ { name = "langgraph-checkpoint-postgres", specifier = ">=3.0.0" },
729
782
  ]
730
783
 
731
784
  [[package]]