@routerhub/agent-rules 1.5.111 → 1.5.112

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,12 @@
2
2
 
3
3
  所有对 @routerhub/agent-rules 的重大更改都会记录在这个文件中。
4
4
 
5
+ ## [1.5.112] - 2026-08-06
6
+
7
+ ### Added
8
+
9
+ - 新增 `loop-review` Skill(循环 Code Review / AI 交叉验证循环):写完代码提交 PR 后,反复「拉取 AI review(Claude Opus 4.6 + GPT-5.5 交叉验证)→ 判断哪些建议要改 → 改 → push 触发新一轮 review → 直到无 Critical/Warning」。触发词如「循环review」「走一下循环review流程」。全自动执行(AI 判断要改就改,每轮汇报),无 🔴/🟡 即结束;内置最大轮数(5 轮)、等待超时(15 分钟)、Won't fix 防重复循环等兜底。
10
+
5
11
  ## [1.5.25] - 2026-06-26
6
12
 
7
13
  ### Added
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@routerhub/agent-rules",
3
- "version": "1.5.111",
3
+ "version": "1.5.112",
4
4
  "description": "Shared Copilot agent rules and guidelines for RouterHub projects",
5
5
  "main": "AGENTS.base.md",
6
6
  "bin": {
@@ -0,0 +1,184 @@
1
+ ---
2
+ name: loop-review
3
+ description: >-
4
+ 循环 Code Review(AI 交叉验证循环)——写完代码提交 PR 后,反复「拉取 AI review(Claude Opus 4.6 + GPT-5.5 交叉验证)→ 判断哪些建议要改 → 改 → push 触发新一轮 review → 直到无 Critical/Warning」。触发场景包括但不限于:
5
+ 「循环review」「循环审查」「循环评审」「循环 Review」「loop review」「Loop Review」「review循环」「review 循环」。
6
+ 「循环review流程」「走一下循环review」「走循环review」「循环review一下」「循环处理review」「循环处理一下review」。
7
+ 「循环到没问题」「review到没问题」「review到干净」「反复review」「重复review」「一直review到干净」「review迭代」「交叉验证循环」。
8
+ 「再来一轮review」「下一轮review」「review下一轮」「再review一轮」。
9
+ 当用户写完代码提交 PR 后,主动问「要不要走循环 review」时也可触发。
10
+ ---
11
+
12
+ # 循环 Code Review(AI 交叉验证循环)
13
+
14
+ ⚠️ **本 Skill 已触发。第一句话必须输出:「🔧 已触发 `loop-review`,开始循环 review 流程(拉取 AI 交叉验证 → 判断 → 修改 → 再 review → 干净为止)」然后严格按照以下步骤执行,不得跳过。**
15
+
16
+ 让 AI review bot(Claude Opus 4.6 + GPT-5.5 交叉验证,由 `github-actions[bot]` 发布)循环审查,直到最新一轮 review 不再有 🔴 Critical / 🟡 Warning。
17
+
18
+ ## 工作原理
19
+
20
+ AI review bot 在**每次 push 到 PR 时自动触发新一轮 review**。因此循环流程是:
21
+
22
+ ```
23
+ 拉取最新 review → 解析两个模型的建议 → 逐条判断(读真实代码)→ 需要改就改
24
+ → push(触发新 review)→ 等待新 review 到达 → 判定是否干净
25
+ → 不干净则回到「解析建议」,干净则结束
26
+ ```
27
+
28
+ ## 当前 PR
29
+
30
+ !`gh pr view --json number,title,state -q '"PR #\(.number): \(.title) (\(.state))"' 2>/dev/null`
31
+
32
+ ## 核心流程
33
+
34
+ ### 0. 记录起始状态
35
+
36
+ ```bash
37
+ REPO=$(gh repo view --json nameWithOwner -q '.nameWithOwner')
38
+ PR=$(gh pr view --json number -q '.number')
39
+ HEAD=$(git rev-parse --short HEAD)
40
+ ```
41
+
42
+ 记录本轮起始 `HEAD`,用于判断「新 review 是否已针对最新 push」。
43
+
44
+ ### 1. 拉取最新一轮 AI review
45
+
46
+ ```bash
47
+ gh api repos/$REPO/pulls/$PR/reviews?per_page=100 --jq '
48
+ [.[] | select(.user.login == "github-actions[bot]") |
49
+ {id, commit_id, submitted_at, body}]
50
+ '
51
+ ```
52
+
53
+ review body 结构(已实测确认):
54
+
55
+ - 开头标注「审查 commit: \`xxx\`」——该轮 review 对应的提交
56
+ - `## 🤖 Claude Opus 4.6 Code Review`:Opus 的审查结论
57
+ - `## 🤖 GPT-5.5 Code Review(交叉验证)`:GPT-5.5 的交叉验证结论
58
+ - 每个模型内部按严重度分节:`## 🔴 Critical` / `## 🟡 Warning` / `## 🔵 Suggestion`
59
+
60
+ **确认「最新一轮 review 是否针对当前 HEAD」**,优先用 review 的 `commit_id` 字段,为空时解析 body 里的「审查 commit」:
61
+
62
+ ```bash
63
+ # 取最新一条对应当前 HEAD 的 review(命中则输出 YES,否则为空)
64
+ CUR=$(git rev-parse --short HEAD)
65
+ gh api repos/$REPO/pulls/$PR/reviews?per_page=100 --jq \
66
+ --arg cur "$CUR" '
67
+ [.[] | select(.user.login == "github-actions[bot]") |
68
+ (.commit_id // (try (.body | capture("审查 commit: `(?<h>[0-9a-f]+)`") | .h) catch null))] |
69
+ if .[0] == $cur then "YES" else "NO" end'
70
+ ```
71
+
72
+ 若最新 review 对应的还是更早的 commit,说明 push 后 bot 尚未审查完,先进入步骤 5 的等待。
73
+
74
+ ### 2. 汇总建议并逐条判断
75
+
76
+ 解析两个模型的所有问题,**两模型报同一问题时合并为一条**(不要重复改两遍)。逐条判断:
77
+
78
+ | 严重度 | 默认处理 |
79
+ |--------|----------|
80
+ | 🔴 Critical | 必须改,除非读代码确认是误报 |
81
+ | 🟡 Warning | 应该改,默认改 |
82
+ | 🔵 Suggestion | 可选,判断有无价值,低价值可拒绝 |
83
+
84
+ **判断依据(每条必须读真实代码,禁止凭 review 文字盲改)**:
85
+
86
+ - 这是否是真实 bug / 真实风险?(读代码验证,不轻信 review 描述)
87
+ - 该建议是否符合本项目规则(AGENTS.base.md / AGENTS.private.md)?
88
+ - 改动风险多大?会不会超出该建议本身的范围?
89
+ - 两模型是否一致指出?一致 → 优先级更高、基本可信。
90
+
91
+ 输出判断表:
92
+
93
+ ```
94
+ | # | 来源 | 严重度 | 建议摘要 | 判断 | 理由 |
95
+ |---|------|--------|---------|------|------|
96
+ | 1 | Opus+GPT | 🔴 | 并行部署失败被静默忽略 | 改 | 后台进程不受 set -e 管控,属实 |
97
+ | 2 | GPT | 🟡 | test/prod 共用缓存 TAG | 改 | 有缓存污染风险 |
98
+ | 3 | Opus | 🔵 | 提取重复代码 | 不改 | 仅出现两次,封装过度 |
99
+ ```
100
+
101
+ ### 3. 应用修复
102
+
103
+ - 功能性问题(🔴 / 🟡,以及所有判定「要改」的)→ 每个修复单独 commit,commit 信息用中文,正文引用对应 review 来源
104
+ - 建议级(🔵)→ 合并为一个 commit
105
+ - 判定「不改」的建议 → 记下理由,按步骤 4 回复,防止 bot 下一轮重复提同一问题
106
+
107
+ ### 4. 对「不改」的建议回复(防重复循环)
108
+
109
+ ```bash
110
+ gh pr comment $PR --body "Won't fix: <理由>。针对 <来源模型> 提出的「<建议摘要>」。"
111
+ ```
112
+
113
+ 已修复的问题若 review 附了 inline comment,用 `gh api .../pulls/$PR/comments` 的 `in_reply_to` 回复「Fixed in <hash>」。
114
+
115
+ ### 5. push 并等待下一轮 review
116
+
117
+ ```bash
118
+ git push origin <当前分支>
119
+ ```
120
+
121
+ - ⚠️ **禁止使用 `[skip ci]` / `[skip review]` 等关键词**——会跳过 bot 审查,循环就断了。
122
+ - push 后 bot 需要一段时间才出新一轮 review(实测几分钟到几十分钟不等),用轮询等待,不要干等:
123
+
124
+ ```bash
125
+ CUR=$(git rev-parse --short HEAD)
126
+ for i in $(seq 1 45); do
127
+ R=$(gh api repos/$REPO/pulls/$PR/reviews?per_page=100 --jq \
128
+ --arg cur "$CUR" '
129
+ [.[] | select(.user.login == "github-actions[bot]") |
130
+ (.commit_id // (try (.body | capture("审查 commit: `(?<h>[0-9a-f]+)`") | .h) catch null))] | .[0]')
131
+ [ "$R" = "$CUR" ] && echo "NEW_REVIEW_READY" && break
132
+ sleep 20
133
+ done
134
+ ```
135
+
136
+ - ⚠️ **遵守心跳约定**:等待期间超过 1 分钟无输出,主动告知「正在等 bot 审查」。
137
+ - 轮询约 15 分钟(45 次 × 20s)仍没出新 review → 停止等待,向用户报告当前状态并询问是否继续等。
138
+
139
+ ### 6. 判定本轮结果
140
+
141
+ 拉取针对当前 `HEAD` 的最新 review,解析其中 🔴 / 🟡 / 🔵 的剩余情况:
142
+
143
+ - **无 🔴 Critical / 🟡 Warning** → 循环结束 ✅,进入步骤 7 收尾
144
+ - **仍有 🔴 / 🟡** → 回到步骤 2,进入下一轮
145
+ - **达到最大轮数(默认 5 轮)仍未干净** → 停止循环,把剩余问题逐条列给用户,由用户决定(继续 / 放过 / 人工处理),禁止无限循环
146
+
147
+ ⚠️ 每轮结束向用户汇报:本轮发现什么、改了什么、拒绝了什么、还剩什么。
148
+
149
+ ### 7. 收尾汇报
150
+
151
+ 循环结束或达到轮数上限后,输出汇总报告:
152
+
153
+ ```
154
+ 循环 review 完成,共 X 轮:
155
+ - 第 1 轮:发现 3 个问题(2 Critical / 1 Warning),修复 2,拒绝 1
156
+ - 第 2 轮:发现 1 个问题(1 Warning),修复 1
157
+ - 第 3 轮:无 Critical/Warning,循环结束 ✅
158
+ ```
159
+
160
+ ## 循环终止条件(重要)
161
+
162
+ | 条件 | 行为 |
163
+ |------|------|
164
+ | 最新一轮 review 无 🔴/🟡 | ✅ 结束 |
165
+ | 达到最大轮数(默认 5 轮) | ⛔ 停止,剩余问题交用户决定 |
166
+ | 等待新 review 超时(默认 15 分钟) | ⏸ 停止等待,询问用户 |
167
+ | 连续两轮 review 内容完全相同(bot 疑似卡死) | ⛔ 停止,向用户报告 |
168
+
169
+ ## ⚠️ 铁律
170
+
171
+ - ⚠️ **每条建议必须读真实代码再判断,禁止盲从 review 文字**。review 是 LLM 生成的,可能误报。
172
+ - ⚠️ **禁止使用 `[skip ci]` / `[skip review]`**——循环依赖「每次 push 触发 review」,跳过就断了。
173
+ - ⚠️ **不改的建议必须回复「Won't fix: 理由」**,否则同一问题被 bot 每轮重提,循环永不收敛。
174
+ - ⚠️ **必须设最大轮数(默认 5)和等待超时(默认 15 分钟)**,禁止无限循环 / 无限等待。
175
+ - ⚠️ **已修复的功能性问题单独 commit**,禁止与大量建议级改动混在一起,保证每轮 push 的 diff 可读。
176
+ - ⚠️ **等待 bot 审查期间遵守心跳约定**:超过 1 分钟无输出主动说明在等什么。
177
+ - ⚠️ **commit 用中文、禁止 `git push --force`、commit 信息引用对应 review 来源**。
178
+ - ⚠️ **两模型报同一问题合并为一条处理**,不要重复改两遍。
179
+ - ⚠️ **涉及生产部署、大范围改动等高风险修改,即使判定「要改」也应先向用户说明再执行**(与全自动模式互补,不冲突)。
180
+
181
+ ## 参考
182
+
183
+ - 拉取评论 / 分类 / 回复 thread 的细节复用 `github-pr-review` skill(`skills/github-pr-review/SKILL.md`)
184
+ - 严重度识别补充规则:`skills/github-pr-review/references/severity_guide.md`