ACP Test- und Support-Matrix
ACP ist bidirektional. Ein nützlicher Interoperabilitätstest muss eine Verbindung offen halten, während Benachrichtigungen und verschachtelte Anfragen eintreffen; eine Reihe getrennter JSON-Zeilen kann das Sitzungsverhalten nicht beweisen.
Verifizierte Tests
Die adk-acp-Suite verbindet die offizielle SDK Client mit der ADK-Rust SDK
Agent über einen In-Memory-Transport und testet:
initialize
→ session/new
→ session/prompt
← session/update
← PromptResponse(end_turn)
→ session/close
→ session/list
→ session/resume
→ session/close
→ session/delete
Separate Tests decken das Abbrechen von Sitzungen, das Abbrechen und
Wiederherstellen von JSON-RPC-Anfragen, Ereigniszuordnung, Menüs mit Ablehnung-voran,
undurchsichtige Options-IDs,
simulierte Auswahlen, wartende menschliche Entscheidungen, exaktes Allow-Once-Verhalten,
MCP-Konfigurationsvalidierung und geheimnisbereinigte Debug-Ausgabe ab. Phase 2 fügt
session/load-Tests zur Wiedergabe-Reihenfolge hinzu (die wiedergegebenen session/updates stimmen mit der
chronologischen Reihenfolge der gespeicherten Ereignisse überein), multimodale Prompt-Zuordnung und Ablehnungstests (Bild und Audio akzeptiert; nicht angekündigte Inhalte abgelehnt), Tests für approve/deny/cancel des Server-Permission-Bridges (Abbruch wird auf deny abgebildet,
korreliert über die Function-Call-ID), sowie Client-Treue-Tests, die nachweisen, dass die
ToolCallUpdate- und UsageUpdate-Oberflächen erscheinen, ohne die Agenten-Textoberfläche
zu beeinträchtigen. Phase 3 fügt Tests für Sitzungsmodus und Konfigurationsoptionen hinzu
(set_mode / set_config_option zeichnen angekündigte Werte auf und lehnen unbekannte
ab, und die Auswahl bleibt über session/load erhalten), ein session/fork-
Isolierungstest (die Historie des Forks entspricht der Quelle und die Quelle bleibt
unverändert), Aktivierungstests für verfügbare Befehle und Sitzungsinformationen (Updates werden
nur ausgegeben, wenn der Agent Befehle deklariert oder einen Titel erfasst), sowie einen
Capability-Accuracy-Test, der bestätigt, dass die angekündigten Fähigkeiten exakt
den registrierten Handlern und aktivierten Inhaltszuordnungen entsprechen — einschließlich,
dass Modi und Konfigurationsoptionen nur angekündigt werden, wenn ein SessionControls-Provider
vorhanden ist.
Das Live-MCP-Lebenszyklus-Gate startet einen echten stdio-MCP-Kindprozess, schließt das
Handshake ab und entdeckt dessen Tools über denselben McpToolset, der von ACP-
Sitzungen verwendet wird.
Gates ausführen
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
Das acp_full_protocol-Gate ist das ausführbare Phase-2-Sicherheitsnetz: ein ohne API-Schlüssel,
Runner-gestützter AcpServer, der über den offiziellen SDK durch einen In-Process-
Kanal gesteuert wird und die vollständige serverseitige Phase-2-Oberfläche validiert (eingebettete Ressourcen
sowie Bild-/Audio-Prompts, die Permission Bridge, session/load-Wiedergabe-Reihenfolge
und UsageUpdate / ToolCallUpdate-Darstellung) ohne Unterprozess oder Modell-
Anmeldedaten.
Aktueller Support
| Bereich | Status | Hinweise |
|---|---|---|
| Stabiles Wire-Protokoll v1 | Implementiert | Offizielles Rust SDK 1.2; Protokollversion wird separat ausgehandelt |
| Lokaler stdio-Client-Transport | Implementiert | Einmalige, Streaming- und persistente Sitzungen |
| Client-Berechtigungen | Implementiert | Standardmäßig verweigern, semantisches Matching, undurchsichtige IDs, synchrone oder asynchrone Richtlinie |
| Client-Dateisystem-Callbacks | Implementiert API | Lesen und Schreiben unabhängig angekündigt |
| Client-Terminal-Callbacks | Implementiert API | Vollständiges Trait für create/output/wait/kill/release |
| Vom Client bereitgestellte MCP | Implementiert | stdio erforderlich; HTTP/SSE durch Fähigkeiten begrenzt |
| ADK-Rust ACP Server | Implementiert | Neu, Prompt, Laden, Aktualisieren, Abbrechen, Schließen, Auflisten, Fortsetzen, Abspalten, set_mode, set_config_option, Löschen |
| Laden + Wiedergabe der Server-Session | Implementiert | Reaktiviert eine persistierte Session und spielt gespeicherte Ereignisse in chronologischer Reihenfolge ab; load_session angekündigt |
| Abzweigung der Server-Session | Implementiert | Kopiert Historie und relevanten Zustand in eine neue Session-ID und lässt die Quelle unverändert; fork angekündigt |
| Modi + Konfigurationsoptionen der Server-Session | Implementiert | Durch SessionControls auf Provider-Ebene gesteuert; set_mode / set_config_option validiert und über Laden/Fortsetzen/Abzweigen hinweg beibehalten; nur angekündigt, wenn deklariert |
| Server verfügbare Befehle + Sitzungsinfos | Implementiert | Wird bei Aktivierung ausgegeben, wenn der Agent Befehle deklariert oder einen Titel erfasst; andernfalls nicht |
| Server-Planaktualisierungen | Ruhend | Plan SessionUpdate-Zuordnung vorhanden, aber inaktiv, bis ein ADK-Planprimitive Plan-Einträge offenlegt |
| Server-Sitzung MCP | Implementiert | stdio, pro Sitzung, begrenzter Start und Abschluss |
| Text- und Ressourcenlink-Prompts | Implementiert | Über das gemeinsame Inhaltsmodul abgebildet |
| Multimodale Prompts (Bild, Audio) | Implementiert | Zugeordnet zu Part::InlineData; image/audio angekündigt; nicht angekündigter Inhalt wird abgelehnt |
| Eingebettete Ressourcen-Prompts | Implementiert | Zugeordnet zu Part::EmbeddedResource; embedded_context angekündigt |
| Server-ADK-Tool-Genehmigung zu ACP | Implementiert | ToolConfirmationRequest zu session/request_permission überbrückt; allow → approve, deny/cancel → deny, korreliert über function-call id |
| Client-Tool-Aktualisierungs- und Nutzungstreue | Implementiert | OutputChunk::ToolUpdate und OutputChunk::Usage stellen die External_Agent's ToolCallUpdate/UsageUpdate bereit; agent text unchanged |
| Client-Rich-Prompt-Inhalt | Implementiert | prompt_agent_content_with_policy überträgt nicht-textuelle ADK-Inhalte als den passenden ACP-Block |
| Entfernte ACP HTTP/WebSocket | Nicht angekündigt | Die stabile Implementierung ist lokales stdio |
| Experimentelle Protokollfunktionen | Nicht angekündigt | Nur nach Implementierung und Interoperabilitätstests hinzufügen |
Manueller Editor-Test
Erstelle examples/acp_server und konfiguriere dann einen ACP-Client, um dieses Binary mit einem absoluten Manifestpfad und Modell-Anmeldedaten zu starten. Überprüfe:
- Die Initialisierungsantwort meldet Protokollversion 1;
- eine neue Session akzeptiert das beabsichtigte absolute Projektverzeichnis;
- Text erscheint als Live-Updates vor der endgültigen Antwort;
- das Lesen-Tool startet und Abschlüsse erscheinen im Client;
- die Kündigung schließt den Turn, ohne die Verbindung zu schließen;
- eine spätere Eingabe ist in derselben Session erfolgreich;
- Schließen und Fortsetzen bewahren den Verlauf, wenn der Session-Dienst dauerhaft ist.
Verwende für diesen Test nicht echo | cargo run. Jede Pipe startet einen anderen Prozess und kann die Verbindung oder Session nicht beibehalten.
Verwandte Beispiele
acp_client_hostacp_kiroacp_serveracp_full_protocol— kein API-Schlüssel,Runner-gestützte Referenz für die Server-Richtung von Phase 2 mit einem End-to-End-validierenden Test