easy-agentic-plugin 0.1.0__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.
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 limenghua
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,152 @@
1
+ Metadata-Version: 2.4
2
+ Name: easy-agentic-plugin
3
+ Version: 0.1.0
4
+ Summary: A plugin framework for agents, built on LangGraph deepagents + langgraph-cli.
5
+ Keywords: agent,llm,langgraph,deepagents,plugin,langchain
6
+ Author: limenghua
7
+ Author-email: limenghua <576566385@qq.com>
8
+ License-Expression: MIT
9
+ License-File: LICENSE
10
+ Classifier: Development Status :: 3 - Alpha
11
+ Classifier: Intended Audience :: Developers
12
+ Classifier: Operating System :: OS Independent
13
+ Classifier: Programming Language :: Python :: 3
14
+ Classifier: Programming Language :: Python :: 3.12
15
+ Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
16
+ Requires-Dist: deepagents>=0.6.10
17
+ Requires-Dist: langchain-core>=1.4.7
18
+ Requires-Dist: langgraph>=1.2.5
19
+ Requires-Dist: pyyaml>=6.0
20
+ Requires-Dist: langchain-anthropic>=1.4.6 ; extra == 'all'
21
+ Requires-Dist: langchain-openai>=1.3.2 ; extra == 'all'
22
+ Requires-Dist: langgraph-cli[inmem]>=0.4.29 ; extra == 'all'
23
+ Requires-Dist: langchain-anthropic>=1.4.6 ; extra == 'anthropic'
24
+ Requires-Dist: langgraph-cli[inmem]>=0.4.29 ; extra == 'cli'
25
+ Requires-Dist: langchain-openai>=1.3.2 ; extra == 'openai'
26
+ Requires-Python: >=3.12
27
+ Project-URL: Homepage, https://github.com/easy-agentic/easy-agentic-plugin
28
+ Project-URL: Repository, https://github.com/easy-agentic/easy-agentic-plugin
29
+ Provides-Extra: all
30
+ Provides-Extra: anthropic
31
+ Provides-Extra: cli
32
+ Provides-Extra: openai
33
+ Description-Content-Type: text/markdown
34
+
35
+ # easy-agentic-plugin
36
+
37
+ An Agent-oriented **plugin framework**: it provides a unified extension-injection mechanism for agents built on top of LangGraph **deepagents** + **langgraph-cli**. Every extension (agent / tool / skill / filesystem / middleware / model, …) is wired in through plugins.
38
+
39
+ > It is **not** a business agent, and it does not implement a runtime or a serving container — those are handled by deepagents and langgraph-cli respectively.
40
+ > For the detailed positioning and design, see [doc/requirement.md](doc/requirement.md) and [doc/architecture.md](doc/architecture.md).
41
+
42
+ ## Tech stack
43
+
44
+ - Python **3.12** (pinned via uv)
45
+ - Package / environment management: **uv**
46
+ - Agent runtime: **deepagents**; serving / interface: **langgraph-cli** (agent server)
47
+ - LLM direction: **Claude** (`langchain-anthropic`)
48
+
49
+ ---
50
+
51
+ ## Quick start
52
+
53
+ ```bash
54
+ # 1. Install uv (if not already installed)
55
+ curl -LsSf https://astral.sh/uv/install.sh | sh
56
+
57
+ # 2. Sync dependencies (install everything from uv.lock into .venv)
58
+ uv sync
59
+
60
+ # 3. Configure environment variables: copy the .env template and fill in API keys, etc.
61
+ # (.env is git-ignored — never commit real secrets)
62
+
63
+ # 4. Start the local agent server (LangGraph Studio)
64
+ uv run langgraph dev
65
+ # Defaults to http://127.0.0.1:2024
66
+ ```
67
+
68
+ ---
69
+
70
+ ## Using easy-agentic-plugin as a library
71
+
72
+ easy-agentic-plugin is published as an importable library. In a consumer project:
73
+
74
+ ```bash
75
+ pip install easy-agentic-plugin # core only
76
+ pip install easy-agentic-plugin[cli] # + langgraph-cli for `langgraph dev`
77
+ pip install easy-agentic-plugin[all] # + Anthropic/OpenAI providers + CLI
78
+ ```
79
+
80
+ Point your own `langgraph.json` at the built-in global router graph:
81
+
82
+ ```json
83
+ {
84
+ "dependencies": ["."],
85
+ "graphs": { "agent": "easy_agentic_plugin.graph:main" },
86
+ "env": ".env"
87
+ }
88
+ ```
89
+
90
+ Then drop in your own `agents/` and `plugins/` directories. Prefer to compose the graph
91
+ yourself? Use the `build_graph()` factory exported from the top-level package.
92
+
93
+ Optional extras:
94
+
95
+ | Extra | Pulls in | Use when |
96
+ | --- | --- | --- |
97
+ | `anthropic` | `langchain-anthropic` | serving Claude models |
98
+ | `openai` | `langchain-openai` | serving OpenAI models |
99
+ | `cli` | `langgraph-cli[inmem]` | running `langgraph dev` / building an image |
100
+ | `all` | all of the above | one-shot install |
101
+
102
+ ---
103
+
104
+ ## How uv is used
105
+
106
+ uv is a single tool that handles **Python version + virtual environment + dependencies + running**: it reads `pyproject.toml` (declared dependencies) → resolves `uv.lock` (pinned exact versions) → syncs them into `.venv`. Day to day you **do not need to activate the virtual environment manually** — just use `uv run`.
107
+
108
+ ### Most-used commands
109
+
110
+ | Command | What it does | When |
111
+ | --- | --- | --- |
112
+ | `uv add <pkg>` | Add a runtime dependency (writes to pyproject and installs) | When you need a library (**don't hand-edit pyproject**) |
113
+ | `uv add --dev <pkg>` | Add a dev dependency (pytest, ruff, …) | Tooling used only for dev/test |
114
+ | `uv remove <pkg>` | Remove a dependency | When no longer needed |
115
+ | `uv run <cmd>` | Run a command inside the project env | Everything: `uv run pytest`, `uv run langgraph dev` |
116
+ | `uv sync` | Reconcile `.venv` with `uv.lock` | After pulling code / switching environments |
117
+
118
+ > 90% of the time you'll only use **`uv add`** and **`uv run`**.
119
+
120
+ ### Key points
121
+
122
+ - **Dependencies are managed only through `uv add`** — don't hand-edit the `dependencies` in `pyproject.toml`; exact versions are pinned in `uv.lock` (kept under version control).
123
+ - **`uv run` implicitly syncs** the environment before executing, so after adding a dependency you can run `uv run` directly — no need to `uv sync` first.
124
+ - **No `pip install`, no `source .venv/bin/activate`** — uv prepares the environment for the subprocess automatically.
125
+ - **Python version** is pinned to 3.12 by `.python-version`; uv selects the matching interpreter automatically.
126
+
127
+ ### How `uv run` works internally (in brief)
128
+
129
+ `uv run X` ≈ "ensure the environment matches the lock" + "temporarily activate `.venv`" + "run X". X ultimately resolves to an executable under `.venv/bin/` bound to this project's interpreter:
130
+
131
+ - `uv run pytest` → runs `.venv/bin/pytest` (an entry-point script generated at install time, whose shebang points at the project `.venv` python)
132
+ - `uv run python foo.py` → runs `foo.py` with `.venv/bin/python`
133
+
134
+ Handy flags: `--no-sync` (skip syncing), `--frozen` (don't re-resolve), `--locked` (require the lock to be up to date, good for CI).
135
+
136
+ ---
137
+
138
+ ## Common development commands
139
+
140
+ ```bash
141
+ uv run langgraph dev # Start the local agent server (entry graph: easy_agentic_plugin.graph:main)
142
+ uv run pytest # Run tests
143
+ uv add <pkg> / uv add --dev <pkg> # Add dependencies
144
+ uv sync # Sync the environment
145
+ ```
146
+
147
+ ## Project documentation
148
+
149
+ - [CLAUDE.md](CLAUDE.md) — project constitution (for AI collaborators)
150
+ - [doc/](doc/) — requirements, architecture, conventions, roadmap, decision records (ADRs)
151
+
152
+ > The documents under `doc/` are kept in Chinese as the design/working record.
@@ -0,0 +1,118 @@
1
+ # easy-agentic-plugin
2
+
3
+ An Agent-oriented **plugin framework**: it provides a unified extension-injection mechanism for agents built on top of LangGraph **deepagents** + **langgraph-cli**. Every extension (agent / tool / skill / filesystem / middleware / model, …) is wired in through plugins.
4
+
5
+ > It is **not** a business agent, and it does not implement a runtime or a serving container — those are handled by deepagents and langgraph-cli respectively.
6
+ > For the detailed positioning and design, see [doc/requirement.md](doc/requirement.md) and [doc/architecture.md](doc/architecture.md).
7
+
8
+ ## Tech stack
9
+
10
+ - Python **3.12** (pinned via uv)
11
+ - Package / environment management: **uv**
12
+ - Agent runtime: **deepagents**; serving / interface: **langgraph-cli** (agent server)
13
+ - LLM direction: **Claude** (`langchain-anthropic`)
14
+
15
+ ---
16
+
17
+ ## Quick start
18
+
19
+ ```bash
20
+ # 1. Install uv (if not already installed)
21
+ curl -LsSf https://astral.sh/uv/install.sh | sh
22
+
23
+ # 2. Sync dependencies (install everything from uv.lock into .venv)
24
+ uv sync
25
+
26
+ # 3. Configure environment variables: copy the .env template and fill in API keys, etc.
27
+ # (.env is git-ignored — never commit real secrets)
28
+
29
+ # 4. Start the local agent server (LangGraph Studio)
30
+ uv run langgraph dev
31
+ # Defaults to http://127.0.0.1:2024
32
+ ```
33
+
34
+ ---
35
+
36
+ ## Using easy-agentic-plugin as a library
37
+
38
+ easy-agentic-plugin is published as an importable library. In a consumer project:
39
+
40
+ ```bash
41
+ pip install easy-agentic-plugin # core only
42
+ pip install easy-agentic-plugin[cli] # + langgraph-cli for `langgraph dev`
43
+ pip install easy-agentic-plugin[all] # + Anthropic/OpenAI providers + CLI
44
+ ```
45
+
46
+ Point your own `langgraph.json` at the built-in global router graph:
47
+
48
+ ```json
49
+ {
50
+ "dependencies": ["."],
51
+ "graphs": { "agent": "easy_agentic_plugin.graph:main" },
52
+ "env": ".env"
53
+ }
54
+ ```
55
+
56
+ Then drop in your own `agents/` and `plugins/` directories. Prefer to compose the graph
57
+ yourself? Use the `build_graph()` factory exported from the top-level package.
58
+
59
+ Optional extras:
60
+
61
+ | Extra | Pulls in | Use when |
62
+ | --- | --- | --- |
63
+ | `anthropic` | `langchain-anthropic` | serving Claude models |
64
+ | `openai` | `langchain-openai` | serving OpenAI models |
65
+ | `cli` | `langgraph-cli[inmem]` | running `langgraph dev` / building an image |
66
+ | `all` | all of the above | one-shot install |
67
+
68
+ ---
69
+
70
+ ## How uv is used
71
+
72
+ uv is a single tool that handles **Python version + virtual environment + dependencies + running**: it reads `pyproject.toml` (declared dependencies) → resolves `uv.lock` (pinned exact versions) → syncs them into `.venv`. Day to day you **do not need to activate the virtual environment manually** — just use `uv run`.
73
+
74
+ ### Most-used commands
75
+
76
+ | Command | What it does | When |
77
+ | --- | --- | --- |
78
+ | `uv add <pkg>` | Add a runtime dependency (writes to pyproject and installs) | When you need a library (**don't hand-edit pyproject**) |
79
+ | `uv add --dev <pkg>` | Add a dev dependency (pytest, ruff, …) | Tooling used only for dev/test |
80
+ | `uv remove <pkg>` | Remove a dependency | When no longer needed |
81
+ | `uv run <cmd>` | Run a command inside the project env | Everything: `uv run pytest`, `uv run langgraph dev` |
82
+ | `uv sync` | Reconcile `.venv` with `uv.lock` | After pulling code / switching environments |
83
+
84
+ > 90% of the time you'll only use **`uv add`** and **`uv run`**.
85
+
86
+ ### Key points
87
+
88
+ - **Dependencies are managed only through `uv add`** — don't hand-edit the `dependencies` in `pyproject.toml`; exact versions are pinned in `uv.lock` (kept under version control).
89
+ - **`uv run` implicitly syncs** the environment before executing, so after adding a dependency you can run `uv run` directly — no need to `uv sync` first.
90
+ - **No `pip install`, no `source .venv/bin/activate`** — uv prepares the environment for the subprocess automatically.
91
+ - **Python version** is pinned to 3.12 by `.python-version`; uv selects the matching interpreter automatically.
92
+
93
+ ### How `uv run` works internally (in brief)
94
+
95
+ `uv run X` ≈ "ensure the environment matches the lock" + "temporarily activate `.venv`" + "run X". X ultimately resolves to an executable under `.venv/bin/` bound to this project's interpreter:
96
+
97
+ - `uv run pytest` → runs `.venv/bin/pytest` (an entry-point script generated at install time, whose shebang points at the project `.venv` python)
98
+ - `uv run python foo.py` → runs `foo.py` with `.venv/bin/python`
99
+
100
+ Handy flags: `--no-sync` (skip syncing), `--frozen` (don't re-resolve), `--locked` (require the lock to be up to date, good for CI).
101
+
102
+ ---
103
+
104
+ ## Common development commands
105
+
106
+ ```bash
107
+ uv run langgraph dev # Start the local agent server (entry graph: easy_agentic_plugin.graph:main)
108
+ uv run pytest # Run tests
109
+ uv add <pkg> / uv add --dev <pkg> # Add dependencies
110
+ uv sync # Sync the environment
111
+ ```
112
+
113
+ ## Project documentation
114
+
115
+ - [CLAUDE.md](CLAUDE.md) — project constitution (for AI collaborators)
116
+ - [doc/](doc/) — requirements, architecture, conventions, roadmap, decision records (ADRs)
117
+
118
+ > The documents under `doc/` are kept in Chinese as the design/working record.
@@ -0,0 +1,84 @@
1
+ [project]
2
+ name = "easy-agentic-plugin"
3
+ version = "0.1.0"
4
+ description = "A plugin framework for agents, built on LangGraph deepagents + langgraph-cli."
5
+ readme = "README.md"
6
+ requires-python = ">=3.12"
7
+ license = "MIT"
8
+ license-files = ["LICENSE"]
9
+ authors = [{ name = "limenghua", email = "576566385@qq.com" }]
10
+ keywords = ["agent", "llm", "langgraph", "deepagents", "plugin", "langchain"]
11
+ classifiers = [
12
+ "Development Status :: 3 - Alpha",
13
+ "Intended Audience :: Developers",
14
+ "Operating System :: OS Independent",
15
+ "Programming Language :: Python :: 3",
16
+ "Programming Language :: Python :: 3.12",
17
+ "Topic :: Software Development :: Libraries :: Application Frameworks",
18
+ ]
19
+ # 硬依赖:框架代码真正 import 的最小集合。
20
+ dependencies = [
21
+ "deepagents>=0.6.10",
22
+ "langchain-core>=1.4.7",
23
+ "langgraph>=1.2.5",
24
+ "pyyaml>=6.0",
25
+ ]
26
+
27
+ # 可选能力:按需 `pip install easy-agentic[anthropic,cli]`。
28
+ # provider 包与 langgraph-cli 框架本身不 import,交给使用方按 model / serve 需求选装。
29
+ [project.optional-dependencies]
30
+ anthropic = ["langchain-anthropic>=1.4.6"]
31
+ openai = ["langchain-openai>=1.3.2"]
32
+ cli = ["langgraph-cli[inmem]>=0.4.29"]
33
+ all = [
34
+ "langchain-anthropic>=1.4.6",
35
+ "langchain-openai>=1.3.2",
36
+ "langgraph-cli[inmem]>=0.4.29",
37
+ ]
38
+
39
+ [project.urls]
40
+ Homepage = "https://github.com/easy-agentic/easy-agentic-plugin"
41
+ Repository = "https://github.com/easy-agentic/easy-agentic-plugin"
42
+
43
+ [build-system]
44
+ requires = ["uv_build>=0.11.21,<0.12.0"]
45
+ build-backend = "uv_build"
46
+
47
+ [tool.uv.build-backend]
48
+ module-name = "easy_agentic_plugin"
49
+ module-root = "src"
50
+
51
+ [dependency-groups]
52
+ dev = [
53
+ "debugpy>=1.8.21",
54
+ "pytest>=9.1.0",
55
+ "pytest-asyncio>=1.4.0",
56
+ "ruff>=0.9.0",
57
+ "mypy>=1.15.0",
58
+ # 本仓库自身也是「示例 app」:跑 langgraph dev / example agent 需要 provider 与 CLI。
59
+ # 库把它们做成 extras;这里在 dev 环境里直接装齐,保持本地开发体验不变。
60
+ "langchain-anthropic>=1.4.6",
61
+ "langchain-openai>=1.3.2",
62
+ "langchain-community>=0.4.2",
63
+ "langgraph-cli[inmem]>=0.4.29",
64
+ ]
65
+
66
+ [tool.pytest.ini_options]
67
+ testpaths = ["tests"]
68
+ pythonpath = ["src"]
69
+ asyncio_mode = "auto"
70
+ addopts = "-ra -q"
71
+
72
+ [tool.ruff]
73
+ target-version = "py312"
74
+ line-length = 100
75
+
76
+ [tool.ruff.lint]
77
+ # 温和起步:pycodestyle(E)/pyflakes(F)/isort(I)/pyupgrade(UP)/flake8-bugbear(B)。
78
+ select = ["E", "F", "I", "UP", "B"]
79
+
80
+ [tool.mypy]
81
+ python_version = "3.12"
82
+ files = ["src"]
83
+ # 三方库(deepagents/langgraph/langchain 等)stub 不全,先忽略缺失 import 的噪音。
84
+ ignore_missing_imports = true
@@ -0,0 +1,47 @@
1
+ """easy-agentic-plugin -- an Agent-oriented plugin framework (core package)."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from .application import (
6
+ Application,
7
+ build_folder_kwargs,
8
+ compose_backend,
9
+ discover_plugins,
10
+ get_application,
11
+ )
12
+ from .config import Config
13
+ from .context import AgentBuildContext, AppContext
14
+ from .contribution import AgentContribution
15
+ from .errors import ConflictError, EasyAgenticError, UnknownReferenceError
16
+ from .folder import FolderAgentError, FolderSpec, load_folder_spec
17
+ from .graph import build_graph
18
+ from .merge import merge_contributions
19
+ from .plugin import Plugin, PluginBase
20
+ from .registry import NamedRegistry
21
+ from .sources import AgentSource, FolderAgent, GraphFactory
22
+
23
+ __all__ = [
24
+ "AgentBuildContext",
25
+ "AgentContribution",
26
+ "AgentSource",
27
+ "AppContext",
28
+ "Application",
29
+ "Config",
30
+ "ConflictError",
31
+ "EasyAgenticError",
32
+ "FolderAgent",
33
+ "FolderAgentError",
34
+ "FolderSpec",
35
+ "GraphFactory",
36
+ "NamedRegistry",
37
+ "Plugin",
38
+ "PluginBase",
39
+ "UnknownReferenceError",
40
+ "build_folder_kwargs",
41
+ "build_graph",
42
+ "compose_backend",
43
+ "discover_plugins",
44
+ "get_application",
45
+ "load_folder_spec",
46
+ "merge_contributions",
47
+ ]