文件历史

提交图

132 次代码提交

作者 SHA1 备注 提交日期
Alex Rudenko 0c0a538921 test: fix flaky test (#1132) 2026-03-06 10:01:36 +00:00
Alex Rudenko c2d8009ff7 refactor: move main files (#1120)
- `chrome-devtools-mcp.js` is the `npx chrome-devtools-mcp`
- `chrome-devtools.js` is the new CLI
- `-cli-options.js` is the corresponding options
- all these files are in the bin folder to indicate they are executable
2026-03-05 21:51:37 +00:00
Nicholas Roscino 2a6ac709ea chore: extension pages list (#1065)
This PR introduces extension pages in the listPages tool under the flag
--category-extension.
2026-03-05 20:57:07 +00:00
dependabot[bot] a073c0c54b chore(deps-dev): bump puppeteer from 24.37.5 to 24.38.0 in the bundled group (#1099)
Bumps the bundled group with 1 update:
[puppeteer](https://github.com/puppeteer/puppeteer).

Updates `puppeteer` from 24.37.5 to 24.38.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.38.0</h2>
<h2><a
href="https://github.com/puppeteer/puppeteer/compare/puppeteer-core-v24.37.5...puppeteer-core-v24.38.0">24.38.0</a>
(2026-03-04)</h2>
<h3>🎉 Features</h3>
<ul>
<li>roll to Chrome 146.0.7680.31 (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14729">#14729</a>)
(<a
href="https://github.com/puppeteer/puppeteer/commit/627eb5e6572f5248286ab09d74c204e2399632e8">627eb5e</a>)</li>
<li>roll to Firefox 148.0 (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14728">#14728</a>)
(<a
href="https://github.com/puppeteer/puppeteer/commit/09b655a1a4b2ee389f4a63f701a347566a5b9d88">09b655a</a>)</li>
</ul>
<h3>🛠️ Fixes</h3>
<ul>
<li>consider browsingContext.navigationCommitted to dispose an existing
navigation (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14724">#14724</a>)
(<a
href="https://github.com/puppeteer/puppeteer/commit/b4e92c637c503710895c842f391793018c4f35b5">b4e92c6</a>)</li>
<li>disable PartitionAllocSchedulerLoopQuarantineTaskControlledPurge (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14744">#14744</a>)
(<a
href="https://github.com/puppeteer/puppeteer/commit/e6c7425d3f459adfbf5c1dd0b230da33fa9eb7c3">e6c7425</a>)</li>
<li>roll to Chrome 145.0.7632.117 (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14719">#14719</a>)
(<a
href="https://github.com/puppeteer/puppeteer/commit/1d407e1e69ee0f307f8819152a980fa0a24835ff">1d407e1</a>)</li>
</ul>
<h2>puppeteer: v24.38.0</h2>
<h2><a
href="https://github.com/puppeteer/puppeteer/compare/puppeteer-v24.37.5...puppeteer-v24.38.0">24.38.0</a>
(2026-03-04)</h2>
<h3>🎉 Features</h3>
<ul>
<li>roll to Chrome 146.0.7680.31 (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14729">#14729</a>)
(<a
href="https://github.com/puppeteer/puppeteer/commit/627eb5e6572f5248286ab09d74c204e2399632e8">627eb5e</a>)</li>
</ul>
<h3>Dependencies</h3>
<ul>
<li>The following workspace dependencies were updated
<ul>
<li>dependencies
<ul>
<li>puppeteer-core bumped from 24.37.5 to 24.38.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.37.5...puppeteer-v24.38.0">24.38.0</a>
(2026-03-04)</h2>
<h3>🎉 Features</h3>
<ul>
<li>roll to Chrome 146.0.7680.31 (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14729">#14729</a>)
(<a
href="https://github.com/puppeteer/puppeteer/commit/627eb5e6572f5248286ab09d74c204e2399632e8">627eb5e</a>)</li>
<li>roll to Firefox 148.0 (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14728">#14728</a>)
(<a
href="https://github.com/puppeteer/puppeteer/commit/09b655a1a4b2ee389f4a63f701a347566a5b9d88">09b655a</a>)</li>
</ul>
<h3>Dependencies</h3>
<ul>
<li>The following workspace dependencies were updated
<ul>
<li>dependencies
<ul>
<li>puppeteer-core bumped from 24.37.5 to 24.38.0</li>
</ul>
</li>
</ul>
</li>
</ul>
<h3>🛠️ Fixes</h3>
<ul>
<li>consider browsingContext.navigationCommitted to dispose an existing
navigation (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14724">#14724</a>)
(<a
href="https://github.com/puppeteer/puppeteer/commit/b4e92c637c503710895c842f391793018c4f35b5">b4e92c6</a>)</li>
<li>disable PartitionAllocSchedulerLoopQuarantineTaskControlledPurge (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14744">#14744</a>)
(<a
href="https://github.com/puppeteer/puppeteer/commit/e6c7425d3f459adfbf5c1dd0b230da33fa9eb7c3">e6c7425</a>)</li>
<li>roll to Chrome 145.0.7632.117 (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14719">#14719</a>)
(<a
href="https://github.com/puppeteer/puppeteer/commit/1d407e1e69ee0f307f8819152a980fa0a24835ff">1d407e1</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/puppeteer/puppeteer/commit/d3356fac46478974c5b88ba2b26b26954cb741ff"><code>d3356fa</code></a>
chore: release main (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14720">#14720</a>)</li>
<li><a
href="https://github.com/puppeteer/puppeteer/commit/e6c7425d3f459adfbf5c1dd0b230da33fa9eb7c3"><code>e6c7425</code></a>
fix: disable PartitionAllocSchedulerLoopQuarantineTaskControlledPurge
(<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14744">#14744</a>)</li>
<li><a
href="https://github.com/puppeteer/puppeteer/commit/e24f43290280df6398e992842490631aafd9f287"><code>e24f432</code></a>
chore(deps-dev): bump the dev-dependencies group across 1 directory with
7 up...</li>
<li><a
href="https://github.com/puppeteer/puppeteer/commit/b12fca9bd9bedb9c90863c52e7359cfbf281a81e"><code>b12fca9</code></a>
test: update tests and add diagnostics (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14741">#14741</a>)</li>
<li><a
href="https://github.com/puppeteer/puppeteer/commit/627eb5e6572f5248286ab09d74c204e2399632e8"><code>627eb5e</code></a>
feat: roll to Chrome 146.0.7680.31 (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14729">#14729</a>)</li>
<li><a
href="https://github.com/puppeteer/puppeteer/commit/e0e3e89aa4d7e1825d411a4729a76a0852824c83"><code>e0e3e89</code></a>
chore: enable blank issues in issue template configuration (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14739">#14739</a>)</li>
<li><a
href="https://github.com/puppeteer/puppeteer/commit/ba19944981f4e601127a5b7b54feefd1df972cbe"><code>ba19944</code></a>
chore(deps-dev): bump rollup from 4.22.4 to 4.59.0 in
/examples/puppeteer-in-...</li>
<li><a
href="https://github.com/puppeteer/puppeteer/commit/b4e92c637c503710895c842f391793018c4f35b5"><code>b4e92c6</code></a>
fix: consider browsingContext.navigationCommitted to dispose an existing
navi...</li>
<li><a
href="https://github.com/puppeteer/puppeteer/commit/57b40c03e11ec5defebfa30cb9fcea5d6f6ae572"><code>57b40c0</code></a>
chore(deps): bump typed-query-selector from 2.12.0 to 2.12.1 in the
dependenc...</li>
<li><a
href="https://github.com/puppeteer/puppeteer/commit/eca8ca4b90c9e16a86152a62ed8839119c4386a3"><code>eca8ca4</code></a>
chore(deps): bump the all group in /website with 2 updates (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14732">#14732</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/puppeteer/puppeteer/compare/puppeteer-v24.37.5...puppeteer-v24.38.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.37.5&new-version=24.38.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>
Co-authored-by: Alex Rudenko <alexrudenko@chromium.org>
2026-03-04 15:58:19 +00:00
Alex Rudenko cb0079efbb refactor: simplify the response texts (#1095)
- removed redundant headers in Markdown
- updates more tests to use snapshots
2026-03-04 07:23:37 +00:00
Nicholas Roscino 8dbf862549 test: installing chrome through test script (#1085)
Fixes local test failing for triggerAction on extensions.
2026-03-03 16:06:18 +00:00
Nicholas Roscino e5973fd021 chore: implement trigger extension action (#1049)
This PR implements the ability to trigger an extension action by passing
it an extension id.
It uses puppeteer internals and the canary chrome version in tests since
the TriggerAction CDP command is still not available in the current
stable release.
2026-03-02 16:21:58 +00:00
Alex Rudenko e51ba47203 fix: simplify emulation and script tools (#1073)
- reduces the token usage.
- makes emulation and script compatible with CLI.
- documents .nullable() and .object() restrictions for the future.
- the emulation tools do not have nullable anymore and undefined would
clear the emulation instead. The model is thus required to provide all
emulation settings at once.

Closes https://github.com/ChromeDevTools/chrome-devtools-mcp/issues/918
2026-03-02 13:31:55 +00:00
Nicholas Roscino 505089c288 chore: evaluate script on service workers (#1052)
This PR introduce script evaluation on service workers behind the flag
--category-extension.
2026-02-27 13:29:17 +00:00
Alex Rudenko f763da24a1 fix: simplify focus state management (#1063)
Simplify focus management by emulating focused state for all pages. This
is especially useful in the new multi agent use case.
2026-02-27 14:10:00 +01:00
Alex Rudenko 9628dabcb4 refactor: clean up more of the context getters (#1062)
- moves more code to the McpPage
- deleted Context specific tests
2026-02-27 12:53:20 +00:00
Alex Rudenko 4cb5a17b57 refactor: remove page passing via context (#1061)
- removes several redundant getters on the context.
- removes passing page instances via context.
2026-02-27 12:08:10 +00:00
Alex Rudenko d6c06c56a7 refactor: make cdp resolvers use McpPage (#1060)
Makes cdp resolvers scoped to the page. Once collectors are per McpPage,
the entire method could be moved to McpPage.
2026-02-27 10:58:49 +00:00
Alex Rudenko 40c241bbfc refactor: move dialog handling to McpPage (#1059)
- renamed getSelectedPage to getSelectedPptrPage
- removes getSelectedPptrPage from tool interfaces
- moves dialog handling to McpPage
- makes responses to be optionally McpPage-scoped
2026-02-27 11:49:43 +01:00
Alex Rudenko 302e5a0419 refactor: consistently use McpPage in tools (#1057)
Follow-up to
https://github.com/ChromeDevTools/chrome-devtools-mcp/commit/caf601a32832bb87cfac801a6bbeacb87508412f

The work is not complete and as a follow-up I will handle other Context
methods and moved whatever is relevant to the McpPage. Also, duplicate
getters would go away.
2026-02-27 09:41:08 +00:00
Alex Rudenko 5f694c60ff refactor: improve type safety for page scoped tools (#1051)
I think we should create proper classes for tool definitions soon.

Follow-up for
https://github.com/ChromeDevTools/chrome-devtools-mcp/pull/1022
2026-02-26 14:33:57 +00:00
Alex Rudenko dfdac2648e feat: integrate Lighthouse audits (#831)
This PR adds tool to perform navigation and snapshot audits using
Lighthouse for Accessibility, SEO and Best practices. For performance
audits existing tools can be used.

Closes https://github.com/ChromeDevTools/chrome-devtools-mcp/issues/473
2026-02-26 12:30:45 +00:00
Stanislav Publika caf601a328 feat: add pageId routing for parallel multi-agent workflows (#1022)
## Summary

Adds optional `pageId` routing to page-scoped tools, gated behind
`--experimental-page-id-routing`. When enabled, multi-agent callers can
target a specific page without relying on global selection state. Fully
backward-compatible: without the flag, behavior is unchanged.

### Key changes

- **`pageScoped` annotation**: tools declare `pageScoped: true`; the
server merges `pageId` into their schema at registration time (when the
flag is on)
- **`McpPage` wrapper**: consolidates per-page state (numeric id,
isolated context name, focus tracking) into a single class
- **Request-scoped page routing**: `resolvePageById()` resolves the
target page, `setRequestPage()` threads it through the handler so tools
like `getSelectedPage()` see the right page
- **`assertPageIsFocused`**: keyboard/input tools validate that the
target page holds browser focus, returning an actionable error ("call
select_page first") instead of silently dispatching to the wrong page
- **`--experimental-page-id-routing` CLI flag** (hidden): gates schema
injection and request-scoped routing so the feature can be tested before
graduating
- **Eval scenarios**: `page_id_routing_test` and
`page_focus_keyboard_test` with `serverArgs` support in the eval harness

Addresses #1019
2026-02-26 11:39:38 +00:00
Nicholas Roscino 1a4eaba95b chore: list service workers (#1035)
This PR adds the extension service workers to the output of listPages.
This is available only behind "--category-extensions" flag
2026-02-25 13:49:37 +00:00
Alex Rudenko ca6635d5a5 refactor: optimize slim tool descriptions and params (#1028)
Minor changes to shorten descriptions and improve ease of use.

Note that `--slim` mode is not released yet and this is an improvement
for it.
2026-02-24 13:28:04 +00:00
Alex Rudenko b5d01b5fe6 feat: support type_text (#1026)
`type_text` is useful for pages that do not have a11y and, thus, uid is
not known. It's also useful for testing user-like keyboard input and
testing the focus state changes. The `fill` tools force the focus change
and require an uid and therefore are not suitable for these tasks.
2026-02-24 09:05:24 +00:00
Ashutosh Kumar 496ab1b45f feat: support any-match text arrays in wait_for (#1011)
## Summary

Enhances wait_for to support waiting on multiple possible texts and
resolve when any one appears.

This addresses long-running flows that can end in different UI outcomes
(for example, "Complete" or "Error"), avoiding unnecessary 300s waits
when only one expected string is provided.

Closes #916.

## Tool Update

### wait_for

Waits for text on the selected page, now with any-match support.

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| text | string \| string[] | yes | A single text or a non-empty list of
texts. Resolves when any value appears. |
| timeout | integer | no | Maximum wait in ms (0 keeps default
behavior). |

---

## Design / Implementation

- Kept backward compatibility: existing single-string text calls
continue to work unchanged.
- Added schema support for string | string[] with non-empty array
validation.
- Updated context API to accept string | string[].
- Matching logic now normalizes to an array and races all candidates
across all frames using both:
    - aria/<text>
    - text/<text>
- Added clearer response output for array input:
    - Element matching one of ["Complete","Error"] found.
- Updated generated tool docs for the new wait_for contract.
- Improved docs generation to render ZodUnion types (so union params are
documented correctly, not as unknown).
  
---

## Tests

Added/updated coverage for:

- Schema acceptance of:
    - single string
    - non-empty string array
    - rejection of empty array
- Any-match array success case
- Any-match array when matching text appears later (async/delayed
content)
- Existing wait_for behavior remains covered for single-text usage

Executed relevant test suites:

- tests/tools/snapshot.test.ts
- tests/McpContext.test.ts
- tests/index.test.ts 

Confirmation after the change applied:
https://opncd.ai/share/8m6I4r4a
2026-02-24 07:16:47 +00:00
Alex Rudenko 7ffdc5ee4d feat: add take_memory_snapshot tool (#1023)
Refs: https://github.com/ChromeDevTools/chrome-devtools-mcp/issues/406
2026-02-23 18:12:29 +00:00
Alex Rudenko c402b43697 feat: --slim mode for maximum token savings (#958)
- navigate
- run js
- take screenshot

That's it. Basic functionality for a low (~368) token price.
2026-02-23 14:42:27 +00:00
RobertWsp 59f6477a70 feat: add storage-isolated browser contexts (#991)
## Summary

Adds storage-isolated browser contexts via an optional `isolatedContext`
parameter on the `new_page` tool, following the simplified design
proposed by @OrKoN in #926.

Pages created with the same `isolatedContext` name share cookies,
localStorage, and storage. Pages in different isolated contexts (or the
default context) are fully isolated — ideal for testing multi-user
real-time features like chat, notifications, or collaborative editing.

## Changes

### `new_page` tool
- New optional `isolatedContext: string` parameter
- If specified, creates/reuses a named `BrowserContext` and opens a page
in it
- If omitted, uses the default browser context (existing behavior
unchanged)

### `McpContext`
- `#isolatedContexts` Map: LLM-provided names → Puppeteer
`BrowserContext` instances
- `#pageToIsolatedContextName` WeakMap: GC-safe page → context name
reverse lookup
- Auto-discovery: externally created browser contexts get
`isolated-context-1`, `isolated-context-2`, etc.
- `getIsolatedContextName(page)`: returns the isolated context name for
a page (used by response formatting)
- `page.browserContext()` used for context membership detection (no
custom target event forwarding needed)
- No context cleanup in `dispose()` or `closePage()` — either the entire
browser is closed or we disconnect without destroying state

### `McpResponse`
- Page list includes `isolatedContext=${name}` labels (both text and
structured JSON output)

### `ToolDefinition`
- `Context` interface extended with `getIsolatedContextName(page)`
method

## What's NOT included (by design)
- **No `TargetEventEmitter`**: Puppeteer forwards target events from
`BrowserContext` → `Browser` internally
- **No context cleanup**: Browser contexts are not closed on `dispose()`
or page close, per maintainer guidance
- **No `about:blank` cleanup**: Default context and isolated contexts
coexist side-by-side

## Example

```
> new_page url="https://app.example.com/chat" isolatedContext="userA"
> new_page url="https://app.example.com/chat" isolatedContext="userB"
> list_pages

Page 1: [app.example.com/chat] isolatedContext=userA
Page 2: [app.example.com/chat] isolatedContext=userB [selected]
```

Pages in different isolated contexts have fully independent cookies,
localStorage, IndexedDB, and WebSocket connections.

## Tests

- 6 new tests covering `isolatedContext` feature in
`tests/tools/pages.test.ts`
- All existing tests pass (333+)
- Zero type errors, lint clean

Closes #926

---------

Co-authored-by: Alex Rudenko <alexrudenko@chromium.org>
2026-02-23 11:36:16 +00:00
Dobes Vandermeer 33446d457e feat: add experimental screencast recording tools (#941)
## Summary

Adds `screencast_start` and `screencast_stop` MCP tools that allow
agents to record a video of a page using Puppeteer's `page.screencast()`
API.

Only enabled if the command line option `--experimental-screencast` is
provided

Closes #878.

## New Tools

### `screencast_start`
Starts recording a screencast (video) of the selected page in mp4
format.

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `path` | string (optional) | temp file | Output file path |

### `screencast_stop`
Stops the active recording and reports the saved file path.

## Design

- **Start/stop pair** following the `performance_start_trace` /
`performance_stop_trace` pattern
- **State management** via `getScreenRecorder()` / `setScreenRecorder()`
on the Context interface
- **Category**: `DEBUGGING` (alongside `take_screenshot`)
- **ffmpeg dependency**: Clear error message when ffmpeg is not
installed
- **Temp file fallback**: When no `path` is provided, creates a temp
file with the correct extension

---------

Co-authored-by: Alex Rudenko <alexrudenko@chromium.org>
2026-02-20 13:15:48 +00:00
Alex Rudenko bc3c40e8f9 refactor: move emulation settings to context (#1000)
- reduces boilerplate 
- allows easily to restore emulation settings

This is in preparation for the integration with Lighthouse.
2026-02-20 11:36:14 +00:00
Alex Rudenko a2950e2e62 test: deflake network test (#994)
drive-by: switch to dot reporter locally and make it configurable
2026-02-19 13:34:07 +00:00
Alex Rudenko c9691c6250 test: fix missing sinon.restore (#989) 2026-02-18 15:39:30 +00:00
Nikolay Vitkov 327a3884d8 refactor: remove text from the status code for Network requests (#778)
LLM are trained to know the common status code so we can rely on that
when displaying the status code and fall back to text in case of errors
or pending reponse.
2026-02-18 14:23:26 +00:00
Alex Rudenko 1896dbb5a7 refactor(network): de-duplicate String and JSON formatters (#985)
- string formatters should use the same data as the JSON formatters
- removed an extra space in network status
2026-02-18 13:08:29 +00:00
Alex Rudenko d2bc489e43 fix: check that combobox is actually a select element before filling out options (#979)
Closes https://github.com/ChromeDevTools/chrome-devtools-mcp/issues/975
2026-02-18 09:17:33 +00:00
Simon Zünd 8e2380b434 fix: console formatter hides frames from ignored scripts (#927)
This PR wires up the default DevTools ignore listing to hide frames from
third party scripts in stack traces. By default, we ignore:

* Scripts with `/node_modules/` in their URL or where the URL starts
with `node:/`
* Scripts that are marked as ignore listed in the source map
* Content scripts from extensions

The PR adds both, unit tests and an e2e test. This is because we allow
the unit test to pass a mocked ignore checker, where-as the e2e uses the
real DevTools one.
2026-02-10 07:24:09 +00:00
dependabot[bot] 011726d7a2 chore(deps-dev): bump puppeteer from 24.36.1 to 24.37.2 in the bundled group (#909)
Bumps the bundled group with 1 update:
[puppeteer](https://github.com/puppeteer/puppeteer).

Updates `puppeteer` from 24.36.1 to 24.37.2
<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.37.2</h2>
<h2><a
href="https://github.com/puppeteer/puppeteer/compare/puppeteer-core-v24.37.1...puppeteer-core-v24.37.2">24.37.2</a>
(2026-02-06)</h2>
<h3>🛠️ Fixes</h3>
<ul>
<li>improve ConsoleMessage text() results (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14662">#14662</a>)
(<a
href="https://github.com/puppeteer/puppeteer/commit/0bb4703fed0e6fcd7b40899d1b81a54d4b5c48c7">0bb4703</a>)</li>
</ul>
<h3>📄 Documentation</h3>
<ul>
<li>document signal option in Page waitFor methods (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14648">#14648</a>)
(<a
href="https://github.com/puppeteer/puppeteer/commit/771b8854d779e04279aa2063cf97df214e7e983d">771b885</a>)</li>
</ul>
<h2>puppeteer: v24.37.2</h2>
<h2><a
href="https://github.com/puppeteer/puppeteer/compare/puppeteer-v24.37.1...puppeteer-v24.37.2">24.37.2</a>
(2026-02-06)</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.37.1 to 24.37.2</li>
</ul>
</li>
</ul>
</li>
</ul>
<h2>puppeteer-core: v24.37.1</h2>
<h2><a
href="https://github.com/puppeteer/puppeteer/compare/puppeteer-core-v24.37.0...puppeteer-core-v24.37.1">24.37.1</a>
(2026-02-05)</h2>
<h3>🛠️ Fixes</h3>
<ul>
<li>roll to Chrome 145.0.7632.46 (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14653">#14653</a>)
(<a
href="https://github.com/puppeteer/puppeteer/commit/d2a55914bee23a57098631f8c7cc8571d68c54ab">d2a5591</a>)</li>
<li>roll to Firefox 147.0.3 (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14658">#14658</a>)
(<a
href="https://github.com/puppeteer/puppeteer/commit/ad5cee0a575e298ef1dd07ed4d7cba455950c524">ad5cee0</a>)</li>
</ul>
<h2>puppeteer: v24.37.1</h2>
<h2><a
href="https://github.com/puppeteer/puppeteer/compare/puppeteer-v24.37.0...puppeteer-v24.37.1">24.37.1</a>
(2026-02-05)</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</li>
</ul>
</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</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.37.1...puppeteer-v24.37.2">24.37.2</a>
(2026-02-06)</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.37.1 to 24.37.2</li>
</ul>
</li>
</ul>
</li>
</ul>
<h3>🛠️ Fixes</h3>
<ul>
<li>improve ConsoleMessage text() results (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14662">#14662</a>)
(<a
href="https://github.com/puppeteer/puppeteer/commit/0bb4703fed0e6fcd7b40899d1b81a54d4b5c48c7">0bb4703</a>)</li>
</ul>
<h3>📄 Documentation</h3>
<ul>
<li>document signal option in Page waitFor methods (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14648">#14648</a>)
(<a
href="https://github.com/puppeteer/puppeteer/commit/771b8854d779e04279aa2063cf97df214e7e983d">771b885</a>)</li>
</ul>
<h2><a
href="https://github.com/puppeteer/puppeteer/compare/puppeteer-v24.37.0...puppeteer-v24.37.1">24.37.1</a>
(2026-02-05)</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.37.0 to 24.37.1</li>
</ul>
</li>
</ul>
</li>
</ul>
<h3>🛠️ Fixes</h3>
<ul>
<li>roll to Chrome 145.0.7632.46 (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14653">#14653</a>)
(<a
href="https://github.com/puppeteer/puppeteer/commit/d2a55914bee23a57098631f8c7cc8571d68c54ab">d2a5591</a>)</li>
<li>roll to Firefox 147.0.3 (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14658">#14658</a>)
(<a
href="https://github.com/puppeteer/puppeteer/commit/ad5cee0a575e298ef1dd07ed4d7cba455950c524">ad5cee0</a>)</li>
</ul>
<h2><a
href="https://github.com/puppeteer/puppeteer/compare/puppeteer-v24.36.1...puppeteer-v24.37.0">24.37.0</a>
(2026-02-04)</h2>
<h3>🎉 Features</h3>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/puppeteer/puppeteer/commit/b163ce4593a8f014b86d67d53825fbeb679045ca"><code>b163ce4</code></a>
chore: release main (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14663">#14663</a>)</li>
<li><a
href="https://github.com/puppeteer/puppeteer/commit/dea54fe9ca6e03f77dda80ec329bce32a20deb5c"><code>dea54fe</code></a>
test: increase protocol timeout in waittask test (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14649">#14649</a>)</li>
<li><a
href="https://github.com/puppeteer/puppeteer/commit/771b8854d779e04279aa2063cf97df214e7e983d"><code>771b885</code></a>
docs: document signal option in Page waitFor methods (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14648">#14648</a>)</li>
<li><a
href="https://github.com/puppeteer/puppeteer/commit/0bb4703fed0e6fcd7b40899d1b81a54d4b5c48c7"><code>0bb4703</code></a>
fix: improve ConsoleMessage text() results (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14662">#14662</a>)</li>
<li><a
href="https://github.com/puppeteer/puppeteer/commit/af557b44a92bb99a76c7a93ac47fd875e323acd9"><code>af557b4</code></a>
chore(deps): bump webpack from 5.98.0 to 5.105.0 in /website (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14661">#14661</a>)</li>
<li><a
href="https://github.com/puppeteer/puppeteer/commit/edeca3546c339360bb586af731bf9141f9290ed6"><code>edeca35</code></a>
chore: Increase timeout values for Windows and other platforms (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14659">#14659</a>)</li>
<li><a
href="https://github.com/puppeteer/puppeteer/commit/f0e14f0f5019fafb6cff80038bf10fb75a9de17e"><code>f0e14f0</code></a>
chore: release main (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14656">#14656</a>)</li>
<li><a
href="https://github.com/puppeteer/puppeteer/commit/ad5cee0a575e298ef1dd07ed4d7cba455950c524"><code>ad5cee0</code></a>
fix: roll to Firefox 147.0.3 (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14658">#14658</a>)</li>
<li><a
href="https://github.com/puppeteer/puppeteer/commit/d2a55914bee23a57098631f8c7cc8571d68c54ab"><code>d2a5591</code></a>
fix: roll to Chrome 145.0.7632.46 (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14653">#14653</a>)</li>
<li><a
href="https://github.com/puppeteer/puppeteer/commit/f59d6426be688f8b46da6ef34738208ca2216727"><code>f59d642</code></a>
chore(deps): update chromium-bidi (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14655">#14655</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/puppeteer/puppeteer/compare/puppeteer-v24.36.1...puppeteer-v24.37.2">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.36.1&new-version=24.37.2)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

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

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

---

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

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


</details>

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Alex Rudenko <alexrudenko@chromium.org>
2026-02-06 13:06:29 +00:00
Alex Rudenko 6d0eb491fd test: add a console error object test (#910) 2026-02-06 12:50:27 +00:00
Simon Zünd 05b01ecaba feat: include Error.cause chain for uncaught errors and logged Errors (#906) 2026-02-06 11:57:33 +00:00
Simon Zünd ffa00dab1b feat: show message and stack trace in details when console.log'ging Error objects (#902)
This PR improves the `get_console_message` tool when logging `Error`
objects. We use the existing `getExceptionDetails` CDP command to
retrieve the structured stack trace, we'll then source map.

Example:

```js
try {
  compute();
} catch (e) {
  console.log('Compute failed', e);
}
```

Before:
```txt
### Arguments
Arg #0: Compute failed
Arg #1: {}
```

After:
```txt
### Arguments
Arg #0: Compute failed
Arg #1: ComputeError: Invariant violation
at compute (foo.ts:1:20)
at <anonymous> (main.ts:2:8)
Note: line and column numbers use 1-based indexing
```

---------

Co-authored-by: Alex Rudenko <OrKoN@users.noreply.github.com>
2026-02-06 09:38:27 +00:00
Paul Irish b747f9d74a feat: Integrate CrUX data into performance trace summaries (#733)
We upgrade the performance trace tools to include real-user experience
data from the Chrome User Experience Report (CrUX).

https://developer.chrome.com/docs/crux
https://developer.chrome.com/docs/crux/methodology

### Deets

* When a trace is stopped, the server now extracts the primary
navigation URLs from the trace (determined by insightSets).
* It calls the public CrUX API to fetch field metrics (LCP, INP, CLS)
for each unique URL/Origin.
* The formatting of crux data is handled by upstream TraceFormatter, but
it looks like this:

```md
Metrics (field / real users):
  - LCP: 2595 ms (scope: url)
  - LCP breakdown:
    - TTFB: 1273 ms (scope: url)
    - Load delay: 86 ms (scope: url)
    - Load duration: 451 ms (scope: url)
    - Render delay: 786 ms (scope: url)
  - INP: 140 ms (scope: url)
  - CLS: 0.06 (scope: url)
  - The above data is from CrUX–Chrome User Experience Report. It's how the page performs for real users.
  - The values shown above are the p75 measure of all real Chrome users
  - The scope indicates if the data came from the entire origin, or a specific url
  - Lab metrics describe how this specific page load performed, while field metrics are an aggregation of results from real-world users. Best practice is to prioritize metrics that are bad in field data. Lab metrics may be better or worse than fields metrics depending on the developer's machine, network, or the actions performed while tracing.
 ```
 
**Privacy Considerations:**

*   Updates the server README to inform users that performance analysis tools may send trace URLs to the Google CrUX API.
*   Adds a notification message to the server startup logs regarding the CrUX API interaction.


Doc: go/crux-in-bifrost 
Fixes b/446630695

---------

Co-authored-by: Alex Rudenko <alexrudenko@chromium.org>
Co-authored-by: Alex Rudenko <OrKoN@users.noreply.github.com>
2026-02-05 07:27:15 +00:00
Alex Rudenko 3d6e59dda4 fix: accidental extra typing in the fill tool (#886)
Fixes https://github.com/ChromeDevTools/chrome-devtools-mcp/issues/881
2026-02-04 09:34:17 +00:00
Simon Zünd 7e1ec81fb6 fix: use 1-based line/column and fix wasm offsets in stack frames (#884)
`UILocation.linkText` does the right thing when formatting a location,
e.g. a wasm location will be formatted as `foo.wasm:0x95`.
2026-02-04 08:15:27 +00:00
Simon Zünd ecef712e70 feat: include source-mapped stack trace for uncaught errors (#876)
Note that we replace the existing "pageerror" handler with our new
`UncaughtError` handler. The latter has a structured stack trace
attached which we can source map via DevTools.

This regresses the current functionality slightly, as we lose
"pageerror"s for workers and oopif.
2026-02-03 12:24:23 +00:00
Alex Rudenko a0aeb97693 fix: respect custom timeouts in navigate tools (#865)
Closes https://github.com/ChromeDevTools/chrome-devtools-mcp/issues/863
2026-01-30 09:40:48 +00:00
Alex Rudenko 5a23a8c201 feat: support testing light and dark mode (#858)
Closes https://github.com/ChromeDevTools/chrome-devtools-mcp/issues/130
2026-01-28 13:57:54 +00:00
Gustav Ernberg von Heijne d845ad4858 feat: Add ability to inject script to run on page load (#568)
Adds a parameter "initScript" to be used to inject a script into the
page load before other scripts execute.

[Page.evaluateOnNewDocument](https://pptr.dev/api/puppeteer.page.evaluateonnewdocument)

See #567

---------

Co-authored-by: Alex Rudenko <alexrudenko@chromium.org>
2026-01-28 12:29:33 +00:00
Natasha Gorshunova 569894d486 chore: Implement reload_extension tool (#847)
Co-authored-by: Natallia Harshunova <nharshunova@chromium.org>
2026-01-27 11:13:03 +00:00
adam jones d7568881ba feat: add background parameter to new_page tool (#837)
## Summary

- Add `background` boolean parameter to the `new_page` tool
- When set to `true`, the new page opens in the background without
bringing it to the front
- Uses Puppeteer's existing `background` option for `browser.newPage()`

Fixes #826

---------

Co-authored-by: Alex Rudenko <OrKoN@users.noreply.github.com>
Co-authored-by: Alex Rudenko <alexrudenko@chromium.org>
2026-01-26 16:06:59 +00:00
Natasha Gorshunova 4ad781fee6 chore: implement list_extensions tool for local unpacked extensions (#819)
Co-authored-by: Natallia Harshunova <nharshunova@chromium.org>
Co-authored-by: Alex Rudenko <OrKoN@users.noreply.github.com>
2026-01-26 10:37:13 +00:00
Alex Rudenko 4b8e9f2875 feat: allow skipping snapshot generation for input tools (#821)
Input tools have snapshots not re-generated by default now with an
option to opt-in to get a snapshot.

Refs: https://github.com/ChromeDevTools/chrome-devtools-mcp/issues/726
2026-01-23 13:43:00 +00:00
dependabot[bot] a7a559efd8 chore(deps-dev): bump the bundled group with 3 updates (#812)
Bumps the bundled group with 3 updates:
[@modelcontextprotocol/sdk](https://github.com/modelcontextprotocol/typescript-sdk),
[core-js](https://github.com/zloirock/core-js/tree/HEAD/packages/core-js)
and [puppeteer](https://github.com/puppeteer/puppeteer).

Updates `@modelcontextprotocol/sdk` from 1.25.2 to 1.25.3
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/modelcontextprotocol/typescript-sdk/releases"><code>@​modelcontextprotocol/sdk</code>'s
releases</a>.</em></p>
<blockquote>
<h2>v1.25.3</h2>
<h2>What's Changed</h2>
<ul>
<li>[v1.x backport] Use correct schema for client sampling validation
when tools are present by <a
href="https://github.com/olaservo"><code>@​olaservo</code></a> in <a
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/pull/1407">modelcontextprotocol/typescript-sdk#1407</a></li>
<li>fix: prevent Hono from overriding global Response object (v1.x) by
<a href="https://github.com/mattzcarey"><code>@​mattzcarey</code></a> in
<a
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/pull/1411">modelcontextprotocol/typescript-sdk#1411</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/modelcontextprotocol/typescript-sdk/compare/v1.25.2...v1.25.3">https://github.com/modelcontextprotocol/typescript-sdk/compare/v1.25.2...v1.25.3</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/modelcontextprotocol/typescript-sdk/commit/ced75351af16850ea82fca478b921abc4a5385e4"><code>ced7535</code></a>
1.25.3</li>
<li><a
href="https://github.com/modelcontextprotocol/typescript-sdk/commit/6e8f7e1a43a819ae230373c62b82228dafd892c6"><code>6e8f7e1</code></a>
fix: prevent Hono from overriding global Response object (v1.x) (<a
href="https://redirect.github.com/modelcontextprotocol/typescript-sdk/issues/1411">#1411</a>)</li>
<li><a
href="https://github.com/modelcontextprotocol/typescript-sdk/commit/12ae856cee6ca58499cce24e80f650e78a0c7610"><code>12ae856</code></a>
[v1.x backport] Use correct schema for client sampling validation when
tools ...</li>
<li>See full diff in <a
href="https://github.com/modelcontextprotocol/typescript-sdk/compare/v1.25.2...v1.25.3">compare
view</a></li>
</ul>
</details>
<br />

Updates `core-js` from 3.47.0 to 3.48.0
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/zloirock/core-js/blob/master/CHANGELOG.md">core-js's
changelog</a>.</em></p>
<blockquote>
<h3><a
href="https://github.com/zloirock/core-js/releases/tag/v3.48.0">3.48.0 -
2026.01.21</a></h3>
<ul>
<li>Changes <a
href="https://github.com/zloirock/core-js/compare/v3.47.0...v3.48.0">v3.47.0...v3.48.0</a>
(126 commits)</li>
<li><a href="https://github.com/tc39/proposal-upsert"><code>Map</code>
upsert proposal</a>:
<ul>
<li>Built-ins:
<ul>
<li><code>Map.prototype.getOrInsert</code></li>
<li><code>Map.prototype.getOrInsertComputed</code></li>
<li><code>WeakMap.prototype.getOrInsert</code></li>
<li><code>WeakMap.prototype.getOrInsertComputed</code></li>
</ul>
</li>
<li>Moved to stable ES, <a
href="https://github.com/tc39/proposals/commit/131e53d6c9e658c6439831a167ed3f7897daf160">January
2026 TC39 meeting</a></li>
<li>Added <code>es.</code> namespace modules, <code>/es/</code> and
<code>/stable/</code> namespaces entries</li>
</ul>
</li>
<li>Use <code>CreateDataProperty</code> /
<code>CreateDataPropertyOrThrow</code> in some missed cases, <a
href="https://redirect.github.com/zloirock/core-js/issues/1497">#1497</a></li>
<li>Minor fix / optimization in the <code>RegExp</code> constructor (NCG
and <code>dotAll</code>) polyfill</li>
<li>Added some more workarounds for a Safari &lt; 13 bug with silent
ignore of non-writable array <code>.length</code></li>
<li>Added detection of a Webkit <a
href="https://bugs.webkit.org/show_bug.cgi?id=297532">bug</a>:
<code>Iterator.prototype.flatMap</code> throws on iterator without
<code>return</code> method</li>
<li>Added detection of a V8 ~ Chromium &lt; 144 <a
href="https://issues.chromium.org/issues/454630441">bug</a>:
<code>Uint8Array.prototype.setFromHex</code> throws an error on
length-tracking views over ResizableArrayBuffer</li>
<li>Compat data improvements:
<ul>
<li><a href="https://github.com/tc39/proposal-upsert"><code>Map</code>
upsert proposal</a> features marked as <a
href="https://issues.chromium.org/issues/434977728#comment4">shipped in
V8 ~ Chrome 145</a></li>
<li><a href="https://github.com/tc39/proposal-joint-iteration">Joint
iteration proposal</a> features marked as <a
href="https://bugzilla.mozilla.org/show_bug.cgi?id=2003333#c8">shipped
in FF148</a></li>
<li><a
href="https://github.com/tc39/proposal-iterator-sequencing"><code>Iterator.concat</code></a>
marked as shipped in Bun 1.3.7</li>
<li>Added <a
href="https://github.com/mozilla/rhino/releases/tag/Rhino1_9_0_Release">Rhino
1.9.0</a> compat data</li>
<li>Added <a
href="https://github.com/denoland/deno/releases/tag/v2.6.0">Deno 2.6</a>
compat data mapping</li>
<li>Added Opera Android <a
href="https://forums.opera.com/topic/87267/opera-for-android-93">93</a>
and <a
href="https://forums.opera.com/topic/87678/opera-for-android-94">94</a>
compat data mapping</li>
<li>Added Electron 41 compat data mapping</li>
<li><code>Iterator.prototype.flatMap</code> marked as supported from
Safari 26.2 and Bun 1.2.21 because of a <a
href="https://bugs.webkit.org/show_bug.cgi?id=297532">bug</a>: throws on
iterator without <code>return</code> method</li>
<li><code>Uint8Array.prototype.setFromHex</code> marked as supported
from V8 ~ Chromium 144 because of a <a
href="https://issues.chromium.org/issues/454630441">bug</a>: throws an
error on length-tracking views over ResizableArrayBuffer</li>
</ul>
</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/zloirock/core-js/commit/5d657da9e5ab5ac2f1657ba81821ecc50960b3ad"><code>5d657da</code></a>
v3.48.0</li>
<li><a
href="https://github.com/zloirock/core-js/commit/5644e73d977a0fc2e3bc9354aed678a4ce6ee0b1"><code>5644e73</code></a>
Add bug detection for <code>Uint8Array.prototype.setFromHex</code></li>
<li><a
href="https://github.com/zloirock/core-js/commit/804a10e6e54e03c1e426b0788bae1282dface839"><code>804a10e</code></a>
Merge pull request <a
href="https://github.com/zloirock/core-js/tree/HEAD/packages/core-js/issues/1501">#1501</a>
from zloirock/flat-map-fix</li>
<li><a
href="https://github.com/zloirock/core-js/commit/45d7fe314e97d65eff26ceb9b6ae1849c856bb20"><code>45d7fe3</code></a>
Add bug detection to Iterator flatMap method</li>
<li><a
href="https://github.com/zloirock/core-js/commit/efd9c2f14c2cd4d26a4893a60ab8ef5313de0c26"><code>efd9c2f</code></a>
move <code>Map</code> upsert proposal to stable ES</li>
<li><a
href="https://github.com/zloirock/core-js/commit/dcb938dc68ff4ef957095712be2f3d7cc3985caa"><code>dcb938d</code></a>
update the year and normalize the copyright wording</li>
<li><a
href="https://github.com/zloirock/core-js/commit/5454a5d20f468dd4556441c85cbecd437adb40c3"><code>5454a5d</code></a>
add some more workarounds for a Safari &lt; 13 bug with silent ignore of
non-wri...</li>
<li><a
href="https://github.com/zloirock/core-js/commit/73d4b6c4f5c729aad6ff1be7648f8a51a0aed38a"><code>73d4b6c</code></a>
add some more <code>createProperty</code> cases</li>
<li><a
href="https://github.com/zloirock/core-js/commit/9c89290d70612e6ac9f7ebf6215f63dc71965693"><code>9c89290</code></a>
fix: spec compliance for Array.prototype.flat and flatMap</li>
<li><a
href="https://github.com/zloirock/core-js/commit/e3774ce67d77fe3bd5f89aa36488ef5ebbb0ba35"><code>e3774ce</code></a>
fix: use createProperty in Array.prototype.filter</li>
<li>Additional commits viewable in <a
href="https://github.com/zloirock/core-js/commits/v3.48.0/packages/core-js">compare
view</a></li>
</ul>
</details>
<br />

Updates `puppeteer` from 24.35.0 to 24.36.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.36.0</h2>
<h2><a
href="https://github.com/puppeteer/puppeteer/compare/puppeteer-core-v24.35.0...puppeteer-core-v24.36.0">24.36.0</a>
(2026-01-22)</h2>
<h3>🎉 Features</h3>
<ul>
<li>roll to Chrome 144.0.7559.96 (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14587">#14587</a>)
(<a
href="https://github.com/puppeteer/puppeteer/commit/35eaf7c21e0256453cde6d57692cacfba48cc1e3">35eaf7c</a>)</li>
<li>roll to Firefox 147.0 (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14559">#14559</a>)
(<a
href="https://github.com/puppeteer/puppeteer/commit/63dd0e401f67ebc2c831e93d60fdbf23fa15fb53">63dd0e4</a>)</li>
<li><strong>webdriver:</strong> use
<code>emulation.setClientHintsOverride</code> (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14588">#14588</a>)
(<a
href="https://github.com/puppeteer/puppeteer/commit/d63dafde50d1f07e4c39b2ca53b7e7907109791e">d63dafd</a>)</li>
<li><strong>webdriver:</strong> use
<code>emulation.setTouchOverride</code> (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14566">#14566</a>)
(<a
href="https://github.com/puppeteer/puppeteer/commit/e7268395411f6d02861c014a3ace2e3327e84d43">e726839</a>)</li>
</ul>
<h3>🛠️ Fixes</h3>
<ul>
<li>HTTPResponse.text() method expected to throw when content is
malformed (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14450">#14450</a>)
(<a
href="https://github.com/puppeteer/puppeteer/commit/d967f6ce3bbe4bdc9303303b97f9b4f33743105b">d967f6c</a>)</li>
<li>roll to Firefox 147.0.1 (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14574">#14574</a>)
(<a
href="https://github.com/puppeteer/puppeteer/commit/c9bdb7a8e3c47965fa4abbccc0eb9ac06deb9d39">c9bdb7a</a>)</li>
</ul>
<h2>puppeteer: v24.36.0</h2>
<h2><a
href="https://github.com/puppeteer/puppeteer/compare/puppeteer-v24.35.0...puppeteer-v24.36.0">24.36.0</a>
(2026-01-22)</h2>
<h3>🎉 Features</h3>
<ul>
<li>roll to Chrome 144.0.7559.96 (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14587">#14587</a>)
(<a
href="https://github.com/puppeteer/puppeteer/commit/35eaf7c21e0256453cde6d57692cacfba48cc1e3">35eaf7c</a>)</li>
</ul>
<h3>Dependencies</h3>
<ul>
<li>The following workspace dependencies were updated
<ul>
<li>dependencies
<ul>
<li>puppeteer-core bumped from 24.35.0 to 24.36.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.35.0...puppeteer-v24.36.0">24.36.0</a>
(2026-01-22)</h2>
<h3>🎉 Features</h3>
<ul>
<li>roll to Chrome 144.0.7559.96 (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14587">#14587</a>)
(<a
href="https://github.com/puppeteer/puppeteer/commit/35eaf7c21e0256453cde6d57692cacfba48cc1e3">35eaf7c</a>)</li>
<li>roll to Firefox 147.0 (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14559">#14559</a>)
(<a
href="https://github.com/puppeteer/puppeteer/commit/63dd0e401f67ebc2c831e93d60fdbf23fa15fb53">63dd0e4</a>)</li>
<li><strong>webdriver:</strong> use
<code>emulation.setClientHintsOverride</code> (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14588">#14588</a>)
(<a
href="https://github.com/puppeteer/puppeteer/commit/d63dafde50d1f07e4c39b2ca53b7e7907109791e">d63dafd</a>)</li>
<li><strong>webdriver:</strong> use
<code>emulation.setTouchOverride</code> (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14566">#14566</a>)
(<a
href="https://github.com/puppeteer/puppeteer/commit/e7268395411f6d02861c014a3ace2e3327e84d43">e726839</a>)</li>
</ul>
<h3>Dependencies</h3>
<ul>
<li>The following workspace dependencies were updated
<ul>
<li>dependencies
<ul>
<li>puppeteer-core bumped from 24.35.0 to 24.36.0</li>
</ul>
</li>
</ul>
</li>
</ul>
<h3>🛠️ Fixes</h3>
<ul>
<li>HTTPResponse.text() method expected to throw when content is
malformed (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14450">#14450</a>)
(<a
href="https://github.com/puppeteer/puppeteer/commit/d967f6ce3bbe4bdc9303303b97f9b4f33743105b">d967f6c</a>)</li>
<li>roll to Firefox 147.0.1 (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14574">#14574</a>)
(<a
href="https://github.com/puppeteer/puppeteer/commit/c9bdb7a8e3c47965fa4abbccc0eb9ac06deb9d39">c9bdb7a</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/puppeteer/puppeteer/commit/c5fdc0c57ddc736439ed8f20a2ccc24647a896ff"><code>c5fdc0c</code></a>
chore: release main (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14558">#14558</a>)</li>
<li><a
href="https://github.com/puppeteer/puppeteer/commit/514ef71fec32686446a2465dba9565ca88800f89"><code>514ef71</code></a>
test: skip a flaky test (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14599">#14599</a>)</li>
<li><a
href="https://github.com/puppeteer/puppeteer/commit/d63dafde50d1f07e4c39b2ca53b7e7907109791e"><code>d63dafd</code></a>
feat(webdriver): use <code>emulation.setClientHintsOverride</code> (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14588">#14588</a>)</li>
<li><a
href="https://github.com/puppeteer/puppeteer/commit/e7d3d0e51458da194e9b9c04f4a5112d9b59463b"><code>e7d3d0e</code></a>
chore(deps): bump lock to upgrade vulnerable tar package (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14598">#14598</a>)</li>
<li><a
href="https://github.com/puppeteer/puppeteer/commit/a51345c0aa6fadab942f8ee49cbf1ba9b8fec7c5"><code>a51345c</code></a>
test: mark flaky tests (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14597">#14597</a>)</li>
<li><a
href="https://github.com/puppeteer/puppeteer/commit/fd05d808006f85d571c7cbfad4edb8ae2de14d9c"><code>fd05d80</code></a>
chore(deps-dev): bump lodash from 4.17.21 to 4.17.23 (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14595">#14595</a>)</li>
<li><a
href="https://github.com/puppeteer/puppeteer/commit/f6f8e0e0933d538c22fc632453e2c171bfc1216c"><code>f6f8e0e</code></a>
chore(deps): bump lodash from 4.17.21 to 4.17.23 in /website (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14596">#14596</a>)</li>
<li><a
href="https://github.com/puppeteer/puppeteer/commit/35eaf7c21e0256453cde6d57692cacfba48cc1e3"><code>35eaf7c</code></a>
feat: roll to Chrome 144.0.7559.96 (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14587">#14587</a>)</li>
<li><a
href="https://github.com/puppeteer/puppeteer/commit/a63847d707db3b948267078bbaf44dbd87023d7e"><code>a63847d</code></a>
test: update expectations (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14589">#14589</a>)</li>
<li><a
href="https://github.com/puppeteer/puppeteer/commit/de6df06114bda9fbdb7a176a5d9f93543d7f6450"><code>de6df06</code></a>
test: make test more robust (<a
href="https://redirect.github.com/puppeteer/puppeteer/issues/14592">#14592</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/puppeteer/puppeteer/compare/puppeteer-v24.35.0...puppeteer-v24.36.0">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 merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@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: Alex Rudenko <alexrudenko@chromium.org>
2026-01-22 12:35:34 +00:00
Alex Rudenko fbd22ce869 chore: structured performance responses (#809)
This PR moves formatting out of the tools and to the McpResponse.
Drive-by: clears up past trace results.
2026-01-22 10:01:59 +00:00