diffctx: LLM 리뷰를 위해 git 변경 사항을 패키징하기
요약
git 변경 사항을 LLM이나 코딩 에이전트가 이해하기 쉬운 마크다운 형식으로 변환해 주는 CLI 도구인 diffctx를 소개합니다. 토큰 효율성을 고려하여 관련 테스트 파일과 디프(diff)를 패키징하며, 보안을 위해 민감 정보를 자동으로 비식별화합니다.
핵심 포인트
- git 변경 사항을 LLM용 컨텍스트로 최적화하여 패키징
- 토큰 예산 관리를 위한 우선순위 기반 섹션 제외 기능
- PAT, API 키 등 민감 정보를 자동으로 비식별화(Redact)
- 리뷰, 수정, 요약 등 목적별 프롬프트 래퍼 제공
- 로컬 전용 도구로 네트워크 연결 및 API 키 불필요
요약 (TL;DR): 저는 git 변경 세트를 LLM이나 코딩 에이전트(coding agent)에 붙여넣을 수 있는 깔끔하고 토큰을 고려한 마크다운(markdown)으로 변환해 주는 작은 CLI 도구인 diffctx를 출시했습니다.
문제점
모델이 **PR을 리뷰(review a PR)**하거나 **방금 망가진 부분을 수정(fix what just broke)**하기를 원할 때, 유용한 컨텍스트(context)는 거의 항상 "저장소 전체"가 아닙니다. 유용한 정보는 다음과 같습니다:
- 어떤 커밋(commits)이 반영되었는지
- 어떤 파일들이 이동했는지
- 통합 디프(unified diff)
- 변경 사항을 이해하기 위해 주변 파일 내용이 충분히 포함되었는지
- 근처의 테스트(tests)
사람들은 여전히 이를 수동으로 해결합니다. git diff를 복사하고, 몇 개의 파일을 열고, 테스트를 잊어버리며, 가끔 비밀 정보를 붙여넣기도 합니다. 전체 저장소 패커(whole-repo packers, repomix 및 유사 도구들)는 "이 코드베이스를 설명해줘"라는 요청에는 훌륭하지만, "이 변경 사항을 봐줘"라는 요청에는 적절한 기본 도구가 아닙니다.
diffctx가 하는 일
# 커밋되지 않은 작업 (Uncommitted work)
diffctx
...
패키지에는 짧은 메타 테이블(meta table), 커밋 제목(commit subjects), 파일 목록, 코드 블록 형태의 통합 디프(fenced unified diff), 변경된 파일의 전체 내용, 그리고 휴리스틱(heuristically)하게 관련된 테스트 파일(foo_test.go, foo.test.ts, test_foo.py, …)이 포함됩니다.
선택 가능한 프롬프트 래퍼(prompt wrappers, review, fix, summarize)는 패키지 상단에 짧은 지시 블록을 추가하여, 첫 번째 붙여넣기부터 바로 사용 가능한 프롬프트가 되도록 합니다.
설계 선택
로컬 전용 (Local only). 모델 API 키도 필요 없고, 네트워크도 사용하지 않습니다. git 명령어를 실행하고 작업 트리(working tree)를 읽습니다.
기본적으로 비식별화 (Redact by default). 일반적인 PAT/클라우드 키/개인 키/JWT 형태는 출력 전에 [REDACTED:…] 마커로 교체됩니다. 이는 완전한 비밀 정보 스캐너(secret scanner)는 아니며 최선의 노력을 다하는 패턴 매칭(pattern matching) 방식이지만, 최악의 붙여넣기 실수를 잡아냅니다.
우선순위에 따른 예산 관리 (Budget with priorities). --budget을 설정하면 우선순위가 낮은 섹션(관련 테스트, 전체 파일 내용)이 먼저 제외됩니다. 메타 정보와 디프(diff)는 가능한 한 오래 유지됩니다.
근사치 토큰 (Approximate tokens). 토큰 계산은 문자 수 ÷ 4를 사용합니다. 컨텍스트 윈도우(context window) 내에 머물기에는 충분하지만, 과금용은 아닙니다.
설치
go install github.com/SybilGambleyyu/diffctx/cmd/diffctx@v0.1.0
소스 및 문서: github.com/SybilGambleyyu/diffctx.
이것이 아닌 것
- 코드 리뷰 _에이전트 (agent)_가 아닙니다 — 오직 컨텍스트 (context)를 준비할 뿐입니다.
- 전체 리포지토리 패커 (whole-repo packer)가 아닙니다 — 프로젝트 전체가 필요한 경우에는 repomix를 사용하세요.
- 직접 디프 (diff)를 읽는 행위를 대체하는 것이 아닙니다.
다음 단계
저는 단순히 복제본을 만드는 대신 이 프로젝트를 심화시키고 싶습니다: 더 나은 관련 파일 탐색 (related-file discovery), gh를 통한 PR 가져오기 (PR fetch), 그리고 테스트 출력 결과를 동일한 문서에 포함하는 "실패 팩 (failure pack)" 모드 등을 구현할 계획입니다. 만약 사용해 보시고 잘못된 점이나 누락된 점이 있다면, 리포지토리에 이슈 (issue)를 생성해 주세요.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기