AgentSkillsCN

resolve-review

在完整的代码上下文中,获取、分析并解决 PR 评审意见。 当您需要回应评审反馈、化解评审争议,或向评审人员作出回复时,可使用此功能。

SKILL.md
--- frontmatter
name: resolve-review
description: |
  Fetch, analyze, and resolve PR review comments with full code context.
  Use when addressing review feedback, resolving threads, or responding to reviewers.
disable-model-invocation: true
allowed-tools:
  - Bash(gh *)
  - Bash(git *)
  - Read
  - Edit
  - Grep
  - Glob
metadata:
  source: internal
  version: "1.0.0"

Resolve Review Comments

Address review comments on the current PR (works for any reviewer: human, Copilot, CodeRabbit, etc.).

1. Get PR

bash
PAGER=cat gh pr view --json number,url,title --jq '"#\(.number): \(.title)\n\(.url)"'

If no PR exists, run /land-pr first.

2. Fetch Unresolved Comments

bash
PR_NUMBER=$(PAGER=cat gh pr view --json number -q .number)
OWNER=$(PAGER=cat gh repo view --json owner -q .owner.login)
REPO=$(PAGER=cat gh repo view --json name -q .name)

PAGER=cat gh api graphql -f query='
query($owner: String!, $repo: String!, $number: Int!) {
  repository(owner: $owner, name: $repo) {
    pullRequest(number: $number) {
      reviewThreads(first: 50) {
        nodes {
          id
          isResolved
          path
          line
          comments(first: 3) {
            nodes { body diffHunk author { login } }
          }
        }
      }
    }
  }
}' -F owner="$OWNER" -F repo="$REPO" -F number="$PR_NUMBER" \
  | jq '[.data.repository.pullRequest.reviewThreads.nodes[] | select(.isResolved == false)]'

3. Address Each Comment

Read diffHunk (code context) and body (feedback):

SituationAction
Already fixedResolve thread
Valid issueFix code, then resolve
DisagreeReply with reasoning, leave open

4. Resolve Thread

bash
PAGER=cat gh api graphql -f query='
mutation($threadId: ID!) {
  resolveReviewThread(input: {threadId: $threadId}) {
    thread { isResolved }
  }
}' -f threadId="<THREAD_ID>"

5. Verify

bash
PR_NUMBER=$(PAGER=cat gh pr view --json number -q .number)
OWNER=$(PAGER=cat gh repo view --json owner -q .owner.login)
REPO=$(PAGER=cat gh repo view --json name -q .name)

PAGER=cat gh api graphql -f query='
query($owner: String!, $repo: String!, $number: Int!) {
  repository(owner: $owner, name: $repo) {
    pullRequest(number: $number) {
      reviewThreads(first: 50) {
        nodes { isResolved }
      }
    }
  }
}' -F owner="$OWNER" -F repo="$REPO" -F number="$PR_NUMBER" \
  | jq '[.data.repository.pullRequest.reviewThreads.nodes[] | select(.isResolved == false)] | length'

Output should be 0.