@enricai/barnacle 1.12.35 → 1.12.37
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/lib/llm/schemas.d.ts +2 -0
- package/dist/lib/llm/schemas.d.ts.map +1 -1
- package/dist/lib/llm/schemas.js +8 -0
- package/dist/lib/llm/schemas.js.map +1 -1
- package/dist/lib/tracking-click.d.ts.map +1 -1
- package/dist/lib/tracking-click.js +3 -2
- package/dist/lib/tracking-click.js.map +1 -1
- package/dist/plugins/config-plugin.d.ts +1 -0
- package/dist/plugins/config-plugin.d.ts.map +1 -1
- package/dist/plugins/config-plugin.js +3 -0
- package/dist/plugins/config-plugin.js.map +1 -1
- package/dist/scraper/captcha-callback-capture.d.ts +22 -0
- package/dist/scraper/captcha-callback-capture.d.ts.map +1 -0
- package/dist/scraper/captcha-callback-capture.js +91 -0
- package/dist/scraper/captcha-callback-capture.js.map +1 -0
- package/dist/scraper/errors.d.ts +4 -1
- package/dist/scraper/errors.d.ts.map +1 -1
- package/dist/scraper/errors.js +3 -0
- package/dist/scraper/errors.js.map +1 -1
- package/dist/scraper/flow-runner.d.ts +64 -38
- package/dist/scraper/flow-runner.d.ts.map +1 -1
- package/dist/scraper/flow-runner.js +210 -110
- package/dist/scraper/flow-runner.js.map +1 -1
- package/dist/scraper/session.d.ts.map +1 -1
- package/dist/scraper/session.js +7 -5
- package/dist/scraper/session.js.map +1 -1
- package/dist/scraper/spa-readiness.d.ts +28 -0
- package/dist/scraper/spa-readiness.d.ts.map +1 -0
- package/dist/scraper/spa-readiness.js +57 -0
- package/dist/scraper/spa-readiness.js.map +1 -0
- package/dist/scripts/recon-browser.d.ts +5 -0
- package/dist/scripts/recon-browser.d.ts.map +1 -1
- package/dist/scripts/recon-browser.js +64 -69
- package/dist/scripts/recon-browser.js.map +1 -1
- package/dist/scripts/recon-generate.d.ts +10 -0
- package/dist/scripts/recon-generate.d.ts.map +1 -1
- package/dist/scripts/recon-generate.js +50 -14
- package/dist/scripts/recon-generate.js.map +1 -1
- package/package.json +5 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/scraper/session.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/scraper/session.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAGtF,YAAY,EACV,8BAA8B,EAC9B,cAAc,EACd,qBAAqB,EACrB,YAAY,GACb,MAAM,0BAA0B,CAAC;AAElC;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,oBAAoB,CAAC,IAAI,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,cAAc,CAAC,CAWhG"}
|
package/dist/scraper/session.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.createBrowserSession = createBrowserSession;
|
|
4
4
|
const config_1 = require("../config");
|
|
5
|
+
const captcha_callback_capture_1 = require("../scraper/captcha-callback-capture");
|
|
5
6
|
const session_browserbase_1 = require("../scraper/session-browserbase");
|
|
6
7
|
const session_steel_1 = require("../scraper/session-steel");
|
|
7
8
|
/**
|
|
@@ -23,12 +24,13 @@ const session_steel_1 = require("../scraper/session-steel");
|
|
|
23
24
|
*/
|
|
24
25
|
async function createBrowserSession(opts) {
|
|
25
26
|
const provider = opts?.provider ?? config_1.config.scraper.provider;
|
|
26
|
-
|
|
27
|
-
|
|
27
|
+
const session = provider === "browserbase"
|
|
28
|
+
? await (0, session_browserbase_1.createBrowserbaseBrowserSession)({
|
|
28
29
|
advancedStealth: opts?.advancedStealth,
|
|
29
30
|
browserbaseSessionCreateParams: opts?.browserbaseSessionCreateParams,
|
|
30
|
-
})
|
|
31
|
-
|
|
32
|
-
|
|
31
|
+
})
|
|
32
|
+
: await (0, session_steel_1.createSteelBrowserSession)();
|
|
33
|
+
await session.stagehand.context.addInitScript((0, captcha_callback_capture_1.buildHcaptchaCallbackCaptureScript)());
|
|
34
|
+
return session;
|
|
33
35
|
}
|
|
34
36
|
//# sourceMappingURL=session.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/scraper/session.ts"],"names":[],"mappings":";;;AAAA,qCAAkC;AAClC,uEAAgF;AAEhF,2DAAoE;AASpE;;;;;;;;;;;;;;;;GAgBG;AACI,KAAK,+BAA+B,IAA4B;IACrE,MAAM,QAAQ,GAAG,IAAI,EAAE,QAAQ,IAAI,eAAM,CAAC,OAAO,CAAC,QAAQ,CAAC;IAC3D,
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/scraper/session.ts"],"names":[],"mappings":";;;AAAA,qCAAkC;AAClC,iFAAwF;AACxF,uEAAgF;AAEhF,2DAAoE;AASpE;;;;;;;;;;;;;;;;GAgBG;AACI,KAAK,+BAA+B,IAA4B;IACrE,MAAM,QAAQ,GAAG,IAAI,EAAE,QAAQ,IAAI,eAAM,CAAC,OAAO,CAAC,QAAQ,CAAC;IAC3D,MAAM,OAAO,GACX,QAAQ,KAAK,aAAa;QACxB,CAAC,CAAC,MAAM,IAAA,qDAA+B,EAAC;YACpC,eAAe,EAAE,IAAI,EAAE,eAAe;YACtC,8BAA8B,EAAE,IAAI,EAAE,8BAA8B;SACrE,CAAC;QACJ,CAAC,CAAC,MAAM,IAAA,yCAAyB,GAAE,CAAC;IACxC,MAAM,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,aAAa,CAAC,IAAA,6DAAkC,GAAE,CAAC,CAAC;IACpF,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { Page } from "@browserbasehq/stagehand";
|
|
2
|
+
import type { Logger } from "../types/logging";
|
|
3
|
+
/**
|
|
4
|
+
* Block until a just-navigated SPA has actually hydrated, so the flow does not
|
|
5
|
+
* begin stepping against a shell page. `page.goto(..., "networkidle")` on a
|
|
6
|
+
* bot-managed/CDN-fronted single-page app resolves during the challenge/redirect —
|
|
7
|
+
* before the client framework renders the real DOM — so the first steps would
|
|
8
|
+
* otherwise probe an empty page, find no candidates, and (being optional) skip
|
|
9
|
+
* the entire flow. The recon CLI has this gate inline; generated plugins call it
|
|
10
|
+
* here so they inherit the same behavior. Polls `document.body.outerHTML.length`
|
|
11
|
+
* up to a threshold, then proceeds regardless (best-effort, never throws).
|
|
12
|
+
*
|
|
13
|
+
* Each `document.body.outerHTML.length` read is itself bounded by a watchdog
|
|
14
|
+
* (capped to one poll interval) and treated as "still 0 chars" on timeout —
|
|
15
|
+
* same pattern as `waitForChildFrameReady`'s `isReady()` probe. Without this,
|
|
16
|
+
* a single wedged CDP round-trip inside `readBodyLength` would pend forever
|
|
17
|
+
* and the `while (Date.now() < deadline)` loop below would never be
|
|
18
|
+
* re-entered, defeating the very deadline it exists to enforce.
|
|
19
|
+
* `page.waitForTimeout(pollMs)` is left unguarded: it is a plain delay (no
|
|
20
|
+
* DOM/network read whose response can be lost), so it does not carry the
|
|
21
|
+
* "wedged read" failure mode this fix targets.
|
|
22
|
+
*/
|
|
23
|
+
export declare function waitForSpaReady(page: Page, logger: Logger, opts?: {
|
|
24
|
+
timeoutMs?: number;
|
|
25
|
+
pollMs?: number;
|
|
26
|
+
minBodyLength?: number;
|
|
27
|
+
}): Promise<void>;
|
|
28
|
+
//# sourceMappingURL=spa-readiness.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spa-readiness.d.ts","sourceRoot":"","sources":["../../src/scraper/spa-readiness.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAGrD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAO9C;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,eAAe,CACnC,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,MAAM,EACd,IAAI,GAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAAO,GACzE,OAAO,CAAC,IAAI,CAAC,CAkCf"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.waitForSpaReady = waitForSpaReady;
|
|
4
|
+
const watchdog_1 = require("../scraper/watchdog");
|
|
5
|
+
/** SPA-readiness gate defaults — match the recon CLI's post-navigation wait. */
|
|
6
|
+
const SPA_READINESS_TIMEOUT_MS = 15_000;
|
|
7
|
+
const SPA_READINESS_POLL_MS = 500;
|
|
8
|
+
const SPA_MIN_BODY_LENGTH = 5_000;
|
|
9
|
+
/**
|
|
10
|
+
* Block until a just-navigated SPA has actually hydrated, so the flow does not
|
|
11
|
+
* begin stepping against a shell page. `page.goto(..., "networkidle")` on a
|
|
12
|
+
* bot-managed/CDN-fronted single-page app resolves during the challenge/redirect —
|
|
13
|
+
* before the client framework renders the real DOM — so the first steps would
|
|
14
|
+
* otherwise probe an empty page, find no candidates, and (being optional) skip
|
|
15
|
+
* the entire flow. The recon CLI has this gate inline; generated plugins call it
|
|
16
|
+
* here so they inherit the same behavior. Polls `document.body.outerHTML.length`
|
|
17
|
+
* up to a threshold, then proceeds regardless (best-effort, never throws).
|
|
18
|
+
*
|
|
19
|
+
* Each `document.body.outerHTML.length` read is itself bounded by a watchdog
|
|
20
|
+
* (capped to one poll interval) and treated as "still 0 chars" on timeout —
|
|
21
|
+
* same pattern as `waitForChildFrameReady`'s `isReady()` probe. Without this,
|
|
22
|
+
* a single wedged CDP round-trip inside `readBodyLength` would pend forever
|
|
23
|
+
* and the `while (Date.now() < deadline)` loop below would never be
|
|
24
|
+
* re-entered, defeating the very deadline it exists to enforce.
|
|
25
|
+
* `page.waitForTimeout(pollMs)` is left unguarded: it is a plain delay (no
|
|
26
|
+
* DOM/network read whose response can be lost), so it does not carry the
|
|
27
|
+
* "wedged read" failure mode this fix targets.
|
|
28
|
+
*/
|
|
29
|
+
async function waitForSpaReady(page, logger, opts = {}) {
|
|
30
|
+
const timeoutMs = opts.timeoutMs ?? SPA_READINESS_TIMEOUT_MS;
|
|
31
|
+
const pollMs = opts.pollMs ?? SPA_READINESS_POLL_MS;
|
|
32
|
+
const minBodyLength = opts.minBodyLength ?? SPA_MIN_BODY_LENGTH;
|
|
33
|
+
const bodyLengthExpr = "document.body ? document.body.outerHTML.length : 0";
|
|
34
|
+
const readBodyLength = async () => {
|
|
35
|
+
const raw = await (0, watchdog_1.withWatchdog)(() => page.evaluate(bodyLengthExpr), {
|
|
36
|
+
timeoutMs: pollMs,
|
|
37
|
+
label: "flow-runner: spa readiness body-length probe",
|
|
38
|
+
}).catch(() => 0);
|
|
39
|
+
return typeof raw === "number" ? raw : 0;
|
|
40
|
+
};
|
|
41
|
+
let bodyLength = await readBodyLength();
|
|
42
|
+
if (bodyLength >= minBodyLength) {
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
logger.info(`spa readiness: body ${bodyLength} chars < ${minBodyLength} threshold — waiting for SPA to render`);
|
|
46
|
+
const deadline = Date.now() + timeoutMs;
|
|
47
|
+
while (Date.now() < deadline) {
|
|
48
|
+
await page.waitForTimeout(pollMs);
|
|
49
|
+
bodyLength = await readBodyLength();
|
|
50
|
+
if (bodyLength >= minBodyLength) {
|
|
51
|
+
logger.info(`spa readiness: body grew to ${bodyLength} chars — SPA rendered`);
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
logger.warn(`spa readiness: body still ${bodyLength} chars after ${timeoutMs}ms — proceeding with possibly incomplete page`);
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=spa-readiness.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spa-readiness.js","sourceRoot":"","sources":["../../src/scraper/spa-readiness.ts"],"names":[],"mappings":";;;AAEA,iDAAkD;AAGlD,gFAAgF;AAChF,MAAM,wBAAwB,GAAG,MAAM,CAAC;AACxC,MAAM,qBAAqB,GAAG,GAAG,CAAC;AAClC,MAAM,mBAAmB,GAAG,KAAK,CAAC;AAElC;;;;;;;;;;;;;;;;;;;GAmBG;AACI,KAAK,0BACV,IAAU,EACV,MAAc,EACd,IAAI,GAAoE,EAAE;IAE1E,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,wBAAwB,CAAC;IAC7D,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,qBAAqB,CAAC;IACpD,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,IAAI,mBAAmB,CAAC;IAChE,MAAM,cAAc,GAAG,oDAAoD,CAAC;IAE5E,MAAM,cAAc,GAAG,KAAK,IAAqB,EAAE;QACjD,MAAM,GAAG,GAAG,MAAM,IAAA,uBAAY,EAAC,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE;YAClE,SAAS,EAAE,MAAM;YACjB,KAAK,EAAE,8CAA8C;SACtD,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;QAClB,OAAO,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3C,CAAC,CAAC;IAEF,IAAI,UAAU,GAAG,MAAM,cAAc,EAAE,CAAC;IACxC,IAAI,UAAU,IAAI,aAAa,EAAE,CAAC;QAChC,OAAO;IACT,CAAC;IAED,MAAM,CAAC,IAAI,CACT,uBAAuB,UAAU,YAAY,aAAa,wCAAwC,CACnG,CAAC;IACF,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;IACxC,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;QAC7B,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QAClC,UAAU,GAAG,MAAM,cAAc,EAAE,CAAC;QACpC,IAAI,UAAU,IAAI,aAAa,EAAE,CAAC;YAChC,MAAM,CAAC,IAAI,CAAC,+BAA+B,UAAU,uBAAuB,CAAC,CAAC;YAC9E,OAAO;QACT,CAAC;IACH,CAAC;IACD,MAAM,CAAC,IAAI,CACT,6BAA6B,UAAU,gBAAgB,SAAS,+CAA+C,CAChH,CAAC;AACJ,CAAC"}
|
|
@@ -197,6 +197,7 @@ declare const RECON_FLOW_SCHEMA: z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.
|
|
|
197
197
|
}>>;
|
|
198
198
|
timeoutMs: z.ZodOptional<z.ZodNumber>;
|
|
199
199
|
}, z.core.$strip>>;
|
|
200
|
+
navigateTo: z.ZodOptional<z.ZodString>;
|
|
200
201
|
payloadField: z.ZodOptional<z.ZodString>;
|
|
201
202
|
payloadFieldNone: z.ZodOptional<z.ZodBoolean>;
|
|
202
203
|
targetId: z.ZodOptional<z.ZodString>;
|
|
@@ -251,6 +252,7 @@ export declare const RECON_FLOW_FILE_SCHEMA: z.ZodUnion<readonly [z.ZodArray<z.Z
|
|
|
251
252
|
}>>;
|
|
252
253
|
timeoutMs: z.ZodOptional<z.ZodNumber>;
|
|
253
254
|
}, z.core.$strip>>;
|
|
255
|
+
navigateTo: z.ZodOptional<z.ZodString>;
|
|
254
256
|
payloadField: z.ZodOptional<z.ZodString>;
|
|
255
257
|
payloadFieldNone: z.ZodOptional<z.ZodBoolean>;
|
|
256
258
|
targetId: z.ZodOptional<z.ZodString>;
|
|
@@ -280,6 +282,7 @@ export declare const RECON_FLOW_FILE_SCHEMA: z.ZodUnion<readonly [z.ZodArray<z.Z
|
|
|
280
282
|
}>>;
|
|
281
283
|
timeoutMs: z.ZodOptional<z.ZodNumber>;
|
|
282
284
|
}, z.core.$strip>>;
|
|
285
|
+
navigateTo: z.ZodOptional<z.ZodString>;
|
|
283
286
|
payloadField: z.ZodOptional<z.ZodString>;
|
|
284
287
|
payloadFieldNone: z.ZodOptional<z.ZodBoolean>;
|
|
285
288
|
targetId: z.ZodOptional<z.ZodString>;
|
|
@@ -328,6 +331,7 @@ interface NormalizedStep {
|
|
|
328
331
|
payloadFieldNone?: boolean;
|
|
329
332
|
targetId?: string;
|
|
330
333
|
origin: "original" | "replan";
|
|
334
|
+
navigateTo?: string;
|
|
331
335
|
}
|
|
332
336
|
declare function normalizeFlow(steps: z.infer<typeof RECON_FLOW_SCHEMA>): NormalizedStep[];
|
|
333
337
|
/**
|
|
@@ -348,6 +352,7 @@ declare function denormalizeStep(step: NormalizedStep): string | {
|
|
|
348
352
|
payloadFieldNone?: true;
|
|
349
353
|
targetId?: string;
|
|
350
354
|
origin?: "replan";
|
|
355
|
+
navigateTo?: string;
|
|
351
356
|
};
|
|
352
357
|
/**
|
|
353
358
|
* Order-independent structural dedup: drops any item byte-identical to an
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recon-browser.d.ts","sourceRoot":"","sources":["../../src/scripts/recon-browser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;AAMH,OAAO,KAAK,SAAS,MAAM,mBAAmB,CAAC;AAE/C,OAAO,KAAK,EAAU,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAEnF,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AA4B3B,OAAO,EACL,KAAK,aAAa,EAElB,KAAK,SAAS,EAEd,KAAK,eAAe,EAkBrB,MAAM,uBAAuB,CAAC;AAO/B,OAAO,EAAwB,KAAK,YAAY,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"recon-browser.d.ts","sourceRoot":"","sources":["../../src/scripts/recon-browser.ts"],"names":[],"mappings":"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"}
|
|
@@ -98,6 +98,7 @@ const frame_target_1 = require("../scraper/frame-target");
|
|
|
98
98
|
const retry_1 = require("../scraper/retry");
|
|
99
99
|
const session_1 = require("../scraper/session");
|
|
100
100
|
const session_teardown_1 = require("../scraper/session-teardown");
|
|
101
|
+
const spa_readiness_1 = require("../scraper/spa-readiness");
|
|
101
102
|
const stagehand_guard_1 = require("../scraper/stagehand-guard");
|
|
102
103
|
const watchdog_1 = require("../scraper/watchdog");
|
|
103
104
|
const judge_llm_batch_1 = require("../scripts/judge-llm-batch");
|
|
@@ -663,6 +664,7 @@ function normalizeFlow(steps) {
|
|
|
663
664
|
targetId: s.targetId,
|
|
664
665
|
// Preserve a persisted replan marker across runs; absence = authored.
|
|
665
666
|
origin: s.origin ?? "original",
|
|
667
|
+
navigateTo: s.navigateTo,
|
|
666
668
|
});
|
|
667
669
|
}
|
|
668
670
|
/**
|
|
@@ -693,11 +695,12 @@ function substituteFlowEnvVars(steps) {
|
|
|
693
695
|
*/
|
|
694
696
|
function denormalizeStep(step) {
|
|
695
697
|
const hasSplicerHint = step.payloadField !== undefined || step.payloadFieldNone === true;
|
|
696
|
-
// targetId
|
|
697
|
-
// the round-trip, so a step carrying
|
|
698
|
-
// it has no flags. Authored ("original") origin stays
|
|
699
|
-
// on every step would needlessly object-ify the
|
|
700
|
-
|
|
698
|
+
// targetId, a "replan" origin, and navigateTo are load-bearing identity that
|
|
699
|
+
// must survive the round-trip, so a step carrying any of them is forced to
|
|
700
|
+
// object form even when it has no flags. Authored ("original") origin stays
|
|
701
|
+
// implicit — persisting it on every step would needlessly object-ify the
|
|
702
|
+
// whole flow file.
|
|
703
|
+
const hasIdentity = step.targetId !== undefined || step.origin === "replan" || step.navigateTo !== undefined;
|
|
701
704
|
if (!step.optional &&
|
|
702
705
|
!step.upload &&
|
|
703
706
|
!step.submitStep &&
|
|
@@ -730,6 +733,8 @@ function denormalizeStep(step) {
|
|
|
730
733
|
out.targetId = step.targetId;
|
|
731
734
|
if (step.origin === "replan")
|
|
732
735
|
out.origin = "replan";
|
|
736
|
+
if (step.navigateTo !== undefined)
|
|
737
|
+
out.navigateTo = step.navigateTo;
|
|
733
738
|
return out;
|
|
734
739
|
}
|
|
735
740
|
/**
|
|
@@ -1828,29 +1833,7 @@ async function main() {
|
|
|
1828
1833
|
logger.warn(`navigation wait (${GOTO_WAIT_UNTIL}) did not settle: ${(0, errors_1.toErrorMessage)(err)} — continuing; the SPA readiness probe below decides whether the page is usable`);
|
|
1829
1834
|
}
|
|
1830
1835
|
await snapshotAndPersistCookieJar(page, jarCounter, "goto", currentPhase, -1);
|
|
1831
|
-
|
|
1832
|
-
const SPA_READINESS_POLL_MS = 500;
|
|
1833
|
-
const SPA_MIN_BODY_LENGTH = 5_000;
|
|
1834
|
-
const spaDeadline = Date.now() + SPA_READINESS_TIMEOUT_MS;
|
|
1835
|
-
let bodyLength = await page
|
|
1836
|
-
.evaluate("document.body ? document.body.outerHTML.length : 0")
|
|
1837
|
-
.catch(() => 0);
|
|
1838
|
-
if (typeof bodyLength === "number" && bodyLength < SPA_MIN_BODY_LENGTH) {
|
|
1839
|
-
logger.info(`spa readiness: body ${bodyLength} chars < ${SPA_MIN_BODY_LENGTH} threshold — waiting for SPA to render`);
|
|
1840
|
-
while (Date.now() < spaDeadline) {
|
|
1841
|
-
await new Promise((r) => setTimeout(r, SPA_READINESS_POLL_MS));
|
|
1842
|
-
bodyLength = await page
|
|
1843
|
-
.evaluate("document.body ? document.body.outerHTML.length : 0")
|
|
1844
|
-
.catch(() => 0);
|
|
1845
|
-
if (typeof bodyLength === "number" && bodyLength >= SPA_MIN_BODY_LENGTH) {
|
|
1846
|
-
logger.info(`spa readiness: body grew to ${bodyLength} chars — SPA rendered`);
|
|
1847
|
-
break;
|
|
1848
|
-
}
|
|
1849
|
-
}
|
|
1850
|
-
if (typeof bodyLength === "number" && bodyLength < SPA_MIN_BODY_LENGTH) {
|
|
1851
|
-
logger.warn(`spa readiness: body still ${bodyLength} chars after ${SPA_READINESS_TIMEOUT_MS}ms — proceeding with possibly incomplete page`);
|
|
1852
|
-
}
|
|
1853
|
-
}
|
|
1836
|
+
await (0, spa_readiness_1.waitForSpaReady)(page, logger);
|
|
1854
1837
|
const anthropic = (0, anthropic_client_1.buildAnthropicClient)();
|
|
1855
1838
|
const rephraseModel = (0, anthropic_client_1.buildRephraseModel)();
|
|
1856
1839
|
if (!anthropic) {
|
|
@@ -1913,7 +1896,7 @@ async function main() {
|
|
|
1913
1896
|
const currentOrigin = originOf(readLiveUrl());
|
|
1914
1897
|
if (currentOrigin !== "" && currentOrigin !== lastOrigin) {
|
|
1915
1898
|
logger.info(`origin changed ${lastOrigin || "(none)"} → ${currentOrigin}; re-gating on SPA hydration`);
|
|
1916
|
-
await (0,
|
|
1899
|
+
await (0, spa_readiness_1.waitForSpaReady)(page, logger);
|
|
1917
1900
|
lastOrigin = currentOrigin;
|
|
1918
1901
|
}
|
|
1919
1902
|
// Debug: dump the full DOM right before this step's cascade runs. Lets
|
|
@@ -1961,48 +1944,60 @@ async function main() {
|
|
|
1961
1944
|
// No-ops (zero delay) when frameTarget.frame is null.
|
|
1962
1945
|
await (0, frame_target_1.waitForChildFrameReady)(frameTarget);
|
|
1963
1946
|
try {
|
|
1964
|
-
|
|
1965
|
-
|
|
1966
|
-
|
|
1967
|
-
|
|
1968
|
-
|
|
1969
|
-
|
|
1970
|
-
|
|
1971
|
-
|
|
1972
|
-
|
|
1973
|
-
|
|
1974
|
-
|
|
1975
|
-
|
|
1976
|
-
|
|
1977
|
-
|
|
1947
|
+
// A navigateTo step is a direct page.goto, not an act/observe against
|
|
1948
|
+
// the current DOM, so it skips straight to executeNavigateStep
|
|
1949
|
+
// instead of the self-heal cascade.
|
|
1950
|
+
const stepPromise = step.navigateTo !== undefined
|
|
1951
|
+
? (0, flow_runner_1.executeNavigateStep)({
|
|
1952
|
+
page,
|
|
1953
|
+
url: step.navigateTo,
|
|
1954
|
+
optional: step.optional,
|
|
1955
|
+
logger,
|
|
1956
|
+
waitUntil: GOTO_WAIT_UNTIL,
|
|
1957
|
+
timeoutMs: flow_runner_1.GOTO_TIMEOUT_MS,
|
|
1958
|
+
})
|
|
1959
|
+
: (0, flow_runner_1.executeStepWithHealing)({
|
|
1960
|
+
stagehand,
|
|
1961
|
+
page,
|
|
1962
|
+
frameTarget,
|
|
1963
|
+
step: step.instruction,
|
|
1964
|
+
optional: step.optional,
|
|
1965
|
+
upload: step.upload,
|
|
1966
|
+
submitStep: step.submitStep === true,
|
|
1967
|
+
captchaGated: step.captchaGated === true,
|
|
1968
|
+
emailStep: step.emailStep === true,
|
|
1969
|
+
emailStepConfig: step.emailStepConfig,
|
|
1970
|
+
allocatedInbox,
|
|
1971
|
+
flowHasSubmitSemantics: (0, flow_runner_1.flowHasSubmitSemantics)({
|
|
1972
|
+
steps: plan.map((s) => ({ submitStep: s.submitStep === true })),
|
|
1973
|
+
submitEndpointPattern,
|
|
1974
|
+
requireSubmitEndpointMatch,
|
|
1975
|
+
}),
|
|
1976
|
+
stepIndex: i,
|
|
1977
|
+
totalSteps: () => plan.length,
|
|
1978
|
+
phase: currentPhase,
|
|
1979
|
+
signalCounter,
|
|
1980
|
+
recentCaptures,
|
|
1981
|
+
recentCaptureMeta,
|
|
1982
|
+
anthropic,
|
|
1983
|
+
rephraseModel,
|
|
1984
|
+
logger,
|
|
1985
|
+
uploadFixture,
|
|
1986
|
+
isFinalStep: i === plan.length - 1,
|
|
1978
1987
|
submitEndpointPattern,
|
|
1988
|
+
submittedStateSelectors,
|
|
1979
1989
|
requireSubmitEndpointMatch,
|
|
1980
|
-
|
|
1981
|
-
|
|
1982
|
-
|
|
1983
|
-
|
|
1984
|
-
|
|
1985
|
-
|
|
1986
|
-
|
|
1987
|
-
|
|
1988
|
-
|
|
1989
|
-
|
|
1990
|
-
|
|
1991
|
-
isFinalStep: i === plan.length - 1,
|
|
1992
|
-
submitEndpointPattern,
|
|
1993
|
-
submittedStateSelectors,
|
|
1994
|
-
requireSubmitEndpointMatch,
|
|
1995
|
-
advanceTransitionBodyPattern,
|
|
1996
|
-
successUrlFragments,
|
|
1997
|
-
successPageTitleHints,
|
|
1998
|
-
ownBackendHostnames,
|
|
1999
|
-
knownErrorClassPrefixes,
|
|
2000
|
-
wizardExitButtonLabels,
|
|
2001
|
-
getSuppressedAisdkElementIdErrorCount: session.getSuppressedAisdkElementIdErrorCount,
|
|
2002
|
-
trajectory,
|
|
2003
|
-
captureFn,
|
|
2004
|
-
onStepFailure: dumpStepFailure,
|
|
2005
|
-
});
|
|
1990
|
+
advanceTransitionBodyPattern,
|
|
1991
|
+
successUrlFragments,
|
|
1992
|
+
successPageTitleHints,
|
|
1993
|
+
ownBackendHostnames,
|
|
1994
|
+
knownErrorClassPrefixes,
|
|
1995
|
+
wizardExitButtonLabels,
|
|
1996
|
+
getSuppressedAisdkElementIdErrorCount: session.getSuppressedAisdkElementIdErrorCount,
|
|
1997
|
+
trajectory,
|
|
1998
|
+
captureFn,
|
|
1999
|
+
onStepFailure: dumpStepFailure,
|
|
2000
|
+
});
|
|
2006
2001
|
// Races the step's own promise against the session's teardown death
|
|
2007
2002
|
// signal (bugfix-003's raceAgainstTeardown): when Stagehand's CDP
|
|
2008
2003
|
// transport is reaped mid-step, the in-flight promise above never
|