diffmate

GitHub PR에 파일별 요약을 붙이고, 궁금한 건 그 줄에 메모로 남겨 Claude Code에게 답을 받는 크롬 확장.

쓰던 Claude Code를 그대로 쓴다. 전부 로컬에 저장되고 GitHub에는 안 올라간다.

github.com/chaeeun037/diffmate/pull/12/changes
바뀐 파일 4개
.github/workflows/
src/
constants/
hooks/
lib/
▾ src/lib/retryFetch.ts
● 중요 재시도 래퍼에 최대 횟수를 붙였다. 멈추는 조건이 틀리면 실패한 요청이 탭 닫을 때까지 반복된다.
…@@ -12,6 +12,14 @@
13 let attempt = 0;
14 while (attempt < MAX_ATTEMPTS) {
질문답변됨L14
재귀 말고 반복문 쓴 이유가 뭐야? 이러면 호출한 쪽이 멈춰 있는 거 아냐?
안 멈춘다. 시도마다 기다리니까 그 사이에 다른 일이 돈다. 재귀로 하면 재시도 한 번에 호출 기록이 한 겹씩 쌓여서, 실패했을 때 원래 오류가 그 밑에 묻힌다.
15 const res = await fetch(url, init);
▸ src/hooks/useSession.ts
◐ 보통 로그인 상태 읽는 훅을 고쳤다. 첫 렌더에 값이 undefined라 그대로 분기하면 로그아웃 화면이 깜빡인다.
✓ 질문파일
로그인 상태를 prop으로 안 내리고 훅에서 읽는 이유가 뭐야?
다섯 화면이 읽는다. prop으로 내리면 중간 레이아웃마다 다 거쳐 가야 한다.
▸ src/constants/LogType.ts
○ 훑기 로그 이름 3개 등록.
메모 2 · 미답변 0 · 요약 4

기능

파일 요약 — 변경 파일마다 한 줄. 뭘 바꿨는지와 그게 틀리면 뭐가 깨지는지를 같이 쓴다. 옆의 표시는 틀렸을 때 번지는 범위다(중요·보통·훑기). GitHub은 파일을 경로순으로 늘어놓아서 위험한 파일이 맨 아래 깔리는데, 목록만 훑어도 어디부터 볼지 정해진다.

▸ src/api/client.ts
● 중요 토큰 갱신을 인터셉터로 옮겼다. 갱신이 실패했는데 원래 요청을 다시 보내면 무한 재시도가 된다.

메모 — 줄에 마우스를 올리면 버튼이 뜬다. 눌러서 쓰면 그 줄에 카드가 붙고, 답과 되물음이 같은 카드에 쌓인다. 남한테 보이는 건 GitHub 코멘트를 쓰면 되고, 이건 나랑 클로드 사이라 아무도 안 본다.

▾ src/api/client.ts
42 if (!refreshed) return Promise.reject(error);
질문답변됨L42
갱신 실패하면 그냥 튕기는 거야? 쓰던 입력은 어떻게 돼?
사라진다. 갱신 실패는 로그아웃으로 처리해서 로그인 화면으로 보낸다. 입력을 살리려면 임시 저장이 따로 필요한데 이번 범위는 아니다.
⌘Enter 저장

바뀐 파일 트리 — 파일 목록 위에 바뀐 파일 전체가 트리로 뜬다. 파일마다 위험 표시(● 중요 · ◐ 보통 · ○ 훑기)와 메모 개수가 붙고, 하위 폴더가 하나뿐인 폴더는 GitHub처럼 한 줄로 합친다. 파일을 누르면 그 자리로 간다. 접어 두면 다음에 열어도 접혀 있다.

바뀐 파일 3개
src/api/
tests/api/

종류와 답변 여부 — 카드마다 질문·요청·메모 중 뭔지 표시가 붙고, 질문과 요청에는 클로드가 답했는지도 붙는다. 메모는 나만 보려고 남기는 거라 답변 표시가 없다.

질문미답변L42
갱신 요청 자체가 401로 떨어지면 이것도 잡혀?
요청답변됨L18–24
재시도 간격을 상수로 빼줘.
메모파일
나중에 앱은 이걸 어떻게 처리하는지 비교해 보기.

메모 사이 이동 — ⌥J는 다음 메모, ⌥K는 이전 메모로 간다. 도착한 카드가 잠깐 반짝인다. 메모를 쓰는 중에는 이 키를 가로채지 않는다.

구조

확장이 클로드와 직접 통신하지는 않는다. 사이에 로컬 파일과 터미널이 있다.

브라우저(확장)  ──저장──▶  ~/.diffmate/<레포>/<PR번호>.json
                                    │  ▲
                                    ▼  │  CLI로 읽고 쓴다
                          터미널의 Claude Code
                          "파일 요약 채워줘" / "메모 답변 달아줘"
  1. 요약 채우기 — PR을 올린 뒤 터미널에서 Claude Code에게 시킨다. 파일마다 한 줄이 json에 들어가고, 브라우저를 열면 붙어 있다.
  2. 메모 쓰기 — 브라우저에서 쓰면 같은 json에 저장된다.
  3. 답 받기 — 터미널로 가서 "메모 답변 달아줘"라고 한다. 답이 json에 들어가고 브라우저 카드에 뜬다. 새로고침은 필요 없다(3초마다 다시 읽는다).