| name | pr-comments |
| description | 拉取并整理指定 PR(或当前分支对应 PR)的全部评论——行内评论、会话区评论、review 汇总——输出按文件/线程分组的结构化清单。默认严格只读:只用 gh 的读接口,绝不发表、回复、编辑、resolve、approve 或以任何方式改动 PR(唯一例外见正文第 5 节)。当用户要求看 PR 评论、整理 review 意见、汇总 reviewer 反馈、确认还有哪些意见没处理时使用。 |
拉取并整理当前 PR 的所有评论。默认只读:除「已授权的评审者」(见第 5 节)的行内评论外,绝不发表、回复、编辑、resolve、approve 或以任何方式改动 PR。
硬约束(默认只读)
- 只用读取类命令:
gh pr view、gh api(仅 GET)、gh api graphql(仅 query)。
- 禁止任何写操作:不要
gh pr comment / gh pr review / gh pr edit / gh pr close,不要 gh api -X POST/PATCH/PUT/DELETE,不要 resolve / unresolve review thread。
- 不改动工作区文件,不 commit,不 push。本命令的产物只是给用户看的整理结果。
- 唯一例外:已授权评审者的行内评论,在其指出的问题被真正解决之后,按第 5 节自动 reply + resolve。除此之外一律不写 —— 别人的评论、会话区评论、review 汇总都不碰。
1. 确定目标 PR
- 用户调用时给了 PR 号或 URL → 用它。
- 否则按当前分支推断:
gh pr view --json number,title,url,state -q .。若当前分支没有关联 PR,直接告诉用户并停止(不要去猜)。
先拿到 owner / repo / number 备用:
gh repo view --json owner,name -q '.owner.login + "/" + .name'
gh pr view ${ARGS:+$ARGS} --json number -q .number
2. 抓取三类评论
GitHub PR 的评论有三个来源,要全抓:
- 行内 review 评论(挂在代码某行上,带 resolved 状态)—— 用 GraphQL 才能拿到
isResolved / isOutdated:
gh api graphql -f query='
query($owner:String!,$repo:String!,$number:Int!){
repository(owner:$owner,name:$repo){
pullRequest(number:$number){
reviewThreads(first:100){
nodes{
id isResolved isOutdated path line
comments(first:50){nodes{databaseId author{login} body createdAt diffHunk url}}
}
}
}
}
}' -F owner=OWNER -F repo=REPO -F number=NUMBER