ACP matrice de test et de support
ACP est bidirectionnel. Un test d’interopérabilité utile doit garder une connexion ouverte pendant que des notifications et des requêtes imbriquées arrivent ; une série de lignes JSON déconnectées ne peut pas prouver le comportement de session.
Tests vérifiés
La suite adk-acp connecte le SDK Client officiel au ADK-Rust SDK
Agent via un transport en mémoire et exerce :
initialize
→ session/new
→ session/prompt
← session/update
← PromptResponse(end_turn)
→ session/close
→ session/list
→ session/resume
→ session/close
→ session/delete
Des tests séparés couvrent l’annulation de session, l’annulation de requêtes
JSON-RPC et la reprise, le mappage des événements, les menus d’autorisations
qui rejettent en premier, les identifiants d’option opaques, les sélections
fabriquées, les décisions humaines attendues, le comportement d’autorisation une
seule fois pour un appel exact, la validation de configuration MCP, et une sortie
de débogage avec secrets masqués. La phase 2 ajoute des tests de réordonnancement de
relecture session/load (les session/update relus correspondent à l’ordre chronologique
des événements stockés), des tests de mappage et de rejet des invites multimodales
(image et audio acceptés ; contenu non annoncé rejeté), des tests d’approbation/refus/annulation
du pont d’autorisations serveur (l’annulation se mappe sur le refus, corrélée par l’id
de l’appel de fonction), et des tests de fidélité client prouvant que les surfaces
ToolCallUpdate et UsageUpdate apparaissent sans régression de la surface texte de l’agent.
La phase 3 ajoute des tests de mode de session et d’options de configuration
(set_mode / set_config_option enregistrent les valeurs annoncées et rejettent les inconnues,
et la sélection persiste entre session/load), un test d’isolation session/fork
(l’historique du fork est égal à celui de la source et la source reste
inchangée), des tests d’activation des commandes disponibles et des infos de session
(mises à jour émises uniquement lorsque l’agent déclare des commandes ou enregistre
un titre), et un test de précision des capacités affirmant que les capacités annoncées
correspondent exactement aux gestionnaires enregistrés et aux mappages de contenu
activés — y compris que les modes et options de configuration ne sont annoncés que
lorsqu’un fournisseur SessionControls est présent.
La porte de cycle de vie du MCP en direct démarre un véritable enfant MCP stdio,
termine la poignée de main, et découvre ses outils via la même McpToolset utilisée par
les sessions ACP.
Exécuter les portes
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
La porte acp_full_protocol est le filet de sécurité exécutable de la phase 2 : un API-clé,
Runner-soutenu AcpServer piloté via le SDK officiel sur un canal en processus,
validant la surface complète de la phase 2 côté serveur (invites de ressource intégrée
et d’image/audio, le pont d’autorisations, le réordonnancement de relecture
session/load, et l’affichage de UsageUpdate / ToolCallUpdate) sans sous-processus ni
identifiants de modèle.
Support actuel
| Zone | Statut | Notes |
|---|---|---|
| Protocole filaire stable v1 | Implémenté | Rust officiel SDK 1.2 ; version du protocole négociée séparément |
| Transport client stdio local | Implémenté | Sessions ponctuelles, en flux continu et persistantes |
| Permissions du client | Implémenté | Refus par défaut, correspondance sémantique, identifiants opaques, stratégie synchrone ou asynchrone |
| Callbacks du système de fichiers client | Implémenté API | Lecture et écriture annoncées indépendamment |
| Callbacks du terminal client | Implémenté API | Trait complet create/output/wait/kill/release |
| MCP fourni par le client | Implémenté | stdio requis ; capacité HTTP/SSE sous contrôle de capacité |
| ADK-Rust ACP serveur | Implémenté | Nouveau, prompt, charge, met à jour, annule, ferme, liste, reprend, bifurque, set_mode, set_config_option, supprime |
| Chargement de session serveur + relecture | Implémenté | Réactive une session persistée et relit les événements stockés dans l’ordre chronologique ; load_session annoncé |
| Fork de session serveur | Implémenté | Copie l’historique et l’état pertinent dans un nouvel identifiant de session, en laissant la source inchangée ; fork annoncé |
| Modes de session serveur + options de configuration | Implémenté | Contrôlé par le fournisseur via SessionControls ; set_mode / set_config_option validés et persistés à travers load/resume/fork ; annoncé uniquement lorsqu’ils sont déclarés |
| Commandes disponibles du serveur + infos de session | Implémenté | Émis lors de l’activation lorsque l’agent déclare des commandes ou enregistre un titre ; sinon, aucun |
| Mises à jour du plan du serveur | Dormant | Le mappage Plan SessionUpdate existe, mais il reste inerte jusqu’à ce qu’un primitive de plan ADK fasse apparaître des entrées de plan |
| Session serveur MCP | Implémenté | stdio, par session, démarrage et nettoyage bornés |
| Prompts de texte et de lien de ressource | Implémenté | Mappés via le module de contenu partagé |
| Prompts multimodaux (image, audio) | Implémenté | Mappé à Part::InlineData ; image/audio annoncés ; le contenu non annoncé est rejeté |
| Prompts de ressources intégrées | Implémenté | Mappé à Part::EmbeddedResource ; embedded_context annoncés |
| Approbation côté serveur de ADK vers ACP | Implémenté | ToolConfirmationRequest relié à session/request_permission ; autoriser → approuver, refuser/annuler → refuser, corrélé par l’id d’appel de fonction |
| Fidélité de mise à jour et d’utilisation des outils côté client | Implémenté | OutputChunk::ToolUpdate et OutputChunk::Usage exposent le ToolCallUpdate/UsageUpdate d’un External_Agent ; texte de l’agent inchangé |
| Contenu d’invite riche du client | Implémenté | prompt_agent_content_with_policy transmet le contenu non textuel ADK sous forme de bloc ACP correspondant |
| ACP HTTP/WebSocket à distance | Non annoncé | L’implémentation stable est en stdio local |
| Fonctionnalités de protocole expérimentales | Non annoncé | N’ajoutez qu’après l’implémentation et les tests d’interopérabilité |
Test manuel de l’éditeur
Compilez examples/acp_server, puis configurez un client ACP pour démarrer ce binaire
avec un chemin absolu du manifeste et des identifiants de modèle. Vérifiez :
- la réponse d’initialisation indique la version du protocole 1 ;
- une nouvelle session accepte le répertoire de projet absolu attendu ;
- le texte apparaît comme des mises à jour en direct avant la réponse finale ;
- l’outil de lecture démarre et les achèvements apparaissent dans le client ;
- l’annulation ferme le tour sans fermer la connexion ;
- une invite ultérieure réussit dans la même session ;
- la fermeture et la reprise préservent l’historique lorsque le service de session est durable.
N’utilisez pas echo | cargo run pour ce test. Chaque tube démarre un processus différent
et ne peut pas préserver la connexion ni la session.
Exemples associés
acp_client_hostacp_kiroacp_serveracp_full_protocol— référence de direction serveur de phase 2 sans clé API, prise en charge parRunner, avec un test de validation de bout en bout