# DevFlow 代码审查报告

**审查日期：** 2025-06-11  
**审查范围：** `src/` 目录全部 Rust 源码（6 个文件，约 1,700 行）  
**审查版本：** v0.1.0

---

## 整体评分

| 维度 | 评分 | 说明 |
|------|------|------|
| 架构设计 | ⭐⭐⭐⭐ | 模块划分清晰，Tauri 命令层 + Repo 层 + 工作流引擎分层合理 |
| 代码质量 | ⭐⭐⭐⭐ | 注释详尽，命名规范，错误处理一致 |
| 安全性 | ⭐⭐⭐ | 有路径校验和风险分级，但存在改进空间 |
| 健壮性 | ⭐⭐⭐ | 异步并发处理有隐患，部分边界情况未覆盖 |
| 可维护性 | ⭐⭐⭐ | `ai.rs` 文件过大（44KB），职责过多 |

---

## 🔴 严重问题（P0）

### #1 API Key 明文存储在数据库
- **文件：** `src/commands/ai.rs` — `ai_save_provider`
- **问题：** `api_key` 以明文存入 SQLite，任何能访问数据库文件的人都能读取
- **建议：** 使用 OS 级密钥存储或 AES 加密后存储

### #2 工作流事件转发存在多执行实例串扰
- **文件：** `src/commands/workflow.rs` — `run_workflow`
- **问题：** EventBus 全局共享，并发工作流事件会串扰
- **建议：** 为每次执行创建独立事件通道，或转发时按 execution_id 过滤

---

## 🟡 中等问题（P1）

### #3 ai_chat_send 锁释放竞态条件
- **文件：** `src/commands/ai.rs` — `ai_chat_send`
- **问题：** drop 锁后重新获取锁之间，并发请求可能覆盖 conversation_id
- **建议：** 移到锁外预处理或使用 OnceLock

### #4 ai.rs 文件过大（1129 行 / 44KB）
- **建议拆分为：** `chat.rs` / `agent.rs` / `tools.rs` / `prompt.rs`

### #5 AI 工具注册为占位实现
- **文件：** `src/state.rs`
- **问题：** 工具闭包全是占位，真正逻辑在 ai.rs 硬编码 match，两处定义易不同步
- **建议：** 统一到 AiToolRegistry 或 trait 对象分发

### #6 缺少单元测试
- **建议优先测试：** validate_path / execute_tool_on_repo / extract_title / replace_tool_result

---

## 🟢 轻微问题（P2）

### #7 now_millis() 隐藏时间异常
- `unwrap_or_default()` 静默返回 0，建议加 tracing::warn

### #8 Cargo.toml 缺少 authors 和 license
- 补充作者信息和开源许可证

### #9 .gitignore 忽略了 Cargo.lock
- 二进制应用应提交 lock 文件

### #10 update_field 使用字符串字段名
- 考虑使用 enum 定义可更新字段，编译时保证安全

### #11 validate_path 黑名单不够全面
- 建议改用白名单模式（只允许工作目录下的路径）

### #12 tauri.conf.json CSP 设为 null
- 生产环境应配置严格 CSP 策略

### #13 WorkflowFailed 中 failed_node 始终为空
- 应从执行器错误信息提取失败节点 ID

### #14 greet 命令为脚手架残留
- 确认前端不再使用后移除

---

## ✅ 代码亮点

1. 注释质量极高 — 解释"为什么"而非"是什么"
2. Agentic 循环设计精良 — 停止信号、idle timeout、断连检测、审批门控
3. 风险分级机制 — Low/Medium/High 三级控制
4. 错误处理一致 — 统一 Result<T, String>
5. 对话持久化 — 自动保存，支持多对话切换
