openchrome-mcp 1.7.11 → 1.7.13

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 (154) hide show
  1. package/README.md +6 -0
  2. package/dist/cdp/client.d.ts +14 -0
  3. package/dist/cdp/client.d.ts.map +1 -1
  4. package/dist/cdp/client.js +200 -0
  5. package/dist/cdp/client.js.map +1 -1
  6. package/dist/chrome/launcher.d.ts.map +1 -1
  7. package/dist/chrome/launcher.js +6 -3
  8. package/dist/chrome/launcher.js.map +1 -1
  9. package/dist/cli/index.js +0 -0
  10. package/dist/compression/snapshot-store.d.ts +54 -0
  11. package/dist/compression/snapshot-store.d.ts.map +1 -0
  12. package/dist/compression/snapshot-store.js +183 -0
  13. package/dist/compression/snapshot-store.js.map +1 -0
  14. package/dist/config/defaults.d.ts +6 -0
  15. package/dist/config/defaults.d.ts.map +1 -1
  16. package/dist/config/defaults.js +7 -1
  17. package/dist/config/defaults.js.map +1 -1
  18. package/dist/config/global.d.ts +15 -0
  19. package/dist/config/global.d.ts.map +1 -1
  20. package/dist/config/global.js +6 -0
  21. package/dist/config/global.js.map +1 -1
  22. package/dist/dashboard/activity-tracker.d.ts +17 -0
  23. package/dist/dashboard/activity-tracker.d.ts.map +1 -1
  24. package/dist/dashboard/activity-tracker.js +44 -1
  25. package/dist/dashboard/activity-tracker.js.map +1 -1
  26. package/dist/dashboard/types.d.ts +18 -0
  27. package/dist/dashboard/types.d.ts.map +1 -1
  28. package/dist/dashboard/types.js.map +1 -1
  29. package/dist/dom/dom-serializer.d.ts +2 -0
  30. package/dist/dom/dom-serializer.d.ts.map +1 -1
  31. package/dist/dom/dom-serializer.js +228 -1
  32. package/dist/dom/dom-serializer.js.map +1 -1
  33. package/dist/mcp-server.d.ts.map +1 -1
  34. package/dist/mcp-server.js +66 -32
  35. package/dist/mcp-server.js.map +1 -1
  36. package/dist/session-manager.d.ts +16 -0
  37. package/dist/session-manager.d.ts.map +1 -1
  38. package/dist/session-manager.js +39 -0
  39. package/dist/session-manager.js.map +1 -1
  40. package/dist/tools/batch-execute.js +5 -5
  41. package/dist/tools/batch-execute.js.map +1 -1
  42. package/dist/tools/batch-paginate.js +7 -7
  43. package/dist/tools/batch-paginate.js.map +1 -1
  44. package/dist/tools/click-element.d.ts.map +1 -1
  45. package/dist/tools/click-element.js +30 -200
  46. package/dist/tools/click-element.js.map +1 -1
  47. package/dist/tools/computer.d.ts.map +1 -1
  48. package/dist/tools/computer.js +46 -14
  49. package/dist/tools/computer.js.map +1 -1
  50. package/dist/tools/console-capture.d.ts.map +1 -1
  51. package/dist/tools/console-capture.js +69 -4
  52. package/dist/tools/console-capture.js.map +1 -1
  53. package/dist/tools/cookies.d.ts.map +1 -1
  54. package/dist/tools/cookies.js +71 -8
  55. package/dist/tools/cookies.js.map +1 -1
  56. package/dist/tools/drag-drop.js +3 -3
  57. package/dist/tools/drag-drop.js.map +1 -1
  58. package/dist/tools/emulate-device.js +5 -5
  59. package/dist/tools/emulate-device.js.map +1 -1
  60. package/dist/tools/file-upload.js +2 -2
  61. package/dist/tools/file-upload.js.map +1 -1
  62. package/dist/tools/fill-form.d.ts.map +1 -1
  63. package/dist/tools/fill-form.js +47 -112
  64. package/dist/tools/fill-form.js.map +1 -1
  65. package/dist/tools/find.d.ts.map +1 -1
  66. package/dist/tools/find.js +24 -250
  67. package/dist/tools/find.js.map +1 -1
  68. package/dist/tools/form-input.js +3 -3
  69. package/dist/tools/form-input.js.map +1 -1
  70. package/dist/tools/geolocation.js +2 -2
  71. package/dist/tools/geolocation.js.map +1 -1
  72. package/dist/tools/http-auth.js +1 -1
  73. package/dist/tools/http-auth.js.map +1 -1
  74. package/dist/tools/inspect.d.ts.map +1 -1
  75. package/dist/tools/inspect.js +99 -9
  76. package/dist/tools/inspect.js.map +1 -1
  77. package/dist/tools/interact.d.ts.map +1 -1
  78. package/dist/tools/interact.js +31 -195
  79. package/dist/tools/interact.js.map +1 -1
  80. package/dist/tools/javascript.js +3 -3
  81. package/dist/tools/javascript.js.map +1 -1
  82. package/dist/tools/lightweight-scroll.js +4 -4
  83. package/dist/tools/lightweight-scroll.js.map +1 -1
  84. package/dist/tools/list-profiles.js +2 -2
  85. package/dist/tools/list-profiles.js.map +1 -1
  86. package/dist/tools/memory.d.ts.map +1 -1
  87. package/dist/tools/memory.js +4 -4
  88. package/dist/tools/memory.js.map +1 -1
  89. package/dist/tools/navigate.d.ts.map +1 -1
  90. package/dist/tools/navigate.js +21 -4
  91. package/dist/tools/navigate.js.map +1 -1
  92. package/dist/tools/network.js +2 -2
  93. package/dist/tools/network.js.map +1 -1
  94. package/dist/tools/orchestration.js +2 -2
  95. package/dist/tools/orchestration.js.map +1 -1
  96. package/dist/tools/page-content.js +2 -2
  97. package/dist/tools/page-content.js.map +1 -1
  98. package/dist/tools/page-pdf.js +4 -4
  99. package/dist/tools/page-pdf.js.map +1 -1
  100. package/dist/tools/performance-metrics.js +2 -2
  101. package/dist/tools/performance-metrics.js.map +1 -1
  102. package/dist/tools/profile-status.js +1 -1
  103. package/dist/tools/profile-status.js.map +1 -1
  104. package/dist/tools/query-dom.d.ts.map +1 -1
  105. package/dist/tools/query-dom.js +169 -13
  106. package/dist/tools/query-dom.js.map +1 -1
  107. package/dist/tools/read-page.d.ts.map +1 -1
  108. package/dist/tools/read-page.js +36 -4
  109. package/dist/tools/read-page.js.map +1 -1
  110. package/dist/tools/request-intercept.d.ts.map +1 -1
  111. package/dist/tools/request-intercept.js +117 -9
  112. package/dist/tools/request-intercept.js.map +1 -1
  113. package/dist/tools/storage.js +2 -2
  114. package/dist/tools/storage.js.map +1 -1
  115. package/dist/tools/tabs-close.js +2 -2
  116. package/dist/tools/tabs-close.js.map +1 -1
  117. package/dist/tools/tabs-create.js +1 -1
  118. package/dist/tools/tabs-create.js.map +1 -1
  119. package/dist/tools/user-agent.js +2 -2
  120. package/dist/tools/user-agent.js.map +1 -1
  121. package/dist/tools/wait-and-click.d.ts.map +1 -1
  122. package/dist/tools/wait-and-click.js +30 -162
  123. package/dist/tools/wait-and-click.js.map +1 -1
  124. package/dist/tools/wait-for.js +3 -3
  125. package/dist/tools/wait-for.js.map +1 -1
  126. package/dist/tools/worker.js +1 -1
  127. package/dist/tools/worker.js.map +1 -1
  128. package/dist/types/mcp.d.ts +2 -0
  129. package/dist/types/mcp.d.ts.map +1 -1
  130. package/dist/utils/adaptive-screenshot.d.ts +9 -0
  131. package/dist/utils/adaptive-screenshot.d.ts.map +1 -1
  132. package/dist/utils/adaptive-screenshot.js +12 -0
  133. package/dist/utils/adaptive-screenshot.js.map +1 -1
  134. package/dist/utils/dom-delta.d.ts.map +1 -1
  135. package/dist/utils/dom-delta.js +57 -12
  136. package/dist/utils/dom-delta.js.map +1 -1
  137. package/dist/utils/element-discovery.d.ts +115 -0
  138. package/dist/utils/element-discovery.d.ts.map +1 -0
  139. package/dist/utils/element-discovery.js +519 -0
  140. package/dist/utils/element-discovery.js.map +1 -0
  141. package/dist/utils/page-diagnostics.d.ts.map +1 -1
  142. package/dist/utils/page-diagnostics.js +12 -1
  143. package/dist/utils/page-diagnostics.js.map +1 -1
  144. package/dist/utils/ref-id-manager.d.ts.map +1 -1
  145. package/dist/utils/ref-id-manager.js +35 -3
  146. package/dist/utils/ref-id-manager.js.map +1 -1
  147. package/dist/utils/shadow-dom.d.ts +114 -0
  148. package/dist/utils/shadow-dom.d.ts.map +1 -0
  149. package/dist/utils/shadow-dom.js +385 -0
  150. package/dist/utils/shadow-dom.js.map +1 -0
  151. package/dist/utils/visual-summary.d.ts.map +1 -1
  152. package/dist/utils/visual-summary.js +23 -6
  153. package/dist/utils/visual-summary.js.map +1 -1
  154. package/package.json +1 -1
@@ -10,13 +10,12 @@ const session_manager_1 = require("../session-manager");
10
10
  const ref_id_manager_1 = require("../utils/ref-id-manager");
11
11
  const defaults_1 = require("../config/defaults");
12
12
  const dom_delta_1 = require("../utils/dom-delta");
13
- const visual_summary_1 = require("../utils/visual-summary");
14
13
  const adaptive_screenshot_1 = require("../utils/adaptive-screenshot");
15
14
  const element_finder_1 = require("../utils/element-finder");
16
- const with_timeout_1 = require("../utils/with-timeout");
15
+ const element_discovery_1 = require("../utils/element-discovery");
17
16
  const definition = {
18
17
  name: 'click_element',
19
- description: 'Find and click an element by natural language query in one call.',
18
+ description: 'Find and click an element by query in one call.',
20
19
  inputSchema: {
21
20
  type: 'object',
22
21
  properties: {
@@ -26,15 +25,15 @@ const definition = {
26
25
  },
27
26
  query: {
28
27
  type: 'string',
29
- description: 'Element to click, e.g. "Login button"',
28
+ description: 'Element to click (natural language)',
30
29
  },
31
30
  wait_after: {
32
31
  type: 'number',
33
- description: 'Wait after click in ms. Default: 100, max: 5000',
32
+ description: 'Wait after click in ms. Default: 100',
34
33
  },
35
34
  verify: {
36
35
  type: 'boolean',
37
- description: 'Return screenshot after click for verification',
36
+ description: 'Return screenshot after click',
38
37
  },
39
38
  double_click: {
40
39
  type: 'boolean',
@@ -42,11 +41,11 @@ const definition = {
42
41
  },
43
42
  waitForMs: {
44
43
  type: 'number',
45
- description: 'Max time to wait for element to appear. 0 = no waiting (default). Max 30000.',
44
+ description: 'Poll timeout for element in ms. Default: 0',
46
45
  },
47
46
  pollInterval: {
48
47
  type: 'number',
49
- description: 'How often to retry while waiting, in ms. Default 200, range 50-2000.',
48
+ description: 'Poll interval in ms. Default: 200',
50
49
  },
51
50
  },
52
51
  required: ['tabId', 'query'],
@@ -91,132 +90,14 @@ const handler = async (sessionId, args) => {
91
90
  const cdpClient = sessionManager.getCDPClient();
92
91
  do { // --- polling loop start ---
93
92
  // Find elements matching the query
94
- let results;
93
+ let rawResults;
95
94
  try {
96
- results = await (0, with_timeout_1.withTimeout)(page.evaluate((searchQuery) => {
97
- const elements = [];
98
- const domElements = []; // Parallel array of DOM references for batched node ID resolution
99
- const maxResults = 30; // Get more candidates for better scoring
100
- function getElementInfo(el) {
101
- const rect = el.getBoundingClientRect();
102
- if (rect.width === 0 || rect.height === 0)
103
- return null;
104
- // Skip invisible elements
105
- const style = window.getComputedStyle(el);
106
- if (style.visibility === 'hidden' || style.display === 'none' || style.opacity === '0') {
107
- return null;
108
- }
109
- const inputEl = el;
110
- const isContentEditable = el.getAttribute('contenteditable') === 'true';
111
- const role = el.getAttribute('role') ||
112
- (el.tagName === 'BUTTON'
113
- ? 'button'
114
- : el.tagName === 'A'
115
- ? 'link'
116
- : el.tagName === 'INPUT'
117
- ? inputEl.type || 'textbox'
118
- : isContentEditable
119
- ? 'textbox'
120
- : el.tagName.toLowerCase());
121
- return {
122
- backendDOMNodeId: 0,
123
- role,
124
- name: el.getAttribute('aria-label') ||
125
- el.getAttribute('title') ||
126
- el.textContent?.trim().slice(0, 100) ||
127
- '',
128
- tagName: el.tagName.toLowerCase(),
129
- type: inputEl.type,
130
- placeholder: inputEl.placeholder,
131
- ariaLabel: el.getAttribute('aria-label') || undefined,
132
- textContent: el.textContent?.trim().slice(0, 50),
133
- rect: {
134
- x: rect.x + rect.width / 2, // Center point
135
- y: rect.y + rect.height / 2,
136
- width: rect.width,
137
- height: rect.height,
138
- },
139
- };
140
- }
141
- const searchLower = searchQuery.toLowerCase();
142
- const queryTokens = searchLower
143
- .split(/\s+/)
144
- .filter(t => t.length > 1)
145
- .filter(t => !['the', 'a', 'an', 'to', 'for', 'of', 'in', 'on', 'at', 'and', 'or'].includes(t));
146
- // Search for interactive elements
147
- const interactiveSelectors = [
148
- 'button',
149
- '[role="button"]',
150
- 'a',
151
- '[role="link"]',
152
- 'input[type="submit"]',
153
- 'input[type="button"]',
154
- 'input[type="radio"]',
155
- 'input[type="checkbox"]',
156
- '[role="radio"]',
157
- '[role="checkbox"]',
158
- '[role="menuitem"]',
159
- '[role="tab"]',
160
- '[role="option"]',
161
- '[onclick]',
162
- '[tabindex]',
163
- '[contenteditable="true"]',
164
- '[role="combobox"]',
165
- '[role="listbox"]',
166
- '[role="switch"]',
167
- '[role="slider"]',
168
- '[role="treeitem"]',
169
- '[role="dialog"] [aria-label]',
170
- '[role="alertdialog"] [aria-label]',
171
- '[data-testid]',
172
- ];
173
- const seen = new Set();
174
- // First pass: interactive elements
175
- for (const selector of interactiveSelectors) {
176
- if (elements.length >= maxResults)
177
- break;
178
- try {
179
- for (const el of document.querySelectorAll(selector)) {
180
- if (seen.has(el) || elements.length >= maxResults)
181
- continue;
182
- const info = getElementInfo(el);
183
- if (info) {
184
- const combinedText = `${info.name} ${info.textContent || ''} ${info.ariaLabel || ''} ${info.placeholder || ''}`.toLowerCase();
185
- // Check if any token matches
186
- if (queryTokens.some(token => combinedText.includes(token)) || combinedText.includes(searchLower)) {
187
- seen.add(el);
188
- el.__clickIndex = elements.length;
189
- domElements.push(el);
190
- elements.push(info);
191
- }
192
- }
193
- }
194
- }
195
- catch {
196
- // Invalid selector
197
- }
198
- }
199
- // Second pass: text content search on all elements
200
- const walker = document.createTreeWalker(document.body, NodeFilter.SHOW_ELEMENT);
201
- let node = walker.nextNode();
202
- while (node && elements.length < maxResults) {
203
- const el = node;
204
- if (!seen.has(el)) {
205
- const info = getElementInfo(el);
206
- if (info) {
207
- const combinedText = `${info.name} ${info.textContent || ''} ${info.ariaLabel || ''} ${info.placeholder || ''}`.toLowerCase();
208
- if (combinedText.includes(searchLower) || queryTokens.some(token => combinedText.includes(token))) {
209
- seen.add(el);
210
- el.__clickIndex = elements.length;
211
- domElements.push(el);
212
- elements.push(info);
213
- }
214
- }
215
- }
216
- node = walker.nextNode();
217
- }
218
- return elements;
219
- }, queryLower), 10000, 'click_element');
95
+ rawResults = await (0, element_discovery_1.discoverElements)(page, cdpClient, queryLower, {
96
+ maxResults: 30,
97
+ useCenter: true,
98
+ timeout: 10000,
99
+ toolName: 'click_element',
100
+ });
220
101
  }
221
102
  catch {
222
103
  // CDP evaluate timed out — retry on next poll iteration if budget remains
@@ -224,9 +105,9 @@ const handler = async (sessionId, args) => {
224
105
  await new Promise(resolve => setTimeout(resolve, pollInterval));
225
106
  continue;
226
107
  }
227
- results = [];
108
+ rawResults = [];
228
109
  }
229
- if (results.length === 0) {
110
+ if (rawResults.length === 0) {
230
111
  if (maxWait > 0 && Date.now() - startTime < maxWait) {
231
112
  await new Promise(resolve => setTimeout(resolve, pollInterval));
232
113
  continue;
@@ -242,48 +123,9 @@ const handler = async (sessionId, args) => {
242
123
  isError: true,
243
124
  };
244
125
  }
245
- // Get backend DOM node IDs batched approach (single DOM walk + parallel DOM.describeNode)
246
- // Replaces per-candidate querySelectorAll('*').find() which is O(n) × candidates = O(30n)
247
- // Step 1: Single Runtime.evaluate to collect all tagged elements in index order
248
- const { result: batchResult } = await cdpClient.send(page, 'Runtime.evaluate', {
249
- expression: `(() => {
250
- const indexedEls = [];
251
- const walker = document.createTreeWalker(document.body, NodeFilter.SHOW_ELEMENT);
252
- let node;
253
- while (node = walker.nextNode()) {
254
- const el = node;
255
- if (el.__clickIndex !== undefined) {
256
- indexedEls.push({ el, index: el.__clickIndex });
257
- }
258
- }
259
- indexedEls.sort((a, b) => a.index - b.index);
260
- return indexedEls.map(e => e.el);
261
- })()`,
262
- returnByValue: false,
263
- });
264
- if (batchResult.objectId) {
265
- // Step 2: Get array properties to obtain individual element object references
266
- const { result: properties } = await cdpClient.send(page, 'Runtime.getProperties', {
267
- objectId: batchResult.objectId,
268
- ownProperties: true,
269
- });
270
- // Step 3: Parallel DOM.describeNode for all candidates
271
- const describePromises = [];
272
- for (const prop of properties) {
273
- const index = parseInt(prop.name, 10);
274
- if (isNaN(index) || index >= results.length || !prop.value?.objectId)
275
- continue;
276
- describePromises.push(cdpClient.send(page, 'DOM.describeNode', { objectId: prop.value.objectId }).then(({ node }) => {
277
- results[index].backendDOMNodeId = node.backendNodeId;
278
- }).catch(() => {
279
- // Skip if we can't get the backend node ID
280
- }));
281
- }
282
- await Promise.all(describePromises);
283
- }
284
- // Score and sort elements
285
- const scoredResults = results
286
- .map(el => ({ ...el, score: (0, element_finder_1.scoreElement)(el, queryLower, queryTokens) }))
126
+ // Score and sort elements, tracking original discovery index for re-positioning
127
+ const scoredResults = rawResults
128
+ .map((el, i) => ({ ...el, score: (0, element_finder_1.scoreElement)(el, queryLower, queryTokens), _origIdx: i }))
287
129
  .sort((a, b) => b.score - a.score);
288
130
  if (scoredResults.length > 0 && scoredResults[0].score >= 10) {
289
131
  bestMatch = scoredResults[0];
@@ -322,26 +164,11 @@ const handler = async (sessionId, args) => {
322
164
  });
323
165
  // Small delay after scroll
324
166
  await new Promise(resolve => setTimeout(resolve, defaults_1.DEFAULT_DOM_SETTLE_DELAY_MS));
325
- // Re-get position after scroll use __clickIndex=0 on sorted best match
326
- // (best match was index 0 before sorting; use backendDOMNodeId instead to be precise)
327
- const { result: boxResult } = await cdpClient.send(page, 'Runtime.evaluate', {
328
- expression: `(() => {
329
- const walker = document.createTreeWalker(document.body, NodeFilter.SHOW_ELEMENT);
330
- let node;
331
- while (node = walker.nextNode()) {
332
- const el = node;
333
- if (el.__clickIndex === 0) {
334
- const rect = el.getBoundingClientRect();
335
- return { x: rect.x + rect.width/2, y: rect.y + rect.height/2, width: rect.width, height: rect.height };
336
- }
337
- }
338
- return null;
339
- })()`,
340
- returnByValue: true,
341
- });
342
- if (boxResult.value) {
343
- bestMatch.rect.x = boxResult.value.x;
344
- bestMatch.rect.y = boxResult.value.y;
167
+ // Re-get position after scroll using the shared getTaggedElementRect helper
168
+ const newRect = await (0, element_discovery_1.getTaggedElementRect)(page, cdpClient, element_discovery_1.DISCOVERY_TAG, bestMatch._origIdx, true);
169
+ if (newRect) {
170
+ bestMatch.rect.x = newRect.x;
171
+ bestMatch.rect.y = newRect.y;
345
172
  }
346
173
  }
347
174
  catch {
@@ -364,13 +191,16 @@ const handler = async (sessionId, args) => {
364
191
  if (bestMatch.backendDOMNodeId) {
365
192
  refId = refIdManager.generateRef(sessionId, tabId, bestMatch.backendDOMNodeId, bestMatch.role, bestMatch.name, bestMatch.tagName, bestMatch.textContent);
366
193
  }
194
+ // Clean up discovery tags to prevent stale properties
195
+ await (0, element_discovery_1.cleanupTags)(page, element_discovery_1.DISCOVERY_TAG).catch(() => { });
367
196
  // Reset adaptive screenshot on click (page state changes)
368
197
  adaptive_screenshot_1.AdaptiveScreenshot.getInstance().reset(tabId);
369
198
  const clickType = doubleClick ? 'Double-clicked' : 'Clicked';
199
+ const textSample = bestMatch.textContent?.slice(0, 50) || bestMatch.name.slice(0, 50);
200
+ const textPart = textSample ? ` "${textSample}"` : '';
201
+ const refPart = refId ? ` [${refId}]` : '';
370
202
  const confidenceNote = bestMatch.score < 50 ? ` (low confidence: ${bestMatch.score}/100)` : '';
371
- const summary = await (0, visual_summary_1.generateVisualSummary)(page);
372
- const summaryText = summary ? `\n${summary}` : '';
373
- const resultText = `${clickType} ${bestMatch.role} "${bestMatch.name.slice(0, 50)}" at (${finalX}, ${finalY})${refId ? ` [${refId}]` : ''}${confidenceNote}${delta}${summaryText}`;
203
+ const resultText = `\u2713 ${clickType} ${bestMatch.tagName}${textPart}${refPart}${confidenceNote}${delta}`;
374
204
  // Optional verification screenshot — WebP via CDP for speed and consistency
375
205
  if (verify) {
376
206
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"click-element.js","sourceRoot":"","sources":["../../src/tools/click-element.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"click-element.js","sourceRoot":"","sources":["../../src/tools/click-element.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"computer.d.ts","sourceRoot":"","sources":["../../src/tools/computer.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAs6B1C,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAE5D"}
1
+ {"version":3,"file":"computer.d.ts","sourceRoot":"","sources":["../../src/tools/computer.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AA48B1C,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAE5D"}
@@ -14,13 +14,13 @@ const with_timeout_1 = require("../utils/with-timeout");
14
14
  const retry_with_fallback_1 = require("../utils/retry-with-fallback");
15
15
  const definition = {
16
16
  name: 'computer',
17
- description: 'Perform mouse, keyboard, and screenshot actions on a browser tab.',
17
+ description: 'Mouse, keyboard, and screenshot actions on a tab.',
18
18
  inputSchema: {
19
19
  type: 'object',
20
20
  properties: {
21
21
  tabId: {
22
22
  type: 'string',
23
- description: 'Tab ID to execute the action on',
23
+ description: 'Tab ID',
24
24
  },
25
25
  action: {
26
26
  type: 'string',
@@ -42,7 +42,7 @@ const definition = {
42
42
  coordinate: {
43
43
  type: 'array',
44
44
  items: { type: 'number' },
45
- description: '(x, y) coordinates for click/scroll actions',
45
+ description: '[x, y] for click/scroll actions',
46
46
  },
47
47
  text: {
48
48
  type: 'string',
@@ -59,11 +59,24 @@ const definition = {
59
59
  },
60
60
  scroll_amount: {
61
61
  type: 'number',
62
- description: 'Number of scroll wheel ticks',
62
+ description: 'Scroll wheel ticks. Default: 3',
63
63
  },
64
64
  ref: {
65
65
  type: 'string',
66
- description: 'ref_N from read_page or backendNodeId from DOM mode',
66
+ description: 'Element ref or backendNodeId',
67
+ },
68
+ screenshotQuality: {
69
+ type: 'string',
70
+ enum: ['high', 'normal', 'low'],
71
+ description: 'Screenshot quality. low: reduced resolution and quality for smaller payload.',
72
+ },
73
+ includeUserAgentShadowDOM: {
74
+ type: 'boolean',
75
+ description: 'Include user-agent shadow DOM in hit detection. Default: false',
76
+ },
77
+ force: {
78
+ type: 'boolean',
79
+ description: 'Only for action "screenshot". Force full screenshot, bypassing adaptive degradation. Default: false.',
67
80
  },
68
81
  },
69
82
  required: ['action', 'tabId'],
@@ -78,6 +91,7 @@ const handler = async (sessionId, args) => {
78
91
  const scrollDirection = args.scroll_direction;
79
92
  const scrollAmount = args.scroll_amount || 3;
80
93
  const ref = args.ref;
94
+ const includeUAShadow = args.includeUserAgentShadowDOM ?? false;
81
95
  const sessionManager = (0, session_manager_1.getSessionManager)();
82
96
  if (!tabId) {
83
97
  return {
@@ -105,11 +119,29 @@ const handler = async (sessionId, args) => {
105
119
  catch {
106
120
  // Page may be navigating — proceed anyway
107
121
  }
122
+ // Quality presets for screenshot compression
123
+ const QUALITY_PRESETS = {
124
+ high: { quality: 85 },
125
+ normal: { quality: 60 },
126
+ low: { quality: 40 },
127
+ };
108
128
  // Phase 1.5: Adaptive screenshot — decide response mode based on repetition
129
+ const force = args.force ?? false;
109
130
  const adaptive = adaptive_screenshot_1.AdaptiveScreenshot.getInstance();
131
+ // Force mode: reset adaptive history to prevent degradation spiral
132
+ if (force) {
133
+ adaptive.reset(tabId);
134
+ }
110
135
  const screenshotMode = await adaptive.evaluate(page, tabId);
136
+ const effectiveMode = force ? 'full' : screenshotMode;
137
+ // Determine effective quality: explicit arg overrides adaptive suggestion
138
+ const qualityArg = args.screenshotQuality;
139
+ const effectiveQuality = (qualityArg === 'high' || qualityArg === 'normal' || qualityArg === 'low')
140
+ ? qualityArg
141
+ : adaptive.getQualityForMode(effectiveMode);
142
+ const preset = QUALITY_PRESETS[effectiveQuality];
111
143
  // text_only mode: skip expensive screenshot, return visual summary
112
- if (screenshotMode === 'text_only') {
144
+ if (effectiveMode === 'text_only') {
113
145
  const summary = await (0, visual_summary_1.generateVisualSummary)(page);
114
146
  return {
115
147
  content: [{
@@ -129,7 +161,7 @@ const handler = async (sessionId, args) => {
129
161
  try {
130
162
  const { data } = await cdpSession.send('Page.captureScreenshot', {
131
163
  format: 'webp',
132
- quality: defaults_1.DEFAULT_SCREENSHOT_QUALITY,
164
+ quality: preset.quality,
133
165
  optimizeForSpeed: true,
134
166
  });
135
167
  return data;
@@ -160,7 +192,7 @@ const handler = async (sessionId, args) => {
160
192
  { type: 'image', data: screenshot.data, mimeType: screenshot.mimeType },
161
193
  ];
162
194
  // annotated mode: append note about repeated screenshot
163
- if (screenshotMode === 'annotated') {
195
+ if (effectiveMode === 'annotated') {
164
196
  content.push({ type: 'text', text: adaptive.getAnnotation() });
165
197
  }
166
198
  return { content };
@@ -235,7 +267,7 @@ const handler = async (sessionId, args) => {
235
267
  isError: true,
236
268
  };
237
269
  }
238
- const leftClickHitInfo = await getHitElementInfo(page, sessionManager.getCDPClient(), clickCoord[0], clickCoord[1]);
270
+ const leftClickHitInfo = await getHitElementInfo(page, sessionManager.getCDPClient(), clickCoord[0], clickCoord[1], includeUAShadow);
239
271
  const { delta: leftDelta } = await (0, dom_delta_1.withDomDelta)(page, () => page.mouse.click(clickCoord[0], clickCoord[1]));
240
272
  // Internal fallback: if hit non-interactive element, suggest but don't auto-retry
241
273
  // (auto-retry could cause unintended side effects on elements the LLM didn't intend)
@@ -277,7 +309,7 @@ const handler = async (sessionId, args) => {
277
309
  isError: true,
278
310
  };
279
311
  }
280
- const rightClickHitInfo = await getHitElementInfo(page, sessionManager.getCDPClient(), clickCoord[0], clickCoord[1]);
312
+ const rightClickHitInfo = await getHitElementInfo(page, sessionManager.getCDPClient(), clickCoord[0], clickCoord[1], includeUAShadow);
281
313
  const { delta: rightDelta } = await (0, dom_delta_1.withDomDelta)(page, () => page.mouse.click(clickCoord[0], clickCoord[1], { button: 'right' }));
282
314
  const rightClickText = rightClickValidation.warning
283
315
  ? `Right-clicked at (${clickCoord[0]}, ${clickCoord[1]}). Warning: ${rightClickValidation.warning}${rightDelta}`
@@ -317,7 +349,7 @@ const handler = async (sessionId, args) => {
317
349
  isError: true,
318
350
  };
319
351
  }
320
- const doubleClickHitInfo = await getHitElementInfo(page, sessionManager.getCDPClient(), clickCoord[0], clickCoord[1]);
352
+ const doubleClickHitInfo = await getHitElementInfo(page, sessionManager.getCDPClient(), clickCoord[0], clickCoord[1], includeUAShadow);
321
353
  const { delta: doubleDelta } = await (0, dom_delta_1.withDomDelta)(page, () => page.mouse.click(clickCoord[0], clickCoord[1], { clickCount: 2 }));
322
354
  const doubleClickText = doubleClickValidation.warning
323
355
  ? `Double-clicked at (${clickCoord[0]}, ${clickCoord[1]}). Warning: ${doubleClickValidation.warning}${doubleDelta}`
@@ -357,7 +389,7 @@ const handler = async (sessionId, args) => {
357
389
  isError: true,
358
390
  };
359
391
  }
360
- const tripleClickHitInfo = await getHitElementInfo(page, sessionManager.getCDPClient(), clickCoord[0], clickCoord[1]);
392
+ const tripleClickHitInfo = await getHitElementInfo(page, sessionManager.getCDPClient(), clickCoord[0], clickCoord[1], includeUAShadow);
361
393
  const { delta: tripleDelta } = await (0, dom_delta_1.withDomDelta)(page, () => page.mouse.click(clickCoord[0], clickCoord[1], { clickCount: 3 }));
362
394
  const tripleClickText = tripleClickValidation.warning
363
395
  ? `Triple-clicked at (${clickCoord[0]}, ${clickCoord[1]}). Warning: ${tripleClickValidation.warning}${tripleDelta}`
@@ -647,9 +679,9 @@ async function resolveRefToCoordinates(sessionId, tabId, ref, page, sessionManag
647
679
  * Returns a string like '\nHit: <button id="submit"> "Submit" [interactive]'
648
680
  * or empty string if CDP fails.
649
681
  */
650
- async function getHitElementInfo(page, cdpClient, x, y) {
682
+ async function getHitElementInfo(page, cdpClient, x, y, includeUserAgentShadowDOM = false) {
651
683
  try {
652
- const locationResult = await cdpClient.send(page, 'DOM.getNodeForLocation', { x, y, includeUserAgentShadowDOM: false });
684
+ const locationResult = await cdpClient.send(page, 'DOM.getNodeForLocation', { x, y, includeUserAgentShadowDOM });
653
685
  const backendNodeId = locationResult?.backendNodeId;
654
686
  if (!backendNodeId)
655
687
  return '';