mirror of
https://github.com/agentclientprotocol/claude-agent-acp.git
synced 2026-10-27 04:30:59 +00:00
feat: expose native subagents and async tasks (#1017)
## Summary - negotiate native ACP subagent sessions and AIR async task support - map Claude Agent/Task lifecycle to independent child session streams - publish background workflow, monitor, MCP, and backgrounded shell work as async tasks - attach background shell tasks to their originating tool calls so clients can update one command card and open its output log - stream task progress and preserve running, paused, completed, failed, and stopped states - keep synchronous shell work, generic tools, and task notifications out of user message chunks - preserve typed session failures and root permission/elicitation requests - preserve the legacy generic Agent/Task representation and flattened transcript opt-ins for clients without native subagent capability ## Compatibility The published ACP SDK does not yet contain PR #1992 types, so the change isolates the temporary structural cast in `src/acp-subagents.ts`. Clients that do not negotiate native subagent sessions retain the existing generic tool-call fallback, including the historical `_meta["subagent-transcript"]` capability and `forwardSubagentText` session option. Async tasks use the negotiated `asyncTasks` AIR capability and remain invisible to clients that do not advertise it. Claude does not expose a safe targeted child-cancel primitive, therefore child `cancel` and `close` capabilities remain disabled. ## Validation - `npm run check` - `npm run build` - `env -u ANTHROPIC_BASE_URL npm run test:run` (830 passed, 20 skipped) - `npm run test:run -- src/tests/async-tasks.test.ts` (5 passed) --------- Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
18
README.md
18
README.md
@@ -22,16 +22,16 @@ This tool implements an ACP agent by using the official [Claude Agent SDK](https
|
||||
|
||||
Learn more about the [Agent Client Protocol](https://agentclientprotocol.com/).
|
||||
|
||||
### Nested subagent transcripts
|
||||
### Subagent sessions
|
||||
|
||||
ACP 1.2 has no standard subagent tool kind or nested-message relationship. Clients that can render
|
||||
nested transcripts can opt in with `clientCapabilities._meta["subagent-transcript"] = true`.
|
||||
The agent then forwards subagent text, thinking, and tool calls, relating nested updates to the
|
||||
launching Agent/Task call through `_meta.claudeCode.parentToolUseId`. Agent/Task calls are marked
|
||||
with `_meta.claudeCode.subagent = true`.
|
||||
|
||||
Clients that do not advertise the capability retain the legacy flattened behavior. In both modes,
|
||||
the normal Agent/Task tool result is preserved as the protocol-compatible fallback.
|
||||
Subagents are exposed only after bilateral capability negotiation. Until the released ACP SDKs
|
||||
preserve the draft `clientCapabilities.subagents` field, a supporting client may advertise
|
||||
`nativeSubagentSessions` in `_meta.jetbrains.air.capabilities`; the adapter mirrors the capability
|
||||
in its initialize response. The canonical field remains supported and takes precedence once it is
|
||||
available. Without either client signal, Agent/Task lifecycle keeps its legacy ordinary ACP
|
||||
tool-call representation and child interactions stay on the root session. Clients that use the
|
||||
historical `_meta["subagent-transcript"]` capability or `forwardSubagentText` session option retain
|
||||
the flattened child transcript behavior.
|
||||
|
||||
## Contribution Policy
|
||||
|
||||
|
||||
Reference in New Issue
Block a user