feat: expose native subagents and async tasks - #1017
Merged
Ololoshechkin merged 19 commits intoAug 27, 2026
Merged
Ololoshechkin merged 19 commits into
Ololoshechkin merged 19 commits into
Conversation
nikita-ashihmin
force-pushed
the
codex/acp-subagent-sessions
branch
from
August 25, 2026 13:44
b2d1315 to
c7ed6ec
Compare
Keep stream teardown progressing when lifecycle delivery fails, make terminal notifications retryable, and preserve root permissions and questions across early child attribution races.
Attach stable namespaced color hints to Claude tool calls so supporting clients can render compact categories while standard ACP clients continue to ignore the metadata safely.
Negotiate native sessions through AIR metadata while released ACP SDKs strip the draft canonical field. Derive Claude child names and tasks from Agent tool input and task lifecycle data regardless of event ordering.
Publish negotiated async task lifecycle, progress, and terminal state updates so AIR can render background work separately from user messages, generic tools, and subagent sessions.
Current Claude CLI versions may omit task_started and task_updated for run_in_background Bash commands. Recover the stable task identity from the structured Bash result so AIR receives the negotiated async lifecycle and can render its task tab and transcript status.
Claude can announce a local Bash task before its structured tool result proves that it was backgrounded. Promote the existing unannounced task instead of dropping the later evidence as a duplicate start.
Claude CLI exposes the output path only in the background Bash tool result. Carry the validated task-owned path on the negotiated async task spawn so clients can open the actual output without relying on a later Read tool call.
Include the originating tool call ID in async task spawn updates so clients can update the existing command card instead of creating a separate lifecycle entry.
Tool presentation categorization belongs to ACP clients, not the Claude adapter. Keep Claude metadata limited to provider-specific tool details.
Normalize Claude SDK task events and reconcile background task state without losing terminal metadata or source-tool affinity. Keep native child tool and permission updates in their owning ACP session and gate late interruption diagnostics to cancelled prompt handoffs.
Give native child lifecycles session-owned routing and immutable generations, including safe cancellation, hook cleanup, and history replay. Emit the draft ACP task and disconnected fields while preserving bilateral negotiation.
Advertise task-specific stopping and route AIR stop requests to the Claude SDK. Serialize concurrent stop attempts and publish the stopped terminal state.
nikita-ashihmin
force-pushed
the
codex/acp-subagent-sessions
branch
from
August 26, 2026 13:36
bed2051 to
8e7bde9
Compare
A backgrounded Bash command reaches the client as a tool call that completed instantly, with its real lifecycle published separately as an async task. Two things were missing from that picture. The tool call carried nothing saying the work continues, so its card reads as finished. Stamp the update the tool result already emits with an AIR marker instead of sending another notification. It rides the AIR namespace rather than `claudeCode` because a client without the asyncTasks capability is never sent the lifecycle that resolves it. A stop had no acknowledgement at all: the panel drops the task on its terminal state, and the SDK injects nothing into the model's context for a stopped shell task. Say it once in the transcript. `showInTranscript` does not gate this -- that flag decides whether a task owns a transcript card, not whether the agent may answer a direct user action -- and neither does terminal state: the SDK's own task_notification routinely wins the race against the stopTask response, so gating on it would silence the very stop the user asked for. `stopAnnounced` keeps it to one line per task. Building the AIR envelope by hand was already duplicated three times, and file-change-audit had grown its own copies of the meta keys and its own reader. Share `withAirMeta`/`airExtensionMeta` instead. This also folds supportsAgentFileChangeReport onto the common capability check, which accepts a peer advertising a later extension version rather than requiring exactly version 1. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
nikita-ashihmin
force-pushed
the
codex/acp-subagent-sessions
branch
from
August 26, 2026 18:42
8e7bde9 to
ce7f788
Compare
Ololoshechkin
approved these changes
Aug 27, 2026
Ololoshechkin
pushed a commit
that referenced
this pull request
Sep 1, 2026
🤖 I have created a release *beep* *boop* --- ## [0.71.0](v0.70.0...v0.71.0) (2026-08-31) ### Features * add ai generated session title ([#984](#984)) ([d334766](d334766)) * align Claude modes and clear-context planning ([#1004](#1004)) ([996d488](996d488)) * **deps:** Bump @anthropic-ai/claude-agent-sdk to 0.3.238 ([#1018](#1018)) ([ee9f300](ee9f300)) * expose native subagents and async tasks ([#1017](#1017)) ([14d192d](14d192d)) * expose permission mode kinds ([#1025](#1025)) ([caf609b](caf609b)) * report per-model token usage on prompt responses ([#1037](#1037)) ([fad4d10](fad4d10)) * support message-specific ACP session forks ([#1046](#1046)) ([c3ff343](c3ff343)) ### Bug Fixes * change min zod version to 4.x to avoid failing directory imports on 'v4' ([#1057](#1057)) ([7c66108](7c66108)) * defer steering while user input is pending ([#1045](#1045)) ([8710ce1](8710ce1)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). Co-authored-by: acp-release-bot[bot] <246668977+acp-release-bot[bot]@users.noreply.github.com>
srid
added a commit
to juspay/olai
that referenced
this pull request
Sep 2, 2026
…ied because upstream fixed neither (#468) The 0.70.0 adapter swallows the answer to a message steered into a running turn (upstream #958's settle heuristic, in v0.65.0+). v0.72.0's #1065 (`a04d354`) replaces that heuristic with exact `user_message_uuid` attribution; v0.73.0 is current and bumps the bundled SDK further. This moves the pin 0.70.0 → 0.73.0 the way #456 did, re-applies both Claude patches, and leaves live verification of the swallow to after deploy. ## The patches: both RE-APPLIED, neither retired **`background-tasks-visible` is still needed.** - Upstream [PR #941](agentclientprotocol/claude-agent-acp#941) is still open. - 0.71.0 landed [PR #1017](agentclientprotocol/claude-agent-acp#1017) (`14d192d`) — native subagents and AIR async tasks. That is **not** this patch absorbed. It publishes Monitor / background Bash lifecycle only to a client that advertised the `asyncTasks` AIR capability; olai does not, and the 0.73.0 dist says so (`backgroundedBashToolCall`: a client without that capability "is never sent that lifecycle"). The olai patch still keeps the arming tool call `in_progress` and stamps `_meta.claudeCode.backgroundTask`. - The helpers were re-anchored onto the new consumer (`sendUpdate` now routes through native subagents; the `task_*` cases call `asyncTasks.*` beside the live-background registry) and regenerated by `diff -u`. The added lines are byte-identical to the reviewed ones; `completeHookCallback` (new in 0.73.0) is kept, not gated. - [#1038](agentclientprotocol/claude-agent-acp#1038) is still unanswered. **`session-list-info` is still needed.** - `bash acp/session-list-info/regenerate.sh` against the new pin produced a patch whose listSessions body is the same rules. - One new hunk: 0.73.0 moved `getSessionInfo` out of `acp-agent.js` (session-titles is the remaining caller), and the empty-transcript arbiter still needs it, so the regen restores the named import. - [#1052](agentclientprotocol/claude-agent-acp#1052) is unanswered. **`pi-mcp-servers.patch` is untouched:** the `pi-acp` pin does not move here, and it still applies at `-F0`. **The two things that are NOT hunk context were checked, not assumed.** `message.timestamp` is now declared on SDK 0.3.257's `SessionMessage` (`timestamp?: string`); `getSessionInfo` is still exported. The five task message types are still in that SDK. The pairing rules live in `facts.js`, which this bump did not edit. The lockfile moves `@anthropic-ai/claude-agent-sdk` 0.3.232 → 0.3.257 and `@agentclientprotocol/sdk` 1.3.0 → 1.4.0 with the adapter. #1017's native subagents / AIR async tasks, and `sessionCapabilities.subagents`, are gated on capabilities olai does not advertise. `claudeCodeMetaFromToolUse` kept `subagent: true`. `#1039`'s interrupt guard (`queuedHere`) is a different swallow from #958/#1065 and is not touched. ## Local suites Author-side only, per the brief: `just typecheck` clean, `just test` **5141 pass / 0 fail**, the browser-condition half 92/0, `just fmt-check` clean, `nix build .#olai` bakes `0.73.0+pi-0.0.33` into the packaged wrapper. One-off e2e of the chat/acp features (`the_agent`, `the_agent_waits_on_you`, `choosing_an_agent`): **146 scenarios / 1633 steps, all passed.** ## Deferrals No deferrals.
nathansmithopenclaw-alt
added a commit
to nathansmithopenclaw-alt/claude-agent-acp
that referenced
this pull request
Sep 3, 2026
The async task lifecycle added in agentclientprotocol#1017 has a silent failure mode. Whether any task event can be emitted at all depends on the Claude binary the adapter spawned, and the client is never told which one that is: `claudeCliPath()` resolves either an operator-configured `CLAUDE_CODE_EXECUTABLE` or the platform binary bundled with the SDK. An empty async task stream therefore carries two meanings a client cannot tell apart -- no background task ran, or this binary never reports them. Report the two facts at the altitudes they actually live at. Which branch `claudeCliPath()` takes is fixed for the adapter process, so `initialize` carries `_meta.asyncTaskReadiness.cli.source` once rather than repeating it per session. Readiness is per session and monotone: it starts unconfirmed and latches to confirmed on the first task lifecycle event observed for that session, published as a single `session_info_update`. The latch is worth a frame because the adapter observes strictly more lifecycle than the client does. `AsyncTaskRuntime.taskStarted()` marks subagent tasks ignored and publishes nothing for them, so a session whose background work is entirely subagents proves the lifecycle is live to the adapter while the client's async task stream stays empty for the session's whole lifetime. The latch is the only way that client learns its silence is real. Only the resolution source goes on the wire. The resolved path is an operator's filesystem layout, and nothing else in this adapter puts it in a protocol frame. No CLI version is reported either: it is knowable without spawning the binary only for the bundled case, and a field that is accurate for one source and a guess for the other is worse than its absence. The frame is published ahead of the subagent and async task runtimes so it leads the sequence a task_started produces instead of displacing the tail consumers read for a turn's outcome, and only for a client that negotiated the async task lifecycle: readiness describes that stream, so a client which opted out of it gains nothing from being told the stream is live. No existing test changes as a result; the diff is purely additive.
lodystage Bot
added a commit
to LodyAI/acp-extension-claude
that referenced
this pull request
Sep 18, 2026
* feat(deps): Bump @anthropic-ai/claude-agent-sdk to 0.3.238 (#1018)
Bumps the minor group with 6 updates in the / directory:
| Package | From | To |
| --- | --- | --- |
|
[@anthropic-ai/claude-agent-sdk](https://github.com/anthropics/claude-agent-sdk-typescript)
| `0.3.232` | `0.3.233` |
| [@tsconfig/node22](https://github.com/tsconfig/bases/tree/HEAD/bases)
| `22.0.5` | `22.0.6` |
| [@hono/node-server](https://github.com/honojs/node-server) | `2.1.0` |
`2.1.1` |
| [@tsconfig/node10](https://github.com/tsconfig/bases/tree/HEAD/bases)
| `1.0.12` | `1.0.13` |
| [es-module-lexer](https://github.com/guybedford/es-module-lexer) |
`2.3.1` | `2.3.2` |
| [jose](https://github.com/panva/jose) | `6.2.8` | `6.2.9` |
Updates `@anthropic-ai/claude-agent-sdk` from 0.3.232 to 0.3.233
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/anthropics/claude-agent-sdk-typescript/releases">@anthropic-ai/claude-agent-sdk's
releases</a>.</em></p>
<blockquote>
<h2>v0.3.233</h2>
<h2>What's changed</h2>
<ul>
<li>Notification hooks now fire for pending permission prompts on the
SDK path, matching the interactive REPL behavior</li>
<li>Todo/task-tracking tools
(<code>TaskCreate</code>/<code>TaskGet</code>/<code>TaskUpdate</code>/<code>TaskList</code>,
<code>TodoWrite</code>) are no longer in the default tool surface on
Opus 4.8, Sonnet 5, Fable 5, Mythos 5, and newer models; name them in
the <code>tools</code> option or reference them in
<code>allowedTools</code> (or set
<code>CLAUDE_CODE_ENABLE_TODO_TOOLS=1</code>) to keep them</li>
</ul>
<h2>Update</h2>
<pre lang="sh"><code>npm install @anthropic-ai/claude-agent-sdk@0.3.233
# or
yarn add @anthropic-ai/claude-agent-sdk@0.3.233
# or
pnpm add @anthropic-ai/claude-agent-sdk@0.3.233
# or
bun add @anthropic-ai/claude-agent-sdk@0.3.233
</code></pre>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/anthropics/claude-agent-sdk-typescript/blob/main/CHANGELOG.md">@anthropic-ai/claude-agent-sdk's
changelog</a>.</em></p>
<blockquote>
<h2>0.3.233</h2>
<ul>
<li>Notification hooks now fire for pending permission prompts on the
SDK path, matching the interactive REPL behavior</li>
<li>Todo/task-tracking tools
(<code>TaskCreate</code>/<code>TaskGet</code>/<code>TaskUpdate</code>/<code>TaskList</code>,
<code>TodoWrite</code>) are no longer in the default tool surface on
Opus 4.8, Sonnet 5, Fable 5, Mythos 5, and newer models; name them in
the <code>tools</code> option or reference them in
<code>allowedTools</code> (or set
<code>CLAUDE_CODE_ENABLE_TODO_TOOLS=1</code>) to keep them</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/anthropics/claude-agent-sdk-typescript/commit/73a28abad0d5015568404ecfe0d9cad3ed479fe3"><code>73a28ab</code></a>
chore: Update CHANGELOG.md</li>
<li>See full diff in <a
href="https://github.com/anthropics/claude-agent-sdk-typescript/compare/v0.3.232...v0.3.233">compare
view</a></li>
</ul>
</details>
<br />
Updates `@tsconfig/node22` from 22.0.5 to 22.0.6
<details>
<summary>Commits</summary>
<ul>
<li>See full diff in <a
href="https://github.com/tsconfig/bases/commits/HEAD/bases">compare
view</a></li>
</ul>
</details>
<br />
Updates `@anthropic-ai/claude-agent-sdk-darwin-arm64` from 0.3.232 to
0.3.233
Updates `@anthropic-ai/claude-agent-sdk-darwin-x64` from 0.3.232 to
0.3.233
Updates `@anthropic-ai/claude-agent-sdk-linux-arm64` from 0.3.232 to
0.3.233
Updates `@anthropic-ai/claude-agent-sdk-linux-arm64-musl` from 0.3.232
to 0.3.233
Updates `@anthropic-ai/claude-agent-sdk-linux-x64` from 0.3.232 to
0.3.233
Updates `@anthropic-ai/claude-agent-sdk-linux-x64-musl` from 0.3.232 to
0.3.233
Updates `@anthropic-ai/claude-agent-sdk-win32-arm64` from 0.3.232 to
0.3.233
Updates `@anthropic-ai/claude-agent-sdk-win32-x64` from 0.3.232 to
0.3.233
Updates `@hono/node-server` from 2.1.0 to 2.1.1
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/honojs/node-server/releases">@hono/node-server's
releases</a>.</em></p>
<blockquote>
<h2>v2.1.1</h2>
<h2>What's Changed</h2>
<ul>
<li>perf: lazily materialize request headers by <a
href="https://github.com/BlankParticle"><code>@BlankParticle</code></a>
in <a
href="https://redirect.github.com/honojs/node-server/pull/389">honojs/node-server#389</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/honojs/node-server/compare/v2.1.0...v2.1.1">https://github.com/honojs/node-server/compare/v2.1.0...v2.1.1</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/honojs/node-server/commit/73c03adfb01928fcd5f5b20faebd5d692f83fc93"><code>73c03ad</code></a>
2.1.1</li>
<li><a
href="https://github.com/honojs/node-server/commit/5515aa0a37bcb59633388b1ace51ddb170a75529"><code>5515aa0</code></a>
perf: lazily materialize request headers (<a
href="https://redirect.github.com/honojs/node-server/issues/389">#389</a>)</li>
<li>See full diff in <a
href="https://github.com/honojs/node-server/compare/v2.1.0...v2.1.1">compare
view</a></li>
</ul>
</details>
<br />
Updates `@tsconfig/node10` from 1.0.12 to 1.0.13
<details>
<summary>Commits</summary>
<ul>
<li>See full diff in <a
href="https://github.com/tsconfig/bases/commits/HEAD/bases">compare
view</a></li>
</ul>
</details>
<br />
Updates `es-module-lexer` from 2.3.1 to 2.3.2
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/guybedford/es-module-lexer/releases">es-module-lexer's
releases</a>.</em></p>
<blockquote>
<h2>2.3.2</h2>
<h2>What's Changed</h2>
<ul>
<li>perf(lexer): skip identifier and number runs by <a
href="https://github.com/BridgeAR"><code>@BridgeAR</code></a> in <a
href="https://redirect.github.com/guybedford/es-module-lexer/pull/227">guybedford/es-module-lexer#227</a></li>
<li>fix: annotate asm.js integer return type by <a
href="https://github.com/Justineo"><code>@Justineo</code></a> in <a
href="https://redirect.github.com/guybedford/es-module-lexer/pull/230">guybedford/es-module-lexer#230</a></li>
<li>Add side effects to package.json by <a
href="https://github.com/denisx"><code>@denisx</code></a> in <a
href="https://redirect.github.com/guybedford/es-module-lexer/pull/183">guybedford/es-module-lexer#183</a></li>
<li>fix: forward the sourcename through the pre-init parse path by <a
href="https://github.com/hdimer"><code>@hdimer</code></a> in <a
href="https://redirect.github.com/guybedford/es-module-lexer/pull/236">guybedford/es-module-lexer#236</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a href="https://github.com/Justineo"><code>@Justineo</code></a>
made their first contribution in <a
href="https://redirect.github.com/guybedford/es-module-lexer/pull/230">guybedford/es-module-lexer#230</a></li>
<li><a href="https://github.com/denisx"><code>@denisx</code></a> made
their first contribution in <a
href="https://redirect.github.com/guybedford/es-module-lexer/pull/183">guybedford/es-module-lexer#183</a></li>
<li><a href="https://github.com/hdimer"><code>@hdimer</code></a> made
their first contribution in <a
href="https://redirect.github.com/guybedford/es-module-lexer/pull/236">guybedford/es-module-lexer#236</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/guybedford/es-module-lexer/compare/2.3.1...2.3.2">https://github.com/guybedford/es-module-lexer/compare/2.3.1...2.3.2</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/guybedford/es-module-lexer/commit/08ee1be867f4bf493a64200e51294983bf5e8a8e"><code>08ee1be</code></a>
fix: forward the sourcename through the pre-init parse path (<a
href="https://redirect.github.com/guybedford/es-module-lexer/issues/236">#236</a>)</li>
<li><a
href="https://github.com/guybedford/es-module-lexer/commit/5a824a13a6723ab33d2b2756effc5e904899bbbf"><code>5a824a1</code></a>
Update package.json (<a
href="https://redirect.github.com/guybedford/es-module-lexer/issues/183">#183</a>)</li>
<li><a
href="https://github.com/guybedford/es-module-lexer/commit/8274d0331a199d525c3a596ebce3e09e505df22e"><code>8274d03</code></a>
fix: annotate asm.js integer return type (<a
href="https://redirect.github.com/guybedford/es-module-lexer/issues/230">#230</a>)</li>
<li><a
href="https://github.com/guybedford/es-module-lexer/commit/2abc49eafca47730b5ec395c0f7c1b2e136312c5"><code>2abc49e</code></a>
perf(lexer): skip identifier and number runs (<a
href="https://redirect.github.com/guybedford/es-module-lexer/issues/227">#227</a>)</li>
<li>See full diff in <a
href="https://github.com/guybedford/es-module-lexer/compare/2.3.1...2.3.2">compare
view</a></li>
</ul>
</details>
<br />
Updates `jose` from 6.2.8 to 6.2.9
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/panva/jose/releases">jose's
releases</a>.</em></p>
<blockquote>
<h2>v6.2.9</h2>
<h3>Fixes</h3>
<ul>
<li>reject a JWE whose generated Key Management Parameters collide (<a
href="https://github.com/panva/jose/commit/6ed19a6a9798a7d55a647958b4ee816c4b77627d">6ed19a6</a>)</li>
<li><strong>types:</strong> undeprecate PBES2 p2c parameter (<a
href="https://github.com/panva/jose/commit/33bf832986d21cce0336b27441e3588499a70d67">33bf832</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/panva/jose/blob/main/CHANGELOG.md">jose's
changelog</a>.</em></p>
<blockquote>
<h2><a
href="https://github.com/panva/jose/compare/v6.2.8...v6.2.9">6.2.9</a>
(2026-08-15)</h2>
<h3>Fixes</h3>
<ul>
<li>reject a JWE whose generated Key Management Parameters collide (<a
href="https://github.com/panva/jose/commit/6ed19a6a9798a7d55a647958b4ee816c4b77627d">6ed19a6</a>)</li>
<li><strong>types:</strong> undeprecate PBES2 p2c parameter (<a
href="https://github.com/panva/jose/commit/33bf832986d21cce0336b27441e3588499a70d67">33bf832</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/panva/jose/commit/f3a3c780b9bd8d7d25cb7c5dd5d4e57164d4fbfc"><code>f3a3c78</code></a>
chore(release): 6.2.9</li>
<li><a
href="https://github.com/panva/jose/commit/33bf832986d21cce0336b27441e3588499a70d67"><code>33bf832</code></a>
fix(types): undeprecate PBES2 p2c parameter</li>
<li><a
href="https://github.com/panva/jose/commit/6ed19a6a9798a7d55a647958b4ee816c4b77627d"><code>6ed19a6</code></a>
fix: reject a JWE whose generated Key Management Parameters collide</li>
<li><a
href="https://github.com/panva/jose/commit/944840d16704db727fad2bfaa8385e95b0a52bfe"><code>944840d</code></a>
ci: use shared release workflows</li>
<li><a
href="https://github.com/panva/jose/commit/05bccf239936a0bc0892f32ca86ff079585f5d13"><code>05bccf2</code></a>
chore: bump packages</li>
<li><a
href="https://github.com/panva/jose/commit/f7392d1217ee506cf15a0c4aaadf22f9c8c07db8"><code>f7392d1</code></a>
test: account for workerd nodejs_compat flag default changes</li>
<li><a
href="https://github.com/panva/jose/commit/4e944be71e9bb44704702327fc3c163e93de21c4"><code>4e944be</code></a>
ci: drop the wait-for-npm machinery</li>
<li><a
href="https://github.com/panva/jose/commit/4285b6f411e2f7f1ac09f7fd97ef836dda01981b"><code>4285b6f</code></a>
chore(deps-dev): bump undici</li>
<li><a
href="https://github.com/panva/jose/commit/cb114ecde718b06423c426109454b418e5d76497"><code>cb114ec</code></a>
chore: cleanup after release</li>
<li>See full diff in <a
href="https://github.com/panva/jose/compare/v6.2.8...v6.2.9">compare
view</a></li>
</ul>
</details>
<br />
Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.
[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)
---
<details>
<summary>Dependabot commands and options</summary>
<br />
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions
</details>
---------
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Ben Brandt <benjamin.j.brandt@gmail.com>
* feat: align Claude modes and clear-context planning (#1004)
## Summary
- translate Claude SDK permission suggestions and tool-specific
decisions into ACP v1 presentation and editable option metadata
- align Claude session permission modes and clear-context plan handling
- split permission effects, modes, normalization, option construction,
presentation, and response handling into focused modules
- document the permission extension and add unit plus live-audit
coverage for native edge cases
## Tests
- `npm run check`
- `npm run build`
- `env -u ANTHROPIC_BASE_URL npm run test:run` (931 passed, 27 skipped)
* feat: expose permission mode kinds (#1025)
## Summary
- expose semantic permission mode kinds through ACP mode metadata
- extract session mode policy and synchronization into a dedicated
manager
- cover mode initialization, selection, fallback, and permission
integration
## Tests
- `npm run check`
- `npm run build`
- `env -u ANTHROPIC_BASE_URL npm run test:run` (971 passed, 27 skipped)
* feat: report per-model token usage on prompt responses (#1037)
Add per turn model usage in the same way as in codex-acp, so that we can
estimate in AI Assistant AI Credit consumption by agent.
* fix: defer steering while user input is pending (#1045)
## Problem
The ACP steering extension injects follow-up user messages into a
running Claude SDK turn. Until now, every injected message used priority
`now`. That is normally desirable because it makes Claude react
immediately, but `now` is interrupting delivery: the SDK aborts the
currently running cycle before processing the new message.
This becomes unsafe while the SDK is blocked in a user-input callback,
such as a permission request or elicitation. Interrupting that cycle
makes the SDK send `$/cancel_request` for the pending ACP request. The
client then removes the permission/elicitation card before the user can
answer it. Depending on timing, the original ACP prompt can remain
pending because the callback and interrupted cycle no longer complete
through their normal lifecycle.
The failure sequence was:
1. Claude requests permission or opens an elicitation.
2. The ACP client displays a user-input card and waits for an answer.
3. The user sends a steering message while that card is still open.
4. The adapter injects the message with priority `now`.
5. The Claude SDK interrupts the cycle and emits `$/cancel_request` for
the open card.
6. The card disappears, and the original prompt may be left waiting
indefinitely.
## Fix
Track the number of permission/elicitation requests currently awaiting
user input for each session. Steering now selects its internal SDK
delivery priority as follows:
- `later` while at least one user-input request is pending, so the
steering message is queued without interrupting or cancelling the open
request;
- `now` at all other times, preserving the existing immediate steering
behavior.
The state is a counter rather than a boolean because multiple background
subagents can have concurrent permission requests. The `finally` cleanup
keeps the count correct for accepted, declined, cancelled, aborted, and
failed requests.
All ACP-backed user-input paths are covered:
- regular tool permission requests;
- the built-in `AskUserQuestion` form elicitation;
- MCP form/URL elicitations;
- refusal-fallback user dialogs.
## Regression coverage
Added parameterized tests that hold each user-input path open, inject a
steering message, and verify that the SDK message uses priority `later`.
The existing steering regression test continues to verify priority `now`
when no user input is pending. The tests also verify that the
pending-user-input state is cleared after the request settles.
Fixes IJAI-1191.
## Validation
- `npm run check`
- `npm run build`
- `env -u ANTHROPIC_BASE_URL npm run test:run` — 975 passed, 27 skipped
`ANTHROPIC_BASE_URL` was removed only for the test command because the
Codex environment injects a local proxy URL, while four provider tests
intentionally assert the native `https://api.anthropic.com` default.
* 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>
* feat: support message-specific ACP session forks (#1046)
## Summary
- keep the standard latest-turn ACP fork behavior
- accept an optional AIR fork point at `_meta.jetbrains.air.fork`
- translate the ACP `messageId` to the Claude transcript UUID
- use the current Agent SDK `forkSession(..., { upToMessageId })` API
- resume the new SDK session with the same working directory and
additional directories
No Agent SDK dependency update is required. Version `0.3.238` already
provides the required API.
## Tests
- `npm run build`
- `npm run lint`
- `env -u ANTHROPIC_BASE_URL npm run test:run` — 981 passed, 27 skipped
* fix: change min zod version to 4.x to avoid failing directory imports on 'v4' (#1057)
Currently, `package.json` allows zod version `3.x`. But
`agentclientprotocol/sdk` and our code use explicit `zod/v4` imports.
But `v4` became a proper ES module only in `4.x`. Before that, it was
just a directory. So if a user has zod 3.x, running this ACP server will
fail with `ERR_UNSUPPORTED_DIR_IMPORT`.
* fix(LLM-25012): OAuth2 Authentication for MCP Server Connections (#1059)
* chore(main): release 0.71.0 (#1016)
:robot: I have created a release *beep* *boop*
---
##
[0.71.0](https://github.com/agentclientprotocol/claude-agent-acp/compare/v0.70.0...v0.71.0)
(2026-08-31)
### Features
* add ai generated session title
([#984](https://github.com/agentclientprotocol/claude-agent-acp/issues/984))
([d334766](https://github.com/agentclientprotocol/claude-agent-acp/commit/d334766ef95dd89201979d42252e3d2a5a259cb9))
* align Claude modes and clear-context planning
([#1004](https://github.com/agentclientprotocol/claude-agent-acp/issues/1004))
([996d488](https://github.com/agentclientprotocol/claude-agent-acp/commit/996d488589b8db7a0f9af3dfc7b886d9d47ebae9))
* **deps:** Bump @anthropic-ai/claude-agent-sdk to 0.3.238
([#1018](https://github.com/agentclientprotocol/claude-agent-acp/issues/1018))
([ee9f300](https://github.com/agentclientprotocol/claude-agent-acp/commit/ee9f300db4562e8b7958cec9fa63dab05a5c2eb0))
* expose native subagents and async tasks
([#1017](https://github.com/agentclientprotocol/claude-agent-acp/issues/1017))
([14d192d](https://github.com/agentclientprotocol/claude-agent-acp/commit/14d192d1087ea8662392b5c61c9fcdd496c5a179))
* expose permission mode kinds
([#1025](https://github.com/agentclientprotocol/claude-agent-acp/issues/1025))
([caf609b](https://github.com/agentclientprotocol/claude-agent-acp/commit/caf609b56c91f677ffe82b6e9d11d9e9dfd99d45))
* report per-model token usage on prompt responses
([#1037](https://github.com/agentclientprotocol/claude-agent-acp/issues/1037))
([fad4d10](https://github.com/agentclientprotocol/claude-agent-acp/commit/fad4d10e46c5e65fc6d426c98074bbb76067bf25))
* support message-specific ACP session forks
([#1046](https://github.com/agentclientprotocol/claude-agent-acp/issues/1046))
([c3ff343](https://github.com/agentclientprotocol/claude-agent-acp/commit/c3ff3438844f5249d6a7f5c297906e2cd3d5fa7f))
### Bug Fixes
* change min zod version to 4.x to avoid failing directory imports on
'v4'
([#1057](https://github.com/agentclientprotocol/claude-agent-acp/issues/1057))
([7c66108](https://github.com/agentclientprotocol/claude-agent-acp/commit/7c6610835f26f18cd162b78dff74a7b7cd74497a))
* defer steering while user input is pending
([#1045](https://github.com/agentclientprotocol/claude-agent-acp/issues/1045))
([8710ce1](https://github.com/agentclientprotocol/claude-agent-acp/commit/8710ce1cbccf562cb04b4bcc30e053e960aee05f))
---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).
Co-authored-by: acp-release-bot[bot] <246668977+acp-release-bot[bot]@users.noreply.github.com>
* feat(deps): Update to @anthropic-ai/claude-agent-sdk 0.3.252 (#1062)
Bumps the minor group with 17 updates in the / directory:
| Package | From | To |
| --- | --- | --- |
|
[@agentclientprotocol/sdk](https://github.com/agentclientprotocol/typescript-sdk)
| `1.3.0` | `1.4.0` |
|
[@anthropic-ai/claude-agent-sdk](https://github.com/anthropics/claude-agent-sdk-typescript)
| `0.3.238` | `0.3.251` |
| [zod](https://github.com/colinhacks/zod) | `4.4.3` | `4.5.2` |
|
[@anthropic-ai/sdk](https://github.com/anthropics/anthropic-sdk-typescript)
| `0.120.0` | `0.122.0` |
|
[@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node)
| `26.2.0` | `26.4.0` |
|
[@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin)
| `8.67.0` | `8.68.0` |
|
[@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser)
| `8.67.0` | `8.68.0` |
| [eslint](https://github.com/eslint/eslint) | `10.8.1` | `10.9.1` |
|
[@jridgewell/sourcemap-codec](https://github.com/jridgewell/sourcemaps/tree/HEAD/packages/sourcemap-codec)
| `1.5.5` | `1.6.0` |
|
[express-rate-limit](https://github.com/express-rate-limit/express-rate-limit)
| `8.6.2` | `8.7.0` |
| [hono](https://github.com/honojs/hono) | `4.13.2` | `4.13.5` |
| [ip-address](https://github.com/beaugunderson/ip-address) | `10.5.0` |
`10.7.0` |
| [jose](https://github.com/panva/jose) | `6.2.9` | `6.2.10` |
| [negotiator](https://github.com/jshttp/negotiator) | `1.0.0` | `1.1.0`
|
| [picomatch](https://github.com/micromatch/picomatch) | `4.0.5` |
`4.0.7` |
|
[rolldown](https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown)
| `1.2.5` | `1.2.6` |
|
[standardwebhooks](https://github.com/standard-webhooks/standard-webhooks)
| `1.0.0` | `1.1.1` |
Updates `@agentclientprotocol/sdk` from 1.3.0 to 1.4.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/agentclientprotocol/typescript-sdk/releases">@agentclientprotocol/sdk's
releases</a>.</em></p>
<blockquote>
<h2>v1.4.0</h2>
<h2><a
href="https://github.com/agentclientprotocol/typescript-sdk/compare/v1.3.0...v1.4.0">1.4.0</a>
(2026-08-20)</h2>
<h3>Features</h3>
<ul>
<li>Stabilize elicitation APIs (<a
href="https://redirect.github.com/agentclientprotocol/typescript-sdk/issues/242">#242</a>)
(<a
href="https://github.com/agentclientprotocol/typescript-sdk/commit/dc3b0e420f5a6334ced6404832d8113f5ec93916">dc3b0e4</a>)</li>
</ul>
<h3>Bug Fixes</h3>
<ul>
<li><strong>jsonrpc:</strong> report malformed input (<a
href="https://redirect.github.com/agentclientprotocol/typescript-sdk/issues/230">#230</a>)
(<a
href="https://github.com/agentclientprotocol/typescript-sdk/commit/0819dbebfbed9e8262f6c6617ac57d3408120b1b">0819dbe</a>)</li>
<li><strong>server:</strong> preserve routed outbound messages (<a
href="https://redirect.github.com/agentclientprotocol/typescript-sdk/issues/231">#231</a>)
(<a
href="https://github.com/agentclientprotocol/typescript-sdk/commit/5f58a95a10bfb67cc21c9c48c8436cf021c67fd8">5f58a95</a>)</li>
<li><strong>v2:</strong> enforce initialization lifecycle (<a
href="https://redirect.github.com/agentclientprotocol/typescript-sdk/issues/235">#235</a>)
(<a
href="https://github.com/agentclientprotocol/typescript-sdk/commit/b7d6e81feae289e171ebaf78b4b3db8386c1fff0">b7d6e81</a>)</li>
<li><strong>v2:</strong> enforce method contracts (<a
href="https://redirect.github.com/agentclientprotocol/typescript-sdk/issues/229">#229</a>)
(<a
href="https://github.com/agentclientprotocol/typescript-sdk/commit/01010146a731212fbbb677d6055e0b7bf183b288">0101014</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/agentclientprotocol/typescript-sdk/blob/main/CHANGELOG.md">@agentclientprotocol/sdk's
changelog</a>.</em></p>
<blockquote>
<h2><a
href="https://github.com/agentclientprotocol/typescript-sdk/compare/v1.3.0...v1.4.0">1.4.0</a>
(2026-08-20)</h2>
<h3>Features</h3>
<ul>
<li>Stabilize elicitation APIs (<a
href="https://redirect.github.com/agentclientprotocol/typescript-sdk/issues/242">#242</a>)
(<a
href="https://github.com/agentclientprotocol/typescript-sdk/commit/dc3b0e420f5a6334ced6404832d8113f5ec93916">dc3b0e4</a>)</li>
</ul>
<h3>Bug Fixes</h3>
<ul>
<li><strong>jsonrpc:</strong> report malformed input (<a
href="https://redirect.github.com/agentclientprotocol/typescript-sdk/issues/230">#230</a>)
(<a
href="https://github.com/agentclientprotocol/typescript-sdk/commit/0819dbebfbed9e8262f6c6617ac57d3408120b1b">0819dbe</a>)</li>
<li><strong>server:</strong> preserve routed outbound messages (<a
href="https://redirect.github.com/agentclientprotocol/typescript-sdk/issues/231">#231</a>)
(<a
href="https://github.com/agentclientprotocol/typescript-sdk/commit/5f58a95a10bfb67cc21c9c48c8436cf021c67fd8">5f58a95</a>)</li>
<li><strong>v2:</strong> enforce initialization lifecycle (<a
href="https://redirect.github.com/agentclientprotocol/typescript-sdk/issues/235">#235</a>)
(<a
href="https://github.com/agentclientprotocol/typescript-sdk/commit/b7d6e81feae289e171ebaf78b4b3db8386c1fff0">b7d6e81</a>)</li>
<li><strong>v2:</strong> enforce method contracts (<a
href="https://redirect.github.com/agentclientprotocol/typescript-sdk/issues/229">#229</a>)
(<a
href="https://github.com/agentclientprotocol/typescript-sdk/commit/01010146a731212fbbb677d6055e0b7bf183b288">0101014</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/agentclientprotocol/typescript-sdk/commit/e6463f444093ed7c5f1cc937c3f32afb5853e906"><code>e6463f4</code></a>
chore(main): release 1.4.0 (<a
href="https://redirect.github.com/agentclientprotocol/typescript-sdk/issues/237">#237</a>)</li>
<li><a
href="https://github.com/agentclientprotocol/typescript-sdk/commit/dc3b0e420f5a6334ced6404832d8113f5ec93916"><code>dc3b0e4</code></a>
feat: Stabilize elicitation APIs (<a
href="https://redirect.github.com/agentclientprotocol/typescript-sdk/issues/242">#242</a>)</li>
<li><a
href="https://github.com/agentclientprotocol/typescript-sdk/commit/b7d6e81feae289e171ebaf78b4b3db8386c1fff0"><code>b7d6e81</code></a>
fix(v2): enforce initialization lifecycle (<a
href="https://redirect.github.com/agentclientprotocol/typescript-sdk/issues/235">#235</a>)</li>
<li><a
href="https://github.com/agentclientprotocol/typescript-sdk/commit/7585334c5b738868583d561bdfc97caf77a3f3ba"><code>7585334</code></a>
chore(deps): bump the minor group with 19 updates (<a
href="https://redirect.github.com/agentclientprotocol/typescript-sdk/issues/241">#241</a>)</li>
<li><a
href="https://github.com/agentclientprotocol/typescript-sdk/commit/01010146a731212fbbb677d6055e0b7bf183b288"><code>0101014</code></a>
fix(v2): enforce method contracts (<a
href="https://redirect.github.com/agentclientprotocol/typescript-sdk/issues/229">#229</a>)</li>
<li><a
href="https://github.com/agentclientprotocol/typescript-sdk/commit/e1054d0122e844cca9f1016a598a1da06f78ccef"><code>e1054d0</code></a>
chore(deps): bump crate-ci/typos from 1.48.0 to 1.49.0 (<a
href="https://redirect.github.com/agentclientprotocol/typescript-sdk/issues/238">#238</a>)</li>
<li><a
href="https://github.com/agentclientprotocol/typescript-sdk/commit/611e1fea6a10697028e41ff2665154e3c8020c8b"><code>611e1fe</code></a>
chore(deps): bump the minor group with 17 updates (<a
href="https://redirect.github.com/agentclientprotocol/typescript-sdk/issues/239">#239</a>)</li>
<li><a
href="https://github.com/agentclientprotocol/typescript-sdk/commit/5ae784b010f8aabc40df90914efd0d56efd04bbe"><code>5ae784b</code></a>
chore(deps-dev): bump nanoid from 3.3.16 to 3.3.18 (<a
href="https://redirect.github.com/agentclientprotocol/typescript-sdk/issues/240">#240</a>)</li>
<li><a
href="https://github.com/agentclientprotocol/typescript-sdk/commit/f838f942e0bfd1c6191aeef22566a7517fd0255f"><code>f838f94</code></a>
chore: verify generated protocol sources (<a
href="https://redirect.github.com/agentclientprotocol/typescript-sdk/issues/232">#232</a>)</li>
<li><a
href="https://github.com/agentclientprotocol/typescript-sdk/commit/5f58a95a10bfb67cc21c9c48c8436cf021c67fd8"><code>5f58a95</code></a>
fix(server): preserve routed outbound messages (<a
href="https://redirect.github.com/agentclientprotocol/typescript-sdk/issues/231">#231</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/agentclientprotocol/typescript-sdk/compare/v1.3.0...v1.4.0">compare
view</a></li>
</ul>
</details>
<br />
Updates `@anthropic-ai/claude-agent-sdk` from 0.3.238 to 0.3.251
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/anthropics/claude-agent-sdk-typescript/releases">@anthropic-ai/claude-agent-sdk's
releases</a>.</em></p>
<blockquote>
<h2>v0.3.251</h2>
<h2>What's changed</h2>
<ul>
<li>Updated to parity with Claude Code v2.1.251</li>
</ul>
<h2>Update</h2>
<pre lang="sh"><code>npm install @anthropic-ai/claude-agent-sdk@0.3.251
# or
yarn add @anthropic-ai/claude-agent-sdk@0.3.251
# or
pnpm add @anthropic-ai/claude-agent-sdk@0.3.251
# or
bun add @anthropic-ai/claude-agent-sdk@0.3.251
</code></pre>
<h2>v0.3.250</h2>
<h2>What's changed</h2>
<ul>
<li>Updated to parity with Claude Code v2.1.250</li>
</ul>
<h2>Update</h2>
<pre lang="sh"><code>npm install @anthropic-ai/claude-agent-sdk@0.3.250
# or
yarn add @anthropic-ai/claude-agent-sdk@0.3.250
# or
pnpm add @anthropic-ai/claude-agent-sdk@0.3.250
# or
bun add @anthropic-ai/claude-agent-sdk@0.3.250
</code></pre>
<h2>v0.3.248</h2>
<h2>What's changed</h2>
<ul>
<li>Added a per-server <code>timeout</code> for SDK-hosted MCP servers
(<code>createSdkMcpServer({ timeout })</code>), overriding
<code>MCP_TOOL_TIMEOUT</code> for that server's tool calls</li>
</ul>
<h2>Update</h2>
<pre lang="sh"><code>npm install @anthropic-ai/claude-agent-sdk@0.3.248
# or
yarn add @anthropic-ai/claude-agent-sdk@0.3.248
# or
pnpm add @anthropic-ai/claude-agent-sdk@0.3.248
# or
bun add @anthropic-ai/claude-agent-sdk@0.3.248
</code></pre>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/anthropics/claude-agent-sdk-typescript/blob/main/CHANGELOG.md">@anthropic-ai/claude-agent-sdk's
changelog</a>.</em></p>
<blockquote>
<h2>0.3.251</h2>
<ul>
<li>Updated to parity with Claude Code v2.1.251</li>
</ul>
<h2>0.3.250</h2>
<ul>
<li>Updated to parity with Claude Code v2.1.250</li>
</ul>
<h2>0.3.249</h2>
<ul>
<li>Updated to parity with Claude Code v2.1.249</li>
</ul>
<h2>0.3.248</h2>
<ul>
<li>Added a per-server <code>timeout</code> for SDK-hosted MCP servers
(<code>createSdkMcpServer({ timeout })</code>), overriding
<code>MCP_TOOL_TIMEOUT</code> for that server's tool calls</li>
</ul>
<h2>0.3.247</h2>
<ul>
<li>Added an optional <code>ambient</code> flag to
<code>task_started</code>, <code>task_notification</code> and
<code>background_tasks_changed</code> task entries so hosts can exclude
housekeeping tasks from activity indicators</li>
<li>Fixed the <code>permissionMode</code> on per-turn
<code>system/init</code> frames reporting the mode at turn start instead
of the live mode, so a mode switch right after submitting no longer
sends a stale value</li>
</ul>
<h2>0.3.246</h2>
<ul>
<li>Added optional <code>user_message_uuid</code> to error result
messages and to the first assistant message or <code>stream_event</code>
of each turn, linking a reply or failure to the user message that
triggered it</li>
<li>Added <code>modelUsage[*].costBasis</code> (<code>'list' | 'managed'
| 'unknown'</code>) reporting which price table each model's
<code>costUSD</code> was computed from</li>
<li>Added <code>modelPricing</code> support in the
<code>managedSettings</code> option for hosts that set
<code>CLAUDE_CODE_PROVIDER_MANAGED_BY_HOST</code>; an admin-managed
settings source that sets <code>modelPricing</code> still wins</li>
<li>Added <code>perTaskStopAffordance</code> option: when set,
<code>interrupt()</code> aborts only the current turn and keeps
background agents and workflows running; otherwise (and for one-shot
string prompts) they stop</li>
</ul>
<h2>0.3.245</h2>
<ul>
<li>Updated to parity with Claude Code v2.1.245</li>
</ul>
<h2>0.3.244</h2>
<ul>
<li>Updated to parity with Claude Code v2.1.244</li>
</ul>
<h2>0.3.243</h2>
<ul>
<li>Added optional <code>queued_turn_count</code> to result messages:
the number of queued user sends still pending when the result was
produced, so hosts know whether another turn and result will follow</li>
<li>Fixed <code>mcp_status</code> reporting a remote MCP server as
connected after its connection dropped; it now reports pending while
reconnecting, then connected or failed</li>
<li>Fixed managed <code>disableAllHooks</code> also disabling hook
callbacks registered through the <code>hooks</code> option; they now
keep running, matching <code>allowManagedHooksOnly</code></li>
<li>Changed Read tool PDF results: the <code>document</code> block (or
page <code>image</code> blocks for <code>pages</code> reads) now arrives
inside the <code>tool_result</code> content instead of as a separate
<code>user</code> message after it</li>
<li>Updated to parity with Claude Code v2.1.243</li>
</ul>
<h2>0.3.242</h2>
<ul>
<li>Updated to parity with Claude Code v2.1.242</li>
</ul>
<h2>0.3.241</h2>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/anthropics/claude-agent-sdk-typescript/commit/75667f1f76e800bb845b0a0e211df79fedfc9e86"><code>75667f1</code></a>
chore: Update CHANGELOG.md</li>
<li><a
href="https://github.com/anthropics/claude-agent-sdk-typescript/commit/0ec415863a773e477c9d11b0affd8a2d21c87ae2"><code>0ec4158</code></a>
chore: Update CHANGELOG.md</li>
<li><a
href="https://github.com/anthropics/claude-agent-sdk-typescript/commit/0518a194af990398dce33c23ae986d190368a35c"><code>0518a19</code></a>
chore: Update CHANGELOG.md</li>
<li><a
href="https://github.com/anthropics/claude-agent-sdk-typescript/commit/40b4c54986cf50e57f22dbc392752fd0387e1b06"><code>40b4c54</code></a>
chore: Update CHANGELOG.md</li>
<li><a
href="https://github.com/anthropics/claude-agent-sdk-typescript/commit/86e1856fc3f5e404ccfe93a5ec5078754ef4fa8e"><code>86e1856</code></a>
chore: Update CHANGELOG.md</li>
<li><a
href="https://github.com/anthropics/claude-agent-sdk-typescript/commit/9d56dae01499ea975b024da307d56c5db2c4c04b"><code>9d56dae</code></a>
chore: Update CHANGELOG.md</li>
<li><a
href="https://github.com/anthropics/claude-agent-sdk-typescript/commit/dca08feed872266ecab7943399f01b0cfb843af0"><code>dca08fe</code></a>
chore: Update CHANGELOG.md</li>
<li><a
href="https://github.com/anthropics/claude-agent-sdk-typescript/commit/0ebd3333636bfccdd9c9ed33622949fa29c12690"><code>0ebd333</code></a>
chore: Update CHANGELOG.md</li>
<li><a
href="https://github.com/anthropics/claude-agent-sdk-typescript/commit/48275071e804139579fabada9bb8d90cfe02b062"><code>4827507</code></a>
chore: Update CHANGELOG.md</li>
<li><a
href="https://github.com/anthropics/claude-agent-sdk-typescript/commit/bfa6b845963696edcb743eca7ba1461c11310947"><code>bfa6b84</code></a>
chore: Update CHANGELOG.md</li>
<li>Additional commits viewable in <a
href="https://github.com/anthropics/claude-agent-sdk-typescript/compare/v0.3.238...v0.3.251">compare
view</a></li>
</ul>
</details>
<br />
Updates `zod` from 4.4.3 to 4.5.2
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/colinhacks/zod/releases">zod's
releases</a>.</em></p>
<blockquote>
<h2>v4.5.2</h2>
<h2>Commits:</h2>
<ul>
<li>a354314ac04fdd5484aa62dd5c3a4b553211a0e4 fix(docs): keep blog posts
out of the docs collection (<a
href="https://redirect.github.com/colinhacks/zod/issues/6484">#6484</a>)</li>
<li>d378c42aff6869f0929058a7923cd775880f5c4c ci: drop canary publishing
from the release workflow (<a
href="https://redirect.github.com/colinhacks/zod/issues/6487">#6487</a>)</li>
<li>212b941791e7faae078e17645eb612824fd8f79a fix(v4): let a prototype
method getter answer a bare call so vi.spyOn works (<a
href="https://redirect.github.com/colinhacks/zod/issues/6488">#6488</a>)</li>
<li>e7576f542a7bc7ef3cc5eeec237714fd0e6b6e98 docs(blog): let the page
show through the navbar in dark mode (<a
href="https://redirect.github.com/colinhacks/zod/issues/6489">#6489</a>)</li>
<li>fedb06fafe33a66ce0b5c236ad2557e0a5a170fe fix(docs): match the blog
TOC hover bar to the 2px active indicator</li>
<li>6c932fcb2eea6eb671710ea058ca9fdc382ada89 chore: bump devcontainer
image to Node 24 (<a
href="https://redirect.github.com/colinhacks/zod/issues/6470">#6470</a>)</li>
<li>6635d9dd367a664109de83c021995821f48efa29 docs(blog): soften the
"method memoization" attribution</li>
<li>019ae299cc75daa132bf1acf59086a520abf6b85 fix(docs): drop ISR on the
docs route so the home page hydrates</li>
<li>652bb438aa4c626c1cd7948c6849c4691239fca7 chore(docs): drop the
scroll log from the route-change scroller</li>
<li>571c8e8a3d73b4305f4abfdd6977773cc12f2bf5 fix(docs): render blog tabs
with the stock fumadocs tab card</li>
<li>9a193aa24b4efa3b315b91d4c56c8bc385b8513f 4.5.2</li>
</ul>
<h2>v4.5.1</h2>
<h2>Commits:</h2>
<ul>
<li>2e862dbf89da2835e5206a8fd3d3be61afe3cf7f ci: gate the GitHub release
and JSR publish on the version being live on npm</li>
<li>8e03380510db36fa6fda979fc78a375fdea8021c 4.5.1</li>
</ul>
<h2>v4.5.0</h2>
<p>Zod 4.5 is now available.</p>
<pre lang="sh"><code>npm install zod@latest
</code></pre>
<p>At a glance:</p>
<ul>
<li><a
href="https://github.com/colinhacks/zod/blob/HEAD%5Bhttps://github.com/colinhacks/zod/blob/HEAD%60https://github.com/colinhacks/zod/blob/HEADzhttps://github.com/colinhacks/zod/blob/HEAD.https://github.com/colinhacks/zod/blob/HEADchttps://github.com/colinhacks/zod/blob/HEADohttps://github.com/colinhacks/zod/blob/HEADmhttps://github.com/colinhacks/zod/blob/HEADphttps://github.com/colinhacks/zod/blob/HEADihttps://github.com/colinhacks/zod/blob/HEADlhttps://github.com/colinhacks/zod/blob/HEADehttps://github.com/colinhacks/zod/blob/HEAD(https://github.com/colinhacks/zod/blob/HEAD)https://github.com/colinhacks/zod/blob/HEAD%60https://github.com/colinhacks/zod/blob/HEAD%5Dhttps://github.com/colinhacks/zod/blob/HEAD(https://github.com/colinhacks/zod/blob/HEAD#https://github.com/colinhacks/zod/blob/HEADzhttps://github.com/colinhacks/zod/blob/HEADchttps://github.com/colinhacks/zod/blob/HEADohttps://github.com/colinhacks/zod/blob/HEADmhttps://github.com/colinhacks/zod/blob/HEADphttps://github.com/colinhacks/zod/blob/HEADihttps://github.com/colinhacks/zod/blob/HEADlhttps://github.com/colinhacks/zod/blob/HEADehttps://github.com/colinhacks/zod/blob/HEAD)https://github.com/colinhacks/zod/blob/HEAD">https://github.com/colinhacks/zod/blob/HEAD[https://github.com/colinhacks/zod/blob/HEAD`https://github.com/colinhacks/zod/blob/HEADzhttps://github.com/colinhacks/zod/blob/HEAD.https://github.com/colinhacks/zod/blob/HEADchttps://github.com/colinhacks/zod/blob/HEADohttps://github.com/colinhacks/zod/blob/HEADmhttps://github.com/colinhacks/zod/blob/HEADphttps://github.com/colinhacks/zod/blob/HEADihttps://github.com/colinhacks/zod/blob/HEADlhttps://github.com/colinhacks/zod/blob/HEADehttps://github.com/colinhacks/zod/blob/HEAD(https://github.com/colinhacks/zod/blob/HEAD)https://github.com/colinhacks/zod/blob/HEAD`https://github.com/colinhacks/zod/blob/HEAD]https://github.com/colinhacks/zod/blob/HEAD(https://github.com/colinhacks/zod/blob/HEAD#https://github.com/colinhacks/zod/blob/HEADzhttps://github.com/colinhacks/zod/blob/HEADchttps://github.com/colinhacks/zod/blob/HEADohttps://github.com/colinhacks/zod/blob/HEADmhttps://github.com/colinhacks/zod/blob/HEADphttps://github.com/colinhacks/zod/blob/HEADihttps://github.com/colinhacks/zod/blob/HEADlhttps://github.com/colinhacks/zod/blob/HEADehttps://github.com/colinhacks/zod/blob/HEAD)https://github.com/colinhacks/zod/blob/HEAD</a>
— the flagship feature of Zod 4.5</li>
<li><a
href="https://github.com/colinhacks/zod/blob/HEAD%5Bhttps://github.com/colinhacks/zod/blob/HEAD%60https://github.com/colinhacks/zod/blob/HEADzhttps://github.com/colinhacks/zod/blob/HEAD.https://github.com/colinhacks/zod/blob/HEADchttps://github.com/colinhacks/zod/blob/HEADrhttps://github.com/colinhacks/zod/blob/HEADehttps://github.com/colinhacks/zod/blob/HEADdhttps://github.com/colinhacks/zod/blob/HEADihttps://github.com/colinhacks/zod/blob/HEADthttps://github.com/colinhacks/zod/blob/HEADChttps://github.com/colinhacks/zod/blob/HEADahttps://github.com/colinhacks/zod/blob/HEADrhttps://github.com/colinhacks/zod/blob/HEADdhttps://github.com/colinhacks/zod/blob/HEAD(https://github.com/colinhacks/zod/blob/HEAD)https://github.com/colinhacks/zod/blob/HEAD%60https://github.com/colinhacks/zod/blob/HEAD%5Dhttps://github.com/colinhacks/zod/blob/HEAD(https://github.com/colinhacks/zod/blob/HEAD#https://github.com/colinhacks/zod/blob/HEADzhttps://github.com/colinhacks/zod/blob/HEADchttps://github.com/colinhacks/zod/blob/HEADrhttps://github.com/colinhacks/zod/blob/HEADehttps://github.com/colinhacks/zod/blob/HEADdhttps://github.com/colinhacks/zod/blob/HEADihttps://github.com/colinhacks/zod/blob/HEADthttps://github.com/colinhacks/zod/blob/HEADchttps://github.com/colinhacks/zod/blob/HEADahttps://github.com/colinhacks/zod/blob/HEADrhttps://github.com/colinhacks/zod/blob/HEADdhttps://github.com/colinhacks/zod/blob/HEAD)https://github.com/colinhacks/zod/blob/HEAD">https://github.com/colinhacks/zod/blob/HEAD[https://github.com/colinhacks/zod/blob/HEAD`https://github.com/colinhacks/zod/blob/HEADzhttps://github.com/colinhacks/zod/blob/HEAD.https://github.com/colinhacks/zod/blob/HEADchttps://github.com/colinhacks/zod/blob/HEADrhttps://github.com/colinhacks/zod/blob/HEADehttps://github.com/colinhacks/zod/blob/HEADdhttps://github.com/colinhacks/zod/blob/HEADihttps://github.com/colinhacks/zod/blob/HEADthttps://github.com/colinhacks/zod/blob/HEADChttps://github.com/colinhacks/zod/blob/HEADahttps://github.com/colinhacks/zod/blob/HEADrhttps://github.com/colinhacks/zod/blob/HEADdhttps://github.com/colinhacks/zod/blob/HEAD(https://github.com/colinhacks/zod/blob/HEAD)https://github.com/colinhacks/zod/blob/HEAD`https://github.com/colinhacks/zod/blob/HEAD]https://github.com/colinhacks/zod/blob/HEAD(https://github.com/colinhacks/zod/blob/HEAD#https://github.com/colinhacks/zod/blob/HEADzhttps://github.com/colinhacks/zod/blob/HEADchttps://github.com/colinhacks/zod/blob/HEADrhttps://github.com/colinhacks/zod/blob/HEADehttps://github.com/colinhacks/zod/blob/HEADdhttps://github.com/colinhacks/zod/blob/HEADihttps://github.com/colinhacks/zod/blob/HEADthttps://github.com/colinhacks/zod/blob/HEADchttps://github.com/colinhacks/zod/blob/HEADahttps://github.com/colinhacks/zod/blob/HEADrhttps://github.com/colinhacks/zod/blob/HEADdhttps://github.com/colinhacks/zod/blob/HEAD)https://github.com/colinhacks/zod/blob/HEAD</a>
— 12–19 digits plus Luhn checksum</li>
<li><a
href="https://github.com/colinhacks/zod/blob/HEAD%5Bhttps://github.com/colinhacks/zod/blob/HEAD%60https://github.com/colinhacks/zod/blob/HEADzhttps://github.com/colinhacks/zod/blob/HEAD.https://github.com/colinhacks/zod/blob/HEADphttps://github.com/colinhacks/zod/blob/HEADrhttps://github.com/colinhacks/zod/blob/HEADohttps://github.com/colinhacks/zod/blob/HEADphttps://github.com/colinhacks/zod/blob/HEADehttps://github.com/colinhacks/zod/blob/HEADrhttps://github.com/colinhacks/zod/blob/HEADthttps://github.com/colinhacks/zod/blob/HEADihttps://github.com/colinhacks/zod/blob/HEADehttps://github.com/colinhacks/zod/blob/HEADshttps://github.com/colinhacks/zod/blob/HEAD(https://github.com/colinhacks/zod/blob/HEAD)https://github.com/colinhacks/zod/blob/HEAD%60https://github.com/colinhacks/zod/blob/HEAD%5Dhttps://github.com/colinhacks/zod/blob/HEAD(https://github.com/colinhacks/zod/blob/HEAD#https://github.com/colinhacks/zod/blob/HEADzhttps://github.com/colinhacks/zod/blob/HEADphttps://github.com/colinhacks/zod/blob/HEADrhttps://github.com/colinhacks/zod/blob/HEADohttps://github.com/colinhacks/zod/blob/HEADphttps://github.com/colinhacks/zod/blob/HEADehttps://github.com/colinhacks/zod/blob/HEADrhttps://github.com/colinhacks/zod/blob/HEADthttps://github.com/colinhacks/zod/blob/HEADihttps://github.com/colinhacks/zod/blob/HEADehttps://github.com/colinhacks/zod/blob/HEADshttps://github.com/colinhacks/zod/blob/HEAD)https://github.com/colinhacks/zod/blob/HEAD">https://github.com/colinhacks/zod/blob/HEAD[https://github.com/colinhacks/zod/blob/HEAD`https://github.com/colinhacks/zod/blob/HEADzhttps://github.com/colinhacks/zod/blob/HEAD.https://github.com/colinhacks/zod/blob/HEADphttps://github.com/colinhacks/zod/blob/HEADrhttps://github.com/colinhacks/zod/blob/HEADohttps://github.com/colinhacks/zod/blob/HEADphttps://github.com/colinhacks/zod/blob/HEADehttps://github.com/colinhacks/zod/blob/HEADrhttps://github.com/colinhacks/zod/blob/HEADthttps://github.com/colinhacks/zod/blob/HEADihttps://github.com/colinhacks/zod/blob/HEADehttps://github.com/colinhacks/zod/blob/HEADshttps://github.com/colinhacks/zod/blob/HEAD(https://github.com/colinhacks/zod/blob/HEAD)https://github.com/colinhacks/zod/blob/HEAD`https://github.com/colinhacks/zod/blob/HEAD]https://github.com/colinhacks/zod/blob/HEAD(https://github.com/colinhacks/zod/blob/HEAD#https://github.com/colinhacks/zod/blob/HEADzhttps://github.com/colinhacks/zod/blob/HEADphttps://github.com/colinhacks/zod/blob/HEADrhttps://github.com/colinhacks/zod/blob/HEADohttps://github.com/colinhacks/zod/blob/HEADphttps://github.com/colinhacks/zod/blob/HEADehttps://github.com/colinhacks/zod/blob/HEADrhttps://github.com/colinhacks/zod/blob/HEADthttps://github.com/colinhacks/zod/blob/HEADihttps://github.com/colinhacks/zod/blob/HEADehttps://github.com/colinhacks/zod/blob/HEADshttps://github.com/colinhacks/zod/blob/HEAD)https://github.com/colinhacks/zod/blob/HEAD</a>
— the multi-property counterpart to <code>z.property()</code></li>
<li><a
href="https://github.com/colinhacks/zod/blob/HEAD%5Bhttps://github.com/colinhacks/zod/blob/HEAD%60https://github.com/colinhacks/zod/blob/HEADzhttps://github.com/colinhacks/zod/blob/HEAD.https://github.com/colinhacks/zod/blob/HEADdhttps://github.com/colinhacks/zod/blob/HEADehttps://github.com/colinhacks/zod/blob/HEADehttps://github.com/colinhacks/zod/blob/HEADphttps://github.com/colinhacks/zod/blob/HEADPhttps://github.com/colinhacks/zod/blob/HEADahttps://github.com/colinhacks/zod/blob/HEADrhttps://github.com/colinhacks/zod/blob/HEADthttps://github.com/colinhacks/zod/blob/HEADihttps://github.com/colinhacks/zod/blob/HEADahttps://github.com/colinhacks/zod/blob/HEADlhttps://github.com/colinhacks/zod/blob/HEAD(https://github.com/colinhacks/zod/blob/HEAD)https://github.com/colinhacks/zod/blob/HEAD%60https://github.com/colinhacks/zod/blob/HEAD%5Dhttps://github.com/colinhacks/zod/blob/HEAD(https://github.com/colinhacks/zod/blob/HEAD#https://github.com/colinhacks/zod/blob/HEADzhttps://github.com/colinhacks/zod/blob/HEADdhttps://github.com/colinhacks/zod/blob/HEADehttps://github.com/colinhacks/zod/blob/HEADehttps://github.com/colinhacks/zod/blob/HEADphttps://github.com/colinhacks/zod/blob/HEADphttps://github.com/colinhacks/zod/blob/HEADahttps://github.com/colinhacks/zod/blob/HEADrhttps://github.com/colinhacks/zod/blob/HEADthttps://github.com/colinhacks/zod/blob/HEADihttps://github.com/colinhacks/zod/blob/HEADahttps://github.com/colinhacks/zod/blob/HEADlhttps://github.com/colinhacks/zod/blob/HEAD)https://github.com/colinhacks/zod/blob/HEAD/https://github.com/colinhacks/zod/blob/HEAD%5Bhttps://github.com/colinhacks/zod/blob/HEAD%60https://github.com/colinhacks/zod/blob/HEAD.https://github.com/colinhacks/zod/blob/HEADehttps://github.com/colinhacks/zod/blob/HEADxhttps://github.com/colinhacks/zod/blob/HEADahttps://github.com/colinhacks/zod/blob/HEADchttps://github.com/colinhacks/zod/blob/HEADthttps://github.com/colinhacks/zod/blob/HEADPhttps://github.com/colinhacks/zod/blob/HEADahttps://github.com/colinhacks/zod/blob/HEADrhttps://github.com/colinhacks/zod/blob/HEADthttps://github.com/colinhacks/zod/blob/HEADihttps://github.com/colinhacks/zod/blob/HEADahttps://github.com/colinhacks/zod/blob/HEADlhttps://github.com/colinhacks/zod/blob/HEAD(https://github.com/colinhacks/zod/blob/HEAD)https://github.com/colinhacks/zod/blob/HEAD%60https://github.com/colinhacks/zod/blob/HEAD%5Dhttps://github.com/colinhacks/zod/blob/HEAD(https://github.com/colinhacks/zod/blob/HEAD#https://github.com/colinhacks/zod/blob/HEADehttps://github.com/colinhacks/zod/blob/HEADxhttps://github.com/colinhacks/zod/blob/HEADahttps://github.com/colinhacks/zod/blob/HEADchttps://github.com/colinhacks/zod/blob/HEADthttps://github.com/colinhacks/zod/blob/HEADphttps://github.com/colinhacks/zod/blob/HEADahttps://github.com/colinhacks/zod/blob/HEADrhttps://github.com/colinhacks/zod/blob/HEADthttps://github.com/colinhacks/zod/blob/HEADihttps://github.com/colinhacks/zod/blob/HEADahttps://github.com/colinhacks/zod/blob/HEADlhttps://github.com/colinhacks/zod/blob/HEAD)https://github.com/colinhacks/zod/blob/HEAD">https://github.com/colinhacks/zod/blob/HEAD[https://github.com/colinhacks/zod/blob/HEAD`https://github.com/colinhacks/zod/blob/HEADzhttps://github.com/colinhacks/zod/blob/HEAD.https://github.com/colinhacks/zod/blob/HEADdhttps://github.com/colinhacks/zod/blob/HEADehttps://github.com/colinhacks/zod/blob/HEADehttps://github.com/colinhacks/zod/blob/HEADphttps://github.com/colinhacks/zod/blob/HEADPhttps://github.com/colinhacks/zod/blob/HEADahttps://github.com/colinhacks/zod/blob/HEADrhttps://github.com/colinhacks/zod/blob/HEADthttps://github.com/colinhacks/zod/blob/HEADihttps://github.com/colinhacks/zod/blob/HEADahttps://github.com/colinhacks/zod/blob/HEADlhttps://github.com/colinhacks/zod/blob/HEAD(https://github.com/colinhacks/zod/blob/HEAD)https://github.com/colinhacks/zod/blob/HEAD`https://github.com/colinhacks/zod/blob/HEAD]https://github.com/colinhacks/zod/blob/HEAD(https://github.com/colinhacks/zod/blob/HEAD#https://github.com/colinhacks/zod/blob/HEADzhttps://github.com/colinhacks/zod/blob/HEADdhttps://github.com/colinhacks/zod/blob/HEADehttps://github.com/colinhacks/zod/blob/HEADehttps://github.com/colinhacks/zod/blob/HEADphttps://github.com/colinhacks/zod/blob/HEADphttps://github.com/colinhacks/zod/blob/HEADahttps://github.com/colinhacks/zod/blob/HEADrhttps://github.com/colinhacks/zod/blob/HEADthttps://github.com/colinhacks/zod/blob/HEADihttps://github.com/colinhacks/zod/blob/HEADahttps://github.com/colinhacks/zod/blob/HEADlhttps://github.com/colinhacks/zod/blob/HEAD)https://github.com/colinhacks/zod/blob/HEAD/https://github.com/colinhacks/zod/blob/HEAD[https://github.com/colinhacks/zod/blob/HEAD`https://github.com/colinhacks/zod/blob/HEAD.https://github.com/colinhacks/zod/blob/HEADehttps://github.com/colinhacks/zod/blob/HEADxhttps://github.com/colinhacks/zod/blob/HEADahttps://github.com/colinhacks/zod/blob/HEADchttps://github.com/colinhacks/zod/blob/HEADthttps://github.com/colinhacks/zod/blob/HEADPhttps://github.com/colinhacks/zod/blob/HEADahttps://github.com/colinhacks/zod/blob/HEADrhttps://github.com/colinhacks/zod/blob/HEADthttps://github.com/colinhacks/zod/blob/HEADihttps://github.com/colinhacks/zod/blob/HEADahttps://github.com/colinhacks/zod/blob/HEADlhttps://github.com/colinhacks/zod/blob/HEAD(https://github.com/colinhacks/zod/blob/HEAD)https://github.com/colinhacks/zod/blob/HEAD`https://github.com/colinhacks/zod/blob/HEAD]https://github.com/colinhacks/zod/blob/HEAD(https://github.com/colinhacks/zod/blob/HEAD#https://github.com/colinhacks/zod/blob/HEADehttps://github.com/colinhacks/zod/blob/HEADxhttps://github.com/colinhacks/zod/blob/HEADahttps://github.com/colinhacks/zod/blob/HEADchttps://github.com/colinhacks/zod/blob/HEADthttps://github.com/colinhacks/zod/blob/HEADphttps://github.com/colinhacks/zod/blob/HEADahttps://github.com/colinhacks/zod/blob/HEADrhttps://github.com/colinhacks/zod/blob/HEADthttps://github.com/colinhacks/zod/blob/HEADihttps://github.com/colinhacks/zod/blob/HEADahttps://github.com/colinhacks/zod/blob/HEADlhttps://github.com/colinhacks/zod/blob/HEAD)https://github.com/colinhacks/zod/blob/HEAD</a></li>
<li><a
href="https://github.com/colinhacks/zod/blob/HEAD%5Bhttps://github.com/colinhacks/zod/blob/HEAD%60https://github.com/colinhacks/zod/blob/HEADzhttps://github.com/colinhacks/zod/blob/HEAD.https://github.com/colinhacks/zod/blob/HEADvhttps://github.com/colinhacks/zod/blob/HEADahttps://github.com/colinhacks/zod/blob/HEADlhttps://github.com/colinhacks/zod/blob/HEADihttps://github.com/colinhacks/zod/blob/HEADdhttps://github.com/colinhacks/zod/blob/HEADahttps://github.com/colinhacks/zod/blob/HEADthttps://github.com/colinhacks/zod/blob/HEADehttps://github.com/colinhacks/zod/blob/HEAD(https://github.com/colinhacks/zod/blob/HEAD)https://github.com/colinhacks/zod/blob/HEAD:https://github.com/colinhacks/zod/blob/HEAD">https://github.com/colinhacks/zod/blob/HEAD[https://github.com/colinhacks/zod/blob/HEAD`https://github.com/colinhacks/zod/blob/HEADzhttps://github.com/colinhacks/zod/blob/HEAD.https://github.com/colinhacks/zod/blob/HEADvhttps://github.com/colinhacks/zod/blob/HEADahttps://github.com/colinhacks/zod/blob/HEADlhttps://github.com/colinhacks/zod/blob/HEADihttps://github.com/colinhacks/zod/blob/HEADdhttps://github.com/colinhacks/zod/blob/HEADahttps://github.com/colinhacks/zod/blob/HEADthttps://github.com/colinhacks/zod/blob/HEADehttps://github.com/colinhacks/zod/blob/HEAD(https://github.com/colinhacks/zod/blob/HEAD)https://github.com/colinhacks/zod/blob/HEAD:https://github.com/colinhacks/zod/blob/HEAD</a>
<a
href="https://github.com/colinhacks/zod/blob/HEADbhttps://github.com/colinhacks/zod/blob/HEADohttps://github.com/colinhacks/zod/blob/HEADohttps://github.com/colinhacks/zod/blob/HEADlhttps://github.com/colinhacks/zod/blob/HEADehttps://github.com/colinhacks/zod/blob/HEADahttps://github.com/colinhacks/zod/blob/HEADnhttps://github.com/colinhacks/zod/blob/HEAD%60https://github.com/colinhacks/zod/blob/HEAD%5Dhttps://github.com/colinhacks/zod/blob/HEAD(https://github.com/colinhacks/zod/blob/HEAD#https://github.com/colinhacks/zod/blob/HEADzhttps://github.com/colinhacks/zod/blob/HEADvhttps://github.com/colinhacks/zod/blob/HEADahttps://github.com/colinhacks/zod/blob/HEADlhttps://github.com/colinhacks/zod/blob/HEADihttps://github.com/colinhacks/zod/blob/HEADdhttps://github.com/colinhacks/zod/blob/HEADahttps://github.com/colinhacks/zod/blob/HEADthttps://github.com/colinhacks/zod/blob/HEADehttps://github.com/colinhacks/zod/blob/HEAD)https://github.com/colinhacks/zod/blob/HEAD">https://github.com/colinhacks/zod/blob/HEADbhttps://github.com/colinhacks/zod/blob/HEADohttps://github.com/colinhacks/zod/blob/HEADohttps://github.com/colinhacks/zod/blob/HEADlhttps://github.com/colinhacks/zod/blob/HEADehttps://github.com/colinhacks/zod/blob/HEADahttps://github.com/colinhacks/zod/blob/HEADnhttps://github.com/colinhacks/zod/blob/HEAD`https://github.com/colinhacks/zod/blob/HEAD]https://github.com/colinhacks/zod/blob/HEAD(https://github.com/colinhacks/zod/blob/HEAD#https://github.com/colinhacks/zod/blob/HEADzhttps://github.com/colinhacks/zod/blob/HEADvhttps://github.com/colinhacks/zod/blob/HEADahttps://github.com/colinhacks/zod/blob/HEADlhttps://github.com/colinhacks/zod/blob/HEADihttps://github.com/colinhacks/zod/blob/HEADdhttps://github.com/colinhacks/zod/blob/HEADahttps://github.com/colinhacks/zod/blob/HEADthttps://github.com/colinhacks/zod/blob/HEADehttps://github.com/colinhacks/zod/blob/HEAD)https://github.com/colinhacks/zod/blob/HEAD</a>
— a fast-path to verify input validity without a full parse (up to 16x
faster on invalid data)</li>
<li><a
href="https://github.com/colinhacks/zod/blob/HEAD/#9x-reduction-in-schema-memory-footprint">9x
reduction in memory footprint</a></li>
<li><a href="https://zod.dev/error-customization#locales">New
locales</a>: Bengali (<code>bn</code>), Central Kurdish
(<code>ckb</code>), Hindi (<code>hi</code>), Kannada (<code>kn</code>),
Norwegian Nynorsk (<code>nn</code>), Brazilian Portuguese
(<code>pt-BR</code>), Slovak (<code>sk</code>), Turkmen
(<code>tk</code>)</li>
</ul>
<h2><code>z.compile()</code></h2>
<p>You can now pre-compile any Zod schema using
<code>z.compile(schema)</code>. This dramatically speeds up parsing
performance.</p>
<pre lang="ts"><code>import * as z from "zod";
<p>const Player = z.object({
username: z.string(),
bio: z.string(),
xp: z.number(),
// ...20 more properties...
</tr></table>
</code></pre></p>
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/colinhacks/zod/commit/9a193aa24b4efa3b315b91d4c56c8bc385b8513f"><code>9a193aa</code></a>
4.5.2</li>
<li><a
href="https://github.com/colinhacks/zod/commit/571c8e8a3d73b4305f4abfdd6977773cc12f2bf5"><code>571c8e8</code></a>
fix(docs): render blog tabs with the stock fumadocs tab card</li>
<li><a
href="https://github.com/colinhacks/zod/commit/652bb438aa4c626c1cd7948c6849c4691239fca7"><code>652bb43</code></a>
chore(docs): drop the scroll log from the route-change scroller</li>
<li><a
href="https://github.com/colinhacks/zod/commit/019ae299cc75daa132bf1acf59086a520abf6b85"><code>019ae29</code></a>
fix(docs): drop ISR on the docs route so the home page hydrates</li>
<li><a
href="https://github.com/colinhacks/zod/commit/6635d9dd367a664109de83c021995821f48efa29"><code>6635d9d</code></a>
docs(blog): soften the "method memoization" attribution</li>
<li><a
href="https://github.com/colinhacks/zod/commit/6c932fcb2eea6eb671710ea058ca9fdc382ada89"><code>6c932fc</code></a>
chore: bump devcontainer image to Node 24 (<a
href="https://redirect.github.com/colinhacks/zod/issues/6470">#6470</a>)</li>
<li><a
href="https://github.com/colinhacks/zod/commit/fedb06fafe33a66ce0b5c236ad2557e0a5a170fe"><code>fedb06f</code></a>
fix(docs): match the blog TOC hover bar to the 2px active indicator</li>
<li><a
href="https://github.com/colinhacks/zod/commit/e7576f542a7bc7ef3cc5eeec237714fd0e6b6e98"><code>e7576f5</code></a>
docs(blog): let the page show through the navbar in dark mode (<a
href="https://redirect.github.com/colinhacks/zod/issues/6489">#6489</a>)</li>
<li><a
href="https://github.com/colinhacks/zod/commit/212b941791e7faae078e17645eb612824fd8f79a"><code>212b941</code></a>
fix(v4): let a prototype method getter answer a bare call so vi.spyOn
works (...</li>
<li><a
href="https://github.com/colinhacks/zod/commit/d378c42aff6869f0929058a7923cd775880f5c4c"><code>d378c42</code></a>
ci: drop canary publishing from the release workflow (<a
href="https://redirect.github.com/colinhacks/zod/issues/6487">#6487</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/colinhacks/zod/compare/v4.4.3...v4.5.2">compare
view</a></li>
</ul>
</details>
<br />
Updates `@anthropic-ai/sdk` from 0.120.0 to 0.122.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/anthropics/anthropic-sdk-typescript/releases">@anthropic-ai/sdk's
releases</a>.</em></p>
<blockquote>
<h2>sdk: v0.122.0</h2>
<h2>0.122.0 (2026-08-27)</h2>
<p>Full Changelog: <a
href="https://github.com/anthropics/anthropic-sdk-typescript/compare/sdk-v0.121.0...sdk-v0.122.0">sdk-v0.121.0...sdk-v0.122.0</a></p>
<h3>Features</h3>
<ul>
<li><strong>api:</strong> beta files/skills namespaces use GA shapes;
drop dated beta header pins (<a
href="https://github.com/anthropics/anthropic-sdk-typescript/commit/45d693a66bc7fb1af66d9c4e3625f6d6f64bae59">45d693a</a>)</li>
</ul>
<h3>Bug Fixes</h3>
<ul>
<li><strong>client:</strong> classify cross-realm DOMException
abort/timeout errors correctly (<a
href="https://github.com/anthropics/anthropic-sdk-typescript/commit/1bd639515e9948c1dc45047ce5cb4fcfc5c436b8">1bd6395</a>)</li>
<li><strong>client:</strong> use configured logger for SSE parse errors
(<a
href="https://github.com/anthropics/anthropic-sdk-typescript/commit/80eeaf7b01b49ed83abd38bb6841b4ad25b06fe6">80eeaf7</a>)</li>
<li><strong>sessions:</strong> make event accumulator forward-compatible
with new event types (<a
href="https://redirect.github.com/anthropics/anthropic-sdk-typescript/issues/410">#410</a>)
(<a
href="https://github.com/anthropics/anthropic-sdk-typescript/commit/2d084fdaeb6b51a1613f321cd65e2184d55d8d1e">2d084fd</a>)</li>
<li><strong>tools:</strong> let read return a view_range of a file over
the size cap (<a
href="https://redirect.github.com/anthropics/anthropic-sdk-typescript/issues/427">#427</a>)
(<a
href="https://github.com/anthropics/anthropic-sdk-typescript/commit/56b32601f6b97a0d56450f2eba19e58d1bb0202e">56b3260</a>)</li>
<li><strong>uploads:</strong> default bare Blob filename on skills
endpoints (<a
href="https://redirect.github.com/anthropics/anthropic-sdk-typescript/issues/422">#422</a>)
(<a
href="https://github.com/anthropics/anthropic-sdk-typescript/commit/e1116491dd4021d0237d1bb440237677a03045f5">e111649</a>)</li>
<li><strong>webhooks:</strong> require headers to be passed to
<code>unwrap()</code> (<a
href="https://github.com/anthropics/anthropic-sdk-typescript/commit/3230804e63371f535a850d1df6752284643a01fe">3230804</a>)</li>
</ul>
<h3>Chores</h3>
<ul>
<li><strong>internal:</strong> codegen related update (<a
href="https://github.com/anthropics/anthropic-sdk-typescript/commit/c2f327a30d14a4b1ee4cc777a4d0b37f5d44f0af">c2f327a</a>)</li>
</ul>
<h3>Documentation</h3>
<ul>
<li><strong>api:</strong> clarify pagination on the organization
rate-limit list endpoints (<a
href="https://github.com/anthropics/anthropic-sdk-typescript/commit/d6015b90b3e895cd173b7d71038ec71bf467a69b">d6015b9</a>)</li>
<li>document TypeScript 5.0 as the minimum supported version (<a
href="https://github.com/anthropics/anthropic-sdk-typescript/commit/788e7217937471e07af3800ab65172eafbf32e2a">788e721</a>)</li>
</ul>
<h2>sdk: v0.121.0</h2>
<h2>0.121.0 (2026-08-26)</h2>
<p>Full Changelog: <a
href="https://github.com/anthropics/anthropic-sdk-typescript/compare/sdk-v0.120.0...sdk-v0.121.0">sdk-v0.120.0...sdk-v0.121.0</a></p>
<h3>Features</h3>
<ul>
<li><strong>api:</strong> add <code>updates</code> thinking display mode
(beta) (<a
href="https://github.com/anthropics/anthropic-sdk-typescript/commit/22274eaf968edc62a8b9e1f39a1913f5e04b2ada">22274ea</a>)</li>
<li><strong>api:</strong> add missing anthropic-beta values (<a
href="https://github.com/anthropics/anthropic-sdk…
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
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 andforwardSubagentTextsession option. Async tasks use the negotiatedasyncTasksAIR capability and remain invisible to clients that do not advertise it. Claude does not expose a safe targeted child-cancel primitive, therefore childcancelandclosecapabilities remain disabled.Validation
npm run checknpm run buildenv -u ANTHROPIC_BASE_URL npm run test:run(830 passed, 20 skipped)npm run test:run -- src/tests/async-tasks.test.ts(5 passed)