Skip to content

fix: limit windows test concurrency#2205

Merged
nroscino merged 2 commits into
ChromeDevTools:mainfrom
pupuking723:fix/windows-test-concurrency
Jun 16, 2026
Merged

fix: limit windows test concurrency#2205
nroscino merged 2 commits into
ChromeDevTools:mainfrom
pupuking723:fix/windows-test-concurrency

Conversation

@pupuking723

Copy link
Copy Markdown
Contributor

Fixes #2137.

This updates the test workflow so Windows jobs run the Node test runner with --test-concurrency=1.

The issue points to intermittent Windows failures where the browser target closes during screenshot tests. Those tests start real browser sessions, and limiting test concurrency on Windows avoids overlapping screenshot/browser work there while keeping the existing parallel behavior on Linux and macOS.

Verification:

  • git diff --check
  • Inspected the workflow command expansion: only windows-latest receives --test-concurrency=1; merge queue retries still pass --retry as before.

@google-cla

google-cla Bot commented Jun 13, 2026

Copy link
Copy Markdown

Thanks for your pull request! It looks like this may be your first contribution to a Google open source project. Before we can look at your pull request, you'll need to sign a Contributor License Agreement (CLA).

View this failed invocation of the CLA check for more information.

For the most up to date status, view the checks section at the bottom of the pull request.

@nroscino nroscino left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM! thanks

@nroscino nroscino added this pull request to the merge queue Jun 16, 2026
Merged via the queue into ChromeDevTools:main with commit e77101e Jun 16, 2026
26 of 28 checks passed
pull Bot pushed a commit to oogalieboogalie/chrome-devtools-mcp that referenced this pull request Jun 18, 2026
🤖 I have created a release *beep* *boop*
---


##
[1.3.0](ChromeDevTools/chrome-devtools-mcp@chrome-devtools-mcp-v1.2.0...chrome-devtools-mcp-v1.3.0)
(2026-06-18)


### 🎉 Features

* Add get_heapsnapshot_dominators MCP tool
([ChromeDevTools#2215](ChromeDevTools#2215))
([08c234e](ChromeDevTools@08c234e))
* Add retaining paths MCP tool
([ChromeDevTools#2187](ChromeDevTools#2187))
([a97c642](ChromeDevTools@a97c642))
* Add the get_heapsnapshot_edges MCP tool
([ChromeDevTools#2180](ChromeDevTools#2180))
([4f8eb7a](ChromeDevTools@4f8eb7a))
* include page title in list_pages output
([ChromeDevTools#2166](ChromeDevTools#2166))
([b646feb](ChromeDevTools@b646feb))
* **screenshot:** add CLI options to cap screenshot size at the source
([ChromeDevTools#1823](ChromeDevTools#1823))
([55c8a54](ChromeDevTools@55c8a54))
* Use HeapSnapshotProxy.nodeIndexById
([ChromeDevTools#2193](ChromeDevTools#2193))
([6bd8c91](ChromeDevTools@6bd8c91))


### 🛠️ Fixes

* handle missing third-party tool toolGroup description gracefully
([ChromeDevTools#2224](ChromeDevTools#2224))
([8fe398e](ChromeDevTools@8fe398e))
* handle screencast file extensions case-insensitively and clean up temp
dir on failure
([ChromeDevTools#2207](ChromeDevTools#2207))
([ba80096](ChromeDevTools@ba80096))
* limit windows test concurrency
([ChromeDevTools#2205](ChromeDevTools#2205))
([e77101e](ChromeDevTools@e77101e))
* Reset toolGroups before gathering toolGroups
([ChromeDevTools#2200](ChromeDevTools#2200))
([ed02047](ChromeDevTools@ed02047))
* return error message when screencast_stop is called with no active
recording
([ChromeDevTools#2209](ChromeDevTools#2209))
([9e32002](ChromeDevTools@9e32002))

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).
triuzzi added a commit to triuzzi/brave-devtools-mcp that referenced this pull request Jun 21, 2026
* chore: install HostBindingAdapter (#2186)

This PR introduces the HostBindingAdapter to utilize the functions
usually available to DevTools.
Additionally I moved all the DevTools related files under a `devtools`
directory to better separate the extractor logic.
The patch scripts for DevTools were moved under a function to remove the
side-effect nature of the file.
Now gets called in a the creation of the McpContext (and a before hook
in test.)

(cherry picked from commit bede4fbdfacb808f14a1d7c6709f193e49ee7983)

* chore: expose loadResouce HostBinding (#2194)

This makes sure that if any resource that is loaded via the HostBinding
will be correctly checked agains the roots object.

(cherry picked from commit 834b259eb211a98b4866a70f44b09894099e9941)

* feat: include page title in list_pages output (#2166)

## Motivation

`list_pages` shows each page's URL but not its title, which is painful
when multiple pages share a host — e.g. several tabs under
`app.example.com/u/0/`, `/u/1/`, `/u/2/`. There's no way to tell which
is which without visiting each one, even though every page has a usable
`document.title`.

Fixes #2156.
Closes #2175

## What this changes

- `list_pages` text output now shows the title before the URL when
available: `1: My Page (https://example.com) [selected]`. If the page
has no title (e.g. `about:blank`), the format is unchanged.
- The structured content entry for each page now includes a `title`
field alongside `id`, `url`, and `selected`.
- `page.title()` is awaited with a `.catch(() => '')` so a closed or
erroring page silently falls back to the URL-only format.
- `format()` is made `async` to support the `await` inside the page
loop; `createStructuredPage()` likewise becomes `async`.

## Testing

Start the MCP server with multiple tabs open. Call `list_pages` — pages
with titles now display as `id: Title (url)`. Pages without titles
(`about:blank`, data URLs) display as before.

---------

Co-authored-by: Piotr Paulski <31672205+zyzyzyryxy@users.noreply.github.com>
(cherry picked from commit b646feb4f33743a5ecdc6c5e3744e98f86374af3)

* feat: Use HeapSnapshotProxy.nodeIndexById (#2193)

Co-authored-by: Dominik Inführ <dinfuehr@chromium.org>
(cherry picked from commit 6bd8c91678035b5aa18ee40f72e1f630aa528837)

* feat: Add the get_heapsnapshot_edges MCP tool (#2180)

This PR adds the get_heapsnapshot_edges MCP tool. Agents can use it to
look at the outgoing edges for a specifc object.

Co-authored-by: Dominik Inführ <dinfuehr@chromium.org>
(cherry picked from commit 4f8eb7ad6beecc58f56ec383f9ff43549a5604d4)

* chore(deps-dev): bump the dev-dependencies group across 1 directory with 9 updates (#2196)

Bumps the dev-dependencies group with 9 updates in the / directory:

| Package | From | To |
| --- | --- | --- |
| [@google/genai](https://github.com/googleapis/js-genai) | `2.7.0` |
`2.8.0` |
| [@toon-format/toon](https://github.com/toon-format/toon) | `2.2.0` |
`2.3.0` |
|
[@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node)
| `25.9.1` | `25.9.2` |
|
[@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin)
| `8.60.0` | `8.61.0` |
|
[@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser)
| `8.60.0` | `8.61.0` |
| [prettier](https://github.com/prettier/prettier) | `3.8.3` | `3.8.4` |
| [rollup](https://github.com/rollup/rollup) | `4.61.0` | `4.61.1` |
| [semver](https://github.com/npm/node-semver) | `7.8.1` | `7.8.3` |
|
[typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint)
| `8.60.0` | `8.61.0` |

Updates `@google/genai` from 2.7.0 to 2.8.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/googleapis/js-genai/releases">@​google/genai's
releases</a>.</em></p>
<blockquote>
<h2>v2.8.0</h2>
<h2><a
href="https://github.com/googleapis/js-genai/compare/v2.7.0...v2.8.0">2.8.0</a>
(2026-06-03)</h2>
<h3>Features</h3>
<ul>
<li>Add Agent Platform MCP support to async generate_content (<a
href="https://github.com/googleapis/js-genai/commit/baeaeaa5ae89f9f0a987a8cac5ef61703593fbc4">baeaeaa</a>)</li>
<li>Add transcription language code. (<a
href="https://github.com/googleapis/js-genai/commit/d2981d6c94e10f4b65d225e637e605b533c9a9d7">d2981d6</a>)</li>
<li>Add TranslationConfig for live translation. (<a
href="https://github.com/googleapis/js-genai/commit/8c44240f961708cfde6f2201af2175a0239ef490">8c44240</a>)</li>
<li>Support ReinforcementTuning in GenAI SDK including ValidateReward
API method. (<a
href="https://github.com/googleapis/js-genai/commit/36f0bfb710ba954983de1fd786c89ed8fe887ce9">36f0bfb</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/googleapis/js-genai/blob/main/CHANGELOG.md">@​google/genai's
changelog</a>.</em></p>
<blockquote>
<h2><a
href="https://github.com/googleapis/js-genai/compare/v2.7.0...v2.8.0">2.8.0</a>
(2026-06-03)</h2>
<h3>Features</h3>
<ul>
<li>Add Agent Platform MCP support to async generate_content (<a
href="https://github.com/googleapis/js-genai/commit/baeaeaa5ae89f9f0a987a8cac5ef61703593fbc4">baeaeaa</a>)</li>
<li>Add transcription language code. (<a
href="https://github.com/googleapis/js-genai/commit/d2981d6c94e10f4b65d225e637e605b533c9a9d7">d2981d6</a>)</li>
<li>Add TranslationConfig for live translation. (<a
href="https://github.com/googleapis/js-genai/commit/8c44240f961708cfde6f2201af2175a0239ef490">8c44240</a>)</li>
<li>Support ReinforcementTuning in GenAI SDK including ValidateReward
API method. (<a
href="https://github.com/googleapis/js-genai/commit/36f0bfb710ba954983de1fd786c89ed8fe887ce9">36f0bfb</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/googleapis/js-genai/commit/ea0dd6004dcfdbb69895193efff2ee0af9b3ed80"><code>ea0dd60</code></a>
chore(main): release 2.8.0 (<a
href="https://redirect.github.com/googleapis/js-genai/issues/1646">#1646</a>)</li>
<li><a
href="https://github.com/googleapis/js-genai/commit/36f0bfb710ba954983de1fd786c89ed8fe887ce9"><code>36f0bfb</code></a>
feat: Support ReinforcementTuning in GenAI SDK including ValidateReward
API m...</li>
<li><a
href="https://github.com/googleapis/js-genai/commit/d2981d6c94e10f4b65d225e637e605b533c9a9d7"><code>d2981d6</code></a>
feat: Add transcription language code.</li>
<li><a
href="https://github.com/googleapis/js-genai/commit/98ac90d0c4578d82754535d0df451b29c3ffb1c9"><code>98ac90d</code></a>
chore: deprecate Google Maps grounding widget API fields</li>
<li><a
href="https://github.com/googleapis/js-genai/commit/8c44240f961708cfde6f2201af2175a0239ef490"><code>8c44240</code></a>
feat: Add TranslationConfig for live translation.</li>
<li><a
href="https://github.com/googleapis/js-genai/commit/baeaeaa5ae89f9f0a987a8cac5ef61703593fbc4"><code>baeaeaa</code></a>
feat: Add Agent Platform MCP support to async generate_content</li>
<li><a
href="https://github.com/googleapis/js-genai/commit/c1d3cb7bd100804437ca5c1c8d4d56dce881ef2d"><code>c1d3cb7</code></a>
chore: Internal cleanup</li>
<li><a
href="https://github.com/googleapis/js-genai/commit/bd78ed331caeb1bd9d7322327f61a7dad9872e50"><code>bd78ed3</code></a>
chore: Fix relative import path in pagers.ts.</li>
<li>See full diff in <a
href="https://github.com/googleapis/js-genai/compare/v2.7.0...v2.8.0">compare
view</a></li>
</ul>
</details>
<br />

Updates `@toon-format/toon` from 2.2.0 to 2.3.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/toon-format/toon/releases">@​toon-format/toon's
releases</a>.</em></p>
<blockquote>
<h2>v2.3.0</h2>
<h3>   🚀 Features</h3>
<ul>
<li><strong>decode</strong>: Strict-mode error coverage for §6/§9.1/§14
 -  by <a
href="https://github.com/johannschopplich"><code>@​johannschopplich</code></a>
<a href="https://github.com/toon-format/toon/commit/a13dcb5"><!-- raw
HTML omitted -->(a13dc)<!-- raw HTML omitted --></a></li>
<li><strong>docs</strong>: Add YAML input to Playground with tests  - 
by <a
href="https://github.com/swetasanghi2004-prog"><code>@​swetasanghi2004-prog</code></a>
in <a
href="https://redirect.github.com/toon-format/toon/issues/303">toon-format/toon#303</a>
<a href="https://github.com/toon-format/toon/commit/90a04bd"><!-- raw
HTML omitted -->(90a04)<!-- raw HTML omitted --></a></li>
<li><strong>encode</strong>: Emit canonical empty-array form <code>key:
[]</code>  -  by <a
href="https://github.com/johannschopplich"><code>@​johannschopplich</code></a>
<a href="https://github.com/toon-format/toon/commit/e6d97d2"><!-- raw
HTML omitted -->(e6d97)<!-- raw HTML omitted --></a></li>
</ul>
<h3>   🐞 Bug Fixes</h3>
<ul>
<li><strong>decode</strong>:
<ul>
<li>Support \uXXXX escape per §7.1  -  by <a
href="https://github.com/johannschopplich"><code>@​johannschopplich</code></a>
<a href="https://github.com/toon-format/toon/commit/1782076"><!-- raw
HTML omitted -->(17820)<!-- raw HTML omitted --></a></li>
<li>Reject whitespace gap in array header per §6  -  by <a
href="https://github.com/johannschopplich"><code>@​johannschopplich</code></a>
<a href="https://github.com/toon-format/toon/commit/d514942"><!-- raw
HTML omitted -->(d5149)<!-- raw HTML omitted --></a></li>
</ul>
</li>
</ul>
<h5>    <a
href="https://github.com/toon-format/toon/compare/v2.2.0...v2.3.0">View
changes on GitHub</a></h5>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/toon-format/toon/commit/3c66a1beada062dac82fa4f06c4dab2ed066407a"><code>3c66a1b</code></a>
chore: release v2.3.0</li>
<li><a
href="https://github.com/toon-format/toon/commit/4b8aa998c371000bf5392868ecd05626feeee86b"><code>4b8aa99</code></a>
chore(toon): bump <code>@​toon-format/spec</code> to ^3.2.0</li>
<li><a
href="https://github.com/toon-format/toon/commit/1d23fa36d2d26ecf906acfa61de8ab418931ffec"><code>1d23fa3</code></a>
chore: fix linting issues</li>
<li><a
href="https://github.com/toon-format/toon/commit/d6c64d23e475138e8b3d489a99207760b7da5c34"><code>d6c64d2</code></a>
chore: upgrade dependencies</li>
<li><a
href="https://github.com/toon-format/toon/commit/dd856fe590d17c02b7b94866cd5bb0c2dd775be9"><code>dd856fe</code></a>
docs: align prose with v3.2 spec wording</li>
<li><a
href="https://github.com/toon-format/toon/commit/d514942fc04a01fc76fafeb75f174858ea793ebb"><code>d514942</code></a>
fix(decode): reject whitespace gap in array header per §6</li>
<li><a
href="https://github.com/toon-format/toon/commit/979152508dc04352258bdce308a681a7ceb48d92"><code>9791525</code></a>
docs(toon): bump SPEC badge to v3.2, add What's new section, fix §17
anchor</li>
<li><a
href="https://github.com/toon-format/toon/commit/1446cae85de66ad380295f96defc0cde15600cd8"><code>1446cae</code></a>
docs(cli): widen --no-strict description for v3.2 semantics</li>
<li><a
href="https://github.com/toon-format/toon/commit/13110eb975d7466e9e2c0bfbe4ca1202c8b1523f"><code>13110eb</code></a>
docs: align guides and API reference with v3.2 spec changes</li>
<li><a
href="https://github.com/toon-format/toon/commit/1f53af3582b5a5b88489b7f529420c75a2ccea10"><code>1f53af3</code></a>
docs(spec): refresh §17-19 layout, Appendix F, and §14 subsection
references</li>
<li>Additional commits viewable in <a
href="https://github.com/toon-format/toon/compare/v2.2.0...v2.3.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 `@typescript-eslint/eslint-plugin` from 8.60.0 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>
<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.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>
<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="https://github.com/typescript-eslint/typescript-eslint/commit/16a5b247affc32af21b695cf96dfd75d7ded50a3"><code>16a5b24</code></a>
chore(release): publish 8.61.0</li>
<li><a
href="https://github.com/typescript-eslint/typescript-eslint/commit/ef1fd28c68b10da2e5b56823da8491f10f2c2b97"><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><a
href="https://github.com/typescript-eslint/typescript-eslint/commit/4f84a697aedc436559c3ae09b5b357d98b448d68"><code>4f84a69</code></a>
chore(release): publish 8.60.1</li>
<li><a
href="https://github.com/typescript-eslint/typescript-eslint/commit/598af564db50593277ba46c7fdea3648e4425391"><code>598af56</code></a>
docs(eslint-plugin): clarify no-redeclare type-value collision not
covered by...</li>
<li><a
href="https://github.com/typescript-eslint/typescript-eslint/commit/1849b530c254fb4f89d7270160f3a998e4acd964"><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="https://github.com/typescript-eslint/typescript-eslint/commit/5341d59dd3c21fc4e2bf3bce55cf35d8f84e5216"><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="https://github.com/typescript-eslint/typescript-eslint/commit/f525814f01766487ab34a54d56de20ea5c4fb576"><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="https://github.com/typescript-eslint/typescript-eslint/commit/2df540cd8bbeb3e2c56d516912f69bf63c1e9450"><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="https://github.com/typescript-eslint/typescript-eslint/commit/1ab4284789b36cf482a4d9924719162a02d54243"><code>1ab4284</code></a>
fix(eslint-plugin): respect ECMAScript line terminators in ts-comment
rules (...</li>
<li><a
href="https://github.com/typescript-eslint/typescript-eslint/commit/2f49df599b2db5f2937caf975d3c63e5cdeb0ea1"><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.61.0/packages/eslint-plugin">compare
view</a></li>
</ul>
</details>
<br />

Updates `@typescript-eslint/parser` from 8.60.0 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>
<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.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>
<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="https://github.com/typescript-eslint/typescript-eslint/commit/16a5b247affc32af21b695cf96dfd75d7ded50a3"><code>16a5b24</code></a>
chore(release): publish 8.61.0</li>
<li><a
href="https://github.com/typescript-eslint/typescript-eslint/commit/4f84a697aedc436559c3ae09b5b357d98b448d68"><code>4f84a69</code></a>
chore(release): publish 8.60.1</li>
<li><a
href="https://github.com/typescript-eslint/typescript-eslint/commit/1849b530c254fb4f89d7270160f3a998e4acd964"><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.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="https://github.com/prettier/prettier/commit/1c6ba5539141552e0e8e22d401ea620d8fdff468"><code>1c6ba55</code></a>
Release 3.8.4</li>
<li><a
href="https://github.com/prettier/prettier/commit/4a673dc9b59ddf7296bbab9822093d2971da84a8"><code>4a673dc</code></a>
Fix blank lines between list items and nested sub-lists being removed in
Mark...</li>
<li><a
href="https://github.com/prettier/prettier/commit/074aaedbb052a288e89d15eb0a4214de37a08866"><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="https://github.com/prettier/prettier/commit/c22a003ae97917c5043e8685b4fdff0f93e978f9"><code>c22a003</code></a>
Bump Prettier dependency to 3.8.3</li>
<li><a
href="https://github.com/prettier/prettier/commit/07bad1f04536e9799927007baf466e67151576f0"><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 `rollup` from 4.61.0 to 4.61.1
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/rollup/rollup/releases">rollup's
releases</a>.</em></p>
<blockquote>
<h2>v4.61.1</h2>
<h2>4.61.1</h2>
<p><em>2026-06-04</em></p>
<h3>Bug Fixes</h3>
<ul>
<li>Avoid extraneous newlines when adding headers via plugins (<a
href="https://redirect.github.com/rollup/rollup/issues/6403">#6403</a>)</li>
<li>Fix a rare issue where starting Rollup would hang on Windows (<a
href="https://redirect.github.com/rollup/rollup/issues/6404">#6404</a>)</li>
</ul>
<h3>Pull Requests</h3>
<ul>
<li><a
href="https://redirect.github.com/rollup/rollup/pull/6402">#6402</a>:
Improve documentation for manualPureFunctions (<a
href="https://github.com/lukastaegert"><code>@​lukastaegert</code></a>)</li>
<li><a
href="https://redirect.github.com/rollup/rollup/pull/6403">#6403</a>:
Does not add an extra leading line feed for addons (<a
href="https://github.com/TrickyPi"><code>@​TrickyPi</code></a>)</li>
<li><a
href="https://redirect.github.com/rollup/rollup/pull/6404">#6404</a>:
fix: set report.excludeNetwork=true before getReport() to avoid blocking
PTR lookups (<a
href="https://github.com/jdz321"><code>@​jdz321</code></a>, <a
href="https://github.com/lukastaegert"><code>@​lukastaegert</code></a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/rollup/rollup/blob/master/CHANGELOG.md">rollup's
changelog</a>.</em></p>
<blockquote>
<h2>4.61.1</h2>
<p><em>2026-06-04</em></p>
<h3>Bug Fixes</h3>
<ul>
<li>Avoid extraneous newlines when adding headers via plugins (<a
href="https://redirect.github.com/rollup/rollup/issues/6403">#6403</a>)</li>
<li>Fix a rare issue where starting Rollup would hang on Windows (<a
href="https://redirect.github.com/rollup/rollup/issues/6404">#6404</a>)</li>
</ul>
<h3>Pull Requests</h3>
<ul>
<li><a
href="https://redirect.github.com/rollup/rollup/pull/6402">#6402</a>:
Improve documentation for manualPureFunctions (<a
href="https://github.com/lukastaegert"><code>@​lukastaegert</code></a>)</li>
<li><a
href="https://redirect.github.com/rollup/rollup/pull/6403">#6403</a>:
Does not add an extra leading line feed for addons (<a
href="https://github.com/TrickyPi"><code>@​TrickyPi</code></a>)</li>
<li><a
href="https://redirect.github.com/rollup/rollup/pull/6404">#6404</a>:
fix: set report.excludeNetwork=true before getReport() to avoid blocking
PTR lookups (<a
href="https://github.com/jdz321"><code>@​jdz321</code></a>, <a
href="https://github.com/lukastaegert"><code>@​lukastaegert</code></a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/rollup/rollup/commit/b77daf0a97cf96e61870cc02de584e923bc70fad"><code>b77daf0</code></a>
4.61.1</li>
<li><a
href="https://github.com/rollup/rollup/commit/91b6dc4def27e990412fa4dc5b4fe1a9af3adcba"><code>91b6dc4</code></a>
fix: set report.excludeNetwork=true before getReport() to avoid blocking
PTR ...</li>
<li><a
href="https://github.com/rollup/rollup/commit/f2a0449e1c7144acf12d2bf0a4aad76c9a7d85e6"><code>f2a0449</code></a>
Improve documentation for manualPureFunctions (<a
href="https://redirect.github.com/rollup/rollup/issues/6402">#6402</a>)</li>
<li><a
href="https://github.com/rollup/rollup/commit/7bdce6c9e34bd395891aca96d17ccd14c5fd24ad"><code>7bdce6c</code></a>
Does not add an extra leading line feed for addons (<a
href="https://redirect.github.com/rollup/rollup/issues/6403">#6403</a>)</li>
<li>See full diff in <a
href="https://github.com/rollup/rollup/compare/v4.61.0...v4.61.1">compare
view</a></li>
</ul>
</details>
<br />

Updates `semver` from 7.8.1 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="https://github.com/npm/node-semver/commit/046da7f527cc72a482b5dea8cb59392be65bf186"><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="https://github.com/npm/node-semver/commit/3485ddadb2ca0d0691392ee5ce620072e1b1e040"><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>
<h2>v7.8.2</h2>
<h2><a
href="https://github.com/npm/node-semver/compare/v7.8.1...v7.8.2">7.8.2</a>
(2026-06-04)</h2>
<h3>Bug Fixes</h3>
<ul>
<li><a
href="https://github.com/npm/node-semver/commit/bea6028694a75e840f48b288ac019e9644cfe6e8"><code>bea6028</code></a>
<a href="https://redirect.github.com/npm/node-semver/pull/870">#870</a>
increment dotted prerelease identifiers (<a
href="https://redirect.github.com/npm/node-semver/issues/870">#870</a>)
(<a href="https://github.com/liuzemei"><code>@​liuzemei</code></a>, <a
href="https://github.com/SheldonNeo"><code>@​SheldonNeo</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.2...v7.8.3">7.8.3</a>
(2026-06-08)</h2>
<h3>Bug Fixes</h3>
<ul>
<li><a
href="https://github.com/npm/node-semver/commit/046da7f527cc72a482b5dea8cb59392be65bf186"><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="https://github.com/npm/node-semver/commit/3485ddadb2ca0d0691392ee5ce620072e1b1e040"><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>
<h2><a
href="https://github.com/npm/node-semver/compare/v7.8.1...v7.8.2">7.8.2</a>
(2026-06-04)</h2>
<h3>Bug Fixes</h3>
<ul>
<li><a
href="https://github.com/npm/node-semver/commit/bea6028694a75e840f48b288ac019e9644cfe6e8"><code>bea6028</code></a>
<a href="https://redirect.github.com/npm/node-semver/pull/870">#870</a>
increment dotted prerelease identifiers (<a
href="https://redirect.github.com/npm/node-semver/issues/870">#870</a>)
(<a href="https://github.com/liuzemei"><code>@​liuzemei</code></a>, <a
href="https://github.com/SheldonNeo"><code>@​SheldonNeo</code></a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/npm/node-semver/commit/6b77aa84a648a4b54ea32a21e6db60ebd54d5040"><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="https://github.com/npm/node-semver/commit/3485ddadb2ca0d0691392ee5ce620072e1b1e040"><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="https://github.com/npm/node-semver/commit/046da7f527cc72a482b5dea8cb59392be65bf186"><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><a
href="https://github.com/npm/node-semver/commit/efafcf8d029faa3d1ab74b5ec98d620112af859d"><code>efafcf8</code></a>
chore: release 7.8.2 (<a
href="https://redirect.github.com/npm/node-semver/issues/871">#871</a>)</li>
<li><a
href="https://github.com/npm/node-semver/commit/bea6028694a75e840f48b288ac019e9644cfe6e8"><code>bea6028</code></a>
fix: increment dotted prerelease identifiers (<a
href="https://redirect.github.com/npm/node-semver/issues/870">#870</a>)</li>
<li>See full diff in <a
href="https://github.com/npm/node-semver/compare/v7.8.1...v7.8.3">compare
view</a></li>
</ul>
</details>
<br />

Updates `typescript-eslint` from 8.60.0 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'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>
<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/typescript-eslint/CHANGELOG.md">typescript-eslint's
changelog</a>.</em></p>
<blockquote>
<h2>8.61.0 (2026-06-08)</h2>
<p>This was a version bump only for typescript-eslint 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>
<h2>8.60.1 (2026-06-01)</h2>
<p>This was a version bump only for typescript-eslint 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="https://github.com/typescript-eslint/typescript-eslint/commit/16a5b247affc32af21b695cf96dfd75d7ded50a3"><code>16a5b24</code></a>
chore(release): publish 8.61.0</li>
<li><a
href="https://github.com/typescript-eslint/typescript-eslint/commit/4f84a697aedc436559c3ae09b5b357d98b448d68"><code>4f84a69</code></a>
chore(release): publish 8.60.1</li>
<li><a
href="https://github.com/typescript-eslint/typescript-eslint/commit/1849b530c254fb4f89d7270160f3a998e4acd964"><code>1849b53</code></a>
chore: typecheck using tsgo (<a
href="https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint/issues/12139">#12139</a>)</li>
<li>See full diff in <a
href="https://github.com/typescript-eslint/typescript-eslint/commits/v8.61.0/packages/typescript-eslint">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>
(cherry picked from commit 228cf3936ad99d9e0c09b43d77fbbac8712f2357)

* fix: Reset toolGroups before gathering toolGroups (#2200)

`getToolGroups` can be called multiple times. We want to reset the
`window.__dtmcp.toolGroups` array each time to prevent duplications.

(cherry picked from commit ed02047ae90f25c4c15adb8fd7e224b963f43135)

* fix: limit windows test concurrency (#2205)

Fixes #2137.

This updates the test workflow so Windows jobs run the Node test runner
with `--test-concurrency=1`.

The issue points to intermittent Windows failures where the browser
target closes during screenshot tests. Those tests start real browser
sessions, and limiting test concurrency on Windows avoids overlapping
screenshot/browser work there while keeping the existing parallel
behavior on Linux and macOS.

Verification:

- `git diff --check`
- Inspected the workflow command expansion: only `windows-latest`
receives `--test-concurrency=1`; merge queue retries still pass
`--retry` as before.

(cherry picked from commit e77101e5dc53f9f9541eb91916eedb53495544cc)

* fix: return error message when screencast_stop is called with no active recording (#2209)

## Summary

`screencast_stop` returns an empty response when no recording is active,
making it impossible for the calling agent to distinguish "stopped
successfully" from "nothing was recording."

`screencast_start` already handles its inverse case with an explicit
error (`"a screencast recording is already in progress"`), so this makes
`stop` consistent.

## Change

Added an error message when `screencast_stop` is called without an
active recording:

```ts
if (!data) {
  response.appendResponseLine(
    'Error: no active screencast recording to stop.',
  );
  return;
}
```

## Before

Empty tool response — agent cannot tell what happened.

## After

`Error: no active screencast recording to stop.`

---------

Co-authored-by: Nicholas Roscino <nroscino@google.com>
(cherry picked from commit 9e32002a6947ff695e463a5fefa99a7f66f19403)

* feat: Add get_heapsnapshot_dominators MCP tool (#2215)

Adding the get_heapsnapshot_dominators MCP tool to show the dominators
for a given node. In combination with get_heapsnapshot_retaining_paths
this should help understand what keeps an object reachable and thus
alive.

Co-authored-by: Dominik Inführ <dinfuehr@chromium.org>
Co-authored-by: Nicholas Roscino <nroscino@google.com>
(cherry picked from commit 08c234ea4b14b0ba0906deeca396873614a8c063)

* feat(screenshot): add CLI options to cap screenshot size at the source (#1823)

Adds **opt-in** CLI flags so operators can cap the size of screenshots
returned by `take_screenshot` before they are embedded in the MCP
response. Refs #879.

The flags address two related symptoms reported when MCP clients display
screenshots inline:

1. **Per-image dimension limit**: hosted LLM APIs commonly reject images
exceeding per-image dimension constraints (typical caps are in the
2000-8000 px range, sometimes scaling down further when many images are
in the same request). This is the exact error reported in #879.
2. **Cumulative request size**: after many captures, the cumulative
base64 payload eventually pushes a request over the per-call body size
limit imposed by the LLM API.

Both can be mitigated at the source by reducing format/quality and
downscaling the capture.

- `--screenshot-format <jpeg|png|webp>`: override the default format
used by `take_screenshot` when the caller does not specify one
- `--screenshot-quality <0-100>`: override the default JPEG/WebP
quality. Ignored for PNG
- `--screenshot-max-width <px>`: downscale screenshots wider than this
before they are returned
- `--screenshot-max-height <px>`: downscale screenshots taller than
this. Combines with `--screenshot-max-width`; the smaller scale wins so
both bounds are respected while preserving aspect ratio

For the exact error in #879, the recipe is `--screenshot-max-width=8000
--screenshot-max-height=8000` (or a smaller value such as `2000` if many
images may end up in the same request, depending on the operator's
chosen API).

- Resizing leverages Puppeteer's `clip.scale` (CDP
`Page.captureScreenshot`), so **no new dependencies**.
- Source dimensions per capture mode:
  - viewport: `page.viewport()`
- full page: `document.documentElement.scrollWidth/scrollHeight` via
`page.evaluate()`
  - element (`uid`): `elementHandle.boundingBox()`
- For element and full-page captures with a downscale clip, the call
routes through `page.screenshot({clip})` so the scale parameter applies.
`captureBeyondViewport` is left to Puppeteer's default (`true` when a
clip is set), preserving correct behavior for elements below the fold
and full-page captures.
- ~150 lines of source code, ~200 lines of new tests.

**Fully opt-in**: when no flags are set, `take_screenshot` returns the
exact same bytes as before. No behavioral change for existing users.

- Aligned with the **"Reference over Value"** principle in
`docs/design-principles.md`: the existing 2 MB threshold still routes
oversized screenshots to a temporary file. This change only reduces the
size of the **inline base64 fallback path**, which the principles
document calls out as an acceptable exception when MCP clients display
images natively.
- The MCP server **hardcodes no LLM-specific size limits**. Operators
pick the values that match their client/model combination. This keeps
the maintenance surface here minimal as model limits evolve, and is
intended as a **complement to, not a replacement for**, fixes in the MCP
client itself.

> "It's not feasible for us to maintain this. Limits will change when
models change." (@natorion)

The flags are pure parameters; nothing about the upstream LLM is encoded
in the server. When a vendor raises (or lowers) a limit, no code change
is needed here, only the operator's CLI args change.

> "`filePath` / `page_resize` already work as a workaround." (@OrKoN)

`filePath` is great when the call site knows it's about to take a huge
screenshot, but as you noted earlier in the thread, an oversized image
already in the request history keeps causing failures even on subsequent
calls. `page_resize` works but mutates the page being debugged. The
resize in this PR happens **between Puppeteer and the MCP response**, so
the inspected page is untouched and the failure mode is prevented at the
source.

> "Should be fixed client side."

Agreed, this PR is intended as a complement, not a substitute. A
client-side fix (e.g. compaction evicts/downsamples old images) handles
the cumulative case for *any* MCP. A server-side cap handles the
per-call dimension limit for users who hit it before compaction can kick
in. The two address overlapping but distinct failure modes.

Happy to drop or rework any of this if the maintainers prefer a
different shape, for example making the threshold automatic from a
single `--max-image-bytes` knob, or rejecting the PR entirely in favor
of waiting for a client-side fix. Just wanted to put a concrete option
on the table.

Added 6 new tests:

- `honors screenshotFormat default from CLI args`
- `keeps "png" as default format when no CLI override is set`
- `downscales viewport screenshot when screenshotMaxWidth is set`
- `downscales using the smaller scale when both max-width and max-height
are set`
- `does not resize when source is smaller than the max bounds`
- `downscales full page screenshot when screenshotMaxWidth is set`

All 627 tests in the suite pass. `npm run typecheck` and `npm run
check-format` are clean.

- The dimensions compared against `--screenshot-max-width/height` are
**CSS pixels** (`page.viewport()`), not raw bitmap pixels. With
`deviceScaleFactor > 1` (HiDPI emulation) the actual bitmap may still be
larger. Happy to clarify this in the option description if preferred.
- For element captures with a downscale clip, the call routes through
`page.screenshot({clip})` instead of `element.screenshot()`. Same-frame
elements are correct (boundingBox returns main-frame coords). I have
**not** exercised this path against cross-origin iframe elements; let me
know if you'd like a fallback there.
- The PR is currently in **Draft** state pending CLA verification and
any feedback on the framing above.

Refs #879
Closes https://github.com/ChromeDevTools/chrome-devtools-mcp/issues/879

(cherry picked from commit 55c8a541d4f842056db6bc843e54117b07bf06c1)

* chore(webmcp): s/enable-features=WebMCPTesting/enable-features=WebMCP/g (#2223)

Following https://github.com/puppeteer/puppeteer/pull/15121, this PR
updates WebMCP documentation and tests to switch to the blink feature
WebMCP instead of WebMCPTesting which is removed in
https://chromium-review.googlesource.com/c/chromium/src/+/7921035/comment/1f0982d8_fb3efb91/

(cherry picked from commit 163a581cc1ce279d38d56b2e37e0402c4c9b4510)

* fix: handle missing third-party tool toolGroup description gracefully (#2224)

Angular's third-party tools currently do not provide a description of
the toolGroup, only of the individual tools. We don't want to fail in
this case.

(cherry picked from commit 8fe398eb5d6ee87edb51d4e37570d04b02679346)

* fix: handle screencast file extensions case-insensitively and clean up temp dir on failure (#2207)

Fixes #2206

### Problem

`screencast_start` matched the requested file extension with a
**case-sensitive** `endsWith()` against `['.webm', '.mp4']` and
**silently fell back to `.mp4`** when nothing matched. Combined with
`ensureExtension()` (which replaces the extension), a request for
`demo.WEBM` was recorded as **MP4** to **`demo.mp4`** — a different
format *and* path than requested — and any unsupported extension (e.g.
`recording.avi`) silently became `.mp4`.

Separately, when `screencast_start` is called without a `filePath`, it
creates a temp directory via `mkdtemp()`. If `page.screencast()` then
throws (e.g. ffmpeg missing), that directory was leaked.

### Changes

Two commits:

1. **`fix: match screencast extension case-insensitively and reject
unsupported ones`** — match via `path.extname().toLowerCase()`; reject
an explicitly requested but unsupported extension with an explicit error
listing the supported formats; a missing extension still defaults to
`.mp4`.
2. **`fix: clean up screencast temp directory when recording fails to
start`** — remove the generated temp dir in the `catch` handler, but
only when we own the generated path (never when the caller supplied
`filePath`).

| requested       | before          | after          |
| --------------- | --------------- | -------------- |
| `demo.WEBM`     | mp4 → `demo.mp4`| webm → `demo.webm` |
| `recording.avi` | mp4 → `recording.mp4` | error (rejected) |
| `demo.webm`     | webm → `demo.webm` | unchanged |
| *(no filePath)* | mp4 temp        | unchanged      |

The matched extension is normalized to lower case (`demo.WEBM` →
`demo.webm`).

### Testing

Added three regression tests to `tests/tools/screencast.test.ts` using
the existing `sinon`/`withMcpContext` harness. Verified locally against
Chrome for Testing 149 (`PUPPETEER_EXECUTABLE_PATH`):

- With the fix reverted, the two extension tests fail (uppercase `.WEBM`
→ mp4, `.avi` not rejected) and the cleanup test fails (temp dir left
behind) — i.e. they fail for the right reason.
- With the fix applied, the full `screencast.test.ts` suite passes
(11/11).
- `tsc --noEmit` and `npm run check-format` (eslint + prettier) are
clean.

> Note: I ran the `screencast` test file (which stubs `page.screencast`)
plus typecheck/lint locally; the rest of the browser-based suite I left
to CI.

### Notes for reviewers

- I chose to **`throw`** for an unsupported explicit extension
(consistent with the ffmpeg-missing `throw` in the same handler and with
the issue's "reject with an explicit error"). Happy to switch to the
softer `appendResponseLine(...) + return` style used by the in-progress
guard if you'd prefer.
- The two commits are independent and can be split if you'd rather take
them separately.
- I left the pre-existing `as \`${string}.webm\`` assertion on
`resolvedPath` untouched to keep the diff focused, though it's slightly
misleading now that the default is `.mp4`.

---------

Co-authored-by: Nicholas Roscino <nroscino@google.com>
(cherry picked from commit ba80096521da437a834953f697c4c98bcbd6e658)

* chore(deps-dev): bump chrome-devtools-frontend from 1.0.1645245 to 1.0.1646286 in the bundled-devtools group across 1 directory (#2211)

Bumps the bundled-devtools group with 1 update in the / directory:
[chrome-devtools-frontend](https://github.com/ChromeDevTools/devtools-frontend).

Updates `chrome-devtools-frontend` from 1.0.1645245 to 1.0.1646286
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/ChromeDevTools/devtools-frontend/commit/6481ca553f97535ae2fe7aee8aa9912728a98edd"><code>6481ca5</code></a>
AI: Restrict getResourceContent to same-origin and block file://
URLs</li>
<li><a
href="https://github.com/ChromeDevTools/devtools-frontend/commit/742f1a7fca3f87273c6854a42cbfa9b100da4870"><code>742f1a7</code></a>
Update DevTools DEPS (trusted)</li>
<li><a
href="https://github.com/ChromeDevTools/devtools-frontend/commit/7e296ca6e8b777c43cf789822232e15f60482766"><code>7e296ca</code></a>
Cleanup dead TPCD cookie exemption reasons in devtools</li>
<li><a
href="https://github.com/ChromeDevTools/devtools-frontend/commit/b68153149084903b4713fcec44fe5587bcff3a65"><code>b681531</code></a>
AI: Secure origin-lock boundaries for local files and opaque blobs</li>
<li><a
href="https://github.com/ChromeDevTools/devtools-frontend/commit/23882774076cba004403101233c1a06a25595b49"><code>2388277</code></a>
Implement protocol allowlist and sanitization in
NetworkRequestsHandler</li>
<li><a
href="https://github.com/ChromeDevTools/devtools-frontend/commit/d313036d8fe4a630d21fe4a0dbbb2f39000da3e2"><code>d313036</code></a>
Disable goroutine preemption for esbuild to prevent hangs.</li>
<li><a
href="https://github.com/ChromeDevTools/devtools-frontend/commit/4ad0d072cba9c17e89ee293aa8a105addb6ee2d1"><code>4ad0d07</code></a>
Restrict cross-extension evaluation in ExtensionServer</li>
<li><a
href="https://github.com/ChromeDevTools/devtools-frontend/commit/53987f78d4be66b90afd46914e98ee36875f0c4b"><code>53987f7</code></a>
Update DevTools DEPS (trusted)</li>
<li><a
href="https://github.com/ChromeDevTools/devtools-frontend/commit/772bee8f527d0bb7357953c7b57be135b8dabfa9"><code>772bee8</code></a>
AI: Set up AiAgent2 with V2 agent client feature and system prompt</li>
<li><a
href="https://github.com/ChromeDevTools/devtools-frontend/commit/dc81015ad760619220956de324567c133e418742"><code>dc81015</code></a>
Refactor NetworkRequestsHandler tests to use runHandlers helper</li>
<li>Additional commits viewable in <a
href="https://github.com/ChromeDevTools/devtools-frontend/compare/v1.0.1645245...v1.0.1646286">compare
view</a></li>
</ul>
</details>
<br />

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Nicholas Roscino <nroscino@google.com>
(cherry picked from commit fc9d8fe35a4a522ca483232015f18fc06f33e5e6)

* fix: correct cli-options import in screenshot test after 1.3.0 sync

The upstream screenshot CLI commit referenced chrome-devtools-mcp-cli-options;
point it at the Brave-renamed module.

Co-Authored-By: Claude <noreply@anthropic.com>

* chore: release brave-mcp 1.3.0 (sync upstream chrome-devtools-mcp v1.3.0)

Co-Authored-By: Claude <noreply@anthropic.com>

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: Nikolay Vitkov <34244704+Lightning00Blade@users.noreply.github.com>
Co-authored-by: Serhii Zghama <20826225+serhiizghama@users.noreply.github.com>
Co-authored-by: Piotr Paulski <31672205+zyzyzyryxy@users.noreply.github.com>
Co-authored-by: Dominik Inführ <dominik.infuehr@gmail.com>
Co-authored-by: Dominik Inführ <dinfuehr@chromium.org>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Wolfgang Beyer <wolfi@chromium.org>
Co-authored-by: pupuking723 <2318857637@qq.com>
Co-authored-by: bassem chagra <chagra.bassem@yahoo.fr>
Co-authored-by: Nicholas Roscino <nroscino@google.com>
Co-authored-by: Antoine Kingue <54948363+antoinekm@users.noreply.github.com>
Co-authored-by: François Beaufort <beaufort.francois@gmail.com>
Co-authored-by: Nebrass Lamouchi <lnibrass@gmail.com>
Co-authored-by: Claude <noreply@anthropic.com>
triuzzi added a commit to triuzzi/brave-devtools-mcp that referenced this pull request Jun 21, 2026
On Windows the Chrome process tree is torn down via `taskkill /T`, which is
substantially slower than POSIX signal teardown — observed ~6.5s in CI vs
<500ms on Linux/macOS — and emits benign "could not be terminated" retries.
The flat 3000ms SHUTDOWN_BUDGET_MS therefore flakes on windows-latest
("stdin-EOF shutdown took 6451ms (budget 3000ms)"), even with
--test-concurrency=1 (ChromeDevTools#2205).

Make the budget platform-aware (10000ms on Windows). It stays well under
EXIT_TIMEOUT_MS (15000ms), so a true shutdown hang (the regression this test
guards against) is still caught.

Related: ChromeDevTools#2137
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Task]: Flaky tests on windows

2 participants