Files
DevFlow/docs/05-代码审查/00-全库代码走查汇总-2026-08-02.md

5.1 KiB
Raw Permalink Blame History

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

按严重等级分布

🔴 P011 个,必须立即修)

# 模块 文件 问题
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) 超大文件,应拆分

🟡 P130 个,尽快修)

主要分布:

  • 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 卡死

🟢 P237 个,后续迭代)

技术债务、轻微代码异味、文档不足。


关键发现

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. 自动重连 supervisordf-tunnel