@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.
- package/dist/api/helpers/reply.d.ts.map +1 -1
- package/dist/api/helpers/reply.js +5 -2
- package/dist/api/helpers/reply.js.map +1 -1
- package/dist/config.d.ts +10 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +2 -0
- package/dist/config.js.map +1 -1
- package/dist/lib/llm/judge.d.ts.map +1 -1
- package/dist/lib/llm/judge.js +6 -1
- package/dist/lib/llm/judge.js.map +1 -1
- package/dist/lib/llm/judges/verify-step-advanced.d.ts +30 -0
- package/dist/lib/llm/judges/verify-step-advanced.d.ts.map +1 -0
- package/dist/lib/llm/judges/verify-step-advanced.js +62 -0
- package/dist/lib/llm/judges/verify-step-advanced.js.map +1 -0
- package/dist/lib/llm/judges/verify-submit.d.ts +7 -1
- package/dist/lib/llm/judges/verify-submit.d.ts.map +1 -1
- package/dist/lib/llm/judges/verify-submit.js +29 -8
- package/dist/lib/llm/judges/verify-submit.js.map +1 -1
- package/dist/lib/llm/schemas.d.ts +8 -0
- package/dist/lib/llm/schemas.d.ts.map +1 -1
- package/dist/lib/llm/schemas.js +21 -13
- package/dist/lib/llm/schemas.js.map +1 -1
- package/dist/lib/logging.d.ts +7 -0
- package/dist/lib/logging.d.ts.map +1 -1
- package/dist/lib/logging.js +19 -1
- package/dist/lib/logging.js.map +1 -1
- package/dist/lib/pii-redaction.d.ts +104 -0
- package/dist/lib/pii-redaction.d.ts.map +1 -0
- package/dist/lib/pii-redaction.js +397 -0
- package/dist/lib/pii-redaction.js.map +1 -0
- package/dist/lib/random.d.ts +3 -1
- package/dist/lib/random.d.ts.map +1 -1
- package/dist/lib/random.js +7 -2
- package/dist/lib/random.js.map +1 -1
- package/dist/lib/telemetry/beacon-capture.d.ts.map +1 -1
- package/dist/lib/telemetry/beacon-capture.js +2 -0
- package/dist/lib/telemetry/beacon-capture.js.map +1 -1
- package/dist/lib/telemetry/call-capture.d.ts.map +1 -1
- package/dist/lib/telemetry/call-capture.js +4 -1
- package/dist/lib/telemetry/call-capture.js.map +1 -1
- package/dist/lib/telemetry/submission-capture.d.ts +11 -1
- package/dist/lib/telemetry/submission-capture.d.ts.map +1 -1
- package/dist/lib/telemetry/submission-capture.js +32 -3
- package/dist/lib/telemetry/submission-capture.js.map +1 -1
- package/dist/plugins/config-plugin.d.ts +8 -0
- package/dist/plugins/config-plugin.d.ts.map +1 -1
- package/dist/plugins/config-plugin.js +6 -1
- package/dist/plugins/config-plugin.js.map +1 -1
- package/dist/plugins/discover.d.ts.map +1 -1
- package/dist/plugins/discover.js +2 -0
- package/dist/plugins/discover.js.map +1 -1
- package/dist/plugins/loader.d.ts.map +1 -1
- package/dist/plugins/loader.js +23 -6
- package/dist/plugins/loader.js.map +1 -1
- package/dist/scraper/actionable-visibility-expr.d.ts +12 -0
- package/dist/scraper/actionable-visibility-expr.d.ts.map +1 -0
- package/dist/scraper/actionable-visibility-expr.js +22 -0
- package/dist/scraper/actionable-visibility-expr.js.map +1 -0
- package/dist/scraper/active-page.d.ts +18 -0
- package/dist/scraper/active-page.d.ts.map +1 -0
- package/dist/scraper/active-page.js +53 -0
- package/dist/scraper/active-page.js.map +1 -0
- package/dist/scraper/browser-click-expr.d.ts +1 -1
- package/dist/scraper/browser-click-expr.d.ts.map +1 -1
- package/dist/scraper/browser-click-expr.js +2 -6
- package/dist/scraper/browser-click-expr.js.map +1 -1
- package/dist/scraper/click-settle.d.ts +19 -0
- package/dist/scraper/click-settle.d.ts.map +1 -0
- package/dist/scraper/click-settle.js +65 -0
- package/dist/scraper/click-settle.js.map +1 -0
- package/dist/scraper/deep-locator-candidates.d.ts +20 -1
- package/dist/scraper/deep-locator-candidates.d.ts.map +1 -1
- package/dist/scraper/deep-locator-candidates.js +110 -22
- package/dist/scraper/deep-locator-candidates.js.map +1 -1
- package/dist/scraper/deep-locator-scan.d.ts +12 -0
- package/dist/scraper/deep-locator-scan.d.ts.map +1 -1
- package/dist/scraper/deep-locator-scan.js +42 -13
- package/dist/scraper/deep-locator-scan.js.map +1 -1
- package/dist/scraper/errors.d.ts +10 -0
- package/dist/scraper/errors.d.ts.map +1 -1
- package/dist/scraper/errors.js +19 -1
- package/dist/scraper/errors.js.map +1 -1
- package/dist/scraper/flow-runner.d.ts +355 -6
- package/dist/scraper/flow-runner.d.ts.map +1 -1
- package/dist/scraper/flow-runner.js +2255 -350
- package/dist/scraper/flow-runner.js.map +1 -1
- package/dist/scraper/navigate.d.ts +3 -3
- package/dist/scraper/navigate.js +4 -4
- package/dist/scraper/navigate.js.map +1 -1
- package/dist/scraper/phantom-click.d.ts +34 -2
- package/dist/scraper/phantom-click.d.ts.map +1 -1
- package/dist/scraper/phantom-click.js +80 -6
- package/dist/scraper/phantom-click.js.map +1 -1
- package/dist/scraper/pool.d.ts.map +1 -1
- package/dist/scraper/pool.js +8 -1
- package/dist/scraper/pool.js.map +1 -1
- package/dist/scraper/quoted-spans.d.ts +35 -0
- package/dist/scraper/quoted-spans.d.ts.map +1 -0
- package/dist/scraper/quoted-spans.js +83 -0
- package/dist/scraper/quoted-spans.js.map +1 -0
- package/dist/scraper/retry.d.ts +1 -1
- package/dist/scraper/retry.d.ts.map +1 -1
- package/dist/scraper/retry.js +5 -1
- package/dist/scraper/retry.js.map +1 -1
- package/dist/scraper/session-browserbase.d.ts +4 -2
- package/dist/scraper/session-browserbase.d.ts.map +1 -1
- package/dist/scraper/session-browserbase.js +63 -20
- package/dist/scraper/session-browserbase.js.map +1 -1
- package/dist/scraper/session-shared.d.ts +5 -0
- package/dist/scraper/session-shared.d.ts.map +1 -1
- package/dist/scraper/session-shared.js.map +1 -1
- package/dist/scraper/session-steel.d.ts.map +1 -1
- package/dist/scraper/session-steel.js +16 -2
- package/dist/scraper/session-steel.js.map +1 -1
- package/dist/scraper/session-teardown.d.ts +31 -1
- package/dist/scraper/session-teardown.d.ts.map +1 -1
- package/dist/scraper/session-teardown.js +60 -4
- package/dist/scraper/session-teardown.js.map +1 -1
- package/dist/scraper/spa-readiness.d.ts +13 -1
- package/dist/scraper/spa-readiness.d.ts.map +1 -1
- package/dist/scraper/spa-readiness.js +31 -1
- package/dist/scraper/spa-readiness.js.map +1 -1
- package/dist/scraper/stagehand-guard.d.ts +8 -3
- package/dist/scraper/stagehand-guard.d.ts.map +1 -1
- package/dist/scraper/stagehand-guard.js +181 -13
- package/dist/scraper/stagehand-guard.js.map +1 -1
- package/dist/scraper/submit-control.d.ts +2 -2
- package/dist/scraper/submit-control.d.ts.map +1 -1
- package/dist/scraper/submit-control.js +5 -21
- package/dist/scraper/submit-control.js.map +1 -1
- package/dist/scraper/target-resolution-diagnostic.d.ts.map +1 -1
- package/dist/scraper/target-resolution-diagnostic.js +6 -11
- package/dist/scraper/target-resolution-diagnostic.js.map +1 -1
- package/dist/scraper/transient-provider-error.d.ts +19 -0
- package/dist/scraper/transient-provider-error.d.ts.map +1 -0
- package/dist/scraper/transient-provider-error.js +59 -0
- package/dist/scraper/transient-provider-error.js.map +1 -0
- package/dist/scraper/trusted-click.d.ts +122 -0
- package/dist/scraper/trusted-click.d.ts.map +1 -0
- package/dist/scraper/trusted-click.js +201 -0
- package/dist/scraper/trusted-click.js.map +1 -0
- package/dist/scraper/upload-affordance-expr.d.ts +33 -0
- package/dist/scraper/upload-affordance-expr.d.ts.map +1 -0
- package/dist/scraper/upload-affordance-expr.js +91 -0
- package/dist/scraper/upload-affordance-expr.js.map +1 -0
- package/dist/scripts/recon-browser.d.ts +30 -2
- package/dist/scripts/recon-browser.d.ts.map +1 -1
- package/dist/scripts/recon-browser.js +133 -27
- package/dist/scripts/recon-browser.js.map +1 -1
- package/dist/scripts/recon-capture-rebind.d.ts +11 -0
- package/dist/scripts/recon-capture-rebind.d.ts.map +1 -0
- package/dist/scripts/recon-capture-rebind.js +26 -0
- package/dist/scripts/recon-capture-rebind.js.map +1 -0
- package/dist/scripts/recon-generate.d.ts +159 -8
- package/dist/scripts/recon-generate.d.ts.map +1 -1
- package/dist/scripts/recon-generate.js +998 -182
- package/dist/scripts/recon-generate.js.map +1 -1
- package/dist/scripts/recon-shared.d.ts +7 -0
- package/dist/scripts/recon-shared.d.ts.map +1 -1
- package/dist/scripts/recon-shared.js +19 -0
- package/dist/scripts/recon-shared.js.map +1 -1
- package/dist/site-plugin.d.ts +8 -0
- package/dist/site-plugin.d.ts.map +1 -1
- package/dist/types/pii-redaction.d.ts +39 -0
- package/dist/types/pii-redaction.d.ts.map +1 -0
- package/dist/types/pii-redaction.js +3 -0
- package/dist/types/pii-redaction.js.map +1 -0
- 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
|
|
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;
|
|
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 =
|
|
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
|
|
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
|
-
*
|
|
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;
|
|
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
|
-
*
|
|
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
|
|
77
|
-
const
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
const nearestNegationBefore = negationStarts.filter((idx) => idx <
|
|
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,
|
|
84
|
-
|
|
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(
|
|
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
|
-
|
|
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
|
|
342
|
-
const
|
|
343
|
-
|
|
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)
|
|
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}. */
|