ACP テストとサポートのマトリクス

ACP は双方向です。有用な相互運用性テストでは、通知とネストされたリクエストが到着する間も 1 本の接続を開いたままにしておく必要があります。切断された JSON 行の連続だけではセッションの動作を証明できません。

検証済みのテスト

adk-acp スイートは、公式の SDK Client を ADK-Rust SDK Agent にインメモリ転送経由で接続し、次を実施します:

initialize
  → session/new
  → session/prompt
  ← session/update
  ← PromptResponse(end_turn)
  → session/close
  → session/list
  → session/resume
  → session/close
  → session/delete

個別のテストでは、セッションのキャンセル、JSON-RPC リクエストのキャンセルと復旧、イベントのマッピング、最初に拒否する権限メニュー、透過的なオプション ID、捏造された選択、待機された人間の判断、正確な呼び出しの allow-once 動作、MCP 設定の検証、そして秘密情報を伏せたデバッグ出力をカバーします。フェーズ 2 では、session/load の再生順序テスト(再生された session/update は保存されたイベントの時系列順に一致する)、マルチモーダルなプロンプトのマッピングと拒否テスト(画像と音声は受け入れられ、未公開のコンテンツは拒否される)、サーバー権限ブリッジの approve/deny/cancel テスト(キャンセルは deny にマップされ、function-call id で相関付けられる)、およびクライアント忠実性テスト(ToolCallUpdateUsageUpdate の面が、エージェントのテキスト面を退化させることなく表示されることを証明する)を追加します。フェーズ 3 では、セッションモードと設定オプションのテスト(set_mode / set_config_option は広告された値を記録し、未知の値を拒否し、選択は session/load をまたいで保持される)、session/fork 分離テスト(fork の履歴は source の履歴と等しく、source は変更されない)、available-commands と session-info の有効化テスト(エージェントがコマンドを宣言するかタイトルを記録した場合にのみ更新が発行される)、そして、モードと設定オプションが SessionControls provider が存在する場合にのみ広告されることを含め、広告された capabilities が登録済みハンドラーと有効なコンテンツマッピングに正確に対応することを主張する capability accuracy テストを追加します。

ライブな MCP ライフサイクルゲートは、実際の stdio MCP 子プロセスを起動し、ハンドシェイクを完了し、ACP セッションで使用されるのと同じ McpToolset を通じてそのツールを発見します。

ゲートを実行する

cargo test -p adk-acp --all-features
cargo test -p adk-agent --test tool_confirmation_tests
cargo test -p adk-tool --features mcp --test mcp_server_lifecycle_integration_tests test_tool_aggregation -- --ignored --exact

cargo test --manifest-path examples/acp_client_host/Cargo.toml
cargo check --manifest-path examples/acp_kiro/Cargo.toml
cargo check --manifest-path examples/acp_server/Cargo.toml
cargo test --manifest-path examples/acp_full_protocol/Cargo.toml

acp_full_protocol ゲートは、実行可能なフェーズ 2 の安全網です。no-API-key の Runner バックの AcpServer を、プロセス内チャネルを介して公式の SDK で駆動し、サブプロセスやモデル認証情報なしで、サーバー方向のフェーズ 2 の完全な面(組み込みリソースおよび画像/音声プロンプト、権限ブリッジ、session/load の再生順序、UsageUpdate / ToolCallUpdate の表出)を検証します。

現在のサポート

領域状態注記
安定版 wire protocol v1実装済み公式 Rust SDK 1.2; プロトコルバージョンは別途ネゴシエートされる
ローカル stdio クライアント transport実装済み単発、ストリーミング、永続セッション
クライアント権限実装済みデフォルトでは拒否、意味論的マッチング、非透過ID、同期または非同期ポリシー
クライアントのファイルシステムコールバック実装済み API読み取りと書き込みは個別に公開
クライアントの端末コールバック実装済み APIcreate/output/wait/kill/release trait を完備
クライアント提供の MCP実装済みstdio 必須; HTTP/SSE は capability-gated
ADK-Rust ACP サーバー実装済み新規, プロンプト, 読み込み, 更新, キャンセル, 閉じる, 一覧, 再開, フォーク, set_mode, set_config_option, 削除
サーバーセッションの読み込み + 再生実装済み永続化されたセッションを再アクティブ化し、保存されたイベントを時系列順に再生する; load_session が公開される
サーバーセッションのフォーク実装済み履歴と関連する状態を新しいセッション ID にコピーし、元のセッションは変更しない; fork が公開される
サーバーセッションのモード + 設定オプション実装済みSessionControls によるプロバイダーゲート付き; set_mode / set_config_option は検証され、読み込み/再開/フォーク全体で永続化される; 宣言された場合のみ公開される
Server の available-commands + session-info実装済みエージェントがコマンドを宣言するかタイトルを記録したときにアクティベーション時に送出され、それ以外ではなし
Server の plan 更新休止中Plan SessionUpdate のマッピングは存在するが、ADK の plan primitive が plan エントリを表示するまで無効
Server session MCP実装済みstdio、セッションごと、起動とクリーンアップが制約付き
Text と resource-link の prompts実装済み共有 content module を通じてマッピングされる
マルチモーダルプロンプト(画像、音声)実装済みPart::InlineData にマッピング; image/audio が公開される; 公開されていないコンテンツは拒否される
埋め込みリソースのプロンプト実装済みPart::EmbeddedResource にマッピング; embedded_context が公開される
サーバー ADK のツール承認から ACP へ実装済みToolConfirmationRequestsession/request_permission にブリッジされる; allow → approve、deny/cancel → deny、function-call id により相関付け
クライアントのツール更新と使用状況の忠実性実装済みOutputChunk::ToolUpdateOutputChunk::Usage が External_Agent の ToolCallUpdate/UsageUpdate を表面化する; agent のテキストは変更なし
クライアントのリッチなプロンプト内容実装済みprompt_agent_content_with_policy は非テキストの ADK コンテンツを対応する ACP ブロックとして送信します
リモート ACP HTTP/WebSocket公開されていません安定版の実装はローカル stdio です
実験的なプロトコル機能公開されていません実装と相互運用性テストの後にのみ追加してください

手動エディタテスト

examples/acp_serverをビルドし、その後ACPクライアントを構成して、絶対マニフェストパスとモデル認証情報を指定してそのバイナリを起動します。次を確認してください:

  1. 初期化レスポンスがプロトコルバージョン 1 を報告すること;
  2. 新しいセッションが意図した絶対プロジェクトディレクトリを受け入れること;
  3. 最終レスポンスの前にテキストがライブ更新として表示されること;
  4. read ツールが開始し、完了がクライアントに表示されること;
  5. キャンセルしても接続を閉じずにターンが終了すること;
  6. 後続のプロンプトが同じセッションで成功すること;
  7. セッションサービスが永続的な場合、close と resume によって履歴が保持されること。

このテストではecho | cargo runを使用しないでください。各 pipe は異なるプロセスを開始するため、接続やセッションを保持できません。