@farazirfan/costar-server-executor 1.7.31 → 1.7.32
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/agent.js +2 -2
- package/dist/agent/pi-embedded-runner/run.js +1 -1
- package/dist/agent/pi-embedded-runner/run.js.map +1 -1
- package/dist/api/chat.d.ts.map +1 -1
- package/dist/api/chat.js +13 -0
- package/dist/api/chat.js.map +1 -1
- package/dist/browser/cdp-helpers.d.ts +13 -0
- package/dist/browser/cdp-helpers.d.ts.map +1 -0
- package/dist/browser/cdp-helpers.js +179 -0
- package/dist/browser/cdp-helpers.js.map +1 -0
- package/dist/browser/cdp.d.ts.map +1 -1
- package/dist/browser/cdp.helpers.d.ts +5 -2
- package/dist/browser/cdp.helpers.d.ts.map +1 -1
- package/dist/browser/cdp.helpers.js +70 -34
- package/dist/browser/cdp.helpers.js.map +1 -1
- package/dist/browser/cdp.js +30 -15
- package/dist/browser/cdp.js.map +1 -1
- package/dist/browser/chrome-executables.d.ts +13 -0
- package/dist/browser/chrome-executables.d.ts.map +1 -0
- package/dist/browser/chrome-executables.js +559 -0
- package/dist/browser/chrome-executables.js.map +1 -0
- package/dist/browser/chrome-profile-decoration.d.ts +11 -0
- package/dist/browser/chrome-profile-decoration.d.ts.map +1 -0
- package/dist/browser/chrome-profile-decoration.js +148 -0
- package/dist/browser/chrome-profile-decoration.js.map +1 -0
- package/dist/browser/chrome.d.ts +4 -4
- package/dist/browser/chrome.d.ts.map +1 -1
- package/dist/browser/chrome.executables.d.ts.map +1 -1
- package/dist/browser/chrome.executables.js +98 -49
- package/dist/browser/chrome.executables.js.map +1 -1
- package/dist/browser/chrome.js +72 -28
- package/dist/browser/chrome.js.map +1 -1
- package/dist/browser/chrome.profile-decoration.d.ts +1 -1
- package/dist/browser/chrome.profile-decoration.d.ts.map +1 -1
- package/dist/browser/chrome.profile-decoration.js +11 -8
- package/dist/browser/chrome.profile-decoration.js.map +1 -1
- package/dist/browser/config.d.ts +10 -13
- package/dist/browser/config.d.ts.map +1 -1
- package/dist/browser/config.js +3 -178
- package/dist/browser/config.js.map +1 -1
- package/dist/browser/constants.d.ts +3 -3
- package/dist/browser/constants.d.ts.map +1 -1
- package/dist/browser/constants.js +3 -3
- package/dist/browser/constants.js.map +1 -1
- package/dist/browser/index.d.ts +19 -0
- package/dist/browser/index.d.ts.map +1 -0
- package/dist/browser/index.js +29 -0
- package/dist/browser/index.js.map +1 -0
- package/dist/browser/pw-ai-module.d.ts.map +1 -1
- package/dist/browser/pw-ai-module.js +29 -6
- package/dist/browser/pw-ai-module.js.map +1 -1
- package/dist/browser/pw-ai-state.d.ts +3 -0
- package/dist/browser/pw-ai-state.d.ts.map +1 -0
- package/dist/browser/pw-ai-state.js +8 -0
- package/dist/browser/pw-ai-state.js.map +1 -0
- package/dist/browser/pw-ai.d.ts +1 -1
- package/dist/browser/pw-ai.d.ts.map +1 -1
- package/dist/browser/pw-ai.js +3 -1
- package/dist/browser/pw-ai.js.map +1 -1
- package/dist/browser/pw-role-snapshot.d.ts.map +1 -1
- package/dist/browser/pw-role-snapshot.js +77 -42
- package/dist/browser/pw-role-snapshot.js.map +1 -1
- package/dist/browser/pw-session.d.ts +33 -1
- package/dist/browser/pw-session.d.ts.map +1 -1
- package/dist/browser/pw-session.js +257 -48
- package/dist/browser/pw-session.js.map +1 -1
- package/dist/browser/pw-tools-core.activity.d.ts.map +1 -1
- package/dist/browser/pw-tools-core.activity.js +4 -2
- package/dist/browser/pw-tools-core.activity.js.map +1 -1
- package/dist/browser/pw-tools-core.downloads.d.ts.map +1 -1
- package/dist/browser/pw-tools-core.downloads.js +74 -42
- package/dist/browser/pw-tools-core.downloads.js.map +1 -1
- package/dist/browser/pw-tools-core.interactions.d.ts +8 -1
- package/dist/browser/pw-tools-core.interactions.d.ts.map +1 -1
- package/dist/browser/pw-tools-core.interactions.js +139 -34
- package/dist/browser/pw-tools-core.interactions.js.map +1 -1
- package/dist/browser/pw-tools-core.responses.d.ts.map +1 -1
- package/dist/browser/pw-tools-core.responses.js +19 -10
- package/dist/browser/pw-tools-core.responses.js.map +1 -1
- package/dist/browser/pw-tools-core.shared.d.ts.map +1 -1
- package/dist/browser/pw-tools-core.shared.js +2 -1
- package/dist/browser/pw-tools-core.shared.js.map +1 -1
- package/dist/browser/pw-tools-core.snapshot.d.ts.map +1 -1
- package/dist/browser/pw-tools-core.snapshot.js +2 -1
- package/dist/browser/pw-tools-core.snapshot.js.map +1 -1
- package/dist/browser/pw-tools-core.state.d.ts.map +1 -1
- package/dist/browser/pw-tools-core.state.js +13 -7
- package/dist/browser/pw-tools-core.state.js.map +1 -1
- package/dist/browser/pw-tools-core.storage.d.ts.map +1 -1
- package/dist/browser/pw-tools-core.storage.js +6 -3
- package/dist/browser/pw-tools-core.storage.js.map +1 -1
- package/dist/browser/target-id.d.ts.map +1 -1
- package/dist/browser/target-id.js +8 -4
- package/dist/browser/target-id.js.map +1 -1
- package/dist/sandbox/browser-container.d.ts +22 -0
- package/dist/sandbox/browser-container.d.ts.map +1 -0
- package/dist/sandbox/browser-container.js +141 -0
- package/dist/sandbox/browser-container.js.map +1 -0
- package/dist/sandbox/constants.d.ts +19 -0
- package/dist/sandbox/constants.d.ts.map +1 -0
- package/dist/sandbox/constants.js +19 -0
- package/dist/sandbox/constants.js.map +1 -0
- package/dist/sandbox/index.d.ts +8 -0
- package/dist/sandbox/index.d.ts.map +1 -0
- package/dist/sandbox/index.js +7 -0
- package/dist/sandbox/index.js.map +1 -0
- package/dist/sandbox/types.d.ts +32 -0
- package/dist/sandbox/types.d.ts.map +1 -0
- package/dist/sandbox/types.js +5 -0
- package/dist/sandbox/types.js.map +1 -0
- package/dist/tools/browser.d.ts +5 -3
- package/dist/tools/browser.d.ts.map +1 -1
- package/dist/tools/browser.js +361 -1360
- package/dist/tools/browser.js.map +1 -1
- package/dist/web-server.d.ts.map +1 -1
- package/dist/web-server.js +10 -0
- package/dist/web-server.js.map +1 -1
- package/package.json +3 -1
- package/public/index.html +147 -0
- package/scripts/postinstall.js +81 -1
- package/scripts/sandbox-browser-entrypoint.sh +67 -0
- package/scripts/sandbox-browser-setup.sh +7 -0
package/dist/browser/chrome.js
CHANGED
|
@@ -3,17 +3,45 @@ import fs from "node:fs";
|
|
|
3
3
|
import os from "node:os";
|
|
4
4
|
import path from "node:path";
|
|
5
5
|
import WebSocket from "ws";
|
|
6
|
-
|
|
7
|
-
import
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
// ── Inlined from OpenClaw infra/ports.js ──
|
|
7
|
+
import net from "node:net";
|
|
8
|
+
async function ensurePortAvailable(port) {
|
|
9
|
+
return new Promise((resolve, reject) => {
|
|
10
|
+
const server = net.createServer();
|
|
11
|
+
server.once("error", (err) => {
|
|
12
|
+
if (err.code === "EADDRINUSE") {
|
|
13
|
+
reject(new Error(`Port ${port} is already in use`));
|
|
14
|
+
}
|
|
15
|
+
else {
|
|
16
|
+
reject(err);
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
server.listen(port, "127.0.0.1", () => {
|
|
20
|
+
server.close(() => resolve());
|
|
21
|
+
});
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
// ── Inlined from OpenClaw logging/subsystem.js ──
|
|
25
|
+
function createSubsystemLogger(_name) {
|
|
26
|
+
const logger = {
|
|
27
|
+
info: (...args) => console.log(...args),
|
|
28
|
+
warn: (...args) => console.warn(...args),
|
|
29
|
+
error: (...args) => console.error(...args),
|
|
30
|
+
debug: (..._args) => { },
|
|
31
|
+
child: (_childName) => logger,
|
|
32
|
+
};
|
|
33
|
+
return logger;
|
|
34
|
+
}
|
|
35
|
+
// ── Inlined from OpenClaw utils.js ──
|
|
36
|
+
const CONFIG_DIR = path.join(os.homedir(), ".costar");
|
|
10
37
|
import { appendCdpPath } from "./cdp.helpers.js";
|
|
38
|
+
import { getHeadersWithAuth, normalizeCdpWsUrl } from "./cdp.js";
|
|
11
39
|
import { resolveBrowserExecutableForPlatform, } from "./chrome.executables.js";
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
40
|
+
import { decorateCostarProfile, ensureProfileCleanExit, isProfileDecorated, } from "./chrome.profile-decoration.js";
|
|
41
|
+
import { DEFAULT_COSTAR_BROWSER_COLOR, DEFAULT_COSTAR_BROWSER_PROFILE_NAME, } from "./constants.js";
|
|
14
42
|
const log = createSubsystemLogger("browser").child("chrome");
|
|
15
43
|
export { findChromeExecutableLinux, findChromeExecutableMac, findChromeExecutableWindows, resolveBrowserExecutableForPlatform, } from "./chrome.executables.js";
|
|
16
|
-
export {
|
|
44
|
+
export { decorateCostarProfile, ensureProfileCleanExit, isProfileDecorated, } from "./chrome.profile-decoration.js";
|
|
17
45
|
function exists(filePath) {
|
|
18
46
|
try {
|
|
19
47
|
return fs.existsSync(filePath);
|
|
@@ -25,7 +53,7 @@ function exists(filePath) {
|
|
|
25
53
|
function resolveBrowserExecutable(resolved) {
|
|
26
54
|
return resolveBrowserExecutableForPlatform(resolved, process.platform);
|
|
27
55
|
}
|
|
28
|
-
export function
|
|
56
|
+
export function resolveCostarUserDataDir(profileName = DEFAULT_COSTAR_BROWSER_PROFILE_NAME) {
|
|
29
57
|
return path.join(CONFIG_DIR, "browser", profileName, "user-data");
|
|
30
58
|
}
|
|
31
59
|
function cdpUrlForPort(cdpPort) {
|
|
@@ -37,18 +65,20 @@ export async function isChromeReachable(cdpUrl, timeoutMs = 500) {
|
|
|
37
65
|
}
|
|
38
66
|
async function fetchChromeVersion(cdpUrl, timeoutMs = 500) {
|
|
39
67
|
const ctrl = new AbortController();
|
|
40
|
-
const t = setTimeout(
|
|
68
|
+
const t = setTimeout(ctrl.abort.bind(ctrl), timeoutMs);
|
|
41
69
|
try {
|
|
42
70
|
const versionUrl = appendCdpPath(cdpUrl, "/json/version");
|
|
43
71
|
const res = await fetch(versionUrl, {
|
|
44
72
|
signal: ctrl.signal,
|
|
45
73
|
headers: getHeadersWithAuth(versionUrl),
|
|
46
74
|
});
|
|
47
|
-
if (!res.ok)
|
|
75
|
+
if (!res.ok) {
|
|
48
76
|
return null;
|
|
77
|
+
}
|
|
49
78
|
const data = (await res.json());
|
|
50
|
-
if (!data || typeof data !== "object")
|
|
79
|
+
if (!data || typeof data !== "object") {
|
|
51
80
|
return null;
|
|
81
|
+
}
|
|
52
82
|
return data;
|
|
53
83
|
}
|
|
54
84
|
catch {
|
|
@@ -61,8 +91,9 @@ async function fetchChromeVersion(cdpUrl, timeoutMs = 500) {
|
|
|
61
91
|
export async function getChromeWebSocketUrl(cdpUrl, timeoutMs = 500) {
|
|
62
92
|
const version = await fetchChromeVersion(cdpUrl, timeoutMs);
|
|
63
93
|
const wsUrl = String(version?.webSocketDebuggerUrl ?? "").trim();
|
|
64
|
-
if (!wsUrl)
|
|
94
|
+
if (!wsUrl) {
|
|
65
95
|
return null;
|
|
96
|
+
}
|
|
66
97
|
return normalizeCdpWsUrl(wsUrl, cdpUrl);
|
|
67
98
|
}
|
|
68
99
|
async function canOpenWebSocket(wsUrl, timeoutMs = 800) {
|
|
@@ -99,11 +130,12 @@ async function canOpenWebSocket(wsUrl, timeoutMs = 800) {
|
|
|
99
130
|
}
|
|
100
131
|
export async function isChromeCdpReady(cdpUrl, timeoutMs = 500, handshakeTimeoutMs = 800) {
|
|
101
132
|
const wsUrl = await getChromeWebSocketUrl(cdpUrl, timeoutMs);
|
|
102
|
-
if (!wsUrl)
|
|
133
|
+
if (!wsUrl) {
|
|
103
134
|
return false;
|
|
135
|
+
}
|
|
104
136
|
return await canOpenWebSocket(wsUrl, handshakeTimeoutMs);
|
|
105
137
|
}
|
|
106
|
-
export async function
|
|
138
|
+
export async function launchCostarChrome(resolved, profile) {
|
|
107
139
|
if (!profile.cdpIsLoopback) {
|
|
108
140
|
throw new Error(`Profile "${profile.name}" is remote; cannot launch local Chrome.`);
|
|
109
141
|
}
|
|
@@ -112,9 +144,9 @@ export async function launchOpenClawChrome(resolved, profile) {
|
|
|
112
144
|
if (!exe) {
|
|
113
145
|
throw new Error("No supported browser found (Chrome/Brave/Edge/Chromium on macOS, Linux, or Windows).");
|
|
114
146
|
}
|
|
115
|
-
const userDataDir =
|
|
147
|
+
const userDataDir = resolveCostarUserDataDir(profile.name);
|
|
116
148
|
fs.mkdirSync(userDataDir, { recursive: true });
|
|
117
|
-
const needsDecorate = !isProfileDecorated(userDataDir, profile.name, (profile.color ??
|
|
149
|
+
const needsDecorate = !isProfileDecorated(userDataDir, profile.name, (profile.color ?? DEFAULT_COSTAR_BROWSER_COLOR).toUpperCase());
|
|
118
150
|
// First launch to create preference files if missing, then decorate and relaunch.
|
|
119
151
|
const spawnOnce = () => {
|
|
120
152
|
const args = [
|
|
@@ -142,6 +174,12 @@ export async function launchOpenClawChrome(resolved, profile) {
|
|
|
142
174
|
if (process.platform === "linux") {
|
|
143
175
|
args.push("--disable-dev-shm-usage");
|
|
144
176
|
}
|
|
177
|
+
// Stealth: hide navigator.webdriver from automation detection (#80)
|
|
178
|
+
args.push("--disable-blink-features=AutomationControlled");
|
|
179
|
+
// Append user-configured extra arguments (e.g., stealth flags, window size)
|
|
180
|
+
if (resolved.extraArgs.length > 0) {
|
|
181
|
+
args.push(...resolved.extraArgs);
|
|
182
|
+
}
|
|
145
183
|
// Always open a blank tab to ensure a target exists.
|
|
146
184
|
args.push("about:blank");
|
|
147
185
|
return spawn(exe.path, args, {
|
|
@@ -163,8 +201,9 @@ export async function launchOpenClawChrome(resolved, profile) {
|
|
|
163
201
|
const bootstrap = spawnOnce();
|
|
164
202
|
const deadline = Date.now() + 10_000;
|
|
165
203
|
while (Date.now() < deadline) {
|
|
166
|
-
if (exists(localStatePath) && exists(preferencesPath))
|
|
204
|
+
if (exists(localStatePath) && exists(preferencesPath)) {
|
|
167
205
|
break;
|
|
206
|
+
}
|
|
168
207
|
await new Promise((r) => setTimeout(r, 100));
|
|
169
208
|
}
|
|
170
209
|
try {
|
|
@@ -175,35 +214,37 @@ export async function launchOpenClawChrome(resolved, profile) {
|
|
|
175
214
|
}
|
|
176
215
|
const exitDeadline = Date.now() + 5000;
|
|
177
216
|
while (Date.now() < exitDeadline) {
|
|
178
|
-
if (bootstrap.exitCode != null)
|
|
217
|
+
if (bootstrap.exitCode != null) {
|
|
179
218
|
break;
|
|
219
|
+
}
|
|
180
220
|
await new Promise((r) => setTimeout(r, 50));
|
|
181
221
|
}
|
|
182
222
|
}
|
|
183
223
|
if (needsDecorate) {
|
|
184
224
|
try {
|
|
185
|
-
|
|
225
|
+
decorateCostarProfile(userDataDir, {
|
|
186
226
|
name: profile.name,
|
|
187
227
|
color: profile.color,
|
|
188
228
|
});
|
|
189
|
-
log.info(
|
|
229
|
+
log.info(`🚀 costar browser profile decorated (${profile.color})`);
|
|
190
230
|
}
|
|
191
231
|
catch (err) {
|
|
192
|
-
log.warn(`
|
|
232
|
+
log.warn(`costar browser profile decoration failed: ${String(err)}`);
|
|
193
233
|
}
|
|
194
234
|
}
|
|
195
235
|
try {
|
|
196
236
|
ensureProfileCleanExit(userDataDir);
|
|
197
237
|
}
|
|
198
238
|
catch (err) {
|
|
199
|
-
log.warn(`
|
|
239
|
+
log.warn(`costar browser clean-exit prefs failed: ${String(err)}`);
|
|
200
240
|
}
|
|
201
241
|
const proc = spawnOnce();
|
|
202
242
|
// Wait for CDP to come up.
|
|
203
243
|
const readyDeadline = Date.now() + 15_000;
|
|
204
244
|
while (Date.now() < readyDeadline) {
|
|
205
|
-
if (await isChromeReachable(profile.cdpUrl, 500))
|
|
245
|
+
if (await isChromeReachable(profile.cdpUrl, 500)) {
|
|
206
246
|
break;
|
|
247
|
+
}
|
|
207
248
|
await new Promise((r) => setTimeout(r, 200));
|
|
208
249
|
}
|
|
209
250
|
if (!(await isChromeReachable(profile.cdpUrl, 500))) {
|
|
@@ -216,7 +257,7 @@ export async function launchOpenClawChrome(resolved, profile) {
|
|
|
216
257
|
throw new Error(`Failed to start Chrome CDP on port ${profile.cdpPort} for profile "${profile.name}".`);
|
|
217
258
|
}
|
|
218
259
|
const pid = proc.pid ?? -1;
|
|
219
|
-
log.info(
|
|
260
|
+
log.info(`🚀 costar browser started (${exe.kind}) profile "${profile.name}" on 127.0.0.1:${profile.cdpPort} (pid ${pid})`);
|
|
220
261
|
return {
|
|
221
262
|
pid,
|
|
222
263
|
exe,
|
|
@@ -226,10 +267,11 @@ export async function launchOpenClawChrome(resolved, profile) {
|
|
|
226
267
|
proc,
|
|
227
268
|
};
|
|
228
269
|
}
|
|
229
|
-
export async function
|
|
270
|
+
export async function stopCostarChrome(running, timeoutMs = 2500) {
|
|
230
271
|
const proc = running.proc;
|
|
231
|
-
if (proc.killed)
|
|
272
|
+
if (proc.killed) {
|
|
232
273
|
return;
|
|
274
|
+
}
|
|
233
275
|
try {
|
|
234
276
|
proc.kill("SIGTERM");
|
|
235
277
|
}
|
|
@@ -238,10 +280,12 @@ export async function stopOpenClawChrome(running, timeoutMs = 2500) {
|
|
|
238
280
|
}
|
|
239
281
|
const start = Date.now();
|
|
240
282
|
while (Date.now() - start < timeoutMs) {
|
|
241
|
-
if (!proc.exitCode && proc.killed)
|
|
283
|
+
if (!proc.exitCode && proc.killed) {
|
|
242
284
|
break;
|
|
243
|
-
|
|
285
|
+
}
|
|
286
|
+
if (!(await isChromeReachable(cdpUrlForPort(running.cdpPort), 200))) {
|
|
244
287
|
return;
|
|
288
|
+
}
|
|
245
289
|
await new Promise((r) => setTimeout(r, 100));
|
|
246
290
|
}
|
|
247
291
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chrome.js","sourceRoot":"","sources":["../../src/browser/chrome.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuC,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAChF,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,SAAS,MAAM,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"chrome.js","sourceRoot":"","sources":["../../src/browser/chrome.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@ export declare function isProfileDecorated(userDataDir: string, desiredName: str
|
|
|
3
3
|
* Best-effort profile decoration (name + lobster-orange). Chrome preference keys
|
|
4
4
|
* vary by version; we keep this conservative and idempotent.
|
|
5
5
|
*/
|
|
6
|
-
export declare function
|
|
6
|
+
export declare function decorateCostarProfile(userDataDir: string, opts?: {
|
|
7
7
|
name?: string;
|
|
8
8
|
color?: string;
|
|
9
9
|
}): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chrome.profile-decoration.d.ts","sourceRoot":"","sources":["../../src/browser/chrome.profile-decoration.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"chrome.profile-decoration.d.ts","sourceRoot":"","sources":["../../src/browser/chrome.profile-decoration.ts"],"names":[],"mappings":"AAuDA,wBAAgB,kBAAkB,CAChC,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,eAAe,EAAE,MAAM,GACtB,OAAO,CA+DT;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,WAAW,EAAE,MAAM,EACnB,IAAI,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,QA2DzC;AAED,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,MAAM,QAMzD"}
|
|
@@ -1,17 +1,19 @@
|
|
|
1
1
|
import fs from "node:fs";
|
|
2
2
|
import path from "node:path";
|
|
3
|
-
import {
|
|
3
|
+
import { DEFAULT_COSTAR_BROWSER_COLOR, DEFAULT_COSTAR_BROWSER_PROFILE_NAME, } from "./constants.js";
|
|
4
4
|
function decoratedMarkerPath(userDataDir) {
|
|
5
|
-
return path.join(userDataDir, ".
|
|
5
|
+
return path.join(userDataDir, ".costar-profile-decorated");
|
|
6
6
|
}
|
|
7
7
|
function safeReadJson(filePath) {
|
|
8
8
|
try {
|
|
9
|
-
if (!fs.existsSync(filePath))
|
|
9
|
+
if (!fs.existsSync(filePath)) {
|
|
10
10
|
return null;
|
|
11
|
+
}
|
|
11
12
|
const raw = fs.readFileSync(filePath, "utf-8");
|
|
12
13
|
const parsed = JSON.parse(raw);
|
|
13
|
-
if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed))
|
|
14
|
+
if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) {
|
|
14
15
|
return null;
|
|
16
|
+
}
|
|
15
17
|
return parsed;
|
|
16
18
|
}
|
|
17
19
|
catch {
|
|
@@ -35,8 +37,9 @@ function setDeep(obj, keys, value) {
|
|
|
35
37
|
}
|
|
36
38
|
function parseHexRgbToSignedArgbInt(hex) {
|
|
37
39
|
const cleaned = hex.trim().replace(/^#/, "");
|
|
38
|
-
if (!/^[0-9a-fA-F]{6}$/.test(cleaned))
|
|
40
|
+
if (!/^[0-9a-fA-F]{6}$/.test(cleaned)) {
|
|
39
41
|
return null;
|
|
42
|
+
}
|
|
40
43
|
const rgb = Number.parseInt(cleaned, 16);
|
|
41
44
|
const argbUnsigned = (0xff << 24) | rgb;
|
|
42
45
|
// Chrome stores colors as signed 32-bit ints (SkColor).
|
|
@@ -95,9 +98,9 @@ export function isProfileDecorated(userDataDir, desiredName, desiredColorHex) {
|
|
|
95
98
|
* Best-effort profile decoration (name + lobster-orange). Chrome preference keys
|
|
96
99
|
* vary by version; we keep this conservative and idempotent.
|
|
97
100
|
*/
|
|
98
|
-
export function
|
|
99
|
-
const desiredName = opts?.name ??
|
|
100
|
-
const desiredColor = (opts?.color ??
|
|
101
|
+
export function decorateCostarProfile(userDataDir, opts) {
|
|
102
|
+
const desiredName = opts?.name ?? DEFAULT_COSTAR_BROWSER_PROFILE_NAME;
|
|
103
|
+
const desiredColor = (opts?.color ?? DEFAULT_COSTAR_BROWSER_COLOR).toUpperCase();
|
|
101
104
|
const desiredColorInt = parseHexRgbToSignedArgbInt(desiredColor);
|
|
102
105
|
const localStatePath = path.join(userDataDir, "Local State");
|
|
103
106
|
const preferencesPath = path.join(userDataDir, "Default", "Preferences");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chrome.profile-decoration.js","sourceRoot":"","sources":["../../src/browser/chrome.profile-decoration.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"chrome.profile-decoration.js","sourceRoot":"","sources":["../../src/browser/chrome.profile-decoration.ts"],"names":[],"mappings":"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"}
|
package/dist/browser/config.d.ts
CHANGED
|
@@ -1,4 +1,12 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Browser config types — extracted from OpenClaw browser/config.ts
|
|
3
|
+
* Only the types used by chrome.ts, chrome.executables.ts, and pw-session.ts
|
|
4
|
+
*/
|
|
5
|
+
export type BrowserProfileConfig = {
|
|
6
|
+
cdpPort?: number;
|
|
7
|
+
color?: string;
|
|
8
|
+
driver?: "openclaw" | "extension";
|
|
9
|
+
};
|
|
2
10
|
export type ResolvedBrowserConfig = {
|
|
3
11
|
enabled: boolean;
|
|
4
12
|
evaluateEnabled: boolean;
|
|
@@ -15,6 +23,7 @@ export type ResolvedBrowserConfig = {
|
|
|
15
23
|
attachOnly: boolean;
|
|
16
24
|
defaultProfile: string;
|
|
17
25
|
profiles: Record<string, BrowserProfileConfig>;
|
|
26
|
+
extraArgs: string[];
|
|
18
27
|
};
|
|
19
28
|
export type ResolvedBrowserProfile = {
|
|
20
29
|
name: string;
|
|
@@ -25,16 +34,4 @@ export type ResolvedBrowserProfile = {
|
|
|
25
34
|
color: string;
|
|
26
35
|
driver: "openclaw" | "extension";
|
|
27
36
|
};
|
|
28
|
-
export declare function parseHttpUrl(raw: string, label: string): {
|
|
29
|
-
parsed: URL;
|
|
30
|
-
port: number;
|
|
31
|
-
normalized: string;
|
|
32
|
-
};
|
|
33
|
-
export declare function resolveBrowserConfig(cfg: BrowserConfig | undefined, rootConfig?: OpenClawConfig): ResolvedBrowserConfig;
|
|
34
|
-
/**
|
|
35
|
-
* Resolve a profile by name from the config.
|
|
36
|
-
* Returns null if the profile doesn't exist.
|
|
37
|
-
*/
|
|
38
|
-
export declare function resolveProfile(resolved: ResolvedBrowserConfig, profileName: string): ResolvedBrowserProfile | null;
|
|
39
|
-
export declare function shouldStartLocalBrowserServer(_resolved: ResolvedBrowserConfig): boolean;
|
|
40
37
|
//# sourceMappingURL=config.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/browser/config.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/browser/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,MAAM,oBAAoB,GAAG;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,UAAU,GAAG,WAAW,CAAC;CACnC,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,eAAe,EAAE,OAAO,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,OAAO,CAAC;IACvB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,2BAA2B,EAAE,MAAM,CAAC;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;IAC/C,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,OAAO,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,UAAU,GAAG,WAAW,CAAC;CAClC,CAAC"}
|
package/dist/browser/config.js
CHANGED
|
@@ -1,181 +1,6 @@
|
|
|
1
|
-
import { deriveDefaultBrowserCdpPortRange, deriveDefaultBrowserControlPort, DEFAULT_BROWSER_CONTROL_PORT, } from "../config/port-defaults.js";
|
|
2
|
-
import { resolveGatewayPort } from "../config/paths.js";
|
|
3
|
-
import { DEFAULT_OPENCLAW_BROWSER_COLOR, DEFAULT_OPENCLAW_BROWSER_ENABLED, DEFAULT_BROWSER_EVALUATE_ENABLED, DEFAULT_BROWSER_DEFAULT_PROFILE_NAME, DEFAULT_OPENCLAW_BROWSER_PROFILE_NAME, } from "./constants.js";
|
|
4
|
-
import { CDP_PORT_RANGE_START, getUsedPorts } from "./profiles.js";
|
|
5
|
-
function isLoopbackHost(host) {
|
|
6
|
-
const h = host.trim().toLowerCase();
|
|
7
|
-
return (h === "localhost" ||
|
|
8
|
-
h === "127.0.0.1" ||
|
|
9
|
-
h === "0.0.0.0" ||
|
|
10
|
-
h === "[::1]" ||
|
|
11
|
-
h === "::1" ||
|
|
12
|
-
h === "[::]" ||
|
|
13
|
-
h === "::");
|
|
14
|
-
}
|
|
15
|
-
function normalizeHexColor(raw) {
|
|
16
|
-
const value = (raw ?? "").trim();
|
|
17
|
-
if (!value)
|
|
18
|
-
return DEFAULT_OPENCLAW_BROWSER_COLOR;
|
|
19
|
-
const normalized = value.startsWith("#") ? value : `#${value}`;
|
|
20
|
-
if (!/^#[0-9a-fA-F]{6}$/.test(normalized))
|
|
21
|
-
return DEFAULT_OPENCLAW_BROWSER_COLOR;
|
|
22
|
-
return normalized.toUpperCase();
|
|
23
|
-
}
|
|
24
|
-
function normalizeTimeoutMs(raw, fallback) {
|
|
25
|
-
const value = typeof raw === "number" && Number.isFinite(raw) ? Math.floor(raw) : fallback;
|
|
26
|
-
return value < 0 ? fallback : value;
|
|
27
|
-
}
|
|
28
|
-
export function parseHttpUrl(raw, label) {
|
|
29
|
-
const trimmed = raw.trim();
|
|
30
|
-
const parsed = new URL(trimmed);
|
|
31
|
-
if (parsed.protocol !== "http:" && parsed.protocol !== "https:") {
|
|
32
|
-
throw new Error(`${label} must be http(s), got: ${parsed.protocol.replace(":", "")}`);
|
|
33
|
-
}
|
|
34
|
-
const port = parsed.port && Number.parseInt(parsed.port, 10) > 0
|
|
35
|
-
? Number.parseInt(parsed.port, 10)
|
|
36
|
-
: parsed.protocol === "https:"
|
|
37
|
-
? 443
|
|
38
|
-
: 80;
|
|
39
|
-
if (Number.isNaN(port) || port <= 0 || port > 65535) {
|
|
40
|
-
throw new Error(`${label} has invalid port: ${parsed.port}`);
|
|
41
|
-
}
|
|
42
|
-
return {
|
|
43
|
-
parsed,
|
|
44
|
-
port,
|
|
45
|
-
normalized: parsed.toString().replace(/\/$/, ""),
|
|
46
|
-
};
|
|
47
|
-
}
|
|
48
1
|
/**
|
|
49
|
-
*
|
|
50
|
-
*
|
|
2
|
+
* Browser config types — extracted from OpenClaw browser/config.ts
|
|
3
|
+
* Only the types used by chrome.ts, chrome.executables.ts, and pw-session.ts
|
|
51
4
|
*/
|
|
52
|
-
|
|
53
|
-
const result = { ...profiles };
|
|
54
|
-
if (!result[DEFAULT_OPENCLAW_BROWSER_PROFILE_NAME]) {
|
|
55
|
-
result[DEFAULT_OPENCLAW_BROWSER_PROFILE_NAME] = {
|
|
56
|
-
cdpPort: legacyCdpPort ?? derivedDefaultCdpPort ?? CDP_PORT_RANGE_START,
|
|
57
|
-
color: defaultColor,
|
|
58
|
-
};
|
|
59
|
-
}
|
|
60
|
-
return result;
|
|
61
|
-
}
|
|
62
|
-
/**
|
|
63
|
-
* Ensure a built-in "chrome" profile exists for the Chrome extension relay.
|
|
64
|
-
*
|
|
65
|
-
* Note: this is an OpenClaw browser profile (routing config), not a Chrome user profile.
|
|
66
|
-
* It points at the local relay CDP endpoint (controlPort + 1).
|
|
67
|
-
*/
|
|
68
|
-
function ensureDefaultChromeExtensionProfile(profiles, controlPort) {
|
|
69
|
-
const result = { ...profiles };
|
|
70
|
-
if (result.chrome)
|
|
71
|
-
return result;
|
|
72
|
-
const relayPort = controlPort + 1;
|
|
73
|
-
if (!Number.isFinite(relayPort) || relayPort <= 0 || relayPort > 65535)
|
|
74
|
-
return result;
|
|
75
|
-
// Avoid adding the built-in profile if the derived relay port is already used by another profile
|
|
76
|
-
// (legacy single-profile configs may use controlPort+1 for openclaw/openclaw CDP).
|
|
77
|
-
if (getUsedPorts(result).has(relayPort))
|
|
78
|
-
return result;
|
|
79
|
-
result.chrome = {
|
|
80
|
-
driver: "extension",
|
|
81
|
-
cdpUrl: `http://127.0.0.1:${relayPort}`,
|
|
82
|
-
color: "#00AA00",
|
|
83
|
-
};
|
|
84
|
-
return result;
|
|
85
|
-
}
|
|
86
|
-
export function resolveBrowserConfig(cfg, rootConfig) {
|
|
87
|
-
const enabled = cfg?.enabled ?? DEFAULT_OPENCLAW_BROWSER_ENABLED;
|
|
88
|
-
const evaluateEnabled = cfg?.evaluateEnabled ?? DEFAULT_BROWSER_EVALUATE_ENABLED;
|
|
89
|
-
const gatewayPort = resolveGatewayPort(rootConfig);
|
|
90
|
-
const controlPort = deriveDefaultBrowserControlPort(gatewayPort ?? DEFAULT_BROWSER_CONTROL_PORT);
|
|
91
|
-
const defaultColor = normalizeHexColor(cfg?.color);
|
|
92
|
-
const remoteCdpTimeoutMs = normalizeTimeoutMs(cfg?.remoteCdpTimeoutMs, 1500);
|
|
93
|
-
const remoteCdpHandshakeTimeoutMs = normalizeTimeoutMs(cfg?.remoteCdpHandshakeTimeoutMs, Math.max(2000, remoteCdpTimeoutMs * 2));
|
|
94
|
-
const derivedCdpRange = deriveDefaultBrowserCdpPortRange(controlPort);
|
|
95
|
-
const rawCdpUrl = (cfg?.cdpUrl ?? "").trim();
|
|
96
|
-
let cdpInfo;
|
|
97
|
-
if (rawCdpUrl) {
|
|
98
|
-
cdpInfo = parseHttpUrl(rawCdpUrl, "browser.cdpUrl");
|
|
99
|
-
}
|
|
100
|
-
else {
|
|
101
|
-
const derivedPort = controlPort + 1;
|
|
102
|
-
if (derivedPort > 65535) {
|
|
103
|
-
throw new Error(`Derived CDP port (${derivedPort}) is too high; check gateway port configuration.`);
|
|
104
|
-
}
|
|
105
|
-
const derived = new URL(`http://127.0.0.1:${derivedPort}`);
|
|
106
|
-
cdpInfo = {
|
|
107
|
-
parsed: derived,
|
|
108
|
-
port: derivedPort,
|
|
109
|
-
normalized: derived.toString().replace(/\/$/, ""),
|
|
110
|
-
};
|
|
111
|
-
}
|
|
112
|
-
const headless = cfg?.headless === true;
|
|
113
|
-
const noSandbox = cfg?.noSandbox === true;
|
|
114
|
-
const attachOnly = cfg?.attachOnly === true;
|
|
115
|
-
const executablePath = cfg?.executablePath?.trim() || undefined;
|
|
116
|
-
const defaultProfileFromConfig = cfg?.defaultProfile?.trim() || undefined;
|
|
117
|
-
// Use legacy cdpUrl port for backward compatibility when no profiles configured
|
|
118
|
-
const legacyCdpPort = rawCdpUrl ? cdpInfo.port : undefined;
|
|
119
|
-
const profiles = ensureDefaultChromeExtensionProfile(ensureDefaultProfile(cfg?.profiles, defaultColor, legacyCdpPort, derivedCdpRange.start), controlPort);
|
|
120
|
-
const cdpProtocol = cdpInfo.parsed.protocol === "https:" ? "https" : "http";
|
|
121
|
-
const defaultProfile = defaultProfileFromConfig ??
|
|
122
|
-
(profiles[DEFAULT_BROWSER_DEFAULT_PROFILE_NAME]
|
|
123
|
-
? DEFAULT_BROWSER_DEFAULT_PROFILE_NAME
|
|
124
|
-
: DEFAULT_OPENCLAW_BROWSER_PROFILE_NAME);
|
|
125
|
-
return {
|
|
126
|
-
enabled,
|
|
127
|
-
evaluateEnabled,
|
|
128
|
-
controlPort,
|
|
129
|
-
cdpProtocol,
|
|
130
|
-
cdpHost: cdpInfo.parsed.hostname,
|
|
131
|
-
cdpIsLoopback: isLoopbackHost(cdpInfo.parsed.hostname),
|
|
132
|
-
remoteCdpTimeoutMs,
|
|
133
|
-
remoteCdpHandshakeTimeoutMs,
|
|
134
|
-
color: defaultColor,
|
|
135
|
-
executablePath,
|
|
136
|
-
headless,
|
|
137
|
-
noSandbox,
|
|
138
|
-
attachOnly,
|
|
139
|
-
defaultProfile,
|
|
140
|
-
profiles,
|
|
141
|
-
};
|
|
142
|
-
}
|
|
143
|
-
/**
|
|
144
|
-
* Resolve a profile by name from the config.
|
|
145
|
-
* Returns null if the profile doesn't exist.
|
|
146
|
-
*/
|
|
147
|
-
export function resolveProfile(resolved, profileName) {
|
|
148
|
-
const profile = resolved.profiles[profileName];
|
|
149
|
-
if (!profile)
|
|
150
|
-
return null;
|
|
151
|
-
const rawProfileUrl = profile.cdpUrl?.trim() ?? "";
|
|
152
|
-
let cdpHost = resolved.cdpHost;
|
|
153
|
-
let cdpPort = profile.cdpPort ?? 0;
|
|
154
|
-
let cdpUrl = "";
|
|
155
|
-
const driver = profile.driver === "extension" ? "extension" : "openclaw";
|
|
156
|
-
if (rawProfileUrl) {
|
|
157
|
-
const parsed = parseHttpUrl(rawProfileUrl, `browser.profiles.${profileName}.cdpUrl`);
|
|
158
|
-
cdpHost = parsed.parsed.hostname;
|
|
159
|
-
cdpPort = parsed.port;
|
|
160
|
-
cdpUrl = parsed.normalized;
|
|
161
|
-
}
|
|
162
|
-
else if (cdpPort) {
|
|
163
|
-
cdpUrl = `${resolved.cdpProtocol}://${resolved.cdpHost}:${cdpPort}`;
|
|
164
|
-
}
|
|
165
|
-
else {
|
|
166
|
-
throw new Error(`Profile "${profileName}" must define cdpPort or cdpUrl.`);
|
|
167
|
-
}
|
|
168
|
-
return {
|
|
169
|
-
name: profileName,
|
|
170
|
-
cdpPort,
|
|
171
|
-
cdpUrl,
|
|
172
|
-
cdpHost,
|
|
173
|
-
cdpIsLoopback: isLoopbackHost(cdpHost),
|
|
174
|
-
color: profile.color,
|
|
175
|
-
driver,
|
|
176
|
-
};
|
|
177
|
-
}
|
|
178
|
-
export function shouldStartLocalBrowserServer(_resolved) {
|
|
179
|
-
return true;
|
|
180
|
-
}
|
|
5
|
+
export {};
|
|
181
6
|
//# sourceMappingURL=config.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/browser/config.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/browser/config.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
export declare const
|
|
1
|
+
export declare const DEFAULT_COSTAR_BROWSER_ENABLED = true;
|
|
2
2
|
export declare const DEFAULT_BROWSER_EVALUATE_ENABLED = true;
|
|
3
|
-
export declare const
|
|
4
|
-
export declare const
|
|
3
|
+
export declare const DEFAULT_COSTAR_BROWSER_COLOR = "#FF4500";
|
|
4
|
+
export declare const DEFAULT_COSTAR_BROWSER_PROFILE_NAME = "openclaw";
|
|
5
5
|
export declare const DEFAULT_BROWSER_DEFAULT_PROFILE_NAME = "chrome";
|
|
6
6
|
export declare const DEFAULT_AI_SNAPSHOT_MAX_CHARS = 80000;
|
|
7
7
|
export declare const DEFAULT_AI_SNAPSHOT_EFFICIENT_MAX_CHARS = 10000;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/browser/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/browser/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,8BAA8B,OAAO,CAAC;AACnD,eAAO,MAAM,gCAAgC,OAAO,CAAC;AACrD,eAAO,MAAM,4BAA4B,YAAY,CAAC;AACtD,eAAO,MAAM,mCAAmC,aAAa,CAAC;AAC9D,eAAO,MAAM,oCAAoC,WAAW,CAAC;AAC7D,eAAO,MAAM,6BAA6B,QAAS,CAAC;AACpD,eAAO,MAAM,uCAAuC,QAAS,CAAC;AAC9D,eAAO,MAAM,mCAAmC,IAAI,CAAC"}
|