文档: 全库走查报告(docs/05-代码审查 00-05)+ 规范更新
This commit is contained in:
@@ -0,0 +1,124 @@
|
||||
# DevFlow 全库代码走查汇总报告
|
||||
|
||||
> 走查日期: 2026-08-02
|
||||
> 范围: 全部 12 个 crate + 1 个 src-tauri(入口),约 100+ 文件,~1.5MB 代码
|
||||
> 走查方式: 逐文件全量阅读 + 交叉引用 + 架构分析
|
||||
|
||||
---
|
||||
|
||||
## 总览
|
||||
|
||||
| 报告 | 文件数 | 问题数 | P0 | P1 | P2 |
|
||||
|---|---|---|---|---|---|
|
||||
| 01-df-nodes | 17 | 20 | 3 | 7 | 10 |
|
||||
| 02-df-workflow | 11 | 9 | 1 | 4 | 4 |
|
||||
| 03-df-ai | 30 | 13 | 5 | 3 | 5 |
|
||||
| 04-df-storage-ideas-mcp | 13 | 17 | 2 | 8 | 7 |
|
||||
| 05-df-relay-tunnel-project-execute | 15 | 19 | 0 | 8 | 11 |
|
||||
| **合计** | **86** | **78** | **11** | **30** | **37** |
|
||||
|
||||
---
|
||||
|
||||
## 按严重等级分布
|
||||
|
||||
### 🔴 P0(11 个,必须立即修)
|
||||
|
||||
| # | 模块 | 文件 | 问题 |
|
||||
|---|---|---|---|
|
||||
| 1 | df-nodes | ai_node.rs | schema `required=[]` 但运行时 prompt 必填,前后端不一致 |
|
||||
| 2 | df-nodes | ai_self_review_node.rs | schema `required=["task_id","provider_id"]` 但 provider_id 可空 |
|
||||
| 3 | df-nodes | docker_node.rs | shell_quote 不处理 `;` `|` `&`,命令注入漏洞 |
|
||||
| 4 | df-workflow | conditions.rs | 单引号 `''` 转义边界 bug |
|
||||
| 5 | df-ai | openai_compat.rs(58KB) | 超大文件,应拆分 |
|
||||
| 6 | df-ai | anthropic_compat.rs(54KB) | 超大文件,应拆分 |
|
||||
| 7 | df-ai | context_helpers.rs(63KB) | 超大文件,应拆分 |
|
||||
| 8 | df-ai | coordinator.rs(65KB) | 超大文件,应拆分 |
|
||||
| 9 | df-ai | sanitize.rs(51KB) | 超大文件,应拆分 |
|
||||
| 10 | df-storage | migrations.rs(89KB) | 超大文件,应拆分 |
|
||||
| 11 | df-storage | models.rs(25KB) | 超大文件,应拆分 |
|
||||
|
||||
### 🟡 P1(30 个,尽快修)
|
||||
|
||||
主要分布:
|
||||
- **df-nodes**: DockerNode 命令注入、HumanNode timeout 3600s 过长、SubflowNode 不执行子 DAG
|
||||
- **df-ai**: intent.rs 57KB 大文件、router cost_tier 悬空、retry 硬编码
|
||||
- **df-storage**: keyring 迁移失败保留明文、单连接 Mutex、idea_repo 65KB
|
||||
- **df-ideas**: adversarial 启发式论点模板化、LLM 一致性未校验
|
||||
- **df-mcp**: tools.rs 31KB 大文件、未校验实体类型
|
||||
- **df-relay**: 单 token 鉴权、锁粒度粗
|
||||
- **df-tunnel**: 无自动重连 supervisor
|
||||
- **df-execute**: pwsh 探测时序风险、env_snapshot 卡死
|
||||
|
||||
### 🟢 P2(37 个,后续迭代)
|
||||
|
||||
技术债务、轻微代码异味、文档不足。
|
||||
|
||||
---
|
||||
|
||||
## 关键发现
|
||||
|
||||
### 1. 大文件问题突出(11 个 P0 中 6 个是大文件)
|
||||
|
||||
| 文件 | 行数 | 建议 |
|
||||
|---|---|---|
|
||||
| `migrations.rs` | 89KB/1914行 | 拆为 migrations/v1.rs~v37.rs |
|
||||
| `coordinator.rs` | 65KB | 拆为 coordinator/tasks.rs + scheduler.rs + state.rs |
|
||||
| `context_helpers.rs` | 63KB | 拆为 token_estimator.rs + config.rs + classify.rs |
|
||||
| `openai_compat.rs` | 58KB | 拆为 protocol.rs + stream.rs + embed.rs |
|
||||
| `anthropic_compat.rs` | 54KB | 同上 |
|
||||
| `sanitize.rs` | 51KB | 拆为 sanitize/ 目录 |
|
||||
| `idea_repo.rs` | 65KB | 拆为 IdeaRepo + KnowledgeRepo + KnowledgeEventsRepo |
|
||||
| `task_repo.rs` | 42KB | 拆为常规 CRUD + advance_status_atomic 专用文件 |
|
||||
| `intent.rs` | 57KB | 拆为多个意图分类文件 |
|
||||
| `models.rs` | 25KB | 拆为 models/idea.rs + project.rs + task.rs + ai.rs |
|
||||
| `tools.rs`(df-mcp) | 31KB | 拆为 tools/ 目录 |
|
||||
|
||||
### 2. 安全风险
|
||||
|
||||
- **P0**: DockerNode shell_quote 命令注入(`;` `|` `&` 未转义)
|
||||
- **P1**: df-storage 单连接 Mutex 无并发保护
|
||||
- **P1**: df-mcp 未校验实体类型(跨实体误操作)
|
||||
- **P1**: keyring 迁移失败保留明文在 SQLite
|
||||
|
||||
### 3. 功能不完整
|
||||
|
||||
- **SubflowNode**: 只返回子 DAG 元数据,不实际执行
|
||||
- **NotifyNode**: desktop 类型只是 tracing 日志占位
|
||||
- **conditions-eval**: 934 行条件引擎写了但默认 feature 关闭
|
||||
- **coordinator**: 65KB 多 Agent 协调但未接入主 loop
|
||||
- **planner**: 38KB 规划器但 Phase 0 未接入主 loop
|
||||
|
||||
### 4. 设计优秀点
|
||||
|
||||
- **状态机**: task_state_machine 双源一致性测试锁定 + 原子 CAS 写
|
||||
- **对抗评估**: 三路径降级 + 三角色辩论 + 容错解析
|
||||
- **重试策略**: 指数退避 + jitter + Fatal/Retryable 分类 + 预算上限
|
||||
- **SSE 解析器**: 宽松 UTF-8 + 三种分隔符兼容 + 1MB 缓冲区上限
|
||||
- **密钥管理**: keyring 迁移 + 失败计数阈值 + 归一化校验
|
||||
- **MCP 安全**: High 风险默认拒绝 + read-only 模式 + 双保险
|
||||
|
||||
---
|
||||
|
||||
## 修复优先级建议
|
||||
|
||||
### 立即修(P0,影响安全性/功能正确性)
|
||||
|
||||
1. **docker_node.rs shell_quote 命令注入** — 用 shell-escape crate 或手动转义所有元字符
|
||||
2. **ai_node.rs + ai_self_review_node.rs schema 不一致** — 修正 required 字段
|
||||
3. **6 个大文件拆分** — 按模块拆分为多文件
|
||||
|
||||
### 尽快修(P1,影响稳定性/可维护性)
|
||||
|
||||
1. HumanNode timeout 默认值 3600s 过长 → 改为 1800s
|
||||
2. SubflowNode 不执行子 DAG → 补递归执行
|
||||
3. HttpNode 每次新建 Client → 复用连接池
|
||||
4. df-mcp 未校验实体类型 → 对齐 B-260801-01 修复
|
||||
5. keyring 迁移失败保留明文 → 加 AES fallback 或更强告警
|
||||
|
||||
### 后续迭代(P2)
|
||||
|
||||
1. 大文件拆分持续推进
|
||||
2. conditions-eval 默认开启
|
||||
3. NotifyNode desktop 集成 tauri-plugin-notification
|
||||
4. ScriptNode dangerous_keywords 配置化
|
||||
5. 自动重连 supervisor(df-tunnel)
|
||||
Reference in New Issue
Block a user