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.
- easy_agentic_plugin-0.1.0/LICENSE +21 -0
- easy_agentic_plugin-0.1.0/PKG-INFO +152 -0
- easy_agentic_plugin-0.1.0/README.md +118 -0
- easy_agentic_plugin-0.1.0/pyproject.toml +84 -0
- easy_agentic_plugin-0.1.0/src/easy_agentic_plugin/__init__.py +47 -0
- easy_agentic_plugin-0.1.0/src/easy_agentic_plugin/application.py +471 -0
- easy_agentic_plugin-0.1.0/src/easy_agentic_plugin/config.py +26 -0
- easy_agentic_plugin-0.1.0/src/easy_agentic_plugin/context.py +79 -0
- easy_agentic_plugin-0.1.0/src/easy_agentic_plugin/contribution.py +36 -0
- easy_agentic_plugin-0.1.0/src/easy_agentic_plugin/errors.py +16 -0
- easy_agentic_plugin-0.1.0/src/easy_agentic_plugin/folder.py +288 -0
- easy_agentic_plugin-0.1.0/src/easy_agentic_plugin/graph.py +51 -0
- easy_agentic_plugin-0.1.0/src/easy_agentic_plugin/merge.py +137 -0
- easy_agentic_plugin-0.1.0/src/easy_agentic_plugin/plugin.py +44 -0
- easy_agentic_plugin-0.1.0/src/easy_agentic_plugin/plugins/folder_scan/plugin.json +6 -0
- easy_agentic_plugin-0.1.0/src/easy_agentic_plugin/plugins/folder_scan/plugin.py +15 -0
- easy_agentic_plugin-0.1.0/src/easy_agentic_plugin/registry.py +44 -0
- easy_agentic_plugin-0.1.0/src/easy_agentic_plugin/sources.py +38 -0
|
@@ -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
|
+
]
|