Skip to content

feat: experimental Chrome DevTools CLI#1100

Merged
mathiasbynens merged 11 commits intomainfrom
orkon/release-cli
Mar 11, 2026
Merged

feat: experimental Chrome DevTools CLI#1100
mathiasbynens merged 11 commits intomainfrom
orkon/release-cli

Conversation

@OrKoN
Copy link
Collaborator

@OrKoN OrKoN commented Mar 4, 2026

This PR enables an alternative CLI interface for Chrome DevTools MCP. chrome-devtools can be used in shell scripts to automate the Chrome DevTools MCP session running as a daemon process. Currently, a single session is shared between all chrome-devtools calls. All tools available by default are included into the CLI.

Examples:

❯ chrome-devtools navigate_page --url https://example.com
Successfully navigated to https://example.com.
## Pages
1: https://example.com/ [selected]

❯ chrome-devtools lighthouse_audit
## Lighthouse Audit Results
Mode: navigation
Device: desktop
URL: https://example.com/
### Category Scores
- Accessibility: 96 (accessibility)
- Best Practices: 96 (best-practices)
- SEO: 80 (seo)
### Audit Summary
Passed: 30
Failed: 4
Total Timing: 4107.22ms
### Reports
- /var/folders/hq/m1wr43z9665g5pghys7gkc2w00r23k/T/chrome-devtools-mcp-l5LRIT/report.json
- /var/folders/hq/m1wr43z9665g5pghys7gkc2w00r23k/T/chrome-devtools-mcp-3o6rcM/report.htm
❯ chrome-devtools lighthouse_audit --format=json | jq
{
  "lighthouseResult": {
    "summary": {
      "mode": "navigation",
      "device": "desktop",
      "url": "https://example.com/",
      "scores": [
        {
          "id": "accessibility",
          "title": "Accessibility",
          "score": 0.96
        },
        {
          "id": "best-practices",
          "title": "Best Practices",
          "score": 0.96
        },
        {
          "id": "seo",
          "title": "SEO",
          "score": 0.8
        }
      ],
      "audits": {
        "failed": 4,
        "passed": 30
      },
      "timing": {
        "total": 3754.87
      }
    },
    "reports": [
      "/var/folders/hq/m1wr43z9665g5pghys7gkc2w00r23k/T/chrome-devtools-mcp-nbLj82/report.json",
      "/var/folders/hq/m1wr43z9665g5pghys7gkc2w00r23k/T/chrome-devtools-mcp-VTp35b/report.html"
    ]
  }
}

To test:

npm ci
npm run clean
npm run bundle
npm pack
npm i chrome-devtools-mcp-0.18.1.tgz -g # to install globally

@OrKoN OrKoN force-pushed the orkon/release-cli branch from 160c089 to 8b2731a Compare March 4, 2026 15:16
@OrKoN OrKoN changed the title feat: enable Chrome DevTools CLI feat: experimental Chrome DevTools CLI Mar 4, 2026
@OrKoN OrKoN force-pushed the orkon/release-cli branch from 8b2731a to ca071e6 Compare March 4, 2026 16:30
@OrKoN
Copy link
Collaborator Author

OrKoN commented Mar 4, 2026

@zyzyzyryxy there are new dependencies because we need to bundle the client for the daemon.

Copy link
Contributor

@zyzyzyryxy zyzyzyryxy left a comment

Choose a reason for hiding this comment

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

There should be no problem with new deps.

github-merge-queue bot pushed a commit that referenced this pull request Mar 5, 2026
extracts non-launch related fixes from
#1100
@OrKoN OrKoN requested review from zyzyzyryxy and removed request for zyzyzyryxy March 5, 2026 09:04
@OrKoN OrKoN marked this pull request as draft March 5, 2026 09:07
@OrKoN OrKoN force-pushed the orkon/release-cli branch from 1057e37 to 68a6ea0 Compare March 6, 2026 05:35
@OrKoN
Copy link
Collaborator Author

OrKoN commented Mar 6, 2026

@natorion I improved the skill

@OrKoN OrKoN force-pushed the orkon/release-cli branch 2 times, most recently from 14991cc to 3f2d6c8 Compare March 6, 2026 06:17
@OrKoN OrKoN force-pushed the orkon/release-cli branch from 3f2d6c8 to 753b64b Compare March 6, 2026 06:19
@OrKoN
Copy link
Collaborator Author

OrKoN commented Mar 6, 2026

@natorion @matthiasrohmer I think we should also test on Windows in the headful mode (to make sure no cmd.exe windows show up when we launch CLI, we cannot see it in Github Actions runs).

@mathiasbynens mathiasbynens self-assigned this Mar 6, 2026
github-merge-queue bot pushed a commit that referenced this pull request Mar 6, 2026
MCP SDK client does not set windowsHide when spawning the process unless
it is on windows under Electron (not sure why). But I think we can
safely pretend to be "electron".

Refs modelcontextprotocol/typescript-sdk#1638
Refs #1100
Copy link
Contributor

@natorion natorion left a comment

Choose a reason for hiding this comment

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

I tested it and with the improvements its very smooth.

@mathiasbynens mathiasbynens marked this pull request as ready for review March 11, 2026 08:00
@mathiasbynens mathiasbynens merged commit 1ac574e into main Mar 11, 2026
20 checks passed
@mathiasbynens mathiasbynens deleted the orkon/release-cli branch March 11, 2026 08:42
github-merge-queue bot pushed a commit that referenced this pull request Mar 11, 2026
🤖 I have created a release *beep* *boop*
---


##
[0.20.0](chrome-devtools-mcp-v0.19.0...chrome-devtools-mcp-v0.20.0)
(2026-03-11)


### 🎉 Features

* experimental `chrome-devtools` CLI
([#1100](#1100))
([1ac574e](1ac574e))


### 📄 Documentation

* fix typo
([#1155](#1155))
([b59cabc](b59cabc))
* fix typos and improve phrasing
([#1130](#1130))
([70d4f36](70d4f36))
* revise contribution process and add release process
([#1134](#1134))
([d7d26a1](d7d26a1))
* **troubleshooting:** add symptom for missing tools due to read-only
mode
([#1148](#1148))
([57e7d51](57e7d51))
* Update troubleshooting for MCP server connection errors
([#1017](#1017))
([00f9c31](00f9c31))


### 🏗️ Refactor

* move main files
([#1120](#1120))
([c2d8009](c2d8009))

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).
rabye88999-hash added a commit to rabye88999-hash/chrome-devtools-mcp that referenced this pull request Mar 17, 2026
* chore(deps-dev): bump the dev-dependencies group with 6 updates (#1142)

Bumps the dev-dependencies group with 6 updates:

| Package | From | To |
| --- | --- | --- |
| [@eslint/js](https://github.com/eslint/eslint/tree/HEAD/packages/js) |
`9.39.3` | `9.39.4` |
| [@google/genai](https://github.com/googleapis/js-genai) | `1.43.0` |
`1.44.0` |
|
[@rollup/plugin-commonjs](https://github.com/rollup/plugins/tree/HEAD/packages/commonjs)
| `29.0.0` | `29.0.2` |
|
[@stylistic/eslint-plugin](https://github.com/eslint-stylistic/eslint-stylistic/tree/HEAD/packages/eslint-plugin)
| `5.9.0` | `5.10.0` |
|
[@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node)
| `25.3.3` | `25.3.5` |
| [eslint](https://github.com/eslint/eslint) | `9.39.3` | `9.39.4` |

Updates `@eslint/js` from 9.39.3 to 9.39.4
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/eslint/eslint/releases"><code>@​eslint/js</code>'s
releases</a>.</em></p>
<blockquote>
<h2>v9.39.4</h2>
<h2>Bug Fixes</h2>
<ul>
<li><a
href="https://github.com/eslint/eslint/commit/f18f6c8ae92a1bcfc558f48c0bd863ea94067459"><code>f18f6c8</code></a>
fix: update dependency minimatch to ^3.1.5 (<a
href="https://github.com/eslint/eslint/tree/HEAD/packages/js/issues/20564">#20564</a>)
(Milos Djermanovic)</li>
<li><a
href="https://github.com/eslint/eslint/commit/a3c868f6ef103c1caff9d15f744f9ebd995e872f"><code>a3c868f</code></a>
fix: update dependency <code>@​eslint/eslintrc</code> to ^3.3.4 (<a
href="https://github.com/eslint/eslint/tree/HEAD/packages/js/issues/20554">#20554</a>)
(Milos Djermanovic)</li>
<li><a
href="https://github.com/eslint/eslint/commit/234d005da6cd3c924f359e3783fbf565a3c047c3"><code>234d005</code></a>
fix: minimatch security vulnerability patch for v9.x (<a
href="https://github.com/eslint/eslint/tree/HEAD/packages/js/issues/20549">#20549</a>)
(Andrej Beles)</li>
<li><a
href="https://github.com/eslint/eslint/commit/b1b37eecaa033d2e390e1d8f1d6e68d0f5ff3a6a"><code>b1b37ee</code></a>
fix: update <code>ajv</code> to <code>6.14.0</code> to address security
vulnerabilities (<a
href="https://github.com/eslint/eslint/tree/HEAD/packages/js/issues/20538">#20538</a>)
(루밀LuMir)</li>
</ul>
<h2>Documentation</h2>
<ul>
<li><a
href="https://github.com/eslint/eslint/commit/46751526037682f8b42abcfb3e06d19213719347"><code>4675152</code></a>
docs: add deprecation notice partial (<a
href="https://github.com/eslint/eslint/tree/HEAD/packages/js/issues/20520">#20520</a>)
(Milos Djermanovic)</li>
</ul>
<h2>Chores</h2>
<ul>
<li><a
href="https://github.com/eslint/eslint/commit/b8b4eb15901c1bd6ef40d2589da4ae75795c0f6e"><code>b8b4eb1</code></a>
chore: update dependencies for ESLint v9.39.4 (<a
href="https://github.com/eslint/eslint/tree/HEAD/packages/js/issues/20596">#20596</a>)
(Francesco Trotta)</li>
<li><a
href="https://github.com/eslint/eslint/commit/71b2f6b628b76157b4a2a296cb969dc56abb296c"><code>71b2f6b</code></a>
chore: package.json update for <code>@​eslint/js</code> release
(Jenkins)</li>
<li><a
href="https://github.com/eslint/eslint/commit/1d16c2fa3998440ae7b0f6e2612935bd6b0ded1d"><code>1d16c2f</code></a>
ci: pin Node.js 25.6.1 (<a
href="https://github.com/eslint/eslint/tree/HEAD/packages/js/issues/20563">#20563</a>)
(Milos Djermanovic)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/eslint/eslint/commit/71b2f6b628b76157b4a2a296cb969dc56abb296c"><code>71b2f6b</code></a>
chore: package.json update for <code>@​eslint/js</code> release</li>
<li>See full diff in <a
href="https://github.com/eslint/eslint/commits/v9.39.4/packages/js">compare
view</a></li>
</ul>
</details>
<br />

Updates `@google/genai` from 1.43.0 to 1.44.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/googleapis/js-genai/releases"><code>@​google/genai</code>'s
releases</a>.</em></p>
<blockquote>
<h2>v1.44.0</h2>
<h2><a
href="https://github.com/googleapis/js-genai/compare/v1.43.0...v1.44.0">1.44.0</a>
(2026-03-04)</h2>
<h3>Features</h3>
<ul>
<li>Add gemini-3.1-flash-image-preview model (<a
href="https://github.com/googleapis/js-genai/commit/175603bacbc593a437264f807a411143cdccbd0a">175603b</a>)</li>
<li>Support signature for all Interaction tool types (<a
href="https://github.com/googleapis/js-genai/commit/b79108fdd60d11e45cac916e6ea369eac95ff570">b79108f</a>)</li>
<li>Update data types from discovery doc. (<a
href="https://github.com/googleapis/js-genai/commit/249b15a3b948d1453719af2a7df32490de20b423">249b15a</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/googleapis/js-genai/blob/main/CHANGELOG.md"><code>@​google/genai</code>'s
changelog</a>.</em></p>
<blockquote>
<h2><a
href="https://github.com/googleapis/js-genai/compare/v1.43.0...v1.44.0">1.44.0</a>
(2026-03-04)</h2>
<h3>Features</h3>
<ul>
<li>Add gemini-3.1-flash-image-preview model (<a
href="https://github.com/googleapis/js-genai/commit/175603bacbc593a437264f807a411143cdccbd0a">175603b</a>)</li>
<li>Support signature for all Interaction tool types (<a
href="https://github.com/googleapis/js-genai/commit/b79108fdd60d11e45cac916e6ea369eac95ff570">b79108f</a>)</li>
<li>Update data types from discovery doc. (<a
href="https://github.com/googleapis/js-genai/commit/249b15a3b948d1453719af2a7df32490de20b423">249b15a</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/googleapis/js-genai/commit/4e4ed3d36a1989219e4e80e9ca4b8e3acf656b35"><code>4e4ed3d</code></a>
chore(main): release 1.44.0 (<a
href="https://redirect.github.com/googleapis/js-genai/issues/1361">#1361</a>)</li>
<li><a
href="https://github.com/googleapis/js-genai/commit/e31d0bb9120dcb3ed5e126de731fee6f0f6d8c30"><code>e31d0bb</code></a>
chore: Optimize streaming</li>
<li><a
href="https://github.com/googleapis/js-genai/commit/a2ada3f24b682e29874bcc7b07b466113160a492"><code>a2ada3f</code></a>
chore: Add vertex_internal export path for internal use by the Vertex
SDK</li>
<li><a
href="https://github.com/googleapis/js-genai/commit/f9b4c89960a1a5b344cf1c3e34604a13eabb4662"><code>f9b4c89</code></a>
Flip Prettier Default to version 3.6.2.</li>
<li><a
href="https://github.com/googleapis/js-genai/commit/6cb8bf083489886eed246e01798af09864b67bb5"><code>6cb8bf0</code></a>
refactor: Improve web compatibility by making a partial declaration of
NodeJS...</li>
<li><a
href="https://github.com/googleapis/js-genai/commit/89400098586daca233d791655f44ee530de0ae67"><code>8940009</code></a>
chore: remove stainless headers</li>
<li><a
href="https://github.com/googleapis/js-genai/commit/4a59c563bb5117b504fb84bafd5053f0044cc3cc"><code>4a59c56</code></a>
chore: Relax API key requirement for Gemini API initialization.</li>
<li><a
href="https://github.com/googleapis/js-genai/commit/249b15a3b948d1453719af2a7df32490de20b423"><code>249b15a</code></a>
feat: Update data types from discovery doc.</li>
<li><a
href="https://github.com/googleapis/js-genai/commit/b79108fdd60d11e45cac916e6ea369eac95ff570"><code>b79108f</code></a>
feat: Support signature for all Interaction tool types</li>
<li><a
href="https://github.com/googleapis/js-genai/commit/249b086358e8058d6fd2088428846c3577db563a"><code>249b086</code></a>
chore: Explicitly use <code>export type</code> for type-only
exports.</li>
<li>Additional commits viewable in <a
href="https://github.com/googleapis/js-genai/compare/v1.43.0...v1.44.0">compare
view</a></li>
</ul>
</details>
<br />

Updates `@rollup/plugin-commonjs` from 29.0.0 to 29.0.2
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/rollup/plugins/blob/master/packages/commonjs/CHANGELOG.md"><code>@​rollup/plugin-commonjs</code>'s
changelog</a>.</em></p>
<blockquote>
<h2>v29.0.2</h2>
<p><em>2026-03-06</em></p>
<h3>Bugfixes</h3>
<ul>
<li>commonjs: conditional exports (<a
href="https://redirect.github.com/rollup/plugins/issues/1952">#1952</a>)</li>
</ul>
<h2>v29.0.1</h2>
<p><em>2026-03-05</em></p>
<h3>Bugfixes</h3>
<ul>
<li>commonjs: correctly replaces shorthand &quot;global&quot; property
in object (<a
href="https://redirect.github.com/rollup/plugins/issues/1957">#1957</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/rollup/plugins/commit/2de0d623224a4003eed9c65143ff99db145869df"><code>2de0d62</code></a>
chore(release): commonjs v29.0.2</li>
<li><a
href="https://github.com/rollup/plugins/commit/ab65325653e2103509e37099cad3e8afd6c53f8e"><code>ab65325</code></a>
fix(commonjs): conditional exports (<a
href="https://github.com/rollup/plugins/tree/HEAD/packages/commonjs/issues/1952">#1952</a>)</li>
<li><a
href="https://github.com/rollup/plugins/commit/7d22981cdc03a1de31a3ec990d24a379c090fe3d"><code>7d22981</code></a>
chore(repo): add <code>rollup-plugin</code> keyword in package.json (<a
href="https://github.com/rollup/plugins/tree/HEAD/packages/commonjs/issues/1955">#1955</a>)</li>
<li><a
href="https://github.com/rollup/plugins/commit/a79ae55986c056bf6251205a7014295e4b0b5bee"><code>a79ae55</code></a>
chore(release): commonjs v29.0.1</li>
<li><a
href="https://github.com/rollup/plugins/commit/bb41cfd82bd20dd8d132054d1442aea5922fdbd2"><code>bb41cfd</code></a>
chore(release): commonjs v29.0.1</li>
<li><a
href="https://github.com/rollup/plugins/commit/14ae18676d9df3ec781877a331ceb82964bc248c"><code>14ae186</code></a>
fix(commonjs): correctly replaces shorthand &quot;global&quot; property
in object (<a
href="https://github.com/rollup/plugins/tree/HEAD/packages/commonjs/issues/1957">#1957</a>)</li>
<li>See full diff in <a
href="https://github.com/rollup/plugins/commits/commonjs-v29.0.2/packages/commonjs">compare
view</a></li>
</ul>
</details>
<details>
<summary>Maintainer changes</summary>
<p>This version was pushed to npm by [GitHub Actions](<a
href="https://www.npmjs.com/~GitHub">https://www.npmjs.com/~GitHub</a>
Actions), a new releaser for <code>@​rollup/plugin-commonjs</code> since
your current version.</p>
</details>
<br />

Updates `@stylistic/eslint-plugin` from 5.9.0 to 5.10.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/eslint-stylistic/eslint-stylistic/releases"><code>@​stylistic/eslint-plugin</code>'s
releases</a>.</em></p>
<blockquote>
<h2>v5.10.0</h2>
<h2><a
href="https://github.com/eslint-stylistic/eslint-stylistic/compare/v5.9.0...v5.10.0">5.10.0</a>
(2026-03-06)</h2>
<h3>Features</h3>
<ul>
<li><strong>list-style:</strong> allow 'off' in overrides (<a
href="https://redirect.github.com/eslint-stylistic/eslint-stylistic/issues/1144">#1144</a>)
(<a
href="https://github.com/eslint-stylistic/eslint-stylistic/commit/c43bd4b14ebb4222b3f4e151967aac5e82bd8290">c43bd4b</a>)</li>
<li><strong>padding-line-between-statements:</strong> introduce
<code>lineMode</code> for selector matcher (<a
href="https://redirect.github.com/eslint-stylistic/eslint-stylistic/issues/1143">#1143</a>)
(<a
href="https://github.com/eslint-stylistic/eslint-stylistic/commit/1ebd6d8e59bad0e5330e560df724f29455b92adb">1ebd6d8</a>)</li>
</ul>
<h3>Build Related</h3>
<ul>
<li><strong>deps:</strong> bump actions/download-artifact from 7 to 8
(<a
href="https://redirect.github.com/eslint-stylistic/eslint-stylistic/issues/1153">#1153</a>)
(<a
href="https://github.com/eslint-stylistic/eslint-stylistic/commit/78ca032c765110952b63a86ca7177a28597371c9">78ca032</a>)</li>
<li><strong>deps:</strong> bump actions/upload-artifact from 6 to 7 (<a
href="https://redirect.github.com/eslint-stylistic/eslint-stylistic/issues/1154">#1154</a>)
(<a
href="https://github.com/eslint-stylistic/eslint-stylistic/commit/01f7b17856549b681589a97480f6014ab39f21f3">01f7b17</a>)</li>
</ul>
<h3>Performance</h3>
<ul>
<li>no export all for <code>@​typescript-eslint/utils</code> (<a
href="https://redirect.github.com/eslint-stylistic/eslint-stylistic/issues/1150">#1150</a>)
(<a
href="https://github.com/eslint-stylistic/eslint-stylistic/commit/258f9d8f6a171fcdbdc994768fb08938fafc4470">258f9d8</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/eslint-stylistic/eslint-stylistic/blob/v5.10.0/CHANGELOG.md"><code>@​stylistic/eslint-plugin</code>'s
changelog</a>.</em></p>
<blockquote>
<h2><a
href="https://github.com/eslint-stylistic/eslint-stylistic/compare/v5.9.0...v5.10.0">5.10.0</a>
(2026-03-06)</h2>
<h3>Features</h3>
<ul>
<li><strong>list-style:</strong> allow 'off' in overrides (<a
href="https://redirect.github.com/eslint-stylistic/eslint-stylistic/issues/1144">#1144</a>)
(<a
href="https://github.com/eslint-stylistic/eslint-stylistic/commit/c43bd4b14ebb4222b3f4e151967aac5e82bd8290">c43bd4b</a>)</li>
<li><strong>padding-line-between-statements:</strong> introduce
<code>lineMode</code> for selector matcher (<a
href="https://redirect.github.com/eslint-stylistic/eslint-stylistic/issues/1143">#1143</a>)
(<a
href="https://github.com/eslint-stylistic/eslint-stylistic/commit/1ebd6d8e59bad0e5330e560df724f29455b92adb">1ebd6d8</a>)</li>
</ul>
<h3>Build Related</h3>
<ul>
<li><strong>deps:</strong> bump actions/download-artifact from 7 to 8
(<a
href="https://redirect.github.com/eslint-stylistic/eslint-stylistic/issues/1153">#1153</a>)
(<a
href="https://github.com/eslint-stylistic/eslint-stylistic/commit/78ca032c765110952b63a86ca7177a28597371c9">78ca032</a>)</li>
<li><strong>deps:</strong> bump actions/upload-artifact from 6 to 7 (<a
href="https://redirect.github.com/eslint-stylistic/eslint-stylistic/issues/1154">#1154</a>)
(<a
href="https://github.com/eslint-stylistic/eslint-stylistic/commit/01f7b17856549b681589a97480f6014ab39f21f3">01f7b17</a>)</li>
</ul>
<h3>Performance</h3>
<ul>
<li>no export all for <code>@​typescript-eslint/utils</code> (<a
href="https://redirect.github.com/eslint-stylistic/eslint-stylistic/issues/1150">#1150</a>)
(<a
href="https://github.com/eslint-stylistic/eslint-stylistic/commit/258f9d8f6a171fcdbdc994768fb08938fafc4470">258f9d8</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/eslint-stylistic/eslint-stylistic/commit/efbb1bc0e5aaedc4695c44a03f46f4fcbbe58712"><code>efbb1bc</code></a>
chore: release v5.10.0 (main) (<a
href="https://github.com/eslint-stylistic/eslint-stylistic/tree/HEAD/packages/eslint-plugin/issues/1151">#1151</a>)</li>
<li><a
href="https://github.com/eslint-stylistic/eslint-stylistic/commit/1ebd6d8e59bad0e5330e560df724f29455b92adb"><code>1ebd6d8</code></a>
feat(padding-line-between-statements): introduce <code>lineMode</code>
for selector matc...</li>
<li><a
href="https://github.com/eslint-stylistic/eslint-stylistic/commit/c43bd4b14ebb4222b3f4e151967aac5e82bd8290"><code>c43bd4b</code></a>
feat(list-style): allow 'off' in overrides (<a
href="https://github.com/eslint-stylistic/eslint-stylistic/tree/HEAD/packages/eslint-plugin/issues/1144">#1144</a>)</li>
<li><a
href="https://github.com/eslint-stylistic/eslint-stylistic/commit/95884fc06e342243ea65e0038bac07d94d5708dd"><code>95884fc</code></a>
chore: replace <code>prettier</code> with <code>oxfmt</code> (<a
href="https://github.com/eslint-stylistic/eslint-stylistic/tree/HEAD/packages/eslint-plugin/issues/1147">#1147</a>)</li>
<li>See full diff in <a
href="https://github.com/eslint-stylistic/eslint-stylistic/commits/v5.10.0/packages/eslint-plugin">compare
view</a></li>
</ul>
</details>
<br />

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

Updates `eslint` from 9.39.3 to 9.39.4
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/eslint/eslint/releases">eslint's
releases</a>.</em></p>
<blockquote>
<h2>v9.39.4</h2>
<h2>Bug Fixes</h2>
<ul>
<li><a
href="https://github.com/eslint/eslint/commit/f18f6c8ae92a1bcfc558f48c0bd863ea94067459"><code>f18f6c8</code></a>
fix: update dependency minimatch to ^3.1.5 (<a
href="https://redirect.github.com/eslint/eslint/issues/20564">#20564</a>)
(Milos Djermanovic)</li>
<li><a
href="https://github.com/eslint/eslint/commit/a3c868f6ef103c1caff9d15f744f9ebd995e872f"><code>a3c868f</code></a>
fix: update dependency <code>@​eslint/eslintrc</code> to ^3.3.4 (<a
href="https://redirect.github.com/eslint/eslint/issues/20554">#20554</a>)
(Milos Djermanovic)</li>
<li><a
href="https://github.com/eslint/eslint/commit/234d005da6cd3c924f359e3783fbf565a3c047c3"><code>234d005</code></a>
fix: minimatch security vulnerability patch for v9.x (<a
href="https://redirect.github.com/eslint/eslint/issues/20549">#20549</a>)
(Andrej Beles)</li>
<li><a
href="https://github.com/eslint/eslint/commit/b1b37eecaa033d2e390e1d8f1d6e68d0f5ff3a6a"><code>b1b37ee</code></a>
fix: update <code>ajv</code> to <code>6.14.0</code> to address security
vulnerabilities (<a
href="https://redirect.github.com/eslint/eslint/issues/20538">#20538</a>)
(루밀LuMir)</li>
</ul>
<h2>Documentation</h2>
<ul>
<li><a
href="https://github.com/eslint/eslint/commit/46751526037682f8b42abcfb3e06d19213719347"><code>4675152</code></a>
docs: add deprecation notice partial (<a
href="https://redirect.github.com/eslint/eslint/issues/20520">#20520</a>)
(Milos Djermanovic)</li>
</ul>
<h2>Chores</h2>
<ul>
<li><a
href="https://github.com/eslint/eslint/commit/b8b4eb15901c1bd6ef40d2589da4ae75795c0f6e"><code>b8b4eb1</code></a>
chore: update dependencies for ESLint v9.39.4 (<a
href="https://redirect.github.com/eslint/eslint/issues/20596">#20596</a>)
(Francesco Trotta)</li>
<li><a
href="https://github.com/eslint/eslint/commit/71b2f6b628b76157b4a2a296cb969dc56abb296c"><code>71b2f6b</code></a>
chore: package.json update for <code>@​eslint/js</code> release
(Jenkins)</li>
<li><a
href="https://github.com/eslint/eslint/commit/1d16c2fa3998440ae7b0f6e2612935bd6b0ded1d"><code>1d16c2f</code></a>
ci: pin Node.js 25.6.1 (<a
href="https://redirect.github.com/eslint/eslint/issues/20563">#20563</a>)
(Milos Djermanovic)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/eslint/eslint/commit/f5770b0df0d3ffff6a428d1c19a99bdb794053a3"><code>f5770b0</code></a>
9.39.4</li>
<li><a
href="https://github.com/eslint/eslint/commit/c30147a0514fdcf3711493d7beef454223c25493"><code>c30147a</code></a>
Build: changelog update for 9.39.4</li>
<li><a
href="https://github.com/eslint/eslint/commit/b8b4eb15901c1bd6ef40d2589da4ae75795c0f6e"><code>b8b4eb1</code></a>
chore: update dependencies for ESLint v9.39.4 (<a
href="https://redirect.github.com/eslint/eslint/issues/20596">#20596</a>)</li>
<li><a
href="https://github.com/eslint/eslint/commit/71b2f6b628b76157b4a2a296cb969dc56abb296c"><code>71b2f6b</code></a>
chore: package.json update for <code>@​eslint/js</code> release</li>
<li><a
href="https://github.com/eslint/eslint/commit/46751526037682f8b42abcfb3e06d19213719347"><code>4675152</code></a>
docs: add deprecation notice partial (<a
href="https://redirect.github.com/eslint/eslint/issues/20520">#20520</a>)</li>
<li><a
href="https://github.com/eslint/eslint/commit/f18f6c8ae92a1bcfc558f48c0bd863ea94067459"><code>f18f6c8</code></a>
fix: update dependency minimatch to ^3.1.5 (<a
href="https://redirect.github.com/eslint/eslint/issues/20564">#20564</a>)</li>
<li><a
href="https://github.com/eslint/eslint/commit/1d16c2fa3998440ae7b0f6e2612935bd6b0ded1d"><code>1d16c2f</code></a>
ci: pin Node.js 25.6.1 (<a
href="https://redirect.github.com/eslint/eslint/issues/20563">#20563</a>)</li>
<li><a
href="https://github.com/eslint/eslint/commit/a3c868f6ef103c1caff9d15f744f9ebd995e872f"><code>a3c868f</code></a>
fix: update dependency <code>@​eslint/eslintrc</code> to ^3.3.4 (<a
href="https://redirect.github.com/eslint/eslint/issues/20554">#20554</a>)</li>
<li><a
href="https://github.com/eslint/eslint/commit/234d005da6cd3c924f359e3783fbf565a3c047c3"><code>234d005</code></a>
fix: minimatch security vulnerability patch for v9.x (<a
href="https://redirect.github.com/eslint/eslint/issues/20549">#20549</a>)</li>
<li><a
href="https://github.com/eslint/eslint/commit/b1b37eecaa033d2e390e1d8f1d6e68d0f5ff3a6a"><code>b1b37ee</code></a>
fix: update <code>ajv</code> to <code>6.14.0</code> to address security
vulnerabilities (<a
href="https://redirect.github.com/eslint/eslint/issues/20538">#20538</a>)</li>
<li>See full diff in <a
href="https://github.com/eslint/eslint/compare/v9.39.3...v9.39.4">compare
view</a></li>
</ul>
</details>
<br />

<details>
<summary>Most Recent Ignore Conditions Applied to This Pull
Request</summary>

| Dependency Name | Ignore Conditions |
| --- | --- |
| eslint | [>= 10.a, < 11] |
| @eslint/js | [>= 10.a, < 11] |
</details>


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>

* chore(deps-dev): bump chrome-devtools-frontend from 1.0.1592362 to 1.0.1595090 in the bundled-devtools group (#1143)

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

Updates `chrome-devtools-frontend` from 1.0.1592362 to 1.0.1595090
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/ChromeDevTools/devtools-frontend/commit/a429d5a8b2e78b92dc99ef220ca67c402cbe1a67"><code>a429d5a</code></a>
Update DevTools DEPS (trusted)</li>
<li><a
href="https://github.com/ChromeDevTools/devtools-frontend/commit/0c19a5d3042a0e9f64a6f206b4a23701233d329e"><code>0c19a5d</code></a>
Remove some of the Fragment.html</li>
<li><a
href="https://github.com/ChromeDevTools/devtools-frontend/commit/2a50e02118da72ca5ca43abffd260a436338296f"><code>2a50e02</code></a>
Add SelectivePermissionInterventionIssue support to frontend</li>
<li><a
href="https://github.com/ChromeDevTools/devtools-frontend/commit/9a8d33b3e8194feb1af0d7bfa56c89e1063156b2"><code>9a8d33b</code></a>
Add documentation about the Revealer system</li>
<li><a
href="https://github.com/ChromeDevTools/devtools-frontend/commit/ae921e728b8fd139bc6a05869f40f8db0cd731fd"><code>ae921e7</code></a>
Return data from trace loading directly</li>
<li><a
href="https://github.com/ChromeDevTools/devtools-frontend/commit/78e999c51401d20dd9b9f545ed62159ffb800336"><code>78e999c</code></a>
DevTools: Add text filter to Speculation Rules panel</li>
<li><a
href="https://github.com/ChromeDevTools/devtools-frontend/commit/4402e18db55fe12b4019c2af794a380f241d099e"><code>4402e18</code></a>
Tentatively fix the test flakiness.</li>
<li><a
href="https://github.com/ChromeDevTools/devtools-frontend/commit/c22a8d014388ec8882ae4b6e77340ca8e3ea8049"><code>c22a8d0</code></a>
inspect({focus: false}): skip panel switch when omitFocus is set</li>
<li><a
href="https://github.com/ChromeDevTools/devtools-frontend/commit/835aff5e88fa1084f4bb8e1d2e2ac54fafc295e4"><code>835aff5</code></a>
Roll browser-protocol and CfT</li>
<li><a
href="https://github.com/ChromeDevTools/devtools-frontend/commit/2b7cba05dd1a34369cd4a27d87412b83cbf182a4"><code>2b7cba0</code></a>
Update DevTools DEPS (trusted)</li>
<li>Additional commits viewable in <a
href="https://github.com/ChromeDevTools/devtools-frontend/compare/v1.0.1592362...v1.0.1595090">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=chrome-devtools-frontend&package-manager=npm_and_yarn&previous-version=1.0.1592362&new-version=1.0.1595090)](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>

* chore(deps): bump actions/setup-node from 6.2.0 to 6.3.0 in the all group (#1144)

Bumps the all group with 1 update:
[actions/setup-node](https://github.com/actions/setup-node).

Updates `actions/setup-node` from 6.2.0 to 6.3.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/actions/setup-node/releases">actions/setup-node's
releases</a>.</em></p>
<blockquote>
<h2>v6.3.0</h2>
<h2>What's Changed</h2>
<h3>Enhancements:</h3>
<ul>
<li>Support parsing <code>devEngines</code> field by <a
href="https://github.com/susnux"><code>@​susnux</code></a> in <a
href="https://redirect.github.com/actions/setup-node/pull/1283">actions/setup-node#1283</a></li>
</ul>
<blockquote>
<p>When using node-version-file: package.json, setup-node now
prefers devEngines.runtime over engines.node.</p>
</blockquote>
<h3>Dependency updates:</h3>
<ul>
<li>Fix npm audit issues by <a
href="https://github.com/gowridurgad"><code>@​gowridurgad</code></a> in
<a
href="https://redirect.github.com/actions/setup-node/pull/1491">actions/setup-node#1491</a></li>
<li>Replace uuid with crypto.randomUUID() by <a
href="https://github.com/trivikr"><code>@​trivikr</code></a> in <a
href="https://redirect.github.com/actions/setup-node/pull/1378">actions/setup-node#1378</a></li>
<li>Upgrade minimatch from 3.1.2 to 3.1.5 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a> in <a
href="https://redirect.github.com/actions/setup-node/pull/1498">actions/setup-node#1498</a></li>
</ul>
<h3>Bug fixes:</h3>
<ul>
<li>Remove hardcoded bearer for mirror-url <a
href="https://github.com/marco-ippolito"><code>@​marco-ippolito</code></a>
in <a
href="https://redirect.github.com/actions/setup-node/pull/1467">actions/setup-node#1467</a></li>
<li>Scope test lockfiles by package manager and update cache tests by <a
href="https://github.com/gowridurgad"><code>@​gowridurgad</code></a> in
<a
href="https://redirect.github.com/actions/setup-node/pull/1495">actions/setup-node#1495</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a href="https://github.com/susnux"><code>@​susnux</code></a> made
their first contribution in <a
href="https://redirect.github.com/actions/setup-node/pull/1283">actions/setup-node#1283</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/actions/setup-node/compare/v6...v6.3.0">https://github.com/actions/setup-node/compare/v6...v6.3.0</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/actions/setup-node/commit/53b83947a5a98c8d113130e565377fae1a50d02f"><code>53b8394</code></a>
Bump minimatch from 3.1.2 to 3.1.5 (<a
href="https://redirect.github.com/actions/setup-node/issues/1498">#1498</a>)</li>
<li><a
href="https://github.com/actions/setup-node/commit/54045abd5dcd3b0fee9ca02fa24c57545834c9cc"><code>54045ab</code></a>
Scope test lockfiles by package manager and update cache tests (<a
href="https://redirect.github.com/actions/setup-node/issues/1495">#1495</a>)</li>
<li><a
href="https://github.com/actions/setup-node/commit/c882bffdbd4df51ace6b940023952e8669c9932a"><code>c882bff</code></a>
Replace uuid with crypto.randomUUID() (<a
href="https://redirect.github.com/actions/setup-node/issues/1378">#1378</a>)</li>
<li><a
href="https://github.com/actions/setup-node/commit/774c1d62961e73038a114d59c8847023c003194d"><code>774c1d6</code></a>
feat(node-version-file): support parsing <code>devEngines</code> field
(<a
href="https://redirect.github.com/actions/setup-node/issues/1283">#1283</a>)</li>
<li><a
href="https://github.com/actions/setup-node/commit/efcb663fc60e97218a2b2d6d827f7830f164739e"><code>efcb663</code></a>
fix: remove hardcoded bearer (<a
href="https://redirect.github.com/actions/setup-node/issues/1467">#1467</a>)</li>
<li><a
href="https://github.com/actions/setup-node/commit/d02c89dce7e1ba9ef629ce0680989b3a1cc72edb"><code>d02c89d</code></a>
Fix npm audit issues (<a
href="https://redirect.github.com/actions/setup-node/issues/1491">#1491</a>)</li>
<li>See full diff in <a
href="https://github.com/actions/setup-node/compare/6044e13b5dc448c55e2357c09f80417699197238...53b83947a5a98c8d113130e565377fae1a50d02f">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=actions/setup-node&package-manager=github_actions&previous-version=6.2.0&new-version=6.3.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>

* docs(troubleshooting): add symptom for missing tools due to read-only mode (#1148)

* docs: fix typo (#1155)

* chore(deps-dev): bump puppeteer from 24.38.0 to 24.39.0 in the bundled group (#1159)

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

Updates `puppeteer` from 24.38.0 to 24.39.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: v24.39.0</h2>
<h2><a
href="https://github.com/puppeteer/puppeteer/compare/puppeteer-core-v24.38.0...puppeteer-core-v24.39.0">24.39.0</a>
(2026-03-10)</h2>
<h3>🎉 Features</h3>
<ul>
<li>expose Page.hasDevTools (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14758">#14758</a>)
(<a
href="https://github.com/puppeteer/puppeteer/commit/5ed7e7784a3e23bd1b42b8f0d041a74709a1bf4e">5ed7e77</a>)</li>
</ul>
<h3>🛠️ Fixes</h3>
<ul>
<li>roll to Chrome 146.0.7680.66 (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14752">#14752</a>)
(<a
href="https://github.com/puppeteer/puppeteer/commit/60ace04425d1ad4e99732298ed51839f09adcb0a">60ace04</a>)</li>
</ul>
<h2>puppeteer: v24.39.0</h2>
<h2><a
href="https://github.com/puppeteer/puppeteer/compare/puppeteer-v24.38.0...puppeteer-v24.39.0">24.39.0</a>
(2026-03-10)</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 24.38.0 to 24.39.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>
<h2><a
href="https://github.com/puppeteer/puppeteer/compare/puppeteer-v24.38.0...puppeteer-v24.39.0">24.39.0</a>
(2026-03-10)</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 24.38.0 to 24.39.0</li>
</ul>
</li>
</ul>
</li>
</ul>
<h3>🎉 Features</h3>
<ul>
<li>expose Page.hasDevTools (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14758">#14758</a>)
(<a
href="https://github.com/puppeteer/puppeteer/commit/5ed7e7784a3e23bd1b42b8f0d041a74709a1bf4e">5ed7e77</a>)</li>
</ul>
<h3>🛠️ Fixes</h3>
<ul>
<li>roll to Chrome 146.0.7680.66 (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14752">#14752</a>)
(<a
href="https://github.com/puppeteer/puppeteer/commit/60ace04425d1ad4e99732298ed51839f09adcb0a">60ace04</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/puppeteer/puppeteer/commit/cbadc53bb7e699cc6b6ff07946fda4c1d121015e"><code>cbadc53</code></a>
chore: release main (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14757">#14757</a>)</li>
<li><a
href="https://github.com/puppeteer/puppeteer/commit/5ed7e7784a3e23bd1b42b8f0d041a74709a1bf4e"><code>5ed7e77</code></a>
feat: expose Page.hasDevTools (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14758">#14758</a>)</li>
<li><a
href="https://github.com/puppeteer/puppeteer/commit/60ace04425d1ad4e99732298ed51839f09adcb0a"><code>60ace04</code></a>
fix: roll to Chrome 146.0.7680.66 (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14752">#14752</a>)</li>
<li><a
href="https://github.com/puppeteer/puppeteer/commit/4d0851287a3d578a75dd6d941fdf86d016bb493b"><code>4d08512</code></a>
chore(deps-dev): bump <code>@​swc/core</code> from 1.15.17 to 1.15.18 in
/website in the al...</li>
<li><a
href="https://github.com/puppeteer/puppeteer/commit/8b64a281cc4df66feb77f3dfc4178fe04a1e8e72"><code>8b64a28</code></a>
chore(deps): bump the all group with 5 updates (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14755">#14755</a>)</li>
<li><a
href="https://github.com/puppeteer/puppeteer/commit/a5ba71ab242a078b259188f091677386400d4e79"><code>a5ba71a</code></a>
chore: reduce flakiness in touch tests (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14751">#14751</a>)</li>
<li><a
href="https://github.com/puppeteer/puppeteer/commit/d3c93afcce23a8d5262922ad603ab69a75313fa1"><code>d3c93af</code></a>
ci: update changelog sections (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14750">#14750</a>)</li>
<li><a
href="https://github.com/puppeteer/puppeteer/commit/bca52c3257f1aff4a100f01a8576102daed47a79"><code>bca52c3</code></a>
ci: only run stale on bug issues (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14749">#14749</a>)</li>
<li><a
href="https://github.com/puppeteer/puppeteer/commit/282f935e34574381c648c07288beb9e4d44f51de"><code>282f935</code></a>
chore(deps): bump svgo from 3.3.2 to 3.3.3 in /website (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14747">#14747</a>)</li>
<li>See full diff in <a
href="https://github.com/puppeteer/puppeteer/compare/puppeteer-v24.38.0...puppeteer-v24.39.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=24.38.0&new-version=24.39.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>

* chore(deps-dev): bump the dev-dependencies group with 4 updates (#1157)

Bumps the dev-dependencies group with 4 updates:
[@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node),
[@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin),
[@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser)
and
[typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint).

Updates `@types/node` from 25.3.5 to 25.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.56.1 to 8.57.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/typescript-eslint/typescript-eslint/releases"><code>@​typescript-eslint/eslint-plugin</code>'s
releases</a>.</em></p>
<blockquote>
<h2>v8.57.0</h2>
<h2>8.57.0 (2026-03-09)</h2>
<h3>🚀 Features</h3>
<ul>
<li><strong>eslint-plugin:</strong> [no-unnecessary-condition] allow
literal loop conditions in for/do loops (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12080">#12080</a>)</li>
</ul>
<h3>🩹 Fixes</h3>
<ul>
<li><strong>eslint-plugin:</strong> [strict-void-return] false positives
with overloads (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12055">#12055</a>)</li>
<li><strong>eslint-plugin:</strong> handle statically analyzable
computed keys in prefer-readonly (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12079">#12079</a>)</li>
<li><strong>eslint-plugin:</strong> guard against negative paramIndex in
no-useless-default-assignment (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12077">#12077</a>)</li>
<li><strong>eslint-plugin:</strong> [prefer-promise-reject-errors] add
allow <code>TypeOrValueSpecifier</code> to prefer-promise-reject-errors
(<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12094">#12094</a>)</li>
<li><strong>eslint-plugin:</strong> [no-base-to-string] fix false
positive for toString with overloads (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12089">#12089</a>)</li>
<li><strong>typescript-estree:</strong> switch back to use
<code>ts.getModifiers()</code> (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12034">#12034</a>)</li>
<li><strong>typescript-estree:</strong> if the template literal is
tagged and the text has an invalid escape, <code>cooked</code> will be
<code>null</code> (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/11355">#11355</a>)</li>
</ul>
<h3>❤️ Thank You</h3>
<ul>
<li>Brad Zacher <a
href="https://github.com/bradzacher"><code>@​bradzacher</code></a></li>
<li>Brian Schlenker <a
href="https://github.com/bschlenk"><code>@​bschlenk</code></a></li>
<li>Evyatar Daud <a
href="https://github.com/StyleShit"><code>@​StyleShit</code></a></li>
<li>fisker Cheung <a
href="https://github.com/fisker"><code>@​fisker</code></a></li>
<li>James Henry <a
href="https://github.com/JamesHenry"><code>@​JamesHenry</code></a></li>
<li>Josh Goldberg</li>
<li>Kirk Waiblinger <a
href="https://github.com/kirkwaiblinger"><code>@​kirkwaiblinger</code></a></li>
<li>Moses Odutusin <a
href="https://github.com/thebolarin"><code>@​thebolarin</code></a></li>
<li>Newton Yuan <a
href="https://github.com/NewtonYuan"><code>@​NewtonYuan</code></a></li>
<li>SungHyun627 <a
href="https://github.com/SungHyun627"><code>@​SungHyun627</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.57.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"><code>@​typescript-eslint/eslint-plugin</code>'s
changelog</a>.</em></p>
<blockquote>
<h2>8.57.0 (2026-03-09)</h2>
<h3>🚀 Features</h3>
<ul>
<li><strong>eslint-plugin:</strong> [no-unnecessary-condition] allow
literal loop conditions in for/do loops (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12080">#12080</a>)</li>
</ul>
<h3>🩹 Fixes</h3>
<ul>
<li><strong>eslint-plugin:</strong> [no-base-to-string] fix false
positive for toString with overloads (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12089">#12089</a>)</li>
<li><strong>eslint-plugin:</strong> [prefer-promise-reject-errors] add
allow <code>TypeOrValueSpecifier</code> to prefer-promise-reject-errors
(<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12094">#12094</a>)</li>
<li><strong>typescript-estree:</strong> if the template literal is
tagged and the text has an invalid escape, <code>cooked</code> will be
<code>null</code> (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/11355">#11355</a>)</li>
<li><strong>eslint-plugin:</strong> guard against negative paramIndex in
no-useless-default-assignment (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12077">#12077</a>)</li>
<li><strong>eslint-plugin:</strong> handle statically analyzable
computed keys in prefer-readonly (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12079">#12079</a>)</li>
<li><strong>eslint-plugin:</strong> [strict-void-return] false positives
with overloads (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12055">#12055</a>)</li>
</ul>
<h3>❤️ Thank You</h3>
<ul>
<li>Brad Zacher <a
href="https://github.com/bradzacher"><code>@​bradzacher</code></a></li>
<li>Brian Schlenker <a
href="https://github.com/bschlenk"><code>@​bschlenk</code></a></li>
<li>Evyatar Daud <a
href="https://github.com/StyleShit"><code>@​StyleShit</code></a></li>
<li>James Henry <a
href="https://github.com/JamesHenry"><code>@​JamesHenry</code></a></li>
<li>Josh Goldberg</li>
<li>Kirk Waiblinger <a
href="https://github.com/kirkwaiblinger"><code>@​kirkwaiblinger</code></a></li>
<li>Moses Odutusin <a
href="https://github.com/thebolarin"><code>@​thebolarin</code></a></li>
<li>Newton Yuan <a
href="https://github.com/NewtonYuan"><code>@​NewtonYuan</code></a></li>
<li>SungHyun627 <a
href="https://github.com/SungHyun627"><code>@​SungHyun627</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.57.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/2c6aeeec238dfea860b9f3c146a55f8f49f15cf5"><code>2c6aeee</code></a>
chore(release): publish 8.57.0</li>
<li><a
href="https://github.com/typescript-eslint/typescript-eslint/commit/46bf066d3df4af9aa8804a383e0d6d407a8e79f0"><code>46bf066</code></a>
docs(eslint-plugin): document no-unnecessary-condition limitation with
object...</li>
<li><a
href="https://github.com/typescript-eslint/typescript-eslint/commit/f696dadfc37078efe4119ad2ab0609cde3e42766"><code>f696dad</code></a>
chore: use pnpm catalog (<a
href="https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin/issues/12047">#12047</a>)</li>
<li><a
href="https://github.com/typescript-eslint/typescript-eslint/commit/2029c78dcbe11b7e750af588d3c47f1211f02798"><code>2029c78</code></a>
fix(eslint-plugin): [no-base-to-string] fix false positive for toString
with ...</li>
<li><a
href="https://github.com/typescript-eslint/typescript-eslint/commit/0f4f101a125487bc07db323288afb86d5247bc31"><code>0f4f101</code></a>
fix(eslint-plugin): [prefer-promise-reject-errors] add allow
`TypeOrValueSpec...</li>
<li><a
href="https://github.com/typescript-eslint/typescript-eslint/commit/53f473b7a8c46094623712ba69a627182d049a5b"><code>53f473b</code></a>
fix(typescript-estree): if the template literal is tagged and the text
has an...</li>
<li><a
href="https://github.com/typescript-eslint/typescript-eslint/commit/2291b81f99670319618192645519a056fdb94cf4"><code>2291b81</code></a>
docs: minor grammar adjustment (<a
href="https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin/issues/12112">#12112</a>)</li>
<li><a
href="https://github.com/typescript-eslint/typescript-eslint/commit/fc5cd09de85600134ca0885ad5cdcedcddcd20ba"><code>fc5cd09</code></a>
fix(eslint-plugin): guard against negative paramIndex in
no-useless-default-a...</li>
<li><a
href="https://github.com/typescript-eslint/typescript-eslint/commit/adc2aad848fe1ac8044ba4a8d84daf8bb1939ced"><code>adc2aad</code></a>
fix(eslint-plugin): handle statically analyzable computed keys in
prefer-read...</li>
<li><a
href="https://github.com/typescript-eslint/typescript-eslint/commit/85badfffbf38730772afbffaa6d024592752664a"><code>85badff</code></a>
fix(eslint-plugin): [strict-void-return] false positives with overloads
(<a
href="https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin/issues/12055">#12055</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/typescript-eslint/typescript-eslint/commits/v8.57.0/packages/eslint-plugin">compare
view</a></li>
</ul>
</details>
<br />

Updates `@typescript-eslint/parser` from 8.56.1 to 8.57.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/typescript-eslint/typescript-eslint/releases"><code>@​typescript-eslint/parser</code>'s
releases</a>.</em></p>
<blockquote>
<h2>v8.57.0</h2>
<h2>8.57.0 (2026-03-09)</h2>
<h3>🚀 Features</h3>
<ul>
<li><strong>eslint-plugin:</strong> [no-unnecessary-condition] allow
literal loop conditions in for/do loops (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12080">#12080</a>)</li>
</ul>
<h3>🩹 Fixes</h3>
<ul>
<li><strong>eslint-plugin:</strong> [strict-void-return] false positives
with overloads (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12055">#12055</a>)</li>
<li><strong>eslint-plugin:</strong> handle statically analyzable
computed keys in prefer-readonly (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12079">#12079</a>)</li>
<li><strong>eslint-plugin:</strong> guard against negative paramIndex in
no-useless-default-assignment (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12077">#12077</a>)</li>
<li><strong>eslint-plugin:</strong> [prefer-promise-reject-errors] add
allow <code>TypeOrValueSpecifier</code> to prefer-promise-reject-errors
(<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12094">#12094</a>)</li>
<li><strong>eslint-plugin:</strong> [no-base-to-string] fix false
positive for toString with overloads (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12089">#12089</a>)</li>
<li><strong>typescript-estree:</strong> switch back to use
<code>ts.getModifiers()</code> (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12034">#12034</a>)</li>
<li><strong>typescript-estree:</strong> if the template literal is
tagged and the text has an invalid escape, <code>cooked</code> will be
<code>null</code> (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/11355">#11355</a>)</li>
</ul>
<h3>❤️ Thank You</h3>
<ul>
<li>Brad Zacher <a
href="https://github.com/bradzacher"><code>@​bradzacher</code></a></li>
<li>Brian Schlenker <a
href="https://github.com/bschlenk"><code>@​bschlenk</code></a></li>
<li>Evyatar Daud <a
href="https://github.com/StyleShit"><code>@​StyleShit</code></a></li>
<li>fisker Cheung <a
href="https://github.com/fisker"><code>@​fisker</code></a></li>
<li>James Henry <a
href="https://github.com/JamesHenry"><code>@​JamesHenry</code></a></li>
<li>Josh Goldberg</li>
<li>Kirk Waiblinger <a
href="https://github.com/kirkwaiblinger"><code>@​kirkwaiblinger</code></a></li>
<li>Moses Odutusin <a
href="https://github.com/thebolarin"><code>@​thebolarin</code></a></li>
<li>Newton Yuan <a
href="https://github.com/NewtonYuan"><code>@​NewtonYuan</code></a></li>
<li>SungHyun627 <a
href="https://github.com/SungHyun627"><code>@​SungHyun627</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.57.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"><code>@​typescript-eslint/parser</code>'s
changelog</a>.</em></p>
<blockquote>
<h2>8.57.0 (2026-03-09)</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.57.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/2c6aeeec238dfea860b9f3c146a55f8f49f15cf5"><code>2c6aeee</code></a>
chore(release): publish 8.57.0</li>
<li><a
href="https://github.com/typescript-eslint/typescript-eslint/commit/f696dadfc37078efe4119ad2ab0609cde3e42766"><code>f696dad</code></a>
chore: use pnpm catalog (<a
href="https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser/issues/12047">#12047</a>)</li>
<li><a
href="https://github.com/typescript-eslint/typescript-eslint/commit/a09921e2de2e8790e6a803016b825815ca9409d8"><code>a09921e</code></a>
chore: update vitest to 4.x (<a
href="https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser/issues/12071">#12071</a>)</li>
<li>See full diff in <a
href="https://github.com/typescript-eslint/typescript-eslint/commits/v8.57.0/packages/parser">compare
view</a></li>
</ul>
</details>
<br />

Updates `typescript-eslint` from 8.56.1 to 8.57.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.57.0</h2>
<h2>8.57.0 (2026-03-09)</h2>
<h3>🚀 Features</h3>
<ul>
<li><strong>eslint-plugin:</strong> [no-unnecessary-condition] allow
literal loop conditions in for/do loops (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12080">#12080</a>)</li>
</ul>
<h3>🩹 Fixes</h3>
<ul>
<li><strong>eslint-plugin:</strong> [strict-void-return] false positives
with overloads (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12055">#12055</a>)</li>
<li><strong>eslint-plugin:</strong> handle statically analyzable
computed keys in prefer-readonly (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12079">#12079</a>)</li>
<li><strong>eslint-plugin:</strong> guard against negative paramIndex in
no-useless-default-assignment (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12077">#12077</a>)</li>
<li><strong>eslint-plugin:</strong> [prefer-promise-reject-errors] add
allow <code>TypeOrValueSpecifier</code> to prefer-promise-reject-errors
(<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12094">#12094</a>)</li>
<li><strong>eslint-plugin:</strong> [no-base-to-string] fix false
positive for toString with overloads (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12089">#12089</a>)</li>
<li><strong>typescript-estree:</strong> switch back to use
<code>ts.getModifiers()</code> (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12034">#12034</a>)</li>
<li><strong>typescript-estree:</strong> if the template literal is
tagged and the text has an invalid escape, <code>cooked</code> will be
<code>null</code> (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/11355">#11355</a>)</li>
</ul>
<h3>❤️ Thank You</h3>
<ul>
<li>Brad Zacher <a
href="https://github.com/bradzacher"><code>@​bradzacher</code></a></li>
<li>Brian Schlenker <a
href="https://github.com/bschlenk"><code>@​bschlenk</code></a></li>
<li>Evyatar Daud <a
href="https://github.com/StyleShit"><code>@​StyleShit</code></a></li>
<li>fisker Cheung <a
href="https://github.com/fisker"><code>@​fisker</code></a></li>
<li>James Henry <a
href="https://github.com/JamesHenry"><code>@​JamesHenry</code></a></li>
<li>Josh Goldberg</li>
<li>Kirk Waiblinger <a
href="https://github.com/kirkwaiblinger"><code>@​kirkwaiblinger</code></a></li>
<li>Moses Odutusin <a
href="https://github.com/thebolarin"><code>@​thebolarin</code></a></li>
<li>Newton Yuan <a
href="https://github.com/NewtonYuan"><code>@​NewtonYuan</code></a></li>
<li>SungHyun627 <a
href="https://github.com/SungHyun627"><code>@​SungHyun627</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.57.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.57.0 (2026-03-09)</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.57.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/2c6aeeec238dfea860b9f3c146a55f8f49f15cf5"><code>2c6aeee</code></a>
chore(release): publish 8.57.0</li>
<li><a
href="https://github.com/typescript-eslint/typescript-eslint/commit/f696dadfc37078efe4119ad2ab0609cde3e42766"><code>f696dad</code></a>
chore: use pnpm catalog (<a
href="https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint/issues/12047">#12047</a>)</li>
<li><a
href="https://github.com/typescript-eslint/typescript-eslint/commit/a09921e2de2e8790e6a803016b825815ca9409d8"><code>a09921e</code></a>
chore: update vitest to 4.x (<a
href="https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint/issues/12071">#12071</a>)</li>
<li>See full diff in <a
href="https://github.com/typescript-eslint/typescript-eslint/commits/v8.57.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>

* feat: experimental `chrome-devtools` CLI (#1100)

This PR enables an alternative CLI interface for Chrome DevTools MCP.
`chrome-devtools` can be used in shell scripts to automate the Chrome
DevTools MCP session running as a daemon process. Currently, a single
session is shared between all `chrome-devtools` calls. All tools
available by default are included into the CLI.

Examples:

```bash
❯ chrome-devtools navigate_page --url https://example.com
Successfully navigated to https://example.com.
## Pages
1: https://example.com/ [selected]

❯ chrome-devtools lighthouse_audit
## Lighthouse Audit Results
Mode: navigation
Device: desktop
URL: https://example.com/
### Category Scores
- Accessibility: 96 (accessibility)
- Best Practices: 96 (best-practices)
- SEO: 80 (seo)
### Audit Summary
Passed: 30
Failed: 4
Total Timing: 4107.22ms
### Reports
- /var/folders/hq/m1wr43z9665g5pghys7gkc2w00r23k/T/chrome-devtools-mcp-l5LRIT/report.json
- /var/folders/hq/m1wr43z9665g5pghys7gkc2w00r23k/T/chrome-devtools-mcp-3o6rcM/report.htm
```

```sh
❯ chrome-devtools lighthouse_audit --format=json | jq
{
  "lighthouseResult": {
    "summary": {
      "mode": "navigation",
      "device": "desktop",
      "url": "https://example.com/",
      "scores": [
        {
          "id": "accessibility",
          "title": "Accessibility",
          "score": 0.96
        },
        {
          "id": "best-practices",
          "title": "Best Practices",
          "score": 0.96
        },
        {
          "id": "seo",
          "title": "SEO",
          "score": 0.8
        }
      ],
      "audits": {
        "failed": 4,
        "passed": 30
      },
      "timing": {
        "total": 3754.87
      }
    },
    "reports": [
      "/var/folders/hq/m1wr43z9665g5pghys7gkc2w00r23k/T/chrome-devtools-mcp-nbLj82/report.json",
      "/var/folders/hq/m1wr43z9665g5pghys7gkc2w00r23k/T/chrome-devtools-mcp-VTp35b/report.html"
    ]
  }
}
```

To test:

```sh
npm ci
npm run clean
npm run bundle
npm pack
npm i chrome-devtools-mcp-0.18.1.tgz -g # to install globally
```

---------

Co-authored-by: Mathias Bynens <mathias@qiwi.be>

* chore(main): release chrome-devtools-mcp 0.20.0 (#1126)

:robot: I have created a release *beep* *boop*
---


##
[0.20.0](https://github.com/ChromeDevTools/chrome-devtools-mcp/compare/chrome-devtools-mcp-v0.19.0...chrome-devtools-mcp-v0.20.0)
(2026-03-11)


### 🎉 Fe…
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.

4 participants