Skip to content

feat: sync Brave with Chrome DevTools 1.9.0 - #31

Merged
triuzzi merged 65 commits into
mainfrom
chore/sync-upstream-1.9.0
Sep 12, 2026
Merged

triuzzi merged 65 commits into
mainfrom
chore/sync-upstream-1.9.0

Conversation

@triuzzi

@triuzzi triuzzi commented Sep 12, 2026

Copy link
Copy Markdown
Owner

Syncs the fork with upstream ChromeDevTools/chrome-devtools-mcp v1.9.0 and releases brave-mcp 1.9.0.

Important

Merge this with a merge commit — do not squash or rebase.
Squash and rebase-and-merge both drop the second parent, which re-freezes the merge base and puts main back to "N commits behind upstream" — the exact problem this PR fixes. This overrides the repo's usual squash-and-merge preference.

Upstream position

behind ahead
main before 64 32
this branch 0 33

upstream/main is now an ancestor of this branch, so the fork reads as "0 commits behind" — only commits ahead.

What came in

Upstream v1.9.0, plus the 27 commits that landed on upstream main after the tag (upstream's own release notes don't cover those):

  • the get_css_styles tool and its CSS formatter (matched, inherited, pseudo-element, keyframes and at-rules)
  • config-file support (--config)
  • DevTools comments tools behind the hidden --devtoolsComments flag
  • console history preserved across same-document navigations
  • a performance trace-engine memory leak fix (model now scoped per parse)
  • explicit false options forwarded on CLI start
  • --workspace/--filesystemRoot supersede --allowUnrestrictedPaths
  • devtools-frontend bumped to 717509a

Brave adaptations re-applied

  • brave: / brave-untrusted: schemes moved into isAllowedUrl, which now backs the target filter that browser.ts used to implement inline. Both schemes are filtered alongside their chrome: equivalents, with the new tab page and inspect* still allowed. Covered by new tests in tests/utils/url.test.ts.
  • src/index.ts adopts upstream's McpServer class, keeping the Brave server name/title, [brave-devtools-mcp] log prefix, braveArg/ignoreDefaultBraveArg options, and the fork's telemetry defaults.
  • Options split: browser and tool-category options follow upstream into src/config/browser-options.ts and src/config/category-options.ts, rebranded (Brave channels release/beta/nightly, BRAVE_PATH, brave://inspect).
  • README split: upstream moved its README into docs/, and generate-docs.ts now writes the options table to docs/configuration.md instead of the README. The fork's already-rebranded prose was moved into docs/configuration.md, docs/advanced-usage.md and docs/client-configurations.md; relative links were repointed now that the content lives inside docs/.
  • Agent Plugins 1.0 manifests (mcp.json, plugin.json, new upstream) rebranded and pinned to brave-mcp@1.9.0.
  • usage-statistics stays false; allowedUrlPattern/WebMCP descriptions keep the fork's version-agnostic Brave wording.
  • Upstream's dialog-test fix supersedes the fork's setTimeout variant — upstream's evalPromise is awaited in finally, so keeping ours would have left an undeclared reference.
  • Dead CHROME_DEVTOOLS_MCP_NO_USAGE_STATISTICS references in tests now point at BRAVE_DEVTOOLS_MCP_NO_USAGE_STATISTICS, the variable the fork actually reads.

The fork's docs/advanced-usage.md keeps its own "Concurrent sessions" text: upstream's copy still documents the removed --experimentalPageIdRouting opt-in, while the merged tree has pageIdRouting defaulting to true.

Verification

  • npm run build, npm run gen (no drift), npm run check-format, npm run verify-server-json-version — all pass
  • npm run test — full suite green
  • NODE_ENV=production npm run bundle + npm run test:notices:no-build — pass

Note for anyone running the suite on a non-English locale: upstream's new config-file tests in tests/cli.test.ts assert yargs' English Unknown argument string, so they fail under e.g. LANG=it_IT.UTF-8 and pass under LC_ALL=en_US.UTF-8. That's an upstream test fragility, not a fork regression — CI runs in English.

🤖 Generated with Claude Code

OrKoN and others added 30 commits August 31, 2026 09:10
While we keep the evaluate script available by default since it is
useful for many users, we give an option to disable it.
…ith 6 updates (ChromeDevTools#2632)

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

| Package | From | To |
| --- | --- | --- |
|
[@blackwell-systems/gcf](https://github.com/blackwell-systems/gcf-typescript)
| `2.5.2` | `2.6.1` |
|
[@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin)
| `8.66.0` | `8.67.0` |
|
[@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser)
| `8.66.0` | `8.67.0` |
| [globals](https://github.com/sindresorhus/globals) | `17.9.0` |
`17.11.0` |
| [rollup](https://github.com/rollup/rollup) | `4.62.4` | `4.62.5` |
|
[typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint)
| `8.66.0` | `8.67.0` |


Updates `@blackwell-systems/gcf` from 2.5.2 to 2.6.1
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/blackwell-systems/gcf-typescript/releases">@​blackwell-systems/gcf's
releases</a>.</em></p>
<blockquote>
<h2>gcf-typescript v2.6.1 — decode quoted-key/array-value
round-trip</h2>
<p>A quoted key containing <code>[</code> alongside an array value now
round-trips. Such a key encodes to a named-array line
(<code>{&quot;a[b&quot;: [1]}</code> -&gt; <code>&quot;a[b&quot;[1]:
1</code>); the decoder locates the array count bracket after the closing
quote, per SPEC 4.2. Verified across all seven SDKs by the shared
conformance fixtures (<code>keys/012</code>, <code>keys/014</code>,
<code>keys/015</code>) and the cross-SDK differential fuzz.</p>
<p><strong>Full changelog:</strong> <a
href="https://github.com/blackwell-systems/gcf-typescript/blob/main/CHANGELOG.md">https://github.com/blackwell-systems/gcf-typescript/blob/main/CHANGELOG.md</a></p>
<h2>gcf-typescript v2.6.0 — int64 numeric domain + largeInt</h2>
<p>Implements the v3.5.3 numeric domain (<a
href="https://github.com/blackwell-systems/gcf/releases/tag/v3.5.3">SPEC
2.3.2</a>): the canonical domain is signed <code>int64</code> for
integers and IEEE-754 double for non-integers. This SDK parses integer
literals to an exact <code>int64</code> on decode and on the
JSON-to-value bridge, and rejects a value outside <code>int64</code>
with an out-of-range error on both decode and encode, rather than
following the host numeric type for integers beyond the double-exact
range (2^53). Values beyond <code>int64</code> (unsigned-64 identifiers,
exact decimals) are modeled as strings. Canonical number formatting
aligns to the domain: a double at or above 2^53 renders in exponent
notation. Verified against the shared conformance fixtures
(<code>numbers/017-024</code>, <code>errors-v2/041-042</code>) and the
cross-SDK differential fuzz.</p>
<p>Adds a <code>largeInt</code> decode option
(<code>decodeGeneric(input, { largeInt })</code>: <code>error</code>
default / <code>string</code> / <code>bigint</code> /
<code>number</code>) for an in-domain integer beyond the JavaScript 2^53
safe range; a <code>bigint</code> is accepted and serialized on
encode.</p>
<p><strong>Full changelog:</strong> <a
href="https://github.com/blackwell-systems/gcf-typescript/blob/main/CHANGELOG.md">https://github.com/blackwell-systems/gcf-typescript/blob/main/CHANGELOG.md</a></p>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/blackwell-systems/gcf-typescript/compare/v2.5.2...v2.6.0">https://github.com/blackwell-systems/gcf-typescript/compare/v2.5.2...v2.6.0</a></p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/blackwell-systems/gcf-typescript/blob/main/CHANGELOG.md">@​blackwell-systems/gcf's
changelog</a>.</em></p>
<blockquote>
<h2>v2.6.1 (2026-08-15)</h2>
<ul>
<li>Decode: quoted-key/array-value round-trip (SPEC 4.2).</li>
</ul>
<h2>v2.6.0 (2026-08-14)</h2>
<ul>
<li><strong>Numeric domain (spec v3.5.3, SPEC 2.3.2).</strong> Specifies
the canonical numeric domain as signed <code>int64</code> for integers
and IEEE-754 double for non-integers. Earlier versions left integers
beyond the double-exact range (2^53) to the host numeric type; this
version parses integer literals to an exact <code>int64</code> on decode
and on the JSON-to-value bridge, returns an out-of-range error for a
value outside <code>int64</code> on both decode and encode, and models
larger values (unsigned-64 identifiers, exact decimals) as strings.
Canonical number formatting aligns to the domain: a double at or above
2^53 renders in exponent notation. Verified against new
<code>numbers/017-024</code> and <code>errors-v2/041-042</code>
conformance fixtures and the cross-SDK differential fuzz. Adds a
<code>largeInt</code> decode option (<code>decodeGeneric</code>
<code>opts.largeInt</code>: <code>'error'</code> default,
<code>'string'</code>, <code>'bigint'</code>, <code>'number'</code>) for
an in-domain integer beyond the JavaScript 2^53 safe range; a
<code>bigint</code> is accepted and serialized on encode.</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/blackwell-systems/gcf-typescript/commit/542beb089ff3be117b0518c71363fad5bccf2b2b"><code>542beb0</code></a>
release: v2.6.1</li>
<li><a
href="https://github.com/blackwell-systems/gcf-typescript/commit/d5ea0fed544b7add7cee6431d9375270dc57f789"><code>d5ea0fe</code></a>
fix(decode): locate array count bracket past quoted keys (SPEC 4.2)</li>
<li><a
href="https://github.com/blackwell-systems/gcf-typescript/commit/dfc3b5c4499bded0b5660472f55a59a4b20b7675"><code>dfc3b5c</code></a>
docs(readme): refresh fleet versions for the v3.5.3 release (spec
v3.5.3, 279...</li>
<li><a
href="https://github.com/blackwell-systems/gcf-typescript/commit/ef166cc8ae30429cb98af8d183a55e15ce7c4c26"><code>ef166cc</code></a>
release: v2.6.0 — int64 numeric domain (SPEC 2.3.2); largeInt decode
option</li>
<li><a
href="https://github.com/blackwell-systems/gcf-typescript/commit/00972f2dc781477eb6d369e62edfe03ad4112a07"><code>00972f2</code></a>
Enforce int64 numeric domain with a largeInt policy (SPEC 2.3.2)</li>
<li><a
href="https://github.com/blackwell-systems/gcf-typescript/commit/b993b535ecc0e2b71aab688ddb3849f9075a0343"><code>b993b53</code></a>
docs(readme): update spec version (v3.5.2), fixture count (269), current
SDK ...</li>
<li>See full diff in <a
href="https://github.com/blackwell-systems/gcf-typescript/compare/v2.5.2...v2.6.1">compare
view</a></li>
</ul>
</details>
<br />

Updates `@typescript-eslint/eslint-plugin` from 8.66.0 to 8.67.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.67.0</h2>
<h2>8.67.0 (2026-08-10)</h2>
<h3>🚀 Features</h3>
<ul>
<li><strong>typescript-eslint:</strong> export basic globs for using
tseslint (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12105">#12105</a>)</li>
</ul>
<h3>❤️ Thank You</h3>
<ul>
<li>Evyatar Daud <a
href="https://github.com/StyleShit"><code>@​StyleShit</code></a></li>
<li>Josh Goldberg ✨</li>
<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.67.0">GitHub
Releases</a> for more information.</p>
<p>You can read about our <a
href="https://typescript-eslint.io/users/versioning">versioning
strategy</a> and <a
href="https://typescript-eslint.io/users/releases">releases</a> on our
website.</p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/CHANGELOG.md">@​typescript-eslint/eslint-plugin's
changelog</a>.</em></p>
<blockquote>
<h2>8.67.0 (2026-08-10)</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.67.0">GitHub
Releases</a> for more information.</p>
<p>You can read about our <a
href="https://typescript-eslint.io/users/versioning">versioning
strategy</a> and <a
href="https://typescript-eslint.io/users/releases">releases</a> on our
website.</p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/typescript-eslint/typescript-eslint/commit/20a261fb8e62351e88176b075090dc9276d26072"><code>20a261f</code></a>
chore(release): publish 8.67.0</li>
<li><a
href="https://github.com/typescript-eslint/typescript-eslint/commit/6dfe4d0c572c48f51097638ec4132763defa311a"><code>6dfe4d0</code></a>
chore(eslint-plugin-internal): [plugin-test-formatting] enforce
zero-indentat...</li>
<li><a
href="https://github.com/typescript-eslint/typescript-eslint/commit/3b155bb1344fd7ce83086cf2f864a7e8f3b4a217"><code>3b155bb</code></a>
chore: use typescript 7 for typechecking (<a
href="https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin/issues/12601">#12601</a>)</li>
<li>See full diff in <a
href="https://github.com/typescript-eslint/typescript-eslint/commits/v8.67.0/packages/eslint-plugin">compare
view</a></li>
</ul>
</details>
<br />

Updates `@typescript-eslint/parser` from 8.66.0 to 8.67.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.67.0</h2>
<h2>8.67.0 (2026-08-10)</h2>
<h3>🚀 Features</h3>
<ul>
<li><strong>typescript-eslint:</strong> export basic globs for using
tseslint (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12105">#12105</a>)</li>
</ul>
<h3>❤️ Thank You</h3>
<ul>
<li>Evyatar Daud <a
href="https://github.com/StyleShit"><code>@​StyleShit</code></a></li>
<li>Josh Goldberg ✨</li>
<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.67.0">GitHub
Releases</a> for more information.</p>
<p>You can read about our <a
href="https://typescript-eslint.io/users/versioning">versioning
strategy</a> and <a
href="https://typescript-eslint.io/users/releases">releases</a> on our
website.</p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/parser/CHANGELOG.md">@​typescript-eslint/parser's
changelog</a>.</em></p>
<blockquote>
<h2>8.67.0 (2026-08-10)</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.67.0">GitHub
Releases</a> for more information.</p>
<p>You can read about our <a
href="https://typescript-eslint.io/users/versioning">versioning
strategy</a> and <a
href="https://typescript-eslint.io/users/releases">releases</a> on our
website.</p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/typescript-eslint/typescript-eslint/commit/20a261fb8e62351e88176b075090dc9276d26072"><code>20a261f</code></a>
chore(release): publish 8.67.0</li>
<li><a
href="https://github.com/typescript-eslint/typescript-eslint/commit/3b155bb1344fd7ce83086cf2f864a7e8f3b4a217"><code>3b155bb</code></a>
chore: use typescript 7 for typechecking (<a
href="https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser/issues/12601">#12601</a>)</li>
<li>See full diff in <a
href="https://github.com/typescript-eslint/typescript-eslint/commits/v8.67.0/packages/parser">compare
view</a></li>
</ul>
</details>
<br />

Updates `globals` from 17.9.0 to 17.11.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/sindresorhus/globals/releases">globals's
releases</a>.</em></p>
<blockquote>
<h2>v17.11.0</h2>
<ul>
<li>Add <code>react-native</code> globals (<a
href="https://redirect.github.com/sindresorhus/globals/issues/337">#337</a>)
61eafbf</li>
</ul>
<hr />
<p><a
href="https://github.com/sindresorhus/globals/compare/v17.10.0...v17.11.0">https://github.com/sindresorhus/globals/compare/v17.10.0...v17.11.0</a></p>
<h2>v17.10.0</h2>
<ul>
<li>Add <code>GM_cookie</code> to Greasemonkey globals (<a
href="https://redirect.github.com/sindresorhus/globals/issues/349">#349</a>)
f468407</li>
</ul>
<hr />
<p><a
href="https://github.com/sindresorhus/globals/compare/v17.9.0...v17.10.0">https://github.com/sindresorhus/globals/compare/v17.9.0...v17.10.0</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/sindresorhus/globals/commit/8c599278a68a0a6ea17b0c12f976f2270f70f391"><code>8c59927</code></a>
17.11.0</li>
<li><a
href="https://github.com/sindresorhus/globals/commit/61eafbf105037079654824d883edc261834a0fbd"><code>61eafbf</code></a>
Add <code>react-native</code> globals (<a
href="https://redirect.github.com/sindresorhus/globals/issues/337">#337</a>)</li>
<li><a
href="https://github.com/sindresorhus/globals/commit/7bed4af3730dcb5dbea4274b5264e6be4c4b8910"><code>7bed4af</code></a>
17.10.0</li>
<li><a
href="https://github.com/sindresorhus/globals/commit/f4684072a5ec0ad598ee4a20989b3eaa733753bf"><code>f468407</code></a>
Add <code>GM_cookie</code> to Greasemonkey globals (<a
href="https://redirect.github.com/sindresorhus/globals/issues/349">#349</a>)</li>
<li>See full diff in <a
href="https://github.com/sindresorhus/globals/compare/v17.9.0...v17.11.0">compare
view</a></li>
</ul>
</details>
<br />

Updates `rollup` from 4.62.4 to 4.62.5
<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.62.5</h2>
<h2>4.62.5</h2>
<p><em>2026-08-20</em></p>
<h3>Bug Fixes</h3>
<ul>
<li>Resolve an issue where compact mode could result in invalid module
concatenations (<a
href="https://redirect.github.com/rollup/rollup/issues/6468">#6468</a>)</li>
</ul>
<h3>Pull Requests</h3>
<ul>
<li><a
href="https://redirect.github.com/rollup/rollup/pull/6468">#6468</a>:
Keep the semicolon added after a replaced default export (<a
href="https://github.com/Jaybhade"><code>@​Jaybhade</code></a>, <a
href="https://github.com/lukastaegert"><code>@​lukastaegert</code></a>)</li>
<li><a
href="https://redirect.github.com/rollup/rollup/pull/6469">#6469</a>:
fix(deps): update minor/patch updates (<a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot])</li>
<li><a
href="https://redirect.github.com/rollup/rollup/pull/6470">#6470</a>:
fix(deps): update swc monorepo (major) (<a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot])</li>
<li><a
href="https://redirect.github.com/rollup/rollup/pull/6471">#6471</a>:
chore(deps): lock file maintenance (<a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot])</li>
<li><a
href="https://redirect.github.com/rollup/rollup/pull/6472">#6472</a>:
chore(deps): update dependency eslint-plugin-unicorn to v73 (<a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot])</li>
<li><a
href="https://redirect.github.com/rollup/rollup/pull/6476">#6476</a>:
chore(deps): update dtolnay/rust-toolchain digest to 4360b52 (<a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot])</li>
<li><a
href="https://redirect.github.com/rollup/rollup/pull/6477">#6477</a>:
fix(deps): update minor/patch updates (<a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot])</li>
<li><a
href="https://redirect.github.com/rollup/rollup/pull/6478">#6478</a>:
chore(deps): lock file maintenance (<a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot])</li>
<li><a
href="https://redirect.github.com/rollup/rollup/pull/6479">#6479</a>:
chore(deps): lock file maintenance (<a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot])</li>
<li><a
href="https://redirect.github.com/rollup/rollup/pull/6480">#6480</a>:
chore(deps): lock file maintenance (<a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot])</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.62.5</h2>
<p><em>2026-08-20</em></p>
<h3>Bug Fixes</h3>
<ul>
<li>Resolve an issue where compact mode could result in invalid module
concatenations (<a
href="https://redirect.github.com/rollup/rollup/issues/6468">#6468</a>)</li>
</ul>
<h3>Pull Requests</h3>
<ul>
<li><a
href="https://redirect.github.com/rollup/rollup/pull/6468">#6468</a>:
Keep the semicolon added after a replaced default export (<a
href="https://github.com/Jaybhade"><code>@​Jaybhade</code></a>, <a
href="https://github.com/lukastaegert"><code>@​lukastaegert</code></a>)</li>
<li><a
href="https://redirect.github.com/rollup/rollup/pull/6469">#6469</a>:
fix(deps): update minor/patch updates (<a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot])</li>
<li><a
href="https://redirect.github.com/rollup/rollup/pull/6470">#6470</a>:
fix(deps): update swc monorepo (major) (<a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot])</li>
<li><a
href="https://redirect.github.com/rollup/rollup/pull/6471">#6471</a>:
chore(deps): lock file maintenance (<a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot])</li>
<li><a
href="https://redirect.github.com/rollup/rollup/pull/6472">#6472</a>:
chore(deps): update dependency eslint-plugin-unicorn to v73 (<a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot])</li>
<li><a
href="https://redirect.github.com/rollup/rollup/pull/6476">#6476</a>:
chore(deps): update dtolnay/rust-toolchain digest to 4360b52 (<a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot])</li>
<li><a
href="https://redirect.github.com/rollup/rollup/pull/6477">#6477</a>:
fix(deps): update minor/patch updates (<a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot])</li>
<li><a
href="https://redirect.github.com/rollup/rollup/pull/6478">#6478</a>:
chore(deps): lock file maintenance (<a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot])</li>
<li><a
href="https://redirect.github.com/rollup/rollup/pull/6479">#6479</a>:
chore(deps): lock file maintenance (<a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot])</li>
<li><a
href="https://redirect.github.com/rollup/rollup/pull/6480">#6480</a>:
chore(deps): lock file maintenance (<a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot])</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/rollup/rollup/commit/c20402e2d4498a5861a4f49e00b2e7446c9900bb"><code>c20402e</code></a>
4.62.5</li>
<li><a
href="https://github.com/rollup/rollup/commit/e24957a6d37553bab48149ba0d7e20c476dfd294"><code>e24957a</code></a>
Keep the semicolon added after a replaced default export (<a
href="https://redirect.github.com/rollup/rollup/issues/6468">#6468</a>)</li>
<li><a
href="https://github.com/rollup/rollup/commit/4b6bc39ea71c5f7ce346da8151657d7fcaae926e"><code>4b6bc39</code></a>
chore(deps): update dtolnay/rust-toolchain digest to 4360b52 (<a
href="https://redirect.github.com/rollup/rollup/issues/6476">#6476</a>)</li>
<li><a
href="https://github.com/rollup/rollup/commit/62efc426918aa8a8101f1b5959b9b1c06315719d"><code>62efc42</code></a>
fix(deps): update swc monorepo (major) (<a
href="https://redirect.github.com/rollup/rollup/issues/6470">#6470</a>)</li>
<li><a
href="https://github.com/rollup/rollup/commit/c9372898c39240a68f6861515fc14ee9557da016"><code>c937289</code></a>
chore(deps): update dependency eslint-plugin-unicorn to v73 (<a
href="https://redirect.github.com/rollup/rollup/issues/6472">#6472</a>)</li>
<li><a
href="https://github.com/rollup/rollup/commit/d652a69048f182c4480babf7578589b9ac0627cd"><code>d652a69</code></a>
chore(deps): lock file maintenance (<a
href="https://redirect.github.com/rollup/rollup/issues/6480">#6480</a>)</li>
<li><a
href="https://github.com/rollup/rollup/commit/bd116c7a93bd05ec415395eb9ddf46d9a246582e"><code>bd116c7</code></a>
chore(deps): lock file maintenance (<a
href="https://redirect.github.com/rollup/rollup/issues/6479">#6479</a>)</li>
<li><a
href="https://github.com/rollup/rollup/commit/10edaf7446412bb048e120a572000c21af087d8c"><code>10edaf7</code></a>
chore(deps): lock file maintenance (<a
href="https://redirect.github.com/rollup/rollup/issues/6478">#6478</a>)</li>
<li><a
href="https://github.com/rollup/rollup/commit/d42b0d641bda24121417ba388c44cb223afb09f6"><code>d42b0d6</code></a>
fix(deps): update minor/patch updates (<a
href="https://redirect.github.com/rollup/rollup/issues/6477">#6477</a>)</li>
<li><a
href="https://github.com/rollup/rollup/commit/bfda94f089dfa9b9f9a15239561d21097122fceb"><code>bfda94f</code></a>
fix(deps): update minor/patch updates (<a
href="https://redirect.github.com/rollup/rollup/issues/6469">#6469</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/rollup/rollup/compare/v4.62.4...v4.62.5">compare
view</a></li>
</ul>
</details>
<br />

Updates `typescript-eslint` from 8.66.0 to 8.67.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.67.0</h2>
<h2>8.67.0 (2026-08-10)</h2>
<h3>🚀 Features</h3>
<ul>
<li><strong>typescript-eslint:</strong> export basic globs for using
tseslint (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12105">#12105</a>)</li>
</ul>
<h3>❤️ Thank You</h3>
<ul>
<li>Evyatar Daud <a
href="https://github.com/StyleShit"><code>@​StyleShit</code></a></li>
<li>Josh Goldberg ✨</li>
<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.67.0">GitHub
Releases</a> for more information.</p>
<p>You can read about our <a
href="https://typescript-eslint.io/users/versioning">versioning
strategy</a> and <a
href="https://typescript-eslint.io/users/releases">releases</a> on our
website.</p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md">typescript-eslint's
changelog</a>.</em></p>
<blockquote>
<h2>8.67.0 (2026-08-10)</h2>
<h3>🚀 Features</h3>
<ul>
<li><strong>typescript-eslint:</strong> export basic globs for using
tseslint (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12105">#12105</a>)</li>
</ul>
<h3>❤️ Thank You</h3>
<ul>
<li>Claude Sonnet 5</li>
<li>Evyatar Daud <a
href="https://github.com/StyleShit"><code>@​StyleShit</code></a></li>
<li>Josh Goldberg</li>
<li>Josh Goldberg ✨</li>
<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.67.0">GitHub
Releases</a> for more information.</p>
<p>You can read about our <a
href="https://typescript-eslint.io/users/versioning">versioning
strategy</a> and <a
href="https://typescript-eslint.io/users/releases">releases</a> on our
website.</p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/typescript-eslint/typescript-eslint/commit/20a261fb8e62351e88176b075090dc9276d26072"><code>20a261f</code></a>
chore(release): publish 8.67.0</li>
<li><a
href="https://github.com/typescript-eslint/typescript-eslint/commit/c245fbb611d8cff3199ffa3a169df156d0e35928"><code>c245fbb</code></a>
feat(typescript-eslint): export basic globs for using tseslint (<a
href="https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint/issues/12105">#12105</a>)</li>
<li><a
href="https://github.com/typescript-eslint/typescript-eslint/commit/3b155bb1344fd7ce83086cf2f864a7e8f3b4a217"><code>3b155bb</code></a>
chore: use typescript 7 for typechecking (<a
href="https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint/issues/12601">#12601</a>)</li>
<li>See full diff in <a
href="https://github.com/typescript-eslint/typescript-eslint/commits/v8.67.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>
Co-authored-by: Wolfgang Beyer <wolfi@chromium.org>
I tried to keep the lines of things the same to ease the review process.
I will see if any follow up patches will be helpful after this is
merged.
…ools#2513)

## What

Implements the existing `// TODO truncate the URL` in
`src/formatters/NetworkFormatter.ts`: URLs in the concise one-line
network request format are now capped at 150 characters, with the file's
existing `getSizeLimitedString` helper appending the same `...
<truncated>` marker already used for request/response bodies.

## Why

`list_network_requests` emits one concise line per request, so a single
page with a few `data:` URLs (which can be tens of kilobytes each) can
blow up the tool output by orders of magnitude. Truncating in the
concise format keeps list output token-friendly while losing nothing
that matters for identifying a request.

Scope is deliberately narrow — only
`convertNetworkRequestConciseToString` changes:

- the detailed view (`## Request <url>` heading) still shows the full
URL, and
- `toJSON()` / structured content still carries the full URL,

so nothing that needs the complete URL is affected. (Concise
redirect-chain lines inside the detailed view use the same function and
are truncated too, which keeps that list compact as well.)

## Limit rationale

150 characters keeps origin + path + the start of the query string
intact for virtually all real-world URLs (typical URLs are well under
100 characters), while capping pathological `data:`/blob payloads. It
reuses the existing `getSizeLimitedString` pattern with a new
`URL_CONTEXT_SIZE_LIMIT` constant next to `BODY_CONTEXT_SIZE_LIMIT`.

## Before / after

Before:

```
reqid=12 GET data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA... (10,000+ more chars) ...5CYII= [200]
```

After:

```
reqid=12 GET data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA...(150 chars total)... <truncated> [200]
```

Short URLs are unchanged.

## Testing

- `npm run build` — pass
- `npm run test:no-build` — pass (all tests, exit 0)
- `npm run check-format` — pass (eslint + prettier)

Added three cases to `tests/formatters/NetworkFormatter.test.ts`:

- long URL is truncated at 150 chars with the `... <truncated>` marker
(and `toJSON()` keeps the full URL),
- `data:` URL is truncated,
- a URL exactly at the limit is left untouched.

No existing snapshots changed.

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

---------

Co-authored-by: ZayanKhan-12 <khanzayan200@gmail.com>
Co-authored-by: Alex Rudenko <alexrudenko@chromium.org>
Addresses ChromeDevTools#2291.

## Summary
- add an `--experimental-screencast-fps` option for screencast recording
- validate the value as a positive integer and imply
`--experimental-screencast`
- pass the configured FPS through to Puppeteer's `screencast()` call
- update generated option docs and flag telemetry metadata

## Testing
- `git diff --check origin/main...HEAD`
- `npm run check-format`
- `npm run typecheck`
- `npm test -- --test-only tests/tools/screencast.test.ts
tests/cli.test.ts`
## Summary

- listen for `Page.frameScheduledNavigation` in addition to
`Page.frameStartedNavigating` while waiting for tool-triggered
navigations
- resolve the navigation probe as soon as the main frame schedules a
document navigation, so `evaluate_script` does not miss script-initiated
navigations on slower platforms
- keep the existing wait window, same-document filtering for started
navigations, and response shape unchanged

Fixes ChromeDevTools#2609

## Validation

- `npm run format`
- `npm run check-format`
- `npm run test tests/tools/script.test.ts`
- `npm run test tests/utils/WaitForHelper.test.ts`
- `npm run test` was also run. It failed in unrelated local
environment/browser cases:
- extension uninstall timeouts in
extension/service-worker/list_pages/evaluate_script extension tests
- `browser_take_screenshot > with full page resulting in a large
screenshot`: `Protocol error (Page.captureScreenshot): Page is too
large`

## Risk

This only changes the early navigation-detection signal used by
`WaitForHelper`. It does not change navigation timeout values, stable
DOM waiting, dialog handling, iframe filtering, or the final
`navigatedToUrl` response construction. `--browserUrl` and browser
launch behavior are untouched.
## Summary

- Add an Agent Plugins 1.0 package at the repository root.
- Expose the existing stdio server through a version-pinned `mcp.json`.
- Keep the package version and MCP npm pin synchronized through
release-please.
- Use `npx --prefix ${PLUGIN_DATA}` to avoid resolving the repository's
unbuilt local npm package instead of the published server. This keeps
compatibility with clients that cannot represent an explicit working
directory.
- Document installation through Agent Plugins CLI.

## Verification

- `plugin.json` and `mcp.json` pass the Agent Plugins 1.0 schemas.
- Exact head `02372c4d47ad257773b2b80c7d7fd056d7067be0` was tested using
local package bytes with the released Agent Plugins CLI 0.1.24.
- Isolated add, doctor, repair, and remove with data cleanup passed for
Claude Code, Gemini CLI, OpenCode, Cline, and Windsurf.
Configuration-only clients are not claimed as live model tests.
- OpenCode 1.18.25 with its built-in `opencode/big-pickle` model
successfully called `new_page` and `take_snapshot`, recovering a random
marker from a loopback test page. The marker was absent from the prompt,
and other tools were denied.
- Gemini CLI 0.57.0 reported the MCP server as connected. Its model call
was blocked by Google account eligibility, so Gemini model runtime is
not claimed.
- Package tree:
`sha256:50145f0cfd0e4095cfb00fc74755c0c930dc8258952c868de5dc81b54765c1a0`.
- Manifest:
`sha256:b34a4dcd71cd536a7f5a3a51d76d53ae5af3d0ce0f18783e71c7f01da865b867`.
- Sanitized runtime evidence:
https://github.com/777genius/universal-agent-plugins/blob/a022a505df4e9b6627d911d935c5fff511451ecd/tests/e2e/results/chrome-devtools-live-clients-2026-08-31.json

The earlier exact-head lifecycle evidence, including real Claude CLI
plugin discovery, remains available at
https://github.com/777genius/universal-agent-plugins/blob/main/tests/e2e/results/agentplugins-chrome-devtools-multiclient-2026-08-30.json.
It applies to the previously recorded head, not a new runtime claim for
this revision.

No real user project or browser profile was used. The community
directory short alias is being expanded separately; the README keeps the
direct repository command until that publication is available.
`--screenshotFormat` says JPEG and WebP "helps reduce context size in AI
conversations". The byte saving is real, but it does not reach the
context: image tokens scale with the image's dimensions, not with the
size of the encoded payload.

Token delta on each Claude turn that followed exactly one image, with
the surrounding text small enough that the image dominates it, grouped
by pixel count so only the format differs:

| pixels | format | n | median bytes | median tokens |
| --- | --- | ---: | ---: | ---: |
| 1.5-1.8 MP | jpeg | 115 | 326 KB | 2362 |
| 1.5-1.8 MP | png | 298 | 357 KB | 2361 |
| 2.5-2.8 MP | jpeg | 45 | 444 KB | 3574 |
| 2.5-2.8 MP | png | 24 | 252 KB | 3604 |

Same pixels, same cost. Each delta carries a small fixed per-turn
overhead, so read the pairs against each other rather than as absolute
image cost. The formats come from separate captures rather than one
image encoded twice, so the byte column shows only that cost ignores it
– in the second pair the larger files are the cheaper ones.

The numbers are
[Claude](https://platform.claude.com/docs/en/build-with-claude/vision)'s,
but [GPT](https://developers.openai.com/api/docs/guides/images-vision)
and [Gemini](https://ai.google.dev/gemini-api/docs/tokens) price images
the same way, by pixel dimensions in patches or tiles. Neither charges
on encoded bytes.

`--screenshotMaxWidth` just below promises the same thing and does
deliver, since it changes the dimensions.

New wording:

> Override the default output format used by take_screenshot when the
caller does not specify one. JPEG and WebP are ~3-5x smaller than PNG,
which reduces transfer and storage size. To reduce context size use
--screenshotMaxWidth / --screenshotMaxHeight, since image tokens scale
with dimensions rather than encoded bytes. Unset preserves the existing
default ("png").

`docs/configuration.md` is generated from that description and updated
to match.
…496da` (ChromeDevTools#2615)

Bumps
[third_party/devtools-frontend](https://github.com/ChromeDevTools/devtools-frontend)
from `6fdb53e` to `f2496da`.
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/ChromeDevTools/devtools-frontend/commit/f2496daebe37452b8d997f6fca88f24eb49e34f5"><code>f2496da</code></a>
[ts_library] Emit tsconfig.ref.json and sync to tsc in
ts_library.py</li>
<li><a
href="https://github.com/ChromeDevTools/devtools-frontend/commit/7976d81ecd17a58fce6c67d546e4f27f1bf36d8e"><code>7976d81</code></a>
[settings] Migrate console-history-autocomplete setting to
SettingDescriptor</li>
<li><a
href="https://github.com/ChromeDevTools/devtools-frontend/commit/ffb76e7333f47fa26103961cc02c9ad291b32651"><code>ffb76e7</code></a>
Update DevTools DEPS (trusted)</li>
<li><a
href="https://github.com/ChromeDevTools/devtools-frontend/commit/5f0820f7b46bfa8cc85f8926f6648c7ed5e88e0c"><code>5f0820f</code></a>
Remove unused helper script</li>
<li><a
href="https://github.com/ChromeDevTools/devtools-frontend/commit/6e3fa1c6b2edeae555a5deb13dc206a622e0d136"><code>6e3fa1c</code></a>
Update DevTools DEPS (trusted)</li>
<li><a
href="https://github.com/ChromeDevTools/devtools-frontend/commit/3be3c408eb68d1f17f2be2c7ac04fdbc4c77a002"><code>3be3c40</code></a>
Add handleExternalAIRequest hook for AI evaluations</li>
<li><a
href="https://github.com/ChromeDevTools/devtools-frontend/commit/20c4fec9ae18e4a19999ab57f321c35c15f3d2bf"><code>20c4fec</code></a>
AI: Retain AiAgent2 instance across context transitions</li>
<li><a
href="https://github.com/ChromeDevTools/devtools-frontend/commit/e382e373c3754f38a67589ea70ccdcd0a5a07996"><code>e382e37</code></a>
AI Assistance: Introduce Lighthouse capabilities for AI V2 tools</li>
<li><a
href="https://github.com/ChromeDevTools/devtools-frontend/commit/041b73b217266d67e9a1f495924ac49e787a0b6b"><code>041b73b</code></a>
[comments] hide overflown highlights.</li>
<li><a
href="https://github.com/ChromeDevTools/devtools-frontend/commit/d45d8854d5264d248b6b9e5836b29d0e108d7c5e"><code>d45d885</code></a>
Roll browser-protocol and CfT</li>
<li>Additional commits viewable in <a
href="https://github.com/ChromeDevTools/devtools-frontend/compare/6fdb53e0f7a5cb1ebf16e40c45439a5c8007d9be...f2496daebe37452b8d997f6fca88f24eb49e34f5">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 this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Nikolay Vitkov <nvitkov@chromium.org>
I think this makes a little bit cleaner structures. As now Clearcut
holds the responsibility of how the data is formatted.
## Summary

- schedule the delayed navigation after `evaluate` returns
- give navigation completion a test-specific timeout

## Why

The regression test raced execution-context teardown on Windows Node 26
and failed twice in ChromeDevTools#2623. The change keeps the original scenario: the
action still takes longer than `expectNavigationIn`, then navigation
starts within the expected window. Production code is unchanged.

## Verification

- `npm run test -- tests/utils/WaitForHelper.test.ts`
- 20 consecutive focused repetitions passed on the exact branch head
…group across 1 directory (ChromeDevTools#2631)

Bumps the bundled group with 1 update in the / directory:
[puppeteer](https://github.com/puppeteer/puppeteer).

Updates `puppeteer` from 25.8.0 to 25.9.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/puppeteer/puppeteer/releases">puppeteer's
releases</a>.</em></p>
<blockquote>
<h2>puppeteer-core: v25.9.0</h2>
<h2><a
href="https://github.com/puppeteer/puppeteer/compare/puppeteer-core-v25.8.0...puppeteer-core-v25.9.0">25.9.0</a>
(2026-08-24)</h2>
<h3>🎉 Features</h3>
<ul>
<li>roll to Firefox 154.0 (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/15361">#15361</a>)
(<a
href="https://github.com/puppeteer/puppeteer/commit/d702da7ec7d72e3a814ffcf0c4bc70a11c171748">d702da7</a>)</li>
<li>support shadow roots in MutationPoller (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/15292">#15292</a>)
(<a
href="https://github.com/puppeteer/puppeteer/commit/4670a25b16d48c8be8e4a747412a8caf4509063f">4670a25</a>)</li>
<li><strong>webmcp:</strong> support canceling tool execution (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/15365">#15365</a>)
(<a
href="https://github.com/puppeteer/puppeteer/commit/3523f36e840b6c7ebf1167eddb5c2e83c9262c68">3523f36</a>)</li>
</ul>
<h3>🛠️ Fixes</h3>
<ul>
<li>roll to Chrome 152.0.7977.54 (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/15363">#15363</a>)
(<a
href="https://github.com/puppeteer/puppeteer/commit/9088feb7d71cda035eee4f4d21cb20fee9238aa9">9088feb</a>)</li>
<li>set frame content without document.write (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/15358">#15358</a>)
(<a
href="https://github.com/puppeteer/puppeteer/commit/83f8d1c8536f238dbdfdf041c72581bdf2b6f3de">83f8d1c</a>)</li>
</ul>
<h2>puppeteer: v25.9.0</h2>
<h2><a
href="https://github.com/puppeteer/puppeteer/compare/puppeteer-v25.8.0...puppeteer-v25.9.0">25.9.0</a>
(2026-08-24)</h2>
<h3>♻️ Chores</h3>
<ul>
<li><strong>puppeteer:</strong> Synchronize puppeteer versions</li>
</ul>
<h3>Dependencies</h3>
<ul>
<li>The following workspace dependencies were updated
<ul>
<li>dependencies
<ul>
<li>puppeteer-core bumped from 25.8.0 to 25.9.0</li>
</ul>
</li>
</ul>
</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/puppeteer/puppeteer/blob/main/CHANGELOG.md">puppeteer's
changelog</a>.</em></p>
<blockquote>
<h1>Changelog</h1>
<p>Puppeteer's canonical changelogs are maintained with the
packages:</p>
<ul>
<li><a
href="https://github.com/puppeteer/puppeteer/blob/main/packages/puppeteer/CHANGELOG.md"><code>puppeteer</code></a></li>
<li><a
href="https://github.com/puppeteer/puppeteer/blob/main/packages/puppeteer-core/CHANGELOG.md"><code>puppeteer-core</code></a></li>
</ul>
<p>The <a href="https://pptr.dev/changelog">combined changelog</a> is
generated when the
documentation website is built.</p>
<p>Historical combined entries are retained below.</p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/puppeteer/puppeteer/commit/21efe834b7094d53a1c0d633dc69deced17702d8"><code>21efe83</code></a>
chore: release main (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/15385">#15385</a>)</li>
<li><a
href="https://github.com/puppeteer/puppeteer/commit/cb650f663890e6ead5b048dd80cfc8c2e1a38fff"><code>cb650f6</code></a>
build: do not use labelled as trigger (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/15384">#15384</a>)</li>
<li><a
href="https://github.com/puppeteer/puppeteer/commit/8af4a8b806b56a6d536072d0e292feafaef72c8a"><code>8af4a8b</code></a>
chore: revert update Node.js version to v24.19.0 (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/15382">#15382</a>)</li>
<li><a
href="https://github.com/puppeteer/puppeteer/commit/45013728beb8c9b169301b94ed0ad00c69c56244"><code>4501372</code></a>
ci: remove base and ref passing from release-please (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/15381">#15381</a>)</li>
<li><a
href="https://github.com/puppeteer/puppeteer/commit/9fb4917f47d39c27b08d666692b98bbc0a8d8b3f"><code>9fb4917</code></a>
chore: materalize website docs and remove pre-release (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/15376">#15376</a>)</li>
<li><a
href="https://github.com/puppeteer/puppeteer/commit/468572e7a28bf8394fa2a4efcb361d1922210886"><code>468572e</code></a>
chore(deps): bump github/codeql-action/upload-sarif from 4.37.6 to
4.37.7 in ...</li>
<li><a
href="https://github.com/puppeteer/puppeteer/commit/87d457d7da02795f03540c582ecd72bb6d6a0d91"><code>87d457d</code></a>
chore: update Node.js version to v24.19.0 (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/15378">#15378</a>)</li>
<li><a
href="https://github.com/puppeteer/puppeteer/commit/bbd2bfaedafc69cf23a52ed54fceeaec239bc43c"><code>bbd2bfa</code></a>
chore: cleanup doctest (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/15372">#15372</a>)</li>
<li><a
href="https://github.com/puppeteer/puppeteer/commit/57b44b7d8d596f3b759d9dee56e90dcbf33fc0d6"><code>57b44b7</code></a>
ci: split out doc workflow (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/15373">#15373</a>)</li>
<li><a
href="https://github.com/puppeteer/puppeteer/commit/c060305f76d18eaef59dbddf93d8e2a46d504e6b"><code>c060305</code></a>
chore: disable Dependabot labels (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/15374">#15374</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/puppeteer/puppeteer/compare/puppeteer-v25.8.0...puppeteer-v25.9.0">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: Wolfgang Beyer <wolfi@chromium.org>
Bumps [fast-uri](https://github.com/fastify/fast-uri) from 3.1.5 to
3.1.7.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/fastify/fast-uri/releases">fast-uri's
releases</a>.</em></p>
<blockquote>
<h2>v3.1.7</h2>
<h2>⚠️ Security Warning</h2>
<p>This is a security release that fixes the following high-severity
security advisories:</p>
<ul>
<li><a
href="https://github.com/fastify/fast-uri/security/advisories/GHSA-qw65-cvwx-89v3">GHSA-qw65-cvwx-89v3</a>
— authority injection via an unvalidated port in
<code>serialize()</code></li>
<li><a
href="https://github.com/fastify/fast-uri/security/advisories/GHSA-58mr-gqgx-xq4g">GHSA-58mr-gqgx-xq4g</a>
— host confusion via unbalanced or misplaced IP-literal brackets</li>
</ul>
<p>Users of the v3.x release line should upgrade to v3.1.7.</p>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/fastify/fast-uri/compare/v3.1.6...v3.1.7">https://github.com/fastify/fast-uri/compare/v3.1.6...v3.1.7</a></p>
<h2>v3.1.6</h2>
<h2>⚠️ Security Warning</h2>
<p>This release addresses the following high-severity security
advisories:</p>
<ul>
<li><a
href="https://github.com/fastify/fast-uri/security/advisories/GHSA-5jgf-p345-68v8">GHSA-5jgf-p345-68v8</a>
— host confusion via skipped IDN canonicalization on scheme-relative
references</li>
<li><a
href="https://github.com/fastify/fast-uri/security/advisories/GHSA-fph4-wmhf-6fwf">GHSA-fph4-wmhf-6fwf</a>
— server-side request forgery via repeated hostname
percent-decoding</li>
<li><a
href="https://github.com/fastify/fast-uri/security/advisories/GHSA-f65p-4m7j-42xc">GHSA-f65p-4m7j-42xc</a>
— server-side request forgery via malformed IPv6 normalization</li>
<li><a
href="https://github.com/fastify/fast-uri/security/advisories/GHSA-jqff-g426-hqxp">GHSA-jqff-g426-hqxp</a>
— host confusion via percent-encoded scheme normalization</li>
</ul>
<p>Users of the v3.x release line should upgrade to v3.1.6.</p>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/fastify/fast-uri/compare/v3.1.5...v3.1.6">https://github.com/fastify/fast-uri/compare/v3.1.5...v3.1.6</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/fastify/fast-uri/commit/412e40abd4eb8beabfb952d80abf949a2baf27a3"><code>412e40a</code></a>
Bumped v3.1.7</li>
<li><a
href="https://github.com/fastify/fast-uri/commit/9f4c943e4d2133e8d78e0941203879216255bb01"><code>9f4c943</code></a>
fix: backport port and IP-literal validation to v3.x (<a
href="https://redirect.github.com/fastify/fast-uri/issues/216">#216</a>)</li>
<li><a
href="https://github.com/fastify/fast-uri/commit/1eb3ce436fe050807caba79f886ab894f485a588"><code>1eb3ce4</code></a>
fix: treat unterminated bracket hosts as reg-names again (<a
href="https://redirect.github.com/fastify/fast-uri/issues/214">#214</a>)</li>
<li><a
href="https://github.com/fastify/fast-uri/commit/6f970b2951fd896aa0f3a7ff28eeb6640c137d33"><code>6f970b2</code></a>
Bumped v3.1.6</li>
<li><a
href="https://github.com/fastify/fast-uri/commit/d941579a84273ec7e96bde596b1f7a8be447df2a"><code>d941579</code></a>
fix: never run IDN canonicalization on bracketed IP literals</li>
<li><a
href="https://github.com/fastify/fast-uri/commit/c0f0279cf370cb89ee56b04bbcde2a7afbe81aba"><code>c0f0279</code></a>
test: adapt decoded-scheme handler assertion to 3.x (no mailto
scheme)</li>
<li><a
href="https://github.com/fastify/fast-uri/commit/37f3417c82994279656854f83ce938acd81c3862"><code>37f3417</code></a>
Merge commit from fork</li>
<li><a
href="https://github.com/fastify/fast-uri/commit/607bfbe953f28a14c2e06ae64aff38c81ca2937f"><code>607bfbe</code></a>
Merge commit from fork</li>
<li><a
href="https://github.com/fastify/fast-uri/commit/ae92a4c5d8c4b6c9e447f048d5fcbde7eebd5514"><code>ae92a4c</code></a>
Merge commit from fork</li>
<li><a
href="https://github.com/fastify/fast-uri/commit/444ecdad447db2cc23c4d422acc6f0daa6fa8eef"><code>444ecda</code></a>
Merge commit from fork</li>
<li>Additional commits viewable in <a
href="https://github.com/fastify/fast-uri/compare/v3.1.5...v3.1.7">compare
view</a></li>
</ul>
</details>
<br />


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

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the
[Security Alerts
page](https://github.com/ChromeDevTools/chrome-devtools-mcp/network/alerts).

</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…ools#2643)

Bumps
[@humanfs/node](https://github.com/humanwhocodes/humanfs/tree/HEAD/packages/node)
from 0.16.7 to 0.16.8.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/humanwhocodes/humanfs/releases">@​humanfs/node's
releases</a>.</em></p>
<blockquote>
<h2>node: v0.16.8</h2>
<h2><a
href="https://github.com/humanwhocodes/humanfs/compare/node-v0.16.7...node-v0.16.8">0.16.8</a>
(2026-04-17)</h2>
<h3>Bug Fixes</h3>
<ul>
<li>Include type dependencies at runtime (<a
href="https://github.com/humanwhocodes/humanfs/commit/956ce7aac2a998d0af23b7cb08e7630b69693138">956ce7a</a>),
closes <a
href="https://redirect.github.com/humanwhocodes/humanfs/issues/145">#145</a></li>
</ul>
<h3>Dependencies</h3>
<ul>
<li>The following workspace dependencies were updated
<ul>
<li>dependencies
<ul>
<li><code>@​humanfs/core</code> bumped from ^0.19.1 to ^0.19.2</li>
</ul>
</li>
</ul>
</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/humanwhocodes/humanfs/blob/main/packages/node/CHANGELOG.md">@​humanfs/node's
changelog</a>.</em></p>
<blockquote>
<h2><a
href="https://github.com/humanwhocodes/humanfs/compare/node-v0.16.7...node-v0.16.8">0.16.8</a>
(2026-04-17)</h2>
<h3>Bug Fixes</h3>
<ul>
<li>Ensure symlinks are copied as symlinks in <code>copy()</code> and
<code>copyAll()</code> (<a
href="https://github.com/humanwhocodes/humanfs/commit/22bbaa4487a3e6c1197ca619840de4615d0c3404">22bbaa44</a>)</li>
<li>Include type dependencies at runtime (<a
href="https://github.com/humanwhocodes/humanfs/commit/956ce7aac2a998d0af23b7cb08e7630b69693138">956ce7a</a>),
closes <a
href="https://redirect.github.com/humanwhocodes/humanfs/issues/145">#145</a></li>
</ul>
<h3>Dependencies</h3>
<ul>
<li>The following workspace dependencies were updated
<ul>
<li>dependencies
<ul>
<li><code>@​humanfs/core</code> bumped from ^0.19.1 to ^0.19.2</li>
</ul>
</li>
</ul>
</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/humanwhocodes/humanfs/commit/e96070e897f017ae8abd2b0676d98d14e49665cc"><code>e96070e</code></a>
chore: release main (<a
href="https://github.com/humanwhocodes/humanfs/tree/HEAD/packages/node/issues/146">#146</a>)</li>
<li><a
href="https://github.com/humanwhocodes/humanfs/commit/22bbaa4487a3e6c1197ca619840de4615d0c3404"><code>22bbaa4</code></a>
Merge commit from fork</li>
<li><a
href="https://github.com/humanwhocodes/humanfs/commit/956ce7aac2a998d0af23b7cb08e7630b69693138"><code>956ce7a</code></a>
fix: Include type dependencies at runtime</li>
<li>See full diff in <a
href="https://github.com/humanwhocodes/humanfs/commits/node-v0.16.8/packages/node">compare
view</a></li>
</ul>
</details>
<br />


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

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the
[Security Alerts
page](https://github.com/ChromeDevTools/chrome-devtools-mcp/network/alerts).

</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Fixes ChromeDevTools#2598

This lets people set filesystem roots through the MCP server or the
Chrome DevTools CLI. Multiple roots work together with any roots sent by
the MCP client, and temp directory access stays the same.

I added tests for the flags and root handling.

---------

Co-authored-by: Joseph B <289838966+joebasrawi@users.noreply.github.com>
Co-authored-by: Joseph B <joebasrawi@users.noreply.github.com>
…0546b` (ChromeDevTools#2646)

Bumps
[third_party/devtools-frontend](https://github.com/ChromeDevTools/devtools-frontend)
from `f2496da` to `de0546b`.
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/ChromeDevTools/devtools-frontend/commit/de0546ba37bda1e4b4115dfa2fbacae08b53e752"><code>de0546b</code></a>
[build] Forward _sources transitively in ts_library and firewall
entrypoints</li>
<li><a
href="https://github.com/ChromeDevTools/devtools-frontend/commit/520318a0fc4a0d784ea28028deeaa37a43c48cd1"><code>520318a</code></a>
Update DevTools DEPS (trusted)</li>
<li><a
href="https://github.com/ChromeDevTools/devtools-frontend/commit/514d5be0204cefdcad6b01afd8fbb12a0ca14ad9"><code>514d5be</code></a>
[ts_library] Migrate ui/components/snackbars to split compilation</li>
<li><a
href="https://github.com/ChromeDevTools/devtools-frontend/commit/699e8b454e954f2ce4e4aa251ac65561c627f7e4"><code>699e8b4</code></a>
[ts_library] Migrate ui/components/settings to split compilation</li>
<li><a
href="https://github.com/ChromeDevTools/devtools-frontend/commit/ed1b7f07754e3e8ddb2a5b16b1d1fbbfb9348b17"><code>ed1b7f0</code></a>
Use size tokens in objectPopover, panelIntroductionSteps and
locationsSetting...</li>
<li><a
href="https://github.com/ChromeDevTools/devtools-frontend/commit/9f3c93795c216795a8b422d62486a1be6bd0085f"><code>9f3c937</code></a>
Roll browser-protocol and CfT</li>
<li><a
href="https://github.com/ChromeDevTools/devtools-frontend/commit/bbb5a8b2758411a2fca11780cb8acce2af833f5f"><code>bbb5a8b</code></a>
RPP: eliminate render lag and redundant updates during timeline
navigation</li>
<li><a
href="https://github.com/ChromeDevTools/devtools-frontend/commit/174f2d4940fe814c8403355d90e0900d54fd41c9"><code>174f2d4</code></a>
Use the theme-aware subtle text color so the</li>
<li><a
href="https://github.com/ChromeDevTools/devtools-frontend/commit/6aabb9b04caafa84df76ff061433ae9d6f8508ae"><code>6aabb9b</code></a>
[elements] Support gutter marker decorations in declarative view</li>
<li><a
href="https://github.com/ChromeDevTools/devtools-frontend/commit/c40b22bc7258aec34a59010dfcae9e60fe2f4b74"><code>c40b22b</code></a>
[AI Assistance] Remove legacy manual evaluation UI and server</li>
<li>Additional commits viewable in <a
href="https://github.com/ChromeDevTools/devtools-frontend/compare/f2496daebe37452b8d997f6fca88f24eb49e34f5...de0546ba37bda1e4b4115dfa2fbacae08b53e752">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 this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Wolfgang Beyer <wolfi@chromium.org>
the test fails often and it does not give a good signal if the feature
is working or not. There have been multiple attempts to fix this but it
seems to be riddled with some underlying flakiness (seems to be
exclusive to Windows but not 100% sure).
…0f6aa` (ChromeDevTools#2656)

Bumps
[third_party/devtools-frontend](https://github.com/ChromeDevTools/devtools-frontend)
from `de0546b` to `330f6aa`.
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/ChromeDevTools/devtools-frontend/commit/330f6aa67c977208d92feb7dfb4abb77e9708ae2"><code>330f6aa</code></a>
Add focus rings to expandable controls</li>
<li><a
href="https://github.com/ChromeDevTools/devtools-frontend/commit/3e299ff967cbe458f3317243960888ae4f1b3f82"><code>3e299ff</code></a>
[ts_library] Migrate ui/legacy/components/quick_open to split
compilation</li>
<li><a
href="https://github.com/ChromeDevTools/devtools-frontend/commit/a1722efa2a1b20042f9c5c03a4519c1f3ddf5fae"><code>a1722ef</code></a>
[ts_library] Migrate ui/legacy/components/perf_ui to split
compilation</li>
<li><a
href="https://github.com/ChromeDevTools/devtools-frontend/commit/3d9a47c3f53df85b1cd34abf309712ac3f2bed43"><code>3d9a47c</code></a>
Add missing console:css_files dependency to application panel
bundle</li>
<li><a
href="https://github.com/ChromeDevTools/devtools-frontend/commit/c86f5b73fd546dac3b12619124a34ac6a93e3211"><code>c86f5b7</code></a>
[ts_library] Migrate Changes panel to split compilation</li>
<li><a
href="https://github.com/ChromeDevTools/devtools-frontend/commit/3eed5d457ebce0739e536da7cf63bde0025079d6"><code>3eed5d4</code></a>
[foundation] Fix flaky Universe.test.ts</li>
<li><a
href="https://github.com/ChromeDevTools/devtools-frontend/commit/674f3f3496b70e8aceb71ce027c65162bf993dff"><code>674f3f3</code></a>
Improve return type of getComputedStylesForDomNode</li>
<li><a
href="https://github.com/ChromeDevTools/devtools-frontend/commit/1d3e71a681dbea922b4fcbd8ac550e08abe6a091"><code>1d3e71a</code></a>
[ts_library] Migrate Accessibility panel to split compilation</li>
<li><a
href="https://github.com/ChromeDevTools/devtools-frontend/commit/390f974f96fe313897ba58a3a3f2d50ea8d56e16"><code>390f974</code></a>
[ts_library] Migrate test/e2e/host to split compilation</li>
<li><a
href="https://github.com/ChromeDevTools/devtools-frontend/commit/5e356a5c2ff344991bea87841db224ec9900aa01"><code>5e356a5</code></a>
Make writeIfChanged asynchronous</li>
<li>Additional commits viewable in <a
href="https://github.com/ChromeDevTools/devtools-frontend/compare/de0546ba37bda1e4b4115dfa2fbacae08b53e752...330f6aa67c977208d92feb7dfb4abb77e9708ae2">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 this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…ols#2658)

Fixes ChromeDevTools#2657

## Summary

- `BrowserContext.newPage()` in Puppeteer 25.9 supports the `background`
option, so pass it through in the isolated-context branch of
`McpContext.newPage()` instead of dropping it.
- Add a real-browser regression test asserting the original page keeps
focus when `new_page` is called with both `background: true` and
`isolatedContext`.

## Testing

- `npm run typecheck`
- `npm run test:no-build tests/tools/pages.test.ts`
- prettier + eslint pass
…s#2641)

test: mock-based unit tests for emulation, no real browser needed

Relates to ChromeDevTools#2639.

Summary
Adds tests/mocks.ts — sinon createStubInstance-based factories for
McpPage, McpContext, McpResponse, and Puppeteer's Page (via the concrete
CdpPage subclass)
createHandlerMocks() helper returns {page, context, response} together
for handler tests
Converts the network and cpu describe blocks in emulation.test.ts from
real-browser (withMcpContext) to the sinon mocks
Converts emulate() behavior tests in McpPage.test.ts to use a real
McpPage instance wrapping a mocked Puppeteer page
(createMockPuppeteerPage()), instead of a real browser
No new test files — all changes are in-place edits to existing test
files, per review feedback
Remaining emulate()-related tests that need real browser behavior
(predefined-condition validation, secondary DevTools session) are
intentionally left as real-browser tests
Verification
npm run format
npm run test
… group (ChromeDevTools#2671)

Bumps the bundled group with 1 update:
[puppeteer](https://github.com/puppeteer/puppeteer).

Updates `puppeteer` from 25.9.0 to 25.10.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/puppeteer/puppeteer/releases">puppeteer's
releases</a>.</em></p>
<blockquote>
<h2>puppeteer-core: v25.10.0</h2>
<h2><a
href="https://github.com/puppeteer/puppeteer/compare/puppeteer-core-v25.9.0...puppeteer-core-v25.10.0">25.10.0</a>
(2026-09-03)</h2>
<h3>🎉 Features</h3>
<ul>
<li>implement video-stream-based screen recording via page.record() (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/15387">#15387</a>)
(<a
href="https://github.com/puppeteer/puppeteer/commit/f6d5e28021f207d80c10528956738b3b01b41609">f6d5e28</a>)</li>
<li>roll to Firefox 155.0 (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/15408">#15408</a>)
(<a
href="https://github.com/puppeteer/puppeteer/commit/ed544f71fbfadf8748040008453ea1fdedfc5ec9">ed544f7</a>)</li>
</ul>
<h3>🛠️ Fixes</h3>
<ul>
<li>detect a websocket connection that died without a close (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/15406">#15406</a>)
(<a
href="https://github.com/puppeteer/puppeteer/commit/8c3576b789440cc3b9627e9d6749369a6f175ff3">8c3576b</a>)</li>
<li>distinguish an unwritable userDataDir from a running browser (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/15405">#15405</a>)
(<a
href="https://github.com/puppeteer/puppeteer/commit/b464f6d6ea6e119cac48fed961d706325d50d8a9">b464f6d</a>)</li>
<li>do not miss the first screencast frame while startScreencast is in
flight (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/15389">#15389</a>)
(<a
href="https://github.com/puppeteer/puppeteer/commit/1969426492e7201e9ff78c49c918cdd1cbbeef2a">1969426</a>)</li>
<li>roll to Chrome 152.0.7977.64 (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/15395">#15395</a>)
(<a
href="https://github.com/puppeteer/puppeteer/commit/974e53667e81363e36f634222eb300a054c1fb6c">974e536</a>)</li>
<li>roll to Chrome 152.0.7977.75 (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/15409">#15409</a>)
(<a
href="https://github.com/puppeteer/puppeteer/commit/89f3f187827fed44fe33bf2ab80f01d1fce20f40">89f3f18</a>)</li>
<li>roll to Firefox 154.0.1 (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/15397">#15397</a>)
(<a
href="https://github.com/puppeteer/puppeteer/commit/8ac76fdbdee170902a2ac4e831c9c82cafe17b65">8ac76fd</a>)</li>
</ul>
<h3>Dependencies</h3>
<ul>
<li>The following workspace dependencies were updated
<ul>
<li>dependencies
<ul>
<li><code>@​puppeteer/browsers</code> bumped from 3.2.1 to 3.2.2</li>
</ul>
</li>
</ul>
</li>
</ul>
<h2>puppeteer: v25.10.0</h2>
<h2><a
href="https://github.com/puppeteer/puppeteer/compare/puppeteer-v25.9.0...puppeteer-v25.10.0">25.10.0</a>
(2026-09-03)</h2>
<h3>♻️ Chores</h3>
<ul>
<li><strong>puppeteer:</strong> Synchronize puppeteer versions</li>
</ul>
<h3>Dependencies</h3>
<ul>
<li>The following workspace dependencies were updated
<ul>
<li>dependencies
<ul>
<li><code>@​puppeteer/browsers</code> bumped from 3.2.1 to 3.2.2</li>
<li>puppeteer-core bumped from 25.9.0 to 25.10.0</li>
</ul>
</li>
</ul>
</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/puppeteer/puppeteer/commit/88b517ab3beb4a237b541cd18ada98ba43de71a7"><code>88b517a</code></a>
chore: release main (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/15396">#15396</a>)</li>
<li><a
href="https://github.com/puppeteer/puppeteer/commit/a84b0325de0e860c9c4b60de7bff7c0ae100accd"><code>a84b032</code></a>
fix: revert launch browsers in detached mode on Windows to fix flakiness
(<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/15">#15</a>...</li>
<li><a
href="https://github.com/puppeteer/puppeteer/commit/7a17a9a843c36f7aab98ea1de840f2f78c761d19"><code>7a17a9a</code></a>
chore(deps): bump the all group across 1 directory with 2 updates (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/15368">#15368</a>)</li>
<li><a
href="https://github.com/puppeteer/puppeteer/commit/4ff495d90c1629f46849e50f39c7fc827ea89630"><code>4ff495d</code></a>
test: explain the CDP-only mouse expectations (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/15380">#15380</a>)</li>
<li><a
href="https://github.com/puppeteer/puppeteer/commit/c3ca31394ae4f133620d6587a7efedbe5e945ff4"><code>c3ca313</code></a>
test: update webmcp-types dep and simplify execute handler signatures
(<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/15414">#15414</a>)</li>
<li><a
href="https://github.com/puppeteer/puppeteer/commit/8ca9ab4e7b528e632145c85514feb7af61033425"><code>8ca9ab4</code></a>
chore(deps-dev): bump browserslist from 4.28.4 to 4.28.8 (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/15413">#15413</a>)</li>
<li><a
href="https://github.com/puppeteer/puppeteer/commit/3744bad72207a29c11bc1c6e202d916e3f629dc3"><code>3744bad</code></a>
chore(deps-dev): bump <code>@​humanfs/node</code> from 0.16.7 to 0.16.8
(<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/15412">#15412</a>)</li>
<li><a
href="https://github.com/puppeteer/puppeteer/commit/051c195ab2beb77856ce501e80e61885f9fa6a4f"><code>051c195</code></a>
chore(deps): bump fast-uri from 3.1.5 to 3.1.7 in /website (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/15411">#15411</a>)</li>
<li><a
href="https://github.com/puppeteer/puppeteer/commit/89f3f187827fed44fe33bf2ab80f01d1fce20f40"><code>89f3f18</code></a>
fix: roll to Chrome 152.0.7977.75 (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/15409">#15409</a>)</li>
<li><a
href="https://github.com/puppeteer/puppeteer/commit/ed544f71fbfadf8748040008453ea1fdedfc5ec9"><code>ed544f7</code></a>
feat: roll to Firefox 155.0 (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/15408">#15408</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/puppeteer/puppeteer/compare/puppeteer-v25.9.0...puppeteer-v25.10.0">compare
view</a></li>
</ul>
</details>
<br />


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

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
allowing to disable DevTools source maps similar to what DevTools
settings allow in the UI.
dependabot Bot and others added 26 commits September 8, 2026 16:32
…ith 5 updates (ChromeDevTools#2670)

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

| Package | From | To |
| --- | --- | --- |
|
[@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node)
| `26.2.0` | `26.4.0` |
|
[@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin)
| `8.67.0` | `8.69.0` |
|
[@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser)
| `8.67.0` | `8.69.0` |
| [rollup](https://github.com/rollup/rollup) | `4.62.5` | `4.63.1` |
|
[typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint)
| `8.67.0` | `8.69.0` |


Updates `@types/node` from 26.2.0 to 26.4.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.67.0 to 8.69.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.69.0</h2>
<h2>8.69.0 (2026-08-31)</h2>
<h3>🚀 Features</h3>
<ul>
<li><strong>eslint-plugin:</strong> [no-misused-promises] add flagUnions
option for checkConditionals (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12603">#12603</a>)</li>
</ul>
<h3>🩹 Fixes</h3>
<ul>
<li><strong>eslint-plugin:</strong> [no-mixed-enums] use scope analysis
instead of type checking for merged namespaces (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12731">#12731</a>)</li>
<li><strong>eslint-plugin:</strong> [unified-signatures] compare type
parameters by constraint instead of name (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12741">#12741</a>)</li>
<li><strong>eslint-plugin:</strong> [no-meaningless-void-operator]
report void on non-call expressions (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12727">#12727</a>)</li>
<li><strong>website:</strong> respect allowJs playground config (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12744">#12744</a>)</li>
</ul>
<h3>❤️ Thank You</h3>
<ul>
<li>Abdu Alim Arlikhozhaev <a
href="https://github.com/Arlikhozhaev"><code>@​Arlikhozhaev</code></a></li>
<li>Evyatar Daud <a
href="https://github.com/StyleShit"><code>@​StyleShit</code></a></li>
<li>Josh Goldberg ✨</li>
<li>wonbeanie <a
href="https://github.com/wonbeanie"><code>@​wonbeanie</code></a></li>
<li>Younsang Na <a
href="https://github.com/nayounsang"><code>@​nayounsang</code></a></li>
</ul>
<p>See <a
href="https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.69.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.68.0</h2>
<h2>8.68.0 (2026-08-24)</h2>
<h3>🚀 Features</h3>
<ul>
<li><strong>eslint-plugin:</strong> [strict-void-return] add fix
suggestions (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12086">#12086</a>)</li>
<li><strong>utils:</strong> support ESLint rule meta.languages (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12663">#12663</a>)</li>
</ul>
<h3>🩹 Fixes</h3>
<ul>
<li><strong>eslint-plugin:</strong> [unified-signatures] deduplicate
types in report (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12656">#12656</a>)</li>
<li><strong>eslint-plugin:</strong> [return-await] prevent autofix from
breaking code in arrow-functions (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12707">#12707</a>)</li>
<li><strong>eslint-plugin:</strong> [unified-signatures] report
identical signatures (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12678">#12678</a>)</li>
<li><strong>eslint-plugin:</strong> [no-unnecessary-type-assertion]
prevent stack overflow in recursive types (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12711">#12711</a>)</li>
<li><strong>eslint-plugin:</strong> [no-floating-promises] setting
<code>ignoreVoid: false</code> results in false negative in
ArrowFunctionExpression (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12646">#12646</a>)</li>
<li><strong>eslint-plugin:</strong> [no-empty-object-type] ignore
suggestions that result in invalid interfaces and export defaults (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12739">#12739</a>)</li>
<li><strong>website:</strong> playground crashes on <code>extends</code>
configs (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12608">#12608</a>)</li>
<li><strong>website:</strong> account for thanks.dev and out-of-band
donors in sponsors list (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12735">#12735</a>)</li>
</ul>
<h3>❤️ Thank You</h3>
<ul>
<li>Evyatar Daud <a
href="https://github.com/StyleShit"><code>@​StyleShit</code></a></li>
<li>Hugo <a
href="https://github.com/hugop95"><code>@​hugop95</code></a></li>
<li>Josh Goldberg ✨</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</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.69.0 (2026-08-31)</h2>
<h3>🚀 Features</h3>
<ul>
<li><strong>eslint-plugin:</strong> [no-misused-promises] add flagUnions
option for checkConditionals (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12603">#12603</a>)</li>
</ul>
<h3>🩹 Fixes</h3>
<ul>
<li><strong>eslint-plugin:</strong> [no-meaningless-void-operator]
report void on non-call expressions (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12727">#12727</a>)</li>
<li><strong>eslint-plugin:</strong> [unified-signatures] compare type
parameters by constraint instead of name (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12741">#12741</a>)</li>
<li><strong>eslint-plugin:</strong> [no-mixed-enums] use scope analysis
instead of type checking for merged namespaces (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12731">#12731</a>)</li>
</ul>
<h3>❤️ Thank You</h3>
<ul>
<li>Abdu Alim Arlikhozhaev <a
href="https://github.com/Arlikhozhaev"><code>@​Arlikhozhaev</code></a></li>
<li>Evyatar Daud <a
href="https://github.com/StyleShit"><code>@​StyleShit</code></a></li>
<li>Josh Goldberg ✨</li>
<li>wonbeanie <a
href="https://github.com/wonbeanie"><code>@​wonbeanie</code></a></li>
</ul>
<p>See <a
href="https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.69.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.68.0 (2026-08-24)</h2>
<h3>🚀 Features</h3>
<ul>
<li><strong>eslint-plugin:</strong> [strict-void-return] add fix
suggestions (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12086">#12086</a>)</li>
</ul>
<h3>🩹 Fixes</h3>
<ul>
<li><strong>eslint-plugin:</strong> [no-empty-object-type] ignore
suggestions that result in invalid interfaces and export defaults (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12739">#12739</a>)</li>
<li><strong>eslint-plugin:</strong> [no-floating-promises] setting
<code>ignoreVoid: false</code> results in false negative in
ArrowFunctionExpression (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12646">#12646</a>)</li>
<li><strong>eslint-plugin:</strong> [no-unnecessary-type-assertion]
prevent stack overflow in recursive types (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12711">#12711</a>)</li>
<li><strong>eslint-plugin:</strong> [unified-signatures] report
identical signatures (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12678">#12678</a>)</li>
<li><strong>eslint-plugin:</strong> [return-await] prevent autofix from
breaking code in arrow-functions (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12707">#12707</a>)</li>
<li><strong>eslint-plugin:</strong> [unified-signatures] deduplicate
types in report (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12656">#12656</a>)</li>
</ul>
<h3>❤️ Thank You</h3>
<ul>
<li>Evyatar Daud <a
href="https://github.com/StyleShit"><code>@​StyleShit</code></a></li>
<li>Hugo <a
href="https://github.com/hugop95"><code>@​hugop95</code></a></li>
<li>Niki <a
href="https://github.com/phaux"><code>@​phaux</code></a></li>
<li>Younsang Na <a
href="https://github.com/nayounsang"><code>@​nayounsang</code></a></li>
</ul>
<p>See <a
href="https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.68.0">GitHub
Releases</a> for more information.</p>
<p>You can read about our <a
href="https://typescript-eslint.io/users/versioning">versioning
strategy</a> and <a
href="https://typescript-eslint.io/users/releases">releases</a> on our
website.</p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/typescript-eslint/typescript-eslint/commit/9a6e546823e5d8f2dc015df2aa66c0230615e209"><code>9a6e546</code></a>
chore(release): publish 8.69.0</li>
<li><a
href="https://github.com/typescript-eslint/typescript-eslint/commit/513638effe9e7b78566cc153d4d809a1435153f3"><code>513638e</code></a>
fix(eslint-plugin): [no-meaningless-void-operator] report void on
non-call ex...</li>
<li><a
href="https://github.com/typescript-eslint/typescript-eslint/commit/1dba4c50f0599cc212e9d1eca9ec0f21a818f0b5"><code>1dba4c5</code></a>
chore(eslint-plugin): fix
<code>eslint-plugin/require-test-error-positions</code> report...</li>
<li><a
href="https://github.com/typescript-eslint/typescript-eslint/commit/a2fccae39c7cb1e516a29b1c746b7767bffa03e2"><code>a2fccae</code></a>
fix(eslint-plugin): [unified-signatures] compare type parameters by
constrain...</li>
<li><a
href="https://github.com/typescript-eslint/typescript-eslint/commit/a23069df170bc4f9c35c8aaf3a8634635591844a"><code>a23069d</code></a>
test(eslint-plugin): [no-mixed-enums] add error positions (<a
href="https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin/issues/12779">#12779</a>)</li>
<li><a
href="https://github.com/typescript-eslint/typescript-eslint/commit/3f0dffd45a91d0292bf1acc1159496d1b232d319"><code>3f0dffd</code></a>
fix(eslint-plugin): [no-mixed-enums] use scope analysis instead of type
check...</li>
<li><a
href="https://github.com/typescript-eslint/typescript-eslint/commit/e18fea861d50ffc8b7b7149ae3454d114f6a8200"><code>e18fea8</code></a>
test(eslint-plugin): [no-floating-promises] reactivate skipped
<code>node:test</code> sp...</li>
<li><a
href="https://github.com/typescript-eslint/typescript-eslint/commit/324515c53c2f541cff2a8af9b2a929decba0af91"><code>324515c</code></a>
test(eslint-plugin): [no-unnecessary-condition] add tests for optional
chains...</li>
<li><a
href="https://github.com/typescript-eslint/typescript-eslint/commit/2a387f1298e9c10b83936044a017f84b8ee5b7f3"><code>2a387f1</code></a>
feat(eslint-plugin): [no-misused-promises] add flagUnions option for
checkCon...</li>
<li><a
href="https://github.com/typescript-eslint/typescript-eslint/commit/8f4e00a4e8f3bdf93a5e5e8bc568ba1c15a4f896"><code>8f4e00a</code></a>
chore(release): publish 8.68.0</li>
<li>Additional commits viewable in <a
href="https://github.com/typescript-eslint/typescript-eslint/commits/v8.69.0/packages/eslint-plugin">compare
view</a></li>
</ul>
</details>
<br />

Updates `@typescript-eslint/parser` from 8.67.0 to 8.69.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.69.0</h2>
<h2>8.69.0 (2026-08-31)</h2>
<h3>🚀 Features</h3>
<ul>
<li><strong>eslint-plugin:</strong> [no-misused-promises] add flagUnions
option for checkConditionals (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12603">#12603</a>)</li>
</ul>
<h3>🩹 Fixes</h3>
<ul>
<li><strong>eslint-plugin:</strong> [no-mixed-enums] use scope analysis
instead of type checking for merged namespaces (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12731">#12731</a>)</li>
<li><strong>eslint-plugin:</strong> [unified-signatures] compare type
parameters by constraint instead of name (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12741">#12741</a>)</li>
<li><strong>eslint-plugin:</strong> [no-meaningless-void-operator]
report void on non-call expressions (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12727">#12727</a>)</li>
<li><strong>website:</strong> respect allowJs playground config (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12744">#12744</a>)</li>
</ul>
<h3>❤️ Thank You</h3>
<ul>
<li>Abdu Alim Arlikhozhaev <a
href="https://github.com/Arlikhozhaev"><code>@​Arlikhozhaev</code></a></li>
<li>Evyatar Daud <a
href="https://github.com/StyleShit"><code>@​StyleShit</code></a></li>
<li>Josh Goldberg ✨</li>
<li>wonbeanie <a
href="https://github.com/wonbeanie"><code>@​wonbeanie</code></a></li>
<li>Younsang Na <a
href="https://github.com/nayounsang"><code>@​nayounsang</code></a></li>
</ul>
<p>See <a
href="https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.69.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.68.0</h2>
<h2>8.68.0 (2026-08-24)</h2>
<h3>🚀 Features</h3>
<ul>
<li><strong>eslint-plugin:</strong> [strict-void-return] add fix
suggestions (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12086">#12086</a>)</li>
<li><strong>utils:</strong> support ESLint rule meta.languages (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12663">#12663</a>)</li>
</ul>
<h3>🩹 Fixes</h3>
<ul>
<li><strong>eslint-plugin:</strong> [unified-signatures] deduplicate
types in report (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12656">#12656</a>)</li>
<li><strong>eslint-plugin:</strong> [return-await] prevent autofix from
breaking code in arrow-functions (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12707">#12707</a>)</li>
<li><strong>eslint-plugin:</strong> [unified-signatures] report
identical signatures (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12678">#12678</a>)</li>
<li><strong>eslint-plugin:</strong> [no-unnecessary-type-assertion]
prevent stack overflow in recursive types (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12711">#12711</a>)</li>
<li><strong>eslint-plugin:</strong> [no-floating-promises] setting
<code>ignoreVoid: false</code> results in false negative in
ArrowFunctionExpression (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12646">#12646</a>)</li>
<li><strong>eslint-plugin:</strong> [no-empty-object-type] ignore
suggestions that result in invalid interfaces and export defaults (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12739">#12739</a>)</li>
<li><strong>website:</strong> playground crashes on <code>extends</code>
configs (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12608">#12608</a>)</li>
<li><strong>website:</strong> account for thanks.dev and out-of-band
donors in sponsors list (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12735">#12735</a>)</li>
</ul>
<h3>❤️ Thank You</h3>
<ul>
<li>Evyatar Daud <a
href="https://github.com/StyleShit"><code>@​StyleShit</code></a></li>
<li>Hugo <a
href="https://github.com/hugop95"><code>@​hugop95</code></a></li>
<li>Josh Goldberg ✨</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</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.69.0 (2026-08-31)</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.69.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.68.0 (2026-08-24)</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.68.0">GitHub
Releases</a> for more information.</p>
<p>You can read about our <a
href="https://typescript-eslint.io/users/versioning">versioning
strategy</a> and <a
href="https://typescript-eslint.io/users/releases">releases</a> on our
website.</p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/typescript-eslint/typescript-eslint/commit/9a6e546823e5d8f2dc015df2aa66c0230615e209"><code>9a6e546</code></a>
chore(release): publish 8.69.0</li>
<li><a
href="https://github.com/typescript-eslint/typescript-eslint/commit/8f4e00a4e8f3bdf93a5e5e8bc568ba1c15a4f896"><code>8f4e00a</code></a>
chore(release): publish 8.68.0</li>
<li><a
href="https://github.com/typescript-eslint/typescript-eslint/commit/55f6d5d4ca39d2fab93db97ced497b956017878d"><code>55f6d5d</code></a>
chore: enable source maps (<a
href="https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser/issues/12677">#12677</a>)</li>
<li>See full diff in <a
href="https://github.com/typescript-eslint/typescript-eslint/commits/v8.69.0/packages/parser">compare
view</a></li>
</ul>
</details>
<br />

Updates `rollup` from 4.62.5 to 4.63.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.63.1</h2>
<h2>4.63.1</h2>
<p><em>2026-08-28</em></p>
<h3>Bug Fixes</h3>
<ul>
<li>Revert function return value tracking until the most recent issue is
understood (<a
href="https://redirect.github.com/rollup/rollup/issues/6490">#6490</a>)</li>
</ul>
<h3>Pull Requests</h3>
<ul>
<li><a
href="https://redirect.github.com/rollup/rollup/pull/6489">#6489</a>:
fix(deps): update minor/patch updates (<a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot])</li>
<li><a
href="https://redirect.github.com/rollup/rollup/pull/6490">#6490</a>:
Revert improve function return value tracking (<a
href="https://github.com/lukastaegert"><code>@​lukastaegert</code></a>)</li>
</ul>
<h2>v4.63.0</h2>
<h2>4.63.0</h2>
<p><em>2026-08-25</em></p>
<h3>Features</h3>
<ul>
<li>Allow to analyze function return values in many more cases (<a
href="https://redirect.github.com/rollup/rollup/issues/6065">#6065</a>)</li>
</ul>
<h3>Pull Requests</h3>
<ul>
<li><a
href="https://redirect.github.com/rollup/rollup/pull/6065">#6065</a>:
feat: improve function return value tracking (<a
href="https://github.com/cyyynthia"><code>@​cyyynthia</code></a>, <a
href="https://github.com/lukastaegert"><code>@​lukastaegert</code></a>)</li>
<li><a
href="https://redirect.github.com/rollup/rollup/pull/6482">#6482</a>:
Remove unused rendered module sources map (<a
href="https://github.com/yoominho91"><code>@​yoominho91</code></a>, <a
href="https://github.com/irontaek"><code>@​irontaek</code></a>, <a
href="https://github.com/lukastaegert"><code>@​lukastaegert</code></a>)</li>
<li><a
href="https://redirect.github.com/rollup/rollup/pull/6483">#6483</a>:
chore(deps): update minor/patch updates (<a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot])</li>
<li><a
href="https://redirect.github.com/rollup/rollup/pull/6484">#6484</a>:
fix(deps): update swc monorepo (major) (<a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot], <a
href="https://github.com/lukastaegert"><code>@​lukastaegert</code></a>)</li>
<li><a
href="https://redirect.github.com/rollup/rollup/pull/6485">#6485</a>:
chore(deps): lock file maintenance (<a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot], <a
href="https://github.com/lukastaegert"><code>@​lukastaegert</code></a>)</li>
<li><a
href="https://redirect.github.com/rollup/rollup/pull/6486">#6486</a>:
chore(deps): lock file maintenance (<a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot])</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.63.1</h2>
<p><em>2026-08-28</em></p>
<h3>Bug Fixes</h3>
<ul>
<li>Revert function return value tracking until the most recent issue is
understood (<a
href="https://redirect.github.com/rollup/rollup/issues/6490">#6490</a>)</li>
</ul>
<h3>Pull Requests</h3>
<ul>
<li><a
href="https://redirect.github.com/rollup/rollup/pull/6489">#6489</a>:
fix(deps): update minor/patch updates (<a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot])</li>
<li><a
href="https://redirect.github.com/rollup/rollup/pull/6490">#6490</a>:
Revert improve function return value tracking (<a
href="https://github.com/lukastaegert"><code>@​lukastaegert</code></a>)</li>
</ul>
<h2>4.63.0</h2>
<p><em>2026-08-25</em></p>
<h3>Features</h3>
<ul>
<li>Allow to analyze function return values in many more cases (<a
href="https://redirect.github.com/rollup/rollup/issues/6065">#6065</a>)</li>
</ul>
<h3>Pull Requests</h3>
<ul>
<li><a
href="https://redirect.github.com/rollup/rollup/pull/6065">#6065</a>:
feat: improve function return value tracking (<a
href="https://github.com/cyyynthia"><code>@​cyyynthia</code></a>, <a
href="https://github.com/lukastaegert"><code>@​lukastaegert</code></a>)</li>
<li><a
href="https://redirect.github.com/rollup/rollup/pull/6482">#6482</a>:
Remove unused rendered module sources map (<a
href="https://github.com/yoominho91"><code>@​yoominho91</code></a>, <a
href="https://github.com/irontaek"><code>@​irontaek</code></a>, <a
href="https://github.com/lukastaegert"><code>@​lukastaegert</code></a>)</li>
<li><a
href="https://redirect.github.com/rollup/rollup/pull/6483">#6483</a>:
chore(deps): update minor/patch updates (<a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot])</li>
<li><a
href="https://redirect.github.com/rollup/rollup/pull/6484">#6484</a>:
fix(deps): update swc monorepo (major) (<a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot], <a
href="https://github.com/lukastaegert"><code>@​lukastaegert</code></a>)</li>
<li><a
href="https://redirect.github.com/rollup/rollup/pull/6485">#6485</a>:
chore(deps): lock file maintenance (<a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot], <a
href="https://github.com/lukastaegert"><code>@​lukastaegert</code></a>)</li>
<li><a
href="https://redirect.github.com/rollup/rollup/pull/6486">#6486</a>:
chore(deps): lock file maintenance (<a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot])</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/rollup/rollup/commit/78bfef0cb94479566f81012fafa372c84b90bd34"><code>78bfef0</code></a>
4.63.1</li>
<li><a
href="https://github.com/rollup/rollup/commit/be6b8352974d521a0574205940b9d1bda66acd9c"><code>be6b835</code></a>
Revert improve function return value tracking (<a
href="https://redirect.github.com/rollup/rollup/issues/6490">#6490</a>)</li>
<li><a
href="https://github.com/rollup/rollup/commit/db15922c05713465fa11e5eb976e88ffdb0d3376"><code>db15922</code></a>
fix(deps): update minor/patch updates (<a
href="https://redirect.github.com/rollup/rollup/issues/6489">#6489</a>)</li>
<li><a
href="https://github.com/rollup/rollup/commit/34b8b924c815ec9413d7821f6fd54cc615584a51"><code>34b8b92</code></a>
4.63.0</li>
<li><a
href="https://github.com/rollup/rollup/commit/456b237dbfcc35c48d76c6be2060f881f440a532"><code>456b237</code></a>
feat: improve function return value tracking (<a
href="https://redirect.github.com/rollup/rollup/issues/6065">#6065</a>)</li>
<li><a
href="https://github.com/rollup/rollup/commit/21528bb381e0c5a5853f91e04d597fa2f45568fa"><code>21528bb</code></a>
fix(deps): update swc monorepo (major) (<a
href="https://redirect.github.com/rollup/rollup/issues/6484">#6484</a>)</li>
<li><a
href="https://github.com/rollup/rollup/commit/250b175b33b6a3ef96b54d509137f23db669ee9f"><code>250b175</code></a>
chore(deps): lock file maintenance (<a
href="https://redirect.github.com/rollup/rollup/issues/6486">#6486</a>)</li>
<li><a
href="https://github.com/rollup/rollup/commit/89bda2cd8e9def2ea037e7dbffaf392ce9f1ddcb"><code>89bda2c</code></a>
chore(deps): update minor/patch updates (<a
href="https://redirect.github.com/rollup/rollup/issues/6483">#6483</a>)</li>
<li><a
href="https://github.com/rollup/rollup/commit/f0b0413470667e1c4efe6e07ef9aecc144a2a950"><code>f0b0413</code></a>
chore(deps): lock file maintenance (<a
href="https://redirect.github.com/rollup/rollup/issues/6485">#6485</a>)</li>
<li><a
href="https://github.com/rollup/rollup/commit/a362d28d4cc01513c927678d068182f569954eba"><code>a362d28</code></a>
Remove unused rendered module sources map (<a
href="https://redirect.github.com/rollup/rollup/issues/6482">#6482</a>)</li>
<li>See full diff in <a
href="https://github.com/rollup/rollup/compare/v4.62.5...v4.63.1">compare
view</a></li>
</ul>
</details>
<br />

Updates `typescript-eslint` from 8.67.0 to 8.69.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.69.0</h2>
<h2>8.69.0 (2026-08-31)</h2>
<h3>🚀 Features</h3>
<ul>
<li><strong>eslint-plugin:</strong> [no-misused-promises] add flagUnions
option for checkConditionals (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12603">#12603</a>)</li>
</ul>
<h3>🩹 Fixes</h3>
<ul>
<li><strong>eslint-plugin:</strong> [no-mixed-enums] use scope analysis
instead of type checking for merged namespaces (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12731">#12731</a>)</li>
<li><strong>eslint-plugin:</strong> [unified-signatures] compare type
parameters by constraint instead of name (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12741">#12741</a>)</li>
<li><strong>eslint-plugin:</strong> [no-meaningless-void-operator]
report void on non-call expressions (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12727">#12727</a>)</li>
<li><strong>website:</strong> respect allowJs playground config (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12744">#12744</a>)</li>
</ul>
<h3>❤️ Thank You</h3>
<ul>
<li>Abdu Alim Arlikhozhaev <a
href="https://github.com/Arlikhozhaev"><code>@​Arlikhozhaev</code></a></li>
<li>Evyatar Daud <a
href="https://github.com/StyleShit"><code>@​StyleShit</code></a></li>
<li>Josh Goldberg ✨</li>
<li>wonbeanie <a
href="https://github.com/wonbeanie"><code>@​wonbeanie</code></a></li>
<li>Younsang Na <a
href="https://github.com/nayounsang"><code>@​nayounsang</code></a></li>
</ul>
<p>See <a
href="https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.69.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.68.0</h2>
<h2>8.68.0 (2026-08-24)</h2>
<h3>🚀 Features</h3>
<ul>
<li><strong>eslint-plugin:</strong> [strict-void-return] add fix
suggestions (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12086">#12086</a>)</li>
<li><strong>utils:</strong> support ESLint rule meta.languages (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12663">#12663</a>)</li>
</ul>
<h3>🩹 Fixes</h3>
<ul>
<li><strong>eslint-plugin:</strong> [unified-signatures] deduplicate
types in report (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12656">#12656</a>)</li>
<li><strong>eslint-plugin:</strong> [return-await] prevent autofix from
breaking code in arrow-functions (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12707">#12707</a>)</li>
<li><strong>eslint-plugin:</strong> [unified-signatures] report
identical signatures (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12678">#12678</a>)</li>
<li><strong>eslint-plugin:</strong> [no-unnecessary-type-assertion]
prevent stack overflow in recursive types (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12711">#12711</a>)</li>
<li><strong>eslint-plugin:</strong> [no-floating-promises] setting
<code>ignoreVoid: false</code> results in false negative in
ArrowFunctionExpression (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12646">#12646</a>)</li>
<li><strong>eslint-plugin:</strong> [no-empty-object-type] ignore
suggestions that result in invalid interfaces and export defaults (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12739">#12739</a>)</li>
<li><strong>website:</strong> playground crashes on <code>extends</code>
configs (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12608">#12608</a>)</li>
<li><strong>website:</strong> account for thanks.dev and out-of-band
donors in sponsors list (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12735">#12735</a>)</li>
</ul>
<h3>❤️ Thank You</h3>
<ul>
<li>Evyatar Daud <a
href="https://github.com/StyleShit"><code>@​StyleShit</code></a></li>
<li>Hugo <a
href="https://github.com/hugop95"><code>@​hugop95</code></a></li>
<li>Josh Goldberg ✨</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</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.69.0 (2026-08-31)</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.69.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.68.0 (2026-08-24)</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.68.0">GitHub
Releases</a> for more information.</p>
<p>You can read about our <a
href="https://typescript-eslint.io/users/versioning">versioning
strategy</a> and <a
href="https://typescript-eslint.io/users/releases">releases</a> on our
website.</p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/typescript-eslint/typescript-eslint/commit/9a6e546823e5d8f2dc015df2aa66c0230615e209"><code>9a6e546</code></a>
chore(release): publish 8.69.0</li>
<li><a
href="https://github.com/typescript-eslint/typescript-eslint/commit/8f4e00a4e8f3bdf93a5e5e8bc568ba1c15a4f896"><code>8f4e00a</code></a>
chore(release): publish 8.68.0</li>
<li><a
href="https://github.com/typescript-eslint/typescript-eslint/commit/55f6d5d4ca39d2fab93db97ced497b956017878d"><code>55f6d5d</code></a>
chore: enable source maps (<a
href="https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint/issues/12677">#12677</a>)</li>
<li>See full diff in <a
href="https://github.com/typescript-eslint/typescript-eslint/commits/v8.69.0/packages/typescript-eslint">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: Natasha Gorshunova <47688881+nattallius@users.noreply.github.com>
…5562d` (ChromeDevTools#2700)

Bumps
[third_party/devtools-frontend](https://github.com/ChromeDevTools/devtools-frontend)
from `d1a4fbf` to `2a5562d`.
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/ChromeDevTools/devtools-frontend/commit/2a5562dea4bfa759c15700d2311fc623c1b684d1"><code>2a5562d</code></a>
Fix flaky test in front_end/panels/application/WebMCPView.test.ts</li>
<li><a
href="https://github.com/ChromeDevTools/devtools-frontend/commit/b44678065f0b07b07b35f8d111e3272500c6318c"><code>b446780</code></a>
[position-area] Allow configuring axis mode and self bit in the
editor</li>
<li><a
href="https://github.com/ChromeDevTools/devtools-frontend/commit/e751f983c9a47b34c8ea59a68e16cb053bcc259b"><code>e751f98</code></a>
Timeline: Clean up track appender tests and assertions</li>
<li><a
href="https://github.com/ChromeDevTools/devtools-frontend/commit/49fe11a1e9191ca6a3ee854af69a57f91f3b76e7"><code>49fe11a</code></a>
Testing: Migrate NetworkDataGridNode unit tests to
NetworkRequestHelpers</li>
<li><a
href="https://github.com/ChromeDevTools/devtools-frontend/commit/27d82ddc7c925a2ed7a0b5a18a1574c98efff2b6"><code>27d82dd</code></a>
Testing: Migrate Network headers and item views to
NetworkRequestHelpers</li>
<li><a
href="https://github.com/ChromeDevTools/devtools-frontend/commit/5d3299c13092010a391fa50fae0f8589a501ace5"><code>5d3299c</code></a>
Timeline: Clean up and optimize timeline panel test suites</li>
<li><a
href="https://github.com/ChromeDevTools/devtools-frontend/commit/c1bbd5816b1335e4fd6165b6740971b7fd6a0124"><code>c1bbd58</code></a>
Parse initial_url from task.textproto in AI eval helpers</li>
<li><a
href="https://github.com/ChromeDevTools/devtools-frontend/commit/d13fdbd416b5d3ab3d185910e1550461fdef0dae"><code>d13fdbd</code></a>
Add wrap-reverse to the flexbox editor's flex-wrap options</li>
<li><a
href="https://github.com/ChromeDevTools/devtools-frontend/commit/93d8a052f677cb46e6e52446e19368d725367408"><code>93d8a05</code></a>
Add helpers to launch eval base apps</li>
<li><a
href="https://github.com/ChromeDevTools/devtools-frontend/commit/d75f2201f3c10c495a7ecd9015567c8d7383bbb9"><code>d75f220</code></a>
Add Phase 1 run_started initialization and commit marker</li>
<li>Additional commits viewable in <a
href="https://github.com/ChromeDevTools/devtools-frontend/compare/d1a4fbfd673fecf19981c27b3a461f9881eebe8e...2a5562dea4bfa759c15700d2311fc623c1b684d1">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 this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
This is part 1 of stacked PRs for DevTools comments support.

Adds the hidden CLI flag `devtoolsComments` to feature-gate all new
DevTools comment tools.
…hromeDevTools#2693)

This is part 2 of stacked PRs for DevTools comments support.

Defines the `open_devtools`, `get_devtools_comments`,
`resolve_devtools_comment`, and `reveal_in_devtools` tools with complete
schemas, categories, and descriptions, throwing `Not implemented` until
implemented. Gated behind the hidden flag `devtoolsComments`.

### Stack
1. ChromeDevTools#2692 chore: add hidden devtoolsComments flag
2. **#this PR**: chore: add comments and open_devtools tools without
implementation
3. chore: implement bridge and DevTools comments tools
… tests to McpPage (ChromeDevTools#2698)

This PR migrates tests in `tests/tools/snapshot.test.ts` to mock-based
unit tests using the established Sinon mock infrastructure and relocates
the real-browser integration tests to `tests/McpPage.test.ts`.

### Summary
- References ChromeDevTools#2639 (item 1).
- Follow-up building on ChromeDevTools#2641, ChromeDevTools#2665, and ChromeDevTools#2683.
- Relocated the 6 real-browser `waitFor` integration tests to a
dedicated `waitForTextOnPage()` suite in `tests/McpPage.test.ts` to
directly cover the `mcpPage.waitForTextOnPage` method.
- Converted all tool handler tests in `tests/tools/snapshot.test.ts`
(`take_snapshot` and `wait_for`) to mock unit tests using
`createHandlerMocks()`, completely removing `withMcpContext` from the
file.
- Asserted exact method calls on `response` and `page` using
`sinon.assert.calledOnceWithExactly()`.
- Maintained `afterEach(() => sinon.restore())` cleanup per `AGENTS.md`.

### Verification
- `npm run test tests/tools/snapshot.test.ts` (4 passed, 0 failed, exit
code: 0)
- `npm run test tests/McpPage.test.ts` (39 passed, 0 failed, exit code:
0)
- `npm run check-format` (exit code: 0)
- `npm run docs:generate` (exit code: 0)
- `git status` (clean working tree, exit code: 0)
)

This is part 3 of stacked PRs for DevTools comments support.

Implements `DevToolsCommentBridge`, `McpPage` and `McpContext` bridge
integration, full handlers for comment tools.

### Stack
1. ChromeDevTools#2692 chore: add hidden devtoolsComments flag
2. ChromeDevTools#2693 chore: add comments and open_devtools tools without
implementation
3. **#this PR**: chore: implement bridge and DevTools comments tools
4. Skill PR
…2705)

The state file is now loaded into memory and stored within
ClearcutLogger. At each tool call it checks whether it's been more than
one day since the recorded value in the state file, and if so, log the
last tool active, and update the state file.

Regarding the state file's format, lastToolCall is not exactly the very
last one, but rather the last one that was **logged**. This is the same
with the existing lastActive timestamp (i.e. it's not the last timestamp
when the server is active, but rather the last timestamp when the active
status is logged). So here we keep the definitions consistent.

A caveat for future improvement: arguably the loadState() and
writeState() and everything in between should be a atomic unit (there
might be multiple mcp servers running), but I think it's probably good
enough for now. If we see weirdness we can make that happen.

I also added format guards to loadState() so we don't have to try and
catch everywhere else when de-serializing the string. We should actually
just deserialize in loadState() but let me do this in a follow-up CL.
Add the CssFormatter class which will be used to format CSS styles
(returned by getMatchedStyles) into structured JSON and text
representations

This PR adds support for inline styles, attributes, animations and
transitions

Co-authored-by: Samiya Caur <samiyac@chromium.org>
…6645d` (ChromeDevTools#2712)

Bumps
[third_party/devtools-frontend](https://github.com/ChromeDevTools/devtools-frontend)
from `2a5562d` to `9b6645d`.

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [hono](https://github.com/honojs/hono) from 4.13.1 to 4.13.7.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/honojs/hono/releases">hono's
releases</a>.</em></p>
<blockquote>
<h2>v4.13.7</h2>
<h2>Security fixes</h2>
<p>This release includes a fix for the following security issue:</p>
<h3><code>hono/jsx</code> renders plain strings unescaped in boundary
components, leading to XSS</h3>
<p>Affects: <code>Suspense</code>, <code>ErrorBoundary</code>, and
<code>Context.Provider</code> in <code>hono/jsx</code>, and
<code>renderToString()</code> / <code>renderToReadableStream()</code> in
<code>hono/jsx/dom/server</code>. Fixes missing HTML escaping for a
plain string placed directly as a child or <code>fallback</code> of
these components, or as the root value of the server rendering
functions, so untrusted strings could be emitted as markup.
GHSA-hxh3-vqpv-xpqv</p>
<hr />
<p>Users who render untrusted strings inside <code>Suspense</code>,
<code>ErrorBoundary</code>, or <code>Context.Provider</code>, or pass
them directly to <code>hono/jsx/dom/server</code>, are strongly
encouraged to upgrade to this version.</p>
<h2>v4.13.6</h2>
<h2>What's Changed</h2>
<ul>
<li>fix(client): keep a param value of &quot;index&quot; in $url() and
$path() in <a
href="https://redirect.github.com/honojs/hono/pull/5297">honojs/hono#5297</a></li>
<li>fix(client): normalize root WebSocket URLs in <a
href="https://redirect.github.com/honojs/hono/pull/5291">honojs/hono#5291</a></li>
<li>fix(types): allow symbol keys in Context<!-- raw HTML omitted -->
get and set fallbacks in <a
href="https://redirect.github.com/honojs/hono/pull/5300">honojs/hono#5300</a></li>
<li>chore: bump <code>editorconfig-checker</code> in <a
href="https://redirect.github.com/honojs/hono/pull/5336">honojs/hono#5336</a></li>
<li>refactor(on-handler): use forEach for consistent handler iteration
in <a
href="https://redirect.github.com/honojs/hono/pull/5326">honojs/hono#5326</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/honojs/hono/compare/v4.13.5...v4.13.6">https://github.com/honojs/hono/compare/v4.13.5...v4.13.6</a></p>
<h2>v4.13.5</h2>
<h2>Security fixes</h2>
<p>This release includes fixes for the following security issues:</p>
<h3>Query parser reads parameters after the URL fragment, causing
cache-key and proxy interpretation differentials</h3>
<p>Affects: Cache Middleware and applications behind a proxy, WAF, or
logging layer that inspects query strings. Fixes query parsing that did
not stop at the URL fragment, so a <code>?</code> after a <code>#</code>
was treated as the start of a query string and the application could
read parameters that the other component never saw.
GHSA-crvj-82cr-hjcx</p>
<h3>Incomplete fix for CVE-2026-39408: <code>toSSG()</code> still writes
files outside the output directory</h3>
<p>Affects: <code>toSSG()</code> for Static Site Generation. Fixes a
path normalization gap where consecutive parent-directory segments in
<code>ssgParams</code> values were not fully collapsed, bypassing the
containment check added in 4.12.12. GHSA-gqvv-2mrq-wpjv</p>
<h3>Unbounded dot-notation nesting in <code>parseBody()</code> can cause
memory exhaustion</h3>
<p>Affects: <code>parseBody()</code> when dot-notation parsing is
enabled. Fixes unbounded expansion of dot-separated field names, where a
small request body could allocate a disproportionately large object
graph and concurrent requests could exhaust the heap.
GHSA-g6gw-c38x-mqfc</p>
<hr />
<p>Users who use Cache Middleware, deploy behind a proxy or WAF that
inspects query strings, use Static Site Generation, or use
<code>parseBody({ dot: true })</code> are strongly encouraged to upgrade
to this version.</p>
<h2>v4.13.4</h2>
<h2>What's Changed</h2>
<ul>
<li>fix(request): handle params on unmatched requests in <a
href="https://redirect.github.com/honojs/hono/pull/5268">honojs/hono#5268</a></li>
<li>fix(jsx/dom): execute previous ref cleanup when ref prop changes on
re-render in <a
href="https://redirect.github.com/honojs/hono/pull/5264">honojs/hono#5264</a></li>
<li>fix(reg-exp-router): associate wildcard middleware with matching
routes in <a
href="https://redirect.github.com/honojs/hono/pull/5266">honojs/hono#5266</a></li>
<li>perf(router): share null object creation in <a
href="https://redirect.github.com/honojs/hono/pull/5267">honojs/hono#5267</a></li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/honojs/hono/commit/eebdf7be39abf0a872671835ccce0c4f03ea497a"><code>eebdf7b</code></a>
4.13.7</li>
<li><a
href="https://github.com/honojs/hono/commit/2b8ed402cdab6dfc5e829b480806dcd8db94161e"><code>2b8ed40</code></a>
Merge commit from fork</li>
<li><a
href="https://github.com/honojs/hono/commit/cac0c4d3fe29aca4e426031067cbbb3b9131e30c"><code>cac0c4d</code></a>
4.13.6</li>
<li><a
href="https://github.com/honojs/hono/commit/dac5d5794c6134711e469c5e69d09cd6274e1fc1"><code>dac5d57</code></a>
refactor(on-handler): use forEach for consistent handler iteration (<a
href="https://redirect.github.com/honojs/hono/issues/5326">#5326</a>)</li>
<li><a
href="https://github.com/honojs/hono/commit/ec648d683768ec5093315e5dc694c05594fec185"><code>ec648d6</code></a>
chore: bump <code>editorconfig-checker</code> (<a
href="https://redirect.github.com/honojs/hono/issues/5336">#5336</a>)</li>
<li><a
href="https://github.com/honojs/hono/commit/e2740d5a1bd0b4254e517e3af8b60789284bc7bd"><code>e2740d5</code></a>
fix(types): allow symbol keys in Context&lt;any&gt; get and set
fallbacks (<a
href="https://redirect.github.com/honojs/hono/issues/5300">#5300</a>)</li>
<li><a
href="https://github.com/honojs/hono/commit/499c35ebda35777fd35a7dd1906dd4f2687da61e"><code>499c35e</code></a>
fix(client): normalize root WebSocket URLs (<a
href="https://redirect.github.com/honojs/hono/issues/5291">#5291</a>)</li>
<li><a
href="https://github.com/honojs/hono/commit/50b8788cf54cb60112b7cd93642bc5094901475c"><code>50b8788</code></a>
fix(client): keep a param value of &quot;index&quot; in $url() and
$path() (<a
href="https://redirect.github.com/honojs/hono/issues/5297">#5297</a>)</li>
<li><a
href="https://github.com/honojs/hono/commit/06880c4a2b04de9dd74217f26dd831209b9c01f1"><code>06880c4</code></a>
4.13.5</li>
<li><a
href="https://github.com/honojs/hono/commit/531e9c5a3ae058d10de33f643055bd4009a87178"><code>531e9c5</code></a>
Merge commit from fork</li>
<li>Additional commits viewable in <a
href="https://github.com/honojs/hono/compare/v4.13.1...v4.13.7">compare
view</a></li>
</ul>
</details>
<br />


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

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the
[Security Alerts
page](https://github.com/ChromeDevTools/chrome-devtools-mcp/network/alerts).

</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…eDevTools#2676)

Fixes ChromeDevTools#2650

Alternative to ChromeDevTools#2655: that PR is currently failing all CI checks and its
diff reverts the `background` support added in ChromeDevTools#2658. This
implementation is based on the latest `main` and keeps that feature
intact.
…#2713)

Updates CssFormatter class to support matched CSS rules

It also adds formatting for ancestor rules, including `@media`,
`@supports`, `@layer`, `@container`, `@scope`, `@starting-style`, and
nested styles

Co-authored-by: Samiya Caur <samiyac@chromium.org>
…ls#2715)

Adds support for inherited CSS rules in CssFormatter, resolving parent
DOM element details and selectors for inherited declarations

Co-authored-by: Samiya Caur <samiyac@chromium.org>
…s#2716)

Adds support for direct and inherited pseudo-element rules in
CssFormatter.

It also implements inheritance filtering specific to pseudo-elements.

Co-authored-by: Samiya Caur <samiyac@chromium.org>
…er parse (ChromeDevTools#2720)

## Rationale

DevTools' `TraceEngine.TraceModel.Model` permanently retains parsed
traces in an internal recordings array (`#traces`). Calling
`engine.resetProcessor()` between runs only resets the underlying
processor and does not clear `#traces`.

Because `engine` was previously instantiated as a module-scoped
singleton, every performance trace recorded or parsed in a session
remained permanently held in heap memory for the lifetime of the
process.

## Changes

- In `src/processors/PerformanceTrace.ts`, instantiate
`DevTools.TraceEngine.TraceModel.Model.createWithAllHandlers()` per
invocation of `parseRawTraceBuffer()`.
- Remove the module-scoped `engine` singleton and the obsolete
`engine.resetProcessor()` call.
- Add a unit test in `tests/trace-processing/parse.test.ts` verifying
that consecutive trace parses construct isolated `Model` instances and
keep internal trace retention bounded at 1.
- Add a profiling regression scenario in
`scripts/profile/scenarios/performance_trace.ts` to guard against memory
retention across consecutive traces during `npm run test:memory`.
…ertyRule, FunctionRule (ChromeDevTools#2717)

Adds formatting support for modern CSS at-rules

Co-authored-by: Samiya Caur <samiyac@chromium.org>
Adds `@keyframes` animation rule support to CssFormatter, parsing
individual animation steps and their styled properties.

Co-authored-by: Samiya Caur <samiyac@chromium.org>
This PR migrates the mock-eligible test in
`tests/tools/extensions.test.ts` from a real-browser test
(`withMcpContext`) to a mock-based unit test using the established Sinon
mock infrastructure.

### Architectural Principle (Category 1 vs. Category 2 Split)
This PR continues issue ChromeDevTools#2639 (item 1), applying the core architectural
separation of concerns established across ChromeDevTools#2641, ChromeDevTools#2665, ChromeDevTools#2683, and
ChromeDevTools#2698:

- **Category 1 (Handler wiring & response verification -> Mock unit
tests)**:
Tests that only verify tool parameter parsing and response manipulation
should not launch real browsers. Launching Chrome just to assert that a
tool invoked `response.setListExtensions()` introduces unnecessary
startup latency and lifecycle flakiness without providing real
integration coverage. These are converted to deterministic unit tests
using `createHandlerMocks()`.

- **Category 2 (Genuine browser, extension, and protocol behavior ->
Retained real-browser tests)**:
Tests that depend on genuine browser mechanics must remain in
`withMcpContext`. Mocking them would require simulating Chrome's
internal extension loader, V8 script execution, or Puppeteer's target
lifecycle inside mocks, creating brittle and artificial tests that do
not validate real behavior.

### Summary of Changes
- **Converted to mocks (Category 1)**:
- `lists installed extensions`: Converted to `createHandlerMocks()`.
Asserts `response.setListExtensions` was invoked with
`sinon.assert.calledOnceWithExactly(response.setListExtensions)`.
- **Intentionally retained as real-browser tests (Category 2)**:
- `installs and uninstalls an extension and verifies it in
chrome://extensions`: Genuinely installs an unpacked extension into
Chrome and verifies real extension lifecycle and management.
- `reloads an extension`: Verifies Chrome's live extension reload
mechanics and registry reappearance.
- `triggers an extension action`: Validates asynchronous Puppeteer
`Target` creation when an extension action fires.
- `verifies that content script console logs are received`: Tests real
content script execution in a live navigated page and CDP console
capture.

### Verification
- `powershell -Command "Remove-Item -Recurse -Force build -ErrorAction
SilentlyContinue"; npm run build` (exit code: 0)
- `node scripts/test.js tests/tools/extensions.test.ts` (6 passed, 0
failed, exit code: 0)
- `npm run check-format` (exit code: 0)
- `npm run docs:generate` (exit code: 0)
- `git status` (clean working tree, exit code: 0)
Add `get_css_styles` tool which exposes matched styles and the CSS
cascade to empower accurate CSS debugging workflows.

It integrates `CssFormatter` into `McpPage` and `McpResponse`, adding
container query resolution and rule pagination support.

Co-authored-by: Samiya Caur <samiyac@chromium.org>
)

Fixes ChromeDevTools#2666.

This keeps the symlink-specific `resolveCanonicalPath` coverage on hosts
that can create symbolic links. When Windows rejects `fs.symlink` with
`EPERM` or `EACCES`, only that case is marked skipped; non-symlink cases
and unexpected errors still run or fail normally.

Tests:

- `npm test -- tests/utils/files.test.ts` (3 passed, 4 skipped on
Windows without symlink privileges)
- `npm test -- tests/McpContext.test.ts`
- `npm test`
- `npm run check-format`
- `git diff --check`

---------

Co-authored-by: Natasha Gorshunova <47688881+nattallius@users.noreply.github.com>
…evTools#2725)

Ref: ChromeDevTools#2639
Prior PRs: ChromeDevTools#2641, ChromeDevTools#2665, ChromeDevTools#2683, ChromeDevTools#2698, ChromeDevTools#2704

### Rationale

Unlike tools whose core logic is delegated to \McpPage\ or \McpContext\,
Lighthouse's audit execution and report generation live directly inside
\src/tools/lighthouse.ts\. As noted by @OrKoN, tests verifying genuine
Lighthouse audit behavior must stay as real-browser e2e tests because
there is no lower-level class to isolate them against.

Incidental side-effects owned by another class—specifically \ estores
emulation\, which tests \McpPage.restoreEmulation()\—are converted to
mock-based unit tests to verify handler wiring, while real behavior
coverage is relocated to \ ests/McpPage.test.ts\.

### Test Classification in \	ests/tools/lighthouse.test.ts\

- **\ uns Lighthouse audit by default (navigation, desktop)\** — **Stays
Real**: Tests genuine Lighthouse navigation audit, score summary, report
generation (JSON & HTML), and filesystem writes.
- **\ estores emulation\** — **Converted to Mocks**: Verifies handler
calls \page.restoreEmulation()\ in its \ inally\ block; real behavior is
relocated to \ ests/McpPage.test.ts\.
- **\ estores emulation even when audit fails\** — **New Unit Test**:
Verifies handler reliably calls \page.restoreEmulation()\ even if the
audit operation rejects.
- **\ uns Lighthouse in snapshot mode with mobile device\** — **Stays
Real**: Tests genuine Lighthouse snapshot audit execution and mobile
device emulation settings.
- **\ uns Lighthouse with custom output dir\** — **Stays Real**: Tests
genuine report generation and file persistence with a custom output
directory.

### Key Changes

- **\src/third_party/index.ts\**: Exported \lighthouseRunner =
{snapshot, navigation}\ (and kept individual exports for backward
compatibility).
- **\src/tools/lighthouse.ts\**: Imported \lighthouseRunner\ from
\../third_party/index.js\ and updated handler to invoke
\lighthouseRunner.navigation(...)\ / \lighthouseRunner.snapshot(...)\.
- **\ ests/tools/lighthouse.test.ts\**: Converted \ estores emulation\
to use \createHandlerMocks()\, stubbing \sinon.stub(lighthouseRunner,
'snapshot')\; added \�fterEach(() => sinon.restore())\.
- **\ ests/McpPage.test.ts\**: Added dedicated
\describe('restoreEmulation()', ...)\ suite testing that \
estoreEmulation()\ restores viewport, network conditions, and CPU
throttling settings on the underlying Puppeteer page.
- **\ ests/mocks.ts\**: Added \createMockRunnerResult()\ factory
returning a minimal, type-safe \RunnerResult\.
…7509a` (ChromeDevTools#2724)

Bumps
[third_party/devtools-frontend](https://github.com/ChromeDevTools/devtools-frontend)
from `9b6645d` to `717509a`.

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Natasha Gorshunova <47688881+nattallius@users.noreply.github.com>
Co-authored-by: Natallia Harshunova <nattallius@gmail.com>
## Summary

- Serialize `chrome-devtools start` arguments against the CLI defaults.
- Preserve explicit false values such as `--headless=false` as
`--no-headless`.
- Add an end-to-end regression test for the forwarded daemon arguments.

## Problem

The CLI defaults `headless` to true while the MCP server defaults it to
false. The start command parsed an explicit false value correctly, but
then serialized it against the server defaults. Because false matched
the server default, the argument was dropped. The daemon subsequently
reparsed the missing option in CLI mode and restored `headless=true`.

Using the CLI option definitions for serialization keeps the default
compact while forwarding explicit values that differ from the CLI
default.

## Testing

- `npm run test tests/e2e/chrome-devtools-start-stop.test.ts`
- `npm run format`
- `npm run test` (all relevant tests passed; the local full-suite run
only failed the unrelated large full-page screenshot case because Chrome
returned `Page is too large`)

Co-authored-by: Natasha Gorshunova <47688881+nattallius@users.noreply.github.com>
…9.0)

Merge upstream/main so the fork carries real upstream ancestry: 0 commits
behind, Brave adaptations ahead.

Upstream v1.9.0 plus the 27 commits that landed on upstream main after the
tag, notably the get_css_styles tool and its CSS formatter, config-file
support, the DevTools comments tools behind the hidden --devtoolsComments
flag, and a performance trace-engine memory leak fix.

Brave adaptations re-applied on top of upstream's refactors:

* the brave: and brave-untrusted: schemes are handled in isAllowedUrl, which
  now backs the target filter that browser.ts used to implement inline
* src/index.ts adopts the McpServer class, keeping the Brave server name,
  log prefix, braveArg/ignoreDefaultBraveArg options and telemetry defaults
* browser and tool-category options follow upstream into
  src/config/browser-options.ts and src/config/category-options.ts, rebranded
* the README is split into docs/configuration.md, docs/advanced-usage.md and
  docs/client-configurations.md, carrying the fork's already-rebranded prose;
  generate-docs.ts writes the options table to docs/configuration.md now
* the Agent Plugins 1.0 manifests (mcp.json, plugin.json) are rebranded
* upstream's dialog-test fix supersedes the fork's setTimeout variant
* dead CHROME_DEVTOOLS_MCP_NO_USAGE_STATISTICS references in tests point at
  the BRAVE_DEVTOOLS_MCP_ variable the fork actually reads

Co-Authored-By: Claude <noreply@anthropic.com>
@triuzzi triuzzi self-assigned this Sep 12, 2026
@triuzzi
triuzzi merged commit 5b034dc into main Sep 12, 2026
14 checks passed
rwinkelman pushed a commit to rwinkelman/brave-devtools-mcp that referenced this pull request Sep 19, 2026
PR triuzzi#31 was squash-merged, which dropped the merge's second parent and refroze
the merge base at the old fork point. The tree on main already contains all of
upstream v1.9.0, but GitHub still reports "64 commits behind" because
upstream/main is no longer an ancestor.

This is an ancestry-only merge: `-s ours` keeps main's tree byte-identical and
records upstream/main (d9a8cb6) as the second parent, so the fork reads as
0 commits behind again.

Merge this with a merge commit — squashing it would drop the second parent and
reintroduce the exact problem it fixes.

Co-Authored-By: Claude <noreply@anthropic.com>
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.