PR Review Resolver
PR의 리뷰 코멘트를 분석하고 처리합니다.
Arguments: $ARGUMENTS
모드 선택
Arguments에서 옵션을 파싱합니다:
- •
--interactive또는-i: Interactive Mode - 각 코멘트를 하나씩 확인 - •옵션 없음: Batch Mode - 모든 코멘트를 한번에 처리
공통: PR 정보 조회
1. 레포 및 PR 자동 감지
bash
# 현재 레포 정보 repo=$(command gh repo view --json nameWithOwner --jq '.nameWithOwner') owner=$(echo $repo | cut -d'/' -f1) repo_name=$(echo $repo | cut -d'/' -f2) # PR 번호 (인자가 없으면 현재 브랜치에서 감지) pr_number=$(command gh pr view --json number --jq '.number')
2. 프로젝트 가이드 문서 참조
bash
# CLAUDE.md 조회 (main 브랜치)
command gh api repos/{owner}/{repo}/contents/CLAUDE.md?ref=main \
--jq '.content' | base64 -d
3. 리뷰 코멘트 조회
bash
# 리뷰 스레드 조회 (GraphQL - resolved 상태 포함)
command gh api graphql -f query='
query($owner: String!, $repo: String!, $pr: Int!) {
repository(owner: $owner, name: $repo) {
pullRequest(number: $pr) {
reviewThreads(first: 100) {
nodes {
id
isResolved
path
line
comments(first: 10) {
nodes {
id
body
author { login }
}
}
}
}
}
}
}' -f owner={owner} -f repo={repo} -F pr={pr_number}
4. 코멘트 분류
Priority 순으로 정렬:
- •P1 (Critical): 버그, 보안 이슈, 런타임 오류
- •P2 (Major): 컨벤션 위반, 성능 이슈
- •P3 (Minor): 코드 스타일, 가독성
- •P4 (Info): 참고사항, 질문
Batch Mode (기본)
모든 코멘트를 Priority 순서로 일괄 처리:
- •해당 파일 읽기
- •코멘트 내용에 따라 코드 수정
- •수정 완료 후 다음 코멘트로
코드 수정 및 커밋
bash
# 1. 코드 수정 (Edit 도구 사용)
# 2. 타입 체크 및 린트
npm run check && npm run lint
# 3. 커밋 및 푸시
git add {modified_files}
git commit -m "fix: 리뷰 피드백 반영 - {간략 설명}
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>"
git push
결과 요약
markdown
## 리뷰 처리 결과 ### 처리된 코멘트 | Priority | 파일 | 변경 내용 | |----------|------|-----------| | P2 | src/foo.ts:42 | moment → dayjs 교체 | ### 변경된 파일 - src/foo.ts ### 다음 단계 1. `npm run build` (필요시) 2. `npm run lint:prod`
Interactive Mode (-i, --interactive)
각 코멘트를 하나씩 확인하며 처리합니다.
각 코멘트 표시 형식
markdown
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
## [1/12] @{reviewer} - {priority}
**파일:** `{path}:{line}`
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
{comment body}
### 제안 코드 (있는 경우)
```diff
- old code
+ new code
code
### 선택지 제공 **AskUserQuestion 도구**를 사용하여 선택지 제공: | 옵션 | 설명 | |------|------| | **적용** | 제안된 변경사항 그대로 적용 | | **수정 적용** | 의도를 반영하여 적절히 수정 후 적용 | | **스킵** | 이 코멘트 건너뛰기 | | **모두 적용** | 남은 모든 코멘트 Batch로 자동 적용 | | **종료** | 처리 중단하고 요약 보기 | ### 선택에 따른 처리 #### 적용 (Apply) - 제안된 코드 변경이 있으면 해당 파일의 해당 라인을 수정 - Edit 도구를 사용하여 정확한 위치에 변경 적용 #### 수정 적용 (Modify & Apply) - 해당 파일의 관련 코드를 읽어서 컨텍스트 파악 - 코멘트 의도를 반영하여 적절한 수정안 제안 - 적용 후 다음 코멘트로 #### 스킵 (Skip) - 해당 코멘트를 "skipped" 목록에 추가 - 다음 코멘트로 진행 #### 모두 적용 (Apply All) - Interactive 모드 종료 - 남은 코멘트를 Batch 모드로 자동 처리 #### 종료 (Exit) - 현재까지의 처리 결과 요약 - 남은 코멘트 목록 표시 ### 진행 상황 표시
[=====> ] 5/12 완료 | 적용: 3 | 스킵: 1 | 수정: 1
code
### 최종 요약 ```markdown ## Interactive Review 완료 ### 처리 결과 - 적용: 5개 - 수정 적용: 2개 - 스킵: 3개 - 미처리: 2개 ### 변경된 파일 1. src/foo.ts (2 changes) 2. src/bar.ts (1 change) ### 빌드 확인 필요 npm run build && npm run lint:prod
코멘트 답글 달기
bash
# 수정 완료 시
command gh api repos/{owner}/{repo}/pulls/comments/{comment_id}/replies \
-X POST \
-f body="수정했습니다. {변경 내용 요약}"
# 기존 패턴 유지 시 (반박)
command gh api repos/{owner}/{repo}/pulls/comments/{comment_id}/replies \
-X POST \
-f body="기존 패턴을 유지합니다. {사유}"
스레드 Resolve
bash
command gh api graphql -f query='
mutation($threadId: ID!) {
resolveReviewThread(input: {threadId: $threadId}) {
thread { isResolved }
}
}' -f threadId={THREAD_ID}
자동 Resolve 대상
CI에서 검증되는 항목은 자동 resolve:
- •
locales/*.json파일의 번역 문자열 누락 (Lokalise 관리) - •린트/포맷팅 관련 (CI에서 자동 수정)
패턴 분석 연동 (Confirm 필수)
리뷰 피드백 반영 중 프로젝트 패턴이 불확실할 때, 사용자 확인 후 analyze-repo-patterns 스킬을 호출합니다.
호출 시점
- •리뷰어가 "프로젝트 패턴을 따르라"고 했는데 어떤 패턴인지 불확실할 때
- •수정 방향이 여러 가지일 때 프로젝트 표준 확인 필요
- •반박 시 근거 자료가 필요할 때
1단계: 사용자 확인 (AskUserQuestion)
패턴 확인이 필요하다고 판단되면, 먼저 사용자에게 확인합니다:
json
{
"questions": [{
"question": "'{패턴명}' 패턴의 프로젝트 사용례를 확인할까요?",
"header": "패턴 확인",
"options": [
{"label": "확인", "description": "프로젝트 내 사용례와 최근 PR 분석"},
{"label": "건너뛰기", "description": "확인 없이 진행"}
],
"multiSelect": false
}]
}
2단계: 조건부 실행
- •"확인" 선택 시 → Task 도구로 패턴 분석 실행
- •"건너뛰기" 선택 시 → 분석 없이 피드백 처리 계속
3단계: 호출 방법 (승인된 경우만)
code
Task 도구 사용:
- subagent_type: "Explore"
- prompt: |
analyze-repo-patterns 스킬을 실행하여 '{패턴}' 패턴을 분석해줘.
- 현재 코드베이스에서 사용 현황
- 최근 머지된 PR에서의 사용례
- 권장 패턴 결론
예시 흐름
code
[resolve-review 진행 중...]
리뷰어 코멘트: "이 부분은 프로젝트 패턴에 맞게 수정해주세요"
Claude: 리뷰어가 프로젝트 패턴을 따르라고 했는데,
정확한 패턴을 확인하면 좋을 것 같습니다.
┌─────────────────────────────────────────┐
│ 'useDialog' 패턴의 프로젝트 사용례를 │
│ 확인할까요? │
│ │
│ [확인] [건너뛰기] │
└─────────────────────────────────────────┘
User: [확인] 클릭
Claude: [analyze-repo-patterns 실행...]
분석 결과: useDialog composable이 권장됩니다.
최근 PR #1091에서도 동일한 방식 사용.
[해당 패턴으로 코드 수정...]
반박 시 활용
분석 결과 기존 코드가 이미 프로젝트 패턴을 따르고 있다면, 근거와 함께 답글:
bash
command gh api repos/{owner}/{repo}/pulls/comments/{comment_id}/replies \
-X POST \
-f body="분석 결과 현재 구현이 프로젝트 패턴과 일치합니다.
- 동일 패턴 사용 파일: 45개
- 참고 PR: #1091, #1088
기존 방식을 유지합니다."
주의사항
- •CLAUDE.md의 컨벤션을 우선 따름
- •프로젝트 전반의 기존 패턴 확인 후 일관성 유지
- •수정 전 반드시 타입 체크/린트 통과 확인
- •반박 시에도 정중하게 사유 설명
- •패턴 확인이 필요하면 analyze-repo-patterns 스킬을 호출할 것 (사용자 confirm 필수)
Usage
bash
# Batch Mode (기본) /resolve-review /resolve-review 123 # Interactive Mode /resolve-review -i /resolve-review --interactive 123 /resolve-review -i https://github.com/org/repo/pull/123