ACP 테스트 및 지원 매트릭스
ACP는 양방향이다. 유용한 상호운용성 테스트는 알림과 중첩 요청이 도착하는 동안 하나의 연결을 열린 상태로 유지해야 하며, 분리된 JSON 줄들의 연속만으로는 세션 동작을 입증할 수 없다.
검증된 테스트
adk-acp 테스트 스위트는 공식 SDK Client를 메모리 내 전송을 통해 ADK-Rust SDK Agent에 연결하고 다음을 검증한다:
initialize
→ session/new
→ session/prompt
← session/update
← PromptResponse(end_turn)
→ session/close
→ session/list
→ session/resume
→ session/close
→ session/delete
별도의 테스트는 세션 취소, JSON-RPC 요청 취소 및 복구, 이벤트 매핑, 거절 우선 권한 메뉴, 불투명한 옵션 ID, 조작된 선택, 대기 중인 인간의 결정, 정확한 호출에 대한 allow-once 동작, MCP 구성 검증, 그리고 비밀이 가려진 디버그 출력을 다룬다. 2단계에서는 session/load 재생 순서 테스트(재생된 session/update는 저장된 이벤트의 시간 순서와 일치함), 멀티모달 프롬프트 매핑 및 거절 테스트(이미지와 오디오는 허용되고, 공개되지 않은 콘텐츠는 거절됨), 서버 권한 브리지 승인/거부/취소 테스트(취소는 거부로 매핑되며, 함수 호출 id로 상관됨), 그리고 에이전트 텍스트 표면을 회귀시키지 않으면서 ToolCallUpdate 및 UsageUpdate 표면이 나타남을 입증하는 클라이언트 충실도 테스트가 추가된다. 3단계에서는 세션 모드 및 구성 옵션 테스트(set_mode / set_config_option는 광고된 값을 기록하고 알 수 없는 값은 거부하며, 선택 항목은 session/load 전반에 걸쳐 유지됨), session/fork 격리 테스트(포크의 기록은 원본과 같고 원본은 변경되지 않은 상태로 남음), 사용 가능한 명령 및 세션 정보 활성화 테스트(에이전트가 명령을 선언하거나 제목을 기록할 때만 업데이트가 방출됨), 그리고 광고된 기능이 등록된 핸들러 및 활성화된 콘텐츠 매핑과 정확히 대응함을 주장하는 기능 정확도 테스트가 추가되며 — 여기에는 모드와 구성 옵션이 SessionControls 제공자가 있을 때만 광고된다는 점도 포함된다.
실시간 MCP 수명 주기 게이트는 실제 stdio MCP 자식 프로세스를 시작하고, 핸드셰이크를 완료하며, ACP 세션에서 사용되는 것과 동일한 McpToolset를 통해 해당 도구를 검색한다.
게이트 실행
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
acp_full_protocol 게이트는 실행 가능한 2단계 안전망이다. 프로세스 내부 채널을 통해 공식 SDK로 구동되는, no-API-key 및 Runner 기반 AcpServer로, 서브프로세스나 모델 자격 증명 없이 임베디드 리소스 및 이미지/오디오 프롬프트, 권한 브리지, session/load 재생 순서, 그리고 UsageUpdate / ToolCallUpdate 표면화를 포함한 서버 방향의 전체 2단계 표면을 검증한다.
현재 지원
| 영역 | 상태 | 노트 |
|---|---|---|
| Stable wire protocol v1 | 구현됨 | 공식 Rust SDK 1.2; 프로토콜 버전은 별도로 협상됨 |
| Local stdio client transport | 구현됨 | 단발성, 스트리밍, 영구 세션 |
| 클라이언트 권한 | 구현됨 | 기본 거부, 의미론적 매칭, 불투명 ID, 동기 또는 비동기 정책 |
| 클라이언트 파일 시스템 콜백 | 구현됨 API | 읽기와 쓰기가 독립적으로 공지됨 |
| 클라이언트 터미널 콜백 | 구현됨 API | create/output/wait/kill/release 트레이트 완비 |
| 클라이언트 제공 MCP | 구현됨 | stdio 필요; HTTP/SSE 기능으로 게이트됨 |
| ADK-Rust ACP 서버 | 구현됨 | New, prompt, load, update, cancel, close, list, resume, fork, set_mode, set_config_option, delete |
| 서버 세션 load + replay | 구현됨 | 저장된 세션을 재활성화하고 저장된 이벤트를 시간 순서대로 재생함; load_session advertised |
| 서버 세션 fork | 구현됨 | 기록과 관련 상태를 새 세션 id로 복사하고, 원본은 변경하지 않음; fork advertised |
| 서버 세션 modes + config options | 구현됨 | SessionControls로 provider-gated; set_mode / set_config_option는 검증되어 load/resume/fork 전반에 걸쳐 유지됨; 선언된 경우에만 advertised |
| 서버 사용 가능 명령 + session-info | 구현됨 | 에이전트가 명령을 선언하거나 제목을 기록할 때 활성화 시 방출되며, 그렇지 않으면 없음 |
| 서버 plan 업데이트 | 비활성 | Plan SessionUpdate 매핑은 존재하지만, ADK plan primitive가 plan 항목을 노출할 때까지 비활성 상태임 |
| 서버 session MCP | 구현됨 | stdio, 세션별, 시작 및 정리 범위가 제한됨 |
| 텍스트 및 리소스-링크 프롬프트 | 구현됨 | 공유 content 모듈을 통해 매핑됨 |
| 멀티모달 프롬프트(이미지, 오디오) | 구현됨 | Part::InlineData에 매핑됨; image/audio는 광고됨; 광고되지 않은 콘텐츠는 거부됨 |
| 임베디드 리소스 프롬프트 | 구현됨 | Part::EmbeddedResource에 매핑됨; embedded_context는 광고됨 |
| 서버 ADK 도구 승인에서 ACP로 | 구현됨 | ToolConfirmationRequest가 session/request_permission로 브리지됨; allow → approve, deny/cancel → deny, function-call id로 상관관계 지정 |
| 클라이언트 도구 업데이트 및 사용 충실도 | 구현됨 | OutputChunk::ToolUpdate와 OutputChunk::Usage이 External_Agent의 ToolCallUpdate/UsageUpdate를 노출함; agent text는 변경되지 않음 |
| 클라이언트 리치 프롬프트 콘텐츠 | 구현됨 | prompt_agent_content_with_policy는 텍스트가 아닌 ADK 콘텐츠를 일치하는 ACP 블록으로 전송합니다 |
| 원격 ACP HTTP/WebSocket | 표시되지 않음 | 안정 구현은 로컬 stdio입니다 |
| 실험적 프로토콜 기능 | 표시되지 않음 | 구현 및 상호운용성 테스트 후에만 추가하세요 |
수동 편집기 테스트
examples/acp_server를 빌드한 다음, 절대 manifest 경로와 모델 자격 증명을 사용하여 해당 바이너리를 시작하도록 ACP 클라이언트를 구성합니다. 다음을 확인합니다:
- 초기화 응답이 프로토콜 버전 1을 보고한다.
- 새 세션이 의도한 절대 프로젝트 디렉터리를 수락한다.
- 최종 응답 이전에 텍스트가 실시간 업데이트로 나타난다.
- read 도구가 시작되고 완료가 클라이언트에 나타난다.
- 취소가 연결을 닫지 않고 턴을 종료한다.
- 이후 프롬프트가 같은 세션에서 성공한다.
- 세션 서비스가 durable할 때 close 및 resume이 기록을 보존한다.
이 테스트에는 echo | cargo run를 사용하지 마십시오. 각 pipe는 서로 다른 프로세스를 시작하며 연결이나 세션을 보존할 수 없습니다.
관련 예제
acp_client_hostacp_kiroacp_serveracp_full_protocol— no-API-key,Runner-backed Phase 2 서버 방향 참조로, end-to-end 검증 테스트 포함