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.
- langgraph_cli-0.4.30/PKG-INFO +158 -0
- langgraph_cli-0.4.30/README.md +136 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/js-examples/README.md +5 -1
- langgraph_cli-0.4.30/langgraph_cli/__init__.py +1 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/langgraph_cli/cli.py +8 -1
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/langgraph_cli/config.py +162 -1
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/pyproject.toml +1 -1
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/tests/unit_tests/test_config.py +157 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/uv-examples/monorepo/uv.lock +3 -3
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/uv-examples/simple/uv.lock +3 -3
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/uv.lock +1 -1
- langgraph_cli-0.4.29/PKG-INFO +0 -127
- langgraph_cli-0.4.29/README.md +0 -105
- langgraph_cli-0.4.29/langgraph_cli/__init__.py +0 -1
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/.gitignore +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/LICENSE +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/Makefile +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/examples/.env.example +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/examples/.gitignore +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/examples/Makefile +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/examples/graph_prerelease_reqs/agent.py +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/examples/graph_prerelease_reqs/deps/additional_deps/pyproject.toml +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/examples/graph_prerelease_reqs/deps/zuper_deps/pyproject.toml +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/examples/graph_prerelease_reqs/langgraph.json +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/examples/graph_prerelease_reqs/pyproject.toml +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/examples/graph_prerelease_reqs_fail/agent.py +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/examples/graph_prerelease_reqs_fail/langgraph.json +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/examples/graph_prerelease_reqs_fail/pyproject.toml +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/examples/graphs/agent.py +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/examples/graphs/langgraph.json +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/examples/graphs/storm.py +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/examples/graphs_reqs_a/__init__.py +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/examples/graphs_reqs_a/graphs_submod/__init__.py +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/examples/graphs_reqs_a/graphs_submod/agent.py +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/examples/graphs_reqs_a/graphs_submod/subprompt.txt +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/examples/graphs_reqs_a/hello.py +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/examples/graphs_reqs_a/langgraph.json +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/examples/graphs_reqs_a/prompt.txt +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/examples/graphs_reqs_a/requirements.txt +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/examples/graphs_reqs_b/graphs_submod/agent.py +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/examples/graphs_reqs_b/graphs_submod/subprompt.txt +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/examples/graphs_reqs_b/hello.py +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/examples/graphs_reqs_b/langgraph.json +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/examples/graphs_reqs_b/prompt.txt +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/examples/graphs_reqs_b/requirements.txt +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/examples/graphs_reqs_b/utils/__init__.py +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/examples/graphs_reqs_b/utils/greeter.py +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/examples/langgraph.json +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/examples/my_app.py +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/examples/pipconf.txt +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/examples/poetry.lock +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/examples/pyproject.toml +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/generate_schema.py +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/js-examples/.dockerignore +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/js-examples/.editorconfig +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/js-examples/.env.example +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/js-examples/.eslintrc.cjs +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/js-examples/.gitignore +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/js-examples/LICENSE +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/js-examples/jest.config.js +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/js-examples/langgraph.json +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/js-examples/package.json +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/js-examples/src/agent/graph.ts +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/js-examples/src/agent/state.ts +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/js-examples/static/studio.png +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/js-examples/tests/agent.test.ts +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/js-examples/tests/graph.int.test.ts +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/js-examples/tsconfig.json +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/js-examples/yarn.lock +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/js-monorepo-example/.eslintrc.cjs +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/js-monorepo-example/apps/agent/langgraph.json +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/js-monorepo-example/apps/agent/package.json +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/js-monorepo-example/apps/agent/src/graph.ts +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/js-monorepo-example/apps/agent/src/state.ts +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/js-monorepo-example/apps/agent/tsconfig.json +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/js-monorepo-example/libs/shared/package.json +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/js-monorepo-example/libs/shared/src/index.ts +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/js-monorepo-example/libs/shared/tsconfig.json +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/js-monorepo-example/package.json +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/js-monorepo-example/tsconfig.json +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/js-monorepo-example/turbo.json +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/js-monorepo-example/yarn.lock +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/langgraph_cli/__main__.py +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/langgraph_cli/_ignore.py +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/langgraph_cli/analytics.py +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/langgraph_cli/archive.py +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/langgraph_cli/constants.py +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/langgraph_cli/dependency_tracking.py +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/langgraph_cli/deploy.py +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/langgraph_cli/docker.py +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/langgraph_cli/exec.py +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/langgraph_cli/host_backend.py +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/langgraph_cli/progress.py +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/langgraph_cli/py.typed +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/langgraph_cli/schemas.py +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/langgraph_cli/templates.py +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/langgraph_cli/util.py +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/langgraph_cli/uv_lock.py +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/langgraph_cli/version.py +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/python-monorepo-example/apps/agent/.env.example +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/python-monorepo-example/apps/agent/langgraph.json +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/python-monorepo-example/apps/agent/pyproject.toml +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/python-monorepo-example/apps/agent/src/agent/__init__.py +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/python-monorepo-example/apps/agent/src/agent/graph.py +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/python-monorepo-example/apps/agent/src/agent/state.py +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/python-monorepo-example/libs/common/__init__.py +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/python-monorepo-example/libs/common/helpers.py +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/python-monorepo-example/libs/shared/pyproject.toml +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/python-monorepo-example/libs/shared/src/shared/__init__.py +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/python-monorepo-example/libs/shared/src/shared/utils.py +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/python-monorepo-example/pyproject.toml +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/schemas/schema.json +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/schemas/schema.v0.json +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/schemas/version.schema.json +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/tests/__init__.py +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/tests/integration_tests/__init__.py +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/tests/integration_tests/test_cli.py +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/tests/unit_tests/__init__.py +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/tests/unit_tests/agent.py +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/tests/unit_tests/cli/__init__.py +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/tests/unit_tests/cli/langgraph.json +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/tests/unit_tests/cli/pyproject.toml +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/tests/unit_tests/cli/test_cli.py +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/tests/unit_tests/cli/test_templates.py +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/tests/unit_tests/conftest.py +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/tests/unit_tests/graphs/agent.py +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/tests/unit_tests/helpers.py +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/tests/unit_tests/multiplatform/js.mts +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/tests/unit_tests/multiplatform/python.py +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/tests/unit_tests/pipconfig.txt +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/tests/unit_tests/test_archive.py +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/tests/unit_tests/test_config.json +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/tests/unit_tests/test_dependency_tracking.py +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/tests/unit_tests/test_deploy_helpers.py +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/tests/unit_tests/test_docker.py +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/tests/unit_tests/test_host_backend.py +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/tests/unit_tests/test_logs_helpers.py +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/tests/unit_tests/test_util.py +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/uv-examples/monorepo/apps/agent/.env.example +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/uv-examples/monorepo/apps/agent/langgraph.json +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/uv-examples/monorepo/apps/agent/pyproject.toml +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/uv-examples/monorepo/apps/agent/src/agent/__init__.py +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/uv-examples/monorepo/apps/agent/src/agent/graph.py +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/uv-examples/monorepo/libs/shared/pyproject.toml +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/uv-examples/monorepo/libs/shared/src/shared/__init__.py +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/uv-examples/monorepo/libs/shared/src/shared/utils.py +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/uv-examples/monorepo/pyproject.toml +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/uv-examples/simple/.env.example +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/uv-examples/simple/langgraph.json +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/uv-examples/simple/pyproject.toml +0 -0
- {langgraph_cli-0.4.29 → langgraph_cli-0.4.30}/uv-examples/simple/src/agent/__init__.py +0 -0
- {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
|
+
[](https://pypi.org/project/langgraph-cli/#history)
|
|
26
|
+
[](https://opensource.org/licenses/MIT)
|
|
27
|
+
[](https://pypistats.org/packages/langgraph-cli)
|
|
28
|
+
[](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
|
+
[](https://pypi.org/project/langgraph-cli/#history)
|
|
4
|
+
[](https://opensource.org/licenses/MIT)
|
|
5
|
+
[](https://pypistats.org/packages/langgraph-cli)
|
|
6
|
+
[](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
|
|
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=
|
|
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
|
-
|
|
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.
|
|
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
|
|