ACP matriz de pruebas y soporte
ACP es bidireccional. Una prueba útil de interoperabilidad debe mantener una conexión abierta mientras llegan notificaciones y solicitudes anidadas; una serie de líneas de JSON desconectadas no puede probar el comportamiento de la sesión.
Pruebas verificadas
La suite de adk-acp conecta el SDK oficial Client con el ADK-Rust SDK
Agent a través de un transporte en memoria y ejercita:
initialize
→ session/new
→ session/prompt
← session/update
← PromptResponse(end_turn)
→ session/close
→ session/list
→ session/resume
→ session/close
→ session/delete
Pruebas separadas cubren la cancelación de sesión, la cancelación y
recuperación de solicitudes JSON-RPC, el mapeo de eventos, los menús de permisos de rechazo primero, los ID opacos de opciones,
selecciones fabricadas, decisiones humanas esperadas, el comportamiento de permitir una vez en la llamada exacta,
la validación de configuración de MCP y la salida de depuración con secretos redactados. La fase 2 añade
pruebas de reordenamiento de la reproducción de session/load (los session/update reproducidos coinciden con el
orden cronológico de los eventos almacenados), pruebas de mapeo y rechazo de prompts multimodales
(imagen y audio aceptados; contenido no anunciado rechazado), pruebas de aprobar/denegar/cancelar del puente de permisos del servidor (la cancelación se mapea a denegar,
correlacionada por el id de la llamada de función), y pruebas de fidelidad del cliente que demuestran que las superficies de
ToolCallUpdate y UsageUpdate aparecen sin degradar la superficie de texto del agente. La fase 3 añade pruebas de modo de sesión y de opciones de configuración
(set_mode / set_config_option registran los valores anunciados y rechazan los desconocidos,
y la selección persiste entre session/load), una prueba de aislamiento de session/fork
(la historia de la bifurcación es igual a la de la fuente y la fuente se mantiene
sin cambios), pruebas de activación de comandos disponibles e información de sesión (las actualizaciones se emiten
solo cuando el agente declara comandos o registra un título), y una
prueba de precisión de capacidades que afirma que las capacidades anunciadas corresponden exactamente
a los controladores registrados y a los mapeos de contenido habilitados — incluido que los modos
y las opciones de configuración se anuncian solo cuando hay un proveedor de SessionControls
presente.
La compuerta de ciclo de vida de MCP en vivo inicia un proceso hijo real de stdio MCP, completa el
handshake y descubre sus herramientas a través del mismo McpToolset usado por sesiones de
ACP.
Ejecutar las compuertas
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 compuerta de acp_full_protocol es la red de seguridad ejecutable de la fase 2: un Runner respaldado por memoria,
sin clave de API, AcpServer impulsado a través del SDK oficial sobre un
canal en proceso, validando toda la superficie de la fase 2 en dirección servidor
(prompts de recursos incrustados e imagen/audio, el puente de permisos,
el orden de reproducción de session/load,
y la exposición de UsageUpdate / ToolCallUpdate) sin un subproceso ni
credenciales del modelo.
Soporte actual
| Área | Estado | Notas |
|---|---|---|
| Protocolo de cable estable v1 | Implementado | Rust oficial SDK 1.2; la versión del protocolo se negocia por separado |
| Transporte de cliente stdio local | Implementado | Sesiones de una sola ejecución, de streaming y persistentes |
| Permisos del cliente | Implementado | Denegación por defecto, coincidencia semántica, IDs opacos, política síncrona o asíncrona |
| Callbacks del sistema de archivos del cliente | Implementado API | Lectura y escritura anunciadas de forma independiente |
| Callbacks de terminal del cliente | Implementado API | Trait completo de crear/salida/espera/matar/liberar |
| MCP proporcionado por el cliente | Implementado | stdio requerido; capacidad HTTP/SSE protegida por capacidades |
| ADK-Rust ACP servidor | Implementado | Nuevo, prompt, carga, actualización, cancelación, cierre, listado, reanudación, bifurcación, set_mode, set_config_option, eliminación |
| Carga + repetición de la sesión del servidor | Implementado | Reactiva una sesión persistida y repite los eventos almacenados en orden cronológico; load_session anunciado |
| Bifurcación de la sesión del servidor | Implementado | Copia el historial y el estado relevante en un nuevo id de sesión, dejando el origen sin cambios; fork anunciado |
| Modos de sesión del servidor + opciones de configuración | Implementado | Restringido por proveedor mediante SessionControls; set_mode / set_config_option validados y persistidos a través de carga/reanudación/bifurcación; anunciado solo cuando se declara |
| Comandos disponibles del servidor + información de sesión | Implementado | Se emite en la activación cuando el agente declara comandos o registra un título; de lo contrario, ninguno |
| Actualizaciones del plan del servidor | Latente | Existe el mapeo de Plan SessionUpdate, pero está inerte hasta que un primitivo de plan ADK exponga entradas del plan |
| Sesión del servidor MCP | Implementado | stdio, por sesión, inicio y limpieza acotados |
| Indicaciones de texto y de enlace a recursos | Implementado | Mapeadas a través del módulo de contenido compartido |
| Prompts multimodales (imagen, audio) | Implementado | Asignado a Part::InlineData; image/audio anunciados; el contenido no anunciado se rechaza |
| Prompts de recursos incrustados | Implementado | Asignado a Part::EmbeddedResource; embedded_context anunciados |
| Aprobación de herramienta del servidor ADK a ACP | Implementado | ToolConfirmationRequest puenteado a session/request_permission; permitir → aprobar, denegar/cancelar → denegar, correlacionado por id de llamada de función |
| Fidelidad de actualización y uso de herramientas del cliente | Implementado | OutputChunk::ToolUpdate y OutputChunk::Usage exponen los ToolCallUpdate/UsageUpdate de un External_Agent; texto del agente sin cambios |
| Contenido enriquecido del prompt del cliente | Implementado | prompt_agent_content_with_policy transmite contenido no textual ADK como el bloque ACP correspondiente |
| Remoto ACP HTTP/WebSocket | No anunciado | La implementación estable es stdio local |
| Funciones experimentales del protocolo | No anunciado | Añadir solo después de la implementación y las pruebas de interoperabilidad |
Prueba manual del editor
Compile examples/acp_server, luego configure un cliente ACP para iniciar ese binario
con una ruta absoluta de manifiesto y credenciales del modelo. Verifique:
- la respuesta de inicialización informa la versión del protocolo 1;
- una nueva sesión acepta el directorio absoluto del proyecto previsto;
- el texto aparece como actualizaciones en vivo antes de la respuesta final;
- la herramienta de lectura se inicia y las finalizaciones aparecen en el cliente;
- la cancelación cierra el turno sin cerrar la conexión;
- un prompt posterior se completa correctamente en la misma sesión;
- cerrar y reanudar preservan el historial cuando el servicio de sesión es duradero.
No use echo | cargo run para esta prueba. Cada pipe inicia un proceso diferente
y no puede preservar la conexión ni la sesión.
Ejemplos relacionados
acp_client_hostacp_kiroacp_serveracp_full_protocol— referencia de dirección del servidor de Fase 2 respaldada por no-API-key,Runnercon una prueba de validación de extremo a extremo