ACP matriz de testes e suporte
ACP é bidirecional. Um teste útil de interoperabilidade deve manter uma conexão aberta enquanto notificações e requisições aninhadas chegam; uma série de linhas JSON desconectadas não pode provar o comportamento da sessão.
Testes verificados
A suíte adk-acp conecta o SDK Client oficial ao ADK-Rust SDK
Agent por meio de um transporte em memória e exercita:
initialize
→ session/new
→ session/prompt
← session/update
← PromptResponse(end_turn)
→ session/close
→ session/list
→ session/resume
→ session/close
→ session/delete
Testes separados cobrem cancelamento de sessão, cancelamento e
recuperação de requisições JSON-RPC, mapeamento de eventos, menus de permissão que rejeitam primeiro, IDs opacos de opções,
seleções fabricadas, decisões humanas aguardadas, comportamento allow-once de chamada exata,
validação de configuração MCP e saída de depuração com segredos mascarados. A Fase 2 adiciona
testes de ordenação de replay session/load (os session/updates reproduzidos correspondem à ordem cronológica
dos eventos armazenados), testes de mapeamento e rejeição de prompts multimodais (imagem e áudio aceitos; conteúdo não anunciado rejeitado), testes de aprovar/negar/cancelar da ponte de permissões do servidor (o cancelamento é mapeado para negar, correlacionado por ID de chamada de função), e testes de fidelidade do cliente que comprovam que as superfícies ToolCallUpdate e UsageUpdate aparecem sem regredir a superfície de texto do agente. A Fase 3 adiciona testes de modo de sessão e opção de configuração (set_mode / set_config_option registram valores anunciados e rejeitam os desconhecidos, e a seleção persiste entre session/load), um teste de isolamento de session/fork (o histórico do fork é igual ao da origem e a origem permanece
inalterada), testes de ativação de comandos disponíveis e informações da sessão (atualizações emitidas
somente quando o agente declara comandos ou registra um título), e um
teste de precisão de capacidades afirmando que as capacidades anunciadas correspondem exatamente
aos manipuladores registrados e aos mapeamentos de conteúdo habilitados — incluindo que modos
e opções de configuração são anunciados somente quando um provedor de SessionControls está
presente.
A gate de ciclo de vida do MCP ao vivo inicia um processo filho real de stdio MCP, conclui o
handshake e descobre suas ferramentas pelo mesmo McpToolset usado por sessões ACP.
Executar as gates
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
A gate acp_full_protocol é a rede de segurança executável da Fase 2: um Runner-backed AcpServer sem chave API,
acionado pelo SDK oficial por meio de um canal no processo, validando a superfície completa da Fase 2 no sentido servidor (prompts de recurso incorporado
e de imagem/áudio, a ponte de permissões, a ordem de replay de session/load,
e a exposição de UsageUpdate / ToolCallUpdate) sem subprocesso ou credenciais
de modelo.
Suporte atual
| Área | Status | Notas |
|---|---|---|
| Protocolo de fio estável v1 | Implementado | Rust oficial SDK 1.2; a versão do protocolo é negociada separadamente |
| Transporte de cliente stdio local | Implementado | Sessões pontuais, em streaming e persistentes |
| Permissões do cliente | Implementado | Negar por padrão, correspondência semântica, IDs opacos, política síncrona ou assíncrona |
| Callbacks do sistema de arquivos do cliente | Implementado API | Leitura e gravação anunciadas independentemente |
| Callbacks de terminal do cliente | Implementado API | Trait completo de create/output/wait/kill/release |
| MCP fornecido pelo cliente | Implementado | stdio obrigatório; capacidade de HTTP/SSE controlada por capacidade |
| ADK-Rust ACP servidor | Implementado | Novo, prompt, carregar, atualizar, cancelar, fechar, listar, retomar, fork, set_mode, set_config_option, excluir |
| Carregamento + reprodução da sessão do servidor | Implementado | Reativa uma sessão persistida e reproduz os eventos armazenados em ordem cronológica; load_session anunciado |
| Fork da sessão do servidor | Implementado | Copia o histórico e o estado relevante para um novo id de sessão, deixando a origem inalterada; fork anunciado |
| Modos da sessão do servidor + opções de configuração | Implementado | Controlado pelo provedor via SessionControls; set_mode / set_config_option validados e persistidos em carregamento/retomada/fork; anunciado somente quando declarado |
| Comandos disponíveis do servidor + session-info | Implementado | Emitido na ativação quando o agente declara comandos ou registra um título; caso contrário, nenhum |
| Atualizações de plano do servidor | Inativo | O mapeamento Plan SessionUpdate existe, mas fica inerte até que uma primitive de plano ADK exponha entradas do plano |
| Session MCP do servidor | Implementado | stdio, por sessão, inicialização e limpeza limitadas |
| Prompts de texto e de link de recurso | Implementado | Mapeados pelo módulo de conteúdo compartilhado |
| Prompts multimodais (imagem, áudio) | Implementado | Mapeado para Part::InlineData; image/audio anunciados; conteúdo não anunciado rejeitado |
| Prompts de recurso incorporado | Implementado | Mapeado para Part::EmbeddedResource; embedded_context anunciados |
| Aprovação de ferramenta do servidor ADK para ACP | Implementado | ToolConfirmationRequest interligado a session/request_permission; allow → aprovar, deny/cancel → negar, correlacionado pelo id da chamada de função |
| Fidelidade de atualização e uso de ferramenta do cliente | Implementado | OutputChunk::ToolUpdate e OutputChunk::Usage expõem External_Agent de ToolCallUpdate/UsageUpdate; texto do agent inalterado |
| Conteúdo rico do prompt do cliente | Implementado | prompt_agent_content_with_policy transmite conteúdo ADK não textual como o bloco ACP correspondente |
| ACP remoto HTTP/WebSocket | Não anunciado | A implementação estável é stdio local |
| Recursos experimentais do protocolo | Não anunciado | Adicione somente após testes de implementação e interoperabilidade |
Teste manual do editor
Compile examples/acp_server e, em seguida, configure um cliente ACP para iniciar esse binário
com um caminho absoluto do manifesto e credenciais do modelo. Verifique:
- a resposta de inicialização informa a versão do protocolo 1;
- uma nova sessão aceita o diretório absoluto do projeto pretendido;
- o texto aparece como atualizações em tempo real antes da resposta final;
- a ferramenta de leitura inicia e as conclusões aparecem no cliente;
- o cancelamento encerra a rodada sem fechar a conexão;
- um prompt posterior é concluído com sucesso na mesma sessão;
- fechar e retomar preserva o histórico quando o serviço de sessão é durável.
Não use echo | cargo run para este teste. Cada pipe inicia um processo diferente
e não consegue preservar a conexão ou a sessão.
Exemplos relacionados
acp_client_hostacp_kiroacp_serveracp_full_protocol— referência da direção do servidor da Fase 2 com API-key, apoiada porRunner, com um teste de validação de ponta a ponta