cbrowser 7.4.15 → 7.4.17

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.
@@ -16,6 +16,7 @@ export interface BugReport {
16
16
  url: string;
17
17
  selector?: string;
18
18
  screenshot?: string;
19
+ recommendation?: string;
19
20
  }
20
21
  /**
21
22
  * Autonomously explore a page and find bugs.
@@ -1 +1 @@
1
- {"version":3,"file":"bug-hunter.d.ts","sourceRoot":"","sources":["../../src/analysis/bug-hunter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAE9C,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,aAAa,GAAG,eAAe,GAAG,gBAAgB,GAAG,eAAe,GAAG,eAAe,GAAG,YAAY,CAAC;IAC5G,QAAQ,EAAE,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IACjD,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAC5B,OAAO,EAAE,QAAQ,EACjB,GAAG,EAAE,MAAM,EACX,OAAO,GAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAO,GACvE,OAAO,CAAC;IACT,IAAI,EAAE,SAAS,EAAE,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC,CAoGD"}
1
+ {"version":3,"file":"bug-hunter.d.ts","sourceRoot":"","sources":["../../src/analysis/bug-hunter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAE9C,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,aAAa,GAAG,eAAe,GAAG,gBAAgB,GAAG,eAAe,GAAG,eAAe,GAAG,YAAY,CAAC;IAC5G,QAAQ,EAAE,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IACjD,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAC5B,OAAO,EAAE,QAAQ,EACjB,GAAG,EAAE,MAAM,EACX,OAAO,GAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAO,GACvE,OAAO,CAAC;IACT,IAAI,EAAE,SAAS,EAAE,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC,CA4KD"}
@@ -37,10 +37,23 @@ async function huntBugs(browser, url, options = {}) {
37
37
  // Check for broken images
38
38
  document.querySelectorAll("img").forEach((img, i) => {
39
39
  if (!img.complete || img.naturalWidth === 0) {
40
+ const hasAlt = !!img.getAttribute("alt");
40
41
  issues.push({
41
42
  type: "missing-image",
42
43
  description: `Broken image: ${img.src || img.alt || "unknown"}`,
43
44
  selector: `img:nth-of-type(${i + 1})`,
45
+ recommendation: hasAlt
46
+ ? "Fix the image source URL or remove the broken image element"
47
+ : "Fix the image source URL and add an alt attribute for accessibility",
48
+ });
49
+ }
50
+ // Check images without alt text
51
+ if (!img.getAttribute("alt") && img.complete && img.naturalWidth > 0) {
52
+ issues.push({
53
+ type: "a11y-violation",
54
+ description: `Image missing alt attribute: ${img.src?.slice(-50) || "unknown"}`,
55
+ selector: `img:nth-of-type(${i + 1})`,
56
+ recommendation: "Add alt=\"descriptive text\" for screen readers, or alt=\"\" if decorative",
44
57
  });
45
58
  }
46
59
  });
@@ -51,16 +64,31 @@ async function huntBugs(browser, url, options = {}) {
51
64
  type: "broken-link",
52
65
  description: `Empty/invalid link: ${a.textContent?.slice(0, 50) || "no text"}`,
53
66
  selector: `a:nth-of-type(${i + 1})`,
67
+ recommendation: "Add a valid href or use a <button> for interactive actions",
68
+ });
69
+ }
70
+ // Check links without accessible text
71
+ if (!a.textContent?.trim() && !a.getAttribute("aria-label") && !a.querySelector("img[alt]")) {
72
+ issues.push({
73
+ type: "a11y-violation",
74
+ description: "Link with no accessible text",
75
+ selector: `a:nth-of-type(${i + 1})`,
76
+ recommendation: "Add aria-label, visible text content, or an img with alt text inside the link",
54
77
  });
55
78
  }
56
79
  });
57
80
  // Check for empty buttons
58
81
  document.querySelectorAll("button").forEach((btn, i) => {
59
- if (!btn.textContent?.trim() && !btn.getAttribute("aria-label")) {
82
+ const hasText = !!btn.textContent?.trim();
83
+ const hasAriaLabel = !!btn.getAttribute("aria-label");
84
+ const hasAriaLabelledby = !!btn.getAttribute("aria-labelledby");
85
+ const hasTitle = !!btn.getAttribute("title");
86
+ if (!hasText && !hasAriaLabel && !hasAriaLabelledby && !hasTitle) {
60
87
  issues.push({
61
88
  type: "a11y-violation",
62
89
  description: "Button with no accessible text",
63
90
  selector: `button:nth-of-type(${i + 1})`,
91
+ recommendation: "Add aria-label=\"action description\" or visible text content to the button",
64
92
  });
65
93
  }
66
94
  });
@@ -68,24 +96,67 @@ async function huntBugs(browser, url, options = {}) {
68
96
  document.querySelectorAll("input:not([type='hidden'])").forEach((input, i) => {
69
97
  const id = input.id;
70
98
  const hasLabel = id && document.querySelector(`label[for="${id}"]`);
71
- if (!hasLabel && !input.getAttribute("aria-label") && !input.getAttribute("placeholder")) {
99
+ const hasAriaLabel = !!input.getAttribute("aria-label");
100
+ const hasAriaLabelledby = !!input.getAttribute("aria-labelledby");
101
+ const hasPlaceholder = !!input.getAttribute("placeholder");
102
+ if (!hasLabel && !hasAriaLabel && !hasAriaLabelledby && !hasPlaceholder) {
72
103
  issues.push({
73
104
  type: "form-error",
74
- description: "Input without label or placeholder",
105
+ description: `Input without label (type=${input.getAttribute("type") || "text"})`,
75
106
  selector: `input:nth-of-type(${i + 1})`,
107
+ recommendation: "Add a <label for=\"id\"> element, or aria-label attribute for accessibility",
108
+ });
109
+ }
110
+ else if (!hasLabel && !hasAriaLabel && !hasAriaLabelledby && hasPlaceholder) {
111
+ issues.push({
112
+ type: "a11y-violation",
113
+ description: `Input relies only on placeholder for label (type=${input.getAttribute("type") || "text"})`,
114
+ selector: `input:nth-of-type(${i + 1})`,
115
+ recommendation: "Placeholder is not a substitute for a label. Add <label> or aria-label",
116
+ });
117
+ }
118
+ });
119
+ // Check for elements with click handlers but no keyboard access
120
+ document.querySelectorAll("[onclick]:not(a):not(button):not(input):not(select):not(textarea)").forEach((el, i) => {
121
+ const tag = el.tagName.toLowerCase();
122
+ const hasRole = !!el.getAttribute("role");
123
+ const hasTabindex = el.getAttribute("tabindex") !== null;
124
+ if (!hasRole || !hasTabindex) {
125
+ issues.push({
126
+ type: "a11y-violation",
127
+ description: `Non-interactive <${tag}> with onclick handler lacks keyboard access`,
128
+ selector: `${tag}:nth-of-type(${i + 1})`,
129
+ recommendation: `Add role="button" and tabindex="0" for keyboard access, or use a <button> element instead`,
76
130
  });
77
131
  }
78
132
  });
133
+ // Check for missing heading hierarchy
134
+ const headings = Array.from(document.querySelectorAll("h1, h2, h3, h4, h5, h6"));
135
+ let prevLevel = 0;
136
+ for (const h of headings) {
137
+ const level = parseInt(h.tagName[1]);
138
+ if (level > prevLevel + 1 && prevLevel > 0) {
139
+ issues.push({
140
+ type: "a11y-violation",
141
+ description: `Heading level skipped: <h${prevLevel}> to <h${level}>`,
142
+ selector: h.tagName.toLowerCase(),
143
+ recommendation: `Use sequential heading levels. Change to <h${prevLevel + 1}> or add missing intermediate headings`,
144
+ });
145
+ }
146
+ prevLevel = level;
147
+ }
79
148
  return issues;
80
149
  });
81
150
  // Add page issues to bugs
82
151
  for (const issue of pageIssues) {
152
+ const isPlaceholderOnly = issue.description.includes("relies only on placeholder");
83
153
  bugs.push({
84
154
  type: issue.type,
85
- severity: issue.type === "a11y-violation" ? "high" : "medium",
155
+ severity: isPlaceholderOnly ? "medium" : (issue.type === "a11y-violation" ? "high" : "medium"),
86
156
  description: issue.description,
87
157
  url,
88
158
  selector: issue.selector,
159
+ recommendation: issue.recommendation,
89
160
  });
90
161
  }
91
162
  // Add console errors
@@ -1 +1 @@
1
- {"version":3,"file":"bug-hunter.js","sourceRoot":"","sources":["../../src/analysis/bug-hunter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bug-hunter.js","sourceRoot":"","sources":["../../src/analysis/bug-hunter.ts"],"names":[],"mappings":"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"}
@@ -31,13 +31,33 @@ export declare function executeNaturalLanguageScript(browser: CBrowser, commands
31
31
  result?: unknown;
32
32
  error?: string;
33
33
  }>>;
34
+ /** Options for findElementByIntent */
35
+ export interface FindByIntentOptions {
36
+ verbose?: boolean;
37
+ debugDir?: string;
38
+ }
39
+ import type { SelectorStrategyType } from "../types.js";
34
40
  /**
35
- * AI-powered semantic element finding.
41
+ * AI-powered semantic element finding with accessibility-first selectors.
42
+ * Selector priority: ARIA > semantic HTML > ID > name > class.
43
+ * Returns selectorType, accessibilityScore, and alternatives.
44
+ *
36
45
  * Examples: "the cheapest product", "login form", "main navigation"
37
46
  */
38
- export declare function findElementByIntent(browser: CBrowser, intent: string): Promise<{
47
+ export declare function findElementByIntent(browser: CBrowser, intent: string, options?: FindByIntentOptions): Promise<{
39
48
  selector: string;
40
49
  confidence: number;
41
50
  description: string;
51
+ selectorType?: SelectorStrategyType;
52
+ accessibilityScore?: number;
53
+ alternatives?: Array<{
54
+ selector: string;
55
+ text: string;
56
+ tag: string;
57
+ type: SelectorStrategyType;
58
+ confidence: number;
59
+ }>;
60
+ aiSuggestion?: string;
61
+ debugScreenshot?: string;
42
62
  } | null>;
43
63
  //# sourceMappingURL=natural-language.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"natural-language.d.ts","sourceRoot":"","sources":["../../src/analysis/natural-language.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AA8C9C;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,GAAG,IAAI,CAW/G;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;IACxF,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC,CA4CD;AAED;;GAEG;AACH,wBAAsB,4BAA4B,CAChD,OAAO,EAAE,QAAQ,EACjB,QAAQ,EAAE,MAAM,EAAE,GACjB,OAAO,CAAC,KAAK,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAWzG;AAMD;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,QAAQ,EACjB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CAyH/E"}
1
+ {"version":3,"file":"natural-language.d.ts","sourceRoot":"","sources":["../../src/analysis/natural-language.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AA8C9C;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,GAAG,IAAI,CAW/G;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;IACxF,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC,CA4CD;AAED;;GAEG;AACH,wBAAsB,4BAA4B,CAChD,OAAO,EAAE,QAAQ,EACjB,QAAQ,EAAE,MAAM,EAAE,GACjB,OAAO,CAAC,KAAK,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAWzG;AAMD,sCAAsC;AACtC,MAAM,WAAW,mBAAmB;IAClC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAsKxD;;;;;;GAMG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,QAAQ,EACjB,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC;IACT,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,oBAAoB,CAAC;IACpC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,YAAY,CAAC,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,oBAAoB,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACtH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,GAAG,IAAI,CAAC,CA2JR"}
@@ -114,91 +114,253 @@ async function executeNaturalLanguageScript(browser, commands) {
114
114
  }
115
115
  return results;
116
116
  }
117
- // ============================================================================
118
- // Tier 4: Visual AI Understanding (v4.0.0)
119
- // ============================================================================
117
+ /** ARIA-first selector priority strategies (highest to lowest) */
118
+ const SELECTOR_PRIORITY = [
119
+ {
120
+ name: "aria-label",
121
+ extract: (el) => el.ariaLabel || null,
122
+ toSelector: (v) => `[aria-label="${v}"]`,
123
+ confidence: 0.95,
124
+ },
125
+ {
126
+ name: "aria-labelledby",
127
+ extract: (el) => el.ariaLabelledby || null,
128
+ toSelector: (v) => `[aria-labelledby="${v}"]`,
129
+ confidence: 0.93,
130
+ },
131
+ {
132
+ name: "role",
133
+ extract: (el) => el.role || null,
134
+ toSelector: (v, el) => el.text ? `${el.tag}[role="${v}"]` : `[role="${v}"]`,
135
+ confidence: 0.90,
136
+ },
137
+ {
138
+ name: "semantic-element",
139
+ extract: (el) => el.isSemanticElement ? el.tag : null,
140
+ toSelector: (v) => v,
141
+ confidence: 0.85,
142
+ },
143
+ {
144
+ name: "input-type",
145
+ extract: (el) => el.tag === "input" && el.type ? el.type : null,
146
+ toSelector: (v) => `input[type="${v}"]`,
147
+ confidence: 0.80,
148
+ },
149
+ {
150
+ name: "id",
151
+ extract: (el) => el.id || null,
152
+ toSelector: (v) => `#${v}`,
153
+ confidence: 0.85,
154
+ },
155
+ {
156
+ name: "data-testid",
157
+ extract: (el) => el.dataTestId || null,
158
+ toSelector: (v) => `[data-testid="${v}"]`,
159
+ confidence: 0.82,
160
+ },
161
+ {
162
+ name: "name",
163
+ extract: (el) => el.name || null,
164
+ toSelector: (v) => `[name="${v}"]`,
165
+ confidence: 0.80,
166
+ },
167
+ {
168
+ name: "css-class",
169
+ extract: (el) => {
170
+ const cls = el.classes.split(" ").find((c) => c.length > 3 && !c.includes("_") && !/^[a-z]{1,2}\d/.test(c));
171
+ return cls || null;
172
+ },
173
+ toSelector: (v) => `.${v}`,
174
+ confidence: 0.60,
175
+ },
176
+ ];
177
+ const SEMANTIC_ELEMENTS = new Set(["button", "nav", "main", "header", "footer", "article", "aside", "section", "form", "dialog"]);
178
+ /**
179
+ * Generate priority-ordered selectors for an element.
180
+ */
181
+ function generatePrioritySelectors(el) {
182
+ const candidates = [];
183
+ for (const strategy of SELECTOR_PRIORITY) {
184
+ const value = strategy.extract(el);
185
+ if (value) {
186
+ candidates.push({
187
+ selector: strategy.toSelector(value, el),
188
+ type: strategy.name,
189
+ confidence: strategy.confidence,
190
+ });
191
+ }
192
+ }
193
+ return candidates;
194
+ }
195
+ /**
196
+ * Calculate accessibility score (0-1) for an element.
197
+ */
198
+ function calculateAccessibilityScore(el) {
199
+ let score = 0;
200
+ if (el.ariaLabel)
201
+ score += 0.3;
202
+ if (el.role)
203
+ score += 0.2;
204
+ if (el.isSemanticElement)
205
+ score += 0.2;
206
+ // Label association check (for inputs)
207
+ if (el.tag === "input" || el.tag === "textarea" || el.tag === "select") {
208
+ if (el.ariaLabel || el.ariaLabelledby || el.placeholder)
209
+ score += 0.2;
210
+ }
211
+ else {
212
+ // Non-input elements get points for having text content
213
+ if (el.text.length > 0)
214
+ score += 0.2;
215
+ }
216
+ if (el.text.length > 0 || el.ariaLabel)
217
+ score += 0.1;
218
+ return Math.min(1, Math.round(score * 100) / 100);
219
+ }
220
+ /**
221
+ * Build result for a matched element with priority selectors.
222
+ */
223
+ function buildElementResult(el, description, baseConfidence) {
224
+ const candidates = generatePrioritySelectors(el);
225
+ const best = candidates[0] || { selector: el.tag, type: "nth-of-type", confidence: 0.3 };
226
+ return {
227
+ selector: best.selector,
228
+ confidence: Math.max(best.confidence, baseConfidence),
229
+ description,
230
+ selectorType: best.type,
231
+ accessibilityScore: calculateAccessibilityScore(el),
232
+ alternatives: candidates.slice(1).map(c => ({
233
+ selector: c.selector,
234
+ text: el.text.slice(0, 60),
235
+ tag: el.tag,
236
+ type: c.type,
237
+ confidence: c.confidence,
238
+ })),
239
+ };
240
+ }
120
241
  /**
121
- * AI-powered semantic element finding.
242
+ * AI-powered semantic element finding with accessibility-first selectors.
243
+ * Selector priority: ARIA > semantic HTML > ID > name > class.
244
+ * Returns selectorType, accessibilityScore, and alternatives.
245
+ *
122
246
  * Examples: "the cheapest product", "login form", "main navigation"
123
247
  */
124
- async function findElementByIntent(browser, intent) {
248
+ async function findElementByIntent(browser, intent, options = {}) {
125
249
  const page = await browser.getPage();
126
- // Extract page structure for AI analysis
250
+ // Extract enriched page structure with ARIA attributes
127
251
  const pageData = await page.evaluate(() => {
252
+ const semanticSet = new Set(["BUTTON", "NAV", "MAIN", "HEADER", "FOOTER", "ARTICLE", "ASIDE", "SECTION", "FORM", "DIALOG"]);
128
253
  const elements = [];
129
- // Find interactive elements
130
- const interactives = document.querySelectorAll("button, a, input, select, [role='button'], [onclick], .btn, .card, .product, [data-price], .price");
131
- interactives.forEach((el, i) => {
132
- const text = el.innerText?.trim().slice(0, 100) || "";
254
+ const interactives = document.querySelectorAll("button, a, input, select, textarea, [role='button'], [role='link'], [role='tab'], [role='menuitem'], [onclick], nav, main, header, footer, article, aside, section, form, .btn, .card, .product, [data-price], .price");
255
+ interactives.forEach((el) => {
256
+ const htmlEl = el;
257
+ const inputEl = el;
258
+ const text = htmlEl.innerText?.trim().slice(0, 100) || "";
133
259
  const priceMatch = text.match(/\$[\d,.]+|\d+\.\d{2}/);
134
260
  elements.push({
135
261
  tag: el.tagName.toLowerCase(),
136
262
  text,
137
- classes: el.className.toString().slice(0, 100),
138
- id: el.id,
263
+ classes: el.className?.toString().slice(0, 100) || "",
264
+ id: el.id || "",
139
265
  role: el.getAttribute("role") || "",
140
- type: el.type || "",
266
+ type: inputEl.type || "",
267
+ ariaLabel: el.getAttribute("aria-label") || "",
268
+ ariaLabelledby: el.getAttribute("aria-labelledby") || "",
269
+ name: el.getAttribute("name") || "",
270
+ title: el.getAttribute("title") || "",
271
+ dataTestId: el.getAttribute("data-testid") || "",
272
+ placeholder: inputEl.placeholder || "",
141
273
  price: priceMatch ? priceMatch[0] : undefined,
142
- selector: el.id ? `#${el.id}` : `${el.tagName.toLowerCase()}:nth-of-type(${i + 1})`,
274
+ isSemanticElement: semanticSet.has(el.tagName),
143
275
  });
144
276
  });
145
277
  return elements;
146
278
  });
147
- // Intent matching logic
148
279
  const intentLower = intent.toLowerCase();
149
280
  // Price-based intents
150
281
  if (intentLower.includes("cheapest") || intentLower.includes("lowest price")) {
151
282
  const withPrices = pageData.filter(el => el.price);
152
283
  if (withPrices.length > 0) {
153
- const sorted = withPrices.sort((a, b) => {
154
- const priceA = parseFloat(a.price.replace(/[$,]/g, ""));
155
- const priceB = parseFloat(b.price.replace(/[$,]/g, ""));
156
- return priceA - priceB;
157
- });
158
- return {
159
- selector: sorted[0].selector,
160
- confidence: 0.8,
161
- description: `Cheapest item: ${sorted[0].text.slice(0, 50)} (${sorted[0].price})`,
162
- };
284
+ const sorted = withPrices.sort((a, b) => parseFloat(a.price.replace(/[$,]/g, "")) - parseFloat(b.price.replace(/[$,]/g, "")));
285
+ return buildElementResult(sorted[0], `Cheapest item: ${sorted[0].text.slice(0, 50)} (${sorted[0].price})`, 0.8);
163
286
  }
164
287
  }
165
288
  if (intentLower.includes("most expensive") || intentLower.includes("highest price")) {
166
289
  const withPrices = pageData.filter(el => el.price);
167
290
  if (withPrices.length > 0) {
168
- const sorted = withPrices.sort((a, b) => {
169
- const priceA = parseFloat(a.price.replace(/[$,]/g, ""));
170
- const priceB = parseFloat(b.price.replace(/[$,]/g, ""));
171
- return priceB - priceA;
172
- });
173
- return {
174
- selector: sorted[0].selector,
175
- confidence: 0.8,
176
- description: `Most expensive: ${sorted[0].text.slice(0, 50)} (${sorted[0].price})`,
177
- };
291
+ const sorted = withPrices.sort((a, b) => parseFloat(b.price.replace(/[$,]/g, "")) - parseFloat(a.price.replace(/[$,]/g, "")));
292
+ return buildElementResult(sorted[0], `Most expensive: ${sorted[0].text.slice(0, 50)} (${sorted[0].price})`, 0.8);
178
293
  }
179
294
  }
180
295
  // Form-based intents
181
296
  if (intentLower.includes("login") || intentLower.includes("sign in")) {
182
- const loginBtn = pageData.find(el => el.text.toLowerCase().includes("login") ||
297
+ const loginEl = pageData.find(el => el.text.toLowerCase().includes("login") ||
183
298
  el.text.toLowerCase().includes("sign in") ||
299
+ el.ariaLabel.toLowerCase().includes("login") ||
300
+ el.ariaLabel.toLowerCase().includes("sign in") ||
184
301
  el.classes.includes("login"));
185
- if (loginBtn) {
186
- return { selector: loginBtn.selector, confidence: 0.9, description: "Login button/form" };
302
+ if (loginEl) {
303
+ return buildElementResult(loginEl, "Login button/form", 0.9);
187
304
  }
188
305
  }
189
306
  if (intentLower.includes("search")) {
190
- const searchInput = pageData.find(el => el.type === "search" ||
307
+ const searchEl = pageData.find(el => el.type === "search" ||
308
+ el.ariaLabel.toLowerCase().includes("search") ||
191
309
  el.classes.includes("search") ||
192
- el.id.includes("search"));
193
- if (searchInput) {
194
- return { selector: searchInput.selector, confidence: 0.9, description: "Search input" };
310
+ el.id.includes("search") ||
311
+ el.placeholder.toLowerCase().includes("search"));
312
+ if (searchEl) {
313
+ return buildElementResult(searchEl, "Search input", 0.9);
314
+ }
315
+ }
316
+ // Navigation intent
317
+ if (intentLower.includes("navigation") || intentLower.includes("nav") || intentLower.includes("menu")) {
318
+ const navEl = pageData.find(el => el.tag === "nav" || el.role === "navigation" || el.role === "menu" || el.ariaLabel.toLowerCase().includes("nav"));
319
+ if (navEl) {
320
+ return buildElementResult(navEl, "Navigation", 0.9);
195
321
  }
196
322
  }
323
+ // ARIA-label matching (new: search by aria-label content)
324
+ const ariaMatch = pageData.find(el => el.ariaLabel.toLowerCase().includes(intentLower));
325
+ if (ariaMatch) {
326
+ return buildElementResult(ariaMatch, `ARIA match: ${ariaMatch.ariaLabel.slice(0, 50)}`, 0.85);
327
+ }
197
328
  // Text-based matching
198
329
  const textMatch = pageData.find(el => el.text.toLowerCase().includes(intentLower) ||
199
330
  el.classes.toLowerCase().includes(intentLower));
200
331
  if (textMatch) {
201
- return { selector: textMatch.selector, confidence: 0.7, description: `Matched: ${textMatch.text.slice(0, 50)}` };
332
+ return buildElementResult(textMatch, `Matched: ${textMatch.text.slice(0, 50)}`, 0.7);
333
+ }
334
+ // No match found — return verbose data if requested
335
+ if (options.verbose) {
336
+ const alternatives = pageData
337
+ .filter(el => el.text.length > 0 || el.ariaLabel.length > 0)
338
+ .slice(0, 10)
339
+ .map(el => {
340
+ const intentWords = intentLower.split(/\s+/);
341
+ const searchText = `${el.text} ${el.ariaLabel}`.toLowerCase();
342
+ const matchingWords = intentWords.filter(w => w.length > 2 && searchText.includes(w));
343
+ const confidence = intentWords.length > 0 ? matchingWords.length / intentWords.length * 0.6 : 0;
344
+ const selectors = generatePrioritySelectors(el);
345
+ const best = selectors[0];
346
+ return {
347
+ selector: best?.selector || el.tag,
348
+ text: (el.ariaLabel || el.text).slice(0, 60),
349
+ tag: el.tag,
350
+ type: (best?.type || "nth-of-type"),
351
+ confidence: Math.round(confidence * 100) / 100,
352
+ };
353
+ })
354
+ .sort((a, b) => b.confidence - a.confidence);
355
+ const list = alternatives.slice(0, 8).map(a => ` • ${a.tag}: "${a.text}" (${a.type}) → ${a.selector}`).join("\n");
356
+ const aiSuggestion = `No element matching "${intent}" found.\n\nAvailable interactive elements:\n${list}\n\nTry using the exact text, aria-label, or a more specific description.`;
357
+ return {
358
+ selector: "",
359
+ confidence: 0,
360
+ description: "No match found",
361
+ alternatives,
362
+ aiSuggestion,
363
+ };
202
364
  }
203
365
  return null;
204
366
  }
@@ -1 +1 @@
1
- {"version":3,"file":"natural-language.js","sourceRoot":"","sources":["../../src/analysis/natural-language.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"natural-language.js","sourceRoot":"","sources":["../../src/analysis/natural-language.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;AAmDH,oDAWC;AAKD,wDAiDC;AAKD,oEAcC;AAyLD,kDAwKC;AApeD;;GAEG;AACH,MAAM,WAAW,GAIZ;IACH,aAAa;IACb,EAAE,OAAO,EAAE,4CAA4C,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE;IAC9G,EAAE,OAAO,EAAE,mBAAmB,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE;IACrE,EAAE,OAAO,EAAE,sBAAsB,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE;IAC3E,EAAE,OAAO,EAAE,mBAAmB,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE;IAEvE,WAAW;IACX,EAAE,OAAO,EAAE,iDAAiD,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE;IACrH,EAAE,OAAO,EAAE,qDAAqD,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE;IACzH,EAAE,OAAO,EAAE,oCAAoC,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE;IAExG,eAAe;IACf,EAAE,OAAO,EAAE,wGAAwG,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE;IACxL,EAAE,OAAO,EAAE,yFAAyF,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE;IAEzK,YAAY;IACZ,EAAE,OAAO,EAAE,sEAAsE,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE;IACxJ,EAAE,OAAO,EAAE,2BAA2B,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE;IAE/F,cAAc;IACd,EAAE,OAAO,EAAE,4DAA4D,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE;IACvI,EAAE,OAAO,EAAE,yCAAyC,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE;IAEjG,UAAU;IACV,EAAE,OAAO,EAAE,oDAAoD,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE;IACjH,EAAE,OAAO,EAAE,6CAA6C,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE;IACtH,EAAE,OAAO,EAAE,yDAAyD,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE;IAE/H,YAAY;IACZ,EAAE,OAAO,EAAE,+CAA+C,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE;IACrH,EAAE,OAAO,EAAE,oCAAoC,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC,EAAE;IAEnI,aAAa;IACb,EAAE,OAAO,EAAE,sDAAsD,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE;CACzH,CAAC;AAEF;;GAEG;AACH,SAAgB,oBAAoB,CAAC,OAAe;IAClD,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAE/B,KAAK,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,WAAW,EAAE,CAAC;QACvD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACrC,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5C,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,sBAAsB,CAAC,OAAiB,EAAE,OAAe;IAM7E,MAAM,MAAM,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAE7C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,6BAA6B,OAAO,GAAG,EAAE,CAAC;IAC/F,CAAC;IAED,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;IAElC,IAAI,CAAC;QACH,IAAI,MAAe,CAAC;QAEpB,QAAQ,MAAM,EAAE,CAAC;YACf,KAAK,UAAU;gBACb,MAAM,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBAC5C,MAAM;YACR,KAAK,OAAO;gBACV,MAAM,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;gBAC9C,MAAM;YACR,KAAK,MAAM;gBACT,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC3D,MAAM;YACR,KAAK,YAAY;gBACf,MAAM,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,IAAI,SAAS,CAAC,CAAC;gBAC5D,MAAM;YACR,KAAK,MAAM;gBACT,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC3D,MAAM,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;gBACzC,MAAM;YACR,KAAK,aAAa;gBAChB,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;gBACvE,MAAM,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,IAAI,EAAE,CAAC;gBACrD,MAAM;YACR,KAAK,SAAS;gBACZ,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBAC5C,MAAM;YACR;gBACE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,uBAAuB,MAAM,EAAE,EAAE,CAAC;QAC9E,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAC3C,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QAChB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;IACtD,CAAC;AACH,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,4BAA4B,CAChD,OAAiB,EACjB,QAAkB;IAElB,MAAM,OAAO,GAAG,EAAE,CAAC;IAEnB,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS,CAAC,gCAAgC;QAC1F,MAAM,MAAM,GAAG,MAAM,sBAAsB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC9D,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;QACrC,IAAI,CAAC,MAAM,CAAC,OAAO;YAAE,MAAM,CAAC,sBAAsB;IACpD,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAuCD,kEAAkE;AAClE,MAAM,iBAAiB,GAKlB;IACH;QACE,IAAI,EAAE,YAAY;QAClB,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,SAAS,IAAI,IAAI;QACrC,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,gBAAgB,CAAC,IAAI;QACxC,UAAU,EAAE,IAAI;KACjB;IACD;QACE,IAAI,EAAE,iBAAiB;QACvB,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,cAAc,IAAI,IAAI;QAC1C,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,qBAAqB,CAAC,IAAI;QAC7C,UAAU,EAAE,IAAI;KACjB;IACD;QACE,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,IAAI,IAAI;QAChC,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI;QAC3E,UAAU,EAAE,IAAI;KACjB;IACD;QACE,IAAI,EAAE,kBAAkB;QACxB,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI;QACrD,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACpB,UAAU,EAAE,IAAI;KACjB;IACD;QACE,IAAI,EAAE,YAAY;QAClB,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,KAAK,OAAO,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI;QAC/D,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI;QACvC,UAAU,EAAE,IAAI;KACjB;IACD;QACE,IAAI,EAAE,IAAI;QACV,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,IAAI;QAC9B,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE;QAC1B,UAAU,EAAE,IAAI;KACjB;IACD;QACE,IAAI,EAAE,aAAa;QACnB,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,UAAU,IAAI,IAAI;QACtC,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI;QACzC,UAAU,EAAE,IAAI;KACjB;IACD;QACE,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,IAAI,IAAI;QAChC,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI;QAClC,UAAU,EAAE,IAAI;KACjB;IACD;QACE,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE;YACd,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACpH,OAAO,GAAG,IAAI,IAAI,CAAC;QACrB,CAAC;QACD,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE;QAC1B,UAAU,EAAE,IAAI;KACjB;CACF,CAAC;AAEF,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;AAElI;;GAEG;AACH,SAAS,yBAAyB,CAAC,EAAuB;IACxD,MAAM,UAAU,GAAwB,EAAE,CAAC;IAC3C,KAAK,MAAM,QAAQ,IAAI,iBAAiB,EAAE,CAAC;QACzC,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACnC,IAAI,KAAK,EAAE,CAAC;YACV,UAAU,CAAC,IAAI,CAAC;gBACd,QAAQ,EAAE,QAAQ,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,CAAC;gBACxC,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,UAAU,EAAE,QAAQ,CAAC,UAAU;aAChC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;GAEG;AACH,SAAS,2BAA2B,CAAC,EAAuB;IAC1D,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,EAAE,CAAC,SAAS;QAAE,KAAK,IAAI,GAAG,CAAC;IAC/B,IAAI,EAAE,CAAC,IAAI;QAAE,KAAK,IAAI,GAAG,CAAC;IAC1B,IAAI,EAAE,CAAC,iBAAiB;QAAE,KAAK,IAAI,GAAG,CAAC;IACvC,uCAAuC;IACvC,IAAI,EAAE,CAAC,GAAG,KAAK,OAAO,IAAI,EAAE,CAAC,GAAG,KAAK,UAAU,IAAI,EAAE,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;QACvE,IAAI,EAAE,CAAC,SAAS,IAAI,EAAE,CAAC,cAAc,IAAI,EAAE,CAAC,WAAW;YAAE,KAAK,IAAI,GAAG,CAAC;IACxE,CAAC;SAAM,CAAC;QACN,wDAAwD;QACxD,IAAI,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;YAAE,KAAK,IAAI,GAAG,CAAC;IACvC,CAAC;IACD,IAAI,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,SAAS;QAAE,KAAK,IAAI,GAAG,CAAC;IACrD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;AACpD,CAAC;AAED;;GAEG;AACH,SAAS,kBAAkB,CACzB,EAAuB,EACvB,WAAmB,EACnB,cAAsB;IAStB,MAAM,UAAU,GAAG,yBAAyB,CAAC,EAAE,CAAC,CAAC;IACjD,MAAM,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,aAAqC,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC;IAEjH,OAAO;QACL,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC;QACrD,WAAW;QACX,YAAY,EAAE,IAAI,CAAC,IAAI;QACvB,kBAAkB,EAAE,2BAA2B,CAAC,EAAE,CAAC;QACnD,YAAY,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAC1C,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;YAC1B,GAAG,EAAE,EAAE,CAAC,GAAG;YACX,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,UAAU,EAAE,CAAC,CAAC,UAAU;SACzB,CAAC,CAAC;KACJ,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACI,KAAK,UAAU,mBAAmB,CACvC,OAAiB,EACjB,MAAc,EACd,UAA+B,EAAE;IAWjC,MAAM,IAAI,GAAG,MAAO,OAAe,CAAC,OAAO,EAAE,CAAC;IAE9C,uDAAuD;IACvD,MAAM,QAAQ,GAA0B,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE;QAC/D,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;QAC5H,MAAM,QAAQ,GAIT,EAAE,CAAC;QAER,MAAM,YAAY,GAAG,QAAQ,CAAC,gBAAgB,CAC5C,uNAAuN,CACxN,CAAC;QAEF,YAAY,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE;YAC1B,MAAM,MAAM,GAAG,EAAiB,CAAC;YACjC,MAAM,OAAO,GAAG,EAAsB,CAAC;YACvC,MAAM,IAAI,GAAG,MAAM,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC;YAC1D,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;YAEtD,QAAQ,CAAC,IAAI,CAAC;gBACZ,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE;gBAC7B,IAAI;gBACJ,OAAO,EAAE,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,EAAE;gBACrD,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE;gBACf,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE;gBACnC,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,EAAE;gBACxB,SAAS,EAAE,EAAE,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,EAAE;gBAC9C,cAAc,EAAE,EAAE,CAAC,YAAY,CAAC,iBAAiB,CAAC,IAAI,EAAE;gBACxD,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE;gBACnC,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE;gBACrC,UAAU,EAAE,EAAE,CAAC,YAAY,CAAC,aAAa,CAAC,IAAI,EAAE;gBAChD,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,EAAE;gBACtC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;gBAC7C,iBAAiB,EAAE,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC;aAC/C,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,OAAO,QAAQ,CAAC;IAClB,CAAC,CAAC,CAAC;IAEH,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;IAEzC,sBAAsB;IACtB,IAAI,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;QAC7E,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;QACnD,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACtC,UAAU,CAAC,CAAC,CAAC,KAAM,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,KAAM,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CACtF,CAAC;YACF,OAAO,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,kBAAkB,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,GAAG,CAAC,CAAC;QAClH,CAAC;IACH,CAAC;IAED,IAAI,WAAW,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;QACpF,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;QACnD,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACtC,UAAU,CAAC,CAAC,CAAC,KAAM,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,KAAM,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CACtF,CAAC;YACF,OAAO,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,mBAAmB,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,GAAG,CAAC,CAAC;QACnH,CAAC;IACH,CAAC;IAED,qBAAqB;IACrB,IAAI,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QACrE,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CACjC,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;YACvC,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC;YACzC,EAAE,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;YAC5C,EAAE,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC;YAC9C,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAC7B,CAAC;QACF,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,kBAAkB,CAAC,OAAO,EAAE,mBAAmB,EAAE,GAAG,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC;IAED,IAAI,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACnC,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAClC,EAAE,CAAC,IAAI,KAAK,QAAQ;YACpB,EAAE,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAC7C,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAC7B,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC;YACxB,EAAE,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAChD,CAAC;QACF,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,kBAAkB,CAAC,QAAQ,EAAE,cAAc,EAAE,GAAG,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;IAED,oBAAoB;IACpB,IAAI,WAAW,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACtG,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAC/B,EAAE,CAAC,GAAG,KAAK,KAAK,IAAI,EAAE,CAAC,IAAI,KAAK,YAAY,IAAI,EAAE,CAAC,IAAI,KAAK,MAAM,IAAI,EAAE,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CACjH,CAAC;QACF,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,kBAAkB,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;IAED,0DAA0D;IAC1D,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CACnC,EAAE,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,CACjD,CAAC;IACF,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,kBAAkB,CAAC,SAAS,EAAE,eAAe,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IAChG,CAAC;IAED,sBAAsB;IACtB,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CACnC,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC;QAC3C,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,CAC/C,CAAC;IACF,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,kBAAkB,CAAC,SAAS,EAAE,YAAY,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IACvF,CAAC;IAED,oDAAoD;IACpD,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,YAAY,GAAG,QAAQ;aAC1B,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;aAC3D,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;aACZ,GAAG,CAAC,EAAE,CAAC,EAAE;YACR,MAAM,WAAW,GAAG,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC7C,MAAM,UAAU,GAAG,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,SAAS,EAAE,CAAC,WAAW,EAAE,CAAC;YAC9D,MAAM,aAAa,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;YACtF,MAAM,UAAU,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,GAAG,WAAW,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAChG,MAAM,SAAS,GAAG,yBAAyB,CAAC,EAAE,CAAC,CAAC;YAChD,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;YAC1B,OAAO;gBACL,QAAQ,EAAE,IAAI,EAAE,QAAQ,IAAI,EAAE,CAAC,GAAG;gBAClC,IAAI,EAAE,CAAC,EAAE,CAAC,SAAS,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;gBAC5C,GAAG,EAAE,EAAE,CAAC,GAAG;gBACX,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,IAAI,aAAa,CAAyB;gBAC3D,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,GAAG,CAAC,GAAG,GAAG;aAC/C,CAAC;QACJ,CAAC,CAAC;aACD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC;QAE/C,MAAM,IAAI,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnH,MAAM,YAAY,GAAG,wBAAwB,MAAM,gDAAgD,IAAI,2EAA2E,CAAC;QAEnL,OAAO;YACL,QAAQ,EAAE,EAAE;YACZ,UAAU,EAAE,CAAC;YACb,WAAW,EAAE,gBAAgB;YAC7B,YAAY;YACZ,YAAY;SACb,CAAC;IACJ,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
package/dist/browser.d.ts CHANGED
@@ -141,11 +141,16 @@ export declare class CBrowser {
141
141
  */
142
142
  click(selector: string, options?: {
143
143
  force?: boolean;
144
+ verbose?: boolean;
145
+ debugDir?: string;
144
146
  }): Promise<ClickResult>;
145
147
  /**
146
148
  * Fill a form field.
147
149
  */
148
- fill(selector: string, value: string): Promise<ClickResult>;
150
+ fill(selector: string, value: string, options?: {
151
+ verbose?: boolean;
152
+ debugDir?: string;
153
+ }): Promise<ClickResult>;
149
154
  /**
150
155
  * Click with smart retry - automatically retries with alternative selectors on failure.
151
156
  */
@@ -250,6 +255,27 @@ export declare class CBrowser {
250
255
  * Generate Playwright test code from tests.
251
256
  */
252
257
  private generatePlaywrightCode;
258
+ /**
259
+ * Get all clickable elements on the page for verbose output.
260
+ */
261
+ private getAvailableClickables;
262
+ /**
263
+ * Get all input fields on the page for verbose output.
264
+ */
265
+ private getAvailableInputs;
266
+ /**
267
+ * Generate AI suggestion for a failed click.
268
+ */
269
+ private generateClickSuggestion;
270
+ /**
271
+ * Generate AI suggestion for a failed fill.
272
+ */
273
+ private generateFillSuggestion;
274
+ /**
275
+ * Capture a debug screenshot with element highlighting.
276
+ * Green outlines = available alternatives, Red outline = attempted selector.
277
+ */
278
+ private captureDebugScreenshot;
253
279
  /**
254
280
  * Analyze a failure and provide AI-powered suggestions.
255
281
  */