mirror of
https://github.com/agentclientprotocol/claude-agent-acp.git
synced 2026-10-27 12:40:32 +00:00
feat(deps): update to claude-agent-sdk 0.3.143 (#664)
Bumps the minor group with 11 updates in the / directory: | Package | From | To | | --- | --- | --- | | [@agentclientprotocol/sdk](https://github.com/agentclientprotocol/typescript-sdk) | `0.21.0` | `0.21.1` | | [@anthropic-ai/claude-agent-sdk](https://github.com/anthropics/claude-agent-sdk-typescript) | `0.2.132` | `0.3.143` | | [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) | `25.6.0` | `25.8.0` | | [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) | `8.59.2` | `8.59.3` | | [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) | `8.59.2` | `8.59.3` | | [eslint](https://github.com/eslint/eslint) | `10.3.0` | `10.4.0` | | [vitest](https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest) | `4.1.5` | `4.1.6` | | [brace-expansion](https://github.com/juliangruber/brace-expansion) | `5.0.5` | `5.0.6` | | [express-rate-limit](https://github.com/express-rate-limit/express-rate-limit) | `8.5.1` | `8.5.2` | | [semver](https://github.com/npm/node-semver) | `7.7.4` | `7.8.0` | | [type-is](https://github.com/jshttp/type-is) | `2.0.1` | `2.1.0` | Updates `@agentclientprotocol/sdk` from 0.21.0 to 0.21.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.21.1</h2> <h2><a href="https://github.com/agentclientprotocol/typescript-sdk/compare/v0.21.0...v0.21.1">0.21.1</a> (2026-05-14)</h2> <h3>Bug Fixes</h3> <ul> <li>emit .js extensions in generated schema barrel for nodenext consumers (<a href="https://redirect.github.com/agentclientprotocol/typescript-sdk/issues/146">#146</a>) (<a href="63b96db49d">63b96db</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.21.0...v0.21.1">0.21.1</a> (2026-05-14)</h2> <h3>Bug Fixes</h3> <ul> <li>emit .js extensions in generated schema barrel for nodenext consumers (<a href="https://redirect.github.com/agentclientprotocol/typescript-sdk/issues/146">#146</a>) (<a href="63b96db49d">63b96db</a>)</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="e0099180fe"><code>e009918</code></a> chore(main): release 0.21.1 (<a href="https://redirect.github.com/agentclientprotocol/typescript-sdk/issues/147">#147</a>)</li> <li><a href="63b96db49d"><code>63b96db</code></a> fix: emit .js extensions in generated schema barrel for nodenext consumers (#...</li> <li><a href="dfb5692fb0"><code>dfb5692</code></a> chore(deps): bump crate-ci/typos from 1.46.0 to 1.46.1 (<a href="https://redirect.github.com/agentclientprotocol/typescript-sdk/issues/144">#144</a>)</li> <li><a href="8ca90556b0"><code>8ca9055</code></a> chore(deps): bump the minor group with 22 updates (<a href="https://redirect.github.com/agentclientprotocol/typescript-sdk/issues/145">#145</a>)</li> <li><a href="7355cdd139"><code>7355cdd</code></a> chore(deps): bump crate-ci/typos from 1.45.1 to 1.46.0 (<a href="https://redirect.github.com/agentclientprotocol/typescript-sdk/issues/140">#140</a>)</li> <li><a href="0b33b85eba"><code>0b33b85</code></a> chore(deps): bump the minor group with 20 updates (<a href="https://redirect.github.com/agentclientprotocol/typescript-sdk/issues/141">#141</a>)</li> <li><a href="f017cfaf52"><code>f017cfa</code></a> chore(deps-dev): bump nanoid from 3.3.11 to 3.3.12 (<a href="https://redirect.github.com/agentclientprotocol/typescript-sdk/issues/142">#142</a>)</li> <li>See full diff in <a href="https://github.com/agentclientprotocol/typescript-sdk/compare/v0.21.0...v0.21.1">compare view</a></li> </ul> </details> <br /> Updates `@anthropic-ai/claude-agent-sdk` from 0.2.132 to 0.3.143 <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.143</h2> <h2>What's changed</h2> <ul> <li><code>@anthropic-ai/sdk</code> and <code>@modelcontextprotocol/sdk</code> are now <code>peerDependencies</code> instead of <code>dependencies</code>. Runtime is unaffected (both are bundled); npm/bun/pnpm auto-install them. yarn classic users should add them explicitly for full TypeScript type resolution</li> </ul> <h2>Update</h2> <pre lang="sh"><code>npm install @anthropic-ai/claude-agent-sdk@0.3.143 # or yarn add @anthropic-ai/claude-agent-sdk@0.3.143 # or pnpm add @anthropic-ai/claude-agent-sdk@0.3.143 # or bun add @anthropic-ai/claude-agent-sdk@0.3.143 </code></pre> <h2>v0.3.142</h2> <h2>What's changed</h2> <ul> <li><strong>Breaking:</strong> Removed the v2 session API (<code>unstable_v2_createSession</code>, <code>unstable_v2_resumeSession</code>, <code>unstable_v2_prompt</code>, <code>SDKSession</code>, <code>SDKSessionOptions</code>), deprecated since 0.2.133. Use <code>query()</code> — pass an <code>AsyncIterable<SDKUserMessage></code> for multi-turn, or <code>options.resume</code> to continue a session.</li> <li><strong>Breaking:</strong> MCP servers now connect in the background by default; sessions start immediately and slow servers report <code>status: "pending"</code> in <code>init</code> until ready. Set <code>MCP_CONNECTION_NONBLOCKING=0</code> to restore the old behavior of waiting up to 5s before the first query, or mark a server <code>alwaysLoad: true</code> to require it in turn 1.</li> <li><strong>Breaking:</strong> Headless and SDK sessions now use Task tools (<code>TaskCreate</code> / <code>TaskUpdate</code> / <code>TaskGet</code> / <code>TaskList</code>) instead of <code>TodoWrite</code>, deprecated since 0.2.136. Tool consumers should accumulate by task ID instead of replacing a snapshot list.</li> <li>Surfaced <code>request_id</code>, <code>subagent_type</code>, and <code>task_description</code> on SDK message types and task system events</li> <li>Headless <code>--sdk-url</code> sessions now exit non-zero with a stderr diagnostic when the remote transport closes permanently (401/403/404 or WS permanent close), instead of silently exiting 0</li> </ul> <h2>Update</h2> <pre lang="sh"><code>npm install @anthropic-ai/claude-agent-sdk@0.3.142 # or yarn add @anthropic-ai/claude-agent-sdk@0.3.142 # or pnpm add @anthropic-ai/claude-agent-sdk@0.3.142 # or bun add @anthropic-ai/claude-agent-sdk@0.3.142 </code></pre> <h2>v0.2.141</h2> <h2>What's changed</h2> <ul> <li><code>TaskCreateInput</code>, <code>TaskCreateOutput</code>, <code>TaskGetInput</code>, <code>TaskGetOutput</code>, <code>TaskUpdateInput</code>, <code>TaskUpdateOutput</code>, <code>TaskListInput</code>, and <code>TaskListOutput</code> types are now exported from <code>@anthropic-ai/claude-agent-sdk/sdk-tools</code> and included in the <code>ToolInputSchemas</code>/<code>ToolOutputSchemas</code> unions</li> <li>Aligned <code>@anthropic-ai/sdk</code> dependency to ^0.93.0</li> </ul> <h2>Update</h2> <pre lang="sh"><code>npm install @anthropic-ai/claude-agent-sdk@0.2.141 # or yarn add @anthropic-ai/claude-agent-sdk@0.2.141 </tr></table> </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.143</h2> <ul> <li><code>@anthropic-ai/sdk</code> and <code>@modelcontextprotocol/sdk</code> are now <code>peerDependencies</code> instead of <code>dependencies</code>. Runtime is unaffected (both are bundled); npm/bun/pnpm auto-install them. yarn classic users should add them explicitly for full TypeScript type resolution</li> </ul> <h2>0.3.142</h2> <ul> <li><strong>Breaking:</strong> Removed the v2 session API (<code>unstable_v2_createSession</code>, <code>unstable_v2_resumeSession</code>, <code>unstable_v2_prompt</code>, <code>SDKSession</code>, <code>SDKSessionOptions</code>), deprecated since 0.2.133. Use <code>query()</code> — pass an <code>AsyncIterable<SDKUserMessage></code> for multi-turn, or <code>options.resume</code> to continue a session.</li> <li><strong>Breaking:</strong> MCP servers now connect in the background by default; sessions start immediately and slow servers report <code>status: "pending"</code> in <code>init</code> until ready. Set <code>MCP_CONNECTION_NONBLOCKING=0</code> to restore the old behavior of waiting up to 5s before the first query, or mark a server <code>alwaysLoad: true</code> to require it in turn 1.</li> <li><strong>Breaking:</strong> Headless and SDK sessions now use Task tools (<code>TaskCreate</code> / <code>TaskUpdate</code> / <code>TaskGet</code> / <code>TaskList</code>) instead of <code>TodoWrite</code>, deprecated since 0.2.136. Tool consumers should accumulate by task ID instead of replacing a snapshot list.</li> <li>Surfaced <code>request_id</code>, <code>subagent_type</code>, and <code>task_description</code> on SDK message types and task system events</li> <li>Headless <code>--sdk-url</code> sessions now exit non-zero with a stderr diagnostic when the remote transport closes permanently (401/403/404 or WS permanent close), instead of silently exiting 0</li> </ul> <h2>0.2.141</h2> <ul> <li><code>TaskCreateInput</code>, <code>TaskCreateOutput</code>, <code>TaskGetInput</code>, <code>TaskGetOutput</code>, <code>TaskUpdateInput</code>, <code>TaskUpdateOutput</code>, <code>TaskListInput</code>, and <code>TaskListOutput</code> types are now exported from <code>@anthropic-ai/claude-agent-sdk/sdk-tools</code> and included in the <code>ToolInputSchemas</code>/<code>ToolOutputSchemas</code> unions</li> <li>Aligned <code>@anthropic-ai/sdk</code> dependency to ^0.93.0</li> </ul> <h2>0.2.140</h2> <ul> <li>Updated to parity with Claude Code v2.1.140</li> </ul> <h2>0.2.139</h2> <ul> <li>Updated to parity with Claude Code v2.1.139</li> </ul> <h2>0.2.138</h2> <ul> <li>Updated to parity with Claude Code v2.1.138</li> </ul> <h2>0.2.137</h2> <ul> <li>Updated to parity with Claude Code v2.1.137</li> </ul> <h2>0.2.136</h2> <ul> <li>Added <code>resolveSettings()</code> (alpha) to inspect effective merged settings without spawning the Claude CLI; reads MDM (plist/HKLM/HKCU) for parity with CLI startup</li> <li>Deprecated <code>TodoWrite</code> tool — future versions will switch to Task tools (<code>TaskCreate</code>, <code>TaskGet</code>, <code>TaskUpdate</code>, <code>TaskList</code>)</li> </ul> <h2>0.2.135</h2> <ul> <li>Updated to parity with Claude Code v2.1.135</li> </ul> <h2>0.2.134</h2> <ul> <li>Updated to parity with Claude Code v2.1.134</li> </ul> <h2>0.2.133</h2> <ul> <li>Deprecated the unstable V2 session API (<code>unstable_v2_createSession</code> / <code>unstable_v2_resumeSession</code> / <code>unstable_v2_prompt</code>) — use <code>query()</code> instead</li> <li>Deprecated passing <code>'Skill'</code> in <code>allowedTools</code> — use the <code>skills</code> option instead</li> </ul> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href="fa5d004c65"><code>fa5d004</code></a> chore: Update CHANGELOG.md</li> <li><a href="dcac1633cc"><code>dcac163</code></a> chore: Update CHANGELOG.md</li> <li><a href="b6d0490791"><code>b6d0490</code></a> chore: Update CHANGELOG.md</li> <li><a href="b14b7c97ff"><code>b14b7c9</code></a> chore: Update CHANGELOG.md</li> <li><a href="ee3fe61081"><code>ee3fe61</code></a> chore: Update CHANGELOG.md</li> <li><a href="1d9038531e"><code>1d90385</code></a> chore: Update CHANGELOG.md</li> <li><a href="8d0a9588e6"><code>8d0a958</code></a> Pin GitHub Actions to commit SHAs (<a href="https://redirect.github.com/anthropics/claude-agent-sdk-typescript/issues/320">#320</a>)</li> <li><a href="3ccbe544fd"><code>3ccbe54</code></a> chore: Update CHANGELOG.md</li> <li><a href="de7d6c1a35"><code>de7d6c1</code></a> chore: Update CHANGELOG.md</li> <li><a href="1b3ab7bd01"><code>1b3ab7b</code></a> chore: Update CHANGELOG.md</li> <li>See full diff in <a href="https://github.com/anthropics/claude-agent-sdk-typescript/compare/v0.2.132...v0.3.143">compare view</a></li> </ul> </details> <br /> Updates `@types/node` from 25.6.0 to 25.8.0 <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 `@typescript-eslint/eslint-plugin` from 8.59.2 to 8.59.3 <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.59.3</h2> <h2>8.59.3 (2026-05-11)</h2> <p>This was a version bump only, there were no code changes.</p> <p>See <a href="https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.59.3">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.59.3 (2026-05-11)</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.59.3">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="48e13c0261"><code>48e13c0</code></a> chore(release): publish 8.59.3</li> <li><a href="e26dc8003a"><code>e26dc80</code></a> docs: update stale links to latest (<a href="https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin/issues/12313">#12313</a>)</li> <li><a href="44f9625336"><code>44f9625</code></a> chore(deps): update vitest monorepo to v4.1.5 (<a href="https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin/issues/12307">#12307</a>)</li> <li>See full diff in <a href="https://github.com/typescript-eslint/typescript-eslint/commits/v8.59.3/packages/eslint-plugin">compare view</a></li> </ul> </details> <br /> Updates `@typescript-eslint/parser` from 8.59.2 to 8.59.3 <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.59.3</h2> <h2>8.59.3 (2026-05-11)</h2> <p>This was a version bump only, there were no code changes.</p> <p>See <a href="https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.59.3">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.59.3 (2026-05-11)</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.59.3">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="48e13c0261"><code>48e13c0</code></a> chore(release): publish 8.59.3</li> <li><a href="44f9625336"><code>44f9625</code></a> chore(deps): update vitest monorepo to v4.1.5 (<a href="https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser/issues/12307">#12307</a>)</li> <li>See full diff in <a href="https://github.com/typescript-eslint/typescript-eslint/commits/v8.59.3/packages/parser">compare view</a></li> </ul> </details> <br /> Updates `eslint` from 10.3.0 to 10.4.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.4.0</h2> <h2>Features</h2> <ul> <li><a href="1a45ec596a"><code>1a45ec5</code></a> feat: check sequence expressions in <code>for-direction</code> (<a href="https://redirect.github.com/eslint/eslint/issues/20701">#20701</a>) (kuldeep kumar)</li> <li><a href="450040bd89"><code>450040b</code></a> feat: add <code>includeIgnoreFile()</code> to <code>eslint/config</code> (<a href="https://redirect.github.com/eslint/eslint/issues/20735">#20735</a>) (Kirk Waiblinger)</li> </ul> <h2>Bug Fixes</h2> <ul> <li><a href="544c0c3da5"><code>544c0c3</code></a> fix: escape code path DOT labels in debug output (<a href="https://redirect.github.com/eslint/eslint/issues/20866">#20866</a>) (Pixel998)</li> <li><a href="6799431203"><code>6799431</code></a> fix: update dependency <code>@eslint/config-helpers</code> to ^0.6.0 (<a href="https://redirect.github.com/eslint/eslint/issues/20850">#20850</a>) (renovate[bot])</li> <li><a href="f078fef500"><code>f078fef</code></a> fix: handle non-array deprecated rule replacements (<a href="https://redirect.github.com/eslint/eslint/issues/20825">#20825</a>) (xbinaryx)</li> </ul> <h2>Documentation</h2> <ul> <li><a href="7e52a7151f"><code>7e52a71</code></a> docs: add mention of <code>@eslint-react/eslint-plugin</code> (<a href="https://redirect.github.com/eslint/eslint/issues/20869">#20869</a>) (Pavel)</li> <li><a href="db3468ba74"><code>db3468b</code></a> docs: tweak wording around ambiguous CJS-vs-ESM config (<a href="https://redirect.github.com/eslint/eslint/issues/20865">#20865</a>) (Kirk Waiblinger)</li> <li><a href="90846643ec"><code>9084664</code></a> docs: Update README (GitHub Actions Bot)</li> <li><a href="9cc7387504"><code>9cc7387</code></a> docs: Update README (GitHub Actions Bot)</li> <li><a href="3d7b548440"><code>3d7b548</code></a> docs: Update README (GitHub Actions Bot)</li> <li><a href="191ec3c0a3"><code>191ec3c</code></a> docs: Update README (GitHub Actions Bot)</li> </ul> <h2>Chores</h2> <ul> <li><a href="6616856f28"><code>6616856</code></a> chore: upgrade knip to v6 (<a href="https://redirect.github.com/eslint/eslint/issues/20875">#20875</a>) (Pixel998)</li> <li><a href="d13b084a3a"><code>d13b084</code></a> ci: ensure auto-created PRs run CI (<a href="https://redirect.github.com/eslint/eslint/issues/20860">#20860</a>) (lumir)</li> <li><a href="e71c7af86d"><code>e71c7af</code></a> ci: bump pnpm/action-setup from 6.0.5 to 6.0.7 (<a href="https://redirect.github.com/eslint/eslint/issues/20862">#20862</a>) (dependabot[bot])</li> <li><a href="d84393dea1"><code>d84393d</code></a> test: add unit tests for SuppressionsService.applySuppressions() (<a href="https://redirect.github.com/eslint/eslint/issues/20863">#20863</a>) (kuldeep kumar)</li> <li><a href="24db8cb8e6"><code>24db8cb</code></a> test: add tests for SuppressionsService.save() (<a href="https://redirect.github.com/eslint/eslint/issues/20802">#20802</a>) (kuldeep kumar)</li> <li><a href="2ef0549cac"><code>2ef0549</code></a> chore: update ecosystem plugins (<a href="https://redirect.github.com/eslint/eslint/issues/20857">#20857</a>) (github-actions[bot])</li> <li><a href="a4297918d2"><code>a429791</code></a> ci: remove <code>eslint-webpack-plugin</code> types integration test (<a href="https://redirect.github.com/eslint/eslint/issues/20668">#20668</a>) (Milos Djermanovic)</li> <li><a href="9e37386aa7"><code>9e37386</code></a> chore: replace <code>recast</code> with range approach in code-sample-minimizer (<a href="https://redirect.github.com/eslint/eslint/issues/20682">#20682</a>) (Copilot)</li> <li><a href="0dd1f9ffc9"><code>0dd1f9f</code></a> test: disable warning for <code>vm.constants.USE_MAIN_CONTEXT_DEFAULT_LOADER</code> (<a href="https://redirect.github.com/eslint/eslint/issues/20845">#20845</a>) (Francesco Trotta)</li> <li><a href="9da3c7bc92"><code>9da3c7b</code></a> refactor: remove deprecated <code>meta.language</code> and migrate <code>meta.dialects</code> (<a href="https://redirect.github.com/eslint/eslint/issues/20716">#20716</a>) (Pixel998)</li> <li><a href="2099ed12a0"><code>2099ed1</code></a> refactor: add <code>meta.defaultOptions</code> to more rules, enable linting (<a href="https://redirect.github.com/eslint/eslint/issues/20800">#20800</a>) (xbinaryx)</li> <li><a href="f1dfbc9ca5"><code>f1dfbc9</code></a> chore: update ecosystem plugins (<a href="https://redirect.github.com/eslint/eslint/issues/20836">#20836</a>) (github-actions[bot])</li> <li><a href="c75941390c"><code>c759413</code></a> ci: bump pnpm/action-setup from 6.0.3 to 6.0.5 (<a href="https://redirect.github.com/eslint/eslint/issues/20843">#20843</a>) (dependabot[bot])</li> <li><a href="5b817d6fdc"><code>5b817d6</code></a> test: add unit tests for lib/shared/ast-utils (<a href="https://redirect.github.com/eslint/eslint/issues/20838">#20838</a>) (kuldeep kumar)</li> <li><a href="1c13ae3934"><code>1c13ae3</code></a> test: add unit tests for lib/shared/severity (<a href="https://redirect.github.com/eslint/eslint/issues/20835">#20835</a>) (kuldeep kumar)</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="452c4010c0"><code>452c401</code></a> 10.4.0</li> <li><a href="b6417e8b55"><code>b6417e8</code></a> Build: changelog update for 10.4.0</li> <li><a href="6616856f28"><code>6616856</code></a> chore: upgrade knip to v6 (<a href="https://redirect.github.com/eslint/eslint/issues/20875">#20875</a>)</li> <li><a href="d13b084a3a"><code>d13b084</code></a> ci: ensure auto-created PRs run CI (<a href="https://redirect.github.com/eslint/eslint/issues/20860">#20860</a>)</li> <li><a href="7e52a7151f"><code>7e52a71</code></a> docs: add mention of <code>@eslint-react/eslint-plugin</code> (<a href="https://redirect.github.com/eslint/eslint/issues/20869">#20869</a>)</li> <li><a href="e71c7af86d"><code>e71c7af</code></a> ci: bump pnpm/action-setup from 6.0.5 to 6.0.7 (<a href="https://redirect.github.com/eslint/eslint/issues/20862">#20862</a>)</li> <li><a href="544c0c3da5"><code>544c0c3</code></a> fix: escape code path DOT labels in debug output (<a href="https://redirect.github.com/eslint/eslint/issues/20866">#20866</a>)</li> <li><a href="db3468ba74"><code>db3468b</code></a> docs: tweak wording around ambiguous CJS-vs-ESM config (<a href="https://redirect.github.com/eslint/eslint/issues/20865">#20865</a>)</li> <li><a href="d84393dea1"><code>d84393d</code></a> test: add unit tests for SuppressionsService.applySuppressions() (<a href="https://redirect.github.com/eslint/eslint/issues/20863">#20863</a>)</li> <li><a href="90846643ec"><code>9084664</code></a> docs: Update README</li> <li>Additional commits viewable in <a href="https://github.com/eslint/eslint/compare/v10.3.0...v10.4.0">compare view</a></li> </ul> </details> <br /> Updates `vitest` from 4.1.5 to 4.1.6 <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.6</h2> <h3> 🐞 Bug Fixes</h3> <ul> <li><strong>browser</strong>: Provide project reference in <code>ToMatchScreenshotResolvePath</code> - by <a href="https://github.com/macarie"><code>@macarie</code></a> and <a href="https://github.com/sheremet-va"><code>@sheremet-va</code></a> in <a href="https://redirect.github.com/vitest-dev/vitest/issues/10138">vitest-dev/vitest#10138</a> <a href="https://github.com/vitest-dev/vitest/commit/31882607c"><!-- raw HTML omitted -->(31882)<!-- raw HTML omitted --></a></li> <li>Global <code>sequence.concurrent: true</code> with top-level <code>test(..., { concurrent: false })</code> + depreacte <code>sequential</code> test API and options - by <a href="https://github.com/hi-ogawa"><code>@hi-ogawa</code></a>, <strong>Codex</strong> and <a href="https://github.com/sheremet-va"><code>@sheremet-va</code></a> in <a href="https://redirect.github.com/vitest-dev/vitest/issues/10196">vitest-dev/vitest#10196</a> <a href="https://github.com/vitest-dev/vitest/commit/2847dfa2a"><!-- raw HTML omitted -->(2847d)<!-- raw HTML omitted --></a></li> <li><strong>browser</strong>: Simplify orchestrator otel carrier - by <a href="https://github.com/hi-ogawa"><code>@hi-ogawa</code></a> in <a href="https://redirect.github.com/vitest-dev/vitest/issues/10285">vitest-dev/vitest#10285</a> <a href="https://github.com/vitest-dev/vitest/commit/18af98cee"><!-- raw HTML omitted -->(18af9)<!-- raw HTML omitted --></a></li> </ul> <h3> 🏎 Performance</h3> <ul> <li>Stringify diff objects only once - by <a href="https://github.com/sheremet-va"><code>@sheremet-va</code></a> in <a href="https://redirect.github.com/vitest-dev/vitest/issues/10276">vitest-dev/vitest#10276</a> <a href="https://github.com/vitest-dev/vitest/commit/9f7b1528c"><!-- raw HTML omitted -->(9f7b1)<!-- raw HTML omitted --></a></li> </ul> <h5> <a href="https://github.com/vitest-dev/vitest/compare/v4.1.5...v4.1.6">View changes on GitHub</a></h5> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="a8fd24c1ca"><code>a8fd24c</code></a> chore: release v4.1.6</li> <li><a href="18af98cee1"><code>18af98c</code></a> fix(browser): simplify orchestrator otel carrier (<a href="https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest/issues/10285">#10285</a>)</li> <li><a href="31882607cc"><code>3188260</code></a> feat(browser): provide project reference in <code>ToMatchScreenshotResolvePath</code> (#...</li> <li>See full diff in <a href="https://github.com/vitest-dev/vitest/commits/v4.1.6/packages/vitest">compare view</a></li> </ul> </details> <br /> Updates `@anthropic-ai/claude-agent-sdk-darwin-arm64` from 0.2.132 to 0.3.143 Updates `@anthropic-ai/claude-agent-sdk-darwin-x64` from 0.2.132 to 0.3.143 Updates `@anthropic-ai/claude-agent-sdk-linux-arm64` from 0.2.132 to 0.3.143 Updates `@anthropic-ai/claude-agent-sdk-linux-arm64-musl` from 0.2.132 to 0.3.143 Updates `@anthropic-ai/claude-agent-sdk-linux-x64` from 0.2.132 to 0.3.143 Updates `@anthropic-ai/claude-agent-sdk-linux-x64-musl` from 0.2.132 to 0.3.143 Updates `@anthropic-ai/claude-agent-sdk-win32-arm64` from 0.2.132 to 0.3.143 Updates `@anthropic-ai/claude-agent-sdk-win32-x64` from 0.2.132 to 0.3.143 Updates `@eslint/config-helpers` from 0.5.5 to 0.6.0 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/eslint/rewrite/releases">@eslint/config-helpers's releases</a>.</em></p> <blockquote> <h2>plugin-kit: v0.6.0</h2> <h2><a href="https://github.com/eslint/rewrite/compare/plugin-kit-v0.5.1...plugin-kit-v0.6.0">0.6.0</a> (2026-01-29)</h2> <h3>Features</h3> <ul> <li>add <code>CustomRuleVisitorWithExit</code> type to <code>@eslint/plugin-kit</code> (<a href="https://redirect.github.com/eslint/rewrite/issues/351">#351</a>) (<a href="e7d1be4066">e7d1be4</a>)</li> <li>Add custom rule type helpers to <code>@eslint/plugin-kit</code> (<a href="https://redirect.github.com/eslint/rewrite/issues/355">#355</a>) (<a href="8ac853046a">8ac8530</a>)</li> </ul> <h3>Dependencies</h3> <ul> <li>The following workspace dependencies were updated <ul> <li>dependencies <ul> <li><code>@eslint/core</code> bumped from ^1.0.1 to ^1.1.0</li> </ul> </li> </ul> </li> </ul> <h2>config-helpers: v0.6.0</h2> <h2><a href="https://github.com/eslint/rewrite/compare/config-helpers-v0.5.5...config-helpers-v0.6.0">0.6.0</a> (2026-05-08)</h2> <h3>Features</h3> <ul> <li>Add new <code>includeIgnoreFile()</code> to config-helpers (<a href="https://redirect.github.com/eslint/rewrite/issues/430">#430</a>) (<a href="9b51352902">9b51352</a>)</li> </ul> </blockquote> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/eslint/rewrite/blob/main/packages/config-helpers/CHANGELOG.md">@eslint/config-helpers's changelog</a>.</em></p> <blockquote> <h2><a href="https://github.com/eslint/rewrite/compare/config-helpers-v0.5.5...config-helpers-v0.6.0">0.6.0</a> (2026-05-08)</h2> <h3>Features</h3> <ul> <li>Add new <code>includeIgnoreFile()</code> to config-helpers (<a href="https://redirect.github.com/eslint/rewrite/issues/430">#430</a>) (<a href="9b51352902">9b51352</a>)</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li>See full diff in <a href="https://github.com/eslint/rewrite/commits/core-v0.6.0/packages/config-helpers">compare view</a></li> </ul> </details> <br /> Updates `@oxc-project/types` from 0.128.0 to 0.130.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.130.0</h2> <h3>🚀 Features</h3> <ul> <li>66c9b01 transformer/typescript: Debug_assert that <code>enum_eval</code> ran in semantic (<a href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxc-types/issues/22252">#22252</a>) (Dunqing)</li> <li>ffe6475 minifier: Fold <code>Array</code> constructor with safe spreads (<a href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxc-types/issues/22215">#22215</a>) (camc314)</li> </ul> <h3>🐛 Bug Fixes</h3> <ul> <li>d3d0b18 traverse: Handle <code>ChainElement::TSNonNullExpression</code> in <code>GatherNodeParts</code> (<a href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxc-types/issues/22247">#22247</a>) (leaysgur)</li> <li>4e880de transformer/object-rest-spread: Declare temp vars for computed keys (<a href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxc-types/issues/22284">#22284</a>) (camc314)</li> <li>a7c3e22 semantic: Clear member write target for computed keys (<a href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxc-types/issues/22302">#22302</a>) (camc314)</li> <li>6a8852d codegen: Emit newline after legal-comment orphan flush (<a href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxc-types/issues/22304">#22304</a>) (Dunqing)</li> <li>5da9fda transformer/explicit-resource-management: Preserve class names (<a href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxc-types/issues/22306">#22306</a>) (Dunqing)</li> <li>b5d970f transformer/explicit-resource-management: Preserve class names (<a href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxc-types/issues/22290">#22290</a>) (camc314)</li> <li>bc54fd4 minifier: Keep function / class names if direct eval is present in the scope (<a href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxc-types/issues/22241">#22241</a>) (sapphi-red)</li> <li>7a810c0 minifier: Refresh direct eval flags after DCE (<a href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxc-types/issues/21787">#21787</a>) (Dunqing)</li> <li>dd88726 transformer/legacy-decorator: Preserve accessor type annotation for emitDecoratorMetadata (<a href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxc-types/issues/21966">#21966</a>) (Dunqing)</li> <li>29a3cd7 codegen: Swap mapping/indent order for top-level decls (<a href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxc-types/issues/22206">#22206</a>) (Dunqing)</li> <li>73b4f40 minifier: Preserve catch binding with direct eval (<a href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxc-types/issues/22221">#22221</a>) (camc314)</li> <li>0e13d17 minifier: Preserve optional chain base side effects (<a href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxc-types/issues/22219">#22219</a>) (camc314)</li> <li>0c7c01c transformer/typescript: Inline optional-chain enum member access (<a href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxc-types/issues/21834">#21834</a>) (Dunqing)</li> <li>a6aff7e codegen: Emit block/array/object end mapping at close char (<a href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxc-types/issues/22200">#22200</a>) (Dunqing)</li> <li>a099b03 codegen: Emit call end mapping at <code>)</code> position, not past it (<a href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxc-types/issues/22199">#22199</a>) (Dunqing)</li> <li>5753774 minifier: Cap if-return ternary collapse for firefox (<a href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxc-types/issues/21841">#21841</a>) (Gurupungav Narayanan)</li> <li>2493bdd codegen: Correct sourcemap end mappings for closing delimiters (<a href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxc-types/issues/22001">#22001</a>) (Mark Dalgleish)</li> <li>3b385e2 minifier: Bail optimizing <code>Array</code> with unknown arg count (<a href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxc-types/issues/22188">#22188</a>) (camc314)</li> <li>9fa2122 parser: Parse array computed class keys (<a href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxc-types/issues/22159">#22159</a>) (camc314)</li> </ul> <h3>📚 Documentation</h3> <ul> <li>a4a6892 napi/parser: Correct code comment (<a href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxc-types/issues/22278">#22278</a>) (overlookmotel)</li> <li>9305373 oxc: Update README (<a href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxc-types/issues/22178">#22178</a>) (camc314)</li> </ul> <h2>oxc crates_v0.129.0</h2> <h3>💥 BREAKING CHANGES</h3> <ul> <li>0ffbe0d allocator: [<strong>BREAKING</strong>] Remove <code>Allocator::end_ptr</code> method (<a href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxc-types/issues/21871">#21871</a>) (overlookmotel)</li> </ul> <h3>🚀 Features</h3> <ul> <li>9593ec8 transformer/jsx: Add jsxDEV source metadata for fragments (<a href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxc-types/issues/21932">#21932</a>) (Ido Rosenthal)</li> </ul> <h3>🐛 Bug Fixes</h3> <ul> <li>81e834c parser: Prevent multiple <code>Parser</code> instances in binary (<a href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxc-types/issues/22120">#22120</a>) (overlookmotel)</li> <li>429deac napi/parser: Export <code>visitorKeys</code> from <code>wasm</code> entrypoint (<a href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxc-types/issues/21996">#21996</a>) (NullVoxPopuli)</li> <li>e852911 codegen: Preserve legal comments orphaned by upstream passes (<a href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxc-types/issues/21575">#21575</a>) (Dunqing)</li> <li>e3399ec transformer/class-properties: Preserve RHS in logical-assignment to static private field (<a href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxc-types/issues/21950">#21950</a>) (Dunqing)</li> <li>c59c199 transformer/typescript: Emit class fields for parameter properties (<a href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxc-types/issues/21831">#21831</a>) (Dunqing)</li> <li>aaabde4 parser: Attach legal comments to following token (<a href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxc-types/issues/21670">#21670</a>) (Dunqing)</li> </ul> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href="650417ffd0"><code>650417f</code></a> release(crates): oxc v0.130.0 (<a href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxc-types/issues/22316">#22316</a>)</li> <li><a href="ec00055e64"><code>ec00055</code></a> release(crates): oxc v0.129.0 (<a href="https://github.com/oxc-project/oxc/tree/HEAD/npm/oxc-types/issues/22108">#22108</a>)</li> <li>See full diff in <a href="https://github.com/oxc-project/oxc/commits/crates_v0.130.0/npm/oxc-types">compare view</a></li> </ul> </details> <br /> Updates `@rolldown/binding-android-arm64` from 1.0.0-rc.18 to 1.0.1 <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.1</h2> <h2>[1.0.1] - 2026-05-13</h2> <h3>🚀 Features</h3> <ul> <li>experimental/lazy-barrel: advice on oversized barrel modules (<a href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9236">#9236</a>) by <a href="https://github.com/shulaoda"><code>@shulaoda</code></a></li> <li>rolldown: inline optional-chain enum access (<a href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9379">#9379</a>) by <a href="https://github.com/Dunqing"><code>@Dunqing</code></a></li> <li>chunk-optimization: dedupe already-loaded dynamic deps (<a href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9305">#9305</a>) by <a href="https://github.com/IWANABETHATGUY"><code>@IWANABETHATGUY</code></a></li> <li>binding: call moduleParsed hook in ParallelJsPlugin (<a href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9318">#9318</a>) by <a href="https://github.com/jaehafe"><code>@jaehafe</code></a></li> </ul> <h3>🐛 Bug Fixes</h3> <ul> <li>transform: enable <code>enum_eval</code> for <code>transformSync</code> and vite TS transform (<a href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9325">#9325</a>) by <a href="https://github.com/Dunqing"><code>@Dunqing</code></a></li> <li>error: remove severity prefix from diagnostic messages (<a href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9262">#9262</a>) by <a href="https://github.com/Kyujenius"><code>@Kyujenius</code></a></li> <li>deps: pin pnpm to 10.23.0 to work around catalog mismatch on Netlify (<a href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9364">#9364</a>) by <a href="https://github.com/shulaoda"><code>@shulaoda</code></a></li> <li>ci: pin mimalloc-safe to 0.1.58 (<a href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9361">#9361</a>) by <a href="https://github.com/shulaoda"><code>@shulaoda</code></a></li> <li>dev/lazy: fix exports of lazy requests in lazy chunks (<a href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9249">#9249</a>) by <a href="https://github.com/h-a-n-a"><code>@h-a-n-a</code></a></li> <li>rolldown_plugin_vite_resolve: handle errors in <code>resolveSubpathImports</code> callback (<a href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9355">#9355</a>) by <a href="https://github.com/sapphi-red"><code>@sapphi-red</code></a></li> <li>rolldown_plugin_lazy_compilation: use loadExports for fetched proxy to preserve original export names (<a href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9132">#9132</a>) by <a href="https://github.com/h-a-n-a"><code>@h-a-n-a</code></a></li> <li>common: include offending index in HybridIndexVec panic message (<a href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9296">#9296</a>) by <a href="https://github.com/SAY-5"><code>@SAY-5</code></a></li> </ul> <h3>🚜 Refactor</h3> <ul> <li>ecmascript: extract semantic_builder_for_transform helper (<a href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9326">#9326</a>) by <a href="https://github.com/Dunqing"><code>@Dunqing</code></a></li> <li>test: extract reusable static-import-cycle helper (<a href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9332">#9332</a>) by <a href="https://github.com/IWANABETHATGUY"><code>@IWANABETHATGUY</code></a></li> </ul> <h3>📚 Documentation</h3> <ul> <li>clarify scope of <code>topLevelVar</code> (<a href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9380">#9380</a>) by <a href="https://github.com/IWANABETHATGUY"><code>@IWANABETHATGUY</code></a></li> <li>meta/design: add ast-mutation design doc (<a href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9338">#9338</a>) by <a href="https://github.com/hyf0"><code>@hyf0</code></a></li> <li>feat: add ai policy in contribution guide (<a href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9315">#9315</a>) by <a href="https://github.com/mdong1909"><code>@mdong1909</code></a></li> </ul> <h3>⚡ Performance</h3> <ul> <li>binding: enable mimalloc v3 to reduce idle memory (<a href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9349">#9349</a>) by <a href="https://github.com/shulaoda"><code>@shulaoda</code></a></li> </ul> <h3>🧪 Testing</h3> <ul> <li>mcs: cover require() in <code>$initial</code> group (<a href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9376">#9376</a>) by <a href="https://github.com/hyf0"><code>@hyf0</code></a></li> <li>add regression for CJS facade chunk merge into entry (<a href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9351">#9351</a>) by <a href="https://github.com/IWANABETHATGUY"><code>@IWANABETHATGUY</code></a></li> </ul> <h3>⚙️ Miscellaneous Tasks</h3> <ul> <li>switch prepare-release to manual dispatch with version input (<a href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9383">#9383</a>) by <a href="https://github.com/shulaoda"><code>@shulaoda</code></a></li> <li>migrate <code>@rolldown/pluginutils</code> to <code>rolldown/plugins</code> (<a href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9317">#9317</a>) by <a href="https://github.com/shulaoda"><code>@shulaoda</code></a></li> <li>deps: pin libmimalloc-sys2 to 0.1.54 (<a href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9372">#9372</a>) by <a href="https://github.com/shulaoda"><code>@shulaoda</code></a></li> <li>replace <code>igorskyflyer/action-readfile</code> with <code>cat</code> (<a href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9369">#9369</a>) by <a href="https://github.com/sapphi-red"><code>@sapphi-red</code></a></li> <li>deps: update test262 submodule for tests (<a href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9371">#9371</a>) by <a href="https://github.com/rolldown-guard"><code>@rolldown-guard</code></a>[bot]</li> <li>use app token for test dep update PRs (<a href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9368">#9368</a>) by <a href="https://github.com/sapphi-red"><code>@sapphi-red</code></a></li> <li>replace some actions with gh commands (<a href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9367">#9367</a>) by <a href="https://github.com/sapphi-red"><code>@sapphi-red</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.1] - 2026-05-13</h2> <h3>🚀 Features</h3> <ul> <li>experimental/lazy-barrel: advice on oversized barrel modules (<a href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9236">#9236</a>) by <a href="https://github.com/shulaoda"><code>@shulaoda</code></a></li> <li>rolldown: inline optional-chain enum access (<a href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9379">#9379</a>) by <a href="https://github.com/Dunqing"><code>@Dunqing</code></a></li> <li>chunk-optimization: dedupe already-loaded dynamic deps (<a href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9305">#9305</a>) by <a href="https://github.com/IWANABETHATGUY"><code>@IWANABETHATGUY</code></a></li> <li>binding: call moduleParsed hook in ParallelJsPlugin (<a href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9318">#9318</a>) by <a href="https://github.com/jaehafe"><code>@jaehafe</code></a></li> </ul> <h3>🐛 Bug Fixes</h3> <ul> <li>transform: enable <code>enum_eval</code> for <code>transformSync</code> and vite TS transform (<a href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9325">#9325</a>) by <a href="https://github.com/Dunqing"><code>@Dunqing</code></a></li> <li>error: remove severity prefix from diagnostic messages (<a href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9262">#9262</a>) by <a href="https://github.com/Kyujenius"><code>@Kyujenius</code></a></li> <li>deps: pin pnpm to 10.23.0 to work around catalog mismatch on Netlify (<a href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9364">#9364</a>) by <a href="https://github.com/shulaoda"><code>@shulaoda</code></a></li> <li>ci: pin mimalloc-safe to 0.1.58 (<a href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9361">#9361</a>) by <a href="https://github.com/shulaoda"><code>@shulaoda</code></a></li> <li>dev/lazy: fix exports of lazy requests in lazy chunks (<a href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9249">#9249</a>) by <a href="https://github.com/h-a-n-a"><code>@h-a-n-a</code></a></li> <li>rolldown_plugin_vite_resolve: handle errors in <code>resolveSubpathImports</code> callback (<a href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9355">#9355</a>) by <a href="https://github.com/sapphi-red"><code>@sapphi-red</code></a></li> <li>rolldown_plugin_lazy_compilation: use loadExports for fetched proxy to preserve original export names (<a href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9132">#9132</a>) by <a href="https://github.com/h-a-n-a"><code>@h-a-n-a</code></a></li> <li>common: include offending index in HybridIndexVec panic message (<a href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9296">#9296</a>) by <a href="https://github.com/SAY-5"><code>@SAY-5</code></a></li> </ul> <h3>🚜 Refactor</h3> <ul> <li>ecmascript: extract semantic_builder_for_transform helper (<a href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9326">#9326</a>) by <a href="https://github.com/Dunqing"><code>@Dunqing</code></a></li> <li>test: extract reusable static-import-cycle helper (<a href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9332">#9332</a>) by <a href="https://github.com/IWANABETHATGUY"><code>@IWANABETHATGUY</code></a></li> </ul> <h3>📚 Documentation</h3> <ul> <li>clarify scope of <code>topLevelVar</code> (<a href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9380">#9380</a>) by <a href="https://github.com/IWANABETHATGUY"><code>@IWANABETHATGUY</code></a></li> <li>meta/design: add ast-mutation design doc (<a href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9338">#9338</a>) by <a href="https://github.com/hyf0"><code>@hyf0</code></a></li> <li>feat: add ai policy in contribution guide (<a href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9315">#9315</a>) by <a href="https://github.com/mdong1909"><code>@mdong1909</code></a></li> </ul> <h3>⚡ Performance</h3> <ul> <li>binding: enable mimalloc v3 to reduce idle memory (<a href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9349">#9349</a>) by <a href="https://github.com/shulaoda"><code>@shulaoda</code></a></li> </ul> <h3>🧪 Testing</h3> <ul> <li>mcs: cover require() in <code>$initial</code> group (<a href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9376">#9376</a>) by <a href="https://github.com/hyf0"><code>@hyf0</code></a></li> <li>add regression for CJS facade chunk merge into entry (<a href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9351">#9351</a>) by <a href="https://github.com/IWANABETHATGUY"><code>@IWANABETHATGUY</code></a></li> </ul> <h3>⚙️ Miscellaneous Tasks</h3> <ul> <li>switch prepare-release to manual dispatch with version input (<a href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9383">#9383</a>) by <a href="https://github.com/shulaoda"><code>@shulaoda</code></a></li> <li>migrate <code>@rolldown/pluginutils</code> to <code>rolldown/plugins</code> (<a href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9317">#9317</a>) by <a href="https://github.com/shulaoda"><code>@shulaoda</code></a></li> <li>deps: pin libmimalloc-sys2 to 0.1.54 (<a href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9372">#9372</a>) by <a href="https://github.com/shulaoda"><code>@shulaoda</code></a></li> <li>replace <code>igorskyflyer/action-readfile</code> with <code>cat</code> (<a href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9369">#9369</a>) by <a href="https://github.com/sapphi-red"><code>@sapphi-red</code></a></li> <li>deps: update test262 submodule for tests (<a href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9371">#9371</a>) by <a href="https://github.com/rolldown-guard"><code>@rolldown-guard</code></a>[bot]</li> <li>use app token for test dep update PRs (<a href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9368">#9368</a>) by <a href="https://github.com/sapphi-red"><code>@sapphi-red</code></a></li> <li>replace some actions with gh commands (<a href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9367">#9367</a>) by <a href="https://github.com/sapphi-red"><code>@sapphi-red</code></a></li> <li>replace action-semantic-pull-request with inline regex (<a href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9366">#9366</a>) by <a href="https://github.com/sapphi-red"><code>@sapphi-red</code></a></li> </ul> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href="27779450b5"><code>2777945</code></a> release: v1.0.1 (<a href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9384">#9384</a>)</li> <li><a href="4e353804a3"><code>4e35380</code></a> feat(experimental/lazy-barrel): advice on oversized barrel modules (<a href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9236">#9236</a>)</li> <li><a href="83d2762658"><code>83d2762</code></a> docs: clarify scope of <code>topLevelVar</code> (<a href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9380">#9380</a>)</li> <li><a href="9ba2e73935"><code>9ba2e73</code></a> chore: migrate <code>@rolldown/pluginutils</code> to <code>rolldown/plugins</code> (<a href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9317">#9317</a>)</li> <li><a href="ef5796f0ec"><code>ef5796f</code></a> fix(transform): enable <code>enum_eval</code> for <code>transformSync</code> and vite TS transform ...</li> <li><a href="1f5dce1dc8"><code>1f5dce1</code></a> fix(error): remove severity prefix from diagnostic messages (<a href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9262">#9262</a>)</li> <li><a href="fd479191a9"><code>fd47919</code></a> chore(deps): upgrade oxc to 0.130.0 (<a href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9360">#9360</a>)</li> <li><a href="4c121d30d1"><code>4c121d3</code></a> chore(deps): update npm packages (<a href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9343">#9343</a>)</li> <li><a href="024de36969"><code>024de36</code></a> fix(rolldown_plugin_vite_resolve): handle errors in <code>resolveSubpathImports</code> c...</li> <li><a href="7e5855c336"><code>7e5855c</code></a> feat(chunk-optimization): dedupe already-loaded dynamic deps (<a href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9305">#9305</a>)</li> <li>Additional commits viewable in <a href="https://github.com/rolldown/rolldown/commits/v1.0.1/packages/rolldown">compare view</a></li> </ul> </details> <br /> Updates `@rolldown/binding-darwin-arm64` from 1.0.0-rc.18 to 1.0.1 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/rolldown/rolldown/releases">@rolldown/binding-darwin-arm64's releases</a>.</em></p> <blockquote> <h2>v1.0.1</h2> <h2>[1.0.1] - 2026-05-13</h2> <h3>🚀 Features</h3> <ul> <li>experimental/lazy-barrel: advice on oversized barrel modules (<a href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9236">#9236</a>) by <a href="https://github.com/shulaoda"><code>@shulaoda</code></a></li> <li>rolldown: inline optional-chain enum access (<a href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9379">#9379</a>) by <a href="https://github.com/Dunqing"><code>@Dunqing</code></a></li> <li>chunk-optimization: dedupe already-loaded dynamic deps (<a href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9305">#9305</a>) by <a href="https://github.com/IWANABETHATGUY"><code>@IWANABETHATGUY</code></a></li> <li>binding: call moduleParsed hook in ParallelJsPlugin (<a href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9318">#9318</a>) by <a href="https://github.com/jaehafe"><code>@jaehafe</code></a></li> </ul> <h3>🐛 Bug Fixes</h3> <ul> <li>transform: enable <code>enum_eval</code> for <code>transformSync</code> and vite TS transform (<a href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9325">#9325</a>) by <a href="https://github.com/Dunqing"><code>@Dunqing</code></a></li> <li>error: remove severity prefix from diagnostic messages (<a href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9262">#9262</a>) by <a href="https://github.com/Kyujenius"><code>@Kyujenius</code></a></li> <li>deps: pin pnpm to 10.23.0 to work around catalog mismatch on Netlify (<a href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9364">#9364</a>) by <a href="https://github.com/shulaoda"><code>@shulaoda</code></a></li> <li>ci: pin mimalloc-safe to 0.1.58 (<a href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9361">#9361</a>) by <a href="https://github.com/shulaoda"><code>@shulaoda</code></a></li> <li>dev/lazy: fix exports of lazy requests in lazy chunks (<a href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9249">#9249</a>) by <a href="https://github.com/h-a-n-a"><code>@h-a-n-a</code></a></li> <li>rolldown_plugin_vite_resolve: handle errors in <code>resolveSubpathImports</code> callback (<a href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9355">#9355</a>) by <a href="https://github.com/sapphi-red"><code>@sapphi-red</code></a></li> <li>rolldown_plugin_lazy_compilation: use loadExports for fetched proxy to preserve original export names (<a href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9132">#9132</a>) by <a href="https://github.com/h-a-n-a"><code>@h-a-n-a</code></a></li> <li>common: include offending index in HybridIndexVec panic message (<a href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9296">#9296</a>) by <a href="https://github.com/SAY-5"><code>@SAY-5</code></a></li> </ul> <h3>🚜 Refactor</h3> <ul> <li>ecmascript: extract semantic_builder_for_transform helper (<a href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9326">#9326</a>) by <a href="https://github.com/Dunqing"><code>@Dunqing</code></a></li> <li>test: extract reusable static-import-cycle helper (<a href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9332">#9332</a>) by <a href="https://github.com/IWANABETHATGUY"><code>@IWANABETHATGUY</code></a></li> </ul> <h3>📚 Documentation</h3> <ul> <li>clarify scope of <code>topLevelVar</code> (<a href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9380">#9380</a>) by <a href="https://github.com/IWANABETHATGUY"><code>@IWANABETHATGUY</code></a></li> <li>meta/design: add ast-mutation design doc (<a href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9338">#9338</a>) by <a href="https://github.com/hyf0"><code>@hyf0</code></a></li> <li>feat: add ai policy in contribution guide (<a href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9315">#9315</a>) by <a href="https://github.com/mdong1909"><code>@mdong1909</code></a></li> </ul> <h3>⚡ Performance</h3> <ul> <li>binding: enable mimalloc v3 to reduce idle memory (<a href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9349">#9349</a>) by <a href="https://github.com/shulaoda"><code>@shulaoda</code></a></li> </ul> <h3>🧪 Testing</h3> <ul> <li>mcs: cover require() in <code>$initial</code> group (<a href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9376">#9376</a>) by <a href="https://github.com/hyf0"><code>@hyf0</code></a></li> <li>add regression for CJS facade chunk merge into entry (<a href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9351">#9351</a>) by <a href="https://github.com/IWANABETHATGUY"><code>@IWANABETHATGUY</code></a></li> </ul> <h3>⚙️ Miscellaneous Tasks</h3> <ul> <li>switch prepare-release to manual dispatch with version input (<a href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9383">#9383</a>) by <a href="https://github.com/shulaoda"><code>@shulaoda</code></a></li> <li>migrate <code>@rolldown/pluginutils</code> to <code>rolldown/plugins</code> (<a href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9317">#9317</a>) by <a href="https://github.com/shulaoda"><code>@shulaoda</code></a></li> <li>deps: pin libmimalloc-sys2 to 0.1.54 (<a href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9372">#9372</a>) by <a href="https://github.com/shulaoda"><code>@shulaoda</code></a></li> <li>replace <code>igorskyflyer/action-readfile</code> with <code>cat</code> (<a href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9369">#9369</a>) by <a href="https://github.com/sapphi-red"><code>@sapphi-red</code></a></li> <li>deps: update test262 submodule for tests (<a href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9371">#9371</a>) by <a href="https://github.com/rolldown-guard"><code>@rolldown-guard</code></a>[bot]</li> <li>use app token for test dep update PRs (<a href="https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown/issues/9368">#9368</a>) by <a href="https://github.com/sapphi-red"><code>@sapphi-red</code></a></li> <li>replace some actions with gh c... _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>
This commit is contained in:
7
.github/dependabot.yml
vendored
7
.github/dependabot.yml
vendored
@@ -11,13 +11,6 @@ updates:
|
||||
interval: "daily"
|
||||
allow:
|
||||
- dependency-type: "all"
|
||||
ignore:
|
||||
# Pinned to match the peer range of @anthropic-ai/claude-agent-sdk;
|
||||
# newer minors break type compatibility between the two installed copies.
|
||||
- dependency-name: "@anthropic-ai/sdk"
|
||||
update-types:
|
||||
- "version-update:semver-minor"
|
||||
- "version-update:semver-major"
|
||||
groups:
|
||||
minor:
|
||||
update-types:
|
||||
|
||||
719
package-lock.json
generated
719
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
16
package.json
16
package.json
@@ -60,22 +60,22 @@
|
||||
"author": "Zed Industries",
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"@agentclientprotocol/sdk": "0.21.0",
|
||||
"@anthropic-ai/claude-agent-sdk": "0.2.132",
|
||||
"@agentclientprotocol/sdk": "0.21.1",
|
||||
"@anthropic-ai/claude-agent-sdk": "0.3.143",
|
||||
"zod": "^3.25.0 || ^4.0.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@anthropic-ai/sdk": "0.89.0",
|
||||
"@anthropic-ai/sdk": "0.96.0",
|
||||
"@eslint/js": "10.0.1",
|
||||
"@types/node": "25.6.0",
|
||||
"@typescript-eslint/eslint-plugin": "8.59.2",
|
||||
"@typescript-eslint/parser": "8.59.2",
|
||||
"eslint": "10.3.0",
|
||||
"@types/node": "25.8.0",
|
||||
"@typescript-eslint/eslint-plugin": "8.59.3",
|
||||
"@typescript-eslint/parser": "8.59.3",
|
||||
"eslint": "10.4.0",
|
||||
"eslint-config-prettier": "10.1.8",
|
||||
"globals": "17.6.0",
|
||||
"prettier": "3.8.3",
|
||||
"ts-node": "10.9.2",
|
||||
"typescript": "6.0.3",
|
||||
"vitest": "4.1.5"
|
||||
"vitest": "4.1.6"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,6 +17,7 @@ import {
|
||||
ndJsonStream,
|
||||
NewSessionRequest,
|
||||
NewSessionResponse,
|
||||
PermissionOption,
|
||||
PromptRequest,
|
||||
PromptResponse,
|
||||
ReadTextFileRequest,
|
||||
@@ -69,10 +70,15 @@ import * as path from "node:path";
|
||||
import packageJson from "../package.json" with { type: "json" };
|
||||
import { SettingsManager } from "./settings.js";
|
||||
import {
|
||||
applyTaskCreate,
|
||||
applyTaskUpdate,
|
||||
ClaudePlanEntry,
|
||||
createPostToolUseHook,
|
||||
parseTaskCreateOutput,
|
||||
planEntries,
|
||||
registerHookCallback,
|
||||
TaskState,
|
||||
taskStateToPlanEntries,
|
||||
toolInfoFromToolUse,
|
||||
toolUpdateFromDiffToolResponse,
|
||||
toolUpdateFromToolResult,
|
||||
@@ -152,6 +158,9 @@ type Session = {
|
||||
* DEFAULT_CONTEXT_WINDOW, refreshed from each result's modelUsage, and
|
||||
* invalidated when the user switches the session's model. */
|
||||
contextWindowSize: number;
|
||||
/** Accumulated task list for the session, keyed by task ID. Task IDs are
|
||||
* per-session, so this state must not be shared across sessions. */
|
||||
taskState: TaskState;
|
||||
};
|
||||
|
||||
/** Compute a stable fingerprint of the session-defining params so we can
|
||||
@@ -866,6 +875,7 @@ export class ClaudeAcpAgent implements Agent {
|
||||
case "notification":
|
||||
case "api_retry":
|
||||
case "mirror_error":
|
||||
case "permission_denied":
|
||||
// Todo: process via status api: https://docs.claude.com/en/docs/claude-code/hooks#hook-output
|
||||
break;
|
||||
default:
|
||||
@@ -1056,6 +1066,7 @@ export class ClaudeAcpAgent implements Agent {
|
||||
{
|
||||
clientCapabilities: this.clientCapabilities,
|
||||
cwd: session.cwd,
|
||||
taskState: session.taskState,
|
||||
},
|
||||
)) {
|
||||
await this.client.sessionUpdate(notification);
|
||||
@@ -1162,6 +1173,7 @@ export class ClaudeAcpAgent implements Agent {
|
||||
clientCapabilities: this.clientCapabilities,
|
||||
parentToolUseId: message.parent_tool_use_id,
|
||||
cwd: session.cwd,
|
||||
taskState: session.taskState,
|
||||
},
|
||||
)) {
|
||||
await this.client.sessionUpdate(notification);
|
||||
@@ -1415,6 +1427,7 @@ export class ClaudeAcpAgent implements Agent {
|
||||
registerHooks: false,
|
||||
clientCapabilities: this.clientCapabilities,
|
||||
cwd: this.sessions[sessionId]?.cwd,
|
||||
taskState: this.sessions[sessionId]?.taskState,
|
||||
},
|
||||
)) {
|
||||
await this.client.sessionUpdate(notification);
|
||||
@@ -1445,7 +1458,7 @@ export class ClaudeAcpAgent implements Agent {
|
||||
}
|
||||
|
||||
if (toolName === "ExitPlanMode") {
|
||||
const optionsAll = [
|
||||
const optionsAll: PermissionOption[] = [
|
||||
{ kind: "allow_always", name: 'Yes, and use "auto" mode', optionId: "auto" },
|
||||
{
|
||||
kind: "allow_always",
|
||||
@@ -2063,6 +2076,7 @@ export class ClaudeAcpAgent implements Agent {
|
||||
emitRawSDKMessages: sessionMeta?.claudeCode?.emitRawSDKMessages ?? false,
|
||||
contextWindowSize:
|
||||
inferContextWindowFromModel(models.currentModelId) ?? DEFAULT_CONTEXT_WINDOW,
|
||||
taskState: new Map(),
|
||||
};
|
||||
|
||||
return {
|
||||
@@ -2622,8 +2636,10 @@ export function toAcpNotifications(
|
||||
clientCapabilities?: ClientCapabilities;
|
||||
parentToolUseId?: string | null;
|
||||
cwd?: string;
|
||||
taskState?: TaskState;
|
||||
},
|
||||
): SessionNotification[] {
|
||||
const taskState = options?.taskState ?? new Map();
|
||||
const registerHooks = options?.registerHooks !== false;
|
||||
const supportsTerminalOutput = options?.clientCapabilities?._meta?.["terminal_output"] === true;
|
||||
if (typeof content === "string") {
|
||||
@@ -2697,6 +2713,15 @@ export function toAcpNotifications(
|
||||
entries: planEntries(chunk.input as { todos: ClaudePlanEntry[] }),
|
||||
};
|
||||
}
|
||||
} else if (
|
||||
chunk.name === "TaskCreate" ||
|
||||
chunk.name === "TaskUpdate" ||
|
||||
chunk.name === "TaskList" ||
|
||||
chunk.name === "TaskGet"
|
||||
) {
|
||||
// Task* tool_use is suppressed; the plan update is emitted at
|
||||
// tool_result time once we have the task ID (for TaskCreate) and
|
||||
// confirmation that the change took effect.
|
||||
} else {
|
||||
// Only register hooks on first encounter to avoid double-firing
|
||||
if (registerHooks && !alreadyCached) {
|
||||
@@ -2801,7 +2826,36 @@ export function toAcpNotifications(
|
||||
break;
|
||||
}
|
||||
|
||||
if (toolUse.name !== "TodoWrite") {
|
||||
if (
|
||||
toolUse.name === "TaskCreate" ||
|
||||
toolUse.name === "TaskUpdate" ||
|
||||
toolUse.name === "TaskList" ||
|
||||
toolUse.name === "TaskGet"
|
||||
) {
|
||||
// Headless/SDK sessions emit Task* tools instead of TodoWrite.
|
||||
// TaskCreate / TaskUpdate mutate the accumulated task list; TaskList
|
||||
// and TaskGet are read-only so we just suppress their tool_call /
|
||||
// tool_result events. The plan update is emitted as a snapshot of
|
||||
// the accumulated state, mirroring the legacy TodoWrite behavior.
|
||||
const isError = "is_error" in chunk && chunk.is_error;
|
||||
if (!isError) {
|
||||
if (toolUse.name === "TaskCreate") {
|
||||
applyTaskCreate(
|
||||
taskState,
|
||||
toolUse.input as Parameters<typeof applyTaskCreate>[1],
|
||||
parseTaskCreateOutput(chunk.content),
|
||||
);
|
||||
} else if (toolUse.name === "TaskUpdate") {
|
||||
applyTaskUpdate(taskState, toolUse.input as Parameters<typeof applyTaskUpdate>[1]);
|
||||
}
|
||||
}
|
||||
if (!isError && (toolUse.name === "TaskCreate" || toolUse.name === "TaskUpdate")) {
|
||||
update = {
|
||||
sessionUpdate: "plan",
|
||||
entries: taskStateToPlanEntries(taskState),
|
||||
};
|
||||
}
|
||||
} else if (toolUse.name !== "TodoWrite") {
|
||||
const { _meta: toolMeta, ...toolUpdate } = toolUpdateFromToolResult(
|
||||
chunk,
|
||||
toolUseCache[chunk.tool_use_id],
|
||||
@@ -2888,6 +2942,7 @@ export function streamEventToAcpNotifications(
|
||||
options?: {
|
||||
clientCapabilities?: ClientCapabilities;
|
||||
cwd?: string;
|
||||
taskState?: TaskState;
|
||||
},
|
||||
): SessionNotification[] {
|
||||
const event = message.event;
|
||||
@@ -2904,6 +2959,7 @@ export function streamEventToAcpNotifications(
|
||||
clientCapabilities: options?.clientCapabilities,
|
||||
parentToolUseId: message.parent_tool_use_id,
|
||||
cwd: options?.cwd,
|
||||
taskState: options?.taskState,
|
||||
},
|
||||
);
|
||||
case "content_block_delta":
|
||||
@@ -2918,6 +2974,7 @@ export function streamEventToAcpNotifications(
|
||||
clientCapabilities: options?.clientCapabilities,
|
||||
parentToolUseId: message.parent_tool_use_id,
|
||||
cwd: options?.cwd,
|
||||
taskState: options?.taskState,
|
||||
},
|
||||
);
|
||||
// No content
|
||||
|
||||
@@ -639,6 +639,8 @@ describe("tool conversions", () => {
|
||||
],
|
||||
stop_reason: null,
|
||||
stop_sequence: null,
|
||||
stop_details: null,
|
||||
diagnostics: null,
|
||||
usage: {
|
||||
input_tokens: 6,
|
||||
cache_creation_input_tokens: 326,
|
||||
@@ -1533,6 +1535,7 @@ describe("stop reason propagation", () => {
|
||||
abortController: new AbortController(),
|
||||
emitRawSDKMessages: false,
|
||||
contextWindowSize: 200000,
|
||||
taskState: new Map(),
|
||||
};
|
||||
}
|
||||
|
||||
@@ -1676,6 +1679,7 @@ describe("stop reason propagation", () => {
|
||||
nextPendingOrder: 0,
|
||||
emitRawSDKMessages: false,
|
||||
contextWindowSize: 200000,
|
||||
taskState: new Map(),
|
||||
};
|
||||
|
||||
const response = await agent.prompt({
|
||||
@@ -1834,6 +1838,7 @@ describe("session/close", () => {
|
||||
abortController: new AbortController(),
|
||||
emitRawSDKMessages: false,
|
||||
contextWindowSize: 200000,
|
||||
taskState: new Map(),
|
||||
};
|
||||
return agent.sessions[sessionId]!;
|
||||
}
|
||||
@@ -1930,6 +1935,7 @@ describe("getOrCreateSession param change detection", () => {
|
||||
abortController: new AbortController(),
|
||||
emitRawSDKMessages: false,
|
||||
contextWindowSize: 200000,
|
||||
taskState: new Map(),
|
||||
};
|
||||
return agent.sessions[sessionId]!;
|
||||
}
|
||||
@@ -2164,6 +2170,7 @@ describe("usage_update computation", () => {
|
||||
abortController: new AbortController(),
|
||||
emitRawSDKMessages: false,
|
||||
contextWindowSize: 200000,
|
||||
taskState: new Map(),
|
||||
};
|
||||
}
|
||||
|
||||
@@ -3063,6 +3070,7 @@ describe("emitRawSDKMessages", () => {
|
||||
abortController: new AbortController(),
|
||||
emitRawSDKMessages,
|
||||
contextWindowSize: 200000,
|
||||
taskState: new Map(),
|
||||
};
|
||||
}
|
||||
|
||||
@@ -3290,6 +3298,7 @@ describe("result origin handling", () => {
|
||||
abortController: new AbortController(),
|
||||
emitRawSDKMessages: false,
|
||||
contextWindowSize: 200000,
|
||||
taskState: new Map(),
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -16,6 +16,11 @@ import {
|
||||
createPostToolUseHook,
|
||||
toolInfoFromToolUse,
|
||||
planEntries,
|
||||
applyTaskCreate,
|
||||
applyTaskUpdate,
|
||||
parseTaskCreateOutput,
|
||||
taskStateToPlanEntries,
|
||||
TaskState,
|
||||
} from "../tools.js";
|
||||
|
||||
describe("rawOutput in tool call updates", () => {
|
||||
@@ -1541,3 +1546,295 @@ describe("toAcpNotifications - TodoWrite with undefined input regression", () =>
|
||||
expect(planUpdates).toHaveLength(1);
|
||||
});
|
||||
});
|
||||
|
||||
describe("parseTaskCreateOutput", () => {
|
||||
it("parses JSON-string content", () => {
|
||||
const parsed = parseTaskCreateOutput(JSON.stringify({ task: { id: "1", subject: "X" } }));
|
||||
expect(parsed).toEqual({ task: { id: "1", subject: "X" } });
|
||||
});
|
||||
|
||||
it("parses array-of-text-block content", () => {
|
||||
const parsed = parseTaskCreateOutput([
|
||||
{ type: "text", text: JSON.stringify({ task: { id: "2", subject: "Y" } }) },
|
||||
]);
|
||||
expect(parsed).toEqual({ task: { id: "2", subject: "Y" } });
|
||||
});
|
||||
|
||||
it("returns undefined for non-JSON content", () => {
|
||||
expect(parseTaskCreateOutput("not json")).toBeUndefined();
|
||||
expect(parseTaskCreateOutput([{ type: "text", text: "not json" }])).toBeUndefined();
|
||||
});
|
||||
|
||||
it("returns undefined when task.id is missing", () => {
|
||||
expect(parseTaskCreateOutput(JSON.stringify({ task: { subject: "X" } }))).toBeUndefined();
|
||||
});
|
||||
});
|
||||
|
||||
describe("applyTaskCreate / applyTaskUpdate", () => {
|
||||
it("creates an entry on TaskCreate when both input and output are present", () => {
|
||||
const state: TaskState = new Map();
|
||||
applyTaskCreate(
|
||||
state,
|
||||
{ subject: "Write tests", description: "Cover Task* flow", activeForm: "Writing tests" },
|
||||
{ task: { id: "1", subject: "Write tests" } },
|
||||
);
|
||||
expect(state.get("1")).toEqual({
|
||||
subject: "Write tests",
|
||||
status: "pending",
|
||||
activeForm: "Writing tests",
|
||||
description: "Cover Task* flow",
|
||||
});
|
||||
});
|
||||
|
||||
it("is a no-op when the output has no task ID", () => {
|
||||
const state: TaskState = new Map();
|
||||
applyTaskCreate(state, { subject: "X", description: "Y" }, undefined);
|
||||
expect(state.size).toBe(0);
|
||||
});
|
||||
|
||||
it("updates fields by task ID and keeps insertion order in plan entries", () => {
|
||||
const state: TaskState = new Map();
|
||||
applyTaskCreate(state, { subject: "A", description: "" }, { task: { id: "1", subject: "A" } });
|
||||
applyTaskCreate(state, { subject: "B", description: "" }, { task: { id: "2", subject: "B" } });
|
||||
applyTaskUpdate(state, { taskId: "1", status: "in_progress" });
|
||||
expect(taskStateToPlanEntries(state)).toEqual([
|
||||
{ content: "A", status: "in_progress", priority: "medium" },
|
||||
{ content: "B", status: "pending", priority: "medium" },
|
||||
]);
|
||||
});
|
||||
|
||||
it("removes entries when status is 'deleted'", () => {
|
||||
const state: TaskState = new Map();
|
||||
applyTaskCreate(state, { subject: "A", description: "" }, { task: { id: "1", subject: "A" } });
|
||||
applyTaskUpdate(state, { taskId: "1", status: "deleted" });
|
||||
expect(state.size).toBe(0);
|
||||
});
|
||||
|
||||
it("creates a placeholder entry when TaskUpdate references an unseen task ID", () => {
|
||||
const state: TaskState = new Map();
|
||||
applyTaskUpdate(state, { taskId: "5", subject: "Late arrival", status: "in_progress" });
|
||||
expect(state.get("5")).toEqual({
|
||||
subject: "Late arrival",
|
||||
status: "in_progress",
|
||||
activeForm: undefined,
|
||||
description: undefined,
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe("toAcpNotifications - Task* tools", () => {
|
||||
const mockClient = {} as AgentSideConnection;
|
||||
const mockLogger: Logger = { log: () => {}, error: () => {} };
|
||||
|
||||
it("suppresses tool_call for TaskCreate/TaskUpdate/TaskList/TaskGet on tool_use", () => {
|
||||
const toolUseCache: ToolUseCache = {};
|
||||
const taskState: TaskState = new Map();
|
||||
|
||||
const notifications = toAcpNotifications(
|
||||
[
|
||||
{ type: "tool_use", id: "1", name: "TaskCreate", input: { subject: "A", description: "" } },
|
||||
{
|
||||
type: "tool_use",
|
||||
id: "2",
|
||||
name: "TaskUpdate",
|
||||
input: { taskId: "1", status: "in_progress" },
|
||||
},
|
||||
{ type: "tool_use", id: "3", name: "TaskList", input: {} },
|
||||
{ type: "tool_use", id: "4", name: "TaskGet", input: { taskId: "1" } },
|
||||
] as any,
|
||||
"assistant",
|
||||
"test-session",
|
||||
toolUseCache,
|
||||
mockClient,
|
||||
mockLogger,
|
||||
{ taskState },
|
||||
);
|
||||
|
||||
expect(notifications).toHaveLength(0);
|
||||
expect(taskState.size).toBe(0);
|
||||
});
|
||||
|
||||
it("emits a plan snapshot after a TaskCreate tool_result and accumulates state", () => {
|
||||
const toolUseCache: ToolUseCache = {};
|
||||
const taskState: TaskState = new Map();
|
||||
|
||||
toAcpNotifications(
|
||||
[
|
||||
{
|
||||
type: "tool_use",
|
||||
id: "1",
|
||||
name: "TaskCreate",
|
||||
input: { subject: "First", description: "" },
|
||||
},
|
||||
] as any,
|
||||
"assistant",
|
||||
"test-session",
|
||||
toolUseCache,
|
||||
mockClient,
|
||||
mockLogger,
|
||||
{ taskState },
|
||||
);
|
||||
|
||||
const created = toAcpNotifications(
|
||||
[
|
||||
{
|
||||
type: "tool_result",
|
||||
tool_use_id: "1",
|
||||
content: JSON.stringify({ task: { id: "1", subject: "First" } }),
|
||||
is_error: false,
|
||||
},
|
||||
] as any,
|
||||
"user",
|
||||
"test-session",
|
||||
toolUseCache,
|
||||
mockClient,
|
||||
mockLogger,
|
||||
{ taskState },
|
||||
);
|
||||
|
||||
expect(created).toHaveLength(1);
|
||||
expect(created[0].update).toMatchObject({
|
||||
sessionUpdate: "plan",
|
||||
entries: [{ content: "First", status: "pending", priority: "medium" }],
|
||||
});
|
||||
|
||||
// A second TaskCreate accumulates rather than replacing.
|
||||
toAcpNotifications(
|
||||
[
|
||||
{
|
||||
type: "tool_use",
|
||||
id: "2",
|
||||
name: "TaskCreate",
|
||||
input: { subject: "Second", description: "" },
|
||||
},
|
||||
] as any,
|
||||
"assistant",
|
||||
"test-session",
|
||||
toolUseCache,
|
||||
mockClient,
|
||||
mockLogger,
|
||||
{ taskState },
|
||||
);
|
||||
|
||||
const second = toAcpNotifications(
|
||||
[
|
||||
{
|
||||
type: "tool_result",
|
||||
tool_use_id: "2",
|
||||
content: JSON.stringify({ task: { id: "2", subject: "Second" } }),
|
||||
is_error: false,
|
||||
},
|
||||
] as any,
|
||||
"user",
|
||||
"test-session",
|
||||
toolUseCache,
|
||||
mockClient,
|
||||
mockLogger,
|
||||
{ taskState },
|
||||
);
|
||||
|
||||
expect(second[0].update).toMatchObject({
|
||||
sessionUpdate: "plan",
|
||||
entries: [
|
||||
{ content: "First", status: "pending", priority: "medium" },
|
||||
{ content: "Second", status: "pending", priority: "medium" },
|
||||
],
|
||||
});
|
||||
});
|
||||
|
||||
it("emits a plan snapshot reflecting status changes after a TaskUpdate tool_result", () => {
|
||||
const toolUseCache: ToolUseCache = {};
|
||||
const taskState: TaskState = new Map([["1", { subject: "First", status: "pending" as const }]]);
|
||||
toolUseCache["update-1"] = {
|
||||
type: "tool_use",
|
||||
id: "update-1",
|
||||
name: "TaskUpdate",
|
||||
input: { taskId: "1", status: "completed" },
|
||||
};
|
||||
|
||||
const notifications = toAcpNotifications(
|
||||
[
|
||||
{
|
||||
type: "tool_result",
|
||||
tool_use_id: "update-1",
|
||||
content: JSON.stringify({
|
||||
success: true,
|
||||
taskId: "1",
|
||||
updatedFields: ["status"],
|
||||
}),
|
||||
is_error: false,
|
||||
},
|
||||
] as any,
|
||||
"user",
|
||||
"test-session",
|
||||
toolUseCache,
|
||||
mockClient,
|
||||
mockLogger,
|
||||
{ taskState },
|
||||
);
|
||||
|
||||
expect(notifications).toHaveLength(1);
|
||||
expect(notifications[0].update).toMatchObject({
|
||||
sessionUpdate: "plan",
|
||||
entries: [{ content: "First", status: "completed", priority: "medium" }],
|
||||
});
|
||||
});
|
||||
|
||||
it("suppresses TaskList and TaskGet tool_result without touching task state", () => {
|
||||
const toolUseCache: ToolUseCache = {
|
||||
"list-1": { type: "tool_use", id: "list-1", name: "TaskList", input: {} },
|
||||
"get-1": { type: "tool_use", id: "get-1", name: "TaskGet", input: { taskId: "1" } },
|
||||
};
|
||||
const taskState: TaskState = new Map([
|
||||
["1", { subject: "Existing", status: "in_progress" as const }],
|
||||
]);
|
||||
|
||||
const notifications = toAcpNotifications(
|
||||
[
|
||||
{ type: "tool_result", tool_use_id: "list-1", content: "...", is_error: false },
|
||||
{ type: "tool_result", tool_use_id: "get-1", content: "...", is_error: false },
|
||||
] as any,
|
||||
"user",
|
||||
"test-session",
|
||||
toolUseCache,
|
||||
mockClient,
|
||||
mockLogger,
|
||||
{ taskState },
|
||||
);
|
||||
|
||||
expect(notifications).toHaveLength(0);
|
||||
expect(taskState.get("1")).toEqual({ subject: "Existing", status: "in_progress" });
|
||||
});
|
||||
|
||||
it("does not apply TaskCreate/TaskUpdate when the tool_result reports an error", () => {
|
||||
const toolUseCache: ToolUseCache = {
|
||||
"create-1": {
|
||||
type: "tool_use",
|
||||
id: "create-1",
|
||||
name: "TaskCreate",
|
||||
input: { subject: "A", description: "" },
|
||||
},
|
||||
};
|
||||
const taskState: TaskState = new Map();
|
||||
|
||||
const notifications = toAcpNotifications(
|
||||
[
|
||||
{
|
||||
type: "tool_result",
|
||||
tool_use_id: "create-1",
|
||||
content: "task creation failed",
|
||||
is_error: true,
|
||||
},
|
||||
] as any,
|
||||
"user",
|
||||
"test-session",
|
||||
toolUseCache,
|
||||
mockClient,
|
||||
mockLogger,
|
||||
{ taskState },
|
||||
);
|
||||
|
||||
expect(notifications).toHaveLength(0);
|
||||
expect(taskState.size).toBe(0);
|
||||
});
|
||||
});
|
||||
|
||||
130
src/tools.ts
130
src/tools.ts
@@ -14,6 +14,9 @@ import {
|
||||
FileWriteInput,
|
||||
GlobInput,
|
||||
GrepInput,
|
||||
TaskCreateInput,
|
||||
TaskCreateOutput,
|
||||
TaskUpdateInput,
|
||||
TodoWriteInput,
|
||||
WebFetchInput,
|
||||
WebSearchInput,
|
||||
@@ -367,6 +370,40 @@ export function toolInfoFromToolUse(
|
||||
};
|
||||
}
|
||||
|
||||
case "TaskCreate": {
|
||||
const input = toolUse.input as TaskCreateInput | undefined;
|
||||
return {
|
||||
title: input?.subject ? `Create task: ${input.subject}` : "Create task",
|
||||
kind: "think",
|
||||
content: [],
|
||||
};
|
||||
}
|
||||
|
||||
case "TaskUpdate": {
|
||||
const input = toolUse.input as TaskUpdateInput | undefined;
|
||||
return {
|
||||
title: input?.subject ? `Update task: ${input.subject}` : "Update task",
|
||||
kind: "think",
|
||||
content: [],
|
||||
};
|
||||
}
|
||||
|
||||
case "TaskList": {
|
||||
return {
|
||||
title: "List tasks",
|
||||
kind: "think",
|
||||
content: [],
|
||||
};
|
||||
}
|
||||
|
||||
case "TaskGet": {
|
||||
return {
|
||||
title: "Get task",
|
||||
kind: "think",
|
||||
content: [],
|
||||
};
|
||||
}
|
||||
|
||||
case "ExitPlanMode": {
|
||||
const planInput = toolUse.input as { plan?: string } | undefined;
|
||||
return {
|
||||
@@ -669,6 +706,99 @@ export function planEntries(input: { todos: ClaudePlanEntry[] } | undefined): Pl
|
||||
}));
|
||||
}
|
||||
|
||||
/**
|
||||
* Per-session task list accumulated from Task* tool calls (TaskCreate /
|
||||
* TaskUpdate). The headless/SDK session emits these as incremental tool
|
||||
* calls keyed by task ID, replacing the snapshot-style TodoWrite tool.
|
||||
* Iteration order is insertion order (Map semantics), matching the order
|
||||
* tasks are created.
|
||||
*/
|
||||
export type TaskEntry = {
|
||||
subject: string;
|
||||
status: "pending" | "in_progress" | "completed";
|
||||
activeForm?: string;
|
||||
description?: string;
|
||||
};
|
||||
export type TaskState = Map<string, TaskEntry>;
|
||||
|
||||
/**
|
||||
* Best-effort parse of a TaskCreate tool_result content into the structured
|
||||
* TaskCreateOutput. The SDK delivers tool outputs either as a string or as
|
||||
* an array of TextBlockParam-like blocks containing JSON text; try both.
|
||||
*/
|
||||
export function parseTaskCreateOutput(content: unknown): TaskCreateOutput | undefined {
|
||||
const tryParse = (text: string): TaskCreateOutput | undefined => {
|
||||
try {
|
||||
const parsed = JSON.parse(text);
|
||||
if (
|
||||
parsed &&
|
||||
typeof parsed === "object" &&
|
||||
parsed.task &&
|
||||
typeof parsed.task.id === "string"
|
||||
) {
|
||||
return parsed as TaskCreateOutput;
|
||||
}
|
||||
} catch {
|
||||
// ignore
|
||||
}
|
||||
return undefined;
|
||||
};
|
||||
|
||||
if (typeof content === "string") {
|
||||
return tryParse(content);
|
||||
}
|
||||
if (Array.isArray(content)) {
|
||||
for (const block of content) {
|
||||
if (block && typeof block === "object" && "type" in block && block.type === "text") {
|
||||
const text = (block as { text?: unknown }).text;
|
||||
if (typeof text === "string") {
|
||||
const parsed = tryParse(text);
|
||||
if (parsed) return parsed;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return undefined;
|
||||
}
|
||||
|
||||
export function applyTaskCreate(
|
||||
state: TaskState,
|
||||
input: TaskCreateInput | undefined,
|
||||
output: TaskCreateOutput | undefined,
|
||||
): void {
|
||||
const taskId = output?.task?.id;
|
||||
if (!taskId || !input) return;
|
||||
state.set(taskId, {
|
||||
subject: input.subject,
|
||||
status: "pending",
|
||||
activeForm: input.activeForm,
|
||||
description: input.description,
|
||||
});
|
||||
}
|
||||
|
||||
export function applyTaskUpdate(state: TaskState, input: TaskUpdateInput | undefined): void {
|
||||
if (!input?.taskId) return;
|
||||
if (input.status === "deleted") {
|
||||
state.delete(input.taskId);
|
||||
return;
|
||||
}
|
||||
const existing = state.get(input.taskId) ?? { subject: "", status: "pending" as const };
|
||||
state.set(input.taskId, {
|
||||
subject: input.subject ?? existing.subject,
|
||||
status: input.status ?? existing.status,
|
||||
activeForm: input.activeForm ?? existing.activeForm,
|
||||
description: input.description ?? existing.description,
|
||||
});
|
||||
}
|
||||
|
||||
export function taskStateToPlanEntries(state: TaskState): PlanEntry[] {
|
||||
return Array.from(state.values()).map((task) => ({
|
||||
content: task.subject,
|
||||
status: task.status,
|
||||
priority: "medium",
|
||||
}));
|
||||
}
|
||||
|
||||
export function markdownEscape(text: string): string {
|
||||
let escape = "```";
|
||||
for (const [m] of text.matchAll(/^```+/gm)) {
|
||||
|
||||
Reference in New Issue
Block a user