このプロジェクトについて

## 概要 `prod-code`は、AIコーディングエージェント群向けに設計されたリモートコードインテリジェンスサーバーです。言語解析、ビルド、テストを開発者のノートPCからLANノードへ移し、編集体験はローカルに保ちます。このシステムはチェックアウトをゲートウェイにミラーし、そこではウォームなアナライザー(rust-analyzerはインプロセス、gopls、clangd、TypeScript、pyright、sourcekit-lspは子プロセス)を維持し、コマンドを実行します。エージェントはMCPツール経由でアクセスし、エディタはドロップインの言語サーバーとして利用できます。 ## 主な機能 - **リモート解析**: 言語サーバーはノートPCではなくLANノードで動作し、ローカルのCPUとメモリ負荷を軽減します。 - **MCP統合**: Model Context Protocol経由でAIエージェント(Claude、Codex、Gemini)にツールを公開します。 - **エディタ対応**: Zedなどのエディタ向けの言語サーバーとして動作し、設定や保存イベントのプロトコルブリッジを備えます。 - **マルチ言語**: Rust、Go、C/C++、TypeScript/JavaScript、Python、Swiftをサポートします。 - **安全なリファクタリング**: 意味的リネーム、シグネチャ変更、移動、抽出などのツールを、2つ目のアナライザーでの検証付きで提供します。 - **ビルド/テスト実行**: コマンドはウォームなキャッシュを持つノード上で実行され、結果とファイル変更が同期されます。 - **クラスタ対応**: 複数のノードがゴシップし、負荷と言語サポートに基づいてワークスペースを分散できます。 ## エージェント向けツール 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する必要がありません。 ## 仕組み - **ミラーされたチェックアウト**: 初回接触時にパス、サイズ、ハッシュのマニフェストを送信し、ゲートウェイはオリジンリポジトリからワークツリーをシードし、不足ファイルのみを同期します。以降の同期はウォーターマークと差分を使用します。 - **ワークツリーごとに1つのアナライザー**: 各gitワークツリーは独自のサーバーワークスペースとデータベースを持ち、相互汚染を防ぎます。エンジンは30分間アイドルになるまで常駐します。 - **2つ目のアナライザーでの検証**: 編集提案は別のエンジンでチェックされ、メインアナライザーの状態を汚染しません。 - **ノード上でのビルドとテスト**: コマンドはワークスペース自身の`target/`ディレクトリで実行され、キャッシュをウォームに保ちます。変更されたファイルはチェックアウトに書き戻されます。 - **クラスタゴシップ**: ノードは5秒ごとにゴシップし、クライアントは1つのシードアドレスを必要とします。配置は既存の保持状況と負荷を考慮します。 ## インストール ```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のセットアップを処理します。 ## フィールド評価 このプロジェクトには、著名なオープンソースリポジトリ(ripgrep、tantivy、tokio、polars、uv、bevy、prometheus、kubernetes、etcd、django、black)に対する評価が、標準化された67ツールプロトコルを用いて含まれており、詳細なブログレポートがリンクされています。 ## 要件 ビルドにはRust 1.95.0以降が必要です。rustupでインストールします。 ```sh rustup toolchain install 1.95.0 --profile minimal -c rustfmt -c clippy ``` ## ライセンス MIT / Apache-2.0のデュアルライセンスです。