cdp-mcp-server 5.0.2 → 5.1.0

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.
Files changed (54) hide show
  1. package/README.md +45 -0
  2. package/dist/config.js +6 -0
  3. package/dist/config.js.map +1 -1
  4. package/dist/connection/browser-discovery.d.ts +41 -4
  5. package/dist/connection/browser-discovery.js +125 -8
  6. package/dist/connection/browser-discovery.js.map +1 -1
  7. package/dist/connection/capabilities.d.ts +58 -0
  8. package/dist/connection/capabilities.js +126 -0
  9. package/dist/connection/capabilities.js.map +1 -0
  10. package/dist/connection/health-monitor.d.ts +22 -0
  11. package/dist/connection/health-monitor.js +155 -28
  12. package/dist/connection/health-monitor.js.map +1 -1
  13. package/dist/connection/index.d.ts +4 -3
  14. package/dist/connection/index.js +2 -1
  15. package/dist/connection/index.js.map +1 -1
  16. package/dist/connection/tab-session-service.d.ts +12 -2
  17. package/dist/connection/tab-session-service.js +48 -14
  18. package/dist/connection/tab-session-service.js.map +1 -1
  19. package/dist/index.js +51 -4
  20. package/dist/index.js.map +1 -1
  21. package/dist/snapshot/accessibility.d.ts +2 -0
  22. package/dist/snapshot/accessibility.js +1 -1
  23. package/dist/snapshot/accessibility.js.map +1 -1
  24. package/dist/tools/device-presets.d.ts +24 -0
  25. package/dist/tools/device-presets.js +62 -0
  26. package/dist/tools/device-presets.js.map +1 -0
  27. package/dist/tools/emulate.js +79 -0
  28. package/dist/tools/emulate.js.map +1 -1
  29. package/dist/tools/interact.js +191 -31
  30. package/dist/tools/interact.js.map +1 -1
  31. package/dist/tools/observe.js +201 -27
  32. package/dist/tools/observe.js.map +1 -1
  33. package/dist/tools/page.d.ts +52 -1
  34. package/dist/tools/page.js +242 -25
  35. package/dist/tools/page.js.map +1 -1
  36. package/dist/tools/storage.d.ts +1 -1
  37. package/dist/tools/storage.js +115 -3
  38. package/dist/tools/storage.js.map +1 -1
  39. package/dist/tools/tabs.js +4 -2
  40. package/dist/tools/tabs.js.map +1 -1
  41. package/dist/types.d.ts +18 -0
  42. package/dist/utils/actionability.d.ts +62 -0
  43. package/dist/utils/actionability.js +190 -0
  44. package/dist/utils/actionability.js.map +1 -0
  45. package/dist/utils/connect-diagnostics.d.ts +46 -0
  46. package/dist/utils/connect-diagnostics.js +124 -0
  47. package/dist/utils/connect-diagnostics.js.map +1 -0
  48. package/dist/utils/wait.d.ts +0 -25
  49. package/dist/utils/wait.js +0 -76
  50. package/dist/utils/wait.js.map +1 -1
  51. package/package.json +1 -1
  52. package/dist/utils/retry.d.ts +0 -40
  53. package/dist/utils/retry.js +0 -75
  54. package/dist/utils/retry.js.map +0 -1
@@ -7,9 +7,9 @@
7
7
  * 3. Lazy auto-connect on first tool call (Fix 8)
8
8
  */
9
9
  import WebSocket from 'ws';
10
- import { discoverBrowserInstances, resolveWsUrlAsync, findBestInstance, } from './browser-discovery.js';
10
+ import { discoverBrowserInstances, resolveWsUrlAsync, findBestInstance, scanBrowserProcesses, } from './browser-discovery.js';
11
11
  import { ActionableError } from '../utils/error-handler.js';
12
- // ─── HealthMonitor ──────────────────────────────────────────────────
12
+ import { classifyConnectFailure, } from '../utils/connect-diagnostics.js';
13
13
  export class HealthMonitor {
14
14
  client;
15
15
  timer = null;
@@ -19,6 +19,8 @@ export class HealthMonitor {
19
19
  lastGoodWsUrl = null;
20
20
  /** When true, onDisconnect() skips auto-reconnect (P1-4: browser.connect race). */
21
21
  suppressAutoReconnect = false;
22
+ /** How the current connection was established (5.0.3). */
23
+ connectionMode = 'unknown';
22
24
  // Options (with defaults)
23
25
  pingIntervalMs;
24
26
  pongTimeoutMs;
@@ -29,6 +31,10 @@ export class HealthMonitor {
29
31
  cdpPort;
30
32
  overrideUserDataDir;
31
33
  preferredProfile;
34
+ extraUserDataDirs;
35
+ processScan;
36
+ scanFn;
37
+ discoverFn;
32
38
  // Observable health state
33
39
  health = {
34
40
  status: 'disconnected',
@@ -47,6 +53,10 @@ export class HealthMonitor {
47
53
  this.cdpPort = opts.cdpPort ?? 9222;
48
54
  this.overrideUserDataDir = opts.overrideUserDataDir ?? null;
49
55
  this.preferredProfile = opts.preferredProfile ?? '';
56
+ this.extraUserDataDirs = opts.extraUserDataDirs ?? [];
57
+ this.processScan = opts.processScan ?? true;
58
+ this.scanFn = opts.scanFn ?? scanBrowserProcesses;
59
+ this.discoverFn = opts.discoverFn ?? discoverBrowserInstances;
50
60
  }
51
61
  // ── Lifecycle ───────────────────────────────────────────────────
52
62
  /** Start the periodic health-check timer. */
@@ -86,7 +96,7 @@ export class HealthMonitor {
86
96
  const delay = this.reconnectBaseDelayMs * Math.pow(2, this.reconnectAttempts - 1);
87
97
  await this._sleep(delay);
88
98
  try {
89
- const { wsUrl } = await resolveWsUrlAsync(this.overrideUserDataDir, this.cdpHost, this.cdpPort);
99
+ const { wsUrl } = await resolveWsUrlAsync(this.overrideUserDataDir, this.extraUserDataDirs, this.cdpHost, this.cdpPort);
90
100
  await this.client.connect(wsUrl);
91
101
  this.lastGoodWsUrl = wsUrl;
92
102
  this.onConnected();
@@ -120,14 +130,21 @@ export class HealthMonitor {
120
130
  }
121
131
  /** Internal auto-connect implementation. */
122
132
  async _doAutoConnect() {
133
+ const probes = [];
134
+ const connectErrors = [];
135
+ let portFilesFound = 0;
136
+ let scan = null;
123
137
  // Strategy 1: Try last known good connection
124
138
  if (this.lastGoodWsUrl) {
125
139
  try {
126
140
  await this.client.connect(this.lastGoodWsUrl);
127
141
  this.onConnected();
142
+ this.connectionMode = await this._detectMode();
128
143
  return;
129
144
  }
130
- catch { /* try next strategy */ }
145
+ catch (e) {
146
+ connectErrors.push(errText(e));
147
+ }
131
148
  }
132
149
  // Strategy 2: Probe common debugging ports via HTTP /json/version
133
150
  const COMMON_PORTS = [this.cdpPort, 9222, 9229, 9333, 9515];
@@ -137,41 +154,145 @@ export class HealthMonitor {
137
154
  const resp = await fetch(`http://${this.cdpHost}:${port}/json/version`, {
138
155
  signal: AbortSignal.timeout(2000),
139
156
  });
140
- const data = (await resp.json());
141
- if (data.webSocketDebuggerUrl) {
142
- await this.client.connect(data.webSocketDebuggerUrl);
143
- this.lastGoodWsUrl = data.webSocketDebuggerUrl;
144
- this.onConnected();
145
- return;
157
+ if (resp.ok) {
158
+ probes.push({ port, outcome: 'ok', status: resp.status });
159
+ const data = (await resp.json());
160
+ if (data.webSocketDebuggerUrl) {
161
+ await this.client.connect(data.webSocketDebuggerUrl);
162
+ this.lastGoodWsUrl = data.webSocketDebuggerUrl;
163
+ this.onConnected();
164
+ this.connectionMode = 'legacy';
165
+ return;
166
+ }
167
+ }
168
+ else {
169
+ probes.push({
170
+ port,
171
+ outcome: resp.status === 404 ? 'not_found' : 'error',
172
+ status: resp.status,
173
+ });
146
174
  }
147
175
  }
148
- catch {
149
- continue;
176
+ catch (e) {
177
+ probes.push({ port, outcome: 'refused', detail: errText(e) });
150
178
  }
151
179
  }
152
- // Strategy 3: File-based discovery (DevToolsActivePort)
153
- const instances = discoverBrowserInstances();
154
- if (instances.length > 0) {
180
+ // Strategy 3: File-based discovery (DevToolsActivePort). The port file
181
+ // points at /devtools/browser/<uuid> — the same WS endpoint the gated
182
+ // approval-mode server exposes — so a connect here succeeds where HTTP
183
+ // discovery 404s (approval mode), and the user gets a permission dialog.
184
+ const tryFileDiscovery = async (extraDirs) => {
185
+ const instances = this.discoverFn({ extraPaths: extraDirs });
186
+ portFilesFound += instances.length;
187
+ if (instances.length === 0)
188
+ return false;
155
189
  const best = this.preferredProfile
156
190
  ? findBestInstance(instances, this.preferredProfile)
157
191
  : instances[0];
158
- if (best) {
192
+ if (!best)
193
+ return false;
194
+ try {
195
+ await this.client.connect(best.wsUrl);
196
+ this.lastGoodWsUrl = best.wsUrl;
197
+ this.overrideUserDataDir = best.userDataDir;
198
+ this.onConnected();
199
+ this.connectionMode = await this._detectMode();
200
+ return true;
201
+ }
202
+ catch (e) {
203
+ connectErrors.push(errText(e));
204
+ return false;
205
+ }
206
+ };
207
+ if (await tryFileDiscovery(this.extraUserDataDirs))
208
+ return;
209
+ // Strategy 4: Process command-line scan (default ON) — finds
210
+ // portable/custom browser data dirs and debug ports, then retries the
211
+ // HTTP probe and file discovery with enriched inputs.
212
+ if (this.processScan) {
213
+ scan = await this.scanFn();
214
+ const enrichedPorts = scan.ports.filter((p) => !uniquePorts.includes(p));
215
+ for (const port of enrichedPorts) {
159
216
  try {
160
- await this.client.connect(best.wsUrl);
161
- this.lastGoodWsUrl = best.wsUrl;
162
- this.overrideUserDataDir = best.userDataDir;
163
- this.onConnected();
164
- return;
217
+ const resp = await fetch(`http://${this.cdpHost}:${port}/json/version`, {
218
+ signal: AbortSignal.timeout(2000),
219
+ });
220
+ if (resp.ok) {
221
+ probes.push({ port, outcome: 'ok', status: resp.status });
222
+ const data = (await resp.json());
223
+ if (data.webSocketDebuggerUrl) {
224
+ await this.client.connect(data.webSocketDebuggerUrl);
225
+ this.lastGoodWsUrl = data.webSocketDebuggerUrl;
226
+ this.onConnected();
227
+ this.connectionMode = 'legacy';
228
+ return;
229
+ }
230
+ }
231
+ else {
232
+ probes.push({
233
+ port,
234
+ outcome: resp.status === 404 ? 'not_found' : 'error',
235
+ status: resp.status,
236
+ });
237
+ }
165
238
  }
166
- catch { /* fall through to error */ }
239
+ catch (e) {
240
+ probes.push({ port, outcome: 'refused', detail: errText(e) });
241
+ }
242
+ }
243
+ if (scan.userDataDirs.length > 0 &&
244
+ (await tryFileDiscovery(scan.userDataDirs))) {
245
+ return;
167
246
  }
168
247
  }
169
- // All strategies failed — throw actionable error
170
- throw new ActionableError('Could not find any browser with remote debugging enabled.', `To fix, do ONE of these:\n` +
171
- ` 1. Chrome/Edge: Go to chrome://flags → search "remote debugging" → Enable → Relaunch\n` +
172
- ` 2. Or launch with flag: chrome --remote-debugging-port=9222\n` +
173
- ` 3. Or set CDP_PORT env var if using a non-standard port\n\n` +
174
- `The server will auto-connect once debugging is enabled. No manual connect needed.`);
248
+ // All strategies failed — classify and throw an actionable error
249
+ const processInfo = scan
250
+ ? {
251
+ browsersRunning: scan.browsersRunning,
252
+ flagPresent: scan.ports.length > 0,
253
+ }
254
+ : null;
255
+ const diagnosis = classifyConnectFailure({
256
+ probes,
257
+ portFilesFound,
258
+ connectErrors,
259
+ processInfo,
260
+ host: this.cdpHost,
261
+ primaryPort: this.cdpPort,
262
+ });
263
+ throw new ActionableError(diagnosis.headline, diagnosis.fix, {
264
+ kind: diagnosis.kind,
265
+ probes,
266
+ });
267
+ }
268
+ /**
269
+ * After a successful connect via the file-based path, detect whether the
270
+ * browser is a legacy CDP server or the gated/approval-mode server by
271
+ * probing /json/version (which only legacy servers answer).
272
+ */
273
+ async _detectMode() {
274
+ let host = this.cdpHost;
275
+ let port = this.cdpPort;
276
+ const url = this.client.url;
277
+ if (url) {
278
+ try {
279
+ const parsed = new URL(url);
280
+ host = parsed.hostname || host;
281
+ port = parseInt(parsed.port || String(this.cdpPort), 10);
282
+ }
283
+ catch { /* keep defaults */ }
284
+ }
285
+ try {
286
+ const resp = await fetch(`http://${host}:${port}/json/version`, {
287
+ signal: AbortSignal.timeout(2000),
288
+ });
289
+ return resp.ok ? 'legacy' : 'approval';
290
+ }
291
+ catch {
292
+ // Legacy servers always answer /json/version; failure + live WS
293
+ // strongly suggests approval mode, but stay honest.
294
+ return 'approval';
295
+ }
175
296
  }
176
297
  /** Update the override directory (e.g. after `browser.connect`). */
177
298
  setOverrideUserDataDir(dir) {
@@ -216,4 +337,10 @@ export class HealthMonitor {
216
337
  return new Promise((resolve) => setTimeout(resolve, ms));
217
338
  }
218
339
  }
340
+ /** Extract a short error message from an unknown thrown value. */
341
+ function errText(e) {
342
+ if (e instanceof Error)
343
+ return e.message;
344
+ return String(e);
345
+ }
219
346
  //# sourceMappingURL=health-monitor.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"health-monitor.js","sourceRoot":"","sources":["../../src/connection/health-monitor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"health-monitor.js","sourceRoot":"","sources":["../../src/connection/health-monitor.ts"],"names":[],"mappings":"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"}
@@ -3,9 +3,10 @@
3
3
  */
4
4
  export { CDPClient } from './cdp-client.js';
5
5
  export type { ConnectionState, CDPClientOptions } from './cdp-client.js';
6
- export { discoverBrowserInstances, resolveWsUrl, resolveWsUrlAsync, findBestInstance, } from './browser-discovery.js';
7
- export type { DiscoverOptions, WsUrlResult } from './browser-discovery.js';
6
+ export { discoverBrowserInstances, resolveWsUrl, resolveWsUrlAsync, findBestInstance, parseBrowserCommandLine, scanBrowserProcesses, } from './browser-discovery.js';
7
+ export type { DiscoverOptions, WsUrlResult, CommandLineInfo, ProcessScanResult, } from './browser-discovery.js';
8
8
  export { HealthMonitor } from './health-monitor.js';
9
- export type { HealthStatus, HealthState, HealthMonitorOptions, } from './health-monitor.js';
9
+ export { DomainCapabilities } from './capabilities.js';
10
+ export type { HealthStatus, HealthState, HealthMonitorOptions, ConnectionMode, } from './health-monitor.js';
10
11
  export { DomainManager } from './domain-manager.js';
11
12
  export { TabSessionService } from './tab-session-service.js';
@@ -2,8 +2,9 @@
2
2
  * Connection module — public surface.
3
3
  */
4
4
  export { CDPClient } from './cdp-client.js';
5
- export { discoverBrowserInstances, resolveWsUrl, resolveWsUrlAsync, findBestInstance, } from './browser-discovery.js';
5
+ export { discoverBrowserInstances, resolveWsUrl, resolveWsUrlAsync, findBestInstance, parseBrowserCommandLine, scanBrowserProcesses, } from './browser-discovery.js';
6
6
  export { HealthMonitor } from './health-monitor.js';
7
+ export { DomainCapabilities } from './capabilities.js';
7
8
  export { DomainManager } from './domain-manager.js';
8
9
  export { TabSessionService } from './tab-session-service.js';
9
10
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/connection/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG5C,OAAO,EACL,wBAAwB,EACxB,YAAY,EACZ,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAOpD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/connection/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG5C,OAAO,EACL,wBAAwB,EACxB,YAAY,EACZ,iBAAiB,EACjB,gBAAgB,EAChB,uBAAuB,EACvB,oBAAoB,GACrB,MAAM,wBAAwB,CAAC;AAQhC,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAQvD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC"}
@@ -19,6 +19,10 @@ export declare class TabSessionService {
19
19
  private childToParent;
20
20
  /** uid → childSessionId routing for cross-frame element resolution */
21
21
  private refSessionRouting;
22
+ /** CDP sessionId → tabId (reverse lookup for auto-attach event routing) */
23
+ private sessionToTab;
24
+ /** CDP clients already wired for auto-attach event routing */
25
+ private wiredClients;
22
26
  /**
23
27
  * Get (or create) a CDP session for a tab.
24
28
  *
@@ -32,9 +36,15 @@ export declare class TabSessionService {
32
36
  */
33
37
  ensureDomain(cdpClient: CDPClient, tabId: string, domain: string): Promise<void>;
34
38
  /**
35
- * Enable Target.setAutoAttach on a tab session to discover OOP iframes.
39
+ * Register Target.autoAttach event routing (idempotent per CDP client).
40
+ *
41
+ * `Target.attachedToTarget` events emitted by managed page sessions are
42
+ * translated into child-session registrations (OOP iframes);
43
+ * `Target.detachedFromTarget` prunes them. This is what feeds
44
+ * `captureFullTree`'s multi-frame snapshot and the uid → child-session
45
+ * routing used for cross-frame element interaction.
36
46
  */
37
- setupAutoAttach(cdpClient: CDPClient, tabId: string): Promise<void>;
47
+ private wireAutoAttachEvents;
38
48
  /** Track a child session (OOP iframe) under a parent session. */
39
49
  addChildSession(parentSessionId: string, childTargetId: string, childSessionId: string, url: string): void;
40
50
  /** Remove a child session when an OOP iframe detaches. */
@@ -18,6 +18,10 @@ export class TabSessionService {
18
18
  childToParent = new Map();
19
19
  /** uid → childSessionId routing for cross-frame element resolution */
20
20
  refSessionRouting = new Map();
21
+ /** CDP sessionId → tabId (reverse lookup for auto-attach event routing) */
22
+ sessionToTab = new Map();
23
+ /** CDP clients already wired for auto-attach event routing */
24
+ wiredClients = new WeakSet();
21
25
  /**
22
26
  * Get (or create) a CDP session for a tab.
23
27
  *
@@ -25,21 +29,28 @@ export class TabSessionService {
25
29
  * Otherwise calls Target.attachToTarget with flatten: true.
26
30
  */
27
31
  async getSession(cdpClient, tabId) {
32
+ // Idempotent: register auto-attach event routing before any session can
33
+ // emit Target.attachedToTarget (no missed events on first attach)
34
+ this.wireAutoAttachEvents(cdpClient);
28
35
  // Check the CDPClient's own session pool first, then our map
29
36
  const pooled = cdpClient.getPooledSession(tabId);
30
37
  if (pooled) {
31
38
  this.sessions.set(tabId, pooled);
39
+ this.sessionToTab.set(pooled, tabId);
32
40
  return pooled;
33
41
  }
34
42
  const existing = this.sessions.get(tabId);
35
- if (existing)
43
+ if (existing) {
44
+ this.sessionToTab.set(existing, tabId);
36
45
  return existing;
46
+ }
37
47
  const result = await cdpClient.send('Target.attachToTarget', {
38
48
  targetId: tabId,
39
49
  flatten: true,
40
50
  });
41
51
  const sessionId = result.sessionId;
42
52
  this.sessions.set(tabId, sessionId);
53
+ this.sessionToTab.set(sessionId, tabId);
43
54
  cdpClient.poolSession(tabId, sessionId);
44
55
  // Enable auto-attach for OOP (cross-origin) iframe discovery
45
56
  try {
@@ -72,20 +83,41 @@ export class TabSessionService {
72
83
  // Domain manager already tracks via ensureDomain if needed externally
73
84
  }
74
85
  /**
75
- * Enable Target.setAutoAttach on a tab session to discover OOP iframes.
86
+ * Register Target.autoAttach event routing (idempotent per CDP client).
87
+ *
88
+ * `Target.attachedToTarget` events emitted by managed page sessions are
89
+ * translated into child-session registrations (OOP iframes);
90
+ * `Target.detachedFromTarget` prunes them. This is what feeds
91
+ * `captureFullTree`'s multi-frame snapshot and the uid → child-session
92
+ * routing used for cross-frame element interaction.
76
93
  */
77
- async setupAutoAttach(cdpClient, tabId) {
78
- const sessionId = await this.getSession(cdpClient, tabId);
79
- try {
80
- await cdpClient.send('Target.setAutoAttach', {
81
- autoAttach: true,
82
- waitForDebuggerOnStart: false,
83
- flatten: true,
84
- }, sessionId);
85
- }
86
- catch {
87
- // Older Chrome versions may not support auto-attach on page sessions
88
- }
94
+ wireAutoAttachEvents(cdpClient) {
95
+ if (this.wiredClients.has(cdpClient))
96
+ return;
97
+ this.wiredClients.add(cdpClient);
98
+ cdpClient.on('event', (event) => {
99
+ if (event.method === 'Target.attachedToTarget' && event.sessionId) {
100
+ const parentSessionId = event.sessionId;
101
+ // Only page sessions we manage — browser-level / foreign events ignored
102
+ if (!this.sessionToTab.has(parentSessionId))
103
+ return;
104
+ const params = event.params;
105
+ if (!params?.sessionId || !params.targetInfo?.targetId)
106
+ return;
107
+ if (params.targetInfo.type !== 'iframe')
108
+ return;
109
+ this.addChildSession(parentSessionId, params.targetInfo.targetId, params.sessionId, params.targetInfo.url ?? '');
110
+ }
111
+ else if (event.method === 'Target.detachedFromTarget') {
112
+ const params = event.params;
113
+ if (!params?.sessionId)
114
+ return;
115
+ const parentSessionId = this.getParentSession(params.sessionId);
116
+ if (parentSessionId) {
117
+ this.removeChildSession(parentSessionId, params.sessionId);
118
+ }
119
+ }
120
+ });
89
121
  }
90
122
  /** Track a child session (OOP iframe) under a parent session. */
91
123
  addChildSession(parentSessionId, childTargetId, childSessionId, url) {
@@ -148,6 +180,7 @@ export class TabSessionService {
148
180
  this.childSessions.delete(sessionId);
149
181
  }
150
182
  this.refSessionRouting.delete(sessionId);
183
+ this.sessionToTab.delete(sessionId);
151
184
  cdpClient?.unpoolSession(tabId);
152
185
  }
153
186
  this.sessions.delete(tabId);
@@ -167,6 +200,7 @@ export class TabSessionService {
167
200
  this.childSessions.clear();
168
201
  this.childToParent.clear();
169
202
  this.refSessionRouting.clear();
203
+ this.sessionToTab.clear();
170
204
  }
171
205
  /** Iterate over all [tabId, sessionId] pairs. */
172
206
  entries() {
@@ -1 +1 @@
1
- {"version":3,"file":"tab-session-service.js","sourceRoot":"","sources":["../../src/connection/tab-session-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tab-session-service.js","sourceRoot":"","sources":["../../src/connection/tab-session-service.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -30,6 +30,7 @@ import { SessionManager } from './session/session-manager.js';
30
30
  import { TabOwnership } from './session/tab-ownership.js';
31
31
  import { ModalStateManager } from './session/modal-state.js';
32
32
  import { HealthMonitor } from './connection/health-monitor.js';
33
+ import { DomainCapabilities } from './connection/capabilities.js';
33
34
  import { SnapshotCache } from './snapshot/cache.js';
34
35
  import { ToolRegistry } from './tools/registry.js';
35
36
  import { preprocessToolCall } from './tools/dispatch.js';
@@ -50,7 +51,7 @@ import { registerDebugTools } from './tools/debug.js';
50
51
  import { registerFormTools } from './tools/form.js';
51
52
  import { getSlimTools, mapSlimToFull } from './tools/slim-mode.js';
52
53
  // ─── Bootstrap ──────────────────────────────────────────────────────
53
- const VERSION = '5.0.2';
54
+ const VERSION = '5.1.0';
54
55
  const config = loadConfig();
55
56
  const cdpClient = new CDPClient({ commandTimeout: config.globalTimeout });
56
57
  // Lazy initialization: HealthMonitor is created but doesn't discover browsers
@@ -58,10 +59,14 @@ const healthMonitor = new HealthMonitor(cdpClient, {
58
59
  cdpHost: config.cdpHost,
59
60
  cdpPort: config.cdpPort,
60
61
  preferredProfile: config.autoConnectProfile,
62
+ extraUserDataDirs: config.userDataDir ? [config.userDataDir] : [],
63
+ processScan: config.processScan,
61
64
  });
62
65
  const domainManager = new DomainManager();
63
66
  const tabSessionService = new TabSessionService();
64
67
  const snapshotCache = new SnapshotCache();
68
+ // CDP domain capability report (5.1.0 B1) — invalidated on disconnect below
69
+ const capabilities = new DomainCapabilities();
65
70
  const registry = new ToolRegistry();
66
71
  // Wire auto-reconnect: when the WebSocket drops, let HealthMonitor retry
67
72
  // and clear domain state since all sessions are invalidated
@@ -72,6 +77,7 @@ cdpClient.on('disconnected', () => {
72
77
  eventPipelineWired = false;
73
78
  domainManager.clearAll();
74
79
  snapshotCache.clear();
80
+ capabilities.clear();
75
81
  tabSessionService.clear();
76
82
  healthMonitor.onDisconnect().catch(() => {
77
83
  // Reconnect failed — next tool call will trigger autoConnect
@@ -404,6 +410,7 @@ function wireEventPipeline(serverCtx) {
404
410
  }
405
411
  // ─── Server Context (DI container) ──────────────────────────────────
406
412
  const ctx = {
413
+ capabilities,
407
414
  config,
408
415
  cdpClient,
409
416
  healthMonitor,
@@ -420,6 +427,7 @@ const ctx = {
420
427
  networkReqs: new Map(),
421
428
  downloads: new Map(),
422
429
  pendingDialogs: new Map(),
430
+ findState: new Map(),
423
431
  pendingFileChoosers: new Map(),
424
432
  pausedTabs: new Map(),
425
433
  pendingFetchRequests: new Map(),
@@ -440,11 +448,13 @@ async function ensureConnected() {
440
448
  }
441
449
  }
442
450
  // ─── Demo Tools ─────────────────────────────────────────────────────
451
+ const AUTO_CONNECT_HINT = '\nBrowser connects automatically when you use any browser tool — just call tabs.list or page.goto.';
443
452
  registry.register(defineTool({
444
453
  name: 'ping',
445
454
  description: 'Health check. Returns server version and connection status.',
446
455
  inputSchema: { type: 'object', properties: {} },
447
- handler: async () => success(`pong — CDP Browser MCP v${VERSION}\nConnected: ${cdpClient.isConnected}`),
456
+ handler: async () => success(`pong — CDP Browser MCP v${VERSION}\nConnected: ${cdpClient.isConnected}` +
457
+ (cdpClient.isConnected ? `\nMode: ${healthMonitor.connectionMode}` : AUTO_CONNECT_HINT)),
448
458
  }));
449
459
  registry.register(defineTool({
450
460
  name: 'status',
@@ -454,11 +464,43 @@ registry.register(defineTool({
454
464
  const lines = [
455
465
  `## CDP Browser MCP Server v${VERSION}`,
456
466
  `Connected: ${cdpClient.isConnected}`,
467
+ ...(cdpClient.isConnected
468
+ ? [`Connection mode: ${healthMonitor.connectionMode}`]
469
+ : [AUTO_CONNECT_HINT.trim()]),
470
+ `Process scan: ${config.processScan ? 'on' : 'off'}`,
457
471
  `Default timeout: ${config.globalTimeout}ms`,
458
472
  `Default cleanup: ${config.defaultCleanupStrategy}`,
459
473
  `Session TTL: ${config.sessionTTL}ms`,
460
474
  `Registered tools: ${registry.size}`,
461
475
  ];
476
+ if (cdpClient.isConnected) {
477
+ try {
478
+ // Probe through a managed page session - the browser-level endpoint
479
+ // only serves browser-wide domains, so page-scoped domains (Overlay,
480
+ // FindInPage, Ads, ...) report "wasn't found" without one.
481
+ let firstSession = tabSessionService.entries().next().value?.[1];
482
+ if (!firstSession) {
483
+ // No managed tab yet - attach to any open page tab just for probing
484
+ // (canaries are read-only or validation-rejected; attaching is inert)
485
+ try {
486
+ const { targetInfos } = (await cdpClient.send('Target.getTargets', {}));
487
+ const pageTarget = targetInfos?.find((t) => t.type === 'page');
488
+ if (pageTarget) {
489
+ firstSession = (await tabSessionService.getSession(cdpClient, pageTarget.targetId));
490
+ }
491
+ }
492
+ catch { /* fall back to browser-level probe */ }
493
+ }
494
+ const { count, missing } = await capabilities.summarize(cdpClient, firstSession);
495
+ lines.push(`CDP features (probed${firstSession ? ' on page session' : ' browser-level - no page session'}): ${count}/${count + missing.length}`);
496
+ if (missing.length > 0) {
497
+ lines.push(`Notable domains missing: ${missing.join(', ')}`);
498
+ }
499
+ }
500
+ catch (e) {
501
+ lines.push('CDP features: unavailable (' + (e instanceof Error ? e.message : String(e)) + ')');
502
+ }
503
+ }
462
504
  return success(lines.join('\n'));
463
505
  },
464
506
  }));
@@ -484,7 +526,7 @@ if (config.slimMode) {
484
526
  registerFormTools(registry, ctx);
485
527
  }
486
528
  else {
487
- // Full mode: all 15 tools
529
+ // Full mode: all 14 tools
488
530
  registerTabsTools(registry, ctx);
489
531
  registerPageTools(registry, ctx);
490
532
  registerInteractTools(registry, ctx);
@@ -499,7 +541,12 @@ else {
499
541
  registerFormTools(registry, ctx);
500
542
  }
501
543
  // ─── MCP Server─────────────────────────────────────────────────────
502
- const server = new Server({ name: 'cdp-browser', version: VERSION }, { capabilities: { tools: {} } });
544
+ const server = new Server({ name: 'cdp-browser', version: VERSION }, {
545
+ capabilities: { tools: {} },
546
+ instructions: `CDP Browser MCP attaches your REAL running browser (cookies, logins, extensions stay). 14 tools: tabs, page, interact, form, execute, observe, emulate, storage, intercept, debug, browser, cleanup, ping, status. The browser connects automatically on the first browser-tool call - ping/status may say Connected: false before that; just call any browser tool.
547
+
548
+ CALLING CONVENTION (critical): every tool is ONE tool with an action enum parameter - there are NO per-action subtools. Call like tools["cdp-browser"].tabs({ action: "list" }), tools["cdp-browser"].page({ action: "goto", tabId, url }), tools["cdp-browser"].interact({ action: "click", tabId, uid }). WRONG: tabs.list(), tabs(), page.goto(url) - these tool names do not exist and fail schema validation. If unsure of an action or parameter, read the tool's description/enum first; tabs without action defaults to listing. Two connection modes: launch flag (--remote-debugging-port + explicit --user-data-dir) or the browser built-in chrome://inspect/#remote-debugging toggle (a permission dialog appears - click Allow).`,
549
+ });
503
550
  server.setRequestHandler(ListToolsRequestSchema, async () => ({
504
551
  tools: config.slimMode
505
552
  ? registry.list().filter(t => t.name.startsWith('browser_') || t.name === 'ping' || t.name === 'status')