camofox-browser 2.1.1 → 2.4.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.
Files changed (102) hide show
  1. package/CHANGELOG.md +150 -0
  2. package/README.md +310 -34
  3. package/dist/src/cli/commands/content.d.ts.map +1 -1
  4. package/dist/src/cli/commands/content.js +37 -0
  5. package/dist/src/cli/commands/content.js.map +1 -1
  6. package/dist/src/cli/commands/core.d.ts.map +1 -1
  7. package/dist/src/cli/commands/core.js +21 -4
  8. package/dist/src/cli/commands/core.js.map +1 -1
  9. package/dist/src/cli/commands/interaction.d.ts.map +1 -1
  10. package/dist/src/cli/commands/interaction.js +5 -14
  11. package/dist/src/cli/commands/interaction.js.map +1 -1
  12. package/dist/src/cli/commands/navigation.d.ts.map +1 -1
  13. package/dist/src/cli/commands/navigation.js +12 -6
  14. package/dist/src/cli/commands/navigation.js.map +1 -1
  15. package/dist/src/cli/commands/server.d.ts.map +1 -1
  16. package/dist/src/cli/commands/server.js +9 -3
  17. package/dist/src/cli/commands/server.js.map +1 -1
  18. package/dist/src/cli/commands/session.d.ts.map +1 -1
  19. package/dist/src/cli/commands/session.js +23 -5
  20. package/dist/src/cli/commands/session.js.map +1 -1
  21. package/dist/src/cli/server/manager.d.ts +1 -0
  22. package/dist/src/cli/server/manager.d.ts.map +1 -1
  23. package/dist/src/cli/server/manager.js +7 -12
  24. package/dist/src/cli/server/manager.js.map +1 -1
  25. package/dist/src/middleware/lifecycle-activity.d.ts +9 -0
  26. package/dist/src/middleware/lifecycle-activity.d.ts.map +1 -0
  27. package/dist/src/middleware/lifecycle-activity.js +21 -0
  28. package/dist/src/middleware/lifecycle-activity.js.map +1 -0
  29. package/dist/src/openapi/spec.d.ts +4 -0
  30. package/dist/src/openapi/spec.d.ts.map +1 -0
  31. package/dist/src/openapi/spec.js +730 -0
  32. package/dist/src/openapi/spec.js.map +1 -0
  33. package/dist/src/routes/core.d.ts.map +1 -1
  34. package/dist/src/routes/core.js +545 -58
  35. package/dist/src/routes/core.js.map +1 -1
  36. package/dist/src/routes/docs.d.ts +3 -0
  37. package/dist/src/routes/docs.d.ts.map +1 -0
  38. package/dist/src/routes/docs.js +23 -0
  39. package/dist/src/routes/docs.js.map +1 -0
  40. package/dist/src/routes/openclaw.d.ts.map +1 -1
  41. package/dist/src/routes/openclaw.js +317 -90
  42. package/dist/src/routes/openclaw.js.map +1 -1
  43. package/dist/src/server.js +55 -4
  44. package/dist/src/server.js.map +1 -1
  45. package/dist/src/services/context-pool.d.ts +21 -4
  46. package/dist/src/services/context-pool.d.ts.map +1 -1
  47. package/dist/src/services/context-pool.js +290 -71
  48. package/dist/src/services/context-pool.js.map +1 -1
  49. package/dist/src/services/download.d.ts +2 -0
  50. package/dist/src/services/download.d.ts.map +1 -1
  51. package/dist/src/services/download.js +110 -80
  52. package/dist/src/services/download.js.map +1 -1
  53. package/dist/src/services/lifecycle-controller.d.ts +40 -0
  54. package/dist/src/services/lifecycle-controller.d.ts.map +1 -0
  55. package/dist/src/services/lifecycle-controller.js +106 -0
  56. package/dist/src/services/lifecycle-controller.js.map +1 -0
  57. package/dist/src/services/resource-extractor.d.ts +1 -0
  58. package/dist/src/services/resource-extractor.d.ts.map +1 -1
  59. package/dist/src/services/resource-extractor.js +7 -0
  60. package/dist/src/services/resource-extractor.js.map +1 -1
  61. package/dist/src/services/session.d.ts +109 -4
  62. package/dist/src/services/session.d.ts.map +1 -1
  63. package/dist/src/services/session.js +622 -64
  64. package/dist/src/services/session.js.map +1 -1
  65. package/dist/src/services/structured-extractor.d.ts +39 -0
  66. package/dist/src/services/structured-extractor.d.ts.map +1 -0
  67. package/dist/src/services/structured-extractor.js +487 -0
  68. package/dist/src/services/structured-extractor.js.map +1 -0
  69. package/dist/src/services/tab.d.ts +30 -3
  70. package/dist/src/services/tab.d.ts.map +1 -1
  71. package/dist/src/services/tab.js +872 -124
  72. package/dist/src/services/tab.js.map +1 -1
  73. package/dist/src/services/tracing.d.ts +7 -0
  74. package/dist/src/services/tracing.d.ts.map +1 -1
  75. package/dist/src/services/tracing.js +200 -19
  76. package/dist/src/services/tracing.js.map +1 -1
  77. package/dist/src/services/vnc.d.ts.map +1 -1
  78. package/dist/src/services/vnc.js +5 -3
  79. package/dist/src/services/vnc.js.map +1 -1
  80. package/dist/src/services/youtube.js +1 -1
  81. package/dist/src/services/youtube.js.map +1 -1
  82. package/dist/src/types.d.ts +71 -1
  83. package/dist/src/types.d.ts.map +1 -1
  84. package/dist/src/utils/config.d.ts +79 -3
  85. package/dist/src/utils/config.d.ts.map +1 -1
  86. package/dist/src/utils/config.js +145 -3
  87. package/dist/src/utils/config.js.map +1 -1
  88. package/dist/src/utils/presets.d.ts.map +1 -1
  89. package/dist/src/utils/presets.js +3 -1
  90. package/dist/src/utils/presets.js.map +1 -1
  91. package/dist/src/utils/proxy-profiles.d.ts +18 -0
  92. package/dist/src/utils/proxy-profiles.d.ts.map +1 -0
  93. package/dist/src/utils/proxy-profiles.js +197 -0
  94. package/dist/src/utils/proxy-profiles.js.map +1 -0
  95. package/dist/src/utils/sidecar-version.d.ts +12 -0
  96. package/dist/src/utils/sidecar-version.d.ts.map +1 -0
  97. package/dist/src/utils/sidecar-version.js +63 -0
  98. package/dist/src/utils/sidecar-version.js.map +1 -0
  99. package/dist/tsconfig.tsbuildinfo +1 -1
  100. package/openclaw.plugin.json +39 -0
  101. package/package.json +16 -4
  102. package/plugin.ts +949 -0
package/README.md CHANGED
@@ -11,6 +11,7 @@
11
11
 
12
12
  - [Why CamoFox?](#why-camofox)
13
13
  - [Features](#features)
14
+ - [Preview Status](#preview-status)
14
15
  - [Quick Start](#quick-start)
15
16
  - [CLI](#cli)
16
17
  - [Console Capture](#console-capture)
@@ -19,6 +20,7 @@
19
20
  - [Usage with AI Agents](#usage-with-ai-agents)
20
21
  - [Architecture](#architecture)
21
22
  - [API Reference](#api-reference)
23
+ - [Structured Extract](#structured-extract)
22
24
  - [Search Macros](#search-macros)
23
25
  - [Geo Presets](#geo-presets)
24
26
  - [Environment Variables](#environment-variables)
@@ -50,19 +52,53 @@
50
52
  - **Multi-Session** — concurrent isolated browser contexts per `userId` (defaults: max 50 sessions, max 10 tabs/session)
51
53
  - **Persistent Browser Profiles** — Each user gets a dedicated Firefox profile. Cookies, localStorage, IndexedDB, and all browser storage persist across sessions automatically.
52
54
  - **Geo Presets** — 8 built-in region presets (locale/timezone/geolocation) + custom presets file
55
+ - **Session-Level Proxy/Geo Overrides** — per-session proxy configuration via named profiles or raw credentials, with hybrid geo modes (`explicit-wins` or `proxy-locked`)
53
56
  - **14 Search Macros** — Google, YouTube, Amazon, Reddit (search + subreddit JSON), Wikipedia, Twitter, Yelp, Spotify, Netflix, LinkedIn, Instagram, TikTok, Twitch
54
57
  - **Element Refs** — accessibility snapshots annotated with stable `eN` element references for precise interaction
55
- - **Cookie Persistence** — import Netscape/Playwright-style cookies into a session (optional, gated by API key)
58
+ - **Cookie Persistence** — import Netscape/Playwright-style cookies into a session (bearer auth required only when `CAMOFOX_API_KEY` is set)
56
59
  - **OpenClaw Plugin** — OpenClaw-compatible endpoints (`/start`, `/tabs/open`, `/act`, etc.)
57
60
  - **TypeScript** — strict mode, typed request shapes, modular Express routes
58
- - **YouTube Transcript Extraction** — yt-dlp primary pipeline with browser fallback
61
+ - **YouTube Transcript Extraction** — yt-dlp + browser fallback (service-level; no public API route currently exposed)
59
62
  - **Snapshot Pagination** — offset-based windowing for large page snapshots
63
+ - **Image Listing Route** — image-only extraction over the shared resource extractor with selector, extension, lazy-load, and blob-resolution controls
64
+ - **Structured Extract** — deterministic schema-driven JSON extraction across core API, CLI, and OpenClaw without arbitrary JavaScript
60
65
  - **Browser Health Monitoring** — health probe with recovery/degraded state tracking
61
66
  - 🖥️ **CLI Mode** — 50+ commands for terminal-based browser automation
62
67
  - 🔐 **Auth Vault** — AES-256-GCM encrypted credential storage (LLM-safe)
63
68
  - 📜 **Pipeline Scripting** — Execute command scripts from files
64
69
  - 🔍 **Console Capture** — capture and filter browser console messages and uncaught errors
65
70
  - 📼 **Playwright Tracing** — record and export Playwright traces for debugging
71
+ - 🗂️ **Trace Artifact Management** — list, download, and delete managed trace ZIPs per user session
72
+
73
+ ## Preview Status
74
+
75
+ CamoFox Browser Server is in **Preview** (Phase 1). Preview releases are functional for browser automation and agent integration, but carry specific compatibility commitments and explicit non-goals.
76
+
77
+ ### What Preview Means
78
+ - The REST API and CLI are usable for agent workflows today; [CamoFox MCP](https://github.com/redf0x1/camofox-mcp) is available as an external companion integration
79
+ - New features may be added between minor versions
80
+ - Backward-compatible aliases are maintained for renamed or moved endpoints (see [Compatibility Policy](#compatibility-policy))
81
+ - Local state (profiles, registries, sessions) uses versioned formats with fail-closed integrity checks
82
+
83
+ ### What Preview Does NOT Guarantee
84
+ - **Frozen API surface** — endpoint behavior, request shapes, or response formats may change between minor versions
85
+ - **Automatic local-state migration** — browser profiles, download registries, and session files use versioned sidecar formats; incompatible upgrades require manual reset (see [Local State Recovery](#local-state-recovery))
86
+ - **Downgrade safety** — rolling back to an older version may require clearing local state
87
+ - **Fixed GA timeline** — promotion to GA requires meeting evidence-based exit criteria, not a calendar date
88
+
89
+ ### Compatibility Policy
90
+ During Preview, CamoFox follows an **additive-only deprecation model**:
91
+ - **Legacy aliases** (e.g., `listItemId` accepted alongside `sessionKey`, OpenClaw `/act` routing to core endpoints) continue to work alongside their replacements
92
+ - **Deprecated fields** are accepted silently; no removal until GA or a documented migration window with advance notice in CHANGELOG
93
+ - **No existing endpoint** is removed in a minor version — removals happen only in major versions with prior CHANGELOG notice
94
+
95
+ ### Local State Recovery
96
+ Browser profiles, download registries, and CLI session files use versioned sidecar formats. When upgrading CamoFox:
97
+ - **Compatible versions**: State loads normally
98
+ - **Incompatible or corrupt state**: The server refuses to load incompatible profiles and download registries; the CLI rejects incompatible saved-session files. Both log an actionable error with the specific recovery path.
99
+ - **Recovery**: Delete the affected profile directory, session file, or download registry as indicated in the error message. Clean state is recreated on next use.
100
+
101
+ Supported sidecars include limited forward-migration paths (e.g., fingerprint v0 → v1); when no migration path exists for a given version, the server refuses to load the file and logs an actionable recovery message. There is no silent repair or downgrade path — this fail-closed default prevents data corruption at the cost of manual intervention on unsupported version jumps.
66
102
 
67
103
  ## Quick Start
68
104
 
@@ -102,6 +138,8 @@ docker run -d \
102
138
  --name camofox-browser \
103
139
  -p 9377:9377 \
104
140
  -p 6080:6080 \
141
+ -e CAMOFOX_HOST=0.0.0.0 \
142
+ -e CAMOFOX_API_KEY=change-me \
105
143
  -v ~/.camofox:/home/node/.camofox \
106
144
  camofox-browser
107
145
  ```
@@ -117,9 +155,10 @@ services:
117
155
  ports:
118
156
  - "9377:9377"
119
157
  environment:
158
+ CAMOFOX_HOST: "0.0.0.0"
120
159
  CAMOFOX_PORT: "9377"
121
- # Optional auth gates
122
- # CAMOFOX_API_KEY: "change-me"
160
+ # Required when CAMOFOX_HOST is non-loopback
161
+ CAMOFOX_API_KEY: "change-me"
123
162
  # CAMOFOX_ADMIN_KEY: "change-me"
124
163
  # Optional: proxy routing (also enables Camoufox geoip mode)
125
164
  # PROXY_HOST: ""
@@ -146,7 +185,7 @@ CamoFox Browser includes a powerful CLI for browser automation directly from the
146
185
  npm install -g camofox-browser
147
186
 
148
187
  # Or use npx (no install needed)
149
- npx camofox open https://example.com
188
+ npx camofox-browser open https://example.com
150
189
  ```
151
190
 
152
191
  ### Quick Start
@@ -176,6 +215,7 @@ camofox get-url # Get current page URL
176
215
  camofox get-text # Get page text content
177
216
  camofox get-links # Get all links on page
178
217
  camofox get-tabs # List open tabs
218
+ camofox extract-structured @schema.json # Extract deterministic JSON from a schema
179
219
 
180
220
  # Interaction
181
221
  camofox click <ref> # Click element by ref
@@ -353,7 +393,7 @@ This works with **Claude Code**, **Codex**, **Cursor**, **Gemini CLI**, **GitHub
353
393
  | Skill | Focus | Best For |
354
394
  |-------|-------|----------|
355
395
  | `camofox-browser` | Full coverage (CLI + API + OpenClaw) | Complete reference |
356
- | `camofox-cli` | CLI-only (50 commands) | Terminal-first workflows |
396
+ | `camofox-cli` | CLI-only (50+ commands) | Terminal-first workflows |
357
397
  | `dogfood` | QA testing workflow | Systematic web app testing |
358
398
  | `gemini-image` | Gemini image generation | AI image automation |
359
399
  | `reddit` | Reddit automation | Reddit posting/commenting |
@@ -426,57 +466,75 @@ AI Agent (MCP / OpenClaw / REST Client)
426
466
 
427
467
  Base URL: `http://localhost:9377`
428
468
 
469
+ > **Security defaults:** `CAMOFOX_HOST` now defaults to `127.0.0.1`. If you bind beyond loopback (for example `0.0.0.0` in Docker or PaaS), `CAMOFOX_API_KEY` becomes required at startup. On non-loopback binds, navigation targets on loopback/private/link-local/metadata hosts are blocked by default unless you explicitly set `CAMOFOX_ALLOW_PRIVATE_NETWORK=true`. If you also configure `PROXY_HOST`/`PROXY_PORT`, exposed deployments must opt into `CAMOFOX_ALLOW_PRIVATE_NETWORK=true` until proxy-side private-target validation exists.
470
+
471
+ ### API Documentation
472
+
473
+ The Camofox Browser API includes OpenAPI 3.1.0 docs for a representative subset of the shipped route surface:
474
+
475
+ - **Interactive API Explorer**: [http://localhost:9377/api/docs](http://localhost:9377/api/docs) — Swagger UI with live request testing
476
+ - **OpenAPI Specification**: [http://localhost:9377/openapi.json](http://localhost:9377/openapi.json) — Machine-readable OpenAPI 3.1.0 spec
477
+
478
+ The OpenAPI spec covers a representative subset of core and OpenClaw endpoints, including request schemas, response shapes, authentication requirements, and validation rules.
479
+
429
480
  ### Core Endpoints
430
481
 
431
482
  Note: For any endpoint that targets an existing tab (`/tabs/:tabId/...`), the server resolves `tabId` **within a `userId` scope**. If you omit `userId`, you will typically get `404 Tab not found`.
432
483
 
433
484
  | Method | Endpoint | Description | Required | Auth |
434
485
  |--------|----------|-------------|----------|------|
435
- | POST | `/sessions/:userId/cookies` | Import cookies into a user session (Playwright cookie objects) | Path: `userId`; Body: `{ "cookies": Cookie[] }` | `Authorization: Bearer $CAMOFOX_API_KEY` |
486
+ | POST | `/sessions/:userId/cookies` | Import cookies into a user session (Playwright cookie objects) | Path: `userId`; Body: `{ "cookies": Cookie[] }` | Conditional: `Authorization: Bearer $CAMOFOX_API_KEY` |
436
487
  | GET | `/health` | Health check (also pre-launches the browser) | None | None |
437
488
  | GET | `/presets` | List available geo presets (built-in + custom) | None | None |
438
- | POST | `/tabs` | Create a new tab (supports `preset` + per-field overrides) | Body: `userId` + (`sessionKey` or `listItemId`) | None |
489
+ | POST | `/tabs` | Create a new tab (supports `preset` + per-field overrides) | Body: `userId` + (`sessionKey` or `listItemId`) | Conditional: `Authorization: Bearer $CAMOFOX_API_KEY` |
439
490
  | GET | `/tabs?userId=...` | List all tabs for a user (OpenClaw-compatible response shape) | Query: `userId` | None |
440
- | POST | `/tabs/:tabId/navigate` | Navigate to a URL, or expand a search `macro` + `query` | Body: `userId` + (`url` or `macro`) | None |
491
+ | POST | `/tabs/:tabId/navigate` | Navigate to a URL, or expand a search `macro` + `query` | Body: `userId` + (`url` or `macro`) | Conditional: `Authorization: Bearer $CAMOFOX_API_KEY` |
441
492
  | GET | `/tabs/:tabId/snapshot?userId=...` | Accessibility snapshot annotated with `eN` element refs | Query: `userId` | None |
442
- | POST | `/tabs/:tabId/wait` | Wait for page readiness (DOM + optional network idle) | Body: `userId` | None |
443
- | POST | `/tabs/:tabId/click` | Click by `ref` (e.g. `e12`) or CSS `selector` | Body: `userId` + (`ref` or `selector`) | None |
444
- | POST | `/tabs/:tabId/type` | Type into an element by `ref` or CSS `selector` | Body: `userId` + (`ref` or `selector`) + `text` | None |
445
- | POST | `/tabs/:tabId/press` | Press a key (e.g. `Enter`, `Escape`) | Body: `userId` + `key` | None |
446
- | POST | `/tabs/:tabId/scroll` | Scroll up/down by pixels | Body: `userId` | None |
447
- | POST | `/tabs/:tabId/scroll-element` | Scroll specific element into view | Body: userId, ref/selector | None |
448
- | POST | `/tabs/:tabId/back` | Go back | Body: `userId` | None |
449
- | POST | `/tabs/:tabId/forward` | Go forward | Body: `userId` | None |
450
- | POST | `/tabs/:tabId/refresh` | Refresh | Body: `userId` | None |
493
+ | POST | `/tabs/:tabId/wait` | Wait for page readiness (DOM + optional network idle) | Body: `userId` | Conditional: `Authorization: Bearer $CAMOFOX_API_KEY` |
494
+ | POST | `/tabs/:tabId/click` | Click by `ref` (e.g. `e12`) or CSS `selector` | Body: `userId` + (`ref` or `selector`) | Conditional: `Authorization: Bearer $CAMOFOX_API_KEY` |
495
+ | POST | `/tabs/:tabId/type` | Type into an element by `ref` or CSS `selector` | Body: `userId` + (`ref` or `selector`) + `text` | Conditional: `Authorization: Bearer $CAMOFOX_API_KEY` |
496
+ | POST | `/tabs/:tabId/press` | Press a key (e.g. `Enter`, `Escape`) | Body: `userId` + `key` | Conditional: `Authorization: Bearer $CAMOFOX_API_KEY` |
497
+ | POST | `/tabs/:tabId/scroll` | Scroll up/down/left/right by pixels | Body: `userId` | Conditional: `Authorization: Bearer $CAMOFOX_API_KEY` |
498
+ | POST | `/tabs/:tabId/scroll-element` | Scroll specific element into view | Body: userId, ref/selector | Conditional: `Authorization: Bearer $CAMOFOX_API_KEY` |
499
+ | POST | `/tabs/:tabId/back` | Go back | Body: `userId` | Conditional: `Authorization: Bearer $CAMOFOX_API_KEY` |
500
+ | POST | `/tabs/:tabId/forward` | Go forward | Body: `userId` | Conditional: `Authorization: Bearer $CAMOFOX_API_KEY` |
501
+ | POST | `/tabs/:tabId/refresh` | Refresh | Body: `userId` | Conditional: `Authorization: Bearer $CAMOFOX_API_KEY` |
451
502
  | GET | `/tabs/:tabId/links?userId=...&limit=50&offset=0` | Extract links (paginated) | Query: `userId` | None |
503
+ | GET | `/tabs/:tabId/images?userId=...` | List extracted images | Query: `userId` | Conditional: `Authorization: Bearer $CAMOFOX_API_KEY` |
452
504
  | GET | `/tabs/:tabId/screenshot?userId=...&fullPage=true` | Screenshot (PNG bytes) | Query: `userId` | None |
453
505
  | GET | `/tabs/:tabId/stats?userId=...` | Tab stats + visited URLs | Query: `userId` | None |
454
- | DELETE | `/tabs/:tabId` | Close a tab (expects JSON body: `{ "userId": "..." }`) | Body: `userId` | None |
455
- | DELETE | `/tabs/group/:listItemId` | Close a tab group (expects JSON body: `{ "userId": "..." }`) | Body: `userId` | None |
456
- | DELETE | `/sessions/:userId` | Close all sessions for a user | Path: `userId` | None |
506
+ | DELETE | `/tabs/:tabId` | Close a tab (expects JSON body: `{ "userId": "..." }`) | Body: `userId` | Conditional: `Authorization: Bearer $CAMOFOX_API_KEY` |
507
+ | DELETE | `/tabs/group/:listItemId` | Close a tab group (expects JSON body: `{ "userId": "..." }`) | Body: `userId` | Conditional: `Authorization: Bearer $CAMOFOX_API_KEY` |
508
+ | DELETE | `/sessions/:userId` | Close all sessions for a user | Path: `userId` | Conditional: `Authorization: Bearer $CAMOFOX_API_KEY` |
509
+ | POST | `/sessions/:userId/toggle-display` | Toggle display mode (headless/headed/virtual) | Path: `userId`; Body: `{ "headless": true\|false\|"virtual" }` | Conditional: `Authorization: Bearer $CAMOFOX_API_KEY` |
457
510
  | GET | `/tabs/:tabId/cookies` | Export tab cookies | Query: `userId` | Conditional: `Authorization: Bearer $CAMOFOX_API_KEY` |
458
511
  | GET | `/tabs/:tabId/downloads` | List tab downloads | Query: `userId` | None |
459
512
  | GET | `/users/:userId/downloads` | List user downloads | Path: `userId` | None |
460
513
  | GET | `/downloads/:downloadId` | Download metadata | Query: `userId` | None |
461
514
  | GET | `/downloads/:downloadId/content` | Stream download content | Query: `userId` | None |
462
- | DELETE | `/downloads/:downloadId` | Delete tracked download | Body or Query: `userId` | None |
463
- | POST | `/tabs/:tabId/extract-resources` | Extract downloadable resources | Body: `userId` | None |
464
- | POST | `/tabs/:tabId/batch-download` | Batch download resources | Body: `userId` | None |
515
+ | DELETE | `/downloads/:downloadId` | Delete tracked download | Body or Query: `userId` | Conditional: `Authorization: Bearer $CAMOFOX_API_KEY` |
516
+ | POST | `/tabs/:tabId/extract-resources` | Extract downloadable resources | Body: `userId` | Conditional: `Authorization: Bearer $CAMOFOX_API_KEY` |
517
+ | POST | `/tabs/:tabId/batch-download` | Batch download resources | Body: `userId` | Conditional: `Authorization: Bearer $CAMOFOX_API_KEY` |
465
518
  | POST | `/tabs/:tabId/resolve-blobs` | Resolve blob URLs to base64 | Body: `userId` + `urls[]` | None |
466
519
  | POST | `/tabs/:tabId/trace/start` | Start trace recording | Body: `userId` | Conditional: `Authorization: Bearer $CAMOFOX_API_KEY` |
467
520
  | POST | `/tabs/:tabId/trace/stop` | Stop and save trace ZIP | Body: `userId` | Conditional: `Authorization: Bearer $CAMOFOX_API_KEY` |
468
521
  | POST | `/tabs/:tabId/trace/chunk/start` | Start trace chunk | Body: `userId` | Conditional: `Authorization: Bearer $CAMOFOX_API_KEY` |
469
522
  | POST | `/tabs/:tabId/trace/chunk/stop` | Stop chunk and save ZIP | Body: `userId` | Conditional: `Authorization: Bearer $CAMOFOX_API_KEY` |
470
523
  | GET | `/tabs/:tabId/trace/status` | Check trace status | Query: `userId` | Conditional: `Authorization: Bearer $CAMOFOX_API_KEY` |
524
+ | GET | `/sessions/:userId/traces` | List managed trace ZIPs for a user | Path: `userId` | Conditional: `Authorization: Bearer $CAMOFOX_API_KEY` |
525
+ | GET | `/sessions/:userId/traces/:filename` | Download a managed trace ZIP | Path: `userId`, `filename` | Conditional: `Authorization: Bearer $CAMOFOX_API_KEY` |
526
+ | DELETE | `/sessions/:userId/traces/:filename` | Delete a managed trace ZIP | Path: `userId`, `filename` | Conditional: `Authorization: Bearer $CAMOFOX_API_KEY` |
471
527
  | GET | `/tabs/:tabId/console` | Get console messages | Query: `userId` | Conditional: `Authorization: Bearer $CAMOFOX_API_KEY` |
472
528
  | GET | `/tabs/:tabId/errors` | Get uncaught JS errors | Query: `userId` | Conditional: `Authorization: Bearer $CAMOFOX_API_KEY` |
473
529
  | POST | `/tabs/:tabId/console/clear` | Clear console + errors | Body or Query: `userId` | Conditional: `Authorization: Bearer $CAMOFOX_API_KEY` |
530
+ | POST | `/tabs/:tabId/extract-structured` | Extract deterministic JSON from a structured schema | Body: `userId` + `schema` | Conditional: `Authorization: Bearer $CAMOFOX_API_KEY` |
474
531
 
475
532
  ### Toggle Display Mode
476
533
  ```bash
477
534
  POST /sessions/:userId/toggle-display
478
535
  {"headless": "virtual"}
479
536
  ```
537
+ **Auth:** Conditional — requires `Authorization: Bearer $CAMOFOX_API_KEY` when `CAMOFOX_API_KEY` is set.
480
538
  Switch browser between headless and headed mode. When encountering CAPTCHAs or issues requiring visual interaction, switch to headed mode to show the browser window.
481
539
 
482
540
  Returns:
@@ -538,12 +596,75 @@ OpenClaw-compatible aliases (used by the OpenClaw plugin).
538
596
  | Method | Endpoint | Description | Required | Auth |
539
597
  |--------|----------|-------------|----------|------|
540
598
  | GET | `/` | Status (alias of `/health`) | None | None |
541
- | POST | `/tabs/open` | Open tab (OpenClaw request/response shape) | Body: `userId` + `url` | None |
599
+ | POST | `/tabs/open` | Open tab (OpenClaw request/response shape) | Body: `userId` + `url` | Conditional: `Authorization: Bearer $CAMOFOX_API_KEY` |
542
600
  | POST | `/start` | Start browser engine | None | None |
543
601
  | POST | `/stop` | Stop browser engine | None | `x-admin-key: $CAMOFOX_ADMIN_KEY` |
544
- | POST | `/navigate` | Navigate (OpenClaw request shape: `targetId` in body) | Body: `userId` + `targetId` + `url` | None |
602
+ | POST | `/navigate` | Navigate (OpenClaw request shape: `targetId` in body) | Body: `userId` + `targetId` + `url` | Conditional: `Authorization: Bearer $CAMOFOX_API_KEY` |
545
603
  | GET | `/snapshot?userId=...&targetId=...` | Snapshot (OpenClaw response shape) | Query: `userId` + `targetId` | None |
546
- | POST | `/act` | Combined actions (`click`, `type`, `press`, `scroll`, `scrollIntoView`, `hover`, `wait`, `close`) | Body: `userId` + `targetId` + `kind` | None |
604
+ | POST | `/act` | Combined actions (`click`, `type`, `press`, `scroll`, `scrollIntoView`, `hover`, `wait`, `close`, `extractStructured`) | Body: `userId` + `targetId` + `kind` | Conditional: `Authorization: Bearer $CAMOFOX_API_KEY` |
605
+
606
+ ### Structured Extract
607
+
608
+ Structured extract returns deterministic JSON from a DOM schema without arbitrary JavaScript. Use it when you want stable data contracts instead of ad-hoc `evaluate()` calls.
609
+
610
+ Core API:
611
+
612
+ ```bash
613
+ curl -X POST "$CAMOFOX_URL/tabs/$TAB_ID/extract-structured" \
614
+ -H 'Content-Type: application/json' \
615
+ -d '{
616
+ "userId": "agent1",
617
+ "schema": {
618
+ "kind": "object",
619
+ "fields": {
620
+ "title": { "kind": "text", "selector": "h1", "required": true, "trim": true },
621
+ "products": {
622
+ "kind": "list",
623
+ "selector": ".product",
624
+ "item": {
625
+ "kind": "object",
626
+ "fields": {
627
+ "name": { "kind": "text", "selector": ".name", "required": true, "trim": true },
628
+ "href": { "kind": "url", "selector": "a.product-link", "attr": "href", "required": true }
629
+ }
630
+ }
631
+ }
632
+ }
633
+ }
634
+ }'
635
+ ```
636
+
637
+ CLI:
638
+
639
+ ```bash
640
+ camofox extract-structured @schema.json <tabId> --user <userId> --format json
641
+ ```
642
+
643
+ OpenClaw:
644
+
645
+ ```bash
646
+ curl -X POST "$CAMOFOX_URL/act" \
647
+ -H 'Content-Type: application/json' \
648
+ -d '{
649
+ "kind": "extractStructured",
650
+ "targetId": "tab-123",
651
+ "userId": "agent1",
652
+ "schema": {
653
+ "kind": "object",
654
+ "fields": {
655
+ "title": { "kind": "text", "selector": "h1", "required": true }
656
+ }
657
+ }
658
+ }'
659
+ ```
660
+
661
+ Notes:
662
+
663
+ - invalid schemas fail with HTTP 400
664
+ - required runtime misses fail the whole request with HTTP 422 and `fieldPath`
665
+ - optional scalar/object/list nodes normalize to `null` / `null` / `[]`
666
+ - selectors must be CSS; no XPath, arbitrary JavaScript, or AI extraction
667
+ - raw resource extraction and structured extraction stay separate on purpose
547
668
 
548
669
  ## Search Macros
549
670
 
@@ -591,6 +712,119 @@ curl -X POST http://localhost:9377/tabs \
591
712
 
592
713
  Custom presets: set `CAMOFOX_PRESETS_FILE=/path/to/presets.json` (JSON object; keys become preset names).
593
714
 
715
+ ## Session-Level Proxy and Geo Overrides
716
+
717
+ CamoFox supports session-level proxy and geolocation configuration with a hybrid model that combines server defaults with per-session overrides.
718
+
719
+ ### Proxy Configuration Model
720
+
721
+ **Server-level baseline** (via environment variables):
722
+ - `PROXY_HOST`, `PROXY_PORT`, `PROXY_USERNAME`, `PROXY_PASSWORD` — applied as the default for all sessions
723
+ - Enables Camoufox geoip mode when configured
724
+
725
+ **Session-level overrides** (via `POST /tabs` or CLI):
726
+ - `proxyProfile` — select a named proxy profile from `CAMOFOX_PROXY_PROFILES_FILE`
727
+ - `proxy` — provide raw proxy fields (`host`, `port`, `username`, `password`) directly
728
+ - Session-level proxy overrides the server baseline for that specific `userId + sessionKey` combination
729
+
730
+ **Session identity rules**:
731
+ - The same `userId` may run different `sessionKey` profiles in parallel with different proxy/geo configurations
732
+ - The same `userId + sessionKey` combination maintains a stable proxy/geo identity — requests with conflicting proxy/geo fields are rejected
733
+ - Session reuse and cleanup scope proxy/geo identity by `userId + sessionKey`, not just `userId`
734
+
735
+ ### Geo Mode Behavior
736
+
737
+ CamoFox offers two geo modes that control how explicit geo fields (locale, timezone, geolocation) interact with proxy-derived geo:
738
+
739
+ **`geoMode=explicit-wins`** (default):
740
+ - Explicit geo fields (locale, timezone, geolocation) remain authoritative
741
+ - Proxy-derived geo suggestions are ignored
742
+ - Use this mode when you want precise geo control regardless of proxy location
743
+
744
+ **`geoMode=proxy-locked`**:
745
+ - Explicit geo fields that conflict with proxy-derived geo are rejected
746
+ - Proxy-derived geo is authoritative
747
+ - Use this mode to ensure geo consistency with proxy exit location
748
+
749
+ ### CLI Examples
750
+
751
+ Session-level proxy with named profile:
752
+ ```bash
753
+ camofox open https://example.com --proxy-profile tokyo-exit --user agent1
754
+ ```
755
+
756
+ Session-level proxy with raw fields:
757
+ ```bash
758
+ camofox open https://example.com \
759
+ --proxy-host proxy.example.com \
760
+ --proxy-port 8080 \
761
+ --proxy-username user \
762
+ --proxy-password pass \
763
+ --user agent1
764
+ ```
765
+
766
+ Combine proxy with geo mode:
767
+ ```bash
768
+ camofox open https://example.com \
769
+ --proxy-profile london-exit \
770
+ --geo uk \
771
+ --geo-mode proxy-locked \
772
+ --user agent1
773
+ ```
774
+
775
+ ### API Examples
776
+
777
+ Using a named proxy profile with explicit geo:
778
+ ```bash
779
+ curl -X POST http://localhost:9377/tabs \
780
+ -H 'Content-Type: application/json' \
781
+ -d '{
782
+ "userId": "agent1",
783
+ "sessionKey": "task1",
784
+ "url": "https://example.com",
785
+ "proxyProfile": "tokyo-exit",
786
+ "preset": "japan",
787
+ "geoMode": "explicit-wins"
788
+ }'
789
+ ```
790
+
791
+ Using raw proxy fields with proxy-locked geo:
792
+ ```bash
793
+ curl -X POST http://localhost:9377/tabs \
794
+ -H 'Content-Type: application/json' \
795
+ -d '{
796
+ "userId": "agent1",
797
+ "sessionKey": "task2",
798
+ "url": "https://example.com",
799
+ "proxy": {
800
+ "host": "proxy.example.com",
801
+ "port": 8080,
802
+ "username": "user",
803
+ "password": "pass"
804
+ },
805
+ "geoMode": "proxy-locked"
806
+ }'
807
+ ```
808
+
809
+ ### Named Proxy Profiles
810
+
811
+ Define proxy profiles in a JSON file and point `CAMOFOX_PROXY_PROFILES_FILE` to it:
812
+
813
+ ```json
814
+ {
815
+ "tokyo-exit": {
816
+ "server": "http://tokyo.proxy.example.com:8080",
817
+ "username": "user",
818
+ "password": "pass"
819
+ },
820
+ "london-exit": {
821
+ "server": "http://london.proxy.example.com:8080"
822
+ }
823
+ }
824
+ ```
825
+
826
+ Then use profiles by name in API requests or CLI commands.
827
+
594
828
  ## Environment Variables
595
829
 
596
830
  | Variable | Default | Description |
@@ -598,8 +832,10 @@ Custom presets: set `CAMOFOX_PRESETS_FILE=/path/to/presets.json` (JSON object; k
598
832
  | `CAMOFOX_PORT` | `9377` | Server port |
599
833
  | `PORT` | (optional) | Alternative port env var (common in PaaS) |
600
834
  | `NODE_ENV` | `development` | Node environment |
835
+ | `CAMOFOX_HOST` | `127.0.0.1` | Server bind host. Set `0.0.0.0` for Docker/PaaS/network exposure. Non-loopback binds require `CAMOFOX_API_KEY`. |
601
836
  | `CAMOFOX_ADMIN_KEY` | (empty) | Required for `POST /stop` (sent via `x-admin-key`) |
602
- | `CAMOFOX_API_KEY` | (empty) | Enables cookie import endpoint; sent via `Authorization: Bearer ...` |
837
+ | `CAMOFOX_API_KEY` | (empty) | Guards protected endpoints (tab creation, navigation, interaction, session management, downloads, image extraction, tracing, console) via `Authorization: Bearer` header when set. Required whenever `CAMOFOX_HOST` exposes the server beyond loopback. |
838
+ | `CAMOFOX_ALLOW_PRIVATE_NETWORK` | `true` on loopback binds, `false` otherwise | Allows navigation to loopback/private/link-local/metadata targets. Leave unset for the safe default; enable only for trusted deployments that intentionally need internal-network reachability. |
603
839
  | `CAMOFOX_HEADLESS` | `true` | Display mode: `true` (headless), `false` (headed), `virtual` (Xvfb) |
604
840
  | `CAMOFOX_VNC_RESOLUTION` | `1920x1080x24` | Virtual Xvfb display resolution (`WIDTHxHEIGHTxDEPTH`) |
605
841
  | `CAMOFOX_VNC_TIMEOUT_MS` | `120000` | Max VNC session duration in ms before auto-stop |
@@ -613,28 +849,63 @@ Custom presets: set `CAMOFOX_PRESETS_FILE=/path/to/presets.json` (JSON object; k
613
849
  | `CAMOFOX_MAX_BATCH_CONCURRENCY` | `5` | Batch download concurrency cap |
614
850
  | `CAMOFOX_MAX_BLOB_SIZE_MB` | `5` | Max blob payload size |
615
851
  | `CAMOFOX_MAX_DOWNLOADS_PER_USER` | `500` | Per-user download record cap |
852
+ | `CAMOFOX_CONSOLE_BUFFER_SIZE` | `1000` | Per-tab console/error message buffer size (minimum `100`) |
616
853
  | `HANDLER_TIMEOUT_MS` | `30000` | Handler timeout fallback |
617
854
  | `MAX_CONCURRENT_PER_USER` | `3` | Concurrent operations per user |
618
855
  | `CAMOFOX_VNC_BASE_PORT` | `6080` | noVNC/websockify base port |
619
856
  | `CAMOFOX_VNC_HOST` | `localhost` | noVNC host in returned URL |
620
857
  | `CAMOFOX_CLI_USER` | `cli-default` | Default CLI user id |
621
- | `CAMOFOX_IDLE_TIMEOUT_MS` | `1800000` | CLI server idle timeout |
858
+ | `CAMOFOX_SERVER_PID_FILE` | (unset) | Optional daemon PID file path used by the CLI server manager |
859
+ | `CAMOFOX_IDLE_TIMEOUT_MS` | `1800000` | Stage 1 idle cleanup threshold (ms) |
860
+ | `CAMOFOX_IDLE_EXIT_TIMEOUT_MS` | `1800000` | Stage 2 daemon exit quiet window (ms, defaults to match Stage 1) |
622
861
  | `CAMOFOX_PRESETS_FILE` | (unset) | Optional JSON file defining/overriding geo presets |
862
+ | `CAMOFOX_PROXY_PROFILES_FILE` | (unset) | Optional JSON file defining named proxy profiles for session-level overrides |
623
863
  | `CAMOFOX_SESSION_TIMEOUT` | `1800000` | Session idle timeout in ms (min `60000`) |
624
864
  | `CAMOFOX_MAX_SESSIONS` | `50` | Maximum concurrent sessions |
625
865
  | `CAMOFOX_MAX_TABS` | `10` | Maximum tabs per session |
626
- | `PROXY_HOST` | (empty) | Proxy host (enables proxy routing) |
627
- | `PROXY_PORT` | (empty) | Proxy port |
628
- | `PROXY_USERNAME` | (empty) | Proxy username |
629
- | `PROXY_PASSWORD` | (empty) | Proxy password |
866
+ | `PROXY_HOST` | (empty) | Proxy host (server-level default; enables proxy routing) |
867
+ | `PROXY_PORT` | (empty) | Proxy port (server-level default) |
868
+ | `PROXY_USERNAME` | (empty) | Proxy username (server-level default) |
869
+ | `PROXY_PASSWORD` | (empty) | Proxy password (server-level default) |
630
870
  | `CAMOFOX_MAX_SNAPSHOT_CHARS` | `80000` | Max characters in snapshot before truncation |
871
+ | `CAMOFOX_MAX_SNAPSHOT_NODES` | `2000` | Max accessibility snapshot nodes before truncation |
631
872
  | `CAMOFOX_SNAPSHOT_TAIL_CHARS` | `5000` | Characters preserved at end of truncated snapshot |
632
873
  | `CAMOFOX_BUILDREFS_TIMEOUT_MS` | `12000` | Timeout for building element refs |
633
874
  | `CAMOFOX_TAB_LOCK_TIMEOUT_MS` | `30000` | Timeout for acquiring tab lock |
875
+ | `CAMOFOX_TRACES_DIR` | `~/.camofox/traces` | Managed Playwright trace artifact directory |
876
+ | `CAMOFOX_TRACE_MAX_DURATION_MS` | `300000` | Maximum trace recording duration before automatic stop |
634
877
  | `CAMOFOX_HEALTH_PROBE_INTERVAL_MS` | `60000` | Health probe check interval |
635
878
  | `CAMOFOX_FAILURE_THRESHOLD` | `3` | Consecutive failures before health degradation |
636
879
  | `CAMOFOX_YT_DLP_TIMEOUT_MS` | `30000` | Timeout for yt-dlp subtitle extraction |
637
880
  | `CAMOFOX_YT_BROWSER_TIMEOUT_MS` | `25000` | Timeout for browser transcript fallback |
881
+ | `CAMOFOX_OS` | (unset) | Optional server-wide Camoufox OS override (`windows`, `macos`, `linux`, or comma-separated list for randomization) |
882
+ | `CAMOFOX_ALLOW_WEBGL` | (unset) | Optional server-wide WebGL override; malformed values fail startup |
883
+ | `CAMOFOX_SCREEN_WIDTH` | (unset) | Optional screen width override; applied only with `CAMOFOX_SCREEN_HEIGHT` |
884
+ | `CAMOFOX_SCREEN_HEIGHT` | (unset) | Optional screen height override; applied only with `CAMOFOX_SCREEN_WIDTH` |
885
+ | `CAMOFOX_HUMANIZE` | (unset) | Optional server-wide humanization override |
886
+
887
+ > `CAMOFOX_OS` and `CAMOFOX_SCREEN_*` are **generation-time** controls: they affect only newly generated fingerprints and have no effect while an existing `fingerprint.json` sidecar is in use. Reset the profile or delete `fingerprint.json` to force regeneration under the new defaults. `CAMOFOX_ALLOW_WEBGL` and `CAMOFOX_HUMANIZE` are **launch-time** overrides and apply on every browser launch regardless of whether a sidecar is reused.
888
+
889
+ ### Idle Lifecycle Policy
890
+
891
+ CamoFox implements a two-stage idle lifecycle for graceful cleanup and daemon exit:
892
+
893
+ **Stage 1 — Idle Cleanup**
894
+ - After `CAMOFOX_IDLE_TIMEOUT_MS` of idle time (default: 30 minutes), the server runs cleanup to close idle sessions and tabs
895
+ - Cleanup is delayed if browser contexts are launching or sessions are being created
896
+ - New interactive activity (tab creation, navigation, interaction) cancels any pending cleanup
897
+
898
+ **Stage 2 — Daemon Exit**
899
+ - After Stage 1 cleanup completes, the server waits for `CAMOFOX_IDLE_EXIT_TIMEOUT_MS` (default: matches Stage 1 timeout)
900
+ - If no new activity occurs during this quiet window, the daemon process exits gracefully
901
+ - Any new request activity cancels the pending exit timer
902
+
903
+ **Activity detection**:
904
+ - Live tabs, launching browser contexts, or staged session creation count as active work and prevent cleanup
905
+ - Empty sessions (sessions with no tabs) do not block cleanup but do disarm pending daemon exit
906
+ - New interactive activity resets both cleanup and exit timers
907
+
908
+ This two-stage model ensures cleanup runs before daemon exit, preventing resource leaks while allowing the server to shut down cleanly when fully idle.
638
909
 
639
910
  ## Deployment
640
911
 
@@ -644,7 +915,9 @@ Custom presets: set `CAMOFOX_PRESETS_FILE=/path/to/presets.json` (JSON object; k
644
915
  docker build -t camofox-browser .
645
916
  docker run -p 9377:9377 -p 6080:6080 \
646
917
  -v ~/.camofox:/home/node/.camofox \
918
+ -e CAMOFOX_HOST=0.0.0.0 \
647
919
  -e CAMOFOX_PORT=9377 \
920
+ -e CAMOFOX_API_KEY=change-me \
648
921
  camofox-browser
649
922
  ```
650
923
 
@@ -660,6 +933,8 @@ fly deploy
660
933
  ### Railway
661
934
 
662
935
  - Create a new project → deploy from this GitHub repo
936
+ - Set `CAMOFOX_HOST=0.0.0.0`
937
+ - Set `CAMOFOX_API_KEY` to a strong secret
663
938
  - Set `CAMOFOX_PORT=9377` (Railway will also provide `PORT`, which is supported)
664
939
  - Ensure the service exposes port `9377`
665
940
 
@@ -667,6 +942,8 @@ fly deploy
667
942
 
668
943
  - Create a new Web Service → deploy from this GitHub repo
669
944
  - Use Docker (recommended) and expose port `9377`
945
+ - Set `CAMOFOX_HOST=0.0.0.0`
946
+ - Set `CAMOFOX_API_KEY` to a strong secret
670
947
  - Set `CAMOFOX_PORT=9377` (or rely on Render `PORT`)
671
948
 
672
949
  ### System Requirements
@@ -747,4 +1024,3 @@ This project is based on [camofox-browser](https://github.com/jo-inc/camofox-bro
747
1024
  ## Crypto Scam Warning
748
1025
 
749
1026
  Sketchy people are doing sketchy things with crypto tokens named "Camofox" now that this project is getting attention. **Camofox is not a crypto project and will never be one.** Any token, coin, or NFT using the Camofox name has nothing to do with us.
750
-
@@ -1 +1 @@
1
- {"version":3,"file":"content.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/content.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAgE3C,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,GAAG,IAAI,CA0RnF"}
1
+ {"version":3,"file":"content.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/content.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAkF3C,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,GAAG,IAAI,CAoTnF"}
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.registerContentCommands = registerContentCommands;
4
+ const node_fs_1 = require("node:fs");
4
5
  const command_helpers_1 = require("../utils/command-helpers");
5
6
  const session_resolver_1 = require("../utils/session-resolver");
6
7
  const http_1 = require("../transport/http");
@@ -53,7 +54,43 @@ function toSearchUrl(engine, query) {
53
54
  return `https://www.google.com/search?q=${encoded}`;
54
55
  }
55
56
  }
57
+ function parseStructuredSchemaArg(input) {
58
+ let raw = input;
59
+ if (input.startsWith('@')) {
60
+ try {
61
+ raw = (0, node_fs_1.readFileSync)(input.slice(1), 'utf8');
62
+ }
63
+ catch (error) {
64
+ throw new Error(`Cannot load structured schema from file: ${error instanceof Error ? error.message : String(error)}`);
65
+ }
66
+ }
67
+ try {
68
+ return JSON.parse(raw);
69
+ }
70
+ catch (error) {
71
+ throw new Error(`Invalid structured schema JSON: ${error instanceof Error ? error.message : String(error)}`);
72
+ }
73
+ }
56
74
  function registerContentCommands(program, context) {
75
+ program
76
+ .command('extract-structured')
77
+ .argument('<schemaOrFile>', 'JSON schema string or @path/to/schema.json')
78
+ .argument('[tabId]', 'tab id (defaults to active tab)')
79
+ .option('--user <user>', 'user id')
80
+ .action(async (schemaOrFile, tabIdArg, options, command) => {
81
+ try {
82
+ const userId = (0, command_helpers_1.resolveCommandUser)({ command, user: options.user });
83
+ const tabId = (0, command_helpers_1.requireTabId)((0, session_resolver_1.resolveTabId)({ tabId: tabIdArg }), options);
84
+ const schema = parseStructuredSchemaArg(schemaOrFile);
85
+ const response = await context
86
+ .getTransport()
87
+ .post(`/tabs/${encodeURIComponent(tabId)}/extract-structured`, { userId, schema });
88
+ context.print(command, response.data);
89
+ }
90
+ catch (error) {
91
+ context.handleError(error);
92
+ }
93
+ });
57
94
  program
58
95
  .command('get-text')
59
96
  .argument('[tabId]', 'tab id (defaults to active tab)')
@@ -1 +1 @@
1
- {"version":3,"file":"content.js","sourceRoot":"","sources":["../../../../src/cli/commands/content.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"content.js","sourceRoot":"","sources":["../../../../src/cli/commands/content.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/core.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAW3C,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,GAAG,IAAI,CA8HhF"}
1
+ {"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/core.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAW3C,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,GAAG,IAAI,CAiJhF"}