openchrome-mcp 1.2.13 → 1.3.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.
- package/dist/cli/update-check.js +3 -3
- package/dist/cli/update-check.js.map +1 -1
- package/dist/tools/click-element.d.ts.map +1 -1
- package/dist/tools/click-element.js +10 -79
- package/dist/tools/click-element.js.map +1 -1
- package/dist/tools/computer.d.ts.map +1 -1
- package/dist/tools/computer.js +35 -5
- package/dist/tools/computer.js.map +1 -1
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +6 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/inspect.d.ts +12 -0
- package/dist/tools/inspect.d.ts.map +1 -0
- package/dist/tools/inspect.js +392 -0
- package/dist/tools/inspect.js.map +1 -0
- package/dist/tools/interact.d.ts +9 -0
- package/dist/tools/interact.d.ts.map +1 -0
- package/dist/tools/interact.js +426 -0
- package/dist/tools/interact.js.map +1 -0
- package/dist/tools/navigate.d.ts.map +1 -1
- package/dist/tools/navigate.js +17 -0
- package/dist/tools/navigate.js.map +1 -1
- package/dist/utils/adaptive-screenshot.d.ts +48 -0
- package/dist/utils/adaptive-screenshot.d.ts.map +1 -0
- package/dist/utils/adaptive-screenshot.js +114 -0
- package/dist/utils/adaptive-screenshot.js.map +1 -0
- package/dist/utils/element-finder.d.ts +49 -0
- package/dist/utils/element-finder.d.ts.map +1 -0
- package/dist/utils/element-finder.js +130 -0
- package/dist/utils/element-finder.js.map +1 -0
- package/dist/utils/visual-summary.d.ts +17 -0
- package/dist/utils/visual-summary.d.ts.map +1 -0
- package/dist/utils/visual-summary.js +198 -0
- package/dist/utils/visual-summary.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,426 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Interact Tool - Composite tool that finds an element, performs an action,
|
|
4
|
+
* waits for stability, and returns a comprehensive state summary.
|
|
5
|
+
*
|
|
6
|
+
* Reduces multi-step find→click→screenshot sequences to a single call.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.registerInteractTool = registerInteractTool;
|
|
10
|
+
const session_manager_1 = require("../session-manager");
|
|
11
|
+
const ref_id_manager_1 = require("../utils/ref-id-manager");
|
|
12
|
+
const dom_delta_1 = require("../utils/dom-delta");
|
|
13
|
+
const element_finder_1 = require("../utils/element-finder");
|
|
14
|
+
const definition = {
|
|
15
|
+
name: 'interact',
|
|
16
|
+
description: 'Find an element, perform an action, wait for stability, and return a comprehensive state summary. Reduces multi-step find→click→screenshot sequences to a single call.',
|
|
17
|
+
inputSchema: {
|
|
18
|
+
type: 'object',
|
|
19
|
+
properties: {
|
|
20
|
+
tabId: {
|
|
21
|
+
type: 'string',
|
|
22
|
+
description: 'Tab ID to execute on',
|
|
23
|
+
},
|
|
24
|
+
query: {
|
|
25
|
+
type: 'string',
|
|
26
|
+
description: 'Natural language description of the element to interact with',
|
|
27
|
+
},
|
|
28
|
+
action: {
|
|
29
|
+
type: 'string',
|
|
30
|
+
enum: ['click', 'double_click', 'hover'],
|
|
31
|
+
description: 'Action to perform on the element (default: "click")',
|
|
32
|
+
},
|
|
33
|
+
waitAfter: {
|
|
34
|
+
type: 'number',
|
|
35
|
+
description: 'Milliseconds to wait after action for DOM to settle (default: 500)',
|
|
36
|
+
},
|
|
37
|
+
returnFormat: {
|
|
38
|
+
type: 'string',
|
|
39
|
+
enum: ['state_summary', 'dom_delta', 'both'],
|
|
40
|
+
description: 'What to include in the response (default: "both")',
|
|
41
|
+
},
|
|
42
|
+
},
|
|
43
|
+
required: ['tabId', 'query'],
|
|
44
|
+
},
|
|
45
|
+
};
|
|
46
|
+
const handler = async (sessionId, args) => {
|
|
47
|
+
const tabId = args.tabId;
|
|
48
|
+
const query = args.query;
|
|
49
|
+
const action = args.action || 'click';
|
|
50
|
+
const waitAfter = Math.min(Math.max(args.waitAfter || 500, 0), 10000);
|
|
51
|
+
const returnFormat = args.returnFormat || 'both';
|
|
52
|
+
const sessionManager = (0, session_manager_1.getSessionManager)();
|
|
53
|
+
const refIdManager = (0, ref_id_manager_1.getRefIdManager)();
|
|
54
|
+
if (!tabId) {
|
|
55
|
+
return {
|
|
56
|
+
content: [{ type: 'text', text: 'Error: tabId is required' }],
|
|
57
|
+
isError: true,
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
if (!query) {
|
|
61
|
+
return {
|
|
62
|
+
content: [{ type: 'text', text: 'Error: query is required' }],
|
|
63
|
+
isError: true,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
try {
|
|
67
|
+
const page = await sessionManager.getPage(sessionId, tabId, undefined, 'interact');
|
|
68
|
+
if (!page) {
|
|
69
|
+
return {
|
|
70
|
+
content: [{ type: 'text', text: `Error: Tab ${tabId} not found` }],
|
|
71
|
+
isError: true,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
const queryLower = query.toLowerCase();
|
|
75
|
+
const queryTokens = (0, element_finder_1.tokenizeQuery)(query);
|
|
76
|
+
// Find elements matching the query using same approach as click-element.ts
|
|
77
|
+
const results = await page.evaluate((searchQuery) => {
|
|
78
|
+
const elements = [];
|
|
79
|
+
const domElements = [];
|
|
80
|
+
const maxResults = 30;
|
|
81
|
+
function getElementInfo(el) {
|
|
82
|
+
const rect = el.getBoundingClientRect();
|
|
83
|
+
if (rect.width === 0 || rect.height === 0)
|
|
84
|
+
return null;
|
|
85
|
+
const style = window.getComputedStyle(el);
|
|
86
|
+
if (style.visibility === 'hidden' || style.display === 'none' || style.opacity === '0') {
|
|
87
|
+
return null;
|
|
88
|
+
}
|
|
89
|
+
const inputEl = el;
|
|
90
|
+
const isContentEditable = el.getAttribute('contenteditable') === 'true';
|
|
91
|
+
const role = el.getAttribute('role') ||
|
|
92
|
+
(el.tagName === 'BUTTON'
|
|
93
|
+
? 'button'
|
|
94
|
+
: el.tagName === 'A'
|
|
95
|
+
? 'link'
|
|
96
|
+
: el.tagName === 'INPUT'
|
|
97
|
+
? inputEl.type || 'textbox'
|
|
98
|
+
: isContentEditable
|
|
99
|
+
? 'textbox'
|
|
100
|
+
: el.tagName.toLowerCase());
|
|
101
|
+
return {
|
|
102
|
+
backendDOMNodeId: 0,
|
|
103
|
+
role,
|
|
104
|
+
name: el.getAttribute('aria-label') ||
|
|
105
|
+
el.getAttribute('title') ||
|
|
106
|
+
el.textContent?.trim().slice(0, 100) ||
|
|
107
|
+
'',
|
|
108
|
+
tagName: el.tagName.toLowerCase(),
|
|
109
|
+
type: inputEl.type,
|
|
110
|
+
placeholder: inputEl.placeholder,
|
|
111
|
+
ariaLabel: el.getAttribute('aria-label') || undefined,
|
|
112
|
+
textContent: el.textContent?.trim().slice(0, 50),
|
|
113
|
+
rect: {
|
|
114
|
+
x: rect.x + rect.width / 2,
|
|
115
|
+
y: rect.y + rect.height / 2,
|
|
116
|
+
width: rect.width,
|
|
117
|
+
height: rect.height,
|
|
118
|
+
},
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
const searchLower = searchQuery.toLowerCase();
|
|
122
|
+
const queryTokens = searchLower
|
|
123
|
+
.split(/\s+/)
|
|
124
|
+
.filter(t => t.length > 1)
|
|
125
|
+
.filter(t => !['the', 'a', 'an', 'to', 'for', 'of', 'in', 'on', 'at', 'and', 'or'].includes(t));
|
|
126
|
+
const interactiveSelectors = [
|
|
127
|
+
'button',
|
|
128
|
+
'[role="button"]',
|
|
129
|
+
'a',
|
|
130
|
+
'[role="link"]',
|
|
131
|
+
'input[type="submit"]',
|
|
132
|
+
'input[type="button"]',
|
|
133
|
+
'input[type="radio"]',
|
|
134
|
+
'input[type="checkbox"]',
|
|
135
|
+
'[role="radio"]',
|
|
136
|
+
'[role="checkbox"]',
|
|
137
|
+
'[role="menuitem"]',
|
|
138
|
+
'[role="tab"]',
|
|
139
|
+
'[role="option"]',
|
|
140
|
+
'[onclick]',
|
|
141
|
+
'[tabindex]',
|
|
142
|
+
'[contenteditable="true"]',
|
|
143
|
+
'[role="combobox"]',
|
|
144
|
+
'[role="listbox"]',
|
|
145
|
+
'[role="switch"]',
|
|
146
|
+
'[role="slider"]',
|
|
147
|
+
'[role="treeitem"]',
|
|
148
|
+
'[role="dialog"] [aria-label]',
|
|
149
|
+
'[role="alertdialog"] [aria-label]',
|
|
150
|
+
'[data-testid]',
|
|
151
|
+
];
|
|
152
|
+
const seen = new Set();
|
|
153
|
+
// First pass: interactive elements
|
|
154
|
+
for (const selector of interactiveSelectors) {
|
|
155
|
+
if (elements.length >= maxResults)
|
|
156
|
+
break;
|
|
157
|
+
try {
|
|
158
|
+
for (const el of document.querySelectorAll(selector)) {
|
|
159
|
+
if (seen.has(el) || elements.length >= maxResults)
|
|
160
|
+
continue;
|
|
161
|
+
const info = getElementInfo(el);
|
|
162
|
+
if (info) {
|
|
163
|
+
const combinedText = `${info.name} ${info.textContent || ''} ${info.ariaLabel || ''} ${info.placeholder || ''}`.toLowerCase();
|
|
164
|
+
if (queryTokens.some(token => combinedText.includes(token)) || combinedText.includes(searchLower)) {
|
|
165
|
+
seen.add(el);
|
|
166
|
+
el.__interactIndex = elements.length;
|
|
167
|
+
domElements.push(el);
|
|
168
|
+
elements.push(info);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
catch {
|
|
174
|
+
// Invalid selector
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
// Second pass: text content search on all elements
|
|
178
|
+
const walker = document.createTreeWalker(document.body, NodeFilter.SHOW_ELEMENT);
|
|
179
|
+
let node = walker.nextNode();
|
|
180
|
+
while (node && elements.length < maxResults) {
|
|
181
|
+
const el = node;
|
|
182
|
+
if (!seen.has(el)) {
|
|
183
|
+
const info = getElementInfo(el);
|
|
184
|
+
if (info) {
|
|
185
|
+
const combinedText = `${info.name} ${info.textContent || ''} ${info.ariaLabel || ''} ${info.placeholder || ''}`.toLowerCase();
|
|
186
|
+
if (combinedText.includes(searchLower) || queryTokens.some(token => combinedText.includes(token))) {
|
|
187
|
+
seen.add(el);
|
|
188
|
+
el.__interactIndex = elements.length;
|
|
189
|
+
domElements.push(el);
|
|
190
|
+
elements.push(info);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
node = walker.nextNode();
|
|
195
|
+
}
|
|
196
|
+
return elements;
|
|
197
|
+
}, queryLower);
|
|
198
|
+
if (results.length === 0) {
|
|
199
|
+
return {
|
|
200
|
+
content: [{ type: 'text', text: `No elements found matching "${query}"` }],
|
|
201
|
+
isError: true,
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
// Get backend DOM node IDs via batched CDP approach
|
|
205
|
+
const cdpClient = sessionManager.getCDPClient();
|
|
206
|
+
const { result: batchResult } = await cdpClient.send(page, 'Runtime.evaluate', {
|
|
207
|
+
expression: `(() => {
|
|
208
|
+
const indexedEls = [];
|
|
209
|
+
const walker = document.createTreeWalker(document.body, NodeFilter.SHOW_ELEMENT);
|
|
210
|
+
let node;
|
|
211
|
+
while (node = walker.nextNode()) {
|
|
212
|
+
const el = node;
|
|
213
|
+
if (el.__interactIndex !== undefined) {
|
|
214
|
+
indexedEls.push({ el, index: el.__interactIndex });
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
indexedEls.sort((a, b) => a.index - b.index);
|
|
218
|
+
return indexedEls.map(e => e.el);
|
|
219
|
+
})()`,
|
|
220
|
+
returnByValue: false,
|
|
221
|
+
});
|
|
222
|
+
if (batchResult.objectId) {
|
|
223
|
+
const { result: properties } = await cdpClient.send(page, 'Runtime.getProperties', {
|
|
224
|
+
objectId: batchResult.objectId,
|
|
225
|
+
ownProperties: true,
|
|
226
|
+
});
|
|
227
|
+
const describePromises = [];
|
|
228
|
+
for (const prop of properties) {
|
|
229
|
+
const index = parseInt(prop.name, 10);
|
|
230
|
+
if (isNaN(index) || index >= results.length || !prop.value?.objectId)
|
|
231
|
+
continue;
|
|
232
|
+
describePromises.push(cdpClient
|
|
233
|
+
.send(page, 'DOM.describeNode', {
|
|
234
|
+
objectId: prop.value.objectId,
|
|
235
|
+
})
|
|
236
|
+
.then(({ node }) => {
|
|
237
|
+
results[index].backendDOMNodeId = node.backendNodeId;
|
|
238
|
+
})
|
|
239
|
+
.catch(() => {
|
|
240
|
+
// Skip if we can't get the backend node ID
|
|
241
|
+
}));
|
|
242
|
+
}
|
|
243
|
+
await Promise.all(describePromises);
|
|
244
|
+
}
|
|
245
|
+
// Score and sort
|
|
246
|
+
const scoredResults = results
|
|
247
|
+
.map(el => ({ ...el, score: (0, element_finder_1.scoreElement)(el, queryLower, queryTokens) }))
|
|
248
|
+
.sort((a, b) => b.score - a.score);
|
|
249
|
+
const bestMatch = scoredResults[0];
|
|
250
|
+
if (!bestMatch || bestMatch.score < 10) {
|
|
251
|
+
return {
|
|
252
|
+
content: [
|
|
253
|
+
{
|
|
254
|
+
type: 'text',
|
|
255
|
+
text: `No good match found for "${query}". Best candidate was "${bestMatch?.name || 'unknown'}" with low confidence.`,
|
|
256
|
+
},
|
|
257
|
+
],
|
|
258
|
+
isError: true,
|
|
259
|
+
};
|
|
260
|
+
}
|
|
261
|
+
// Scroll into view first if needed
|
|
262
|
+
if (bestMatch.backendDOMNodeId) {
|
|
263
|
+
try {
|
|
264
|
+
await cdpClient.send(page, 'DOM.scrollIntoViewIfNeeded', {
|
|
265
|
+
backendNodeId: bestMatch.backendDOMNodeId,
|
|
266
|
+
});
|
|
267
|
+
await new Promise(resolve => setTimeout(resolve, 50));
|
|
268
|
+
// Re-get position after scroll
|
|
269
|
+
const { result: boxResult } = await cdpClient.send(page, 'Runtime.evaluate', {
|
|
270
|
+
expression: `(() => {
|
|
271
|
+
const walker = document.createTreeWalker(document.body, NodeFilter.SHOW_ELEMENT);
|
|
272
|
+
let node;
|
|
273
|
+
while (node = walker.nextNode()) {
|
|
274
|
+
const el = node;
|
|
275
|
+
if (el.__interactIndex === 0) {
|
|
276
|
+
const rect = el.getBoundingClientRect();
|
|
277
|
+
return { x: rect.x + rect.width/2, y: rect.y + rect.height/2, width: rect.width, height: rect.height };
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
return null;
|
|
281
|
+
})()`,
|
|
282
|
+
returnByValue: true,
|
|
283
|
+
});
|
|
284
|
+
if (boxResult.value) {
|
|
285
|
+
bestMatch.rect.x = boxResult.value.x;
|
|
286
|
+
bestMatch.rect.y = boxResult.value.y;
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
catch {
|
|
290
|
+
// Continue with original coordinates
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
const finalX = Math.round(bestMatch.rect.x);
|
|
294
|
+
const finalY = Math.round(bestMatch.rect.y);
|
|
295
|
+
// Perform the action with DOM delta capture
|
|
296
|
+
const { delta } = await (0, dom_delta_1.withDomDelta)(page, async () => {
|
|
297
|
+
if (action === 'double_click') {
|
|
298
|
+
await page.mouse.click(finalX, finalY, { clickCount: 2 });
|
|
299
|
+
}
|
|
300
|
+
else if (action === 'hover') {
|
|
301
|
+
await page.mouse.move(finalX, finalY);
|
|
302
|
+
}
|
|
303
|
+
else {
|
|
304
|
+
await page.mouse.click(finalX, finalY);
|
|
305
|
+
}
|
|
306
|
+
}, { settleMs: Math.max(150, waitAfter) });
|
|
307
|
+
// Generate ref for the interacted element
|
|
308
|
+
let refId = '';
|
|
309
|
+
if (bestMatch.backendDOMNodeId) {
|
|
310
|
+
refId = refIdManager.generateRef(sessionId, tabId, bestMatch.backendDOMNodeId, bestMatch.role, bestMatch.name, bestMatch.tagName, bestMatch.textContent);
|
|
311
|
+
}
|
|
312
|
+
// Build action label
|
|
313
|
+
const actionLabel = action === 'double_click' ? 'double-clicked' : action === 'hover' ? 'hovered' : 'clicked';
|
|
314
|
+
const interactedLine = `Interacted: ${actionLabel} on <${bestMatch.tagName}> "${bestMatch.name.slice(0, 50)}" at (${finalX}, ${finalY})${refId ? ` [${refId}]` : ''}`;
|
|
315
|
+
// Gather state summary via page.evaluate
|
|
316
|
+
const stateSummary = await page.evaluate(() => {
|
|
317
|
+
const url = window.location.href;
|
|
318
|
+
const title = document.title;
|
|
319
|
+
const scrollX = Math.round(window.scrollX);
|
|
320
|
+
const scrollY = Math.round(window.scrollY);
|
|
321
|
+
// Active element info
|
|
322
|
+
const active = document.activeElement;
|
|
323
|
+
let activeInfo = 'none';
|
|
324
|
+
if (active && active !== document.body) {
|
|
325
|
+
const inputEl = active;
|
|
326
|
+
const role = active.getAttribute('role') ||
|
|
327
|
+
(active.tagName === 'BUTTON'
|
|
328
|
+
? 'button'
|
|
329
|
+
: active.tagName === 'INPUT'
|
|
330
|
+
? inputEl.type || 'textbox'
|
|
331
|
+
: active.tagName.toLowerCase());
|
|
332
|
+
const name = active.getAttribute('aria-label') ||
|
|
333
|
+
active.getAttribute('title') ||
|
|
334
|
+
active.textContent?.trim().slice(0, 40) ||
|
|
335
|
+
'';
|
|
336
|
+
activeInfo = `${role}${name ? ` "${name}"` : ''}`;
|
|
337
|
+
}
|
|
338
|
+
// Visible panel contents (first 80 chars each, max 3)
|
|
339
|
+
const panels = [];
|
|
340
|
+
const panelSelectors = [
|
|
341
|
+
'[role="tabpanel"]',
|
|
342
|
+
'[role="dialog"]',
|
|
343
|
+
'[role="main"]',
|
|
344
|
+
'main',
|
|
345
|
+
'.panel',
|
|
346
|
+
'[class*="panel"]',
|
|
347
|
+
'[class*="content"]',
|
|
348
|
+
];
|
|
349
|
+
for (const sel of panelSelectors) {
|
|
350
|
+
if (panels.length >= 3)
|
|
351
|
+
break;
|
|
352
|
+
try {
|
|
353
|
+
const els = document.querySelectorAll(sel);
|
|
354
|
+
for (const el of els) {
|
|
355
|
+
if (panels.length >= 3)
|
|
356
|
+
break;
|
|
357
|
+
const rect = el.getBoundingClientRect();
|
|
358
|
+
if (rect.width === 0 || rect.height === 0)
|
|
359
|
+
continue;
|
|
360
|
+
const style = window.getComputedStyle(el);
|
|
361
|
+
if (style.display === 'none' || style.visibility === 'hidden')
|
|
362
|
+
continue;
|
|
363
|
+
const text = el.textContent?.trim().slice(0, 80) || '';
|
|
364
|
+
if (text.length > 10) {
|
|
365
|
+
panels.push(text);
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
catch {
|
|
370
|
+
// skip bad selectors
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
// Visible headings
|
|
374
|
+
const headings = [];
|
|
375
|
+
for (const hEl of document.querySelectorAll('h1, h2, h3, [role="heading"]')) {
|
|
376
|
+
const rect = hEl.getBoundingClientRect();
|
|
377
|
+
if (rect.width === 0 || rect.height === 0)
|
|
378
|
+
continue;
|
|
379
|
+
const style = window.getComputedStyle(hEl);
|
|
380
|
+
if (style.display === 'none' || style.visibility === 'hidden')
|
|
381
|
+
continue;
|
|
382
|
+
const text = hEl.textContent?.trim().slice(0, 60) || '';
|
|
383
|
+
if (text)
|
|
384
|
+
headings.push(text);
|
|
385
|
+
if (headings.length >= 3)
|
|
386
|
+
break;
|
|
387
|
+
}
|
|
388
|
+
return { url, title, scrollX, scrollY, activeInfo, panels, headings };
|
|
389
|
+
});
|
|
390
|
+
// Build the response
|
|
391
|
+
const lines = [interactedLine];
|
|
392
|
+
if (returnFormat === 'dom_delta' || returnFormat === 'both') {
|
|
393
|
+
if (delta) {
|
|
394
|
+
lines.push(delta);
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
if (returnFormat === 'state_summary' || returnFormat === 'both') {
|
|
398
|
+
lines.push(`[State Summary] url: ${stateSummary.url} | scroll: ${stateSummary.scrollX},${stateSummary.scrollY} | active: ${stateSummary.activeInfo}`);
|
|
399
|
+
if (stateSummary.headings.length > 0) {
|
|
400
|
+
lines.push(`[Headings] ${stateSummary.headings.map(h => `"${h}"`).join(' | ')}`);
|
|
401
|
+
}
|
|
402
|
+
if (stateSummary.panels.length > 0) {
|
|
403
|
+
const panelParts = stateSummary.panels.map((p, i) => `Panel ${i + 1}: "${p}"`);
|
|
404
|
+
lines.push(`[Visible] ${panelParts.join(' | ')}`);
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
return {
|
|
408
|
+
content: [{ type: 'text', text: lines.join('\n') }],
|
|
409
|
+
};
|
|
410
|
+
}
|
|
411
|
+
catch (error) {
|
|
412
|
+
return {
|
|
413
|
+
content: [
|
|
414
|
+
{
|
|
415
|
+
type: 'text',
|
|
416
|
+
text: `Interact error: ${error instanceof Error ? error.message : String(error)}`,
|
|
417
|
+
},
|
|
418
|
+
],
|
|
419
|
+
isError: true,
|
|
420
|
+
};
|
|
421
|
+
}
|
|
422
|
+
};
|
|
423
|
+
function registerInteractTool(server) {
|
|
424
|
+
server.registerTool('interact', handler, definition);
|
|
425
|
+
}
|
|
426
|
+
//# sourceMappingURL=interact.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interact.js","sourceRoot":"","sources":["../../src/tools/interact.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"navigate.d.ts","sourceRoot":"","sources":["../../src/tools/navigate.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"navigate.d.ts","sourceRoot":"","sources":["../../src/tools/navigate.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AA0S1C,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAE5D"}
|
package/dist/tools/navigate.js
CHANGED
|
@@ -8,6 +8,8 @@ const session_manager_1 = require("../session-manager");
|
|
|
8
8
|
const smart_goto_1 = require("../utils/smart-goto");
|
|
9
9
|
const safe_title_1 = require("../utils/safe-title");
|
|
10
10
|
const defaults_1 = require("../config/defaults");
|
|
11
|
+
const visual_summary_1 = require("../utils/visual-summary");
|
|
12
|
+
const adaptive_screenshot_1 = require("../utils/adaptive-screenshot");
|
|
11
13
|
const definition = {
|
|
12
14
|
name: 'navigate',
|
|
13
15
|
description: 'Navigate to a URL, or go forward/back in browser history. If tabId is not provided, creates a new tab with the URL. Use workerId to specify which worker context to use for parallel operations.',
|
|
@@ -90,6 +92,8 @@ const handler = async (sessionId, args) => {
|
|
|
90
92
|
const page = await sessionManager.getPage(sessionId, existingTabId, undefined, 'navigate');
|
|
91
93
|
if (page) {
|
|
92
94
|
await (0, smart_goto_1.smartGoto)(page, targetUrl, { timeout: defaults_1.DEFAULT_NAVIGATION_TIMEOUT_MS });
|
|
95
|
+
adaptive_screenshot_1.AdaptiveScreenshot.getInstance().reset(existingTabId);
|
|
96
|
+
const summary = await (0, visual_summary_1.generateVisualSummary)(page);
|
|
93
97
|
return {
|
|
94
98
|
content: [
|
|
95
99
|
{
|
|
@@ -101,6 +105,7 @@ const handler = async (sessionId, args) => {
|
|
|
101
105
|
tabId: existingTabId,
|
|
102
106
|
workerId: resolvedWorkerId,
|
|
103
107
|
reused: true,
|
|
108
|
+
...(summary && { visualSummary: summary }),
|
|
104
109
|
}),
|
|
105
110
|
},
|
|
106
111
|
],
|
|
@@ -110,6 +115,8 @@ const handler = async (sessionId, args) => {
|
|
|
110
115
|
}
|
|
111
116
|
// Create new tab with URL directly (in specified worker or default)
|
|
112
117
|
const { targetId, page, workerId: assignedWorkerId } = await sessionManager.createTarget(sessionId, targetUrl, workerId);
|
|
118
|
+
adaptive_screenshot_1.AdaptiveScreenshot.getInstance().reset(targetId);
|
|
119
|
+
const summary = await (0, visual_summary_1.generateVisualSummary)(page);
|
|
113
120
|
return {
|
|
114
121
|
content: [
|
|
115
122
|
{
|
|
@@ -121,6 +128,7 @@ const handler = async (sessionId, args) => {
|
|
|
121
128
|
tabId: targetId,
|
|
122
129
|
workerId: assignedWorkerId,
|
|
123
130
|
created: true,
|
|
131
|
+
...(summary && { visualSummary: summary }),
|
|
124
132
|
}),
|
|
125
133
|
},
|
|
126
134
|
],
|
|
@@ -163,6 +171,8 @@ const handler = async (sessionId, args) => {
|
|
|
163
171
|
// Handle history navigation
|
|
164
172
|
if (url === 'back') {
|
|
165
173
|
await page.goBack({ waitUntil: 'domcontentloaded', timeout: defaults_1.DEFAULT_NAVIGATION_TIMEOUT_MS });
|
|
174
|
+
adaptive_screenshot_1.AdaptiveScreenshot.getInstance().reset(tabId);
|
|
175
|
+
const backSummary = await (0, visual_summary_1.generateVisualSummary)(page);
|
|
166
176
|
return {
|
|
167
177
|
content: [
|
|
168
178
|
{
|
|
@@ -171,6 +181,7 @@ const handler = async (sessionId, args) => {
|
|
|
171
181
|
action: 'back',
|
|
172
182
|
url: page.url(),
|
|
173
183
|
title: await (0, safe_title_1.safeTitle)(page),
|
|
184
|
+
...(backSummary && { visualSummary: backSummary }),
|
|
174
185
|
}),
|
|
175
186
|
},
|
|
176
187
|
],
|
|
@@ -178,6 +189,8 @@ const handler = async (sessionId, args) => {
|
|
|
178
189
|
}
|
|
179
190
|
if (url === 'forward') {
|
|
180
191
|
await page.goForward({ waitUntil: 'domcontentloaded', timeout: defaults_1.DEFAULT_NAVIGATION_TIMEOUT_MS });
|
|
192
|
+
adaptive_screenshot_1.AdaptiveScreenshot.getInstance().reset(tabId);
|
|
193
|
+
const fwdSummary = await (0, visual_summary_1.generateVisualSummary)(page);
|
|
181
194
|
return {
|
|
182
195
|
content: [
|
|
183
196
|
{
|
|
@@ -186,6 +199,7 @@ const handler = async (sessionId, args) => {
|
|
|
186
199
|
action: 'forward',
|
|
187
200
|
url: page.url(),
|
|
188
201
|
title: await (0, safe_title_1.safeTitle)(page),
|
|
202
|
+
...(fwdSummary && { visualSummary: fwdSummary }),
|
|
189
203
|
}),
|
|
190
204
|
},
|
|
191
205
|
],
|
|
@@ -237,6 +251,8 @@ const handler = async (sessionId, args) => {
|
|
|
237
251
|
}
|
|
238
252
|
// Navigate with smart auth redirect detection
|
|
239
253
|
const { authRedirect } = await (0, smart_goto_1.smartGoto)(page, targetUrl, { timeout: defaults_1.DEFAULT_NAVIGATION_TIMEOUT_MS });
|
|
254
|
+
adaptive_screenshot_1.AdaptiveScreenshot.getInstance().reset(tabId);
|
|
255
|
+
const navSummary = await (0, visual_summary_1.generateVisualSummary)(page);
|
|
240
256
|
return {
|
|
241
257
|
content: [
|
|
242
258
|
{
|
|
@@ -246,6 +262,7 @@ const handler = async (sessionId, args) => {
|
|
|
246
262
|
url: page.url(),
|
|
247
263
|
title: await (0, safe_title_1.safeTitle)(page),
|
|
248
264
|
...(authRedirect && { redirectedFrom: authRedirect.from, authRedirect: true }),
|
|
265
|
+
...(navSummary && { visualSummary: navSummary }),
|
|
249
266
|
}),
|
|
250
267
|
},
|
|
251
268
|
],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"navigate.js","sourceRoot":"","sources":["../../src/tools/navigate.ts"],"names":[],"mappings":";AAAA;;GAEG;;
|
|
1
|
+
{"version":3,"file":"navigate.js","sourceRoot":"","sources":["../../src/tools/navigate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Adaptive Screenshot - Tracks screenshot history per tab and degrades
|
|
3
|
+
* response format on repetition to reduce token waste from screenshot loops.
|
|
4
|
+
*
|
|
5
|
+
* Returns a mode ('full' | 'annotated' | 'text_only') based on how many times
|
|
6
|
+
* the same scroll position has been captured within a recent time window.
|
|
7
|
+
* The actual screenshot capture and visual summary generation are handled by
|
|
8
|
+
* the caller (computer.ts) — this module only decides the response mode.
|
|
9
|
+
*/
|
|
10
|
+
import type { Page } from 'puppeteer-core';
|
|
11
|
+
/**
|
|
12
|
+
* Singleton that tracks screenshot history per tabId and returns the
|
|
13
|
+
* appropriate response mode for each screenshot request.
|
|
14
|
+
*/
|
|
15
|
+
export declare class AdaptiveScreenshot {
|
|
16
|
+
private static instance;
|
|
17
|
+
/** tabId → ordered list of screenshot records (oldest first) */
|
|
18
|
+
private history;
|
|
19
|
+
private constructor();
|
|
20
|
+
static getInstance(): AdaptiveScreenshot;
|
|
21
|
+
/**
|
|
22
|
+
* Evaluate what response mode to use for the next screenshot on this tab.
|
|
23
|
+
*
|
|
24
|
+
* Reads the current scroll position from the page, prunes stale records,
|
|
25
|
+
* counts how many recent screenshots have been taken at the same position,
|
|
26
|
+
* then appends the new record and returns the mode.
|
|
27
|
+
*
|
|
28
|
+
* - 1st screenshot at a position → 'full'
|
|
29
|
+
* - 2nd screenshot at same position (within ±50px, within 30s) → 'annotated'
|
|
30
|
+
* - 3rd+ at same position → 'text_only'
|
|
31
|
+
*
|
|
32
|
+
* Fails gracefully: if page.evaluate throws, returns 'full'.
|
|
33
|
+
*/
|
|
34
|
+
evaluate(page: Page, tabId: string): Promise<'full' | 'annotated' | 'text_only'>;
|
|
35
|
+
/**
|
|
36
|
+
* Returns the annotation note used when mode is 'annotated'.
|
|
37
|
+
*/
|
|
38
|
+
getAnnotation(): string;
|
|
39
|
+
/**
|
|
40
|
+
* Clear screenshot history for a tab (call on navigation).
|
|
41
|
+
*/
|
|
42
|
+
reset(tabId: string): void;
|
|
43
|
+
/**
|
|
44
|
+
* Remove records older than PRUNE_AGE_MS for the given tab.
|
|
45
|
+
*/
|
|
46
|
+
private pruneTab;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=adaptive-screenshot.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adaptive-screenshot.d.ts","sourceRoot":"","sources":["../../src/utils/adaptive-screenshot.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAoB3C;;;GAGG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAqB;IAE5C,gEAAgE;IAChE,OAAO,CAAC,OAAO,CAA8C;IAE7D,OAAO;IAEP,MAAM,CAAC,WAAW,IAAI,kBAAkB;IAOxC;;;;;;;;;;;;OAYG;IACG,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,WAAW,GAAG,WAAW,CAAC;IA8CtF;;OAEG;IACH,aAAa,IAAI,MAAM;IAIvB;;OAEG;IACH,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAI1B;;OAEG;IACH,OAAO,CAAC,QAAQ;CAYjB"}
|