Sobre o projeto

## Visão geral `prod-code` é um servidor remoto de inteligência de código projetado para frotas de agentes de codificação com IA. Ele move a análise de linguagem, builds e testes do laptop do desenvolvedor para um nó da LAN, mantendo a experiência de edição local. O sistema espelha checkouts para um gateway que mantém analisadores aquecidos (rust-analyzer em processo; gopls, clangd, TypeScript, pyright, sourcekit-lsp como filhos) e executa comandos ali. Agentes acessam via ferramentas MCP, e editores podem usá-lo como um language server substituto direto. ## Principais recursos - **Análise remota**: Language servers rodam num nó da LAN, não no laptop, reduzindo a carga local de CPU e memória. - **Integração MCP**: Expõe ferramentas para agentes de IA (Claude, Codex, Gemini) via Model Context Protocol. - **Suporte a editores**: Funciona como language server para editores como Zed, com ponte de protocolo para configurações e eventos de salvamento. - **Multi-linguagem**: Suporta Rust, Go, C/C++, TypeScript/JavaScript, Python e Swift. - **Refatoração segura**: Ferramentas para renomeação semântica, mudanças de assinatura, mover, extrair e mais, com validação num segundo analisador. - **Execução de build/teste**: Comandos rodam no nó com caches aquecidos; resultados e mudanças de arquivos sincronizam de volta. - **Suporte a cluster**: Múltiplos nós podem fazer gossip e distribuir workspaces com base em carga e suporte de linguagem. ## Ferramentas para agentes O servidor MCP fornece um conjunto abrangente de ferramentas: - **Encontrar código**: `code_search`, `code_symbols`, `code_definition`, `code_references`, `code_callers`, `code_callees`, `code_implementations`, `code_supertypes`, `code_outline`, `code_source`. - **Entender**: `code_slice`, `code_hover`, `code_type_at`, `code_impact`, `code_dead_code`, `code_prune_orphans`. - **Alterar com segurança**: `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`. - **Executar**: `code_check`, `code_lint`, `code_test`, `code_benchmarks`, `code_exec`, `code_diagnose_failure`. - **Operar**: `code_status`, `code_sync`. Todas as ferramentas baseadas em posição também aceitam um argumento `symbol` em vez de arquivo/linha, então agentes não precisam usar grep para números de linha. ## Como funciona - **Checkouts espelhados**: O primeiro contato envia um manifesto de caminhos, tamanhos e hashes; o gateway semeia um worktree a partir do repositório de origem e sincroniza apenas arquivos ausentes. Sincronizações subsequentes usam marcas d'água e diffs. - **Um analisador por worktree**: Cada git worktree recebe seu próprio workspace de servidor e banco de dados, evitando contaminação cruzada. Os motores permanecem residentes até ficarem ociosos por 30 minutos. - **Validação num segundo analisador**: Propostas de edição são verificadas num motor separado para evitar poluir o estado do analisador principal. - **Builds e testes no nó**: Comandos rodam no diretório `target/` do próprio workspace, mantendo caches aquecidos. Arquivos alterados são gravados de volta no checkout. - **Gossip de cluster**: Nós fazem gossip a cada 5 segundos; um cliente precisa de um endereço semente. O posicionamento considera posses existentes e carga. ## Instalação ```sh # Cliente (um binário; o gateway é irmão do mesmo binário) cargo install --path crates/prod-code-client # Registrar com Claude claude mcp add --scope user prod-code -e PROD_CODE_REMOTE=192.0.2.10:9400 -- prod-code mcp # Registrar com Codex codex mcp add prod-code --env PROD_CODE_REMOTE=192.0.2.10:9400 -- prod-code mcp # Num nó prod-code-server --bind 0.0.0.0:9400 --storage /srv/prod-code/workspaces \ --advertise <this host>:9400 --peers <other nodes> ``` ## Uso no editor `prod-code lsp` atua como o language server de um editor. O servidor da própria linguagem roda no nó, e a ponte carrega o protocolo nos dois sentidos. Para Zed, há uma extensão dedicada em `editors/zed`, ou você pode apontar o rust-analyzer do Zed para `prod-code lsp --language rust`. ## Configuração Opções por repositório podem ser definidas num `prod-code.toml` na raiz do checkout, por exemplo, flags de feature do Rust, uso de sysroot e seleção de target. ## Métricas e operações Cada consulta, comando e rodada de sincronização é registrada como um evento (agente, host, workspace, método, duração, sucesso) num arquivo JSONL. `prod-code metrics` agrega pelo cluster com p50 e p95. Um script de deploy para nós macOS cuida de assinatura e configuração do launchd. ## Avaliações de campo O projeto inclui avaliações contra repositórios open-source proeminentes (ripgrep, tantivy, tokio, polars, uv, bevy, prometheus, kubernetes, etcd, django, black) usando um protocolo padronizado de 67 ferramentas, com relatórios detalhados de blog vinculados. ## Requisitos A compilação requer Rust 1.95.0 ou mais recente. Instale com rustup: ```sh rustup toolchain install 1.95.0 --profile minimal -c rustfmt -c clippy ``` ## Licença Licença dupla MIT / Apache-2.0.