프로젝트 소개
diffctx는 LLM이 git diff를 검토하는 데 필요한 최소한의 코드 컨텍스트를 선택하는 CLI 도구이자 MCP 서버입니다. 전체 파일을 붙여넣는 대신, 50개 이상의 파일 유형에 걸쳐 코드 그래프(임포트, 동시 변경, 타입 참조)를 구축하고, 변경된 줄로부터 관련성을 외부로 전파하며, 관련성이 임계값 아래로 떨어지거나 토큰 예산 상한에 도달하면 중단합니다.
주요 기능:
- Diff 컨텍스트 모드: git 범위(HEAD~1..HEAD, main..feature) 또는 기간 창(24h, 8d, 90min)을 받아들이며, 기간 창의 경우 해당 창 이전의 마지막 커밋과 작업 트리를 diff합니다. Markdown, JSON 또는 YAML을 출력합니다.
- 다양한 스코어링 알고리즘: ego(제한된 확장), PPR(Personalized PageRank), BM25(어휘 검색), RRF(상호 순위 융합), PIT(백분위 융합).
- o200k_base 토크나이저를 사용한 토큰 예산 책정; 예산은 렌더링된 결과물을 제한하며, 각 변경된 파일이 witness 조각을 받은 후 남은 공간을 관련성으로 채웁니다.
- graph 하위 명령: Mermaid, JSON 또는 GraphML 출력을 통해 의존성 그래프를 직접 탐색; 사이클, 핫스팟, 결합도 메트릭을 포함합니다.
- 전체 코드베이스 내보내기 모드: 구성 가능한 깊이, 무시 패턴, 클립보드 지원을 갖춘 Markdown/JSON 트리 출력.
- MCP 서버: AI 어시스턴트(Claude Code, Cursor, Windsurf, Codex CLI, Gemini CLI, VS Code)가 코드 리뷰 중 호출할 수 있는 diffctx_context 도구를 노출합니다. 공식 MCP 레지스트리에 게시되어 있습니다.
- Python API: 프로그래밍 방식 사용을 위한 build_diff_context() 및 map_directory() 함수.
설치는 uvx, pipx, pip, cargo, npm, Docker, Windows의 Scoop을 통해 가능합니다. 사전 빌드된 바이너리는 Linux(x86_64/aarch64), macOS(arm64/x86_64), Windows(x64/arm64)를 지원합니다. 네이티브 바이너리와 Docker 이미지는 YAML/JSON 출력을 사용하는 diff 모드를 처리하며, tree 모드, Markdown 출력, graph 하위 명령, MCP 서버는 Python 패키지가 필요합니다.
이 도구는 .gitignore와 .diffctx/ignore를 계층적으로 준수하고, 비밀스러운 경로를 자동으로 필터링하며, blob별 토큰화를 캐시하고, 토큰 수를 stderr에 보고합니다. 종료 코드는 성공, 런타임 오류, 사용 오류, 환경 오류, 빈 diff 시나리오를 구분합니다. Apache 2.0 라이선스입니다.
Comments
0 people shared their preference · Deer Point appears after 10 participants
Sign in to join the discussion.