chore: 清理一些无用的文件

This commit is contained in:
shaw
2026-03-04 10:15:42 +08:00
parent 72961c5858
commit 0aa3cf677a
27 changed files with 5 additions and 4129 deletions

View File

@@ -1,679 +0,0 @@
---
name: bug-fix-expert
description: 以"先确认、再修复"的多智能体协作方式处理缺陷,保证速度和安全。
license: MIT
compatibility: Claude Code支持 Task 工具时启用并行协作,否则自动降级为单智能体顺序执行)。
metadata:
author: project-team
version: "4.3"
---
# Bug 修复专家bug-fix-expert
## 术语表
| 术语 | 定义 |
|------|------|
| **主控** | 主会话,负责协调流程、管理 worktree 生命周期、与用户沟通 |
| **子智能体** | 通过 Task 工具启动的独立 agent执行具体任务后返回结果 |
| **角色** | 抽象职责分类(验证/分析/修复/安全/审查),映射到具体的子智能体 |
| **Beacon** | 完成信标Completion Beacon子智能体的结构化完成报告 |
| **Worktree** | 通过 `git worktree` 创建的隔离工作目录 |
| **三重门禁** | 交付前必须同时满足的三个条件:测试通过 + 审查通过 + 安全通过 |
## 触发条件
当以下任一条件满足时激活本技能:
- 用户明确报告 bug、异常、CI 失败、线上问题。
- 用户描述"实际行为 ≠ 预期行为"的现象。
- 代码审查报告中标记了 BUG-NNN / SEC-NNN 类问题需要修复。
- 用户显式要求"按 bug-fix-expert 流程处理"。
## 目标
以"先确认、再修复"的方式处理缺陷:
1. **先证明 bug 真实存在**(必须从多个角度确认)。
2. **若确认真实存在**:实施最佳修复方案,补齐测试,避免引入回归;修复后由独立角色审查改动,直至无明显问题。
3. **若确认不存在/无法证实**:只说明结论与证据,不修改任何代码。
## 适用范围
- **适用**用户报告的异常、CI 失败、线上问题回溯、逻辑不符合预期、性能/并发/边界 bug 等。
- **不适用**:需求变更(应先确认产品预期)或纯重构(除非重构是修复的最小代价手段)。
## 强制原则(不可跳过)
1. **没有可重复的证据,不改代码**:至少满足"稳定复现"或"静态分析可严格证明存在"。
2. **多角度确认**:至少使用 3 种不同方式交叉验证P0 可降至 2 种,但必须注明理由)。
3. **先写失败用例**:优先用最小化单元测试/集成测试把 bug "钉住"。
4. **修复必须带测试**:新增/完善测试覆盖 bug 场景与关键边界,确保回归保护。**改动代码的单元测试覆盖率必须 ≥ 85%**(以变更行为统计口径,非全仓覆盖率)。
5. **不引入新问题**:尽量小改动、低耦合;遵守项目既有分层与编码规范。
6. **修复与审查角色隔离**:修复者不得自审,必须由独立角色执行代码审查。
7. **安全前后双检**:修复前预扫描 + 修复后 diff 复核,两次都通过才算合格。
8. **Git 写操作必须确认**:任何会改变 Git 状态的操作必须先获得用户确认;只读诊断无需确认。**例外**bugfix 流程中的临时 worktree 创建/删除和 `bugfix/*` 命名空间下的临时分支操作,在用户确认启动 bug 修复流程时即视为一次性授权,后续无需逐个确认。
9. **沟通与文档默认中文**:除非用户明确要求其他语言。
10. **Bug-ID 合法性校验**Bug-ID 只允许包含字母、数字、连字符(`-`)和下划线(`_`),正则校验 `^[A-Za-z0-9_-]{1,64}$`。不符合规则的输入必须拒绝并提示用户修改。主控在构造路径和分支名前必须执行此校验。
## 严重度分级与响应策略
| 等级 | 定义 | 响应策略 |
|------|------|----------|
| **P0 — 线上崩溃/数据损坏** | 服务不可用、数据丢失/损坏、安全漏洞已被利用 | **快车道**:验证可降至 2 种交叉方式;跳过方案对比,直接最小修复;采用乐观并行(见"P0 乐观并行策略" |
| **P1 — 核心功能阻断** | 主流程不可用但服务在线、影响大量用户 | **加速道**:方案设计精简为 1-2 句权衡;验证与分析并行 |
| **P2 — 功能异常/边界问题** | 非主流程异常、边界条件触发、体验降级 | **标准道**:完整执行全部步骤 |
| **P3 — 优化/改善** | 性能可改善、代码异味、非紧急潜在风险 | **标准道**:完整执行,可排入后续迭代 |
> 默认按 P2 处理;用户明确指出严重度或从上下文可判断时自动调级。
**P0 乐观并行策略**P0 级别可同时启动验证和修复子智能体(修复基于初步分析的"最可能根因"先行工作)。若验证子智能体返回 `FAILED`(无法证实 bug主控必须立即通过 `TaskStop` 终止修复子智能体、清理其 worktree并跳转到"无法证实"结论。P0 乐观并行的回滚代价是浪费修复 agent 的工作量,但换取更快的修复速度。
## 标准工作流
### 0) 信息收集
收集并复述以下信息(缺失则主动追问):
- **现象**:实际行为、报错信息/堆栈、日志片段。
- **预期**:应该发生什么?
- **环境**:版本号/分支、运行方式(本地/容器/CI、关键配置。
- **复现步骤**:最小复现步骤与输入数据。
- **严重度**根据影响面初步定级P0-P3决定后续流程节奏。
> 目标:确保"讨论的是同一个问题",避免修错。
### 1) 真实性确认(多角度交叉验证)
**核心验证(必须完成至少 3 种P0 可降至 2 种并注明理由):**
**A. 运行复现**:按复现步骤在本地/容器复现;必要时降低变量(固定数据、关闭并发、固定随机种子)。
**B. 测试复现**:新增一个"修复前稳定失败"的最小测试(优先单测,其次集成测试)。
- 用例命名清晰,直接表达 bug。
- 失败原因明确,不依赖偶然时序。
**C. 静态交叉验证**:通过代码路径与边界条件推导 bug空指针、越界、错误分支、并发竞态、上下文取消、事务边界、权限校验等并与运行/测试现象一致。
**必做分析(不计入验证种类数,但每次必须执行):**
**D. 影响面评估**:分析 bug 所在代码的调用链,列出可能受影响的上下游模块。
**E. 可选补充验证(强烈建议做至少 1 项):**
- 变更输入/边界:最小值/最大值/空值/非法值/并发压力/时序变化。
- 对比历史/回归定位:优先只读方式(查看变更历史与责任行)。
- 临时诊断不落库局部日志、断点、计数器、trace。
#### 判定标准
| 判定 | 条件 |
|------|------|
| **真实存在** | 可稳定复现(运行或测试)且现象可解释 |
| **可严格证明存在** | 难以复现,但静态分析可严格证明必现(明显的 nil deref/越界/必走错误分支) |
| **无法证实** | 无法稳定复现,且静态分析无法给出严格证明 → **停止,不修改任何代码** |
#### 结论汇总规则
- 若验证与分析结论一致 → 进入下一步。
- 若矛盾 → 启动额外验证(上述 E 项),**最多追加 2 轮**。仍矛盾则上报用户决策。
### 2) 方案设计
至少列出 2 个可行方案P0 可跳过对比,直选最小修复并注明理由),明确权衡:
- 影响面(改动范围、是否影响 API/DB/数据兼容性)
- 风险(并发/安全/性能/回滚复杂度)
- 可测试性(是否容易写稳定测试)
选择"最小改动且可证明正确"的方案。
### 3) 实施修复
1. 先落地最小修复(尽量不重构、不改风格)。
2. 完善测试:
- 覆盖 bug 场景(必须)
- 覆盖关键边界与回归场景(必须)
- 必要时增加集成/端到端验证(按影响面决定)
- **改动代码覆盖率门禁**:对本次修改/新增的代码,单元测试行覆盖率必须 ≥ 85%。
使用项目对应的覆盖率工具Go: `go test -coverprofile` + 分析变更行覆盖;
JS/TS: `--collectCoverageFrom` 指定变更文件Python: `coverage run` + `coverage report --include`
仅统计本次变更文件中变更行的覆盖情况,不要求全仓覆盖率达标。
若因代码结构原因(如纯配置、接口声明等不可测代码)无法达到 85%
必须在 Beacon 中说明原因和实际覆盖率。
3. 运行质量门禁(与项目 CI 对齐):
- 最小集合:受影响模块的单元测试 + 静态检查lint/格式化/类型检查)。
- 必要时:集成测试、端到端测试、兼容性验证、性能回归检查。
- 不确定时:跑全量测试。
- **覆盖率检查**:修复完成后运行覆盖率工具,确认变更代码覆盖率 ≥ 85%,将结果写入 Beacon。
4. 若引入新失败:优先修复新失败;不要用"忽略测试/删除用例"掩盖问题。
**安全预扫描(与修复并行)**:扫描修复方案**将要触及的代码区域的修复前基线版本**,检查已有安全隐患,评估修复方案是否可能引入新风险。注意:预扫描的对象是修复前的基线代码,而非修复进行中的中间状态。
### 4) 二次审查(角色隔离,独立审查)
由独立角色(而非修复者自身)执行代码审查,至少覆盖:
- **正确性**:空指针/越界/错误处理/返回值语义/事务与上下文。
- **并发**竞态、锁粒度、goroutine 泄漏、通道关闭时序。
- **兼容性**API/配置/数据迁移影响,旧数据是否可读。
- **可维护性**:命名、结构、可读性、分层依赖是否违规。
- **测试质量**:是否会偶发失败?是否覆盖根因?是否能防回归?变更代码覆盖率是否 ≥ 85%
**安全最终复核**:对修复 diff 审查鉴权/越权、注入SQL/命令/模板)、敏感信息泄露;若修复涉及依赖变更,额外检查依赖安全。主控在启动安全复核子智能体时,必须将第 3 步安全预扫描的 Beacon 结论作为上下文传入 prompt复核者对比两次扫描结果确认未引入新安全问题。
**迭代规则**:发现问题 → 修复者修正 → 再次审查。**最多迭代 3 轮**,超过则上报用户重新评估方案或引入人工审查。
### 5) 交付输出
> 进入交付前必须通过**三重门禁**:测试通过 + 审查通过 + 安全通过,缺一不可(无论严重度等级)。
#### bug 确认存在并已修复
```markdown
## Bug 修复报告
**Bug ID**[BUG-NNN]
**严重度**[P0🔴 / P1🟠 / P2🟡 / P3🟢]
**根因**[触发条件 + 代码/逻辑原因,引用 file:line]
**影响面**
- 受影响模块:[模块A → 模块B → ...]
- 受影响 API/用户:[说明]
**修复方案**
- 改动说明:[做了什么、为何是最小且正确的修复]
- 改动文件:[file1:line, file2:line, ...]
**测试**
- 新增/更新的测试:[测试名称 + 覆盖场景]
- 运行结果:[命令 + PASS/FAIL]
**安全扫描**
- 预扫描:[通过/发现 N 项,已处理]
- 最终复核:[通过/发现 N 项,已处理]
**残余风险**[仍可能存在的边界/后续建议,无则写"无"]
**回滚预案**[P0/P1 必填:如何快速回滚]
```
#### bug 无法证实或不存在
```markdown
## Bug 调查报告
**结论**:无法证实 / 确认不存在
**判定依据**
- 复现尝试:[方法 + 结果]
- 测试验证:[方法 + 结果]
- 静态分析:[分析要点]
**下一步**[需要用户补充哪些信息才能继续]
```
## 智能体协作执行
### 角色与 Task 工具映射
本技能通过 Claude Code 的 Task 工具实现多角色协作。主会话即主控,子智能体通过 Task 工具启动。**所有涉及文件写操作的子智能体必须在独立 git worktree 中工作。**
| 角色 | Task subagent_type | 并行阶段 | 需要 Worktree | 职责 |
|------|-------------------|----------|:------------:|------|
| **主控** | 主会话(不用 Task | 全程 | 否 | 协调流程、管理 worktree 生命周期、与用户沟通、汇总结论 |
| **验证** | `general-purpose` | 第 1 步 | **是** | 在隔离 worktree 中运行复现、编写失败测试、执行测试、收集运行时证据 |
| **分析** | `Explore` | 第 1 步(与验证并行) | 否(只读) | 静态代码分析、调用链追踪、影响面评估 |
| **修复** | `general-purpose` | 第 3 步 | **是** | 在隔离 worktree 中实施修复、补齐测试、运行质量门禁 |
| **安全** | `general-purpose` | 第 3-4 步 | 否(只读扫描) | 安全预扫描(扫基线代码)+ diff 复核 |
| **审查** | `general-purpose` | 第 4 步 | **是** | 在隔离 worktree 中独立审查 diff、运行测试验证与修复者隔离 |
### Git Worktree 强制隔离策略
#### 核心规则
1. **写操作子智能体必须使用 git worktree**:验证(写测试)、修复(改代码)、审查(验证运行)必须在独立 worktree 中操作。
2. **只读子智能体无需 worktree**分析Explore和安全扫描可直接读取主工作区或指定 worktree 的路径。
3. **主控独占 worktree 生命周期**:子智能体不得自行创建、删除或合并 worktree。
#### Bug-ID 校验(主控在第 0 步强制执行)
主控在使用 Bug-ID 构造路径前,必须校验其仅包含字母、数字、连字符和下划线(正则 `^[A-Za-z0-9_-]{1,64}$`)。不符合规则时拒绝并提示用户修改。此校验防止路径穿越(`../`)、命令注入(`;`、空格)和分支名冲突。
#### 命名规范
```bash
# Worktree 路径(使用 $TMPDIR 确保跨平台一致性macOS 上为用户私有目录)
# 注意macOS 的 $TMPDIR 通常以 / 结尾(如 /var/folders/xx/xxxx/T/
# 必须先去除尾部斜杠,避免路径中出现双斜杠(//)。
# 由于 Bash 不支持嵌套参数展开,需要分两步处理:
_tmpbase="${TMPDIR:-/tmp}" && _tmpbase="${_tmpbase%/}"
BUGFIX_BASE="${_tmpbase}/bugfix-$(id -u)" # 以 UID 隔离不同用户
# 完整路径:${BUGFIX_BASE}-{bug-id}-{role}
# 示例macOS/var/folders/xx/xxxx/T/bugfix-501-BUG-042-verifier
# 示例Linux/tmp/bugfix-1000-BUG-042-verifier
# 分支名
bugfix/{bug-id}/{role}
# 示例
bugfix/BUG-042/verifier
bugfix/BUG-042/fixer
```
> 使用 `$TMPDIR` 而非硬编码 `/tmp/`,原因:(1) macOS 的 `/tmp` 是 `/private/tmp` 的符号链接,会导致 `git worktree list` 输出路径与构造路径不一致;(2) macOS 的 `$TMPDIR`(形如 `/var/folders/xx/xxxx/T/`)是用户私有目录(权限 700其他用户无法读取避免源码泄露。
#### Worktree 生命周期(主控执行)
```text
阶段 ① 创建 worktree主控在启动子智能体前执行
# 创建前校验 Bug-ID 合法性(强制原则 #10
# 重要umask 和 git worktree add 必须在同一个 Bash 调用中执行,
# 因为 Bash 工具的 shell 状态(含 umask不跨调用持久化。
umask 077 && git worktree add -b bugfix/{bug-id}/{role} ${BUGFIX_BASE}-{bug-id}-{role} HEAD
# 创建后禁用 worktree 的远程 push 能力(纵深防御)
git -C ${BUGFIX_BASE}-{bug-id}-{role} remote set-url --push origin PUSH_DISABLED
# 若创建失败,按以下条件分支处理:
# 情况 A — 分支已存在但无对应 worktree上次清理不完整
# git branch -D bugfix/{bug-id}/{role} && 重试 git worktree add
# 情况 B — worktree 路径已存在(残留目录):
# git worktree remove --force ${BUGFIX_BASE}-{bug-id}-{role}
# git branch -D bugfix/{bug-id}/{role} # 分支可能也残留
# 重试 git worktree add
# 情况 C — 磁盘空间不足:
# 尝试回退到 ~/.cache/bugfix-worktrees/bugfix-$(id -u)-{bug-id}-{role} 目录
# (需先 umask 077 && mkdir -p ~/.cache/bugfix-worktrees确保权限 700
# 注意:回退路径保持 "bugfix-{uid}-{bug-id}-{role}" 命名格式,
# 确保与 grep -F -- "-{bug-id}-" 清理模式兼容
# 所有情况:最多重试 1 次,仍然失败 → 降级为单智能体模式,通知用户
阶段 ② 传递路径给子智能体
主控通过 git worktree list --porcelain 获取实际创建路径(--porcelain 输出
机器可解析的格式,避免路径中含空格时被截断;同时规避符号链接导致的路径不一致),
将实际路径写入 Task prompt 中。
阶段 ③ 子智能体在 worktree 中工作
- 子智能体完成后通过完成信标Completion Beacon主动通知主控
- 子智能体允许在 worktree 内执行 git add 和 git commit因为 worktree 分支
是临时隔离分支,不影响主分支;最终合并由主控在用户确认后执行)
- 子智能体禁止执行 git push / git merge / git checkout 到其他分支
阶段 ④ 主控独立验证 + 决定采纳
主控收到 Beacon 后,不可仅凭 Beacon 声明做决策,必须独立验证关键声明:
- Beacon 声明"测试通过" → 主控在 worktree 中重新运行测试确认
- Beacon 声明"变更文件" → 主控通过 git diff 独立确认实际变更范围
- Beacon 中的文件引用只允许 worktree 内的相对路径,拒绝绝对路径和含 ../ 的路径
采纳:在主工作区执行 git merge / cherry-pick / 手动应用 diff需用户确认
拒绝:直接清理 worktree
阶段 ⑤ 清理 worktree流程结束时无论成功/失败/中断)
git worktree remove --force ${BUGFIX_BASE}-{bug-id}-{role}
git branch -D bugfix/{bug-id}/{role} # 大写 -D 强制删除(临时分支可能未合并)
# 清理后校验(使用 --porcelain 确保路径解析可靠):
# 注意:使用 -F 固定字符串匹配 + "-{bug-id}-" 精确匹配(避免 BUG-1 误匹配 BUG-10
# 使用 if/then 避免 grep 无匹配时 exit code 1 被 Bash 工具误报为错误
if git worktree list --porcelain | grep -F -- "-{bug-id}-"; then
echo "WARNING: 残留 worktree 未清理"
fi
git branch --list "bugfix/{bug-id}/*" | xargs -r git branch -D
# 若清理失败(目录被锁定等):
# 1. 等待后重试 git worktree remove --force
# 2. 仍失败:手动 rm -rf 目录,然后 git worktree prune
# 3. 记录警告并告知用户手动检查
```
#### Worktree 安全约束
- **原子互斥**:不依赖 `grep` 预检查(存在 TOCTOU 竞态),直接执行 `git worktree add`——若目标已存在git 本身会原子性地报错拒绝。`grep` 仅用于友好提示,不作为安全保证。
- **分支保护**:子智能体禁止直接 push 到远程或合并到主分支,创建 worktree 后主控通过 `remote set-url --push` 禁用 push 能力。
- **强制清理**:流程结束(成功/失败/中断/异常)时,主控必须执行 `git worktree list --porcelain | grep -F -- "-{bug-id}-"` 检查并清理所有该 bug 的临时 worktree 和 `bugfix/{bug-id}/*` 分支。
- **磁盘保护**worktree 创建在 `$TMPDIR`(用户私有临时目录)下;若空间不足,回退到 `~/.cache/bugfix-worktrees/`(用户私有,权限 700不使用系统级共享临时目录`/tmp`)。回退路径同样采用 `bugfix-{uid}-{bug-id}-{role}` 命名格式,确保 `grep -F -- "-{bug-id}-"` 清理模式可匹配。
- **敏感数据保护**:子智能体禁止在测试数据中使用真实密钥/token/凭据,必须使用 mock 数据。
### 并行执行策略(含 Worktree 生命周期)
```text
第 0 步 信息收集 → 主控
├─ 校验 Bug-ID 合法性(正则 ^[A-Za-z0-9_-]{1,64}$
├─ 确定 BUGFIX_BASE 路径
└─ 检查并清理可能残留的旧 worktreegit worktree list --porcelain | grep -F -- "-{bug-id}-"
第 1 步 真实性确认 → 并行启动
├─ 主控: git worktree add ... verifier创建验证 worktree
├─ Task(general-purpose:验证, run_in_background=true, max_turns=30)
│ ├─ prompt 包含 worktree 实际路径(从 git worktree list --porcelain 获取)
│ ├─ 在 worktree 中编写失败测试、运行复现
│ └─ 完成后输出 AGENT_COMPLETION_BEACON主动通知
├─ Task(Explore:分析, run_in_background=true, max_turns=20)
│ ├─ 只读分析,无需 worktree
│ └─ 完成后输出 AGENT_COMPLETION_BEACON主动通知
├─ [仅 P0] 主控: 同时创建 fixer worktree + 启动修复子智能体(乐观并行)
│ ├─ 修复基于初步分析的"最可能根因"先行工作
│ ├─ 若验证返回 FAILED → TaskStop 终止修复子智能体 + 清理其 worktree
│ └─ 若验证成功 → 乐观修复已在进行中,直接跳到第 3 步等待其完成(跳过第 2 步方案设计)
└─ 主控: 用 TaskOutput(block=false) 轮询,任一完成即处理
若验证 agent 返回 FAILED → 可通过 TaskStop 终止分析 agent或等待其完成后忽略结果
第 2 步 方案设计 → 主控
├─ 汇总验证+分析的 Beacon 结论
├─ 若验证 agent 写了失败测试 → 从 worktree 获取 commit hash
git -C {verifier-worktree} log -1 --format="%H"
│ 然后在主分支执行 git cherry-pick {hash}(需用户确认)
├─ 清理验证 worktree
└─ 创建修复 worktree 时以最新 HEAD含已 cherry-pick 的测试)为基点
第 3 步 实施修复 → 分步启动
├─ 主控: git worktree add ... fixer基于包含失败测试的最新 HEAD
├─ Task(general-purpose:修复, run_in_background=true, max_turns=40)
│ ├─ prompt 包含 worktree 路径 + 修复方案
│ ├─ 在 fixer worktree 中实施修复、补齐测试、运行门禁
│ └─ 完成后输出 AGENT_COMPLETION_BEACON主动通知
├─ Task(general-purpose:安全预扫描, run_in_background=true, max_turns=15)
│ ├─ 扫描修复方案将触及的代码区域的修复前基线版本(读取主工作区)
│ ├─ 注意:扫描对象是基线代码,不是 fixer worktree 中的中间状态
│ └─ 完成后输出 AGENT_COMPLETION_BEACON主动通知
├─ 主控: 修复 Beacon 收到后,委托 Task(Bash, max_turns=3) 在 worktree 中重跑测试(仅返回 pass/fail
└─ 主控: 安全预扫描 + 修复验证都通过后,合并修复到主分支(需用户确认)
第 4 步 二次审查 → 并行启动
├─ 主控: git worktree add ... reviewer基于合并修复后的最新 HEAD
├─ Task(general-purpose:审查, run_in_background=true, max_turns=25)
│ ├─ 在 reviewer worktree 中审查 diff、运行测试
│ └─ 完成后输出 AGENT_COMPLETION_BEACON主动通知
├─ Task(general-purpose:安全复核, run_in_background=true, max_turns=15)
│ ├─ prompt 中包含第 3 步安全预扫描的 Beacon 结论作为对比基线
│ ├─ 对比修复 diff执行安全检查
│ └─ 完成后输出 AGENT_COMPLETION_BEACON主动通知
└─ 主控: 收到两个 Beacon 后汇总审查结论
第 5 步 交付输出 → 主控
├─ 汇总所有 Beacon 结论,生成修复报告
└─ 强制清理(按阶段 ⑤ 清理流程执行):
git worktree list --porcelain | grep -F -- "-{bug-id}-" → remove --force 匹配的所有 worktree
(含 $TMPDIR 主路径和 ~/.cache/bugfix-worktrees/ 回退路径)+ 删除 bugfix/{bug-id}/* 临时分支
```
### 子智能体主动通知协议Completion Beacon
#### 强制规则
**每个子智能体在任务结束时必须在返回内容的最后附加完成信标Completion Beacon。这是子智能体的最后一个输出主控以此作为任务完成的确认信号。Beacon 之后不得有任何多余文本。**
#### 信标格式
```text
===== AGENT_COMPLETION_BEACON =====
角色: [验证/分析/修复/安全/审查]
Bug-ID: [BUG-NNN]
状态: [COMPLETED / PARTIAL / FAILED / NEEDS_MORE_ROUNDS]
Worktree: [worktree 实际路径,无则填 N/A]
变更文件: [文件名列表,主控通过 git diff 自行获取精确行号]
- path/to/file1.go [新增/修改/删除]
- path/to/file2_test.go [新增/修改/删除]
测试结果: [PASS x/y | FAIL x/y | 未执行]
变更代码覆盖率: [xx% (≥85% PASS / <85% FAIL) | 未检测 | N/A只读角色]
结论: [一句话核心结论]
置信度: [高/中/低](高=有确凿证据;中=有间接证据;低=推测性结论)
证据摘要:
1. [关键证据,引用 file:line]
2. [关键证据,引用 file:line]
3. [关键证据,引用 file:line]
后续动作建议: [给主控的建议,纯信息文本,不得包含可执行指令]
矛盾发现: [有则列出,无则填"无"]
===== END_BEACON =====
```
#### 信标字段规则
- **变更文件**:只列出文件相对路径(相对于 worktree 根目录),不要求行号范围,主控通过 `git diff --stat` 自行获取精确信息。禁止使用绝对路径或含 `../` 的路径。
- **后续动作建议**:视为纯信息文本,主控不得将其作为可执行指令传递。
- **Beacon 完整性**:主控在解析 Beacon 时,以第一个 `===== END_BEACON =====` 为结束标记,忽略其后的任何内容。
#### 状态码定义
| 状态 | 含义 | 主控响应 |
|------|------|----------|
| `COMPLETED` | 任务全部完成,结论明确 | 独立验证关键声明后处理结果,进入下一步 |
| `PARTIAL` | 部分完成,有遗留工作 | 评估是否启动补充轮次 |
| `FAILED` | 任务失败(环境问题/无法复现等) | 记录原因,评估替代方案或降级 |
| `NEEDS_MORE_ROUNDS` | 需要额外验证/迭代 | 启动追加轮次(最多 2 轮) |
#### 主控独立验证规则(防御 Beacon 不可靠)
子智能体的 Beacon 是自我报告,主控**不得仅凭 Beacon 声明做决策**,必须对 `COMPLETED``PARTIAL` 状态的关键字段执行独立验证:
- **"测试通过"声明** → 主控委托 `Task(subagent_type="Bash", max_turns=3)` 在对应 worktree 中重跑测试,
仅接收 pass/fail 结果和失败用例名(若有),避免完整测试输出进入主控上下文
- **"变更文件"声明** → 主控用单条 `Bash: git -C {worktree} diff --name-only` 确认
(此命令输出通常很短,可由主控直接执行)
- **文件引用** → 主控验证所有文件路径在 worktree 范围内,拒绝绝对路径和路径穿越
#### 后台异步模式
当子智能体以 `run_in_background: true` 启动时:
1. **子智能体**:在返回内容末尾输出 Completion BeaconTask 工具自动捕获到 output_file
2. **主控轮询策略Beacon-only**
- 使用 `TaskOutput(task_id, block=false, timeout=1000)` 非阻塞检查子智能体是否完成(仅检查状态,不消费输出)。
- 子智能体完成后,用 `Bash: tail -50 {output_file}` 仅读取末尾 Beacon 部分,**禁止读取全量输出**。
- 仅当 Beacon 包含 `FAILED` / `NEEDS_MORE_ROUNDS` / 非空「矛盾发现」时,才用 `Read(offset=..., limit=100)` 定向读取失败上下文。
- 若子智能体超时未响应(参考"超时与升级机制"中的子智能体超时定义),主控通过 `Bash: tail -20 {output_file}` 检查最新输出,评估是否终止。
3. **早期终止**:若验证 agent 返回 `FAILED`(无法复现),主控可通过 `TaskStop` 终止其他正在运行的子智能体,并跳转到"无法证实"结论。
#### 通信规则
- 子智能体间不直接通信,全部经主控中转。
- 发现与预期矛盾的证据时,必须在 Beacon 的"矛盾发现"字段标注。
- 主控收到包含矛盾发现的 Beacon 后,必须暂停流程:终止所有已启动但未完成的下游子智能体,清理其 worktree然后启动额外验证。
### 子智能体 Prompt 模板
主控启动子智能体时,必须在 Task prompt 中包含以下标准化信息:
```text
你是 Bug 修复流程中的【{角色名}】智能体。
## 任务上下文
- Bug-ID: {bug-id}
- 严重度: {P0-P3}
- Bug 描述: {现象概述}
- 你的工作目录: {worktree 实际路径,从 git worktree list --porcelain 获取}
- 允许修改的文件范围: {主控根据影响面分析预先确定的文件/目录列表,如 "backend/internal/service/*.go, backend/internal/handler/chat.go";若为"不限"则可修改任意文件}
## 项目约定(主控根据实际项目填写,以下为示例)
- 后端语言Go | 前端框架Vue 3 + TypeScript
- 构建命令make build | 测试命令make test-backend / make test-frontend
- 代码风格Go 用 gofmt前端用 ESLint
- 沟通与代码注释使用中文
> 注:以上为本项目默认值。主控在启动子智能体时应根据实际项目的技术栈、
> 构建系统和编码规范调整此部分内容。
## 工作指令
{角色特定的工作指令}
## 强制约束
- 使用 Read/Write/Edit 工具时,所有文件路径必须以 {worktree 路径} 为前缀
- 使用 Bash 工具时,命令中使用绝对路径,或在命令开头加 cd {worktree 路径} &&
- 禁止读写工作目录之外的文件(除非是只读分析角色读取主工作区)
- 禁止执行 git push / git merge / git checkout 到其他分支
- 允许在 worktree 内执行 git add 和 git commit临时分支不影响主分支
- 修改文件必须在"允许修改的文件范围"内;若需修改范围外的文件,在 Beacon 的"后续动作建议"中说明原因并请求主控确认,不要直接修改
- 测试中禁止使用真实密钥/token/凭据,必须使用 mock 数据
- 测试中禁止使用固定端口号,使用 0 端口让 OS 分配随机端口
- 如果尝试 5 轮后仍无法完成任务,立即输出 FAILED 状态的 Beacon 并停止
- **变更代码覆盖率 ≥ 85%**:修复/验证角色完成后,必须运行覆盖率工具检测本次变更代码的行覆盖率;
低于 85% 时须补充测试直到达标,或在 Beacon 中说明无法达标的原因(如纯接口声明/配置等不可测代码)
- 返回结果必须精简Beacon 的「证据摘要」每条不超过 80 字符
- 禁止在 Beacon 中复制大段源码,只引用 file:line
- Beacon 之前的工作过程输出(调试日志、中间推理)不需要结构化,主控不会读取这些内容
## 完成后必须做
任务完成后你必须在返回内容的最后输出完成信标Completion Beacon格式如下
===== AGENT_COMPLETION_BEACON =====
角色: {角色名}
Bug-ID: {bug-id}
状态: [COMPLETED / PARTIAL / FAILED / NEEDS_MORE_ROUNDS]
Worktree: {worktree 路径}
变更文件:
- path/to/file.go [新增/修改/删除]
测试结果: [PASS x/y | FAIL x/y | 未执行]
变更代码覆盖率: [xx% | 未检测 | N/A]
结论: [一句话核心结论]
置信度: [高/中/低]
证据摘要:
1. [关键证据,引用 file:line]
后续动作建议: [给主控的建议]
矛盾发现: [有则列出,无则填"无"]
===== END_BEACON =====
Beacon 之后不得输出任何内容。
```
### 单智能体降级模式
当环境不支持并行 Task或任务简单无需多角色主会话依次扮演所有角色
1. **验证 + 分析**:先运行复现,再做静态分析(顺序执行)。降级模式下仍建议使用新分支隔离(`git checkout -b bugfix/{bug-id}/solo`),但不强制使用 worktree。
2. **安全预扫描**:修复前切换到"安全视角",扫描修复将触及的代码区域,记录预扫描结论。
3. **修复**:直接在主会话的隔离分支中实施。
4. **审查**:修复完成后,主会话切换到"审查视角",用 `git diff` 逐项审查清单。此时必须假设自己不是修复者,严格按清单逐条检查。同步执行安全 diff 复核,与预扫描结论对比。
5. **安全**:在审查阶段同步检查安全项。
> 降级模式下审查质量不可降低:审查清单的每一项都必须逐条确认。
> P0/P1 级别问题不建议使用降级模式(自审偏见风险),建议至少启动一个独立审查子智能体。
降级模式下每个阶段结束仍需输出简化版阶段检查点:
```text
----- 阶段检查点 -----
阶段: [验证/分析/预扫描/修复/审查]
状态: [COMPLETED / PARTIAL / FAILED / NEEDS_MORE_ROUNDS]
结论: [一句话核心结论]
置信度: [高/中/低]
证据摘要: [关键证据 1-3 条]
----- 检查点结束 -----
```
## 安全规则
### Git 操作
| 类别 | 规则 |
|------|------|
| **只读诊断** | 默认允许:查看状态/差异、搜索、查看历史与责任行 |
| **有副作用** | 必须先获得用户确认:提交、暂存、拉取/推送、切换分支、合并、变基、打标签。执行前输出变更摘要 + 影响范围 + 测试结果。**例外**`bugfix/*` 临时分支和 worktree 的创建/删除在用户确认启动修复流程时一次性授权 |
| **破坏性** | 默认禁止:强制回退/清理/推送。用户二次确认且说明风险后方可执行 |
### 多智能体并行安全
当多个 agent 同时修复不同 bug 时:
1. **工作区隔离(强制)**:每个写操作 agent **必须**使用 git worktree 隔离工作区,禁止多个 agent 在同一工作目录并行写操作。违反此规则的子智能体结果将被主控拒绝。
2. **变更范围预声明**:主控在启动修复子智能体时,在 prompt 中预先声明该 agent 允许修改的文件范围。子智能体若需修改范围外的文件,必须在 Beacon 中标注并请求主控确认。
3. **禁止破坏性全局变更**:禁止全仓格式化、大规模重命名、批量依赖升级(除非已获用户确认)。
4. **临时产物隔离**:复现脚本、测试数据等放入 worktree 内的 `.bugfix-tmp/` 目录。清理 worktree 时使用 `--force` 参数确保连同临时产物一起删除。子智能体禁止在 worktree 外创建临时文件。
5. **并发测试安全**:子智能体编写测试时必须使用 `0` 端口让 OS 分配随机端口,使用 `os.MkdirTemp` 创建独立临时目录,禁止使用固定端口或固定临时文件名。
6. **Worktree 清理强制**:流程结束(无论成功/失败/中断)必须使用 `git worktree remove --force` 清理所有临时 worktree然后用 `git branch -D` 删除对应的临时分支。清理后执行校验确认无残留。
7. **合并冲突处理**:主控合并 worktree 变更时若遇冲突,必须暂停并上报用户决策,不得自动解决冲突。
8. **残留清理**:每次 bug-fix-expert 流程启动时(第 0 步),主控检查是否有超过 24 小时的残留 bugfix worktree 并清理。
### 安全护栏
1. **修复前影响面分析**:分析智能体生成调用链,防止改动波及意外模块。
2. **安全前后双检**:第 3 步预扫描(扫基线代码)+ 第 4 步 diff 复核(扫修复后 diff形成闭环。
3. **角色隔离**:审查者与修复者必须是不同的智能体/角色。
4. **矛盾即暂停**:任意两个角色结论矛盾时,主控暂停流程——终止所有进行中的下游子智能体、清理其 worktree——然后启动额外验证。
5. **三重门禁不可跳过**:测试通过 + 审查通过 + 安全通过,缺一不可(无论严重度等级)。
6. **Beacon 独立验证**:主控不得仅凭子智能体 Beacon 的自我声明做决策,必须独立验证测试结果和变更范围(详见"主控独立验证规则")。
7. **Prompt 约束为软约束**:子智能体的约束(不 push、不越界操作等通过 Prompt 声明,属于软约束层。主控通过独立验证(检查 `git log``git remote -v``git diff`)提供纵深防御,确认子智能体未执行禁止操作。
## 超时与升级机制
| 阶段 | 超时信号 | 处理方式 |
|------|----------|----------|
| 子智能体响应 | 子智能体启动后连续 3 次 `TaskOutput(block=false)` 检查(每次间隔处理其他工作后再查)仍无完成输出 | 主控通过 `Read` 检查其 output_file 最新内容;若输出停滞(最后一行内容与上次检查相同),通过 `TaskStop` 终止并降级为主控直接执行该角色任务 |
| 真实性确认 | 矛盾验证追加超过 2 轮仍无共识 | 上报用户:当前证据 + 请求补充信息或决定是否继续 |
| 方案设计 | 所有方案风险都较高,无明显最优解 | 呈现方案对比,由用户决策 |
| 实施修复 | 修复引入的新失败无法在合理迭代内解决 | 建议回退修复或切换方案 |
| 二次审查 | 审查-修复迭代超过 3 轮仍有问题 | 建议重新评估方案或引入人工审查 |
> 注:由于 Claude Code 的 Task 工具不提供基于挂钟时间的超时机制,子智能体超时通过"轮询无进展"来判定,而非固定时间阈值。主控在等待期间应处理其他可并行的工作(如处理另一个已完成的子智能体结果),然后再回来检查。
## 上下文管理
长时间 bug 调查可能消耗大量上下文窗口,遵循以下原则:
- **Beacon-only 消费(最重要)**:主控通过 `tail -50` 仅读取子 agent 输出末尾的 Beacon
禁止通过 `TaskOutput(block=true)``Read` 全量读取子 agent 输出。详见「上下文预算控制」。
- **独立验证委托**:测试重跑等验证操作委托给 Bash 子 agent主控只接收 pass/fail 结论。
- **大文件用子智能体**:超过 500 行的代码分析任务,优先用 Task(Explore) 处理,避免主会话上下文膨胀。
- **阶段性摘要卡**:每完成一个步骤,输出不超过 15 行的摘要卡,后续步骤仅引用摘要卡。
- **只保留关键证据**:子智能体返回结果时只包含关键的 file:line 引用,不复制大段源码。
- **复杂度评估**:主控在第 0 步评估 bug 复杂度——对于 P2/P3 级别的简单 bug影响单文件、根因明确默认使用降级模式以节省上下文开销仅当 bug 复杂P0/P1 或跨多模块)时启用并行模式。
- **max_turns 强制**:所有子 agent 必须设置 max_turns详见「上下文预算控制」表格
### 上下文预算控制(强制执行)
#### A. Beacon-only 消费模式
主控读取子 agent 结果时,**禁止读取全量输出**,必须采用 Beacon-only 模式:
1. 子 agent 以 `run_in_background=true` 启动,输出写入 output_file
2. 子 agent 完成后,主控用 Bash `tail -50 {output_file}` 只读取末尾的 Beacon 部分
3. 仅当 Beacon 状态为 `FAILED` / `NEEDS_MORE_ROUNDS` 或包含"矛盾发现"时,
才用 `Read(offset=...)` 定向读取相关段落(不超过 100 行)
4. **禁止使用 `TaskOutput(block=true)` 获取完整输出** — 这会将全量内容灌入上下文
#### B. 独立验证委托
主控的"独立验证"(重跑测试、检查 diff不再由主控亲自执行而是委托给轻量级验证子 agent
| 验证项 | 委托方式 | 返回格式 |
|--------|---------|---------|
| 重跑测试 | `Task(subagent_type="Bash", max_turns=3)` | `PASS x/y``FAIL x/y + 失败用例名` |
| 检查变更范围 | `Task(subagent_type="Bash", max_turns=2)` | `git diff --name-only` 的文件列表 |
| 路径合规检查 | 主控直接用单条 Bash 命令 | 仅 pass/fail |
这样避免测试输出(可能数百行)和 diff 内容进入主控上下文。
#### C. 子 agent max_turns 约束
所有子 agent 启动时必须设置 `max_turns` 参数,防止单个 agent 输出爆炸:
| 角色 | max_turns 上限 | 说明 |
|------|---------------|------|
| 验证 | 30 | 需要写测试+运行,允许较多轮次 |
| 分析Explore | 20 | 只读探索,通常足够 |
| 修复 | 40 | 改代码+测试+门禁,需要较多轮次 |
| 安全扫描 | 15 | 只读扫描 |
| 审查 | 25 | 审查+可能的验证运行 |
| 独立验证Bash | 3 | 仅跑命令取结果 |
#### D. 阶段性上下文压缩
每完成一个工作流步骤,主控必须将该阶段结论压缩为「阶段摘要卡」(不超过 15 行),
后续步骤仅引用摘要卡,不回溯原始 Beacon
```text
阶段摘要卡格式:
----- 阶段摘要 #{步骤号} {步骤名} -----
结论: {一句话}
关键证据: {最多 3 条,每条一行,含 file:line}
影响文件: {文件列表}
前置条件满足: [是/否]
遗留问题: {有则列出,无则"无"}
-----
```
#### E. 子 agent Prompt 精简指令
在子 agent Prompt 模板的「强制约束」部分追加以下要求:
- 返回结果必须精简Beacon 的「证据摘要」每条不超过 80 字符
- 禁止在 Beacon 中复制大段源码,只引用 file:line
- Beacon 之前的工作过程输出(调试日志、中间推理)不需要结构化,
因为主控不会读取这些内容

View File

@@ -1,251 +0,0 @@
---
name: code-review-expert
description: >
通用代码审核专家 — 基于 git worktree 隔离的多 Agent 并行代码审核系统,集成 Context7 MCP 三重验证对抗代码幻觉。
语言无关适用于任意技术栈Go, Python, JS/TS, Rust, Java, C# 等)。
Use when: (1) 用户要求代码审核、code review、安全审计、性能审查,
(2) 用户说"审核代码"、"review"、"检查代码质量"、"安全检查",
(3) 用户要求对 PR、分支、目录或文件做全面质量检查,
(4) 用户提到"代码审核专家"或"/code-review-expert"。
五大审核维度:安全合规、架构设计、性能资源、可靠性数据完整性、代码质量可观测性。
自动创建 5 个 git worktree 隔离环境,派发 5 个专项子 Agent 并行审核,
通过 Context7 MCP 拉取最新官方文档验证 API 用法,消除 LLM 幻觉,
汇总后生成结构化 Markdown 审核报告,最终自动清理所有 worktree。
---
# Universal Code Review Expert
基于 git worktree 隔离 + 5 子 Agent 并行 + Context7 反幻觉验证的通用代码审核系统。
## Guardrails
- **只读审核**,绝不修改源代码,写入仅限报告文件
- **语言无关**,通过代码模式识别而非编译发现问题
- 每个子 Agent 在独立 **git worktree** 中工作
- 审核结束后**无条件清理**所有 worktree即使中途出错
- 问题必须给出**具体 `file:line`**,不接受泛泛而谈
- 涉及第三方库 API 的发现必须通过 **Context7 MCP** 验证,严禁凭记忆断言 API 状态
- 文件 > 500 个时自动启用**采样策略**
- **上下文保护**:严格遵循下方 Context Budget Control 规则,防止 200K 上下文耗尽
## Context Budget Control (上下文预算管理)
> **核心问题**5 个子 Agent 并行审核时,每个 Agent 读取大量文件会快速耗尽 200K 上下文,导致审核卡住或失败。
### 预算分配策略
主 Agent 在 Phase 0 必须计算上下文预算,并分配给子 Agent
```
总可用上下文 ≈ 180K tokens预留 20K 给主 Agent 汇总)
每个子 Agent 预算 = 180K / 5 = 36K tokens
每个子 Agent 可读取的文件数 ≈ 36K / 平均文件大小
```
### 七项强制规则
1. **文件分片不重叠**:每个文件只分配给**一个主要维度**(按文件类型/路径自动判断不要多维度重复审核同一文件。高风险文件auth、crypto、payment例外可分配给最多 2 个维度。
2. **单文件读取上限**:子 Agent 读取单个文件时,使用 `Read` 工具的 `limit` 参数,每次最多读取 **300 行**。超过 300 行的文件分段读取,仅审核关键段落。
3. **子 Agent prompt 精简**:传递给子 Agent 的 prompt 只包含:
- 该维度的**精简检查清单**(不要传全部 170 项,只传该维度的 ~30 项)
- 文件列表(路径即可,不包含内容)
- C7 缓存中**该维度相关的**部分(不传全量缓存)
- 输出格式模板(一次,不重复)
4. **结果输出精简**:子 Agent 找到问题后只输出 JSON Lines**不要**输出解释性文字、思考过程或总结。完成后只输出 status 行。
5. **子 Agent max_turns 限制**:每个子 Agent 使用 `max_turns` 参数限制最大轮次:
- 文件数 ≤ 10: `max_turns=15`
- 文件数 11-30: `max_turns=25`
- 文件数 31-60: `max_turns=40`
- 文件数 > 60: `max_turns=50`
6. **大仓库自动降级**
- 文件数 > 200减为 **3 个子 Agent**(安全+可靠性、架构+性能、质量+可观测性)
- 文件数 > 500减为 **2 个子 Agent**(安全重点、质量重点)+ 采样 30%
- 文件数 > 1000单 Agent 串行 + 采样 15% + 仅审核变更文件
7. **子 Agent 使用 `run_in_background`**:所有子 Agent Task 调用设置 `run_in_background=true`,主 Agent 通过 Read 工具轮询 output_file 获取结果,避免子 Agent 的完整输出回填到主 Agent 上下文。
### 文件分配算法
按文件路径/后缀自动分配到主要维度:
| 模式 | 主维度 | 辅助维度(仅高风险文件) |
|------|--------|----------------------|
| `*auth*`, `*login*`, `*jwt*`, `*oauth*`, `*crypto*`, `*secret*` | Security | Reliability |
| `*route*`, `*controller*`, `*handler*`, `*middleware*`, `*service*` | Architecture | - |
| `*cache*`, `*pool*`, `*buffer*`, `*queue*`, `*worker*` | Performance | - |
| `*db*`, `*model*`, `*migration*`, `*transaction*` | Reliability | Performance |
| `*test*`, `*spec*`, `*log*`, `*metric*`, `*config*`, `*deploy*` | Quality | - |
| 其余文件 | 按目录轮询分配到 5 个维度 | - |
### 主 Agent 汇总时的上下文控制
Phase 3 汇总时,主 Agent **不要**重新读取子 Agent 审核过的文件。仅基于子 Agent 输出的 JSON Lines 进行:
- 去重合并
- 严重等级排序
- Context7 交叉验证(仅对 critical/high 且未验证的少数发现)
- 填充报告模板
---
## Workflow
### Phase 0 — Scope Determination
1. **确定审核范围**(按优先级):
- 用户指定的文件/目录
- 未提交变更:`git diff --name-only` + `git diff --cached --name-only`
- 未推送提交:`git log origin/{main}..HEAD --name-only --pretty=format:""`
- 全仓库(启用采样:变更文件 → 高风险目录 → 入口文件 → 其余 30% 采样)
2. **收集项目元信息**:语言构成、目录结构、文件数量
3. **生成会话 ID**
```bash
SESSION_ID="cr-$(date +%Y%m%d-%H%M%S)-$(openssl rand -hex 4)"
WORKTREE_BASE="/tmp/${SESSION_ID}"
```
4. 将文件分配给 5 个审核维度(每个文件可被多维度审核)
### Phase 0.5 — Context7 Documentation Warm-up (反幻觉第一重)
> 详细流程见 [references/context7-integration.md](references/context7-integration.md)
1. 扫描依赖清单go.mod, package.json, requirements.txt, Cargo.toml, pom.xml 等)
2. 提取核心直接依赖,按优先级筛选最多 **10 个关键库**
- P0 框架核心web 框架、ORM→ P1 安全相关 → P2 高频 import → P3 其余
3. 对每个库调用 `resolve-library-id` → `get-library-docs`(每库 ≤ 5000 tokens
4. 构建 **C7 知识缓存 JSON**,传递给所有子 Agent
5. **降级**Context7 不可用时跳过,报告标注 "未经官方文档验证"
### Phase 1 — Worktree Creation
```bash
CURRENT_COMMIT=$(git rev-parse HEAD)
for dim in security architecture performance reliability quality; do
git worktree add "${WORKTREE_BASE}/${dim}" "${CURRENT_COMMIT}" --detach
done
```
### Phase 2 — Parallel Sub-Agent Dispatch (反幻觉第二重)
**在一条消息中发出所有 Task 调用**`subagent_type: general-purpose`**必须设置**
- `run_in_background: true` — 子 Agent 后台运行,结果写入 output_file避免回填主 Agent 上下文
- `max_turns` — 按文件数量设置(见 Context Budget Control
- `model: "sonnet"` — 子 Agent 使用 sonnet 模型降低延迟和 token 消耗
Agent 数量根据文件规模自动调整(见 Context Budget Control 大仓库降级规则)。
每个 Agent 收到:
| 参数 | 内容 |
|------|------|
| worktree 路径 | `${WORKTREE_BASE}/{dimension}` |
| 文件列表 | 该维度**独占分配**的文件(不重叠) |
| 检查清单 | 该维度对应的精简清单(~30 项,非全量 170 项) |
| C7 缓存 | 仅该维度相关的库文档摘要 |
| 输出格式 | JSON Lines见下方 |
| 文件读取限制 | 单文件最多 300 行,使用 Read 的 limit 参数 |
每个发现输出一行 JSON
```json
{
"dimension": "security",
"severity": "critical|high|medium|low|info",
"file": "path/to/file.go",
"line": 42,
"rule": "SEC-001",
"title": "SQL Injection",
"description": "详细描述",
"suggestion": "修复建议(含代码片段)",
"confidence": "high|medium|low",
"c7_verified": true,
"verification_method": "c7_cache|c7_realtime|model_knowledge",
"references": ["CWE-89"]
}
```
**关键规则**
- 涉及第三方库 API 的发现,未经 Context7 验证时 `confidence` 不得为 `high`
- `verification_method == "model_knowledge"` 的发现自动降一级置信度
- 每个子 Agent 最多消耗分配的 Context7 查询预算
- 完成后输出:`{"status":"complete","dimension":"...","files_reviewed":N,"issues_found":N,"c7_queries_used":N}`
### Phase 3 — Aggregation + Cross-Validation (反幻觉第三重)
1. 等待所有子 Agent 完成
2. 合并 findings按 severity 排序
3. **Context7 交叉验证**
- 筛选 `c7_verified==false` 且 severity 为 critical/high 的 API 相关发现
- 主 Agent 独立调用 Context7 验证
- 验证通过 → 保留 | 验证失败 → 降级或删除(标记 `c7_invalidated`
4. 去重(同一 file:line 合并)
5. 生成报告到 `code-review-report.md`(模板见 [references/report-template.md](references/report-template.md)
### Phase 4 — Cleanup (必须执行)
```bash
for dim in security architecture performance reliability quality; do
git worktree remove "${WORKTREE_BASE}/${dim}" --force 2>/dev/null
done
git worktree prune
rm -rf "${WORKTREE_BASE}"
```
> 即使前面步骤失败也**必须执行**此清理。
## Severity Classification
| 等级 | 标签 | 定义 |
|------|------|------|
| P0 | `critical` | 已存在的安全漏洞或必然导致数据丢失/崩溃 |
| P1 | `high` | 高概率触发的严重问题或重大性能缺陷 |
| P2 | `medium` | 可能触发的问题或明显设计缺陷 |
| P3 | `low` | 代码质量问题,不直接影响运行 |
| P4 | `info` | 优化建议或最佳实践提醒 |
置信度:`high` / `medium` / `low`,低置信度须说明原因。
## Five Review Dimensions
每个维度对应一个子 Agent详细检查清单见 [references/checklists.md](references/checklists.md)
1. **Security & Compliance** — 注入漏洞(10 类)、认证授权、密钥泄露、密码学、依赖安全、隐私保护
2. **Architecture & Design** — SOLID 原则、架构模式、API 设计、错误策略、模块边界
3. **Performance & Resource** — 算法复杂度、数据库性能、内存管理、并发性能、I/O、缓存、资源泄漏
4. **Reliability & Data Integrity** — 错误处理、空值安全、并发安全、事务一致性、超时重试、边界条件、优雅关闭
5. **Code Quality & Observability** — 复杂度、重复、命名、死代码、测试质量、日志、可观测性、构建部署
## Context7 Anti-Hallucination Overview
> 详细集成文档见 [references/context7-integration.md](references/context7-integration.md)
三重验证防御 5 类 LLM 幻觉:
| 幻觉类型 | 说明 | 防御层 |
|----------|------|--------|
| API 幻觉 | 错误断言函数签名 | 第一重 + 第二重 |
| 废弃幻觉 | 错误标记仍在用的 API 为 deprecated | 第二重 + 第三重 |
| 不存在幻觉 | 声称新增 API 不存在 | 第一重 + 第二重 |
| 参数幻觉 | 错误描述参数类型/默认值 | 第二重实时查 |
| 版本混淆 | 混淆不同版本 API 行为 | 第一重版本锚定 |
验证覆盖度评级:`FULL` (100% API 发现已验证) > `PARTIAL` (50%+) > `LIMITED` (<50%) > `NONE`
## Error Handling
- 某个子 Agent 失败:继续汇总其他结果,报告标注不完整维度
- git worktree 创建失败:`git worktree prune` 重试 → 仍失败则回退串行模式
- Context7 不可用:跳过验证阶段,报告标注 "未经官方文档验证"
- 所有情况下 **Phase 4 清理必须执行**
## Resources
- **[references/checklists.md](references/checklists.md)** — 5 个子 Agent 的完整检查清单 (~170 项)
- **[references/context7-integration.md](references/context7-integration.md)** — Context7 MCP 集成详细流程、缓存格式、查询规范
- **[references/report-template.md](references/report-template.md)** — 审核报告 Markdown 模板

View File

@@ -1,252 +0,0 @@
# Sub-Agent Review Checklists
5 个子 Agent 的完整检查清单。每个子 Agent 在独立 git worktree 中工作。
---
## Agent 1: Security & Compliance (安全与合规)
### 1.1 Injection (注入漏洞)
- SQL 注入:字符串拼接 SQL、未使用参数化查询
- 命令注入exec/system/os.Command/subprocess 拼接用户输入
- XSS未转义的用户输入写入 HTML/DOM
- XXEXML 解析器未禁用外部实体
- SSRF用户可控 URL 用于服务端请求,缺少白名单
- LDAP 注入LDAP 查询拼接用户输入
- SSTI用户输入直接传入模板引擎
- 路径穿越:文件操作中未校验 `../`
- Header 注入HTTP 响应头拼接用户输入 (CRLF)
- Log 注入:日志中拼接未净化的用户输入
### 1.2 Authentication & Authorization
- 缺少认证:敏感 API 端点未要求身份验证
- 越权访问:缺少资源归属校验(水平越权)
- 权限提升:普通用户可执行管理员操作(垂直越权)
- 会话管理Session fixation、不安全 cookie、缺少超时
- JWT弱签名算法 (none/HS256)、未验证签名、token 泄露
- OAuth开放重定向、state 缺失、token 存储不安全
- 默认凭证:代码中预设的用户名密码
### 1.3 Secrets & Sensitive Data
- 硬编码密钥API key、密码、token、连接字符串写在源码
- 密钥泄露:.env 提交版本控制、明文密码
- 日志泄露:敏感数据出现在日志/错误信息中
- API 响应泄露:接口返回超出必要范围的用户数据
- 错误信息泄露:堆栈、内部路径、数据库结构暴露
### 1.4 Cryptography
- 弱哈希MD5/SHA1 用于密码或安全场景
- 不安全随机数math/rand 替代 CSPRNG
- ECB 模式AES-ECB 等不安全加密模式
- 硬编码 IV/Salt
- 缺少完整性校验:加密但未做 HMAC/AEAD
### 1.5 Dependency Security
- 已知漏洞:依赖清单中的 CVE
- 过时依赖:已停止维护的库
- 依赖来源非官方源、typosquatting
- 许可证合规GPL 等传染性许可证混入商业项目
### 1.6 Privacy & Data Protection
- PII 未加密存储或传输
- 缺少数据过期/删除机制
- 跨境传输未考虑地域合规
---
## Agent 2: Architecture & Design (架构与设计)
### 2.1 Design Principles
- SRP类/函数/模块承担过多职责
- OCP修改核心逻辑而非通过扩展点添加
- LSP子类/实现违反父类/接口契约
- ISP接口过大强迫实现不需要的方法
- DIP高层模块直接依赖低层实现
### 2.2 Architectural Patterns
- 分层违规:跨层直接调用
- 循环依赖:包/模块间循环引用
- 上帝对象:单类承载过多数据和行为
- 过度抽象:不必要的工厂/策略/装饰器
- 模式误用:强行套用不适合的设计模式
- 配置管理:硬编码环境相关值
### 2.3 API Design
- 一致性:同系统 API 风格不一致
- 向后兼容:破坏性变更未版本控制
- 幂等性:写操作缺少幂等保证
- 批量操作:逐条处理导致 N+1 网络请求
- 分页:大列表缺少分页/游标
- 错误响应:格式不统一、缺少错误码
### 2.4 Error Handling Strategy
- 错误传播:底层错误未包装丢失上下文
- 错误类型:字符串替代结构化错误
- 恢复策略:缺少重试/降级/断路器
- 边界处理:系统边界缺少防御性检查
### 2.5 Module Boundaries
- 接口定义:模块间通过实现而非接口通信
- 数据共享:模块间共享可变数据结构
- 事件/消息:同步调用链过长
- 领域模型:贫血模型、逻辑散落 Service 层
---
## Agent 3: Performance & Resource (性能与资源)
### 3.1 Algorithm & Data Structure
- 热路径上 O(n^2) 或更高复杂度
- 不当数据结构:线性查找替代哈希
- 循环内重复计算
- 不必要的排序/遍历
### 3.2 Database Performance
- N+1 查询:循环内逐条查询
- 缺少索引WHERE/JOIN 字段未建索引
- 全表扫描
- 大事务持锁过久
- 连接池未配置或配置不当
- SELECT * 替代指定字段
### 3.3 Memory Management
- 内存泄漏:未释放引用、全局缓存无上限
- 循环内创建大对象/切片
- 未使用缓冲 I/O、一次性读取大文件
- 循环内字符串拼接
- 高频对象未使用池化
### 3.4 Concurrency Performance
- 全局锁替代细粒度锁
- 热点资源锁竞争
- 无限制创建 goroutine/线程
- 对只读数据加锁
- 无缓冲通道导致阻塞
### 3.5 I/O Performance
- 异步上下文中阻塞调用
- HTTP 客户端未复用连接
- 大响应未压缩
- 大数据一次性加载替代流式
### 3.6 Caching
- 频繁重复计算/查询未缓存
- 缓存穿透:不存在 key 反复查 DB
- 缓存雪崩:大量 key 同时过期
- 更新后未失效缓存
- 无界缓存导致 OOM
### 3.7 Resource Leaks
- 文件句柄:打开未关闭
- HTTP response body 未关闭
- 数据库查询结果集未关闭
- Timer/Ticker/订阅未取消
- Goroutine/线程启动后永不退出
---
## Agent 4: Reliability & Data Integrity (可靠性与数据完整性)
### 4.1 Error Handling
- 静默吞错:空 catch、忽略返回 error
- 泛型 catchcatch(Exception e)
- 错误消息缺少上下文 (who/what/why)
- 库代码中 panic/os.Exit
- 关键路径缺少 recover/降级
### 4.2 Null Safety
- 空指针解引用:未检查 nil/null
- Optional/Maybe 未正确解包
- 空集合直接取下标
- 长链式调用中环节返回 null
### 4.3 Concurrency Safety
- 数据竞争:无保护读写共享变量
- 死锁:多锁嵌套、不一致加锁顺序
- check-then-act 未加锁
- 非线程安全 Map 并发使用
- 向已关闭 channel 发送数据
### 4.4 Transaction & Consistency
- 多步数据库操作未包裹事务
- 不恰当的事务隔离级别
- 跨服务缺少补偿/Saga
- 异步处理缺少确认/重试
- 重试产生重复数据
### 4.5 Timeout & Retry
- HTTP/DB/RPC 调用未设超时
- 无限重试或缺少退避
- 调用链超时未传递/收缩
- 缺少断路器保护
### 4.6 Boundary Conditions
- 整数溢出:大数、类型截断
- 浮点精度:金额用浮点数
- 时区未明确
- UTF-8 多字节未处理
- 空集合边界
- 并发 first/last、空队列竞态
### 4.7 Graceful Shutdown
- 缺少 SIGTERM/SIGINT 处理
- 关闭时未等待进行中请求
- 未释放 DB 连接、文件句柄
- 内存中待写数据丢失
---
## Agent 5: Code Quality & Observability (代码质量与可观测性)
### 5.1 Complexity
- 函数圈复杂度 > 15
- 深层嵌套 > 4 层
- 函数超过 100 行
- 参数超过 5 个
- 单文件超过 500 行
### 5.2 Duplication
- 大段相似代码 > 10 行
- 相同业务逻辑多处独立实现
- 魔法数字/字符串多处出现
### 5.3 Naming & Readability
- 不符合语言惯例的命名
- 含义模糊data/info/temp/result
- 同一概念不同命名
- 布尔命名不是 is/has/can/should
- 不通用缩写降低可读性
### 5.4 Dead Code & Tech Debt
- 未调用的函数、未使用的变量/导入
- 被注释的代码块
- TODO/FIXME/HACK 遗留
- 使用 deprecated API
### 5.5 Test Quality
- 关键业务路径缺少测试
- 断言仅检查"不报错"
- 缺少边界和异常路径测试
- 测试间隐式依赖
- 过度 mock
- 依赖时间/网络等外部状态
### 5.6 Logging
- 关键决策点缺少日志
- ERROR 级别用于非错误场景
- 字符串拼接而非结构化日志
- 日志含密码/token/PII
- 热路径过度日志
### 5.7 Observability
- 缺少业务指标(请求量、延迟、错误率)
- 跨服务缺少 trace ID
- 缺少 liveness/readiness 探针
- 关键故障路径缺少告警
### 5.8 Build & Deploy
- 构建结果依赖环境状态
- 缺少 lock 文件
- 开发/生产配置差异未文档化
- 迁移脚本缺少回滚方案
- 大功能上线缺少 feature flag

View File

@@ -1,169 +0,0 @@
# Context7 MCP Anti-Hallucination Integration
## Overview
Context7 MCP 提供两个工具,用于拉取第三方库的最新官方文档,消除 LLM 训练数据时效性导致的代码审核幻觉。
## Tools
### resolve-library-id
```
输入: libraryName (如 "gin", "gorm", "react", "express")
输出: Context7 兼容的 library ID (如 "/gin-gonic/gin")
```
- 必须在 `get-library-docs` 之前调用
- 用户已提供 `/org/project` 格式 ID 时可跳过
- 解析失败则记录到 `c7_failures`,跳过该库
### get-library-docs
```
输入:
- context7CompatibleLibraryID: 从 resolve-library-id 获取
- topic (可选): 聚焦主题 (如 "middleware", "hooks", "query")
- tokens (可选): 最大返回 token 数 (默认 5000)
```
- 每个库每次审核最多调用 **3 次**
- 优先用 `topic` 缩小范围
- 缓存首次查询结果,后续复用
## Three-Layer Verification
### Layer 1: Pre-Review Warm-up (Phase 0.5)
在审核开始前预热文档缓存:
1. **扫描依赖清单**
```bash
for f in go.mod package.json requirements.txt Pipfile pyproject.toml \
Cargo.toml Gemfile pom.xml build.gradle composer.json mix.exs \
pubspec.yaml *.csproj; do
[ -f "$f" ] && echo "FOUND: $f"
done
```
2. **提取直接依赖**(按语言):
- Go: `go.mod` require 块(排除 `// indirect`
- Node: `package.json` 的 `dependencies`
- Python: `requirements.txt` 或 `pyproject.toml` 的 `[project.dependencies]`
- Rust: `Cargo.toml` 的 `[dependencies]`
- Java: `pom.xml` 或 `build.gradle` 的 implementation 依赖
3. **优先级筛选**(最多 10 个库):
- P0 框架核心Web 框架、ORM、核心运行时
- P1 安全相关认证库、加密库、JWT 库
- P2 高频使用import 次数最多的库
- P3 其余依赖
4. **批量查询 Context7**
```
对每个库:
id = resolve-library-id(libraryName)
如果失败 → 记录到 c7_failures, 跳过
docs = get-library-docs(id, topic="核心 API 概览", tokens=5000)
缓存到 C7 知识缓存
queries_remaining[库名] = 2
```
5. **构建缓存 JSON**
```json
{
"session_id": "cr-20260207-143000-a1b2c3d4",
"libraries": {
"gin": {
"context7_id": "/gin-gonic/gin",
"docs_summary": "...(API 摘要)...",
"key_apis": ["gin.Context", "gin.Engine"],
"tokens_used": 5000
}
},
"queries_remaining": { "gin": 2 },
"c7_failures": []
}
```
> 多个 `resolve-library-id` 可并行调用。
### Layer 2: In-Review Realtime Verification (Phase 2)
子 Agent 审核代码时的实时验证规则:
**必须验证的场景**
1. 认为某个 API 调用方式错误 → 查 C7 确认当前版本签名
2. 认为某个 API 已废弃 → 查 C7 确认 deprecated 状态
3. 认为代码缺少某库提供的安全/性能特性 → 查 C7 确认该特性存在
4. 认为代码写法不兼容某版本 → 查 C7 拉取对应版本文档
**查询优先级**
1. 先查 C7 知识缓存Phase 0.5 预热结果)
2. 缓存未命中 → 调用 `get-library-docs(id, topic="{具体 API 名}")`
3. 遵守每库 3 次查询上限
**标注字段**
```json
{
"c7_verified": true,
"c7_source": "gin.Context.JSON() accepts int status code and any interface{}",
"verification_method": "c7_cache"
}
```
`verification_method` 取值:
- `c7_cache` — 从预热缓存验证
- `c7_realtime` — 实时调用 Context7 验证
- `model_knowledge` — 未使用 Context7置信度自动降一级
### Layer 3: Post-Review Cross-Validation (Phase 3)
主 Agent 汇总时的最终验证:
```
对于每个 finding:
如果 c7_verified == false 且 severity in [critical, high]:
如果涉及第三方库 API:
docs = get-library-docs(libraryID, topic="{相关 API}")
如果文档支持 Agent 判断 → c7_verified = true, 保留
如果文档与 Agent 矛盾 → 降级为 info 或删除, 标记 c7_invalidated
如果 Context7 无数据 → 保留, 标注 unverifiable
否则 (纯逻辑问题):
跳过 C7 验证, 保持原判断
```
**强制规则**`verification_method == "model_knowledge"` 的 critical/high API 相关发现,未完成交叉验证则自动降级为 medium。
## Degradation Strategy
| 场景 | 行为 |
|------|------|
| Context7 MCP 未配置 | 跳过所有 C7 阶段,报告标注 NONE 覆盖度 |
| 网络超时 | 重试 1 次,仍失败则跳过该库 |
| `resolve-library-id` 失败 | 记录到 `c7_failures`,跳过该库 |
| 查询配额耗尽 | 使用已缓存的最佳信息 |
| 子 Agent 中 C7 调用失败 | 标注 `verification_method: "model_knowledge"`,降低置信度 |
## Report Section: Verification Statistics
审核报告中包含的 Context7 统计节:
| 指标 | 说明 |
|------|------|
| 检测到的依赖库总数 | 项目直接依赖数 |
| C7 成功解析的库 | resolve-library-id 成功数 |
| C7 解析失败的库 | 失败列表 |
| Pre-Review 查询次数 | Phase 0.5 的 get-library-docs 调用数 |
| In-Review 查询次数 | Phase 2 子 Agent 的实时查询总数 |
| Post-Review 查询次数 | Phase 3 交叉验证查询数 |
| C7 验证通过的发现数 | c7_verified == true |
| C7 纠正的误判数 | c7_invalidated 标记数 |
| 验证覆盖度评级 | FULL / PARTIAL / LIMITED / NONE |
## Anti-Hallucination Corrections Table
报告中记录被 Context7 纠正的误判:
| # | Agent | 原 Severity | 原 Title | 纠正原因 | C7 Source |
|---|-------|------------|---------|---------|-----------|
| 1 | Security | high | API deprecated | C7 文档显示该 API 在 v2.x 中仍为 stable | /lib/docs... |

View File

@@ -1,144 +0,0 @@
# Code Review Report Template
审核报告保存到项目根目录的 `code-review-report.md`,使用以下模板:
---
```markdown
# Code Review Report
**Project:** {PROJECT_NAME}
**Branch:** {BRANCH}
**Commit:** {COMMIT_SHA}
**Date:** {DATE}
**Scope:** {SCOPE_DESCRIPTION}
**Files Reviewed:** {TOTAL_FILES}
---
## Executive Summary
| 等级 | 数量 | 占比 |
|------|------|------|
| Critical (P0) | {N} | {%} |
| High (P1) | {N} | {%} |
| Medium (P2) | {N} | {%} |
| Low (P3) | {N} | {%} |
| Info (P4) | {N} | {%} |
| **Total** | **{N}** | **100%** |
**Overall Risk:** {HIGH/MEDIUM/LOW} — {一句话总结}
**C7 Verification:** {FULL/PARTIAL/LIMITED/NONE}
---
## Critical Issues (P0) — Immediate Action Required
### [{RULE}] {TITLE}
- **File:** `{FILE}:{LINE}`
- **Dimension:** {DIMENSION}
- **Confidence:** {CONFIDENCE} | **C7 Verified:** {YES/NO}
- **Description:** {DESCRIPTION}
- **Suggestion:**
```{lang}
{CODE_SUGGESTION}
```
- **References:** {REFERENCES}
---
## High Issues (P1) — Fix Before Next Release
{同上格式}
---
## Medium Issues (P2) — Plan to Fix
{同上格式}
---
## Low Issues (P3) — Nice to Fix
| # | Rule | File:Line | Title | Confidence |
|---|------|-----------|-------|------------|
| 1 | {RULE} | `{FILE}:{LINE}` | {TITLE} | {CONF} |
---
## Info (P4) — Suggestions
| # | File:Line | Suggestion |
|---|-----------|------------|
| 1 | `{FILE}:{LINE}` | {SUGGESTION} |
---
## Hotspot Analysis
| Rank | File | Issues | Critical | High | Medium |
|------|------|--------|----------|------|--------|
| 1 | {FILE} | {N} | {N} | {N} | {N} |
---
## Dimension Summary
| 维度 | 文件数 | 问题数 | Critical | High |
|------|--------|--------|----------|------|
| Security & Compliance | {N} | {N} | {N} | {N} |
| Architecture & Design | {N} | {N} | {N} | {N} |
| Performance & Resource | {N} | {N} | {N} | {N} |
| Reliability & Data | {N} | {N} | {N} | {N} |
| Quality & Observability | {N} | {N} | {N} | {N} |
---
## Context7 Verification Statistics
| 指标 | 数值 |
|------|------|
| 依赖库总数 | {N} |
| C7 成功解析 | {N} |
| C7 解析失败 | {N} ({FAILED_LIBS}) |
| Pre-Review 查询 | {N} |
| In-Review 查询 | {N} |
| Post-Review 查询 | {N} |
| C7 验证通过 | {N} ({%}) |
| C7 纠正误判 | {N} |
| 覆盖度评级 | {FULL/PARTIAL/LIMITED/NONE} |
### Anti-Hallucination Corrections
| # | Agent | 原 Severity | Title | 纠正原因 | C7 Source |
|---|-------|------------|-------|---------|-----------|
| 1 | {AGENT} | {SEV} | {TITLE} | {REASON} | {SOURCE} |
---
## Recommendations
### Immediate Actions (This Sprint)
1. {P0/P1 对应行动项}
### Short-term (Next 2-3 Sprints)
1. {P2 对应行动项}
### Long-term
1. {架构级改进}
---
## Methodology
- **Type:** Multi-agent parallel review + Context7 anti-hallucination
- **Agents:** Security, Architecture, Performance, Reliability, Quality
- **Isolation:** Independent git worktrees per agent
- **Verification:** Context7 three-layer (warm-up → realtime → cross-validation)
- **Policy:** API findings ≥ high require C7 verification; unverified auto-downgraded
---
*Generated by Code Review Expert — Universal Multi-Agent Code Review System with Context7 Anti-Hallucination*
```