优化: miniapp渲染(图片/checkbox/代码高亮) + MCP规则共享下沉 + 文档重写 + 节点风格对齐
This commit is contained in:
@@ -1,26 +1,33 @@
|
||||
# df-nodes 节点集合
|
||||
|
||||
> 创建: 2026-06-10 | 最后更新: 2026-06-15
|
||||
> 创建: 2026-06-10 | 最后更新: 2026-08-08
|
||||
|
||||
---
|
||||
|
||||
## 概述
|
||||
|
||||
df-nodes 提供 DevFlow 工作流引擎的内置节点。所有节点实现 df-workflow 的 `Node` trait。
|
||||
df-nodes 提供 DevFlow 工作流引擎的内置节点。所有节点实现 df-workflow 的 `Node` trait
|
||||
(`execute` / `schema` / `node_type`),由 DAG Executor 按拓扑序驱动。
|
||||
|
||||
## 当前状态
|
||||
|
||||
3 种节点全部完整实现(`execute()` 非 stub,有真实逻辑 + 单测覆盖)。
|
||||
10 个节点全部完整实现(`execute()` 非 stub,有真实逻辑 + 单测覆盖),另有 `task_state_machine`
|
||||
(状态机)与 `task_workflow_templates`(流程模板)两个支撑模块。
|
||||
|
||||
## 节点清单
|
||||
|
||||
| 节点 | 功能 | 阻塞 | node_type | 实现状态 |
|
||||
|------|------|------|-----------|---------|
|
||||
| AiNode | 调用 LLM 完成文本生成/分析(非流式 complete) | 否 | `ai` | ✅ 完整 |
|
||||
| ScriptNode | Shell/脚本执行 | 否 | `script` | ✅ 完整 |
|
||||
| HumanNode | 人工审批/确认(单选/多选) | 是 | `human` | ✅ 完整 |
|
||||
|
||||
> 历史文档曾列 8 节点(AI/Script/Docker/Git/Human/Notify/HTTP/Subflow)全标骨架。实际仅 AI/Script/Human 3 节点存在,其余 5 节点(Docker/Git/Notify/HTTP/Subflow)从未实现,已从本文档删除。
|
||||
| AiNode | 调用 LLM 完成文本生成/分析(非流式 complete) | 否 | `ai` | ✅ 完整 |
|
||||
| AiSelfReviewNode | AI 对任务产出自审(复用 AiNode 调用链,verdict 闸门) | 否 | `ai_self_review` | ✅ 完整 |
|
||||
| ScriptNode | Shell/脚本执行(白/黑名单安全策略) | 否 | `script` | ✅ 完整 |
|
||||
| HumanNode | 人工审批/确认(单选/多选) | 是 | `human` | ✅ 完整 |
|
||||
| TaskAdvanceNode | 任务状态推进链唯一 status 写入路径(状态机 + CAS) | 否 | `task_advance` | ✅ 完整 |
|
||||
| GitNode | Git 操作(branch/checkout/commit/merge/push/status/log) | 否 | `git` | ✅ 完整 |
|
||||
| HTTPNode | HTTP 请求(GET/POST/PUT/DELETE) | 否 | `http` | ✅ 完整 |
|
||||
| NotifyNode | 通知(桌面日志 / webhook,尽力而为不阻断) | 否 | `notify` | ✅ 完整 |
|
||||
| SubflowNode | 嵌套子工作流(返回子 DAG 快照,深度限制防递归) | 否 | `subflow` | ✅ 完整 |
|
||||
| DockerNode | Docker 容器内执行命令(`docker run --rm`,环境检测+授权) | 否 | `docker` | ✅ 完整 |
|
||||
|
||||
## 节点详述
|
||||
|
||||
@@ -35,12 +42,18 @@ df-nodes 提供 DevFlow 工作流引擎的内置节点。所有节点实现 df-w
|
||||
- **输出**:`{ text, model, usage: {prompt_tokens, completion_tokens, total_tokens} }`。
|
||||
- **与 AI Chat 区别**:AiNode 由 DAG Executor 自动驱动(嵌入自动化链路),非交互对话。
|
||||
|
||||
### AiSelfReviewNode(ai_self_review_node.rs)
|
||||
|
||||
AI 自审闭环节点:对 AiNode 产出的任务内容做二次 AI 审查,返回 `verdict`(通过/打回)闸门。
|
||||
复用 AiNode 的 provider 调用链(`ai_node_helpers`),差异在 prompt 模板与 JSON 解析。
|
||||
|
||||
### ScriptNode(script_node.rs)
|
||||
|
||||
执行 Shell 脚本或自定义命令,复用 `df_execute::shell::execute`(跨平台:Windows `cmd /C` / Unix `sh -c`)。
|
||||
|
||||
- **必填**:`command`。
|
||||
- **可选**:`timeout_secs`、`working_dir`。
|
||||
- **安全策略**:命令名(首词)白/黑名单校验(运行时配置优先,回退环境变量 / 默认黑名单);危险关键词仅告警不阻止。
|
||||
- **失败语义**:非零退出码视为执行失败(`bail!` 带 exit_code + stderr)。
|
||||
- **输出**:`{ stdout, stderr, exit_code, duration_ms }`。
|
||||
|
||||
@@ -49,7 +62,7 @@ df-nodes 提供 DevFlow 工作流引擎的内置节点。所有节点实现 df-w
|
||||
阻塞节点,订阅事件总线 → 发 `HumanApprovalRequest` → `select!` 轮询 `HumanApprovalResponse` / 超时 / 取消。
|
||||
|
||||
- **执行顺序**:先 `subscribe()` 再 `send(Request)`(broadcast 不回放,反序会丢 Response 死等到超时);`send` 必须 `await`(否则 Future 不 poll、Request 不进 channel)。
|
||||
- **审批模式**(F-260615-01):`select_type` 缺省 `Single`,非 `"multiple"` 一律按 Single 处理。
|
||||
- **审批模式**:`select_type` 缺省 `Single`,非 `"multiple"` 一律按 Single 处理。
|
||||
- Single → 决策数必须 = 1
|
||||
- Multiple → 决策数必须 ≥ 1
|
||||
- `options` 空 → 允许自由文本(仅受数量约束);非空 → 每项必须 ∈ options
|
||||
@@ -59,25 +72,66 @@ df-nodes 提供 DevFlow 工作流引擎的内置节点。所有节点实现 df-w
|
||||
- **取消**:每 500ms tick 检查 `node_status.is_cancelled`。
|
||||
- **输出**:`{ decision(首项,向后兼容), decisions(数组), comment }`。
|
||||
|
||||
### TaskAdvanceNode(task_advance_node.rs)
|
||||
|
||||
任务推进链的唯一 status 写入路径(与 IPC/AI 工具/MCP 同源):读当前 TaskRecord → 状态机
|
||||
`can_transition` 校验 → 原子写(下沉 SQL 防 TOCTOU),退回转换自动累加 `review_rounds`。
|
||||
|
||||
### GitNode(git_node.rs)
|
||||
|
||||
通过 `df_execute::shell::execute` 调用本地 git CLI,`working_dir` 指定仓库路径。
|
||||
支持 branch / checkout / commit / merge / push / status / log,输出按 action 提取结构化字段。
|
||||
|
||||
### HTTPNode(http_node.rs)
|
||||
|
||||
使用 reqwest 发起 GET/POST/PUT/DELETE 请求。config 提供 `method/url/headers/body/timeout_secs`,
|
||||
输出 `status_code + body + content_type`。
|
||||
|
||||
### NotifyNode(notify_node.rs)
|
||||
|
||||
桌面(当前为日志占位,后续接 tauri-plugin-notification)/ webhook 通知。语义:尽力而为,
|
||||
通知失败不阻断工作流(输出 `success=false` 但仍 Ok 返回)。
|
||||
|
||||
### SubflowNode(subflow_node.rs)
|
||||
|
||||
加载一个子 DAG 并在当前执行上下文中递归执行(复用通用流程,如「代码审查」作为子步骤)。
|
||||
返回子 DAG 的 JSON 快照供 DagExecutor 消费展开,`max_depth` 限制嵌套深度防无限递归。
|
||||
|
||||
### DockerNode(docker_node.rs)
|
||||
|
||||
通过 `docker run --rm` 一次性容器执行命令,复用 `df_execute::shell::execute` 调用本地 docker CLI。
|
||||
含环境检测(本机是否有 docker)与授权校验。
|
||||
|
||||
## 文件结构
|
||||
|
||||
```
|
||||
crates/df-nodes/src/
|
||||
├── lib.rs — 模块入口(声明 ai_node / human_node / script_node 三个 pub mod)
|
||||
├── ai_node.rs — AiNode(LLM 文本生成/分析)
|
||||
├── script_node.rs — ScriptNode(Shell 执行)
|
||||
└── human_node.rs — HumanNode(人工审批/确认,阻塞)
|
||||
├── lib.rs — 模块入口(声明各 pub mod)
|
||||
├── ai_node.rs — AiNode(LLM 文本生成/分析)
|
||||
├── ai_node_helpers.rs — AiNode 纯逻辑(provider 解析/参数构造,非 Node)
|
||||
├── ai_self_review_node.rs — AiSelfReviewNode(AI 自审)
|
||||
├── script_node.rs — ScriptNode(Shell 执行)
|
||||
├── human_node.rs — HumanNode(人工审批/确认,阻塞)
|
||||
├── human_node_helpers.rs — HumanNode 纯逻辑(拒绝语义判定,非 Node)
|
||||
├── task_advance_node.rs — TaskAdvanceNode(任务状态推进链)
|
||||
├── task_state_machine.rs — 任务状态机(can_transition 等,非 Node)
|
||||
├── task_workflow_templates.rs — 流程模板(testing 等模板,非 Node)
|
||||
├── git_node.rs — GitNode(Git 操作)
|
||||
├── http_node.rs — HttpNode(HTTP 请求)
|
||||
├── notify_node.rs — NotifyNode(通知)
|
||||
├── subflow_node.rs — SubflowNode(嵌套子工作流)
|
||||
└── docker_node.rs — DockerNode(容器内执行)
|
||||
```
|
||||
|
||||
## 依赖关系
|
||||
|
||||
```
|
||||
df-core
|
||||
← df-workflow (Node trait)
|
||||
← df-nodes
|
||||
← df-ai (AiNode: build_provider / LlmProvider)
|
||||
← df-execute (ScriptNode: shell::execute)
|
||||
← df-core (HumanNode: events::WorkflowEvent / SelectType)
|
||||
df-workflow (Node trait / DagDef)
|
||||
← df-nodes
|
||||
← df-ai (AiNode/AiSelfReviewNode: build_provider / LlmProvider)
|
||||
← df-execute (ScriptNode/GitNode/DockerNode: shell::execute)
|
||||
← df-storage (TaskAdvanceNode: TaskRepo::advance_status_atomic)
|
||||
← df-core / df-types (HumanNode: events::WorkflowEvent / SelectType)
|
||||
```
|
||||
|
||||
## 相关文档
|
||||
|
||||
Reference in New Issue
Block a user