cdp-mcp-server 5.0.1 → 5.0.3

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/README.md ADDED
@@ -0,0 +1,91 @@
1
+ # CDP Browser MCP Server
2
+
3
+ Connects AI agents to your **real running Chrome** — your cookies, logins, and
4
+ extensions stay intact. 14 tools / 90+ actions over the Chrome DevTools
5
+ Protocol: navigation, accessibility snapshots, element interaction, smart form
6
+ filling, network interception, device emulation, cookies/storage, and a full
7
+ JS debugger.
8
+
9
+ ## Install
10
+
11
+ ```bash
12
+ npm install -g cdp-mcp-server
13
+ ```
14
+
15
+ Or reference it directly in any MCP client (no global install needed):
16
+
17
+ ```json
18
+ {
19
+ "mcpServers": {
20
+ "cdp-browser": {
21
+ "command": "npx",
22
+ "args": ["-y", "cdp-mcp-server@latest"]
23
+ }
24
+ }
25
+ }
26
+ ```
27
+
28
+ ## One-time Chrome setup
29
+
30
+ Chrome must expose the DevTools protocol. Pick one:
31
+
32
+ 1. Open `chrome://flags/#enable-remote-debugging`, set **Enabled**, relaunch
33
+ (persists across restarts — recommended)
34
+ 2. Or launch Chrome with the flag:
35
+ `chrome.exe --remote-debugging-port=9222`
36
+
37
+ Verify it works: open `http://localhost:9222/json/version` — you should see
38
+ JSON output.
39
+
40
+ The server auto-connects to Chrome on your first tool call. Edge and Brave
41
+ work the same way (same protocol).
42
+
43
+ ## Troubleshooting
44
+
45
+ Connect errors name the exact failure mode and print the exact fix:
46
+
47
+ - `no browser with debugging enabled` — nothing listening on any debug port,
48
+ no browser processes found: launch with `--remote-debugging-port=9222`
49
+ plus an explicit `--user-data-dir`
50
+ - Browser running but launched without the flag — same guidance; Chrome/Brave
51
+ 153+ can instead enable `chrome://inspect/#remote-debugging`
52
+ ("Allow remote debugging for this browser instance")
53
+ - Port bound but `/json/version` returns 404 — gated remote-debugging is
54
+ active: click **Allow** on Chrome's permission dialog when the server
55
+ connects (needs a visible browser window), or relaunch with the flag +
56
+ explicit non-default `--user-data-dir`
57
+ - Flag given but connection refused (Chrome 136+ default-profile restriction)
58
+ — pair `--remote-debugging-port` with an explicit **non-default**
59
+ `--user-data-dir` (Chrome for Testing exempt)
60
+
61
+ Discovery scans running browser processes' command lines for the port and
62
+ profile directory (portable/custom installs need zero configuration; full
63
+ command lines are never logged — disable with `CDP_PROCESS_SCAN=false`), and
64
+ can connect via the `chrome://inspect` toggle by reading `DevToolsActivePort`.
65
+ `ping`/`status` report the connection mode (`legacy` | `approval`).
66
+
67
+ ## Environment variables
68
+
69
+ | Variable | Default | Description |
70
+ |----------|---------|-------------|
71
+ | `CDP_PROCESS_SCAN` | `true` | Scan running browser processes' command lines for `--user-data-dir` / `--remote-debugging-port` |
72
+ | `CDP_USER_DATA` | — | Extra User Data directory checked first during discovery |
73
+
74
+ ## Highlights
75
+
76
+ - Stable element refs that survive DOM changes
77
+ - Smart form filling (React/Greenhouse comboboxes, country codes, dates)
78
+ - Auto-waiting after every action (no "click and pray")
79
+ - Token-optimized accessibility snapshots (~15KB)
80
+ - Multi-agent safe: per-agent session isolation + exclusive tab locks
81
+ - Network mocking via request interception
82
+ - Playwright-compatible slim mode for small-context models
83
+
84
+ ## Documentation
85
+
86
+ Full tool reference, environment variables, and guides:
87
+ https://github.com/Tushar49/cdp-browser-mcp#readme
88
+
89
+ ## License
90
+
91
+ MIT
package/dist/config.js CHANGED
@@ -29,6 +29,10 @@ export function loadConfig() {
29
29
  maxTempFiles: 50,
30
30
  maxTempAgeMs: 30 * 60 * 1000, // 30 minutes
31
31
  autoConnectProfile: process.env.CDP_PROFILE || '',
32
+ /** Extra User Data dir checked first during discovery (CDP_USER_DATA). */
33
+ userDataDir: process.env.CDP_USER_DATA || '',
34
+ /** Process command-line scan on discovery failure (default ON). */
35
+ processScan: process.env.CDP_PROCESS_SCAN !== 'false',
32
36
  slimMode: process.env.CDP_SLIM_MODE === 'true',
33
37
  };
34
38
  }
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH;;;;;;GAMG;AACH,MAAM,UAAU,UAAU;IACxB,OAAO;QACL,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,WAAW;QAC5C,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,MAAM,EAAE,EAAE,CAAC;QAErD,kBAAkB;QAClB,aAAa,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,OAAO,EAAE,EAAE,CAAC;QACtE,iBAAiB,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,OAAO,EAAE,EAAE,CAAC;QAC9E,eAAe,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,OAAO,EAAE,EAAE,CAAC;QAC1E,aAAa,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,OAAO,EAAE,EAAE,CAAC;QAE/D,UAAU,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,QAAQ,EAAE,EAAE,CAAC;QACjE,eAAe,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,OAAO,EAAE,EAAE,CAAC;QAE1E,mEAAmE;QACnE,sBAAsB,EACnB,OAAO,CAAC,GAAG,CAAC,oBAAwC,IAAI,QAAQ;QAEnE,YAAY,EAAE,MAAM;QACpB,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,EAAE,EAAE,sBAAsB;QAC/D,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,aAAa;QAE3C,kBAAkB,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE;QAEjD,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,KAAK,MAAM;KAC/C,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH;;;;;;GAMG;AACH,MAAM,UAAU,UAAU;IACxB,OAAO;QACL,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,WAAW;QAC5C,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,MAAM,EAAE,EAAE,CAAC;QAErD,kBAAkB;QAClB,aAAa,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,OAAO,EAAE,EAAE,CAAC;QACtE,iBAAiB,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,OAAO,EAAE,EAAE,CAAC;QAC9E,eAAe,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,OAAO,EAAE,EAAE,CAAC;QAC1E,aAAa,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,OAAO,EAAE,EAAE,CAAC;QAE/D,UAAU,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,QAAQ,EAAE,EAAE,CAAC;QACjE,eAAe,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,OAAO,EAAE,EAAE,CAAC;QAE1E,mEAAmE;QACnE,sBAAsB,EACnB,OAAO,CAAC,GAAG,CAAC,oBAAwC,IAAI,QAAQ;QAEnE,YAAY,EAAE,MAAM;QACpB,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,EAAE,EAAE,sBAAsB;QAC/D,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,aAAa;QAE3C,kBAAkB,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE;QAEjD,0EAA0E;QAC1E,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,EAAE;QAE5C,mEAAmE;QACnE,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,KAAK,OAAO;QAErD,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,KAAK,MAAM;KAC/C,CAAC;AACJ,CAAC"}
@@ -23,22 +23,59 @@ export type { BrowserInstance, ProfileInfo };
23
23
  export declare function discoverBrowserInstances(opts?: DiscoverOptions): BrowserInstance[];
24
24
  /**
25
25
  * Resolve the WebSocket URL by scanning known User Data directories
26
- * for a DevToolsActivePort file. Falls back to querying /json/version
27
- * on the fallback host:port (P0-3).
26
+ * for a DevToolsActivePort file. Falls back to constructing a URL
27
+ * (caller should try /json/version at runtime) (P0-3).
28
28
  *
29
29
  * @param overrideDir User Data dir override (e.g. from `browser.connect`)
30
+ * @param extraPaths Additional dirs to check first (CDP_USER_DATA,
31
+ * process-scan results — configured upstream)
30
32
  * @param fallbackHost Default host (from config)
31
33
  * @param fallbackPort Default port (from config)
32
34
  */
33
- export declare function resolveWsUrl(overrideDir: string | null, fallbackHost: string, fallbackPort: number): WsUrlResult;
35
+ export declare function resolveWsUrl(overrideDir: string | null, extraPaths: string[], fallbackHost: string, fallbackPort: number): WsUrlResult;
34
36
  /**
35
37
  * Async variant that queries /json/version when file-based discovery fails.
36
38
  * P0-3 fix: Uses the HTTP endpoint to get the correct WebSocket URL
37
39
  * instead of guessing.
38
40
  */
39
- export declare function resolveWsUrlAsync(overrideDir: string | null, fallbackHost: string, fallbackPort: number): Promise<WsUrlResult>;
41
+ export declare function resolveWsUrlAsync(overrideDir: string | null, extraPaths: string[], fallbackHost: string, fallbackPort: number): Promise<WsUrlResult>;
40
42
  /**
41
43
  * Find the best matching instance given user input (name, port, or path).
42
44
  * Returns null if no match is found.
43
45
  */
44
46
  export declare function findBestInstance(instances: BrowserInstance[], input: string): BrowserInstance | null;
47
+ export interface CommandLineInfo {
48
+ /** Recognized browser basename (e.g. 'brave'), if the line is a browser. */
49
+ browserName?: string;
50
+ /** Extracted --user-data-dir value, if present. */
51
+ userDataDir?: string;
52
+ /** Extracted --remote-debugging-port value, if present. */
53
+ port?: number;
54
+ }
55
+ export interface ProcessScanResult {
56
+ /** Discovered User Data dirs (deduped, order-stable). */
57
+ userDataDirs: string[];
58
+ /** Discovered debug ports (deduped). */
59
+ ports: number[];
60
+ /** Recognized browser basenames seen running (deduped). */
61
+ browsersRunning: string[];
62
+ }
63
+ /**
64
+ * Parse one process command line. Extracts ONLY the two flags we need —
65
+ * full command lines are never returned or logged (privacy rule).
66
+ */
67
+ export declare function parseBrowserCommandLine(cmd: string): CommandLineInfo;
68
+ type ProcessRunner = (file: string, args: string[], timeoutMs: number) => Promise<string>;
69
+ /**
70
+ * Scan running Chromium-family browser processes for their launch flags.
71
+ * Read-only, same-user, non-elevated. Returns ONLY extracted fields —
72
+ * never raw command lines (privacy rule).
73
+ *
74
+ * Controlled by `CDP_PROCESS_SCAN` (default ON, `false` disables) —
75
+ * enforced by the caller.
76
+ */
77
+ export declare function scanBrowserProcesses(opts?: {
78
+ timeoutMs?: number;
79
+ runner?: ProcessRunner;
80
+ os?: string;
81
+ }): Promise<ProcessScanResult>;
@@ -4,14 +4,16 @@
4
4
  *
5
5
  * Extracted from `discoverChromeInstances` and `getWsUrl` in server.js.
6
6
  */
7
+ import { execFile } from 'child_process';
7
8
  import { readFileSync } from 'fs';
8
- import { join } from 'path';
9
+ import { join, basename } from 'path';
9
10
  import { platform, homedir } from 'os';
10
11
  function getBrowserCandidates() {
11
12
  const os = platform();
12
13
  const home = homedir();
13
14
  if (os === 'win32') {
14
15
  const local = process.env.LOCALAPPDATA || join(home, 'AppData', 'Local');
16
+ const roaming = process.env.APPDATA || join(home, 'AppData', 'Roaming');
15
17
  return [
16
18
  { name: 'Chrome', path: join(local, 'Google', 'Chrome', 'User Data') },
17
19
  { name: 'Chrome Beta', path: join(local, 'Google', 'Chrome Beta', 'User Data') },
@@ -19,6 +21,8 @@ function getBrowserCandidates() {
19
21
  { name: 'Chromium', path: join(local, 'Chromium', 'User Data') },
20
22
  { name: 'Edge', path: join(local, 'Microsoft', 'Edge', 'User Data') },
21
23
  { name: 'Brave', path: join(local, 'BraveSoftware', 'Brave-Browser', 'User Data') },
24
+ { name: 'Vivaldi', path: join(local, 'Vivaldi', 'User Data') },
25
+ { name: 'Opera', path: join(roaming, 'Opera Software', 'Opera Stable') },
22
26
  ];
23
27
  }
24
28
  else if (os === 'darwin') {
@@ -29,6 +33,8 @@ function getBrowserCandidates() {
29
33
  { name: 'Chromium', path: join(appSupport, 'Chromium') },
30
34
  { name: 'Edge', path: join(appSupport, 'Microsoft Edge') },
31
35
  { name: 'Brave', path: join(appSupport, 'BraveSoftware', 'Brave-Browser') },
36
+ { name: 'Vivaldi', path: join(appSupport, 'Vivaldi') },
37
+ { name: 'Opera', path: join(appSupport, 'com.operasoftware.Opera') },
32
38
  ];
33
39
  }
34
40
  else {
@@ -38,6 +44,8 @@ function getBrowserCandidates() {
38
44
  { name: 'Chromium', path: join(home, '.config', 'chromium') },
39
45
  { name: 'Edge', path: join(home, '.config', 'microsoft-edge') },
40
46
  { name: 'Brave', path: join(home, '.config', 'BraveSoftware', 'Brave-Browser') },
47
+ { name: 'Vivaldi', path: join(home, '.config', 'vivaldi') },
48
+ { name: 'Opera', path: join(home, '.config', 'opera') },
41
49
  ];
42
50
  }
43
51
  }
@@ -107,19 +115,22 @@ export function discoverBrowserInstances(opts = {}) {
107
115
  }
108
116
  /**
109
117
  * Resolve the WebSocket URL by scanning known User Data directories
110
- * for a DevToolsActivePort file. Falls back to querying /json/version
111
- * on the fallback host:port (P0-3).
118
+ * for a DevToolsActivePort file. Falls back to constructing a URL
119
+ * (caller should try /json/version at runtime) (P0-3).
112
120
  *
113
121
  * @param overrideDir User Data dir override (e.g. from `browser.connect`)
122
+ * @param extraPaths Additional dirs to check first (CDP_USER_DATA,
123
+ * process-scan results — configured upstream)
114
124
  * @param fallbackHost Default host (from config)
115
125
  * @param fallbackPort Default port (from config)
116
126
  */
117
- export function resolveWsUrl(overrideDir, fallbackHost, fallbackPort) {
127
+ export function resolveWsUrl(overrideDir, extraPaths, fallbackHost, fallbackPort) {
118
128
  const extra = [];
119
129
  if (overrideDir)
120
130
  extra.push(overrideDir);
121
- if (process.env.CDP_USER_DATA)
122
- extra.push(process.env.CDP_USER_DATA);
131
+ for (const p of extraPaths)
132
+ if (p)
133
+ extra.push(p);
123
134
  const candidates = getCandidates(extra);
124
135
  for (const { path: udPath } of candidates) {
125
136
  const portInfo = readPortFile(udPath);
@@ -141,9 +152,9 @@ export function resolveWsUrl(overrideDir, fallbackHost, fallbackPort) {
141
152
  * P0-3 fix: Uses the HTTP endpoint to get the correct WebSocket URL
142
153
  * instead of guessing.
143
154
  */
144
- export async function resolveWsUrlAsync(overrideDir, fallbackHost, fallbackPort) {
155
+ export async function resolveWsUrlAsync(overrideDir, extraPaths, fallbackHost, fallbackPort) {
145
156
  // Try synchronous file-based discovery first
146
- const syncResult = resolveWsUrl(overrideDir, fallbackHost, fallbackPort);
157
+ const syncResult = resolveWsUrl(overrideDir, extraPaths, fallbackHost, fallbackPort);
147
158
  if (syncResult.userDataDir)
148
159
  return syncResult;
149
160
  // File-based discovery failed — try HTTP /json/version endpoint
@@ -173,4 +184,110 @@ export function findBestInstance(instances, input) {
173
184
  i.port.toString() === needle ||
174
185
  i.userDataDir.toLowerCase() === needle) ?? null);
175
186
  }
187
+ // ─── Process Command-Line Scan (5.0.3) ──────────────────────────────
188
+ /** Chromium-family browser executables we recognize (basename, lowercase, no ext). */
189
+ const KNOWN_BROWSERS = [
190
+ 'chrome',
191
+ 'brave',
192
+ 'msedge',
193
+ 'chromium',
194
+ 'vivaldi',
195
+ 'opera',
196
+ ];
197
+ /**
198
+ * Parse one process command line. Extracts ONLY the two flags we need —
199
+ * full command lines are never returned or logged (privacy rule).
200
+ */
201
+ export function parseBrowserCommandLine(cmd) {
202
+ // Executable may be quoted ("C:\Program Files\...\chrome.exe")
203
+ const exeMatch = cmd.match(/^\s*(?:"([^"]+)"|'([^']+)'|(\S+))/);
204
+ const firstToken = (exeMatch
205
+ ? exeMatch[1] ?? exeMatch[2] ?? exeMatch[3]
206
+ : '').toLowerCase();
207
+ const base = basename(firstToken).replace(/\.exe$/, '');
208
+ const browserName = KNOWN_BROWSERS.find((n) => base === n || base.startsWith(`${n}-`));
209
+ const info = {};
210
+ if (!browserName)
211
+ return info;
212
+ info.browserName = browserName;
213
+ const dirMatch = cmd.match(/--user-data-dir=(?:"([^"]+)"|'([^']+)'|([^\s]+))/);
214
+ if (dirMatch)
215
+ info.userDataDir = dirMatch[1] ?? dirMatch[2] ?? dirMatch[3];
216
+ const portMatch = cmd.match(/--remote-debugging-port=(\d+)/);
217
+ if (portMatch)
218
+ info.port = parseInt(portMatch[1], 10);
219
+ return info;
220
+ }
221
+ function defaultRunner(file, args, timeoutMs) {
222
+ return new Promise((resolve, reject) => {
223
+ execFile(file, args, { timeout: timeoutMs, windowsHide: true }, (err, stdout) => {
224
+ if (err)
225
+ reject(err);
226
+ else
227
+ resolve(stdout);
228
+ });
229
+ });
230
+ }
231
+ function buildProcessQueryCommand(os) {
232
+ if (os === 'win32') {
233
+ const filter = ["Name='chrome.exe'", "Name='brave.exe'", "Name='msedge.exe'",
234
+ "Name='chromium.exe'", "Name='vivaldi.exe'", "Name='opera.exe'"].join(' OR ');
235
+ return {
236
+ file: 'powershell.exe',
237
+ args: [
238
+ '-NoProfile',
239
+ '-NonInteractive',
240
+ '-Command',
241
+ `Get-CimInstance Win32_Process -Filter "${filter}" | Select-Object -ExpandProperty CommandLine`,
242
+ ],
243
+ };
244
+ }
245
+ // macOS + Linux: ps is universal enough for same-user processes
246
+ return { file: 'ps', args: ['-axo', 'command'] };
247
+ }
248
+ /**
249
+ * Scan running Chromium-family browser processes for their launch flags.
250
+ * Read-only, same-user, non-elevated. Returns ONLY extracted fields —
251
+ * never raw command lines (privacy rule).
252
+ *
253
+ * Controlled by `CDP_PROCESS_SCAN` (default ON, `false` disables) —
254
+ * enforced by the caller.
255
+ */
256
+ export async function scanBrowserProcesses(opts = {}) {
257
+ const timeoutMs = opts.timeoutMs ?? 5000;
258
+ const runner = opts.runner ?? defaultRunner;
259
+ const os = opts.os ?? platform();
260
+ const result = {
261
+ userDataDirs: [],
262
+ ports: [],
263
+ browsersRunning: [],
264
+ };
265
+ const { file, args } = buildProcessQueryCommand(os);
266
+ let stdout;
267
+ try {
268
+ stdout = await runner(file, args, timeoutMs);
269
+ }
270
+ catch {
271
+ return result; // non-fatal: scan is best-effort
272
+ }
273
+ const dirs = new Set();
274
+ const ports = new Set();
275
+ const names = new Set();
276
+ for (const line of stdout.split(/\r?\n/)) {
277
+ if (!line.trim())
278
+ continue;
279
+ const info = parseBrowserCommandLine(line);
280
+ if (!info.browserName)
281
+ continue;
282
+ names.add(info.browserName);
283
+ if (info.userDataDir)
284
+ dirs.add(info.userDataDir);
285
+ if (info.port !== undefined)
286
+ ports.add(info.port);
287
+ }
288
+ result.userDataDirs = [...dirs];
289
+ result.ports = [...ports];
290
+ result.browsersRunning = [...names];
291
+ return result;
292
+ }
176
293
  //# sourceMappingURL=browser-discovery.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"browser-discovery.js","sourceRoot":"","sources":["../../src/connection/browser-discovery.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"browser-discovery.js","sourceRoot":"","sources":["../../src/connection/browser-discovery.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,7 @@
7
7
  * 3. Lazy auto-connect on first tool call (Fix 8)
8
8
  */
9
9
  import type { CDPClient } from './cdp-client.js';
10
+ import { discoverBrowserInstances, scanBrowserProcesses } from './browser-discovery.js';
10
11
  export type HealthStatus = 'disconnected' | 'connected' | 'unhealthy' | 'dead' | 'error';
11
12
  export interface HealthState {
12
13
  status: HealthStatus;
@@ -33,7 +34,16 @@ export interface HealthMonitorOptions {
33
34
  overrideUserDataDir?: string | null;
34
35
  /** Preferred Chrome profile for auto-connect (from CDP_PROFILE env). */
35
36
  preferredProfile?: string;
37
+ /** Extra User Data dirs to check first (CDP_USER_DATA). */
38
+ extraUserDataDirs?: string[];
39
+ /** Process command-line scan on discovery failure (CDP_PROCESS_SCAN, default true). */
40
+ processScan?: boolean;
41
+ /** Injected process scanner (tests). Defaults to scanBrowserProcesses. */
42
+ scanFn?: typeof scanBrowserProcesses;
43
+ /** Injected instance discovery (tests). Defaults to discoverBrowserInstances. */
44
+ discoverFn?: typeof discoverBrowserInstances;
36
45
  }
46
+ export type ConnectionMode = 'legacy' | 'approval' | 'unknown';
37
47
  export declare class HealthMonitor {
38
48
  private client;
39
49
  private timer;
@@ -43,6 +53,8 @@ export declare class HealthMonitor {
43
53
  private lastGoodWsUrl;
44
54
  /** When true, onDisconnect() skips auto-reconnect (P1-4: browser.connect race). */
45
55
  suppressAutoReconnect: boolean;
56
+ /** How the current connection was established (5.0.3). */
57
+ connectionMode: ConnectionMode;
46
58
  private pingIntervalMs;
47
59
  private pongTimeoutMs;
48
60
  private maxMissedPongs;
@@ -52,6 +64,10 @@ export declare class HealthMonitor {
52
64
  private cdpPort;
53
65
  private overrideUserDataDir;
54
66
  private preferredProfile;
67
+ private extraUserDataDirs;
68
+ private processScan;
69
+ private scanFn;
70
+ private discoverFn;
55
71
  readonly health: HealthState;
56
72
  constructor(client: CDPClient, opts?: HealthMonitorOptions);
57
73
  /** Start the periodic health-check timer. */
@@ -75,6 +91,12 @@ export declare class HealthMonitor {
75
91
  autoConnect(): Promise<void>;
76
92
  /** Internal auto-connect implementation. */
77
93
  private _doAutoConnect;
94
+ /**
95
+ * After a successful connect via the file-based path, detect whether the
96
+ * browser is a legacy CDP server or the gated/approval-mode server by
97
+ * probing /json/version (which only legacy servers answer).
98
+ */
99
+ private _detectMode;
78
100
  /** Update the override directory (e.g. after `browser.connect`). */
79
101
  setOverrideUserDataDir(dir: string | null): void;
80
102
  private _ping;