[review] 인라인 쓰레드 멘션 응답 추가 - #15
Conversation
There was a problem hiding this comment.
🤖 코드 리뷰
인라인 쓰레드 멘션 응답 기능을 추가하는 PR입니다. @itplay-code-review-bot 멘션 감지, 쓰레드 조회 및 답글 게시, 답변 생성 로직이 추가되었습니다.
전반적으로 잘 설계된 변경사항이지만 몇 가지 확인이 필요한 부분이 있습니다:
-
GitHub API 호출 제한:
getReviewThread에서per_page: 100으로 제한되어 있어, 100개 이상의 리뷰 코멘트가 있는 PR에서는 쓰레드 전체를 읽지 못할 수 있습니다. -
정규식 패턴:
mentionPattern함수에서 대소문자 구분 없이 매칭하지만,BOT_MENTION상수는 소문자로 고정되어 있어 일관성이 있습니다. -
오래된 쓰레드 처리:
outdated판정이root.line === null || root.line === undefined로 이루어지는데, 두 값의 의미 차이가 명확하지 않습니다. -
재시도 로직:
requestReply에서 모델이 도구를 호출하지 않을 때 2번 재시도하지만, 이 횟수가 적절한지 확인이 필요합니다. -
API 파라미터 누락:
addReaction함수에target파라미터가 추가되었지만, 기존 호출처에서 이 파라미터를 전달하지 않았을 가능성이 있습니다.
빌드와 타입 검사는 통과했으며, 실제 동작 확인은 인라인 코멘트에 멘션하여 테스트해야 합니다.
지적 사항 없음 — 변경분에서 문제를 찾지 못했다.
모델 darwin-35b-q4_k_m.gguf · 파일 10개 리뷰 · 토큰 15,658 in / 1,732 out
|
/review |
There was a problem hiding this comment.
🤖 코드 리뷰
인라인 리뷰 쓰레드에서 @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
개요
리뷰 봇이 남긴 인라인 코멘트 쓰레드에서
@itplay-code-review-bot으로 부르면, 그 자리의 코드와 오간 대화를 읽고 같은 쓰레드에 답글을 남깁니다. 지적의 근거를 되묻거나 수정 방향을 상의하는 용도입니다.변경 사항
멘션 감지 (
src/review/commands.ts)부르는 이름은
src/config.ts의BOT_MENTION상수로 고정하였습니다. 인용문(>)과 코드 블록 안은 판정에서 제외해, 봇 코멘트를 인용해 답할 때 다시 트리거되지 않게 하였습니다. 같은 규칙을hasReviewTrigger에도 적용하였습니다.쓰레드 조회와 답글 (
src/github/client.ts)getReviewThread: 쓰레드 단위 엔드포인트가 없어, PR의 리뷰 코멘트를 모두 읽어in_reply_to_id로 묶습니다.replyToReviewComment: 뿌리 코멘트에 답글을 답니다.addReaction이target으로 코멘트 종류를 구분합니다. 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 typecheck와npm run build를 통과하였고, 멘션 판정과 프롬프트 조립, 렌더링은 따로 실행해 확인하였습니다. 쓰레드 묶기와 답글 게시는 타입 검사로 드러나지 않으므로, 이 PR의 인라인 코멘트에 직접 멘션해 확인해야 합니다.