Skip to content

Latest commit

 

History

History
306 lines (235 loc) · 17.3 KB

File metadata and controls

306 lines (235 loc) · 17.3 KB

code-review-graph

토큰 낭비를 멈추세요. 더 스마트하게 리뷰하세요.

English | 简体中文 | 日本語 | 한국어 | हिन्दी

PyPI Downloads Stars MIT Licence CI Python 3.10+ MCP Website Discord


AI 코딩 도구는 매 작업마다 전체 코드베이스를 다시 읽습니다. code-review-graph는 이 문제를 해결합니다. Tree-sitter로 코드의 구조적 맵을 구축하고, 변경 사항을 점진적으로 추적하며, MCP를 통해 AI 어시스턴트에게 정확한 컨텍스트를 제공하여 필요한 부분만 읽도록 합니다.

토큰 문제: 6개 실제 저장소에서 평균 8.2배 토큰 절감


빠른 시작

pip install code-review-graph                     # 또는: pipx install code-review-graph
code-review-graph install          # 지원되는 모든 플랫폼을 자동 감지하고 설정
code-review-graph build            # 코드베이스 파싱

하나의 명령으로 모든 설정이 완료됩니다. install은 사용 중인 AI 코딩 도구를 감지하고, 각 도구에 맞는 MCP 설정을 작성하며, 플랫폼 규칙에 그래프 인식 지침을 주입합니다. uvx 또는 pip/pipx 중 어떤 방식으로 설치했는지 자동 감지하여 올바른 설정을 생성합니다. 설치 후 에디터/도구를 재시작하세요.

한 번의 설치로 모든 플랫폼 지원: Codex, Claude Code, Cursor, Windsurf, Zed, Continue, OpenCode, Antigravity, Kiro 자동 감지

특정 플랫폼만 설정하려면:

code-review-graph install --platform codex       # Codex만 설정
code-review-graph install --platform cursor      # Cursor만 설정
code-review-graph install --platform claude-code  # Claude Code만 설정
code-review-graph install --platform kiro         # Kiro만 설정

Python 3.10 이상이 필요합니다. 최상의 경험을 위해 uv를 설치하세요 (MCP 설정은 uvx가 있으면 이를 사용하고, 없으면 code-review-graph 명령을 직접 사용합니다).

프로젝트를 열고 AI 어시스턴트에게 다음과 같이 요청하세요:

Build the code review graph for this project

초기 빌드는 500개 파일 프로젝트 기준 약 10초가 소요됩니다. 이후에는 파일 편집 및 git 커밋마다 그래프가 자동으로 업데이트됩니다.


작동 원리

AI 어시스턴트의 그래프 활용: 사용자가 리뷰 요청, AI가 MCP 도구 확인, 그래프가 영향 범위와 위험 점수 반환, AI가 필요한 부분만 읽음

저장소를 Tree-sitter로 AST로 파싱하고, 노드(함수, 클래스, import)와 엣지(호출, 상속, 테스트 커버리지)의 그래프로 SQLite에 저장한 후, 리뷰 시점에 쿼리하여 AI 어시스턴트가 읽어야 할 최소한의 파일 집합을 계산합니다.

아키텍처 파이프라인: 저장소에서 Tree-sitter 파서, SQLite 그래프, 영향 범위, 최소 리뷰 세트까지

영향 범위 분석

파일이 변경되면, 그래프는 영향을 받을 수 있는 모든 호출자, 의존 대상, 테스트를 추적합니다. 이것이 변경의 "영향 범위"입니다. AI는 전체 프로젝트를 스캔하는 대신 이 파일들만 읽습니다.

login() 변경이 호출자, 의존 대상, 테스트로 전파되는 영향 범위 시각화

2초 미만의 점진적 업데이트

git 커밋이나 파일 저장마다 훅이 실행됩니다. 그래프는 변경된 파일을 비교하고, SHA-256 해시 검사를 통해 의존 대상을 찾으며, 변경된 부분만 다시 파싱합니다. 2,900개 파일 프로젝트의 재인덱싱이 2초 이내에 완료됩니다.

점진적 업데이트 흐름: git 커밋이 diff를 트리거하고, 의존 대상을 찾고, 5개 파일만 다시 파싱하며 2,910개는 건너뜀

모노레포 문제 해결

대규모 모노레포에서 토큰 낭비가 가장 심합니다. 그래프는 불필요한 파일을 제거합니다 -- 27,700개 이상의 파일이 리뷰 컨텍스트에서 제외되고, 실제로 읽는 파일은 약 15개뿐입니다.

Next.js 모노레포: 27,732개 파일이 code-review-graph를 거쳐 약 15개 파일로 -- 49배 적은 토큰

23개 언어 + Jupyter 노트북

카테고리별 19개 언어: 웹, 백엔드, 시스템, 모바일, 스크립팅, 그리고 Jupyter/Databricks 노트북 지원

모든 언어에서 함수, 클래스, import, 호출 위치, 상속, 테스트 감지를 위한 완전한 Tree-sitter 문법을 지원합니다. Zig, PowerShell, Julia, Svelte SFC도 포함됩니다. 다중 언어 셀 지원(Python, R, SQL)이 가능한 Jupyter/Databricks 노트북(.ipynb) 파싱과 Perl XS 파일(.xs)도 지원합니다.


벤치마크

실제 저장소 벤치마크: 4.9배에서 27.3배 적은 토큰, 더 높은 리뷰 품질

모든 수치는 6개 실제 오픈소스 저장소(총 13개 커밋)에 대한 자동화된 평가 실행 결과입니다. code-review-graph eval --all로 재현할 수 있습니다. 원본 데이터는 evaluate/reports/summary.md에 있습니다.

전체 벤치마크 결과는 영문 README를 참조하세요.


기능

기능 세부 사항
점진적 업데이트 변경된 파일만 다시 파싱합니다. 이후 업데이트는 2초 이내에 완료됩니다.
23개 언어 + 노트북 Python, TypeScript/TSX, JavaScript, Vue, Svelte, Go, Rust, Java, Scala, C#, Ruby, Kotlin, Swift, PHP, Solidity, C/C++, Dart, R, Perl, Lua, Zig, PowerShell, Julia, Jupyter/Databricks (.ipynb)
영향 범위 분석 변경에 의해 영향 받는 함수, 클래스, 파일을 정확히 보여줍니다
자동 업데이트 훅 수동 개입 없이 파일 편집 및 git 커밋마다 그래프가 업데이트됩니다
시맨틱 검색 sentence-transformers, Google Gemini, MiniMax를 통한 선택적 벡터 임베딩
인터랙티브 시각화 검색, 커뮤니티 범례 토글, 차수 기반 노드 크기 조정이 가능한 D3.js 포스 다이렉티드 그래프
허브 및 브릿지 감지 가장 많이 연결된 노드와 매개 중심성을 통한 아키텍처 병목 지점 탐색
서프라이즈 스코어링 예상치 못한 결합 감지: 커뮤니티 간, 언어 간, 주변부-허브 엣지
지식 격차 분석 고립된 노드, 테스트되지 않은 핫스팟, 얇은 커뮤니티, 구조적 약점 식별
질문 제안 그래프 분석(브릿지, 허브, 서프라이즈)을 기반으로 자동 생성되는 리뷰 질문
엣지 신뢰도 엣지에 실수 점수를 포함한 3단계 신뢰도 평가 (EXTRACTED/INFERRED/AMBIGUOUS)
그래프 탐색 임의 노드에서 설정 가능한 깊이와 토큰 예산으로 자유 형식 BFS/DFS 탐색
내보내기 형식 GraphML (Gephi/yEd), Neo4j Cypher, Obsidian vault (위키링크), SVG 정적 그래프
그래프 비교 시간에 따른 그래프 스냅샷 비교: 새로운/삭제된 노드, 엣지, 커뮤니티 변경
토큰 벤치마킹 전체 코퍼스 토큰 대비 그래프 쿼리 토큰을 질문별 비율로 측정
메모리 루프 Q&A 결과를 마크다운으로 저장하여 재수집, 쿼리로 그래프가 성장
커뮤니티 자동 분할 과대 커뮤니티(그래프의 25% 초과)를 Leiden 알고리즘으로 재귀적 분할
실행 흐름 가중 중요도 순으로 정렬된 진입점에서의 호출 체인 추적
커뮤니티 감지 대규모 그래프를 위한 해상도 스케일링이 포함된 Leiden 알고리즘으로 관련 코드 클러스터링
아키텍처 개요 결합 경고가 포함된 자동 생성 아키텍처 맵
위험 점수 리뷰 detect_changes가 diff를 영향 받는 함수, 흐름, 테스트 격차에 매핑
리팩토링 도구 이름 변경 미리보기, 프레임워크 인식 데드 코드 감지, 커뮤니티 기반 제안
위키 생성 커뮤니티 구조에서 마크다운 위키 자동 생성
멀티 레포 레지스트리 여러 저장소를 등록하고 모든 저장소에서 검색
MCP 프롬프트 5개 워크플로 템플릿: 리뷰, 아키텍처, 디버그, 온보딩, 사전 머지 검사
전문 검색 FTS5 기반 키워드와 벡터 유사도를 결합한 하이브리드 검색
로컬 스토리지 .code-review-graph/에 SQLite 파일 저장. 외부 데이터베이스나 클라우드 의존성 없음.
감시 모드 작업 중 지속적인 그래프 업데이트

사용법

슬래시 명령
명령 설명
/code-review-graph:build-graph 코드 그래프 빌드 또는 재빌드
/code-review-graph:review-delta 마지막 커밋 이후 변경 사항 리뷰
/code-review-graph:review-pr 영향 범위 분석을 포함한 전체 PR 리뷰
CLI 레퍼런스
code-review-graph install          # 모든 플랫폼 자동 감지 및 설정
code-review-graph install --platform <name>  # 특정 플랫폼 지정
code-review-graph build            # 전체 코드베이스 파싱
code-review-graph update           # 점진적 업데이트 (변경 파일만)
code-review-graph status           # 그래프 통계
code-review-graph watch            # 파일 변경 시 자동 업데이트
code-review-graph visualize        # 인터랙티브 HTML 그래프 생성
code-review-graph visualize --format graphml   # GraphML로 내보내기
code-review-graph visualize --format svg       # SVG로 내보내기
code-review-graph visualize --format obsidian  # Obsidian vault로 내보내기
code-review-graph visualize --format cypher    # Neo4j Cypher로 내보내기
code-review-graph wiki             # 커뮤니티에서 마크다운 위키 생성
code-review-graph detect-changes   # 위험 점수 기반 변경 영향 분석
code-review-graph register <path>  # 멀티 레포 레지스트리에 저장소 등록
code-review-graph unregister <id>  # 레지스트리에서 저장소 제거
code-review-graph repos            # 등록된 저장소 목록
code-review-graph eval             # 평가 벤치마크 실행
code-review-graph serve            # MCP 서버 시작
28개 MCP 도구

그래프가 빌드되면 AI 어시스턴트가 이 도구들을 자동으로 사용합니다.

도구 설명
build_or_update_graph_tool 그래프 빌드 또는 점진적 업데이트
get_minimal_context_tool 초소형 컨텍스트 (~100 토큰) -- 이것을 먼저 호출
get_impact_radius_tool 변경된 파일의 영향 범위
get_review_context_tool 구조적 요약이 포함된 토큰 최적화 리뷰 컨텍스트
query_graph_tool 호출자, 피호출자, 테스트, import, 상속 쿼리
traverse_graph_tool 토큰 예산으로 임의 노드에서 BFS/DFS 탐색
semantic_search_nodes_tool 이름이나 의미로 코드 엔티티 검색
embed_graph_tool 시맨틱 검색을 위한 벡터 임베딩 계산
list_graph_stats_tool 그래프 크기 및 상태
get_docs_section_tool 문서 섹션 조회
find_large_functions_tool 줄 수 임계값을 초과하는 함수/클래스 찾기
list_flows_tool 중요도 순으로 정렬된 실행 흐름 목록
get_flow_tool 단일 실행 흐름의 세부 정보
get_affected_flows_tool 변경된 파일에 영향 받는 흐름 찾기
list_communities_tool 감지된 코드 커뮤니티 목록
get_community_tool 단일 커뮤니티의 세부 정보
get_architecture_overview_tool 커뮤니티 구조의 아키텍처 개요
detect_changes_tool 코드 리뷰를 위한 위험 점수 기반 변경 영향 분석
get_hub_nodes_tool 가장 많이 연결된 노드 (아키텍처 핫스팟) 찾기
get_bridge_nodes_tool 매개 중심성을 통한 병목 지점 찾기
get_knowledge_gaps_tool 구조적 약점 및 테스트되지 않은 핫스팟 식별
get_surprising_connections_tool 예상치 못한 커뮤니티 간 결합 감지
get_suggested_questions_tool 분석에서 자동 생성된 리뷰 질문
refactor_tool 이름 변경 미리보기, 데드 코드 감지, 제안
apply_refactor_tool 미리보기한 리팩토링 적용
generate_wiki_tool 커뮤니티에서 마크다운 위키 생성
get_wiki_page_tool 특정 위키 페이지 조회
list_repos_tool 등록된 저장소 목록
cross_repo_search_tool 등록된 모든 저장소에서 검색

MCP 프롬프트 (5개 워크플로 템플릿): review_changes, architecture_map, debug_issue, onboard_developer, pre_merge_check

설정

인덱싱에서 경로를 제외하려면 저장소 루트에 .code-review-graphignore 파일을 생성하세요:

generated/**
*.generated.ts
vendor/**
node_modules/**

참고: git 저장소에서는 추적되는 파일만 인덱싱됩니다 (git ls-files). gitignore된 파일은 자동으로 건너뜁니다. .code-review-graphignore는 추적되는 파일을 제외하거나 git을 사용할 수 없을 때 사용합니다.

선택적 의존성 그룹:

pip install code-review-graph[embeddings]          # 로컬 벡터 임베딩 (sentence-transformers)
pip install code-review-graph[google-embeddings]   # Google Gemini 임베딩
pip install code-review-graph[communities]         # 커뮤니티 감지 (igraph)
pip install code-review-graph[eval]                # 평가 벤치마크 (matplotlib)
pip install code-review-graph[wiki]                # LLM 요약 위키 생성 (ollama)
pip install code-review-graph[all]                 # 모든 선택적 의존성

기여

git clone https://github.com/tirth8205/code-review-graph.git
cd code-review-graph
python3 -m venv .venv && source .venv/bin/activate
pip install -e ".[dev]"
pytest
새 언어 추가

code_review_graph/parser.py를 편집하여 EXTENSION_TO_LANGUAGE에 확장자를 추가하고, _CLASS_TYPES, _FUNCTION_TYPES, _IMPORT_TYPES, _CALL_TYPES에 노드 타입 매핑을 추가하세요. 테스트 픽스처를 포함하여 PR을 제출하세요.

라이선스

MIT. LICENSE를 참조하세요.


code-review-graph.com

pip install code-review-graph && code-review-graph install
Codex, Claude Code, Cursor, Windsurf, Zed, Continue, OpenCode, Antigravity, Kiro에서 사용 가능