Compare commits

...

43 Commits

Author SHA1 Message Date
acp-release-bot[bot]
c27e6aec90 chore(main): release 0.46.0 (#778)
🤖 I have created a release *beep* *boop*
---


##
[0.46.0](https://github.com/agentclientprotocol/claude-agent-acp/compare/v0.45.1...v0.46.0)
(2026-06-16)


### Features

* Update to claude-agent-sdk 0.3.178
([#777](https://github.com/agentclientprotocol/claude-agent-acp/issues/777))
([58549ff](58549ffe6a))


### Bug Fixes

* Better handle out of turn events
([#780](https://github.com/agentclientprotocol/claude-agent-acp/issues/780))
([4f273a2](4f273a20d8))
* Forward option details in elicitation meta
([#779](https://github.com/agentclientprotocol/claude-agent-acp/issues/779))
([b364059](b3640599ae)),
closes
[#764](https://github.com/agentclientprotocol/claude-agent-acp/issues/764)

---
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>
2026-06-16 21:36:40 +02:00
Ben Brandt
4f273a20d8 fix: Better handle out of turn events (#780)
Claude has a lot of background tasks. If we wait for "idle", some people
experience turns that never end.
If we stop iterating the query after result, people end up with events
that never show up.

Given we already often have session_updates outside of the prompt (and
clients need to handle it for v2 if they aren't already) this moves the
setup to better handle how the SDK gives us this information.

I've been test-driving this build all day and it seems to be working
great.

Closes #773
Closes #679
Closes #435
Closes #497
Closes #688
Closes #630

---------

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-16 21:33:54 +02:00
Ben Brandt
b3640599ae fix: Forward option details in elicitation meta (#779)
Closes #764
2026-06-16 12:32:54 +00:00
Ben Brandt
58549ffe6a feat: Update to claude-agent-sdk 0.3.178 (#777) 2026-06-16 14:25:08 +02:00
acp-release-bot[bot]
116f06eab1 chore(main): release 0.45.1 (#775)
🤖 I have created a release *beep* *boop*
---


##
[0.45.1](https://github.com/agentclientprotocol/claude-agent-acp/compare/v0.45.0...v0.45.1)
(2026-06-16)


### Bug Fixes

* Fix terminal error printing as text instead of terminal output
([#776](https://github.com/agentclientprotocol/claude-agent-acp/issues/776))
([db6eaaf](db6eaaf714))
* Scope custom answers per question
([#774](https://github.com/agentclientprotocol/claude-agent-acp/issues/774))
([d58004a](d58004a348))

---
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>
2026-06-16 13:45:49 +02:00
Azad Abdulov
db6eaaf714 fix: Fix terminal error printing as text instead of terminal output (#776)
Co-authored-by: Azad Abdulov <azad.abdulov@jetbrains.com>
2026-06-16 11:43:43 +00:00
Ben Brandt
d58004a348 fix: Scope custom answers per question (#774)
Closes #770

Maps one custom answer per top-level question, not a single global one.
2026-06-16 08:55:52 +00:00
acp-release-bot[bot]
0525e6dacb chore(main): release 0.45.0 (#772)
🤖 I have created a release *beep* *boop*
---


##
[0.45.0](https://github.com/agentclientprotocol/claude-agent-acp/compare/v0.44.0...v0.45.0)
(2026-06-15)


### Features

* **deps-dev:** bump the minor group with 3 updates
([#763](https://github.com/agentclientprotocol/claude-agent-acp/issues/763))
([7de5e4b](7de5e4bcca))
* **deps:** bump @anthropic-ai/claude-agent-sdk to 0.3.177
([#771](https://github.com/agentclientprotocol/claude-agent-acp/issues/771))
([1be5ca5](1be5ca57ee))


### Bug Fixes

* preserve ANTHROPIC_CUSTOM_MODEL_OPTION when availableModels is set
([#768](https://github.com/agentclientprotocol/claude-agent-acp/issues/768))
([cc2885f](cc2885f6a9))

---
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>
2026-06-15 18:17:10 +02:00
Luca Dibattista
cc2885f6a9 fix: preserve ANTHROPIC_CUSTOM_MODEL_OPTION when availableModels is set (#768)
## Summary

When `availableModels` is set to a slim list (e.g.
`["sonnet","opus","haiku"]`), the model from
`ANTHROPIC_CUSTOM_MODEL_OPTION` was dropped from `session/new`'s model
picker. Claude Code's CLI keeps it; ACP hid it.

Per the [model-config
docs](https://code.claude.com/docs/en/model-config#add-a-custom-model-option),
`ANTHROPIC_CUSTOM_MODEL_OPTION` adds a custom entry "without replacing
the built-in aliases" and "appears at the bottom of the `/model` picker"
— i.e. it's additive, not subject to the alias allowlist.

Observed under:
* `availableModels: ["sonnet","opus","haiku"]`
* `ANTHROPIC_DEFAULT_OPUS_MODEL=claude-opus-4-6[1m]`
* `ANTHROPIC_CUSTOM_MODEL_OPTION=claude-opus-4-8[1m]`

| | Default | Sonnet | Opus | Haiku | Opus 4.8 |
|---|---|---|---|---|---|
| CLI picker | ✅ | ✅ | ✅ | ✅ | ✅ (bottom) |
| ACP (before) | ✅ | ✅ | ✅ | ✅ | ❌ |
| ACP (after) | ✅ | ✅ | ✅ | ✅ | ✅ (bottom) |

### Root cause

The SDK returns the custom option as an ordinary entry in
`initializationResult.models` with no flag distinguishing it
(`ModelInfo` has no `custom`/`isCustom` field).
`applyAvailableModelsAllowlist` treats `availableModels` as a strict
allowlist: keep `default`, then keep only SDK models matching an
allowlist entry. The custom value (`claude-opus-4-8[1m]`) matches no
alias, so it's filtered out — diverging from the CLI's additive
treatment.

### Fix

After the allowlist loop, append the model named by
`ANTHROPIC_CUSTOM_MODEL_OPTION` if the SDK surfaced it and it isn't
already present. It's placed last, matching the documented "bottom of
the picker" position, and exempted from the allowlist the same way we
already exempt `default` (the docs note the Default option is likewise
"not affected by `availableModels`").

The entry is preserved in the `ModelInfo[]` (`allowedModels` / session
`modelInfos`), not just the trimmed picker list, so its capability flags
(`supportedEffortLevels`, `supportsAutoMode`) flow to mode gating and
the effort dropdown when the custom model is selected.

Only the allowlist path needs this — when `availableModels` is absent,
ACP uses the full SDK list, which already contains the custom option.

## Test Plan

`src/tests/acp-agent-settings.test.ts` (TDD):
- Custom option preserved at the end of the list when absent from a slim
allowlist, with its name/description intact.
- No duplication when the custom option's exact ID is *also* in
`availableModels`.

No behavior change when `ANTHROPIC_CUSTOM_MODEL_OPTION` is unset or when
`availableModels` is absent.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-15 15:26:30 +00:00
dependabot[bot]
1be5ca57ee feat(deps): bump @anthropic-ai/claude-agent-sdk to 0.3.177 (#771)
Bumps the minor group with 8 updates in the / directory:

| Package | From | To |
| --- | --- | --- |
|
[@agentclientprotocol/sdk](https://github.com/agentclientprotocol/typescript-sdk)
| `0.25.0` | `0.25.1` |
|
[@anthropic-ai/claude-agent-sdk](https://github.com/anthropics/claude-agent-sdk-typescript)
| `0.3.170` | `0.3.177` |
|
[@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node)
| `25.9.2` | `25.9.3` |
| [eslint](https://github.com/eslint/eslint) | `10.4.1` | `10.5.0` |
|
[vitest](https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest)
| `4.1.8` | `4.1.9` |
| [acorn](https://github.com/acornjs/acorn) | `8.16.0` | `8.17.0` |
| [body-parser](https://github.com/expressjs/body-parser) | `2.2.2` |
`2.3.0` |
| [obug](https://github.com/sxzz/obug) | `2.1.2` | `2.1.3` |


Updates `@agentclientprotocol/sdk` from 0.25.0 to 0.25.1
<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>v0.25.1</h2>
<h2><a
href="https://github.com/agentclientprotocol/typescript-sdk/compare/v0.25.0...v0.25.1">0.25.1</a>
(2026-06-13)</h2>
<h3>Bug Fixes</h3>
<ul>
<li>cleanup zod generation (<a
href="https://redirect.github.com/agentclientprotocol/typescript-sdk/issues/170">#170</a>)
(<a
href="be44483cf0">be44483</a>)</li>
<li>Zod type inference errors (<a
href="https://redirect.github.com/agentclientprotocol/typescript-sdk/issues/177">#177</a>)
(<a
href="d9fafa2053">d9fafa2</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/v0.25.0...v0.25.1">0.25.1</a>
(2026-06-13)</h2>
<h3>Bug Fixes</h3>
<ul>
<li>cleanup zod generation (<a
href="https://redirect.github.com/agentclientprotocol/typescript-sdk/issues/170">#170</a>)
(<a
href="be44483cf0">be44483</a>)</li>
<li>Zod type inference errors (<a
href="https://redirect.github.com/agentclientprotocol/typescript-sdk/issues/177">#177</a>)
(<a
href="d9fafa2053">d9fafa2</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="cd8dc79b94"><code>cd8dc79</code></a>
chore(main): release 0.25.1 (<a
href="https://redirect.github.com/agentclientprotocol/typescript-sdk/issues/171">#171</a>)</li>
<li><a
href="d9fafa2053"><code>d9fafa2</code></a>
fix: Zod type inference errors (<a
href="https://redirect.github.com/agentclientprotocol/typescript-sdk/issues/177">#177</a>)</li>
<li><a
href="04c7fd91d3"><code>04c7fd9</code></a>
chore(deps): bump esbuild from 0.28.0 to 0.28.1 (<a
href="https://redirect.github.com/agentclientprotocol/typescript-sdk/issues/176">#176</a>)</li>
<li><a
href="8d9de29709"><code>8d9de29</code></a>
chore(deps): bump actions/checkout from 6.0.2 to 6.0.3 (<a
href="https://redirect.github.com/agentclientprotocol/typescript-sdk/issues/173">#173</a>)</li>
<li><a
href="8ca7903ce1"><code>8ca7903</code></a>
chore(deps): bump crate-ci/typos from 1.47.0 to 1.47.2 (<a
href="https://redirect.github.com/agentclientprotocol/typescript-sdk/issues/174">#174</a>)</li>
<li><a
href="1c6c0b80f4"><code>1c6c0b8</code></a>
chore(deps-dev): bump <code>@​types/node</code> in the minor group (<a
href="https://redirect.github.com/agentclientprotocol/typescript-sdk/issues/175">#175</a>)</li>
<li><a
href="be44483cf0"><code>be44483</code></a>
fix: cleanup zod generation (<a
href="https://redirect.github.com/agentclientprotocol/typescript-sdk/issues/170">#170</a>)</li>
<li>See full diff in <a
href="https://github.com/agentclientprotocol/typescript-sdk/compare/v0.25.0...v0.25.1">compare
view</a></li>
</ul>
</details>
<br />

Updates `@anthropic-ai/claude-agent-sdk` from 0.3.170 to 0.3.177
<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.177</h2>
<h2>What's changed</h2>
<ul>
<li>Updated to parity with Claude Code v2.1.177</li>
</ul>
<h2>Update</h2>
<pre lang="sh"><code>npm install @anthropic-ai/claude-agent-sdk@0.3.177
# or
yarn add @anthropic-ai/claude-agent-sdk@0.3.177
# or
pnpm add @anthropic-ai/claude-agent-sdk@0.3.177
# or
bun add @anthropic-ai/claude-agent-sdk@0.3.177
</code></pre>
<h2>v0.3.176</h2>
<h2>What's changed</h2>
<ul>
<li>Fixed turn <code>result</code> messages being dropped when multiple
turns complete while a background agent or workflow is running</li>
<li>Fixed background agent, remote agent, and MCP task state not being
restored when resuming a session via the SDK</li>
</ul>
<h2>Update</h2>
<pre lang="sh"><code>npm install @anthropic-ai/claude-agent-sdk@0.3.176
# or
yarn add @anthropic-ai/claude-agent-sdk@0.3.176
# or
pnpm add @anthropic-ai/claude-agent-sdk@0.3.176
# or
bun add @anthropic-ai/claude-agent-sdk@0.3.176
</code></pre>
<h2>v0.3.175</h2>
<h2>What's changed</h2>
<ul>
<li>Updated to parity with Claude Code v2.1.175</li>
</ul>
<h2>Update</h2>
<pre lang="sh"><code>npm install @anthropic-ai/claude-agent-sdk@0.3.175
# or
yarn add @anthropic-ai/claude-agent-sdk@0.3.175
# or
pnpm add @anthropic-ai/claude-agent-sdk@0.3.175
# or
bun add @anthropic-ai/claude-agent-sdk@0.3.175
&lt;/tr&gt;&lt;/table&gt; 
</code></pre>
</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.177</h2>
<ul>
<li>Updated to parity with Claude Code v2.1.177</li>
</ul>
<h2>0.3.176</h2>
<ul>
<li>Fixed turn <code>result</code> messages being dropped when multiple
turns complete while a background agent or workflow is running</li>
<li>Fixed background agent, remote agent, and MCP task state not being
restored when resuming a session via the SDK</li>
</ul>
<h2>0.3.175</h2>
<ul>
<li>Updated to parity with Claude Code v2.1.175</li>
</ul>
<h2>0.3.174</h2>
<ul>
<li>SDK consumers now receive the <code>system/model_fallback</code>
message for all fallback triggers — <code>overloaded</code>,
<code>server_error</code>, and <code>last_resort</code> in addition to
<code>model_not_found</code> and <code>permission_denied</code> — and
the message's <code>trigger</code> field gained the
<code>server_error</code> and <code>last_resort</code> values</li>
</ul>
<h2>0.3.173</h2>
<ul>
<li>Updated to parity with Claude Code v2.1.173</li>
</ul>
<h2>0.3.172</h2>
<ul>
<li>SDK <code>plugins</code> option now accepts <code>skipMcpDiscovery:
true</code> per plugin, so a host that manages a plugin's MCP
connections itself can load skills/hooks from the plugin path without
the engine re-reading its <code>.mcp.json</code></li>
<li>Fixed slash-followed-by-whitespace input (e.g. <code>/ add
tests</code>) being silently dropped instead of treated as a plain
prompt</li>
</ul>
<h2>0.3.171</h2>
<ul>
<li>Updated to parity with Claude Code v2.1.171</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="12be9e52fd"><code>12be9e5</code></a>
chore: Update CHANGELOG.md</li>
<li><a
href="4bbff4fbf2"><code>4bbff4f</code></a>
chore: Update CHANGELOG.md</li>
<li><a
href="e05f10c790"><code>e05f10c</code></a>
chore: Update CHANGELOG.md</li>
<li><a
href="8ef4c3fe8e"><code>8ef4c3f</code></a>
chore: Update CHANGELOG.md</li>
<li><a
href="944ab13cf2"><code>944ab13</code></a>
chore: Update CHANGELOG.md</li>
<li><a
href="2cfb79cb35"><code>2cfb79c</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.170...v0.3.177">compare
view</a></li>
</ul>
</details>
<br />

Updates `@types/node` from 25.9.2 to 25.9.3
<details>
<summary>Commits</summary>
<ul>
<li>See full diff in <a
href="https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node">compare
view</a></li>
</ul>
</details>
<br />

Updates `eslint` from 10.4.1 to 10.5.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/eslint/eslint/releases">eslint's
releases</a>.</em></p>
<blockquote>
<h2>v10.5.0</h2>
<h2>Features</h2>
<ul>
<li><a
href="5ca8c5278e"><code>5ca8c52</code></a>
feat: correct stack tracking in max-nested-callbacks (<a
href="https://redirect.github.com/eslint/eslint/issues/20973">#20973</a>)
(Pixel998)</li>
<li><a
href="b565783760"><code>b565783</code></a>
feat: report no-with violations at the with keyword (<a
href="https://redirect.github.com/eslint/eslint/issues/20971">#20971</a>)
(Pixel998)</li>
<li><a
href="2ce032fbc7"><code>2ce032f</code></a>
feat: report max-lines-per-function violations at function head (<a
href="https://redirect.github.com/eslint/eslint/issues/20966">#20966</a>)
(Pixel998)</li>
<li><a
href="732cb3e09d"><code>732cb3e</code></a>
feat: report max-nested-callbacks violations at function head (<a
href="https://redirect.github.com/eslint/eslint/issues/20967">#20967</a>)
(Pixel998)</li>
<li><a
href="f9c138a0ba"><code>f9c138a</code></a>
feat: report max-depth violations on keywords (<a
href="https://redirect.github.com/eslint/eslint/issues/20943">#20943</a>)
(Pixel998)</li>
<li><a
href="bdb496cc0d"><code>bdb496c</code></a>
feat: correct max-depth handling for else-if chains (<a
href="https://redirect.github.com/eslint/eslint/issues/20944">#20944</a>)
(Pixel998)</li>
<li><a
href="c29687354a"><code>c296873</code></a>
feat: update error loc in <code>max-statements</code> to function header
(<a
href="https://redirect.github.com/eslint/eslint/issues/20907">#20907</a>)
(Taejin Kim)</li>
</ul>
<h2>Documentation</h2>
<ul>
<li><a
href="8ae1b5b856"><code>8ae1b5b</code></a>
docs: Update README (GitHub Actions Bot)</li>
<li><a
href="ca7eb90127"><code>ca7eb90</code></a>
docs: update Node.js prerequisites to include ICU support (<a
href="https://redirect.github.com/eslint/eslint/issues/20962">#20962</a>)
(Francesco Trotta)</li>
<li><a
href="f99b47a679"><code>f99b47a</code></a>
docs: Update README (GitHub Actions Bot)</li>
<li><a
href="acf03d4eed"><code>acf03d4</code></a>
docs: clarify precedence of parserOptions over languageOptions (<a
href="https://redirect.github.com/eslint/eslint/issues/20926">#20926</a>)
(sethamus)</li>
</ul>
<h2>Chores</h2>
<ul>
<li><a
href="b18bf58c5a"><code>b18bf58</code></a>
chore: update ecosystem plugins (<a
href="https://redirect.github.com/eslint/eslint/issues/20959">#20959</a>)
(ESLint Bot)</li>
<li><a
href="c2d1444df7"><code>c2d1444</code></a>
refactor: replace areAllSegmentsUnreachable with !isAnySegmentReachable
(<a
href="https://redirect.github.com/eslint/eslint/issues/20951">#20951</a>)
(Taejin Kim)</li>
<li><a
href="243b8c5601"><code>243b8c5</code></a>
chore: enhance config-rule to support oneOf, anyOf, and nested schemas
(<a
href="https://redirect.github.com/eslint/eslint/issues/20788">#20788</a>)
(kuldeep kumar)</li>
<li><a
href="217b2a91f4"><code>217b2a9</code></a>
test: add unit tests for ParserService (<a
href="https://redirect.github.com/eslint/eslint/issues/20949">#20949</a>)
(Taejin Kim)</li>
<li><a
href="72003e781d"><code>72003e7</code></a>
test: add location information to error messages in
<code>max-statements</code> (<a
href="https://redirect.github.com/eslint/eslint/issues/20945">#20945</a>)
(lumir)</li>
<li><a
href="7797c26697"><code>7797c26</code></a>
refactor: deduplicate isAnySegmentReachable across rules (<a
href="https://redirect.github.com/eslint/eslint/issues/20890">#20890</a>)
(Taejin Kim)</li>
<li><a
href="67c46fa6e4"><code>67c46fa</code></a>
chore: update ecosystem plugins (<a
href="https://redirect.github.com/eslint/eslint/issues/20938">#20938</a>)
(ESLint Bot)</li>
<li><a
href="95d8c7a99f"><code>95d8c7a</code></a>
chore: update dependency <code>@​eslint/json</code> to v2 (<a
href="https://redirect.github.com/eslint/eslint/issues/20934">#20934</a>)
(renovate[bot])</li>
<li><a
href="cf9e496205"><code>cf9e496</code></a>
chore: update <code>@​arethetypeswrong/cli</code> to 0.18.3 (<a
href="https://redirect.github.com/eslint/eslint/issues/20933">#20933</a>)
(Pixel998)</li>
<li><a
href="fb6d3960ca"><code>fb6d396</code></a>
test: run type tests with TypeScript 7 (<a
href="https://redirect.github.com/eslint/eslint/issues/20868">#20868</a>)
(sethamus)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="de3b672a26"><code>de3b672</code></a>
10.5.0</li>
<li><a
href="362a518513"><code>362a518</code></a>
Build: changelog update for 10.5.0</li>
<li><a
href="5ca8c5278e"><code>5ca8c52</code></a>
feat: correct stack tracking in max-nested-callbacks (<a
href="https://redirect.github.com/eslint/eslint/issues/20973">#20973</a>)</li>
<li><a
href="b565783760"><code>b565783</code></a>
feat: report no-with violations at the with keyword (<a
href="https://redirect.github.com/eslint/eslint/issues/20971">#20971</a>)</li>
<li><a
href="2ce032fbc7"><code>2ce032f</code></a>
feat: report max-lines-per-function violations at function head (<a
href="https://redirect.github.com/eslint/eslint/issues/20966">#20966</a>)</li>
<li><a
href="732cb3e09d"><code>732cb3e</code></a>
feat: report max-nested-callbacks violations at function head (<a
href="https://redirect.github.com/eslint/eslint/issues/20967">#20967</a>)</li>
<li><a
href="f9c138a0ba"><code>f9c138a</code></a>
feat: report max-depth violations on keywords (<a
href="https://redirect.github.com/eslint/eslint/issues/20943">#20943</a>)</li>
<li><a
href="8ae1b5b856"><code>8ae1b5b</code></a>
docs: Update README</li>
<li><a
href="ca7eb90127"><code>ca7eb90</code></a>
docs: update Node.js prerequisites to include ICU support (<a
href="https://redirect.github.com/eslint/eslint/issues/20962">#20962</a>)</li>
<li><a
href="b18bf58c5a"><code>b18bf58</code></a>
chore: update ecosystem plugins (<a
href="https://redirect.github.com/eslint/eslint/issues/20959">#20959</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/eslint/eslint/compare/v10.4.1...v10.5.0">compare
view</a></li>
</ul>
</details>
<br />

Updates `vitest` from 4.1.8 to 4.1.9
<details>
<summary>Commits</summary>
<ul>
<li>See full diff in <a
href="https://github.com/vitest-dev/vitest/commits/HEAD/packages/vitest">compare
view</a></li>
</ul>
</details>
<br />

Updates `@anthropic-ai/claude-agent-sdk-darwin-arm64` from 0.3.170 to
0.3.177

Updates `@anthropic-ai/claude-agent-sdk-darwin-x64` from 0.3.170 to
0.3.177

Updates `@anthropic-ai/claude-agent-sdk-linux-arm64` from 0.3.170 to
0.3.177

Updates `@anthropic-ai/claude-agent-sdk-linux-arm64-musl` from 0.3.170
to 0.3.177

Updates `@anthropic-ai/claude-agent-sdk-linux-x64` from 0.3.170 to
0.3.177

Updates `@anthropic-ai/claude-agent-sdk-linux-x64-musl` from 0.3.170 to
0.3.177

Updates `@anthropic-ai/claude-agent-sdk-win32-arm64` from 0.3.170 to
0.3.177

Updates `@anthropic-ai/claude-agent-sdk-win32-x64` from 0.3.170 to
0.3.177

Updates `@vitest/expect` from 4.1.8 to 4.1.9
<details>
<summary>Commits</summary>
<ul>
<li>See full diff in <a
href="https://github.com/vitest-dev/vitest/commits/HEAD/packages/expect">compare
view</a></li>
</ul>
</details>
<br />

Updates `@vitest/mocker` from 4.1.8 to 4.1.9
<details>
<summary>Commits</summary>
<ul>
<li>See full diff in <a
href="https://github.com/vitest-dev/vitest/commits/HEAD/packages/mocker">compare
view</a></li>
</ul>
</details>
<br />

Updates `@vitest/pretty-format` from 4.1.8 to 4.1.9
<details>
<summary>Commits</summary>
<ul>
<li>See full diff in <a
href="https://github.com/vitest-dev/vitest/commits/HEAD/packages/pretty-format">compare
view</a></li>
</ul>
</details>
<br />

Updates `@vitest/runner` from 4.1.8 to 4.1.9
<details>
<summary>Commits</summary>
<ul>
<li>See full diff in <a
href="https://github.com/vitest-dev/vitest/commits/HEAD/packages/runner">compare
view</a></li>
</ul>
</details>
<br />

Updates `@vitest/snapshot` from 4.1.8 to 4.1.9
<details>
<summary>Commits</summary>
<ul>
<li>See full diff in <a
href="https://github.com/vitest-dev/vitest/commits/HEAD/packages/snapshot">compare
view</a></li>
</ul>
</details>
<br />

Updates `@vitest/spy` from 4.1.8 to 4.1.9
<details>
<summary>Commits</summary>
<ul>
<li>See full diff in <a
href="https://github.com/vitest-dev/vitest/commits/HEAD/packages/spy">compare
view</a></li>
</ul>
</details>
<br />

Updates `@vitest/utils` from 4.1.8 to 4.1.9
<details>
<summary>Commits</summary>
<ul>
<li>See full diff in <a
href="https://github.com/vitest-dev/vitest/commits/HEAD/packages/utils">compare
view</a></li>
</ul>
</details>
<br />

Updates `acorn` from 8.16.0 to 8.17.0
<details>
<summary>Commits</summary>
<ul>
<li><a
href="5b9d16c256"><code>5b9d16c</code></a>
Mark version 8.17.0</li>
<li><a
href="449f9fafb8"><code>449f9fa</code></a>
Make linter happy</li>
<li><a
href="9e1bced50d"><code>9e1bced</code></a>
Add a strict option to turn on strict mode for scripts</li>
<li><a
href="8a47812670"><code>8a47812</code></a>
Convert stack overflow errors to SyntaxError instances</li>
<li><a
href="3bc83f91bb"><code>3bc83f9</code></a>
Update maintainer email</li>
<li><a
href="3f40dbe684"><code>3f40dbe</code></a>
Bump test262</li>
<li><a
href="8bd029044e"><code>8bd0290</code></a>
Improve handling of using/await using in for loops</li>
<li><a
href="f25fdeda46"><code>f25fded</code></a>
Upgrade some dev dependencies</li>
<li><a
href="27781e4542"><code>27781e4</code></a>
Remove unnecessary test</li>
<li><a
href="2dded4b9de"><code>2dded4b</code></a>
Forbid 'new super()'</li>
<li>Additional commits viewable in <a
href="https://github.com/acornjs/acorn/compare/8.16.0...8.17.0">compare
view</a></li>
</ul>
</details>
<br />

Updates `body-parser` from 2.2.2 to 2.3.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/expressjs/body-parser/releases">body-parser's
releases</a>.</em></p>
<blockquote>
<h2>v2.3.0</h2>
<h2>What's Changed</h2>
<ul>
<li>build(deps): bump actions/download-artifact from 6.0.0 to 7.0.0 by
<a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/expressjs/body-parser/pull/681">expressjs/body-parser#681</a></li>
<li>build(deps): bump actions/checkout from 5.0.0 to 6.0.1 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/expressjs/body-parser/pull/682">expressjs/body-parser#682</a></li>
<li>build(deps): bump actions/setup-node from 6.0.0 to 6.1.0 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/expressjs/body-parser/pull/683">expressjs/body-parser#683</a></li>
<li>build(deps): bump actions/upload-artifact from 5.0.0 to 6.0.0 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/expressjs/body-parser/pull/685">expressjs/body-parser#685</a></li>
<li>build(deps): bump github/codeql-action from 4.31.2 to 4.31.9 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/expressjs/body-parser/pull/684">expressjs/body-parser#684</a></li>
<li>perf(urlencoded): move empty-body guard to avoid extra function
closure by <a
href="https://github.com/Phillip9587"><code>@​Phillip9587</code></a> in
<a
href="https://redirect.github.com/expressjs/body-parser/pull/647">expressjs/body-parser#647</a></li>
<li>Improve ESM compatibility by <a
href="https://github.com/Phillip9587"><code>@​Phillip9587</code></a> in
<a
href="https://redirect.github.com/expressjs/body-parser/pull/697">expressjs/body-parser#697</a></li>
<li>docs: add recommendations for configuring payload limits by <a
href="https://github.com/bjohansebas"><code>@​bjohansebas</code></a> in
<a
href="https://redirect.github.com/expressjs/body-parser/pull/699">expressjs/body-parser#699</a></li>
<li>build(deps): bump actions/setup-node from 6.1.0 to 6.2.0 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/expressjs/body-parser/pull/701">expressjs/body-parser#701</a></li>
<li>build(deps): bump github/codeql-action from 4.31.10 to 4.32.0 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/expressjs/body-parser/pull/702">expressjs/body-parser#702</a></li>
<li>build(deps): bump actions/checkout from 6.0.1 to 6.0.2 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/expressjs/body-parser/pull/700">expressjs/body-parser#700</a></li>
<li>chore: add explicit type commonjs to package.json by <a
href="https://github.com/Phillip9587"><code>@​Phillip9587</code></a> in
<a
href="https://redirect.github.com/expressjs/body-parser/pull/711">expressjs/body-parser#711</a></li>
<li>deps: update dependencies to latest versions by <a
href="https://github.com/Phillip9587"><code>@​Phillip9587</code></a> in
<a
href="https://redirect.github.com/expressjs/body-parser/pull/708">expressjs/body-parser#708</a></li>
<li>build(deps): bump actions/download-artifact from 7.0.0 to 8.0.0 by
<a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/expressjs/body-parser/pull/712">expressjs/body-parser#712</a></li>
<li>build(deps): bump github/codeql-action from 4.32.0 to 4.32.4 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/expressjs/body-parser/pull/713">expressjs/body-parser#713</a></li>
<li>build(deps): bump actions/upload-artifact from 6.0.0 to 7.0.0 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/expressjs/body-parser/pull/714">expressjs/body-parser#714</a></li>
<li>fix: improve limit option validation by <a
href="https://github.com/Phillip9587"><code>@​Phillip9587</code></a> in
<a
href="https://redirect.github.com/expressjs/body-parser/pull/698">expressjs/body-parser#698</a></li>
<li>build(deps): bump github/codeql-action from 4.32.4 to 4.35.1 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/expressjs/body-parser/pull/719">expressjs/body-parser#719</a></li>
<li>build(deps): bump actions/setup-node from 6.2.0 to 6.3.0 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/expressjs/body-parser/pull/718">expressjs/body-parser#718</a></li>
<li>build(deps): bump actions/download-artifact from 8.0.0 to 8.0.1 by
<a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/expressjs/body-parser/pull/717">expressjs/body-parser#717</a></li>
<li>perf: eliminate conditional check in json strict mode hot path by <a
href="https://github.com/Phillip9587"><code>@​Phillip9587</code></a> in
<a
href="https://redirect.github.com/expressjs/body-parser/pull/651">expressjs/body-parser#651</a></li>
<li>ci: add node.js 26 to text matrix by <a
href="https://github.com/Phillip9587"><code>@​Phillip9587</code></a> in
<a
href="https://redirect.github.com/expressjs/body-parser/pull/726">expressjs/body-parser#726</a></li>
<li>build(deps): bump actions/setup-node from 6.3.0 to 6.4.0 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/expressjs/body-parser/pull/725">expressjs/body-parser#725</a></li>
<li>build(deps): bump actions/upload-artifact from 7.0.0 to 7.0.1 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/expressjs/body-parser/pull/724">expressjs/body-parser#724</a></li>
<li>build(deps): bump github/codeql-action from 4.35.1 to 4.35.3 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/expressjs/body-parser/pull/723">expressjs/body-parser#723</a></li>
<li>Upgrade &quot;content-type&quot; by <a
href="https://github.com/blakeembrey"><code>@​blakeembrey</code></a> in
<a
href="https://redirect.github.com/expressjs/body-parser/pull/728">expressjs/body-parser#728</a></li>
<li>refactor: switch to const/let and enable eslint no-var rule by <a
href="https://github.com/Phillip9587"><code>@​Phillip9587</code></a> in
<a
href="https://redirect.github.com/expressjs/body-parser/pull/729">expressjs/body-parser#729</a></li>
<li>Update outdated reference to MDN docs by <a
href="https://github.com/krzysdz"><code>@​krzysdz</code></a> in <a
href="https://redirect.github.com/expressjs/body-parser/pull/730">expressjs/body-parser#730</a></li>
<li>build(deps): bump github/codeql-action from 4.35.3 to 4.36.1 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/expressjs/body-parser/pull/731">expressjs/body-parser#731</a></li>
<li>build(deps): bump actions/checkout from 6.0.2 to 6.0.3 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/expressjs/body-parser/pull/732">expressjs/body-parser#732</a></li>
<li>chore: updated deps to latest by <a
href="https://github.com/Phillip9587"><code>@​Phillip9587</code></a> in
<a
href="https://redirect.github.com/expressjs/body-parser/pull/733">expressjs/body-parser#733</a></li>
<li>2.3.0 by <a
href="https://github.com/UlisesGascon"><code>@​UlisesGascon</code></a>
in <a
href="https://redirect.github.com/expressjs/body-parser/pull/735">expressjs/body-parser#735</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a href="https://github.com/krzysdz"><code>@​krzysdz</code></a> made
their first contribution in <a
href="https://redirect.github.com/expressjs/body-parser/pull/730">expressjs/body-parser#730</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/expressjs/body-parser/compare/v2.2.2...v2.3.0">https://github.com/expressjs/body-parser/compare/v2.2.2...v2.3.0</a></p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/expressjs/body-parser/blob/master/HISTORY.md">body-parser's
changelog</a>.</em></p>
<blockquote>
<h1>2.3.0 / 2026-06-15</h1>
<ul>
<li>fix: use static exports instead of lazy getters to improve ESM
compatibility</li>
<li>feat: add subpath exports for individual parsers</li>
<li>fix: improve <code>limit</code> option validation (<a
href="https://redirect.github.com/expressjs/body-parser/issues/698">#698</a>)
<ul>
<li>Invalid <code>limit</code> values (e.g. unparseable strings or
<code>NaN</code>) now throw instead of being silently ignored, which
previously disabled size limit enforcement</li>
<li><code>null</code> and <code>undefined</code> fall back to the
default 100kb limit</li>
</ul>
</li>
<li>deps:
<ul>
<li>content-type@^2.0.0</li>
<li>http-errors@^2.0.1</li>
<li>iconv-lite^0.7.2</li>
<li>qs@^6.15.2</li>
<li>raw-body@^3.0.2</li>
<li>type-is@^2.1.0</li>
</ul>
</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="d0f2ace6c7"><code>d0f2ace</code></a>
2.3.0 (<a
href="https://redirect.github.com/expressjs/body-parser/issues/735">#735</a>)</li>
<li><a
href="7d03f2f9d5"><code>7d03f2f</code></a>
chore: updated deps to latest (<a
href="https://redirect.github.com/expressjs/body-parser/issues/733">#733</a>)</li>
<li><a
href="8024ba7a81"><code>8024ba7</code></a>
build(deps): bump actions/checkout from 6.0.2 to 6.0.3 (<a
href="https://redirect.github.com/expressjs/body-parser/issues/732">#732</a>)</li>
<li><a
href="32b4ed4639"><code>32b4ed4</code></a>
build(deps): bump github/codeql-action from 4.35.3 to 4.36.1 (<a
href="https://redirect.github.com/expressjs/body-parser/issues/731">#731</a>)</li>
<li><a
href="ff0f6b9071"><code>ff0f6b9</code></a>
docs: update outdated reference to MDN docs (<a
href="https://redirect.github.com/expressjs/body-parser/issues/730">#730</a>)</li>
<li><a
href="14d001a9c9"><code>14d001a</code></a>
refactor: switch to const/let and enable eslint no-var rule (<a
href="https://redirect.github.com/expressjs/body-parser/issues/729">#729</a>)</li>
<li><a
href="37f36a2752"><code>37f36a2</code></a>
deps: update content-type and type-is (<a
href="https://redirect.github.com/expressjs/body-parser/issues/728">#728</a>)</li>
<li><a
href="e1c244bf55"><code>e1c244b</code></a>
build(deps): bump github/codeql-action from 4.35.1 to 4.35.3 (<a
href="https://redirect.github.com/expressjs/body-parser/issues/723">#723</a>)</li>
<li><a
href="e01087f521"><code>e01087f</code></a>
build(deps): bump actions/upload-artifact from 7.0.0 to 7.0.1 (<a
href="https://redirect.github.com/expressjs/body-parser/issues/724">#724</a>)</li>
<li><a
href="a7698d3028"><code>a7698d3</code></a>
build(deps): bump actions/setup-node from 6.3.0 to 6.4.0 (<a
href="https://redirect.github.com/expressjs/body-parser/issues/725">#725</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/expressjs/body-parser/compare/v2.2.2...v2.3.0">compare
view</a></li>
</ul>
</details>
<br />

Updates `obug` from 2.1.2 to 2.1.3
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/sxzz/obug/releases">obug's
releases</a>.</em></p>
<blockquote>
<h2>v2.1.3</h2>
<h3>   🚀 Features</h3>
<ul>
<li>Add <code>sideEffects</code> field  -  by <a
href="https://github.com/sxzz"><code>@​sxzz</code></a> <a
href="https://github.com/sxzz/obug/commit/014584c"><!-- raw HTML omitted
-->(01458)<!-- raw HTML omitted --></a></li>
</ul>
<h5>    <a
href="https://github.com/sxzz/obug/compare/v2.1.2...v2.1.3">View changes
on GitHub</a></h5>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="6508a03a1e"><code>6508a03</code></a>
chore: release v2.1.3</li>
<li><a
href="014584c3c8"><code>014584c</code></a>
feat: add <code>sideEffects</code> field</li>
<li>See full diff in <a
href="https://github.com/sxzz/obug/compare/v2.1.2...v2.1.3">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>
2026-06-15 17:21:31 +02:00
dependabot[bot]
7de5e4bcca feat(deps-dev): bump the minor group with 3 updates (#763)
Bumps the minor group with 3 updates:
[@anthropic-ai/sdk](https://github.com/anthropics/anthropic-sdk-typescript),
[@napi-rs/wasm-runtime](https://github.com/napi-rs/napi-rs/tree/HEAD/wasm-runtime)
and [semver](https://github.com/npm/node-semver).

Updates `@anthropic-ai/sdk` from 0.103.0 to 0.104.1
<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.104.1</h2>
<h2>0.104.1 (2026-06-09)</h2>
<p>Full Changelog: <a
href="https://github.com/anthropics/anthropic-sdk-typescript/compare/sdk-v0.104.0...sdk-v0.104.1">sdk-v0.104.0...sdk-v0.104.1</a></p>
<h3>Bug Fixes</h3>
<ul>
<li><strong>api:</strong> add <code>frontier_llm</code> refusal category
(<a
href="465e6866d6">465e686</a>)</li>
</ul>
<h2>sdk: v0.104.0</h2>
<h2>0.104.0 (2026-06-09)</h2>
<p>Full Changelog: <a
href="https://github.com/anthropics/anthropic-sdk-typescript/compare/sdk-v0.103.0...sdk-v0.104.0">sdk-v0.103.0...sdk-v0.104.0</a></p>
<h3>Features</h3>
<ul>
<li><strong>api:</strong> add support for Managed Agents deployments and
environment variable credentials (<a
href="d01e38b5b6">d01e38b</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/anthropics/anthropic-sdk-typescript/blob/main/CHANGELOG.md">@​anthropic-ai/sdk's
changelog</a>.</em></p>
<blockquote>
<h2>0.104.1 (2026-06-09)</h2>
<p>Full Changelog: <a
href="https://github.com/anthropics/anthropic-sdk-typescript/compare/sdk-v0.104.0...sdk-v0.104.1">sdk-v0.104.0...sdk-v0.104.1</a></p>
<h3>Bug Fixes</h3>
<ul>
<li><strong>api:</strong> add <code>frontier_llm</code> refusal category
(<a
href="465e6866d6">465e686</a>)</li>
</ul>
<h2>0.104.0 (2026-06-09)</h2>
<p>Full Changelog: <a
href="https://github.com/anthropics/anthropic-sdk-typescript/compare/sdk-v0.103.0...sdk-v0.104.0">sdk-v0.103.0...sdk-v0.104.0</a></p>
<h3>Features</h3>
<ul>
<li><strong>api:</strong> add support for Managed Agents deployments and
environment variable credentials (<a
href="d01e38b5b6">d01e38b</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="9a0442d88e"><code>9a0442d</code></a>
chore: release main</li>
<li><a
href="1ccd4012e7"><code>1ccd401</code></a>
fix(api): add <code>frontier_llm</code> refusal category</li>
<li><a
href="8be0232e92"><code>8be0232</code></a>
chore: release main</li>
<li><a
href="813af32183"><code>813af32</code></a>
feat(api): add support for Managed Agents deployments and environment
variabl...</li>
<li>See full diff in <a
href="https://github.com/anthropics/anthropic-sdk-typescript/compare/sdk-v0.103.0...sdk-v0.104.1">compare
view</a></li>
</ul>
</details>
<br />

Updates `@napi-rs/wasm-runtime` from 1.1.4 to 1.1.5
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/napi-rs/napi-rs/blob/main/wasm-runtime/CHANGELOG.md">@​napi-rs/wasm-runtime's
changelog</a>.</em></p>
<blockquote>
<h2><a
href="https://github.com/napi-rs/napi-rs/compare/@napi-rs/wasm-runtime@1.1.4...@napi-rs/wasm-runtime@1.1.5">1.1.5</a>
(2026-06-10)</h2>
<h3>Bug Fixes</h3>
<ul>
<li><strong>wasm-runtime:</strong> preserve Buffer return values in
fs-proxy (<a
href="https://redirect.github.com/napi-rs/napi-rs/issues/3250">#3250</a>)
(<a
href="c70f205a07">c70f205</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="670e5d3195"><code>670e5d3</code></a>
chore(release): publish</li>
<li><a
href="ad7b1c8fbf"><code>ad7b1c8</code></a>
chore(deps): lock file maintenance (<a
href="https://github.com/napi-rs/napi-rs/tree/HEAD/wasm-runtime/issues/3318">#3318</a>)</li>
<li><a
href="c70f205a07"><code>c70f205</code></a>
fix(wasm-runtime): preserve Buffer return values in fs-proxy (<a
href="https://github.com/napi-rs/napi-rs/tree/HEAD/wasm-runtime/issues/3250">#3250</a>)</li>
<li>See full diff in <a
href="https://github.com/napi-rs/napi-rs/commits/@napi-rs/wasm-runtime@1.1.5/wasm-runtime">compare
view</a></li>
</ul>
</details>
<br />

Updates `semver` from 7.8.3 to 7.8.4
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/npm/node-semver/releases">semver's
releases</a>.</em></p>
<blockquote>
<h2>v7.8.4</h2>
<h2><a
href="https://github.com/npm/node-semver/compare/v7.8.3...v7.8.4">7.8.4</a>
(2026-06-09)</h2>
<h3>Bug Fixes</h3>
<ul>
<li><a
href="e583226b16"><code>e583226</code></a>
<a href="https://redirect.github.com/npm/node-semver/pull/874">#874</a>
reject numeric segments after x-ranges (<a
href="https://github.com/pupuking723"><code>@​pupuking723</code></a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/npm/node-semver/blob/main/CHANGELOG.md">semver's
changelog</a>.</em></p>
<blockquote>
<h2><a
href="https://github.com/npm/node-semver/compare/v7.8.3...v7.8.4">7.8.4</a>
(2026-06-09)</h2>
<h3>Bug Fixes</h3>
<ul>
<li><a
href="e583226b16"><code>e583226</code></a>
<a href="https://redirect.github.com/npm/node-semver/pull/874">#874</a>
reject numeric segments after x-ranges (<a
href="https://github.com/pupuking723"><code>@​pupuking723</code></a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="8640bd68f1"><code>8640bd6</code></a>
chore: release 7.8.4 (<a
href="https://redirect.github.com/npm/node-semver/issues/875">#875</a>)</li>
<li><a
href="e583226b16"><code>e583226</code></a>
fix: reject numeric segments after x-ranges</li>
<li>See full diff in <a
href="https://github.com/npm/node-semver/compare/v7.8.3...v7.8.4">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>
2026-06-10 17:21:39 +02:00
acp-release-bot[bot]
85a45b2895 chore(main): release 0.44.0 (#759)
🤖 I have created a release *beep* *boop*
---


##
[0.44.0](https://github.com/agentclientprotocol/claude-agent-acp/compare/v0.43.0...v0.44.0)
(2026-06-09)


### Features

* **deps:** bump the minor group with 14 updates
([#758](https://github.com/agentclientprotocol/claude-agent-acp/issues/758))
([7a70162](7a701623df))
* **deps:** update to @anthropic-ai/claude-agent-sdk 0.3.170
([#761](https://github.com/agentclientprotocol/claude-agent-acp/issues/761))
([d8af943](d8af943a1e))

---
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>
2026-06-09 19:45:19 +02:00
Anna Zhdan
d8af943a1e feat(deps): update to @anthropic-ai/claude-agent-sdk 0.3.170 (#761)
## Summary
- Bump `@anthropic-ai/claude-agent-sdk` from 0.3.169 to **0.3.170**
- Bump `@anthropic-ai/sdk` from 0.102.0 to **0.103.0**
- Handle two new SDK types: `model_refusal_fallback` (system message)
and `fallback` (content block)

## Test plan
- [x] Build passes
- [x] All 355 tests pass (15 skipped)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-06-09 19:41:17 +02:00
dependabot[bot]
7a701623df feat(deps): bump the minor group with 14 updates (#758)
Bumps the minor group with 14 updates:

| Package | From | To |
| --- | --- | --- |
|
[@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin)
| `8.60.1` | `8.61.0` |
|
[@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser)
| `8.60.1` | `8.61.0` |
| [prettier](https://github.com/prettier/prettier) | `3.8.3` | `3.8.4` |
|
[@typescript-eslint/project-service](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/project-service)
| `8.60.1` | `8.61.0` |
|
[@typescript-eslint/scope-manager](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/scope-manager)
| `8.60.1` | `8.61.0` |
|
[@typescript-eslint/tsconfig-utils](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/tsconfig-utils)
| `8.60.1` | `8.61.0` |
|
[@typescript-eslint/type-utils](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/type-utils)
| `8.60.1` | `8.61.0` |
|
[@typescript-eslint/types](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/types)
| `8.60.1` | `8.61.0` |
|
[@typescript-eslint/typescript-estree](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-estree)
| `8.60.1` | `8.61.0` |
|
[@typescript-eslint/utils](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/utils)
| `8.60.1` | `8.61.0` |
|
[@typescript-eslint/visitor-keys](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/visitor-keys)
| `8.60.1` | `8.61.0` |
| [hono](https://github.com/honojs/hono) | `4.12.24` | `4.12.25` |
| [semver](https://github.com/npm/node-semver) | `7.8.2` | `7.8.3` |
| [side-channel](https://github.com/ljharb/side-channel) | `1.1.0` |
`1.1.1` |

Updates `@typescript-eslint/eslint-plugin` from 8.60.1 to 8.61.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/typescript-eslint/typescript-eslint/releases">@​typescript-eslint/eslint-plugin's
releases</a>.</em></p>
<blockquote>
<h2>v8.61.0</h2>
<h2>8.61.0 (2026-06-08)</h2>
<h3>🚀 Features</h3>
<ul>
<li><strong>ast-spec:</strong> change type of
<code>UnaryExpression.prefix</code> to always <code>true</code> (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12372">#12372</a>)</li>
<li><strong>ast-spec:</strong> tighten types of
<code>ArrowFunction</code>, <code>YieldExpression</code>,
<code>TSTypePredicate</code> (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12373">#12373</a>)</li>
</ul>
<h3>🩹 Fixes</h3>
<ul>
<li><strong>rule-schema-to-typescript-types:</strong> respect ECMAScript
line terminators (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12374">#12374</a>)</li>
</ul>
<h3>❤️ Thank You</h3>
<ul>
<li>Kirk Waiblinger <a
href="https://github.com/kirkwaiblinger"><code>@​kirkwaiblinger</code></a></li>
<li>lumir</li>
</ul>
<p>See <a
href="https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.61.0">GitHub
Releases</a> for more information.</p>
<p>You can read about our <a
href="https://typescript-eslint.io/users/versioning">versioning
strategy</a> and <a
href="https://typescript-eslint.io/users/releases">releases</a> on our
website.</p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/CHANGELOG.md">@​typescript-eslint/eslint-plugin's
changelog</a>.</em></p>
<blockquote>
<h2>8.61.0 (2026-06-08)</h2>
<h3>🚀 Features</h3>
<ul>
<li><strong>ast-spec:</strong> change type of
<code>UnaryExpression.prefix</code> to always <code>true</code> (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12372">#12372</a>)</li>
</ul>
<h3>❤️ Thank You</h3>
<ul>
<li>Kirk Waiblinger <a
href="https://github.com/kirkwaiblinger"><code>@​kirkwaiblinger</code></a></li>
</ul>
<p>See <a
href="https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.61.0">GitHub
Releases</a> for more information.</p>
<p>You can read about our <a
href="https://typescript-eslint.io/users/versioning">versioning
strategy</a> and <a
href="https://typescript-eslint.io/users/releases">releases</a> on our
website.</p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="16a5b247af"><code>16a5b24</code></a>
chore(release): publish 8.61.0</li>
<li><a
href="ef1fd28c68"><code>ef1fd28</code></a>
feat(ast-spec): change type of <code>UnaryExpression.prefix</code> to
always <code>true</code> (<a
href="https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin/issues/12">#12</a>...</li>
<li>See full diff in <a
href="https://github.com/typescript-eslint/typescript-eslint/commits/v8.61.0/packages/eslint-plugin">compare
view</a></li>
</ul>
</details>
<br />

Updates `@typescript-eslint/parser` from 8.60.1 to 8.61.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/typescript-eslint/typescript-eslint/releases">@​typescript-eslint/parser's
releases</a>.</em></p>
<blockquote>
<h2>v8.61.0</h2>
<h2>8.61.0 (2026-06-08)</h2>
<h3>🚀 Features</h3>
<ul>
<li><strong>ast-spec:</strong> change type of
<code>UnaryExpression.prefix</code> to always <code>true</code> (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12372">#12372</a>)</li>
<li><strong>ast-spec:</strong> tighten types of
<code>ArrowFunction</code>, <code>YieldExpression</code>,
<code>TSTypePredicate</code> (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12373">#12373</a>)</li>
</ul>
<h3>🩹 Fixes</h3>
<ul>
<li><strong>rule-schema-to-typescript-types:</strong> respect ECMAScript
line terminators (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12374">#12374</a>)</li>
</ul>
<h3>❤️ Thank You</h3>
<ul>
<li>Kirk Waiblinger <a
href="https://github.com/kirkwaiblinger"><code>@​kirkwaiblinger</code></a></li>
<li>lumir</li>
</ul>
<p>See <a
href="https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.61.0">GitHub
Releases</a> for more information.</p>
<p>You can read about our <a
href="https://typescript-eslint.io/users/versioning">versioning
strategy</a> and <a
href="https://typescript-eslint.io/users/releases">releases</a> on our
website.</p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/parser/CHANGELOG.md">@​typescript-eslint/parser's
changelog</a>.</em></p>
<blockquote>
<h2>8.61.0 (2026-06-08)</h2>
<p>This was a version bump only for parser to align it with other
projects, there were no code changes.</p>
<p>See <a
href="https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.61.0">GitHub
Releases</a> for more information.</p>
<p>You can read about our <a
href="https://typescript-eslint.io/users/versioning">versioning
strategy</a> and <a
href="https://typescript-eslint.io/users/releases">releases</a> on our
website.</p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="16a5b247af"><code>16a5b24</code></a>
chore(release): publish 8.61.0</li>
<li>See full diff in <a
href="https://github.com/typescript-eslint/typescript-eslint/commits/v8.61.0/packages/parser">compare
view</a></li>
</ul>
</details>
<br />

Updates `prettier` from 3.8.3 to 3.8.4
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/prettier/prettier/releases">prettier's
releases</a>.</em></p>
<blockquote>
<h2>3.8.4</h2>
<ul>
<li>Markdown: Fix blank lines between list items and nested sub-lists
being removed in Markdown/MDX (<a
href="https://redirect.github.com/prettier/prettier/pull/17746">prettier/prettier#17746</a>
by <a
href="https://github.com/byplayer"><code>@​byplayer</code></a>)</li>
</ul>
<p>🔗 <a
href="https://github.com/prettier/prettier/blob/3.8.4/CHANGELOG.md#384">Changelog</a></p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/prettier/prettier/blob/main/CHANGELOG.md">prettier's
changelog</a>.</em></p>
<blockquote>
<h1>3.8.4</h1>
<p><a
href="https://github.com/prettier/prettier/compare/3.8.3...3.8.4">diff</a></p>
<h4>Markdown: Fix blank lines between list items and nested sub-lists
being removed in Markdown/MDX (<a
href="https://redirect.github.com/prettier/prettier/pull/17746">#17746</a>
by <a
href="https://github.com/byplayer"><code>@​byplayer</code></a>)</h4>
<p>Prettier was removing blank lines between list items and their nested
sub-lists, converting loose lists into tight lists and changing their
semantic meaning.</p>
<!-- raw HTML omitted -->
<pre lang="markdown"><code>&lt;!-- Input --&gt;
- a
<ul>
<li>
<p>b</p>
</li>
<li>
<p>c</p>
<ul>
<li>d</li>
</ul>
</li>
</ul>
<p>&lt;!-- Prettier 3.8.3 --&gt;</p>
<ul>
<li>a
<ul>
<li>b</li>
</ul>
</li>
<li>c
<ul>
<li>d</li>
</ul>
</li>
</ul>
<p>&lt;!-- Prettier 3.8.4 --&gt;</p>
<ul>
<li>
<p>a</p>
<ul>
<li>b</li>
</ul>
</li>
<li>
<p>c</p>
<ul>
<li>d<br />
</code></pre></li>
</ul>
</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="1c6ba55391"><code>1c6ba55</code></a>
Release 3.8.4</li>
<li><a
href="4a673dc9b5"><code>4a673dc</code></a>
Fix blank lines between list items and nested sub-lists being removed in
Mark...</li>
<li><a
href="074aaedbb0"><code>074aaed</code></a>
Replace <code>main</code> branch in changelog link with tags (<a
href="https://redirect.github.com/prettier/prettier/issues/19054">#19054</a>)</li>
<li><a
href="c22a003ae9"><code>c22a003</code></a>
Bump Prettier dependency to 3.8.3</li>
<li><a
href="07bad1f045"><code>07bad1f</code></a>
Clean changelog_unreleased</li>
<li>See full diff in <a
href="https://github.com/prettier/prettier/compare/3.8.3...3.8.4">compare
view</a></li>
</ul>
</details>
<br />

Updates `@typescript-eslint/project-service` from 8.60.1 to 8.61.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/typescript-eslint/typescript-eslint/releases">@​typescript-eslint/project-service's
releases</a>.</em></p>
<blockquote>
<h2>v8.61.0</h2>
<h2>8.61.0 (2026-06-08)</h2>
<h3>🚀 Features</h3>
<ul>
<li><strong>ast-spec:</strong> change type of
<code>UnaryExpression.prefix</code> to always <code>true</code> (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12372">#12372</a>)</li>
<li><strong>ast-spec:</strong> tighten types of
<code>ArrowFunction</code>, <code>YieldExpression</code>,
<code>TSTypePredicate</code> (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12373">#12373</a>)</li>
</ul>
<h3>🩹 Fixes</h3>
<ul>
<li><strong>rule-schema-to-typescript-types:</strong> respect ECMAScript
line terminators (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12374">#12374</a>)</li>
</ul>
<h3>❤️ Thank You</h3>
<ul>
<li>Kirk Waiblinger <a
href="https://github.com/kirkwaiblinger"><code>@​kirkwaiblinger</code></a></li>
<li>lumir</li>
</ul>
<p>See <a
href="https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.61.0">GitHub
Releases</a> for more information.</p>
<p>You can read about our <a
href="https://typescript-eslint.io/users/versioning">versioning
strategy</a> and <a
href="https://typescript-eslint.io/users/releases">releases</a> on our
website.</p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/project-service/CHANGELOG.md">@​typescript-eslint/project-service's
changelog</a>.</em></p>
<blockquote>
<h2>8.61.0 (2026-06-08)</h2>
<p>This was a version bump only for project-service to align it with
other projects, there were no code changes.</p>
<p>See <a
href="https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.61.0">GitHub
Releases</a> for more information.</p>
<p>You can read about our <a
href="https://typescript-eslint.io/users/versioning">versioning
strategy</a> and <a
href="https://typescript-eslint.io/users/releases">releases</a> on our
website.</p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="16a5b247af"><code>16a5b24</code></a>
chore(release): publish 8.61.0</li>
<li>See full diff in <a
href="https://github.com/typescript-eslint/typescript-eslint/commits/v8.61.0/packages/project-service">compare
view</a></li>
</ul>
</details>
<br />

Updates `@typescript-eslint/scope-manager` from 8.60.1 to 8.61.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/typescript-eslint/typescript-eslint/releases">@​typescript-eslint/scope-manager's
releases</a>.</em></p>
<blockquote>
<h2>v8.61.0</h2>
<h2>8.61.0 (2026-06-08)</h2>
<h3>🚀 Features</h3>
<ul>
<li><strong>ast-spec:</strong> change type of
<code>UnaryExpression.prefix</code> to always <code>true</code> (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12372">#12372</a>)</li>
<li><strong>ast-spec:</strong> tighten types of
<code>ArrowFunction</code>, <code>YieldExpression</code>,
<code>TSTypePredicate</code> (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12373">#12373</a>)</li>
</ul>
<h3>🩹 Fixes</h3>
<ul>
<li><strong>rule-schema-to-typescript-types:</strong> respect ECMAScript
line terminators (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12374">#12374</a>)</li>
</ul>
<h3>❤️ Thank You</h3>
<ul>
<li>Kirk Waiblinger <a
href="https://github.com/kirkwaiblinger"><code>@​kirkwaiblinger</code></a></li>
<li>lumir</li>
</ul>
<p>See <a
href="https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.61.0">GitHub
Releases</a> for more information.</p>
<p>You can read about our <a
href="https://typescript-eslint.io/users/versioning">versioning
strategy</a> and <a
href="https://typescript-eslint.io/users/releases">releases</a> on our
website.</p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/scope-manager/CHANGELOG.md">@​typescript-eslint/scope-manager's
changelog</a>.</em></p>
<blockquote>
<h2>8.61.0 (2026-06-08)</h2>
<p>This was a version bump only for scope-manager to align it with other
projects, there were no code changes.</p>
<p>See <a
href="https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.61.0">GitHub
Releases</a> for more information.</p>
<p>You can read about our <a
href="https://typescript-eslint.io/users/versioning">versioning
strategy</a> and <a
href="https://typescript-eslint.io/users/releases">releases</a> on our
website.</p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="16a5b247af"><code>16a5b24</code></a>
chore(release): publish 8.61.0</li>
<li>See full diff in <a
href="https://github.com/typescript-eslint/typescript-eslint/commits/v8.61.0/packages/scope-manager">compare
view</a></li>
</ul>
</details>
<br />

Updates `@typescript-eslint/tsconfig-utils` from 8.60.1 to 8.61.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/typescript-eslint/typescript-eslint/releases">@​typescript-eslint/tsconfig-utils's
releases</a>.</em></p>
<blockquote>
<h2>v8.61.0</h2>
<h2>8.61.0 (2026-06-08)</h2>
<h3>🚀 Features</h3>
<ul>
<li><strong>ast-spec:</strong> change type of
<code>UnaryExpression.prefix</code> to always <code>true</code> (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12372">#12372</a>)</li>
<li><strong>ast-spec:</strong> tighten types of
<code>ArrowFunction</code>, <code>YieldExpression</code>,
<code>TSTypePredicate</code> (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12373">#12373</a>)</li>
</ul>
<h3>🩹 Fixes</h3>
<ul>
<li><strong>rule-schema-to-typescript-types:</strong> respect ECMAScript
line terminators (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12374">#12374</a>)</li>
</ul>
<h3>❤️ Thank You</h3>
<ul>
<li>Kirk Waiblinger <a
href="https://github.com/kirkwaiblinger"><code>@​kirkwaiblinger</code></a></li>
<li>lumir</li>
</ul>
<p>See <a
href="https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.61.0">GitHub
Releases</a> for more information.</p>
<p>You can read about our <a
href="https://typescript-eslint.io/users/versioning">versioning
strategy</a> and <a
href="https://typescript-eslint.io/users/releases">releases</a> on our
website.</p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/tsconfig-utils/CHANGELOG.md">@​typescript-eslint/tsconfig-utils's
changelog</a>.</em></p>
<blockquote>
<h2>8.61.0 (2026-06-08)</h2>
<p>This was a version bump only for tsconfig-utils to align it with
other projects, there were no code changes.</p>
<p>See <a
href="https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.61.0">GitHub
Releases</a> for more information.</p>
<p>You can read about our <a
href="https://typescript-eslint.io/users/versioning">versioning
strategy</a> and <a
href="https://typescript-eslint.io/users/releases">releases</a> on our
website.</p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="16a5b247af"><code>16a5b24</code></a>
chore(release): publish 8.61.0</li>
<li>See full diff in <a
href="https://github.com/typescript-eslint/typescript-eslint/commits/v8.61.0/packages/tsconfig-utils">compare
view</a></li>
</ul>
</details>
<br />

Updates `@typescript-eslint/type-utils` from 8.60.1 to 8.61.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/typescript-eslint/typescript-eslint/releases">@​typescript-eslint/type-utils's
releases</a>.</em></p>
<blockquote>
<h2>v8.61.0</h2>
<h2>8.61.0 (2026-06-08)</h2>
<h3>🚀 Features</h3>
<ul>
<li><strong>ast-spec:</strong> change type of
<code>UnaryExpression.prefix</code> to always <code>true</code> (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12372">#12372</a>)</li>
<li><strong>ast-spec:</strong> tighten types of
<code>ArrowFunction</code>, <code>YieldExpression</code>,
<code>TSTypePredicate</code> (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12373">#12373</a>)</li>
</ul>
<h3>🩹 Fixes</h3>
<ul>
<li><strong>rule-schema-to-typescript-types:</strong> respect ECMAScript
line terminators (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12374">#12374</a>)</li>
</ul>
<h3>❤️ Thank You</h3>
<ul>
<li>Kirk Waiblinger <a
href="https://github.com/kirkwaiblinger"><code>@​kirkwaiblinger</code></a></li>
<li>lumir</li>
</ul>
<p>See <a
href="https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.61.0">GitHub
Releases</a> for more information.</p>
<p>You can read about our <a
href="https://typescript-eslint.io/users/versioning">versioning
strategy</a> and <a
href="https://typescript-eslint.io/users/releases">releases</a> on our
website.</p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/type-utils/CHANGELOG.md">@​typescript-eslint/type-utils's
changelog</a>.</em></p>
<blockquote>
<h2>8.61.0 (2026-06-08)</h2>
<p>This was a version bump only for type-utils to align it with other
projects, there were no code changes.</p>
<p>See <a
href="https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.61.0">GitHub
Releases</a> for more information.</p>
<p>You can read about our <a
href="https://typescript-eslint.io/users/versioning">versioning
strategy</a> and <a
href="https://typescript-eslint.io/users/releases">releases</a> on our
website.</p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="16a5b247af"><code>16a5b24</code></a>
chore(release): publish 8.61.0</li>
<li><a
href="70a2b4bb8f"><code>70a2b4b</code></a>
chore: exclude OS-agnostic tests on Windows CI (<a
href="https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/type-utils/issues/12390">#12390</a>)</li>
<li>See full diff in <a
href="https://github.com/typescript-eslint/typescript-eslint/commits/v8.61.0/packages/type-utils">compare
view</a></li>
</ul>
</details>
<br />

Updates `@typescript-eslint/types` from 8.60.1 to 8.61.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/typescript-eslint/typescript-eslint/releases">@​typescript-eslint/types's
releases</a>.</em></p>
<blockquote>
<h2>v8.61.0</h2>
<h2>8.61.0 (2026-06-08)</h2>
<h3>🚀 Features</h3>
<ul>
<li><strong>ast-spec:</strong> change type of
<code>UnaryExpression.prefix</code> to always <code>true</code> (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12372">#12372</a>)</li>
<li><strong>ast-spec:</strong> tighten types of
<code>ArrowFunction</code>, <code>YieldExpression</code>,
<code>TSTypePredicate</code> (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12373">#12373</a>)</li>
</ul>
<h3>🩹 Fixes</h3>
<ul>
<li><strong>rule-schema-to-typescript-types:</strong> respect ECMAScript
line terminators (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12374">#12374</a>)</li>
</ul>
<h3>❤️ Thank You</h3>
<ul>
<li>Kirk Waiblinger <a
href="https://github.com/kirkwaiblinger"><code>@​kirkwaiblinger</code></a></li>
<li>lumir</li>
</ul>
<p>See <a
href="https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.61.0">GitHub
Releases</a> for more information.</p>
<p>You can read about our <a
href="https://typescript-eslint.io/users/versioning">versioning
strategy</a> and <a
href="https://typescript-eslint.io/users/releases">releases</a> on our
website.</p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/types/CHANGELOG.md">@​typescript-eslint/types's
changelog</a>.</em></p>
<blockquote>
<h2>8.61.0 (2026-06-08)</h2>
<p>This was a version bump only for types to align it with other
projects, there were no code changes.</p>
<p>See <a
href="https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.61.0">GitHub
Releases</a> for more information.</p>
<p>You can read about our <a
href="https://typescript-eslint.io/users/versioning">versioning
strategy</a> and <a
href="https://typescript-eslint.io/users/releases">releases</a> on our
website.</p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="16a5b247af"><code>16a5b24</code></a>
chore(release): publish 8.61.0</li>
<li>See full diff in <a
href="https://github.com/typescript-eslint/typescript-eslint/commits/v8.61.0/packages/types">compare
view</a></li>
</ul>
</details>
<br />

Updates `@typescript-eslint/typescript-estree` from 8.60.1 to 8.61.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/typescript-eslint/typescript-eslint/releases">@​typescript-eslint/typescript-estree's
releases</a>.</em></p>
<blockquote>
<h2>v8.61.0</h2>
<h2>8.61.0 (2026-06-08)</h2>
<h3>🚀 Features</h3>
<ul>
<li><strong>ast-spec:</strong> change type of
<code>UnaryExpression.prefix</code> to always <code>true</code> (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12372">#12372</a>)</li>
<li><strong>ast-spec:</strong> tighten types of
<code>ArrowFunction</code>, <code>YieldExpression</code>,
<code>TSTypePredicate</code> (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12373">#12373</a>)</li>
</ul>
<h3>🩹 Fixes</h3>
<ul>
<li><strong>rule-schema-to-typescript-types:</strong> respect ECMAScript
line terminators (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12374">#12374</a>)</li>
</ul>
<h3>❤️ Thank You</h3>
<ul>
<li>Kirk Waiblinger <a
href="https://github.com/kirkwaiblinger"><code>@​kirkwaiblinger</code></a></li>
<li>lumir</li>
</ul>
<p>See <a
href="https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.61.0">GitHub
Releases</a> for more information.</p>
<p>You can read about our <a
href="https://typescript-eslint.io/users/versioning">versioning
strategy</a> and <a
href="https://typescript-eslint.io/users/releases">releases</a> on our
website.</p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-estree/CHANGELOG.md">@​typescript-eslint/typescript-estree's
changelog</a>.</em></p>
<blockquote>
<h2>8.61.0 (2026-06-08)</h2>
<h3>🚀 Features</h3>
<ul>
<li><strong>ast-spec:</strong> change type of
<code>UnaryExpression.prefix</code> to always <code>true</code> (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12372">#12372</a>)</li>
</ul>
<h3>❤️ Thank You</h3>
<ul>
<li>Kirk Waiblinger <a
href="https://github.com/kirkwaiblinger"><code>@​kirkwaiblinger</code></a></li>
</ul>
<p>See <a
href="https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.61.0">GitHub
Releases</a> for more information.</p>
<p>You can read about our <a
href="https://typescript-eslint.io/users/versioning">versioning
strategy</a> and <a
href="https://typescript-eslint.io/users/releases">releases</a> on our
website.</p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="16a5b247af"><code>16a5b24</code></a>
chore(release): publish 8.61.0</li>
<li><a
href="ef1fd28c68"><code>ef1fd28</code></a>
feat(ast-spec): change type of <code>UnaryExpression.prefix</code> to
always <code>true</code> (<a
href="https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-estree/issues/12">#12</a>...</li>
<li>See full diff in <a
href="https://github.com/typescript-eslint/typescript-eslint/commits/v8.61.0/packages/typescript-estree">compare
view</a></li>
</ul>
</details>
<br />

Updates `@typescript-eslint/utils` from 8.60.1 to 8.61.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/typescript-eslint/typescript-eslint/releases">@​typescript-eslint/utils's
releases</a>.</em></p>
<blockquote>
<h2>v8.61.0</h2>
<h2>8.61.0 (2026-06-08)</h2>
<h3>🚀 Features</h3>
<ul>
<li><strong>ast-spec:</strong> change type of
<code>UnaryExpression.prefix</code> to always <code>true</code> (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12372">#12372</a>)</li>
<li><strong>ast-spec:</strong> tighten types of
<code>ArrowFunction</code>, <code>YieldExpression</code>,
<code>TSTypePredicate</code> (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12373">#12373</a>)</li>
</ul>
<h3>🩹 Fixes</h3>
<ul>
<li><strong>rule-schema-to-typescript-types:</strong> respect ECMAScript
line terminators (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12374">#12374</a>)</li>
</ul>
<h3>❤️ Thank You</h3>
<ul>
<li>Kirk Waiblinger <a
href="https://github.com/kirkwaiblinger"><code>@​kirkwaiblinger</code></a></li>
<li>lumir</li>
</ul>
<p>See <a
href="https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.61.0">GitHub
Releases</a> for more information.</p>
<p>You can read about our <a
href="https://typescript-eslint.io/users/versioning">versioning
strategy</a> and <a
href="https://typescript-eslint.io/users/releases">releases</a> on our
website.</p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/utils/CHANGELOG.md">@​typescript-eslint/utils's
changelog</a>.</em></p>
<blockquote>
<h2>8.61.0 (2026-06-08)</h2>
<p>This was a version bump only for utils to align it with other
projects, there were no code changes.</p>
<p>See <a
href="https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.61.0">GitHub
Releases</a> for more information.</p>
<p>You can read about our <a
href="https://typescript-eslint.io/users/versioning">versioning
strategy</a> and <a
href="https://typescript-eslint.io/users/releases">releases</a> on our
website.</p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="16a5b247af"><code>16a5b24</code></a>
chore(release): publish 8.61.0</li>
<li>See full diff in <a
href="https://github.com/typescript-eslint/typescript-eslint/commits/v8.61.0/packages/utils">compare
view</a></li>
</ul>
</details>
<br />

Updates `@typescript-eslint/visitor-keys` from 8.60.1 to 8.61.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/typescript-eslint/typescript-eslint/releases">@​typescript-eslint/visitor-keys's
releases</a>.</em></p>
<blockquote>
<h2>v8.61.0</h2>
<h2>8.61.0 (2026-06-08)</h2>
<h3>🚀 Features</h3>
<ul>
<li><strong>ast-spec:</strong> change type of
<code>UnaryExpression.prefix</code> to always <code>true</code> (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12372">#12372</a>)</li>
<li><strong>ast-spec:</strong> tighten types of
<code>ArrowFunction</code>, <code>YieldExpression</code>,
<code>TSTypePredicate</code> (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12373">#12373</a>)</li>
</ul>
<h3>🩹 Fixes</h3>
<ul>
<li><strong>rule-schema-to-typescript-types:</strong> respect ECMAScript
line terminators (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12374">#12374</a>)</li>
</ul>
<h3>❤️ Thank You</h3>
<ul>
<li>Kirk Waiblinger <a
href="https://github.com/kirkwaiblinger"><code>@​kirkwaiblinger</code></a></li>
<li>lumir</li>
</ul>
<p>See <a
href="https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.61.0">GitHub
Releases</a> for more information.</p>
<p>You can read about our <a
href="https://typescript-eslint.io/users/versioning">versioning
strategy</a> and <a
href="https://typescript-eslint.io/users/releases">releases</a> on our
website.</p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/visitor-keys/CHANGELOG.md">@​typescript-eslint/visitor-keys's
changelog</a>.</em></p>
<blockquote>
<h2>8.61.0 (2026-06-08)</h2>
<p>This was a version bump only for visitor-keys to align it with other
projects, there were no code changes.</p>
<p>See <a
href="https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.61.0">GitHub
Releases</a> for more information.</p>
<p>You can read about our <a
href="https://typescript-eslint.io/users/versioning">versioning
strategy</a> and <a
href="https://typescript-eslint.io/users/releases">releases</a> on our
website.</p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="16a5b247af"><code>16a5b24</code></a>
chore(release): publish 8.61.0</li>
<li>See full diff in <a
href="https://github.com/typescript-eslint/typescript-eslint/commits/v8.61.0/packages/visitor-keys">compare
view</a></li>
</ul>
</details>
<br />

Updates `hono` from 4.12.24 to 4.12.25
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/honojs/hono/releases">hono's
releases</a>.</em></p>
<blockquote>
<h2>v4.12.25</h2>
<h2>Security fixes</h2>
<p>This release includes fixes for the following security issues:</p>
<h3>CORS Middleware reflects any Origin with credentials when
<code>origin</code> defaults to the wildcard</h3>
<p>Affects: <code>hono/cors</code>. Fixes the wildcard origin reflecting
the request <code>Origin</code> and sending
<code>Access-Control-Allow-Credentials: true</code> when
<code>credentials: true</code> is set without an explicit
<code>origin</code>, where any site a logged-in user visited could make
credentialed cross-origin requests and read responses from
cookie-authenticated endpoints. GHSA-88fw-hqm2-52qc</p>
<h3>Body Limit Middleware can be bypassed on AWS Lambda by understating
<code>Content-Length</code></h3>
<p>Affects: <code>hono/body-limit</code> on AWS Lambda
(<code>hono/aws-lambda</code>, <code>hono/lambda-edge</code>). Fixes the
request being built with the client-declared <code>Content-Length</code>
while the body is delivered fully buffered, where a client could declare
a small <code>Content-Length</code> with a much larger body and slip
past the configured size limit. GHSA-rv63-4mwf-qqc2</p>
<h3>Path traversal in <code>serve-static</code> on Windows via encoded
backslash (<code>%5C</code>)</h3>
<p>Affects: <code>serveStatic</code> on Windows (Node, Bun, Deno
adapters). Fixes the path guard allowing a lone backslash, where an
encoded backslash (<code>%5C</code>) decoded to <code>\</code> was
treated as a separator by the Windows path resolver, letting a single
URL segment escape into a middleware-guarded subtree.
GHSA-wwfh-h76j-fc44</p>
<h3>AWS Lambda adapter merges multiple <code>Set-Cookie</code> headers
into one value, dropping cookies on ALB single-header and Lattice</h3>
<p>Affects: <code>hono/aws-lambda</code>. Fixes multiple
<code>Set-Cookie</code> response headers being joined into one
comma-separated value for ALB single-header responses and VPC Lattice
v2, where the value could not be split back into individual cookies and
clients silently dropped or misparsed them. GHSA-j6c9-x7qj-28xf</p>
<h3>Lambda@Edge adapter keeps only the last value of a repeated request
header, dropping the rest</h3>
<p>Affects: <code>hono/lambda-edge</code>. Fixes repeated request
headers being written with overwrite instead of append, where only the
last value of a header such as <code>X-Forwarded-For</code> reached the
application and the remaining values were silently dropped.
GHSA-wgpf-jwqj-8h8p</p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="fce483e114"><code>fce483e</code></a>
4.12.25</li>
<li><a
href="751ba41ba2"><code>751ba41</code></a>
Merge commit from fork</li>
<li><a
href="f0b094db84"><code>f0b094d</code></a>
Merge commit from fork</li>
<li><a
href="fa5f9bfcc2"><code>fa5f9bf</code></a>
Merge commit from fork</li>
<li><a
href="3892a6c2b5"><code>3892a6c</code></a>
Merge commit from fork</li>
<li><a
href="74c2cf8ef4"><code>74c2cf8</code></a>
test(aws-lambda): update integration tests (<a
href="https://redirect.github.com/honojs/hono/issues/5012">#5012</a>)</li>
<li><a
href="7ae7cbae5d"><code>7ae7cba</code></a>
Merge commit from fork</li>
<li><a
href="1b13848154"><code>1b13848</code></a>
chore(ci): bump codecov-action to v7.0.0 (<a
href="https://redirect.github.com/honojs/hono/issues/5011">#5011</a>)</li>
<li>See full diff in <a
href="https://github.com/honojs/hono/compare/v4.12.24...v4.12.25">compare
view</a></li>
</ul>
</details>
<br />

Updates `semver` from 7.8.2 to 7.8.3
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/npm/node-semver/releases">semver's
releases</a>.</em></p>
<blockquote>
<h2>v7.8.3</h2>
<h2><a
href="https://github.com/npm/node-semver/compare/v7.8.2...v7.8.3">7.8.3</a>
(2026-06-08)</h2>
<h3>Bug Fixes</h3>
<ul>
<li><a
href="046da7f527"><code>046da7f</code></a>
<a href="https://redirect.github.com/npm/node-semver/pull/872">#872</a>
align caret includePrerelease lower bounds (<a
href="https://redirect.github.com/npm/node-semver/issues/872">#872</a>)
(<a
href="https://github.com/wayyoungboy"><code>@​wayyoungboy</code></a>)</li>
</ul>
<h3>Chores</h3>
<ul>
<li><a
href="3485ddadb2"><code>3485dda</code></a>
<a href="https://redirect.github.com/npm/node-semver/pull/866">#866</a>
bump <code>@​npmcli/eslint-config</code> from 6.0.1 to 7.0.0 (<a
href="https://redirect.github.com/npm/node-semver/issues/866">#866</a>)
(<a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot])</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/npm/node-semver/blob/main/CHANGELOG.md">semver's
changelog</a>.</em></p>
<blockquote>
<h2><a
href="https://github.com/npm/node-semver/compare/v7.8.2...v7.8.3">7.8.3</a>
(2026-06-08)</h2>
<h3>Bug Fixes</h3>
<ul>
<li><a
href="046da7f527"><code>046da7f</code></a>
<a href="https://redirect.github.com/npm/node-semver/pull/872">#872</a>
align caret includePrerelease lower bounds (<a
href="https://redirect.github.com/npm/node-semver/issues/872">#872</a>)
(<a
href="https://github.com/wayyoungboy"><code>@​wayyoungboy</code></a>)</li>
</ul>
<h3>Chores</h3>
<ul>
<li><a
href="3485ddadb2"><code>3485dda</code></a>
<a href="https://redirect.github.com/npm/node-semver/pull/866">#866</a>
bump <code>@​npmcli/eslint-config</code> from 6.0.1 to 7.0.0 (<a
href="https://redirect.github.com/npm/node-semver/issues/866">#866</a>)
(<a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot])</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="6b77aa84a6"><code>6b77aa8</code></a>
chore: release 7.8.3 (<a
href="https://redirect.github.com/npm/node-semver/issues/873">#873</a>)</li>
<li><a
href="3485ddadb2"><code>3485dda</code></a>
chore: bump <code>@​npmcli/eslint-config</code> from 6.0.1 to 7.0.0 (<a
href="https://redirect.github.com/npm/node-semver/issues/866">#866</a>)</li>
<li><a
href="046da7f527"><code>046da7f</code></a>
fix: align caret includePrerelease lower bounds (<a
href="https://redirect.github.com/npm/node-semver/issues/872">#872</a>)</li>
<li>See full diff in <a
href="https://github.com/npm/node-semver/compare/v7.8.2...v7.8.3">compare
view</a></li>
</ul>
</details>
<br />

Updates `side-channel` from 1.1.0 to 1.1.1
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/ljharb/side-channel/blob/main/CHANGELOG.md">side-channel's
changelog</a>.</em></p>
<blockquote>
<h2><a
href="https://github.com/ljharb/side-channel/compare/v1.1.0...v1.1.1">v1.1.1</a>
- 2026-06-08</h2>
<h3>Commits</h3>
<ul>
<li>[Fix] <code>assert</code>: do not observably access object keys when
throwing <a
href="fc17361513"><code>fc17361</code></a></li>
<li>[actions] update workflows <a
href="35b18c0bce"><code>35b18c0</code></a></li>
<li>[Dev Deps] update <code>@arethetypeswrong/cli</code>,
<code>@ljharb/eslint-config</code>, <code>@ljharb/tsconfig</code>,
<code>@types/tape</code>, <code>auto-changelog</code>,
<code>eslint</code>, <code>npmignore</code> <a
href="b456a01396"><code>b456a01</code></a></li>
<li>[Deps] update <code>object-inspect</code>,
<code>side-channel-list</code> <a
href="accf1a1a27"><code>accf1a1</code></a></li>
<li>[readme] replace runkit CI badge with shields.io check-runs badge <a
href="7e0c956411"><code>7e0c956</code></a></li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="3d260956bc"><code>3d26095</code></a>
v1.1.1</li>
<li><a
href="fc17361513"><code>fc17361</code></a>
[Fix] <code>assert</code>: do not observably access object keys when
throwing</li>
<li><a
href="35b18c0bce"><code>35b18c0</code></a>
[actions] update workflows</li>
<li><a
href="accf1a1a27"><code>accf1a1</code></a>
[Deps] update <code>object-inspect</code>,
<code>side-channel-list</code></li>
<li><a
href="b456a01396"><code>b456a01</code></a>
[Dev Deps] update <code>@arethetypeswrong/cli</code>,
<code>@ljharb/eslint-config</code>, `@ljharb/...</li>
<li><a
href="7e0c956411"><code>7e0c956</code></a>
[readme] replace runkit CI badge with shields.io check-runs badge</li>
<li>See full diff in <a
href="https://github.com/ljharb/side-channel/compare/v1.1.0...v1.1.1">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>
2026-06-09 17:09:28 +02:00
acp-release-bot[bot]
e692462249 chore(main): release 0.43.0 (#752)
🤖 I have created a release *beep* *boop*
---


##
[0.43.0](https://github.com/agentclientprotocol/claude-agent-acp/compare/v0.42.0...v0.43.0)
(2026-06-09)


### Features

* Add experimental elicitation support
([#756](https://github.com/agentclientprotocol/claude-agent-acp/issues/756))
([12bd276](12bd2762d9))
* **deps:** update to @anthropic-ai/claude-agent-sdk 0.3.169
([#754](https://github.com/agentclientprotocol/claude-agent-acp/issues/754))
([bd0ae4d](bd0ae4dde1))
* Update ACP SDK to 0.25.0
([#753](https://github.com/agentclientprotocol/claude-agent-acp/issues/753))
([0dbccf5](0dbccf588f))


### Bug Fixes

* Forward unstreamed assistant text blocks
([#757](https://github.com/agentclientprotocol/claude-agent-acp/issues/757))
([7ff6b7f](7ff6b7fd6b))
* Validate cwd before creating sessions
([#751](https://github.com/agentclientprotocol/claude-agent-acp/issues/751))
([9854b0c](9854b0c679)),
closes
[#749](https://github.com/agentclientprotocol/claude-agent-acp/issues/749)

---
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>
2026-06-09 08:58:23 +00:00
dependabot[bot]
bd0ae4dde1 feat(deps): update to @anthropic-ai/claude-agent-sdk 0.3.169 (#754)
Bumps the minor group with 12 updates:

| Package | From | To |
| --- | --- | --- |
|
[@anthropic-ai/claude-agent-sdk](https://github.com/anthropics/claude-agent-sdk-typescript)
| `0.3.165` | `0.3.168` |
|
[@anthropic-ai/sdk](https://github.com/anthropics/anthropic-sdk-typescript)
| `0.100.1` | `0.102.0` |
|
[@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node)
| `25.9.1` | `25.9.2` |
| @anthropic-ai/claude-agent-sdk-darwin-arm64 | `0.3.165` | `0.3.168` |
| @anthropic-ai/claude-agent-sdk-darwin-x64 | `0.3.165` | `0.3.168` |
| @anthropic-ai/claude-agent-sdk-linux-arm64 | `0.3.165` | `0.3.168` |
| @anthropic-ai/claude-agent-sdk-linux-arm64-musl | `0.3.165` |
`0.3.168` |
| @anthropic-ai/claude-agent-sdk-linux-x64 | `0.3.165` | `0.3.168` |
| @anthropic-ai/claude-agent-sdk-linux-x64-musl | `0.3.165` | `0.3.168`
|
| @anthropic-ai/claude-agent-sdk-win32-arm64 | `0.3.165` | `0.3.168` |
| @anthropic-ai/claude-agent-sdk-win32-x64 | `0.3.165` | `0.3.168` |
| [hono](https://github.com/honojs/hono) | `4.12.23` | `4.12.24` |

Updates `@anthropic-ai/claude-agent-sdk` from 0.3.165 to 0.3.168
<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.168</h2>
<h2>What's changed</h2>
<ul>
<li>Updated to parity with Claude Code v2.1.168</li>
</ul>
<h2>Update</h2>
<pre lang="sh"><code>npm install @anthropic-ai/claude-agent-sdk@0.3.168
# or
yarn add @anthropic-ai/claude-agent-sdk@0.3.168
# or
pnpm add @anthropic-ai/claude-agent-sdk@0.3.168
# or
bun add @anthropic-ai/claude-agent-sdk@0.3.168
</code></pre>
<h2>v0.3.167</h2>
<h2>What's changed</h2>
<ul>
<li>Updated to parity with Claude Code v2.1.167</li>
</ul>
<h2>Update</h2>
<pre lang="sh"><code>npm install @anthropic-ai/claude-agent-sdk@0.3.167
# or
yarn add @anthropic-ai/claude-agent-sdk@0.3.167
# or
pnpm add @anthropic-ai/claude-agent-sdk@0.3.167
# or
bun add @anthropic-ai/claude-agent-sdk@0.3.167
</code></pre>
<h2>v0.3.166</h2>
<h2>What's changed</h2>
<ul>
<li>Fixed MCP resource tools not being injected for servers added at
runtime via the <code>mcp_set_servers</code> control request</li>
</ul>
<h2>Update</h2>
<pre lang="sh"><code>npm install @anthropic-ai/claude-agent-sdk@0.3.166
# or
yarn add @anthropic-ai/claude-agent-sdk@0.3.166
# or
pnpm add @anthropic-ai/claude-agent-sdk@0.3.166
# or
bun add @anthropic-ai/claude-agent-sdk@0.3.166
</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.168</h2>
<ul>
<li>Updated to parity with Claude Code v2.1.168</li>
</ul>
<h2>0.3.167</h2>
<ul>
<li>Updated to parity with Claude Code v2.1.167</li>
</ul>
<h2>0.3.166</h2>
<ul>
<li>Fixed MCP resource tools not being injected for servers added at
runtime via the <code>mcp_set_servers</code> control request</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="2c2eeb8ce4"><code>2c2eeb8</code></a>
chore: Update CHANGELOG.md</li>
<li><a
href="3e35050adc"><code>3e35050</code></a>
chore: Update CHANGELOG.md</li>
<li><a
href="bc853fcd68"><code>bc853fc</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.165...v0.3.168">compare
view</a></li>
</ul>
</details>
<br />

Updates `@anthropic-ai/sdk` from 0.100.1 to 0.102.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.102.0</h2>
<h2>0.102.0 (2026-06-06)</h2>
<p>Full Changelog: <a
href="https://github.com/anthropics/anthropic-sdk-typescript/compare/sdk-v0.101.0...sdk-v0.102.0">sdk-v0.101.0...sdk-v0.102.0</a></p>
<h3>Features</h3>
<ul>
<li><strong>api:</strong> small updates to Managed Agents types (<a
href="8ba4f92df3">8ba4f92</a>)</li>
</ul>
<h3>Bug Fixes</h3>
<ul>
<li><strong>client:</strong> run middleware before request signing (<a
href="https://redirect.github.com/anthropics/anthropic-sdk-typescript/issues/45">#45</a>)
(<a
href="95f1a4a406">95f1a4a</a>)</li>
</ul>
<h2>sdk: v0.101.0</h2>
<h2>0.101.0 (2026-06-05)</h2>
<p>Full Changelog: <a
href="https://github.com/anthropics/anthropic-sdk-typescript/compare/sdk-v0.100.1...sdk-v0.101.0">sdk-v0.100.1...sdk-v0.101.0</a></p>
<h3>Features</h3>
<ul>
<li><strong>client:</strong> add support for middleware (<a
href="9b01120796">9b01120</a>)</li>
</ul>
<h3>Bug Fixes</h3>
<ul>
<li>apply request timeout to inner fetch only, not middleware chain (<a
href="https://redirect.github.com/anthropics/anthropic-sdk-typescript/issues/40">#40</a>)
(<a
href="25c13f6183">25c13f6</a>)</li>
<li><strong>streaming:</strong> carry stop_details through beta
message_delta accumulation (<a
href="ed3fec7ace">ed3fec7</a>)</li>
<li><strong>streaming:</strong> correctly parse json numbers with
scientific notation (<a
href="https://redirect.github.com/anthropics/anthropic-sdk-typescript/issues/9">#9</a>)
(<a
href="7d5e6422dc">7d5e642</a>)</li>
</ul>
<h3>Chores</h3>
<ul>
<li><strong>internal:</strong> fix artifact url (<a
href="925ec276fa">925ec27</a>)</li>
<li><strong>internal:</strong> fix branch names (<a
href="fa3cf2c491">fa3cf2c</a>)</li>
<li><strong>internal:</strong> update private repo name (<a
href="a8ac213b8c">a8ac213</a>)</li>
</ul>
<h3>Documentation</h3>
<ul>
<li>point security reports to Anthropic's HackerOne program (<a
href="https://redirect.github.com/anthropics/anthropic-sdk-typescript/issues/16">#16</a>)
(<a
href="5c7912c36e">5c7912c</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/anthropics/anthropic-sdk-typescript/blob/main/CHANGELOG.md">@​anthropic-ai/sdk's
changelog</a>.</em></p>
<blockquote>
<h2>0.102.0 (2026-06-06)</h2>
<p>Full Changelog: <a
href="https://github.com/anthropics/anthropic-sdk-typescript/compare/sdk-v0.101.0...sdk-v0.102.0">sdk-v0.101.0...sdk-v0.102.0</a></p>
<h3>Features</h3>
<ul>
<li><strong>api:</strong> small updates to Managed Agents types (<a
href="8ba4f92df3">8ba4f92</a>)</li>
</ul>
<h3>Bug Fixes</h3>
<ul>
<li><strong>client:</strong> run middleware before request signing (<a
href="https://redirect.github.com/anthropics/anthropic-sdk-typescript/issues/45">#45</a>)
(<a
href="95f1a4a406">95f1a4a</a>)</li>
</ul>
<h2>0.101.0 (2026-06-05)</h2>
<p>Full Changelog: <a
href="https://github.com/anthropics/anthropic-sdk-typescript/compare/sdk-v0.100.1...sdk-v0.101.0">sdk-v0.100.1...sdk-v0.101.0</a></p>
<h3>Features</h3>
<ul>
<li><strong>client:</strong> add support for middleware (<a
href="9b01120796">9b01120</a>)</li>
</ul>
<h3>Bug Fixes</h3>
<ul>
<li>apply request timeout to inner fetch only, not middleware chain (<a
href="https://redirect.github.com/anthropics/anthropic-sdk-typescript/issues/40">#40</a>)
(<a
href="25c13f6183">25c13f6</a>)</li>
<li><strong>streaming:</strong> carry stop_details through beta
message_delta accumulation (<a
href="ed3fec7ace">ed3fec7</a>)</li>
<li><strong>streaming:</strong> correctly parse json numbers with
scientific notation (<a
href="https://redirect.github.com/anthropics/anthropic-sdk-typescript/issues/9">#9</a>)
(<a
href="7d5e6422dc">7d5e642</a>)</li>
</ul>
<h3>Chores</h3>
<ul>
<li><strong>internal:</strong> fix artifact url (<a
href="925ec276fa">925ec27</a>)</li>
<li><strong>internal:</strong> fix branch names (<a
href="fa3cf2c491">fa3cf2c</a>)</li>
<li><strong>internal:</strong> update private repo name (<a
href="a8ac213b8c">a8ac213</a>)</li>
</ul>
<h3>Documentation</h3>
<ul>
<li>point security reports to Anthropic's HackerOne program (<a
href="https://redirect.github.com/anthropics/anthropic-sdk-typescript/issues/16">#16</a>)
(<a
href="5c7912c36e">5c7912c</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="f7dfb972f6"><code>f7dfb97</code></a>
chore: release main</li>
<li><a
href="a3f3c97258"><code>a3f3c97</code></a>
feat(api): small updates to Managed Agents types</li>
<li><a
href="a5c98d117a"><code>a5c98d1</code></a>
fix(client): run middleware before request signing (<a
href="https://redirect.github.com/anthropics/anthropic-sdk-typescript/issues/45">#45</a>)</li>
<li><a
href="185ec061cf"><code>185ec06</code></a>
chore: release main</li>
<li><a
href="fab891069a"><code>fab8910</code></a>
codegen metadata</li>
<li><a
href="7ff4036756"><code>7ff4036</code></a>
fix: apply request timeout to inner fetch only, not middleware chain (<a
href="https://redirect.github.com/anthropics/anthropic-sdk-typescript/issues/40">#40</a>)</li>
<li><a
href="257bc1f56b"><code>257bc1f</code></a>
feat(client): add support for middleware</li>
<li><a
href="5b3ace5ec5"><code>5b3ace5</code></a>
chore(internal): fix artifact url</li>
<li><a
href="70966be8fc"><code>70966be</code></a>
fix(streaming): correctly parse json numbers with scientific notation
(<a
href="https://redirect.github.com/anthropics/anthropic-sdk-typescript/issues/9">#9</a>)</li>
<li><a
href="7e22f20552"><code>7e22f20</code></a>
docs: point security reports to Anthropic's HackerOne program (<a
href="https://redirect.github.com/anthropics/anthropic-sdk-typescript/issues/16">#16</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/anthropics/anthropic-sdk-typescript/compare/sdk-v0.100.1...sdk-v0.102.0">compare
view</a></li>
</ul>
</details>
<br />

Updates `@types/node` from 25.9.1 to 25.9.2
<details>
<summary>Commits</summary>
<ul>
<li>See full diff in <a
href="https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node">compare
view</a></li>
</ul>
</details>
<br />

Updates `@anthropic-ai/claude-agent-sdk-darwin-arm64` from 0.3.165 to
0.3.168

Updates `@anthropic-ai/claude-agent-sdk-darwin-x64` from 0.3.165 to
0.3.168

Updates `@anthropic-ai/claude-agent-sdk-linux-arm64` from 0.3.165 to
0.3.168

Updates `@anthropic-ai/claude-agent-sdk-linux-arm64-musl` from 0.3.165
to 0.3.168

Updates `@anthropic-ai/claude-agent-sdk-linux-x64` from 0.3.165 to
0.3.168

Updates `@anthropic-ai/claude-agent-sdk-linux-x64-musl` from 0.3.165 to
0.3.168

Updates `@anthropic-ai/claude-agent-sdk-win32-arm64` from 0.3.165 to
0.3.168

Updates `@anthropic-ai/claude-agent-sdk-win32-x64` from 0.3.165 to
0.3.168

Updates `hono` from 4.12.23 to 4.12.24
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/honojs/hono/releases">hono's
releases</a>.</em></p>
<blockquote>
<h2>v4.12.24</h2>
<h2>What's Changed</h2>
<ul>
<li>docs(contribution): simplifyAI Usage Policy by <a
href="https://github.com/yusukebe"><code>@​yusukebe</code></a> in <a
href="https://redirect.github.com/honojs/hono/pull/4972">honojs/hono#4972</a></li>
<li>chore: remove <code>@​types/glob</code> by <a
href="https://github.com/rtritto"><code>@​rtritto</code></a> in <a
href="https://redirect.github.com/honojs/hono/pull/4978">honojs/hono#4978</a></li>
<li>fix(bearer-auth): mention verifyToken in missing-options error
message by <a
href="https://github.com/tan7vir"><code>@​tan7vir</code></a> in <a
href="https://redirect.github.com/honojs/hono/pull/4987">honojs/hono#4987</a></li>
<li>refactor(language): Test/improve tests on languages middleware by <a
href="https://github.com/iNeoO"><code>@​iNeoO</code></a> in <a
href="https://redirect.github.com/honojs/hono/pull/4980">honojs/hono#4980</a></li>
<li>fix(utils/ipaddr): expand &quot;::&quot; to eight zero groups by <a
href="https://github.com/youcefzemmar"><code>@​youcefzemmar</code></a>
in <a
href="https://redirect.github.com/honojs/hono/pull/4973">honojs/hono#4973</a></li>
<li>fix: clean up config files trailing comma, stale excludes,
typesVersions gaps, jsr paths by <a
href="https://github.com/Mohammad-Faiz-Cloud-Engineer"><code>@​Mohammad-Faiz-Cloud-Engineer</code></a>
in <a
href="https://redirect.github.com/honojs/hono/pull/4982">honojs/hono#4982</a></li>
<li>refactor(timing): Test/add test for middleware timing by <a
href="https://github.com/iNeoO"><code>@​iNeoO</code></a> in <a
href="https://redirect.github.com/honojs/hono/pull/4991">honojs/hono#4991</a></li>
<li>fix(utils/ipaddr): render the unspecified address binary as
&quot;::&quot; by <a
href="https://github.com/sarathfrancis90"><code>@​sarathfrancis90</code></a>
in <a
href="https://redirect.github.com/honojs/hono/pull/4998">honojs/hono#4998</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/honojs/hono/compare/v4.12.23...v4.12.24">https://github.com/honojs/hono/compare/v4.12.23...v4.12.24</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="5fdde5ab5a"><code>5fdde5a</code></a>
4.12.24</li>
<li><a
href="c78932d745"><code>c78932d</code></a>
fix(utils/ipaddr): render the unspecified address binary as
&quot;::&quot; (<a
href="https://redirect.github.com/honojs/hono/issues/4998">#4998</a>)</li>
<li><a
href="5ef800ee45"><code>5ef800e</code></a>
refactor(timing): Test/add test for middleware timing (<a
href="https://redirect.github.com/honojs/hono/issues/4991">#4991</a>)</li>
<li><a
href="d743bb7dc0"><code>d743bb7</code></a>
fix: clean up config files trailing comma, stale excludes, typesVersions
gaps...</li>
<li><a
href="d22ff9c6fe"><code>d22ff9c</code></a>
fix(utils/ipaddr): expand &quot;::&quot; to eight zero groups (<a
href="https://redirect.github.com/honojs/hono/issues/4973">#4973</a>)</li>
<li><a
href="8e2cccc2fb"><code>8e2cccc</code></a>
refactor(language): Test/improve tests on languages middleware (<a
href="https://redirect.github.com/honojs/hono/issues/4980">#4980</a>)</li>
<li><a
href="413d3cbd0e"><code>413d3cb</code></a>
fix(bearer-auth): mention verifyToken in missing-options error message
(<a
href="https://redirect.github.com/honojs/hono/issues/4987">#4987</a>)</li>
<li><a
href="2cbeadda34"><code>2cbeadd</code></a>
chore: remove <code>@​types/glob</code> (<a
href="https://redirect.github.com/honojs/hono/issues/4978">#4978</a>)</li>
<li><a
href="9051d3e80a"><code>9051d3e</code></a>
docs(contribution): simplifyAI Usage Policy (<a
href="https://redirect.github.com/honojs/hono/issues/4972">#4972</a>)</li>
<li>See full diff in <a
href="https://github.com/honojs/hono/compare/v4.12.23...v4.12.24">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>
2026-06-09 08:56:57 +00:00
Ben Brandt
7ff6b7fd6b fix: Forward unstreamed assistant text blocks (#757) 2026-06-09 08:48:48 +00:00
Ben Brandt
12bd2762d9 feat: Add experimental elicitation support (#756)
This is still unstable on ACP, but experimenting with the latest api for
testing. Also allows for a representation of the AskUserQuestion tool
2026-06-09 09:59:06 +02:00
Ben Brandt
0dbccf588f feat: Update ACP SDK to 0.25.0 (#753) 2026-06-05 13:21:20 +00:00
Ben Brandt
9854b0c679 fix: Validate cwd before creating sessions (#751)
Closes #749
2026-06-05 11:04:47 +00:00
acp-release-bot[bot]
d877ee7133 chore(main): release 0.42.0 (#745)
🤖 I have created a release *beep* *boop*
---


##
[0.42.0](https://github.com/agentclientprotocol/claude-agent-acp/compare/v0.41.0...v0.42.0)
(2026-06-05)


### Features

* **deps-dev:** bump obug from 2.1.1 to 2.1.2 in the minor group
([#743](https://github.com/agentclientprotocol/claude-agent-acp/issues/743))
([7ffb78c](7ffb78c572))
* Send message ids for assistant and user messages
([#750](https://github.com/agentclientprotocol/claude-agent-acp/issues/750))
([18516a3](18516a3088))
* Update Claude Agent SDK to 0.3.165
([#746](https://github.com/agentclientprotocol/claude-agent-acp/issues/746))
([23cbe6f](23cbe6f58f))


### Bug Fixes

* Prevent cross-family model matching in resolveModelPreference
([#731](https://github.com/agentclientprotocol/claude-agent-acp/issues/731))
([f4704c1](f4704c168f))
* Prune tool cache per session after results
([#748](https://github.com/agentclientprotocol/claude-agent-acp/issues/748))
([ec14211](ec14211056))
* Update to better utilize existing SDK data
([#747](https://github.com/agentclientprotocol/claude-agent-acp/issues/747))
([398f763](398f763f71))

---
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>
2026-06-05 10:54:26 +00:00
Ben Brandt
18516a3088 feat: Send message ids for assistant and user messages (#750) 2026-06-05 10:53:21 +00:00
Ben Brandt
ec14211056 fix: Prune tool cache per session after results (#748) 2026-06-05 09:11:34 +00:00
Ben Brandt
398f763f71 fix: Update to better utilize existing SDK data (#747)
- **feat: Better surface permission, progress, and rate updates**
- **Use SDK context usage and thinking config**
- **Keep learned context size after compaction**
2026-06-05 08:59:06 +00:00
Ben Brandt
23cbe6f58f feat: Update Claude Agent SDK to 0.3.165 (#746) 2026-06-05 07:58:26 +00:00
dependabot[bot]
7ffb78c572 feat(deps-dev): bump obug from 2.1.1 to 2.1.2 in the minor group (#743)
Bumps the minor group with 1 update:
[obug](https://github.com/sxzz/obug).

Updates `obug` from 2.1.1 to 2.1.2
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/sxzz/obug/releases">obug's
releases</a>.</em></p>
<blockquote>
<h2>v2.1.2</h2>
<p><em>No significant changes</em></p>
<h5>    <a
href="https://github.com/sxzz/obug/compare/v2.1.1...v2.1.2">View changes
on GitHub</a></h5>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="1f9500da5b"><code>1f9500d</code></a>
chore: release v2.1.2</li>
<li><a
href="6dcc07cd49"><code>6dcc07c</code></a>
chore: upgrade deps</li>
<li><a
href="9bcc620b15"><code>9bcc620</code></a>
ci: staging publish</li>
<li><a
href="c9688880be"><code>c968888</code></a>
chore: migrate tsdown config</li>
<li><a
href="2d652378be"><code>2d65237</code></a>
chore: add &quot;engines&quot; field to <code>package.json</code> (<a
href="https://redirect.github.com/sxzz/obug/issues/3">#3</a>)</li>
<li><a
href="a1191fd954"><code>a1191fd</code></a>
test: add file extensions to imports</li>
<li><a
href="b8239e5b9e"><code>b8239e5</code></a>
docs: add 'How to use' section to README [ci skip] (<a
href="https://redirect.github.com/sxzz/obug/issues/2">#2</a>)</li>
<li><a
href="55fe075260"><code>55fe075</code></a>
test: ignore dynamic import warning</li>
<li><a
href="a71beb8092"><code>a71beb8</code></a>
chore: update workflow references to main branch</li>
<li><a
href="e39bee9fcf"><code>e39bee9</code></a>
chore: upgrade deps</li>
<li>Additional commits viewable in <a
href="https://github.com/sxzz/obug/compare/v2.1.1...v2.1.2">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=obug&package-manager=npm_and_yarn&previous-version=2.1.1&new-version=2.1.2)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

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>
2026-06-05 09:49:53 +02:00
Luca Dibattista
f4704c168f fix: Prevent cross-family model matching in resolveModelPreference (#731)
## Summary

Partially addresses #639. Builds on #702 which added version-aware
matching.

When the SDK's `opus` alias resolves to a newer version than what's in
`availableModels` (e.g. the SDK was bumped to Opus 4.8 but
`availableModels` still contains `claude-opus-4-6[1m]`), the version
check from #702 correctly rejects the `opus` entry (4.8 ≠ 4.6). However,
the tokenized matcher then falls through to `sonnet[1m]` because the
`1m` context hint token alone scores 3 points — enough to win. This
causes `claude-opus-4-6[1m]` to display as "Sonnet (1M context)".

Fix: `scoreModelMatch` now returns 0 when the only matching token is the
context hint. This prevents cross-family matches without hardcoding
model family names.

Note: Claude initially recommended hardcoding model families to be 100%
sure we avoid cross-family matching. While it would be a stronger
signal, I didn't find references to model families in the codebase
(except for opusplan --> opus) so I'm assuming the family list is
transparent to claude-agent-acp.

## Test plan

- [x] Added test: `does not inherit display info across mismatched model
families` — verifies `claude-opus-4-6[1m]` does not resolve to `Sonnet
(1M context)`
- [x] Existing tests pass (20/20 in `acp-agent-settings.test.ts`)
- [x] New test confirmed to fail on unmodified `main` and pass with the
fix

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-06-05 07:46:22 +00:00
acp-release-bot[bot]
49d73b2ad3 chore(main): release 0.41.0 (#741)
🤖 I have created a release *beep* *boop*
---


##
[0.41.0](https://github.com/agentclientprotocol/claude-agent-acp/compare/v0.40.0...v0.41.0)
(2026-06-04)


### Features

* **deps:** upgrade to @anthropic-ai/claude-agent-sdk@0.3.162
([#740](https://github.com/agentclientprotocol/claude-agent-acp/issues/740))
([add7e31](add7e31704))


### Bug Fixes

* Force cancellation when SDK query hangs
([#742](https://github.com/agentclientprotocol/claude-agent-acp/issues/742))
([cffea4b](cffea4be28)),
closes
[#680](https://github.com/agentclientprotocol/claude-agent-acp/issues/680)

---
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>
2026-06-04 14:16:42 +02:00
Ben Brandt
cffea4be28 fix: Force cancellation when SDK query hangs (#742)
Closes #680
2026-06-04 11:47:13 +00:00
dependabot[bot]
add7e31704 feat(deps): upgrade to @anthropic-ai/claude-agent-sdk@0.3.162 (#740)
Bumps the minor group with 9 updates:

| Package | From | To |
| --- | --- | --- |
|
[@anthropic-ai/claude-agent-sdk](https://github.com/anthropics/claude-agent-sdk-typescript)
| `0.3.160` | `0.3.162` |
| @anthropic-ai/claude-agent-sdk-darwin-arm64 | `0.3.160` | `0.3.162` |
| @anthropic-ai/claude-agent-sdk-darwin-x64 | `0.3.160` | `0.3.162` |
| @anthropic-ai/claude-agent-sdk-linux-arm64 | `0.3.160` | `0.3.162` |
| @anthropic-ai/claude-agent-sdk-linux-arm64-musl | `0.3.160` |
`0.3.162` |
| @anthropic-ai/claude-agent-sdk-linux-x64 | `0.3.160` | `0.3.162` |
| @anthropic-ai/claude-agent-sdk-linux-x64-musl | `0.3.160` | `0.3.162`
|
| @anthropic-ai/claude-agent-sdk-win32-arm64 | `0.3.160` | `0.3.162` |
| @anthropic-ai/claude-agent-sdk-win32-x64 | `0.3.160` | `0.3.162` |

Updates `@anthropic-ai/claude-agent-sdk` from 0.3.160 to 0.3.162
<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.162</h2>
<h2>What's changed</h2>
<ul>
<li>Refusal error messages now carry <code>stop_reason:
&quot;refusal&quot;</code> and <code>stop_details</code> on the
assistant message and in session transcripts, so SDK consumers can
detect refusals without text-matching the error content</li>
<li>Agent SDK sessions on native builds now default to fast embedded
<code>find</code>/<code>grep</code> search in Bash, matching the
interactive CLI, instead of always registering the dedicated Grep/Glob
tools. To keep the dedicated tools (e.g. to intercept searches via
<code>canUseTool</code> or hooks), name them in the <code>tools</code>
option or reference them in <code>allowedTools</code></li>
</ul>
<h2>Update</h2>
<pre lang="sh"><code>npm install @anthropic-ai/claude-agent-sdk@0.3.162
# or
yarn add @anthropic-ai/claude-agent-sdk@0.3.162
# or
pnpm add @anthropic-ai/claude-agent-sdk@0.3.162
# or
bun add @anthropic-ai/claude-agent-sdk@0.3.162
</code></pre>
<h2>v0.3.161</h2>
<h2>What's changed</h2>
<ul>
<li>The <code>initialize</code> control request is now idempotent: a
second <code>initialize</code> returns the same success payload instead
of an <code>Already initialized</code> error.
<code>ControlResponse</code> gains an optional
<code>pending_permission_requests</code> field, mirroring
<code>ControlErrorResponse</code></li>
<li><code>applyFlagSettings</code> now live-applies <code>agent</code>
changes: switching the active agent (or passing <code>null</code> to
reset) takes effect on the next turn in a running session</li>
</ul>
<h2>Update</h2>
<pre lang="sh"><code>npm install @anthropic-ai/claude-agent-sdk@0.3.161
# or
yarn add @anthropic-ai/claude-agent-sdk@0.3.161
# or
pnpm add @anthropic-ai/claude-agent-sdk@0.3.161
# or
bun add @anthropic-ai/claude-agent-sdk@0.3.161
</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.162</h2>
<ul>
<li>Refusal error messages now carry <code>stop_reason:
&quot;refusal&quot;</code> and <code>stop_details</code> on the
assistant message and in session transcripts, so SDK consumers can
detect refusals without text-matching the error content</li>
<li>Agent SDK sessions on native builds now default to fast embedded
<code>find</code>/<code>grep</code> search in Bash, matching the
interactive CLI, instead of always registering the dedicated Grep/Glob
tools. To keep the dedicated tools (e.g. to intercept searches via
<code>canUseTool</code> or hooks), name them in the <code>tools</code>
option or reference them in <code>allowedTools</code></li>
</ul>
<h2>0.3.161</h2>
<ul>
<li>The <code>initialize</code> control request is now idempotent: a
second <code>initialize</code> returns the same success payload instead
of an <code>Already initialized</code> error.
<code>ControlResponse</code> gains an optional
<code>pending_permission_requests</code> field, mirroring
<code>ControlErrorResponse</code></li>
<li><code>applyFlagSettings</code> now live-applies <code>agent</code>
changes: switching the active agent (or passing <code>null</code> to
reset) takes effect on the next turn in a running session</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="e9f26a0e02"><code>e9f26a0</code></a>
chore: Update CHANGELOG.md</li>
<li><a
href="2f67c51150"><code>2f67c51</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.160...v0.3.162">compare
view</a></li>
</ul>
</details>
<br />

Updates `@anthropic-ai/claude-agent-sdk-darwin-arm64` from 0.3.160 to
0.3.162

Updates `@anthropic-ai/claude-agent-sdk-darwin-x64` from 0.3.160 to
0.3.162

Updates `@anthropic-ai/claude-agent-sdk-linux-arm64` from 0.3.160 to
0.3.162

Updates `@anthropic-ai/claude-agent-sdk-linux-arm64-musl` from 0.3.160
to 0.3.162

Updates `@anthropic-ai/claude-agent-sdk-linux-x64` from 0.3.160 to
0.3.162

Updates `@anthropic-ai/claude-agent-sdk-linux-x64-musl` from 0.3.160 to
0.3.162

Updates `@anthropic-ai/claude-agent-sdk-win32-arm64` from 0.3.160 to
0.3.162

Updates `@anthropic-ai/claude-agent-sdk-win32-x64` from 0.3.160 to
0.3.162


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>
2026-06-04 12:45:17 +02:00
acp-release-bot[bot]
f1736a9371 chore(main): release 0.40.0 (#728)
🤖 I have created a release *beep* *boop*
---


##
[0.40.0](https://github.com/agentclientprotocol/claude-agent-acp/compare/v0.39.0...v0.40.0)
(2026-06-02)


### Features

* **deps-dev:** bump the minor group with 2 updates
([#726](https://github.com/agentclientprotocol/claude-agent-acp/issues/726))
([51a370e](51a370e4fe))
* **deps:** bump actions/checkout from 6.0.2 to 6.0.3
([#736](https://github.com/agentclientprotocol/claude-agent-acp/issues/736))
([9cda07b](9cda07ba9d))
* **deps:** bump the minor group with 50 updates
([#737](https://github.com/agentclientprotocol/claude-agent-acp/issues/737))
([32175b8](32175b83a0))


### Bug Fixes

* Optimize local command marker stripping
([#738](https://github.com/agentclientprotocol/claude-agent-acp/issues/738))
([895422c](895422c72d)),
closes
[#727](https://github.com/agentclientprotocol/claude-agent-acp/issues/727)

---
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>
2026-06-02 23:10:01 +02:00
Ben Brandt
895422c72d fix: Optimize local command marker stripping (#738)
Closes #727
2026-06-02 23:07:04 +02:00
dependabot[bot]
32175b83a0 feat(deps): bump the minor group with 50 updates (#737)
Bumps the minor group with 50 updates:

| Package | From | To |
| --- | --- | --- |
|
[@agentclientprotocol/sdk](https://github.com/agentclientprotocol/typescript-sdk)
| `0.22.1` | `0.24.0` |
|
[@anthropic-ai/claude-agent-sdk](https://github.com/anthropics/claude-agent-sdk-typescript)
| `0.3.156` | `0.3.160` |
|
[@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin)
| `8.60.0` | `8.60.1` |
|
[@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser)
| `8.60.0` | `8.60.1` |
| [eslint](https://github.com/eslint/eslint) | `10.4.0` | `10.4.1` |
|
[vitest](https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest)
| `4.1.7` | `4.1.8` |
| @anthropic-ai/claude-agent-sdk-darwin-arm64 | `0.3.156` | `0.3.160` |
| @anthropic-ai/claude-agent-sdk-darwin-x64 | `0.3.156` | `0.3.160` |
| @anthropic-ai/claude-agent-sdk-linux-arm64 | `0.3.156` | `0.3.160` |
| @anthropic-ai/claude-agent-sdk-linux-arm64-musl | `0.3.156` |
`0.3.160` |
| @anthropic-ai/claude-agent-sdk-linux-x64 | `0.3.156` | `0.3.160` |
| @anthropic-ai/claude-agent-sdk-linux-x64-musl | `0.3.156` | `0.3.160`
|
| @anthropic-ai/claude-agent-sdk-win32-arm64 | `0.3.156` | `0.3.160` |
| @anthropic-ai/claude-agent-sdk-win32-x64 | `0.3.156` | `0.3.160` |
|
[@eslint/plugin-kit](https://github.com/eslint/rewrite/tree/HEAD/packages/plugin-kit)
| `0.7.1` | `0.7.2` |
|
[@oxc-project/types](https://github.com/oxc-project/oxc/tree/HEAD/npm/oxc-types)
| `0.132.0` | `0.133.0` |
|
[@rolldown/binding-android-arm64](https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown)
| `1.0.2` | `1.0.3` |
|
[@rolldown/binding-darwin-arm64](https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown)
| `1.0.2` | `1.0.3` |
|
[@rolldown/binding-darwin-x64](https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown)
| `1.0.2` | `1.0.3` |
|
[@rolldown/binding-freebsd-x64](https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown)
| `1.0.2` | `1.0.3` |
|
[@rolldown/binding-linux-arm-gnueabihf](https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown)
| `1.0.2` | `1.0.3` |
|
[@rolldown/binding-linux-arm64-gnu](https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown)
| `1.0.2` | `1.0.3` |
|
[@rolldown/binding-linux-arm64-musl](https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown)
| `1.0.2` | `1.0.3` |
|
[@rolldown/binding-linux-ppc64-gnu](https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown)
| `1.0.2` | `1.0.3` |
|
[@rolldown/binding-linux-s390x-gnu](https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown)
| `1.0.2` | `1.0.3` |
|
[@rolldown/binding-linux-x64-gnu](https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown)
| `1.0.2` | `1.0.3` |
|
[@rolldown/binding-linux-x64-musl](https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown)
| `1.0.2` | `1.0.3` |
|
[@rolldown/binding-openharmony-arm64](https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown)
| `1.0.2` | `1.0.3` |
|
[@rolldown/binding-wasm32-wasi](https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown)
| `1.0.2` | `1.0.3` |
|
[@rolldown/binding-win32-arm64-msvc](https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown)
| `1.0.2` | `1.0.3` |
|
[@rolldown/binding-win32-x64-msvc](https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown)
| `1.0.2` | `1.0.3` |
|
[@typescript-eslint/project-service](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/project-service)
| `8.60.0` | `8.60.1` |
|
[@typescript-eslint/scope-manager](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/scope-manager)
| `8.60.0` | `8.60.1` |
|
[@typescript-eslint/tsconfig-utils](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/tsconfig-utils)
| `8.60.0` | `8.60.1` |
|
[@typescript-eslint/type-utils](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/type-utils)
| `8.60.0` | `8.60.1` |
|
[@typescript-eslint/types](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/types)
| `8.60.0` | `8.60.1` |
|
[@typescript-eslint/typescript-estree](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-estree)
| `8.60.0` | `8.60.1` |
|
[@typescript-eslint/utils](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/utils)
| `8.60.0` | `8.60.1` |
|
[@typescript-eslint/visitor-keys](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/visitor-keys)
| `8.60.0` | `8.60.1` |
|
[@vitest/expect](https://github.com/vitest-dev/vitest/tree/HEAD/packages/expect)
| `4.1.7` | `4.1.8` |
|
[@vitest/mocker](https://github.com/vitest-dev/vitest/tree/HEAD/packages/mocker)
| `4.1.7` | `4.1.8` |
|
[@vitest/pretty-format](https://github.com/vitest-dev/vitest/tree/HEAD/packages/pretty-format)
| `4.1.7` | `4.1.8` |
|
[@vitest/runner](https://github.com/vitest-dev/vitest/tree/HEAD/packages/runner)
| `4.1.7` | `4.1.8` |
|
[@vitest/snapshot](https://github.com/vitest-dev/vitest/tree/HEAD/packages/snapshot)
| `4.1.7` | `4.1.8` |
|
[@vitest/spy](https://github.com/vitest-dev/vitest/tree/HEAD/packages/spy)
| `4.1.7` | `4.1.8` |
|
[@vitest/utils](https://github.com/vitest-dev/vitest/tree/HEAD/packages/utils)
| `4.1.7` | `4.1.8` |
|
[rolldown](https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown)
| `1.0.2` | `1.0.3` |
| [tinyexec](https://github.com/tinylibs/tinyexec) | `1.2.3` | `1.2.4` |
| [tinyglobby](https://github.com/SuperchupuDev/tinyglobby) | `0.2.16` |
`0.2.17` |
| [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) |
`8.0.14` | `8.0.16` |

Updates `@agentclientprotocol/sdk` from 0.22.1 to 0.24.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>v0.24.0</h2>
<h2><a
href="https://github.com/agentclientprotocol/typescript-sdk/compare/v0.23.0...v0.24.0">0.24.0</a>
(2026-06-02)</h2>
<h3>Features</h3>
<ul>
<li>Add resilient schema deserialization (<a
href="https://redirect.github.com/agentclientprotocol/typescript-sdk/issues/167">#167</a>)
(<a
href="5864e7306e">5864e73</a>)</li>
<li><strong>schema:</strong> Stabilize addl dirs and remove unstable
model selectors (<a
href="https://redirect.github.com/agentclientprotocol/typescript-sdk/issues/165">#165</a>)
(<a
href="fa6e302808">fa6e302</a>)</li>
</ul>
<h2>v0.23.0</h2>
<h2><a
href="https://github.com/agentclientprotocol/typescript-sdk/compare/v0.22.1...v0.23.0">0.23.0</a>
(2026-06-01)</h2>
<h3>Features</h3>
<ul>
<li><strong>schema:</strong> Stabilize logout and update schema to
v0.13.4 (<a
href="https://redirect.github.com/agentclientprotocol/typescript-sdk/issues/163">#163</a>)
(<a
href="cfd900a981">cfd900a</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/v0.23.0...v0.24.0">0.24.0</a>
(2026-06-02)</h2>
<h3>Features</h3>
<ul>
<li>Add resilient schema deserialization (<a
href="https://redirect.github.com/agentclientprotocol/typescript-sdk/issues/167">#167</a>)
(<a
href="5864e7306e">5864e73</a>)</li>
<li><strong>schema:</strong> Stabilize addl dirs and remove unstable
model selectors (<a
href="https://redirect.github.com/agentclientprotocol/typescript-sdk/issues/165">#165</a>)
(<a
href="fa6e302808">fa6e302</a>)</li>
</ul>
<h2><a
href="https://github.com/agentclientprotocol/typescript-sdk/compare/v0.22.1...v0.23.0">0.23.0</a>
(2026-06-01)</h2>
<h3>Features</h3>
<ul>
<li><strong>schema:</strong> Stabilize logout and update schema to
v0.13.4 (<a
href="https://redirect.github.com/agentclientprotocol/typescript-sdk/issues/163">#163</a>)
(<a
href="cfd900a981">cfd900a</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="8966c11c6e"><code>8966c11</code></a>
chore(main): release 0.24.0 (<a
href="https://redirect.github.com/agentclientprotocol/typescript-sdk/issues/166">#166</a>)</li>
<li><a
href="5864e7306e"><code>5864e73</code></a>
feat: Add resilient schema deserialization (<a
href="https://redirect.github.com/agentclientprotocol/typescript-sdk/issues/167">#167</a>)</li>
<li><a
href="fa6e302808"><code>fa6e302</code></a>
feat(schema): Stabilize addl dirs and remove unstable model selectors
(<a
href="https://redirect.github.com/agentclientprotocol/typescript-sdk/issues/165">#165</a>)</li>
<li><a
href="0c2e622a11"><code>0c2e622</code></a>
chore(main): release 0.23.0 (<a
href="https://redirect.github.com/agentclientprotocol/typescript-sdk/issues/164">#164</a>)</li>
<li><a
href="cfd900a981"><code>cfd900a</code></a>
feat(schema): Stabilize logout and update schema to v0.13.4 (<a
href="https://redirect.github.com/agentclientprotocol/typescript-sdk/issues/163">#163</a>)</li>
<li><a
href="171a253ae6"><code>171a253</code></a>
chore(deps-dev): bump concurrently from 9.2.1 to 10.0.0 (<a
href="https://redirect.github.com/agentclientprotocol/typescript-sdk/issues/162">#162</a>)</li>
<li><a
href="0ecf00184f"><code>0ecf001</code></a>
chore(deps): bump the minor group with 19 updates (<a
href="https://redirect.github.com/agentclientprotocol/typescript-sdk/issues/161">#161</a>)</li>
<li><a
href="ca74103730"><code>ca74103</code></a>
chore(deps): bump crate-ci/typos from 1.46.2 to 1.47.0 (<a
href="https://redirect.github.com/agentclientprotocol/typescript-sdk/issues/160">#160</a>)</li>
<li><a
href="c6a9c9487d"><code>c6a9c94</code></a>
chore(deps): bump crate-ci/typos from 1.46.1 to 1.46.2 (<a
href="https://redirect.github.com/agentclientprotocol/typescript-sdk/issues/158">#158</a>)</li>
<li><a
href="c7256e7c5d"><code>c7256e7</code></a>
chore(deps): bump the minor group with 43 updates (<a
href="https://redirect.github.com/agentclientprotocol/typescript-sdk/issues/159">#159</a>)</li>
<li>See full diff in <a
href="https://github.com/agentclientprotocol/typescript-sdk/compare/v0.22.1...v0.24.0">compare
view</a></li>
</ul>
</details>
<br />

Updates `@anthropic-ai/claude-agent-sdk` from 0.3.156 to 0.3.160
<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.160</h2>
<h2>What's changed</h2>
<ul>
<li>Fixed SDK hook callbacks swallowing abort signals: aborting during a
PostToolUse hook now ends the turn with a final <code>result</code>
message instead of hanging the calling process</li>
</ul>
<h2>Update</h2>
<pre lang="sh"><code>npm install @anthropic-ai/claude-agent-sdk@0.3.160
# or
yarn add @anthropic-ai/claude-agent-sdk@0.3.160
# or
pnpm add @anthropic-ai/claude-agent-sdk@0.3.160
# or
bun add @anthropic-ai/claude-agent-sdk@0.3.160
</code></pre>
<h2>v0.3.159</h2>
<h2>What's changed</h2>
<ul>
<li>Updated to parity with Claude Code v2.1.159</li>
</ul>
<h2>Update</h2>
<pre lang="sh"><code>npm install @anthropic-ai/claude-agent-sdk@0.3.159
# or
yarn add @anthropic-ai/claude-agent-sdk@0.3.159
# or
pnpm add @anthropic-ai/claude-agent-sdk@0.3.159
# or
bun add @anthropic-ai/claude-agent-sdk@0.3.159
</code></pre>
<h2>v0.3.158</h2>
<h2>What's changed</h2>
<ul>
<li>Updated to parity with Claude Code v2.1.158</li>
</ul>
<h2>Update</h2>
<pre lang="sh"><code>npm install @anthropic-ai/claude-agent-sdk@0.3.158
# or
yarn add @anthropic-ai/claude-agent-sdk@0.3.158
# or
pnpm add @anthropic-ai/claude-agent-sdk@0.3.158
# or
bun add @anthropic-ai/claude-agent-sdk@0.3.158
</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.160</h2>
<ul>
<li>Fixed SDK hook callbacks swallowing abort signals: aborting during a
PostToolUse hook now ends the turn with a final <code>result</code>
message instead of hanging the calling process</li>
</ul>
<h2>0.3.159</h2>
<ul>
<li>Updated to parity with Claude Code v2.1.159</li>
</ul>
<h2>0.3.158</h2>
<ul>
<li>Updated to parity with Claude Code v2.1.158</li>
</ul>
<h2>0.3.157</h2>
<ul>
<li>Updated to parity with Claude Code v2.1.157</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="b33e8d5626"><code>b33e8d5</code></a>
chore: Update CHANGELOG.md</li>
<li><a
href="84f8395802"><code>84f8395</code></a>
chore: Update CHANGELOG.md</li>
<li><a
href="e3a20564b5"><code>e3a2056</code></a>
chore: Update CHANGELOG.md</li>
<li><a
href="7337b9fdd2"><code>7337b9f</code></a>
chore: Update CHANGELOG.md</li>
<li><a
href="80b644339f"><code>80b6443</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.156...v0.3.160">compare
view</a></li>
</ul>
</details>
<br />

Updates `@typescript-eslint/eslint-plugin` from 8.60.0 to 8.60.1
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/typescript-eslint/typescript-eslint/releases">@​typescript-eslint/eslint-plugin's
releases</a>.</em></p>
<blockquote>
<h2>v8.60.1</h2>
<h2>8.60.1 (2026-06-01)</h2>
<h3>🩹 Fixes</h3>
<ul>
<li><strong>eslint-plugin:</strong> respect ECMAScript line terminators
in ts-comment rules (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12352">#12352</a>)</li>
<li><strong>eslint-plugin:</strong> [no-shadow] correct rule to match
ESLint v10 handling (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12182">#12182</a>)</li>
</ul>
<h3>❤️ Thank You</h3>
<ul>
<li>lumir</li>
<li>Nevette Bailey <a
href="https://github.com/nevette-bailey"><code>@​nevette-bailey</code></a></li>
</ul>
<p>See <a
href="https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.60.1">GitHub
Releases</a> for more information.</p>
<p>You can read about our <a
href="https://typescript-eslint.io/users/versioning">versioning
strategy</a> and <a
href="https://typescript-eslint.io/users/releases">releases</a> on our
website.</p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/CHANGELOG.md">@​typescript-eslint/eslint-plugin's
changelog</a>.</em></p>
<blockquote>
<h2>8.60.1 (2026-06-01)</h2>
<h3>🩹 Fixes</h3>
<ul>
<li><strong>eslint-plugin:</strong> [no-shadow] correct rule to match
ESLint v10 handling (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12182">#12182</a>)</li>
<li><strong>eslint-plugin:</strong> respect ECMAScript line terminators
in ts-comment rules (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12352">#12352</a>)</li>
</ul>
<h3>❤️ Thank You</h3>
<ul>
<li>lumir</li>
<li>Nevette Bailey <a
href="https://github.com/nevette-bailey"><code>@​nevette-bailey</code></a></li>
</ul>
<p>See <a
href="https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.60.1">GitHub
Releases</a> for more information.</p>
<p>You can read about our <a
href="https://typescript-eslint.io/users/versioning">versioning
strategy</a> and <a
href="https://typescript-eslint.io/users/releases">releases</a> on our
website.</p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="4f84a697ae"><code>4f84a69</code></a>
chore(release): publish 8.60.1</li>
<li><a
href="598af564db"><code>598af56</code></a>
docs(eslint-plugin): clarify no-redeclare type-value collision not
covered by...</li>
<li><a
href="1849b530c2"><code>1849b53</code></a>
chore: typecheck using tsgo (<a
href="https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin/issues/12139">#12139</a>)</li>
<li><a
href="5341d59dd3"><code>5341d59</code></a>
chore: fix lint issues (<a
href="https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin/issues/12369">#12369</a>)</li>
<li><a
href="f525814f01"><code>f525814</code></a>
fix(eslint-plugin): [no-shadow] correct rule to match ESLint v10
handling (<a
href="https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin/issues/1">#1</a>...</li>
<li><a
href="2df540cd8b"><code>2df540c</code></a>
chore(eslint-plugin): defer type checks to improve rules performance (<a
href="https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin/issues/12296">#12296</a>)</li>
<li><a
href="1ab4284789"><code>1ab4284</code></a>
fix(eslint-plugin): respect ECMAScript line terminators in ts-comment
rules (...</li>
<li><a
href="2f49df599b"><code>2f49df5</code></a>
docs: update references to <code>@stylistic/eslint-plugin</code> rules
in documentation ...</li>
<li>See full diff in <a
href="https://github.com/typescript-eslint/typescript-eslint/commits/v8.60.1/packages/eslint-plugin">compare
view</a></li>
</ul>
</details>
<br />

Updates `@typescript-eslint/parser` from 8.60.0 to 8.60.1
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/typescript-eslint/typescript-eslint/releases">@​typescript-eslint/parser's
releases</a>.</em></p>
<blockquote>
<h2>v8.60.1</h2>
<h2>8.60.1 (2026-06-01)</h2>
<h3>🩹 Fixes</h3>
<ul>
<li><strong>eslint-plugin:</strong> respect ECMAScript line terminators
in ts-comment rules (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12352">#12352</a>)</li>
<li><strong>eslint-plugin:</strong> [no-shadow] correct rule to match
ESLint v10 handling (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12182">#12182</a>)</li>
</ul>
<h3>❤️ Thank You</h3>
<ul>
<li>lumir</li>
<li>Nevette Bailey <a
href="https://github.com/nevette-bailey"><code>@​nevette-bailey</code></a></li>
</ul>
<p>See <a
href="https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.60.1">GitHub
Releases</a> for more information.</p>
<p>You can read about our <a
href="https://typescript-eslint.io/users/versioning">versioning
strategy</a> and <a
href="https://typescript-eslint.io/users/releases">releases</a> on our
website.</p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/parser/CHANGELOG.md">@​typescript-eslint/parser's
changelog</a>.</em></p>
<blockquote>
<h2>8.60.1 (2026-06-01)</h2>
<p>This was a version bump only for parser to align it with other
projects, there were no code changes.</p>
<p>See <a
href="https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.60.1">GitHub
Releases</a> for more information.</p>
<p>You can read about our <a
href="https://typescript-eslint.io/users/versioning">versioning
strategy</a> and <a
href="https://typescript-eslint.io/users/releases">releases</a> on our
website.</p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="4f84a697ae"><code>4f84a69</code></a>
chore(release): publish 8.60.1</li>
<li><a
href="1849b530c2"><code>1849b53</code></a>
chore: typecheck using tsgo (<a
href="https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser/issues/12139">#12139</a>)</li>
<li>See full diff in <a
href="https://github.com/typescript-eslint/typescript-eslint/commits/v8.60.1/packages/parser">compare
view</a></li>
</ul>
</details>
<br />

Updates `eslint` from 10.4.0 to 10.4.1
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/eslint/eslint/releases">eslint's
releases</a>.</em></p>
<blockquote>
<h2>v10.4.1</h2>
<h2>Bug Fixes</h2>
<ul>
<li><a
href="e557467db7"><code>e557467</code></a>
fix: update <code>@eslint/plugin-kit</code> version to 0.7.2 (<a
href="https://redirect.github.com/eslint/eslint/issues/20930">#20930</a>)
(Francesco Trotta)</li>
<li><a
href="d4ce898796"><code>d4ce898</code></a>
fix: propagate failures from delegated commands (<a
href="https://redirect.github.com/eslint/eslint/issues/20917">#20917</a>)
(Minh Vu)</li>
<li><a
href="f4f3507460"><code>f4f3507</code></a>
fix: prefer-arrow-callback invalid autofix with newline after
<code>async</code> (<a
href="https://redirect.github.com/eslint/eslint/issues/20916">#20916</a>)
(kuldeep kumar)</li>
<li><a
href="c5bc78b37e"><code>c5bc78b</code></a>
fix: false positive for reference in <code>finally</code> block (<a
href="https://redirect.github.com/eslint/eslint/issues/20655">#20655</a>)
(Tanuj Kanti)</li>
<li><a
href="27538c01f5"><code>27538c0</code></a>
fix: add missing CodePath and CodePathSegment types (<a
href="https://redirect.github.com/eslint/eslint/issues/20853">#20853</a>)
(Pixel998)</li>
</ul>
<h2>Documentation</h2>
<ul>
<li><a
href="61b0add61f"><code>61b0add</code></a>
docs: remove deprecated rule from related rules of
<code>max-params</code> (<a
href="https://redirect.github.com/eslint/eslint/issues/20921">#20921</a>)
(Tanuj Kanti)</li>
<li><a
href="305d5b91ae"><code>305d5b9</code></a>
docs: remove deprecated rules from related rules section (<a
href="https://redirect.github.com/eslint/eslint/issues/20911">#20911</a>)
(Tanuj Kanti)</li>
<li><a
href="49b0202d01"><code>49b0202</code></a>
docs: fix <code>display: none</code> of ad (<a
href="https://redirect.github.com/eslint/eslint/issues/20901">#20901</a>)
(Tanuj Kanti)</li>
<li><a
href="9067f9492e"><code>9067f94</code></a>
docs: switch build to Node.js 24 (<a
href="https://redirect.github.com/eslint/eslint/issues/20893">#20893</a>)
(Milos Djermanovic)</li>
<li><a
href="c91b0417e3"><code>c91b041</code></a>
docs: Update README (GitHub Actions Bot)</li>
<li><a
href="e349265cb3"><code>e349265</code></a>
docs: clarify semver strings in rule deprecation objects (<a
href="https://redirect.github.com/eslint/eslint/issues/20885">#20885</a>)
(Milos Djermanovic)</li>
</ul>
<h2>Chores</h2>
<ul>
<li><a
href="b0e466b6ab"><code>b0e466b</code></a>
test: add <code>data</code> property to invalid tests cases for rules
(<a
href="https://redirect.github.com/eslint/eslint/issues/20924">#20924</a>)
(Tanuj Kanti)</li>
<li><a
href="f78838bc4c"><code>f78838b</code></a>
test: add CodePath type coverage (<a
href="https://redirect.github.com/eslint/eslint/issues/20904">#20904</a>)
(Pixel998)</li>
<li><a
href="1daa4bd734"><code>1daa4bd</code></a>
chore: update <code>eslint-plugin-eslint-comments</code> test data to
latest commit (<a
href="https://redirect.github.com/eslint/eslint/issues/20922">#20922</a>)
(Francesco Trotta)</li>
<li><a
href="002942ce98"><code>002942c</code></a>
ci: declare contents:read on update-readme workflow (<a
href="https://redirect.github.com/eslint/eslint/issues/20919">#20919</a>)
(Arpit Jain)</li>
<li><a
href="64bca24e7b"><code>64bca24</code></a>
chore: update ecosystem plugins (<a
href="https://redirect.github.com/eslint/eslint/issues/20912">#20912</a>)
(ESLint Bot)</li>
<li><a
href="6d7c832950"><code>6d7c832</code></a>
chore: ignore fflate updates in renovate (<a
href="https://redirect.github.com/eslint/eslint/issues/20908">#20908</a>)
(Pixel998)</li>
<li><a
href="b2c8638216"><code>b2c8638</code></a>
ci: bump pnpm/action-setup from 6.0.7 to 6.0.8 (<a
href="https://redirect.github.com/eslint/eslint/issues/20889">#20889</a>)
(dependabot[bot])</li>
<li><a
href="a9b8d7f74c"><code>a9b8d7f</code></a>
chore: increase maxBuffer for ecosystem tests (<a
href="https://redirect.github.com/eslint/eslint/issues/20881">#20881</a>)
(sethamus)</li>
<li><a
href="b702ead5e1"><code>b702ead</code></a>
chore: update ecosystem update PR settings (<a
href="https://redirect.github.com/eslint/eslint/issues/20884">#20884</a>)
(Pixel998)</li>
<li><a
href="507f60e9a7"><code>507f60e</code></a>
chore: update ecosystem plugins (<a
href="https://redirect.github.com/eslint/eslint/issues/20882">#20882</a>)
(ESLint Bot)</li>
<li><a
href="92f5c5bb6b"><code>92f5c5b</code></a>
test: add unit test for message-count (<a
href="https://redirect.github.com/eslint/eslint/issues/20878">#20878</a>)
(kuldeep kumar)</li>
<li><a
href="df321080af"><code>df32108</code></a>
chore: add <code>@​eslint/markdown</code> and typescript-eslint
ecosystem tests (<a
href="https://redirect.github.com/eslint/eslint/issues/20837">#20837</a>)
(sethamus)</li>
<li><a
href="327f91d36a"><code>327f91d</code></a>
chore: use includeIgnoreFile internally (<a
href="https://redirect.github.com/eslint/eslint/issues/20876">#20876</a>)
(Kirk Waiblinger)</li>
<li><a
href="f0dc4bd893"><code>f0dc4bd</code></a>
chore: pin fflate@0.8.2 (<a
href="https://redirect.github.com/eslint/eslint/issues/20877">#20877</a>)
(Milos Djermanovic)</li>
<li><a
href="0f4bd257a6"><code>0f4bd25</code></a>
ci: run Discord alert for ecosystem test failures (<a
href="https://redirect.github.com/eslint/eslint/issues/20873">#20873</a>)
(Copilot)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="4a3d15a99c"><code>4a3d15a</code></a>
10.4.1</li>
<li><a
href="43e7e2bdc5"><code>43e7e2b</code></a>
Build: changelog update for 10.4.1</li>
<li><a
href="e557467db7"><code>e557467</code></a>
fix: update <code>@eslint/plugin-kit</code> version to 0.7.2 (<a
href="https://redirect.github.com/eslint/eslint/issues/20930">#20930</a>)</li>
<li><a
href="b0e466b6ab"><code>b0e466b</code></a>
test: add <code>data</code> property to invalid tests cases for rules
(<a
href="https://redirect.github.com/eslint/eslint/issues/20924">#20924</a>)</li>
<li><a
href="d4ce898796"><code>d4ce898</code></a>
fix: propagate failures from delegated commands (<a
href="https://redirect.github.com/eslint/eslint/issues/20917">#20917</a>)</li>
<li><a
href="f4f3507460"><code>f4f3507</code></a>
fix: prefer-arrow-callback invalid autofix with newline after
<code>async</code> (<a
href="https://redirect.github.com/eslint/eslint/issues/20916">#20916</a>)</li>
<li><a
href="f78838bc4c"><code>f78838b</code></a>
test: add CodePath type coverage (<a
href="https://redirect.github.com/eslint/eslint/issues/20904">#20904</a>)</li>
<li><a
href="61b0add61f"><code>61b0add</code></a>
docs: remove deprecated rule from related rules of
<code>max-params</code> (<a
href="https://redirect.github.com/eslint/eslint/issues/20921">#20921</a>)</li>
<li><a
href="1daa4bd734"><code>1daa4bd</code></a>
chore: update <code>eslint-plugin-eslint-comments</code> test data to
latest commit (<a
href="https://redirect.github.com/eslint/eslint/issues/20">#20</a>...</li>
<li><a
href="002942ce98"><code>002942c</code></a>
ci: declare contents:read on update-readme workflow (<a
href="https://redirect.github.com/eslint/eslint/issues/20919">#20919</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/eslint/eslint/compare/v10.4.0...v10.4.1">compare
view</a></li>
</ul>
</details>
<br />

Updates `vitest` from 4.1.7 to 4.1.8
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/vitest-dev/vitest/releases">vitest's
releases</a>.</em></p>
<blockquote>
<h2>v4.1.8</h2>
<h3>   🐞 Bug Fixes</h3>
<ul>
<li><strong>browser</strong>:
<ul>
<li>Disable client <code>cdp</code> API when <code>allowWrite/allowExec:
false</code> [backport to v4]  -  by <a
href="https://github.com/hi-ogawa"><code>@​hi-ogawa</code></a> and
<strong>Codex</strong> in <a
href="https://redirect.github.com/vitest-dev/vitest/issues/10450">vitest-dev/vitest#10450</a>
<a href="https://github.com/vitest-dev/vitest/commit/e4067b3b1"><!-- raw
HTML omitted -->(e4067)<!-- raw HTML omitted --></a></li>
<li>Remove orphaned Playwright route when same module is mocked via
multiple ids [backport to v4]  -  by <a
href="https://github.com/toxik"><code>@​toxik</code></a> and <a
href="https://github.com/Zelys-DFKH"><code>@​Zelys-DFKH</code></a> in <a
href="https://redirect.github.com/vitest-dev/vitest/issues/10474">vitest-dev/vitest#10474</a>
<a href="https://github.com/vitest-dev/vitest/commit/675b4343f"><!-- raw
HTML omitted -->(675b4)<!-- raw HTML omitted --></a></li>
</ul>
</li>
</ul>
<h5>    <a
href="https://github.com/vitest-dev/vitest/compare/v4.1.7...v4.1.8">View
changes on GitHub</a></h5>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="e61f2dd2a0"><code>e61f2dd</code></a>
chore: release v4.1.8</li>
<li><a
href="e4067b3b15"><code>e4067b3</code></a>
fix(browser): disable client <code>cdp</code> API when
<code>allowWrite/allowExec: false</code> [ba...</li>
<li>See full diff in <a
href="https://github.com/vitest-dev/vitest/commits/v4.1.8/packages/vitest">compare
view</a></li>
</ul>
</details>
<br />

Updates `@anthropic-ai/claude-agent-sdk-darwin-arm64` from 0.3.156 to
0.3.160

Updates `@anthropic-ai/claude-agent-sdk-darwin-x64` from 0.3.156 to
0.3.160

Updates `@anthropic-ai/claude-agent-sdk-linux-arm64` from 0.3.156 to
0.3.160

Updates `@anthropic-ai/claude-agent-sdk-linux-arm64-musl` from 0.3.156
to 0.3.160

Updates `@anthropic-ai/claude-agent-sdk-linux-x64` from 0.3.156 to
0.3.160

Updates `@anthropic-ai/claude-agent-sdk-linux-x64-musl` from 0.3.156 to
0.3.160

Updates `@anthropic-ai/claude-agent-sdk-win32-arm64` from 0.3.156 to
0.3.160

Updates `@anthropic-ai/claude-agent-sdk-win32-x64` from 0.3.156 to
0.3.160

Updates `@eslint/plugin-kit` from 0.7.1 to 0.7.2
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/eslint/rewrite/releases">@​eslint/plugin-kit's
releases</a>.</em></p>
<blockquote>
<h2>plugin-kit: v0.7.2</h2>
<h2><a
href="https://github.com/eslint/rewrite/compare/plugin-kit-v0.7.1...plugin-kit-v0.7.2">0.7.2</a>
(2026-05-23)</h2>
<h3>Bug Fixes</h3>
<ul>
<li>add missing .d.cts files while building plugin-kit (<a
href="https://redirect.github.com/eslint/rewrite/issues/445">#445</a>)
(<a
href="49e101ba92">49e101b</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/eslint/rewrite/blob/main/packages/plugin-kit/CHANGELOG.md">@​eslint/plugin-kit's
changelog</a>.</em></p>
<blockquote>
<h2><a
href="https://github.com/eslint/rewrite/compare/plugin-kit-v0.7.1...plugin-kit-v0.7.2">0.7.2</a>
(2026-05-23)</h2>
<h3>Bug Fixes</h3>
<ul>
<li>add missing .d.cts files while building plugin-kit (<a
href="https://redirect.github.com/eslint/rewrite/issues/445">#445</a>)
(<a
href="49e101ba92">49e101b</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="ab64b15b8f"><code>ab64b15</code></a>
chore: release main (<a
href="https://github.com/eslint/rewrite/tree/HEAD/packages/plugin-kit/issues/454">#454</a>)</li>
<li><a
href="49e101ba92"><code>49e101b</code></a>
fix: add missing .d.cts files while building plugin-kit (<a
href="https://github.com/eslint/rewrite/tree/HEAD/packages/plugin-kit/issues/445">#445</a>)</li>
<li><a
href="d46c928474"><code>d46c928</code></a>
docs: Update README sponsors</li>
<li><a
href="f8d08d64ce"><code>f8d08d6</code></a>
docs: Update README sponsors</li>
<li><a
href="334038d4f0"><code>334038d</code></a>
docs: Update README sponsors</li>
<li><a
href="70b69970a2"><code>70b6997</code></a>
docs: Update README sponsors</li>
<li><a
href="be8981f13f"><code>be8981f</code></a>
ci: add type tests for TypeScript 5.x to CI workflow (<a
href="https://github.com/eslint/rewrite/tree/HEAD/packages/plugin-kit/issues/440">#440</a>)</li>
<li><a
href="35b6b944eb"><code>35b6b94</code></a>
chore: update TypeScript to v6 (<a
href="https://github.com/eslint/rewrite/tree/HEAD/packages/plugin-kit/issues/417">#417</a>)</li>
<li><a
href="7807d7107c"><code>7807d71</code></a>
docs: Update README sponsors</li>
<li><a
href="57001eafe0"><code>57001ea</code></a>
docs: Update README sponsors</li>
<li>Additional commits viewable in <a
href="https://github.com/eslint/rewrite/commits/plugin-kit-v0.7.2/packages/plugin-kit">compare
view</a></li>
</ul>
</details>
<br />

Updates `@oxc-project/types` from 0.132.0 to 0.133.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/oxc-project/oxc/releases">@​oxc-project/types's
releases</a>.</em></p>
<blockquote>
<h2>oxc crates_v0.133.0</h2>
<h3>🚀 Features</h3>
<ul>
<li>e857b0c napi/minify: Expose legalComments option and result (<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxc-types/issues/20370">#20370</a>)
(Boshen)</li>
<li>661132d parser: More friendly error messages for rest assignment
target and rest binding element (<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxc-types/issues/22719">#22719</a>)
(sapphi-red)</li>
<li>ee659b6 transformer/legacy-decorator: Add
<code>strictNullChecks</code> option for nullable-union design:type (<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxc-types/issues/22266">#22266</a>)
(Kyle Cannon)</li>
</ul>
<h3>🐛 Bug Fixes</h3>
<ul>
<li>e1d064e transformer/class-properties: Reparent lifted private method
helpers (<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxc-types/issues/22716">#22716</a>)
(Cameron)</li>
<li>4ac0fca minifier: Preserve <code>0 &amp;&amp; (module.exports = {
... })</code> cjs-module-lexer hint (<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxc-types/issues/22729">#22729</a>)
(Dunqing)</li>
<li>40ff611 minifier: Mark peephole loop changed when dropping
dead-after-throw statement (<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxc-types/issues/22722">#22722</a>)
(Dunqing)</li>
<li>2f7b210 codegen: Emit pife-arrow/function leading comments inside
the wrap (<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxc-types/issues/22720">#22720</a>)
(Dunqing)</li>
<li>e184f74 parser: Improve invalid <code>import</code> property access
diagnostic (<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxc-types/issues/22693">#22693</a>)
(camc314)</li>
<li>7baed9c transformer/private-method: Clear inherited strict flags (<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxc-types/issues/22508">#22508</a>)
(camc314)</li>
<li>a9ad27e parser: Keep annotation comments leading without preceding
newline (<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxc-types/issues/22711">#22711</a>)
(Dunqing)</li>
<li>9ea4d64 minifier: Re-evaluate pure/no-side-effects flags after
peephole inlining (<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxc-types/issues/22595">#22595</a>)
(Dunqing)</li>
<li>07afbb6 minifier: Drop empty-body IIFE wrapper when called with
arguments (<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxc-types/issues/22589">#22589</a>)
(Dunqing)</li>
<li>fa7c463 semantic: Correct TS enum member symbol spans (<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxc-types/issues/22689">#22689</a>)
(camc314)</li>
<li>26b9396 semantic: Resolve parameter decorators outside parameter
scope (<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxc-types/issues/22623">#22623</a>)
(camc314)</li>
<li>b284045 parser: Switch to module goal eagerly on <code>export</code>
(<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxc-types/issues/22684">#22684</a>)
(Boshen)</li>
<li>dfa931d semantic: Propagate unresolved auto-increment enum value
instead of defaulting to 0 (<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxc-types/issues/22646">#22646</a>)
(Dunqing)</li>
<li>69a6ba6 transformer/legacy-decorator: Emit Array for
ReadonlyArray<!-- raw HTML omitted --> in decorator metadata (<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxc-types/issues/22265">#22265</a>)
(Kyle Cannon)</li>
<li>e421ef0 transformer/legacy-decorator: Return runtime binding for
design:type (<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxc-types/issues/22640">#22640</a>)
(Dunqing)</li>
<li>d61e1d7 codegen: Preserve verbatim text of pure/no-side-effects
comments (<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxc-types/issues/22525">#22525</a>)
(Dunqing)</li>
<li>702b14e minifier: Preserve IIFE structure in DCE-only mode (<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxc-types/issues/22547">#22547</a>)
(Dunqing)</li>
<li>917da24 parser: Apply PURE comment through member-access chains (<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxc-types/issues/22566">#22566</a>)
(Dunqing)</li>
<li>a069b1c codegen: Preserve quotes for cjs-module-lexer equality
strings (<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxc-types/issues/22551">#22551</a>)
(Dunqing)</li>
</ul>
<h3>⚡ Performance</h3>
<ul>
<li>2f623b0 semantic: Skip unresolved checks for re-exports (<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxc-types/issues/22660">#22660</a>)
(camc314)</li>
<li>0d9553d semantic: Early-exit <code>check_object_expression</code>
for objects with &lt;2 properties (<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxc-types/issues/22668">#22668</a>)
(Dunqing)</li>
<li>d721ad9 semantic: Use direct grandparent lookup for TS type
parameters (<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxc-types/issues/22658">#22658</a>)
(camc314)</li>
<li>0aff288 semantic: Reorder numeric literal strict mode checks (<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxc-types/issues/22657">#22657</a>)
(camc314)</li>
<li>4d5ddb1 semantic: Reorder binding identifier checks (<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxc-types/issues/22656">#22656</a>)
(camc314)</li>
<li>e32acd8 semantic: Reorder identifier ambient binding check (<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxc-types/issues/22653">#22653</a>)
(camc314)</li>
<li>09fe178 semantic: Reorder ident reference strict mode check (<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxc-types/issues/22652">#22652</a>)
(camc314)</li>
<li>4b6add2 semantic: Avoid duplicate ident clone for bindings (<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxc-types/issues/22663">#22663</a>)
(camc314)</li>
<li>82f9662 parser: Check identifier kind before context flag (<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxc-types/issues/22662">#22662</a>)
(camc314)</li>
<li>d7cd951 parser: Fast path identifier parsing and inline operator
helpers (<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxc-types/issues/22650">#22650</a>)
(Boshen)</li>
<li>7b84314 semantic: Use direct byte access for numeric leading-zero
check (<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxc-types/issues/22642">#22642</a>)
(camc314)</li>
<li>0345a31 semantic: Pre-size class elements hash map (<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxc-types/issues/22618">#22618</a>)
(camc314)</li>
<li>04d3065 minifier: Drop per-call buffers in try_fold_concat (<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxc-types/issues/22596">#22596</a>)
(Dunqing)</li>
<li>4f289f1 semantic: Resolve_references_for_current_scope without a
temp Vec (<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxc-types/issues/22599">#22599</a>)
(Dunqing)</li>
<li>e862c15 semantic: Avoid heap alloc for var hoist scope ids (<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxc-types/issues/22603">#22603</a>)
(Dunqing)</li>
<li>8ff8674 semantic: Early return if <code>excess</code> is
<code>0</code> in <code>Stats::increase_by</code> (<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxc-types/issues/22616">#22616</a>)
(camc314)</li>
<li>7a4120e semantic: Pre-reserve unresolved_references using
Stats::references (<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxc-types/issues/22580">#22580</a>)
(Dunqing)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="83328b65ce"><code>83328b6</code></a>
release(crates): oxc v0.133.0 (<a
href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxc-types/issues/22734">#22734</a>)</li>
<li>See full diff in <a
href="https://github.com/oxc-project/oxc/commits/crates_v0.133.0/npm/oxc-types">compare
view</a></li>
</ul>
</details>
<br />

Updates `@rolldown/binding-android-arm64` from 1.0.2 to 1.0.3
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/rolldown/rolldown/releases">@​rolldown/binding-android-arm64's
releases</a>.</em></p>
<blockquote>
<h2>v1.0.3</h2>
<h2>[1.0.3] - 2026-05-27</h2>
<h3>🚀 Features</h3>
<ul>
<li>transform: respect decorator strictNullChecks option (<a
href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9580">#9580</a>)
by <a
href="https://github.com/kylecannon"><code>@​kylecannon</code></a></li>
<li>drop <code>defer</code> keyword (<a
href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9503">#9503</a>)
by <a
href="https://github.com/TheAlexLichter"><code>@​TheAlexLichter</code></a></li>
</ul>
<h3>🐛 Bug Fixes</h3>
<ul>
<li>ci: create target dir before cargo release-oxc update (<a
href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9584">#9584</a>)
by <a
href="https://github.com/shulaoda"><code>@​shulaoda</code></a></li>
<li>ci: reorder prepare-release steps to avoid dirty git check failure
(<a
href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9583">#9583</a>)
by <a
href="https://github.com/shulaoda"><code>@​shulaoda</code></a></li>
<li>testing: canonicalize temp dir early and use platform-specific
separator in test262 (<a
href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9582">#9582</a>)
by <a
href="https://github.com/shulaoda"><code>@​shulaoda</code></a></li>
<li>testing: resolve symlinked temp dir in test262 snapshot
normalization (<a
href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9581">#9581</a>)
by <a
href="https://github.com/shulaoda"><code>@​shulaoda</code></a></li>
<li>testing: canonicalize temp dir path in test262 snapshot
normalization (<a
href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9579">#9579</a>)
by <a
href="https://github.com/shulaoda"><code>@​shulaoda</code></a></li>
<li>dev: <code>onOutput</code> called twice when initial build fails (<a
href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9552">#9552</a>)
by <a href="https://github.com/hyf0"><code>@​hyf0</code></a></li>
<li>dev: make <code>ensureCurrentBuildFinish</code> not returning error
when engine closes (<a
href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9564">#9564</a>)
by <a href="https://github.com/h-a-n-a"><code>@​h-a-n-a</code></a></li>
<li>oxc-runtime: route require() to CJS helper variant (<a
href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9263">#9263</a>)
(<a
href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9526">#9526</a>)
by <a
href="https://github.com/IWANABETHATGUY"><code>@​IWANABETHATGUY</code></a></li>
<li>generator: use exporter chunk's export mode for CJS default
re-exports (<a
href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9299">#9299</a>)
(<a
href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9529">#9529</a>)
by <a
href="https://github.com/IWANABETHATGUY"><code>@​IWANABETHATGUY</code></a></li>
<li>rolldown: always run reduced-atom static cycle check (<a
href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9441">#9441</a>)
(<a
href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9514">#9514</a>)
by <a
href="https://github.com/IWANABETHATGUY"><code>@​IWANABETHATGUY</code></a></li>
<li>apply transform.dropLabels before scanning (<a
href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9521">#9521</a>)
(<a
href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9522">#9522</a>)
by <a
href="https://github.com/IWANABETHATGUY"><code>@​IWANABETHATGUY</code></a></li>
<li>rolldown_watcher: take <code>rolldown</code> dep through the
workspace (<a
href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9510">#9510</a>)
by <a href="https://github.com/Boshen"><code>@​Boshen</code></a></li>
<li>cache: keep the scan-stage cache consistent when a build fails (<a
href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9495">#9495</a>)
by <a href="https://github.com/h-a-n-a"><code>@​h-a-n-a</code></a></li>
<li>skip JSON default-import namespace optimization for write targets
(<a
href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9484">#9484</a>)
(<a
href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9489">#9489</a>)
by <a
href="https://github.com/IWANABETHATGUY"><code>@​IWANABETHATGUY</code></a></li>
<li>deps: skip pnpm frozen-lockfile on Netlify to dodge catalog mismatch
bug (<a
href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9471">#9471</a>)
by <a href="https://github.com/Boshen"><code>@​Boshen</code></a></li>
</ul>
<h3>🚜 Refactor</h3>
<ul>
<li>oxc-runtime: use Cow for helper path construction (<a
href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9538">#9538</a>)
by <a
href="https://github.com/IWANABETHATGUY"><code>@​IWANABETHATGUY</code></a></li>
<li>fold import defer phase drop into PreProcessor (<a
href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9524">#9524</a>)
by <a
href="https://github.com/IWANABETHATGUY"><code>@​IWANABETHATGUY</code></a></li>
<li>distinguish <code>map: null</code> vs <code>map: undefined</code> in
transform hook output (<a
href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9497">#9497</a>)
by <a
href="https://github.com/sapphi-red"><code>@​sapphi-red</code></a></li>
</ul>
<h3>📚 Documentation</h3>
<ul>
<li>explain the policy for Rust crates (<a
href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9547">#9547</a>)
by <a
href="https://github.com/sapphi-red"><code>@​sapphi-red</code></a></li>
<li>cache: add design doc for cache (<a
href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9544">#9544</a>)
by <a href="https://github.com/h-a-n-a"><code>@​h-a-n-a</code></a></li>
<li>guide/troubleshooting: add TDZ error section (<a
href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9537">#9537</a>)
by <a
href="https://github.com/sapphi-red"><code>@​sapphi-red</code></a></li>
<li>dev-engine: add design doc for dev-engine (<a
href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9479">#9479</a>)
by <a href="https://github.com/h-a-n-a"><code>@​h-a-n-a</code></a></li>
<li>lazy-barrel: tweak some words (<a
href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9483">#9483</a>)
by <a
href="https://github.com/shulaoda"><code>@​shulaoda</code></a></li>
<li>lazy-barrel: expand reasoning behind LARGE_BARREL_MODULES advice (<a
href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9477">#9477</a>)
by <a
href="https://github.com/shulaoda"><code>@​shulaoda</code></a></li>
</ul>
<h3>⚡ Performance</h3>
<ul>
<li>generate: thread ast_table by value into codegen consumer (<a
href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9555">#9555</a>)
by <a href="https://github.com/Boshen"><code>@​Boshen</code></a></li>
<li>finalizers: replace <code>_reExport</code> construction with a
direct call to avoid calling <code>clone_in</code> (<a
href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9501">#9501</a>)
by <a href="https://github.com/Dunqing"><code>@​Dunqing</code></a></li>
<li>reorder hot-path boolean checks to short-circuit on cheap predicates
first (<a
href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9523">#9523</a>)
by <a href="https://github.com/Boshen"><code>@​Boshen</code></a></li>
</ul>
<h3>🧪 Testing</h3>
<ul>
<li>rolldown: regression fixture for <a
href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9401">#9401</a>
(<a
href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9418">#9418</a>)
by <a
href="https://github.com/IWANABETHATGUY"><code>@​IWANABETHATGUY</code></a></li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/rolldown/rolldown/blob/main/CHANGELOG.md">@​rolldown/binding-android-arm64's
changelog</a>.</em></p>
<blockquote>
<h2>[1.0.3] - 2026-05-27</h2>
<h3>🚀 Features</h3>
<ul>
<li>transform: respect decorator strictNullChecks option (<a
href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9580">#9580</a>)
by <a
href="https://github.com/kylecannon"><code>@​kylecannon</code></a></li>
<li>drop <code>defer</code> keyword (<a
href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9503">#9503</a>)
by <a
href="https://github.com/TheAlexLichter"><code>@​TheAlexLichter</code></a></li>
</ul>
<h3>🐛 Bug Fixes</h3>
<ul>
<li>ci: create target dir before cargo release-oxc update (<a
href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9584">#9584</a>)
by <a
href="https://github.com/shulaoda"><code>@​shulaoda</code></a></li>
<li>ci: reorder prepare-release steps to avoid dirty git check failure
(<a
href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9583">#9583</a>)
by <a
href="https://github.com/shulaoda"><code>@​shulaoda</code></a></li>
<li>testing: canonicalize temp dir early and use platform-specific
separator in test262 (<a
href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9582">#9582</a>)
by <a
href="https://github.com/shulaoda"><code>@​shulaoda</code></a></li>
<li>testing: resolve symlinked temp dir in test262 snapshot
normalization (<a
href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9581">#9581</a>)
by <a
href="https://github.com/shulaoda"><code>@​shulaoda</code></a></li>
<li>testing: canonicalize temp dir path in test262 snapshot
normalization (<a
href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9579">#9579</a>)
by <a
href="https://github.com/shulaoda"><code>@​shulaoda</code></a></li>
<li>dev: <code>onOutput</code> called twice when initial build fails (<a
href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9552">#9552</a>)
by <a href="https://github.com/hyf0"><code>@​hyf0</code></a></li>
<li>dev: make <code>ensureCurrentBuildFinish</code> not returning error
when engine closes (<a
href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9564">#9564</a>)
by <a href="https://github.com/h-a-n-a"><code>@​h-a-n-a</code></a></li>
<li>oxc-runtime: route require() to CJS helper variant (<a
href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9263">#9263</a>)
(<a
href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9526">#9526</a>)
by <a
href="https://github.com/IWANABETHATGUY"><code>@​IWANABETHATGUY</code></a></li>
<li>generator: use exporter chunk's export mode for CJS default
re-exports (<a
href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9299">#9299</a>)
(<a
href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9529">#9529</a>)
by <a
href="https://github.com/IWANABETHATGUY"><code>@​IWANABETHATGUY</code></a></li>
<li>rolldown: always run reduced-atom static cycle check (<a
href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9441">#9441</a>)
(<a
href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9514">#9514</a>)
by <a
href="https://github.com/IWANABETHATGUY"><code>@​IWANABETHATGUY</code></a></li>
<li>apply transform.dropLabels before scanning (<a
href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9521">#9521</a>)
(<a
href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9522">#9522</a>)
by <a
href="https://github.com/IWANABETHATGUY"><code>@​IWANABETHATGUY</code></a></li>
<li>rolldown_watcher: take <code>rolldown</code> dep through the
workspace (<a
href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9510">#9510</a>)
by <a href="https://github.com/Boshen"><code>@​Boshen</code></a></li>
<li>cache: keep the scan-stage cache consistent when a build fails (<a
href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9495">#9495</a>)
by <a href="https://github.com/h-a-n-a"><code>@​h-a-n-a</code></a></li>
<li>skip JSON default-import namespace optimization for write targets
(<a
href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9484">#9484</a>)
(<a
href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9489">#9489</a>)
by <a
href="https://github.com/IWANABETHATGUY"><code>@​IWANABETHATGUY</code></a></li>
<li>deps: skip pnpm frozen-lockfile on Netlify to dodge catalog mismatch
bug (<a
href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9471">#9471</a>)
by <a href="https://github.com/Boshen"><code>@​Boshen</code></a></li>
</ul>
<h3>🚜 Refactor</h3>
<ul>
<li>oxc-runtime: use Cow for helper path construction (<a
href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9538">#9538</a>)
by <a
href="https://github.com/IWANABETHATGUY"><code>@​IWANABETHATGUY</code></a></li>
<li>fold import defer phase drop into PreProcessor (<a
href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9524">#9524</a>)
by <a
href="https://github.com/IWANABETHATGUY"><code>@​IWANABETHATGUY</code></a></li>
<li>distinguish <code>map: null</code> vs <code>map: undefined</code> in
transform hook output (<a
href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9497">#9497</a>)
by <a
href="https://github.com/sapphi-red"><code>@​sapphi-red</code></a></li>
</ul>
<h3>📚 Documentation</h3>
<ul>
<li>explain the policy for Rust crates (<a
href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9547">#9547</a>)
by <a
href="https://github.com/sapphi-red"><code>@​sapphi-red</code></a></li>
<li>cache: add design doc for cache (<a
href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9544">#9544</a>)
by <a href="https://github.com/h-a-n-a"><code>@​h-a-n-a</code></a></li>
<li>guide/troubleshooting: add TDZ error section (<a
href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9537">#9537</a>)
by <a
href="https://github.com/sapphi-red"><code>@​sapphi-red</code></a></li>
<li>dev-engine: add design doc for dev-engine (<a
href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9479">#9479</a>)
by <a href="https://github.com/h-a-n-a"><code>@​h-a-n-a</code></a></li>
<li>lazy-barrel: tweak some words (<a
href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9483">#9483</a>)
by <a
href="https://github.com/shulaoda"><code>@​shulaoda</code></a></li>
<li>lazy-barrel: expand reasoning behind LARGE_BARREL_MODULES advice (<a
href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9477">#9477</a>)
by <a
href="https://github.com/shulaoda"><code>@​shulaoda</code></a></li>
</ul>
<h3>⚡ Performance</h3>
<ul>
<li>generate: thread ast_table by value into codegen consumer (<a
href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9555">#9555</a>)
by <a href="https://github.com/Boshen"><code>@​Boshen</code></a></li>
<li>finalizers: replace <code>_reExport</code> construction with a
direct call to avoid calling <code>clone_in</code> (<a
href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9501">#9501</a>)
by <a href="https://github.com/Dunqing"><code>@​Dunqing</code></a></li>
<li>reorder hot-path boolean checks to short-circuit on cheap predicates
first (<a
href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9523">#9523</a>)
by <a href="https://github.com/Boshen"><code>@​Boshen</code></a></li>
</ul>
<h3>🧪 Testing</h3>
<ul>
<li>rolldown: regression fixture for <a
href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9401">#9401</a>
(<a
href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9418">#9418</a>)
by <a
href="https://github.com/IWANABETHATGUY"><code>@​IWANABETHATGUY</code></a></li>
<li>failing test for <a
href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9441">#9441</a>
(<a
href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9504">#9504</a>)
by <a
href="https://github.com/TheAlexLichter"><code>@​TheAlexLichter</code></a></li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="a287faaa3d"><code>a287faa</code></a>
release: v1.0.3 (<a
href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9586">#9586</a>)</li>
<li><a
href="e3b77564d4"><code>e3b7756</code></a>
feat(transform): respect decorator strictNullChecks option (<a
href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9580">#9580</a>)</li>
<li><a
href="8326121d51"><code>8326121</code></a>
chore(deps): upgrade oxc to 0.133.0 (<a
href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9563">#9563</a>)</li>
<li><a
href="c7bbe2d4c1"><code>c7bbe2d</code></a>
fix(dev): <code>onOutput</code> called twice when initial build fails
(<a
href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9552">#9552</a>)</li>
<li><a
href="95ed7caa16"><code>95ed7ca</code></a>
fix(dev): make <code>ensureCurrentBuildFinish</code> not returning error
when engine clo...</li>
<li><a
href="f06c2a06f5"><code>f06c2a0</code></a>
fix(oxc-runtime): route require() to CJS helper variant (<a
href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9263">#9263</a>)
(<a
href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9526">#9526</a>)</li>
<li><a
href="1de499a7a7"><code>1de499a</code></a>
feat: drop <code>defer</code> keyword (<a
href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9503">#9503</a>)</li>
<li><a href=...

_Description has been truncated_

---------

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>
2026-06-02 22:52:25 +02:00
dependabot[bot]
9cda07ba9d feat(deps): bump actions/checkout from 6.0.2 to 6.0.3 (#736)
Bumps [actions/checkout](https://github.com/actions/checkout) from 6.0.2
to 6.0.3.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/actions/checkout/releases">actions/checkout's
releases</a>.</em></p>
<blockquote>
<h2>v6.0.3</h2>
<h2>What's Changed</h2>
<ul>
<li>Update changelog by <a
href="https://github.com/ericsciple"><code>@​ericsciple</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2357">actions/checkout#2357</a></li>
<li>fix: expand merge commit SHA regex and add SHA-256 test cases by <a
href="https://github.com/yaananth"><code>@​yaananth</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2414">actions/checkout#2414</a></li>
<li>Fix checkout init for SHA-256 repositories by <a
href="https://github.com/yaananth"><code>@​yaananth</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2439">actions/checkout#2439</a></li>
<li>Update changelog for v6.0.3 by <a
href="https://github.com/yaananth"><code>@​yaananth</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2446">actions/checkout#2446</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a href="https://github.com/yaananth"><code>@​yaananth</code></a>
made their first contribution in <a
href="https://redirect.github.com/actions/checkout/pull/2414">actions/checkout#2414</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/actions/checkout/compare/v6...v6.0.3">https://github.com/actions/checkout/compare/v6...v6.0.3</a></p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/actions/checkout/blob/main/CHANGELOG.md">actions/checkout's
changelog</a>.</em></p>
<blockquote>
<h1>Changelog</h1>
<h2>v6.0.3</h2>
<ul>
<li>Fix checkout init for SHA-256 repositories by <a
href="https://github.com/yaananth"><code>@​yaananth</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2439">actions/checkout#2439</a></li>
<li>fix: expand merge commit SHA regex and add SHA-256 test cases by <a
href="https://github.com/yaananth"><code>@​yaananth</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2414">actions/checkout#2414</a></li>
</ul>
<h2>v6.0.2</h2>
<ul>
<li>Fix tag handling: preserve annotations and explicit fetch-tags by <a
href="https://github.com/ericsciple"><code>@​ericsciple</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2356">actions/checkout#2356</a></li>
</ul>
<h2>v6.0.1</h2>
<ul>
<li>Add worktree support for persist-credentials includeIf by <a
href="https://github.com/ericsciple"><code>@​ericsciple</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2327">actions/checkout#2327</a></li>
</ul>
<h2>v6.0.0</h2>
<ul>
<li>Persist creds to a separate file by <a
href="https://github.com/ericsciple"><code>@​ericsciple</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2286">actions/checkout#2286</a></li>
<li>Update README to include Node.js 24 support details and requirements
by <a href="https://github.com/salmanmkc"><code>@​salmanmkc</code></a>
in <a
href="https://redirect.github.com/actions/checkout/pull/2248">actions/checkout#2248</a></li>
</ul>
<h2>v5.0.1</h2>
<ul>
<li>Port v6 cleanup to v5 by <a
href="https://github.com/ericsciple"><code>@​ericsciple</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2301">actions/checkout#2301</a></li>
</ul>
<h2>v5.0.0</h2>
<ul>
<li>Update actions checkout to use node 24 by <a
href="https://github.com/salmanmkc"><code>@​salmanmkc</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2226">actions/checkout#2226</a></li>
</ul>
<h2>v4.3.1</h2>
<ul>
<li>Port v6 cleanup to v4 by <a
href="https://github.com/ericsciple"><code>@​ericsciple</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2305">actions/checkout#2305</a></li>
</ul>
<h2>v4.3.0</h2>
<ul>
<li>docs: update README.md by <a
href="https://github.com/motss"><code>@​motss</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/1971">actions/checkout#1971</a></li>
<li>Add internal repos for checking out multiple repositories by <a
href="https://github.com/mouismail"><code>@​mouismail</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/1977">actions/checkout#1977</a></li>
<li>Documentation update - add recommended permissions to Readme by <a
href="https://github.com/benwells"><code>@​benwells</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2043">actions/checkout#2043</a></li>
<li>Adjust positioning of user email note and permissions heading by <a
href="https://github.com/joshmgross"><code>@​joshmgross</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2044">actions/checkout#2044</a></li>
<li>Update README.md by <a
href="https://github.com/nebuk89"><code>@​nebuk89</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2194">actions/checkout#2194</a></li>
<li>Update CODEOWNERS for actions by <a
href="https://github.com/TingluoHuang"><code>@​TingluoHuang</code></a>
in <a
href="https://redirect.github.com/actions/checkout/pull/2224">actions/checkout#2224</a></li>
<li>Update package dependencies by <a
href="https://github.com/salmanmkc"><code>@​salmanmkc</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2236">actions/checkout#2236</a></li>
</ul>
<h2>v4.2.2</h2>
<ul>
<li><code>url-helper.ts</code> now leverages well-known environment
variables by <a href="https://github.com/jww3"><code>@​jww3</code></a>
in <a
href="https://redirect.github.com/actions/checkout/pull/1941">actions/checkout#1941</a></li>
<li>Expand unit test coverage for <code>isGhes</code> by <a
href="https://github.com/jww3"><code>@​jww3</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/1946">actions/checkout#1946</a></li>
</ul>
<h2>v4.2.1</h2>
<ul>
<li>Check out other refs/* by commit if provided, fall back to ref by <a
href="https://github.com/orhantoy"><code>@​orhantoy</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/1924">actions/checkout#1924</a></li>
</ul>
<h2>v4.2.0</h2>
<ul>
<li>Add Ref and Commit outputs by <a
href="https://github.com/lucacome"><code>@​lucacome</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/1180">actions/checkout#1180</a></li>
<li>Dependency updates by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>- <a
href="https://redirect.github.com/actions/checkout/pull/1777">actions/checkout#1777</a>,
<a
href="https://redirect.github.com/actions/checkout/pull/1872">actions/checkout#1872</a></li>
</ul>
<h2>v4.1.7</h2>
<ul>
<li>Bump the minor-npm-dependencies group across 1 directory with 4
updates by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/1739">actions/checkout#1739</a></li>
<li>Bump actions/checkout from 3 to 4 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/1697">actions/checkout#1697</a></li>
<li>Check out other refs/* by commit by <a
href="https://github.com/orhantoy"><code>@​orhantoy</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/1774">actions/checkout#1774</a></li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="df4cb1c069"><code>df4cb1c</code></a>
Update changelog for v6.0.3 (<a
href="https://redirect.github.com/actions/checkout/issues/2446">#2446</a>)</li>
<li><a
href="1cce3390c2"><code>1cce339</code></a>
Fix checkout init for SHA-256 repositories (<a
href="https://redirect.github.com/actions/checkout/issues/2439">#2439</a>)</li>
<li><a
href="900f2210b1"><code>900f221</code></a>
fix: expand merge commit SHA regex and add SHA-256 test cases (<a
href="https://redirect.github.com/actions/checkout/issues/2414">#2414</a>)</li>
<li><a
href="0c366fd6a8"><code>0c366fd</code></a>
Update changelog (<a
href="https://redirect.github.com/actions/checkout/issues/2357">#2357</a>)</li>
<li>See full diff in <a
href="de0fac2e45...df4cb1c069">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=actions/checkout&package-manager=github_actions&previous-version=6.0.2&new-version=6.0.3)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

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 this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-06-02 21:50:48 +02:00
dependabot[bot]
51a370e4fe feat(deps-dev): bump the minor group with 2 updates (#726)
Bumps the minor group with 2 updates:
[@anthropic-ai/sdk](https://github.com/anthropics/anthropic-sdk-typescript)
and [tinyexec](https://github.com/tinylibs/tinyexec).

Updates `@anthropic-ai/sdk` from 0.100.0 to 0.100.1
<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.100.1</h2>
<h2>0.100.1 (2026-05-29)</h2>
<p>Full Changelog: <a
href="https://github.com/anthropics/anthropic-sdk-typescript/compare/sdk-v0.100.0...sdk-v0.100.1">sdk-v0.100.0...sdk-v0.100.1</a></p>
<h3>Bug Fixes</h3>
<ul>
<li><strong>streaming:</strong> carry encrypted_content on beta
compaction blocks (<a
href="https://redirect.github.com/anthropics/anthropic-sdk-typescript/issues/1025">#1025</a>)
(<a
href="eccddf3ed2">eccddf3</a>)</li>
</ul>
<h3>Chores</h3>
<ul>
<li><strong>client:</strong> update lockfiles to have proper
dependencies on standardwebhooks (<a
href="5e9b5237e5">5e9b523</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/anthropics/anthropic-sdk-typescript/blob/main/CHANGELOG.md">@​anthropic-ai/sdk's
changelog</a>.</em></p>
<blockquote>
<h2>0.100.1 (2026-05-29)</h2>
<p>Full Changelog: <a
href="https://github.com/anthropics/anthropic-sdk-typescript/compare/sdk-v0.100.0...sdk-v0.100.1">sdk-v0.100.0...sdk-v0.100.1</a></p>
<h3>Bug Fixes</h3>
<ul>
<li><strong>streaming:</strong> carry encrypted_content on beta
compaction blocks (<a
href="https://redirect.github.com/anthropics/anthropic-sdk-typescript/issues/1025">#1025</a>)
(<a
href="eccddf3ed2">eccddf3</a>)</li>
</ul>
<h3>Chores</h3>
<ul>
<li><strong>client:</strong> update lockfiles to have proper
dependencies on standardwebhooks (<a
href="5e9b5237e5">5e9b523</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="512605fa9b"><code>512605f</code></a>
chore: release main</li>
<li><a
href="d0148df188"><code>d0148df</code></a>
codegen metadata</li>
<li><a
href="4d836b47ef"><code>4d836b4</code></a>
codegen metadata</li>
<li><a
href="323e350620"><code>323e350</code></a>
codegen metadata</li>
<li><a
href="ea36df73ef"><code>ea36df7</code></a>
chore(client): update lockfiles to have proper dependencies on
standardwebhooks</li>
<li><a
href="0ea1922fad"><code>0ea1922</code></a>
codegen metadata</li>
<li><a
href="991d88f14b"><code>991d88f</code></a>
fix(streaming): carry encrypted_content on beta compaction blocks (<a
href="https://redirect.github.com/anthropics/anthropic-sdk-typescript/issues/1025">#1025</a>)</li>
<li>See full diff in <a
href="https://github.com/anthropics/anthropic-sdk-typescript/compare/sdk-v0.100.0...sdk-v0.100.1">compare
view</a></li>
</ul>
</details>
<br />

Updates `tinyexec` from 1.2.2 to 1.2.3
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/tinylibs/tinyexec/releases">tinyexec's
releases</a>.</em></p>
<blockquote>
<h2>1.2.3</h2>
<h2>What's Changed</h2>
<ul>
<li>chore(deps-dev): bump the development-dependencies group with 4
updates by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/tinylibs/tinyexec/pull/135">tinylibs/tinyexec#135</a></li>
<li>fix: destroy piped streams on child exit to prevent grandchild
deadlock by <a
href="https://github.com/Mearman"><code>@​Mearman</code></a> in <a
href="https://redirect.github.com/tinylibs/tinyexec/pull/137">tinylibs/tinyexec#137</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a href="https://github.com/Mearman"><code>@​Mearman</code></a> made
their first contribution in <a
href="https://redirect.github.com/tinylibs/tinyexec/pull/137">tinylibs/tinyexec#137</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/tinylibs/tinyexec/compare/1.2.2...1.2.3">https://github.com/tinylibs/tinyexec/compare/1.2.2...1.2.3</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="20e4117b26"><code>20e4117</code></a>
fix: destroy piped streams on child exit to prevent grandchild deadlock
(<a
href="https://redirect.github.com/tinylibs/tinyexec/issues/137">#137</a>)</li>
<li><a
href="51e4f279b6"><code>51e4f27</code></a>
chore(deps-dev): bump the development-dependencies group with 4 updates
(<a
href="https://redirect.github.com/tinylibs/tinyexec/issues/135">#135</a>)</li>
<li>See full diff in <a
href="https://github.com/tinylibs/tinyexec/compare/1.2.2...1.2.3">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>
2026-05-29 20:31:05 +02:00
acp-release-bot[bot]
edde96ebaf chore(main): release 0.39.0 (#724)
🤖 I have created a release *beep* *boop*
---


##
[0.39.0](https://github.com/agentclientprotocol/claude-agent-acp/compare/v0.38.0...v0.39.0)
(2026-05-29)


### Features

* **deps:** update Claude Agent SDK to 0.3.156
([#722](https://github.com/agentclientprotocol/claude-agent-acp/issues/722))
([3fb6db4](3fb6db4e5e))

---
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>
2026-05-29 12:12:17 +02:00
XiaoYan Li
3fb6db4e5e feat(deps): update Claude Agent SDK to 0.3.156 (#722)
## Summary

- Updates `@anthropic-ai/claude-agent-sdk` from `0.3.154` to `0.3.156`.
- Refreshes the npm lockfile entries for the SDK and its optional
platform packages.

## Why this is important

This upgrade pulls in the Claude Code `v2.1.156` fix for Opus 4.8 where
thinking blocks could be modified, leading to API errors. That makes the
dependency update important for keeping Opus 4.8 sessions stable and
avoiding request failures caused by malformed thinking block handling.

Release note:
https://github.com/anthropics/claude-code/releases/tag/v2.1.156

## Verification

- `npm run check`
- `npm run build`
- `npm run test:run`
2026-05-29 10:10:32 +00:00
Ben Brandt
41e3771881 Revert "fix: Remove hide Claude auth flag handling" (#723)
Reverts agentclientprotocol/claude-agent-acp#707
2026-05-29 12:06:08 +02:00
acp-release-bot[bot]
61ebda2c60 chore(main): release 0.38.0 (#715)
🤖 I have created a release *beep* *boop*
---


##
[0.38.0](https://github.com/agentclientprotocol/claude-agent-acp/compare/v0.37.0...v0.38.0)
(2026-05-28)


### Features

* **deps:** bump to @anthropic-ai/claude-agent-sdk 0.3.154 (Opus 4.8)
([#716](https://github.com/agentclientprotocol/claude-agent-acp/issues/716))
([a172885](a172885c80))
* Support Opus 4.8
([#718](https://github.com/agentclientprotocol/claude-agent-acp/issues/718))
([98b54a0](98b54a02c2))


### Bug Fixes

* Remove hide Claude auth flag handling
([#707](https://github.com/agentclientprotocol/claude-agent-acp/issues/707))
([7ed1daf](7ed1daf7b4))

---
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>
2026-05-28 22:08:38 +02:00
Ben Brandt
98b54a02c2 feat: Support Opus 4.8 (#718)
Trying again because the release workflow isn't working...
2026-05-28 22:05:59 +02:00
dependabot[bot]
a172885c80 feat(deps): bump to @anthropic-ai/claude-agent-sdk 0.3.154 (Opus 4.8) (#716)
Bumps the minor group with 10 updates in the / directory:

| Package | From | To |
| --- | --- | --- |
|
[@anthropic-ai/claude-agent-sdk](https://github.com/anthropics/claude-agent-sdk-typescript)
| `0.3.146` | `0.3.153` |
|
[@anthropic-ai/sdk](https://github.com/anthropics/anthropic-sdk-typescript)
| `0.97.1` | `0.99.0` |
|
[@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin)
| `8.59.4` | `8.60.0` |
|
[@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser)
| `8.59.4` | `8.60.0` |
|
[@babel/runtime](https://github.com/babel/babel/tree/HEAD/packages/babel-runtime)
| `7.29.2` | `7.29.7` |
| [es-object-atoms](https://github.com/ljharb/es-object-atoms) | `1.1.1`
| `1.1.2` |
| [eventsource-parser](https://github.com/rexxars/eventsource-parser) |
`3.0.8` | `3.1.0` |
| [hono](https://github.com/honojs/hono) | `4.12.21` | `4.12.23` |
| [semver](https://github.com/npm/node-semver) | `7.8.0` | `7.8.1` |
| [tinyexec](https://github.com/tinylibs/tinyexec) | `1.1.2` | `1.2.2` |


Updates `@anthropic-ai/claude-agent-sdk` from 0.3.146 to 0.3.153
<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.153</h2>
<h2>What's changed</h2>
<ul>
<li>Updated to parity with Claude Code v2.1.153</li>
</ul>
<h2>Update</h2>
<pre lang="sh"><code>npm install @anthropic-ai/claude-agent-sdk@0.3.153
# or
yarn add @anthropic-ai/claude-agent-sdk@0.3.153
# or
pnpm add @anthropic-ai/claude-agent-sdk@0.3.153
# or
bun add @anthropic-ai/claude-agent-sdk@0.3.153
</code></pre>
<h2>v0.3.152</h2>
<h2>What's changed</h2>
<ul>
<li><code>SessionStart</code> hooks can now return <code>reloadSkills:
true</code> to trigger a skill re-scan, and set the session title via
<code>hookSpecificOutput.sessionTitle</code></li>
<li>Added a <code>MessageDisplay</code> hook event that lets hooks
transform or hide assistant message text as it is displayed</li>
</ul>
<h2>Update</h2>
<pre lang="sh"><code>npm install @anthropic-ai/claude-agent-sdk@0.3.152
# or
yarn add @anthropic-ai/claude-agent-sdk@0.3.152
# or
pnpm add @anthropic-ai/claude-agent-sdk@0.3.152
# or
bun add @anthropic-ai/claude-agent-sdk@0.3.152
</code></pre>
<h2>v0.3.150</h2>
<h2>What's changed</h2>
<ul>
<li>Updated to parity with Claude Code v2.1.150</li>
</ul>
<h2>Update</h2>
<pre lang="sh"><code>npm install @anthropic-ai/claude-agent-sdk@0.3.150
# or
yarn add @anthropic-ai/claude-agent-sdk@0.3.150
# or
pnpm add @anthropic-ai/claude-agent-sdk@0.3.150
# or
bun add @anthropic-ai/claude-agent-sdk@0.3.150
&lt;/tr&gt;&lt;/table&gt; 
</code></pre>
</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.153</h2>
<ul>
<li>Updated to parity with Claude Code v2.1.153</li>
</ul>
<h2>0.3.152</h2>
<ul>
<li><code>SessionStart</code> hooks can now return <code>reloadSkills:
true</code> to trigger a skill re-scan, and set the session title via
<code>hookSpecificOutput.sessionTitle</code></li>
<li>Added a <code>MessageDisplay</code> hook event that lets hooks
transform or hide assistant message text as it is displayed</li>
</ul>
<h2>0.3.151</h2>
<ul>
<li>Updated to parity with Claude Code v2.1.151</li>
</ul>
<h2>0.3.150</h2>
<ul>
<li>Updated to parity with Claude Code v2.1.150</li>
</ul>
<h2>0.3.149</h2>
<ul>
<li>Fixed <code>options.env</code> dropping
<code>CLAUDE_AGENT_SDK_VERSION</code> (used for <code>User-Agent</code>
and telemetry) when a custom environment is supplied, and corrected the
<code>Options.env</code> docs to state that the value replaces the
subprocess environment rather than merging with
<code>process.env</code></li>
</ul>
<h2>0.3.148</h2>
<ul>
<li>Updated to parity with Claude Code v2.1.148</li>
</ul>
<h2>0.3.147</h2>
<ul>
<li>Updated to parity with Claude Code v2.1.147</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="8039cb0892"><code>8039cb0</code></a>
chore: Update CHANGELOG.md</li>
<li><a
href="33218719ae"><code>3321871</code></a>
chore: Update CHANGELOG.md</li>
<li><a
href="4fed972a4e"><code>4fed972</code></a>
chore: Update CHANGELOG.md</li>
<li><a
href="c15f6e270b"><code>c15f6e2</code></a>
Use workload identity federation for Claude auth in issue triage (<a
href="https://redirect.github.com/anthropics/claude-agent-sdk-typescript/issues/335">#335</a>)</li>
<li><a
href="fb2636c6ec"><code>fb2636c</code></a>
chore: Update CHANGELOG.md</li>
<li><a
href="321a105505"><code>321a105</code></a>
chore: Update CHANGELOG.md</li>
<li><a
href="bf61f4ab9a"><code>bf61f4a</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.146...v0.3.153">compare
view</a></li>
</ul>
</details>
<br />

Updates `@anthropic-ai/sdk` from 0.97.1 to 0.99.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.99.0</h2>
<h2>0.99.0 (2026-05-27)</h2>
<p>Full Changelog: <a
href="https://github.com/anthropics/anthropic-sdk-typescript/compare/sdk-v0.98.1...sdk-v0.99.0">sdk-v0.98.1...sdk-v0.99.0</a></p>
<h3>Features</h3>
<ul>
<li>support custom file size caps (<a
href="https://redirect.github.com/anthropics/anthropic-sdk-typescript/issues/1029">#1029</a>)
(<a
href="814cd4c6b5">814cd4c</a>)</li>
</ul>
<h3>Bug Fixes</h3>
<ul>
<li><strong>streaming:</strong> carry stop_details through message_delta
accumulation (<a
href="https://redirect.github.com/anthropics/anthropic-sdk-typescript/issues/1027">#1027</a>)
(<a
href="198bc277fd">198bc27</a>)</li>
</ul>
<h2>sdk: v0.98.1</h2>
<h2>0.98.1 (2026-05-26)</h2>
<p>Full Changelog: <a
href="https://github.com/anthropics/anthropic-sdk-typescript/compare/sdk-v0.98.0...sdk-v0.98.1">sdk-v0.98.0...sdk-v0.98.1</a></p>
<h3>Bug Fixes</h3>
<ul>
<li><strong>client:</strong> preserve directory prefix in
skills.versions.create uploads (<a
href="https://redirect.github.com/anthropics/anthropic-sdk-typescript/issues/1024">#1024</a>)
(<a
href="abbcd6a47d">abbcd6a</a>)</li>
</ul>
<h3>Chores</h3>
<ul>
<li><strong>client:</strong> swap to using Trusted Publishing (<a
href="821a50ef1f">821a50e</a>)</li>
<li><strong>examples:</strong> rename managed-agents
private-sandbox-worker example to self-hosted-sandbox-worker (<a
href="https://redirect.github.com/anthropics/anthropic-sdk-typescript/issues/1023">#1023</a>)
(<a
href="49fe221fe4">49fe221</a>)</li>
</ul>
<h2>sdk: v0.98.0</h2>
<h2>0.98.0 (2026-05-21)</h2>
<p>Full Changelog: <a
href="https://github.com/anthropics/anthropic-sdk-typescript/compare/sdk-v0.97.1...sdk-v0.98.0">sdk-v0.97.1...sdk-v0.98.0</a></p>
<h3>Features</h3>
<ul>
<li><strong>api:</strong> Add support for thinking-token-count beta for
estimated tokens in thinking block deltas when streaming (<a
href="0528d47b0a">0528d47</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/anthropics/anthropic-sdk-typescript/blob/main/CHANGELOG.md">@​anthropic-ai/sdk's
changelog</a>.</em></p>
<blockquote>
<h2>0.99.0 (2026-05-27)</h2>
<p>Full Changelog: <a
href="https://github.com/anthropics/anthropic-sdk-typescript/compare/sdk-v0.98.1...sdk-v0.99.0">sdk-v0.98.1...sdk-v0.99.0</a></p>
<h3>Features</h3>
<ul>
<li>support custom file size caps (<a
href="https://redirect.github.com/anthropics/anthropic-sdk-typescript/issues/1029">#1029</a>)
(<a
href="814cd4c6b5">814cd4c</a>)</li>
</ul>
<h3>Bug Fixes</h3>
<ul>
<li><strong>streaming:</strong> carry stop_details through message_delta
accumulation (<a
href="https://redirect.github.com/anthropics/anthropic-sdk-typescript/issues/1027">#1027</a>)
(<a
href="198bc277fd">198bc27</a>)</li>
</ul>
<h2>0.98.1 (2026-05-26)</h2>
<p>Full Changelog: <a
href="https://github.com/anthropics/anthropic-sdk-typescript/compare/sdk-v0.98.0...sdk-v0.98.1">sdk-v0.98.0...sdk-v0.98.1</a></p>
<h3>Bug Fixes</h3>
<ul>
<li><strong>client:</strong> preserve directory prefix in
skills.versions.create uploads (<a
href="https://redirect.github.com/anthropics/anthropic-sdk-typescript/issues/1024">#1024</a>)
(<a
href="abbcd6a47d">abbcd6a</a>)</li>
</ul>
<h3>Chores</h3>
<ul>
<li><strong>client:</strong> swap to using Trusted Publishing (<a
href="821a50ef1f">821a50e</a>)</li>
<li><strong>examples:</strong> rename managed-agents
private-sandbox-worker example to self-hosted-sandbox-worker (<a
href="https://redirect.github.com/anthropics/anthropic-sdk-typescript/issues/1023">#1023</a>)
(<a
href="49fe221fe4">49fe221</a>)</li>
</ul>
<h2>0.98.0 (2026-05-21)</h2>
<p>Full Changelog: <a
href="https://github.com/anthropics/anthropic-sdk-typescript/compare/sdk-v0.97.1...sdk-v0.98.0">sdk-v0.97.1...sdk-v0.98.0</a></p>
<h3>Features</h3>
<ul>
<li><strong>api:</strong> Add support for thinking-token-count beta for
estimated tokens in thinking block deltas when streaming (<a
href="0528d47b0a">0528d47</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="1b2500dcae"><code>1b2500d</code></a>
chore: release main</li>
<li><a
href="05304ab0ac"><code>05304ab</code></a>
ci: pin detect-breaking-changes actions to commit SHAs (<a
href="https://redirect.github.com/anthropics/anthropic-sdk-typescript/issues/1022">#1022</a>)</li>
<li><a
href="1ec38204c8"><code>1ec3820</code></a>
fix(streaming): carry stop_details through message_delta accumulation
(<a
href="https://redirect.github.com/anthropics/anthropic-sdk-typescript/issues/1027">#1027</a>)</li>
<li><a
href="8bb6782c95"><code>8bb6782</code></a>
feat: support custom file size caps (<a
href="https://redirect.github.com/anthropics/anthropic-sdk-typescript/issues/1029">#1029</a>)</li>
<li><a
href="1fe87f3747"><code>1fe87f3</code></a>
chore: release main</li>
<li><a
href="a654489537"><code>a654489</code></a>
chore(client): swap to using Trusted Publishing</li>
<li><a
href="9c5c09856e"><code>9c5c098</code></a>
fix(client): preserve directory prefix in skills.versions.create uploads
(<a
href="https://redirect.github.com/anthropics/anthropic-sdk-typescript/issues/1024">#1024</a>)</li>
<li><a
href="4dd54a9be4"><code>4dd54a9</code></a>
chore(examples): rename managed-agents private-sandbox-worker example to
self...</li>
<li><a
href="32ce8c0d08"><code>32ce8c0</code></a>
chore: release main</li>
<li><a
href="1873a96304"><code>1873a96</code></a>
feat(api): Add support for thinking-token-count beta for estimated
tokens in ...</li>
<li>See full diff in <a
href="https://github.com/anthropics/anthropic-sdk-typescript/compare/sdk-v0.97.1...sdk-v0.99.0">compare
view</a></li>
</ul>
</details>
<details>
<summary>Maintainer changes</summary>
<p>This version was pushed to npm by <a
href="https://www.npmjs.com/~GitHub%20Actions">GitHub Actions</a>, a new
releaser for <code>@​anthropic-ai/sdk</code> since your current
version.</p>
</details>
<br />

Updates `@typescript-eslint/eslint-plugin` from 8.59.4 to 8.60.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/typescript-eslint/typescript-eslint/releases">@​typescript-eslint/eslint-plugin's
releases</a>.</em></p>
<blockquote>
<h2>v8.60.0</h2>
<h2>8.60.0 (2026-05-25)</h2>
<h3>🚀 Features</h3>
<ul>
<li><strong>rule-tester:</strong> added updates of RuleTester from
upstream (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12291">#12291</a>)</li>
</ul>
<h3>🩹 Fixes</h3>
<ul>
<li>playground TS version selector is not working (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12326">#12326</a>,
<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/issues/12325">#12325</a>)</li>
</ul>
<h3>❤️ Thank You</h3>
<ul>
<li>Evyatar Daud <a
href="https://github.com/StyleShit"><code>@​StyleShit</code></a></li>
<li>Vinccool96</li>
</ul>
<p>See <a
href="https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.60.0">GitHub
Releases</a> for more information.</p>
<p>You can read about our <a
href="https://typescript-eslint.io/users/versioning">versioning
strategy</a> and <a
href="https://typescript-eslint.io/users/releases">releases</a> on our
website.</p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/CHANGELOG.md">@​typescript-eslint/eslint-plugin's
changelog</a>.</em></p>
<blockquote>
<h2>8.60.0 (2026-05-25)</h2>
<p>This was a version bump only for eslint-plugin to align it with other
projects, there were no code changes.</p>
<p>See <a
href="https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.60.0">GitHub
Releases</a> for more information.</p>
<p>You can read about our <a
href="https://typescript-eslint.io/users/versioning">versioning
strategy</a> and <a
href="https://typescript-eslint.io/users/releases">releases</a> on our
website.</p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="f891c29de5"><code>f891c29</code></a>
chore(release): publish 8.60.0</li>
<li>See full diff in <a
href="https://github.com/typescript-eslint/typescript-eslint/commits/v8.60.0/packages/eslint-plugin">compare
view</a></li>
</ul>
</details>
<br />

Updates `@typescript-eslint/parser` from 8.59.4 to 8.60.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/typescript-eslint/typescript-eslint/releases">@​typescript-eslint/parser's
releases</a>.</em></p>
<blockquote>
<h2>v8.60.0</h2>
<h2>8.60.0 (2026-05-25)</h2>
<h3>🚀 Features</h3>
<ul>
<li><strong>rule-tester:</strong> added updates of RuleTester from
upstream (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12291">#12291</a>)</li>
</ul>
<h3>🩹 Fixes</h3>
<ul>
<li>playground TS version selector is not working (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12326">#12326</a>,
<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/issues/12325">#12325</a>)</li>
</ul>
<h3>❤️ Thank You</h3>
<ul>
<li>Evyatar Daud <a
href="https://github.com/StyleShit"><code>@​StyleShit</code></a></li>
<li>Vinccool96</li>
</ul>
<p>See <a
href="https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.60.0">GitHub
Releases</a> for more information.</p>
<p>You can read about our <a
href="https://typescript-eslint.io/users/versioning">versioning
strategy</a> and <a
href="https://typescript-eslint.io/users/releases">releases</a> on our
website.</p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/parser/CHANGELOG.md">@​typescript-eslint/parser's
changelog</a>.</em></p>
<blockquote>
<h2>8.60.0 (2026-05-25)</h2>
<p>This was a version bump only for parser to align it with other
projects, there were no code changes.</p>
<p>See <a
href="https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.60.0">GitHub
Releases</a> for more information.</p>
<p>You can read about our <a
href="https://typescript-eslint.io/users/versioning">versioning
strategy</a> and <a
href="https://typescript-eslint.io/users/releases">releases</a> on our
website.</p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="f891c29de5"><code>f891c29</code></a>
chore(release): publish 8.60.0</li>
<li>See full diff in <a
href="https://github.com/typescript-eslint/typescript-eslint/commits/v8.60.0/packages/parser">compare
view</a></li>
</ul>
</details>
<br />

Updates `@anthropic-ai/claude-agent-sdk-darwin-arm64` from 0.3.146 to
0.3.153

Updates `@anthropic-ai/claude-agent-sdk-darwin-x64` from 0.3.146 to
0.3.153

Updates `@anthropic-ai/claude-agent-sdk-linux-arm64` from 0.3.146 to
0.3.153

Updates `@anthropic-ai/claude-agent-sdk-linux-arm64-musl` from 0.3.146
to 0.3.153

Updates `@anthropic-ai/claude-agent-sdk-linux-x64` from 0.3.146 to
0.3.153

Updates `@anthropic-ai/claude-agent-sdk-linux-x64-musl` from 0.3.146 to
0.3.153

Updates `@anthropic-ai/claude-agent-sdk-win32-arm64` from 0.3.146 to
0.3.153

Updates `@anthropic-ai/claude-agent-sdk-win32-x64` from 0.3.146 to
0.3.153

Updates `@babel/runtime` from 7.29.2 to 7.29.7
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/babel/babel/releases">@​babel/runtime's
releases</a>.</em></p>
<blockquote>
<h2>v7.29.7 (2026-05-25)</h2>
<p>Re-release all packages with npm provenance attestations</p>
<h2>v7.29.6 (2026-05-25)</h2>
<h4>🐛 Bug Fix</h4>
<ul>
<li><code>babel-generator</code>
<ul>
<li><a
href="https://redirect.github.com/babel/babel/pull/18014">#18014</a>
Catchup source map position in preserveFormat (<a
href="https://github.com/nicolo-ribaudo"><code>@​nicolo-ribaudo</code></a>)</li>
</ul>
</li>
<li><code>babel-core</code>
<ul>
<li><a
href="https://redirect.github.com/babel/babel/pull/18001">#18001</a>
[7.x packport]Improve input source map handling (<a
href="https://github.com/JLHwung"><code>@​JLHwung</code></a>)</li>
</ul>
</li>
<li><code>babel-core</code>, <code>babel-generator</code>
<ul>
<li><a
href="https://redirect.github.com/babel/babel/pull/17998">#17998</a>
Preserve original identifier names from input sourcemaps (<a
href="https://github.com/babel/babel/tree/HEAD/packages/babel-runtime/issues/17992">#17992</a>)
(<a href="https://github.com/Andarist"><code>@​Andarist</code></a>)</li>
</ul>
</li>
</ul>
<h4>Committers: 3</h4>
<ul>
<li>Huáng Jùnliàng (<a
href="https://github.com/JLHwung"><code>@​JLHwung</code></a>)</li>
<li>Mateusz Burzyński (<a
href="https://github.com/Andarist"><code>@​Andarist</code></a>)</li>
<li>Nicolò Ribaudo (<a
href="https://github.com/nicolo-ribaudo"><code>@​nicolo-ribaudo</code></a>)</li>
</ul>
<h2>v7.29.5 (2026-05-05)</h2>
<h4>🏠  Internal</h4>
<ul>
<li><code>babel-preset-env</code>
<ul>
<li>Update <code>@babel/*</code> dependencies</li>
</ul>
</li>
</ul>
<h2>v7.29.4 (2026-05-05)</h2>
<h4>🐛 Bug Fix</h4>
<ul>
<li><code>babel-plugin-transform-modules-systemjs</code>
<ul>
<li><a
href="https://redirect.github.com/babel/babel/pull/17974">#17974</a>
[7.x backport]fix(systemjs): improve module string name support (<a
href="https://github.com/JLHwung"><code>@​JLHwung</code></a>)</li>
</ul>
</li>
</ul>
<h4>Committers: 1</h4>
<ul>
<li>Huáng Jùnliàng (<a
href="https://github.com/JLHwung"><code>@​JLHwung</code></a>)</li>
</ul>
<h2>v7.29.3 (2026-04-30)</h2>
<h4>👓 Spec Compliance</h4>
<ul>
<li><code>babel-parser</code>
<ul>
<li><a
href="https://redirect.github.com/babel/babel/pull/17923">#17923</a>
Support flow extends bound (<a
href="https://github.com/JLHwung"><code>@​JLHwung</code></a>)</li>
</ul>
</li>
</ul>
<h4>🐛 Bug Fix</h4>
<ul>
<li><code>babel-helper-create-class-features-plugin</code>,
<code>babel-plugin-proposal-decorators</code>
<ul>
<li><a
href="https://redirect.github.com/babel/babel/pull/17931">#17931</a>
fix(decorators): replace super within all removed static elements (<a
href="https://github.com/JLHwung"><code>@​JLHwung</code></a>)</li>
</ul>
</li>
<li><code>babel-register</code>
<ul>
<li><a
href="https://redirect.github.com/babel/babel/pull/17915">#17915</a> Fix
thread synchronization issues in <code>@babel/register</code> (<a
href="https://github.com/liuxingbaoyu"><code>@​liuxingbaoyu</code></a>)</li>
</ul>
</li>
<li><code>babel-compat-data</code>,
<code>babel-plugin-bugfix-safari-rest-destructuring-rhs-array</code>,
<code>babel-preset-env</code>
<ul>
<li><a
href="https://redirect.github.com/babel/babel/pull/17788">#17788</a> Add
bugfix plugin for Safari array rest destructuring bug (<a
href="https://github.com/JLHwung"><code>@​JLHwung</code></a>)</li>
</ul>
</li>
</ul>
<h4>💅 Polish</h4>
<ul>
<li><code>babel-parser</code></li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="4fba754118"><code>4fba754</code></a>
v7.29.7</li>
<li>See full diff in <a
href="https://github.com/babel/babel/commits/v7.29.7/packages/babel-runtime">compare
view</a></li>
</ul>
</details>
<br />

Updates `@typescript-eslint/project-service` from 8.59.4 to 8.60.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/typescript-eslint/typescript-eslint/releases">@​typescript-eslint/project-service's
releases</a>.</em></p>
<blockquote>
<h2>v8.60.0</h2>
<h2>8.60.0 (2026-05-25)</h2>
<h3>🚀 Features</h3>
<ul>
<li><strong>rule-tester:</strong> added updates of RuleTester from
upstream (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12291">#12291</a>)</li>
</ul>
<h3>🩹 Fixes</h3>
<ul>
<li>playground TS version selector is not working (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12326">#12326</a>,
<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/issues/12325">#12325</a>)</li>
</ul>
<h3>❤️ Thank You</h3>
<ul>
<li>Evyatar Daud <a
href="https://github.com/StyleShit"><code>@​StyleShit</code></a></li>
<li>Vinccool96</li>
</ul>
<p>See <a
href="https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.60.0">GitHub
Releases</a> for more information.</p>
<p>You can read about our <a
href="https://typescript-eslint.io/users/versioning">versioning
strategy</a> and <a
href="https://typescript-eslint.io/users/releases">releases</a> on our
website.</p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/project-service/CHANGELOG.md">@​typescript-eslint/project-service's
changelog</a>.</em></p>
<blockquote>
<h2>8.60.0 (2026-05-25)</h2>
<p>This was a version bump only for project-service to align it with
other projects, there were no code changes.</p>
<p>See <a
href="https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.60.0">GitHub
Releases</a> for more information.</p>
<p>You can read about our <a
href="https://typescript-eslint.io/users/versioning">versioning
strategy</a> and <a
href="https://typescript-eslint.io/users/releases">releases</a> on our
website.</p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="f891c29de5"><code>f891c29</code></a>
chore(release): publish 8.60.0</li>
<li>See full diff in <a
href="https://github.com/typescript-eslint/typescript-eslint/commits/v8.60.0/packages/project-service">compare
view</a></li>
</ul>
</details>
<br />

Updates `@typescript-eslint/scope-manager` from 8.59.4 to 8.60.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/typescript-eslint/typescript-eslint/releases">@​typescript-eslint/scope-manager's
releases</a>.</em></p>
<blockquote>
<h2>v8.60.0</h2>
<h2>8.60.0 (2026-05-25)</h2>
<h3>🚀 Features</h3>
<ul>
<li><strong>rule-tester:</strong> added updates of RuleTester from
upstream (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12291">#12291</a>)</li>
</ul>
<h3>🩹 Fixes</h3>
<ul>
<li>playground TS version selector is not working (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12326">#12326</a>,
<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/issues/12325">#12325</a>)</li>
</ul>
<h3>❤️ Thank You</h3>
<ul>
<li>Evyatar Daud <a
href="https://github.com/StyleShit"><code>@​StyleShit</code></a></li>
<li>Vinccool96</li>
</ul>
<p>See <a
href="https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.60.0">GitHub
Releases</a> for more information.</p>
<p>You can read about our <a
href="https://typescript-eslint.io/users/versioning">versioning
strategy</a> and <a
href="https://typescript-eslint.io/users/releases">releases</a> on our
website.</p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/scope-manager/CHANGELOG.md">@​typescript-eslint/scope-manager's
changelog</a>.</em></p>
<blockquote>
<h2>8.60.0 (2026-05-25)</h2>
<p>This was a version bump only for scope-manager to align it with other
projects, there were no code changes.</p>
<p>See <a
href="https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.60.0">GitHub
Releases</a> for more information.</p>
<p>You can read about our <a
href="https://typescript-eslint.io/users/versioning">versioning
strategy</a> and <a
href="https://typescript-eslint.io/users/releases">releases</a> on our
website.</p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="f891c29de5"><code>f891c29</code></a>
chore(release): publish 8.60.0</li>
<li>See full diff in <a
href="https://github.com/typescript-eslint/typescript-eslint/commits/v8.60.0/packages/scope-manager">compare
view</a></li>
</ul>
</details>
<br />

Updates `@typescript-eslint/tsconfig-utils` from 8.59.4 to 8.60.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/typescript-eslint/typescript-eslint/releases">@​typescript-eslint/tsconfig-utils's
releases</a>.</em></p>
<blockquote>
<h2>v8.60.0</h2>
<h2>8.60.0 (2026-05-25)</h2>
<h3>🚀 Features</h3>
<ul>
<li><strong>rule-tester:</strong> added updates of RuleTester from
upstream (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12291">#12291</a>)</li>
</ul>
<h3>🩹 Fixes</h3>
<ul>
<li>playground TS version selector is not working (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12326">#12326</a>,
<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/issues/12325">#12325</a>)</li>
</ul>
<h3>❤️ Thank You</h3>
<ul>
<li>Evyatar Daud <a
href="https://github.com/StyleShit"><code>@​StyleShit</code></a></li>
<li>Vinccool96</li>
</ul>
<p>See <a
href="https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.60.0">GitHub
Releases</a> for more information.</p>
<p>You can read about our <a
href="https://typescript-eslint.io/users/versioning">versioning
strategy</a> and <a
href="https://typescript-eslint.io/users/releases">releases</a> on our
website.</p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/tsconfig-utils/CHANGELOG.md">@​typescript-eslint/tsconfig-utils's
changelog</a>.</em></p>
<blockquote>
<h2>8.60.0 (2026-05-25)</h2>
<p>This was a version bump only for tsconfig-utils to align it with
other projects, there were no code changes.</p>
<p>See <a
href="https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.60.0">GitHub
Releases</a> for more information.</p>
<p>You can read about our <a
href="https://typescript-eslint.io/users/versioning">versioning
strategy</a> and <a
href="https://typescript-eslint.io/users/releases">releases</a> on our
website.</p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="f891c29de5"><code>f891c29</code></a>
chore(release): publish 8.60.0</li>
<li>See full diff in <a
href="https://github.com/typescript-eslint/typescript-eslint/commits/v8.60.0/packages/tsconfig-utils">compare
view</a></li>
</ul>
</details>
<br />

Updates `@typescript-eslint/type-utils` from 8.59.4 to 8.60.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/typescript-eslint/typescript-eslint/releases">@​typescript-eslint/type-utils's
releases</a>.</em></p>
<blockquote>
<h2>v8.60.0</h2>
<h2>8.60.0 (2026-05-25)</h2>
<h3>🚀 Features</h3>
<ul>
<li><strong>rule-tester:</strong> added updates of RuleTester from
upstream (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12291">#12291</a>)</li>
</ul>
<h3>🩹 Fixes</h3>
<ul>
<li>playground TS version selector is not working (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12326">#12326</a>,
<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/issues/12325">#12325</a>)</li>
</ul>
<h3>❤️ Thank You</h3>
<ul>
<li>Evyatar Daud <a
href="https://github.com/StyleShit"><code>@​StyleShit</code></a></li>
<li>Vinccool96</li>
</ul>
<p>See <a
href="https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.60.0">GitHub
Releases</a> for more information.</p>
<p>You can read about our <a
href="https://typescript-eslint.io/users/versioning">versioning
strategy</a> and <a
href="https://typescript-eslint.io/users/releases">releases</a> on our
website.</p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/type-utils/CHANGELOG.md">@​typescript-eslint/type-utils's
changelog</a>.</em></p>
<blockquote>
<h2>8.60.0 (2026-05-25)</h2>
<p>This was a version bump only for type-utils to align it with other
projects, there were no code changes.</p>
<p>See <a
href="https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.60.0">GitHub
Releases</a> for more information.</p>
<p>You can read about our <a
href="https://typescript-eslint.io/users/versioning">versioning
strategy</a> and <a
href="https://typescript-eslint.io/users/releases">releases</a> on our
website.</p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="f891c29de5"><code>f891c29</code></a>
chore(release): publish 8.60.0</li>
<li>See full diff in <a
href="https://github.com/typescript-eslint/typescript-eslint/commits/v8.60.0/packages/type-utils">compare
view</a></li>
</ul>
</details>
<br />

Updates `@typescript-eslint/types` from 8.59.4 to 8.60.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/typescript-eslint/typescript-eslint/releases">@​typescript-eslint/types's
releases</a>.</em></p>
<blockquote>
<h2>v8.60.0</h2>
<h2>8.60.0 (2026-05-25)</h2>
<h3>🚀 Features</h3>
<ul>
<li><strong>rule-tester:</strong> added updates of RuleTester from
upstream (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12291">#12291</a>)</li>
</ul>
<h3>🩹 Fixes</h3>
<ul>
<li>playground TS version selector is not working (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12326">#12326</a>,
<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/issues/12325">#12325</a>)</li>
</ul>
<h3>❤️ Thank You</h3>
<ul>
<li>Evyatar Daud <a
href="https://github.com/StyleShit"><code>@​StyleShit</code></a></li>
<li>Vinccool96</li>
</ul>
<p>See <a
href="https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.60.0">GitHub
Releases</a> for more information.</p>
<p>You can read about our <a
href="https://typescript-eslint.io/users/versioning">versioning
strategy</a> and <a
href="https://typescript-eslint.io/users/releases">releases</a> on our
website.</p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/types/CHANGELOG.md">@​typescript-eslint/types's
changelog</a>.</em></p>
<blockquote>
<h2>8.60.0 (2026-05-25)</h2>
<p>This was a version bump only for types to align it with other
projects, there were no code changes.</p>
<p>See <a
href="https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.60.0">GitHub
Releases</a> for more information.</p>
<p>You can read about our <a
href="https://typescript-eslint.io/users/versioning">versioning
strategy</a> and <a
href="https://typescript-eslint.io/users/releases">releases</a> on our
website.</p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="f891c29de5"><code>f891c29</code></a>
chore(release): publish 8.60.0</li>
<li>See full diff in <a
href="https://github.com/typescript-eslint/typescript-eslint/commits/v8.60.0/packages/types">compare
view</a></li>
</ul>
</details>
<br />

Updates `@typescript-eslint/typescript-estree` from 8.59.4 to 8.60.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/typescript-eslint/typescript-eslint/releases">@​typescript-eslint/typescript-estree's
releases</a>.</em></p>
<blockquote>
<h2>v8.60.0</h2>
<h2>8.60.0 (2026-05-25)</h2>
<h3>🚀 Features</h3>
<ul>
<li><strong>rule-tester:</strong> added updates of RuleTester from
upstream (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12291">#12291</a>)</li>
</ul>
<h3>🩹 Fixes</h3>
<ul>
<li>playground TS version selector is not working (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12326">#12326</a>,
<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/issues/12325">#12325</a>)</li>
</ul>
<h3>❤️ Thank You</h3>
<ul>
<li>Evyatar Daud <a
href="https://github.com/StyleShit"><code>@​StyleShit</code></a></li>
<li>Vinccool96</li>
</ul>
<p>See <a
href="https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.60.0">GitHub
Releases</a> for more information.</p>
<p>You can read about our <a
href="https://typescript-eslint.io/users/versioning">versioning
strategy</a> and <a
href="https://typescript-eslint.io/users/releases">releases</a> on our
website.</p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-estree/CHANGELOG.md">@​typescript-eslint/typescript-estree's
changelog</a>.</em></p>
<blockquote>
<h2>8.60.0 (2026-05-25)</h2>
<h3>🩹 Fixes</h3>
<ul>
<li>playground TS version selector is not working (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12326">#12326</a>,
<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/issues/12325">#12325</a>)</li>
</ul>
<h3>❤️ Thank You</h3>
<ul>
<li>Evyatar Daud <a
href="https://github.com/StyleShit"><code>@​StyleShit</code></a></li>
</ul>
<p>See <a
href="https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.60.0">GitHub
Releases</a> for more information.</p>
<p>You can read about our <a
href="https://typescript-eslint.io/users/versioning">versioning
strategy</a> and <a
href="https://typescript-eslint.io/users/releases">releases</a> on our
website.</p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="f891c29de5"><code>f891c29</code></a>
chore(release): publish 8.60.0</li>
<li><a
href="b02883f702"><code>b02883f</code></a>
fix: playground TS version selector is not working (<a
href="https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-estree/issues/12326">#12326</a>)</li>
<li>See full diff in <a
href="https://github.com/typescript-eslint/typescript-eslint/commits/v8.60.0/packages/typescript-estree">compare
view</a></li>
</ul>
</details>
<br />

Updates `@typescript-eslint/utils` from 8.59.4 to 8.60.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/typescript-eslint/typescript-eslint/releases">@​typescript-eslint/utils's
releases</a>.</em></p>
<blockquote>
<h2>v8.60.0</h2>
<h2>8.60.0 (2026-05-25)</h2>
<h3>🚀 Features</h3>
<ul>
<li><strong>rule-tester:</strong> added updates of RuleTester from
upstream (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12291">#12291</a>)</li>
</ul>
<h3>🩹 Fixes</h3>
<ul>
<li>playground TS version selector is not working (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12326">#12326</a>,
<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/issues/12325">#12325</a>)</li>
</ul>
<h3>❤️ Thank You</h3>
<ul>
<li>Evyatar Daud <a
href="https://github.com/StyleShit"><code>@​StyleShit</code></a></li>
<li>Vinccool96</li>
</ul>
<p>See <a
href="https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.60.0">GitHub
Releases</a> for more information.</p>
<p>You can read about our <a
href="https://typescript-eslint.io/users/versioning">versioning
strategy</a> and <a
href="https://typescript-eslint.io/users/releases">releases</a> on our
website.</p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/utils/CHANGELOG.md">@​typescript-eslint/utils's
changelog</a>.</em></p>
<blockquote>
<h2>8.60.0 (2026-05-25)</h2>
<p>This was a version bump only for utils to align it with other
projects, there were no code changes.</p>
<p>See <a
href="https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.60.0">GitHub
Releases</a> for more information.</p>
<p>You can read about our <a
href="https://typescript-eslint.io/users/versioning">versioning
strategy</a> and <a
href="https://typescript-eslint.io/users/releases">releases</a> on our
website.</p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="f891c29de5"><code>f891c29</code></a>
chore(release): publish 8.60.0</li>
<li>See full diff in <a
href="https://github.com/typescript-eslint/typescript-eslint/commits/v8.60.0/packages/utils">compare
view</a></li>
</ul>
</details>
<br />

Updates `@typescript-eslint/visitor-keys` from 8.59.4 to 8.60.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/typescript-eslint/typescript-eslint/releases">@​typescript-eslint/visitor-keys's
releases</a>.</em></p>
<blockquote>
<h2>v8.60.0</h2>
<h2>8.60.0 (2026-05-25)</h2>
<h3>🚀 Features</h3>
<ul>
<li><strong>rule-tester:</strong> added updates of RuleTester from
upstream (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12291">#12291</a>)</li>
</ul>
<h3>🩹 Fixes</h3>
<ul>
<li>playground TS version selector is not working (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12326">#12326</a>,
<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/issues/12325">#12325</a>)</li>
</ul>
<h3>❤️ Thank You</h3>
<ul>
<li>Evyatar Daud <a
href="https://github.com/StyleShit"><code>@​StyleShit</code></a></li>
<li>Vinccool96</li>
</ul>
<p>See <a
href="https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.60.0">GitHub
Releases</a> for more information.</p>
<p>You can read about our <a
href="https://typescript-eslint.io/users/versioning">versioning
strategy</a> and <a
href="https://typescript-eslint.io/users/releases">releases</a> on our
website.</p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/visitor-keys/CHANGELOG.md">@​typescript-eslint/visitor-keys's
changelog</a>.</em></p>
<blockquote>
<h2>8.60.0 (2026-05-25)</h2>
<p>This was a version bump only for visitor-keys to align it with other
projects, there were no code changes.</p>
<p>See <a
href="https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.60.0">GitHub
Releases</a> for more information.</p>
<p>You can read about our <a
href="https://typescript-eslint.io/users/versioning">versioning
strategy</a> and <a
href="https://typescript-eslint.io/users/releases">releases</a> on our
website.</p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="f891c29de5"><code>f891c29</code></a>
chore(release): publish 8.60.0</li>
<li>See full diff in <a
href="https://github.com/typescript-eslint/typescript-eslint/commits/v8.60.0/packages/visitor-keys">compare
view</a></li>
</ul>
</details>
<br />

Updates `es-object-atoms` from 1.1.1 to 1.1.2
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/es-shims/es-object-atoms/blob/main/CHANGELOG.md">es-object-atoms's
changelog</a>.</em></p>
<blockquote>
<h2><a
href="https://github.com/es-shims/es-object-atoms/compare/v1.1.1...v1.1.2">v1.1.2</a>
- 2026-05-22</h2>
<h3>Commits</h3>
<ul>
<li>[Dev Deps] update <code>@ljharb/eslint-config</code>,
<code>@ljharb/tsconfig</code>, <code>auto-changelog</code>,
<code>eslint</code>, <code>npmignore</code> <a
href="41e3d94f6b"><code>41e3d94</code></a></li>
<li>[types] improve <code>isObject</code> type <a
href="758edc2280"><code>758edc2</code></a></li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="9e62644a85"><code>9e62644</code></a>
v1.1.2</li>
<li><a
href="41e3d94f6b"><code>41e3d94</code></a>
[Dev Deps] update <code>@ljharb/eslint-config</code>,
<code>@ljharb/tsconfig</code>, `auto-changelo...</li>
<li><a
href="758edc2280"><code>758edc2</code></a>
[types] improve <code>isObject</code> type</li>
<li>See full diff in <a
href="https://github.com/ljharb/es-object-atoms/compare/v1.1.1...v1.1.2">compare
view</a></li>
</ul>
</details>
<br />

Updates `eventsource-parser` from 3.0.8 to 3.1.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/rexxars/eventsource-parser/releases">eventsource-parser's
releases</a>.</em></p>
<blockquote>
<h2>v3.1.0</h2>
<h2><a
href="https://github.com/rexxars/eventsource-parser/compare/v3.0.8...v3.1.0">3.1.0</a>
(2026-05-27)</h2>
<h3>Features</h3>
<ul>
<li>add <code>maxBufferSize</code> option (<a
href="https://redirect.github.com/rexxars/eventsource-parser/issues/32">#32</a>)
(<a
href="9bbcd0746d">9bbcd07</a>)</li>
</ul>
<hr />
<p>This release is also available on:</p>
<ul>
<li><a
href="https://www.npmjs.com/package/eventsource-parser/v/3.1.0"><code>npm
package (@​latest dist-tag)</code></a></li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/rexxars/eventsource-parser/blob/main/CHANGELOG.md">eventsource-parser's
changelog</a>.</em></p>
<blockquote>
<h2><a
href="https://github.com/rexxars/eventsource-parser/compare/v3.0.8...v3.1.0">3.1.0</a>
(2026-05-27)</h2>
<h3>Features</h3>
<ul>
<li>add <code>maxBufferSize</code> option (<a
href="https://redirect.github.com/rexxars/eventsource-parser/issues/32">#32</a>)
(<a
href="9bbcd0746d">9bbcd07</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="83db3dec52"><code>83db3de</code></a>
chore(release): 3.1.0 [skip ci]</li>
<li><a
href="9bbcd0746d"><code>9bbcd07</code></a>
feat: add <code>maxBufferSize</code> option (<a
href="https://redirect.github.com/rexxars/eventsource-parser/issues/32">#32</a>)</li>
<li><a
href="f5cafc0644"><code>f5cafc0</code></a>
chore: update lockfiles</li>
<li><a
href="9099f5ed4d"><code>9099f5e</code></a>
chore: upgrade dev dependencies</li>
<li>See full diff in <a
href="https://github.com/rexxars/eventsource-parser/compare/v3.0.8...v3.1.0">compare
view</a></li>
</ul>
</details>
<br />

Updates `hono` from 4.12.21 to 4.12.23
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/honojs/hono/releases">hono's
releases</a>.</em></p>
<blockquote>
<h2>v4.12.23</h2>
<h2>What's Changed</h2>
<ul>
<li>fix(serve-static): normalize all backslashes in file paths, not just
the first in <a
href="https://redirect.github.com/honojs/hono/pull/4962">honojs/hono#4962</a></li>
<li>feat(context): export the Context class publicly by <a
href="https://github.com/BlankParticle"><code>@​BlankParticle</code></a>
in <a
href="https://redirect.github.com/honojs/hono/pull/4543">honojs/hono#4543</a></li>
<li>docs(contribution): add AI Usage Policy by <a
href="https://github.com/yusukebe"><code>@​yusukebe</code></a> in <a
href="https://redirect.github.com/honojs/hono/pull/4970">honojs/hono#4970</a></li>
<li>feat(compress): add contentTypeFilter option and
<code>COMPRESSIBLE_CONTENT_TYPE_REGEX</code> re-export by <a
href="https://github.com/na-trium-144"><code>@​na-trium-144</code></a>
in <a
href="https://redirect.github.com/honojs/hono/pull/4961">honojs/hono#4961</a></li>
<li>fix(utils/ipaddr): do not compress a single 0 group to
<code>::</code> by <a
href="https://github.com/yusukebe"><code>@​yusukebe</code></a> in <a
href="https://redirect.github.com/honojs/hono/pull/4971">honojs/hono#4971</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/honojs/hono/compare/v4.12.22...v4.12.23">https://github.com/honojs/hono/compare/v4.12.22...v4.12.23</a></p>
<h2>v4.12.22</h2>
<h2>What's Changed</h2>
<ul>
<li>chore: update vitest to v4 and cleanups by <a
href="https://github.com/BlankParticle"><code>@​BlankParticle</code></a>
in <a
href="https://redirect.github.com/honojs/hono/pull/4952">honojs/hono#4952</a></li>
<li>fix(mime): specify charset parameter per MIME type instead of
mechanical detection by <a
href="https://github.com/renatograsso10"><code>@​renatograsso10</code></a>
in <a
href="https://redirect.github.com/honojs/hono/pull/4912">honojs/hono#4912</a></li>
<li>fix(compress): respect Accept-Encoding when encoding option is set
by <a href="https://github.com/LeSingh1"><code>@​LeSingh1</code></a> in
<a
href="https://redirect.github.com/honojs/hono/pull/4951">honojs/hono#4951</a></li>
<li>fix(deno): echo negotiated WebSocket subprotocol in upgrade response
by <a href="https://github.com/ATOM00blue"><code>@​ATOM00blue</code></a>
in <a
href="https://redirect.github.com/honojs/hono/pull/4955">honojs/hono#4955</a></li>
<li>feat: add msgpack as a compressible content type by <a
href="https://github.com/na-trium-144"><code>@​na-trium-144</code></a>
in <a
href="https://redirect.github.com/honojs/hono/pull/4957">honojs/hono#4957</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a
href="https://github.com/renatograsso10"><code>@​renatograsso10</code></a>
made their first contribution in <a
href="https://redirect.github.com/honojs/hono/pull/4912">honojs/hono#4912</a></li>
<li><a href="https://github.com/LeSingh1"><code>@​LeSingh1</code></a>
made their first contribution in <a
href="https://redirect.github.com/honojs/hono/pull/4951">honojs/hono#4951</a></li>
<li><a
href="https://github.com/ATOM00blue"><code>@​ATOM00blue</code></a> made
their first contribution in <a
href="https://redirect.github.com/honojs/hono/pull/4955">honojs/hono#4955</a></li>
<li><a
href="https://github.com/na-trium-144"><code>@​na-trium-144</code></a>
made their first contribution in <a
href="https://redirect.github.com/honojs/hono/pull/4957">honojs/hono#4957</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/honojs/hono/compare/v4.12.21...v4.12.22">https://github.com/honojs/hono/compare/v4.12.21...v4.12.22</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="83bfb3bb4a"><code>83bfb3b</code></a>
4.12.23</li>
<li><a
href="bcd290a64c"><code>bcd290a</code></a>
fix(utils/ipaddr): do not compress a single 0 group to <code>::</code>
(<a
href="https://redirect.github.com/honojs/hono/issues/4971">#4971</a>)</li>
<li><a
href="c968177d9c"><code>c968177</code></a>
feat(compress): add contentTypeFilter option and
`COMPRESSIBLE_CONTENT_TYPE_R...</li>
<li><a
href="0265a5453a"><code>0265a54</code></a>
docs(contribution): add AI Usage Policy (<a
href="https://redirect.github.com/honojs/hono/issues/4970">#4970</a>)</li>
<li><a
href="c84c5d2d46"><code>c84c5d2</code></a>
feat(context): export the Context class publicly (<a
href="https://redirect.github.com/honojs/hono/issues/4543">#4543</a>)</li>
<li><a
href="82dad6297c"><code>82dad62</code></a>
fix(serve-static): normalize all backslashes in file paths, not just the
firs...</li>
<li><a
href="2f01b774b1"><code>2f01b77</code></a>
4.12.22</li>
<li><a
href="6bc0dff277"><code>6bc0dff</code></a>
feat: add msgpack as a compressible content type (<a
href="https://redirect.github.com/honojs/hono/issues/4957">#4957</a>)</li>
<li><a
href="7e0555d14c"><code>7e0555d</code></a>
fix(deno): echo negotiated WebSocket subprotocol in upgrade response (<a
href="https://redirect.github.com/honojs/hono/issues/4955">#4955</a>)</li>
<li><a
href="f0ed246591"><code>f0ed246</code></a>
fix(compress): respect Accept-Encoding when encoding option is set (<a
href="https://redirect.github.com/honojs/hono/issues/4951">#4951</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/honojs/hono/compare/v4.12.21...v4.12.23">compare
view</a></li>
</ul>
</details>
<br />

Updates `semver` from 7.8.0 to 7.8.1
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/npm/node-semver/releases">semver's
releases</a>.</em></p>
<blockquote>
<h2>v7.8.1</h2>
<h2><a
href="https://github.com/npm/node-semver/compare/v7.8.0...v7.8.1">7.8.1</a>
(2026-05-21)</h2>
<h3>Bug Fixes</h3>
<ul>
<li><a
href="17aa702d91"><code>17aa702</code></a>
<a href="https://redirect.github.com/npm/node-semver/pull/869">#869</a>
strip build metadata before comparator trimming (<a
href="https://redirect.github.com/npm/node-semver/issues/869">#869</a>)
(<a
href="https://github.com/owlstronaut"><code>@​owlstronaut</code></a>)</li>
<li><a
href="5f3ca133e0"><code>5f3ca13</code></a>
<a href="https://redirect.github.com/npm/node-semver/pull/867">#867</a>
handle prerelease bounds in subset (<a
href="https://redirect.github.com/npm/node-semver/issues/867">#867</a>)
(<a
href="https://github.com/puneetdixit200"><code>@​puneetdixit200</code></a>,
Puneet Dixit)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/npm/node-semver/blob/main/CHANGELOG.md">semver's
changelog</a>.</em></p>
<blockquote>
<h2><a
href="https://github.com/npm/node-semver/compare/v7.8.0...v7.8.1">7.8.1</a>
(2026-05-21)</h2>
<h3>Bug Fixes</h3>
<ul>
<li><a
href="17aa702d91"><code>17aa702</code></a>
<a href="https://redirect.github.com/npm/node-semver/pull/869">#869</a>
strip build metadata before comparator trimming (<a
href="https://redirect.github.com/npm/node-semver/issues/869">#869</a>)
(<a
href="https://github.com/owlstronaut"><code>@​owlstronaut</code></a>)</li>
<li><a
href="5f3ca133e0"><code>5f3ca13</code></a>
<a href="https://redirect.github.com/npm/node-semver/pull/867">#867</a>
handle prerelease bounds in subset (<a
href="https://redirect.github.com/npm/node-semver/issues/867">#867</a>)
(<a
href="https://github.com/puneetdixit200"><code>@​puneetdixit200</code></a>,
Puneet Dixit)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="76416081a8"><code>7641608</code></a>
chore: release 7.8.1 (<a
href="https://redirect.github.com/npm/node-semver/issues/868">#868</a>)</li>
<li><a
href="17aa702d91"><code>17aa702</code></a>
fix: strip build metadata before comparator trimming (<a
href="https://redirect.github.com/npm/node-semver/issues/869">#869</a>)</li>
<li><a
href="5f3ca133e0"><code>5f3ca13</code></a>
fix: handle prerelease bounds in subset (<a
href="https://redirect.github.com/npm/node-semver/issues/867">#867</a>)</li>
<li>See full diff in <a
href="https://github.com/npm/node-semver/compare/v7.8.0...v7.8.1">compare
view</a></li>
</ul>
</details>
<br />

Updates `tinyexec` from 1.1.2 to 1.2.2
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/tinylibs/tinyexec/releases">tinyexec's
releases</a>.</em></p>
<blockquote>
<h2>1.2.2</h2>
<h2>What's Changed</h2>
<ul>
<li>fix: correct shebang regex by <a
href="https://github.com/43081j"><code>@​43081j</code></a> in <a
href="https://redirect.github.com/tinylibs/tinyexec/pull/134">tinylibs/tinyexec#134</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/tinylibs/tinyexec/compare/1.2.1...1.2.2">https://github.com/tinylibs/tinyexec/compare/1.2.1...1.2.2</a></p>
<h2>1.2.1</h2>
<h2>What's Changed</h2>
<ul>
<li>test: add async throw tests by <a
href="https://github.com/43081j"><code>@​43081j</code></a> in <a
href="https://redirect.github.com/tinylibs/tinyexec/pull/133">tinylibs/tinyexec#133</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/tinylibs/tinyexec/compare/1.2.0...1.2.1">https://github.com/tinylibs/tinyexec/compare/1.2.0...1.2.1</a></p>
<h2>1.2.0</h2>
<h2>What's Changed</h2>
<ul>
<li>refactor: inline parse by <a
href="https://github.com/hyperz111"><code>@​hyperz111</code></a> in <a
href="https://redirect.github.com/tinylibs/tinyexec/pull/100">tinylibs/tinyexec#100</a></li>
<li>chore: check types on lint by <a
href="https://github.com/43081j"><code>@​43081j</code></a> in <a
href="https://redirect.github.com/tinylibs/tinyexec/pull/119">tinylibs/tinyexec#119</a></li>
<li>test: add more normalize tests by <a
href="https://github.com/43081j"><code>@​43081j</code></a> in <a
href="https://redirect.github.com/tinylibs/tinyexec/pull/120">tinylibs/tinyexec#120</a></li>
<li>build: update tsdown config and dependencies by <a
href="https://github.com/hyperz111"><code>@​hyperz111</code></a> in <a
href="https://redirect.github.com/tinylibs/tinyexec/pull/121">tinylibs/tinyexec#121</a></li>
<li>chore(deps-dev): bump the development-dependencies group with 2
updates by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/tinylibs/tinyexec/pull/122">tinylibs/tinyexec#122</a></li>
<li>chore(deps-dev): bump the development-dependencies group with 6
updates by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/tinylibs/tinyexec/pull/123">tinylibs/tinyexec#123</a></li>
<li>chore: set workflow permissions by <a
href="https://github.com/43081j"><code>@​43081j</code></a> in <a
href="https://redirect.github.com/tinylibs/tinyexec/pull/124">tinylibs/tinyexec#124</a></li>
<li>feat: add <code>nodePath</code> flag by <a
href="https://github.com/43081j"><code>@​43081j</code></a> in <a
href="https://redirect.github.com/tinylibs/tinyexec/pull/125">tinylibs/tinyexec#125</a></li>
<li>test: tidy up env tests by <a
href="https://github.com/43081j"><code>@​43081j</code></a> in <a
href="https://redirect.github.com/tinylibs/tinyexec/pull/126">tinylibs/tinyexec#126</a></li>
<li>chore(deps-dev): bump the development-dependencies group with 4
updates by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/tinylibs/tinyexec/pull/128">tinylibs/tinyexec#128</a></li>
<li>chore(deps): bump the github-actions group with 2 updates by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/tinylibs/tinyexec/pull/127">tinylibs/tinyexec#127</a></li>
<li>chore: setup funding / publish env by <a
href="https://github.com/43081j"><code>@​43081j</code></a> in <a
href="https://redirect.github.com/tinylibs/tinyexec/pull/129">tinylibs/tinyexec#129</a></li>
<li>chore: enable staged publishes by <a
href="https://github.com/43081j"><code>@​43081j</code></a> in <a
href="https://redirect.github.com/tinylibs/tinyexec/pull/130">tinylibs/tinyexec#130</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a href="https://github.com/hyperz111"><code>@​hyperz111</code></a>
made their first contribution in <a
href="https://redirect.github.com/tinylibs/tinyexec/pull/100">tinylibs/tinyexec#100</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/tinylibs/tinyexec/compare/1.1.2...1.2.0">https://github.com/tinylibs/tinyexec/compare/1.1.2...1.2.0</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="65ef525031"><code>65ef525</code></a>
fix: correct shebang regex (<a
href="https://redirect.github.com/tinylibs/tinyexec/issues/134">#134</a>)</li>
<li><a
href="6d499f26e3"><code>6d499f2</code></a>
test: add async throw tests (<a
href="https://redirect.github.com/tinylibs/tinyexec/issues/133">#133</a>)</li>
<li><a
href="3bafedb9fc"><code>3bafedb</code></a>
chore: enable staged publishes (<a
href="https://redirect.github.com/tinylibs/tinyexec/issues/130">#130</a>)</li>
<li><a
href="a6b7a92dcc"><code>a6b7a92</code></a>
chore: setup funding / publish env (<a
href="https://redirect.github.com/tinylibs/tinyexec/issues/129">#129</a>)</li>
<li><a
href="264dc21fde"><code>264dc21</code></a>
chore(deps): bump the github-actions group with 2 updates (<a
href="https://redirect.github.com/tinylibs/tinyexec/issues/127">#127</a>)</li>
<li><a
href="482f3abb99"><code>482f3ab</code></a>
chore(deps-dev): bump the development-dependencies group with 4 updates
(<a
href="https://redirect.github.com/tinylibs/tinyexec/issues/128">#128</a>)</li>
<li><a
href="bd5599eb3e"><code>bd5599e</code></a>
test: tidy up env tests (<a
href="https://redirect.github.com/tinylibs/tinyexec/issues/126">#126</a>)</li>
<li><a
href="ac2d3b3a7a"><code>ac2d3b3</code></a>
feat: add <code>nodePath</code> flag (<a
href="https://redirect.github.com/tinylibs/tinyexec/issues/125">#125</a>)</li>
<li><a
href="5ae7f87e30"><code>5ae7f87</code></a>
chore: set workflow permissions (<a
href="https://redirect.github.com/tinylibs/tinyexec/issues/124">#124</a>)</li>
<li><a
href="4ebc0aa69e"><code>4ebc0aa</code></a>
chore(deps-dev): bump the development-dependencies group with 6 updates
(<a
href="https://redirect.github.com/tinylibs/tinyexec/issues/123">#123</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/tinylibs/tinyexec/compare/1.1.2...1.2.2">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 condit...

_Description has been truncated_

---------

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>
2026-05-28 21:54:17 +02:00
Ben Brandt
7ed1daf7b4 fix: Remove hide Claude auth flag handling (#707)
Now that the terms are clear, we can let people use their credits if
they like in all scenarios.
2026-05-27 22:49:45 +02:00
Tim Visher
694221a412 no-op ping keep-alive events (#698)
AI disclaimer: I noticed `ping` events spamming the agent-shell Notices
buffer and used Claude to confirm the mechanism, locate the missing
case, and draft the fix and test. I reviewed the diff, ran the full lint
/ type-check / test gauntlet locally, and vouch for the change.

## Summary

`streamEventToAcpNotifications` exhaustively switches on `event.type`
against the SDK's `BetaRawMessageStreamEvent` union and falls through to
`unreachable` for anything else. The Anthropic Messages streaming API
also emits `ping` keep-alive events
([docs](https://docs.anthropic.com/en/api/messages-streaming#ping-events))
which aren't listed in that union but do reach this function at runtime.
Since #173 made `unreachable` log rather than throw, every ping now
writes `Unexpected case: {"type":"ping"}` to stderr.

## Symptom

In ACP clients that surface agent stderr, each `ping` lands as a
"Notice" entry next to the agent's normal output. With long-running
turns this produces multiple stderr lines per minute of generation.
Example from an agent-shell debug capture:

```
▶ Notices

Unexpected case: {"type":"ping"}
Unexpected case: {"type":"ping"}
```

## Fix

Add `case "ping" as never:` to the existing no-content branch in
`streamEventToAcpNotifications`. The `as never` cast is required because
`BetaRawMessageStreamEvent` is closed at the type level even though the
wire format emits `ping`. Comment placed above the no-content group so
ESLint's `no-fallthrough` rule doesn't see it as breaking case
adjacency.

## Test plan

- [x] `npx tsc --noEmit` — clean
- [x] `npm run lint` — clean
- [x] `npm run format:check` — clean
- [x] `npm run test:run` — 290 passed / 13 skipped (integration-gated)
- [x] New unit test in `src/tests/acp-agent.test.ts` covers
`streamEventToAcpNotifications` directly: feeds a synthetic `ping`
stream_event and asserts both `[]` return and that the logger's `error`
channel is never touched.

Co-authored-by: Tim Visher <194828183+timvisher-dd@users.noreply.github.com>
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-24 06:11:51 +00:00
18 changed files with 4646 additions and 969 deletions

View File

@@ -21,7 +21,7 @@ jobs:
timeout-minutes: 5
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10
- name: Use Node.js
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e

View File

@@ -44,7 +44,7 @@ jobs:
contents: read
id-token: write
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10
# Setup .npmrc file to publish to npm
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e
with:

View File

@@ -1,3 +1,3 @@
{
".": "0.37.0"
".": "0.46.0"
}

View File

@@ -1,5 +1,124 @@
# Changelog
## [0.46.0](https://github.com/agentclientprotocol/claude-agent-acp/compare/v0.45.1...v0.46.0) (2026-06-16)
### Features
* Update to claude-agent-sdk 0.3.178 ([#777](https://github.com/agentclientprotocol/claude-agent-acp/issues/777)) ([58549ff](https://github.com/agentclientprotocol/claude-agent-acp/commit/58549ffe6a8b02ce59894e567407bd4299c11428))
### Bug Fixes
* Better handle out of turn events ([#780](https://github.com/agentclientprotocol/claude-agent-acp/issues/780)) ([4f273a2](https://github.com/agentclientprotocol/claude-agent-acp/commit/4f273a20d870c9c69f71556b8e0519f1de30f285))
* Forward option details in elicitation meta ([#779](https://github.com/agentclientprotocol/claude-agent-acp/issues/779)) ([b364059](https://github.com/agentclientprotocol/claude-agent-acp/commit/b3640599ae685beecacd93e012d5bbc9dac716f7)), closes [#764](https://github.com/agentclientprotocol/claude-agent-acp/issues/764)
## [0.45.1](https://github.com/agentclientprotocol/claude-agent-acp/compare/v0.45.0...v0.45.1) (2026-06-16)
### Bug Fixes
* Fix terminal error printing as text instead of terminal output ([#776](https://github.com/agentclientprotocol/claude-agent-acp/issues/776)) ([db6eaaf](https://github.com/agentclientprotocol/claude-agent-acp/commit/db6eaaf71484a321e47093ad65bcf8994943cb31))
* Scope custom answers per question ([#774](https://github.com/agentclientprotocol/claude-agent-acp/issues/774)) ([d58004a](https://github.com/agentclientprotocol/claude-agent-acp/commit/d58004a34880e0a76833697319eb2a9efa6a43c7))
## [0.45.0](https://github.com/agentclientprotocol/claude-agent-acp/compare/v0.44.0...v0.45.0) (2026-06-15)
### Features
* **deps-dev:** bump the minor group with 3 updates ([#763](https://github.com/agentclientprotocol/claude-agent-acp/issues/763)) ([7de5e4b](https://github.com/agentclientprotocol/claude-agent-acp/commit/7de5e4bcca9bfea70593092060f82bc8abe33e0e))
* **deps:** bump @anthropic-ai/claude-agent-sdk to 0.3.177 ([#771](https://github.com/agentclientprotocol/claude-agent-acp/issues/771)) ([1be5ca5](https://github.com/agentclientprotocol/claude-agent-acp/commit/1be5ca57ee772fe90e41126365dc4186a18ad257))
### Bug Fixes
* preserve ANTHROPIC_CUSTOM_MODEL_OPTION when availableModels is set ([#768](https://github.com/agentclientprotocol/claude-agent-acp/issues/768)) ([cc2885f](https://github.com/agentclientprotocol/claude-agent-acp/commit/cc2885f6a9993cf61e759c3c770015f94c218627))
## [0.44.0](https://github.com/agentclientprotocol/claude-agent-acp/compare/v0.43.0...v0.44.0) (2026-06-09)
### Features
* **deps:** bump the minor group with 14 updates ([#758](https://github.com/agentclientprotocol/claude-agent-acp/issues/758)) ([7a70162](https://github.com/agentclientprotocol/claude-agent-acp/commit/7a701623df2e05aec8e552bdfd1cf573413c3471))
* **deps:** update to @anthropic-ai/claude-agent-sdk 0.3.170 ([#761](https://github.com/agentclientprotocol/claude-agent-acp/issues/761)) ([d8af943](https://github.com/agentclientprotocol/claude-agent-acp/commit/d8af943a1efef9be27d771cec089d2f1cb56c523))
## [0.43.0](https://github.com/agentclientprotocol/claude-agent-acp/compare/v0.42.0...v0.43.0) (2026-06-09)
### Features
* Add experimental elicitation support ([#756](https://github.com/agentclientprotocol/claude-agent-acp/issues/756)) ([12bd276](https://github.com/agentclientprotocol/claude-agent-acp/commit/12bd2762d9ba0ccb7497a3848a5928b8bb2ce820))
* **deps:** update to @anthropic-ai/claude-agent-sdk 0.3.169 ([#754](https://github.com/agentclientprotocol/claude-agent-acp/issues/754)) ([bd0ae4d](https://github.com/agentclientprotocol/claude-agent-acp/commit/bd0ae4dde160f59559ab4ac1bf703fcf151eff17))
* Update ACP SDK to 0.25.0 ([#753](https://github.com/agentclientprotocol/claude-agent-acp/issues/753)) ([0dbccf5](https://github.com/agentclientprotocol/claude-agent-acp/commit/0dbccf588ff702015494dd29969d47f0b7402feb))
### Bug Fixes
* Forward unstreamed assistant text blocks ([#757](https://github.com/agentclientprotocol/claude-agent-acp/issues/757)) ([7ff6b7f](https://github.com/agentclientprotocol/claude-agent-acp/commit/7ff6b7fd6b157aedbce0c636087f51ae7d1df3a7))
* Validate cwd before creating sessions ([#751](https://github.com/agentclientprotocol/claude-agent-acp/issues/751)) ([9854b0c](https://github.com/agentclientprotocol/claude-agent-acp/commit/9854b0c6790ebafff514e3c4c8e03a131f065a4a)), closes [#749](https://github.com/agentclientprotocol/claude-agent-acp/issues/749)
## [0.42.0](https://github.com/agentclientprotocol/claude-agent-acp/compare/v0.41.0...v0.42.0) (2026-06-05)
### Features
* **deps-dev:** bump obug from 2.1.1 to 2.1.2 in the minor group ([#743](https://github.com/agentclientprotocol/claude-agent-acp/issues/743)) ([7ffb78c](https://github.com/agentclientprotocol/claude-agent-acp/commit/7ffb78c57280fc32af77862896c0035ce0e690b7))
* Send message ids for assistant and user messages ([#750](https://github.com/agentclientprotocol/claude-agent-acp/issues/750)) ([18516a3](https://github.com/agentclientprotocol/claude-agent-acp/commit/18516a3088f847a38f5eee0fe81ad5ca3e2a751c))
* Update Claude Agent SDK to 0.3.165 ([#746](https://github.com/agentclientprotocol/claude-agent-acp/issues/746)) ([23cbe6f](https://github.com/agentclientprotocol/claude-agent-acp/commit/23cbe6f58fa9e10ad736f664c4cf94dbd1c6ad65))
### Bug Fixes
* Prevent cross-family model matching in resolveModelPreference ([#731](https://github.com/agentclientprotocol/claude-agent-acp/issues/731)) ([f4704c1](https://github.com/agentclientprotocol/claude-agent-acp/commit/f4704c168f917e6710f2b3cd49e1fef49613a469))
* Prune tool cache per session after results ([#748](https://github.com/agentclientprotocol/claude-agent-acp/issues/748)) ([ec14211](https://github.com/agentclientprotocol/claude-agent-acp/commit/ec142110561f680330c6976783805685c5c069ec))
* Update to better utilize existing SDK data ([#747](https://github.com/agentclientprotocol/claude-agent-acp/issues/747)) ([398f763](https://github.com/agentclientprotocol/claude-agent-acp/commit/398f763f71bd2fe2ca9e8269de120d26a744b7a8))
## [0.41.0](https://github.com/agentclientprotocol/claude-agent-acp/compare/v0.40.0...v0.41.0) (2026-06-04)
### Features
* **deps:** upgrade to @anthropic-ai/claude-agent-sdk@0.3.162 ([#740](https://github.com/agentclientprotocol/claude-agent-acp/issues/740)) ([add7e31](https://github.com/agentclientprotocol/claude-agent-acp/commit/add7e31704581aa70febb6341ca0e8cee5d93b43))
### Bug Fixes
* Force cancellation when SDK query hangs ([#742](https://github.com/agentclientprotocol/claude-agent-acp/issues/742)) ([cffea4b](https://github.com/agentclientprotocol/claude-agent-acp/commit/cffea4be28e6def91027110433a99e80b1be8a0c)), closes [#680](https://github.com/agentclientprotocol/claude-agent-acp/issues/680)
## [0.40.0](https://github.com/agentclientprotocol/claude-agent-acp/compare/v0.39.0...v0.40.0) (2026-06-02)
### Features
* **deps-dev:** bump the minor group with 2 updates ([#726](https://github.com/agentclientprotocol/claude-agent-acp/issues/726)) ([51a370e](https://github.com/agentclientprotocol/claude-agent-acp/commit/51a370e4feb8a74279698b156e35b96631a74d74))
* **deps:** bump actions/checkout from 6.0.2 to 6.0.3 ([#736](https://github.com/agentclientprotocol/claude-agent-acp/issues/736)) ([9cda07b](https://github.com/agentclientprotocol/claude-agent-acp/commit/9cda07ba9df27b48bd94332e365eed982e3f5613))
* **deps:** bump the minor group with 50 updates ([#737](https://github.com/agentclientprotocol/claude-agent-acp/issues/737)) ([32175b8](https://github.com/agentclientprotocol/claude-agent-acp/commit/32175b83a0227d0baa1f7d7eedabe743b4b870e8))
### Bug Fixes
* Optimize local command marker stripping ([#738](https://github.com/agentclientprotocol/claude-agent-acp/issues/738)) ([895422c](https://github.com/agentclientprotocol/claude-agent-acp/commit/895422c72d5f955903f227dc6887df823d2730e6)), closes [#727](https://github.com/agentclientprotocol/claude-agent-acp/issues/727)
## [0.39.0](https://github.com/agentclientprotocol/claude-agent-acp/compare/v0.38.0...v0.39.0) (2026-05-29)
### Features
* **deps:** update Claude Agent SDK to 0.3.156 ([#722](https://github.com/agentclientprotocol/claude-agent-acp/issues/722)) ([3fb6db4](https://github.com/agentclientprotocol/claude-agent-acp/commit/3fb6db4e5ee5bd1f431cf5d2ce5331ce983f9597))
## [0.38.0](https://github.com/agentclientprotocol/claude-agent-acp/compare/v0.37.0...v0.38.0) (2026-05-28)
### Features
* **deps:** bump to @anthropic-ai/claude-agent-sdk 0.3.154 (Opus 4.8) ([#716](https://github.com/agentclientprotocol/claude-agent-acp/issues/716)) ([a172885](https://github.com/agentclientprotocol/claude-agent-acp/commit/a172885c80fc32c108a8501268a543641088f543))
* Support Opus 4.8 ([#718](https://github.com/agentclientprotocol/claude-agent-acp/issues/718)) ([98b54a0](https://github.com/agentclientprotocol/claude-agent-acp/commit/98b54a02c267cdef619becceccf6ef519fbf8f6f))
### Bug Fixes
* Remove hide Claude auth flag handling ([#707](https://github.com/agentclientprotocol/claude-agent-acp/issues/707)) ([7ed1daf](https://github.com/agentclientprotocol/claude-agent-acp/commit/7ed1daf7b42088ad149e9bf742f764752b82d093))
## [0.37.0](https://github.com/agentclientprotocol/claude-agent-acp/compare/v0.36.1...v0.37.0) (2026-05-21)

630
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -3,7 +3,7 @@
"publishConfig": {
"access": "public"
},
"version": "0.37.0",
"version": "0.46.0",
"description": "An ACP-compatible coding agent powered by the Claude Agent SDK (TypeScript)",
"main": "dist/lib.js",
"types": "dist/lib.d.ts",
@@ -60,22 +60,22 @@
"author": "Zed Industries",
"license": "Apache-2.0",
"dependencies": {
"@agentclientprotocol/sdk": "0.22.1",
"@anthropic-ai/claude-agent-sdk": "0.3.146",
"@agentclientprotocol/sdk": "0.26.0",
"@anthropic-ai/claude-agent-sdk": "0.3.178",
"zod": "^3.25.0 || ^4.0.0"
},
"devDependencies": {
"@anthropic-ai/sdk": "0.97.1",
"@anthropic-ai/sdk": "0.104.2",
"@eslint/js": "10.0.1",
"@types/node": "25.9.1",
"@typescript-eslint/eslint-plugin": "8.59.4",
"@typescript-eslint/parser": "8.59.4",
"eslint": "10.4.0",
"@types/node": "25.9.3",
"@typescript-eslint/eslint-plugin": "8.61.1",
"@typescript-eslint/parser": "8.61.1",
"eslint": "10.5.0",
"eslint-config-prettier": "10.1.8",
"globals": "17.6.0",
"prettier": "3.8.3",
"prettier": "3.8.4",
"ts-node": "10.9.2",
"typescript": "6.0.3",
"vitest": "4.1.7"
"vitest": "4.1.9"
}
}

File diff suppressed because it is too large Load Diff

301
src/elicitation.ts Normal file
View File

@@ -0,0 +1,301 @@
import { randomUUID } from "node:crypto";
import type {
CreateElicitationRequest,
CreateElicitationResponse,
ElicitationPropertySchema,
ElicitationSchema,
EnumOption,
} from "@agentclientprotocol/sdk";
import type { ElicitationRequest, ElicitationResult } from "@anthropic-ai/claude-agent-sdk";
import type {
AskUserQuestionInput,
AskUserQuestionOutput,
} from "@anthropic-ai/claude-agent-sdk/sdk-tools.js";
/**
* Bridges between the Claude Agent SDK's elicitation/dialog callbacks and ACP's
* (unstable) elicitation protocol.
*
* Two distinct SDK surfaces flow through here:
*
* 1. `onElicitation` — fired when an MCP server requests user input. These map
* directly onto ACP `session/create_elicitation` (form or url mode).
* 2. The built-in AskUserQuestion tool — when a `canUseTool` callback is
* registered the SDK routes its permission check through `canUseTool`
* (not the interactive `permission_ask_user_question` dialog). We render
* its questions as an ACP form elicitation and feed the user's selections
* back as the tool's `updatedInput`, which the tool's own `call()` reads.
*/
/** Modes the connected client advertised support for. */
export type ElicitationSupport = {
form: boolean;
url: boolean;
};
/**
* Convert an MCP elicitation request (from the SDK's `onElicitation` callback)
* into an ACP `CreateElicitationRequest`. Returns `null` when the request can't
* be represented (e.g. a url-mode request with no url).
*/
export function mcpElicitationToCreateRequest(
request: ElicitationRequest,
sessionId: string,
): CreateElicitationRequest | null {
if (request.mode === "url") {
if (!request.url) {
return null;
}
return {
mode: "url",
sessionId,
message: request.message,
url: request.url,
// URL elicitations need a stable id so the client can correlate the
// later `session/complete_elicitation` notification. MCP servers usually
// provide one; fall back to a generated id if not.
elicitationId: request.elicitationId ?? randomUUID(),
};
}
// Form mode (the default). The MCP `requestedSchema` is already a JSON Schema
// with primitive-typed properties, which is structurally what ACP expects.
return {
mode: "form",
sessionId,
message: request.message,
requestedSchema: normalizeElicitationSchema(request.requestedSchema),
};
}
/**
* Map an ACP elicitation response back to the MCP `ElicitResult` the SDK expects
* to hand back to the requesting server.
*/
export function createElicitationResponseToElicitResult(
response: CreateElicitationResponse,
): ElicitationResult {
switch (response.action) {
case "accept":
return { action: "accept", content: response.content ?? {} };
case "decline":
return { action: "decline" };
case "cancel":
default:
return { action: "cancel" };
}
}
/**
* A single question as supplied by the AskUserQuestion tool. Derived from the
* SDK's input type so the shape stays in sync; the SDK validates the model's
* tool call against this schema before it reaches us.
*/
export type AskUserQuestion = AskUserQuestionInput["questions"][number];
/**
* Pull the well-formed questions out of an AskUserQuestion tool input. Returns
* `null` when there are no usable questions — including the case where every
* entry is malformed and filtering leaves an empty list — so callers can treat
* "nothing to ask" uniformly.
*/
export function extractAskUserQuestions(input: Record<string, unknown>): AskUserQuestion[] | null {
const questions = (input as { questions?: unknown }).questions;
if (!Array.isArray(questions)) {
return null;
}
const valid = questions.filter(
(q): q is AskUserQuestion =>
!!q && typeof q.question === "string" && Array.isArray(q.options) && q.options.length > 0,
);
return valid.length > 0 ? valid : null;
}
/** Stable form-field key for the question at the given index. */
function questionFieldKey(index: number): string {
return `question_${index}`;
}
/**
* Form-field key for the per-question free-text "custom answer" field that sits
* alongside `question_<n>`. Mirrors the first-party clients, where every
* question carries its own "Other" box rather than one form-level field.
*/
function questionCustomFieldKey(index: number): string {
return `question_${index}_custom`;
}
/**
* `_meta` key under which a bridged enum option carries its structured
* `description`/`preview`, since ACP's `EnumOption` has no field for either.
* Namespaced like the agent's other `_meta` extensions (`_claude/...`).
*/
const OPTION_META_KEY = "_claude/askUserQuestionOption";
/** A single option as supplied by the AskUserQuestion tool. */
type AskUserQuestionOption = AskUserQuestion["options"][number];
/**
* Build the `_meta` payload that carries an option's structured `description`
* and optional `preview` for clients that can render them as distinct fields.
* Returns `undefined` when neither is present, so we don't emit an empty `_meta`.
*/
function askUserQuestionOptionMeta(
option: AskUserQuestionOption,
): NonNullable<EnumOption["_meta"]> | undefined {
const detail: { description?: string; preview?: string } = {};
if (option.description) {
detail.description = option.description;
}
if (option.preview) {
detail.preview = option.preview;
}
return Object.keys(detail).length > 0 ? { [OPTION_META_KEY]: detail } : undefined;
}
/**
* Render the AskUserQuestion tool's questions as an ACP form elicitation.
*
* Fields are keyed by a short stable id (`question_<n>`) rather than the full
* question text, so the question text appears in exactly one place per field.
* Single-select questions use a titled `oneOf` enum; multi-select questions use
* an array with a titled `anyOf` item enum. The enum `const` is always the
* option label, since that is what the tool records as the answer.
*
* Each question is followed by its own optional free-text "custom answer" field
* (`question_<n>_custom`), mirroring the CLI's per-question "Other" box: the
* user can type their own answer instead of picking an option, scoped to that
* specific question. Nothing is marked required, so the user can also just skip
* — matching the built-in tool, which always offers Skip + a free-text box.
*/
export function askUserQuestionsToCreateRequest(
questions: AskUserQuestion[],
sessionId: string,
toolCallId: string | undefined,
): CreateElicitationRequest {
const single = questions.length === 1;
const properties: Record<string, ElicitationPropertySchema> = {};
questions.forEach((question, index) => {
const options: EnumOption[] = question.options.map((option) => {
const enumOption: EnumOption = {
const: option.label,
// `title` stays a flattened "label — description" string so clients that
// only read `const`/`title` still surface the description. Clients that
// understand the `_meta` below should prefer its structured fields (and
// treat `const` as the clean label) rather than parsing this title.
title: option.description ? `${option.label} — ${option.description}` : option.label,
};
// The SDK option carries a `description` (secondary text) and an optional
// `preview` (mockups, code snippets, comparisons shown on focus). Neither
// has a structural slot in `EnumOption`, so forward them under ACP's
// reserved `_meta` extension point for clients that can render them.
const meta = askUserQuestionOptionMeta(option);
if (meta) {
enumOption._meta = meta;
}
return enumOption;
});
// For a single question the prompt is carried by `message`, so we don't
// repeat it in the field description. With multiple questions each field
// needs its own question text.
const description = single ? undefined : question.question;
const title = question.header || undefined;
properties[questionFieldKey(index)] = question.multiSelect
? { type: "array", title, description, items: { anyOf: options } }
: { type: "string", title, description, oneOf: options };
properties[questionCustomFieldKey(index)] = {
type: "string",
title: "Other",
description: "Type your own answer instead of choosing an option above (optional).",
};
});
const requestedSchema: ElicitationSchema = {
type: "object",
properties,
};
const message = single ? questions[0].question : "Please answer the following questions.";
return {
mode: "form",
sessionId,
...(toolCallId ? { toolCallId } : {}),
message,
requestedSchema,
};
}
/** Outcome of an AskUserQuestion elicitation, decoupled from any transport. */
export type AskUserQuestionOutcome =
| { action: "answered"; updatedInput: Record<string, unknown> }
| { action: "cancel" };
/**
* Fold an ACP elicitation response into the AskUserQuestion tool's input.
*
* Selected labels are read back from the indexed form fields and written into
* `answers` as a `{ [questionText]: label }` map (comma-joining multi-selects)
* — the key shape the tool's own `call()` reads. A non-empty per-question
* custom-answer field (`question_<n>_custom`) takes precedence over that
* question's selection, since the user typed their own answer instead of
* picking one. Decline yields empty answers (the model is told the user skipped
* rather than the turn aborting); cancel aborts the tool call.
*/
export function applyAskElicitationResponse(
response: CreateElicitationResponse,
toolInput: Record<string, unknown>,
questions: AskUserQuestion[],
): AskUserQuestionOutcome {
if (response.action === "cancel") {
return { action: "cancel" };
}
if (response.action === "decline") {
return { action: "answered", updatedInput: { ...toolInput, answers: {} } };
}
const content = response.content ?? {};
// Typed against the tool's own output schema so the answer/response shapes
// stay in sync with what the built-in tool's call() expects to read back.
const answers: AskUserQuestionOutput["answers"] = {};
questions.forEach((question, index) => {
// A typed custom answer wins over the selection: the user chose to write
// their own answer for this question instead of picking an option.
const custom = content[questionCustomFieldKey(index)];
if (typeof custom === "string" && custom.trim() !== "") {
answers[question.question] = custom.trim();
return;
}
const value = content[questionFieldKey(index)];
if (value === undefined || value === null) {
return;
}
const text = Array.isArray(value) ? value.join(", ") : String(value);
if (text === "") {
return;
}
answers[question.question] = text;
});
return { action: "answered", updatedInput: { ...toolInput, answers } };
}
/**
* Coerce an arbitrary MCP `requestedSchema` into an ACP `ElicitationSchema`.
* The two are structurally compatible JSON Schemas; we just guarantee the
* `type: "object"` discriminator is present.
*/
function normalizeElicitationSchema(
schema: Record<string, unknown> | undefined,
): ElicitationSchema {
if (!schema || typeof schema !== "object") {
return { type: "object", properties: {} };
}
return { ...(schema as ElicitationSchema), type: "object" };
}

View File

@@ -3,4 +3,4 @@ description: Say hello
argument-hint: name
---
Respond with "Hello $1" and nothing else.
Respond with "Hello $ARGUMENTS" and nothing else.

View File

@@ -225,7 +225,9 @@ describe("ClaudeAcpAgent settings", () => {
// No setModel call is needed because no override was applied — the SDK is
// already on its own default.
expect(setModelSpy).not.toHaveBeenCalled();
expect(response.models.currentModelId).toBe("claude-sonnet-4-6");
expect(response.configOptions?.find((o: any) => o.id === "model")?.currentValue).toBe(
"claude-sonnet-4-6",
);
});
describe("auto mode availability per model", () => {
@@ -578,10 +580,12 @@ describe("ClaudeAcpAgent settings", () => {
});
expect(setModelSpy).toHaveBeenCalledWith("claude-haiku-4-5");
expect(response.models.currentModelId).toBe("claude-haiku-4-5");
expect(response.configOptions?.find((o: any) => o.id === "model")?.currentValue).toBe(
"claude-haiku-4-5",
);
});
it("does not inherit display info across mismatched model family versions", async () => {
it("does not inherit display info across mismatched model versions", async () => {
// https://github.com/agentclientprotocol/claude-agent-acp/issues/639:
// when the SDK's `opus` alias resolves to Opus 4.7, an allowlist entry
// of `claude-opus-4-6` (or `claude-opus-4-6[1m]`) used to substring-match
@@ -642,6 +646,172 @@ describe("ClaudeAcpAgent settings", () => {
expect(byValue["claude-opus-4-7"].name).toBe("Opus 4.7");
expect(byValue["claude-opus-4-7[1m]"].name).toMatch(/Opus 4\.7/);
});
it("does not inherit display info across mismatched model families", async () => {
// https://github.com/agentclientprotocol/claude-agent-acp/issues/639:
// when the SDK's `opus` alias resolves to Opus 4.8, `claude-opus-4-6[1m]`
// fails the version check against `opus` but the tokenized matcher
// falls through to `sonnet[1m]` because the `1m` context hint alone
// is enough to score a match.
await fs.promises.writeFile(
path.join(tempDir, "settings.json"),
JSON.stringify({
availableModels: ["claude-opus-4-6", "claude-opus-4-6[1m]"],
}),
);
const projectDir = path.join(tempDir, "project");
await fs.promises.mkdir(projectDir, { recursive: true });
mockQueryWithModels([
{ value: "default", displayName: "Default", description: "Default model" },
{
value: "sonnet",
displayName: "Sonnet",
description: "Sonnet 4.6 · Best for everyday tasks",
},
{
value: "sonnet[1m]",
displayName: "Sonnet (1M context)",
description: "Sonnet 4.6 for long sessions",
},
{
value: "opus",
displayName: "Opus 4.8",
description: "Claude Opus 4.8",
},
]);
const { ClaudeAcpAgent } = await import("../acp-agent.js");
const agent: ClaudeAcpAgentType = new ClaudeAcpAgent(createMockClient());
const response = await (agent as any).createSession({
cwd: projectDir,
mcpServers: [],
_meta: { disableBuiltInTools: true },
});
const modelOption = response.configOptions.find((o: any) => o.id === "model");
const byValue: Record<string, { name: string; description?: string }> = {};
for (const opt of modelOption.options) {
byValue[opt.value] = { name: opt.name, description: opt.description };
}
expect(byValue["claude-opus-4-6[1m]"].name).toBe("claude-opus-4-6[1m]");
expect(byValue["claude-opus-4-6"].name).toBe("claude-opus-4-6");
});
it("preserves ANTHROPIC_CUSTOM_MODEL_OPTION even when absent from the allowlist", async () => {
// Per the model-config docs, ANTHROPIC_CUSTOM_MODEL_OPTION adds an entry
// "without replacing the built-in aliases" and "appears at the bottom of
// the /model picker", so it is exempt from the availableModels allowlist
// (the same way the Default option is "not affected by availableModels").
// ACP must match: a slim alias allowlist must not hide the custom model
// row, and it appears last, after the allowlisted entries.
// https://code.claude.com/docs/en/model-config#add-a-custom-model-option
const originalEnv = process.env.ANTHROPIC_CUSTOM_MODEL_OPTION;
process.env.ANTHROPIC_CUSTOM_MODEL_OPTION = "claude-opus-4-8[1m]";
try {
await fs.promises.writeFile(
path.join(tempDir, "settings.json"),
JSON.stringify({
availableModels: ["sonnet", "opus", "haiku"],
}),
);
const projectDir = path.join(tempDir, "project");
await fs.promises.mkdir(projectDir, { recursive: true });
mockQueryWithModels([
{ value: "default", displayName: "Default", description: "Default model" },
{ value: "sonnet", displayName: "Sonnet", description: "Claude Sonnet 4.6" },
{ value: "opus", displayName: "Opus", description: "Claude Opus 4.6" },
{ value: "haiku", displayName: "Haiku", description: "Claude Haiku 4.5" },
{
value: "claude-opus-4-8[1m]",
displayName: "Opus 4.8",
description: "Claude Opus 4.8",
},
]);
const { ClaudeAcpAgent } = await import("../acp-agent.js");
const agent: ClaudeAcpAgentType = new ClaudeAcpAgent(createMockClient());
const response = await (agent as any).createSession({
cwd: projectDir,
mcpServers: [],
_meta: { disableBuiltInTools: true },
});
const modelOption = response.configOptions.find((o: any) => o.id === "model");
expect(modelOption.options.map((o: any) => o.value)).toEqual([
"default",
"sonnet",
"opus",
"haiku",
"claude-opus-4-8[1m]",
]);
const custom = modelOption.options.find((o: any) => o.value === "claude-opus-4-8[1m]");
expect(custom.name).toBe("Opus 4.8");
expect(custom.description).toBe("Claude Opus 4.8");
} finally {
if (originalEnv === undefined) {
delete process.env.ANTHROPIC_CUSTOM_MODEL_OPTION;
} else {
process.env.ANTHROPIC_CUSTOM_MODEL_OPTION = originalEnv;
}
}
});
it("does not duplicate the custom model option when also in the allowlist", async () => {
// If the user lists the custom model's exact ID in availableModels AND it
// is set as ANTHROPIC_CUSTOM_MODEL_OPTION, it must appear exactly once.
const originalEnv = process.env.ANTHROPIC_CUSTOM_MODEL_OPTION;
process.env.ANTHROPIC_CUSTOM_MODEL_OPTION = "claude-opus-4-8[1m]";
try {
await fs.promises.writeFile(
path.join(tempDir, "settings.json"),
JSON.stringify({
availableModels: ["sonnet", "claude-opus-4-8[1m]"],
}),
);
const projectDir = path.join(tempDir, "project");
await fs.promises.mkdir(projectDir, { recursive: true });
mockQueryWithModels([
{ value: "default", displayName: "Default", description: "Default model" },
{ value: "sonnet", displayName: "Sonnet", description: "Claude Sonnet 4.6" },
{
value: "claude-opus-4-8[1m]",
displayName: "Opus 4.8",
description: "Claude Opus 4.8",
},
]);
const { ClaudeAcpAgent } = await import("../acp-agent.js");
const agent: ClaudeAcpAgentType = new ClaudeAcpAgent(createMockClient());
const response = await (agent as any).createSession({
cwd: projectDir,
mcpServers: [],
_meta: { disableBuiltInTools: true },
});
const modelOption = response.configOptions.find((o: any) => o.id === "model");
expect(modelOption.options.map((o: any) => o.value)).toEqual([
"default",
"sonnet",
"claude-opus-4-8[1m]",
]);
} finally {
if (originalEnv === undefined) {
delete process.env.ANTHROPIC_CUSTOM_MODEL_OPTION;
} else {
process.env.ANTHROPIC_CUSTOM_MODEL_OPTION = originalEnv;
}
}
});
});
it("resolves model aliases like opus[1m] to the correct model", async () => {
@@ -687,7 +857,9 @@ describe("ClaudeAcpAgent settings", () => {
});
expect(setModelSpy).toHaveBeenCalledWith("claude-opus-4-6-1m");
expect(response.models.currentModelId).toBe("claude-opus-4-6-1m");
expect(response.configOptions?.find((o: any) => o.id === "model")?.currentValue).toBe(
"claude-opus-4-6-1m",
);
});
it("skips the initial setModel when the resolved value matches the SDK's model list verbatim", async () => {
@@ -727,7 +899,9 @@ describe("ClaudeAcpAgent settings", () => {
});
expect(setModelSpy).not.toHaveBeenCalled();
expect(response.models.currentModelId).toBe("claude-opus-4-6");
expect(response.configOptions?.find((o: any) => o.id === "model")?.currentValue).toBe(
"claude-opus-4-6",
);
} finally {
if (originalEnv === undefined) {
delete process.env.ANTHROPIC_MODEL;
@@ -777,6 +951,8 @@ describe("ClaudeAcpAgent settings", () => {
});
expect(setModelSpy).toHaveBeenCalledWith("claude-haiku-4-5");
expect(response.models.currentModelId).toBe("claude-haiku-4-5");
expect(response.configOptions?.find((o: any) => o.id === "model")?.currentValue).toBe(
"claude-haiku-4-5",
);
});
});

File diff suppressed because it is too large Load Diff

View File

@@ -39,7 +39,7 @@ vi.mock("../tools.js", async () => ({
describe("additionalRoots", () => {
let agent: ClaudeAcpAgentType;
const tempDirs: string[] = [];
const newSession = (meta: Record<string, unknown>, cwd = "/test") =>
const newSession = (meta: Record<string, unknown>, cwd = process.cwd()) =>
agent.newSession({ cwd, mcpServers: [], _meta: meta });
beforeEach(async () => {
@@ -79,7 +79,7 @@ describe("additionalRoots", () => {
it("prefers the official ACP additionalDirectories field over _meta.additionalRoots", async () => {
await agent.newSession({
cwd: "/test",
cwd: process.cwd(),
mcpServers: [],
additionalDirectories: ["/from/official"],
_meta: { additionalRoots: ["/from/meta"] },
@@ -89,7 +89,7 @@ describe("additionalRoots", () => {
it("merges official ACP additionalDirectories with claudeCode SDK additionalDirectories", async () => {
await agent.newSession({
cwd: "/test",
cwd: process.cwd(),
mcpServers: [],
additionalDirectories: ["/from/official"],
_meta: { claudeCode: { options: { additionalDirectories: ["/from/sdk"] } } },
@@ -99,7 +99,7 @@ describe("additionalRoots", () => {
it("falls back to _meta.additionalRoots when the official field is omitted", async () => {
await agent.newSession({
cwd: "/test",
cwd: process.cwd(),
mcpServers: [],
_meta: { additionalRoots: ["/from/meta"] },
});

View File

@@ -15,7 +15,10 @@ const mockQuery = vi.hoisted(() =>
})),
);
vi.mock("@anthropic-ai/claude-agent-sdk", () => ({
vi.mock("@anthropic-ai/claude-agent-sdk", async () => ({
...(await vi.importActual<typeof import("@anthropic-ai/claude-agent-sdk")>(
"@anthropic-ai/claude-agent-sdk",
)),
query: mockQuery,
}));
@@ -100,7 +103,7 @@ describe("authorization", () => {
});
await agent.newSession({
cwd: "testRoot",
cwd: process.cwd(),
mcpServers: [],
_meta: {
claudeCode: {
@@ -145,7 +148,7 @@ describe("authorization", () => {
});
await agent.newSession({
cwd: "testRoot",
cwd: process.cwd(),
mcpServers: [],
});

View File

@@ -1,7 +1,10 @@
import { describe, it, expect, beforeEach, afterEach, vi } from "vitest";
import { AgentSideConnection, SessionNotification } from "@agentclientprotocol/sdk";
import { AgentSideConnection, RequestError, SessionNotification } from "@agentclientprotocol/sdk";
import type { Options } from "@anthropic-ai/claude-agent-sdk";
import type { ClaudeAcpAgent as ClaudeAcpAgentType } from "../acp-agent.js";
import * as fs from "node:fs";
import * as os from "node:os";
import * as path from "node:path";
let capturedOptions: Options | undefined;
vi.mock("@anthropic-ai/claude-agent-sdk", async () => {
@@ -65,7 +68,7 @@ describe("createSession options merging", () => {
it("merges user-provided disallowedTools with ACP internal list", async () => {
await agent.newSession({
cwd: "/test",
cwd: process.cwd(),
mcpServers: [],
_meta: {
claudeCode: {
@@ -85,7 +88,7 @@ describe("createSession options merging", () => {
it("works when user provides no disallowedTools", async () => {
await agent.newSession({
cwd: "/test",
cwd: process.cwd(),
mcpServers: [],
});
@@ -94,7 +97,7 @@ describe("createSession options merging", () => {
it("works when user provides empty disallowedTools", async () => {
await agent.newSession({
cwd: "/test",
cwd: process.cwd(),
mcpServers: [],
_meta: {
claudeCode: {
@@ -110,7 +113,7 @@ describe("createSession options merging", () => {
it("sets tools to empty array when disableBuiltInTools is true", async () => {
await agent.newSession({
cwd: "/test",
cwd: process.cwd(),
mcpServers: [],
_meta: {
disableBuiltInTools: true,
@@ -133,7 +136,7 @@ describe("createSession options merging", () => {
const userPreToolUseHook = { hooks: [{ command: "echo pre" }] };
await agent.newSession({
cwd: "/test",
cwd: process.cwd(),
mcpServers: [],
_meta: {
claudeCode: {
@@ -155,7 +158,7 @@ describe("createSession options merging", () => {
it("inherits HOME and PATH from process.env when no env is provided", async () => {
await agent.newSession({
cwd: "/test",
cwd: process.cwd(),
mcpServers: [],
});
@@ -165,7 +168,7 @@ describe("createSession options merging", () => {
it("merges user-provided env vars on top of process.env", async () => {
await agent.newSession({
cwd: "/test",
cwd: process.cwd(),
mcpServers: [],
_meta: {
claudeCode: {
@@ -185,7 +188,7 @@ describe("createSession options merging", () => {
it("allows user-provided env vars to override process.env entries", async () => {
await agent.newSession({
cwd: "/test",
cwd: process.cwd(),
mcpServers: [],
_meta: {
claudeCode: {
@@ -203,7 +206,7 @@ describe("createSession options merging", () => {
it("defaults tools to claude_code preset when not provided", async () => {
await agent.newSession({
cwd: "/test",
cwd: process.cwd(),
mcpServers: [],
});
@@ -212,7 +215,7 @@ describe("createSession options merging", () => {
it("passes through user-provided tools string array", async () => {
await agent.newSession({
cwd: "/test",
cwd: process.cwd(),
mcpServers: [],
_meta: {
claudeCode: {
@@ -228,7 +231,7 @@ describe("createSession options merging", () => {
it("explicit tools array takes precedence over disableBuiltInTools", async () => {
await agent.newSession({
cwd: "/test",
cwd: process.cwd(),
mcpServers: [],
_meta: {
disableBuiltInTools: true,
@@ -245,7 +248,7 @@ describe("createSession options merging", () => {
it("passes through empty tools array to disable all built-in tools", async () => {
await agent.newSession({
cwd: "/test",
cwd: process.cwd(),
mcpServers: [],
_meta: {
claudeCode: {
@@ -261,7 +264,7 @@ describe("createSession options merging", () => {
describe("systemPrompt via _meta", () => {
it("defaults to the claude_code preset when not provided", async () => {
await agent.newSession({ cwd: "/test", mcpServers: [] });
await agent.newSession({ cwd: process.cwd(), mcpServers: [] });
expect(capturedOptions!.systemPrompt).toEqual({
type: "preset",
@@ -271,7 +274,7 @@ describe("createSession options merging", () => {
it("replaces the preset when a string is provided", async () => {
await agent.newSession({
cwd: "/test",
cwd: process.cwd(),
mcpServers: [],
_meta: { systemPrompt: "custom prompt" },
});
@@ -281,7 +284,7 @@ describe("createSession options merging", () => {
it("forwards append", async () => {
await agent.newSession({
cwd: "/test",
cwd: process.cwd(),
mcpServers: [],
_meta: { systemPrompt: { append: "extra instructions" } },
});
@@ -295,7 +298,7 @@ describe("createSession options merging", () => {
it("forwards excludeDynamicSections", async () => {
await agent.newSession({
cwd: "/test",
cwd: process.cwd(),
mcpServers: [],
_meta: { systemPrompt: { excludeDynamicSections: true } },
});
@@ -309,7 +312,7 @@ describe("createSession options merging", () => {
it("forwards append and excludeDynamicSections together", async () => {
await agent.newSession({
cwd: "/test",
cwd: process.cwd(),
mcpServers: [],
_meta: {
systemPrompt: {
@@ -329,7 +332,7 @@ describe("createSession options merging", () => {
it("ignores caller-provided type/preset overrides", async () => {
await agent.newSession({
cwd: "/test",
cwd: process.cwd(),
mcpServers: [],
_meta: {
systemPrompt: {
@@ -369,7 +372,7 @@ describe("createSession options merging", () => {
modelOverrides: { "claude-opus-4-6": "us.anthropic.claude-opus-4-6-v1" },
});
await agent.newSession({ cwd: "/test", mcpServers: [] });
await agent.newSession({ cwd: process.cwd(), mcpServers: [] });
expect(capturedOptions!.settings).toEqual({
modelOverrides: { "claude-opus-4-6": "us.anthropic.claude-opus-4-6-v1" },
@@ -381,7 +384,7 @@ describe("createSession options merging", () => {
availableModels: ["opus", "sonnet"],
});
await agent.newSession({ cwd: "/test", mcpServers: [] });
await agent.newSession({ cwd: process.cwd(), mcpServers: [] });
expect(capturedOptions!.settings).toEqual({
availableModels: ["opus", "sonnet"],
@@ -394,7 +397,7 @@ describe("createSession options merging", () => {
availableModels: ["opus"],
});
await agent.newSession({ cwd: "/test", mcpServers: [] });
await agent.newSession({ cwd: process.cwd(), mcpServers: [] });
expect(capturedOptions!.settings).toEqual({
modelOverrides: { "claude-opus-4-6": "us.anthropic.claude-opus-4-6-v1" },
@@ -403,7 +406,7 @@ describe("createSession options merging", () => {
});
it("does not add settings when env var is not set", async () => {
await agent.newSession({ cwd: "/test", mcpServers: [] });
await agent.newSession({ cwd: process.cwd(), mcpServers: [] });
expect(capturedOptions!.settings).toBeUndefined();
});
@@ -414,7 +417,7 @@ describe("createSession options merging", () => {
});
await agent.newSession({
cwd: "/test",
cwd: process.cwd(),
mcpServers: [],
_meta: {
claudeCode: {
@@ -438,13 +441,13 @@ describe("createSession options merging", () => {
it("throws on invalid JSON", async () => {
process.env.CLAUDE_MODEL_CONFIG = "not-json";
await expect(agent.newSession({ cwd: "/test", mcpServers: [] })).rejects.toThrow();
await expect(agent.newSession({ cwd: process.cwd(), mcpServers: [] })).rejects.toThrow();
});
});
it("merges user-provided mcpServers with ACP mcpServers", async () => {
await agent.newSession({
cwd: "/test",
cwd: process.cwd(),
mcpServers: [
{
name: "acp-server",
@@ -473,4 +476,140 @@ describe("createSession options merging", () => {
// ACP-provided MCP server should also be present
expect(capturedOptions!.mcpServers).toHaveProperty("acp-server");
});
describe("thinking config from MAX_THINKING_TOKENS", () => {
let originalMaxThinking: string | undefined;
beforeEach(() => {
originalMaxThinking = process.env.MAX_THINKING_TOKENS;
delete process.env.MAX_THINKING_TOKENS;
});
afterEach(() => {
if (originalMaxThinking !== undefined) {
process.env.MAX_THINKING_TOKENS = originalMaxThinking;
} else {
delete process.env.MAX_THINKING_TOKENS;
}
});
it("leaves thinking unset (SDK default) when env var is absent", async () => {
await agent.newSession({ cwd: process.cwd(), mcpServers: [] });
expect(capturedOptions!.thinking).toBeUndefined();
// The deprecated option must not be set either.
expect(capturedOptions!.maxThinkingTokens).toBeUndefined();
});
it("maps 0 to disabled thinking", async () => {
process.env.MAX_THINKING_TOKENS = "0";
await agent.newSession({ cwd: process.cwd(), mcpServers: [] });
expect(capturedOptions!.thinking).toEqual({ type: "disabled" });
});
it("maps a positive value to a fixed thinking budget", async () => {
process.env.MAX_THINKING_TOKENS = "12000";
await agent.newSession({ cwd: process.cwd(), mcpServers: [] });
expect(capturedOptions!.thinking).toEqual({ type: "enabled", budgetTokens: 12000 });
});
it("ignores a non-numeric value", async () => {
process.env.MAX_THINKING_TOKENS = "lots";
await agent.newSession({ cwd: process.cwd(), mcpServers: [] });
expect(capturedOptions!.thinking).toBeUndefined();
});
it("lets a user-provided thinking option override the env default", async () => {
process.env.MAX_THINKING_TOKENS = "12000";
await agent.newSession({
cwd: process.cwd(),
mcpServers: [],
_meta: {
claudeCode: {
options: {
thinking: { type: "adaptive" },
},
},
},
});
expect(capturedOptions!.thinking).toEqual({ type: "adaptive" });
});
});
describe("cwd validation", () => {
it("rejects a relative cwd with invalidParams", async () => {
await expect(
agent.newSession({ cwd: "relative/path", mcpServers: [] }),
).rejects.toMatchObject({ code: RequestError.invalidParams().code });
});
it("rejects a non-existent cwd with invalidParams", async () => {
const missing = path.join(os.tmpdir(), "claude-acp-does-not-exist-xyz");
await expect(agent.newSession({ cwd: missing, mcpServers: [] })).rejects.toMatchObject({
code: RequestError.invalidParams().code,
});
});
it("rejects a cwd that points at a file with invalidParams", async () => {
const file = path.join(os.tmpdir(), "claude-acp-cwd-is-a-file.txt");
fs.writeFileSync(file, "not a directory");
try {
await expect(agent.newSession({ cwd: file, mcpServers: [] })).rejects.toMatchObject({
code: RequestError.invalidParams().code,
});
} finally {
fs.rmSync(file, { force: true });
}
});
it("accepts an existing absolute directory", async () => {
await expect(agent.newSession({ cwd: process.cwd(), mcpServers: [] })).resolves.toBeDefined();
});
});
describe("elicitation", () => {
it("keeps AskUserQuestion disabled and omits callbacks without elicitation capability", async () => {
await agent.initialize({ protocolVersion: 1, clientCapabilities: {} });
await agent.newSession({ cwd: process.cwd(), mcpServers: [] });
expect(capturedOptions!.disallowedTools).toContain("AskUserQuestion");
expect(capturedOptions!.onElicitation).toBeUndefined();
});
it("enables AskUserQuestion and wires the elicitation callback when form is supported", async () => {
await agent.initialize({
protocolVersion: 1,
clientCapabilities: { elicitation: { form: {} } },
});
await agent.newSession({ cwd: process.cwd(), mcpServers: [] });
expect(capturedOptions!.disallowedTools).not.toContain("AskUserQuestion");
expect(typeof capturedOptions!.onElicitation).toBe("function");
});
it("wires callbacks for url-only elicitation but keeps AskUserQuestion disabled", async () => {
await agent.initialize({
protocolVersion: 1,
clientCapabilities: { elicitation: { url: {} } },
});
await agent.newSession({ cwd: process.cwd(), mcpServers: [] });
expect(capturedOptions!.disallowedTools).toContain("AskUserQuestion");
expect(typeof capturedOptions!.onElicitation).toBe("function");
});
it("still merges user-provided disallowedTools when AskUserQuestion is enabled", async () => {
await agent.initialize({
protocolVersion: 1,
clientCapabilities: { elicitation: { form: {} } },
});
await agent.newSession({
cwd: process.cwd(),
mcpServers: [],
_meta: { claudeCode: { options: { disallowedTools: ["WebSearch"] } } },
});
expect(capturedOptions!.disallowedTools).toContain("WebSearch");
expect(capturedOptions!.disallowedTools).not.toContain("AskUserQuestion");
});
});
});

View File

@@ -0,0 +1,391 @@
import { describe, it, expect } from "vitest";
import type {
CreateElicitationRequest,
CreateElicitationResponse,
EnumOption,
} from "@agentclientprotocol/sdk";
import type { ElicitationRequest } from "@anthropic-ai/claude-agent-sdk";
import {
applyAskElicitationResponse,
askUserQuestionsToCreateRequest,
AskUserQuestion,
createElicitationResponseToElicitResult,
extractAskUserQuestions,
mcpElicitationToCreateRequest,
} from "../elicitation.js";
const SESSION_ID = "session-1";
/**
* Build a question matching the SDK's (strict) AskUserQuestion schema while
* keeping test sites terse. Option descriptions default to "" (the tool always
* provides one); pass a description to exercise the "label — description" title.
*/
function mkQuestion(
question: string,
options: Array<{ label: string; description?: string; preview?: string }>,
opts: { header?: string; multiSelect?: boolean } = {},
): AskUserQuestion {
return {
question,
header: opts.header ?? "",
multiSelect: opts.multiSelect ?? false,
options: options.map((o) => ({
label: o.label,
description: o.description ?? "",
...(o.preview ? { preview: o.preview } : {}),
})),
} as AskUserQuestion;
}
describe("mcpElicitationToCreateRequest", () => {
it("maps a form-mode request, defaulting the schema type to object", () => {
const request: ElicitationRequest = {
serverName: "server",
message: "Need your name",
mode: "form",
requestedSchema: { properties: { name: { type: "string" } } },
};
const result = mcpElicitationToCreateRequest(request, SESSION_ID);
expect(result).toEqual({
mode: "form",
sessionId: SESSION_ID,
message: "Need your name",
requestedSchema: { type: "object", properties: { name: { type: "string" } } },
});
});
it("maps a url-mode request and preserves the elicitation id", () => {
const request: ElicitationRequest = {
serverName: "server",
message: "Authorize",
mode: "url",
url: "https://example.com/auth",
elicitationId: "el-123",
};
expect(mcpElicitationToCreateRequest(request, SESSION_ID)).toEqual({
mode: "url",
sessionId: SESSION_ID,
message: "Authorize",
url: "https://example.com/auth",
elicitationId: "el-123",
});
});
it("generates an elicitation id when a url request omits one", () => {
const request: ElicitationRequest = {
serverName: "server",
message: "Authorize",
mode: "url",
url: "https://example.com/auth",
};
const result = mcpElicitationToCreateRequest(request, SESSION_ID);
expect(result?.mode).toBe("url");
expect((result as { elicitationId: string }).elicitationId).toMatch(/.+/);
});
it("returns null for a url request with no url", () => {
const request: ElicitationRequest = {
serverName: "server",
message: "Authorize",
mode: "url",
};
expect(mcpElicitationToCreateRequest(request, SESSION_ID)).toBeNull();
});
});
describe("createElicitationResponseToElicitResult", () => {
it("maps accept with content", () => {
const response = { action: "accept", content: { name: "Ada" } } as CreateElicitationResponse;
expect(createElicitationResponseToElicitResult(response)).toEqual({
action: "accept",
content: { name: "Ada" },
});
});
it("defaults accept content to an empty object", () => {
const response = { action: "accept" } as CreateElicitationResponse;
expect(createElicitationResponseToElicitResult(response)).toEqual({
action: "accept",
content: {},
});
});
it("maps decline and cancel", () => {
expect(
createElicitationResponseToElicitResult({ action: "decline" } as CreateElicitationResponse),
).toEqual({ action: "decline" });
expect(
createElicitationResponseToElicitResult({ action: "cancel" } as CreateElicitationResponse),
).toEqual({ action: "cancel" });
});
});
describe("extractAskUserQuestions", () => {
const question = mkQuestion("Which?", [{ label: "A" }, { label: "B" }]);
it("reads questions off the tool input", () => {
expect(extractAskUserQuestions({ questions: [question] })).toEqual([question]);
});
it("returns null when there are no questions", () => {
expect(extractAskUserQuestions({})).toBeNull();
expect(extractAskUserQuestions({ questions: [] })).toBeNull();
});
it("filters out malformed questions (missing options, empty options, bad question)", () => {
const input = {
questions: [
question,
{ question: "missing options" },
{ options: [] },
{ options: [], question: "empty" },
],
} as unknown as Record<string, unknown>;
expect(extractAskUserQuestions(input)).toEqual([question]);
});
it("returns null when every question is filtered out", () => {
const input = {
questions: [{ question: "no options" }, { options: [{ label: "A" }] }],
} as unknown as Record<string, unknown>;
expect(extractAskUserQuestions(input)).toBeNull();
});
});
describe("askUserQuestionsToCreateRequest", () => {
it("keys a single-select question by a stable id and carries the prompt in message only", () => {
const questions = [
mkQuestion(
"Which library?",
[{ label: "date-fns", description: "Lightweight" }, { label: "luxon" }],
{
header: "Library",
},
),
];
const result = askUserQuestionsToCreateRequest(questions, SESSION_ID, "tool-1");
expect(result).toMatchObject({
mode: "form",
sessionId: SESSION_ID,
toolCallId: "tool-1",
message: "Which library?",
});
const schema = (result as Extract<CreateElicitationRequest, { mode: "form" }>).requestedSchema;
// Nothing is required; the user can pick, type a custom answer, or skip.
expect(schema.required).toBeUndefined();
// Single question → no duplicated description (prompt is in `message`).
expect(schema.properties?.["question_0"]).toEqual({
type: "string",
title: "Library",
description: undefined,
oneOf: [
{
const: "date-fns",
title: "date-fns — Lightweight",
// Structured description forwarded under `_meta` so clients can render
// it as secondary text instead of parsing it out of the title.
_meta: { "_claude/askUserQuestionOption": { description: "Lightweight" } },
},
// No description → no `_meta` emitted.
{ const: "luxon", title: "luxon" },
],
});
// The full question text is not used as a property key.
expect(schema.properties?.["Which library?"]).toBeUndefined();
});
it("forwards option description and preview under _meta for rich clients", () => {
const questions = [
mkQuestion("Which layout?", [
{
label: "Grid",
description: "Cards in a responsive grid",
preview: "```\n[ ] [ ] [ ]\n[ ] [ ] [ ]\n```",
},
{ label: "List", description: "Stacked rows" },
{ label: "Plain" },
]),
];
const schema = (
askUserQuestionsToCreateRequest(questions, SESSION_ID, undefined) as Extract<
CreateElicitationRequest,
{ mode: "form" }
>
).requestedSchema;
const oneOf = (schema.properties?.["question_0"] as { oneOf: EnumOption[] }).oneOf;
// Both description and preview travel structurally; the title still flattens
// the description for clients that only read const/title.
expect(oneOf[0]).toEqual({
const: "Grid",
title: "Grid — Cards in a responsive grid",
_meta: {
"_claude/askUserQuestionOption": {
description: "Cards in a responsive grid",
preview: "```\n[ ] [ ] [ ]\n[ ] [ ] [ ]\n```",
},
},
});
// Description only → preview omitted from _meta.
expect(oneOf[1]._meta).toEqual({
"_claude/askUserQuestionOption": { description: "Stacked rows" },
});
// Neither → no _meta at all.
expect(oneOf[2]._meta).toBeUndefined();
});
it("includes a per-question optional free-text custom-answer field", () => {
const questions = [
mkQuestion("Which?", [{ label: "A" }, { label: "B" }]),
mkQuestion("What else?", [{ label: "C" }, { label: "D" }]),
];
const schema = (
askUserQuestionsToCreateRequest(questions, SESSION_ID, undefined) as Extract<
CreateElicitationRequest,
{ mode: "form" }
>
).requestedSchema;
// Each question gets its own "Other" box, not one shared form-level field.
expect(schema.properties?.["question_0_custom"]).toMatchObject({
type: "string",
title: "Other",
});
expect(schema.properties?.["question_1_custom"]).toMatchObject({
type: "string",
title: "Other",
});
});
it("builds an array property for multi-select questions and includes per-field question text", () => {
const questions = [
mkQuestion("Pick one?", [{ label: "A" }, { label: "B" }]),
mkQuestion("Which features?", [{ label: "auth" }, { label: "logging" }], {
multiSelect: true,
}),
];
const result = askUserQuestionsToCreateRequest(questions, SESSION_ID, undefined);
const schema = (result as Extract<CreateElicitationRequest, { mode: "form" }>).requestedSchema;
expect(result).not.toHaveProperty("toolCallId");
// Multiple questions → generic message, each field carries its own question.
expect(result.message).toBe("Please answer the following questions.");
expect(schema.properties?.["question_1"]).toEqual({
type: "array",
title: undefined,
description: "Which features?",
items: {
anyOf: [
{ const: "auth", title: "auth" },
{ const: "logging", title: "logging" },
],
},
});
});
});
describe("applyAskElicitationResponse", () => {
const questions = [
mkQuestion("Single?", [{ label: "A" }, { label: "B" }]),
mkQuestion("Multi?", [{ label: "X" }, { label: "Y" }], { multiSelect: true }),
];
const toolInput = { questions, metadata: { source: "test" } };
it("writes selected labels (keyed by indexed fields) into updatedInput on accept", () => {
const response = {
action: "accept",
content: { question_0: "A", question_1: ["X", "Y"] },
} as CreateElicitationResponse;
expect(applyAskElicitationResponse(response, toolInput, questions)).toEqual({
action: "answered",
updatedInput: {
questions,
metadata: { source: "test" },
answers: { "Single?": "A", "Multi?": "X, Y" },
},
});
});
it("folds a per-question custom answer into that question's answer", () => {
const response = {
action: "accept",
content: { question_0: "A", question_1_custom: "something else entirely" },
} as CreateElicitationResponse;
expect(applyAskElicitationResponse(response, toolInput, questions)).toEqual({
action: "answered",
updatedInput: {
questions,
metadata: { source: "test" },
answers: { "Single?": "A", "Multi?": "something else entirely" },
},
});
});
it("prefers a question's custom answer over its selection", () => {
const response = {
action: "accept",
content: { question_0: "A", question_0_custom: " my own take " },
} as CreateElicitationResponse;
expect(applyAskElicitationResponse(response, toolInput, questions)).toEqual({
action: "answered",
updatedInput: {
questions,
metadata: { source: "test" },
answers: { "Single?": "my own take" },
},
});
});
it("ignores empty selections and blank custom answers", () => {
const response = {
action: "accept",
content: { question_1: [], question_0_custom: " " },
} as CreateElicitationResponse;
expect(applyAskElicitationResponse(response, toolInput, questions)).toEqual({
action: "answered",
updatedInput: { questions, metadata: { source: "test" }, answers: {} },
});
});
it("treats decline as answered with no answers", () => {
const response = { action: "decline" } as CreateElicitationResponse;
expect(applyAskElicitationResponse(response, toolInput, questions)).toEqual({
action: "answered",
updatedInput: { questions, metadata: { source: "test" }, answers: {} },
});
});
it("returns cancel on cancel", () => {
const response = { action: "cancel" } as CreateElicitationResponse;
expect(applyAskElicitationResponse(response, toolInput, questions)).toEqual({
action: "cancel",
});
});
it("omits answers for questions the user left unanswered", () => {
const response = {
action: "accept",
content: { question_0: "B" },
} as CreateElicitationResponse;
const result = applyAskElicitationResponse(response, toolInput, questions);
expect(result.action).toBe("answered");
expect((result as Extract<typeof result, { action: "answered" }>).updatedInput.answers).toEqual(
{ "Single?": "B" },
);
});
});

View File

@@ -148,13 +148,13 @@ describe("session config options", () => {
describe("newSession returns configOptions", () => {
it("includes configOptions in the response", async () => {
const response = await agent.newSession({ cwd: "/test", mcpServers: [] });
const response = await agent.newSession({ cwd: process.cwd(), mcpServers: [] });
expect(response.configOptions).toBeDefined();
expect(response.configOptions).toEqual(MOCK_CONFIG_OPTIONS);
});
it("includes mode and model config options", async () => {
const response = await agent.newSession({ cwd: "/test", mcpServers: [] });
const response = await agent.newSession({ cwd: process.cwd(), mcpServers: [] });
const modeOption = response.configOptions?.find((o) => o.id === "mode");
const modelOption = response.configOptions?.find((o) => o.id === "model");
expect(modeOption).toBeDefined();
@@ -173,7 +173,7 @@ describe("session config options", () => {
(agent as unknown as { loadSession: typeof loadSessionSpy }).loadSession = loadSessionSpy;
const response = await agent.loadSession({
cwd: "/test",
cwd: process.cwd(),
sessionId: SESSION_ID,
mcpServers: [],
});
@@ -216,6 +216,31 @@ describe("session config options", () => {
).rejects.toThrow("Invalid value for config option mode: invalid-mode");
});
it("rejects mode and config changes once the query stream has closed (husk session)", async () => {
// After an unexpected stream death the session lingers as a husk
// (queryClosed=true) so prompt() can answer with a clear error. The
// config/mode handlers must do the same rather than calling setModel/
// setPermissionMode on the closed query.
const session = (agent as unknown as { sessions: Record<string, { queryClosed?: boolean }> })
.sessions[SESSION_ID];
session.queryClosed = true;
await expect(
agent.setSessionConfigOption({
sessionId: SESSION_ID,
configId: "model",
value: "claude-sonnet-4-6",
}),
).rejects.toThrow(/start a new session/);
await expect(agent.setSessionMode({ sessionId: SESSION_ID, modeId: "plan" })).rejects.toThrow(
/start a new session/,
);
// Short-circuited before touching the (closed) query.
expect(setModelSpy).not.toHaveBeenCalled();
expect(setPermissionModeSpy).not.toHaveBeenCalled();
});
it("changes mode, sends current_mode_update but not config_option_update", async () => {
await agent.setSessionConfigOption({
sessionId: SESSION_ID,
@@ -377,33 +402,30 @@ describe("session config options", () => {
});
});
describe("unstable_setSessionModel sends config_option_update", () => {
describe("setSessionConfigOption(model) returns updated configOptions", () => {
beforeEach(() => {
populateSession();
});
it("sends config_option_update when model is changed via setSessionModel", async () => {
await agent.unstable_setSessionModel({
it("returns configOptions with the new model when changed", async () => {
const response = await agent.setSessionConfigOption({
sessionId: SESSION_ID,
modelId: "claude-sonnet-4-6",
configId: "model",
value: "claude-sonnet-4-6",
});
const configUpdate = sessionUpdates.find(
(n) => n.update.sessionUpdate === "config_option_update",
);
expect(configUpdate).toBeDefined();
expect(configUpdate?.update).toMatchObject({
sessionUpdate: "config_option_update",
configOptions: expect.arrayContaining([
expect(response.configOptions).toEqual(
expect.arrayContaining([
expect.objectContaining({ id: "model", currentValue: "claude-sonnet-4-6" }),
]),
});
);
});
it("updates stored configOptions currentValue when model changes", async () => {
await agent.unstable_setSessionModel({
await agent.setSessionConfigOption({
sessionId: SESSION_ID,
modelId: "claude-sonnet-4-6",
configId: "model",
value: "claude-sonnet-4-6",
});
const session = (
@@ -415,7 +437,7 @@ describe("session config options", () => {
expect(modelOption?.currentValue).toBe("claude-sonnet-4-6");
});
it("includes updated effort in config_option_update when model drops effort support", async () => {
it("drops effort from returned configOptions when model drops effort support", async () => {
const session = (agent as unknown as { sessions: Record<string, any> }).sessions[SESSION_ID];
session.modelInfos = [
{
@@ -433,23 +455,18 @@ describe("session config options", () => {
},
];
await agent.unstable_setSessionModel({
const response = await agent.setSessionConfigOption({
sessionId: SESSION_ID,
modelId: "claude-sonnet-4-6",
configId: "model",
value: "claude-sonnet-4-6",
});
const configUpdate = sessionUpdates.find(
(n) => n.update.sessionUpdate === "config_option_update",
);
expect(configUpdate).toBeDefined();
const effortOption = (configUpdate?.update as any).configOptions.find(
(o: any) => o.id === "effort",
);
const effortOption = response.configOptions.find((o) => o.id === "effort");
expect(effortOption).toBeUndefined();
expect(applyFlagSettingsSpy).toHaveBeenCalledWith({ effortLevel: null });
});
it("clamps effort in config_option_update when new model has different supported levels", async () => {
it("clamps effort in returned configOptions when new model has different supported levels", async () => {
// Set current effort to "max" which the new model won't support
const session = (agent as unknown as { sessions: Record<string, any> }).sessions[SESSION_ID];
const effortOpt = session.configOptions.find((o: any) => o.id === "effort");
@@ -472,39 +489,31 @@ describe("session config options", () => {
},
];
await agent.unstable_setSessionModel({
const response = await agent.setSessionConfigOption({
sessionId: SESSION_ID,
modelId: "claude-sonnet-4-6",
configId: "model",
value: "claude-sonnet-4-6",
});
const configUpdate = sessionUpdates.find(
(n) => n.update.sessionUpdate === "config_option_update",
);
const effortOption = (configUpdate?.update as any).configOptions.find(
(o: any) => o.id === "effort",
);
const effortOption = response.configOptions.find((o) => o.id === "effort");
expect(effortOption).toBeDefined();
expect(effortOption.currentValue).toBe("default");
expect(effortOption?.currentValue).toBe("default");
expect(applyFlagSettingsSpy).toHaveBeenCalledWith({ effortLevel: null });
});
it("preserves effort in config_option_update when new model supports same level", async () => {
it("preserves effort in returned configOptions when new model supports same level", async () => {
// Set effort to "low" first
const session = (agent as unknown as { sessions: Record<string, any> }).sessions[SESSION_ID];
const effortOpt = session.configOptions.find((o: any) => o.id === "effort");
if (effortOpt) effortOpt.currentValue = "low";
await agent.unstable_setSessionModel({
const response = await agent.setSessionConfigOption({
sessionId: SESSION_ID,
modelId: "claude-sonnet-4-6",
configId: "model",
value: "claude-sonnet-4-6",
});
const configUpdate = sessionUpdates.find(
(n) => n.update.sessionUpdate === "config_option_update",
);
const effortOption = (configUpdate?.update as any).configOptions.find(
(o: any) => o.id === "effort",
);
const effortOption = response.configOptions.find((o) => o.id === "effort");
expect(effortOption?.currentValue).toBe("low");
// Effort didn't change, so applyFlagSettings should NOT be called
expect(applyFlagSettingsSpy).not.toHaveBeenCalled();
@@ -821,10 +830,11 @@ describe("session config options", () => {
expect(session.configOptions.find((o) => o.id === "mode")?.currentValue).toBe("plan");
});
it("setSessionModel also syncs configOptions", async () => {
await agent.unstable_setSessionModel({
it("setSessionConfigOption(model) also syncs configOptions", async () => {
await agent.setSessionConfigOption({
sessionId: SESSION_ID,
modelId: "claude-sonnet-4-6",
configId: "model",
value: "claude-sonnet-4-6",
});
const session = (
@@ -947,58 +957,21 @@ describe("session config options", () => {
it("drops `auto` from available modes when switching to Haiku", async () => {
setupHaikuOpusSession("default");
await agent.unstable_setSessionModel({
const response = await agent.setSessionConfigOption({
sessionId: SESSION_ID,
modelId: "claude-haiku-4-5",
configId: "model",
value: "claude-haiku-4-5",
});
const configUpdate = sessionUpdates.find(
(n) => n.update.sessionUpdate === "config_option_update",
);
expect(configUpdate).toBeDefined();
const modeOption = (configUpdate?.update as any).configOptions.find(
(o: any) => o.id === "mode",
);
const modeOption = response.configOptions.find((o) => o.id === "mode");
expect(modeOption).toBeDefined();
const modeValues = modeOption.options.map((o: any) => o.value);
const modeValues = (modeOption as any).options.map((o: any) => o.value);
expect(modeValues).not.toContain("auto");
expect(modeValues).toEqual(
expect.arrayContaining(["default", "acceptEdits", "plan", "dontAsk"]),
);
});
it("clamps to `default` and emits current_mode_update when Opus(auto) → Haiku", async () => {
setupHaikuOpusSession("auto");
await agent.unstable_setSessionModel({
sessionId: SESSION_ID,
modelId: "claude-haiku-4-5",
});
// SDK was synced to "default".
expect(setPermissionModeSpy).toHaveBeenCalledWith("default");
// current_mode_update was emitted before config_option_update so a
// client applying notifications in order observes the mode change
// before re-rendering the config-option list.
const modeUpdateIdx = sessionUpdates.findIndex(
(n) => n.update.sessionUpdate === "current_mode_update",
);
const configUpdateIdx = sessionUpdates.findIndex(
(n) => n.update.sessionUpdate === "config_option_update",
);
expect(modeUpdateIdx).toBeGreaterThanOrEqual(0);
expect(configUpdateIdx).toBeGreaterThanOrEqual(0);
expect(modeUpdateIdx).toBeLessThan(configUpdateIdx);
expect((sessionUpdates[modeUpdateIdx].update as any).currentModeId).toBe("default");
// configOptions reflect the clamped mode.
const modeOption = (sessionUpdates[configUpdateIdx].update as any).configOptions.find(
(o: any) => o.id === "mode",
);
expect(modeOption.currentValue).toBe("default");
});
it("re-adds `auto` when switching from Haiku back to Opus", async () => {
const session = setupHaikuOpusSession("default");
// Pretend Haiku is the current model with no `auto`.
@@ -1013,19 +986,15 @@ describe("session config options", () => {
description: m.description,
}));
await agent.unstable_setSessionModel({
const response = await agent.setSessionConfigOption({
sessionId: SESSION_ID,
modelId: "claude-opus-4-5",
configId: "model",
value: "claude-opus-4-5",
});
const configUpdate = sessionUpdates.find(
(n) => n.update.sessionUpdate === "config_option_update",
);
expect(configUpdate).toBeDefined();
const modeOption = (configUpdate?.update as any).configOptions.find(
(o: any) => o.id === "mode",
);
const modeValues = modeOption.options.map((o: any) => o.value);
const modeOption = response.configOptions.find((o) => o.id === "mode");
expect(modeOption).toBeDefined();
const modeValues = (modeOption as any).options.map((o: any) => o.value);
expect(modeValues).toContain("auto");
// The current mode ("default") is still valid on Opus, so no
@@ -1039,9 +1008,10 @@ describe("session config options", () => {
it("preserves the current mode when it remains valid after a model switch", async () => {
setupHaikuOpusSession("plan");
await agent.unstable_setSessionModel({
const response = await agent.setSessionConfigOption({
sessionId: SESSION_ID,
modelId: "claude-haiku-4-5",
configId: "model",
value: "claude-haiku-4-5",
});
// `plan` is in availableModes for both Opus and Haiku, so no clamp.
@@ -1052,20 +1022,15 @@ describe("session config options", () => {
);
expect(modeUpdates).toHaveLength(0);
const configUpdate = sessionUpdates.find(
(n) => n.update.sessionUpdate === "config_option_update",
);
const modeOption = (configUpdate?.update as any).configOptions.find(
(o: any) => o.id === "mode",
);
expect(modeOption.currentValue).toBe("plan");
const modeOption = response.configOptions.find((o) => o.id === "mode");
expect((modeOption as any).currentValue).toBe("plan");
});
it("clamps mode and emits current_mode_update via setSessionConfigOption(model)", async () => {
// Mirrors the unstable_setSessionModel(auto → Haiku) test, but goes
// through the request/response API. The `current_mode_update` side
// effect must still fire so clients learn about the clamp regardless of
// which entry point triggered the model switch.
// Switching Opus(auto) → Haiku clamps the mode to "default". The
// `current_mode_update` side effect must fire so clients learn about the
// clamp even though the request/response API returns the new
// configOptions rather than emitting a config_option_update.
setupHaikuOpusSession("auto");
const response = await agent.setSessionConfigOption({

View File

@@ -1,4 +1,4 @@
import { describe, it, expect } from "vitest";
import { describe, it, expect, beforeEach } from "vitest";
import { AgentSideConnection, ClientCapabilities } from "@agentclientprotocol/sdk";
import { ImageBlockParam, ToolResultBlockParam } from "@anthropic-ai/sdk/resources";
import {
@@ -502,6 +502,23 @@ describe("Bash terminal output", () => {
});
});
it("should route failed commands through the terminal when supportsTerminalOutput is true", () => {
const toolResult: ToolResultBlockParam = {
type: "tool_result",
tool_use_id: "toolu_bash",
content: "some error output",
is_error: true,
};
const update = toolUpdateFromToolResult(toolResult, bashToolUse, true);
expect(update.content).toEqual([{ type: "terminal", terminalId: "toolu_bash" }]);
expect(update._meta).toEqual({
terminal_info: { terminal_id: "toolu_bash" },
terminal_output: { terminal_id: "toolu_bash", data: "some error output" },
terminal_exit: { terminal_id: "toolu_bash", exit_code: 1, signal: null },
});
});
it("should fall back to stderr when stdout is empty", () => {
const toolResult = makeBashResult("", "some error output", 1);
const update = toolUpdateFromToolResult(toolResult, bashToolUse, false);
@@ -610,10 +627,25 @@ describe("Bash terminal output", () => {
});
});
it("should use error handler when is_error is true (early return before Bash case)", () => {
it("should route is_error through the terminal when supportsTerminalOutput is true", () => {
const toolResult = makeStringBashResult("command not found: bad_cmd", true);
const update = toolUpdateFromToolResult(toolResult, bashToolUse, true);
// Failed Bash commands skip the early error return and reach the Bash
// case so the client receives terminal output with a non-zero exit code
// instead of plain markdown details.
expect(update.content).toEqual([{ type: "terminal", terminalId: "toolu_bash" }]);
expect(update._meta).toEqual({
terminal_info: { terminal_id: "toolu_bash" },
terminal_output: { terminal_id: "toolu_bash", data: "command not found: bad_cmd" },
terminal_exit: { terminal_id: "toolu_bash", exit_code: 1, signal: null },
});
});
it("should use error handler when is_error is true and terminal output is unsupported", () => {
const toolResult = makeStringBashResult("command not found: bad_cmd", true);
const update = toolUpdateFromToolResult(toolResult, bashToolUse, false);
// is_error with content hits the early error return at the top of
// toolUpdateFromToolResult, before reaching the Bash switch case.
// So there's no terminal _meta, just error-formatted content.
@@ -673,14 +705,19 @@ describe("Bash terminal output", () => {
});
describe("toAcpNotifications with clientCapabilities", () => {
const toolUseCache: ToolUseCache = {
toolu_bash: {
type: "tool_use",
id: "toolu_bash",
name: "Bash",
input: { command: "ls -la" },
},
};
// Reset before each test: toAcpNotifications prunes the cache entry once it
// maps the tool_result, so a shared object would be empty by the 2nd test.
let toolUseCache: ToolUseCache;
beforeEach(() => {
toolUseCache = {
toolu_bash: {
type: "tool_use",
id: "toolu_bash",
name: "Bash",
input: { command: "ls -la" },
},
};
});
const bashResult: BetaBashCodeExecutionResultBlock = {
type: "bash_code_execution_result",
@@ -792,11 +829,21 @@ describe("Bash terminal output", () => {
{ clientCapabilities: { _meta: { terminal_output: true } } },
);
// Fresh cache: the withSupport call above already consumed the entry,
// since toAcpNotifications prunes the tool_use once it maps the result.
const toolUseCacheWithoutSupport: ToolUseCache = {
toolu_bash: {
type: "tool_use",
id: "toolu_bash",
name: "Bash",
input: { command: "ls -la" },
},
};
const withoutSupport = toAcpNotifications(
[toolResult],
"assistant",
"test-session",
toolUseCache,
toolUseCacheWithoutSupport,
mockClient,
mockLogger,
);
@@ -848,6 +895,31 @@ describe("Bash terminal output", () => {
});
});
describe("toolUseCache pruning", () => {
it("retains the tool_use entry until its result, then prunes it", () => {
const toolUseCache: ToolUseCache = {};
const toolUse = {
type: "tool_use" as const,
id: "toolu_read",
name: "Read",
input: { file_path: "/tmp/x.txt" },
};
// tool_use is cached and kept (the matching result hasn't arrived yet).
toAcpNotifications([toolUse], "assistant", "s", toolUseCache, mockClient, mockLogger);
expect(toolUseCache.toolu_read).toBeDefined();
// tool_result resolves it, so the entry is pruned to bound memory.
const toolResult: ToolResultBlockParam = {
type: "tool_result",
tool_use_id: "toolu_read",
content: [{ type: "text", text: "hello" }],
};
toAcpNotifications([toolResult], "assistant", "s", toolUseCache, mockClient, mockLogger);
expect(toolUseCache.toolu_read).toBeUndefined();
});
});
describe("post-tool-use hook sends diff content for Edit tool", () => {
it("should include content and locations from structuredPatch in hook update", async () => {
const toolUseCache: ToolUseCache = {};

View File

@@ -8,6 +8,7 @@ import {
import { HookCallback } from "@anthropic-ai/claude-agent-sdk";
import {
AgentInput,
AskUserQuestionInput,
BashInput,
FileEditInput,
FileReadInput,
@@ -415,6 +416,24 @@ export function toolInfoFromToolUse(
};
}
case "AskUserQuestion": {
const input = toolUse.input as Partial<AskUserQuestionInput> | undefined;
const questions = Array.isArray(input?.questions) ? input.questions : [];
return {
title:
questions.length === 1 && questions[0]?.question
? questions[0].question
: "Asking for your input",
kind: "other",
content: questions
.filter((q) => typeof q?.question === "string")
.map((q) => ({
type: "content" as const,
content: { type: "text" as const, text: q.question },
})),
};
}
case "Other": {
const input = toolUse.input;
let output;
@@ -466,7 +485,8 @@ export function toolUpdateFromToolResult(
"is_error" in toolResult &&
toolResult.is_error &&
toolResult.content &&
toolResult.content.length > 0
toolResult.content.length > 0 &&
!(toolUse?.name === "Bash" && supportsTerminalOutput)
) {
// Only return errors
return toAcpContentUpdate(toolResult.content, true);