visionclaw 0.1.216-beta.1 → 0.1.216-beta.3
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/agent/browser-launcher.d.ts +14 -8
- package/dist/agent/browser-launcher.d.ts.map +1 -1
- package/dist/agent/browser-launcher.js +155 -126
- package/dist/agent/browser-launcher.js.map +1 -1
- package/dist/agent/browser-selection.d.ts +24 -0
- package/dist/agent/browser-selection.d.ts.map +1 -0
- package/dist/agent/browser-selection.js +90 -0
- package/dist/agent/browser-selection.js.map +1 -0
- package/dist/agent/context.d.ts.map +1 -1
- package/dist/agent/context.js +21 -2
- package/dist/agent/context.js.map +1 -1
- package/dist/agent/engine-fallback.d.ts +175 -0
- package/dist/agent/engine-fallback.d.ts.map +1 -0
- package/dist/agent/engine-fallback.js +454 -0
- package/dist/agent/engine-fallback.js.map +1 -0
- package/dist/agent/engine-probe.d.ts +47 -0
- package/dist/agent/engine-probe.d.ts.map +1 -0
- package/dist/agent/engine-probe.js +99 -0
- package/dist/agent/engine-probe.js.map +1 -0
- package/dist/agent/engine-switch-target.d.ts.map +1 -1
- package/dist/agent/engine-switch-target.js +23 -5
- package/dist/agent/engine-switch-target.js.map +1 -1
- package/dist/agent/engine-switch.d.ts +21 -4
- package/dist/agent/engine-switch.d.ts.map +1 -1
- package/dist/agent/engine-switch.js +71 -22
- package/dist/agent/engine-switch.js.map +1 -1
- package/dist/agent/engines/browser-tool-policy.d.ts +3 -8
- package/dist/agent/engines/browser-tool-policy.d.ts.map +1 -1
- package/dist/agent/engines/browser-tool-policy.js +1 -49
- package/dist/agent/engines/browser-tool-policy.js.map +1 -1
- package/dist/agent/engines/claude/session.d.ts +0 -1
- package/dist/agent/engines/claude/session.d.ts.map +1 -1
- package/dist/agent/engines/claude/session.js +2 -8
- package/dist/agent/engines/claude/session.js.map +1 -1
- package/dist/agent/engines/pi/tools.d.ts.map +1 -1
- package/dist/agent/engines/pi/tools.js +4 -3
- package/dist/agent/engines/pi/tools.js.map +1 -1
- package/dist/agent/engines/pi-coding/session.d.ts +0 -1
- package/dist/agent/engines/pi-coding/session.d.ts.map +1 -1
- package/dist/agent/engines/pi-coding/session.js +2 -8
- package/dist/agent/engines/pi-coding/session.js.map +1 -1
- package/dist/agent/engines/session-types.d.ts +2 -0
- package/dist/agent/engines/session-types.d.ts.map +1 -1
- package/dist/agent/heartbeat-manager.d.ts +10 -6
- package/dist/agent/heartbeat-manager.d.ts.map +1 -1
- package/dist/agent/heartbeat-manager.js +30 -24
- package/dist/agent/heartbeat-manager.js.map +1 -1
- package/dist/agent/interrupt-handler.d.ts.map +1 -1
- package/dist/agent/interrupt-handler.js +2 -1
- package/dist/agent/interrupt-handler.js.map +1 -1
- package/dist/agent/loop.d.ts.map +1 -1
- package/dist/agent/loop.js +80 -15
- package/dist/agent/loop.js.map +1 -1
- package/dist/agent/model-provider.d.ts +63 -12
- package/dist/agent/model-provider.d.ts.map +1 -1
- package/dist/agent/model-provider.js +97 -34
- package/dist/agent/model-provider.js.map +1 -1
- package/dist/agent/nightly-maintenance/memory-dreaming.d.ts +2 -2
- package/dist/agent/nightly-maintenance/memory-dreaming.js +4 -4
- package/dist/agent/nightly-maintenance/memory-dreaming.js.map +1 -1
- package/dist/agent/nightly-maintenance/vocabulary-processor.d.ts +2 -11
- package/dist/agent/nightly-maintenance/vocabulary-processor.d.ts.map +1 -1
- package/dist/agent/nightly-maintenance/vocabulary-processor.js +36 -70
- package/dist/agent/nightly-maintenance/vocabulary-processor.js.map +1 -1
- package/dist/agent/onboarding-gate.d.ts.map +1 -1
- package/dist/agent/onboarding-gate.js +2 -0
- package/dist/agent/onboarding-gate.js.map +1 -1
- package/dist/agent/runtime-surface.d.ts +7 -23
- package/dist/agent/runtime-surface.d.ts.map +1 -1
- package/dist/agent/runtime-surface.js +19 -144
- package/dist/agent/runtime-surface.js.map +1 -1
- package/dist/agent/screenshot-injector.js +1 -1
- package/dist/agent/screenshot-injector.js.map +1 -1
- package/dist/agent/status.d.ts.map +1 -1
- package/dist/agent/status.js +27 -22
- package/dist/agent/status.js.map +1 -1
- package/dist/agent/stream-handler.d.ts.map +1 -1
- package/dist/agent/stream-handler.js +0 -1
- package/dist/agent/stream-handler.js.map +1 -1
- package/dist/agent/tool-call-watchdog.d.ts.map +1 -1
- package/dist/agent/tool-call-watchdog.js +3 -4
- package/dist/agent/tool-call-watchdog.js.map +1 -1
- package/dist/agent/tool-usage.js +1 -1
- package/dist/agent/tool-usage.js.map +1 -1
- package/dist/agent/transcript-summarizer.d.ts +2 -0
- package/dist/agent/transcript-summarizer.d.ts.map +1 -1
- package/dist/agent/transcript-summarizer.js +60 -7
- package/dist/agent/transcript-summarizer.js.map +1 -1
- package/dist/agent/vocabulary-evidence.d.ts +11 -0
- package/dist/agent/vocabulary-evidence.d.ts.map +1 -0
- package/dist/agent/vocabulary-evidence.js +17 -0
- package/dist/agent/vocabulary-evidence.js.map +1 -0
- package/dist/agent/vocabulary-glossary.d.ts +15 -6
- package/dist/agent/vocabulary-glossary.d.ts.map +1 -1
- package/dist/agent/vocabulary-glossary.js +69 -22
- package/dist/agent/vocabulary-glossary.js.map +1 -1
- package/dist/agent/vocabulary-injection.d.ts +8 -5
- package/dist/agent/vocabulary-injection.d.ts.map +1 -1
- package/dist/agent/vocabulary-injection.js +10 -12
- package/dist/agent/vocabulary-injection.js.map +1 -1
- package/dist/agent/wake-cycle-runner.d.ts +61 -3
- package/dist/agent/wake-cycle-runner.d.ts.map +1 -1
- package/dist/agent/wake-cycle-runner.js +304 -64
- package/dist/agent/wake-cycle-runner.js.map +1 -1
- package/dist/channels/finapp.d.ts.map +1 -1
- package/dist/channels/finapp.js +3 -1
- package/dist/channels/finapp.js.map +1 -1
- package/dist/channels/telegram.d.ts.map +1 -1
- package/dist/channels/telegram.js +3 -1
- package/dist/channels/telegram.js.map +1 -1
- package/dist/config/index.d.ts +6 -1
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +9 -2
- package/dist/config/index.js.map +1 -1
- package/dist/config/types.d.ts +18 -6
- package/dist/config/types.d.ts.map +1 -1
- package/dist/config/types.js +14 -2
- package/dist/config/types.js.map +1 -1
- package/dist/e2e/suites/browser-detection.d.ts.map +1 -1
- package/dist/e2e/suites/browser-detection.js +4 -16
- package/dist/e2e/suites/browser-detection.js.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/onboarding/onboarding-service-client.d.ts +15 -6
- package/dist/onboarding/onboarding-service-client.d.ts.map +1 -1
- package/dist/onboarding/onboarding-service-client.js.map +1 -1
- package/dist/onboarding/prepare-linux.d.ts.map +1 -1
- package/dist/onboarding/prepare-linux.js +23 -3
- package/dist/onboarding/prepare-linux.js.map +1 -1
- package/dist/onboarding/prepare-mac.d.ts +0 -5
- package/dist/onboarding/prepare-mac.d.ts.map +1 -1
- package/dist/onboarding/prepare-mac.js +1 -95
- package/dist/onboarding/prepare-mac.js.map +1 -1
- package/dist/reconfigure.d.ts.map +1 -1
- package/dist/reconfigure.js +0 -22
- package/dist/reconfigure.js.map +1 -1
- package/dist/reset.d.ts.map +1 -1
- package/dist/reset.js +0 -5
- package/dist/reset.js.map +1 -1
- package/dist/service/retired-services.d.ts.map +1 -1
- package/dist/service/retired-services.js +4 -1
- package/dist/service/retired-services.js.map +1 -1
- package/dist/stt-client.d.ts.map +1 -1
- package/dist/stt-client.js +20 -14
- package/dist/stt-client.js.map +1 -1
- package/dist/system/chrome-profiles.d.ts +1 -1
- package/dist/system/chrome-profiles.d.ts.map +1 -1
- package/dist/system/chrome-profiles.js +1 -1
- package/dist/system/chrome-profiles.js.map +1 -1
- package/dist/threads/init-thread-dir.js +2 -2
- package/dist/threads/init-thread-dir.js.map +1 -1
- package/dist/tools/browser-set-engine.d.ts +19 -0
- package/dist/tools/browser-set-engine.d.ts.map +1 -0
- package/dist/tools/browser-set-engine.js +76 -0
- package/dist/tools/browser-set-engine.js.map +1 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +4 -2
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/mcp-manager.d.ts.map +1 -1
- package/dist/tools/mcp-manager.js +0 -1
- package/dist/tools/mcp-manager.js.map +1 -1
- package/dist/tools/transcribe-audio.d.ts +4 -9
- package/dist/tools/transcribe-audio.d.ts.map +1 -1
- package/dist/tools/transcribe-audio.js +22 -33
- package/dist/tools/transcribe-audio.js.map +1 -1
- package/dist/transcription-context.d.ts +9 -0
- package/dist/transcription-context.d.ts.map +1 -0
- package/dist/transcription-context.js +12 -0
- package/dist/transcription-context.js.map +1 -0
- package/dist/utils/transcribe.d.ts +3 -2
- package/dist/utils/transcribe.d.ts.map +1 -1
- package/dist/utils/transcribe.js +5 -4
- package/dist/utils/transcribe.js.map +1 -1
- package/dist-agent/bundle.cjs +2 -2
- package/package.json +1 -2
- package/dist/agent/engines/claude/session-browser-policy.d.ts +0 -49
- package/dist/agent/engines/claude/session-browser-policy.d.ts.map +0 -1
- package/dist/agent/engines/claude/session-browser-policy.js +0 -223
- package/dist/agent/engines/claude/session-browser-policy.js.map +0 -1
- package/dist/agent/provider-fallback.d.ts +0 -69
- package/dist/agent/provider-fallback.d.ts.map +0 -1
- package/dist/agent/provider-fallback.js +0 -169
- package/dist/agent/provider-fallback.js.map +0 -1
- package/dist/entry/playwriter-relay.d.ts +0 -2
- package/dist/entry/playwriter-relay.d.ts.map +0 -1
- package/dist/entry/playwriter-relay.js +0 -98
- package/dist/entry/playwriter-relay.js.map +0 -1
- package/dist/onboarding/playwriter-extension.d.ts +0 -69
- package/dist/onboarding/playwriter-extension.d.ts.map +0 -1
- package/dist/onboarding/playwriter-extension.js +0 -284
- package/dist/onboarding/playwriter-extension.js.map +0 -1
- package/dist/utils/playwriter-relay.d.ts +0 -235
- package/dist/utils/playwriter-relay.d.ts.map +0 -1
- package/dist/utils/playwriter-relay.js +0 -1180
- package/dist/utils/playwriter-relay.js.map +0 -1
- package/dist-agent/playwriter-relay.cjs +0 -95
|
@@ -1,13 +1,19 @@
|
|
|
1
|
+
import { type BrowserSelection } from "./browser-selection.js";
|
|
2
|
+
import type { VisionClawConfig } from "../config/types.js";
|
|
3
|
+
export declare function getActiveBrowserSelection(config?: VisionClawConfig): BrowserSelection;
|
|
4
|
+
export declare function getCdpEndpoint(config?: VisionClawConfig): string;
|
|
5
|
+
/** Values 011-gpu-info.patch and the UA-CH patch both understand. */
|
|
6
|
+
export declare function fingerprintPlatform(platform?: NodeJS.Platform): string;
|
|
1
7
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* killed and relaunched so Playwright's `connectOverCDP` doesn't hang.
|
|
8
|
+
* 1..2^31-1. The UA-CH patch parses the seed with StringToInt, which saturates
|
|
9
|
+
* at INT_MAX, so anything above 2^31-1 collapses to one version.
|
|
5
10
|
*/
|
|
6
|
-
export declare
|
|
11
|
+
export declare const FINGERPRINT_SEED_MAX = 2147483647;
|
|
7
12
|
/**
|
|
8
|
-
*
|
|
9
|
-
*
|
|
13
|
+
* One seed per profile, kept across restarts. A new machine gets a new file.
|
|
14
|
+
* Do not randomize per launch: the same host must keep the same fingerprint.
|
|
10
15
|
*/
|
|
11
|
-
export declare function
|
|
12
|
-
export declare function
|
|
16
|
+
export declare function fingerprintSeed(seedPath?: string): number;
|
|
17
|
+
export declare function ensureBrowser(config?: VisionClawConfig): Promise<void>;
|
|
18
|
+
export declare function restartBrowser(config?: VisionClawConfig): Promise<void>;
|
|
13
19
|
//# sourceMappingURL=browser-launcher.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser-launcher.d.ts","sourceRoot":"","sources":["../../src/agent/browser-launcher.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"browser-launcher.d.ts","sourceRoot":"","sources":["../../src/agent/browser-launcher.ts"],"names":[],"mappings":"AAOA,OAAO,EAIL,KAAK,gBAAgB,EACtB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAiC3D,wBAAgB,yBAAyB,CAAC,MAAM,CAAC,EAAE,gBAAgB,GAAG,gBAAgB,CAErF;AAED,wBAAgB,cAAc,CAAC,MAAM,CAAC,EAAE,gBAAgB,GAAG,MAAM,CAEhE;AAED,qEAAqE;AACrE,wBAAgB,mBAAmB,CAAC,QAAQ,GAAE,MAAM,CAAC,QAA2B,GAAG,MAAM,CAExF;AAkFD;;;GAGG;AACH,eAAO,MAAM,oBAAoB,aAAc,CAAC;AAMhD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,QAAQ,GAAE,MAAiC,GAAG,MAAM,CAWnF;AAqGD,wBAAsB,aAAa,CAAC,MAAM,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAoC5E;AAED,wBAAsB,cAAc,CAAC,MAAM,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAM7E"}
|
|
@@ -1,17 +1,18 @@
|
|
|
1
1
|
import { execSync, spawn } from "node:child_process";
|
|
2
|
+
import { randomInt } from "node:crypto";
|
|
2
3
|
import fs from "node:fs";
|
|
3
|
-
import
|
|
4
|
+
import path from "node:path";
|
|
5
|
+
import { getFingerprintProfileDir, getFingerprintSeedPath, getPlaywrightProfileDir } from "../config/index.js";
|
|
4
6
|
import { logger } from "../logger.js";
|
|
5
|
-
import { getHostCapabilities
|
|
6
|
-
|
|
7
|
+
import { getHostCapabilities } from "../system/host-capabilities.js";
|
|
8
|
+
import { describeBrowserSelection, resolveBrowserSelection, } from "./browser-selection.js";
|
|
9
|
+
const STOCK_CDP_PORT = 9222;
|
|
10
|
+
const FINGERPRINT_CDP_PORT = 9333;
|
|
7
11
|
const CDP_STARTUP_TIMEOUT_MS = 8_000;
|
|
8
12
|
const CDP_POLL_INTERVAL_MS = 300;
|
|
9
13
|
const NEW_BROWSER_SETTLE_MS = 1_000;
|
|
10
|
-
const
|
|
11
|
-
|
|
12
|
-
* Detect whether we're running inside a virtual machine (e.g. Lume VM).
|
|
13
|
-
* On macOS, VMs report a model like "VirtualMac2,1" via sysctl.
|
|
14
|
-
*/
|
|
14
|
+
const KILL_WAIT_MS = 5_000;
|
|
15
|
+
let activeSelection;
|
|
15
16
|
function isVirtualMachine() {
|
|
16
17
|
if (process.platform !== "darwin")
|
|
17
18
|
return false;
|
|
@@ -23,26 +24,37 @@ function isVirtualMachine() {
|
|
|
23
24
|
return false;
|
|
24
25
|
}
|
|
25
26
|
}
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
27
|
+
function cdpPortFor(engine) {
|
|
28
|
+
return engine === "fingerprint" ? FINGERPRINT_CDP_PORT : STOCK_CDP_PORT;
|
|
29
|
+
}
|
|
30
|
+
function cdpBase(engine) {
|
|
31
|
+
return `http://127.0.0.1:${cdpPortFor(engine)}`;
|
|
32
|
+
}
|
|
33
|
+
function profileDirFor(engine) {
|
|
34
|
+
return engine === "fingerprint" ? getFingerprintProfileDir() : getPlaywrightProfileDir();
|
|
35
|
+
}
|
|
36
|
+
export function getActiveBrowserSelection(config) {
|
|
37
|
+
return activeSelection ?? resolveBrowserSelection(config);
|
|
38
|
+
}
|
|
39
|
+
export function getCdpEndpoint(config) {
|
|
40
|
+
return cdpBase(getActiveBrowserSelection(config).engine);
|
|
41
|
+
}
|
|
42
|
+
/** Values 011-gpu-info.patch and the UA-CH patch both understand. */
|
|
43
|
+
export function fingerprintPlatform(platform = process.platform) {
|
|
44
|
+
return platform === "darwin" ? "macos" : "linux";
|
|
45
|
+
}
|
|
46
|
+
async function isCdpAlive(engine) {
|
|
31
47
|
try {
|
|
32
|
-
const resp = await fetch(`${
|
|
48
|
+
const resp = await fetch(`${cdpBase(engine)}/json/version`);
|
|
33
49
|
return resp.ok;
|
|
34
50
|
}
|
|
35
51
|
catch {
|
|
36
52
|
return false;
|
|
37
53
|
}
|
|
38
54
|
}
|
|
39
|
-
|
|
40
|
-
* Probe `/json/list` to get the current set of CDP targets.
|
|
41
|
-
* Returns null if CDP is unreachable.
|
|
42
|
-
*/
|
|
43
|
-
async function listCdpTargets() {
|
|
55
|
+
async function listCdpTargets(engine) {
|
|
44
56
|
try {
|
|
45
|
-
const resp = await fetch(`${
|
|
57
|
+
const resp = await fetch(`${cdpBase(engine)}/json/list`, { signal: AbortSignal.timeout(3_000) });
|
|
46
58
|
if (!resp.ok)
|
|
47
59
|
return null;
|
|
48
60
|
return (await resp.json());
|
|
@@ -51,15 +63,8 @@ async function listCdpTargets() {
|
|
|
51
63
|
return null;
|
|
52
64
|
}
|
|
53
65
|
}
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
* Playwright's `connectOverCDP` to succeed. Playwright hangs in
|
|
57
|
-
* `_waitForAllPagesToBeInitialized()` when a page target exists but its
|
|
58
|
-
* webSocketDebuggerUrl is missing (already attached) or the page URL
|
|
59
|
-
* indicates a crash.
|
|
60
|
-
*/
|
|
61
|
-
async function arePagesHealthy() {
|
|
62
|
-
const targets = await listCdpTargets();
|
|
66
|
+
async function arePagesHealthy(engine) {
|
|
67
|
+
const targets = await listCdpTargets(engine);
|
|
63
68
|
if (!targets)
|
|
64
69
|
return false;
|
|
65
70
|
const pages = targets.filter((t) => t.type === "page");
|
|
@@ -73,42 +78,28 @@ async function arePagesHealthy() {
|
|
|
73
78
|
}
|
|
74
79
|
return true;
|
|
75
80
|
}
|
|
76
|
-
|
|
77
|
-
* Check whether a Chrome process launched with our CDP debug port already
|
|
78
|
-
* exists, regardless of whether it is responding on the port yet.
|
|
79
|
-
*
|
|
80
|
-
* {@link isCdpAlive} only sees a *ready* CDP server; a Chrome that was just
|
|
81
|
-
* spawned but hasn't bound the port yet looks dead to it, which would let
|
|
82
|
-
* {@link launchBrowser} spawn a second instance that races for port 9222.
|
|
83
|
-
* This pgrep guard closes that window (issue #534, layer 3). Windows has no
|
|
84
|
-
* pgrep, so we conservatively report "not running" and fall back to the CDP
|
|
85
|
-
* probe there.
|
|
86
|
-
*/
|
|
87
|
-
function isCdpChromeProcessRunning() {
|
|
81
|
+
function isCdpChromeProcessRunning(engine) {
|
|
88
82
|
if (process.platform === "win32")
|
|
89
83
|
return false;
|
|
84
|
+
const port = cdpPortFor(engine);
|
|
90
85
|
try {
|
|
91
|
-
const output = execSync(`pgrep -af -- '--remote-debugging-port=${
|
|
86
|
+
const output = execSync(`pgrep -af -- '--remote-debugging-port=${port}'`, {
|
|
92
87
|
encoding: "utf-8",
|
|
93
88
|
});
|
|
94
89
|
return output
|
|
95
90
|
.split(/\r?\n/)
|
|
96
|
-
.some((line) => line.includes(`--remote-debugging-port=${
|
|
91
|
+
.some((line) => line.includes(`--remote-debugging-port=${port}`)
|
|
97
92
|
&& !line.includes("pgrep -af"));
|
|
98
93
|
}
|
|
99
94
|
catch {
|
|
100
|
-
// pgrep exits non-zero when no matching process is found — expected.
|
|
101
95
|
return false;
|
|
102
96
|
}
|
|
103
97
|
}
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
* profile dir. Best-effort — failures are silently ignored.
|
|
107
|
-
*/
|
|
108
|
-
function killChrome() {
|
|
98
|
+
function killChrome(engine) {
|
|
99
|
+
const port = cdpPortFor(engine);
|
|
109
100
|
try {
|
|
110
101
|
if (process.platform === "darwin" || process.platform === "linux") {
|
|
111
|
-
execSync(`pkill -f -- '--remote-debugging-port=${
|
|
102
|
+
execSync(`pkill -f -- '--remote-debugging-port=${port}'`, { stdio: "ignore" });
|
|
112
103
|
}
|
|
113
104
|
else {
|
|
114
105
|
execSync(`taskkill /F /IM chrome.exe`, { stdio: "ignore" });
|
|
@@ -118,75 +109,103 @@ function killChrome() {
|
|
|
118
109
|
// pkill exits non-zero when no matching process is found — expected
|
|
119
110
|
}
|
|
120
111
|
}
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
async function killAndWait() {
|
|
125
|
-
killChrome();
|
|
126
|
-
const deadline = Date.now() + 5_000;
|
|
112
|
+
async function killAndWait(engine) {
|
|
113
|
+
killChrome(engine);
|
|
114
|
+
const deadline = Date.now() + KILL_WAIT_MS;
|
|
127
115
|
while (Date.now() < deadline) {
|
|
128
|
-
if (!(await isCdpAlive()))
|
|
116
|
+
if (!(await isCdpAlive(engine)))
|
|
129
117
|
return;
|
|
130
|
-
await new Promise((r) => setTimeout(r,
|
|
118
|
+
await new Promise((r) => setTimeout(r, CDP_POLL_INTERVAL_MS));
|
|
131
119
|
}
|
|
132
|
-
logger.warn(
|
|
120
|
+
logger.warn(`Browser process did not exit within ${KILL_WAIT_MS}ms after kill signal`);
|
|
133
121
|
}
|
|
134
122
|
/**
|
|
135
|
-
*
|
|
136
|
-
*
|
|
137
|
-
* so the agent can exit without waiting for it, and the browser stays
|
|
138
|
-
* visible on the desktop between wake cycles.
|
|
139
|
-
*
|
|
140
|
-
* Returns `true` if a new process was spawned, `false` if the browser
|
|
141
|
-
* was already running.
|
|
123
|
+
* 1..2^31-1. The UA-CH patch parses the seed with StringToInt, which saturates
|
|
124
|
+
* at INT_MAX, so anything above 2^31-1 collapses to one version.
|
|
142
125
|
*/
|
|
143
|
-
|
|
126
|
+
export const FINGERPRINT_SEED_MAX = 0x7fff_ffff;
|
|
127
|
+
function randomFingerprintSeed() {
|
|
128
|
+
return randomInt(1, FINGERPRINT_SEED_MAX + 1);
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* One seed per profile, kept across restarts. A new machine gets a new file.
|
|
132
|
+
* Do not randomize per launch: the same host must keep the same fingerprint.
|
|
133
|
+
*/
|
|
134
|
+
export function fingerprintSeed(seedPath = getFingerprintSeedPath()) {
|
|
135
|
+
try {
|
|
136
|
+
const parsed = Number(fs.readFileSync(seedPath, "utf-8").trim());
|
|
137
|
+
if (Number.isInteger(parsed) && parsed >= 1 && parsed <= FINGERPRINT_SEED_MAX)
|
|
138
|
+
return parsed;
|
|
139
|
+
}
|
|
140
|
+
catch {
|
|
141
|
+
// missing or unreadable: mint one below
|
|
142
|
+
}
|
|
143
|
+
const seed = randomFingerprintSeed();
|
|
144
|
+
fs.mkdirSync(path.dirname(seedPath), { recursive: true });
|
|
145
|
+
fs.writeFileSync(seedPath, `${seed}\n`, { mode: 0o600 });
|
|
146
|
+
return seed;
|
|
147
|
+
}
|
|
148
|
+
function launchFlags(selection) {
|
|
149
|
+
const engine = selection.engine;
|
|
150
|
+
const flags = [
|
|
151
|
+
`--remote-debugging-port=${cdpPortFor(engine)}`,
|
|
152
|
+
`--user-data-dir=${profileDirFor(engine)}`,
|
|
153
|
+
"--no-first-run",
|
|
154
|
+
"--no-default-browser-check",
|
|
155
|
+
"--profile-directory=Default",
|
|
156
|
+
];
|
|
157
|
+
if (engine === "fingerprint") {
|
|
158
|
+
// The seed is the `--fingerprint` switch itself. Without it the binary
|
|
159
|
+
// does not pin UA-CH, GPU, or canvas noise to one identity.
|
|
160
|
+
flags.push(`--fingerprint=${fingerprintSeed()}`);
|
|
161
|
+
// GPU spoofing defaults to Windows when the seed is set and no platform is
|
|
162
|
+
// given (011-gpu-info.patch). UA-CH keeps the real platform unless this
|
|
163
|
+
// flag is set. Always pass the host so the two surfaces agree.
|
|
164
|
+
flags.push(`--fingerprint-platform=${fingerprintPlatform()}`);
|
|
165
|
+
}
|
|
166
|
+
if (isVirtualMachine()) {
|
|
167
|
+
flags.push("--disable-gpu", "--disable-software-rasterizer");
|
|
168
|
+
logger.system("VM detected — browser launched with GPU disabled");
|
|
169
|
+
}
|
|
170
|
+
if (process.platform === "linux") {
|
|
171
|
+
flags.push("--disable-dev-shm-usage");
|
|
172
|
+
if (engine === "stock" && process.env.VISIONCLAW_STATE_DIR === "/var/lib/visionclaw") {
|
|
173
|
+
flags.push("--disable-gpu", "--no-sandbox");
|
|
174
|
+
logger.system("Linux container detected — stock Chrome launched with container-isolation safeguards");
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
return flags;
|
|
178
|
+
}
|
|
179
|
+
async function launchBrowser(selection) {
|
|
144
180
|
const capabilities = getHostCapabilities();
|
|
145
181
|
if (!capabilities.browser.visible) {
|
|
146
182
|
logger.warn("Visible Chrome requires an interactive desktop session");
|
|
147
183
|
return false;
|
|
148
184
|
}
|
|
149
|
-
|
|
185
|
+
const engine = selection.engine;
|
|
186
|
+
if (await isCdpAlive(engine)) {
|
|
150
187
|
return false;
|
|
151
188
|
}
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
// reuse the in-flight instance and let the readiness poll below pick it up.
|
|
155
|
-
if (isCdpChromeProcessRunning()) {
|
|
156
|
-
logger.system(`Chrome with CDP port ${CDP_PORT} already launching — reusing instead of double-launch`);
|
|
189
|
+
if (isCdpChromeProcessRunning(engine)) {
|
|
190
|
+
logger.system(`Browser with CDP port ${cdpPortFor(engine)} already launching — reusing instead of double-launch`);
|
|
157
191
|
const deadline = Date.now() + CDP_STARTUP_TIMEOUT_MS;
|
|
158
192
|
while (Date.now() < deadline) {
|
|
159
193
|
await new Promise((r) => setTimeout(r, CDP_POLL_INTERVAL_MS));
|
|
160
|
-
if (await isCdpAlive())
|
|
194
|
+
if (await isCdpAlive(engine))
|
|
161
195
|
return false;
|
|
162
196
|
}
|
|
163
|
-
logger.warn(`Existing
|
|
197
|
+
logger.warn(`Existing browser with CDP port ${cdpPortFor(engine)} not responding after ${CDP_STARTUP_TIMEOUT_MS}ms`);
|
|
164
198
|
return false;
|
|
165
199
|
}
|
|
166
|
-
|
|
167
|
-
|
|
200
|
+
const chromePath = selection.executablePath;
|
|
201
|
+
if (!chromePath || !fs.existsSync(chromePath)) {
|
|
202
|
+
logger.warn(selection.reason === "fingerprint-unavailable"
|
|
203
|
+
? "Fingerprint Chromium is not installed and stock Chrome was not found."
|
|
204
|
+
: `Browser not found at ${chromePath ?? "<unset>"}.`);
|
|
168
205
|
return false;
|
|
169
206
|
}
|
|
170
|
-
const
|
|
171
|
-
const
|
|
172
|
-
`--remote-debugging-port=${CDP_PORT}`,
|
|
173
|
-
`--user-data-dir=${profileDir}`,
|
|
174
|
-
"--no-first-run",
|
|
175
|
-
"--no-default-browser-check",
|
|
176
|
-
"--profile-directory=Default",
|
|
177
|
-
];
|
|
178
|
-
if (isVirtualMachine()) {
|
|
179
|
-
flags.push("--disable-gpu", "--disable-software-rasterizer");
|
|
180
|
-
logger.system("VM detected — Chrome launched with GPU disabled");
|
|
181
|
-
}
|
|
182
|
-
if (process.platform === "linux") {
|
|
183
|
-
flags.push("--disable-dev-shm-usage");
|
|
184
|
-
if (process.env.VISIONCLAW_STATE_DIR === "/var/lib/visionclaw") {
|
|
185
|
-
flags.push("--disable-gpu", "--no-sandbox");
|
|
186
|
-
logger.system("Linux container detected — Chrome launched with container-isolation safeguards");
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
const child = spawn(CHROME_PATH, flags, {
|
|
207
|
+
const flags = launchFlags(selection);
|
|
208
|
+
const child = spawn(chromePath, flags, {
|
|
190
209
|
detached: true,
|
|
191
210
|
stdio: "ignore",
|
|
192
211
|
env: process.env,
|
|
@@ -196,48 +215,58 @@ async function launchBrowser() {
|
|
|
196
215
|
});
|
|
197
216
|
child.unref();
|
|
198
217
|
const deadline = Date.now() + CDP_STARTUP_TIMEOUT_MS;
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
logger.system(`Chrome launched on CDP port ${CDP_PORT}`);
|
|
218
|
+
do {
|
|
219
|
+
if (await isCdpAlive(engine)) {
|
|
220
|
+
logger.system(`${describeBrowserSelection(selection)} launched on loopback CDP port ${cdpPortFor(engine)}`);
|
|
203
221
|
await new Promise((r) => setTimeout(r, NEW_BROWSER_SETTLE_MS));
|
|
204
222
|
return true;
|
|
205
223
|
}
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
224
|
+
if (Date.now() >= deadline)
|
|
225
|
+
break;
|
|
226
|
+
await new Promise((r) => setTimeout(r, CDP_POLL_INTERVAL_MS));
|
|
227
|
+
} while (Date.now() < deadline);
|
|
228
|
+
logger.warn(`Browser process spawned but CDP not responding after ${CDP_STARTUP_TIMEOUT_MS}ms`);
|
|
229
|
+
return false;
|
|
209
230
|
}
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
231
|
+
export async function ensureBrowser(config) {
|
|
232
|
+
const selection = resolveBrowserSelection(config);
|
|
233
|
+
activeSelection = selection;
|
|
234
|
+
// The engine that was not selected must not keep its loopback CDP listener.
|
|
235
|
+
// .playwriter-chrome used an ephemeral port and is not matched here.
|
|
236
|
+
const other = selection.engine === "fingerprint" ? "stock" : "fingerprint";
|
|
237
|
+
if (isCdpChromeProcessRunning(other) || await isCdpAlive(other)) {
|
|
238
|
+
logger.system(`Stopping ${other} browser on CDP port ${cdpPortFor(other)}; selected engine is ${selection.engine}`);
|
|
239
|
+
await killAndWait(other);
|
|
240
|
+
}
|
|
241
|
+
if (selection.reason === "fingerprint-unavailable") {
|
|
242
|
+
logger.system(`Fingerprint Chromium not installed — using stock Chrome (${selection.executablePath})`);
|
|
243
|
+
}
|
|
244
|
+
else if (selection.reason === "debug-stock") {
|
|
245
|
+
logger.system(`Browser engine: stock Chrome for debug (${selection.executablePath})`);
|
|
246
|
+
}
|
|
247
|
+
else if (selection.reason === "default-fingerprint") {
|
|
248
|
+
logger.system(`Browser engine: fingerprint Chromium (${selection.executablePath})`);
|
|
249
|
+
}
|
|
216
250
|
try {
|
|
217
|
-
if (await isCdpAlive()) {
|
|
218
|
-
if (await arePagesHealthy()) {
|
|
251
|
+
if (await isCdpAlive(selection.engine)) {
|
|
252
|
+
if (await arePagesHealthy(selection.engine)) {
|
|
219
253
|
logger.debug("Browser already running on CDP port");
|
|
220
254
|
return;
|
|
221
255
|
}
|
|
222
|
-
logger.warn("CDP page targets unhealthy — restarting
|
|
223
|
-
await killAndWait();
|
|
256
|
+
logger.warn("CDP page targets unhealthy — restarting browser");
|
|
257
|
+
await killAndWait(selection.engine);
|
|
224
258
|
}
|
|
225
|
-
await launchBrowser();
|
|
259
|
+
await launchBrowser(selection);
|
|
226
260
|
}
|
|
227
261
|
catch (err) {
|
|
228
262
|
logger.warn(`Failed to ensure browser: ${err instanceof Error ? err.message : String(err)}`);
|
|
229
263
|
}
|
|
230
264
|
}
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
await killAndWait();
|
|
238
|
-
await launchBrowser();
|
|
239
|
-
}
|
|
240
|
-
export function getCdpEndpoint() {
|
|
241
|
-
return `http://127.0.0.1:${CDP_PORT}`;
|
|
265
|
+
export async function restartBrowser(config) {
|
|
266
|
+
const selection = resolveBrowserSelection(config);
|
|
267
|
+
activeSelection = selection;
|
|
268
|
+
logger.system("Restarting browser for Playwright recovery");
|
|
269
|
+
await killAndWait(selection.engine);
|
|
270
|
+
await launchBrowser(selection);
|
|
242
271
|
}
|
|
243
272
|
//# sourceMappingURL=browser-launcher.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser-launcher.js","sourceRoot":"","sources":["../../src/agent/browser-launcher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"browser-launcher.js","sourceRoot":"","sources":["../../src/agent/browser-launcher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,wBAAwB,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAC/G,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EACL,wBAAwB,EACxB,uBAAuB,GAGxB,MAAM,wBAAwB,CAAC;AAGhC,MAAM,cAAc,GAAG,IAAI,CAAC;AAC5B,MAAM,oBAAoB,GAAG,IAAI,CAAC;AAClC,MAAM,sBAAsB,GAAG,KAAK,CAAC;AACrC,MAAM,oBAAoB,GAAG,GAAG,CAAC;AACjC,MAAM,qBAAqB,GAAG,KAAK,CAAC;AACpC,MAAM,YAAY,GAAG,KAAK,CAAC;AAE3B,IAAI,eAA6C,CAAC;AAElD,SAAS,gBAAgB;IACvB,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAChD,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,QAAQ,CAAC,oBAAoB,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAC3E,OAAO,KAAK,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,MAAqB;IACvC,OAAO,MAAM,KAAK,aAAa,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,cAAc,CAAC;AAC1E,CAAC;AAED,SAAS,OAAO,CAAC,MAAqB;IACpC,OAAO,oBAAoB,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;AAClD,CAAC;AAED,SAAS,aAAa,CAAC,MAAqB;IAC1C,OAAO,MAAM,KAAK,aAAa,CAAC,CAAC,CAAC,wBAAwB,EAAE,CAAC,CAAC,CAAC,uBAAuB,EAAE,CAAC;AAC3F,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,MAAyB;IACjE,OAAO,eAAe,IAAI,uBAAuB,CAAC,MAAM,CAAC,CAAC;AAC5D,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,MAAyB;IACtD,OAAO,OAAO,CAAC,yBAAyB,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC;AAC3D,CAAC;AAED,qEAAqE;AACrE,MAAM,UAAU,mBAAmB,CAAC,WAA4B,OAAO,CAAC,QAAQ;IAC9E,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;AACnD,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,MAAqB;IAC7C,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;QAC5D,OAAO,IAAI,CAAC,EAAE,CAAC;IACjB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAQD,KAAK,UAAU,cAAc,CAAC,MAAqB;IACjD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,EAAE,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACjG,IAAI,CAAC,IAAI,CAAC,EAAE;YAAE,OAAO,IAAI,CAAC;QAC1B,OAAO,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAgB,CAAC;IAC5C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,MAAqB;IAClD,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,MAAM,CAAC,CAAC;IAC7C,IAAI,CAAC,OAAO;QAAE,OAAO,KAAK,CAAC;IAC3B,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;IACvD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACpC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,iBAAiB,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,iBAAiB,EAAE,CAAC;YAC7E,MAAM,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,EAAE,mBAAmB,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;YAChE,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,yBAAyB,CAAC,MAAqB;IACtD,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO;QAAE,OAAO,KAAK,CAAC;IAC/C,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;IAChC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,QAAQ,CAAC,yCAAyC,IAAI,GAAG,EAAE;YACxE,QAAQ,EAAE,OAAO;SAClB,CAAC,CAAC;QACH,OAAO,MAAM;aACV,KAAK,CAAC,OAAO,CAAC;aACd,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CACb,IAAI,CAAC,QAAQ,CAAC,2BAA2B,IAAI,EAAE,CAAC;eAC7C,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAC/B,CAAC;IACN,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,MAAqB;IACvC,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;IAChC,IAAI,CAAC;QACH,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YAClE,QAAQ,CAAC,wCAAwC,IAAI,GAAG,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QACjF,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,4BAA4B,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,oEAAoE;IACtE,CAAC;AACH,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,MAAqB;IAC9C,UAAU,CAAC,MAAM,CAAC,CAAC;IACnB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,YAAY,CAAC;IAC3C,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;QAC7B,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,MAAM,CAAC,CAAC;YAAE,OAAO;QACxC,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,oBAAoB,CAAC,CAAC,CAAC;IAChE,CAAC;IACD,MAAM,CAAC,IAAI,CAAC,uCAAuC,YAAY,sBAAsB,CAAC,CAAC;AACzF,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,WAAW,CAAC;AAEhD,SAAS,qBAAqB;IAC5B,OAAO,SAAS,CAAC,CAAC,EAAE,oBAAoB,GAAG,CAAC,CAAC,CAAC;AAChD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,WAAmB,sBAAsB,EAAE;IACzE,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QACjE,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC,IAAI,MAAM,IAAI,oBAAoB;YAAE,OAAO,MAAM,CAAC;IAC/F,CAAC;IAAC,MAAM,CAAC;QACP,wCAAwC;IAC1C,CAAC;IACD,MAAM,IAAI,GAAG,qBAAqB,EAAE,CAAC;IACrC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1D,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,GAAG,IAAI,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACzD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,WAAW,CAAC,SAA2B;IAC9C,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;IAChC,MAAM,KAAK,GAAG;QACZ,2BAA2B,UAAU,CAAC,MAAM,CAAC,EAAE;QAC/C,mBAAmB,aAAa,CAAC,MAAM,CAAC,EAAE;QAC1C,gBAAgB;QAChB,4BAA4B;QAC5B,6BAA6B;KAC9B,CAAC;IACF,IAAI,MAAM,KAAK,aAAa,EAAE,CAAC;QAC7B,uEAAuE;QACvE,4DAA4D;QAC5D,KAAK,CAAC,IAAI,CAAC,iBAAiB,eAAe,EAAE,EAAE,CAAC,CAAC;QACjD,2EAA2E;QAC3E,wEAAwE;QACxE,+DAA+D;QAC/D,KAAK,CAAC,IAAI,CAAC,0BAA0B,mBAAmB,EAAE,EAAE,CAAC,CAAC;IAChE,CAAC;IACD,IAAI,gBAAgB,EAAE,EAAE,CAAC;QACvB,KAAK,CAAC,IAAI,CAAC,eAAe,EAAE,+BAA+B,CAAC,CAAC;QAC7D,MAAM,CAAC,MAAM,CAAC,kDAAkD,CAAC,CAAC;IACpE,CAAC;IACD,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACjC,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QACtC,IAAI,MAAM,KAAK,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,oBAAoB,KAAK,qBAAqB,EAAE,CAAC;YACrF,KAAK,CAAC,IAAI,CAAC,eAAe,EAAE,cAAc,CAAC,CAAC;YAC5C,MAAM,CAAC,MAAM,CACX,sFAAsF,CACvF,CAAC;QACJ,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,SAA2B;IACtD,MAAM,YAAY,GAAG,mBAAmB,EAAE,CAAC;IAC3C,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QAClC,MAAM,CAAC,IAAI,CAAC,wDAAwD,CAAC,CAAC;QACtE,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;IAChC,IAAI,MAAM,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QAC7B,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,yBAAyB,CAAC,MAAM,CAAC,EAAE,CAAC;QACtC,MAAM,CAAC,MAAM,CACX,yBAAyB,UAAU,CAAC,MAAM,CAAC,uDAAuD,CACnG,CAAC;QACF,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,sBAAsB,CAAC;QACrD,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;YAC7B,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,oBAAoB,CAAC,CAAC,CAAC;YAC9D,IAAI,MAAM,UAAU,CAAC,MAAM,CAAC;gBAAE,OAAO,KAAK,CAAC;QAC7C,CAAC;QACD,MAAM,CAAC,IAAI,CACT,kCAAkC,UAAU,CAAC,MAAM,CAAC,yBAAyB,sBAAsB,IAAI,CACxG,CAAC;QACF,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,UAAU,GAAG,SAAS,CAAC,cAAc,CAAC;IAC5C,IAAI,CAAC,UAAU,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9C,MAAM,CAAC,IAAI,CACT,SAAS,CAAC,MAAM,KAAK,yBAAyB;YAC5C,CAAC,CAAC,uEAAuE;YACzE,CAAC,CAAC,wBAAwB,UAAU,IAAI,SAAS,GAAG,CACvD,CAAC;QACF,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,KAAK,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;IACrC,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,EAAE,KAAK,EAAE;QACrC,QAAQ,EAAE,IAAI;QACd,KAAK,EAAE,QAAQ;QACf,GAAG,EAAE,OAAO,CAAC,GAAG;KACjB,CAAC,CAAC;IACH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;QACxB,MAAM,CAAC,IAAI,CAAC,0BAA0B,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IACH,KAAK,CAAC,KAAK,EAAE,CAAC;IAEd,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,sBAAsB,CAAC;IACrD,GAAG,CAAC;QACF,IAAI,MAAM,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YAC7B,MAAM,CAAC,MAAM,CACX,GAAG,wBAAwB,CAAC,SAAS,CAAC,kCAAkC,UAAU,CAAC,MAAM,CAAC,EAAE,CAC7F,CAAC;YACF,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC;YAC/D,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,QAAQ;YAAE,MAAM;QAClC,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,oBAAoB,CAAC,CAAC,CAAC;IAChE,CAAC,QAAQ,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE;IAEhC,MAAM,CAAC,IAAI,CACT,wDAAwD,sBAAsB,IAAI,CACnF,CAAC;IACF,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,MAAyB;IAC3D,MAAM,SAAS,GAAG,uBAAuB,CAAC,MAAM,CAAC,CAAC;IAClD,eAAe,GAAG,SAAS,CAAC;IAC5B,4EAA4E;IAC5E,qEAAqE;IACrE,MAAM,KAAK,GAAkB,SAAS,CAAC,MAAM,KAAK,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC;IAC1F,IAAI,yBAAyB,CAAC,KAAK,CAAC,IAAI,MAAM,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QAChE,MAAM,CAAC,MAAM,CACX,YAAY,KAAK,wBAAwB,UAAU,CAAC,KAAK,CAAC,wBAAwB,SAAS,CAAC,MAAM,EAAE,CACrG,CAAC;QACF,MAAM,WAAW,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC;IACD,IAAI,SAAS,CAAC,MAAM,KAAK,yBAAyB,EAAE,CAAC;QACnD,MAAM,CAAC,MAAM,CACX,4DAA4D,SAAS,CAAC,cAAc,GAAG,CACxF,CAAC;IACJ,CAAC;SAAM,IAAI,SAAS,CAAC,MAAM,KAAK,aAAa,EAAE,CAAC;QAC9C,MAAM,CAAC,MAAM,CAAC,2CAA2C,SAAS,CAAC,cAAc,GAAG,CAAC,CAAC;IACxF,CAAC;SAAM,IAAI,SAAS,CAAC,MAAM,KAAK,qBAAqB,EAAE,CAAC;QACtD,MAAM,CAAC,MAAM,CAAC,yCAAyC,SAAS,CAAC,cAAc,GAAG,CAAC,CAAC;IACtF,CAAC;IACD,IAAI,CAAC;QACH,IAAI,MAAM,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;YACvC,IAAI,MAAM,eAAe,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC5C,MAAM,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;gBACpD,OAAO;YACT,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;YAC/D,MAAM,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACtC,CAAC;QACD,MAAM,aAAa,CAAC,SAAS,CAAC,CAAC;IACjC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,IAAI,CACT,6BAA6B,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAChF,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,MAAyB;IAC5D,MAAM,SAAS,GAAG,uBAAuB,CAAC,MAAM,CAAC,CAAC;IAClD,eAAe,GAAG,SAAS,CAAC;IAC5B,MAAM,CAAC,MAAM,CAAC,4CAA4C,CAAC,CAAC;IAC5D,MAAM,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IACpC,MAAM,aAAa,CAAC,SAAS,CAAC,CAAC;AACjC,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dual-binary browser selection for Playwright CDP.
|
|
3
|
+
*
|
|
4
|
+
* Default: in-house fingerprint Chromium. Stock Chrome/chromium-browser is
|
|
5
|
+
* debug-only (owner asked for console/pageerror, fingerprint CDP failed, or
|
|
6
|
+
* VISIONCLAW_BROWSER=stock). Missing fingerprint binary never pretends to be
|
|
7
|
+
* fingerprint — we use stock Chrome and say so.
|
|
8
|
+
*/
|
|
9
|
+
import type { VisionClawConfig } from "../config/types.js";
|
|
10
|
+
export type BrowserEngine = "fingerprint" | "stock";
|
|
11
|
+
export type BrowserSelectionReason = "default-fingerprint" | "debug-stock" | "fingerprint-unavailable" | "host-chrome-unavailable";
|
|
12
|
+
export interface BrowserSelection {
|
|
13
|
+
engine: BrowserEngine;
|
|
14
|
+
executablePath: string | undefined;
|
|
15
|
+
reason: BrowserSelectionReason;
|
|
16
|
+
/** True when the selected binary exists on disk. */
|
|
17
|
+
available: boolean;
|
|
18
|
+
}
|
|
19
|
+
export declare function findFingerprintExecutable(config?: Pick<VisionClawConfig, "browser">, env?: NodeJS.ProcessEnv, platform?: NodeJS.Platform): string | undefined;
|
|
20
|
+
export declare function parseBrowserEngine(raw: string): BrowserEngine | undefined;
|
|
21
|
+
export declare function wantsStockChrome(config?: Pick<VisionClawConfig, "browser">, env?: NodeJS.ProcessEnv): boolean;
|
|
22
|
+
export declare function resolveBrowserSelection(config?: Pick<VisionClawConfig, "browser">, env?: NodeJS.ProcessEnv, platform?: NodeJS.Platform): BrowserSelection;
|
|
23
|
+
export declare function describeBrowserSelection(selection: BrowserSelection): string;
|
|
24
|
+
//# sourceMappingURL=browser-selection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser-selection.d.ts","sourceRoot":"","sources":["../../src/agent/browser-selection.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAE3D,MAAM,MAAM,aAAa,GAAG,aAAa,GAAG,OAAO,CAAC;AAEpD,MAAM,MAAM,sBAAsB,GAC9B,qBAAqB,GACrB,aAAa,GACb,yBAAyB,GACzB,yBAAyB,CAAC;AAE9B,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,aAAa,CAAC;IACtB,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,MAAM,EAAE,sBAAsB,CAAC;IAC/B,oDAAoD;IACpD,SAAS,EAAE,OAAO,CAAC;CACpB;AAaD,wBAAgB,yBAAyB,CACvC,MAAM,CAAC,EAAE,IAAI,CAAC,gBAAgB,EAAE,SAAS,CAAC,EAC1C,GAAG,GAAE,MAAM,CAAC,UAAwB,EACpC,QAAQ,GAAE,MAAM,CAAC,QAA2B,GAC3C,MAAM,GAAG,SAAS,CAUpB;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAKzE;AAED,wBAAgB,gBAAgB,CAC9B,MAAM,CAAC,EAAE,IAAI,CAAC,gBAAgB,EAAE,SAAS,CAAC,EAC1C,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,OAAO,CAGT;AAED,wBAAgB,uBAAuB,CACrC,MAAM,CAAC,EAAE,IAAI,CAAC,gBAAgB,EAAE,SAAS,CAAC,EAC1C,GAAG,GAAE,MAAM,CAAC,UAAwB,EACpC,QAAQ,GAAE,MAAM,CAAC,QAA2B,GAC3C,gBAAgB,CAiClB;AAED,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,gBAAgB,GAAG,MAAM,CAW5E"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dual-binary browser selection for Playwright CDP.
|
|
3
|
+
*
|
|
4
|
+
* Default: in-house fingerprint Chromium. Stock Chrome/chromium-browser is
|
|
5
|
+
* debug-only (owner asked for console/pageerror, fingerprint CDP failed, or
|
|
6
|
+
* VISIONCLAW_BROWSER=stock). Missing fingerprint binary never pretends to be
|
|
7
|
+
* fingerprint — we use stock Chrome and say so.
|
|
8
|
+
*/
|
|
9
|
+
import fs from "node:fs";
|
|
10
|
+
import { findChromeExecutable } from "../system/host-capabilities.js";
|
|
11
|
+
const LINUX_FINGERPRINT_CANDIDATES = [
|
|
12
|
+
"/opt/fingerprint-chromium/chrome",
|
|
13
|
+
"/usr/lib/fingerprint-chromium/chrome",
|
|
14
|
+
"/usr/bin/fingerprint-chromium",
|
|
15
|
+
];
|
|
16
|
+
const DARWIN_FINGERPRINT_CANDIDATES = [
|
|
17
|
+
"/Applications/Fingerprint Chromium.app/Contents/MacOS/Chromium",
|
|
18
|
+
"/Applications/Fingerprint Chromium.app/Contents/MacOS/chrome",
|
|
19
|
+
];
|
|
20
|
+
export function findFingerprintExecutable(config, env = process.env, platform = process.platform) {
|
|
21
|
+
const configured = config?.browser?.fingerprintExecutablePath?.trim()
|
|
22
|
+
?? env.FINGERPRINT_CHROMIUM_PATH?.trim();
|
|
23
|
+
if (configured && fs.existsSync(configured))
|
|
24
|
+
return configured;
|
|
25
|
+
const candidates = platform === "darwin"
|
|
26
|
+
? DARWIN_FINGERPRINT_CANDIDATES
|
|
27
|
+
: platform === "linux"
|
|
28
|
+
? LINUX_FINGERPRINT_CANDIDATES
|
|
29
|
+
: [];
|
|
30
|
+
return candidates.find((candidate) => fs.existsSync(candidate));
|
|
31
|
+
}
|
|
32
|
+
export function parseBrowserEngine(raw) {
|
|
33
|
+
const value = raw.trim().toLowerCase();
|
|
34
|
+
if (value === "fingerprint")
|
|
35
|
+
return "fingerprint";
|
|
36
|
+
if (value === "stock" || value === "chrome" || value === "debug")
|
|
37
|
+
return "stock";
|
|
38
|
+
return undefined;
|
|
39
|
+
}
|
|
40
|
+
export function wantsStockChrome(config, env = process.env) {
|
|
41
|
+
const engine = config?.browser?.engine ?? env.VISIONCLAW_BROWSER?.trim().toLowerCase();
|
|
42
|
+
return engine === "stock" || engine === "chrome" || engine === "debug";
|
|
43
|
+
}
|
|
44
|
+
export function resolveBrowserSelection(config, env = process.env, platform = process.platform) {
|
|
45
|
+
const stockPath = findChromeExecutable(platform);
|
|
46
|
+
if (wantsStockChrome(config, env)) {
|
|
47
|
+
return {
|
|
48
|
+
engine: "stock",
|
|
49
|
+
executablePath: stockPath,
|
|
50
|
+
reason: "debug-stock",
|
|
51
|
+
available: Boolean(stockPath),
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
const fingerprintPath = findFingerprintExecutable(config, env, platform);
|
|
55
|
+
if (fingerprintPath) {
|
|
56
|
+
return {
|
|
57
|
+
engine: "fingerprint",
|
|
58
|
+
executablePath: fingerprintPath,
|
|
59
|
+
reason: "default-fingerprint",
|
|
60
|
+
available: true,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
if (stockPath) {
|
|
64
|
+
return {
|
|
65
|
+
engine: "stock",
|
|
66
|
+
executablePath: stockPath,
|
|
67
|
+
reason: "fingerprint-unavailable",
|
|
68
|
+
available: true,
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
return {
|
|
72
|
+
engine: "fingerprint",
|
|
73
|
+
executablePath: undefined,
|
|
74
|
+
reason: "host-chrome-unavailable",
|
|
75
|
+
available: false,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
export function describeBrowserSelection(selection) {
|
|
79
|
+
if (selection.reason === "default-fingerprint") {
|
|
80
|
+
return `fingerprint Chromium (${selection.executablePath})`;
|
|
81
|
+
}
|
|
82
|
+
if (selection.reason === "debug-stock") {
|
|
83
|
+
return `stock Chrome for debug (${selection.executablePath ?? "missing"})`;
|
|
84
|
+
}
|
|
85
|
+
if (selection.reason === "fingerprint-unavailable") {
|
|
86
|
+
return `stock Chrome; fingerprint binary not installed (${selection.executablePath})`;
|
|
87
|
+
}
|
|
88
|
+
return "no browser binary (fingerprint missing, stock Chrome missing)";
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=browser-selection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser-selection.js","sourceRoot":"","sources":["../../src/agent/browser-selection.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/agent/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC/E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC1E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,KAAK,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACjF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAahD;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAQxC;AAED;;;GAGG;AACH,MAAM,MAAM,YAAY,GACpB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC9B;IACE,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EACF;QAAE,IAAI,EAAE,QAAQ,CAAC;QAAC,UAAU,EAAE,WAAW,GAAG,YAAY,GAAG,WAAW,GAAG,YAAY,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GACrG;QAAE,IAAI,EAAE,KAAK,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;CAClC,CAAC;AAEN;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;CAChB;AAsED;;;;;GAKG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,EAAE;IAC9C,MAAM,EAAE,gBAAgB,CAAC;IACzB,OAAO,EAAE,WAAW,GAAG,SAAS,CAAC;IACjC,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3B,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,aAAa,CAAC;IAC3B,aAAa,CAAC,EAAE,kBAAkB,CAAC;IACnC,aAAa,CAAC,EAAE,WAAW,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,mBAAmB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,YAAY,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAAC;IACzC,aAAa,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAAC;CAC3C,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/agent/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC/E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC1E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,KAAK,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACjF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAahD;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAQxC;AAED;;;GAGG;AACH,MAAM,MAAM,YAAY,GACpB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC9B;IACE,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EACF;QAAE,IAAI,EAAE,QAAQ,CAAC;QAAC,UAAU,EAAE,WAAW,GAAG,YAAY,GAAG,WAAW,GAAG,YAAY,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GACrG;QAAE,IAAI,EAAE,KAAK,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;CAClC,CAAC;AAEN;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;CAChB;AAsED;;;;;GAKG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,EAAE;IAC9C,MAAM,EAAE,gBAAgB,CAAC;IACzB,OAAO,EAAE,WAAW,GAAG,SAAS,CAAC;IACjC,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3B,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,aAAa,CAAC;IAC3B,aAAa,CAAC,EAAE,kBAAkB,CAAC;IACnC,aAAa,CAAC,EAAE,WAAW,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,mBAAmB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,YAAY,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAAC;IACzC,aAAa,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAAC;CAC3C,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CA0K1B;AAED;;;;;GAKG;AACH,wBAAsB,qBAAqB,CAAC,OAAO,EAAE;IACnD,QAAQ,EAAE,cAAc,EAAE,CAAC;CAC5B,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAoB1B;AAyBD;;;;;;;GAOG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE;IAClD,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3B,YAAY,EAAE,YAAY,CAAC;IAC3B,IAAI,EAAE,gBAAgB,CAAC;CACxB,GAAG,YAAY,EAAE,CA6BjB;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE;IAClD,MAAM,EAAE,gBAAgB,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,mBAAmB,EAAE,MAAM,CAAC;CAC7B,GAAG,YAAY,EAAE,CAsBjB"}
|