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

ZoneStatutNotes
Protocole filaire stable v1ImplémentéRust officiel SDK 1.2 ; version du protocole négociée séparément
Transport client stdio localImplémentéSessions ponctuelles, en flux continu et persistantes
Permissions du clientImplémentéRefus par défaut, correspondance sémantique, identifiants opaques, stratégie synchrone ou asynchrone
Callbacks du système de fichiers clientImplémenté APILecture et écriture annoncées indépendamment
Callbacks du terminal clientImplémenté APITrait complet create/output/wait/kill/release
MCP fourni par le clientImplémentéstdio requis ; capacité HTTP/SSE sous contrôle de capacité
ADK-Rust ACP serveurImplémentéNouveau, prompt, charge, met à jour, annule, ferme, liste, reprend, bifurque, set_mode, set_config_option, supprime
Chargement de session serveur + relectureImplémentéRéactive une session persistée et relit les événements stockés dans l’ordre chronologique ; load_session annoncé
Fork de session serveurImplé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 configurationImplé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 sessionImplémentéÉmis lors de l’activation lorsque l’agent déclare des commandes ou enregistre un titre ; sinon, aucun
Mises à jour du plan du serveurDormantLe 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 MCPImplémentéstdio, par session, démarrage et nettoyage bornés
Prompts de texte et de lien de ressourceImplé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éesImplémentéMappé à Part::EmbeddedResource ; embedded_context annoncés
Approbation côté serveur de ADK vers ACPImplé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é clientImplémentéOutputChunk::ToolUpdate et OutputChunk::Usage exposent le ToolCallUpdate/UsageUpdate d’un External_Agent ; texte de l’agent inchangé
Contenu d’invite riche du clientImplémentéprompt_agent_content_with_policy transmet le contenu non textuel ADK sous forme de bloc ACP correspondant
ACP HTTP/WebSocket à distanceNon annoncéL’implémentation stable est en stdio local
Fonctionnalités de protocole expérimentalesNon 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 :

  1. la réponse d’initialisation indique la version du protocole 1 ;
  2. une nouvelle session accepte le répertoire de projet absolu attendu ;
  3. le texte apparaît comme des mises à jour en direct avant la réponse finale ;
  4. l’outil de lecture démarre et les achèvements apparaissent dans le client ;
  5. l’annulation ferme le tour sans fermer la connexion ;
  6. une invite ultérieure réussit dans la même session ;
  7. 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.