@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.
Files changed (27) hide show
  1. package/package.json +1 -1
  2. package/src/cli.mjs +9 -0
  3. package/src/commands/browser.mjs +9 -7
  4. package/src/container/change-notifier.mjs +90 -39
  5. package/src/container/runtime-core/operations/index.mjs +108 -48
  6. package/src/container/runtime-core/operations/tab-pool.mjs +301 -99
  7. package/src/container/runtime-core/operations/tab-pool.mjs.bak +762 -0
  8. package/src/container/runtime-core/operations/tab-pool.mjs.syntax-error +762 -0
  9. package/src/container/runtime-core/operations/viewport.mjs +46 -0
  10. package/src/container/runtime-core/subscription.mjs +72 -7
  11. package/src/container/runtime-core/validation.mjs +61 -4
  12. package/src/container/subscription-registry.mjs +1 -1
  13. package/src/core/utils.mjs +4 -0
  14. package/src/services/browser-service/index.js +27 -10
  15. package/src/services/browser-service/index.js.bak +671 -0
  16. package/src/services/browser-service/internal/BrowserSession.input.test.js +33 -0
  17. package/src/services/browser-service/internal/BrowserSession.js +34 -2
  18. package/src/services/browser-service/internal/browser-session/input-ops.js +27 -1
  19. package/src/services/browser-service/internal/browser-session/page-management.js +152 -36
  20. package/src/services/browser-service/internal/browser-session/page-management.test.js +148 -0
  21. package/src/services/controller/controller.js +1 -1
  22. package/src/services/controller/transport.js +8 -1
  23. package/src/utils/args.mjs +1 -0
  24. package/src/utils/browser-service.mjs +13 -1
  25. package/src/utils/command-log.mjs +64 -0
  26. package/src/utils/config.mjs +1 -1
  27. 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
+ }
@@ -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) {
@@ -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 --headless --alias shard1 --idle-timeout 45m
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