- name
- code-review
- description
- 面向 ZeroLaunch-rs 的项目专属代码审查技能。对当前工作区、staged 变更、当前分支全量变更、指定 git range 或最近 N 次 commit 的聚合变更进行多 agent 并行审查,重点验证逻辑正确性、确认是否引入新回归、检查架构边界耦合、以及验证与 .omp/rules/ 规则的一致性。
- argument-hint
- [范围: working-tree | --staged | branch | <git range> | 最近 N 次 commit]
## 用途
对 ZeroLaunch-rs 的代码变更执行**项目专属**代码审查。默认只读,不直接修改代码。6 个并行子 agent 分别覆盖:
1. **变更建模** — 建立风险地图,为后续 agent 提供聚焦点
2. **逻辑正确性** — 控制流、状态流、数据契约、异步时序、错误路径
3. **新回归** — 严格只计"变更前没有、变更后出现"的问题
4. **架构结构(4a)** — 代码放置、类型边界、依赖方向(P1/P2/P3,P2/P3 有脚本兜底)
5. **架构行为(4b)** — 职责域解耦、通信方式、接口复用、**过度设计检测**(P4/P5/P6 + 设计债,纯人工判断)
6. **规则一致性** — 与 `.omp/rules/` 的规定是否一致(不一致可能是代码违反规则,也可能是规则已过时需更新)
## 触发方式
```text
/code-review # 默认: 审查工作区变更 (git diff HEAD)
/code-review --staged # 仅审查暂存区
/code-review 审查本分支中的所有更改 # 审查当前分支相对默认分支的全量变更
/code-review <git range> # 审查指定范围,如 main..HEAD、HEAD~3..HEAD
/code-review 对过去5次commit做审核 # 最近 N 次 commit 聚合审查
/code-review 审核最近3个 commit # 同上
```
**范围解析优先级**:明确 git range > "最近 N 次 commit" 描述 > "本分支" 描述 > 默认 working-tree。
当 `N > 1` 或范围为多 commit 时,进入**跨 commit 审核模式**:先聚合审查,再对大 commit 单独下钻。
## 执行流程
### 第一阶段:确定范围并收集上下文(脚本驱动)
1. 根据用户参数运行上下文收集脚本:
```bash
# mode 取值: working-tree | staged | branch | range | commits
bash .omp/skills/code-review/scripts/collect-context.sh <mode> [range_or_n]
```
脚本一次性输出:变更统计、按子系统分组的文件清单、子系统交叉数、需加载的规则文件、**依赖方向检查(确定性,workspace + src-tauri 内部模块层级)**、**边界类型泄漏检查(确定性)**、构建/lint 建议、**IPC 命令三方一致性检查(确定性)**、大 commit 分类表。
2. 若脚本建议执行构建检查(任意 `.rs` 变更),执行 `cd src-tauri && cargo check`;并优先运行 `cargo clippy`——其中 `clippy::await_holding_lock` 可**确定性**检出「RwLock/Mutex 守卫跨 `.await`」这一核心规则违规,胜过肉眼看 diff。
3. 若变更涉及前端或 IPC 契约,必要时执行 `bun run build`。
4. 命令不存在或成本过高时,回退到静态分析并在结论中说明。
### 第二阶段:并行发现(6 个子 agent)
同时启动 6 个只读审查 agent。各 agent 的提示词模板见 `references/agent-prompts.md`。
所有 agent 共享前置约束:
- **只读**,不修改文件
- 先读 `references/project-review-checklist.md`
- 阅读第一阶段脚本输出的上下文报告
- 按变更路径加载 `.omp/rules/` 中最相关的规则文件
- 若存在 `.codegraph/`,优先使用 CodeGraph
| Agent | 职责 | 严重程度上限 |
| -------------- | ---------------------------- | ---------------- |
| 1 — 变更建模 | 建立风险地图 | 不评级(信息性) |
| 2 — 逻辑正确性 | 控制流/状态流/契约/异步/错误 | 阻塞 |
| 3 — 新回归 | 仅计本次引入的回归 | 阻塞 |
| 4a — 架构结构 | P1 放置/P2 类型边界/P3 层级 | 阻塞 |
| 4b — 架构行为 | P4 职责域解耦/P5 通信/P6 复用 + 过度设计检测 | 阻塞(设计债定级中/低) |
| 5 — 规则一致性 | 与 `.omp/rules/` 的一致性 | 阻塞(A 类违规) |
Agent 5 的核心区分:不一致发现分为 **A 类**(代码违反规则,需改代码)和 **B 类**(规则已过时,需更新规则)。A 类问题使用阻塞级提示。
### 第三阶段:大 commit 下钻
仅在多 commit 范围审查时执行。第二阶段的 `collect-context.sh` 已通过 `classify-commits.sh` 输出大 commit 分类表。
大 commit 判定标准(满足任一):
- 变更文件数 ≥ 8
- 插入 + 删除总行数 ≥ 300
- 跨越 ≥ 2 个核心子系统
对每个大 commit 启动独立审查 agent(提示词模板见 `references/agent-prompts.md` 末尾)。只有在聚合审查完成后才决定是否下钻,不机械逐个重审。
### 第四阶段:主 Agent 汇总
阅读 6 份聚合审查报告(及大 commit 报告如有),执行以下步骤:
#### 4.1 冲突检测与复核
**若不同子 agent 对同一代码位置的结论相互冲突**(例如 Agent 2 认为某处有逻辑错误,Agent 4a/4b 认为该设计合理),主 agent **必须**:
1. 自行阅读相关代码与 diff,独立确认实际情况
2. 在对应问题条目下追加一行 `[冲突复核:<来源 agent> 认为 <结论>,复核后确认 <最终判定>]`,说明采纳哪方结论,或两方都不完全正确
不跳过这一步,不简单"少数服从多数"。冲突复核行内化,不设独立章节。
#### 4.2 报告生成
按 `references/report-template.md` 规定的结构与输出风格生成最终报告。模板只保留四要素问题条目:**等级 / 现象 / 位置 / 修复建议**(外加来源标注与冲突复核行)。
**如实全量呈现纪律(必须遵守)**:
- 最终报告必须覆盖**每个子 agent 报告中的每一条发现**——包括疑点、既有问题、B 类规则更新建议
- 同一位置的多 agent 同质问题可以合并为一条,但必须标注全部来源(如 `来源:Agent 2、Agent 4a`);**不得**因报告已长、问题已多、或与其他 agent 重复而省略任何子 agent 的问题
- 报告生成完毕后,对照各子 agent 报告逐一核对覆盖情况(每条发现都出现在最终报告中),核对结果写入报告文件末尾(`覆盖核对:Agent 1 (N) / Agent 2 (N) / ... / Agent 5 (N) 全部纳入`)
- Agent 1(变更建模)不产出问题条目,其风险地图压缩为总览表中的「变更概要」一句话
#### 4.3 结果持久化到文件
结构化审查结论生成后,**必须**将完整审查报告写入文件:
- **目录**: `.omp/skills/code-review/reports/`(若不存在,使用 `mkdir -p` 创建)
- **文件名格式**: `code-review-YYYY-MM-DD-简短摘要.md`
- `YYYY-MM-DD` 为审查执行当天的日期
- `简短摘要` 描述审查范围,如 `working-tree`、`main-to-HEAD`、`staged`、`last-3-commits`、`review-plugin-system` 等(使用英文 kebab-case)
- **文件内容**: 包含完整的结构化审查结论(`references/report-template.md` 的所有章节),从"总体结论"到"覆盖核对",各子 agent 的报告摘要可精简纳入而不丢失关键信息。文件开头加一行元数据(格式见 `references/report-template.md` 末尾)
- **写入方式**: 使用 `Write` 工具写入。若同日期同范围的文件已存在,则追加或覆盖均可(新文件头部注明"覆盖前次报告")
- **时机**: 在向用户输出审查结论的同时或之后立即执行,确保结果不丢失
## 判定准则
最终判断以以下项目约束为审查锚点:
- **架构原则 P1-P6**(详见 `references/architecture-principles.md`):职责驱动放置、类型职责边界、编译期层级、运行时职责域解耦、通信方式契约、接口复用优先
- 前端是薄展示层;业务逻辑、文件/进程/平台操作必须留在后端 IPC 之后
- IPC 类型契约必须 Rust / TypeScript 双端同步,字段名使用明确的 serde rename
- `commands/` 是命令入口,不是业务逻辑容器
- 插件系统优先沿用既有抽象:`PluginHandle`、`ExecutorRegistry`、`CandidatePipeline`、`SearchPipeline`、`Configurable` 生命周期
- 过度设计检测(Agent 4b):为「可能到来的未来」提前支付的抽象成本——零调用者接口、可推导冗余字段、恒值预留字段、状态空间虚胖(合法组合远小于声明组合且靠纪律维持)、单实现者抽象。此类定级「中/低」(设计债),不得因"为未来好"升为阻塞;若抽象实际破坏了现有功能,归 Agent 2/3 的阻塞/高问题
- `PluginManager` 与配置/路由系统通过事件解耦,不重新拉回直接依赖
- 同步锁守卫不得跨 `await`(`parking_lot`/`std::sync`/`DashMap` 等;`tokio::sync` 异步锁豁免)
- workspace 依赖方向 + src-tauri 内部模块层级不可反转(`check-deps-direction.sh` 确定性检查)
- 类型职责边界(P2):类型定义位置编码职责,职责决定使用范围(`check-type-scope.sh` 确定性检测已知边界类型;LLM 按方法论判断所有类型含新增)
- 代码必须与 `.omp/rules/` 中的规定一致;不一致时区分"代码违反规则"与"规则已过时"
## 脚本清单
| 脚本 | 用途 |
| --------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------- |
| `scripts/lib.sh` | 共享库:子系统分类、核心子系统判定、路径→规则文件映射(`collect-context.sh` 与 `classify-commits.sh` 共同 source,避免分类逻辑漂移) |
| `scripts/collect-context.sh` | 收集审查上下文(diff stat、子系统分类、规则映射、架构检查、IPC 命令检查、大 commit 分类) |
| `scripts/classify-commits.sh` | 对多 commit 范围中的每个 commit 做大 commit 分类 |
| `scripts/check-deps-direction.sh` | 确定性检查依赖方向:workspace crate 层级 + **src-tauri 内部模块层级(P3)**,检出反向依赖 |
| `scripts/check-ipc-commands.sh` | 确定性交叉校验 IPC 命令:`#[tauri::command]` 定义 ↔ `generate_handler!` 注册 ↔ 前端 `invoke` 调用,检出未注册/未定义/前端调用不存在命令等漂移 |
| `scripts/check-type-scope.sh` | 确定性检查边界类型泄漏(P2):IPC DTO(`commands/` 内 struct)与 `BridgeError` 是否被内部模块(core/plugin_framework/builtin_plugin/state)引用 |
脚本输出进入上下文,脚本代码本身不消耗上下文 token。能用脚本确定性判断的检查项一律用脚本,不交给 LLM 推断,当前覆盖:
- 依赖方向合规性(workspace + 内部模块层级,`check-deps-direction.sh`,对应 P3)
- 边界类型泄漏(`check-type-scope.sh`,对应 P2)
- 文件分类 / 规则映射 / 核心子系统交叉 / 大 commit 判定(`lib.sh` + `collect-context.sh` + `classify-commits.sh`)
- IPC 命令定义/注册/前端调用三方一致性(`check-ipc-commands.sh`)
- RwLock/Mutex 守卫跨 await(交由 `cargo clippy` 的 `await_holding_lock` 而非 LLM)
> 架构原则的详细定义(P1-P6、层级表、职责域、类型范围表)见 `references/architecture-principles.md`,是 Agent 4a/4b 的核心审查依据。
## 注意事项
你只可以一步一步的按照该步骤处理。不可以做其他更多的事。不要在没有明确指令的情况下修改代码。
由于脚本执行或 cargo check 的时间会比较长,所以你必须将超时时间设置为至少 5 分钟(推荐 10 分钟),以防止运行超时。
在 GitHub 查看