openchrome-mcp 1.7.11 → 1.7.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -0
- package/dist/cdp/client.d.ts +14 -0
- package/dist/cdp/client.d.ts.map +1 -1
- package/dist/cdp/client.js +200 -0
- package/dist/cdp/client.js.map +1 -1
- package/dist/chrome/launcher.d.ts.map +1 -1
- package/dist/chrome/launcher.js +6 -3
- package/dist/chrome/launcher.js.map +1 -1
- package/dist/cli/index.js +0 -0
- package/dist/compression/snapshot-store.d.ts +54 -0
- package/dist/compression/snapshot-store.d.ts.map +1 -0
- package/dist/compression/snapshot-store.js +183 -0
- package/dist/compression/snapshot-store.js.map +1 -0
- package/dist/config/defaults.d.ts +6 -0
- package/dist/config/defaults.d.ts.map +1 -1
- package/dist/config/defaults.js +7 -1
- package/dist/config/defaults.js.map +1 -1
- package/dist/config/global.d.ts +15 -0
- package/dist/config/global.d.ts.map +1 -1
- package/dist/config/global.js +6 -0
- package/dist/config/global.js.map +1 -1
- package/dist/dashboard/activity-tracker.d.ts +17 -0
- package/dist/dashboard/activity-tracker.d.ts.map +1 -1
- package/dist/dashboard/activity-tracker.js +44 -1
- package/dist/dashboard/activity-tracker.js.map +1 -1
- package/dist/dashboard/types.d.ts +18 -0
- package/dist/dashboard/types.d.ts.map +1 -1
- package/dist/dashboard/types.js.map +1 -1
- package/dist/dom/dom-serializer.d.ts +2 -0
- package/dist/dom/dom-serializer.d.ts.map +1 -1
- package/dist/dom/dom-serializer.js +228 -1
- package/dist/dom/dom-serializer.js.map +1 -1
- package/dist/mcp-server.d.ts.map +1 -1
- package/dist/mcp-server.js +66 -32
- package/dist/mcp-server.js.map +1 -1
- package/dist/session-manager.d.ts +16 -0
- package/dist/session-manager.d.ts.map +1 -1
- package/dist/session-manager.js +39 -0
- package/dist/session-manager.js.map +1 -1
- package/dist/tools/batch-execute.js +5 -5
- package/dist/tools/batch-execute.js.map +1 -1
- package/dist/tools/batch-paginate.js +7 -7
- package/dist/tools/batch-paginate.js.map +1 -1
- package/dist/tools/click-element.d.ts.map +1 -1
- package/dist/tools/click-element.js +30 -200
- package/dist/tools/click-element.js.map +1 -1
- package/dist/tools/computer.d.ts.map +1 -1
- package/dist/tools/computer.js +46 -14
- package/dist/tools/computer.js.map +1 -1
- package/dist/tools/console-capture.d.ts.map +1 -1
- package/dist/tools/console-capture.js +69 -4
- package/dist/tools/console-capture.js.map +1 -1
- package/dist/tools/cookies.d.ts.map +1 -1
- package/dist/tools/cookies.js +71 -8
- package/dist/tools/cookies.js.map +1 -1
- package/dist/tools/drag-drop.js +3 -3
- package/dist/tools/drag-drop.js.map +1 -1
- package/dist/tools/emulate-device.js +5 -5
- package/dist/tools/emulate-device.js.map +1 -1
- package/dist/tools/file-upload.js +2 -2
- package/dist/tools/file-upload.js.map +1 -1
- package/dist/tools/fill-form.d.ts.map +1 -1
- package/dist/tools/fill-form.js +47 -112
- package/dist/tools/fill-form.js.map +1 -1
- package/dist/tools/find.d.ts.map +1 -1
- package/dist/tools/find.js +24 -250
- package/dist/tools/find.js.map +1 -1
- package/dist/tools/form-input.js +3 -3
- package/dist/tools/form-input.js.map +1 -1
- package/dist/tools/geolocation.js +2 -2
- package/dist/tools/geolocation.js.map +1 -1
- package/dist/tools/http-auth.js +1 -1
- package/dist/tools/http-auth.js.map +1 -1
- package/dist/tools/inspect.d.ts.map +1 -1
- package/dist/tools/inspect.js +99 -9
- package/dist/tools/inspect.js.map +1 -1
- package/dist/tools/interact.d.ts.map +1 -1
- package/dist/tools/interact.js +31 -195
- package/dist/tools/interact.js.map +1 -1
- package/dist/tools/javascript.js +3 -3
- package/dist/tools/javascript.js.map +1 -1
- package/dist/tools/lightweight-scroll.js +4 -4
- package/dist/tools/lightweight-scroll.js.map +1 -1
- package/dist/tools/list-profiles.js +2 -2
- package/dist/tools/list-profiles.js.map +1 -1
- package/dist/tools/memory.d.ts.map +1 -1
- package/dist/tools/memory.js +4 -4
- package/dist/tools/memory.js.map +1 -1
- package/dist/tools/navigate.d.ts.map +1 -1
- package/dist/tools/navigate.js +21 -4
- package/dist/tools/navigate.js.map +1 -1
- package/dist/tools/network.js +2 -2
- package/dist/tools/network.js.map +1 -1
- package/dist/tools/orchestration.js +2 -2
- package/dist/tools/orchestration.js.map +1 -1
- package/dist/tools/page-content.js +2 -2
- package/dist/tools/page-content.js.map +1 -1
- package/dist/tools/page-pdf.js +4 -4
- package/dist/tools/page-pdf.js.map +1 -1
- package/dist/tools/performance-metrics.js +2 -2
- package/dist/tools/performance-metrics.js.map +1 -1
- package/dist/tools/profile-status.js +1 -1
- package/dist/tools/profile-status.js.map +1 -1
- package/dist/tools/query-dom.d.ts.map +1 -1
- package/dist/tools/query-dom.js +169 -13
- package/dist/tools/query-dom.js.map +1 -1
- package/dist/tools/read-page.d.ts.map +1 -1
- package/dist/tools/read-page.js +36 -4
- package/dist/tools/read-page.js.map +1 -1
- package/dist/tools/request-intercept.d.ts.map +1 -1
- package/dist/tools/request-intercept.js +117 -9
- package/dist/tools/request-intercept.js.map +1 -1
- package/dist/tools/storage.js +2 -2
- package/dist/tools/storage.js.map +1 -1
- package/dist/tools/tabs-close.js +2 -2
- package/dist/tools/tabs-close.js.map +1 -1
- package/dist/tools/tabs-create.js +1 -1
- package/dist/tools/tabs-create.js.map +1 -1
- package/dist/tools/user-agent.js +2 -2
- package/dist/tools/user-agent.js.map +1 -1
- package/dist/tools/wait-and-click.d.ts.map +1 -1
- package/dist/tools/wait-and-click.js +30 -162
- package/dist/tools/wait-and-click.js.map +1 -1
- package/dist/tools/wait-for.js +3 -3
- package/dist/tools/wait-for.js.map +1 -1
- package/dist/tools/worker.js +1 -1
- package/dist/tools/worker.js.map +1 -1
- package/dist/types/mcp.d.ts +2 -0
- package/dist/types/mcp.d.ts.map +1 -1
- package/dist/utils/adaptive-screenshot.d.ts +9 -0
- package/dist/utils/adaptive-screenshot.d.ts.map +1 -1
- package/dist/utils/adaptive-screenshot.js +12 -0
- package/dist/utils/adaptive-screenshot.js.map +1 -1
- package/dist/utils/dom-delta.d.ts.map +1 -1
- package/dist/utils/dom-delta.js +57 -12
- package/dist/utils/dom-delta.js.map +1 -1
- package/dist/utils/element-discovery.d.ts +115 -0
- package/dist/utils/element-discovery.d.ts.map +1 -0
- package/dist/utils/element-discovery.js +519 -0
- package/dist/utils/element-discovery.js.map +1 -0
- package/dist/utils/page-diagnostics.d.ts.map +1 -1
- package/dist/utils/page-diagnostics.js +12 -1
- package/dist/utils/page-diagnostics.js.map +1 -1
- package/dist/utils/ref-id-manager.d.ts.map +1 -1
- package/dist/utils/ref-id-manager.js +35 -3
- package/dist/utils/ref-id-manager.js.map +1 -1
- package/dist/utils/shadow-dom.d.ts +114 -0
- package/dist/utils/shadow-dom.d.ts.map +1 -0
- package/dist/utils/shadow-dom.js +385 -0
- package/dist/utils/shadow-dom.js.map +1 -0
- package/dist/utils/visual-summary.d.ts.map +1 -1
- package/dist/utils/visual-summary.js +23 -6
- package/dist/utils/visual-summary.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Element Discovery - Shared element search and CDP resolution utilities
|
|
3
|
+
*
|
|
4
|
+
* Extracts the duplicated element discovery logic from find, click_element,
|
|
5
|
+
* interact, wait_and_click, and fill_form tools into a single reusable module.
|
|
6
|
+
*
|
|
7
|
+
* Flow: in-page search (page.evaluate) → batched CDP backendNodeId resolution
|
|
8
|
+
*/
|
|
9
|
+
import { Page } from 'puppeteer-core';
|
|
10
|
+
import { CDPClient } from '../cdp/client';
|
|
11
|
+
import { FoundElement } from './element-finder';
|
|
12
|
+
/**
|
|
13
|
+
* Options for element discovery.
|
|
14
|
+
*/
|
|
15
|
+
export interface DiscoverOptions {
|
|
16
|
+
/** Maximum number of candidates to collect (default: 30) */
|
|
17
|
+
maxResults?: number;
|
|
18
|
+
/** Return center coordinates instead of top-left (default: false) */
|
|
19
|
+
useCenter?: boolean;
|
|
20
|
+
/** Timeout in ms for the page.evaluate call (default: 10000) */
|
|
21
|
+
timeout?: number;
|
|
22
|
+
/** Tool name for timeout error messages */
|
|
23
|
+
toolName?: string;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Form field discovered on the page.
|
|
27
|
+
*/
|
|
28
|
+
export interface FormField {
|
|
29
|
+
backendDOMNodeId: number;
|
|
30
|
+
fieldName: string;
|
|
31
|
+
tagName: string;
|
|
32
|
+
type?: string;
|
|
33
|
+
name?: string;
|
|
34
|
+
placeholder?: string;
|
|
35
|
+
ariaLabel?: string;
|
|
36
|
+
label?: string;
|
|
37
|
+
rect: {
|
|
38
|
+
x: number;
|
|
39
|
+
y: number;
|
|
40
|
+
width: number;
|
|
41
|
+
height: number;
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
type RawElement = Omit<FoundElement, 'score'>;
|
|
45
|
+
/**
|
|
46
|
+
* Tag property name used to mark discovered elements in the DOM.
|
|
47
|
+
* Tools can use this to re-find elements after scroll/reposition.
|
|
48
|
+
*/
|
|
49
|
+
export declare const DISCOVERY_TAG = "__elDiscIdx";
|
|
50
|
+
/**
|
|
51
|
+
* Tag property name used to mark discovered form fields in the DOM.
|
|
52
|
+
*/
|
|
53
|
+
export declare const FORM_FIELD_TAG = "__formFieldIdx";
|
|
54
|
+
/**
|
|
55
|
+
* Discover elements matching a query on the page.
|
|
56
|
+
*
|
|
57
|
+
* Handles the complete flow:
|
|
58
|
+
* 1. In-page search via page.evaluate (interactive selectors + TreeWalker text match)
|
|
59
|
+
* 2. Batched CDP resolution of backendDOMNodeIds
|
|
60
|
+
*
|
|
61
|
+
* Returns elements WITHOUT scores - callers should use scoreElement() from
|
|
62
|
+
* element-finder.ts to score and sort results.
|
|
63
|
+
*
|
|
64
|
+
* @example
|
|
65
|
+
* ```ts
|
|
66
|
+
* const results = await discoverElements(page, cdpClient, 'login button', { useCenter: true });
|
|
67
|
+
* const scored = results
|
|
68
|
+
* .map(el => ({ ...el, score: scoreElement(el as FoundElement, queryLower, queryTokens) }))
|
|
69
|
+
* .sort((a, b) => b.score - a.score);
|
|
70
|
+
* ```
|
|
71
|
+
*/
|
|
72
|
+
export declare function discoverElements(page: Page, cdpClient: CDPClient, query: string, options?: DiscoverOptions): Promise<RawElement[]>;
|
|
73
|
+
/**
|
|
74
|
+
* Discover form fields on the page.
|
|
75
|
+
*
|
|
76
|
+
* Searches for input, textarea, select, and contenteditable elements,
|
|
77
|
+
* resolving associated labels and backend node IDs.
|
|
78
|
+
*/
|
|
79
|
+
export declare function discoverFormFields(page: Page, cdpClient: CDPClient, options?: {
|
|
80
|
+
timeout?: number;
|
|
81
|
+
toolName?: string;
|
|
82
|
+
}): Promise<FormField[]>;
|
|
83
|
+
/**
|
|
84
|
+
* Resolve backendDOMNodeIds for elements tagged with a property during page.evaluate.
|
|
85
|
+
*
|
|
86
|
+
* Uses batched approach for efficiency:
|
|
87
|
+
* 1. Single Runtime.evaluate to collect all tagged elements
|
|
88
|
+
* 2. Runtime.getProperties to get individual object references
|
|
89
|
+
* 3. Parallel DOM.describeNode for all elements
|
|
90
|
+
*
|
|
91
|
+
* This replaces per-element resolution (O(n) round-trips) with batched resolution (O(1)).
|
|
92
|
+
*/
|
|
93
|
+
export declare function resolveBackendNodeIds(page: Page, cdpClient: CDPClient, tagProperty: string, results: Array<{
|
|
94
|
+
backendDOMNodeId: number;
|
|
95
|
+
}>): Promise<void>;
|
|
96
|
+
/**
|
|
97
|
+
* Get the current viewport-relative position of a tagged element.
|
|
98
|
+
*
|
|
99
|
+
* Useful for re-acquiring coordinates after DOM.scrollIntoViewIfNeeded,
|
|
100
|
+
* since scrolling changes viewport-relative positions.
|
|
101
|
+
*/
|
|
102
|
+
export declare function getTaggedElementRect(page: Page, cdpClient: CDPClient, tagProperty: string, tagIndex: number, useCenter?: boolean): Promise<{
|
|
103
|
+
x: number;
|
|
104
|
+
y: number;
|
|
105
|
+
width: number;
|
|
106
|
+
height: number;
|
|
107
|
+
} | null>;
|
|
108
|
+
/**
|
|
109
|
+
* Clean up discovery tags from DOM elements.
|
|
110
|
+
*
|
|
111
|
+
* Call this after interaction is complete to avoid polluting the DOM.
|
|
112
|
+
*/
|
|
113
|
+
export declare function cleanupTags(page: Page, tagProperty: string): Promise<void>;
|
|
114
|
+
export {};
|
|
115
|
+
//# sourceMappingURL=element-discovery.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"element-discovery.d.ts","sourceRoot":"","sources":["../../src/utils/element-discovery.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAIhD;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,4DAA4D;IAC5D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,qEAAqE;IACrE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,gEAAgE;IAChE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,2CAA2C;IAC3C,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CAC/D;AAGD,KAAK,UAAU,GAAG,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;AAE9C;;;GAGG;AACH,eAAO,MAAM,aAAa,gBAAgB,CAAC;AAE3C;;GAEG;AACH,eAAO,MAAM,cAAc,mBAAmB,CAAC;AAE/C;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,eAAe,GACxB,OAAO,CAAC,UAAU,EAAE,CAAC,CAyNvB;AAED;;;;;GAKG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,SAAS,EACpB,OAAO,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAChD,OAAO,CAAC,SAAS,EAAE,CAAC,CAyKtB;AAED;;;;;;;;;GASG;AACH,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,SAAS,EACpB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,KAAK,CAAC;IAAE,gBAAgB,EAAE,MAAM,CAAA;CAAE,CAAC,GAC3C,OAAO,CAAC,IAAI,CAAC,CA2Df;AAED;;;;;GAKG;AACH,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,SAAS,EACpB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,SAAS,GAAE,OAAc,GACxB,OAAO,CAAC;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CA0BzE;AAED;;;;GAIG;AACH,wBAAsB,WAAW,CAC/B,IAAI,EAAE,IAAI,EACV,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC,CAqBf"}
|
|
@@ -0,0 +1,519 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Element Discovery - Shared element search and CDP resolution utilities
|
|
4
|
+
*
|
|
5
|
+
* Extracts the duplicated element discovery logic from find, click_element,
|
|
6
|
+
* interact, wait_and_click, and fill_form tools into a single reusable module.
|
|
7
|
+
*
|
|
8
|
+
* Flow: in-page search (page.evaluate) → batched CDP backendNodeId resolution
|
|
9
|
+
*/
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
exports.FORM_FIELD_TAG = exports.DISCOVERY_TAG = void 0;
|
|
12
|
+
exports.discoverElements = discoverElements;
|
|
13
|
+
exports.discoverFormFields = discoverFormFields;
|
|
14
|
+
exports.resolveBackendNodeIds = resolveBackendNodeIds;
|
|
15
|
+
exports.getTaggedElementRect = getTaggedElementRect;
|
|
16
|
+
exports.cleanupTags = cleanupTags;
|
|
17
|
+
const shadow_dom_1 = require("./shadow-dom");
|
|
18
|
+
const with_timeout_1 = require("./with-timeout");
|
|
19
|
+
/**
|
|
20
|
+
* Tag property name used to mark discovered elements in the DOM.
|
|
21
|
+
* Tools can use this to re-find elements after scroll/reposition.
|
|
22
|
+
*/
|
|
23
|
+
exports.DISCOVERY_TAG = '__elDiscIdx';
|
|
24
|
+
/**
|
|
25
|
+
* Tag property name used to mark discovered form fields in the DOM.
|
|
26
|
+
*/
|
|
27
|
+
exports.FORM_FIELD_TAG = '__formFieldIdx';
|
|
28
|
+
/**
|
|
29
|
+
* Discover elements matching a query on the page.
|
|
30
|
+
*
|
|
31
|
+
* Handles the complete flow:
|
|
32
|
+
* 1. In-page search via page.evaluate (interactive selectors + TreeWalker text match)
|
|
33
|
+
* 2. Batched CDP resolution of backendDOMNodeIds
|
|
34
|
+
*
|
|
35
|
+
* Returns elements WITHOUT scores - callers should use scoreElement() from
|
|
36
|
+
* element-finder.ts to score and sort results.
|
|
37
|
+
*
|
|
38
|
+
* @example
|
|
39
|
+
* ```ts
|
|
40
|
+
* const results = await discoverElements(page, cdpClient, 'login button', { useCenter: true });
|
|
41
|
+
* const scored = results
|
|
42
|
+
* .map(el => ({ ...el, score: scoreElement(el as FoundElement, queryLower, queryTokens) }))
|
|
43
|
+
* .sort((a, b) => b.score - a.score);
|
|
44
|
+
* ```
|
|
45
|
+
*/
|
|
46
|
+
async function discoverElements(page, cdpClient, query, options) {
|
|
47
|
+
const maxResults = options?.maxResults ?? 30;
|
|
48
|
+
const useCenter = options?.useCenter ?? false;
|
|
49
|
+
const timeout = options?.timeout ?? 10000;
|
|
50
|
+
const toolName = options?.toolName ?? 'element-discovery';
|
|
51
|
+
// Step 1: In-page element search
|
|
52
|
+
const results = await (0, with_timeout_1.withTimeout)(page.evaluate((searchQuery, maxRes, centerCoords, tagProp) => {
|
|
53
|
+
const elements = [];
|
|
54
|
+
const searchLower = searchQuery.toLowerCase();
|
|
55
|
+
const queryTokens = searchLower
|
|
56
|
+
.split(/\s+/)
|
|
57
|
+
.filter(t => t.length > 1)
|
|
58
|
+
.filter(t => !['the', 'a', 'an', 'to', 'for', 'of', 'in', 'on', 'at', 'and', 'or'].includes(t));
|
|
59
|
+
// Deep traversal helpers for open shadow roots
|
|
60
|
+
function deepQuerySelectorAll(root, selector) {
|
|
61
|
+
const results = [];
|
|
62
|
+
try {
|
|
63
|
+
const matched = root.querySelectorAll(selector);
|
|
64
|
+
for (let i = 0; i < matched.length; i++)
|
|
65
|
+
results.push(matched[i]);
|
|
66
|
+
}
|
|
67
|
+
catch { /* invalid selector */ }
|
|
68
|
+
const allEls = root.querySelectorAll('*');
|
|
69
|
+
for (let j = 0; j < allEls.length; j++) {
|
|
70
|
+
if (allEls[j].shadowRoot) {
|
|
71
|
+
const sr = deepQuerySelectorAll(allEls[j].shadowRoot, selector);
|
|
72
|
+
for (let k = 0; k < sr.length; k++)
|
|
73
|
+
results.push(sr[k]);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return results;
|
|
77
|
+
}
|
|
78
|
+
function deepWalkElements(root) {
|
|
79
|
+
const elems = [];
|
|
80
|
+
const walker = document.createTreeWalker(root, NodeFilter.SHOW_ELEMENT);
|
|
81
|
+
let n = walker.nextNode();
|
|
82
|
+
while (n) {
|
|
83
|
+
elems.push(n);
|
|
84
|
+
if (n.shadowRoot) {
|
|
85
|
+
const shadowEls = deepWalkElements(n.shadowRoot);
|
|
86
|
+
for (let i = 0; i < shadowEls.length; i++)
|
|
87
|
+
elems.push(shadowEls[i]);
|
|
88
|
+
}
|
|
89
|
+
n = walker.nextNode();
|
|
90
|
+
}
|
|
91
|
+
return elems;
|
|
92
|
+
}
|
|
93
|
+
function getElementInfo(el) {
|
|
94
|
+
const rect = el.getBoundingClientRect();
|
|
95
|
+
if (rect.width === 0 || rect.height === 0)
|
|
96
|
+
return null;
|
|
97
|
+
const style = window.getComputedStyle(el);
|
|
98
|
+
if (style.visibility === 'hidden' || style.display === 'none' || style.opacity === '0') {
|
|
99
|
+
return null;
|
|
100
|
+
}
|
|
101
|
+
const inputEl = el;
|
|
102
|
+
const isContentEditable = el.getAttribute('contenteditable') === 'true';
|
|
103
|
+
const role = el.getAttribute('role') ||
|
|
104
|
+
(el.tagName === 'BUTTON'
|
|
105
|
+
? 'button'
|
|
106
|
+
: el.tagName === 'A'
|
|
107
|
+
? 'link'
|
|
108
|
+
: el.tagName === 'INPUT'
|
|
109
|
+
? inputEl.type || 'textbox'
|
|
110
|
+
: isContentEditable
|
|
111
|
+
? 'textbox'
|
|
112
|
+
: el.tagName.toLowerCase());
|
|
113
|
+
return {
|
|
114
|
+
backendDOMNodeId: 0,
|
|
115
|
+
role,
|
|
116
|
+
name: el.getAttribute('aria-label') ||
|
|
117
|
+
el.getAttribute('title') ||
|
|
118
|
+
el.textContent?.trim().slice(0, 100) ||
|
|
119
|
+
'',
|
|
120
|
+
tagName: el.tagName.toLowerCase(),
|
|
121
|
+
type: inputEl.type,
|
|
122
|
+
placeholder: inputEl.placeholder,
|
|
123
|
+
ariaLabel: el.getAttribute('aria-label') || undefined,
|
|
124
|
+
textContent: el.textContent?.trim().slice(0, 50),
|
|
125
|
+
rect: {
|
|
126
|
+
x: centerCoords ? rect.x + rect.width / 2 : rect.x,
|
|
127
|
+
y: centerCoords ? rect.y + rect.height / 2 : rect.y,
|
|
128
|
+
width: rect.width,
|
|
129
|
+
height: rect.height,
|
|
130
|
+
},
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
const interactiveSelectors = [
|
|
134
|
+
'button',
|
|
135
|
+
'[role="button"]',
|
|
136
|
+
'a',
|
|
137
|
+
'[role="link"]',
|
|
138
|
+
'input[type="submit"]',
|
|
139
|
+
'input[type="button"]',
|
|
140
|
+
'input[type="radio"]',
|
|
141
|
+
'input[type="checkbox"]',
|
|
142
|
+
'[role="radio"]',
|
|
143
|
+
'[role="checkbox"]',
|
|
144
|
+
'[role="menuitem"]',
|
|
145
|
+
'[role="tab"]',
|
|
146
|
+
'[role="option"]',
|
|
147
|
+
'[onclick]',
|
|
148
|
+
'[tabindex]',
|
|
149
|
+
'[contenteditable="true"]',
|
|
150
|
+
'[role="combobox"]',
|
|
151
|
+
'[role="listbox"]',
|
|
152
|
+
'[role="switch"]',
|
|
153
|
+
'[role="slider"]',
|
|
154
|
+
'[role="treeitem"]',
|
|
155
|
+
'[role="dialog"] [aria-label]',
|
|
156
|
+
'[role="alertdialog"] [aria-label]',
|
|
157
|
+
'[data-testid]',
|
|
158
|
+
];
|
|
159
|
+
const seen = new Set();
|
|
160
|
+
// First pass: interactive elements matching query text (pierces open shadow roots)
|
|
161
|
+
for (const selector of interactiveSelectors) {
|
|
162
|
+
if (elements.length >= maxRes)
|
|
163
|
+
break;
|
|
164
|
+
try {
|
|
165
|
+
for (const el of deepQuerySelectorAll(document, selector)) {
|
|
166
|
+
if (seen.has(el) || elements.length >= maxRes)
|
|
167
|
+
continue;
|
|
168
|
+
const info = getElementInfo(el);
|
|
169
|
+
if (info) {
|
|
170
|
+
const combinedText = `${info.name} ${info.textContent || ''} ${info.ariaLabel || ''} ${info.placeholder || ''}`.toLowerCase();
|
|
171
|
+
if (queryTokens.some(token => combinedText.includes(token)) ||
|
|
172
|
+
combinedText.includes(searchLower)) {
|
|
173
|
+
seen.add(el);
|
|
174
|
+
el[tagProp] = elements.length;
|
|
175
|
+
elements.push(info);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
catch {
|
|
181
|
+
// Invalid selector
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
// Second pass: text content search on all elements (pierces open shadow roots)
|
|
185
|
+
const allElements = deepWalkElements(document.body);
|
|
186
|
+
for (let idx = 0; idx < allElements.length && elements.length < maxRes; idx++) {
|
|
187
|
+
const el = allElements[idx];
|
|
188
|
+
if (!seen.has(el)) {
|
|
189
|
+
const info = getElementInfo(el);
|
|
190
|
+
if (info) {
|
|
191
|
+
const combinedText = `${info.name} ${info.textContent || ''} ${info.ariaLabel || ''} ${info.placeholder || ''}`.toLowerCase();
|
|
192
|
+
if (combinedText.includes(searchLower) ||
|
|
193
|
+
queryTokens.some(token => combinedText.includes(token))) {
|
|
194
|
+
seen.add(el);
|
|
195
|
+
el[tagProp] = elements.length;
|
|
196
|
+
elements.push(info);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
return elements;
|
|
202
|
+
}, query.toLowerCase(), maxResults, useCenter, exports.DISCOVERY_TAG), timeout, toolName);
|
|
203
|
+
// Step 2: Resolve backend DOM node IDs via batched CDP
|
|
204
|
+
await resolveBackendNodeIds(page, cdpClient, exports.DISCOVERY_TAG, results);
|
|
205
|
+
// Step 3: CDP shadow root element search
|
|
206
|
+
// Only runs when there are remaining slots — avoids overhead on non-shadow pages
|
|
207
|
+
const remainingSlots = maxResults - results.length;
|
|
208
|
+
if (remainingSlots > 0) {
|
|
209
|
+
try {
|
|
210
|
+
const jsBackendIds = new Set(results.filter(r => r.backendDOMNodeId > 0).map(r => r.backendDOMNodeId));
|
|
211
|
+
const shadowElements = await (0, shadow_dom_1.discoverShadowElements)(page, cdpClient, query, {
|
|
212
|
+
maxResults: remainingSlots,
|
|
213
|
+
useCenter,
|
|
214
|
+
excludeBackendIds: jsBackendIds,
|
|
215
|
+
});
|
|
216
|
+
for (const sel of shadowElements) {
|
|
217
|
+
if (results.length >= maxResults)
|
|
218
|
+
break;
|
|
219
|
+
results.push({
|
|
220
|
+
backendDOMNodeId: sel.backendDOMNodeId,
|
|
221
|
+
role: sel.role,
|
|
222
|
+
name: sel.name,
|
|
223
|
+
tagName: sel.tagName,
|
|
224
|
+
type: sel.type,
|
|
225
|
+
placeholder: sel.placeholder,
|
|
226
|
+
ariaLabel: sel.ariaLabel,
|
|
227
|
+
textContent: sel.textContent,
|
|
228
|
+
rect: sel.rect,
|
|
229
|
+
});
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
catch {
|
|
233
|
+
// Shadow search failure is non-fatal — JS results are still valid
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
return results;
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Discover form fields on the page.
|
|
240
|
+
*
|
|
241
|
+
* Searches for input, textarea, select, and contenteditable elements,
|
|
242
|
+
* resolving associated labels and backend node IDs.
|
|
243
|
+
*/
|
|
244
|
+
async function discoverFormFields(page, cdpClient, options) {
|
|
245
|
+
const timeout = options?.timeout ?? 10000;
|
|
246
|
+
const toolName = options?.toolName ?? 'fill_form';
|
|
247
|
+
const results = await (0, with_timeout_1.withTimeout)(page.evaluate((tagProp) => {
|
|
248
|
+
const fields = [];
|
|
249
|
+
// Deep traversal for open shadow roots
|
|
250
|
+
function deepQuerySelectorAll(root, selector) {
|
|
251
|
+
const results = [];
|
|
252
|
+
try {
|
|
253
|
+
const matched = root.querySelectorAll(selector);
|
|
254
|
+
for (let i = 0; i < matched.length; i++)
|
|
255
|
+
results.push(matched[i]);
|
|
256
|
+
}
|
|
257
|
+
catch { /* invalid selector */ }
|
|
258
|
+
const allEls = root.querySelectorAll('*');
|
|
259
|
+
for (let j = 0; j < allEls.length; j++) {
|
|
260
|
+
if (allEls[j].shadowRoot) {
|
|
261
|
+
const sr = deepQuerySelectorAll(allEls[j].shadowRoot, selector);
|
|
262
|
+
for (let k = 0; k < sr.length; k++)
|
|
263
|
+
results.push(sr[k]);
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
return results;
|
|
267
|
+
}
|
|
268
|
+
function getLabel(el) {
|
|
269
|
+
const inputEl = el;
|
|
270
|
+
if (inputEl.id) {
|
|
271
|
+
const label = document.querySelector(`label[for="${inputEl.id}"]`);
|
|
272
|
+
if (label)
|
|
273
|
+
return label.textContent?.trim();
|
|
274
|
+
}
|
|
275
|
+
const parent = el.closest('label');
|
|
276
|
+
if (parent) {
|
|
277
|
+
const labelText = parent.textContent?.trim() || '';
|
|
278
|
+
const inputText = el.textContent?.trim() || '';
|
|
279
|
+
return labelText.replace(inputText, '').trim();
|
|
280
|
+
}
|
|
281
|
+
const prev = el.previousElementSibling;
|
|
282
|
+
if (prev?.tagName === 'LABEL') {
|
|
283
|
+
return prev.textContent?.trim();
|
|
284
|
+
}
|
|
285
|
+
return undefined;
|
|
286
|
+
}
|
|
287
|
+
const selectors = [
|
|
288
|
+
'input:not([type="hidden"]):not([type="submit"]):not([type="button"]):not([type="image"])',
|
|
289
|
+
'textarea',
|
|
290
|
+
'select',
|
|
291
|
+
'[contenteditable="true"]',
|
|
292
|
+
'[role="textbox"]',
|
|
293
|
+
'[role="combobox"]',
|
|
294
|
+
];
|
|
295
|
+
let index = 0;
|
|
296
|
+
for (const selector of selectors) {
|
|
297
|
+
try {
|
|
298
|
+
for (const el of deepQuerySelectorAll(document, selector)) {
|
|
299
|
+
const rect = el.getBoundingClientRect();
|
|
300
|
+
if (rect.width === 0 || rect.height === 0)
|
|
301
|
+
continue;
|
|
302
|
+
const style = window.getComputedStyle(el);
|
|
303
|
+
if (style.visibility === 'hidden' || style.display === 'none' || style.opacity === '0')
|
|
304
|
+
continue;
|
|
305
|
+
const inputEl = el;
|
|
306
|
+
fields.push({
|
|
307
|
+
backendDOMNodeId: 0,
|
|
308
|
+
fieldName: getLabel(el) ||
|
|
309
|
+
inputEl.name ||
|
|
310
|
+
inputEl.placeholder ||
|
|
311
|
+
inputEl.getAttribute('aria-label') ||
|
|
312
|
+
`field_${index}`,
|
|
313
|
+
tagName: el.tagName.toLowerCase(),
|
|
314
|
+
type: inputEl.type,
|
|
315
|
+
name: inputEl.name,
|
|
316
|
+
placeholder: inputEl.placeholder,
|
|
317
|
+
ariaLabel: el.getAttribute('aria-label') || undefined,
|
|
318
|
+
label: getLabel(el),
|
|
319
|
+
rect: {
|
|
320
|
+
x: rect.x + rect.width / 2,
|
|
321
|
+
y: rect.y + rect.height / 2,
|
|
322
|
+
width: rect.width,
|
|
323
|
+
height: rect.height,
|
|
324
|
+
},
|
|
325
|
+
});
|
|
326
|
+
el[tagProp] = index++;
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
catch {
|
|
330
|
+
// Invalid selector
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
return fields;
|
|
334
|
+
}, exports.FORM_FIELD_TAG), timeout, toolName);
|
|
335
|
+
// Resolve backend node IDs via batched CDP
|
|
336
|
+
await resolveBackendNodeIds(page, cdpClient, exports.FORM_FIELD_TAG, results);
|
|
337
|
+
// CDP shadow root form field discovery (handles closed shadow roots)
|
|
338
|
+
try {
|
|
339
|
+
const jsBackendIds = new Set(results.filter(r => r.backendDOMNodeId > 0).map(r => r.backendDOMNodeId));
|
|
340
|
+
const { shadowRoots } = await (0, shadow_dom_1.getAllShadowRoots)(page, cdpClient);
|
|
341
|
+
const formSelectors = [
|
|
342
|
+
'input:not([type="hidden"]):not([type="submit"]):not([type="button"]):not([type="image"])',
|
|
343
|
+
'textarea',
|
|
344
|
+
'select',
|
|
345
|
+
'[contenteditable="true"]',
|
|
346
|
+
'[role="textbox"]',
|
|
347
|
+
'[role="combobox"]',
|
|
348
|
+
];
|
|
349
|
+
for (const selector of formSelectors) {
|
|
350
|
+
const shadowMatches = await (0, shadow_dom_1.querySelectorInShadowRoots)(page, cdpClient, selector, shadowRoots);
|
|
351
|
+
for (const backendId of shadowMatches) {
|
|
352
|
+
if (jsBackendIds.has(backendId))
|
|
353
|
+
continue;
|
|
354
|
+
try {
|
|
355
|
+
const { node } = await cdpClient.send(page, 'DOM.describeNode', { backendNodeId: backendId, depth: 0 });
|
|
356
|
+
const { model } = await cdpClient.send(page, 'DOM.getBoxModel', { backendNodeId: backendId });
|
|
357
|
+
const x = model.content[0];
|
|
358
|
+
const y = model.content[1];
|
|
359
|
+
const width = model.content[2] - x;
|
|
360
|
+
const height = model.content[5] - y;
|
|
361
|
+
if (width <= 0 || height <= 0)
|
|
362
|
+
continue;
|
|
363
|
+
const attrs = new Map();
|
|
364
|
+
const rawAttrs = node.attributes ?? [];
|
|
365
|
+
for (let i = 0; i < rawAttrs.length - 1; i += 2) {
|
|
366
|
+
attrs.set(rawAttrs[i], rawAttrs[i + 1]);
|
|
367
|
+
}
|
|
368
|
+
jsBackendIds.add(backendId);
|
|
369
|
+
results.push({
|
|
370
|
+
backendDOMNodeId: backendId,
|
|
371
|
+
fieldName: attrs.get('aria-label') ||
|
|
372
|
+
attrs.get('name') ||
|
|
373
|
+
attrs.get('placeholder') ||
|
|
374
|
+
`field_${results.length}`,
|
|
375
|
+
tagName: node.localName || node.nodeName.toLowerCase(),
|
|
376
|
+
type: attrs.get('type'),
|
|
377
|
+
name: attrs.get('name'),
|
|
378
|
+
placeholder: attrs.get('placeholder'),
|
|
379
|
+
ariaLabel: attrs.get('aria-label') || undefined,
|
|
380
|
+
label: undefined,
|
|
381
|
+
rect: {
|
|
382
|
+
x: x + width / 2,
|
|
383
|
+
y: y + height / 2,
|
|
384
|
+
width,
|
|
385
|
+
height,
|
|
386
|
+
},
|
|
387
|
+
});
|
|
388
|
+
}
|
|
389
|
+
catch {
|
|
390
|
+
// Individual node resolution failure is non-fatal
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
catch {
|
|
396
|
+
// Shadow discovery is non-fatal — JS results are still valid
|
|
397
|
+
}
|
|
398
|
+
return results;
|
|
399
|
+
}
|
|
400
|
+
/**
|
|
401
|
+
* Resolve backendDOMNodeIds for elements tagged with a property during page.evaluate.
|
|
402
|
+
*
|
|
403
|
+
* Uses batched approach for efficiency:
|
|
404
|
+
* 1. Single Runtime.evaluate to collect all tagged elements
|
|
405
|
+
* 2. Runtime.getProperties to get individual object references
|
|
406
|
+
* 3. Parallel DOM.describeNode for all elements
|
|
407
|
+
*
|
|
408
|
+
* This replaces per-element resolution (O(n) round-trips) with batched resolution (O(1)).
|
|
409
|
+
*/
|
|
410
|
+
async function resolveBackendNodeIds(page, cdpClient, tagProperty, results) {
|
|
411
|
+
if (results.length === 0)
|
|
412
|
+
return;
|
|
413
|
+
// Skip if all elements already have valid backendDOMNodeIds (e.g., from CDP path)
|
|
414
|
+
if (results.every(r => r.backendDOMNodeId > 0))
|
|
415
|
+
return;
|
|
416
|
+
// Step 1: Single Runtime.evaluate to collect tagged elements in index order
|
|
417
|
+
// Uses deep walk to find elements inside open shadow roots
|
|
418
|
+
const { result: batchResult } = await cdpClient.send(page, 'Runtime.evaluate', {
|
|
419
|
+
expression: `(() => {
|
|
420
|
+
${shadow_dom_1.DEEP_WALK_ELEMENTS_JS}
|
|
421
|
+
var indexedEls = [];
|
|
422
|
+
var allElements = deepWalkElements(document.body);
|
|
423
|
+
for (var i = 0; i < allElements.length; i++) {
|
|
424
|
+
var el = allElements[i];
|
|
425
|
+
if (el.${tagProperty} !== undefined) {
|
|
426
|
+
indexedEls.push({ el: el, index: el.${tagProperty} });
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
indexedEls.sort(function(a, b) { return a.index - b.index; });
|
|
430
|
+
return indexedEls.map(function(e) { return e.el; });
|
|
431
|
+
})()`,
|
|
432
|
+
returnByValue: false,
|
|
433
|
+
});
|
|
434
|
+
if (!batchResult.objectId)
|
|
435
|
+
return;
|
|
436
|
+
// Step 2: Get array properties for individual element references
|
|
437
|
+
const { result: properties } = await cdpClient.send(page, 'Runtime.getProperties', {
|
|
438
|
+
objectId: batchResult.objectId,
|
|
439
|
+
ownProperties: true,
|
|
440
|
+
});
|
|
441
|
+
// Step 3: Parallel DOM.describeNode for all elements
|
|
442
|
+
const describePromises = [];
|
|
443
|
+
for (const prop of properties) {
|
|
444
|
+
const index = parseInt(prop.name, 10);
|
|
445
|
+
if (isNaN(index) || index >= results.length || !prop.value?.objectId)
|
|
446
|
+
continue;
|
|
447
|
+
if (results[index].backendDOMNodeId > 0)
|
|
448
|
+
continue; // already resolved
|
|
449
|
+
describePromises.push(cdpClient
|
|
450
|
+
.send(page, 'DOM.describeNode', {
|
|
451
|
+
objectId: prop.value.objectId,
|
|
452
|
+
})
|
|
453
|
+
.then(({ node }) => {
|
|
454
|
+
results[index].backendDOMNodeId = node.backendNodeId;
|
|
455
|
+
})
|
|
456
|
+
.catch(() => {
|
|
457
|
+
// Skip elements that can't be resolved
|
|
458
|
+
}));
|
|
459
|
+
}
|
|
460
|
+
await Promise.all(describePromises);
|
|
461
|
+
}
|
|
462
|
+
/**
|
|
463
|
+
* Get the current viewport-relative position of a tagged element.
|
|
464
|
+
*
|
|
465
|
+
* Useful for re-acquiring coordinates after DOM.scrollIntoViewIfNeeded,
|
|
466
|
+
* since scrolling changes viewport-relative positions.
|
|
467
|
+
*/
|
|
468
|
+
async function getTaggedElementRect(page, cdpClient, tagProperty, tagIndex, useCenter = true) {
|
|
469
|
+
// Uses deep walk to find elements inside open shadow roots
|
|
470
|
+
const { result } = await cdpClient.send(page, 'Runtime.evaluate', {
|
|
471
|
+
expression: `(() => {
|
|
472
|
+
${shadow_dom_1.DEEP_WALK_ELEMENTS_JS}
|
|
473
|
+
var allElements = deepWalkElements(document.body);
|
|
474
|
+
for (var i = 0; i < allElements.length; i++) {
|
|
475
|
+
var el = allElements[i];
|
|
476
|
+
if (el.${tagProperty} === ${tagIndex}) {
|
|
477
|
+
var rect = el.getBoundingClientRect();
|
|
478
|
+
return {
|
|
479
|
+
x: ${useCenter ? 'rect.x + rect.width / 2' : 'rect.x'},
|
|
480
|
+
y: ${useCenter ? 'rect.y + rect.height / 2' : 'rect.y'},
|
|
481
|
+
width: rect.width,
|
|
482
|
+
height: rect.height,
|
|
483
|
+
};
|
|
484
|
+
}
|
|
485
|
+
}
|
|
486
|
+
return null;
|
|
487
|
+
})()`,
|
|
488
|
+
returnByValue: true,
|
|
489
|
+
});
|
|
490
|
+
return result.value;
|
|
491
|
+
}
|
|
492
|
+
/**
|
|
493
|
+
* Clean up discovery tags from DOM elements.
|
|
494
|
+
*
|
|
495
|
+
* Call this after interaction is complete to avoid polluting the DOM.
|
|
496
|
+
*/
|
|
497
|
+
async function cleanupTags(page, tagProperty) {
|
|
498
|
+
await page.evaluate((prop) => {
|
|
499
|
+
// Deep walk to also clean tags inside open shadow roots
|
|
500
|
+
function deepWalk(root) {
|
|
501
|
+
const walker = document.createTreeWalker(root, NodeFilter.SHOW_ELEMENT);
|
|
502
|
+
let node = walker.nextNode();
|
|
503
|
+
while (node) {
|
|
504
|
+
const el = node;
|
|
505
|
+
if (el[prop] !== undefined) {
|
|
506
|
+
delete el[prop];
|
|
507
|
+
}
|
|
508
|
+
if (node.shadowRoot) {
|
|
509
|
+
deepWalk(node.shadowRoot);
|
|
510
|
+
}
|
|
511
|
+
node = walker.nextNode();
|
|
512
|
+
}
|
|
513
|
+
}
|
|
514
|
+
deepWalk(document.body);
|
|
515
|
+
}, tagProperty).catch(() => {
|
|
516
|
+
// Non-fatal: page may have navigated
|
|
517
|
+
});
|
|
518
|
+
}
|
|
519
|
+
//# sourceMappingURL=element-discovery.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"element-discovery.js","sourceRoot":"","sources":["../../src/utils/element-discovery.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"page-diagnostics.d.ts","sourceRoot":"","sources":["../../src/utils/page-diagnostics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAE3C,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,SAAS,GAAG,WAAW,GAAG,eAAe,GAAG,aAAa,CAAC;IAChE,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,eAAe,CAAC,
|
|
1
|
+
{"version":3,"file":"page-diagnostics.d.ts","sourceRoot":"","sources":["../../src/utils/page-diagnostics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAE3C,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,SAAS,GAAG,WAAW,GAAG,eAAe,GAAG,aAAa,CAAC;IAChE,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,eAAe,CAAC,CAqC7E;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CA6CjF"}
|