用途
review-pr 用于批量处理 GitHub Pull Request 上的评审评论。它面向需要应对大量评审意见(包括 GitHub Copilot 自动评论和人工评审者评论)的开发场景,帮助开发者快速判断每条评论是否仍然有效,并自动完成回复与线程解决。
主要能力
- 查找当前分支对应的 PR(未提供 PR 编号时)。
- 通过 GitHub API 拉取评审评论及其 ID、文件路径、行号和内容,并过滤出顶层评论。
- 在评估前读取被引用的实际代码文件,核实行号是否匹配、问题是否已被后续提交修复、评审者对代码的理解是否正确。
- 将评论分类为三类:已处理(问题已修复或评审者误读)、需修复(当前代码中确实存在的 bug、安全问题或拼写错误)、不修复(过度设计、风格偏好、功能请求或会破坏一致性)。
- 展示所有评论的评估结果,包括评论内容、问题说明和实际代码情况。
- 对已处理和不修复的评论回复解释理由,对需修复的评论先实现修复再回复提交哈希。
- 通过 GraphQL 获取所有未解决的线程 ID 并逐一解决。
- 输出最终摘要,按已处理、不修复、已修复分类列出。
使用方式
该技能通过命令行工具 gh(GitHub CLI)执行。主要步骤包括:
- 查找 PR:
gh pr list --head $(git branch --show-current) --json number,title --jq '.[0]'
- 获取评审评论:
gh api repos/{owner}/{repo}/pulls/{number}/comments --jq '.[] | {id: .id, path: .path, line: (.line // .original_line), body: .body, in_reply_to_id: .in_reply_to_id}'
-
读取被引用文件并评估。
-
回复评论:
gh api repos/{owner}/{repo}/pulls/{pr_number}/comments/{comment_id}/replies \
-X POST \
-f body="回复内容"
- 获取未解决线程并解决:
cat << 'QUERY' | gh api graphql --input - --jq '.data.repository.pullRequest.reviewThreads.nodes[] | select(.isResolved == false) | {threadId: .id, commentId: .comments.nodes[0].databaseId}'
{"query": "query($owner: String!, $repo: String!, $pr: Int!) { repository(owner: $owner, name: $repo) { pullRequest(number: $pr) { reviewThreads(first: 100) { nodes { id isResolved comments(first: 1) { nodes { databaseId } } } } } } }", "variables": {"owner": "OWNER", "repo": "REPO", "pr": 123}}
QUERY
cat << 'QUERY' | gh api graphql --input -
{"query": "mutation { resolveReviewThread(input: {threadId: \"THREAD_ID_HERE\"}) { thread { isResolved } } }"}
QUERY
整个流程(评估 → 回复 → 解决 → 摘要)在一次执行中完成,不暂停询问用户是否继续。
适用场景
- 需要批量处理 PR 评审评论,尤其是评论数量较多时。
- 评审评论可能引用过时代码或误读逻辑,需要逐条核实。
- 希望自动回复并解决所有讨论线程,保持 PR 整洁。
限制
- 依赖 GitHub CLI(gh)和 GitHub API 访问权限。
- 仅处理顶层评论(in_reply_to_id 为 null)。
- 回复内容应简洁,控制在 1-2 句话。
- 仅修复当前代码中确实存在的 bug、安全问题或拼写错误,不处理功能请求或风格偏好。
- 关于收费、价格、平台支持范围等信息暂未提供。