@orkestrel/scaffold 0.0.91 → 0.0.93
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agents/templates/brief.md +2 -0
- package/dist/bin/main.js +6 -6
- package/dist/bin/main.js.map +1 -1
- package/dist/host/AGENTS.md +2 -2
- package/dist/host/agents/orchestration.md +1 -1
- package/dist/host/agents/skills/enterprise-bootstrap/references/bootstrap-reference.md +4 -2
- package/dist/host/agents/skills/enterprise-bootstrap/references/responsive-layout.md +1 -1
- package/dist/host/agents/skills/enterprise-bootstrap/references/utilities.md +3 -3
- package/dist/host/agents/skills/orkestrel-falsify/SKILL.md +3 -3
- package/dist/host/agents/skills/orkestrel-journey/references/statechart.md +1 -1
- package/dist/host/agents/skills/orkestrel-publish/references/window.md +3 -4
- package/dist/host/agents/skills/orkestrel-scout/SKILL.md +1 -1
- package/dist/host/agents/templates/brief.md +2 -0
- package/dist/host/agents/transports/cursor.md +1 -1
- package/dist/host/claude/agents/analyst.md +1 -1
- package/dist/host/claude/agents/grok.md +1 -1
- package/dist/host/claude/agents/orkestrel.md +8 -8
- package/dist/host/claude/agents/planner.md +1 -1
- package/dist/host/claude/agents/researcher.md +1 -1
- package/dist/host/claude/agents/scout.md +1 -1
- package/dist/host/claude/rules/names.md +1 -1
- package/dist/host/claude/rules/patterns.md +1 -1
- package/dist/host/claude/rules/quality.md +11 -0
- package/dist/host/claude/rules/styles.md +5 -0
- package/dist/host/claude/rules/tests.md +7 -8
- package/dist/host/claude/rules/writing.md +2 -1
- package/dist/host/codex/agents/researcher.toml +2 -2
- package/dist/host/codex/agents/scout.toml +1 -1
- package/dist/host/dotfiles/oxlintrc.json +168 -0
- package/dist/host/guides/browser.md +483 -392
- package/dist/host/guides/mcp.md +15 -15
- package/dist/host/guides/pool.md +190 -69
- package/dist/host/guides/probe.md +262 -216
- package/dist/host/guides/router.md +1 -1
- package/dist/host/guides/worker.md +43 -7
- package/dist/host/manifest.json +34 -34
- package/dist/host/tests/config.test.ts +46 -3
- package/dist/src/core/index.cjs +6 -6
- package/dist/src/core/index.cjs.map +1 -1
- package/dist/src/core/index.js +6 -6
- package/dist/src/core/index.js.map +1 -1
- package/package.json +6 -6
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
|
|
8
8
|
The package has three library faces, each with one import specifier, and the `browse` binary.
|
|
9
9
|
|
|
10
|
-
- The core, `@orkestrel/browser`, compiles against `ESNext` and `WebWorker` with no DOM and no Node. `CDPClient` frames CDP messages over an injected `CDPTransportInterface`; `BrowserContext`, `BrowserPage`, and `BrowserFrame` model a browser context, its tabs, and their documents; `page.elements` outlines a page from its accessibility tree and acts on stable element references with trusted input; `frame.read()` captures a document as a `BrowserReadingInterface` value; `page.registry` mirrors the experimental `WebMCP` protocol domain; and `BrowserToolset` publishes all of it as `@orkestrel/tool` tools that an agent calls. The core also records, edits, replays, and compiles journeys, which [Journeys](#journeys) describes: `BrowserRecorder` and `page.codegen()` record steps, `BrowserReplay` replays them, `BrowserJourneyToolset` gives a model the
|
|
10
|
+
- The core, `@orkestrel/browser`, compiles against `ESNext` and `WebWorker` with no DOM and no Node. `CDPClient` frames CDP messages over an injected `CDPTransportInterface`; `BrowserContext`, `BrowserPage`, and `BrowserFrame` model a browser context, its tabs, and their documents; `page.elements` outlines a page from its accessibility tree and acts on stable element references with trusted input; `frame.read()` captures a document as a `BrowserReadingInterface` value; `page.registry` mirrors the experimental `WebMCP` protocol domain; and `BrowserToolset` publishes all of it as `@orkestrel/tool` tools that an agent calls. The core also records, edits, replays, and compiles journeys, which [Journeys](#journeys) describes: `BrowserRecorder` and `page.codegen()` record steps, `BrowserReplay` replays them, `BrowserJourneyToolset` gives a model the journey tools, `compileBrowserJourney` emits a module a developer runs, and two memory stores keep journeys and runs.
|
|
11
11
|
- The in-page face, `@orkestrel/browser/browser`, adds the DOM. `BrowserDOMView` drives a document with `HTMLElement.click()`, native value setters, `form.requestSubmit()`, and `MutationObserver`, and reports what an untrusted event cannot do. `createDocumentToolset` publishes the same vocabulary over that view, and `SocketCDPTransport` carries the core client over the browser's own `WebSocket`, so a worker or an extension page drives a browser over CDP.
|
|
12
12
|
- The Node runtime, `@orkestrel/browser/server`, adds `Browser`, which discovers a browser listening on a CDP port, attaches to it, or launches one and reads its endpoint from standard error; `WebSocketCDPTransport`; a filesystem-backed browser writer; the file journey and run stores; and `BrowserMCPServer`, which serves the vocabulary and the journey tools over MCP on stdio.
|
|
13
13
|
- The `browse` binary, `src/bin`, reads its environment variables and starts a `BrowserMCPServer`, which starts Chromium before the client's first request; see [Register the browse binary with Claude Code](#register-the-browse-binary-with-claude-code) for its hookup.
|
|
@@ -140,43 +140,43 @@ const run = await createBrowserReplay(toolset, { journey }, { runs }).execute()
|
|
|
140
140
|
|
|
141
141
|
The following table lists the core classes. Each implements the behavioral interface of the same name plus `Interface`, which [Methods](#methods) documents.
|
|
142
142
|
|
|
143
|
-
| API | Kind | Summary
|
|
144
|
-
| --------------------------- | ----- |
|
|
145
|
-
| `BrowserAccessibility` | class | Captures Chromium Accessibility-domain snapshots for one page.
|
|
146
|
-
| `BrowserClock` | class | Controls the Chromium virtual-time budget for deterministic page timers.
|
|
147
|
-
| `BrowserCodegen` | class | Records semantic page gestures and compiles them into a journey module.
|
|
148
|
-
| `BrowserContext` | class | Owns pages and shared state inside one Chromium browser context.
|
|
149
|
-
| `BrowserCookieManager` | class | Performs cookie operations isolated to one browser context.
|
|
150
|
-
| `BrowserCoverage` | class | Collects JavaScript precise coverage and CSS rule usage for one page target.
|
|
151
|
-
| `BrowserDiagnostics` | class | Groups the tracing, coverage, performance, and profiler classes beneath one page.
|
|
152
|
-
| `BrowserEmulationManager` | class | Applies rendering, identity, location, and network emulation for context pages.
|
|
153
|
-
| `BrowserFrame` | class | Represents one attached document frame, evaluated through its own CDP execution world.
|
|
154
|
-
| `BrowserHARManager` | class | Records and replays HTTP archives over one page network manager.
|
|
155
|
-
| `BrowserKeyboard` | class | Sends trusted keyboard input through Chromium's CDP Input domain.
|
|
156
|
-
| `BrowserMouse` | class | Sends trusted mouse input through Chromium's CDP Input domain.
|
|
157
|
-
| `BrowserNavigationManager` | class | Parks URL-pattern and network-idle waits on page events and abort signals, and opens the records that settle the navigation an input starts.
|
|
158
|
-
| `BrowserNetworkManager` | class | Drives the page-scoped Network and Fetch domain lifecycle.
|
|
159
|
-
| `BrowserPage` | class | Represents a top-level browser page, including its target lifecycle and child frames.
|
|
160
|
-
| `BrowserPerformance` | class | Reads Performance-domain metrics for one frame.
|
|
161
|
-
| `BrowserPermissionManager` | class | Applies permission overrides isolated to one browser context.
|
|
162
|
-
| `BrowserProfiler` | class | Records sampled JavaScript CPU profiles over one frame's Profiler domain.
|
|
163
|
-
| `BrowserReading` | class | Represents one captured document, parsed one time and projected to Markdown or plain text in bounded slices.
|
|
164
|
-
| `BrowserScriptManager` | class | Installs new-document scripts and promise-based host functions for one page.
|
|
165
|
-
| `BrowserSnapshot` | class | Represents a navigable, serializable browser DOM snapshot.
|
|
166
|
-
| `BrowserStorageManager` | class | Imports, exports, and clears cookie and web-storage state for one browser context.
|
|
167
|
-
| `BrowserToolset` | class | Publishes the browser vocabulary as `@orkestrel/tool` tools over one view and adopts the view's own tools beside them.
|
|
168
|
-
| `BrowserTouch` | class | Sends trusted touch input through Chromium's CDP Input domain.
|
|
169
|
-
| `BrowserTracing` | class | Captures Chromium traces streamed through the IO domain.
|
|
170
|
-
| `BrowserTransition` | class | Runs one asynchronous transition at a time, shared by every caller that joins it.
|
|
171
|
-
| `BrowserWebSocket` | class | Represents an observable WebSocket connection reconstructed from Network-domain events.
|
|
172
|
-
| `CDPClient` | class | Provides a lightweight Chrome DevTools Protocol client over a `CDPTransportInterface`.
|
|
173
|
-
| `BrowserPageElement` | class | Drives a referenced DOM element through its document's isolated world and the page input stream.
|
|
174
|
-
| `BrowserElementManager` | class | Captures accessibility trees and binds stable references to their owning frame sessions.
|
|
175
|
-
| `BrowserRecorder` | class | Records semantic steps from completed toolset actions and omits refused or timed-out actions.
|
|
176
|
-
| `BrowserReplay` | class | Prepares and replays a journey under a toolset hold, retaining its executed prefix.
|
|
177
|
-
| `BrowserJourneyToolset` | class | Registers the journey tools `record`, `save`, `journeys`, `edit`, `replay`, and `
|
|
178
|
-
| `MemoryBrowserJourneyStore` | class | Keeps owned journey snapshots and revision counters across deletion.
|
|
179
|
-
| `MemoryBrowserRunStore` | class | Keeps owned runs under their journey names and producer ids without directories.
|
|
143
|
+
| API | Kind | Summary |
|
|
144
|
+
| --------------------------- | ----- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
145
|
+
| `BrowserAccessibility` | class | Captures Chromium Accessibility-domain snapshots for one page. |
|
|
146
|
+
| `BrowserClock` | class | Controls the Chromium virtual-time budget for deterministic page timers. |
|
|
147
|
+
| `BrowserCodegen` | class | Records semantic page gestures and compiles them into a journey module. |
|
|
148
|
+
| `BrowserContext` | class | Owns pages and shared state inside one Chromium browser context. |
|
|
149
|
+
| `BrowserCookieManager` | class | Performs cookie operations isolated to one browser context. |
|
|
150
|
+
| `BrowserCoverage` | class | Collects JavaScript precise coverage and CSS rule usage for one page target. |
|
|
151
|
+
| `BrowserDiagnostics` | class | Groups the tracing, coverage, performance, and profiler classes beneath one page. |
|
|
152
|
+
| `BrowserEmulationManager` | class | Applies rendering, identity, location, and network emulation for context pages. |
|
|
153
|
+
| `BrowserFrame` | class | Represents one attached document frame, evaluated through its own CDP execution world. |
|
|
154
|
+
| `BrowserHARManager` | class | Records and replays HTTP archives over one page network manager. |
|
|
155
|
+
| `BrowserKeyboard` | class | Sends trusted keyboard input through Chromium's CDP Input domain. |
|
|
156
|
+
| `BrowserMouse` | class | Sends trusted mouse input through Chromium's CDP Input domain. |
|
|
157
|
+
| `BrowserNavigationManager` | class | Parks URL-pattern and network-idle waits on page events and abort signals, and opens the records that settle the navigation an input starts. |
|
|
158
|
+
| `BrowserNetworkManager` | class | Drives the page-scoped Network and Fetch domain lifecycle. |
|
|
159
|
+
| `BrowserPage` | class | Represents a top-level browser page, including its target lifecycle and child frames. |
|
|
160
|
+
| `BrowserPerformance` | class | Reads Performance-domain metrics for one frame. |
|
|
161
|
+
| `BrowserPermissionManager` | class | Applies permission overrides isolated to one browser context. |
|
|
162
|
+
| `BrowserProfiler` | class | Records sampled JavaScript CPU profiles over one frame's Profiler domain. |
|
|
163
|
+
| `BrowserReading` | class | Represents one captured document, parsed one time and projected to Markdown or plain text in bounded slices. |
|
|
164
|
+
| `BrowserScriptManager` | class | Installs new-document scripts and promise-based host functions for one page. |
|
|
165
|
+
| `BrowserSnapshot` | class | Represents a navigable, serializable browser DOM snapshot. |
|
|
166
|
+
| `BrowserStorageManager` | class | Imports, exports, and clears cookie and web-storage state for one browser context. |
|
|
167
|
+
| `BrowserToolset` | class | Publishes the browser vocabulary as `@orkestrel/tool` tools over one view and adopts the view's own tools beside them. |
|
|
168
|
+
| `BrowserTouch` | class | Sends trusted touch input through Chromium's CDP Input domain. |
|
|
169
|
+
| `BrowserTracing` | class | Captures Chromium traces streamed through the IO domain. |
|
|
170
|
+
| `BrowserTransition` | class | Runs one asynchronous transition at a time, shared by every caller that joins it. |
|
|
171
|
+
| `BrowserWebSocket` | class | Represents an observable WebSocket connection reconstructed from Network-domain events. |
|
|
172
|
+
| `CDPClient` | class | Provides a lightweight Chrome DevTools Protocol client over a `CDPTransportInterface`. |
|
|
173
|
+
| `BrowserPageElement` | class | Drives a referenced DOM element through its document's isolated world and the page input stream. |
|
|
174
|
+
| `BrowserElementManager` | class | Captures accessibility trees and binds stable references to their owning frame sessions. |
|
|
175
|
+
| `BrowserRecorder` | class | Records semantic steps from completed toolset actions and omits refused or timed-out actions. |
|
|
176
|
+
| `BrowserReplay` | class | Prepares and replays a journey under a toolset hold, retaining its executed prefix. |
|
|
177
|
+
| `BrowserJourneyToolset` | class | Registers the journey tools `record`, `save`, `journeys`, `edit`, `replay`, `forget`, and `capture` over a toolset and owns the recording and the active replay. |
|
|
178
|
+
| `MemoryBrowserJourneyStore` | class | Keeps owned journey snapshots and revision counters across deletion. |
|
|
179
|
+
| `MemoryBrowserRunStore` | class | Keeps owned runs under their journey names and producer ids without directories. |
|
|
180
180
|
|
|
181
181
|
#### Constants
|
|
182
182
|
|
|
@@ -232,7 +232,7 @@ The following table lists the core constants.
|
|
|
232
232
|
| `BROWSER_TOOL_NAME_PATTERN` | const | Matches a page tool name the toolset can advertise: 1 to 64 ASCII letters, digits, underscores, and hyphens. |
|
|
233
233
|
| `BROWSER_SCHEMES` | const | Names the URL schemes the `navigate` tool accepts by default: `http:` and `https:`. |
|
|
234
234
|
| `BROWSER_TOOL_COPY` | const | Holds the advertised definition of each reserved tool: its description, its JSON Schema parameters, and its annotations. |
|
|
235
|
-
| `BROWSER_JOURNEY_TOOL_NAMES` | const | Names the journey tools a toolset constructed with `journeys` registers and reserves: `record`, `save`, `journeys`, `edit`, `replay`, and `
|
|
235
|
+
| `BROWSER_JOURNEY_TOOL_NAMES` | const | Names the journey tools a toolset constructed with `journeys` registers and reserves: `record`, `save`, `journeys`, `edit`, `replay`, `forget`, and `capture`. |
|
|
236
236
|
| `BROWSER_JOURNEY_ACTIONS` | const | Names the native actions a journey step can hold: `click`, `type`, `press`, `navigate`, `wait`, `dialog`, and `switch`. |
|
|
237
237
|
| `BROWSER_ACTION_OUTCOMES` | const | Lists every outcome a `BrowserAction` and a run step carry: `done`, `refused`, `timeout`, and `interrupted`. |
|
|
238
238
|
| `BROWSER_ACTION_STAGES` | const | Lists every navigation stage a `BrowserAction` and a run step carry: `requested`, `committed`, and `loaded`. |
|
|
@@ -251,24 +251,24 @@ The following table lists the core constants.
|
|
|
251
251
|
|
|
252
252
|
Every error carries a machine-readable `code` and an optional `context` record, and each class has a guard. The following table lists the core errors and their guards.
|
|
253
253
|
|
|
254
|
-
| API | Kind | Summary
|
|
255
|
-
| --------------------------- | -------- |
|
|
256
|
-
| `BrowserError` | class | Represents the base error for all browser automation operations, carrying the code `BROWSER_ERROR` and a `context` record.
|
|
257
|
-
| `BrowserElementError` | class | Reports a refused element operation with a reason and, for `GONE`, the refresh directive.
|
|
258
|
-
| `isBrowserElementError` | function | Checks whether a value is an element refusal.
|
|
259
|
-
| `BrowserStepError` | class | Reports a journey step whose action did not complete, under the code `BROWSER_STEP_ERROR`, with the performed action in `action`.
|
|
260
|
-
| `isBrowserStepError` | function | Checks whether a value is a journey step error.
|
|
261
|
-
| `CDPError` | class | Reports that a CDP request received an error response from the remote endpoint, under the code `BROWSER_CDP_ERROR`, with the `method`, the CDP `code`, the `message`, and any `data` in its context.
|
|
262
|
-
| `CDPConnectionError` | class | Reports that a CDP request could not be sent or completed because the client was not
|
|
263
|
-
| `CDPTimeoutError` | class | Reports that a pending CDP request was not answered within its timeout window, under the code `BROWSER_CDP_TIMEOUT_ERROR`.
|
|
264
|
-
| `BrowserResultLimitError` | class | Reports that an `evaluate()`/`read()` result exceeded `BROWSER_RESULT_LIMIT` and was rejected in-page before it could overflow the CDP transport frame, under the code `BROWSER_RESULT_LIMIT_ERROR`.
|
|
265
|
-
| `isBrowserError` | function | Narrows an unknown value to a `BrowserError`.
|
|
266
|
-
| `isCDPError` | function | Narrows an unknown value to a `CDPError`.
|
|
267
|
-
| `isCDPConnectionError` | function | Narrows an unknown value to a `CDPConnectionError`.
|
|
268
|
-
| `isCDPTimeoutError` | function | Narrows an unknown value to a `CDPTimeoutError`.
|
|
269
|
-
| `isBrowserResultLimitError` | function | Narrows an unknown value to a `BrowserResultLimitError`.
|
|
270
|
-
| `BrowserConnectionError` | class | Reports that a CDP connection, discovery, or launch attempt failed, under the code `BROWSER_CONNECTION_ERROR`.
|
|
271
|
-
| `isBrowserConnectionError` | function | Narrows an unknown value to a `BrowserConnectionError`.
|
|
254
|
+
| API | Kind | Summary |
|
|
255
|
+
| --------------------------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
256
|
+
| `BrowserError` | class | Represents the base error for all browser automation operations, carrying the code `BROWSER_ERROR` and a `context` record. |
|
|
257
|
+
| `BrowserElementError` | class | Reports a refused element operation with a reason and, for `GONE`, the refresh directive. |
|
|
258
|
+
| `isBrowserElementError` | function | Checks whether a value is an element refusal. |
|
|
259
|
+
| `BrowserStepError` | class | Reports a journey step whose action did not complete, under the code `BROWSER_STEP_ERROR`, with the performed action in `action`. |
|
|
260
|
+
| `isBrowserStepError` | function | Checks whether a value is a journey step error. |
|
|
261
|
+
| `CDPError` | class | Reports that a CDP request received an error response from the remote endpoint, under the code `BROWSER_CDP_ERROR`, with the `method`, the CDP `code`, the `message`, and any `data` in its context. |
|
|
262
|
+
| `CDPConnectionError` | class | Reports that a CDP request could not be sent or completed because the client was not connected, closed while connecting, lost its connection, or lost the request's target session, under the code `BROWSER_CDP_CONNECTION_ERROR`. |
|
|
263
|
+
| `CDPTimeoutError` | class | Reports that a pending CDP request was not answered within its timeout window, under the code `BROWSER_CDP_TIMEOUT_ERROR`. |
|
|
264
|
+
| `BrowserResultLimitError` | class | Reports that an `evaluate()`/`read()` result exceeded `BROWSER_RESULT_LIMIT` and was rejected in-page before it could overflow the CDP transport frame, under the code `BROWSER_RESULT_LIMIT_ERROR`. |
|
|
265
|
+
| `isBrowserError` | function | Narrows an unknown value to a `BrowserError`. |
|
|
266
|
+
| `isCDPError` | function | Narrows an unknown value to a `CDPError`. |
|
|
267
|
+
| `isCDPConnectionError` | function | Narrows an unknown value to a `CDPConnectionError`. |
|
|
268
|
+
| `isCDPTimeoutError` | function | Narrows an unknown value to a `CDPTimeoutError`. |
|
|
269
|
+
| `isBrowserResultLimitError` | function | Narrows an unknown value to a `BrowserResultLimitError`. |
|
|
270
|
+
| `BrowserConnectionError` | class | Reports that a CDP connection, discovery, or launch attempt failed, under the code `BROWSER_CONNECTION_ERROR`. |
|
|
271
|
+
| `isBrowserConnectionError` | function | Narrows an unknown value to a `BrowserConnectionError`. |
|
|
272
272
|
|
|
273
273
|
An error names its refusal in `code`. The following table lists every code that reaches a caller, the class that carries it, what throws it, and when.
|
|
274
274
|
|
|
@@ -276,7 +276,7 @@ An error names its refusal in `code`. The following table lists every code that
|
|
|
276
276
|
| ------------------------------ | -------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
277
277
|
| `BROWSER_ERROR` | `BrowserError` | every face | An argument or option is invalid, a page, frame, handle, worker, or manager is closed or disconnected, a protocol payload is off-shape, a navigation fails or passes its timeout, or a refusal names no code of its own. |
|
|
278
278
|
| `BROWSER_CDP_ERROR` | `CDPError` | `CDPClient.send` and every call that sends through it | The remote endpoint answers a request with an error response. |
|
|
279
|
-
| `BROWSER_CDP_CONNECTION_ERROR` | `CDPConnectionError` | `CDPClient.send` and every call that sends through it | The client is not connected, closes while it connects,
|
|
279
|
+
| `BROWSER_CDP_CONNECTION_ERROR` | `CDPConnectionError` | `CDPClient.send` and every call that sends through it | The client is not connected, closes while it connects, loses its connection while a request is pending, or receives a detach event for the request's target session. |
|
|
280
280
|
| `BROWSER_CDP_TIMEOUT_ERROR` | `CDPTimeoutError` | `CDPClient.send` and every call that sends through it | A request is not answered within its timeout. |
|
|
281
281
|
| `BROWSER_RESULT_LIMIT_ERROR` | `BrowserResultLimitError` | `evaluate()` and `read()` in both placements, `readBrowserCapture`, and `readBrowserSnapshot` | A serialized result or capture is longer than `BROWSER_RESULT_LIMIT` characters, or a DOM snapshot holds more nodes than its limit. |
|
|
282
282
|
| `BROWSER_CONNECTION_ERROR` | `BrowserConnectionError` | `Browser.connect()`, `WebSocketCDPTransport`, and `SocketCDPTransport`; `fetchCDPTargets` returns it | A connection, discovery, or launch attempt fails, or a transport sends before it opens or after it closes. |
|
|
@@ -320,6 +320,8 @@ An error names its refusal in `code`. The following table lists every code that
|
|
|
320
320
|
| `BROWSER_JOURNEY_LOCKED` | `BrowserError` | the file journey store's `set` and `delete`, the file run store's `open` and `clear`, `save`, `edit`, and `forget` | Another write holds the journey's `journey.lock`; the store refuses at once and never waits. |
|
|
321
321
|
| `BROWSER_JOURNEY_FILE` | `BrowserError` | the file stores' `get` and `list`, `save`, `edit`, and `forget` for a store failure with no code, and a replay's run write | A stored file is empty, truncated, malformed, or names another journey or run, or the run write passed its bound. |
|
|
322
322
|
| `BROWSER_JOURNEY_ACCESS` | `BrowserError` | the file stores | The filesystem refused permission; the message names the path. |
|
|
323
|
+
| `BROWSER_CAPTURE_UNTRUSTED` | `BrowserError` | `capture` | The current view is untrusted. |
|
|
324
|
+
| `BROWSER_CAPTURE_UNAVAILABLE` | `BrowserError` | `capture` | The view has no screenshot capability, or the runs store has no standalone file storage. |
|
|
323
325
|
| `BROWSER_JOURNEY_PATH` | `BrowserError` | the file stores and their constructors, the memory stores' name checks, and the memory run store's `capture` | A journey name is invalid, an id or path escapes the root, a path component is a symbolic link, the root is missing, or a capture names a slot the store did not open. |
|
|
324
326
|
| `BROWSER_JOURNEY_ARGUMENT` | `BrowserError` | the stores' `list`, the file stores' constructors, `BrowserJourneyToolset` construction, and `journeys` | A listing limit is not a positive safe integer, or an offset is not a nonnegative integer; store page offsets must also be safe integers. |
|
|
325
327
|
| `BROWSER_JOURNEY_READONLY` | `BrowserError` | `record`, `save`, `edit`, and `forget` | The toolset was constructed with `journeys.readonly`. |
|
|
@@ -346,8 +348,7 @@ import {
|
|
|
346
348
|
try {
|
|
347
349
|
await element.click()
|
|
348
350
|
} catch (error) {
|
|
349
|
-
if (isBrowserElementError(error))
|
|
350
|
-
log(error.code, error.context) // { reason: 'OCCLUDED', … }
|
|
351
|
+
if (isBrowserElementError(error)) log(error.code, error.context) // { reason: 'OCCLUDED', … }
|
|
351
352
|
else if (isCDPError(error)) log(error.code, error.context)
|
|
352
353
|
else if (isCDPConnectionError(error)) log(error.code)
|
|
353
354
|
else if (isCDPTimeoutError(error)) log(error.code)
|
|
@@ -903,258 +904,259 @@ validateBrowserViewport({ width: 1280, height: 720 })
|
|
|
903
904
|
|
|
904
905
|
The following table lists the core types.
|
|
905
906
|
|
|
906
|
-
| API | Kind | Summary
|
|
907
|
-
| ----------------------------------- | --------- |
|
|
908
|
-
| `CDPTransportEventMap` | type | Maps the events emitted by a `CDPTransportInterface` — the raw text pipe a `CDPClientInterface` sends and receives JSON-RPC frames over.
|
|
909
|
-
| `CDPTransportInterface` | interface | Represents the text pipe a `CDPClient` sends and receives JSON-RPC frames over.
|
|
910
|
-
| `CDPClientEventMap` | type | Maps the events a `CDPClientInterface` emits.
|
|
911
|
-
| `CDPClientOptions` | interface | Describes the options for creating a `CDPClient` instance.
|
|
912
|
-
| `CDPSendOptions` | interface | Describes the options for one CDP method call.
|
|
913
|
-
| `CDPHandler` | type | Receives a subscribed CDP event with its params record.
|
|
914
|
-
| `CDPTarget` | interface | Represents one entry of the CDP `Target.getTargets` result.
|
|
915
|
-
| `CDPClientInterface` | interface | Provides a lightweight Chrome DevTools Protocol client over a `CDPTransportInterface`.
|
|
916
|
-
| `BrowserTransitionFunction` | type | Runs the work one `BrowserTransitionInterface` transition performs.
|
|
917
|
-
| `BrowserTransitionInterface` | interface | Represents one asynchronous transition shared by every caller that arrives while it runs.
|
|
918
|
-
| `BrowserWriterInterface` | interface | Provides a pluggable sink for persisting captured browser bytes to a path.
|
|
919
|
-
| `BrowserViewport` | interface | Describes the viewport dimensions for a browser page.
|
|
920
|
-
| `BrowserWaitUntil` | type | Names the page load condition for navigation — the CDP load event awaited by `navigate()`.
|
|
921
|
-
| `BrowserPageOptions` | interface | Describes the options for creating a `BrowserPage` instance.
|
|
922
|
-
| `BrowserNavigationOptions` | interface | Describes the options for page navigation.
|
|
923
|
-
| `BrowserNavigationResult` | interface | Describes the outcome of a top-level navigation command.
|
|
924
|
-
| `BrowserNavigationWatch` | interface | Holds the state retained while correlating navigation with Network events.
|
|
925
|
-
| `BrowserNavigationWait` | interface | Represents one pending navigation or network-idle wait.
|
|
926
|
-
| `BrowserLoaderFunction` | type | Reads the loader id of the page's current document, undefined before the first commit.
|
|
927
|
-
| `BrowserNavigationManagerInterface` | interface | Provides URL and network-idle waits associated with one page.
|
|
928
|
-
| `BrowserNavigationRecordInterface` | interface | Settles the navigation an input into one frame started, from the steps the page accepted after the record opened.
|
|
929
|
-
| `BrowserPopupManagerInterface` | interface | Opens the records that settle the popups an input into a page opens.
|
|
930
|
-
| `BrowserPopupRecordInterface` | interface | Settles the popups an input opened, from the `Page.windowOpen` reports the page's own session sends after the record opened.
|
|
931
|
-
| `BrowserDestinationRelationship` | type | Names the frame a submission targets relative to the frame whose document submitted, mirroring the HTML `_self`, `_parent`, and `_top` keywords.
|
|
932
|
-
| `BrowserDestination` | interface | Pairs a document that recorded a surviving submission with the submission's destination.
|
|
933
|
-
| `BrowserSettlementOptions` | interface | Configures a record's settlement.
|
|
934
|
-
| `BrowserNavigationStage` | type | Names how far a settled navigation got: requested, committed, or loaded.
|
|
935
|
-
| `BrowserNavigationReason` | type | Names why a frame requested a navigation, mirroring the CDP `Page.ClientNavigationReason` values that `Page.frameRequestedNavigation` carries as of Chromium 141.
|
|
936
|
-
| `BrowserSettlementResult` | interface | Describes the navigation a record settled.
|
|
937
|
-
| `BrowserNavigationEventMap` | type | Maps the navigation steps a page accepts from the session that owns each frame, which it hands to its navigation and element managers.
|
|
938
|
-
| `BrowserInputOptions` | interface | Describes the options shared by every trusted input operation.
|
|
939
|
-
| `BrowserClickOptions` | interface | Describes the options for a trusted mouse click.
|
|
940
|
-
| `BrowserDragOptions` | interface | Describes the options for a trusted mouse drag.
|
|
941
|
-
| `BrowserScreenshotOptions` | interface | Describes the options for taking a page screenshot.
|
|
942
|
-
| `BrowserScreenshotResult` | interface | Describes the result of a page screenshot.
|
|
943
|
-
| `BrowserTeardownFunction` | type | Runs one teardown step to settlement while the first failure is retained.
|
|
944
|
-
| `BrowserHandleInterface` | interface | Represents a remote JavaScript object retained in one frame execution context.
|
|
945
|
-
| `BrowserBindingHandler` | type | Runs a host function exposed into page JavaScript.
|
|
946
|
-
| `BrowserBindingCall` | interface | Describes a decoded page-to-host binding call.
|
|
947
|
-
| `BrowserScriptManagerInterface` | interface | Manages initialization scripts and host bindings for one page.
|
|
948
|
-
| `BrowserScriptEntry` | interface | Represents one installed new-document script and its optional host binding owner.
|
|
949
|
-
| `BrowserAXNode` | interface | Represents one decoded Chromium accessibility node.
|
|
950
|
-
| `BrowserAccessibilitySnapshot` | interface | Describes a serializable accessibility-tree snapshot.
|
|
951
|
-
| `BrowserAccessibilityOptions` | interface | Describes the options for an accessibility snapshot.
|
|
952
|
-
| `BrowserAccessibilityInterface` | interface | Inspects the accessibility tree.
|
|
953
|
-
| `BrowserTracingOptions` | interface | Describes the options for a Chromium trace capture.
|
|
954
|
-
| `BrowserTracingResult` | interface | Describes the result of a trace capture.
|
|
955
|
-
| `BrowserStreamChunk` | interface | Represents one decoded IO stream read.
|
|
956
|
-
| `BrowserTracingInterface` | interface | Drives the trace capture lifecycle.
|
|
957
|
-
| `BrowserCoverageRange` | interface | Describes a source range reported by JavaScript or CSS coverage.
|
|
958
|
-
| `BrowserFunctionCoverage` | interface | Describes function coverage inside one script.
|
|
959
|
-
| `BrowserScriptCoverage` | interface | Describes JavaScript script coverage.
|
|
960
|
-
| `BrowserStyleCoverage` | interface | Describes CSS stylesheet coverage.
|
|
961
|
-
| `BrowserCoverageOptions` | interface | Describes the options for a coverage capture.
|
|
962
|
-
| `BrowserCoverageResult` | interface | Describes combined JavaScript and CSS usage.
|
|
963
|
-
| `BrowserCoverageInterface` | interface | Drives the coverage capture lifecycle.
|
|
964
|
-
| `BrowserMetric` | interface | Represents one Performance-domain metric.
|
|
965
|
-
| `BrowserProfileFrame` | interface | Describes a JavaScript call frame from a CPU profile.
|
|
966
|
-
| `BrowserProfileNode` | interface | Represents one node in a sampled CPU profile.
|
|
967
|
-
| `BrowserProfile` | interface | Describes a sampled CPU profile.
|
|
968
|
-
| `BrowserPerformanceInterface` | interface | Reads Performance-domain metrics.
|
|
969
|
-
| `BrowserProfilerInterface` | interface | Drives the sampled CPU profile lifecycle.
|
|
970
|
-
| `BrowserDiagnosticsInterface` | interface | Groups the diagnostics by capability.
|
|
971
|
-
| `BrowserClockInterface` | interface | Controls Chromium virtual time for deterministic page timers.
|
|
972
|
-
| `BrowserPoint` | interface | Describes a point in viewport CSS pixels.
|
|
973
|
-
| `BrowserMouseButton` | type | Names a mouse button understood by Chromium's Input domain.
|
|
974
|
-
| `BrowserScreenshotScale` | type | Names a screenshot coordinate scale.
|
|
975
|
-
| `BrowserKey` | interface | Describes normalized CDP keyboard key data.
|
|
976
|
-
| `BrowserChord` | interface | Describes a parsed keyboard chord.
|
|
977
|
-
| `BrowserOperationOptions` | type | Collects every option a trusted-input operation can carry.
|
|
978
|
-
| `BrowserKeyboardInterface` | interface | Provides keyboard input operations bound to one frame target session.
|
|
979
|
-
| `BrowserMouseInterface` | interface | Provides mouse input operations bound to one frame target session.
|
|
980
|
-
| `BrowserTouchInterface` | interface | Provides touch input operations bound to one frame target session.
|
|
981
|
-
| `BrowserActionabilityOptions` | interface | Describes the actionability checks performed before element input.
|
|
982
|
-
| `BrowserQuad` | interface | Describes a decoded content quad and its actionable center.
|
|
983
|
-
| `BrowserMargin` | interface | Describes the paper margin lengths accepted by Chromium print-to-PDF.
|
|
984
|
-
| `BrowserPDFOptions` | interface | Describes the options for printing a Chromium page to PDF.
|
|
985
|
-
| `BrowserPDFResult` | interface | Describes the result of printing a page to PDF.
|
|
986
|
-
| `BrowserDialogCategory` | type | Names a JavaScript dialog category reported by Chromium.
|
|
987
|
-
| `BrowserDialogInterface` | interface | Represents one active JavaScript dialog.
|
|
988
|
-
| `BrowserFileChooserInterface` | interface | Represents one intercepted file chooser.
|
|
989
|
-
| `BrowserDownloadStatus` | type | Names a download lifecycle phase.
|
|
990
|
-
| `BrowserDownloadEventMap` | type | Maps the download progress events.
|
|
991
|
-
| `BrowserDownloadProgress` | interface | Describes a protocol-neutral download progress update.
|
|
992
|
-
| `BrowserDownloadStart` | interface | Describes a decoded `Browser.downloadWillBegin` event.
|
|
993
|
-
| `BrowserDownloadInterface` | interface | Represents one context download tracked through Chromium's Browser domain.
|
|
994
|
-
| `BrowserConsoleMessage` | interface | Represents one console API call.
|
|
995
|
-
| `BrowserStackFrame` | interface | Represents one browser-side stack frame.
|
|
996
|
-
| `BrowserPageError` | interface | Represents one uncaught page exception.
|
|
997
|
-
| `BrowserWorkerCategory` | type | Names a worker target category.
|
|
998
|
-
| `BrowserWorkerInterface` | interface | Represents a script worker attached to a page target.
|
|
999
|
-
| `BrowserPageEventMap` | type | Maps the typed page, frame, target, and user-visible browser events.
|
|
1000
|
-
| `BrowserRequest` | interface | Represents one observed browser request.
|
|
1001
|
-
| `BrowserSecurity` | interface | Describes the TLS details supplied with a browser response.
|
|
1002
|
-
| `BrowserTimingRange` | interface | Describes the start/end pair for one network timing phase.
|
|
1003
|
-
| `BrowserTiming` | interface | Holds network timing values in milliseconds relative to request time.
|
|
1004
|
-
| `BrowserResponse` | interface | Represents one observed browser response.
|
|
1005
|
-
| `BrowserRequestFailure` | interface | Represents one failed browser request.
|
|
1006
|
-
| `BrowserWebSocketFrame` | interface | Describes a WebSocket frame payload.
|
|
1007
|
-
| `BrowserWebSocketEventMap` | type | Maps the WebSocket lifecycle events.
|
|
1008
|
-
| `BrowserWebSocketInterface` | interface | Represents one observed WebSocket connection.
|
|
1009
|
-
| `BrowserNetworkEventMap` | type | Maps the network events a page's network manager emits.
|
|
1010
|
-
| `BrowserRouteQuery` | interface | Describes route matching criteria. Omitted fields match all values.
|
|
1011
|
-
| `BrowserRouteContinueOptions` | interface | Describes the overrides supplied when continuing an intercepted request.
|
|
1012
|
-
| `BrowserRouteFulfillOptions` | interface | Describes the synthetic response supplied when fulfilling an intercepted request.
|
|
1013
|
-
| `BrowserRouteInterface` | interface | Represents one paused Fetch-domain request.
|
|
1014
|
-
| `BrowserRouteHandler` | type | Runs for a matching intercepted request.
|
|
1015
|
-
| `BrowserRouteDefinition` | interface | Represents one installed network route.
|
|
1016
|
-
| `BrowserHAROptions` | interface | Describes the options for a HAR recording.
|
|
1017
|
-
| `BrowserHARValue` | interface | Represents one name/value pair in an HTTP archive.
|
|
1018
|
-
| `BrowserHARCookie` | interface | Represents one cookie in an HTTP archive.
|
|
1019
|
-
| `BrowserHARPost` | interface | Describes request body metadata in an HTTP archive.
|
|
1020
|
-
| `BrowserHARContent` | interface | Describes response body metadata in an HTTP archive.
|
|
1021
|
-
| `BrowserHARRequest` | interface | Describes a HAR 1.2 request entry.
|
|
1022
|
-
| `BrowserHARResponse` | interface | Describes a HAR 1.2 response entry.
|
|
1023
|
-
| `BrowserHARTimings` | interface | Holds HAR 1.2 phase timings in milliseconds.
|
|
1024
|
-
| `BrowserHAREntry` | interface | Represents one completed HTTP exchange in a HAR recording.
|
|
1025
|
-
| `BrowserHARPending` | interface | Holds recording state until a request finishes; a new value replaces it on each update.
|
|
1026
|
-
| `BrowserHARCreator` | interface | Describes the tool identity embedded in an HTTP archive.
|
|
1027
|
-
| `BrowserHARLog` | interface | Describes the HAR 1.2 log object.
|
|
1028
|
-
| `BrowserHAR` | interface | Describes the standards-shaped HAR 1.2 document produced by the network manager.
|
|
1029
|
-
| `BrowserHARReplayOptions` | interface | Describes HAR replay behavior.
|
|
1030
|
-
| `BrowserHARManagerInterface` | interface | Provides HAR recording and replay operations.
|
|
1031
|
-
| `BrowserNetworkManagerInterface` | interface | Provides page-scoped network observation and interception.
|
|
1032
|
-
| `BrowserSameSite` | type | Names a cookie same-site policy understood by Chromium.
|
|
1033
|
-
| `BrowserCookiePartition` | interface | Describes a cookie partition key used by CHIPS-partitioned cookies.
|
|
1034
|
-
| `BrowserCookie` | interface | Represents one cookie returned from a browser context.
|
|
1035
|
-
| `BrowserCookieInput` | interface | Describes the input used to create or replace a browser cookie.
|
|
1036
|
-
| `BrowserCookieFilter` | interface | Describes optional narrowing criteria for clearing context cookies.
|
|
1037
|
-
| `BrowserCookieManagerInterface` | interface | Provides cookie operations scoped to one browser context.
|
|
1038
|
-
| `BrowserPermissionManagerInterface` | interface | Provides permission override operations scoped to one browser context.
|
|
1039
|
-
| `BrowserStorageEntry` | interface | Represents one key/value pair from web storage.
|
|
1040
|
-
| `BrowserStorageOrigin` | interface | Describes an origin-scoped local and session storage snapshot.
|
|
1041
|
-
| `BrowserStorageState` | interface | Describes a portable browser authentication and storage snapshot.
|
|
1042
|
-
| `BrowserStorageOptions` | interface | Describes the options for collecting storage state from selected origins.
|
|
1043
|
-
| `BrowserStorageManagerInterface` | interface | Provides storage-state import, export, and clearing operations.
|
|
1044
|
-
| `BrowserCredentials` | interface | Describes the HTTP basic-auth credentials applied to context pages.
|
|
1045
|
-
| `BrowserGeolocation` | interface | Describes a geographic location override.
|
|
1046
|
-
| `BrowserMedia` | interface | Describes browser color and media feature overrides.
|
|
1047
|
-
| `BrowserUserAgent` | interface | Describes user-agent metadata accepted by Chromium emulation.
|
|
1048
|
-
| `BrowserEmulationOptions` | interface | Describes network and rendering overrides inherited by context pages.
|
|
1049
|
-
| `BrowserPagesFunction` | type | Returns the context's live pages at call time.
|
|
1050
|
-
| `BrowserEmulationManagerInterface` | interface | Configures context-scoped emulation.
|
|
1051
|
-
| `BrowserProxy` | interface | Describes proxy settings used when creating an isolated browser context.
|
|
1052
|
-
| `BrowserDownloadOptions` | interface | Describes the download policy for a browser context.
|
|
1053
|
-
| `BrowserContextOptions` | interface | Describes the options for creating and configuring an isolated browser context.
|
|
1054
|
-
| `
|
|
1055
|
-
| `
|
|
1056
|
-
| `
|
|
1057
|
-
| `
|
|
1058
|
-
| `
|
|
1059
|
-
| `
|
|
1060
|
-
| `
|
|
1061
|
-
| `
|
|
1062
|
-
| `
|
|
1063
|
-
| `
|
|
1064
|
-
| `
|
|
1065
|
-
| `
|
|
1066
|
-
| `
|
|
1067
|
-
| `
|
|
1068
|
-
| `
|
|
1069
|
-
| `
|
|
1070
|
-
| `
|
|
1071
|
-
| `
|
|
1072
|
-
| `
|
|
1073
|
-
| `
|
|
1074
|
-
| `
|
|
1075
|
-
| `
|
|
1076
|
-
| `
|
|
1077
|
-
| `
|
|
1078
|
-
| `
|
|
1079
|
-
| `
|
|
1080
|
-
| `
|
|
1081
|
-
| `
|
|
1082
|
-
| `
|
|
1083
|
-
| `
|
|
1084
|
-
| `
|
|
1085
|
-
| `
|
|
1086
|
-
| `
|
|
1087
|
-
| `
|
|
1088
|
-
| `
|
|
1089
|
-
| `
|
|
1090
|
-
| `
|
|
1091
|
-
| `
|
|
1092
|
-
| `
|
|
1093
|
-
| `
|
|
1094
|
-
| `
|
|
1095
|
-
| `
|
|
1096
|
-
| `
|
|
1097
|
-
| `
|
|
1098
|
-
| `
|
|
1099
|
-
| `
|
|
1100
|
-
| `
|
|
1101
|
-
| `
|
|
1102
|
-
| `
|
|
1103
|
-
| `
|
|
1104
|
-
| `
|
|
1105
|
-
| `
|
|
1106
|
-
| `
|
|
1107
|
-
| `
|
|
1108
|
-
| `
|
|
1109
|
-
| `
|
|
1110
|
-
| `
|
|
1111
|
-
| `
|
|
1112
|
-
| `
|
|
1113
|
-
| `
|
|
1114
|
-
| `
|
|
1115
|
-
| `
|
|
1116
|
-
| `
|
|
1117
|
-
| `
|
|
1118
|
-
| `
|
|
1119
|
-
| `
|
|
1120
|
-
| `
|
|
1121
|
-
| `
|
|
1122
|
-
| `
|
|
1123
|
-
| `
|
|
1124
|
-
| `
|
|
1125
|
-
| `
|
|
1126
|
-
| `
|
|
1127
|
-
| `
|
|
1128
|
-
| `
|
|
1129
|
-
| `
|
|
1130
|
-
| `
|
|
1131
|
-
| `
|
|
1132
|
-
| `
|
|
1133
|
-
| `
|
|
1134
|
-
| `
|
|
1135
|
-
| `
|
|
1136
|
-
| `
|
|
1137
|
-
| `
|
|
1138
|
-
| `
|
|
1139
|
-
| `
|
|
1140
|
-
| `
|
|
1141
|
-
| `
|
|
1142
|
-
| `
|
|
1143
|
-
| `
|
|
1144
|
-
| `
|
|
1145
|
-
| `
|
|
1146
|
-
| `
|
|
1147
|
-
| `
|
|
1148
|
-
| `
|
|
1149
|
-
| `
|
|
1150
|
-
| `
|
|
1151
|
-
| `
|
|
1152
|
-
| `
|
|
1153
|
-
| `
|
|
1154
|
-
| `
|
|
1155
|
-
| `
|
|
1156
|
-
| `
|
|
1157
|
-
| `
|
|
907
|
+
| API | Kind | Summary |
|
|
908
|
+
| ----------------------------------- | --------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
909
|
+
| `CDPTransportEventMap` | type | Maps the events emitted by a `CDPTransportInterface` — the raw text pipe a `CDPClientInterface` sends and receives JSON-RPC frames over. |
|
|
910
|
+
| `CDPTransportInterface` | interface | Represents the text pipe a `CDPClient` sends and receives JSON-RPC frames over. |
|
|
911
|
+
| `CDPClientEventMap` | type | Maps the events a `CDPClientInterface` emits. |
|
|
912
|
+
| `CDPClientOptions` | interface | Describes the options for creating a `CDPClient` instance. |
|
|
913
|
+
| `CDPSendOptions` | interface | Describes the options for one CDP method call. |
|
|
914
|
+
| `CDPHandler` | type | Receives a subscribed CDP event with its params record. |
|
|
915
|
+
| `CDPTarget` | interface | Represents one entry of the CDP `Target.getTargets` result. |
|
|
916
|
+
| `CDPClientInterface` | interface | Provides a lightweight Chrome DevTools Protocol client over a `CDPTransportInterface`. |
|
|
917
|
+
| `BrowserTransitionFunction` | type | Runs the work one `BrowserTransitionInterface` transition performs. |
|
|
918
|
+
| `BrowserTransitionInterface` | interface | Represents one asynchronous transition shared by every caller that arrives while it runs. |
|
|
919
|
+
| `BrowserWriterInterface` | interface | Provides a pluggable sink for persisting captured browser bytes to a path. |
|
|
920
|
+
| `BrowserViewport` | interface | Describes the viewport dimensions for a browser page. |
|
|
921
|
+
| `BrowserWaitUntil` | type | Names the page load condition for navigation — the CDP load event awaited by `navigate()`. |
|
|
922
|
+
| `BrowserPageOptions` | interface | Describes the options for creating a `BrowserPage` instance. |
|
|
923
|
+
| `BrowserNavigationOptions` | interface | Describes the options for page navigation. |
|
|
924
|
+
| `BrowserNavigationResult` | interface | Describes the outcome of a top-level navigation command. |
|
|
925
|
+
| `BrowserNavigationWatch` | interface | Holds the state retained while correlating navigation with Network events. |
|
|
926
|
+
| `BrowserNavigationWait` | interface | Represents one pending navigation or network-idle wait. |
|
|
927
|
+
| `BrowserLoaderFunction` | type | Reads the loader id of the page's current document, undefined before the first commit. |
|
|
928
|
+
| `BrowserNavigationManagerInterface` | interface | Provides URL and network-idle waits associated with one page. |
|
|
929
|
+
| `BrowserNavigationRecordInterface` | interface | Settles the navigation an input into one frame started, from the steps the page accepted after the record opened. |
|
|
930
|
+
| `BrowserPopupManagerInterface` | interface | Opens the records that settle the popups an input into a page opens. |
|
|
931
|
+
| `BrowserPopupRecordInterface` | interface | Settles the popups an input opened, from the `Page.windowOpen` reports the page's own session sends after the record opened. |
|
|
932
|
+
| `BrowserDestinationRelationship` | type | Names the frame a submission targets relative to the frame whose document submitted, mirroring the HTML `_self`, `_parent`, and `_top` keywords. |
|
|
933
|
+
| `BrowserDestination` | interface | Pairs a document that recorded a surviving submission with the submission's destination. |
|
|
934
|
+
| `BrowserSettlementOptions` | interface | Configures a record's settlement. |
|
|
935
|
+
| `BrowserNavigationStage` | type | Names how far a settled navigation got: requested, committed, or loaded. |
|
|
936
|
+
| `BrowserNavigationReason` | type | Names why a frame requested a navigation, mirroring the CDP `Page.ClientNavigationReason` values that `Page.frameRequestedNavigation` carries as of Chromium 141. |
|
|
937
|
+
| `BrowserSettlementResult` | interface | Describes the navigation a record settled. |
|
|
938
|
+
| `BrowserNavigationEventMap` | type | Maps the navigation steps a page accepts from the session that owns each frame, which it hands to its navigation and element managers. |
|
|
939
|
+
| `BrowserInputOptions` | interface | Describes the options shared by every trusted input operation. |
|
|
940
|
+
| `BrowserClickOptions` | interface | Describes the options for a trusted mouse click. |
|
|
941
|
+
| `BrowserDragOptions` | interface | Describes the options for a trusted mouse drag. |
|
|
942
|
+
| `BrowserScreenshotOptions` | interface | Describes the options for taking a page screenshot. |
|
|
943
|
+
| `BrowserScreenshotResult` | interface | Describes the result of a page screenshot. |
|
|
944
|
+
| `BrowserTeardownFunction` | type | Runs one teardown step to settlement while the first failure is retained. |
|
|
945
|
+
| `BrowserHandleInterface` | interface | Represents a remote JavaScript object retained in one frame execution context. |
|
|
946
|
+
| `BrowserBindingHandler` | type | Runs a host function exposed into page JavaScript. |
|
|
947
|
+
| `BrowserBindingCall` | interface | Describes a decoded page-to-host binding call. |
|
|
948
|
+
| `BrowserScriptManagerInterface` | interface | Manages initialization scripts and host bindings for one page. |
|
|
949
|
+
| `BrowserScriptEntry` | interface | Represents one installed new-document script and its optional host binding owner. |
|
|
950
|
+
| `BrowserAXNode` | interface | Represents one decoded Chromium accessibility node. |
|
|
951
|
+
| `BrowserAccessibilitySnapshot` | interface | Describes a serializable accessibility-tree snapshot. |
|
|
952
|
+
| `BrowserAccessibilityOptions` | interface | Describes the options for an accessibility snapshot. |
|
|
953
|
+
| `BrowserAccessibilityInterface` | interface | Inspects the accessibility tree. |
|
|
954
|
+
| `BrowserTracingOptions` | interface | Describes the options for a Chromium trace capture. |
|
|
955
|
+
| `BrowserTracingResult` | interface | Describes the result of a trace capture. |
|
|
956
|
+
| `BrowserStreamChunk` | interface | Represents one decoded IO stream read. |
|
|
957
|
+
| `BrowserTracingInterface` | interface | Drives the trace capture lifecycle. |
|
|
958
|
+
| `BrowserCoverageRange` | interface | Describes a source range reported by JavaScript or CSS coverage. |
|
|
959
|
+
| `BrowserFunctionCoverage` | interface | Describes function coverage inside one script. |
|
|
960
|
+
| `BrowserScriptCoverage` | interface | Describes JavaScript script coverage. |
|
|
961
|
+
| `BrowserStyleCoverage` | interface | Describes CSS stylesheet coverage. |
|
|
962
|
+
| `BrowserCoverageOptions` | interface | Describes the options for a coverage capture. |
|
|
963
|
+
| `BrowserCoverageResult` | interface | Describes combined JavaScript and CSS usage. |
|
|
964
|
+
| `BrowserCoverageInterface` | interface | Drives the coverage capture lifecycle. |
|
|
965
|
+
| `BrowserMetric` | interface | Represents one Performance-domain metric. |
|
|
966
|
+
| `BrowserProfileFrame` | interface | Describes a JavaScript call frame from a CPU profile. |
|
|
967
|
+
| `BrowserProfileNode` | interface | Represents one node in a sampled CPU profile. |
|
|
968
|
+
| `BrowserProfile` | interface | Describes a sampled CPU profile. |
|
|
969
|
+
| `BrowserPerformanceInterface` | interface | Reads Performance-domain metrics. |
|
|
970
|
+
| `BrowserProfilerInterface` | interface | Drives the sampled CPU profile lifecycle. |
|
|
971
|
+
| `BrowserDiagnosticsInterface` | interface | Groups the diagnostics by capability. |
|
|
972
|
+
| `BrowserClockInterface` | interface | Controls Chromium virtual time for deterministic page timers. |
|
|
973
|
+
| `BrowserPoint` | interface | Describes a point in viewport CSS pixels. |
|
|
974
|
+
| `BrowserMouseButton` | type | Names a mouse button understood by Chromium's Input domain. |
|
|
975
|
+
| `BrowserScreenshotScale` | type | Names a screenshot coordinate scale. |
|
|
976
|
+
| `BrowserKey` | interface | Describes normalized CDP keyboard key data. |
|
|
977
|
+
| `BrowserChord` | interface | Describes a parsed keyboard chord. |
|
|
978
|
+
| `BrowserOperationOptions` | type | Collects every option a trusted-input operation can carry. |
|
|
979
|
+
| `BrowserKeyboardInterface` | interface | Provides keyboard input operations bound to one frame target session. |
|
|
980
|
+
| `BrowserMouseInterface` | interface | Provides mouse input operations bound to one frame target session. |
|
|
981
|
+
| `BrowserTouchInterface` | interface | Provides touch input operations bound to one frame target session. |
|
|
982
|
+
| `BrowserActionabilityOptions` | interface | Describes the actionability checks performed before element input. |
|
|
983
|
+
| `BrowserQuad` | interface | Describes a decoded content quad and its actionable center. |
|
|
984
|
+
| `BrowserMargin` | interface | Describes the paper margin lengths accepted by Chromium print-to-PDF. |
|
|
985
|
+
| `BrowserPDFOptions` | interface | Describes the options for printing a Chromium page to PDF. |
|
|
986
|
+
| `BrowserPDFResult` | interface | Describes the result of printing a page to PDF. |
|
|
987
|
+
| `BrowserDialogCategory` | type | Names a JavaScript dialog category reported by Chromium. |
|
|
988
|
+
| `BrowserDialogInterface` | interface | Represents one active JavaScript dialog. |
|
|
989
|
+
| `BrowserFileChooserInterface` | interface | Represents one intercepted file chooser. |
|
|
990
|
+
| `BrowserDownloadStatus` | type | Names a download lifecycle phase. |
|
|
991
|
+
| `BrowserDownloadEventMap` | type | Maps the download progress events. |
|
|
992
|
+
| `BrowserDownloadProgress` | interface | Describes a protocol-neutral download progress update. |
|
|
993
|
+
| `BrowserDownloadStart` | interface | Describes a decoded `Browser.downloadWillBegin` event. |
|
|
994
|
+
| `BrowserDownloadInterface` | interface | Represents one context download tracked through Chromium's Browser domain. |
|
|
995
|
+
| `BrowserConsoleMessage` | interface | Represents one console API call. |
|
|
996
|
+
| `BrowserStackFrame` | interface | Represents one browser-side stack frame. |
|
|
997
|
+
| `BrowserPageError` | interface | Represents one uncaught page exception. |
|
|
998
|
+
| `BrowserWorkerCategory` | type | Names a worker target category. |
|
|
999
|
+
| `BrowserWorkerInterface` | interface | Represents a script worker attached to a page target. |
|
|
1000
|
+
| `BrowserPageEventMap` | type | Maps the typed page, frame, target, and user-visible browser events. |
|
|
1001
|
+
| `BrowserRequest` | interface | Represents one observed browser request. |
|
|
1002
|
+
| `BrowserSecurity` | interface | Describes the TLS details supplied with a browser response. |
|
|
1003
|
+
| `BrowserTimingRange` | interface | Describes the start/end pair for one network timing phase. |
|
|
1004
|
+
| `BrowserTiming` | interface | Holds network timing values in milliseconds relative to request time. |
|
|
1005
|
+
| `BrowserResponse` | interface | Represents one observed browser response. |
|
|
1006
|
+
| `BrowserRequestFailure` | interface | Represents one failed browser request. |
|
|
1007
|
+
| `BrowserWebSocketFrame` | interface | Describes a WebSocket frame payload. |
|
|
1008
|
+
| `BrowserWebSocketEventMap` | type | Maps the WebSocket lifecycle events. |
|
|
1009
|
+
| `BrowserWebSocketInterface` | interface | Represents one observed WebSocket connection. |
|
|
1010
|
+
| `BrowserNetworkEventMap` | type | Maps the network events a page's network manager emits. |
|
|
1011
|
+
| `BrowserRouteQuery` | interface | Describes route matching criteria. Omitted fields match all values. |
|
|
1012
|
+
| `BrowserRouteContinueOptions` | interface | Describes the overrides supplied when continuing an intercepted request. |
|
|
1013
|
+
| `BrowserRouteFulfillOptions` | interface | Describes the synthetic response supplied when fulfilling an intercepted request. |
|
|
1014
|
+
| `BrowserRouteInterface` | interface | Represents one paused Fetch-domain request. |
|
|
1015
|
+
| `BrowserRouteHandler` | type | Runs for a matching intercepted request. |
|
|
1016
|
+
| `BrowserRouteDefinition` | interface | Represents one installed network route. |
|
|
1017
|
+
| `BrowserHAROptions` | interface | Describes the options for a HAR recording. |
|
|
1018
|
+
| `BrowserHARValue` | interface | Represents one name/value pair in an HTTP archive. |
|
|
1019
|
+
| `BrowserHARCookie` | interface | Represents one cookie in an HTTP archive. |
|
|
1020
|
+
| `BrowserHARPost` | interface | Describes request body metadata in an HTTP archive. |
|
|
1021
|
+
| `BrowserHARContent` | interface | Describes response body metadata in an HTTP archive. |
|
|
1022
|
+
| `BrowserHARRequest` | interface | Describes a HAR 1.2 request entry. |
|
|
1023
|
+
| `BrowserHARResponse` | interface | Describes a HAR 1.2 response entry. |
|
|
1024
|
+
| `BrowserHARTimings` | interface | Holds HAR 1.2 phase timings in milliseconds. |
|
|
1025
|
+
| `BrowserHAREntry` | interface | Represents one completed HTTP exchange in a HAR recording. |
|
|
1026
|
+
| `BrowserHARPending` | interface | Holds recording state until a request finishes; a new value replaces it on each update. |
|
|
1027
|
+
| `BrowserHARCreator` | interface | Describes the tool identity embedded in an HTTP archive. |
|
|
1028
|
+
| `BrowserHARLog` | interface | Describes the HAR 1.2 log object. |
|
|
1029
|
+
| `BrowserHAR` | interface | Describes the standards-shaped HAR 1.2 document produced by the network manager. |
|
|
1030
|
+
| `BrowserHARReplayOptions` | interface | Describes HAR replay behavior. |
|
|
1031
|
+
| `BrowserHARManagerInterface` | interface | Provides HAR recording and replay operations. |
|
|
1032
|
+
| `BrowserNetworkManagerInterface` | interface | Provides page-scoped network observation and interception. |
|
|
1033
|
+
| `BrowserSameSite` | type | Names a cookie same-site policy understood by Chromium. |
|
|
1034
|
+
| `BrowserCookiePartition` | interface | Describes a cookie partition key used by CHIPS-partitioned cookies. |
|
|
1035
|
+
| `BrowserCookie` | interface | Represents one cookie returned from a browser context. |
|
|
1036
|
+
| `BrowserCookieInput` | interface | Describes the input used to create or replace a browser cookie. |
|
|
1037
|
+
| `BrowserCookieFilter` | interface | Describes optional narrowing criteria for clearing context cookies. |
|
|
1038
|
+
| `BrowserCookieManagerInterface` | interface | Provides cookie operations scoped to one browser context. |
|
|
1039
|
+
| `BrowserPermissionManagerInterface` | interface | Provides permission override operations scoped to one browser context. |
|
|
1040
|
+
| `BrowserStorageEntry` | interface | Represents one key/value pair from web storage. |
|
|
1041
|
+
| `BrowserStorageOrigin` | interface | Describes an origin-scoped local and session storage snapshot. |
|
|
1042
|
+
| `BrowserStorageState` | interface | Describes a portable browser authentication and storage snapshot. |
|
|
1043
|
+
| `BrowserStorageOptions` | interface | Describes the options for collecting storage state from selected origins. |
|
|
1044
|
+
| `BrowserStorageManagerInterface` | interface | Provides storage-state import, export, and clearing operations. |
|
|
1045
|
+
| `BrowserCredentials` | interface | Describes the HTTP basic-auth credentials applied to context pages. |
|
|
1046
|
+
| `BrowserGeolocation` | interface | Describes a geographic location override. |
|
|
1047
|
+
| `BrowserMedia` | interface | Describes browser color and media feature overrides. |
|
|
1048
|
+
| `BrowserUserAgent` | interface | Describes user-agent metadata accepted by Chromium emulation. |
|
|
1049
|
+
| `BrowserEmulationOptions` | interface | Describes network and rendering overrides inherited by context pages. |
|
|
1050
|
+
| `BrowserPagesFunction` | type | Returns the context's live pages at call time. |
|
|
1051
|
+
| `BrowserEmulationManagerInterface` | interface | Configures context-scoped emulation. |
|
|
1052
|
+
| `BrowserProxy` | interface | Describes proxy settings used when creating an isolated browser context. |
|
|
1053
|
+
| `BrowserDownloadOptions` | interface | Describes the download policy for a browser context. |
|
|
1054
|
+
| `BrowserContextOptions` | interface | Describes the options for creating and configuring an isolated browser context. |
|
|
1055
|
+
| `BrowserContextDisposal` | type | Records Chromium's disposal acknowledgement or the failure that left disposal unconfirmed. |
|
|
1056
|
+
| `BrowserContextEventMap` | type | Maps the browser-context lifecycle events. |
|
|
1057
|
+
| `BrowserJourneyBinding` | type | Binds a native action's string argument to a literal or to one declared parameter by name. |
|
|
1058
|
+
| `BrowserJourneyParameter` | interface | Declares one parameter a journey takes: its default, or none when it is a secret. |
|
|
1059
|
+
| `BrowserJourneyTarget` | interface | Names the element an acting step acts on the way a receipt names it, with the record-time evidence a developer reads when a resolution is refused. |
|
|
1060
|
+
| `BrowserJourneyTab` | interface | Names the tab a `switch` step moves to, portably. |
|
|
1061
|
+
| `BrowserJourneyStepInput` | interface | Describes one step before it holds an id: a call of a toolset tool with its element or tab named as data. |
|
|
1062
|
+
| `BrowserJourneyStep` | interface | Describes a step with its identity: `s` followed by a positive integer, stable across edits and never reused. |
|
|
1063
|
+
| `BrowserJourney` | interface | Describes one user intent as data; `next` is the number the next added step takes. |
|
|
1064
|
+
| `BrowserJourneyRevision` | interface | Carries a journey with the revision the store assigned; `revision` is absent for a journey the store never held. |
|
|
1065
|
+
| `BrowserJourneyEdit` | type | Describes one change to a journey; `editBrowserJourney` applies a batch to a copy, in order, and refuses it whole on the first invalid edit. |
|
|
1066
|
+
| `BrowserJourneyEditRequest` | type | Describes an edit as the `edit` tool receives it over the wire: an added or updated step can name `ref` instead of a target, converted from the current view before the pure editor runs. |
|
|
1067
|
+
| `BrowserRecorderEventMap` | type | Maps the events a recorder emits. |
|
|
1068
|
+
| `BrowserRecorderInterface` | interface | Records the steps of a journey from one source as they happen and turns them into a journey. |
|
|
1069
|
+
| `BrowserRecorderOptions` | interface | Configures a recorder. |
|
|
1070
|
+
| `BrowserAction` | interface | Describes what became of one action the toolset performed. |
|
|
1071
|
+
| `BrowserStepOutcome` | type | Names how one step ended. |
|
|
1072
|
+
| `BrowserRunOutcome` | type | Names how a run ended. |
|
|
1073
|
+
| `BrowserToolsetResult` | interface | Carries a performed call's tool result beside its structured action, present when the call reached a handler, and the value a failed handler threw. |
|
|
1074
|
+
| `BrowserHoldInterface` | interface | Owns the toolset while a replay runs; `destroy` releases it. |
|
|
1075
|
+
| `BrowserRunStep` | interface | Describes one replayed step; `action`, `trigger`, and `result` carry the meaning of the skill's `JournalStep` fields. |
|
|
1076
|
+
| `BrowserRun` | interface | Describes one run of a journey; `inputs` omits secret values; `fault` carries the run file's write failure. |
|
|
1077
|
+
| `BrowserReplayOptions` | interface | Configures one replay. |
|
|
1078
|
+
| `BrowserReplayEventMap` | type | Maps the events a replay emits. |
|
|
1079
|
+
| `BrowserReplayInterface` | interface | Replays one journey over a toolset. |
|
|
1080
|
+
| `BrowserStoreOptions` | interface | Carries the signal a store call honours. |
|
|
1081
|
+
| `BrowserJourneyValidationContext` | interface | Identifies the parameter binding that failed journey validation. |
|
|
1082
|
+
| `BrowserStoreFault` | interface | Names one entry a listing could not read. |
|
|
1083
|
+
| `BrowserStorePage` | interface | Carries one page of a listing with the entries it could not read. |
|
|
1084
|
+
| `BrowserJourneyStoreInterface` | interface | Keeps journeys by name with a revision per write. |
|
|
1085
|
+
| `BrowserRunSlot` | interface | Names the run directory a store opened, as data. |
|
|
1086
|
+
| `BrowserRunStoreInterface` | interface | Keeps runs by the journey name and run id the run carries. |
|
|
1087
|
+
| `BrowserJourneyOptions` | interface | Configures the journey toolset a toolset constructs. |
|
|
1088
|
+
| `BrowserJourneyToolsetInterface` | interface | Registers the journey tools over a toolset and owns the recording and the active replay. |
|
|
1089
|
+
| `BrowserCodegenLanguage` | type | Names the target language for a compiled codegen script. |
|
|
1090
|
+
| `BrowserCodegenInterface` | interface | Records semantic page gestures and compiles the resulting journey. |
|
|
1091
|
+
| `BrowserCodegenScript` | interface | Carries the module `compileBrowserJourney` emits with the gap steps that refuse it. |
|
|
1092
|
+
| `BrowserCodegenGesture` | interface | Carries a sanitized gesture from the page listener without password values. |
|
|
1093
|
+
| `BrowserReadOptions` | interface | Describes the options for one slice of a reading's Markdown or plain-text projection. |
|
|
1094
|
+
| `BrowserReadResult` | interface | Describes one slice of a reading's projection. |
|
|
1095
|
+
| `BrowserReadMatch` | interface | Describes a matching line and its character offset in a reading's projection. |
|
|
1096
|
+
| `BrowserEpochFunction` | type | Reads the navigation epoch of the frame a reading was captured from. |
|
|
1097
|
+
| `BrowserReadingInput` | interface | Describes the captured document a reading is built from. |
|
|
1098
|
+
| `BrowserReadingInterface` | interface | Represents one captured document, parsed one time and projected to Markdown or plain text in bounded slices. |
|
|
1099
|
+
| `BrowserSessionFunction` | type | Resolves the current CDP session for a frame id. |
|
|
1100
|
+
| `BrowserWorldFunction` | type | Resolves the isolated-world execution context a page caches for one frame document, creating the world on the given session when none is cached. |
|
|
1101
|
+
| `BrowserElementQuery` | interface | Describes an accessibility or CSS query within an optional element reference. |
|
|
1102
|
+
| `BrowserWaitOptions` | interface | Configures a text or element wait, including whether absence satisfies it. |
|
|
1103
|
+
| `BrowserOutlineOptions` | interface | Configures an outline's element limit, optional subtree, and search. |
|
|
1104
|
+
| `BrowserOutline` | interface | Carries a document-order outline and its included and available element counts. |
|
|
1105
|
+
| `BrowserOutlineNode` | interface | Associates an outline row with its frame, session, and optional actionable reference. |
|
|
1106
|
+
| `BrowserElementGeometry` | interface | Retains both session-local and page-composed element geometry. |
|
|
1107
|
+
| `BrowserElementSubject` | interface | Identifies a manager failure without inventing an element reference. |
|
|
1108
|
+
| `BrowserElementReason` | type | Identifies the refusal an element action reports. |
|
|
1109
|
+
| `BrowserElementRefusal` | interface | Describes how an element action reports one refusal its compiled in-page check throws: the reason, and the detail that follows the element's name, or `undefined` for the reason's own wording. |
|
|
1110
|
+
| `BrowserReferenceFunction` | type | Allocates the next reference from the owning browser context. |
|
|
1111
|
+
| `BrowserElementWorldFunction` | type | Resolves the page-owned isolated world for a particular frame and session. |
|
|
1112
|
+
| `BrowserReadinessFunction` | type | Waits for the current document's DOM readiness. |
|
|
1113
|
+
| `BrowserElementPointFunction` | type | Composes a frame-local point into page coordinates. |
|
|
1114
|
+
| `BrowserElementManagerInput` | interface | Provides the protocol and ownership boundaries used by a page element manager. |
|
|
1115
|
+
| `BrowserElementInput` | interface | Binds an element to its document identity and the page's shared protocol resources. |
|
|
1116
|
+
| `BrowserReadinessWait` | interface | Holds the resources of one lifecycle-event readiness wait. |
|
|
1117
|
+
| `BrowserElementInterface` | interface | Provides actions and reading through a stable document element reference. |
|
|
1118
|
+
| `BrowserPageElementInterface` | interface | Provides trusted page input and capture for a referenced element. |
|
|
1119
|
+
| `BrowserElementManagerInterface` | interface | Captures, queries, and retains references to a view's elements. |
|
|
1120
|
+
| `BrowserViewEventMap` | type | Maps the `console` and `error` events of a view that observes its document's output. |
|
|
1121
|
+
| `BrowserViewInterface` | interface | Provides the document operations shared by remote and DOM-native views. |
|
|
1122
|
+
| `BrowserCallOptions` | interface | Describes the options every asynchronous page, frame, handle, and worker call accepts. |
|
|
1123
|
+
| `BrowserToolAnnotation` | interface | Transliterates the WebMCP protocol's `Annotation` type, retaining its wire spelling. |
|
|
1124
|
+
| `BrowserTool` | interface | Describes a registered WebMCP tool and its owning document. |
|
|
1125
|
+
| `BrowserToolRemoval` | interface | Identifies a removed WebMCP tool by document and name. |
|
|
1126
|
+
| `BrowserInvocation` | interface | Describes a WebMCP invocation observed on the protocol. |
|
|
1127
|
+
| `BrowserInvocationResult` | interface | Carries a terminal WebMCP status and its untrusted output or error. |
|
|
1128
|
+
| `BrowserRegistryEventMap` | type | Maps registry changes and observed WebMCP invocation events. |
|
|
1129
|
+
| `BrowserRegistryOptions` | interface | Configures registry listeners and listener-error handling. |
|
|
1130
|
+
| `BrowserRegistryInterface` | interface | Mirrors the experimental WebMCP protocol domain for a page. |
|
|
1131
|
+
| `BrowserRegistryPending` | interface | Holds one unsettled registry execution and its resource cleanup. |
|
|
1132
|
+
| `BrowserToolName` | type | Names a tool the browser toolset reserves: the generic tools, the staged `dialog`, the opt-in `tabs` and `switch`, and the journey tools `record`, `save`, `journeys`, `edit`, `replay`, `forget`, and `capture`, which a toolset constructed with `journeys` reserves. |
|
|
1133
|
+
| `BrowserToolsetReason` | type | Names why a toolset declined a page tool. |
|
|
1134
|
+
| `BrowserToolSourceEventMap` | type | Maps the signal a tool source emits when its page's tools change. |
|
|
1135
|
+
| `BrowserToolSourceInterface` | interface | Supplies page-registered tools to a toolset through a contract free of protocol types. |
|
|
1136
|
+
| `BrowserToolsetEventMap` | type | Maps the events a toolset emits. |
|
|
1137
|
+
| `BrowserToolsetOptions` | interface | Configures a browser toolset. |
|
|
1138
|
+
| `BrowserFollowOptions` | interface | Configures one step a toolset follows. |
|
|
1139
|
+
| `BrowserTab` | interface | Describes one open tab of a toolset's context, which the `tabs` tool lists one per line. |
|
|
1140
|
+
| `BrowserToolsetInterface` | interface | Publishes the browser vocabulary as tools over one current view and adopts the page's own tools beside them. |
|
|
1141
|
+
| `BrowserToolsetHandler` | type | Runs one toolset tool inside the toolset's boundary. |
|
|
1142
|
+
| `BrowserToolsetWatch` | interface | Holds the listeners a toolset attaches to one followed page. |
|
|
1143
|
+
| `BrowserReceipt` | interface | Describes one tool receipt before rendering. |
|
|
1144
|
+
| `BrowserFrameInfo` | interface | Describes serializable frame metadata decoded from CDP `Page.getFrameTree`. |
|
|
1145
|
+
| `BrowserFrameInterface` | interface | Provides the operations shared by a top-level page and an iframe document. |
|
|
1146
|
+
| `BrowserRect` | type | Represents a rectangle in CSS pixels: x, y, width, height. |
|
|
1147
|
+
| `BrowserLayout` | interface | Describes layout data associated with one captured DOM node. |
|
|
1148
|
+
| `BrowserNode` | interface | Represents one serializable DOM node decoded from a CDP DOM snapshot. |
|
|
1149
|
+
| `BrowserDocument` | interface | Represents one document captured in a CDP DOM snapshot. |
|
|
1150
|
+
| `BrowserSnapshotInput` | interface | Describes the serializable input for a navigable browser snapshot — the form a `BrowserSnapshot` is built from and serializes back to. |
|
|
1151
|
+
| `BrowserWalkOrder` | type | Names the structural ordering for a browser snapshot walk. |
|
|
1152
|
+
| `BrowserWalkOptions` | interface | Describes the options for walking a browser snapshot. |
|
|
1153
|
+
| `BrowserSiblingRelation` | type | Names a structural sibling relationship relative to a browser node. |
|
|
1154
|
+
| `BrowserSnapshotInterface` | interface | Represents a navigable, serializable snapshot of every document attached to a page, extending `BrowserSnapshotInput` with walking, structural relationships, search, and path derivation over plain `BrowserNode` values. |
|
|
1155
|
+
| `BrowserSnapshotOptions` | interface | Describes the options configuring capture through `BrowserPageInterface` `snapshot()`. The snapshot entity's creation input is `BrowserSnapshotInput`. |
|
|
1156
|
+
| `BrowserNodePredicate` | type | Names the predicate form accepted by `BrowserSnapshotInterface` find, filter, and closest methods. |
|
|
1157
|
+
| `BrowserNodeQuery` | interface | Describes a declarative browser-node matcher used by `matchesBrowserNode`. |
|
|
1158
|
+
| `BrowserPageInterface` | interface | Abstracts a single top-level browser page, extending `BrowserFrameInterface` with navigation, screenshots, frame discovery, DOM snapshots, codegen, and target teardown. |
|
|
1159
|
+
| `BrowserContextInterface` | interface | Represents an isolated browser session over a CDP browser context. |
|
|
1158
1160
|
|
|
1159
1161
|
A page hands the navigation steps it accepts, typed by `BrowserNavigationEventMap`, to its element manager as `BrowserElementManagerInput.steps`, and the manager drops a child frame's references on that frame's cross-document `commit` and on its `detach`. The input’s `recover` callback discards cached DOM readiness after context loss and parks until the destination document is ready. The same emitter reaches the navigation manager through its constructor; see [`BrowserNavigationManagerInterface`](#browsernavigationmanagerinterface). `BrowserToolsetWatch` holds a toolset's `dialog`, `popup`, `close`, and `closed` listeners and no navigation listener, because a toolset follows a navigation through the page's record.
|
|
1160
1162
|
|
|
@@ -1162,6 +1164,8 @@ A page hands the navigation steps it accepts, typed by `BrowserNavigationEventMa
|
|
|
1162
1164
|
|
|
1163
1165
|
The Node runtime discovers a browser listening on a CDP port, attaches to it, or launches a Chromium-family process. The following fence probes, connects, and destroys.
|
|
1164
1166
|
|
|
1167
|
+
Every library launch, including `browse`, passes `--no-first-run`, `--no-default-browser-check`, `--disable-sync`, and `--disable-features=msImplicitSignin` alongside your launch arguments. On Edge, fresh automation profiles launch with sync off and implicit sign-in disabled, so they carry no Microsoft account, synced extensions, or synced settings. This behavior was measured on Windows with Edge 154.0.4258.53 on 2026-10-05. Sync stays off so account extensions cannot install during page imports and reset the browser's URL loader factories. The launcher merges every caller and library disabled feature into one `--disable-features=` switch, because Chromium reads only the last occurrence. Chrome and Chromium ignore the unknown Edge feature name.
|
|
1168
|
+
|
|
1165
1169
|
```ts
|
|
1166
1170
|
import { createBrowser } from '@orkestrel/browser/server'
|
|
1167
1171
|
|
|
@@ -1247,6 +1251,8 @@ The following table lists the server constants.
|
|
|
1247
1251
|
| `BROWSER_RUN_FILE` | const | Names the persisted run snapshot. |
|
|
1248
1252
|
| `BROWSER_RUN_DIRECTORY` | const | Names the journey directory holding its runs. |
|
|
1249
1253
|
| `BROWSER_SERVER_POOL_SIZE` | const | Sets the default number of warm browsers to 1. |
|
|
1254
|
+
| `BROWSER_SERVER_CONTEXTS` | const | Sets the default context capacity per browser, including the shared holder. |
|
|
1255
|
+
| `BROWSER_SERVER_CONTEXTS_LIMIT` | const | Limits context capacity to the largest measured per-browser count. |
|
|
1250
1256
|
| `BROWSER_SERVER_POOL_LIMIT` | const | Limits the number of warm browsers to 3. |
|
|
1251
1257
|
| `BROWSER_SERVER_RESTARTS` | const | Permits one failed refill before the next failure spends the bound. |
|
|
1252
1258
|
| `BROWSER_SERVER_RECORD` | const | Names the browser process record in each profile. |
|
|
@@ -1258,6 +1264,9 @@ The following table lists the server constants.
|
|
|
1258
1264
|
| `BROWSER_SERVER_UNAVAILABLE` | const | Names the refusal when no browser can serve a call. |
|
|
1259
1265
|
| `BROWSER_SERVER_CRASH` | const | Names the notice that a browser and its session state were lost. |
|
|
1260
1266
|
| `BROWSER_SERVER_UNRESOLVED` | const | Names an interrupted call whose outcome is unknown. |
|
|
1267
|
+
| `BROWSER_SERVER_BUSY` | const | Names the refusal when every browser is admitted to a holder. |
|
|
1268
|
+
| `BROWSER_SERVER_HOLDER` | const | Names the refusal for an unknown or ended holder. |
|
|
1269
|
+
| `BROWSER_SERVER_COPY` | const | Defines the holder tools independently of the shared browser's vocabulary. |
|
|
1261
1270
|
| `BROWSER_FILE_STORE_LIMIT` | const | Bounds a file-store listing page by default. |
|
|
1262
1271
|
|
|
1263
1272
|
#### Errors
|
|
@@ -1297,6 +1306,7 @@ The following table lists the server helpers.
|
|
|
1297
1306
|
| `formatBrowserLockEntry` | function | Formats a process identifier and UUID token as a lock entry name. |
|
|
1298
1307
|
| `probeProcess` | function | Probes whether a process has not been confirmed absent. |
|
|
1299
1308
|
| `parseBrowserProfileRecord` | function | Parses a profile record naming a positive process identifier and a loopback DevTools endpoint. |
|
|
1309
|
+
| `parseBrowserViewport` | function | Parses positive integer viewport dimensions in WIDTHxHEIGHT form. |
|
|
1300
1310
|
| `describeBrowserServerLoss` | function | Describes a browser loss with its code, cause, and the session state it invalidates. |
|
|
1301
1311
|
| `parseBrowserLockEntry` | function | Parses the holder process identifier from a lock entry name. |
|
|
1302
1312
|
| `parseBrowserEngine` | function | Classifies an executable path/name into a `BrowserEngine` by case-insensitive hint, checked in the order edge → chromium → chrome. |
|
|
@@ -1371,27 +1381,35 @@ if (found !== undefined) {
|
|
|
1371
1381
|
|
|
1372
1382
|
The following table lists the server types.
|
|
1373
1383
|
|
|
1374
|
-
| API | Kind | Summary
|
|
1375
|
-
| ------------------------------ | --------- |
|
|
1376
|
-
| `BrowserEngine` | type | Names a supported browser engine (raw CDP targets Chromium-family browsers only).
|
|
1377
|
-
| `BrowserConnection` | type | Names how the browser connection was established.
|
|
1378
|
-
| `BrowserStatus` | type | Names the lifecycle status of a browser wrapper.
|
|
1379
|
-
| `BrowserDiscoveryResult` | interface | Describes the result of passive browser discovery.
|
|
1380
|
-
| `SystemBrowserOptions` | interface | Describes the options overriding `findSystemBrowsers`'/`findSystemBrowser`'s candidate sources.
|
|
1381
|
-
| `SystemBrowser` | type | Represents one discovered browser executable on this machine.
|
|
1382
|
-
| `BrowserProfileRecord` | interface | Names the browser a browse profile serves, which a later start's sweep reads.
|
|
1383
|
-
| `BrowserProfileResult` | interface | Describes the resolved browser profile directory used for a Chromium-family launch.
|
|
1384
|
-
| `BrowserCDPOptions` | interface | Configures the CDP (Chrome DevTools Protocol) connection.
|
|
1385
|
-
| `BrowserEventMap` | type | Maps the events a `BrowserInterface` emits.
|
|
1386
|
-
| `BrowserOptions` | interface | Describes the options for creating a `Browser` instance.
|
|
1387
|
-
| `BrowserInterface` | interface | Wraps a browser with discovery, connection management, and lifecycle control.
|
|
1388
|
-
| `WebSocketCDPTransportOptions` | interface | Describes the options for creating a `WebSocketCDPTransport` instance.
|
|
1389
|
-
| `FileBrowserStoreOptions` | interface | Configures a file store: its root under the checkout and the listing cap.
|
|
1390
|
-
| `BrowserLaunchFunction` | type | Creates a browser a browse server connects while warming its pool.
|
|
1391
|
-
| `BrowserSlot` | interface | Holds one
|
|
1392
|
-
| `BrowserSlotWatch` | interface | Holds the listeners and resolver of one browser slot's loss watch.
|
|
1393
|
-
| `
|
|
1394
|
-
| `
|
|
1384
|
+
| API | Kind | Summary |
|
|
1385
|
+
| ------------------------------ | --------- | ----------------------------------------------------------------------------------------------- |
|
|
1386
|
+
| `BrowserEngine` | type | Names a supported browser engine (raw CDP targets Chromium-family browsers only). |
|
|
1387
|
+
| `BrowserConnection` | type | Names how the browser connection was established. |
|
|
1388
|
+
| `BrowserStatus` | type | Names the lifecycle status of a browser wrapper. |
|
|
1389
|
+
| `BrowserDiscoveryResult` | interface | Describes the result of passive browser discovery. |
|
|
1390
|
+
| `SystemBrowserOptions` | interface | Describes the options overriding `findSystemBrowsers`'/`findSystemBrowser`'s candidate sources. |
|
|
1391
|
+
| `SystemBrowser` | type | Represents one discovered browser executable on this machine. |
|
|
1392
|
+
| `BrowserProfileRecord` | interface | Names the browser a browse profile serves, which a later start's sweep reads. |
|
|
1393
|
+
| `BrowserProfileResult` | interface | Describes the resolved browser profile directory used for a Chromium-family launch. |
|
|
1394
|
+
| `BrowserCDPOptions` | interface | Configures the CDP (Chrome DevTools Protocol) connection. |
|
|
1395
|
+
| `BrowserEventMap` | type | Maps the events a `BrowserInterface` emits. |
|
|
1396
|
+
| `BrowserOptions` | interface | Describes the options for creating a `Browser` instance. |
|
|
1397
|
+
| `BrowserInterface` | interface | Wraps a browser with discovery, connection management, and lifecycle control. |
|
|
1398
|
+
| `WebSocketCDPTransportOptions` | interface | Describes the options for creating a `WebSocketCDPTransport` instance. |
|
|
1399
|
+
| `FileBrowserStoreOptions` | interface | Configures a file store: its root under the checkout and the listing cap. |
|
|
1400
|
+
| `BrowserLaunchFunction` | type | Creates a browser a browse server connects while warming its pool. |
|
|
1401
|
+
| `BrowserSlot` | interface | Holds one pooled browser and its exclusively owned profile. |
|
|
1402
|
+
| `BrowserSlotWatch` | interface | Holds the listeners and resolver of one browser slot's loss watch. |
|
|
1403
|
+
| `BrowserServerContext` | interface | Holds one prepared or assigned context generation and its downloads directory. |
|
|
1404
|
+
| `BrowserServerLease` | interface | Binds a holder generation to the exact browser lease reserved for its lifetime. |
|
|
1405
|
+
| `BrowserServerLoss` | interface | Records a lost generation's cause and its own last URL. |
|
|
1406
|
+
| `BrowserServerWatch` | interface | Holds page subscriptions for one prepared or assigned context generation. |
|
|
1407
|
+
| `BrowserMCPServerOptions` | interface | Configures the browse server. |
|
|
1408
|
+
| `BrowserServerToolName` | type | Names the server tools that manage independent browser holders. |
|
|
1409
|
+
| `BrowserServerHolder` | interface | Identifies one admitted browser lifetime independently of its current pool token. |
|
|
1410
|
+
| `BrowserServerCatalog` | interface | Describes the JSON catalog returned by the holder tools. |
|
|
1411
|
+
| `BrowserServerMirror` | interface | Binds shared catalog subscriptions to the exact generation that published them. |
|
|
1412
|
+
| `BrowserMCPServerInterface` | interface | Serves the browser vocabulary and the journey tools over MCP on stdio. |
|
|
1395
1413
|
|
|
1396
1414
|
### Browser
|
|
1397
1415
|
|
|
@@ -1660,7 +1678,7 @@ await context?.destroy() // local detach
|
|
|
1660
1678
|
|
|
1661
1679
|
Operations shared by a top-level page and an iframe document. Every asynchronous member takes a trailing `BrowserCallOptions` carrying `timeout` and `signal`. `evaluate` runs in the page's main world; `read` and the element managers run in one isolated world per document, which the page drops on `Runtime.executionContextDestroyed` and `Runtime.executionContextsCleared` and creates again on the next call. A child frame follows its attached out-of-process session when Chromium splits the frame into another target.
|
|
1662
1680
|
|
|
1663
|
-
A
|
|
1681
|
+
A page instruments frame sessions, workers, and popups before or while resuming them, resumes any other target at once, and releases a non-frame target reported by a frame session without instrumenting it. A context configures each page session's auto-attach with `waitForDebuggerOnStart: true`, and the page does the same on each out-of-process frame session, with an `iframe` filter, and on each popup it opens, so every target the page's auto-attach reaches attaches paused. For a frame session the page sends `Page.enable`, `Runtime.enable`, `Page.setLifecycleEventsEnabled`, and `Target.setAutoAttach` and then resumes the target with `Runtime.runIfWaitingForDebugger`. The first commit and load of a frame that moved into another process therefore arrive on its new session and carry the loader of the navigation that moved it: on Chromium 141, the new session reports `Page.frameNavigated` with that loader after the resume, the page session then reports the swap, and the new session reports `load` with the same loader. The page resumes an attached dedicated or shared worker after `Runtime.enable` replies and a popup after the popup's domains and network manager start. It resumes a service worker after queuing `Runtime.enable`; on Edge 154.0.4258.53, that reply waits for worker startup. On Edge 154.0.4258.53, a page's dedicated and shared workers start and answer messages under this setup; the dedicated worker attaches paused, while the shared worker runs without an attachment reported by the page session. The page emits `worker` only after `Runtime.enable` replies. A non-frame target reported by a frame session is resumed and detached through that reporting session without a `worker` event. A target the page cannot enable is resumed and then detached, because on Chromium 141 a paused target stays paused after a detach without a resume, so it does not run and its parent document does not reach `load`; the detach waits until the resume attempt settles through a reply, a refusal, the client's timeout, or the connection's close. The page reads a frame session's frame tree only when the attach named no `parentFrameId`, and then only for the frame's parent, URL, and name. [`tests/src/core/BrowserPage.test.ts`](../tests/src/core/BrowserPage.test.ts) pins the order of each step, and [`tests/service/browser.test.ts`](../tests/service/browser.test.ts) proves worker startup in Chromium.
|
|
1664
1682
|
|
|
1665
1683
|
| Method | Returns | Summary |
|
|
1666
1684
|
| ------------- | ---------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
@@ -1827,7 +1845,7 @@ requests `stable: true`, so a hidden tab does not suspend a check that needs no
|
|
|
1827
1845
|
Pointer actions activate their owning page before sampling stability, because Chromium suspends
|
|
1828
1846
|
animation frames in hidden tabs. The stability check still uses real animation frames.
|
|
1829
1847
|
|
|
1830
|
-
One referenced element of a page, acted on through trusted input on the page session. `frame` is a Surface data member: the id of the frame whose document holds the element, which a toolset passes to `page.navigation.record`. A click scrolls the element into view, checks that it is visible, enabled, and stable across two animation frames, reads its content quad on its own session, hit-tests the quad center, and dispatches a pressed and released mouse event; each step refuses with a coded `BrowserElementError` whose `context.reason` is `GONE`, `HIDDEN`, `OCCLUDED`, `DISABLED`, `UNTRUSTED`, or `UNKNOWN`, and whose one-line message carries that reason and, for `GONE`, the refresh directive `; call look for fresh refs.` For an element inside an out-of-process frame the point is composed through each frame's content box.
|
|
1848
|
+
One referenced element of a page, acted on through trusted input on the page session. `frame` is a Surface data member: the id of the frame whose document holds the element, which a toolset passes to `page.navigation.record`. A click scrolls the element into view, checks that it is visible, enabled, and stable across two animation frames, waits for consecutive rendering frames to report equal document scroll offsets, reads its content quad on its own session, hit-tests the quad center, and dispatches a pressed and released mouse event; each step refuses with a coded `BrowserElementError` whose `context.reason` is `GONE`, `HIDDEN`, `OCCLUDED`, `DISABLED`, `UNTRUSTED`, or `UNKNOWN`, and whose one-line message carries that reason and, for `GONE`, the refresh directive `; call look for fresh refs.` The scroll wait shares the actionability call's timeout and signal and uses no polling timer. Hover and the drag source share this wait. A protocol hit-test refusal because the location held no node reports `OCCLUDED`. For an element inside an out-of-process frame the point is composed through each frame's content box.
|
|
1831
1849
|
|
|
1832
1850
|
| Method | Returns | Summary |
|
|
1833
1851
|
| ------------ | ---------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
@@ -1992,7 +2010,7 @@ A `click`, a `type` with `submit`, or a `press` of Enter also opens `page.popups
|
|
|
1992
2010
|
|
|
1993
2011
|
`follow` performs one recorded step on the current view through `perform`. A `click` or `type` step with a target resolves the one element that carries the target's role and exact accessible name and sends its reference as `ref`, and a stored `reference` or `css` is never read; a `switch` step on a toolset with `context` resolves the one tab `tabs()` lists with the step's URL and title and sends the tab's id as `tab`; every other step sends its arguments unchanged, a page tool's included. Before any input, a missing target or tab refuses with `BROWSER_JOURNEY_TARGET`, several refuse with `BROWSER_JOURNEY_AMBIGUOUS`, and a target name that binds a parameter refuses with `BROWSER_JOURNEY_INPUT`, each naming the step. `follow` returns the `BrowserAction` of a `done` action and of an `interrupted` one, whose dialog a following `dialog` step answers, and throws a `BrowserStepError` whose `action` is the performed action for any other outcome and for a navigation that stopped at `requested` or `committed`. Its `caller` option carries a hold's token, and its `secret` option withholds a `type` step's text. A replay and the module `compileBrowserJourney` emits run every step through it.
|
|
1994
2012
|
|
|
1995
|
-
`perform` runs the handler a manager call runs and returns the `BrowserAction` beside the tool result, and the toolset emits the same action as `action`; `tools.execute` and `perform` share one path, so a receipt is the same through either, including a secret call whose signal was aborted before the handler ran. A failed `perform` also returns the value its handler threw as `fault`, so a copy of the result keeps a coded `BrowserError`, and a tool's own `execute` rejects with that same value. `hold` takes a queue turn for a replay: until the hold is destroyed, an action whose `context.caller` is not the hold's `token` is refused at admission with `BROWSER_TOOLSET_BUSY`, `dialog` and adopted page tools included, while `look`, `read`, `plain`, `tabs`, and `wait` pass; the toolset emits `hold` and `release` with the journey's name. With the `journeys` option, the toolset constructs a `BrowserJourneyToolset` that adds the
|
|
2013
|
+
`perform` runs the handler a manager call runs and returns the `BrowserAction` beside the tool result, and the toolset emits the same action as `action`; `tools.execute` and `perform` share one path, so a receipt is the same through either, including a secret call whose signal was aborted before the handler ran. A failed `perform` also returns the value its handler threw as `fault`, so a copy of the result keeps a coded `BrowserError`, and a tool's own `execute` rejects with that same value. `hold` takes a queue turn for a replay: until the hold is destroyed, an action whose `context.caller` is not the hold's `token` is refused at admission with `BROWSER_TOOLSET_BUSY`, `dialog` and adopted page tools included, while `look`, `read`, `plain`, `tabs`, and `wait` pass; the toolset emits `hold` and `release` with the journey's name. With the `journeys` option, the toolset constructs a `BrowserJourneyToolset` that adds the journey tools to the same manager, and destroys it first; see [Journeys](#journeys).
|
|
1996
2014
|
|
|
1997
2015
|
| Method | Returns | Summary |
|
|
1998
2016
|
| --------- | -------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
@@ -2232,15 +2250,18 @@ await store.delete('add-kettle')
|
|
|
2232
2250
|
|
|
2233
2251
|
Keeps runs by the journey name and run id the run carries. A run id is the ISO time with `-` for `:`, followed by `-` and 4 hexadecimal digits, such as `2026-10-01T03-07-06.041Z-6d7e`. `FileBrowserRunStore` creates `ROOT/NAME/runs/ID/` exclusively in `open`, retrying with a fresh id on a collision, writes `run.json` there, and writes a capture only into a directory it opened, refusing a slot it did not open, a name outside `sN.png`, and a directory that is missing or a link; it creates no directory for a capture. `MemoryBrowserRunStore` has no directories: `open` mints an id, and `capture` resolves `undefined`, so a step carries no `capture`.
|
|
2234
2252
|
|
|
2235
|
-
| Method
|
|
2236
|
-
|
|
|
2237
|
-
| `open`
|
|
2238
|
-
| `get`
|
|
2239
|
-
| `set`
|
|
2240
|
-
| `capture`
|
|
2241
|
-
| `delete`
|
|
2242
|
-
| `clear`
|
|
2243
|
-
| `list`
|
|
2253
|
+
| Method | Returns | Summary |
|
|
2254
|
+
| ---------- | --------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
2255
|
+
| `open` | `Promise<BrowserRunSlot>` | Mints a run id for the journey and creates its run directory exclusively. |
|
|
2256
|
+
| `get` | `Promise<BrowserRun \| undefined>` | Returns the run stored under the journey name and id, or `undefined` when none is stored. |
|
|
2257
|
+
| `set` | `Promise<void>` | Writes the run under the journey name and the run id it carries. |
|
|
2258
|
+
| `capture` | `Promise<string \| undefined>` | Writes capture bytes under the name into the run directory `open` created for the slot. |
|
|
2259
|
+
| `delete` | `Promise<void>` | Removes the run stored under the journey name and id; a missing run is a no-op. |
|
|
2260
|
+
| `clear` | `Promise<number>` | Removes every run and opened slot of a journey and returns their count, including unsaved slots; a missing name returns zero. File stores exclude concurrent allocation with the journey lock and refuse a held lock with `BROWSER_JOURNEY_LOCKED`. |
|
|
2261
|
+
| `list` | `Promise<BrowserStorePage<BrowserRun>>` | Returns one page of the journey's runs, starting at `offset` and holding at most `limit` entries, with the entries it could not read in `faults`. |
|
|
2262
|
+
| `snapshot` | `Promise<string>` | Saves a standalone PNG under the runs root without replacing an existing file. |
|
|
2263
|
+
|
|
2264
|
+
The optional `snapshot` method is implemented by `FileBrowserRunStore`. It allocates `ROOT/runs/ID/view.png` independently of a journey and returns its absolute path. It copies the input bytes before allocation and writes the file exclusively. Stores without standalone file storage omit it.
|
|
2244
2265
|
|
|
2245
2266
|
The following fence opens a run slot, writes a capture and the run, and reads them back.
|
|
2246
2267
|
|
|
@@ -2256,11 +2277,11 @@ await runs.delete('add-kettle', slot.id)
|
|
|
2256
2277
|
|
|
2257
2278
|
#### `BrowserJourneyToolsetInterface`
|
|
2258
2279
|
|
|
2259
|
-
Registers the
|
|
2280
|
+
Registers the journey tools on the toolset's manager and owns the recording and the active replay. `BrowserToolset` constructs it when given `journeys` and destroys it before its own teardown; it refuses construction with `BROWSER_TOOLSET_RESERVED` when the manager already holds a journey tool's name. See [Journeys](#journeys) for the tools.
|
|
2260
2281
|
|
|
2261
|
-
| Method | Returns | Summary
|
|
2262
|
-
| --------- | --------------- |
|
|
2263
|
-
| `destroy` | `Promise<void>` | Aborts the active replay and removes the
|
|
2282
|
+
| Method | Returns | Summary |
|
|
2283
|
+
| --------- | --------------- | ------------------------------------------------------------------------ |
|
|
2284
|
+
| `destroy` | `Promise<void>` | Aborts the active replay and removes the journey tools from the manager. |
|
|
2264
2285
|
|
|
2265
2286
|
The following fence constructs the journey toolset through `BrowserToolset`, starts a recording, and destroys both.
|
|
2266
2287
|
|
|
@@ -2328,16 +2349,22 @@ await browser.destroy() // terminates and awaits the owned process
|
|
|
2328
2349
|
|
|
2329
2350
|
#### `BrowserMCPServerInterface`
|
|
2330
2351
|
|
|
2331
|
-
Serves the browser vocabulary and the journey tools over MCP on stdio. The server warms its pool at start and
|
|
2352
|
+
Serves the browser vocabulary and the journey tools over MCP on stdio. The server warms its pool at start and places the shared holder and each holder `acquire` admits in its own isolated context on a validated pooled browser. Initialization and tool calls await setup; a lost browser is replaced within the pool's restart bound. Each launch creates an exclusive `ROOT/.profiles/PID-UUID/` profile and one prepared context. `tools/list` answers while warming. Adopted page tools are mirrored until withdrawn or the shared holder loses its browser.
|
|
2332
2353
|
|
|
2333
|
-
A disconnect
|
|
2354
|
+
A disconnect retires the browser and every holder context on it; a crash of a holder's current page replaces only that holder's context, and a background-page crash leaves the holder attached. Hand-out, per-call, and post-failure pings detect browsers that stopped answering. An interrupted failure answers `BROWSER_SERVER_UNRESOLVED`, a known success remains successful, and pending loss notes prefix the next string outcome on a successor or a refusal. Every pending loss is reported. Calls are never repeated, and replacement pages start at `about:blank`.
|
|
2334
2355
|
|
|
2335
2356
|
The end of input, `SIGINT`, and `SIGTERM` stop admission and destroy the pool. Teardown releases watch listeners, destroys each toolset before its browser, and rechecks recorded folders. Unconfirmed termination retains its slot; a stranded launch prevents further launches. A timed-out ping forces termination before teardown. On Linux, a root process launches with `--no-sandbox`; other launches keep the sandbox.
|
|
2336
2357
|
|
|
2337
|
-
| Method | Returns | Summary
|
|
2338
|
-
| --------- | --------------- |
|
|
2339
|
-
| `start` | `Promise<void>` | Serves stdio, sweeps the profiles ended servers left, warms the pool, and resolves after the
|
|
2340
|
-
| `destroy` | `Promise<void>` | Stops admission, tears down every browser, its toolset, and its profile, then rechecks the folders it answers for.
|
|
2358
|
+
| Method | Returns | Summary |
|
|
2359
|
+
| --------- | --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
2360
|
+
| `start` | `Promise<void>` | Serves stdio, sweeps the profiles ended servers left, warms the pool, and resolves after the shared holder consumes a prepared context on a warm browser; the legacy handshake and every tool call await the same setup. Rejects with `BROWSER_SERVER_UNAVAILABLE` when no browser can serve and with `BROWSER_TOOLSET_ENDED` after `destroy()`, and resolves when `destroy()` interrupts setup. |
|
|
2361
|
+
| `destroy` | `Promise<void>` | Stops admission, tears down every browser, its toolset, and its profile, then rechecks the folders it answers for. |
|
|
2362
|
+
|
|
2363
|
+
The viewport option applies to every warmed browser, refills included, and to every page and popup in each of its isolated contexts.
|
|
2364
|
+
|
|
2365
|
+
| Option | Type | Default | Behavior |
|
|
2366
|
+
| ---------- | ----------------- | ---------------------------- | -------------------------------------------------------------------------------------------- |
|
|
2367
|
+
| `viewport` | `BrowserViewport` | The browser's launch default | Sets the isolated context's page dimensions and emulation through `BrowserMCPServerOptions`. |
|
|
2341
2368
|
|
|
2342
2369
|
The following fence serves the vocabulary on the process's standard streams, with the journeys under `tmp/browsers`.
|
|
2343
2370
|
|
|
@@ -2936,28 +2963,29 @@ This section holds the words a model reads: the tools a toolset advertises and t
|
|
|
2936
2963
|
|
|
2937
2964
|
### Tools
|
|
2938
2965
|
|
|
2939
|
-
A page-backed toolset advertises `look`, `read`, `plain`, `click`, `type`, `press`, `navigate`, and `wait`, stages `dialog` while a dialog is open, and advertises `tabs` and `switch` when it is given a `context`; a view-backed toolset over a DOM document advertises `look`, `read`, `plain`, `click`, `type`, and `wait`. Either toolset advertises `record`, `save`, `journeys`, `edit`, `replay`, and `
|
|
2940
|
-
|
|
2941
|
-
| Tool | Parameters | Annotations | Placements
|
|
2942
|
-
| ---------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- |
|
|
2943
|
-
| `look` | `search` (string, required), `offset` (integer, default 0) | `pure`, `untrusted` | CDP and DOM
|
|
2944
|
-
| `read` | `search` (string, required), `offset` (integer, default 0) | `pure`, `untrusted` | CDP and DOM
|
|
2945
|
-
| `plain` | `search` (string, required), `offset` (integer, default 0) | `pure`, `untrusted` | CDP and DOM
|
|
2946
|
-
| `click` | `ref` (string, required) | none | CDP and DOM
|
|
2947
|
-
| `type` | `ref` (string, required), `text` (string, required), `submit` (boolean, true to submit its form after typing), `secret` (boolean, true to keep the text out of the receipt) | none | CDP and DOM
|
|
2948
|
-
| `press` | `key` (string, required) | none | CDP
|
|
2949
|
-
| `navigate` | `url` (string, required) | none | CDP
|
|
2950
|
-
| `wait` | `text` (string, required), `absent` (boolean, true to wait until the text is gone), `timeout` (integer seconds, default 5, at most 30) | `pure` | CDP and DOM
|
|
2951
|
-
| `dialog` | `accept` (boolean, required), `text` (string) | none | CDP, staged while a dialog opens
|
|
2952
|
-
| `tabs` | `search` (string, required) | `pure` | CDP, with `context`
|
|
2953
|
-
| `switch` | `tab` (string, required) | none | CDP, with `context`
|
|
2954
|
-
| `record` | `journey` (string, required) | none | CDP and DOM, with `journeys`
|
|
2955
|
-
| `save` | `description` (string, required) | none | CDP and DOM, with `journeys`
|
|
2956
|
-
| `journeys` | `search` (string, required), `offset` (integer, default 0) | `pure`, `untrusted` | CDP and DOM, with `journeys`
|
|
2957
|
-
| `edit` | `journey` (string, required), `edits` (`anyOf`: array of `BrowserJourneyEditRequest` or a JSON string of that array, required) | none | CDP and DOM, with `journeys`
|
|
2958
|
-
| `replay` | `journey` (string, required), `inputs` (object of strings) | none | CDP and DOM, with `journeys`
|
|
2959
|
-
| `
|
|
2960
|
-
|
|
|
2966
|
+
A page-backed toolset advertises `look`, `read`, `plain`, `click`, `type`, `press`, `navigate`, and `wait`, stages `dialog` while a dialog is open, and advertises `tabs` and `switch` when it is given a `context`; a view-backed toolset over a DOM document advertises `look`, `read`, `plain`, `click`, `type`, and `wait`. Either toolset advertises `record`, `save`, `journeys`, `edit`, `replay`, `forget`, and `capture` when it is given `journeys`. Every tool declares at least one required parameter, because the streamed tool-call parser of Ollama 0.34.4 rejects a call to a tool that declares no parameter. The following table lists each tool with its advertised description.
|
|
2967
|
+
|
|
2968
|
+
| Tool | Parameters | Annotations | Placements | Description |
|
|
2969
|
+
| ---------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | ----------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
2970
|
+
| `look` | `search` (string, required), `offset` (integer, default 0) | `pure`, `untrusted` | CDP and DOM | `Shows the page's text and the elements you can act on, each with a reference like e4. Call it first and after the page changes.` |
|
|
2971
|
+
| `read` | `search` (string, required), `offset` (integer, default 0) | `pure`, `untrusted` | CDP and DOM | `Reads the page as Markdown, with headings, tables, and link addresses. Call it to learn a fact; continue with the offset a cut result names.` |
|
|
2972
|
+
| `plain` | `search` (string, required), `offset` (integer, default 0) | `pure`, `untrusted` | CDP and DOM | `Reads the page as plain text, without Markdown, link addresses, or image text. Call it for words to pass to wait or type.` |
|
|
2973
|
+
| `click` | `ref` (string, required) | none | CDP and DOM | `Clicks the element with that reference.` |
|
|
2974
|
+
| `type` | `ref` (string, required), `text` (string, required), `submit` (boolean, true to submit its form after typing), `secret` (boolean, true to keep the text out of the receipt) | none | CDP and DOM | `Types into the text control with that reference; set submit to true to submit its form.` |
|
|
2975
|
+
| `press` | `key` (string, required) | none | CDP | `Presses that key or chord, such as Enter or Control+a.` |
|
|
2976
|
+
| `navigate` | `url` (string, required) | none | CDP | `Opens that absolute web address in the current tab.` |
|
|
2977
|
+
| `wait` | `text` (string, required), `absent` (boolean, true to wait until the text is gone), `timeout` (integer seconds, default 5, at most 30) | `pure` | CDP and DOM | `Waits for text to appear; set absent to true to wait for it to leave.` |
|
|
2978
|
+
| `dialog` | `accept` (boolean, required), `text` (string) | none | CDP, staged while a dialog opens | `Accepts or dismisses the open dialog.` |
|
|
2979
|
+
| `tabs` | `search` (string, required) | `pure` | CDP, with `context` | `Lists the open tabs; the current one is marked.` |
|
|
2980
|
+
| `switch` | `tab` (string, required) | none | CDP, with `context` | `Switches to a tab from tabs, such as t2.` |
|
|
2981
|
+
| `record` | `journey` (string, required) | none | CDP and DOM, with `journeys` | `Starts recording your next actions as a journey with that name; call save when it is done.` |
|
|
2982
|
+
| `save` | `description` (string, required) | none | CDP and DOM, with `journeys` | `Stops recording and saves the journey; describe what it achieves in one sentence.` |
|
|
2983
|
+
| `journeys` | `search` (string, required), `offset` (integer, default 0) | `pure`, `untrusted` | CDP and DOM, with `journeys` | `Lists the saved journeys with their steps and the parameters each one takes.` |
|
|
2984
|
+
| `edit` | `journey` (string, required), `edits` (`anyOf`: array of `BrowserJourneyEditRequest` or a JSON string of that array, required) | none | CDP and DOM, with `journeys` | `Changes a saved journey: add, remove, or update steps by their ids from journeys, or declare a parameter.` |
|
|
2985
|
+
| `replay` | `journey` (string, required), `inputs` (object of strings) | none | CDP and DOM, with `journeys` | `Replays a saved journey step by step; give each parameter's value under inputs.` |
|
|
2986
|
+
| `capture` | `full` (boolean, required) | none | CDP and DOM, with `journeys`; requires a trusted view | `Saves the current view as a PNG in the runs directory and returns its path.` |
|
|
2987
|
+
| `forget` | `journey` (string, required) | none | CDP and DOM, with `journeys` | `Removes a saved journey and all its runs; the name is free to record again.` |
|
|
2988
|
+
| page tools | the page's input schema, plus a required `purpose` string when that schema requires nothing | `untrusted` always; `pure` from `readOnly`; `consequential` from `consequential` | CDP through the registry, DOM through a source | the page's own description, advertised as authored under `untrusted` |
|
|
2961
2989
|
|
|
2962
2990
|
A call to one of the preceding tools that carries a parameter the tool does not advertise is refused before the tool's handler runs, with a `BrowserError` coded `BROWSER_TOOLSET_ARGUMENT` whose message is the receipt: `The look tool takes no ref parameter; call look with search and offset.` `validateBrowserToolArguments` performs that check; a page tool's arguments are the page's to check.
|
|
2963
2991
|
|
|
@@ -2965,6 +2993,8 @@ A text `wait` reads the main document body’s `innerText`; child-frame and shad
|
|
|
2965
2993
|
|
|
2966
2994
|
An absent wait succeeds at its first check if the text was never present. Record an appearance wait before dismissal to prove the text was there. A misspelled string, an outline token such as `expanded=true`, offscreen `content-visibility: auto` text shown by `read`, or shadow-root-owned text shown by `look` can otherwise pass at once without checking the intended exit. A timeout isn’t recorded, and replay and a generated module stop at it.
|
|
2967
2995
|
|
|
2996
|
+
The `capture` tool returns only the saved image's absolute path. Set `full` to `true` for the full page or `false` for the viewport. It requires a trusted view with screenshot support and a runs store with `snapshot`; otherwise it refuses with `BROWSER_CAPTURE_UNTRUSTED` or `BROWSER_CAPTURE_UNAVAILABLE`. A held replay refuses it with `BROWSER_TOOLSET_BUSY`. It remains available with read-only journeys, like replay artifacts, and creates no journey or replay record.
|
|
2997
|
+
|
|
2968
2998
|
### Receipts
|
|
2969
2999
|
|
|
2970
3000
|
On `look`, `read`, `plain`, `tabs`, and `journeys`, the required `search` string supplies whole words to match, not a site-search request. Use an empty string to list without matches. Words shorter than 3 letters or digits are ignored. On the first page only, entries sharing the most distinct words come first in a block using at most half the available room. `look` and `tabs` show matching rows; `read` and `plain` show `[OFFSET] LINE`; `journeys` shows `[OFFSET] HEADING` for matching journey headings. The block is outside the paged text, so offsets always address the original projection. An oversized first row is cut with `…` without splitting a surrogate pair, reserving room for the first later row that can fit beside it only when the cut keeps the leading token through its first space. Otherwise it cuts without reserving. Later rows that do not fit are skipped so shorter rows can follow. No matching word or no character before the ellipsis means no block.
|
|
@@ -3061,9 +3091,9 @@ In the following table `URL` is an address, `REF` an element reference, `ROLE` a
|
|
|
3061
3091
|
|
|
3062
3092
|
The store proof measured the journey tools and `type`'s `secret` at 798 prompt tokens per turn on the store model's tokenizer (`qwen3.5:2b-q4_K_M`), and the full tool list at 1 651, on 2026-10-01 against the tree at `4a10abe`; the measurement moves with the tool copy. A 4 096-token window cut a page task's third turn, while a 16 384-token window held the proof's journey conversation. When a replay's final view must show a delayed confirmation, end the recording with a `wait` for that confirmation. When a step dismisses a message or closes a panel, follow it with a `wait` with `absent` set to `true` for its text, so the journey keeps the exit check.
|
|
3063
3093
|
|
|
3064
|
-
A vocabulary case in [`tests/src/core/BrowserToolset.test.ts`](../tests/src/core/BrowserToolset.test.ts) bounds the copy a model reads, each tool's compact JSON name, description, and input schema, at 3
|
|
3094
|
+
A vocabulary case in [`tests/src/core/BrowserToolset.test.ts`](../tests/src/core/BrowserToolset.test.ts) bounds the copy a model reads, each tool's compact JSON name, description, and input schema, at 3 400 characters for the journey tools plus `type`'s `secret` property and at 7 000 for the full list. With `capture`, the measured full copy is 6 952 characters; 7 000 is the smallest multiple of 50 that holds it. The journey copy measures 3 367, giving the same bound rule 3 400. The character bound fails the suite when the copy grows, with no tokenizer installed; it is not a token count.
|
|
3065
3095
|
|
|
3066
|
-
A journey is one user intent kept as JSON: a `name`, a one-sentence `description`, the `parameters` it takes, the `next` step number, and `steps` that mirror the toolset's own tool calls. An acting step names its element by role and exact accessible name, the way a receipt names it, and keeps the record-time `reference` and a `css` selector only as evidence a developer reads when a resolution is refused; replay never reads either. A `switch` step names its tab by URL and title. A model records, lists, edits, replays, and forgets journeys through the
|
|
3096
|
+
A journey is one user intent kept as JSON: a `name`, a one-sentence `description`, the `parameters` it takes, the `next` step number, and `steps` that mirror the toolset's own tool calls. An acting step names its element by role and exact accessible name, the way a receipt names it, and keeps the record-time `reference` and a `css` selector only as evidence a developer reads when a resolution is refused; replay never reads either. A `switch` step names its tab by URL and title. A model records, lists, edits, replays, and forgets journeys through the journey tools; a developer compiles the same steps into a module. `validateBrowserJourney` asserts these invariants, and [`tests/src/core/validators.test.ts`](../tests/src/core/validators.test.ts) gives each one a failing case:
|
|
3067
3097
|
|
|
3068
3098
|
1. `name` matches `BROWSER_JOURNEY_NAME_PATTERN`: lowercase words joined by hyphens, at most 64 characters, and none of the reserved device names `con`, `prn`, `aux`, `nul`, `com1` to `com9`, and `lpt1` to `lpt9`.
|
|
3069
3099
|
2. A journey has at least one step. Step ids are unique, each is `s` followed by a number below `next`, and an added step takes `next` and increments it, so a removed id is never reused.
|
|
@@ -3071,7 +3101,7 @@ A journey is one user intent kept as JSON: a `name`, a one-sentence `description
|
|
|
3071
3101
|
4. Every binding names a declared parameter, and every declared parameter is bound by at least one step.
|
|
3072
3102
|
5. A secret parameter binds `type.text` only and has no default.
|
|
3073
3103
|
6. A journey survives `JSON.stringify` and `parseBrowserJourney` unchanged.
|
|
3074
|
-
7. A step's action is `click`, `type`, `press`, `navigate`, `wait`, `dialog`, `switch`, an adopted page tool, or `unresolved`; `look`, `read`, `plain`, `tabs`, and the
|
|
3104
|
+
7. A step's action is `click`, `type`, `press`, `navigate`, `wait`, `dialog`, `switch`, an adopted page tool, or `unresolved`; `look`, `read`, `plain`, `tabs`, and the journey tools are never steps.
|
|
3075
3105
|
|
|
3076
3106
|
### Record a journey
|
|
3077
3107
|
|
|
@@ -3223,7 +3253,7 @@ These invariants hold across the four faces (`src/core`, `src/browser`, `src/ser
|
|
|
3223
3253
|
18. **Actions run one at a time.** The toolset runs actions in first-in, first-out order, and an action holds the queue until its receipt is produced; an action whose signal aborts while queued sends nothing. After a `mousePressed` or `keyDown` is sent, the matching release is sent without the signal, so an abort never leaves a button or key down, and the next action waits for a pending release. Every result and error message is cut at `limit` characters plus a footer. A `click`, `type`, or `press` on a page opens `page.navigation.record(frame)` before its first input and settles its receipt through that record, so the receipt's view follows the navigation the record selects, and the toolset holds no frame, session, or loader state of its own. While a replay holds the toolset, an action admitted after the hold that does not carry the hold's token is refused with `BROWSER_TOOLSET_BUSY` rather than queued, and the actions admitted before the hold complete first. The queue, bounds, destroy, hold, and navigation settlement cases in [`tests/src/core/BrowserToolset.test.ts`](../tests/src/core/BrowserToolset.test.ts), the selection cases in [`tests/src/core/BrowserNavigationRecord.test.ts`](../tests/src/core/BrowserNavigationRecord.test.ts), and the `claim 6` block of [`tests/service/journey.test.ts`](../tests/service/journey.test.ts) pin it.
|
|
3224
3254
|
19. **A dialog interrupts every tool and stages `dialog`.** Every pending step of every tool is raced against the page's `dialog` event, so a tool returns a receipt naming the dialog while the blocked command waits; the `dialog` tool is advertised while the dialog is open and bypasses the queue, and every other tool refuses with a message naming the open dialog and ending `call dialog.` A replay admits a `dialog` step only after an `interrupted` action, the continuation the toolset stages, and under a hold a `dialog` from another caller is refused with `BROWSER_TOOLSET_BUSY`. The dialog cases in [`tests/src/core/BrowserToolset.test.ts`](../tests/src/core/BrowserToolset.test.ts) and [`tests/src/core/BrowserReplay.test.ts`](../tests/src/core/BrowserReplay.test.ts), the `confirm()` and `beforeunload` dialog cases in [`tests/service/toolset.test.ts`](../tests/service/toolset.test.ts), and the `claim 6` block of [`tests/service/journey.test.ts`](../tests/service/journey.test.ts) pin it.
|
|
3225
3255
|
20. **CDP input is trusted and DOM input is not.** A page's `trusted` is `true`: clicks, keys, and hovers are `Input` events whose `isTrusted` is `true`. A DOM view's `trusted` is `false`: `click` is `HTMLElement.click()`, `fill` is the native value setter plus `input` and `change`, and `submit` is `requestSubmit()` observed by a `submit` listener, so a form that fails validation reports `did not submit` with the field's `validationMessage`. Its `click` and `type` receipts end `(untrusted event)`. It refuses rather than fakes a key press, a navigation, a file chooser, typing into `contenteditable`, a link or form whose target opens another browsing context, a disabled control, and a cross-origin frame. [`tests/src/browser/elements/BrowserDOMElement.test.ts`](../tests/src/browser/elements/BrowserDOMElement.test.ts) and [`tests/service/document.test.ts`](../tests/service/document.test.ts) pin it.
|
|
3226
|
-
21. **The toolset's names are reserved at `start()`.** `start()` rejects with a coded `BrowserError` and adds nothing when the manager already holds `look`, `read`, `plain`, `click`, `type`, `press`, `navigate`, `wait`, `dialog`, `tabs`, or `switch` under a tool the toolset did not add, and a page tool under a reserved name is skipped with `reserved`. A page tool named `unresolved` is also skipped as reserved. A toolset constructed with `journeys` also reserves `record`, `save`, `journeys`, `edit`, `replay`, and `
|
|
3256
|
+
21. **The toolset's names are reserved at `start()`.** `start()` rejects with a coded `BrowserError` and adds nothing when the manager already holds `look`, `read`, `plain`, `click`, `type`, `press`, `navigate`, `wait`, `dialog`, `tabs`, or `switch` under a tool the toolset did not add, and a page tool under a reserved name is skipped with `reserved`. A page tool named `unresolved` is also skipped as reserved. A toolset constructed with `journeys` also reserves `record`, `save`, `journeys`, `edit`, `replay`, `forget`, and `capture`: construction refuses a manager that holds one with `BROWSER_TOOLSET_RESERVED`, and a page tool under one is skipped with `reserved`. The `browse` server keeps its dispatchers on a manager of its own and forwards to the toolset's, so the toolset meets no foreign name. A consumer that replaces a reserved name after `start()` breaks the path a receipt names, such as `call dialog`. [`tests/src/core/BrowserToolset.test.ts`](../tests/src/core/BrowserToolset.test.ts), [`tests/src/core/BrowserJourneyToolset.test.ts`](../tests/src/core/BrowserJourneyToolset.test.ts), and [`tests/src/server/BrowserMCPServer.test.ts`](../tests/src/server/BrowserMCPServer.test.ts) pin it.
|
|
3227
3257
|
22. **The in-page toolset never drives its own document by default.** An action that navigates the realm's own document cannot return, so `createBrowserDOMView` and `createDocumentToolset` refuse `globalThis.document` with `BROWSER_DOCUMENT_OWN` unless `own` is `true`. [`tests/src/browser/factories.test.ts`](../tests/src/browser/factories.test.ts) pins it.
|
|
3228
3258
|
23. **Limit: an `alert()` blocks the driven document.** The DOM placement never replaces `window.alert`, `confirm`, or `prompt`, so a click that opens one blocks the driven document's thread and the action does not return until a person answers it; the CDP placement stages `dialog` instead. [`tests/guides.test.ts`](../tests/guides.test.ts) pins that no `src/browser` module assigns those functions.
|
|
3229
3259
|
24. **Limit: a `debugging` page tool is not adopted.** [Declared conformance gaps](#declared-conformance-gaps) records this limit in its entry "A `debugging` page tool is not adopted". [`tests/src/core/BrowserToolset.test.ts`](../tests/src/core/BrowserToolset.test.ts) and the skip rows of [`tests/conformance.test.ts`](../tests/conformance.test.ts) pin it.
|
|
@@ -3569,19 +3599,21 @@ The `browse` binary serves the vocabulary and the journey tools over MCP on stdi
|
|
|
3569
3599
|
- `BROWSE_HEADLESS`: `true`, `false`, `1`, or `0`. Default: `true`.
|
|
3570
3600
|
- `BROWSE_EXECUTABLE`: the path of the Chromium executable. Default: the browser `findSystemBrowser` finds.
|
|
3571
3601
|
- `BROWSE_READONLY`: `true`, `false`, `1`, or `0`; `true` refuses `record`, `save`, `edit`, and `forget`, and `replay` still writes runs. Default: `false`.
|
|
3572
|
-
- `BROWSE_POOL`: an integer from `1` through `3` setting the number of browsers the server keeps
|
|
3602
|
+
- `BROWSE_POOL`: an integer from `1` through `3` setting the number of browsers the server keeps, with holder admission bounded separately by `BROWSE_CONTEXTS`; see [Run work in parallel](#run-work-in-parallel). Default: `1`.
|
|
3603
|
+
- `BROWSE_CONTEXTS`: an integer from `1` through `4` setting the number of contexts each browser holds, the shared holder's included; see [Run work in parallel](#run-work-in-parallel). Default: `2`.
|
|
3604
|
+
- `BROWSE_VIEWPORT`: positive integer dimensions in `WIDTHxHEIGHT` form, such as `390x844`. Applies to every page and popup on every browser, refills included. Default: the browser's launch default.
|
|
3573
3605
|
|
|
3574
|
-
A malformed value ends the process with exit code 1 and one line on standard error. Any other value of `BROWSE_HEADLESS` or `BROWSE_READONLY`,
|
|
3606
|
+
A malformed value ends the process with exit code 1 and one line on standard error. Any other value of `BROWSE_HEADLESS` or `BROWSE_READONLY`, a `BROWSE_POOL` or `BROWSE_CONTEXTS` that is not an integer, and a malformed `BROWSE_VIEWPORT` write a `BROWSER_SERVER_ENVIRONMENT` line, such as `browse: BROWSER_SERVER_ENVIRONMENT: BROWSE_HEADLESS must be true, false, 1, or 0, not "sometimes"`. Viewport dimensions must be positive safe integers written as decimal digits with a lowercase `x` separator and no whitespace. An integer `BROWSE_POOL` outside `1` through `3` writes `browse: BROWSER_SERVER_OPTIONS: pool.size must be an integer from 1 through 3`, and an integer `BROWSE_CONTEXTS` outside `1` through `4` writes `browse: BROWSER_SERVER_OPTIONS: pool.contexts must be an integer from 1 through 4`. On Linux a server running as root launches Chromium with `--no-sandbox`, because Chromium refuses to start as root with its sandbox on.
|
|
3575
3607
|
|
|
3576
|
-
Chromium starts when the server starts, before the client sends a request. The server launches its first browser, checks that it answers a CDP ping, and
|
|
3608
|
+
Chromium starts when the server starts, before the client sends a request. The server launches its first browser, checks that it answers a CDP ping, and places the shared holder, which the named tools drive, in that browser's prepared context. `initialize` and every tool call wait for that placement, and `ping` and `tools/list` answer while the browser warms. With `BROWSE_POOL` at `2` or `3`, the other browsers warm after the first, and `initialize` does not wait for them. A launch that fails is retried one time. The end of input or `SIGTERM` closes every browser and removes its profile, the process exits with code 0, and a run without a fault writes nothing to standard error.
|
|
3577
3609
|
|
|
3578
3610
|
A client gives a server a limited time to answer `initialize`. On 2026-10-03, Claude Code's documentation gave 30 s and connected servers in the background, the Codex configuration reference gave 10 s through `startup_timeout_sec`, and Cursor's documentation gave no limit; see [Claude Code's MCP documentation](https://code.claude.com/docs/en/mcp), [the Codex configuration reference](https://learn.chatgpt.com/docs/config-file/config-reference), and [Cursor's MCP documentation](https://cursor.com/docs/context/mcp). On Windows 11 with Edge 154 on 2026-10-04, while a browser test suite ran beside it, the built binary answered `initialize` at most 2.07 s after its spawn at every `BROWSE_POOL` size, a leftover browser to sweep included. No client needs a longer startup timeout.
|
|
3579
3611
|
|
|
3580
|
-
Set `BROWSE_POOL` to `2` or `3` to keep
|
|
3612
|
+
Set `BROWSE_POOL` to `2` or `3` to keep more than one browser. Each browser warms with one prepared context, and `acquire` places a holder on the live browser with the fewest occupied contexts, so a browser that serves no holder takes the next one. After a browser loss, each holder that was on it recovers at its next call: in a free context on another browser, or after the replacement launch when no browser has a free context. Concurrent calls on one holder share its one recovery. At `1`, every recovery after a browser loss waits for the replacement launch. In the contexts measurement on Windows 11 with Edge 154.0.4258.53 on 2026-10-05, acquiring a context took 113 to 266 ms and relaunching a browser 980 to 1898 ms.
|
|
3581
3613
|
|
|
3582
|
-
When
|
|
3614
|
+
When a holder loses its browser or its context, the shared holder's included, browse never repeats a call. A loss is the browser process exiting, its CDP connection dropping, or a CDP ping it fails before a call or after a failed one; a current-page renderer crash replaces only its holder's context, and a crashed background tab leaves the holder attached. The following list gives what each call answers around a loss:
|
|
3583
3615
|
|
|
3584
|
-
- A call after the loss runs
|
|
3616
|
+
- A call after the loss runs in a fresh context that starts at `about:blank`, and its text opens with a `BROWSER_SERVER_CRASH:` note that names the cause and the lost page's URL. An element reference from the lost page is refused.
|
|
3585
3617
|
- A call the loss interrupts answers `BROWSER_SERVER_UNRESOLVED:`: its outcome is unknown, and browse did not repeat it. Read the page before you repeat the call.
|
|
3586
3618
|
- A call that completed before the loss keeps its result, and the next call carries the note.
|
|
3587
3619
|
- A call that fails for its own reason on a live browser answers its plain failure, with no note.
|
|
@@ -3589,6 +3621,10 @@ When the session's browser is lost, browse never repeats a call. A loss is the b
|
|
|
3589
3621
|
|
|
3590
3622
|
A hang of the whole browser during a call can take two command deadlines, the call's and then the post-failure ping's, so in Codex set `tool_timeout_sec` for `browse` higher than the default 60 s.
|
|
3591
3623
|
|
|
3624
|
+
Cancelling a call ends its wait without cancelling the browser's liveness check. Concurrent checks share one ping per slot, so a later call joins the remaining deadline. A failed ping retires the slot and leaves the `BROWSER_SERVER_CRASH:` note for the successor's outcome.
|
|
3625
|
+
|
|
3626
|
+
A ping deadline forces the owned process to exit before slot teardown. On Windows, the service proof launches a Node stand-in that completes CDP setup and then withholds replies; it asserts that the pid exits and the call runs on a real browser successor. The `SIGSTOP` proof remains conditional on the host accepting that signal.
|
|
3627
|
+
|
|
3592
3628
|
When no browser starts at setup, the server refuses on each surface and keeps answering until its input ends. Setup fails, for example, when the first browser fails to launch twice or the root cannot be created. The following list gives what each request answers, where `CAUSE` is the failure's message:
|
|
3593
3629
|
|
|
3594
3630
|
- `initialize` answers the JSON-RPC error `-32000` with the message `BROWSER_SERVER_UNAVAILABLE: CAUSE` and `data.code` set to `BROWSER_SERVER_UNAVAILABLE`.
|
|
@@ -3599,7 +3635,7 @@ When no browser starts at setup, the server refuses on each surface and keeps an
|
|
|
3599
3635
|
The server writes each diagnostic as one line on standard error in the form `browse: CODE: DETAIL`, where `CODE` is one of the following codes and `DETAIL` is the cause:
|
|
3600
3636
|
|
|
3601
3637
|
- `BROWSER_SERVER_LAUNCH`: a browser failed to start, and the pool retries it within its bound.
|
|
3602
|
-
- `BROWSER_SERVER_EXHAUSTED`: setup's warming or a call's acquire rejected with the pool's `create` error after the launch bound was spent; a
|
|
3638
|
+
- `BROWSER_SERVER_EXHAUSTED`: setup's warming or a call's acquire rejected with the pool's `create` error after the launch bound was spent; a browser warming after setup that spends the bound writes `BROWSER_SERVER_LAUNCH` lines without this line.
|
|
3603
3639
|
- `BROWSER_SERVER_UNAVAILABLE`: setup was refused, and the binary writes this line before it exits with code 1.
|
|
3604
3640
|
- `BROWSER_SERVER_TEARDOWN`: a browser's termination is unconfirmed or its teardown failed; its profile folder stays until the shutdown recheck, and a shutdown that meets it exits with code 1.
|
|
3605
3641
|
- `BROWSER_SERVER_SWEEP`: the sweep could not read the `.profiles` folder under `BROWSE_ROOT`, and the server serves without it.
|
|
@@ -3616,13 +3652,13 @@ Claude Code 2.1.286 registers the binary for a checkout in four steps:
|
|
|
3616
3652
|
|
|
3617
3653
|
Steps 2 and 3 ran on 2026-10-01 against a scratch checkout whose `node_modules/@orkestrel/browser` linked this package's build, with their output quoted. The approval in step 4 is interactive, and no approved Claude Code session drove the server in that run; the exchange that follows drove the command the entry names over stdio directly. With `@orkestrel/mcp` 0.0.34, a client that subscribes through `subscriptions/listen` receives `notifications/tools/list_changed` when the server mirrors a page tool, and a client that connects through `initialize` receives none and sees the tool at its next `tools/list`; which of the two Claude Code 2.1.286 opens is unread.
|
|
3618
3654
|
|
|
3619
|
-
The following fence adapts the recorded exchange to the vocabulary that replaces `what` with `search` and adds `plain
|
|
3655
|
+
The following fence adapts the recorded exchange to the vocabulary that replaces `what` with `search` and adds `plain` and the holder tools, one request and the text of its answer per line, with the view after each receipt left out; the replay wrote `tmp/browsers/add-kettle/runs/2026-10-01T03-07-06.041Z-6d7e/` with `run.json`, `s1.png`, `s2.png`, and `s3.png`.
|
|
3620
3656
|
|
|
3621
3657
|
```ts
|
|
3622
3658
|
// -> initialize { protocolVersion: '2025-06-18' }
|
|
3623
3659
|
// <- { protocolVersion: '2025-06-18', serverInfo: { name: 'browse', version: '0.0.19' }, capabilities: { tools: {} } }
|
|
3624
3660
|
// -> tools/list
|
|
3625
|
-
// <- look, read, plain, click, type, press, navigate, wait, dialog, tabs, switch, record, save, journeys, edit, replay, forget
|
|
3661
|
+
// <- look, read, plain, click, type, press, navigate, wait, dialog, tabs, switch, record, save, journeys, edit, replay, forget, acquire, execute, tools, destroy, capture
|
|
3626
3662
|
// -> tools/call navigate { url: 'http://127.0.0.1:35605/' }
|
|
3627
3663
|
// <- Navigated to http://127.0.0.1:35605/.
|
|
3628
3664
|
// -> tools/call record { journey: 'add-kettle' }
|
|
@@ -3656,10 +3692,63 @@ The `packed browse binary` case of [`tests/distribution.test.ts`](../tests/distr
|
|
|
3656
3692
|
On 2026-10-04, Claude Code 2.1.285 under `claude -p --mcp-config FILE --strict-mcp-config` and `codex exec` with `-c mcp_servers.browse.command`, `-c mcp_servers.browse.args`, and `-c mcp_servers.browse.env` overrides each started the built binary, where `FILE` names a JSON file holding the `browse` entry, with no saved client configuration. The following list gives what each client showed:
|
|
3657
3693
|
|
|
3658
3694
|
- Claude Code connects `browse` when setup is refused and shows the refusal as the answer to the first tool call, a text that opens with `BROWSER_SERVER_UNAVAILABLE:` and names the cause.
|
|
3659
|
-
- Codex hides a server whose `initialize` fails: the agent sees no `browse` tools, and neither the agent nor the `exec` output carries the cause.
|
|
3695
|
+
- Codex hides a server whose `initialize` fails: the agent sees no `browse` tools, and neither the agent nor the `exec` output carries the cause. Set `required = true` in the `browse` entry of Codex's MCP configuration: Codex then refuses to start the session and prints the refusal with its cause, such as `required MCP servers failed to initialize: browse: ... BROWSER_SERVER_UNAVAILABLE: spawn ... ENOENT.` (read with `codex exec -c mcp_servers.browse.required=true` on 2026-10-04).
|
|
3660
3696
|
- Codex `exec` asks approval for each `browse` tool that is not read-only. Under the approval policy `never`, it refused `navigate` with `MCP tool call requires approval, but approval policy is never`, and `look` ran.
|
|
3661
3697
|
- A client that ends its session ends the server before its teardown finishes. On Windows 11 no browser stayed running, and one `<pid>-<uuid>` profile folder without a `browse.json` record stayed; the next start on the same root removes it.
|
|
3662
3698
|
|
|
3699
|
+
### Run work in parallel
|
|
3700
|
+
|
|
3701
|
+
Acquire a holder when work needs a context of its own beside the shared one, such as a subagent that checks a page while you drive another through the named tools. Each holder runs in its own isolated context on a pooled browser, with its own pages and downloads directory, so its calls run beside the shared holder's calls and beside every other holder's. The named tools, such as `navigate` and `look`, keep serving the shared holder unchanged.
|
|
3702
|
+
|
|
3703
|
+
The following list gives the holder tools that `BROWSER_SERVER_COPY` defines:
|
|
3704
|
+
|
|
3705
|
+
- `acquire { purpose }`: admits a holder and answers JSON with the server-minted `holder` id and its browser's `tools` catalog. The `purpose` text describes the work and names the holder in a capacity refusal. Hand the id to the agent that does the work.
|
|
3706
|
+
- `execute { holder, name, arguments }`: runs the tool `name` from the holder's catalog with that tool's own arguments inside `arguments`, and answers what the tool answers.
|
|
3707
|
+
- `tools { holder }`: lists the holder's catalog, including the page tools its current page registers.
|
|
3708
|
+
- `destroy { holder }`: ends the holder and closes its context. A call still running on that holder answers `BROWSER_SERVER_UNRESOLVED:`, and a repeated `destroy` of the same holder succeeds again.
|
|
3709
|
+
|
|
3710
|
+
The following fence shows one holder from `acquire` to `destroy`, one request and the text of its answer per line, with the view after the receipt left out; `HOLDER_ID` stands for the id that `acquire` returns.
|
|
3711
|
+
|
|
3712
|
+
```ts
|
|
3713
|
+
// -> tools/call acquire { purpose: 'Check the cart while the main agent edits the catalog' }
|
|
3714
|
+
// <- {"holder":"HOLDER_ID","tools":[/* the definitions of look, read, plain, and the rest of the catalog */]}
|
|
3715
|
+
// -> tools/call execute { holder: 'HOLDER_ID', name: 'navigate', arguments: { url: 'https://shop.example/cart' } }
|
|
3716
|
+
// <- Navigated to https://shop.example/cart.
|
|
3717
|
+
// -> tools/call tools { holder: 'HOLDER_ID' }
|
|
3718
|
+
// <- {"holder":"HOLDER_ID","tools":[/* the same catalog, with the page tools the cart page registers */]}
|
|
3719
|
+
// -> tools/call destroy { holder: 'HOLDER_ID' }
|
|
3720
|
+
// <- Holder destroyed.
|
|
3721
|
+
```
|
|
3722
|
+
|
|
3723
|
+
`destroy` closes the holder's context and removes its downloads directory, under `ROOT/.profiles/PID-UUID/contexts/GENERATION-UUID/downloads/`. Copy a file out before destroying its holder. The end of the server closes the shared holder's context and removes its downloads too.
|
|
3724
|
+
|
|
3725
|
+
A holder that `acquire` admits after a `destroy` starts on a clean slate, which is narrower than a fresh browser. Its context starts with no cookies, local or session storage, IndexedDB data, Cache Storage, service worker registration, HTTP cache entry, or permission override; with its own tabs, element references, and catalog; and with an empty downloads directory. The browser process stays and keeps the memory it holds. In the contexts measurement on Windows 11 with Edge 154.0.4258.53 on 2026-10-05, a browser's private memory rose from about 505 MiB to about 670 MiB over its first 5 context generations and then held through 30; a longer run might show more.
|
|
3726
|
+
|
|
3727
|
+
`BROWSE_POOL`, or `pool.size` for `BrowserMCPServer`, counts browsers. `BROWSE_CONTEXTS`, or `pool.contexts`, bounds contexts per browser. Admission is their product, with the shared holder counted; the defaults admit one named holder beside the shared holder. With `contexts: 1`, a size of `3` admits two named holders. At capacity, `acquire` answers immediately with `BROWSER_SERVER_BUSY:` and launches nothing; its text lists each holder by id and purpose, the shared holder as `shared (Shared browser)`, and tells the agent to destroy a holder it no longer needs or to call the named tools to share the shared browser. A holder that `destroy` is ending counts until its context disposal settles. An unknown or ended id answers `BROWSER_SERVER_HOLDER:` and never falls back to the shared holder.
|
|
3728
|
+
|
|
3729
|
+
A failure costs a context only to the holders it reaches, and each of them keeps its id. Each gets a fresh context at its own next call, which answers as the loss list in [Register the browse binary with Claude Code](#register-the-browse-binary-with-claude-code) gives. The following list gives the scope of each failure:
|
|
3730
|
+
|
|
3731
|
+
- A browser loss costs every holder on that browser its context, the shared holder's included. Each receives its own `BROWSER_SERVER_CRASH:` note on its next call, naming the URL its own page last showed.
|
|
3732
|
+
- Holders on another browser receive no note and keep their pages and web state.
|
|
3733
|
+
- A crash of a holder's current page costs only that holder's context. The browser and the other holders on it stay attached.
|
|
3734
|
+
- A call that either failure interrupts answers `BROWSER_SERVER_UNRESOLVED:`, and browse never repeats it.
|
|
3735
|
+
|
|
3736
|
+
Keep the default single browser. Set `BROWSE_POOL` to `2` only when a browser loss must leave some holders running: the holders on the surviving browser keep their pages, at the cost of a second idle browser. In the contexts measurement on Windows 11 with Edge 154.0.4258.53 on 2026-10-05, with one holder, a second browser added about 1 GiB of private memory, 2551 MiB against 1414 MiB, and two holders used 917 MiB as contexts on one browser against 1610 MiB on two browsers.
|
|
3737
|
+
|
|
3738
|
+
Replays of one journey run together across holders, each writing its own run. While a replay of a journey persists its run on any holder, `forget` of that journey answers `BROWSER_JOURNEY_LOCKED: Journey NAME is locked; call forget again.`, where `NAME` is the journey's name, and a replay that starts while `forget` runs answers the same refusal for `replay`.
|
|
3739
|
+
|
|
3740
|
+
The following list gives the limits of holders:
|
|
3741
|
+
|
|
3742
|
+
- The confirmed defaults, `BROWSE_POOL` of `1` and `BROWSE_CONTEXTS` of `2`, admit one named holder beside the shared holder. The user confirmed them on 2026-10-05 from M1 (2026-10-05, library-level under a core-test load: 21.85 s at one context against 12.91 s at two) and M2 (2026-10-05, through the built binary on a quiet host: 49.73 s at one context against 29.72 s at two, with disjoint ranges). M2 did not establish a gain from two contexts to three.
|
|
3743
|
+
- Contexts isolate automation, not hostile tenants. Every holder on a browser runs in that browser's process, so drive pages that must not share a process from separate `browse` servers.
|
|
3744
|
+
- Browser relaunches have no bound while a holder uses the browser. A browser lost under a holder spends nothing from the launch bound, and the next grant of a browser restores the bound, so a browser that crashes under every holder's use relaunches at every call that meets the crash. At the default `BROWSE_POOL` of `1` the shared holder always uses the only browser, so a browser that fails every context creation or disposal relaunches the same way.
|
|
3745
|
+
- A renderer that hangs without crashing raises no loss. While its browser answers the CDP ping, a call that fails on the hung page answers its plain failure with no note and no launch, and the holder keeps that context until `destroy` or a later crash of its page.
|
|
3746
|
+
- With `BROWSE_HEADLESS=false`, a popup hides the page that opened it, and the hidden page's animation frames stop, so a click on that page can time out. In the contexts measurement on Windows 11 with Edge 154.0.4258.53 on 2026-10-05, headed clicks on a page behind a popup succeeded 3 of 9 times, and headless clicks 9 of 9. The visibility of every busy holder's page is proven in headless mode only.
|
|
3747
|
+
- `tools/list` mirrors only the shared holder's page tools. A holder's page tools appear only in the catalog that `acquire` and `tools` return, and run through `execute`.
|
|
3748
|
+
- A holder keeps its context until `destroy` or the end of the server, with no idle timeout. An abandoned holder costs one context and one place of capacity, and the `BROWSER_SERVER_BUSY:` text names it.
|
|
3749
|
+
- Journey admission covers the holders of one server. A second `browse` process on the same root can still race a replay against `forget`.
|
|
3750
|
+
- Codex asks approval for `execute` and `destroy`, because neither is advertised read-only, so under an approval policy that asks, every call a holder makes through `execute` prompts. `acquire` carries no read-only annotation either, and `tools` is advertised read-only.
|
|
3751
|
+
|
|
3663
3752
|
### Publish native tools to a page
|
|
3664
3753
|
|
|
3665
3754
|
A page that runs a built-in browser agent reads tools from its WebMCP registry, and `@orkestrel/mcp`'s bridge publishes a tool manager there. Publish `toolset.native`, never `toolset.tools`: the manager also holds the page tools the toolset adopted from the same registry, and publishing them would register each one as a proxy of itself. The following fence drives a same-origin child document, adopts that document's page tools through the bridge, and publishes the five generic tools back to it.
|
|
@@ -3704,6 +3793,8 @@ The following list names each test file and what it proves.
|
|
|
3704
3793
|
- [`tests/setupServer.test.ts`](../tests/setupServer.test.ts): the ports, processes, scratch directories, CDP test server, fixture pages, the journey module stage, and the browse launch double and stdio pair the server and service suites share; the filesystem suite the file stores run, two processes over one directory included, lives in `tests/src/server/stores/suite.ts`.
|
|
3705
3794
|
- [`tests/setupService.test.ts`](../tests/setupService.test.ts): the service project's browser flags, engine selection, and registry reading.
|
|
3706
3795
|
- [`tests/service/browser.test.ts`](../tests/service/browser.test.ts): a real browser's launch, navigation, elements, frames, routes, snapshots, PDF, result limits, reattachment, transport loss, and shutdown; the out-of-process frame click, occlusion, hit-test, stale-reference, reading, and wait proofs; and the `WebMCP` domain reading and its live case.
|
|
3796
|
+
|
|
3797
|
+
- [`tests/service/browse.test.ts`](../tests/service/browse.test.ts): eager startup, process and renderer loss, forced exit of a hung Node stand-in, successor calls, and profile cleanup. The synthesized orphan case waits for the owned browser's process-exit event within the sweep's attach and close deadlines plus `BROWSER_KILL_GRACE_MS`.
|
|
3707
3798
|
- [`tests/service/toolset.test.ts`](../tests/service/toolset.test.ts): one toolset task end to end through `createToolManager().execute`, the cart view in the receipt of a click whose form the server answers with a 303 redirect, the destination view after a form submission in a child frame, the `confirm()` and `beforeunload` dialogs, popups and tabs, and each receipt within its deadline; its `journey perform equality` block compares `perform` with a direct call for every native action, an editable combobox, a click that opens a dialog, a tab switch, a link that opens a popup, and a click in a same-origin child frame of the DOM placement.
|
|
3708
3799
|
- [`tests/service/codegen.test.ts`](../tests/service/codegen.test.ts): the page recorder's steps for each gesture on Chromium against the fixture's own event log, the edit boundaries, and a password that never crosses the binding.
|
|
3709
3800
|
- [`tests/service/journey.test.ts`](../tests/service/journey.test.ts): the `journey semantic replay` block, a changed page resolved by name with a duplicate refused before any input and a matching CSS selector refused; the `compiled module equality` block, each generated module and its replay reaching one page outcome with the same receipts, a gap, and the type check; and the `journey replay coordination, preparation, tools, and secrecy` block, the hold, a timeout, preparation before any side effect, the tools over the file stores, and a secret kept out of every artifact.
|
|
@@ -3747,7 +3838,7 @@ The following list names each test file and what it proves.
|
|
|
3747
3838
|
- [`tests/src/core/recorders/BrowserRecorder.test.ts`](../tests/src/core/recorders/BrowserRecorder.test.ts): the toolset recorder's steps, the interrupted and child-frame gaps, the held journey's gap, secret bindings, and its lifecycle.
|
|
3748
3839
|
- [`tests/src/core/BrowserReplay.test.ts`](../tests/src/core/BrowserReplay.test.ts): preparation before any hold, execution and stopping, the dialog continuation, abort, the run write and its bound, captures through the run store, output, and secrets.
|
|
3749
3840
|
- [`tests/src/core/BrowserHold.test.ts`](../tests/src/core/BrowserHold.test.ts): the hold's token and its one release.
|
|
3750
|
-
- [`tests/src/core/BrowserJourneyToolset.test.ts`](../tests/src/core/BrowserJourneyToolset.test.ts): the
|
|
3841
|
+
- [`tests/src/core/BrowserJourneyToolset.test.ts`](../tests/src/core/BrowserJourneyToolset.test.ts): the journey tools, every result and refusal verbatim, the listing and its cut, `readonly`, the signal, the `ref` conversion, and destroy.
|
|
3751
3842
|
- [`tests/src/core/stores/MemoryBrowserJourneyStore.test.ts`](../tests/src/core/stores/MemoryBrowserJourneyStore.test.ts) and [`tests/src/core/stores/MemoryBrowserRunStore.test.ts`](../tests/src/core/stores/MemoryBrowserRunStore.test.ts): the shared store suites over the memory twins, and a capture that keeps no bytes.
|
|
3752
3843
|
- [`tests/src/core/validators.test.ts`](../tests/src/core/validators.test.ts): each journey invariant with a failing case, the step, parameter, and edit validators, and the run validator.
|
|
3753
3844
|
- [`tests/src/core/BrowserDialog.test.ts`](../tests/src/core/BrowserDialog.test.ts): accepting and dismissing a dialog.
|