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.
Files changed (35) hide show
  1. package/dist/cli/update-check.js +3 -3
  2. package/dist/cli/update-check.js.map +1 -1
  3. package/dist/tools/click-element.d.ts.map +1 -1
  4. package/dist/tools/click-element.js +10 -79
  5. package/dist/tools/click-element.js.map +1 -1
  6. package/dist/tools/computer.d.ts.map +1 -1
  7. package/dist/tools/computer.js +35 -5
  8. package/dist/tools/computer.js.map +1 -1
  9. package/dist/tools/index.d.ts.map +1 -1
  10. package/dist/tools/index.js +6 -0
  11. package/dist/tools/index.js.map +1 -1
  12. package/dist/tools/inspect.d.ts +12 -0
  13. package/dist/tools/inspect.d.ts.map +1 -0
  14. package/dist/tools/inspect.js +392 -0
  15. package/dist/tools/inspect.js.map +1 -0
  16. package/dist/tools/interact.d.ts +9 -0
  17. package/dist/tools/interact.d.ts.map +1 -0
  18. package/dist/tools/interact.js +426 -0
  19. package/dist/tools/interact.js.map +1 -0
  20. package/dist/tools/navigate.d.ts.map +1 -1
  21. package/dist/tools/navigate.js +17 -0
  22. package/dist/tools/navigate.js.map +1 -1
  23. package/dist/utils/adaptive-screenshot.d.ts +48 -0
  24. package/dist/utils/adaptive-screenshot.d.ts.map +1 -0
  25. package/dist/utils/adaptive-screenshot.js +114 -0
  26. package/dist/utils/adaptive-screenshot.js.map +1 -0
  27. package/dist/utils/element-finder.d.ts +49 -0
  28. package/dist/utils/element-finder.d.ts.map +1 -0
  29. package/dist/utils/element-finder.js +130 -0
  30. package/dist/utils/element-finder.js.map +1 -0
  31. package/dist/utils/visual-summary.d.ts +17 -0
  32. package/dist/utils/visual-summary.d.ts.map +1 -0
  33. package/dist/utils/visual-summary.js +198 -0
  34. package/dist/utils/visual-summary.js.map +1 -0
  35. package/package.json +1 -1
@@ -0,0 +1,392 @@
1
+ "use strict";
2
+ /**
3
+ * Inspect Tool - Query-focused page state extraction
4
+ *
5
+ * Extracts focused page state information based on a natural language query.
6
+ * The query controls which extraction categories run — only relevant data
7
+ * is collected and returned, saving tokens vs. full DOM reads.
8
+ *
9
+ * Use this instead of read_page + screenshot combos.
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.registerInspectTool = registerInspectTool;
13
+ const session_manager_1 = require("../session-manager");
14
+ const definition = {
15
+ name: 'inspect',
16
+ description: 'Query-focused page state extraction. Returns only data relevant to your query instead of the full DOM tree. Use this instead of read_page + screenshot combos for targeted questions like "what tabs are active", "form field values", "visible error messages".',
17
+ inputSchema: {
18
+ type: 'object',
19
+ properties: {
20
+ tabId: {
21
+ type: 'string',
22
+ description: 'Tab ID to inspect',
23
+ },
24
+ query: {
25
+ type: 'string',
26
+ description: 'What to inspect, e.g. "what tabs are active", "form field values", "visible error messages", "page structure"',
27
+ },
28
+ scope: {
29
+ type: 'string',
30
+ enum: ['interactive', 'all', 'visible'],
31
+ description: 'Scope of elements to inspect (default: "visible")',
32
+ },
33
+ },
34
+ required: ['tabId', 'query'],
35
+ },
36
+ };
37
+ /**
38
+ * Map query keywords to extraction categories.
39
+ * Multiple keywords can map to the same category.
40
+ */
41
+ const KEYWORD_CATEGORY_MAP = [
42
+ // Focus / active element
43
+ [['focus', 'focused', 'active element', 'selected element', 'current'], ['focus']],
44
+ // Tab / navigation state
45
+ [['tab', 'tabs', 'navigation', 'nav', 'menu', 'selected tab', 'active tab'], ['tabs']],
46
+ // Interactive element counts
47
+ [['button', 'buttons', 'link', 'links', 'interactive', 'clickable', 'elements', 'controls'], ['interactive']],
48
+ // Form fields
49
+ [['form', 'input', 'inputs', 'field', 'fields', 'value', 'values', 'text field', 'checkbox', 'radio', 'select', 'dropdown'], ['form']],
50
+ // Headings / page structure
51
+ [['heading', 'headings', 'structure', 'outline', 'sections', 'hierarchy', 'title', 'h1', 'h2', 'h3'], ['headings']],
52
+ // Errors / warnings / alerts
53
+ [['error', 'errors', 'warning', 'warnings', 'alert', 'alerts', 'message', 'messages', 'notification', 'status', 'validation'], ['errors']],
54
+ // Visible content / panels
55
+ [['content', 'panel', 'panels', 'text', 'visible', 'dialog', 'modal', 'main', 'article', 'body'], ['panels']],
56
+ // Broad queries that need multiple categories
57
+ [['state', 'page state', 'overview', 'summary', 'everything', 'all', 'what is on'], ['focus', 'tabs', 'interactive', 'form', 'headings', 'errors', 'panels']],
58
+ ];
59
+ /**
60
+ * Determine which categories to extract based on query keywords.
61
+ * Returns all categories if no keywords match (backward compatible).
62
+ */
63
+ function resolveCategories(query) {
64
+ const queryLower = query.toLowerCase();
65
+ const matched = new Set();
66
+ for (const [keywords, categories] of KEYWORD_CATEGORY_MAP) {
67
+ for (const kw of keywords) {
68
+ if (queryLower.includes(kw)) {
69
+ for (const cat of categories) {
70
+ matched.add(cat);
71
+ }
72
+ break; // One keyword match per group is enough
73
+ }
74
+ }
75
+ }
76
+ // If no keywords matched, return all categories (backward compatible)
77
+ if (matched.size === 0) {
78
+ return new Set(['focus', 'tabs', 'interactive', 'form', 'headings', 'errors', 'panels']);
79
+ }
80
+ return matched;
81
+ }
82
+ const handler = async (sessionId, args) => {
83
+ const tabId = args.tabId;
84
+ const query = args.query;
85
+ const scope = args.scope || 'visible';
86
+ const sessionManager = (0, session_manager_1.getSessionManager)();
87
+ if (!tabId) {
88
+ return {
89
+ content: [{ type: 'text', text: 'Error: tabId is required' }],
90
+ isError: true,
91
+ };
92
+ }
93
+ if (!query) {
94
+ return {
95
+ content: [{ type: 'text', text: 'Error: query is required' }],
96
+ isError: true,
97
+ };
98
+ }
99
+ // Resolve which categories to extract based on query
100
+ const categories = resolveCategories(query);
101
+ try {
102
+ const page = await sessionManager.getPage(sessionId, tabId, undefined, 'inspect');
103
+ if (!page) {
104
+ return {
105
+ content: [{ type: 'text', text: `Error: Tab ${tabId} not found` }],
106
+ isError: true,
107
+ };
108
+ }
109
+ // Pass category flags into the page evaluate to skip unnecessary DOM work
110
+ const categoryFlags = {
111
+ focus: categories.has('focus'),
112
+ tabs: categories.has('tabs'),
113
+ interactive: categories.has('interactive'),
114
+ form: categories.has('form'),
115
+ headings: categories.has('headings'),
116
+ errors: categories.has('errors'),
117
+ panels: categories.has('panels'),
118
+ };
119
+ const inspectResult = await page.evaluate((scopeArg, cats) => {
120
+ const includeAll = scopeArg === 'all';
121
+ const interactiveOnly = scopeArg === 'interactive';
122
+ function isVisible(el) {
123
+ const rect = el.getBoundingClientRect();
124
+ if (rect.width === 0 || rect.height === 0)
125
+ return false;
126
+ const style = window.getComputedStyle(el);
127
+ return style.display !== 'none' && style.visibility !== 'hidden' && style.opacity !== '0';
128
+ }
129
+ // ---- Active / selected / focused elements ----
130
+ let focusedInfo = null;
131
+ if (cats.focus) {
132
+ const active = document.activeElement;
133
+ if (active && active !== document.body && active !== document.documentElement) {
134
+ const inputEl = active;
135
+ const role = active.getAttribute('role') ||
136
+ (active.tagName === 'BUTTON'
137
+ ? 'button'
138
+ : active.tagName === 'INPUT'
139
+ ? inputEl.type || 'textbox'
140
+ : active.tagName.toLowerCase());
141
+ const name = active.getAttribute('aria-label') ||
142
+ active.getAttribute('title') ||
143
+ active.textContent?.trim().slice(0, 60) ||
144
+ '';
145
+ const idAttr = active.id ? `#${active.id}` : '';
146
+ focusedInfo = `${role}${idAttr}${name ? ` "${name}"` : ''}`;
147
+ }
148
+ }
149
+ const tabs = [];
150
+ if (cats.tabs) {
151
+ let tabIndex = 0;
152
+ for (const el of document.querySelectorAll('[role="tab"]')) {
153
+ if (!isVisible(el))
154
+ continue;
155
+ const label = el.getAttribute('aria-label') || el.textContent?.trim().slice(0, 60) || '';
156
+ const selected = el.getAttribute('aria-selected') === 'true' ||
157
+ el.classList.contains('active') ||
158
+ el.classList.contains('selected');
159
+ tabs.push({ label, selected, index: tabIndex++ });
160
+ }
161
+ }
162
+ // ---- Interactive elements summary ----
163
+ const interactiveCounts = {};
164
+ if (cats.interactive) {
165
+ const interactiveSelectors = [
166
+ 'button',
167
+ '[role="button"]',
168
+ 'a[href]',
169
+ 'input',
170
+ 'textarea',
171
+ 'select',
172
+ '[role="combobox"]',
173
+ '[role="listbox"]',
174
+ '[role="checkbox"]',
175
+ '[role="radio"]',
176
+ '[role="switch"]',
177
+ '[role="slider"]',
178
+ '[role="tab"]',
179
+ '[role="menuitem"]',
180
+ ];
181
+ for (const sel of interactiveSelectors) {
182
+ try {
183
+ let count = 0;
184
+ for (const el of document.querySelectorAll(sel)) {
185
+ if (includeAll || isVisible(el))
186
+ count++;
187
+ }
188
+ if (count > 0) {
189
+ const label = sel
190
+ .replace('[role="', '')
191
+ .replace('"]', '')
192
+ .replace('[href]', '')
193
+ .replace('a', 'link');
194
+ interactiveCounts[label] = (interactiveCounts[label] || 0) + count;
195
+ }
196
+ }
197
+ catch {
198
+ // skip bad selectors
199
+ }
200
+ }
201
+ }
202
+ const formFields = [];
203
+ if (cats.form && !interactiveOnly) {
204
+ for (const el of document.querySelectorAll('input, textarea, select')) {
205
+ if (!includeAll && !isVisible(el))
206
+ continue;
207
+ const inputEl = el;
208
+ const type = inputEl.type || el.tagName.toLowerCase();
209
+ if (type === 'hidden' || type === 'password')
210
+ continue;
211
+ const name = inputEl.placeholder ||
212
+ el.getAttribute('aria-label') ||
213
+ el.getAttribute('name') ||
214
+ el.id ||
215
+ '';
216
+ let value = inputEl.value || '';
217
+ if (el.tagName === 'SELECT') {
218
+ const selectEl = el;
219
+ value = selectEl.options[selectEl.selectedIndex]?.text || selectEl.value || '';
220
+ }
221
+ formFields.push({ type, name: name.slice(0, 40), value: value.slice(0, 60), id: el.id });
222
+ }
223
+ }
224
+ // ---- Heading hierarchy ----
225
+ const headings = [];
226
+ if (cats.headings) {
227
+ for (const el of document.querySelectorAll('h1, h2, h3, h4, [role="heading"]')) {
228
+ if (!includeAll && !isVisible(el))
229
+ continue;
230
+ const level = parseInt(el.tagName.replace('H', '') || '2', 10);
231
+ const text = el.textContent?.trim().slice(0, 80) || '';
232
+ if (text)
233
+ headings.push({ level, text });
234
+ if (headings.length >= 10)
235
+ break;
236
+ }
237
+ }
238
+ const errors = [];
239
+ if (cats.errors) {
240
+ for (const el of document.querySelectorAll('[role="alert"], [role="alertdialog"], [role="status"], [aria-live="assertive"], [aria-live="polite"]')) {
241
+ if (!isVisible(el))
242
+ continue;
243
+ const text = el.textContent?.trim().slice(0, 100) || '';
244
+ if (text) {
245
+ errors.push({ role: el.getAttribute('role') || 'live-region', text });
246
+ }
247
+ }
248
+ if (errors.length < 5) {
249
+ for (const el of document.querySelectorAll('.error, .alert, .warning, [class*="error"], [class*="alert"], [class*="warning"]')) {
250
+ if (!isVisible(el))
251
+ continue;
252
+ const text = el.textContent?.trim().slice(0, 100) || '';
253
+ if (text && !errors.some(e => e.text === text)) {
254
+ errors.push({ role: 'class-match', text });
255
+ if (errors.length >= 5)
256
+ break;
257
+ }
258
+ }
259
+ }
260
+ }
261
+ const visiblePanels = [];
262
+ if (cats.panels && !interactiveOnly) {
263
+ const containerSelectors = [
264
+ '[role="tabpanel"]',
265
+ '[role="dialog"]',
266
+ '[role="main"]',
267
+ 'main',
268
+ 'article',
269
+ 'section',
270
+ '[role="region"]',
271
+ ];
272
+ for (const sel of containerSelectors) {
273
+ if (visiblePanels.length >= 5)
274
+ break;
275
+ try {
276
+ for (const el of document.querySelectorAll(sel)) {
277
+ if (!isVisible(el) || visiblePanels.length >= 5)
278
+ continue;
279
+ const text = el.textContent?.trim().slice(0, 120) || '';
280
+ if (text.length > 20) {
281
+ visiblePanels.push({
282
+ tag: el.tagName.toLowerCase(),
283
+ role: el.getAttribute('role'),
284
+ text,
285
+ });
286
+ }
287
+ }
288
+ }
289
+ catch {
290
+ // skip bad selectors
291
+ }
292
+ }
293
+ }
294
+ return {
295
+ focusedInfo,
296
+ tabs,
297
+ interactiveCounts,
298
+ formFields,
299
+ headings,
300
+ errors,
301
+ visiblePanels,
302
+ url: window.location.href,
303
+ title: document.title,
304
+ };
305
+ }, scope, categoryFlags);
306
+ // Format the output — only include sections for requested categories
307
+ const lines = [`[Inspect: "${query}"]`];
308
+ // Tab state
309
+ if (categories.has('tabs') && inspectResult.tabs.length > 0) {
310
+ const activeTab = inspectResult.tabs.find(t => t.selected);
311
+ const otherTabs = inspectResult.tabs.filter(t => !t.selected);
312
+ if (activeTab) {
313
+ const othersStr = otherTabs.length > 0
314
+ ? `. Other tabs: ${otherTabs.map(t => t.label).join(', ')}`
315
+ : '';
316
+ lines.push(`[Tabs] Active: "${activeTab.label}"${othersStr}`);
317
+ }
318
+ else {
319
+ lines.push(`[Tabs] ${inspectResult.tabs.length} tabs: ${inspectResult.tabs.map(t => t.label).join(', ')}`);
320
+ }
321
+ }
322
+ // Interactive elements summary
323
+ if (categories.has('interactive')) {
324
+ const interactiveEntries = Object.entries(inspectResult.interactiveCounts);
325
+ if (interactiveEntries.length > 0) {
326
+ const summary = interactiveEntries.map(([k, v]) => `${v} ${k}s`).join(', ');
327
+ lines.push(`[Interactive Elements] ${summary}`);
328
+ }
329
+ }
330
+ // Focused element
331
+ if (categories.has('focus') && inspectResult.focusedInfo) {
332
+ lines.push(`[Focused] ${inspectResult.focusedInfo}`);
333
+ }
334
+ // Headings
335
+ if (categories.has('headings') && inspectResult.headings.length > 0) {
336
+ const headingStr = inspectResult.headings
337
+ .map(h => `h${h.level}: "${h.text}"`)
338
+ .join(' > ');
339
+ lines.push(`[Headings] ${headingStr}`);
340
+ }
341
+ // Form fields
342
+ if (categories.has('form') && inspectResult.formFields.length > 0) {
343
+ const fieldStrs = inspectResult.formFields
344
+ .slice(0, 8)
345
+ .map(f => {
346
+ const idPart = f.id ? `#${f.id}` : '';
347
+ const namePart = f.name ? `"${f.name}"` : '';
348
+ const valuePart = f.value ? ` = "${f.value}"` : '';
349
+ return `${f.type}${idPart}${namePart ? ` ${namePart}` : ''}${valuePart}`;
350
+ })
351
+ .join(', ');
352
+ lines.push(`[Form Fields] ${fieldStrs}`);
353
+ if (inspectResult.formFields.length > 8) {
354
+ lines.push(` ... and ${inspectResult.formFields.length - 8} more fields`);
355
+ }
356
+ }
357
+ // Errors
358
+ if (categories.has('errors') && inspectResult.errors.length > 0) {
359
+ const errorStr = inspectResult.errors
360
+ .map(e => `"${e.text}"`)
361
+ .join('; ');
362
+ lines.push(`[Errors] ${inspectResult.errors.length} message(s): ${errorStr}`);
363
+ }
364
+ // Visible panels/content
365
+ if (categories.has('panels') && inspectResult.visiblePanels.length > 0) {
366
+ const panelStr = inspectResult.visiblePanels
367
+ .map((p, i) => `Panel ${i + 1}: "${p.text}"`)
368
+ .join(' | ');
369
+ lines.push(`[Content] ${panelStr}`);
370
+ }
371
+ // Footer with page context (always included)
372
+ lines.push(`[Page] ${inspectResult.url} | "${inspectResult.title}"`);
373
+ return {
374
+ content: [{ type: 'text', text: lines.join('\n') }],
375
+ };
376
+ }
377
+ catch (error) {
378
+ return {
379
+ content: [
380
+ {
381
+ type: 'text',
382
+ text: `Inspect error: ${error instanceof Error ? error.message : String(error)}`,
383
+ },
384
+ ],
385
+ isError: true,
386
+ };
387
+ }
388
+ };
389
+ function registerInspectTool(server) {
390
+ server.registerTool('inspect', handler, definition);
391
+ }
392
+ //# sourceMappingURL=inspect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inspect.js","sourceRoot":"","sources":["../../src/tools/inspect.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Interact Tool - Composite tool that finds an element, performs an action,
3
+ * waits for stability, and returns a comprehensive state summary.
4
+ *
5
+ * Reduces multi-step find→click→screenshot sequences to a single call.
6
+ */
7
+ import { MCPServer } from '../mcp-server';
8
+ export declare function registerInteractTool(server: MCPServer): void;
9
+ //# sourceMappingURL=interact.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interact.d.ts","sourceRoot":"","sources":["../../src/tools/interact.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AA4d1C,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAE5D"}