mirror of
https://github.com/agentclientprotocol/claude-agent-acp.git
synced 2026-11-13 21:02:08 +00:00
Brings the RFD form of subagent reporting in line with the ACP [Subagent Sessions RFD](https://agentclientprotocol.com/rfds/subagents), which is moving to Preview in agentclientprotocol/agent-client-protocol#2800. The related RFD clarifications merged in agentclientprotocol/agent-client-protocol#2801. AIR output is unchanged, and no scenario snapshots changed. ## Changes - **`unknown` at a conversation reset.** A child that is still working at `conversation_reset` now reports `unknown` and `capabilities: null`, not `idle`. The adapter forgets its children at reset, so it can no longer observe or stop them. v1 reports it on the parent's `subagent_update`. v2 also sends `state_update` `unknown` on the child. - Stream end, stream error, `queryEnded`/`retire`, and `worker_restart` keep `idle`, because the work is known to have stopped. - In v2, the forgotten child's unfinished tool calls keep their last status. They are no longer forced to `failed`. - **`session` tool call content.** Added live and in replay, for the v1 RFD form and v2, only when the child is already announced: - `TaskStop` whose `task_id` is a child's agent id. - `SendMessage` that stays visible and targets a child's agent id. - v1 only: an Agent/Task launch that a permission request keeps visible. - The reference is repeated on every update that carries content, because `content` replaces the whole array. - **Docs.** The README's subagent section matches the code: SendMessage is hidden and reported as linked messages, `unknown` at reset, `session` content, and no `session_message_chunk`. Three stale comments are fixed. ## Workarounds and limits - **Post-response ordering still uses `setTimeout(0)`.** SDK 2.6.0 gives `onRequest` handlers no responder or after-response hook. The comments in `src/v2/agent.ts` and `src/v1/acp-agent.ts` now state what the ordering relies on: the response is queued in the microtask after the handler returns, and `Connection.sendMessage` is first-in, first-out. The SDK does not promise this. - **The `unknown` change assumes Claude Code keeps subagents running across `/clear`.** That comes from the existing v2 comment and test double. It was not checked against the real CLI. - No reference is added when a tool names a child by agent name, or for v2 launch calls that a permission request shows. - A child that is idle at reset keeps its `cancel` capability. Unchanged here. - A stream error with a client-supplied `spawnClaudeCodeProcess` still reports `idle`, although closing may not stop a remote CLI. ## Testing - `npm run build`: clean. - `npm run check`: clean. - `npm run test:run`: 73 files passed, 5 skipped. 4117 tests passed, 33 skipped. - Integration tests against the real CLI were not run.