openchrome-mcp 1.2.14 → 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.
@@ -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":";AAAA;;;;;GAKG;;AA8dH,oDAEC;AA5dD,wDAAuD;AACvD,4DAA0D;AAC1D,kDAAkD;AAClD,4DAAoF;AAEpF,MAAM,UAAU,GAAsB;IACpC,IAAI,EAAE,UAAU;IAChB,WAAW,EACT,wKAAwK;IAC1K,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,KAAK,EAAE;gBACL,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,sBAAsB;aACpC;YACD,KAAK,EAAE;gBACL,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,8DAA8D;aAC5E;YACD,MAAM,EAAE;gBACN,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,CAAC,OAAO,EAAE,cAAc,EAAE,OAAO,CAAC;gBACxC,WAAW,EAAE,qDAAqD;aACnE;YACD,SAAS,EAAE;gBACT,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,oEAAoE;aAClF;YACD,YAAY,EAAE;gBACZ,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,CAAC,eAAe,EAAE,WAAW,EAAE,MAAM,CAAC;gBAC5C,WAAW,EAAE,mDAAmD;aACjE;SACF;QACD,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC;KAC7B;CACF,CAAC;AAEF,MAAM,OAAO,GAAgB,KAAK,EAChC,SAAiB,EACjB,IAA6B,EACT,EAAE;IACtB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAe,CAAC;IACnC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAe,CAAC;IACnC,MAAM,MAAM,GAAI,IAAI,CAAC,MAAiB,IAAI,OAAO,CAAC;IAClD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAE,IAAI,CAAC,SAAoB,IAAI,GAAG,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IAClF,MAAM,YAAY,GAAI,IAAI,CAAC,YAAuB,IAAI,MAAM,CAAC;IAE7D,MAAM,cAAc,GAAG,IAAA,mCAAiB,GAAE,CAAC;IAC3C,MAAM,YAAY,GAAG,IAAA,gCAAe,GAAE,CAAC;IAEvC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,0BAA0B,EAAE,CAAC;YAC7D,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,0BAA0B,EAAE,CAAC;YAC7D,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;IAED,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;QACnF,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,KAAK,YAAY,EAAE,CAAC;gBAClE,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QAED,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QACvC,MAAM,WAAW,GAAG,IAAA,8BAAa,EAAC,KAAK,CAAC,CAAC;QAEzC,2EAA2E;QAC3E,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC,WAAmB,EAAiC,EAAE;YACzF,MAAM,QAAQ,GAAkC,EAAE,CAAC;YACnD,MAAM,WAAW,GAAc,EAAE,CAAC;YAClC,MAAM,UAAU,GAAG,EAAE,CAAC;YAEtB,SAAS,cAAc,CAAC,EAAW;gBACjC,MAAM,IAAI,GAAG,EAAE,CAAC,qBAAqB,EAAE,CAAC;gBACxC,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;oBAAE,OAAO,IAAI,CAAC;gBAEvD,MAAM,KAAK,GAAG,MAAM,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;gBAC1C,IAAI,KAAK,CAAC,UAAU,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,KAAK,MAAM,IAAI,KAAK,CAAC,OAAO,KAAK,GAAG,EAAE,CAAC;oBACvF,OAAO,IAAI,CAAC;gBACd,CAAC;gBAED,MAAM,OAAO,GAAG,EAAsB,CAAC;gBACvC,MAAM,iBAAiB,GAAG,EAAE,CAAC,YAAY,CAAC,iBAAiB,CAAC,KAAK,MAAM,CAAC;gBACxE,MAAM,IAAI,GACR,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC;oBACvB,CAAC,EAAE,CAAC,OAAO,KAAK,QAAQ;wBACtB,CAAC,CAAC,QAAQ;wBACV,CAAC,CAAC,EAAE,CAAC,OAAO,KAAK,GAAG;4BAClB,CAAC,CAAC,MAAM;4BACR,CAAC,CAAC,EAAE,CAAC,OAAO,KAAK,OAAO;gCACtB,CAAC,CAAC,OAAO,CAAC,IAAI,IAAI,SAAS;gCAC3B,CAAC,CAAC,iBAAiB;oCACjB,CAAC,CAAC,SAAS;oCACX,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;gBAEtC,OAAO;oBACL,gBAAgB,EAAE,CAAC;oBACnB,IAAI;oBACJ,IAAI,EACF,EAAE,CAAC,YAAY,CAAC,YAAY,CAAC;wBAC7B,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC;wBACxB,EAAE,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;wBACpC,EAAE;oBACJ,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE;oBACjC,IAAI,EAAE,OAAO,CAAC,IAAI;oBAClB,WAAW,EAAE,OAAO,CAAC,WAAW;oBAChC,SAAS,EAAE,EAAE,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,SAAS;oBACrD,WAAW,EAAE,EAAE,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;oBAChD,IAAI,EAAE;wBACJ,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC;wBAC1B,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC;wBAC3B,KAAK,EAAE,IAAI,CAAC,KAAK;wBACjB,MAAM,EAAE,IAAI,CAAC,MAAM;qBACpB;iBACF,CAAC;YACJ,CAAC;YAED,MAAM,WAAW,GAAG,WAAW,CAAC,WAAW,EAAE,CAAC;YAC9C,MAAM,WAAW,GAAG,WAAW;iBAC5B,KAAK,CAAC,KAAK,CAAC;iBACZ,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;iBACzB,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;YAElG,MAAM,oBAAoB,GAAG;gBAC3B,QAAQ;gBACR,iBAAiB;gBACjB,GAAG;gBACH,eAAe;gBACf,sBAAsB;gBACtB,sBAAsB;gBACtB,qBAAqB;gBACrB,wBAAwB;gBACxB,gBAAgB;gBAChB,mBAAmB;gBACnB,mBAAmB;gBACnB,cAAc;gBACd,iBAAiB;gBACjB,WAAW;gBACX,YAAY;gBACZ,0BAA0B;gBAC1B,mBAAmB;gBACnB,kBAAkB;gBAClB,iBAAiB;gBACjB,iBAAiB;gBACjB,mBAAmB;gBACnB,8BAA8B;gBAC9B,mCAAmC;gBACnC,eAAe;aAChB,CAAC;YAEF,MAAM,IAAI,GAAG,IAAI,GAAG,EAAW,CAAC;YAEhC,mCAAmC;YACnC,KAAK,MAAM,QAAQ,IAAI,oBAAoB,EAAE,CAAC;gBAC5C,IAAI,QAAQ,CAAC,MAAM,IAAI,UAAU;oBAAE,MAAM;gBACzC,IAAI,CAAC;oBACH,KAAK,MAAM,EAAE,IAAI,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE,CAAC;wBACrD,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,QAAQ,CAAC,MAAM,IAAI,UAAU;4BAAE,SAAS;wBAC5D,MAAM,IAAI,GAAG,cAAc,CAAC,EAAE,CAAC,CAAC;wBAChC,IAAI,IAAI,EAAE,CAAC;4BACT,MAAM,YAAY,GAChB,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,WAAW,IAAI,EAAE,IAAI,IAAI,CAAC,SAAS,IAAI,EAAE,IAAI,IAAI,CAAC,WAAW,IAAI,EAAE,EAAE,CAAC,WAAW,EAAE,CAAC;4BAC3G,IAAI,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;gCAClG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gCACZ,EAA6C,CAAC,eAAe,GAAG,QAAQ,CAAC,MAAM,CAAC;gCACjF,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gCACrB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;4BACtB,CAAC;wBACH,CAAC;oBACH,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC;oBACP,mBAAmB;gBACrB,CAAC;YACH,CAAC;YAED,mDAAmD;YACnD,MAAM,MAAM,GAAG,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC,YAAY,CAAC,CAAC;YACjF,IAAI,IAAI,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;YAC7B,OAAO,IAAI,IAAI,QAAQ,CAAC,MAAM,GAAG,UAAU,EAAE,CAAC;gBAC5C,MAAM,EAAE,GAAG,IAAe,CAAC;gBAC3B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;oBAClB,MAAM,IAAI,GAAG,cAAc,CAAC,EAAE,CAAC,CAAC;oBAChC,IAAI,IAAI,EAAE,CAAC;wBACT,MAAM,YAAY,GAChB,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,WAAW,IAAI,EAAE,IAAI,IAAI,CAAC,SAAS,IAAI,EAAE,IAAI,IAAI,CAAC,WAAW,IAAI,EAAE,EAAE,CAAC,WAAW,EAAE,CAAC;wBAC3G,IAAI,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;4BAClG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;4BACZ,EAA6C,CAAC,eAAe,GAAG,QAAQ,CAAC,MAAM,CAAC;4BACjF,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;4BACrB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;wBACtB,CAAC;oBACH,CAAC;gBACH,CAAC;gBACD,IAAI,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;YAC3B,CAAC;YAED,OAAO,QAAQ,CAAC;QAClB,CAAC,EAAE,UAAU,CAAC,CAAC;QAEf,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,+BAA+B,KAAK,GAAG,EAAE,CAAC;gBAC1E,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QAED,oDAAoD;QACpD,MAAM,SAAS,GAAG,cAAc,CAAC,YAAY,EAAE,CAAC;QAEhD,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,SAAS,CAAC,IAAI,CAEjD,IAAI,EAAE,kBAAkB,EAAE;YAC3B,UAAU,EAAE;;;;;;;;;;;;WAYP;YACL,aAAa,EAAE,KAAK;SACrB,CAAC,CAAC;QAEH,IAAI,WAAW,CAAC,QAAQ,EAAE,CAAC;YACzB,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,SAAS,CAAC,IAAI,CAEhD,IAAI,EAAE,uBAAuB,EAAE;gBAChC,QAAQ,EAAE,WAAW,CAAC,QAAQ;gBAC9B,aAAa,EAAE,IAAI;aACpB,CAAC,CAAC;YAEH,MAAM,gBAAgB,GAAoB,EAAE,CAAC;YAC7C,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;gBAC9B,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBACtC,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ;oBAAE,SAAS;gBAE/E,gBAAgB,CAAC,IAAI,CACnB,SAAS;qBACN,IAAI,CAAsC,IAAI,EAAE,kBAAkB,EAAE;oBACnE,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ;iBAC9B,CAAC;qBACD,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE;oBACjB,OAAO,CAAC,KAAK,CAAC,CAAC,gBAAgB,GAAG,IAAI,CAAC,aAAa,CAAC;gBACvD,CAAC,CAAC;qBACD,KAAK,CAAC,GAAG,EAAE;oBACV,2CAA2C;gBAC7C,CAAC,CAAC,CACL,CAAC;YACJ,CAAC;YAED,MAAM,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QACtC,CAAC;QAED,iBAAiB;QACjB,MAAM,aAAa,GAAmB,OAAO;aAC1C,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,IAAA,6BAAY,EAAC,EAAkB,EAAE,UAAU,EAAE,WAAW,CAAC,EAAE,CAAC,CAAC;aACxF,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;QAErC,MAAM,SAAS,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;QAEnC,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,KAAK,GAAG,EAAE,EAAE,CAAC;YACvC,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,4BAA4B,KAAK,0BAA0B,SAAS,EAAE,IAAI,IAAI,SAAS,wBAAwB;qBACtH;iBACF;gBACD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QAED,mCAAmC;QACnC,IAAI,SAAS,CAAC,gBAAgB,EAAE,CAAC;YAC/B,IAAI,CAAC;gBACH,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,4BAA4B,EAAE;oBACvD,aAAa,EAAE,SAAS,CAAC,gBAAgB;iBAC1C,CAAC,CAAC;gBACH,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;gBAEtD,+BAA+B;gBAC/B,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,SAAS,CAAC,IAAI,CAE/C,IAAI,EAAE,kBAAkB,EAAE;oBAC3B,UAAU,EAAE;;;;;;;;;;;eAWP;oBACL,aAAa,EAAE,IAAI;iBACpB,CAAC,CAAC;gBAEH,IAAI,SAAS,CAAC,KAAK,EAAE,CAAC;oBACpB,SAAS,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;oBACrC,SAAS,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;gBACvC,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,qCAAqC;YACvC,CAAC;QACH,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAE5C,4CAA4C;QAC5C,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAA,wBAAY,EAClC,IAAI,EACJ,KAAK,IAAI,EAAE;YACT,IAAI,MAAM,KAAK,cAAc,EAAE,CAAC;gBAC9B,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC;YAC5D,CAAC;iBAAM,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;gBAC9B,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YACxC,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YACzC,CAAC;QACH,CAAC,EACD,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,CAAC,EAAE,CACvC,CAAC;QAEF,0CAA0C;QAC1C,IAAI,KAAK,GAAG,EAAE,CAAC;QACf,IAAI,SAAS,CAAC,gBAAgB,EAAE,CAAC;YAC/B,KAAK,GAAG,YAAY,CAAC,WAAW,CAC9B,SAAS,EACT,KAAK,EACL,SAAS,CAAC,gBAAgB,EAC1B,SAAS,CAAC,IAAI,EACd,SAAS,CAAC,IAAI,EACd,SAAS,CAAC,OAAO,EACjB,SAAS,CAAC,WAAW,CACtB,CAAC;QACJ,CAAC;QAED,qBAAqB;QACrB,MAAM,WAAW,GAAG,MAAM,KAAK,cAAc,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;QAC9G,MAAM,cAAc,GAAG,eAAe,WAAW,QAAQ,SAAS,CAAC,OAAO,MAAM,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,MAAM,KAAK,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QAEtK,yCAAyC;QACzC,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE;YAC5C,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;YACjC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;YAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAC3C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAE3C,sBAAsB;YACtB,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC;YACtC,IAAI,UAAU,GAAG,MAAM,CAAC;YACxB,IAAI,MAAM,IAAI,MAAM,KAAK,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACvC,MAAM,OAAO,GAAG,MAA0B,CAAC;gBAC3C,MAAM,IAAI,GACR,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC;oBAC3B,CAAC,MAAM,CAAC,OAAO,KAAK,QAAQ;wBAC1B,CAAC,CAAC,QAAQ;wBACV,CAAC,CAAC,MAAM,CAAC,OAAO,KAAK,OAAO;4BAC1B,CAAC,CAAC,OAAO,CAAC,IAAI,IAAI,SAAS;4BAC3B,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;gBACtC,MAAM,IAAI,GACR,MAAM,CAAC,YAAY,CAAC,YAAY,CAAC;oBACjC,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC;oBAC5B,MAAM,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;oBACvC,EAAE,CAAC;gBACL,UAAU,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YACpD,CAAC;YAED,sDAAsD;YACtD,MAAM,MAAM,GAAa,EAAE,CAAC;YAC5B,MAAM,cAAc,GAAG;gBACrB,mBAAmB;gBACnB,iBAAiB;gBACjB,eAAe;gBACf,MAAM;gBACN,QAAQ;gBACR,kBAAkB;gBAClB,oBAAoB;aACrB,CAAC;YACF,KAAK,MAAM,GAAG,IAAI,cAAc,EAAE,CAAC;gBACjC,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC;oBAAE,MAAM;gBAC9B,IAAI,CAAC;oBACH,MAAM,GAAG,GAAG,QAAQ,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;oBAC3C,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;wBACrB,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC;4BAAE,MAAM;wBAC9B,MAAM,IAAI,GAAG,EAAE,CAAC,qBAAqB,EAAE,CAAC;wBACxC,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;4BAAE,SAAS;wBACpD,MAAM,KAAK,GAAG,MAAM,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;wBAC1C,IAAI,KAAK,CAAC,OAAO,KAAK,MAAM,IAAI,KAAK,CAAC,UAAU,KAAK,QAAQ;4BAAE,SAAS;wBACxE,MAAM,IAAI,GAAG,EAAE,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC;wBACvD,IAAI,IAAI,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;4BACrB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;wBACpB,CAAC;oBACH,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC;oBACP,qBAAqB;gBACvB,CAAC;YACH,CAAC;YAED,mBAAmB;YACnB,MAAM,QAAQ,GAAa,EAAE,CAAC;YAC9B,KAAK,MAAM,GAAG,IAAI,QAAQ,CAAC,gBAAgB,CAAC,8BAA8B,CAAC,EAAE,CAAC;gBAC5E,MAAM,IAAI,GAAG,GAAG,CAAC,qBAAqB,EAAE,CAAC;gBACzC,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;oBAAE,SAAS;gBACpD,MAAM,KAAK,GAAG,MAAM,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;gBAC3C,IAAI,KAAK,CAAC,OAAO,KAAK,MAAM,IAAI,KAAK,CAAC,UAAU,KAAK,QAAQ;oBAAE,SAAS;gBACxE,MAAM,IAAI,GAAG,GAAG,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC;gBACxD,IAAI,IAAI;oBAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC9B,IAAI,QAAQ,CAAC,MAAM,IAAI,CAAC;oBAAE,MAAM;YAClC,CAAC;YAED,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;QACxE,CAAC,CAAC,CAAC;QAEH,qBAAqB;QACrB,MAAM,KAAK,GAAa,CAAC,cAAc,CAAC,CAAC;QAEzC,IAAI,YAAY,KAAK,WAAW,IAAI,YAAY,KAAK,MAAM,EAAE,CAAC;YAC5D,IAAI,KAAK,EAAE,CAAC;gBACV,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACpB,CAAC;QACH,CAAC;QAED,IAAI,YAAY,KAAK,eAAe,IAAI,YAAY,KAAK,MAAM,EAAE,CAAC;YAChE,KAAK,CAAC,IAAI,CACR,wBAAwB,YAAY,CAAC,GAAG,cAAc,YAAY,CAAC,OAAO,IAAI,YAAY,CAAC,OAAO,cAAc,YAAY,CAAC,UAAU,EAAE,CAC1I,CAAC;YAEF,IAAI,YAAY,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACrC,KAAK,CAAC,IAAI,CAAC,cAAc,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACnF,CAAC;YAED,IAAI,YAAY,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACnC,MAAM,UAAU,GAAG,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBAC/E,KAAK,CAAC,IAAI,CAAC,aAAa,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACpD,CAAC;QACH,CAAC;QAED,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;SACpD,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,mBAAmB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;iBAClF;aACF;YACD,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;AACH,CAAC,CAAC;AAEF,SAAgB,oBAAoB,CAAC,MAAiB;IACpD,MAAM,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;AACvD,CAAC"}
@@ -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;AAyR1C,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAE5D"}
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"}
@@ -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":"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"}
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"}