openchrome-mcp 1.2.2 → 1.2.4

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 (140) hide show
  1. package/README.md +11 -4
  2. package/dist/cdp/client.d.ts +2 -2
  3. package/dist/cdp/client.d.ts.map +1 -1
  4. package/dist/cdp/client.js +4 -2
  5. package/dist/cdp/client.js.map +1 -1
  6. package/dist/cdp/connection-pool.d.ts +2 -2
  7. package/dist/cdp/connection-pool.d.ts.map +1 -1
  8. package/dist/cdp/connection-pool.js +2 -1
  9. package/dist/cdp/connection-pool.js.map +1 -1
  10. package/dist/cdp/screenshot-scheduler.d.ts.map +1 -1
  11. package/dist/cdp/screenshot-scheduler.js +2 -1
  12. package/dist/cdp/screenshot-scheduler.js.map +1 -1
  13. package/dist/chrome/launcher.d.ts.map +1 -1
  14. package/dist/chrome/launcher.js +2 -1
  15. package/dist/chrome/launcher.js.map +1 -1
  16. package/dist/config/defaults.d.ts +24 -0
  17. package/dist/config/defaults.d.ts.map +1 -0
  18. package/dist/config/defaults.js +24 -0
  19. package/dist/config/defaults.js.map +1 -0
  20. package/dist/dom/dom-serializer.d.ts.map +1 -1
  21. package/dist/dom/dom-serializer.js +10 -5
  22. package/dist/dom/dom-serializer.js.map +1 -1
  23. package/dist/hints/hint-engine.d.ts +1 -0
  24. package/dist/hints/hint-engine.d.ts.map +1 -1
  25. package/dist/hints/hint-engine.js +30 -6
  26. package/dist/hints/hint-engine.js.map +1 -1
  27. package/dist/hints/rules/composite-suggestions.d.ts.map +1 -1
  28. package/dist/hints/rules/composite-suggestions.js +37 -0
  29. package/dist/hints/rules/composite-suggestions.js.map +1 -1
  30. package/dist/hints/rules/error-recovery.d.ts.map +1 -1
  31. package/dist/hints/rules/error-recovery.js +7 -3
  32. package/dist/hints/rules/error-recovery.js.map +1 -1
  33. package/dist/hints/rules/pagination-detection.d.ts +7 -0
  34. package/dist/hints/rules/pagination-detection.d.ts.map +1 -0
  35. package/dist/hints/rules/pagination-detection.js +220 -0
  36. package/dist/hints/rules/pagination-detection.js.map +1 -0
  37. package/dist/hints/rules/repetition-detection.d.ts.map +1 -1
  38. package/dist/hints/rules/repetition-detection.js +152 -0
  39. package/dist/hints/rules/repetition-detection.js.map +1 -1
  40. package/dist/hints/rules/sequence-detection.d.ts.map +1 -1
  41. package/dist/hints/rules/sequence-detection.js +23 -2
  42. package/dist/hints/rules/sequence-detection.js.map +1 -1
  43. package/dist/hints/rules/success-hints.d.ts.map +1 -1
  44. package/dist/hints/rules/success-hints.js +5 -1
  45. package/dist/hints/rules/success-hints.js.map +1 -1
  46. package/dist/mcp-server.d.ts.map +1 -1
  47. package/dist/mcp-server.js +15 -16
  48. package/dist/mcp-server.js.map +1 -1
  49. package/dist/session-manager.d.ts.map +1 -1
  50. package/dist/session-manager.js +2 -1
  51. package/dist/session-manager.js.map +1 -1
  52. package/dist/tools/batch-execute.d.ts.map +1 -1
  53. package/dist/tools/batch-execute.js +0 -2
  54. package/dist/tools/batch-execute.js.map +1 -1
  55. package/dist/tools/batch-paginate.d.ts +10 -0
  56. package/dist/tools/batch-paginate.d.ts.map +1 -0
  57. package/dist/tools/batch-paginate.js +419 -0
  58. package/dist/tools/batch-paginate.js.map +1 -0
  59. package/dist/tools/click-element.d.ts.map +1 -1
  60. package/dist/tools/click-element.js +16 -21
  61. package/dist/tools/click-element.js.map +1 -1
  62. package/dist/tools/computer.d.ts.map +1 -1
  63. package/dist/tools/computer.js +232 -61
  64. package/dist/tools/computer.js.map +1 -1
  65. package/dist/tools/console-capture.d.ts.map +1 -1
  66. package/dist/tools/console-capture.js +1 -6
  67. package/dist/tools/console-capture.js.map +1 -1
  68. package/dist/tools/cookies.d.ts.map +1 -1
  69. package/dist/tools/cookies.js +1 -6
  70. package/dist/tools/cookies.js.map +1 -1
  71. package/dist/tools/emulate-device.d.ts.map +1 -1
  72. package/dist/tools/emulate-device.js +1 -3
  73. package/dist/tools/emulate-device.js.map +1 -1
  74. package/dist/tools/fill-form.d.ts.map +1 -1
  75. package/dist/tools/fill-form.js +129 -134
  76. package/dist/tools/fill-form.js.map +1 -1
  77. package/dist/tools/form-input.d.ts.map +1 -1
  78. package/dist/tools/form-input.js +47 -46
  79. package/dist/tools/form-input.js.map +1 -1
  80. package/dist/tools/geolocation.d.ts.map +1 -1
  81. package/dist/tools/geolocation.js +1 -3
  82. package/dist/tools/geolocation.js.map +1 -1
  83. package/dist/tools/http-auth.d.ts.map +1 -1
  84. package/dist/tools/http-auth.js +1 -5
  85. package/dist/tools/http-auth.js.map +1 -1
  86. package/dist/tools/index.d.ts.map +1 -1
  87. package/dist/tools/index.js +2 -0
  88. package/dist/tools/index.js.map +1 -1
  89. package/dist/tools/javascript.d.ts.map +1 -1
  90. package/dist/tools/javascript.js +3 -8
  91. package/dist/tools/javascript.js.map +1 -1
  92. package/dist/tools/lightweight-scroll.d.ts.map +1 -1
  93. package/dist/tools/lightweight-scroll.js +1 -5
  94. package/dist/tools/lightweight-scroll.js.map +1 -1
  95. package/dist/tools/navigate.d.ts.map +1 -1
  96. package/dist/tools/navigate.js +5 -7
  97. package/dist/tools/navigate.js.map +1 -1
  98. package/dist/tools/network.d.ts.map +1 -1
  99. package/dist/tools/network.js +1 -4
  100. package/dist/tools/network.js.map +1 -1
  101. package/dist/tools/page-reload.d.ts.map +1 -1
  102. package/dist/tools/page-reload.js +3 -2
  103. package/dist/tools/page-reload.js.map +1 -1
  104. package/dist/tools/read-page.d.ts.map +1 -1
  105. package/dist/tools/read-page.js +41 -6
  106. package/dist/tools/read-page.js.map +1 -1
  107. package/dist/tools/request-intercept.d.ts.map +1 -1
  108. package/dist/tools/request-intercept.js +1 -11
  109. package/dist/tools/request-intercept.js.map +1 -1
  110. package/dist/tools/storage.d.ts.map +1 -1
  111. package/dist/tools/storage.js +1 -7
  112. package/dist/tools/storage.js.map +1 -1
  113. package/dist/tools/tabs-close.js +1 -1
  114. package/dist/tools/tabs-close.js.map +1 -1
  115. package/dist/tools/tabs-create.js +1 -1
  116. package/dist/tools/tabs-create.js.map +1 -1
  117. package/dist/tools/user-agent.d.ts.map +1 -1
  118. package/dist/tools/user-agent.js +1 -3
  119. package/dist/tools/user-agent.js.map +1 -1
  120. package/dist/tools/wait-and-click.d.ts.map +1 -1
  121. package/dist/tools/wait-and-click.js +5 -10
  122. package/dist/tools/wait-and-click.js.map +1 -1
  123. package/dist/tools/wait-for.d.ts.map +1 -1
  124. package/dist/tools/wait-for.js +1 -7
  125. package/dist/tools/wait-for.js.map +1 -1
  126. package/dist/tools/xpath-query.d.ts.map +1 -1
  127. package/dist/tools/xpath-query.js +1 -6
  128. package/dist/tools/xpath-query.js.map +1 -1
  129. package/dist/utils/dom-delta.d.ts +29 -0
  130. package/dist/utils/dom-delta.d.ts.map +1 -0
  131. package/dist/utils/dom-delta.js +262 -0
  132. package/dist/utils/dom-delta.js.map +1 -0
  133. package/dist/utils/pagination-detector.d.ts +22 -0
  134. package/dist/utils/pagination-detector.d.ts.map +1 -0
  135. package/dist/utils/pagination-detector.js +292 -0
  136. package/dist/utils/pagination-detector.js.map +1 -0
  137. package/dist/utils/smart-goto.d.ts.map +1 -1
  138. package/dist/utils/smart-goto.js +2 -1
  139. package/dist/utils/smart-goto.js.map +1 -1
  140. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"batch-execute.d.ts","sourceRoot":"","sources":["../../src/tools/batch-execute.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAwP1C,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAEhE"}
1
+ {"version":3,"file":"batch-execute.d.ts","sourceRoot":"","sources":["../../src/tools/batch-execute.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAsP1C,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAEhE"}
@@ -13,8 +13,6 @@ const session_manager_1 = require("../session-manager");
13
13
  const definition = {
14
14
  name: 'batch_execute',
15
15
  description: 'Execute JavaScript code across multiple tabs in parallel. Returns results from all tabs. ' +
16
- 'Use this instead of spawning separate agents when you need to run the same or similar ' +
17
- 'data extraction scripts across many tabs simultaneously. ' +
18
16
  'Each task specifies a tabId and a JavaScript snippet to execute.',
19
17
  inputSchema: {
20
18
  type: 'object',
@@ -1 +1 @@
1
- {"version":3,"file":"batch-execute.js","sourceRoot":"","sources":["../../src/tools/batch-execute.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"batch-execute.js","sourceRoot":"","sources":["../../src/tools/batch-execute.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Batch Paginate Tool - Capture multiple pages from a paginated viewer in a single MCP call
3
+ *
4
+ * Eliminates N LLM round-trips by executing the pagination loop server-side.
5
+ * Supports keyboard navigation, click-based pagination, URL-based parallel extraction,
6
+ * and infinite scroll.
7
+ */
8
+ import { MCPServer } from '../mcp-server';
9
+ export declare function registerBatchPaginateTool(server: MCPServer): void;
10
+ //# sourceMappingURL=batch-paginate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"batch-paginate.d.ts","sourceRoot":"","sources":["../../src/tools/batch-paginate.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAke1C,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAEjE"}
@@ -0,0 +1,419 @@
1
+ "use strict";
2
+ /**
3
+ * Batch Paginate Tool - Capture multiple pages from a paginated viewer in a single MCP call
4
+ *
5
+ * Eliminates N LLM round-trips by executing the pagination loop server-side.
6
+ * Supports keyboard navigation, click-based pagination, URL-based parallel extraction,
7
+ * and infinite scroll.
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.registerBatchPaginateTool = registerBatchPaginateTool;
11
+ const session_manager_1 = require("../session-manager");
12
+ const defaults_1 = require("../config/defaults");
13
+ const definition = {
14
+ name: 'batch_paginate',
15
+ description: 'Extract content from multiple pages of a paginated viewer (PDF, slides, articles) in a single call. ' +
16
+ 'Supports keyboard navigation, click-based pagination, URL-based parallel extraction, and infinite scroll.',
17
+ inputSchema: {
18
+ type: 'object',
19
+ properties: {
20
+ tabId: {
21
+ type: 'string',
22
+ description: 'Tab ID of the paginated viewer',
23
+ },
24
+ strategy: {
25
+ type: 'string',
26
+ enum: ['keyboard', 'click', 'url', 'scroll'],
27
+ description: 'Pagination strategy: "keyboard" (ArrowRight/ArrowDown), "click" (CSS selector), "url" (parallel multi-tab), "scroll" (infinite scroll)',
28
+ },
29
+ totalPages: {
30
+ type: 'number',
31
+ description: 'Total number of pages to capture. Required for keyboard/click strategies.',
32
+ },
33
+ startPage: {
34
+ type: 'number',
35
+ description: 'Starting page number (default: 1). Useful when resuming from a specific page.',
36
+ },
37
+ captureMode: {
38
+ type: 'string',
39
+ enum: ['screenshot', 'text', 'dom', 'both'],
40
+ description: 'What to capture per page: "screenshot" (base64 image), "text" (accessibility text), "dom" (compact DOM), "both" (screenshot + text). Default: "text".',
41
+ },
42
+ keyAction: {
43
+ type: 'string',
44
+ description: '(keyboard strategy) Key to press for next page. Default: "ArrowRight".',
45
+ },
46
+ nextSelector: {
47
+ type: 'string',
48
+ description: '(click strategy) CSS selector for the "next page" button.',
49
+ },
50
+ urlTemplate: {
51
+ type: 'string',
52
+ description: '(url strategy) URL template with {N}, {page}, or {offset} placeholder for page number, e.g. "https://example.com/page/{N}".',
53
+ },
54
+ waitBetweenPages: {
55
+ type: 'number',
56
+ description: 'Milliseconds to wait between page transitions for rendering. Default: 500.',
57
+ },
58
+ scrollAmount: {
59
+ type: 'number',
60
+ description: '(scroll strategy) Viewport heights to scroll per step. Default: 1.',
61
+ },
62
+ maxScrolls: {
63
+ type: 'number',
64
+ description: '(scroll strategy) Maximum number of scroll steps. Default: 50.',
65
+ },
66
+ },
67
+ required: ['tabId', 'strategy'],
68
+ },
69
+ };
70
+ /**
71
+ * Simple concurrency limiter
72
+ */
73
+ function createLimiter(concurrency) {
74
+ let active = 0;
75
+ const queue = [];
76
+ return async function (fn) {
77
+ if (active >= concurrency) {
78
+ await new Promise((resolve) => queue.push(resolve));
79
+ }
80
+ active++;
81
+ try {
82
+ return await fn();
83
+ }
84
+ finally {
85
+ active--;
86
+ if (queue.length > 0) {
87
+ const next = queue.shift();
88
+ next();
89
+ }
90
+ }
91
+ };
92
+ }
93
+ const handler = async (sessionId, args) => {
94
+ const tabId = args.tabId;
95
+ const strategy = args.strategy;
96
+ const totalPages = args.totalPages;
97
+ const startPage = args.startPage || 1;
98
+ const captureMode = args.captureMode || 'text';
99
+ const keyAction = args.keyAction || 'ArrowRight';
100
+ const nextSelector = args.nextSelector;
101
+ const urlTemplate = args.urlTemplate;
102
+ const waitBetweenPages = args.waitBetweenPages ?? 500;
103
+ const scrollAmount = args.scrollAmount || 1;
104
+ const maxScrolls = args.maxScrolls || 50;
105
+ if (!tabId) {
106
+ return {
107
+ content: [{ type: 'text', text: 'Error: tabId is required' }],
108
+ isError: true,
109
+ };
110
+ }
111
+ if (!strategy) {
112
+ return {
113
+ content: [{ type: 'text', text: 'Error: strategy is required' }],
114
+ isError: true,
115
+ };
116
+ }
117
+ // Validate strategy-specific params
118
+ if ((strategy === 'keyboard' || strategy === 'click') && !totalPages) {
119
+ return {
120
+ content: [
121
+ {
122
+ type: 'text',
123
+ text: `Error: totalPages is required for strategy "${strategy}"`,
124
+ },
125
+ ],
126
+ isError: true,
127
+ };
128
+ }
129
+ if (strategy === 'click' && !nextSelector) {
130
+ return {
131
+ content: [{ type: 'text', text: 'Error: nextSelector is required for strategy "click"' }],
132
+ isError: true,
133
+ };
134
+ }
135
+ if (strategy === 'url' && !urlTemplate) {
136
+ return {
137
+ content: [{ type: 'text', text: 'Error: urlTemplate is required for strategy "url"' }],
138
+ isError: true,
139
+ };
140
+ }
141
+ if (strategy === 'url' && !totalPages) {
142
+ return {
143
+ content: [{ type: 'text', text: 'Error: totalPages is required for strategy "url"' }],
144
+ isError: true,
145
+ };
146
+ }
147
+ const sessionManager = (0, session_manager_1.getSessionManager)();
148
+ const startTime = Date.now();
149
+ const pages = [];
150
+ /**
151
+ * Capture content from the current page state
152
+ */
153
+ async function capturePageContent(page, pageNumber) {
154
+ const result = { pageNumber };
155
+ try {
156
+ if (captureMode === 'screenshot' || captureMode === 'both') {
157
+ try {
158
+ const cdpSession = await page.target().createCDPSession();
159
+ try {
160
+ const { data } = await cdpSession.send('Page.captureScreenshot', {
161
+ format: 'webp',
162
+ quality: defaults_1.DEFAULT_SCREENSHOT_QUALITY,
163
+ optimizeForSpeed: true,
164
+ });
165
+ result.screenshot = data;
166
+ result.screenshotMimeType = 'image/webp';
167
+ }
168
+ finally {
169
+ await cdpSession.detach().catch(() => { });
170
+ }
171
+ }
172
+ catch {
173
+ // Fallback to Puppeteer PNG
174
+ const screenshotData = await page.screenshot({ encoding: 'base64', type: 'png' });
175
+ result.screenshot = screenshotData;
176
+ result.screenshotMimeType = 'image/png';
177
+ }
178
+ }
179
+ if (captureMode === 'text' || captureMode === 'both') {
180
+ result.text = await page.evaluate(() => document.body.innerText);
181
+ }
182
+ if (captureMode === 'dom') {
183
+ const rawHtml = await page.evaluate(() => document.body.innerHTML);
184
+ // Trim to avoid huge payloads
185
+ result.dom = rawHtml.length > defaults_1.MAX_OUTPUT_CHARS ? rawHtml.slice(0, defaults_1.MAX_OUTPUT_CHARS) + '...[truncated]' : rawHtml;
186
+ }
187
+ }
188
+ catch (err) {
189
+ result.error = err instanceof Error ? err.message : String(err);
190
+ }
191
+ return result;
192
+ }
193
+ try {
194
+ // ----------------------------------------------------------------
195
+ // KEYBOARD STRATEGY
196
+ // ----------------------------------------------------------------
197
+ if (strategy === 'keyboard') {
198
+ const page = await sessionManager.getPage(sessionId, tabId, undefined, 'batch_paginate');
199
+ if (!page) {
200
+ return {
201
+ content: [{ type: 'text', text: `Error: Tab ${tabId} not found` }],
202
+ isError: true,
203
+ };
204
+ }
205
+ let failureCount = 0;
206
+ for (let i = startPage; i <= totalPages; i++) {
207
+ const pageResult = await capturePageContent(page, i);
208
+ pages.push(pageResult);
209
+ if (pageResult.error) {
210
+ failureCount++;
211
+ if (failureCount >= (totalPages - startPage + 1) * 0.5) {
212
+ // More than 50% failing, abort early
213
+ break;
214
+ }
215
+ }
216
+ // Navigate to next page (don't press on last page)
217
+ if (i < totalPages) {
218
+ await page.keyboard.press(keyAction);
219
+ await new Promise((r) => setTimeout(r, waitBetweenPages));
220
+ }
221
+ }
222
+ }
223
+ // ----------------------------------------------------------------
224
+ // CLICK STRATEGY
225
+ // ----------------------------------------------------------------
226
+ else if (strategy === 'click') {
227
+ const page = await sessionManager.getPage(sessionId, tabId, undefined, 'batch_paginate');
228
+ if (!page) {
229
+ return {
230
+ content: [{ type: 'text', text: `Error: Tab ${tabId} not found` }],
231
+ isError: true,
232
+ };
233
+ }
234
+ let failureCount = 0;
235
+ for (let i = startPage; i <= totalPages; i++) {
236
+ const pageResult = await capturePageContent(page, i);
237
+ pages.push(pageResult);
238
+ if (pageResult.error) {
239
+ failureCount++;
240
+ if (failureCount >= (totalPages - startPage + 1) * 0.5) {
241
+ break;
242
+ }
243
+ }
244
+ // Click next button (don't click on last page)
245
+ if (i < totalPages) {
246
+ try {
247
+ const nextButton = await page.$(nextSelector);
248
+ if (!nextButton) {
249
+ pages.push({
250
+ pageNumber: i + 1,
251
+ error: `Next button selector "${nextSelector}" not found on page ${i}`,
252
+ });
253
+ break;
254
+ }
255
+ await nextButton.click();
256
+ await new Promise((r) => setTimeout(r, waitBetweenPages));
257
+ }
258
+ catch (err) {
259
+ pages.push({
260
+ pageNumber: i + 1,
261
+ error: `Failed to click next button: ${err instanceof Error ? err.message : String(err)}`,
262
+ });
263
+ break;
264
+ }
265
+ }
266
+ }
267
+ }
268
+ // ----------------------------------------------------------------
269
+ // SCROLL STRATEGY (infinite scroll)
270
+ // ----------------------------------------------------------------
271
+ else if (strategy === 'scroll') {
272
+ const page = await sessionManager.getPage(sessionId, tabId, undefined, 'batch_paginate');
273
+ if (!page) {
274
+ return {
275
+ content: [{ type: 'text', text: `Error: Tab ${tabId} not found` }],
276
+ isError: true,
277
+ };
278
+ }
279
+ let lastScrollHeight = await page.evaluate(() => document.documentElement.scrollHeight);
280
+ let stepNumber = 1;
281
+ // Capture initial view
282
+ const initialResult = await capturePageContent(page, stepNumber);
283
+ pages.push(initialResult);
284
+ for (let step = 1; step <= maxScrolls; step++) {
285
+ // Scroll and measure in a single CDP round-trip
286
+ const { newScrollHeight, atBottom } = await page.evaluate((amount) => {
287
+ window.scrollBy(0, window.innerHeight * amount);
288
+ const scrollHeight = document.documentElement.scrollHeight;
289
+ const scrollTop = window.scrollY;
290
+ const viewportHeight = window.innerHeight;
291
+ return {
292
+ newScrollHeight: scrollHeight,
293
+ atBottom: scrollTop + viewportHeight >= scrollHeight - 10,
294
+ };
295
+ }, scrollAmount);
296
+ await new Promise((r) => setTimeout(r, waitBetweenPages));
297
+ stepNumber++;
298
+ const stepResult = await capturePageContent(page, stepNumber);
299
+ pages.push(stepResult);
300
+ // Stop if reached bottom and height didn't change
301
+ if (atBottom && newScrollHeight === lastScrollHeight) {
302
+ break;
303
+ }
304
+ lastScrollHeight = newScrollHeight;
305
+ }
306
+ }
307
+ // ----------------------------------------------------------------
308
+ // URL STRATEGY (parallel multi-tab)
309
+ // ----------------------------------------------------------------
310
+ else if (strategy === 'url') {
311
+ const limiter = createLimiter(5); // max 5 parallel tabs
312
+ const pageNumbers = Array.from({ length: totalPages - startPage + 1 }, (_, i) => startPage + i);
313
+ const urlResults = await Promise.all(pageNumbers.map((pageNum) => limiter(async () => {
314
+ const url = urlTemplate.replace(/\{N\}|\{page\}|\{offset\}/g, String(pageNum));
315
+ let newTabId = null;
316
+ try {
317
+ // Create a new tab for this page
318
+ const { targetId, page: newPage } = await sessionManager.createTarget(sessionId, url);
319
+ newTabId = targetId;
320
+ // Wait for page to settle
321
+ await new Promise((r) => setTimeout(r, waitBetweenPages));
322
+ const result = await capturePageContent(newPage, pageNum);
323
+ // Close the tab
324
+ await sessionManager.closeTarget(sessionId, targetId);
325
+ return result;
326
+ }
327
+ catch (err) {
328
+ // Attempt cleanup if tab was created
329
+ if (newTabId) {
330
+ try {
331
+ await sessionManager.closeTarget(sessionId, newTabId);
332
+ }
333
+ catch {
334
+ // ignore cleanup errors
335
+ }
336
+ }
337
+ return {
338
+ pageNumber: pageNum,
339
+ error: err instanceof Error ? err.message : String(err),
340
+ };
341
+ }
342
+ })));
343
+ // Sort by page number (parallel execution may deliver out-of-order)
344
+ urlResults.sort((a, b) => a.pageNumber - b.pageNumber);
345
+ pages.push(...urlResults);
346
+ }
347
+ else {
348
+ return {
349
+ content: [
350
+ {
351
+ type: 'text',
352
+ text: `Error: Unknown strategy "${strategy}". Must be one of: keyboard, click, url, scroll`,
353
+ },
354
+ ],
355
+ isError: true,
356
+ };
357
+ }
358
+ const durationMs = Date.now() - startTime;
359
+ const capturedCount = pages.filter((p) => !p.error).length;
360
+ const failedCount = pages.filter((p) => p.error).length;
361
+ const estimatedSequentialMs = capturedCount * 5000; // rough 5s per round-trip estimate
362
+ const savedMs = Math.max(0, estimatedSequentialMs - durationMs);
363
+ // Build summary text
364
+ const summaryText = capturedCount > 0
365
+ ? `Captured ${capturedCount} pages in ${(durationMs / 1000).toFixed(1)}s` +
366
+ (savedMs > 1000
367
+ ? ` (vs ~${(estimatedSequentialMs / 1000).toFixed(0)}s sequential — saved ~${(savedMs / 1000).toFixed(0)}s)`
368
+ : '')
369
+ : `No pages captured`;
370
+ // For large screenshot sets, omit the actual data and note it's available
371
+ const tooManyScreenshots = (captureMode === 'screenshot' || captureMode === 'both') && capturedCount > 10;
372
+ const pagesForOutput = tooManyScreenshots
373
+ ? pages.map((p) => ({
374
+ ...p,
375
+ screenshot: p.screenshot ? '[screenshot omitted — >10 pages]' : undefined,
376
+ }))
377
+ : pages;
378
+ const output = {
379
+ totalCaptured: capturedCount,
380
+ totalFailed: failedCount,
381
+ strategy,
382
+ captureMode,
383
+ durationMs,
384
+ summary: summaryText,
385
+ pages: pagesForOutput,
386
+ };
387
+ const content = [
388
+ { type: 'text', text: JSON.stringify(output, null, 2) },
389
+ ];
390
+ // Include screenshots inline only when count is manageable
391
+ if ((captureMode === 'screenshot' || captureMode === 'both') && !tooManyScreenshots) {
392
+ for (const p of pages) {
393
+ if (p.screenshot) {
394
+ content.push({
395
+ type: 'image',
396
+ data: p.screenshot,
397
+ mimeType: p.screenshotMimeType ?? 'image/webp',
398
+ });
399
+ }
400
+ }
401
+ }
402
+ return { content };
403
+ }
404
+ catch (error) {
405
+ return {
406
+ content: [
407
+ {
408
+ type: 'text',
409
+ text: `batch_paginate error: ${error instanceof Error ? error.message : String(error)}`,
410
+ },
411
+ ],
412
+ isError: true,
413
+ };
414
+ }
415
+ };
416
+ function registerBatchPaginateTool(server) {
417
+ server.registerTool('batch_paginate', handler, definition);
418
+ }
419
+ //# sourceMappingURL=batch-paginate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"batch-paginate.js","sourceRoot":"","sources":["../../src/tools/batch-paginate.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"click-element.d.ts","sourceRoot":"","sources":["../../src/tools/click-element.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AA4gB1C,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAEhE"}
1
+ {"version":3,"file":"click-element.d.ts","sourceRoot":"","sources":["../../src/tools/click-element.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAsgB1C,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAEhE"}
@@ -8,16 +8,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
8
8
  exports.registerClickElementTool = registerClickElementTool;
9
9
  const session_manager_1 = require("../session-manager");
10
10
  const ref_id_manager_1 = require("../utils/ref-id-manager");
11
+ const defaults_1 = require("../config/defaults");
12
+ const dom_delta_1 = require("../utils/dom-delta");
11
13
  const definition = {
12
14
  name: 'click_element',
13
- description: `Find an element by natural language query and click it in one operation.
14
- This is more efficient than calling find + computer(click) separately.
15
- Returns the clicked element's info and optionally a verification screenshot.
16
-
17
- Examples:
18
- - click_element(query: "Login button")
19
- - click_element(query: "Submit", wait_after: 1000)
20
- - click_element(query: "Admin radio button", verify: true)`,
15
+ description: 'Find an element by natural language query and click it in one operation. Returns the clicked element info and optionally a verification screenshot.',
21
16
  inputSchema: {
22
17
  type: 'object',
23
18
  properties: {
@@ -379,29 +374,29 @@ const handler = async (sessionId, args) => {
379
374
  }
380
375
  const finalX = Math.round(bestMatch.rect.x);
381
376
  const finalY = Math.round(bestMatch.rect.y);
382
- // Perform the click
383
- if (doubleClick) {
384
- await page.mouse.click(finalX, finalY, { clickCount: 2 });
385
- }
386
- else {
387
- await page.mouse.click(finalX, finalY);
388
- }
389
- // Wait after click
390
- await new Promise(resolve => setTimeout(resolve, waitAfter));
377
+ // Perform the click with DOM delta capture (settleMs includes waitAfter)
378
+ const { delta } = await (0, dom_delta_1.withDomDelta)(page, async () => {
379
+ if (doubleClick) {
380
+ await page.mouse.click(finalX, finalY, { clickCount: 2 });
381
+ }
382
+ else {
383
+ await page.mouse.click(finalX, finalY);
384
+ }
385
+ }, { settleMs: Math.max(150, waitAfter) });
391
386
  // Generate ref for the clicked element
392
387
  let refId = '';
393
388
  if (bestMatch.backendDOMNodeId) {
394
389
  refId = refIdManager.generateRef(sessionId, tabId, bestMatch.backendDOMNodeId, bestMatch.role, bestMatch.name);
395
390
  }
396
391
  const clickType = doubleClick ? 'Double-clicked' : 'Clicked';
397
- const resultText = `${clickType} ${bestMatch.role} "${bestMatch.name.slice(0, 50)}" at (${finalX}, ${finalY})${refId ? ` [${refId}]` : ''}`;
392
+ const resultText = `${clickType} ${bestMatch.role} "${bestMatch.name.slice(0, 50)}" at (${finalX}, ${finalY})${refId ? ` [${refId}]` : ''}${delta}`;
398
393
  // Optional verification screenshot — WebP via CDP for speed and consistency
399
394
  if (verify) {
400
395
  try {
401
396
  const cdpSession = await page.target().createCDPSession();
402
397
  const { data } = await cdpSession.send('Page.captureScreenshot', {
403
398
  format: 'webp',
404
- quality: 60,
399
+ quality: defaults_1.DEFAULT_SCREENSHOT_QUALITY,
405
400
  optimizeForSpeed: true,
406
401
  });
407
402
  await cdpSession.detach();
@@ -421,8 +416,8 @@ const handler = async (sessionId, args) => {
421
416
  clip: {
422
417
  x: 0,
423
418
  y: 0,
424
- width: Math.min(page.viewport()?.width || 1920, 1920),
425
- height: Math.min(page.viewport()?.height || 1080, 1080),
419
+ width: Math.min(page.viewport()?.width || defaults_1.DEFAULT_VIEWPORT.width, defaults_1.DEFAULT_VIEWPORT.width),
420
+ height: Math.min(page.viewport()?.height || defaults_1.DEFAULT_VIEWPORT.height, defaults_1.DEFAULT_VIEWPORT.height),
426
421
  },
427
422
  });
428
423
  return {