对 GitCode PR 做证据驱动的自动化代码审查。支持两种使用方式:
| 方式 | 入口 | 说明 |
|---|---|---|
| Claude Code Skill | /yuanrong-pr-review <pr-id> |
在 Claude Code 中一键审查:自动理解 Issue → 准备 workspace → 生成 review → 发布评论 |
| Gemini CLI 脚本 | ./scripts/review-pr.sh <pr-id> |
本地用 Gemini CLI(订阅模式)审查,再手动发布 |
直接在 Claude Code 对话中使用:
/yuanrong-pr-review 1037
Skill 会自动完成四步工作流:
- 从 GitCode API 获取 PR 标题、描述、base 分支(自动适配
master/0.8.1/v0.9.x) - 若
meta.json中related.issues有关联 Issue,逐个获取并阅读理解,确保 Section A 能对照 Issue 要求 - 若
related.rfcs有设计文档链接,读取 RFC 内容理解设计意图
- 自动 bootstrap meta.json(首次)
check_pr_refs.py从 API 获取 base/head SHA,自动检测并修复分支(无需手动指定)- 生成两圆点 diff(
base_ref..head_ref)
读取 diff + 关联 Issue 摘要 + GEM 规则 + evidence rubric,按严格证据标准生成结构化 review.md
- 逐行评论:解析 Section E findings,映射到正确的文件行号,POST 到 GitCode
- 整体评论:将完整 review.md POST 为一条 PR 评论
- 指纹去重,避免重复评论
/yuanrong-pr-review 1037
如果 review 前 meta.json 没有 issue,可以在对话中告诉我关联哪些 Issue,我会先 fetch 理解,再审查。
- 安装 Gemini CLI,执行
gemini login - 首次跑某个 PR 号时,若不存在
workspace/inputs/pr-<id>/meta.json,review-pr.sh会调用bootstrap_meta.py自动生成模板。关联 Issue 可在命令行传入--issues 234,233,或编辑 meta 中的related.issues/related.rfcs。 - 在仓库根目录执行:
# 只指定 PR 号(默认会 bootstrap meta)
./scripts/review-pr.sh 449
# 同时传入关联 Issue 号(逗号分隔,会写入 meta 并注入 Traceability)
./scripts/review-pr.sh 470 --issues 234,233,235
# 可选:RFC 链接用 | 分隔;同时输出 JSON
./scripts/review-pr.sh 449 --issues 234 --rfcs 'https://example.com/rfc.md' --json- 阅读
results/pr-<id>/review.md(及可选的review.json)。
不需要手动指定 base 分支。check_pr_refs.py 从 GitCode API 自动获取 PR 的目标分支:
| 场景 | 自动处理 |
|---|---|
PR 合入 master |
确认 base.ref=master,diff origin/master..pr-head |
PR 合入 0.8.1 |
API 返回 base.ref=0.8.1,自动 fetch origin/0.8.1,更新 meta.json,重新 diff |
| PR 合入其他分支 | 同上,自动适配 |
PR 源/目的与 API 校验(推荐):若已导出 GITCODE_TOKEN,生成 diff 前会自动调用 check_pr_refs.py 比对 API SHAs 与本地 refs。未设置 token 时跳过校验。手动跳过:--no-pr-check 或 CODE_REVIEW_SKIP_PR_CHECK=1。
使用 GitCode Open API(POST /api/v5/repos/:owner/:repo/pulls/:number/comments)。
- 在 GitCode 设置 → 访问令牌 创建 token
- 导出环境变量:
export GITCODE_TOKEN='你的令牌'- 发布:
# 逐行评论(Section E findings → 代码行)
./scripts/post-review-inline.sh 449
./scripts/post-review-inline.sh 449 --dry-run # 预览
# 整体评论(完整 review.md)
./scripts/post-review-to-gitcode.sh 449
./scripts/post-review-to-gitcode.sh 449 --dry-run
./scripts/post-review-to-gitcode.sh 449 --no-banner| 环节 | 做法 |
|---|---|
| 仓库 | pr_diff.py 在 workspace/pr-<id>/repo clone 或 仅 fetch 更新已有 clone,按 meta.json 拉取 PR 头分支,再 git diff base..head 写入 diff.patch。 |
| 多分支 | check_pr_refs.py 调用 GitCode API 获取 base.ref,自动 fetch 对应远端分支并更新 base_ref,适配 master / 0.8.1 / v0.9.x 等。 |
| 关联 Issue | fetch_pr_issues.py 从 API 获取每个 Issue 的标题/正文,注入审查提示词。审查 Section A 须对照 Issue 要求。 |
| 提示词 | gemini -p 的内容由:业务上下文 + 审查 Gem + 证据型输出细则 + Issue 摘要 拼接。与网页版 Gemini Gems 共用同一套 Gem 文稿。 |
| 模型输入 | 标准输入 = 仅 diff 文件(gemini 的 -p 与 stdin 组合),避免超大 argv。 |
| 身份 | 脚本内 unset GEMINI_API_KEY,走 CLI 登录态,而非 API Key。 |
.
├── README.md
├── plans/ # 给人看的操作说明
├── scripts/
│ ├── review-pr.sh # 生成 diff → 调用 gemini
│ ├── post-review-to-gitcode.sh # 整体评论 POST 到 GitCode
│ ├── post-review-inline.sh # 逐行评论 POST 到 GitCode
│ ├── check-pr-refs.sh # 单独运行 PR ref 校验
│ └── lib/
│ ├── pr_diff.py # clone/fetch、写 diff.patch
│ ├── bootstrap_meta.py # 首次生成 meta.json
│ ├── check_pr_refs.py # API SHA vs 本地 base/head ref(多分支自动适配)
│ ├── fetch_pr_issues.py # 获取关联 Issue 摘要注入提示词
│ ├── meta_links_prompt.py # 从 meta 生成 Traceability 段
│ ├── merge_meta_cli.py # --issues/--rfcs 写入 meta
│ ├── parse_section_e.py # 解析 review.md Section E findings
│ ├── diff_position.py # 映射 path:line → 文件行号
│ ├── post_gitcode_inline.py # 逐行评论 POST(含指纹去重)
│ └── post_gitcode_comment.py # 整体评论 POST
├── docs/meta-json.md # meta.json 字段说明
├── workspace/
│ ├── inputs/pr-<id>/ # 本地 meta.json
│ └── pr-<id>/ # clone、diff.patch、run.log
├── assets/
│ ├── prompts/ # 业务提示 + 输出细则
│ ├── gems/ # 与网页 Gems 对齐的 GEM 文稿
│ └── skills/ # Claude Code Skill(/yuanrong-pr-review)
└── results/pr-<id>/ # 审查输出 review.md、指纹等
workspace/(含 workspace/inputs/)已在 .gitignore 中忽略。
git config commit.template .gitmessage