Please backport client side changes:
Revert "chore: hide stuff" playwright#38917 - Page/PageAgent changes (internal tooling, N/A for Python)
feat(storageState): handle ArrayBuffer playwright#38923 - storageState ArrayBuffer (server-side, N/A)
feat(video): start/stop playwright#38991 - Video start/stop (Screencast API, N/A for Python)
feat(context): setStorageState playwright#38988 - setStorageState (Tooling API, N/A for Python)
chore: do not use electron sandbox on linux by default playwright#38997 - N/A
feat(expect): toHaveCSS with object notation playwright#38982 - N/A (duplicate)
chore(cli): hint to install ffmpeg playwright#39019 - Video ffmpeg hint (N/A for Python)
feat: toHaveURLPattern playwright#38925 - toHaveURLPattern (test-runner, N/A)
chore: update video api and implementation playwright#39054 - Video API (Screencast, N/A)
chore: follow up to video api changes playwright#39085 - Video API follow-up (N/A)
feat(api): add Request.existingResponse() method playwright#39077 - Request.existingResponse ✅ IMPLEMENTED
docs: Improve not property sections playwright#39041 - N/A
feat(api): add timestamp() to ConsoleMessage playwright#39131 - ConsoleMessage.timestamp ✅ IMPLEMENTED
Update params.md: fix "it's" typos playwright#39180 - N/A
fix(trace-viewer): Keep network entry selected during test run playwright#39076 - N/A
chore: devtools experiment playwright#39204 - devtools (Tooling, N/A)
fix(trace): respect dark mode in blank snapshot playwright#39207 - N/A
Document Precedence of Mocked Routes if Multiple are Matching playwright#39190 - N/A
feat: add "screen-wake-lock" permission playwright#39225 - N/A
chore: prep devtools app playwright#39231 - devtools (Tooling, N/A)
feat(api): add Page.clearConsoleMessages method playwright#39242 - Page.clearConsoleMessages (Tooling, N/A)
chore: scope screencast to the web socket lifetime playwright#39243 - screencast (Tooling, N/A)
chore(mcp): use page.consoleMessages() API instead of local array playwright#39247 - Page.consoleMessages (Tooling, N/A)
chore: add _connectOverCDPTransport method playwright#39251 - connectOverCDPTransport (internal, N/A)
fix(routeFromHAR, take 2): hack harRouter to merge set-cookie headers playwright#38487 - HAR set-cookie (server-side fix, N/A)
fix: Replace path with parentPath playwright#39275 - parentPath fix (server-side, N/A)
fix(mcp): make verify tools work in iframes playwright#39374 - MCP iframe fix (internal, N/A)
feat(mcp): add button and clickCount options to browser_mouse_click_xy playwright#39368 - N/A
fix: clamp setTimeout value to prevent negative timeout crash playwright#39273 - N/A
fix(tracing): include source for tracing.group(location) playwright#39307 - tracing.group location (internal, N/A)
chore: optionally expose the browser server playwright#39423 - browser server (Tooling, N/A)
feat: make artifactsDir configurable via browserType.launch() and run-server CLI playwright#39426 - N/A
feat: add Page.pickLocator() API playwright#39486 - Page.pickLocator (Tooling, N/A)
chore(mcp): remove context factory (1) playwright#39449 - eventEmitter (internal, N/A)
feat(api): add Response.httpVersion() method playwright#39434 - Response.httpVersion ✅ IMPLEMENTED
feat: add Page.cancelPickLocator() API playwright#39488 - Page.cancelPickLocator (Tooling, N/A)
Move imageUtils.ts to utils/isomorphic playwright#39497 - N/A
feat(video): add screencast mode to Video.start for JPEG frame events playwright#39487 - Screencast (Tooling, N/A)
chore: move pickLocator to Page.inspector playwright#39503 - pickLocator (Tooling, N/A)
feat: Add test timeout to trace and display it in metadata of UI playwright#39467 - N/A
chore(mcp): do not affect default timeouts by mcp playwright#39502 - N/A
feat(api): introduce disposable return values playwright#39504 - Disposables (internal, N/A)
chore: follow up to disposables playwright#39510 - Disposables (internal, N/A)
chore: disposable follow-up 2 playwright#39517 - Disposables (internal, N/A)
chore: screencast/tracing/video size conflicts playwright#39512 - Screencast (Tooling, N/A)
chore: organize client folders playwright#39535 - client folder (internal, N/A)
chore: normalize remote pipe name handling playwright#39546 - remote pipe (internal, N/A)
chore(cli): implement attach to server playwright#39550 - attach to server (Tooling, N/A)
feat(cdp): add 'event' and 'close' events to CDPSession playwright#39552 - CDPSession event/close ✅ IMPLEMENTED
chore(cdp): event name -> method playwright#39570 - CDP event name (internal, N/A)
feat(trace-viewer): Format XML bodies in network tab playwright#39405 - N/A
chore: switch devtools to browser registry playwright#39571 - devtools (Tooling, N/A)
fix(mcp): use protocol blocklist instead of allowlist playwright#39600 - MCP blocklist (internal, N/A)
feat(inspector): move pickLocator and cancelPickLocator to Page playwright#39605 - pickLocator (Tooling, N/A)
feat(api): rename Inspector to Screencast playwright#39607 - Screencast rename (Tooling, N/A)
feat(expect): toHaveCSS with object notation playwright#38982 - duplicate
feat(api): expose browser.isRemote() playwright#39613 - browser.isRemote (reverted)
feat(api): add filter option to Page.consoleMessages() playwright#39608 - consoleMessages filter (Tooling, N/A)
Revert "feat(api): expose browser.isRemote()" playwright#39620 - revert isRemote
chore: do not bind remote browsers twice playwright#39627 - remote browsers (internal, N/A)
chore: rip perform playwright#39626 - rip perform (internal, N/A)
feat(api): open api needed for mcp playwright#39646 - MCP APIs (Tooling, N/A)
feat(api): open api needed for mcp (2) playwright#39648 - MCP APIs (Tooling, N/A)
feat: playwright-cli snapshot [element] playwright#39643 - Locator.normalize ✅ IMPLEMENTED (part of MCP)
feat: context.debugger api playwright#39667 - Debugger API (Tooling, N/A)
fix(api): make Page.screencast a property instead of a method playwright#39711 - Page.screencast (Tooling, N/A)
feat(api): return Disposable from Video.start and Screencast.start playwright#39712 - Disposables (Tooling, N/A)
fix(api): make Tracing.group return Disposable playwright#39729 - Tracing.group (internal, N/A)
feat: expose BrowserContext.options() playwright#39725 - BrowserContext.options (internal, N/A)
feat(cli): add trace CLI for inspecting trace files playwright#39735 - N/A
feat: aria snapshot depth playwright#39727 - aria snapshot depth ✅ IMPLEMENTED
chore: update debugger api playwright#39741 - Debugger API (Tooling, N/A)
chore: simplify snapshotForAI to return string with mode option playwright#39755 - aria snapshot mode ✅ IMPLEMENTED
feat(api): revert Locator.toCode() back to Locator.normalize() playwright#39754 - Locator.normalize ✅ IMPLEMENTED
chore(api): remove Browser.launchOptions/userDataDir, rename isClosedOrClosing to isClosed playwright#39752 - BrowserContext.isClosed ✅ IMPLEMENTED
fix(api): migrate Screencast from events to onFrame callback playwright#39714 - Screencast (Tooling, N/A)
feat(api): update Screencast.start API playwright#39756 - Screencast (Tooling, N/A)
chore: merge snapshotForAI() into ariaSnapshot() playwright#39759 - ariaSnapshot merge ✅ IMPLEMENTED
chore: deduplicate msToString and bytesToString into isomorphic/formatUtils playwright#39770 - N/A
feat(api): add Screencast.stop() and enforce single listener playwright#39775 - Screencast (Tooling, N/A)
chore: remove incremental aria snapshots from the api playwright#39777 - aria snapshot (cleanup, N/A)
docs: document promise unwrapping playwright#39719 - N/A
fix: aria snapshot issues playwright#39786 - aria snapshot (covered by other PRs)
feat(api): add annotate option for video and screencast playwright#39783 - Video annotate (Tooling, N/A)
chore: add getMetainfo convenience getter for protocol metainfo playwright#39794 - metainfo getter (internal, N/A)
chore: update APIs for ports playwright#39796 - ports APIs (Tooling, N/A)
feat(annotate): instrument input actions and show subtitle overlay playwright#39797 - annotate (Tooling, N/A)
chore: use kebab case for console filter enum value playwright#39799 - console filter (Tooling, N/A)
feat(video): expand annotate config with test status and action options playwright#39813 - Video annotate (Tooling, N/A)
fix(overlay): refactor overlay and annotation APIs playwright#39834 - overlay (Tooling, N/A)
chore: swallow TargetClosedErrors in beforeunload dialog.dismiss() playwright#39788 - dialog.dismiss TargetClosedError ✅ IMPLEMENTED
chore(screencast): remove annotate option from Screencast.start API playwright#39852 - Screencast (Tooling, N/A)
chore: make sure locator.ariaSnapshot() behaves as before playwright#39874 - N/A
chore: update debugger api after review playwright#39875 - Debugger API (Tooling, N/A)
fix(video): save videos to artifactsDir when connecting to remote browser playwright#39858 - N/A
feat(electron): add artifactsDir option to electron.launch() playwright#39880 - Electron artifactsDir (N/A for Python)
chore(build): vendor zod bundle and refactor CLI into action modules playwright#39883 - zod/CLI (internal, N/A)
fix: correct license header quote typo ('License" → "License") playwright#39882 - License typo (trivial, N/A)
chore: add PW_INSTRUMENT_MODULES for module load profiling playwright#39884 - N/A
test: fix/skip some tests playwright#39904 - N/A
docs(locator): clarify Java List return types playwright#39910 - N/A
chore: retarget video and overlay to screencast api playwright#39915 - Screencast (Tooling, N/A)
docs: introduce struct names for ports playwright#39931 - N/A
chore: revert api back to nullable video playwright#39933 - Video nullable (Tooling, N/A)
chore: screencast clarity playwright#39926 - Screencast (Tooling, N/A)
chore: merge screencast start/startRecording playwright#39937 - Screencast (Tooling, N/A)
Please backport client side changes:
notproperty sections playwright#39041 - N/Alocator.ariaSnapshot()behaves as before playwright#39874 - N/A