Skip to content

[review] 인라인 쓰레드 멘션 응답 추가 - #15

Merged
Dino0204 merged 3 commits into
mainfrom
add/inline-thread-reply
Aug 19, 2026
Merged

[review] 인라인 쓰레드 멘션 응답 추가#15
Dino0204 merged 3 commits into
mainfrom
add/inline-thread-reply

Conversation

@Dino0204

Copy link
Copy Markdown
Collaborator

개요

리뷰 봇이 남긴 인라인 코멘트 쓰레드에서 @itplay-code-review-bot 으로 부르면, 그 자리의 코드와 오간 대화를 읽고 같은 쓰레드에 답글을 남깁니다. 지적의 근거를 되묻거나 수정 방향을 상의하는 용도입니다.

변경 사항

멘션 감지 (src/review/commands.ts)

부르는 이름은 src/config.tsBOT_MENTION 상수로 고정하였습니다. 인용문(>)과 코드 블록 안은 판정에서 제외해, 봇 코멘트를 인용해 답할 때 다시 트리거되지 않게 하였습니다. 같은 규칙을 hasReviewTrigger 에도 적용하였습니다.

쓰레드 조회와 답글 (src/github/client.ts)

  • getReviewThread: 쓰레드 단위 엔드포인트가 없어, PR의 리뷰 코멘트를 모두 읽어 in_reply_to_id 로 묶습니다.
  • replyToReviewComment: 뿌리 코멘트에 답글을 답니다.
  • addReactiontarget 으로 코멘트 종류를 구분합니다. id 네임스페이스가 달라, 기존 코드는 리뷰 코멘트에 리액션을 잘못 보낼 수 있었습니다.

답변 생성 (src/review/thread.ts, prompt.ts, schema.ts)

모델에는 쓰레드의 diff 조각, 해당 줄 앞뒤 40줄의 현재 파일 내용(PR head 기준), 대화 최근 20건, 리포지토리 지침(AGENTS.md / CLAUDE.md)을 싣습니다. 답변은 submit_reply 도구 호출로 받아 replySchema 로 검증하며, suggestion 은 GitHub의 코드 교체 블록이 됩니다. 도구 호출이 없으면 재시도하고, 그래도 없으면 모델 본문을 그대로 싣습니다.

이벤트 처리 (src/server/handler.ts)

이름이 고정이라 웹훅 페이로드만으로 판정이 끝나, 남을 부른 코멘트는 API를 쓰지 않고 걸러집니다. 큐 키는 쓰레드 단위로 나누었습니다. 한 PR의 여러 쓰레드에서 동시에 부를 때 하나만 답하고 나머지가 사라지기 때문입니다.

확인이 필요한 부분

GitHub App 설정에서 Pull request review comment 이벤트 구독이 켜져 있어야 합니다. 이전부터 파싱은 했으나 쓰인 적이 없어, 꺼져 있을 수 있습니다.

npm run typechecknpm run build 를 통과하였고, 멘션 판정과 프롬프트 조립, 렌더링은 따로 실행해 확인하였습니다. 쓰레드 묶기와 답글 게시는 타입 검사로 드러나지 않으므로, 이 PR의 인라인 코멘트에 직접 멘션해 확인해야 합니다.

@itplay-code-review-bot itplay-code-review-bot Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 코드 리뷰

인라인 쓰레드 멘션 응답 기능을 추가하는 PR입니다. @itplay-code-review-bot 멘션 감지, 쓰레드 조회 및 답글 게시, 답변 생성 로직이 추가되었습니다.

전반적으로 잘 설계된 변경사항이지만 몇 가지 확인이 필요한 부분이 있습니다:

  1. GitHub API 호출 제한: getReviewThread에서 per_page: 100으로 제한되어 있어, 100개 이상의 리뷰 코멘트가 있는 PR에서는 쓰레드 전체를 읽지 못할 수 있습니다.

  2. 정규식 패턴: mentionPattern 함수에서 대소문자 구분 없이 매칭하지만, BOT_MENTION 상수는 소문자로 고정되어 있어 일관성이 있습니다.

  3. 오래된 쓰레드 처리: outdated 판정이 root.line === null || root.line === undefined로 이루어지는데, 두 값의 의미 차이가 명확하지 않습니다.

  4. 재시도 로직: requestReply에서 모델이 도구를 호출하지 않을 때 2번 재시도하지만, 이 횟수가 적절한지 확인이 필요합니다.

  5. API 파라미터 누락: addReaction 함수에 target 파라미터가 추가되었지만, 기존 호출처에서 이 파라미터를 전달하지 않았을 가능성이 있습니다.

빌드와 타입 검사는 통과했으며, 실제 동작 확인은 인라인 코멘트에 멘션하여 테스트해야 합니다.

지적 사항 없음 — 변경분에서 문제를 찾지 못했다.


모델 darwin-35b-q4_k_m.gguf · 파일 10개 리뷰 · 토큰 15,658 in / 1,732 out

@Dino0204 Dino0204 self-assigned this Aug 19, 2026
@Dino0204

Copy link
Copy Markdown
Collaborator Author

/review

@itplay-code-review-bot itplay-code-review-bot Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 코드 리뷰

인라인 리뷰 쓰레드에서 @itplay-code-review-bot 멘션에 답하는 기능을 추가하는 PR입니다.

주요 변경사항:

  • src/review/thread.ts 새로 생성: 쓰레드 응답 로직, 프롬프트 조립, 파일 발췌 로직
  • src/github/client.ts: getReviewThread, replyToReviewComment, addReaction 타겟 구분 추가
  • src/server/handler.ts: 멘션 감지, 쓰레드 단위 큐 키, answerThread 호출
  • src/review/commands.ts: hasMention 함수와 인용문/코드 블록 제외 로직
  • src/review/prompt.ts: buildReplySystemPrompt, replyTools, buildReplyMessages 추가
  • src/review/render.ts: renderThreadReply 함수 추가
  • src/config.ts: BOT_MENTION 상수, threadReply 설정 추가

검토 결과:

  • 타입 검사 및 빌드 통과 확인됨
  • 멘션 판정, 프롬프트 조립, 렌더링은 별도 실행 확인
  • 쓰레드 묶기와 답글 게시는 인라인 코멘트 멘션으로 직접 확인 필요

주의사항:

  • GitHub App 설정에서 Pull request review comment 이벤트 구독이 켜져 있어야 함
  • threadReply: true 설정이 활성화되어 있어야 함

지적 사항 없음 — 변경분에서 문제를 찾지 못했다.


모델 darwin-35b-q4_k_m.gguf · 파일 10개 리뷰 · 토큰 31,376 in / 17,468 out

@Dino0204
Dino0204 merged commit 4a4e1ba into main Aug 19, 2026
4 checks passed
@Dino0204
Dino0204 deleted the add/inline-thread-reply branch August 19, 2026 06:34
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant