@enricai/barnacle 1.12.78 → 1.12.80

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (168) hide show
  1. package/dist/api/helpers/reply.d.ts.map +1 -1
  2. package/dist/api/helpers/reply.js +5 -2
  3. package/dist/api/helpers/reply.js.map +1 -1
  4. package/dist/config.d.ts +10 -0
  5. package/dist/config.d.ts.map +1 -1
  6. package/dist/config.js +2 -0
  7. package/dist/config.js.map +1 -1
  8. package/dist/lib/llm/judge.d.ts.map +1 -1
  9. package/dist/lib/llm/judge.js +6 -1
  10. package/dist/lib/llm/judge.js.map +1 -1
  11. package/dist/lib/llm/judges/verify-step-advanced.d.ts +30 -0
  12. package/dist/lib/llm/judges/verify-step-advanced.d.ts.map +1 -0
  13. package/dist/lib/llm/judges/verify-step-advanced.js +62 -0
  14. package/dist/lib/llm/judges/verify-step-advanced.js.map +1 -0
  15. package/dist/lib/llm/judges/verify-submit.d.ts +7 -1
  16. package/dist/lib/llm/judges/verify-submit.d.ts.map +1 -1
  17. package/dist/lib/llm/judges/verify-submit.js +29 -8
  18. package/dist/lib/llm/judges/verify-submit.js.map +1 -1
  19. package/dist/lib/llm/schemas.d.ts +8 -0
  20. package/dist/lib/llm/schemas.d.ts.map +1 -1
  21. package/dist/lib/llm/schemas.js +21 -13
  22. package/dist/lib/llm/schemas.js.map +1 -1
  23. package/dist/lib/logging.d.ts +7 -0
  24. package/dist/lib/logging.d.ts.map +1 -1
  25. package/dist/lib/logging.js +19 -1
  26. package/dist/lib/logging.js.map +1 -1
  27. package/dist/lib/pii-redaction.d.ts +104 -0
  28. package/dist/lib/pii-redaction.d.ts.map +1 -0
  29. package/dist/lib/pii-redaction.js +397 -0
  30. package/dist/lib/pii-redaction.js.map +1 -0
  31. package/dist/lib/random.d.ts +3 -1
  32. package/dist/lib/random.d.ts.map +1 -1
  33. package/dist/lib/random.js +7 -2
  34. package/dist/lib/random.js.map +1 -1
  35. package/dist/lib/telemetry/beacon-capture.d.ts.map +1 -1
  36. package/dist/lib/telemetry/beacon-capture.js +2 -0
  37. package/dist/lib/telemetry/beacon-capture.js.map +1 -1
  38. package/dist/lib/telemetry/call-capture.d.ts.map +1 -1
  39. package/dist/lib/telemetry/call-capture.js +4 -1
  40. package/dist/lib/telemetry/call-capture.js.map +1 -1
  41. package/dist/lib/telemetry/submission-capture.d.ts +11 -1
  42. package/dist/lib/telemetry/submission-capture.d.ts.map +1 -1
  43. package/dist/lib/telemetry/submission-capture.js +32 -3
  44. package/dist/lib/telemetry/submission-capture.js.map +1 -1
  45. package/dist/plugins/config-plugin.d.ts +8 -0
  46. package/dist/plugins/config-plugin.d.ts.map +1 -1
  47. package/dist/plugins/config-plugin.js +6 -1
  48. package/dist/plugins/config-plugin.js.map +1 -1
  49. package/dist/plugins/discover.d.ts.map +1 -1
  50. package/dist/plugins/discover.js +2 -0
  51. package/dist/plugins/discover.js.map +1 -1
  52. package/dist/plugins/loader.d.ts.map +1 -1
  53. package/dist/plugins/loader.js +23 -6
  54. package/dist/plugins/loader.js.map +1 -1
  55. package/dist/scraper/actionable-visibility-expr.d.ts +12 -0
  56. package/dist/scraper/actionable-visibility-expr.d.ts.map +1 -0
  57. package/dist/scraper/actionable-visibility-expr.js +22 -0
  58. package/dist/scraper/actionable-visibility-expr.js.map +1 -0
  59. package/dist/scraper/active-page.d.ts +18 -0
  60. package/dist/scraper/active-page.d.ts.map +1 -0
  61. package/dist/scraper/active-page.js +53 -0
  62. package/dist/scraper/active-page.js.map +1 -0
  63. package/dist/scraper/browser-click-expr.d.ts +1 -1
  64. package/dist/scraper/browser-click-expr.d.ts.map +1 -1
  65. package/dist/scraper/browser-click-expr.js +2 -6
  66. package/dist/scraper/browser-click-expr.js.map +1 -1
  67. package/dist/scraper/click-settle.d.ts +19 -0
  68. package/dist/scraper/click-settle.d.ts.map +1 -0
  69. package/dist/scraper/click-settle.js +65 -0
  70. package/dist/scraper/click-settle.js.map +1 -0
  71. package/dist/scraper/deep-locator-candidates.d.ts +20 -1
  72. package/dist/scraper/deep-locator-candidates.d.ts.map +1 -1
  73. package/dist/scraper/deep-locator-candidates.js +110 -22
  74. package/dist/scraper/deep-locator-candidates.js.map +1 -1
  75. package/dist/scraper/deep-locator-scan.d.ts +12 -0
  76. package/dist/scraper/deep-locator-scan.d.ts.map +1 -1
  77. package/dist/scraper/deep-locator-scan.js +42 -13
  78. package/dist/scraper/deep-locator-scan.js.map +1 -1
  79. package/dist/scraper/errors.d.ts +10 -0
  80. package/dist/scraper/errors.d.ts.map +1 -1
  81. package/dist/scraper/errors.js +19 -1
  82. package/dist/scraper/errors.js.map +1 -1
  83. package/dist/scraper/flow-runner.d.ts +355 -6
  84. package/dist/scraper/flow-runner.d.ts.map +1 -1
  85. package/dist/scraper/flow-runner.js +2255 -350
  86. package/dist/scraper/flow-runner.js.map +1 -1
  87. package/dist/scraper/navigate.d.ts +3 -3
  88. package/dist/scraper/navigate.js +4 -4
  89. package/dist/scraper/navigate.js.map +1 -1
  90. package/dist/scraper/phantom-click.d.ts +34 -2
  91. package/dist/scraper/phantom-click.d.ts.map +1 -1
  92. package/dist/scraper/phantom-click.js +80 -6
  93. package/dist/scraper/phantom-click.js.map +1 -1
  94. package/dist/scraper/pool.d.ts.map +1 -1
  95. package/dist/scraper/pool.js +8 -1
  96. package/dist/scraper/pool.js.map +1 -1
  97. package/dist/scraper/quoted-spans.d.ts +35 -0
  98. package/dist/scraper/quoted-spans.d.ts.map +1 -0
  99. package/dist/scraper/quoted-spans.js +83 -0
  100. package/dist/scraper/quoted-spans.js.map +1 -0
  101. package/dist/scraper/retry.d.ts +1 -1
  102. package/dist/scraper/retry.d.ts.map +1 -1
  103. package/dist/scraper/retry.js +5 -1
  104. package/dist/scraper/retry.js.map +1 -1
  105. package/dist/scraper/session-browserbase.d.ts +4 -2
  106. package/dist/scraper/session-browserbase.d.ts.map +1 -1
  107. package/dist/scraper/session-browserbase.js +63 -20
  108. package/dist/scraper/session-browserbase.js.map +1 -1
  109. package/dist/scraper/session-shared.d.ts +5 -0
  110. package/dist/scraper/session-shared.d.ts.map +1 -1
  111. package/dist/scraper/session-shared.js.map +1 -1
  112. package/dist/scraper/session-steel.d.ts.map +1 -1
  113. package/dist/scraper/session-steel.js +16 -2
  114. package/dist/scraper/session-steel.js.map +1 -1
  115. package/dist/scraper/session-teardown.d.ts +31 -1
  116. package/dist/scraper/session-teardown.d.ts.map +1 -1
  117. package/dist/scraper/session-teardown.js +60 -4
  118. package/dist/scraper/session-teardown.js.map +1 -1
  119. package/dist/scraper/spa-readiness.d.ts +13 -1
  120. package/dist/scraper/spa-readiness.d.ts.map +1 -1
  121. package/dist/scraper/spa-readiness.js +31 -1
  122. package/dist/scraper/spa-readiness.js.map +1 -1
  123. package/dist/scraper/stagehand-guard.d.ts +8 -3
  124. package/dist/scraper/stagehand-guard.d.ts.map +1 -1
  125. package/dist/scraper/stagehand-guard.js +181 -13
  126. package/dist/scraper/stagehand-guard.js.map +1 -1
  127. package/dist/scraper/submit-control.d.ts +2 -2
  128. package/dist/scraper/submit-control.d.ts.map +1 -1
  129. package/dist/scraper/submit-control.js +5 -21
  130. package/dist/scraper/submit-control.js.map +1 -1
  131. package/dist/scraper/target-resolution-diagnostic.d.ts.map +1 -1
  132. package/dist/scraper/target-resolution-diagnostic.js +6 -11
  133. package/dist/scraper/target-resolution-diagnostic.js.map +1 -1
  134. package/dist/scraper/transient-provider-error.d.ts +19 -0
  135. package/dist/scraper/transient-provider-error.d.ts.map +1 -0
  136. package/dist/scraper/transient-provider-error.js +59 -0
  137. package/dist/scraper/transient-provider-error.js.map +1 -0
  138. package/dist/scraper/trusted-click.d.ts +122 -0
  139. package/dist/scraper/trusted-click.d.ts.map +1 -0
  140. package/dist/scraper/trusted-click.js +201 -0
  141. package/dist/scraper/trusted-click.js.map +1 -0
  142. package/dist/scraper/upload-affordance-expr.d.ts +33 -0
  143. package/dist/scraper/upload-affordance-expr.d.ts.map +1 -0
  144. package/dist/scraper/upload-affordance-expr.js +91 -0
  145. package/dist/scraper/upload-affordance-expr.js.map +1 -0
  146. package/dist/scripts/recon-browser.d.ts +30 -2
  147. package/dist/scripts/recon-browser.d.ts.map +1 -1
  148. package/dist/scripts/recon-browser.js +133 -27
  149. package/dist/scripts/recon-browser.js.map +1 -1
  150. package/dist/scripts/recon-capture-rebind.d.ts +11 -0
  151. package/dist/scripts/recon-capture-rebind.d.ts.map +1 -0
  152. package/dist/scripts/recon-capture-rebind.js +26 -0
  153. package/dist/scripts/recon-capture-rebind.js.map +1 -0
  154. package/dist/scripts/recon-generate.d.ts +159 -8
  155. package/dist/scripts/recon-generate.d.ts.map +1 -1
  156. package/dist/scripts/recon-generate.js +998 -182
  157. package/dist/scripts/recon-generate.js.map +1 -1
  158. package/dist/scripts/recon-shared.d.ts +7 -0
  159. package/dist/scripts/recon-shared.d.ts.map +1 -1
  160. package/dist/scripts/recon-shared.js +19 -0
  161. package/dist/scripts/recon-shared.js.map +1 -1
  162. package/dist/site-plugin.d.ts +8 -0
  163. package/dist/site-plugin.d.ts.map +1 -1
  164. package/dist/types/pii-redaction.d.ts +39 -0
  165. package/dist/types/pii-redaction.d.ts.map +1 -0
  166. package/dist/types/pii-redaction.js +3 -0
  167. package/dist/types/pii-redaction.js.map +1 -0
  168. package/package.json +14 -1
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ACTIONABLE_VISIBILITY_EXPR = void 0;
4
+ /**
5
+ * Single browser-context predicate (as an evaluable function-expression
6
+ * string) deciding whether an element is a legitimate click target. It
7
+ * exists so every click-target consumer shares one definition: an
8
+ * `aria-hidden="true"` decorative duplicate sharing text with the real
9
+ * control must never be scanned, ranked or clicked. Only the element's own
10
+ * attribute is checked — ancestors commonly carry `aria-hidden` on app-root
11
+ * containers behind modals — and `tabindex="-1"` is deliberately not
12
+ * excluded because focus-managed custom controls use it legitimately.
13
+ */
14
+ exports.ACTIONABLE_VISIBILITY_EXPR = `((el) => {
15
+ if (!el) return false;
16
+ if (el.getAttribute("aria-hidden") === "true") return false;
17
+ const rect = el.getBoundingClientRect();
18
+ if (rect.width === 0 && rect.height === 0) return false;
19
+ const style = getComputedStyle(el);
20
+ return style.display !== "none" && style.visibility !== "hidden";
21
+ })`;
22
+ //# sourceMappingURL=actionable-visibility-expr.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actionable-visibility-expr.js","sourceRoot":"","sources":["../../src/scraper/actionable-visibility-expr.ts"],"names":[],"mappings":";;;AAAA;;;;;;;;;GASG;AACU,QAAA,0BAA0B,GAAG;;;;;;;GAOvC,CAAC"}
@@ -0,0 +1,18 @@
1
+ export interface FollowablePage {
2
+ waitForLoadState?(state: "domcontentloaded", timeoutMs?: number): Promise<void>;
3
+ url?(): string;
4
+ close?(): Promise<void>;
5
+ }
6
+ export interface FollowableContext<P extends FollowablePage> {
7
+ pages(): P[];
8
+ setActivePage?(page: P): void;
9
+ }
10
+ /**
11
+ * Single source of truth for which page the run drives after a click: when the
12
+ * click opened a new browsing context (non-self anchor target or window.open),
13
+ * adopts the newest page, waits boundedly for it to load, closes the stale
14
+ * tab so the context keeps a single driven tab, and returns the adopted page.
15
+ * Returns `current` unchanged when no page appeared, so repeat calls are idempotent.
16
+ */
17
+ export declare function followNewPage<P extends FollowablePage>(context: FollowableContext<P>, current: P, pagesBefore: readonly P[], discoverWaitMs?: number): Promise<P>;
18
+ //# sourceMappingURL=active-page.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"active-page.d.ts","sourceRoot":"","sources":["../../src/scraper/active-page.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,cAAc;IAC7B,gBAAgB,CAAC,CAAC,KAAK,EAAE,kBAAkB,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChF,GAAG,CAAC,IAAI,MAAM,CAAC;IACf,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACzB;AAED,MAAM,WAAW,iBAAiB,CAAC,CAAC,SAAS,cAAc;IACzD,KAAK,IAAI,CAAC,EAAE,CAAC;IACb,aAAa,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;CAC/B;AAgBD;;;;;;GAMG;AACH,wBAAsB,aAAa,CAAC,CAAC,SAAS,cAAc,EAC1D,OAAO,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAC7B,OAAO,EAAE,CAAC,EACV,WAAW,EAAE,SAAS,CAAC,EAAE,EACzB,cAAc,GAAE,MAAyB,GACxC,OAAO,CAAC,CAAC,CAAC,CA+BZ"}
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.followNewPage = followNewPage;
4
+ const frame_target_1 = require("./frame-target");
5
+ const LOAD_WAIT_MS = 10000;
6
+ const DISCOVER_POLL_MS = 100;
7
+ const DISCOVER_WAIT_MS = 1500;
8
+ const BLANK_URL_WAIT_MS = 5000;
9
+ const isBlankUrl = (page) => {
10
+ try {
11
+ const url = page.url?.() ?? "";
12
+ return url === "" || url === "about:blank";
13
+ }
14
+ catch {
15
+ return false;
16
+ }
17
+ };
18
+ /**
19
+ * Single source of truth for which page the run drives after a click: when the
20
+ * click opened a new browsing context (non-self anchor target or window.open),
21
+ * adopts the newest page, waits boundedly for it to load, closes the stale
22
+ * tab so the context keeps a single driven tab, and returns the adopted page.
23
+ * Returns `current` unchanged when no page appeared, so repeat calls are idempotent.
24
+ */
25
+ async function followNewPage(context, current, pagesBefore, discoverWaitMs = DISCOVER_WAIT_MS) {
26
+ const known = new Set(pagesBefore);
27
+ const findNew = () => context
28
+ .pages()
29
+ .filter((p) => !known.has(p))
30
+ .at(-1);
31
+ const polls = Math.max(0, Math.ceil(discoverWaitMs / DISCOVER_POLL_MS));
32
+ let opened = findNew();
33
+ for (let i = 0; !opened && i < polls; i++) {
34
+ await (0, frame_target_1.sleep)(DISCOVER_POLL_MS);
35
+ opened = findNew();
36
+ }
37
+ if (!opened || opened === current)
38
+ return current;
39
+ await Promise.race([
40
+ opened.waitForLoadState?.("domcontentloaded", LOAD_WAIT_MS).catch(() => undefined),
41
+ (0, frame_target_1.sleep)(LOAD_WAIT_MS),
42
+ ]);
43
+ // A new tab starts at about:blank before its navigation commits; adopting it
44
+ // then would verify and capture an empty document.
45
+ for (let waited = 0; isBlankUrl(opened) && waited < BLANK_URL_WAIT_MS; waited += DISCOVER_POLL_MS) {
46
+ await (0, frame_target_1.sleep)(DISCOVER_POLL_MS);
47
+ }
48
+ // Closing first lets the context re-pick its active page before we pin ours.
49
+ await current.close?.().catch(() => undefined);
50
+ context.setActivePage?.(opened);
51
+ return opened;
52
+ }
53
+ //# sourceMappingURL=active-page.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"active-page.js","sourceRoot":"","sources":["../../src/scraper/active-page.ts"],"names":[],"mappings":";;;AAAA,yDAA+C;AAa/C,MAAM,YAAY,GAAG,KAAK,CAAC;AAC3B,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAC7B,MAAM,gBAAgB,GAAG,IAAI,CAAC;AAC9B,MAAM,iBAAiB,GAAG,IAAI,CAAC;AAE/B,MAAM,UAAU,GAAG,CAAC,IAAoB,EAAW,EAAE;IACnD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC;QAC/B,OAAO,GAAG,KAAK,EAAE,IAAI,GAAG,KAAK,aAAa,CAAC;IAC7C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC,CAAC;AAEF;;;;;;GAMG;AACI,KAAK,wBACV,OAA6B,EAC7B,OAAU,EACV,WAAyB,EACzB,cAAc,GAAW,gBAAgB;IAEzC,MAAM,KAAK,GAAG,IAAI,GAAG,CAAI,WAAW,CAAC,CAAC;IACtC,MAAM,OAAO,GAAG,GAAkB,EAAE,CAClC,OAAO;SACJ,KAAK,EAAE;SACP,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;SAC5B,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACZ,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,cAAc,GAAG,gBAAgB,CAAC,CAAC,CAAC;IACxE,IAAI,MAAM,GAAG,OAAO,EAAE,CAAC;IACvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;QAC1C,MAAM,IAAA,oBAAK,EAAC,gBAAgB,CAAC,CAAC;QAC9B,MAAM,GAAG,OAAO,EAAE,CAAC;IACrB,CAAC;IACD,IAAI,CAAC,MAAM,IAAI,MAAM,KAAK,OAAO;QAAE,OAAO,OAAO,CAAC;IAClD,MAAM,OAAO,CAAC,IAAI,CAAC;QACjB,MAAM,CAAC,gBAAgB,EAAE,CAAC,kBAAkB,EAAE,YAAY,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC;QAClF,IAAA,oBAAK,EAAC,YAAY,CAAC;KACpB,CAAC,CAAC;IACH,6EAA6E;IAC7E,mDAAmD;IACnD,KACE,IAAI,MAAM,GAAG,CAAC,EACd,UAAU,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,iBAAiB,EAChD,MAAM,IAAI,gBAAgB,EAC1B,CAAC;QACD,MAAM,IAAA,oBAAK,EAAC,gBAAgB,CAAC,CAAC;IAChC,CAAC;IACD,6EAA6E;IAC7E,MAAM,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IAC/C,OAAO,CAAC,aAAa,EAAE,CAAC,MAAM,CAAC,CAAC;IAChC,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -160,7 +160,7 @@ export declare const DEEP_ELEMENTS_EXPR = "((root) => {\n const out = [];\n co
160
160
  * descendant qualifies, so the caller falls back unchanged to clicking
161
161
  * `host` itself.
162
162
  */
163
- export declare const RESOLVE_SHADOW_INTERACTIVE_DESCENDANT_EXPR = "((host) => {\n if (!host || !host.shadowRoot) return null;\n const isVisible = (el) => {\n const rect = el.getBoundingClientRect();\n if (rect.width === 0 && rect.height === 0) return false;\n const style = getComputedStyle(el);\n return style.display !== \"none\" && style.visibility !== \"hidden\";\n };\n const isDisabled = (el) =>\n el.disabled === true || el.getAttribute(\"aria-disabled\") === \"true\";\n const isInteractive = (el) => {\n const tag = (el.tagName || \"\").toLowerCase();\n const role = (el.getAttribute(\"role\") || \"\").toLowerCase();\n if (tag === \"button\" || tag === \"select\" || tag === \"textarea\") return true;\n if (tag === \"a\" && el.hasAttribute(\"href\")) return true;\n if (tag === \"input\" && ![\"hidden\"].includes((el.getAttribute(\"type\") || \"\").toLowerCase())) return true;\n if (role === \"button\" || role === \"link\" || role === \"checkbox\" || role === \"radio\" || role === \"menuitem\")\n return true;\n if (el.hasAttribute(\"onclick\")) return true;\n const tabIndex = el.getAttribute(\"tabindex\");\n return tabIndex !== null && Number(tabIndex) >= 0;\n };\n const deepElements = ((root) => {\n const out = [];\n const walk = (node) => {\n const kids = node.querySelectorAll ? Array.from(node.querySelectorAll(\"*\")) : [];\n for (const el of kids) {\n out.push(el);\n if (el.shadowRoot) walk(el.shadowRoot);\n }\n };\n walk(root);\n return out;\n})(host.shadowRoot);\n for (const el of deepElements) {\n if (isInteractive(el) && isVisible(el) && !isDisabled(el)) return el;\n }\n return null;\n})";
163
+ export declare const RESOLVE_SHADOW_INTERACTIVE_DESCENDANT_EXPR = "((host) => {\n if (!host || !host.shadowRoot) return null;\n const isVisible = ((el) => {\n if (!el) return false;\n if (el.getAttribute(\"aria-hidden\") === \"true\") return false;\n const rect = el.getBoundingClientRect();\n if (rect.width === 0 && rect.height === 0) return false;\n const style = getComputedStyle(el);\n return style.display !== \"none\" && style.visibility !== \"hidden\";\n});\n const isDisabled = (el) =>\n el.disabled === true || el.getAttribute(\"aria-disabled\") === \"true\";\n const isInteractive = (el) => {\n const tag = (el.tagName || \"\").toLowerCase();\n const role = (el.getAttribute(\"role\") || \"\").toLowerCase();\n if (tag === \"button\" || tag === \"select\" || tag === \"textarea\") return true;\n if (tag === \"a\" && el.hasAttribute(\"href\")) return true;\n if (tag === \"input\" && ![\"hidden\"].includes((el.getAttribute(\"type\") || \"\").toLowerCase())) return true;\n if (role === \"button\" || role === \"link\" || role === \"checkbox\" || role === \"radio\" || role === \"menuitem\")\n return true;\n if (el.hasAttribute(\"onclick\")) return true;\n const tabIndex = el.getAttribute(\"tabindex\");\n return tabIndex !== null && Number(tabIndex) >= 0;\n };\n const deepElements = ((root) => {\n const out = [];\n const walk = (node) => {\n const kids = node.querySelectorAll ? Array.from(node.querySelectorAll(\"*\")) : [];\n for (const el of kids) {\n out.push(el);\n if (el.shadowRoot) walk(el.shadowRoot);\n }\n };\n walk(root);\n return out;\n})(host.shadowRoot);\n for (const el of deepElements) {\n if (isInteractive(el) && isVisible(el) && !isDisabled(el)) return el;\n }\n return null;\n})";
164
164
  /**
165
165
  * Result shape `buildMarkShadowInteractiveDescendantExpr`'s `page.evaluate`
166
166
  * call resolves to.
@@ -1 +1 @@
1
- {"version":3,"file":"browser-click-expr.d.ts","sourceRoot":"","sources":["../../src/scraper/browser-click-expr.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH;;;;;;;;;;;;;;;;;;GAkBG;AACH;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,UAOlC,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,qCAAqC,QAA+B,CAAC;AAElF;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,sCAAsC,0EACsB,CAAC;AAE1E;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,mCAAmC,sIAC6E,CAAC;AAE9H;;;;;;;GAOG;AACH,eAAO,MAAM,4BAA4B,IAAI,CAAC;AAE9C;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAoCvF;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAsBzD;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,kBAAkB,0SAW5B,CAAC;AAEJ;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,0CAA0C,4mDA2BpD,CAAC;AAEJ;;;GAGG;AACH,MAAM,WAAW,qCAAqC;IACpD,KAAK,EAAE,OAAO,CAAC;CAChB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,wCAAwC,CACtD,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,GAClB,MAAM,CAWR;AAED;;;;;;;;GAQG;AACH,wBAAgB,+BAA+B,CAC7C,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,GAClB,MAAM,CAQR"}
1
+ {"version":3,"file":"browser-click-expr.d.ts","sourceRoot":"","sources":["../../src/scraper/browser-click-expr.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAIH;;;;;;;;;;;;;;;;;;GAkBG;AACH;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,UAOlC,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,qCAAqC,QAA+B,CAAC;AAElF;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,sCAAsC,0EACsB,CAAC;AAE1E;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,mCAAmC,sIAC6E,CAAC;AAE9H;;;;;;;GAOG;AACH,eAAO,MAAM,4BAA4B,IAAI,CAAC;AAE9C;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAoCvF;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAsBzD;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,kBAAkB,0SAW5B,CAAC;AAEJ;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,0CAA0C,ksDAsBpD,CAAC;AAEJ;;;GAGG;AACH,MAAM,WAAW,qCAAqC;IACpD,KAAK,EAAE,OAAO,CAAC;CAChB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,wCAAwC,CACtD,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,GAClB,MAAM,CAWR;AAED;;;;;;;;GAQG;AACH,wBAAgB,+BAA+B,CAC7C,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,GAClB,MAAM,CAQR"}
@@ -27,6 +27,7 @@ exports.retargetToSelectionMarkerExpr = retargetToSelectionMarkerExpr;
27
27
  exports.clickActivationExpr = clickActivationExpr;
28
28
  exports.buildMarkShadowInteractiveDescendantExpr = buildMarkShadowInteractiveDescendantExpr;
29
29
  exports.buildUnmarkShadowDescendantExpr = buildUnmarkShadowDescendantExpr;
30
+ const actionable_visibility_expr_1 = require("./actionable-visibility-expr");
30
31
  /**
31
32
  * Emits a browser-context statement block that activates the element bound to
32
33
  * `elVar`: focus, then a `pointerdown → mousedown → pointerup → mouseup` gesture
@@ -245,12 +246,7 @@ exports.DEEP_ELEMENTS_EXPR = `((root) => {
245
246
  */
246
247
  exports.RESOLVE_SHADOW_INTERACTIVE_DESCENDANT_EXPR = `((host) => {
247
248
  if (!host || !host.shadowRoot) return null;
248
- const isVisible = (el) => {
249
- const rect = el.getBoundingClientRect();
250
- if (rect.width === 0 && rect.height === 0) return false;
251
- const style = getComputedStyle(el);
252
- return style.display !== "none" && style.visibility !== "hidden";
253
- };
249
+ const isVisible = ${actionable_visibility_expr_1.ACTIONABLE_VISIBILITY_EXPR};
254
250
  const isDisabled = (el) =>
255
251
  el.disabled === true || el.getAttribute("aria-disabled") === "true";
256
252
  const isInteractive = (el) => {
@@ -1 +1 @@
1
- {"version":3,"file":"browser-click-expr.js","sourceRoot":"","sources":["../../src/scraper/browser-click-expr.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;;;;;;;AAEH;;;;;;;;;;;;;;;;;;GAkBG;AACH;;;;;GAKG;AACU,QAAA,sBAAsB,GAAG;IACpC,QAAQ;IACR,KAAK;IACL,QAAQ;IACR,OAAO;IACP,UAAU;IACV,kBAAkB;CACnB,CAAC;AAEF;;;;;;GAMG;AACU,QAAA,qCAAqC,GAAG,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAElF;;;;;;;;;;;;;;;;;GAiBG;AACU,QAAA,sCAAsC,GACjD,uEAAuE,CAAC;AAE1E;;;;;;;;;;;;;;;;;GAiBG;AACU,QAAA,mCAAmC,GAC9C,2HAA2H,CAAC;AAE9H;;;;;;;GAOG;AACU,QAAA,4BAA4B,GAAG,CAAC,CAAC;AAE9C;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,uCAA8C,KAAa,EAAE,UAAkB;IAC7E,OAAO;gCACuB,IAAI,CAAC,SAAS,CAAC,QAAA,sBAAsB,CAAC;yBAC7C,IAAI,CAAC,SAAS,CAAC,QAAA,qCAAqC,CAAC;0BACpD,QAAA,sCAAsC;;;;;;;;;;;;;;;;;;;;;;;;;;qBA0B3C,KAAK;0CACgB,QAAA,4BAA4B;uCAC/B,KAAK,gBAAgB,UAAU;;;IAGlE,CAAC;AACL,CAAC;AAED,6BAAoC,KAAa;IAC/C,OAAO;iBACQ,KAAK,kCAAkC,KAAK;;;;;;;;;;;;;MAavD,KAAK;MACL,KAAK;MACL,KAAK;MACL,KAAK;iBACM,KAAK,kCAAkC,KAAK;aAChD,KAAK;IACd,CAAC;AACL,CAAC;AAED;;;;;;;;GAQG;AACU,QAAA,kBAAkB,GAAG;;;;;;;;;;;GAW/B,CAAC;AAEJ;;;;;;;;;;;;;;;;;;;;;GAqBG;AACU,QAAA,0CAA0C,GAAG;;;;;;;;;;;;;;;;;;;;;;yBAsBjC,QAAA,kBAAkB;;;;;GAKxC,CAAC;AAUJ;;;;;;;;;;;;;;;;GAgBG;AACH,kDACE,SAAiB,EACjB,UAAkB,EAClB,WAAmB;IAEnB,OAAO;kCACyB,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;;;iDAGV,QAAA,0CAA0C;;;8BAG7D,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC;;OAEjF,CAAC;AACR,CAAC;AAED;;;;;;;;GAQG;AACH,yCACE,SAAiB,EACjB,UAAkB,EAClB,WAAmB;IAEnB,OAAO;kCACyB,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;;;mDAGR,IAAI,CAAC,SAAS,CAAC,IAAI,UAAU,KAAK,WAAW,IAAI,CAAC;yCAC5D,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC;OAC5D,CAAC;AACR,CAAC"}
1
+ {"version":3,"file":"browser-click-expr.js","sourceRoot":"","sources":["../../src/scraper/browser-click-expr.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;;;;;;;AAEH,qFAAkF;AAElF;;;;;;;;;;;;;;;;;;GAkBG;AACH;;;;;GAKG;AACU,QAAA,sBAAsB,GAAG;IACpC,QAAQ;IACR,KAAK;IACL,QAAQ;IACR,OAAO;IACP,UAAU;IACV,kBAAkB;CACnB,CAAC;AAEF;;;;;;GAMG;AACU,QAAA,qCAAqC,GAAG,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAElF;;;;;;;;;;;;;;;;;GAiBG;AACU,QAAA,sCAAsC,GACjD,uEAAuE,CAAC;AAE1E;;;;;;;;;;;;;;;;;GAiBG;AACU,QAAA,mCAAmC,GAC9C,2HAA2H,CAAC;AAE9H;;;;;;;GAOG;AACU,QAAA,4BAA4B,GAAG,CAAC,CAAC;AAE9C;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,uCAA8C,KAAa,EAAE,UAAkB;IAC7E,OAAO;gCACuB,IAAI,CAAC,SAAS,CAAC,QAAA,sBAAsB,CAAC;yBAC7C,IAAI,CAAC,SAAS,CAAC,QAAA,qCAAqC,CAAC;0BACpD,QAAA,sCAAsC;;;;;;;;;;;;;;;;;;;;;;;;;;qBA0B3C,KAAK;0CACgB,QAAA,4BAA4B;uCAC/B,KAAK,gBAAgB,UAAU;;;IAGlE,CAAC;AACL,CAAC;AAED,6BAAoC,KAAa;IAC/C,OAAO;iBACQ,KAAK,kCAAkC,KAAK;;;;;;;;;;;;;MAavD,KAAK;MACL,KAAK;MACL,KAAK;MACL,KAAK;iBACM,KAAK,kCAAkC,KAAK;aAChD,KAAK;IACd,CAAC;AACL,CAAC;AAED;;;;;;;;GAQG;AACU,QAAA,kBAAkB,GAAG;;;;;;;;;;;GAW/B,CAAC;AAEJ;;;;;;;;;;;;;;;;;;;;;GAqBG;AACU,QAAA,0CAA0C,GAAG;;sBAEpC,uDAA0B;;;;;;;;;;;;;;;yBAevB,QAAA,kBAAkB;;;;;GAKxC,CAAC;AAUJ;;;;;;;;;;;;;;;;GAgBG;AACH,kDACE,SAAiB,EACjB,UAAkB,EAClB,WAAmB;IAEnB,OAAO;kCACyB,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;;;iDAGV,QAAA,0CAA0C;;;8BAG7D,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC;;OAEjF,CAAC;AACR,CAAC;AAED;;;;;;;;GAQG;AACH,yCACE,SAAiB,EACjB,UAAkB,EAClB,WAAmB;IAEnB,OAAO;kCACyB,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;;;mDAGR,IAAI,CAAC,SAAS,CAAC,IAAI,UAAU,KAAK,WAAW,IAAI,CAAC;yCAC5D,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC;OAC5D,CAAC;AACR,CAAC"}
@@ -0,0 +1,19 @@
1
+ export interface SettlePage {
2
+ waitForTimeout(ms: number): Promise<void>;
3
+ }
4
+ export interface SettleCounter {
5
+ n: number;
6
+ }
7
+ /**
8
+ * Waits for a click's network activity to settle so the verification snapshot
9
+ * reflects the post-click page rather than a fixed-delay guess. Elapsed time is
10
+ * accumulated from poll counts so fake pages and timers stay deterministic.
11
+ * When `readText` is given, visible-text movement since the pre-click baseline
12
+ * also counts as activity, so a DOM-only re-render that lands after the first
13
+ * change is not snapshotted half-transitioned; the wait ends once activity has been quiet for the quiet window and is
14
+ * bounded by the MAX_MS ceiling so a never-quiet page still terminates.
15
+ * Only submit-shaped steps keep the long idle wait for a slow round-trip to start;
16
+ * any other click that shows no activity after one quiet poll gives up.
17
+ */
18
+ export declare function settleAfterClick(page: SettlePage, counter: SettleCounter, preCount: number, submitShaped: boolean, readText?: () => Promise<string>, preText?: string): Promise<void>;
19
+ //# sourceMappingURL=click-settle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"click-settle.d.ts","sourceRoot":"","sources":["../../src/scraper/click-settle.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACzB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3C;AAED,MAAM,WAAW,aAAa;IAC5B,CAAC,EAAE,MAAM,CAAC;CACX;AAQD;;;;;;;;;;GAUG;AACH,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,UAAU,EAChB,OAAO,EAAE,aAAa,EACtB,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,OAAO,EACrB,QAAQ,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,EAChC,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,CAwCf"}
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.settleAfterClick = settleAfterClick;
4
+ const POLL_MS = 1000;
5
+ const QUIET_POLLS = 3;
6
+ const IDLE_GIVE_UP_MS = 14000;
7
+ const TEXT_QUIET_POLLS = 9;
8
+ const MAX_MS = 60000;
9
+ /**
10
+ * Waits for a click's network activity to settle so the verification snapshot
11
+ * reflects the post-click page rather than a fixed-delay guess. Elapsed time is
12
+ * accumulated from poll counts so fake pages and timers stay deterministic.
13
+ * When `readText` is given, visible-text movement since the pre-click baseline
14
+ * also counts as activity, so a DOM-only re-render that lands after the first
15
+ * change is not snapshotted half-transitioned; the wait ends once activity has been quiet for the quiet window and is
16
+ * bounded by the MAX_MS ceiling so a never-quiet page still terminates.
17
+ * Only submit-shaped steps keep the long idle wait for a slow round-trip to start;
18
+ * any other click that shows no activity after one quiet poll gives up.
19
+ */
20
+ async function settleAfterClick(page, counter, preCount, submitShaped, readText, preText) {
21
+ const safeRead = async () => {
22
+ if (!readText)
23
+ return undefined;
24
+ try {
25
+ return await readText();
26
+ }
27
+ catch {
28
+ return undefined;
29
+ }
30
+ };
31
+ const startText = await safeRead();
32
+ let lastText = preText ?? startText;
33
+ let textMoved = preText !== undefined && startText !== undefined && startText !== preText;
34
+ let seen = counter.n > preCount || textMoved;
35
+ let last = counter.n;
36
+ let quiet = 0;
37
+ let elapsed = 0;
38
+ while (elapsed < MAX_MS) {
39
+ await page.waitForTimeout(POLL_MS);
40
+ elapsed += POLL_MS;
41
+ const text = await safeRead();
42
+ if (text !== undefined && lastText !== undefined && text !== lastText) {
43
+ lastText = text;
44
+ textMoved = true;
45
+ seen = true;
46
+ quiet = 0;
47
+ continue;
48
+ }
49
+ if (counter.n !== last) {
50
+ last = counter.n;
51
+ seen = true;
52
+ quiet = 0;
53
+ continue;
54
+ }
55
+ if (seen) {
56
+ quiet += 1;
57
+ if (quiet >= (textMoved ? TEXT_QUIET_POLLS : QUIET_POLLS))
58
+ return;
59
+ continue;
60
+ }
61
+ if (!submitShaped || elapsed >= IDLE_GIVE_UP_MS)
62
+ return;
63
+ }
64
+ }
65
+ //# sourceMappingURL=click-settle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"click-settle.js","sourceRoot":"","sources":["../../src/scraper/click-settle.ts"],"names":[],"mappings":";;;AAQA,MAAM,OAAO,GAAG,IAAI,CAAC;AACrB,MAAM,WAAW,GAAG,CAAC,CAAC;AACtB,MAAM,eAAe,GAAG,KAAK,CAAC;AAC9B,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAC3B,MAAM,MAAM,GAAG,KAAK,CAAC;AAErB;;;;;;;;;;GAUG;AACI,KAAK,2BACV,IAAgB,EAChB,OAAsB,EACtB,QAAgB,EAChB,YAAqB,EACrB,QAAgC,EAChC,OAAgB;IAEhB,MAAM,QAAQ,GAAG,KAAK,IAAiC,EAAE;QACvD,IAAI,CAAC,QAAQ;YAAE,OAAO,SAAS,CAAC;QAChC,IAAI,CAAC;YACH,OAAO,MAAM,QAAQ,EAAE,CAAC;QAC1B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC,CAAC;IACF,MAAM,SAAS,GAAG,MAAM,QAAQ,EAAE,CAAC;IACnC,IAAI,QAAQ,GAAG,OAAO,IAAI,SAAS,CAAC;IACpC,IAAI,SAAS,GAAG,OAAO,KAAK,SAAS,IAAI,SAAS,KAAK,SAAS,IAAI,SAAS,KAAK,OAAO,CAAC;IAC1F,IAAI,IAAI,GAAG,OAAO,CAAC,CAAC,GAAG,QAAQ,IAAI,SAAS,CAAC;IAC7C,IAAI,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC;IACrB,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,OAAO,OAAO,GAAG,MAAM,EAAE,CAAC;QACxB,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QACnC,OAAO,IAAI,OAAO,CAAC;QACnB,MAAM,IAAI,GAAG,MAAM,QAAQ,EAAE,CAAC;QAC9B,IAAI,IAAI,KAAK,SAAS,IAAI,QAAQ,KAAK,SAAS,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtE,QAAQ,GAAG,IAAI,CAAC;YAChB,SAAS,GAAG,IAAI,CAAC;YACjB,IAAI,GAAG,IAAI,CAAC;YACZ,KAAK,GAAG,CAAC,CAAC;YACV,SAAS;QACX,CAAC;QACD,IAAI,OAAO,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YACvB,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC;YACjB,IAAI,GAAG,IAAI,CAAC;YACZ,KAAK,GAAG,CAAC,CAAC;YACV,SAAS;QACX,CAAC;QACD,IAAI,IAAI,EAAE,CAAC;YACT,KAAK,IAAI,CAAC,CAAC;YACX,IAAI,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,WAAW,CAAC;gBAAE,OAAO;YAClE,SAAS;QACX,CAAC;QACD,IAAI,CAAC,YAAY,IAAI,OAAO,IAAI,eAAe;YAAE,OAAO;IAC1D,CAAC;AACH,CAAC"}
@@ -97,7 +97,8 @@ export interface TaggedPhrase {
97
97
  * boundary (`.`/`;`) between the marker and the phrase ends the negation's
98
98
  * reach. Parallels the quoted-phrase extraction convention in
99
99
  * `parseSelectStep`/`parseRadioStep` (`flow-runner.ts`) — same
100
- * `/'([^']+)'/g` shape — but here we need ALL quoted phrases plus their
100
+ * apostrophe-aware tokenizer (`quoted-spans.ts`), so a letter-flanked
101
+ * apostrophe never ends a phrase — but here we need ALL quoted phrases plus their
101
102
  * polarity, not just one option/label pair. Exported so `flow-runner.ts` can
102
103
  * re-derive the exact same ranking {@link scoreCandidate} used to sort
103
104
  * `deepLocatorCandidates`, to detect a tie for the top rank rather than
@@ -141,6 +142,24 @@ export declare function extractTaggedPhrases(instruction: string): TaggedPhrase[
141
142
  * output (see {@link extractTaggedPhrases}'s docblock).
142
143
  */
143
144
  export declare function scoreCandidate(accessibleText: string, phrases: TaggedPhrase[], isNav?: boolean): number;
145
+ /** Outcome of {@link vetObserveCandidates}: the best-scoring candidate, its score, and whether the caller should refuse to act on it. */
146
+ export interface ObserveCandidateVerdict<T extends {
147
+ description: string;
148
+ }> {
149
+ candidate: T | undefined;
150
+ score: number;
151
+ refuse: boolean;
152
+ }
153
+ /**
154
+ * Picks the best observe() candidate for the step's quoted phrases and decides
155
+ * whether acting on it would hit a control the step did not name. Reuses
156
+ * {@link scoreCandidate} so the veto can never drift from the ranking tiers;
157
+ * a lone candidate is enough to refuse, since observe() returns its best
158
+ * guess even when nothing matches.
159
+ */
160
+ export declare function vetObserveCandidates<T extends {
161
+ description: string;
162
+ }>(candidates: T[], phrases: TaggedPhrase[]): ObserveCandidateVerdict<T>;
144
163
  /**
145
164
  * Enumerates every element `page.deepLocator()` matches inside the frame
146
165
  * scoped by `frameSelector`, ranked by relevance to `instruction` (highest
@@ -1 +1 @@
1
- {"version":3,"file":"deep-locator-candidates.d.ts","sourceRoot":"","sources":["../../src/scraper/deep-locator-candidates.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAWrD,OAAO,EAEL,KAAK,WAAW,EAEjB,MAAM,wBAAwB,CAAC;AA2BhC,sJAAsJ;AACtJ,MAAM,WAAW,yBAAyB;IACxC,mIAAmI;IACnI,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,uJAAuJ;IACvJ,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B;;;;;;;;;;;;;;;;OAgBG;IACH,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B;;;;;;;;;;;;;OAaG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAKD;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,oBAAoB;IACnC,kJAAkJ;IAClJ,KAAK,EAAE,MAAM,CAAC;IACd,gLAAgL;IAChL,QAAQ,EAAE,MAAM,CAAC;IACjB;;;;;OAKG;IACH,cAAc,EAAE,MAAM,CAAC;IACvB;;;;;;;OAOG;IACH,KAAK,EAAE,OAAO,CAAC;CAChB;AAsBD,sJAAsJ;AACtJ,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,YAAY,EAAE,CAaxE;AAkCD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,wBAAgB,cAAc,CAC5B,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE,YAAY,EAAE,EACvB,KAAK,UAAQ,GACZ,MAAM,CAiBR;AA+JD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAsB,4BAA4B,CAChD,IAAI,EAAE,IAAI,EACV,aAAa,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACxC,aAAa,EAAE,MAAM,EACrB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,EAC3B,cAAc,GAAE,yBAA8B,GAC7C,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAuCjC;AAwDD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,wBAAsB,yBAAyB,CAC7C,IAAI,EAAE,IAAI,EACV,aAAa,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACxC,aAAa,EAAE,MAAM,EACrB,KAAK,EAAE,MAAM,EACb,cAAc,GAAE,yBAA8B,GAC7C,OAAO,CAAC,IAAI,CAAC,CAiCf;AAED;;;;;;;;GAQG"}
1
+ {"version":3,"file":"deep-locator-candidates.d.ts","sourceRoot":"","sources":["../../src/scraper/deep-locator-candidates.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAYrD,OAAO,EAEL,KAAK,WAAW,EAEjB,MAAM,wBAAwB,CAAC;AAiChC,sJAAsJ;AACtJ,MAAM,WAAW,yBAAyB;IACxC,mIAAmI;IACnI,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,uJAAuJ;IACvJ,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B;;;;;;;;;;;;;;;;OAgBG;IACH,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B;;;;;;;;;;;;;OAaG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAKD;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,oBAAoB;IACnC,kJAAkJ;IAClJ,KAAK,EAAE,MAAM,CAAC;IACd,gLAAgL;IAChL,QAAQ,EAAE,MAAM,CAAC;IACjB;;;;;OAKG;IACH,cAAc,EAAE,MAAM,CAAC;IACvB;;;;;;;OAOG;IACH,KAAK,EAAE,OAAO,CAAC;CAChB;AAsBD,sJAAsJ;AACtJ,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,YAAY,EAAE,CAYxE;AAkCD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,wBAAgB,cAAc,CAC5B,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE,YAAY,EAAE,EACvB,KAAK,UAAQ,GACZ,MAAM,CAiBR;AAED,yIAAyI;AACzI,MAAM,WAAW,uBAAuB,CAAC,CAAC,SAAS;IAAE,WAAW,EAAE,MAAM,CAAA;CAAE;IACxE,SAAS,EAAE,CAAC,GAAG,SAAS,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;CACjB;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,SAAS;IAAE,WAAW,EAAE,MAAM,CAAA;CAAE,EACpE,UAAU,EAAE,CAAC,EAAE,EACf,OAAO,EAAE,YAAY,EAAE,GACtB,uBAAuB,CAAC,CAAC,CAAC,CAoB5B;AAsMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAsB,4BAA4B,CAChD,IAAI,EAAE,IAAI,EACV,aAAa,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACxC,aAAa,EAAE,MAAM,EACrB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,EAC3B,cAAc,GAAE,yBAA8B,GAC7C,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAoCjC;AAwDD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,wBAAsB,yBAAyB,CAC7C,IAAI,EAAE,IAAI,EACV,aAAa,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACxC,aAAa,EAAE,MAAM,EACrB,KAAK,EAAE,MAAM,EACb,cAAc,GAAE,yBAA8B,GAC7C,OAAO,CAAC,IAAI,CAAC,CAwCf;AAqCD;;;;;;;;GAQG"}
@@ -12,12 +12,15 @@
12
12
  Object.defineProperty(exports, "__esModule", { value: true });
13
13
  exports.extractTaggedPhrases = extractTaggedPhrases;
14
14
  exports.scoreCandidate = scoreCandidate;
15
+ exports.vetObserveCandidates = vetObserveCandidates;
15
16
  exports.resolveDeepLocatorCandidates = resolveDeepLocatorCandidates;
16
17
  exports.clickDeepLocatorCandidate = clickDeepLocatorCandidate;
17
18
  const errors_1 = require("../lib/errors");
18
19
  const logging_1 = require("../lib/logging");
19
20
  const deep_locator_scan_1 = require("./deep-locator-scan");
20
21
  const frame_target_1 = require("./frame-target");
22
+ const quoted_spans_1 = require("./quoted-spans");
23
+ const trusted_click_1 = require("./trusted-click");
21
24
  const watchdog_1 = require("./watchdog");
22
25
  const logger = (0, logging_1.getLogger)({ name: "scraper/deep-locator-candidates" });
23
26
  /**
@@ -66,23 +69,23 @@ const NEGATION_MARKERS = /\b(?:do\s+not|don't|never|avoid)\b/gi;
66
69
  * boundary (`.`/`;`) between the marker and the phrase ends the negation's
67
70
  * reach. Parallels the quoted-phrase extraction convention in
68
71
  * `parseSelectStep`/`parseRadioStep` (`flow-runner.ts`) — same
69
- * `/'([^']+)'/g` shape — but here we need ALL quoted phrases plus their
72
+ * apostrophe-aware tokenizer (`quoted-spans.ts`), so a letter-flanked
73
+ * apostrophe never ends a phrase — but here we need ALL quoted phrases plus their
70
74
  * polarity, not just one option/label pair. Exported so `flow-runner.ts` can
71
75
  * re-derive the exact same ranking {@link scoreCandidate} used to sort
72
76
  * `deepLocatorCandidates`, to detect a tie for the top rank rather than
73
77
  * duplicating this logic.
74
78
  */
75
79
  function extractTaggedPhrases(instruction) {
76
- const negationStarts = [...instruction.matchAll(NEGATION_MARKERS)].map((m) => m.index);
77
- const quoted = [...instruction.matchAll(/'([^']+)'/g)];
78
- return quoted.map((m) => {
79
- // biome-ignore lint/style/noNonNullAssertion: m.index is always defined for matchAll results
80
- const phraseStart = m.index;
81
- const nearestNegationBefore = negationStarts.filter((idx) => idx < phraseStart).at(-1);
80
+ const spans = (0, quoted_spans_1.findQuotedSpans)(instruction);
81
+ const negationStarts = [...instruction.matchAll(NEGATION_MARKERS)]
82
+ .map((m) => m.index)
83
+ .filter((idx) => !spans.some((span) => idx >= span.start && idx < span.end));
84
+ return spans.map((span) => {
85
+ const nearestNegationBefore = negationStarts.filter((idx) => idx < span.start).at(-1);
82
86
  const negated = nearestNegationBefore !== undefined &&
83
- !/[.;]/.test(instruction.slice(nearestNegationBefore, phraseStart));
84
- // biome-ignore lint/style/noNonNullAssertion: capture group 1 is required by the pattern, so it is present on every match
85
- return { text: m[1].trim(), negated };
87
+ !/[.;]/.test(instruction.slice(nearestNegationBefore, span.start));
88
+ return { text: span.text.trim(), negated };
86
89
  });
87
90
  }
88
91
  /** Normalizes text for relevance comparison: lowercase, whitespace-collapsed. */
@@ -167,6 +170,36 @@ function scoreCandidate(accessibleText, phrases, isNav = false) {
167
170
  return -1;
168
171
  return 0;
169
172
  }
173
+ /**
174
+ * Picks the best observe() candidate for the step's quoted phrases and decides
175
+ * whether acting on it would hit a control the step did not name. Reuses
176
+ * {@link scoreCandidate} so the veto can never drift from the ranking tiers;
177
+ * a lone candidate is enough to refuse, since observe() returns its best
178
+ * guess even when nothing matches.
179
+ */
180
+ function vetObserveCandidates(candidates, phrases) {
181
+ const first = candidates[0];
182
+ if (!first || phrases.length === 0)
183
+ return { candidate: first, score: 0, refuse: false };
184
+ const scored = candidates.map((candidate) => ({
185
+ candidate,
186
+ score: scoreCandidate(candidate.description, phrases),
187
+ }));
188
+ const best = scored.reduce((a, b) => (b.score > a.score ? b : a));
189
+ if (best.score < 0)
190
+ return { candidate: best.candidate, score: best.score, refuse: true };
191
+ if (best.score > 0)
192
+ return { candidate: best.candidate, score: best.score, refuse: false };
193
+ const positives = phrases.filter((p) => !p.negated).map((p) => normalize(p.text));
194
+ const text = normalize(best.candidate.description);
195
+ const betterExists = scored.some((s) => s.score > 0);
196
+ // A context phrase ("under the text 'X'") adds a second positive, so require the
197
+ // candidate to overlap none of them rather than exactly one.
198
+ const namesNone = positives.length > 0 &&
199
+ text.length > 0 &&
200
+ positives.every((p) => !text.includes(p) && !p.includes(text));
201
+ return { candidate: best.candidate, score: 0, refuse: betterExists || namesNone };
202
+ }
170
203
  /**
171
204
  * Resolves the `FrameTarget` the batched scan should evaluate against:
172
205
  * `timeoutOptions.frameTarget` when the caller already resolved one, else a
@@ -223,36 +256,56 @@ function isFrameCandidateScanResult(entry) {
223
256
  * so a frame whose every node reports unrendered doesn't silently look like
224
257
  * an empty frame.
225
258
  */
226
- async function scanFrameCandidatesBatched(page, frameSelector, innerSelector, hopSelector, timeoutOptions) {
227
- const frameTarget = await resolveScanFrameTarget(page, frameSelector, timeoutOptions);
259
+ async function scanFrameCandidatesBatched(frameTarget, innerSelector, hopSelector) {
228
260
  if (!frameTarget)
229
- return null;
261
+ return { candidates: null, seamResponsive: false };
230
262
  let scanResults;
231
263
  try {
232
264
  scanResults = await frameTarget.evaluate((0, deep_locator_scan_1.buildScanFrameCandidatesExpr)(innerSelector));
233
265
  }
234
266
  catch (err) {
235
267
  logger.warn(`deepLocator batched scan for ${hopSelector} failed, degrading to per-candidate enumeration: ${(0, errors_1.toErrorMessage)(err)}`);
236
- return null;
268
+ return { candidates: null, seamResponsive: false };
237
269
  }
238
270
  if (!Array.isArray(scanResults) || !scanResults.every(isFrameCandidateScanResult)) {
239
271
  logger.warn(`deepLocator batched scan for ${hopSelector} returned a non-conforming payload, degrading to per-candidate enumeration`);
240
- return null;
272
+ return { candidates: null, seamResponsive: false };
241
273
  }
242
274
  if (scanResults.length === 0) {
243
275
  logger.warn(`deepLocator batched scan for ${hopSelector} matched zero elements, degrading to per-candidate enumeration in case a shadow-DOM control was missed`);
244
- return null;
276
+ return { candidates: null, seamResponsive: true };
245
277
  }
246
278
  const visibleResults = scanResults.filter((entry) => entry.visible);
247
279
  if (visibleResults.length < scanResults.length) {
248
280
  logger.warn(`deepLocator batched scan for ${hopSelector} dropped ${scanResults.length - visibleResults.length} unrendered candidate(s)`);
249
281
  }
250
- return visibleResults.map((entry) => ({
282
+ const candidates = visibleResults.map((entry) => ({
251
283
  index: entry.index,
252
284
  selector: candidateSelector(hopSelector, entry.index),
253
285
  accessibleText: entry.text.trim(),
254
286
  isNav: entry.isNav === true,
255
287
  }));
288
+ return { candidates, seamResponsive: true };
289
+ }
290
+ /**
291
+ * One frame evaluate naming the match indices that fail the shared
292
+ * actionable-visibility predicate, for the legacy loop: a Stagehand `Locator`
293
+ * has no per-element evaluate (and `isVisible()` ignores `aria-hidden`), so an
294
+ * `aria-hidden` decoy can only be recognised from the frame. Returns an empty
295
+ * set (never throws) when there is no frame seam or the read fails, which
296
+ * leaves the loop's behavior as it was without a seam.
297
+ */
298
+ async function readNonActionableIndices(frameTarget, innerSelector, hopSelector) {
299
+ if (!frameTarget)
300
+ return new Set();
301
+ try {
302
+ const indices = await frameTarget.evaluate((0, deep_locator_scan_1.buildNonActionableIndicesExpr)(innerSelector));
303
+ return new Set(Array.isArray(indices) ? indices.filter((i) => typeof i === "number") : []);
304
+ }
305
+ catch (err) {
306
+ logger.warn(`deepLocator non-actionable read for ${hopSelector} failed, enumerating without it: ${(0, errors_1.toErrorMessage)(err)}`);
307
+ return new Set();
308
+ }
256
309
  }
257
310
  /**
258
311
  * Legacy fallback: `count()` then one `nth(index).textContent()` round-trip
@@ -265,7 +318,7 @@ async function scanFrameCandidatesBatched(page, frameSelector, innerSelector, ho
265
318
  * (detached frame, navigated-away element) or either call exceeding its
266
319
  * watchdog budget degrades to `[]`/an empty `accessibleText`.
267
320
  */
268
- async function enumerateCandidatesViaLegacyLoop(delegate, hopSelector, callTimeoutMs, enumerationBudgetMs) {
321
+ async function enumerateCandidatesViaLegacyLoop(delegate, frameTarget, innerSelector, hopSelector, callTimeoutMs, enumerationBudgetMs) {
269
322
  const count = await (0, watchdog_1.withWatchdog)(() => delegate.count(), {
270
323
  timeoutMs: callTimeoutMs,
271
324
  label: `deepLocator count() for ${hopSelector}`,
@@ -275,6 +328,7 @@ async function enumerateCandidatesViaLegacyLoop(delegate, hopSelector, callTimeo
275
328
  });
276
329
  if (count === 0)
277
330
  return [];
331
+ const nonActionable = await readNonActionableIndices(frameTarget, innerSelector, hopSelector);
278
332
  const candidates = [];
279
333
  const enumerationDeadline = Date.now() + enumerationBudgetMs;
280
334
  for (let index = 0; index < count; index++) {
@@ -282,6 +336,8 @@ async function enumerateCandidatesViaLegacyLoop(delegate, hopSelector, callTimeo
282
336
  logger.warn(`deepLocator enumeration for ${hopSelector} aborted after exceeding ${enumerationBudgetMs}ms budget at candidate ${index}/${count}`);
283
337
  break;
284
338
  }
339
+ if (nonActionable.has(index))
340
+ continue;
285
341
  const accessibleText = await (0, watchdog_1.withWatchdog)(() => delegate.nth(index).textContent(), {
286
342
  timeoutMs: callTimeoutMs,
287
343
  label: `deepLocator textContent() for ${hopSelector} nth=${index}`,
@@ -338,9 +394,10 @@ async function resolveDeepLocatorCandidates(page, frameSelector, innerSelector,
338
394
  logger.warn(`deepLocator() is unavailable on this page for ${hopSelector}`);
339
395
  return [];
340
396
  }
341
- const batchedCandidates = await scanFrameCandidatesBatched(page, frameSelector, innerSelector, hopSelector, timeoutOptions);
342
- const candidates = batchedCandidates ??
343
- (await enumerateCandidatesViaLegacyLoop(delegate, hopSelector, callTimeoutMs, enumerationBudgetMs));
397
+ const frameTarget = await resolveScanFrameTarget(page, frameSelector, timeoutOptions);
398
+ const scan = await scanFrameCandidatesBatched(frameTarget, innerSelector, hopSelector);
399
+ const candidates = scan.candidates ??
400
+ (await enumerateCandidatesViaLegacyLoop(delegate, scan.seamResponsive ? frameTarget : null, innerSelector, hopSelector, callTimeoutMs, enumerationBudgetMs));
344
401
  if (!instruction)
345
402
  return candidates;
346
403
  const phrases = extractTaggedPhrases(instruction);
@@ -461,11 +518,42 @@ async function clickDeepLocatorCandidate(page, frameSelector, innerSelector, ind
461
518
  return;
462
519
  }
463
520
  const scaledCallTimeoutMs = callTimeoutMs + index * deep_locator_scan_1.DEEP_LOCATOR_CLICK_INDEX_ROUND_TRIP_MS;
464
- await (0, watchdog_1.withWatchdog)(() => page.deepLocator(hopSelector).nth(index).click(), {
521
+ await (0, watchdog_1.withWatchdog)(() => clickLocatorCentred(page.deepLocator(hopSelector).nth(index), `${hopSelector} nth=${index}`), {
465
522
  timeoutMs: scaledCallTimeoutMs,
466
523
  label: `deepLocator click() for ${hopSelector} nth=${index}`,
467
524
  });
468
525
  }
526
+ /**
527
+ * Centres the deep-locator target and hit-tests its click point before the
528
+ * trusted click, via `resolveNode().objectId` + `Runtime.callFunctionOn` (the
529
+ * top-window helper cannot reach an iframe/OOPIF). A locator exposing no
530
+ * resolvable node or session degrades to a plain `click()`.
531
+ */
532
+ async function clickLocatorCentred(locator, label) {
533
+ const session = locator.frame?.session;
534
+ const resolveNode = locator.resolveNode?.bind(locator);
535
+ if (!resolveNode || !session) {
536
+ await locator.click();
537
+ return;
538
+ }
539
+ const evaluateOnElement = async (functionDeclaration) => {
540
+ const { objectId } = await resolveNode();
541
+ if (!objectId)
542
+ return { state: "missing" };
543
+ try {
544
+ const res = (await session.send("Runtime.callFunctionOn", {
545
+ objectId,
546
+ functionDeclaration,
547
+ returnByValue: true,
548
+ }));
549
+ return res.result?.value ?? { state: "missing" };
550
+ }
551
+ finally {
552
+ await session.send("Runtime.releaseObject", { objectId }).catch(() => undefined);
553
+ }
554
+ };
555
+ await (0, trusted_click_1.clickAfterCentredHitTest)(locator, evaluateOnElement, { label });
556
+ }
469
557
  /**
470
558
  * `fillDeepLocatorCandidate`/`selectDeepLocatorCandidateOption` live in
471
559
  * `deep-locator-actuate.ts`, not here — that module's `writeAndVerify` wraps
@@ -1 +1 @@
1
- {"version":3,"file":"deep-locator-candidates.js","sourceRoot":"","sources":["../../src/scraper/deep-locator-candidates.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"deep-locator-candidates.js","sourceRoot":"","sources":["../../src/scraper/deep-locator-candidates.ts"],"names":[],"mappings":"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"}
@@ -100,6 +100,18 @@ export declare const DEEP_LOCATOR_CLICK_INDEX_ROUND_TRIP_MS = 1000;
100
100
  * `buildRankSubmitCandidatesExpr`'s contract in `submit-control.ts`).
101
101
  */
102
102
  export declare function buildScanFrameCandidatesExpr(innerSelector: string, root?: string): string;
103
+ /**
104
+ * Builds an evaluate expression returning the indices (into the shadow-piercing
105
+ * match order of `innerSelector`) of every match that fails
106
+ * {@link ACTIONABLE_VISIBILITY_EXPR}. Exists for the legacy per-candidate
107
+ * enumeration, whose Stagehand `Locator` exposes no per-element evaluate and
108
+ * whose `isVisible()` ignores `aria-hidden`, so the decoy filter must be read
109
+ * from the frame instead. Traversal mirrors Stagehand's
110
+ * `resolveCssSelectorPierce` (document first, then each open shadow root
111
+ * breadth-first, de-duplicating elements) so an index lines up with
112
+ * `deepLocator(hop).nth(index)` even when the light-DOM query missed the node.
113
+ */
114
+ export declare function buildNonActionableIndicesExpr(innerSelector: string, root?: string): string;
103
115
  /** One candidate {@link buildScanFrameCandidatesExpr}'s evaluate call returns. */
104
116
  export interface FrameCandidateScanResult {
105
117
  /** Position in `querySelectorAll(innerSelector)`'s match order — aligns with `deepLocator(hop).nth(index)` and with {@link buildClickFrameCandidateExpr}'s `index` argument, subject to the shadow-piercing divergence documented on {@link buildScanFrameCandidatesExpr}. */