dynworkflow 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.
- dynworkflow-0.1.0/PKG-INFO +93 -0
- dynworkflow-0.1.0/README.md +83 -0
- dynworkflow-0.1.0/pyproject.toml +37 -0
- dynworkflow-0.1.0/src/dynworkflow/__init__.py +19 -0
- dynworkflow-0.1.0/src/dynworkflow/agent.py +1022 -0
- dynworkflow-0.1.0/src/dynworkflow/cache.py +292 -0
- dynworkflow-0.1.0/src/dynworkflow/flow.py +702 -0
- dynworkflow-0.1.0/src/dynworkflow/py.typed +0 -0
- dynworkflow-0.1.0/src/dynworkflow/reporter.py +250 -0
- dynworkflow-0.1.0/src/dynworkflow/schemas.py +88 -0
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
Metadata-Version: 2.3
|
|
2
|
+
Name: dynworkflow
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Dynamic Workflow Library for Alkaid0
|
|
5
|
+
Author: cxykevin
|
|
6
|
+
Author-email: cxykevin <cxykevin@yeah.net>
|
|
7
|
+
Requires-Dist: websockets>=15.0
|
|
8
|
+
Requires-Python: >=3.12
|
|
9
|
+
Description-Content-Type: text/markdown
|
|
10
|
+
|
|
11
|
+
# dynworkflow
|
|
12
|
+
|
|
13
|
+
`dynworkflow` 是一个 Python 3.12 库,用于编排动态工作流,工作流节点可以调用一个或多个 ACP Agent。
|
|
14
|
+
|
|
15
|
+
## 安装
|
|
16
|
+
|
|
17
|
+
使用项目包管理器安装:
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
uv sync
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
运行时依赖为 `websockets`,开发依赖包括 `pytest` 和 `mypy`。
|
|
24
|
+
|
|
25
|
+
## 快速开始
|
|
26
|
+
|
|
27
|
+
```python
|
|
28
|
+
import dynworkflow as d
|
|
29
|
+
|
|
30
|
+
flow = d.Flow(
|
|
31
|
+
"document-flow",
|
|
32
|
+
agent=d.AgentClient("ws://127.0.0.1:7433/acp?k=a"),
|
|
33
|
+
)
|
|
34
|
+
|
|
35
|
+
@flow.node("summarize")
|
|
36
|
+
def summarize() -> d.TaskGenerator:
|
|
37
|
+
result = yield d.Agent("Summarize the documents in docs/test", path="docs/test")
|
|
38
|
+
return d.Result(result)
|
|
39
|
+
|
|
40
|
+
flow.execute(summarize())
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
使用 `@flow.node(name)` 声明节点。普通节点可以返回 `None`、`Result` 或一个或多个下游 `Execute` 任务。生成器节点可以 `yield Agent` 或 `MultiAgent`,接收 Agent 结果后返回节点结果。
|
|
44
|
+
|
|
45
|
+
## 公共 API
|
|
46
|
+
|
|
47
|
+
- `Flow`:创建并执行工作流。
|
|
48
|
+
- `Flow.node(name)`:注册节点函数。
|
|
49
|
+
- `Flow.execute(*tasks)`:在当前进程中执行任务,并在所有节点结束后抛出节点异常。
|
|
50
|
+
- `Flow.run(*tasks)`:在 fork 子进程中运行工作流,并监听 stdin 中的 JSONL 控制命令。
|
|
51
|
+
- `Agent`:描述一次 Agent 请求。
|
|
52
|
+
- `MultiAgent`:并发运行多个 Agent 请求。
|
|
53
|
+
- `AgentClient`:连接 ACP WebSocket 端点。
|
|
54
|
+
- `Result`:保存节点的最终结果。
|
|
55
|
+
|
|
56
|
+
## 执行语义
|
|
57
|
+
|
|
58
|
+
- 相互独立的节点会并发运行。
|
|
59
|
+
- 节点失败后会立即变为 `error` 状态,并在启用上报时立即发送状态。
|
|
60
|
+
- 失败节点不会停止兄弟节点。
|
|
61
|
+
- 所有节点异常会在最后统一以 `ExceptionGroup` 抛出。
|
|
62
|
+
- 节点和 Agent 的终止命令只影响指定目标;工作流关闭会终止整个工作流。
|
|
63
|
+
|
|
64
|
+
## 缓存与状态上报
|
|
65
|
+
|
|
66
|
+
缓存默认启用。可以使用 `Flow(..., cache=False)` 关闭缓存。缓存文件位于 `.alkaid0/workflow.db`;设置 `ALKAID0_WORKFLOW_SESSION_ID` 可以隔离不同会话。
|
|
67
|
+
|
|
68
|
+
可以通过 `Flow(..., report=True)` 或环境变量 `ALKAID0_WORKFLOW_REPORT=1` 开启 JSONL 状态上报。`Flow.run()` 会自动开启上报。事件包括 `graph`、`node`、`agent`、`agents_start`、`node_code` 和 `node_log`。
|
|
69
|
+
|
|
70
|
+
## 示例
|
|
71
|
+
|
|
72
|
+
参见 `example.py`,其中包含使用 `AgentClient`、`Agent`、`MultiAgent`、分支和回退参数的完整工作流示例。
|
|
73
|
+
|
|
74
|
+
## 测试
|
|
75
|
+
|
|
76
|
+
运行测试套件:
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
python -m pytest -q
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
运行静态编译检查:
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
python -m compileall -q src tests
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
## 文档索引
|
|
89
|
+
|
|
90
|
+
- `docs/SKILL.md`:仅供 AI Agent 读取的使用说明,保持英文。
|
|
91
|
+
- `docs/architecture.md`:面向人的实现与生命周期说明。
|
|
92
|
+
- `docs/protocol.md`:stdin 控制命令和 JSONL 上报事件说明。
|
|
93
|
+
- `docs/test/ai_must_read.md`:示例工作流读取的测试文档。
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
# dynworkflow
|
|
2
|
+
|
|
3
|
+
`dynworkflow` 是一个 Python 3.12 库,用于编排动态工作流,工作流节点可以调用一个或多个 ACP Agent。
|
|
4
|
+
|
|
5
|
+
## 安装
|
|
6
|
+
|
|
7
|
+
使用项目包管理器安装:
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
uv sync
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
运行时依赖为 `websockets`,开发依赖包括 `pytest` 和 `mypy`。
|
|
14
|
+
|
|
15
|
+
## 快速开始
|
|
16
|
+
|
|
17
|
+
```python
|
|
18
|
+
import dynworkflow as d
|
|
19
|
+
|
|
20
|
+
flow = d.Flow(
|
|
21
|
+
"document-flow",
|
|
22
|
+
agent=d.AgentClient("ws://127.0.0.1:7433/acp?k=a"),
|
|
23
|
+
)
|
|
24
|
+
|
|
25
|
+
@flow.node("summarize")
|
|
26
|
+
def summarize() -> d.TaskGenerator:
|
|
27
|
+
result = yield d.Agent("Summarize the documents in docs/test", path="docs/test")
|
|
28
|
+
return d.Result(result)
|
|
29
|
+
|
|
30
|
+
flow.execute(summarize())
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
使用 `@flow.node(name)` 声明节点。普通节点可以返回 `None`、`Result` 或一个或多个下游 `Execute` 任务。生成器节点可以 `yield Agent` 或 `MultiAgent`,接收 Agent 结果后返回节点结果。
|
|
34
|
+
|
|
35
|
+
## 公共 API
|
|
36
|
+
|
|
37
|
+
- `Flow`:创建并执行工作流。
|
|
38
|
+
- `Flow.node(name)`:注册节点函数。
|
|
39
|
+
- `Flow.execute(*tasks)`:在当前进程中执行任务,并在所有节点结束后抛出节点异常。
|
|
40
|
+
- `Flow.run(*tasks)`:在 fork 子进程中运行工作流,并监听 stdin 中的 JSONL 控制命令。
|
|
41
|
+
- `Agent`:描述一次 Agent 请求。
|
|
42
|
+
- `MultiAgent`:并发运行多个 Agent 请求。
|
|
43
|
+
- `AgentClient`:连接 ACP WebSocket 端点。
|
|
44
|
+
- `Result`:保存节点的最终结果。
|
|
45
|
+
|
|
46
|
+
## 执行语义
|
|
47
|
+
|
|
48
|
+
- 相互独立的节点会并发运行。
|
|
49
|
+
- 节点失败后会立即变为 `error` 状态,并在启用上报时立即发送状态。
|
|
50
|
+
- 失败节点不会停止兄弟节点。
|
|
51
|
+
- 所有节点异常会在最后统一以 `ExceptionGroup` 抛出。
|
|
52
|
+
- 节点和 Agent 的终止命令只影响指定目标;工作流关闭会终止整个工作流。
|
|
53
|
+
|
|
54
|
+
## 缓存与状态上报
|
|
55
|
+
|
|
56
|
+
缓存默认启用。可以使用 `Flow(..., cache=False)` 关闭缓存。缓存文件位于 `.alkaid0/workflow.db`;设置 `ALKAID0_WORKFLOW_SESSION_ID` 可以隔离不同会话。
|
|
57
|
+
|
|
58
|
+
可以通过 `Flow(..., report=True)` 或环境变量 `ALKAID0_WORKFLOW_REPORT=1` 开启 JSONL 状态上报。`Flow.run()` 会自动开启上报。事件包括 `graph`、`node`、`agent`、`agents_start`、`node_code` 和 `node_log`。
|
|
59
|
+
|
|
60
|
+
## 示例
|
|
61
|
+
|
|
62
|
+
参见 `example.py`,其中包含使用 `AgentClient`、`Agent`、`MultiAgent`、分支和回退参数的完整工作流示例。
|
|
63
|
+
|
|
64
|
+
## 测试
|
|
65
|
+
|
|
66
|
+
运行测试套件:
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
python -m pytest -q
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
运行静态编译检查:
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
python -m compileall -q src tests
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
## 文档索引
|
|
79
|
+
|
|
80
|
+
- `docs/SKILL.md`:仅供 AI Agent 读取的使用说明,保持英文。
|
|
81
|
+
- `docs/architecture.md`:面向人的实现与生命周期说明。
|
|
82
|
+
- `docs/protocol.md`:stdin 控制命令和 JSONL 上报事件说明。
|
|
83
|
+
- `docs/test/ai_must_read.md`:示例工作流读取的测试文档。
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
[project]
|
|
2
|
+
name = "dynworkflow"
|
|
3
|
+
version = "0.1.0"
|
|
4
|
+
description = "Dynamic Workflow Library for Alkaid0"
|
|
5
|
+
readme = "README.md"
|
|
6
|
+
authors = [{ name = "cxykevin", email = "cxykevin@yeah.net" }]
|
|
7
|
+
requires-python = ">=3.12"
|
|
8
|
+
dependencies = ["websockets>=15.0"]
|
|
9
|
+
|
|
10
|
+
[build-system]
|
|
11
|
+
requires = ["uv_build>=0.11.32,<0.12.0"]
|
|
12
|
+
build-backend = "uv_build"
|
|
13
|
+
|
|
14
|
+
[dependency-groups]
|
|
15
|
+
dev = ["pytest>=9.1.1", "mypy>=1.15"]
|
|
16
|
+
|
|
17
|
+
[tool.mypy]
|
|
18
|
+
python_version = "3.12"
|
|
19
|
+
strict = true
|
|
20
|
+
files = ["src"]
|
|
21
|
+
|
|
22
|
+
[[tool.mypy.overrides]]
|
|
23
|
+
module = ["tests.*"]
|
|
24
|
+
strict = true
|
|
25
|
+
|
|
26
|
+
[tool.pytest.ini_options]
|
|
27
|
+
testpaths = ["tests"]
|
|
28
|
+
python_files = ["test_*.py"]
|
|
29
|
+
python_classes = ["Test*"]
|
|
30
|
+
python_functions = ["test_*"]
|
|
31
|
+
|
|
32
|
+
[tool.pyright]
|
|
33
|
+
include = ["src", "tests"]
|
|
34
|
+
typeCheckingMode = "strict"
|
|
35
|
+
pythonVersion = "3.12"
|
|
36
|
+
reportMissingTypeStubs = false
|
|
37
|
+
reportPrivateUsage = false
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
from .flow import Flow, Agents, Result, Node, Execute, NodeResult, TaskGenerator
|
|
2
|
+
from .agent import (
|
|
3
|
+
Agent,
|
|
4
|
+
MultiAgent,
|
|
5
|
+
AgentClient
|
|
6
|
+
)
|
|
7
|
+
|
|
8
|
+
__all__ = [
|
|
9
|
+
"Flow",
|
|
10
|
+
"Agent",
|
|
11
|
+
"Agents",
|
|
12
|
+
"MultiAgent",
|
|
13
|
+
"Result",
|
|
14
|
+
"Node",
|
|
15
|
+
"Execute",
|
|
16
|
+
"NodeResult",
|
|
17
|
+
"TaskGenerator",
|
|
18
|
+
"AgentClient"
|
|
19
|
+
]
|