프로젝트 소개

## 개요 `prod-code`는 AI 코딩 에이전트 플릿을 위해 설계된 원격 코드 인텔리전스 서버입니다. 언어 분석, 빌드, 테스트를 개발자의 노트북에서 LAN 노드로 옮기면서 편집 경험은 로컬로 유지합니다. 이 시스템은 체크아웃을 게이트웨이로 미러링하며, 게이트웨이는 웜 분석기(rust-analyzer는 인프로세스, gopls, clangd, TypeScript, pyright, sourcekit-lsp는 자식 프로세스)를 유지하고 그곳에서 명령을 실행합니다. 에이전트는 MCP 도구를 통해 접근하고, 편집기는 드롭인 언어 서버로 사용할 수 있습니다. ## 주요 기능 - **원격 분석**: 언어 서버가 노트북이 아닌 LAN 노드에서 실행되어 로컬 CPU 및 메모리 부하를 줄입니다. - **MCP 통합**: Model Context Protocol을 통해 AI 에이전트(Claude, Codex, Gemini)에 도구를 노출합니다. - **편집기 지원**: Zed 같은 편집기의 언어 서버로 동작하며, 설정 및 저장 이벤트를 위한 프로토콜 브리징을 제공합니다. - **다중 언어**: Rust, Go, C/C++, TypeScript/JavaScript, Python, Swift를 지원합니다. - **안전한 리팩터링**: 시맨틱 이름 변경, 시그니처 변경, 이동, 추출 등을 위한 도구를 제공하며, 두 번째 분석기에서 검증합니다. - **빌드/테스트 실행**: 명령이 웜 캐시가 있는 노드에서 실행되고, 결과와 파일 변경 사항이 다시 동기화됩니다. - **클러스터 지원**: 여러 노드가 부하와 언어 지원에 따라 워크스페이스를 가십하고 분배할 수 있습니다. ## 에이전트용 도구 MCP 서버는 포괄적인 도구 세트를 제공합니다: - **코드 찾기**: `code_search`, `code_symbols`, `code_definition`, `code_references`, `code_callers`, `code_callees`, `code_implementations`, `code_supertypes`, `code_outline`, `code_source`. - **이해**: `code_slice`, `code_hover`, `code_type_at`, `code_impact`, `code_dead_code`, `code_prune_orphans`. - **안전하게 변경**: `code_validate_edit`, `code_diagnostics`, `code_rename`, `code_safe_delete`, `code_change_signature`, `code_move`, `code_extract_function`, `code_introduce_parameter_object`, `code_migrate_type`, `code_generify`, `code_invert_boolean`, `code_make_static`, `code_inline_parameter`, `code_extract_delegate`, `code_extract_trait`, `code_loop_to_iterator`, `code_introduce_variable`, `code_convert_to_method`, `code_wrap_return`, `code_extract_field`, `code_encapsulate_field`, `code_schema_rename`, `code_assists`, `code_codemod`, `code_generate_fixture`, `code_shadow_run`. - **실행**: `code_check`, `code_lint`, `code_test`, `code_benchmarks`, `code_exec`, `code_diagnose_failure`. - **운영**: `code_status`, `code_sync`. 모든 위치 기반 도구는 파일/줄 대신 `symbol` 인수도 받으므로, 에이전트가 줄 번호를 찾기 위해 grep할 필요가 없습니다. ## 작동 방식 - **미러링된 체크아웃**: 첫 접촉 시 경로, 크기, 해시의 매니페스트를 전송하고, 게이트웨이는 원본 저장소에서 워크트리를 시드하고 누락된 파일만 동기화합니다. 이후 동기화는 워터마크와 diff를 사용합니다. - **워크트리당 하나의 분석기**: 각 git 워크트리는 자체 서버 워크스페이스와 데이터베이스를 가지며, 교차 오염을 방지합니다. 엔진은 30분 동안 유휴 상태가 될 때까지 상주합니다. - **두 번째 분석기에서 검증**: 편집 제안은 별도의 엔진에서 검사되어 메인 분석기의 상태를 오염시키지 않습니다. - **노드에서 빌드 및 테스트**: 명령은 워크스페이스 자체의 `target/` 디렉터리에서 실행되어 캐시를 따뜻하게 유지합니다. 변경된 파일은 체크아웃에 다시 기록됩니다. - **클러스터 가십**: 노드는 5초마다 가십하며, 클라이언트는 하나의 시드 주소만 필요합니다. 배치는 기존 보유 및 부하를 고려합니다. ## 설치 ```sh # 클라이언트 (단일 바이너리; 게이트웨이는 같은 바이너리의 형제) cargo install --path crates/prod-code-client # Claude에 등록 claude mcp add --scope user prod-code -e PROD_CODE_REMOTE=192.0.2.10:9400 -- prod-code mcp # Codex에 등록 codex mcp add prod-code --env PROD_CODE_REMOTE=192.0.2.10:9400 -- prod-code mcp # 노드에서 prod-code-server --bind 0.0.0.0:9400 --storage /srv/prod-code/workspaces \ --advertise <this host>:9400 --peers <other nodes> ``` ## 편집기 사용 `prod-code lsp`는 편집기의 언어 서버 역할을 합니다. 언어 자체의 서버는 노드에서 실행되고, 브리지가 프로토콜을 양방향으로 전달합니다. Zed의 경우 `editors/zed`에 전용 확장이 있거나, Zed의 rust-analyzer를 `prod-code lsp --language rust`로 지정할 수 있습니다. ## 구성 저장소별 옵션은 체크아웃 루트의 `prod-code.toml`에서 설정할 수 있습니다. 예를 들어 Rust 기능 플래그, sysroot 사용, 대상 선택 등이 있습니다. ## 메트릭 및 운영 모든 쿼리, 명령, 동기화 라운드는 이벤트(에이전트, 호스트, 워크스페이스, 메서드, 기간, 성공)로 JSONL 파일에 기록됩니다. `prod-code metrics`는 클러스터 전체에서 p50 및 p95로 집계합니다. macOS 노드용 배포 스크립트는 서명 및 launchd 설정을 처리합니다. ## 현장 평가 이 프로젝트는 표준화된 67개 도구 프로토콜을 사용하여 주요 오픈 소스 저장소(ripgrep, tantivy, tokio, polars, uv, bevy, prometheus, kubernetes, etcd, django, black)에 대한 평가를 포함하며, 자세한 블로그 보고서가 링크되어 있습니다. ## 요구 사항 빌드에는 Rust 1.95.0 이상이 필요합니다. rustup으로 설치하세요: ```sh rustup toolchain install 1.95.0 --profile minimal -c rustfmt -c clippy ``` ## 라이선스 MIT / Apache-2.0 이중 라이선스.