在 PR 中回复审查意见
回复 GitHub PR 上的代码审查意见并解决对应的讨论线程。
输入
所有输入均从对话上下文中推断。仅在存在歧义时才询问。
输入 1 — PR 编号或 URL。 要操作的拉取请求。从上下文推断(例如之前展示的 PR URL 或分支名称)。如果确实存在歧义,运行:
gh pr list --head "$(git rev-parse --abbrev-ref HEAD)" --json number,url --jq '.[0]'
输入 2 — 要回答的意见。
具体的审查者发现——通常通过编号(#2)、文件名+行号或对话中之前展示的意见表格中的引用文本来识别。
如果对话中没有意见表格,并且 dakubo-display-pr-remarks 技能可用,则使用它以生成表格。如果不可用,则询问用户该意见。
输入 3 — 回答内容。 要发布的回复:解释、确认或修复摘要。根据上下文推断(例如刚刚修复或讨论的内容)。如果不清楚则询问。
流程
1. 解析评论 ID
获取 PR 的行内审查评论:
gh api repos/:owner/:repo/pulls/<PR>/comments --paginate \
--jq '.[] | {id, path, line: (.line // .original_line), body: .body[0:120]}'
通过行号、文件路径或评论内容片段匹配目标意见。记录其 id。
2. 发布回复
gh api repos/:owner/:repo/pulls/<PR>/comments \
--method POST \
--field body="<answer>" \
--field in_reply_to=<comment_id>
3. 解决讨论线程
找到包含此评论的审查线程:
gh api graphql -f query='
{
repository(owner: "<owner>", name: "<repo>") {
pullRequest(number: <PR>) {
reviewThreads(first: 100) {
nodes {
id
isResolved
comments(first: 1) { nodes { databaseId } }
}
}
}
}
}'
匹配 comments.nodes[0].databaseId 等于原始评论 id(不是回复的 ID)的线程。然后解决它:
gh api graphql -f query='
mutation {
resolveReviewThread(input: { threadId: "<thread_node_id>" }) {
thread { isResolved }
}
}'
输出
确认:回复已发布到评论 <id> 位于 <file>:<line>,线程已解决。一句话即可。
不要做什么
- 不要编造回答——从上下文推断或询问用户。
- 不要在发布回复之前就解决线程。
- 如果此分支上有多个打开的 PR,不要猜测——请询问用户。