# 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)