SuperAPI AI 工具集

copilot-review-loop

编程与开发

查看项目

更新于 10-16 04:23

技能介绍

用途

copilot-review-loop 用于自动化一个由 GitHub Copilot 驱动的迭代审查循环:触发 Copilot 审查、逐条处理其反馈,然后再次触发 Copilot 审查。最多重复 2 个周期,直到所有关键问题解决。

这是一个会话内循环——一个长时间运行的智能体上下文在内部迭代。它不是 Ralph Wiggum 模式(后者是外部 shell 循环,每条评论都会启动一个新的智能体会话)。如需后者,请参见 ralph-wiggum-loop 技能。

典型调用方式

用户可通过如下提示触发该技能:

  • "Request a Copilot review on this PR and address the feedback"
  • "Trigger a GitHub Copilot review and fix the issues it finds"
  • "Run copilot-review-loop on PR #42"
  • "Use copilot-review-loop to get and address Copilot's review comments"

前置条件

  • gh CLI(必需)
  • gh-copilot-review 扩展(推荐——参见 references/gh-copilot-review-guide.md)
    • 安装命令:gh extension install ChrisCarini/gh-copilot-review
    • 未安装时的回退方案:gh pr review --request copilot
  • pr-review-loop 技能(可选——若已安装,内层循环委托给它)
  • PR 分支必须在本地检出

流程

步骤 1 — 预检

检查项目中是否存在以下文件,以了解保障约定:CLAUDE.md、AGENTS.md、Makefile、.github/workflows/、README.md。

识别所有必需的保障措施(测试、编译、lint、格式化等)。运行全部保障措施。若有任何失败,立即停止并报告——不得继续。

步骤 2 — 外层循环(最多 2 次迭代)

最多重复 2 次:

2a. 请求 Copilot 审查

检查是否安装了 gh-copilot-review 扩展:gh extension list | grep copilot-review

若已安装(首选):gh copilot-review [<number> | <url>]

若未安装(回退):gh pr review --request copilot

2b. 等待 Copilot 完成

阅读 references/gh-copilot-review-guide.md 了解轮询方法。

在触发前记录当前未解决的 copilot[bot] 评论数量。每 30 秒轮询一次,直到出现新评论。若 10 分钟后仍无新评论,停止并报告超时——不得继续。

2c. 收集未解决的 Copilot 评论

获取所有由 copilot[bot] 撰写的未解决评论。忽略人类审查者的评论(那些由 pr-review-loop 技能处理)。

gh api repos/{owner}/{repo}/pulls/{pr}/comments \
  --jq '.[] | select(.user.login == "copilot[bot]")'

获取所有 Copilot 评论。使用触发前记录的计数(步骤 2b)来识别哪些是新评论。

若没有未解决的 Copilot 评论,停止——无事可做。

2d. 处理评论——内层循环

若 pr-review-loop 技能可用:调用 pr-review-loop 技能,仅传入步骤 2c 收集的 Copilot 评论作为范围。它将处理分类、逐条修复和回复。

若 pr-review-loop 技能不可用:对每条评论逐一执行以下流程(先 MUST_FIX,后 SHOULD_FIX):

使用 references/triage-guide.md 中定义的五个类别进行分类(MUST_FIX、SHOULD_FIX、PARK、OUT_OF_SCOPE、NEEDS_CLARIFICATION)。分类前先阅读该文件。

对每条 MUST_FIX 和 SHOULD_FIX 评论:

  • 评估复杂度:
    • 简单(重命名、小修复):直接修复
    • 非简单:先将计划写入 .pr-review/plan-<comment-id>.md
  • 运行保障措施——在改动代码前必须全部通过
  • 修复、搁置或请求澄清
    • 照常修复或搁置。
    • 若评估过程中意图确实模糊:发布一个聚焦的问题(见下方格式),不解决该线程,跳过步骤 4–8,继续处理下一条。

澄清问题格式:

cat > /tmp/pr-review-reply-{comment_id}.md <<'EOF'
Thanks for the feedback! Before I make a change, I want to make sure I understand what you're after:

<one specific, focused question>
EOF

jq -n --rawfile body /tmp/pr-review-reply-{comment_id}.md '{body:$body}' > /tmp/pr-review-reply-{comment_id}.json

gh api repos/{owner}/{repo}/pulls/{pull_number}/comments/{comment_id}/replies \
  --input /tmp/pr-review-reply-{comment_id}.json

只问一个问题。保持线程未解决,以便审查者的回答使其重新浮现。

  • 再次运行保障措施——必须全部通过
  • 提交并推送:
git add <changed files>
git commit -m "<conventional commit describing the fix>"
git push
  • 回复评论——说明修复、推迟或拒绝
  • 在 GitHub 上解决该评论
  • 若创建了计划文件则删除:rm .pr-review/plan-<comment-id>.md

2e. 检查停止条件

若出现以下任一情况则停止迭代:

  • 本轮之后不再有 MUST_FIX 的 Copilot 评论
  • 仅剩 OUT_OF_SCOPE 或 NEEDS_CLARIFICATION 的 Copilot 评论(等待审查者输入)
  • 这是第 10 次迭代

否则继续下一轮迭代(回到步骤 2a)。

步骤 3 — 总结

在 PR 上发布最终评论:

## Copilot Review Loop — Summary

Completed N Copilot review cycle(s).

### Fixed
- [commit abc1234] <description> (Copilot comment #<id>)
- ...

### Parked
- <description> — deferred, tracked in #<issue>
- ...

### Rejected
- <description> — <reason>
- ...

### Awaiting Clarification
- Asked Copilot: "<question>" — thread left open (comment #<id>)
- ...

省略没有条目的部分。

可恢复性

该技能可在任意时刻被中断,并在全新上下文中重启。

重启时:

  1. 运行预检(步骤 1)
  2. 检查是否存在 .pr-review/plan-*.md——若找到,从步骤 2d 的修复中途继续
  3. 重新获取未解决的 Copilot 评论——已解决的不会出现
  4. 从当前状态继续外层循环

状态目录

.pr-review/ 位于仓库根目录(项目应将其加入 gitignore)。

  • plan-<comment-id>.md——当前进行中评论的计划(解决后删除)

禁止事项

  • 将所有 PR 反馈打包成一个大型提交
  • 在单个提交中做多个不相关的改动
  • 一次性推送所有改动而不做中间提交
  • 处理完 Copilot 评论后仍让其处于未解决状态
  • 在 MUST_FIX 项仍未解决时进入下一个 Copilot 审查周期