Files
DevFlow/docs/05-代码审查/04-df-storage-ideas-mcp-走查-2026-08-02.md
T

4.7 KiB
Raw Blame History

df-storage + df-ideas + df-mcp 代码走查报告

走查日期: 2026-08-02 范围: crates/df-storage/ (7 files, ~142KB) + crates/df-ideas/ (7 files, ~63KB) + crates/df-mcp/ (3 files, ~52KB)


一、df-storage 存储层

文件规模

文件 行数 类型
migrations.rs 89,663 迁移脚本(37 个版本)
models.rs 24,880 15 个数据模型
secret.rs 16,523 密钥管理(keyring)
crud/mod.rs 14,919 Repo 宏 + 公共工具
crud/task_repo.rs 42,011 任务 Repo
crud/idea_repo.rs 65,123 灵感 Repo
crud/conversation_repo.rs 23,614 对话 Repo
crud/message_repo.rs 26,633 消息 Repo
crud/project_repo.rs 20,753 项目 Repo
crud/settings.rs 11,778 列白名单

问题汇总

# 等级 文件 类型 简述
1 🟡 P1 migrations.rs smell 89KB 单文件,37 个迁移函数全在一个文件,V1 建表 SQL 也嵌在里面
2 🟡 P1 secret.rs risk keyring 在 Linux 无 GUI 会话时静默失败,set_provider_secret 返回 Err 但上层不处理
3 🟡 P1 db.rs risk 单连接 Mutex<Connection>GUI + MCP server 并发读写时锁竞争
4 🟡 P1 crud/mod.rs risk impl_repo! 宏生成的 update_field 不校验 entity_type(已知缺陷 B-260801-01
5 🟡 P1 crud/idea_repo.rs smell 65KB 单文件,灵感 Repo 含知识库/向量工具,职责过宽
6 🟡 P1 crud/task_repo.rs smell 42KB 单文件,含 advance_status_atomic 状态机收口
7 🟢 P2 secret.rs smell 迁移失败计数 sidecar 文件用 .devflow-keyring-failcount,路径依赖 cwd
8 🟢 P2 models.rs smell AiProviderRecordDebug 手动脱敏,新增字段易漏
9 🟢 P2 migrations.rs smell 37 个迁移版本,V1 建表 SQL 内联,V21 消息拆表迁移函数长

正面评价

  1. 胡盾宏 impl_repo!: 消除 14 个 Repo 的重复样板,from_row/insert/update 三体分离
  2. 迁移幂等: column_exists 探测,新库/老库/坏数据均不崩
  3. WAL 模式: PRAGMA journal_mode=WAL 已启用,GUI + MCP 并发安全
  4. 密钥管理: keyring 迁移 + 失败计数阈值 + 显示告警,设计完整
  5. ensure_resolved_key: 归一化(trim/剥引号)防粘贴脏 key
  6. 列白名单: allowed_columns_for 每表独立白名单,防 SQL 注入
  7. 基线测试: all_known_tables_have_column_whitelist 防新增表漏白名单

二、df-ideas 灵感评估

问题汇总

# 等级 文件 类型 简述
1 🟡 P1 adversarial.rs smell 296KB 单文件,引擎 + 测试混在一起,测试应拆到独立文件
2 🟡 P1 adversarial_helpers.rs risk 拒绝语义化关键字 "no" 过宽,"no problem" 等文本可能误判
3 🟢 P2 scoring.rs smell 关键词匹配 count_any 否定前缀处理复杂,但只处理单字+两字否定
4 🟢 P2 scoring_keywords.rs smell 关键词硬编码,最佳实践应为 JSON 配置
5 🟢 P2 adversarial.rs risk evaluate_with_llm 返回一致性未校验,ARC-260618-01-e 待决策

正面评价

  1. 对抗评估架构: 启发式/LLM 双轨 + 自动降级,evaluated_by 三态标记前端可展示
  2. LLM prompt 设计: 三角色辩论 + 严格 JSON schema + 截断保护
  3. parse_llm_eval 容错: 剥离 ```json 围栏 + 正则兜底 + 枚举映射 + 数值 clamp
  4. 评分引擎: 否定前缀处理(不复用反向不计入复用正向分),设计精细
  5. 测试覆盖: adversarial 7 个启发式 + 1 个 LLM mock 测试,scoring 10 个测试

三、df-mcp MCP Server

问题汇总

# 等级 文件 类型 简述
1 🟡 P1 tools.rs smell 31KB 单文件,19 个 handler + 工具定义全在一起
2 🟡 P1 tools.rs risk Box::leak 静态化工具定义,但 all_tools() 每次调用重新构建 Vec
3 🟢 P2 server.rs smell dispatch 中 high_risk 兜底拒绝与 visible 过滤双重检查,但 visible 已过滤 High
4 🟢 P2 protocol.rs smell McpMethod::from_requesttools/call 的 arguments 取 req.params.get("arguments"),可能为 null

正面评价

  1. 安全设计: High 风险工具默认拒绝,read-only 模式仅 Low,双保险
  2. 协议实现: 完整 JSON-RPC 2.0 + MCP 2025-06-18 协议
  3. 测试覆盖: initialize/list/call/High拒绝/read-only/create-then-list 全路径覆盖
  4. handler 函数指针: 避免闭包捕获生命周期问题
  5. medium_audit 审计日志: Medium 风险工具调用有 tracing::warn 审计