@web-auto/camo 0.1.23 → 0.1.25
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/package.json +1 -1
- package/src/cli.mjs +9 -0
- package/src/commands/browser.mjs +9 -7
- package/src/container/change-notifier.mjs +90 -39
- package/src/container/runtime-core/operations/index.mjs +108 -48
- package/src/container/runtime-core/operations/tab-pool.mjs +301 -99
- package/src/container/runtime-core/operations/tab-pool.mjs.bak +762 -0
- package/src/container/runtime-core/operations/tab-pool.mjs.syntax-error +762 -0
- package/src/container/runtime-core/operations/viewport.mjs +46 -0
- package/src/container/runtime-core/subscription.mjs +72 -7
- package/src/container/runtime-core/validation.mjs +61 -4
- package/src/container/subscription-registry.mjs +1 -1
- package/src/core/utils.mjs +4 -0
- package/src/services/browser-service/index.js +27 -10
- package/src/services/browser-service/index.js.bak +671 -0
- package/src/services/browser-service/internal/BrowserSession.input.test.js +33 -0
- package/src/services/browser-service/internal/BrowserSession.js +34 -2
- package/src/services/browser-service/internal/browser-session/input-ops.js +27 -1
- package/src/services/browser-service/internal/browser-session/page-management.js +152 -36
- package/src/services/browser-service/internal/browser-session/page-management.test.js +148 -0
- package/src/services/controller/controller.js +1 -1
- package/src/services/controller/transport.js +8 -1
- package/src/utils/args.mjs +1 -0
- package/src/utils/browser-service.mjs +13 -1
- package/src/utils/command-log.mjs +64 -0
- package/src/utils/config.mjs +1 -1
- package/src/utils/help.mjs +3 -3
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { CONFIG_DIR, ensureDir } from './config.mjs';
|
|
4
|
+
|
|
5
|
+
export const COMMAND_LOG_DIR = path.join(CONFIG_DIR, 'logs');
|
|
6
|
+
export const COMMAND_LOG_FILE = path.join(COMMAND_LOG_DIR, 'command-log.jsonl');
|
|
7
|
+
|
|
8
|
+
function safeSerialize(value) {
|
|
9
|
+
if (value === undefined) return undefined;
|
|
10
|
+
if (value === null) return null;
|
|
11
|
+
try {
|
|
12
|
+
return JSON.parse(JSON.stringify(value));
|
|
13
|
+
} catch {
|
|
14
|
+
return { text: String(value) };
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
function normalizeMeta(meta = {}) {
|
|
19
|
+
const sender = meta?.sender && typeof meta.sender === 'object' ? meta.sender : {};
|
|
20
|
+
return {
|
|
21
|
+
source: String(meta?.source || '').trim() || 'unknown',
|
|
22
|
+
cwd: String(meta?.cwd || sender?.cwd || '').trim() || process.cwd(),
|
|
23
|
+
pid: Number(meta?.pid || sender?.pid || process.pid) || process.pid,
|
|
24
|
+
ppid: Number(meta?.ppid || sender?.ppid || process.ppid) || process.ppid,
|
|
25
|
+
argv: Array.isArray(meta?.argv) ? meta.argv.map((item) => String(item)) : undefined,
|
|
26
|
+
sender: {
|
|
27
|
+
source: String(sender?.source || meta?.source || '').trim() || 'unknown',
|
|
28
|
+
cwd: String(sender?.cwd || meta?.cwd || '').trim() || process.cwd(),
|
|
29
|
+
pid: Number(sender?.pid || meta?.pid || process.pid) || process.pid,
|
|
30
|
+
ppid: Number(sender?.ppid || meta?.ppid || process.ppid) || process.ppid,
|
|
31
|
+
argv: Array.isArray(sender?.argv) ? sender.argv.map((item) => String(item)) : undefined,
|
|
32
|
+
},
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export function appendCommandLog(entry = {}) {
|
|
37
|
+
try {
|
|
38
|
+
ensureDir(COMMAND_LOG_DIR);
|
|
39
|
+
const meta = normalizeMeta(entry?.meta || {});
|
|
40
|
+
const line = {
|
|
41
|
+
ts: new Date().toISOString(),
|
|
42
|
+
action: String(entry?.action || '').trim() || null,
|
|
43
|
+
profileId: String(entry?.profileId || '').trim() || null,
|
|
44
|
+
command: String(entry?.command || '').trim() || null,
|
|
45
|
+
args: Array.isArray(entry?.args) ? entry.args.map((item) => String(item)) : undefined,
|
|
46
|
+
payload: safeSerialize(entry?.payload),
|
|
47
|
+
meta,
|
|
48
|
+
};
|
|
49
|
+
fs.appendFileSync(COMMAND_LOG_FILE, `${JSON.stringify(line)}\n`, 'utf8');
|
|
50
|
+
return line;
|
|
51
|
+
} catch {
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export function buildCommandSenderMeta(overrides = {}) {
|
|
57
|
+
return {
|
|
58
|
+
source: String(overrides?.source || '').trim() || 'unknown',
|
|
59
|
+
cwd: String(overrides?.cwd || '').trim() || process.cwd(),
|
|
60
|
+
pid: Number(overrides?.pid || process.pid) || process.pid,
|
|
61
|
+
ppid: Number(overrides?.ppid || process.ppid) || process.ppid,
|
|
62
|
+
argv: Array.isArray(overrides?.argv) ? overrides.argv.map((item) => String(item)) : process.argv.slice(),
|
|
63
|
+
};
|
|
64
|
+
}
|
package/src/utils/config.mjs
CHANGED
|
@@ -69,7 +69,7 @@ export const CONFIG_FILE = path.join(CONFIG_DIR, 'camo-cli.json');
|
|
|
69
69
|
export const PROFILE_META_FILE = 'camo-profile.json';
|
|
70
70
|
export const BROWSER_SERVICE_URL = process.env.CAMO_BROWSER_URL
|
|
71
71
|
|| process.env.CAMO_BROWSER_HTTP_URL
|
|
72
|
-
|| process.env.CAMO_BROWSER_HOST
|
|
72
|
+
|| (process.env.CAMO_BROWSER_HOST ? `http://${process.env.CAMO_BROWSER_HOST}` : '')
|
|
73
73
|
|| 'http://127.0.0.1:7704';
|
|
74
74
|
|
|
75
75
|
export function ensureDir(p) {
|
package/src/utils/help.mjs
CHANGED
|
@@ -26,7 +26,7 @@ CONFIG:
|
|
|
26
26
|
|
|
27
27
|
BROWSER CONTROL:
|
|
28
28
|
init Ensure camoufox + ensure browser-service daemon
|
|
29
|
-
start [profileId] [--url <url>] [--headless] [--devtools] [--record] [--record-name <name>] [--record-output <path>] [--record-overlay|--no-record-overlay] [--alias <name>] [--idle-timeout <duration>] [--width <w> --height <h>]
|
|
29
|
+
start [profileId] [--url <url>] [--no-headless|--visible] [--devtools] [--record] [--record-name <name>] [--record-output <path>] [--record-overlay|--no-record-overlay] [--alias <name>] [--idle-timeout <duration>] [--width <w> --height <h> --max-tabs <n>]
|
|
30
30
|
stop [profileId]
|
|
31
31
|
stop --id <instanceId> Stop by instance id
|
|
32
32
|
stop --alias <alias> Stop by alias
|
|
@@ -108,8 +108,8 @@ EXAMPLES:
|
|
|
108
108
|
camo profile create myprofile
|
|
109
109
|
camo profile default myprofile
|
|
110
110
|
camo start --url https://example.com --alias main
|
|
111
|
-
camo start worker-1 --
|
|
112
|
-
camo start worker-1 --devtools
|
|
111
|
+
camo start worker-1 --alias shard1 --idle-timeout 45m
|
|
112
|
+
camo start worker-1 --visible --devtools
|
|
113
113
|
camo start worker-1 --record --record-name xhs-debug --record-output ./logs/xhs-debug.jsonl --record-overlay
|
|
114
114
|
camo start myprofile --width 1920 --height 1020
|
|
115
115
|
camo highlight-mode on
|