langgraph-cli 0.4.29__tar.gz → 0.4.30__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 (152) hide show
  1. langgraph_cli-0.4.30/PKG-INFO +158 -0
  2. langgraph_cli-0.4.30/README.md +136 -0
  3. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/js-examples/README.md +5 -1
  4. langgraph_cli-0.4.30/langgraph_cli/__init__.py +1 -0
  5. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/langgraph_cli/cli.py +8 -1
  6. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/langgraph_cli/config.py +162 -1
  7. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/pyproject.toml +1 -1
  8. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/tests/unit_tests/test_config.py +157 -0
  9. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/uv-examples/monorepo/uv.lock +3 -3
  10. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/uv-examples/simple/uv.lock +3 -3
  11. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/uv.lock +1 -1
  12. langgraph_cli-0.4.29/PKG-INFO +0 -127
  13. langgraph_cli-0.4.29/README.md +0 -105
  14. langgraph_cli-0.4.29/langgraph_cli/__init__.py +0 -1
  15. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/.gitignore +0 -0
  16. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/LICENSE +0 -0
  17. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/Makefile +0 -0
  18. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/examples/.env.example +0 -0
  19. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/examples/.gitignore +0 -0
  20. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/examples/Makefile +0 -0
  21. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/examples/graph_prerelease_reqs/agent.py +0 -0
  22. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/examples/graph_prerelease_reqs/deps/additional_deps/pyproject.toml +0 -0
  23. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/examples/graph_prerelease_reqs/deps/zuper_deps/pyproject.toml +0 -0
  24. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/examples/graph_prerelease_reqs/langgraph.json +0 -0
  25. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/examples/graph_prerelease_reqs/pyproject.toml +0 -0
  26. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/examples/graph_prerelease_reqs_fail/agent.py +0 -0
  27. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/examples/graph_prerelease_reqs_fail/langgraph.json +0 -0
  28. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/examples/graph_prerelease_reqs_fail/pyproject.toml +0 -0
  29. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/examples/graphs/agent.py +0 -0
  30. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/examples/graphs/langgraph.json +0 -0
  31. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/examples/graphs/storm.py +0 -0
  32. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/examples/graphs_reqs_a/__init__.py +0 -0
  33. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/examples/graphs_reqs_a/graphs_submod/__init__.py +0 -0
  34. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/examples/graphs_reqs_a/graphs_submod/agent.py +0 -0
  35. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/examples/graphs_reqs_a/graphs_submod/subprompt.txt +0 -0
  36. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/examples/graphs_reqs_a/hello.py +0 -0
  37. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/examples/graphs_reqs_a/langgraph.json +0 -0
  38. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/examples/graphs_reqs_a/prompt.txt +0 -0
  39. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/examples/graphs_reqs_a/requirements.txt +0 -0
  40. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/examples/graphs_reqs_b/graphs_submod/agent.py +0 -0
  41. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/examples/graphs_reqs_b/graphs_submod/subprompt.txt +0 -0
  42. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/examples/graphs_reqs_b/hello.py +0 -0
  43. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/examples/graphs_reqs_b/langgraph.json +0 -0
  44. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/examples/graphs_reqs_b/prompt.txt +0 -0
  45. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/examples/graphs_reqs_b/requirements.txt +0 -0
  46. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/examples/graphs_reqs_b/utils/__init__.py +0 -0
  47. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/examples/graphs_reqs_b/utils/greeter.py +0 -0
  48. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/examples/langgraph.json +0 -0
  49. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/examples/my_app.py +0 -0
  50. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/examples/pipconf.txt +0 -0
  51. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/examples/poetry.lock +0 -0
  52. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/examples/pyproject.toml +0 -0
  53. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/generate_schema.py +0 -0
  54. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/js-examples/.dockerignore +0 -0
  55. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/js-examples/.editorconfig +0 -0
  56. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/js-examples/.env.example +0 -0
  57. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/js-examples/.eslintrc.cjs +0 -0
  58. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/js-examples/.gitignore +0 -0
  59. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/js-examples/LICENSE +0 -0
  60. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/js-examples/jest.config.js +0 -0
  61. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/js-examples/langgraph.json +0 -0
  62. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/js-examples/package.json +0 -0
  63. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/js-examples/src/agent/graph.ts +0 -0
  64. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/js-examples/src/agent/state.ts +0 -0
  65. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/js-examples/static/studio.png +0 -0
  66. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/js-examples/tests/agent.test.ts +0 -0
  67. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/js-examples/tests/graph.int.test.ts +0 -0
  68. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/js-examples/tsconfig.json +0 -0
  69. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/js-examples/yarn.lock +0 -0
  70. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/js-monorepo-example/.eslintrc.cjs +0 -0
  71. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/js-monorepo-example/apps/agent/langgraph.json +0 -0
  72. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/js-monorepo-example/apps/agent/package.json +0 -0
  73. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/js-monorepo-example/apps/agent/src/graph.ts +0 -0
  74. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/js-monorepo-example/apps/agent/src/state.ts +0 -0
  75. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/js-monorepo-example/apps/agent/tsconfig.json +0 -0
  76. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/js-monorepo-example/libs/shared/package.json +0 -0
  77. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/js-monorepo-example/libs/shared/src/index.ts +0 -0
  78. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/js-monorepo-example/libs/shared/tsconfig.json +0 -0
  79. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/js-monorepo-example/package.json +0 -0
  80. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/js-monorepo-example/tsconfig.json +0 -0
  81. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/js-monorepo-example/turbo.json +0 -0
  82. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/js-monorepo-example/yarn.lock +0 -0
  83. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/langgraph_cli/__main__.py +0 -0
  84. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/langgraph_cli/_ignore.py +0 -0
  85. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/langgraph_cli/analytics.py +0 -0
  86. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/langgraph_cli/archive.py +0 -0
  87. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/langgraph_cli/constants.py +0 -0
  88. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/langgraph_cli/dependency_tracking.py +0 -0
  89. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/langgraph_cli/deploy.py +0 -0
  90. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/langgraph_cli/docker.py +0 -0
  91. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/langgraph_cli/exec.py +0 -0
  92. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/langgraph_cli/host_backend.py +0 -0
  93. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/langgraph_cli/progress.py +0 -0
  94. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/langgraph_cli/py.typed +0 -0
  95. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/langgraph_cli/schemas.py +0 -0
  96. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/langgraph_cli/templates.py +0 -0
  97. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/langgraph_cli/util.py +0 -0
  98. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/langgraph_cli/uv_lock.py +0 -0
  99. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/langgraph_cli/version.py +0 -0
  100. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/python-monorepo-example/apps/agent/.env.example +0 -0
  101. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/python-monorepo-example/apps/agent/langgraph.json +0 -0
  102. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/python-monorepo-example/apps/agent/pyproject.toml +0 -0
  103. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/python-monorepo-example/apps/agent/src/agent/__init__.py +0 -0
  104. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/python-monorepo-example/apps/agent/src/agent/graph.py +0 -0
  105. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/python-monorepo-example/apps/agent/src/agent/state.py +0 -0
  106. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/python-monorepo-example/libs/common/__init__.py +0 -0
  107. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/python-monorepo-example/libs/common/helpers.py +0 -0
  108. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/python-monorepo-example/libs/shared/pyproject.toml +0 -0
  109. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/python-monorepo-example/libs/shared/src/shared/__init__.py +0 -0
  110. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/python-monorepo-example/libs/shared/src/shared/utils.py +0 -0
  111. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/python-monorepo-example/pyproject.toml +0 -0
  112. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/schemas/schema.json +0 -0
  113. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/schemas/schema.v0.json +0 -0
  114. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/schemas/version.schema.json +0 -0
  115. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/tests/__init__.py +0 -0
  116. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/tests/integration_tests/__init__.py +0 -0
  117. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/tests/integration_tests/test_cli.py +0 -0
  118. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/tests/unit_tests/__init__.py +0 -0
  119. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/tests/unit_tests/agent.py +0 -0
  120. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/tests/unit_tests/cli/__init__.py +0 -0
  121. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/tests/unit_tests/cli/langgraph.json +0 -0
  122. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/tests/unit_tests/cli/pyproject.toml +0 -0
  123. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/tests/unit_tests/cli/test_cli.py +0 -0
  124. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/tests/unit_tests/cli/test_templates.py +0 -0
  125. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/tests/unit_tests/conftest.py +0 -0
  126. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/tests/unit_tests/graphs/agent.py +0 -0
  127. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/tests/unit_tests/helpers.py +0 -0
  128. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/tests/unit_tests/multiplatform/js.mts +0 -0
  129. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/tests/unit_tests/multiplatform/python.py +0 -0
  130. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/tests/unit_tests/pipconfig.txt +0 -0
  131. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/tests/unit_tests/test_archive.py +0 -0
  132. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/tests/unit_tests/test_config.json +0 -0
  133. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/tests/unit_tests/test_dependency_tracking.py +0 -0
  134. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/tests/unit_tests/test_deploy_helpers.py +0 -0
  135. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/tests/unit_tests/test_docker.py +0 -0
  136. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/tests/unit_tests/test_host_backend.py +0 -0
  137. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/tests/unit_tests/test_logs_helpers.py +0 -0
  138. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/tests/unit_tests/test_util.py +0 -0
  139. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/uv-examples/monorepo/apps/agent/.env.example +0 -0
  140. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/uv-examples/monorepo/apps/agent/langgraph.json +0 -0
  141. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/uv-examples/monorepo/apps/agent/pyproject.toml +0 -0
  142. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/uv-examples/monorepo/apps/agent/src/agent/__init__.py +0 -0
  143. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/uv-examples/monorepo/apps/agent/src/agent/graph.py +0 -0
  144. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/uv-examples/monorepo/libs/shared/pyproject.toml +0 -0
  145. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/uv-examples/monorepo/libs/shared/src/shared/__init__.py +0 -0
  146. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/uv-examples/monorepo/libs/shared/src/shared/utils.py +0 -0
  147. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/uv-examples/monorepo/pyproject.toml +0 -0
  148. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/uv-examples/simple/.env.example +0 -0
  149. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/uv-examples/simple/langgraph.json +0 -0
  150. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/uv-examples/simple/pyproject.toml +0 -0
  151. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/uv-examples/simple/src/agent/__init__.py +0 -0
  152. {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/uv-examples/simple/src/agent/graph.py +0 -0
@@ -0,0 +1,158 @@
1
+ Metadata-Version: 2.4
2
+ Name: langgraph-cli
3
+ Version: 0.4.30
4
+ Summary: CLI for interacting with LangGraph API
5
+ Project-URL: Source, https://github.com/langchain-ai/langgraph/tree/main/libs/cli
6
+ Project-URL: Twitter, https://x.com/langchain_oss
7
+ Project-URL: Slack, https://www.langchain.com/join-community
8
+ Project-URL: Reddit, https://www.reddit.com/r/LangChain/
9
+ License-Expression: MIT
10
+ License-File: LICENSE
11
+ Requires-Python: >=3.10
12
+ Requires-Dist: click>=8.1.7
13
+ Requires-Dist: httpx>=0.24.0
14
+ Requires-Dist: langgraph-sdk>=0.1.0; python_version >= '3.11'
15
+ Requires-Dist: pathspec>=0.11.0
16
+ Requires-Dist: python-dotenv>=0.8.0
17
+ Requires-Dist: tomli>=2.0.1; python_version < '3.11'
18
+ Provides-Extra: inmem
19
+ Requires-Dist: langgraph-api<0.12.0,>=0.5.35; (python_version >= '3.11') and extra == 'inmem'
20
+ Requires-Dist: langgraph-runtime-inmem>=0.7; (python_version >= '3.11') and extra == 'inmem'
21
+ Description-Content-Type: text/markdown
22
+
23
+ # LangGraph CLI
24
+
25
+ [![PyPI - Version](https://img.shields.io/pypi/v/langgraph-cli?label=%20)](https://pypi.org/project/langgraph-cli/#history)
26
+ [![PyPI - License](https://img.shields.io/pypi/l/langgraph-cli)](https://opensource.org/licenses/MIT)
27
+ [![PyPI - Downloads](https://img.shields.io/pepy/dt/langgraph-cli)](https://pypistats.org/packages/langgraph-cli)
28
+ [![Twitter](https://img.shields.io/twitter/url/https/twitter.com/langchain_oss.svg?style=social&label=Follow%20%40LangChain)](https://x.com/langchain_oss)
29
+
30
+ To help you ship LangGraph apps to production faster, check out [LangSmith](https://www.langchain.com/langsmith).
31
+ [LangSmith](https://www.langchain.com/langsmith) is a unified developer platform for building, testing, and monitoring LLM applications.
32
+
33
+ ## Quick Install
34
+
35
+ ```bash
36
+ uv add langgraph-cli
37
+ ```
38
+
39
+ ## 🤔 What is this?
40
+
41
+ The LangGraph CLI is the official command-line interface for LangGraph. It provides tools to create, develop, build, and run LangGraph applications locally or in Docker.
42
+
43
+ ## 📖 Documentation
44
+
45
+ For full documentation, see the [LangGraph CLI reference](https://reference.langchain.com/python/langgraph-cli). For conceptual guides and tutorials, see the [LangGraph Docs](https://docs.langchain.com/oss/python/langgraph/overview).
46
+
47
+ For development mode with hot reloading:
48
+
49
+ ```bash
50
+ uv add "langgraph-cli[inmem]"
51
+ ```
52
+
53
+ ## Commands
54
+
55
+ ### `langgraph new` 🌱
56
+
57
+ Create a new LangGraph project from a template.
58
+
59
+ ```bash
60
+ langgraph new [PATH] --template TEMPLATE_NAME
61
+ ```
62
+
63
+ ### `langgraph dev` 🏃‍♀️
64
+
65
+ Run LangGraph API server in development mode with hot reloading.
66
+
67
+ ```bash
68
+ langgraph dev [OPTIONS]
69
+ --host TEXT Host to bind to (default: 127.0.0.1)
70
+ --port INTEGER Port to bind to (default: 2024)
71
+ --no-reload Disable auto-reload
72
+ --debug-port INTEGER Enable remote debugging
73
+ --no-browser Skip opening browser window
74
+ -c, --config FILE Config file path (default: langgraph.json)
75
+ ```
76
+
77
+ ### `langgraph up` 🚀
78
+
79
+ Launch LangGraph API server in Docker.
80
+
81
+ ```bash
82
+ langgraph up [OPTIONS]
83
+ -p, --port INTEGER Port to expose (default: 8123)
84
+ --wait Wait for services to start
85
+ --watch Restart on file changes
86
+ --verbose Show detailed logs
87
+ -c, --config FILE Config file path
88
+ -d, --docker-compose Additional services file
89
+ ```
90
+
91
+ ### `langgraph build`
92
+
93
+ Build a Docker image for your LangGraph application.
94
+
95
+ ```bash
96
+ langgraph build -t IMAGE_TAG [OPTIONS]
97
+ --platform TEXT Target platforms (e.g., linux/amd64,linux/arm64)
98
+ --pull / --no-pull Use latest/local base image
99
+ -c, --config FILE Config file path
100
+ ```
101
+
102
+ ### `langgraph dockerfile`
103
+
104
+ Generate a Dockerfile for custom deployments.
105
+
106
+ ```bash
107
+ langgraph dockerfile SAVE_PATH [OPTIONS]
108
+ -c, --config FILE Config file path
109
+ ```
110
+
111
+ ## Configuration
112
+
113
+ The CLI uses a `langgraph.json` configuration file with these key settings:
114
+
115
+ ```json
116
+ {
117
+ "dependencies": ["langchain_openai", "./your_package"],
118
+ "graphs": {
119
+ "my_graph": "./your_package/file.py:graph"
120
+ },
121
+ "env": "./.env",
122
+ "python_version": "3.11",
123
+ "pip_config_file": "./pip.conf",
124
+ "dockerfile_lines": []
125
+ }
126
+ ```
127
+
128
+ See the [full documentation](https://reference.langchain.com/python/langgraph-cli) for detailed configuration options.
129
+
130
+ ## Development
131
+
132
+ To develop the CLI itself:
133
+
134
+ 1. Clone the repository
135
+ 2. Navigate to the CLI directory: `cd libs/cli`
136
+ 3. Install development dependencies: `uv sync`
137
+ 4. Make your changes to the CLI code
138
+ 5. Test your changes:
139
+
140
+ ```bash
141
+ # Run CLI commands directly
142
+ uv run langgraph --help
143
+
144
+ # Or use the examples
145
+ cd examples
146
+ uv sync
147
+ uv run langgraph dev # or other commands
148
+ ```
149
+
150
+ ## 📕 Releases & Versioning
151
+
152
+ See our [Releases](https://docs.langchain.com/oss/python/release-policy) and [Versioning](https://docs.langchain.com/oss/python/versioning) policies.
153
+
154
+ ## 💁 Contributing
155
+
156
+ As an open-source project in a rapidly developing field, we are extremely open to contributions, whether it be in the form of a new feature, improved infrastructure, or better documentation.
157
+
158
+ For detailed information on how to contribute, see the [Contributing Guide](https://docs.langchain.com/oss/python/contributing/overview).
@@ -0,0 +1,136 @@
1
+ # LangGraph CLI
2
+
3
+ [![PyPI - Version](https://img.shields.io/pypi/v/langgraph-cli?label=%20)](https://pypi.org/project/langgraph-cli/#history)
4
+ [![PyPI - License](https://img.shields.io/pypi/l/langgraph-cli)](https://opensource.org/licenses/MIT)
5
+ [![PyPI - Downloads](https://img.shields.io/pepy/dt/langgraph-cli)](https://pypistats.org/packages/langgraph-cli)
6
+ [![Twitter](https://img.shields.io/twitter/url/https/twitter.com/langchain_oss.svg?style=social&label=Follow%20%40LangChain)](https://x.com/langchain_oss)
7
+
8
+ To help you ship LangGraph apps to production faster, check out [LangSmith](https://www.langchain.com/langsmith).
9
+ [LangSmith](https://www.langchain.com/langsmith) is a unified developer platform for building, testing, and monitoring LLM applications.
10
+
11
+ ## Quick Install
12
+
13
+ ```bash
14
+ uv add langgraph-cli
15
+ ```
16
+
17
+ ## 🤔 What is this?
18
+
19
+ The LangGraph CLI is the official command-line interface for LangGraph. It provides tools to create, develop, build, and run LangGraph applications locally or in Docker.
20
+
21
+ ## 📖 Documentation
22
+
23
+ For full documentation, see the [LangGraph CLI reference](https://reference.langchain.com/python/langgraph-cli). For conceptual guides and tutorials, see the [LangGraph Docs](https://docs.langchain.com/oss/python/langgraph/overview).
24
+
25
+ For development mode with hot reloading:
26
+
27
+ ```bash
28
+ uv add "langgraph-cli[inmem]"
29
+ ```
30
+
31
+ ## Commands
32
+
33
+ ### `langgraph new` 🌱
34
+
35
+ Create a new LangGraph project from a template.
36
+
37
+ ```bash
38
+ langgraph new [PATH] --template TEMPLATE_NAME
39
+ ```
40
+
41
+ ### `langgraph dev` 🏃‍♀️
42
+
43
+ Run LangGraph API server in development mode with hot reloading.
44
+
45
+ ```bash
46
+ langgraph dev [OPTIONS]
47
+ --host TEXT Host to bind to (default: 127.0.0.1)
48
+ --port INTEGER Port to bind to (default: 2024)
49
+ --no-reload Disable auto-reload
50
+ --debug-port INTEGER Enable remote debugging
51
+ --no-browser Skip opening browser window
52
+ -c, --config FILE Config file path (default: langgraph.json)
53
+ ```
54
+
55
+ ### `langgraph up` 🚀
56
+
57
+ Launch LangGraph API server in Docker.
58
+
59
+ ```bash
60
+ langgraph up [OPTIONS]
61
+ -p, --port INTEGER Port to expose (default: 8123)
62
+ --wait Wait for services to start
63
+ --watch Restart on file changes
64
+ --verbose Show detailed logs
65
+ -c, --config FILE Config file path
66
+ -d, --docker-compose Additional services file
67
+ ```
68
+
69
+ ### `langgraph build`
70
+
71
+ Build a Docker image for your LangGraph application.
72
+
73
+ ```bash
74
+ langgraph build -t IMAGE_TAG [OPTIONS]
75
+ --platform TEXT Target platforms (e.g., linux/amd64,linux/arm64)
76
+ --pull / --no-pull Use latest/local base image
77
+ -c, --config FILE Config file path
78
+ ```
79
+
80
+ ### `langgraph dockerfile`
81
+
82
+ Generate a Dockerfile for custom deployments.
83
+
84
+ ```bash
85
+ langgraph dockerfile SAVE_PATH [OPTIONS]
86
+ -c, --config FILE Config file path
87
+ ```
88
+
89
+ ## Configuration
90
+
91
+ The CLI uses a `langgraph.json` configuration file with these key settings:
92
+
93
+ ```json
94
+ {
95
+ "dependencies": ["langchain_openai", "./your_package"],
96
+ "graphs": {
97
+ "my_graph": "./your_package/file.py:graph"
98
+ },
99
+ "env": "./.env",
100
+ "python_version": "3.11",
101
+ "pip_config_file": "./pip.conf",
102
+ "dockerfile_lines": []
103
+ }
104
+ ```
105
+
106
+ See the [full documentation](https://reference.langchain.com/python/langgraph-cli) for detailed configuration options.
107
+
108
+ ## Development
109
+
110
+ To develop the CLI itself:
111
+
112
+ 1. Clone the repository
113
+ 2. Navigate to the CLI directory: `cd libs/cli`
114
+ 3. Install development dependencies: `uv sync`
115
+ 4. Make your changes to the CLI code
116
+ 5. Test your changes:
117
+
118
+ ```bash
119
+ # Run CLI commands directly
120
+ uv run langgraph --help
121
+
122
+ # Or use the examples
123
+ cd examples
124
+ uv sync
125
+ uv run langgraph dev # or other commands
126
+ ```
127
+
128
+ ## 📕 Releases & Versioning
129
+
130
+ See our [Releases](https://docs.langchain.com/oss/python/release-policy) and [Versioning](https://docs.langchain.com/oss/python/versioning) policies.
131
+
132
+ ## 💁 Contributing
133
+
134
+ As an open-source project in a rapidly developing field, we are extremely open to contributions, whether it be in the form of a new feature, improved infrastructure, or better documentation.
135
+
136
+ For detailed information on how to contribute, see the [Contributing Guide](https://docs.langchain.com/oss/python/contributing/overview).
@@ -10,7 +10,7 @@ This template demonstrates a simple chatbot implemented using [LangGraph.js](htt
10
10
 
11
11
  The core logic, defined in `src/agent/graph.ts`, showcases a straightforward chatbot that responds to user queries while maintaining context from previous messages.
12
12
 
13
- ## What it does
13
+ ## 🤔 What is this?
14
14
 
15
15
  The simple chatbot:
16
16
 
@@ -20,6 +20,10 @@ The simple chatbot:
20
20
 
21
21
  This template provides a foundation that can be easily customized and extended to create more complex conversational agents.
22
22
 
23
+ ## 📖 Documentation
24
+
25
+ For JavaScript and TypeScript documentation, see the [LangGraph.js docs](https://docs.langchain.com/oss/javascript/langgraph/overview). LangGraph Studio also integrates with [LangSmith](https://smith.langchain.com/) for tracing and collaboration with teammates.
26
+
23
27
  ## Getting Started
24
28
 
25
29
  Assuming you have already [installed LangGraph Studio](https://github.com/langchain-ai/langgraph-studio?tab=readme-ov-file#download), to set up:
@@ -0,0 +1 @@
1
+ __version__ = "0.4.30"
@@ -159,7 +159,14 @@ OPT_POSTGRES_URI = click.option(
159
159
  OPT_API_VERSION = click.option(
160
160
  "--api-version",
161
161
  type=str,
162
- help="API server version to use for the base image. If unspecified, the latest version will be used.",
162
+ help=(
163
+ "API server version to use for the base image. If unspecified, the "
164
+ "latest stable version will be used. Compatible ranges like "
165
+ "~=0.11.0.dev5 stay on 0.11.0.dev5 while only newer dev builds exist, "
166
+ "then resolve to the newest matching rc or stable release, for example "
167
+ "0.11.0rc1 or 0.11.0. Stable-floating ranges like >~=0.11.0.dev5 "
168
+ "can also pick up future stable releases, for example 0.12.0."
169
+ ),
163
170
  )
164
171
 
165
172
  OPT_ENGINE_RUNTIME_MODE = click.option(
@@ -9,6 +9,7 @@ from collections import Counter
9
9
  from typing import Literal, NamedTuple
10
10
 
11
11
  import click
12
+ import httpx
12
13
 
13
14
  from langgraph_cli.schemas import Config, Distros
14
15
  from langgraph_cli.uv_lock import python_config_to_docker_uv_lock
@@ -41,6 +42,31 @@ _API_VERSION_PATTERN = re.compile(
41
42
  r"(?:\.(?P<patch>\d+))?"
42
43
  r"(?:(?:\.|)(?:[A-Za-z][0-9A-Za-z]*))?$"
43
44
  )
45
+ _API_VERSION_RANGE_PATTERN = re.compile(r"^(?P<operator>~=|>~=)\s*(?P<version>.+)$")
46
+ _API_VERSION_PART_PATTERN = re.compile(
47
+ r"^(?P<major>\d+)"
48
+ r"(?:\.(?P<minor>\d+))?"
49
+ r"(?:\.(?P<patch>\d+))?"
50
+ r"(?:(?:\.|)(?P<pre>dev|rc)(?P<pre_n>\d+))?$"
51
+ )
52
+
53
+
54
+ class _ParsedApiVersion(NamedTuple):
55
+ release: tuple[int, ...]
56
+ prerelease: str | None
57
+ prerelease_number: int
58
+
59
+
60
+ class _ApiVersionRange(NamedTuple):
61
+ floor: _ParsedApiVersion
62
+ allow_future_stable: bool
63
+
64
+
65
+ _PRERELEASE_ORDER = {
66
+ "dev": 0,
67
+ "rc": 1,
68
+ None: 2,
69
+ }
44
70
 
45
71
 
46
72
  def has_disallowed_build_command_content(command: str) -> bool:
@@ -141,6 +167,133 @@ def _parse_api_version_parts(version_str: str) -> tuple[int, ...]:
141
167
  return tuple(int(part) for part in match.groups() if part is not None)
142
168
 
143
169
 
170
+ def _parse_api_version(version_str: str) -> _ParsedApiVersion:
171
+ match = _API_VERSION_PART_PATTERN.fullmatch(version_str)
172
+ if not match:
173
+ raise ValueError("Version must be major or major.minor or major.minor.patch.")
174
+ release = tuple(
175
+ int(part)
176
+ for part in (
177
+ match.group("major"),
178
+ match.group("minor"),
179
+ match.group("patch"),
180
+ )
181
+ if part is not None
182
+ )
183
+ prerelease = match.group("pre")
184
+ prerelease_number = int(match.group("pre_n") or 0)
185
+ return _ParsedApiVersion(release, prerelease, prerelease_number)
186
+
187
+
188
+ def _api_version_sort_key(
189
+ version: _ParsedApiVersion,
190
+ ) -> tuple[tuple[int, ...], int, int]:
191
+ return (
192
+ version.release,
193
+ _PRERELEASE_ORDER[version.prerelease],
194
+ version.prerelease_number,
195
+ )
196
+
197
+
198
+ def _api_version_upper_bound(version: _ParsedApiVersion) -> tuple[int, ...]:
199
+ release = version.release
200
+ if len(release) <= 2:
201
+ return (release[0] + 1,)
202
+ return (release[0], release[1] + 1)
203
+
204
+
205
+ def _is_compatible_api_version_candidate(
206
+ candidate: _ParsedApiVersion,
207
+ version_range: _ApiVersionRange,
208
+ upper_bound: tuple[int, ...],
209
+ ) -> bool:
210
+ floor = version_range.floor
211
+ if _api_version_sort_key(candidate) < _api_version_sort_key(floor):
212
+ return False
213
+ outside_compatible_range = candidate.release[: len(upper_bound)] >= upper_bound
214
+ if outside_compatible_range and not version_range.allow_future_stable:
215
+ return False
216
+ if outside_compatible_range and candidate.prerelease is not None:
217
+ return False
218
+ if floor.prerelease == "dev" and candidate.prerelease == "dev":
219
+ return candidate == floor
220
+ return True
221
+
222
+
223
+ def _ensure_compatible_api_version_base_image(base_image: str) -> None:
224
+ if ":" in base_image:
225
+ raise click.UsageError(
226
+ "Compatible api_version ranges cannot be used with a tagged base_image."
227
+ )
228
+
229
+
230
+ def _get_pypi_versions(package_name: str) -> list[str]:
231
+ try:
232
+ response = httpx.get(
233
+ f"https://pypi.org/pypi/{package_name}/json",
234
+ timeout=10,
235
+ )
236
+ response.raise_for_status()
237
+ except httpx.HTTPError as exc:
238
+ raise click.UsageError(
239
+ f"Failed to fetch PyPI versions for {package_name}: {exc}"
240
+ ) from None
241
+ payload = response.json()
242
+ releases = payload.get("releases", {})
243
+ if not isinstance(releases, dict):
244
+ raise click.UsageError(
245
+ f"Failed to fetch PyPI versions for {package_name}: invalid response."
246
+ )
247
+ return [version for version in releases if isinstance(version, str)]
248
+
249
+
250
+ def _resolve_compatible_api_version(
251
+ api_version: str,
252
+ base_image: str,
253
+ version_distro_tag: str,
254
+ ) -> str:
255
+ match = _API_VERSION_RANGE_PATTERN.fullmatch(api_version)
256
+ if not match:
257
+ return api_version
258
+
259
+ floor_str = match.group("version").strip()
260
+ try:
261
+ floor = _parse_api_version(floor_str)
262
+ except ValueError:
263
+ raise click.UsageError(
264
+ f"Invalid compatible api_version range: {api_version}.\n\n"
265
+ "Use a compatible version range, e.g.:\n"
266
+ ' "api_version": "~=0.11.0.dev5"\n'
267
+ "or a stable-floating range, e.g.:\n"
268
+ ' "api_version": ">~=0.11.0.dev5"'
269
+ ) from None
270
+
271
+ version_range = _ApiVersionRange(
272
+ floor=floor,
273
+ allow_future_stable=match.group("operator") == ">~=",
274
+ )
275
+ _ensure_compatible_api_version_base_image(base_image)
276
+ pypi_versions = _get_pypi_versions("langgraph-api")
277
+
278
+ candidates: list[tuple[_ParsedApiVersion, str]] = []
279
+ upper_bound = _api_version_upper_bound(floor)
280
+ for candidate_str in pypi_versions:
281
+ try:
282
+ candidate = _parse_api_version(candidate_str)
283
+ except ValueError:
284
+ continue
285
+ if _is_compatible_api_version_candidate(candidate, version_range, upper_bound):
286
+ candidates.append((candidate, candidate_str))
287
+
288
+ if not candidates:
289
+ raise click.UsageError(
290
+ f"No PyPI releases match compatible api_version range {api_version!r} "
291
+ f"for {base_image} with {version_distro_tag!r}."
292
+ )
293
+
294
+ return max(candidates, key=lambda item: _api_version_sort_key(item[0]))[1]
295
+
296
+
144
297
  def _is_node_graph(spec: str | dict) -> bool:
145
298
  """Check if a graph is a Node.js graph based on the file extension."""
146
299
  if isinstance(spec, dict):
@@ -194,7 +347,12 @@ def validate_config(config: Config) -> Config:
194
347
  )
195
348
  if api_version:
196
349
  try:
197
- parts = _parse_api_version_parts(api_version)
350
+ compatible_match = _API_VERSION_RANGE_PATTERN.fullmatch(api_version)
351
+ parts = _parse_api_version_parts(
352
+ compatible_match.group("version").strip()
353
+ if compatible_match
354
+ else api_version
355
+ )
198
356
  if len(parts) > 3:
199
357
  raise ValueError(
200
358
  "Version must be major or major.minor or major.minor.patch."
@@ -1430,6 +1588,9 @@ def docker_tag(
1430
1588
 
1431
1589
  # Prepend API version if provided
1432
1590
  if api_version:
1591
+ api_version = _resolve_compatible_api_version(
1592
+ api_version, base_image, f"{language}{version_distro_tag}"
1593
+ )
1433
1594
  full_tag = f"{api_version}-{language}{version_distro_tag}"
1434
1595
  elif "/langgraph-server" in base_image and version_distro_tag not in base_image:
1435
1596
  return f"{base_image}-{language}{version_distro_tag}"
@@ -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.12.0a0 ; python_version >= '3.11'",
26
+ "langgraph-api>=0.5.35,<0.12.0 ; python_version >= '3.11'",
27
27
  "langgraph-runtime-inmem>=0.7 ; python_version >= '3.11'",
28
28
  ]
29
29