camoufox-cli 0.5.0__tar.gz → 0.7.0__tar.gz

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 (116) hide show
  1. {camoufox_cli-0.5.0 → camoufox_cli-0.7.0}/PKG-INFO +24 -6
  2. {camoufox_cli-0.5.0 → camoufox_cli-0.7.0}/README.md +22 -4
  3. {camoufox_cli-0.5.0/.claude/worktrees/hungry-mclaren-0aa1c0 → camoufox_cli-0.7.0}/js/package-lock.json +130 -64
  4. {camoufox_cli-0.5.0/.claude/worktrees/hungry-mclaren-0aa1c0 → camoufox_cli-0.7.0}/js/package.json +3 -3
  5. camoufox_cli-0.7.0/js/src/browser.ts +371 -0
  6. {camoufox_cli-0.5.0 → camoufox_cli-0.7.0}/js/src/cli.ts +33 -18
  7. {camoufox_cli-0.5.0/.claude/worktrees/hungry-mclaren-0aa1c0 → camoufox_cli-0.7.0}/js/src/commands.ts +56 -44
  8. camoufox_cli-0.7.0/js/src/install.ts +126 -0
  9. camoufox_cli-0.7.0/js/src/server.ts +200 -0
  10. camoufox_cli-0.7.0/js/tests/browser.test.ts +98 -0
  11. {camoufox_cli-0.5.0 → camoufox_cli-0.7.0}/js/tests/cli.test.ts +16 -5
  12. {camoufox_cli-0.5.0 → camoufox_cli-0.7.0}/js/tests/commands.test.ts +1 -6
  13. {camoufox_cli-0.5.0/.claude/worktrees/hungry-mclaren-0aa1c0 → camoufox_cli-0.7.0}/js/tests/e2e.test.ts +83 -5
  14. camoufox_cli-0.7.0/js/tests/install.test.ts +153 -0
  15. {camoufox_cli-0.5.0 → camoufox_cli-0.7.0}/js/tests/server.test.ts +64 -0
  16. {camoufox_cli-0.5.0 → camoufox_cli-0.7.0}/pyproject.toml +2 -2
  17. {camoufox_cli-0.5.0 → camoufox_cli-0.7.0}/skills/camoufox-cli/SKILL.md +58 -24
  18. {camoufox_cli-0.5.0 → camoufox_cli-0.7.0}/skills/camoufox-cli/references/commands.md +12 -6
  19. camoufox_cli-0.7.0/src/camoufox_cli/browser.py +316 -0
  20. {camoufox_cli-0.5.0 → camoufox_cli-0.7.0}/src/camoufox_cli/cli.py +37 -22
  21. {camoufox_cli-0.5.0/.claude/worktrees/hungry-mclaren-0aa1c0 → camoufox_cli-0.7.0}/src/camoufox_cli/commands.py +59 -43
  22. camoufox_cli-0.7.0/src/camoufox_cli/install.py +127 -0
  23. {camoufox_cli-0.5.0/.claude/worktrees/hungry-mclaren-0aa1c0 → camoufox_cli-0.7.0}/src/camoufox_cli/server.py +68 -24
  24. {camoufox_cli-0.5.0 → camoufox_cli-0.7.0}/tests/test_cli.py +14 -4
  25. {camoufox_cli-0.5.0/.claude/worktrees/hungry-mclaren-0aa1c0 → camoufox_cli-0.7.0}/tests/test_commands.py +8 -8
  26. {camoufox_cli-0.5.0/.claude/worktrees/hungry-mclaren-0aa1c0 → camoufox_cli-0.7.0}/tests/test_e2e.py +90 -5
  27. camoufox_cli-0.7.0/tests/test_install.py +150 -0
  28. camoufox_cli-0.7.0/tests/test_server.py +101 -0
  29. camoufox_cli-0.5.0/.claude/worktrees/hungry-mclaren-0aa1c0/.claude-plugin/marketplace.json +0 -20
  30. camoufox_cli-0.5.0/.claude/worktrees/hungry-mclaren-0aa1c0/README.md +0 -226
  31. camoufox_cli-0.5.0/.claude/worktrees/hungry-mclaren-0aa1c0/js/src/browser.ts +0 -192
  32. camoufox_cli-0.5.0/.claude/worktrees/hungry-mclaren-0aa1c0/js/src/cli.ts +0 -491
  33. camoufox_cli-0.5.0/.claude/worktrees/hungry-mclaren-0aa1c0/js/src/server.ts +0 -131
  34. camoufox_cli-0.5.0/.claude/worktrees/hungry-mclaren-0aa1c0/js/tests/browser.test.ts +0 -61
  35. camoufox_cli-0.5.0/.claude/worktrees/hungry-mclaren-0aa1c0/js/tests/cli.test.ts +0 -300
  36. camoufox_cli-0.5.0/.claude/worktrees/hungry-mclaren-0aa1c0/js/tests/commands.test.ts +0 -194
  37. camoufox_cli-0.5.0/.claude/worktrees/hungry-mclaren-0aa1c0/js/tests/server.test.ts +0 -193
  38. camoufox_cli-0.5.0/.claude/worktrees/hungry-mclaren-0aa1c0/pyproject.toml +0 -46
  39. camoufox_cli-0.5.0/.claude/worktrees/hungry-mclaren-0aa1c0/skills/camoufox-cli/SKILL.md +0 -342
  40. camoufox_cli-0.5.0/.claude/worktrees/hungry-mclaren-0aa1c0/skills/camoufox-cli/references/commands.md +0 -132
  41. camoufox_cli-0.5.0/.claude/worktrees/hungry-mclaren-0aa1c0/src/camoufox_cli/browser.py +0 -190
  42. camoufox_cli-0.5.0/.claude/worktrees/hungry-mclaren-0aa1c0/src/camoufox_cli/cli.py +0 -500
  43. camoufox_cli-0.5.0/.claude/worktrees/hungry-mclaren-0aa1c0/tests/test_cli.py +0 -257
  44. camoufox_cli-0.5.0/.gitignore +0 -30
  45. camoufox_cli-0.5.0/LICENSE +0 -21
  46. camoufox_cli-0.5.0/Makefile +0 -30
  47. camoufox_cli-0.5.0/js/.gitignore +0 -2
  48. camoufox_cli-0.5.0/js/LICENSE +0 -21
  49. camoufox_cli-0.5.0/js/package-lock.json +0 -2719
  50. camoufox_cli-0.5.0/js/package.json +0 -47
  51. camoufox_cli-0.5.0/js/pnpm-lock.yaml +0 -1599
  52. camoufox_cli-0.5.0/js/scripts/postinstall.js +0 -11
  53. camoufox_cli-0.5.0/js/src/browser.ts +0 -192
  54. camoufox_cli-0.5.0/js/src/commands.ts +0 -352
  55. camoufox_cli-0.5.0/js/src/daemon.ts +0 -27
  56. camoufox_cli-0.5.0/js/src/identity.ts +0 -206
  57. camoufox_cli-0.5.0/js/src/protocol.ts +0 -32
  58. camoufox_cli-0.5.0/js/src/proxy.ts +0 -40
  59. camoufox_cli-0.5.0/js/src/refs.ts +0 -65
  60. camoufox_cli-0.5.0/js/src/server.ts +0 -131
  61. camoufox_cli-0.5.0/js/tests/browser.test.ts +0 -61
  62. camoufox_cli-0.5.0/js/tests/e2e.test.ts +0 -216
  63. camoufox_cli-0.5.0/js/tests/protocol.test.ts +0 -98
  64. camoufox_cli-0.5.0/js/tests/proxy.test.ts +0 -55
  65. camoufox_cli-0.5.0/js/tests/refs.test.ts +0 -150
  66. camoufox_cli-0.5.0/js/tsconfig.json +0 -14
  67. camoufox_cli-0.5.0/js/vitest.config.ts +0 -7
  68. camoufox_cli-0.5.0/skills/camoufox-cli/references/snapshot-refs.md +0 -221
  69. camoufox_cli-0.5.0/src/camoufox_cli/__init__.py +0 -0
  70. camoufox_cli-0.5.0/src/camoufox_cli/__main__.py +0 -38
  71. camoufox_cli-0.5.0/src/camoufox_cli/browser.py +0 -190
  72. camoufox_cli-0.5.0/src/camoufox_cli/commands.py +0 -390
  73. camoufox_cli-0.5.0/src/camoufox_cli/identity.py +0 -215
  74. camoufox_cli-0.5.0/src/camoufox_cli/protocol.py +0 -24
  75. camoufox_cli-0.5.0/src/camoufox_cli/proxy.py +0 -30
  76. camoufox_cli-0.5.0/src/camoufox_cli/refs.py +0 -83
  77. camoufox_cli-0.5.0/src/camoufox_cli/server.py +0 -145
  78. camoufox_cli-0.5.0/tests/__init__.py +0 -0
  79. camoufox_cli-0.5.0/tests/fixture.html +0 -22
  80. camoufox_cli-0.5.0/tests/test_commands.py +0 -556
  81. camoufox_cli-0.5.0/tests/test_e2e.py +0 -217
  82. camoufox_cli-0.5.0/tests/test_protocol.py +0 -63
  83. camoufox_cli-0.5.0/tests/test_proxy.py +0 -37
  84. camoufox_cli-0.5.0/tests/test_refs.py +0 -112
  85. {camoufox_cli-0.5.0 → camoufox_cli-0.7.0}/.claude-plugin/marketplace.json +0 -0
  86. {camoufox_cli-0.5.0/.claude/worktrees/hungry-mclaren-0aa1c0 → camoufox_cli-0.7.0}/.gitignore +0 -0
  87. {camoufox_cli-0.5.0/.claude/worktrees/hungry-mclaren-0aa1c0 → camoufox_cli-0.7.0}/LICENSE +0 -0
  88. {camoufox_cli-0.5.0/.claude/worktrees/hungry-mclaren-0aa1c0 → camoufox_cli-0.7.0}/Makefile +0 -0
  89. {camoufox_cli-0.5.0/.claude/worktrees/hungry-mclaren-0aa1c0 → camoufox_cli-0.7.0}/js/.gitignore +0 -0
  90. {camoufox_cli-0.5.0/.claude/worktrees/hungry-mclaren-0aa1c0 → camoufox_cli-0.7.0}/js/LICENSE +0 -0
  91. {camoufox_cli-0.5.0/.claude/worktrees/hungry-mclaren-0aa1c0 → camoufox_cli-0.7.0}/js/pnpm-lock.yaml +0 -0
  92. {camoufox_cli-0.5.0/.claude/worktrees/hungry-mclaren-0aa1c0 → camoufox_cli-0.7.0}/js/scripts/postinstall.js +0 -0
  93. {camoufox_cli-0.5.0 → camoufox_cli-0.7.0}/js/src/config.ts +0 -0
  94. {camoufox_cli-0.5.0/.claude/worktrees/hungry-mclaren-0aa1c0 → camoufox_cli-0.7.0}/js/src/daemon.ts +0 -0
  95. {camoufox_cli-0.5.0/.claude/worktrees/hungry-mclaren-0aa1c0 → camoufox_cli-0.7.0}/js/src/identity.ts +0 -0
  96. {camoufox_cli-0.5.0/.claude/worktrees/hungry-mclaren-0aa1c0 → camoufox_cli-0.7.0}/js/src/protocol.ts +0 -0
  97. {camoufox_cli-0.5.0/.claude/worktrees/hungry-mclaren-0aa1c0 → camoufox_cli-0.7.0}/js/src/proxy.ts +0 -0
  98. {camoufox_cli-0.5.0/.claude/worktrees/hungry-mclaren-0aa1c0 → camoufox_cli-0.7.0}/js/src/refs.ts +0 -0
  99. {camoufox_cli-0.5.0/.claude/worktrees/hungry-mclaren-0aa1c0 → camoufox_cli-0.7.0}/js/tests/protocol.test.ts +0 -0
  100. {camoufox_cli-0.5.0/.claude/worktrees/hungry-mclaren-0aa1c0 → camoufox_cli-0.7.0}/js/tests/proxy.test.ts +0 -0
  101. {camoufox_cli-0.5.0/.claude/worktrees/hungry-mclaren-0aa1c0 → camoufox_cli-0.7.0}/js/tests/refs.test.ts +0 -0
  102. {camoufox_cli-0.5.0/.claude/worktrees/hungry-mclaren-0aa1c0 → camoufox_cli-0.7.0}/js/tsconfig.json +0 -0
  103. {camoufox_cli-0.5.0/.claude/worktrees/hungry-mclaren-0aa1c0 → camoufox_cli-0.7.0}/js/vitest.config.ts +0 -0
  104. {camoufox_cli-0.5.0/.claude/worktrees/hungry-mclaren-0aa1c0 → camoufox_cli-0.7.0}/skills/camoufox-cli/references/snapshot-refs.md +0 -0
  105. {camoufox_cli-0.5.0/.claude/worktrees/hungry-mclaren-0aa1c0 → camoufox_cli-0.7.0}/src/camoufox_cli/__init__.py +0 -0
  106. {camoufox_cli-0.5.0/.claude/worktrees/hungry-mclaren-0aa1c0 → camoufox_cli-0.7.0}/src/camoufox_cli/__main__.py +0 -0
  107. {camoufox_cli-0.5.0 → camoufox_cli-0.7.0}/src/camoufox_cli/config.py +0 -0
  108. {camoufox_cli-0.5.0/.claude/worktrees/hungry-mclaren-0aa1c0 → camoufox_cli-0.7.0}/src/camoufox_cli/identity.py +0 -0
  109. {camoufox_cli-0.5.0/.claude/worktrees/hungry-mclaren-0aa1c0 → camoufox_cli-0.7.0}/src/camoufox_cli/protocol.py +0 -0
  110. {camoufox_cli-0.5.0/.claude/worktrees/hungry-mclaren-0aa1c0 → camoufox_cli-0.7.0}/src/camoufox_cli/proxy.py +0 -0
  111. {camoufox_cli-0.5.0/.claude/worktrees/hungry-mclaren-0aa1c0 → camoufox_cli-0.7.0}/src/camoufox_cli/refs.py +0 -0
  112. {camoufox_cli-0.5.0/.claude/worktrees/hungry-mclaren-0aa1c0 → camoufox_cli-0.7.0}/tests/__init__.py +0 -0
  113. {camoufox_cli-0.5.0/.claude/worktrees/hungry-mclaren-0aa1c0 → camoufox_cli-0.7.0}/tests/fixture.html +0 -0
  114. {camoufox_cli-0.5.0/.claude/worktrees/hungry-mclaren-0aa1c0 → camoufox_cli-0.7.0}/tests/test_protocol.py +0 -0
  115. {camoufox_cli-0.5.0/.claude/worktrees/hungry-mclaren-0aa1c0 → camoufox_cli-0.7.0}/tests/test_proxy.py +0 -0
  116. {camoufox_cli-0.5.0/.claude/worktrees/hungry-mclaren-0aa1c0 → camoufox_cli-0.7.0}/tests/test_refs.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: camoufox-cli
3
- Version: 0.5.0
3
+ Version: 0.7.0
4
4
  Summary: Anti-detect browser CLI & Skills for AI agents, powered by Camoufox
5
5
  Project-URL: Homepage, https://github.com/Bin-Huang/camoufox-cli
6
6
  Project-URL: Repository, https://github.com/Bin-Huang/camoufox-cli
@@ -17,7 +17,7 @@ Classifier: Topic :: Software Development :: Testing
17
17
  Requires-Python: >=3.10
18
18
  Requires-Dist: camoufox[geoip]
19
19
  Requires-Dist: pillow
20
- Requires-Dist: playwright
20
+ Requires-Dist: playwright==1.52.0
21
21
  Description-Content-Type: text/markdown
22
22
 
23
23
  # camoufox-cli
@@ -62,6 +62,10 @@ On Linux, install system dependencies with:
62
62
  camoufox-cli install --with-deps
63
63
  ```
64
64
 
65
+ The browser is downloaded from GitHub releases. If the anonymous GitHub API
66
+ rate limit is exhausted (common on shared server/CI IPs), the installer
67
+ automatically falls back to scraping github.com release pages.
68
+
65
69
  ### Agent Skill
66
70
 
67
71
  ```bash
@@ -90,7 +94,7 @@ camoufox-cli forward # Go forward
90
94
  camoufox-cli reload # Reload page
91
95
  camoufox-cli url # Print current URL
92
96
  camoufox-cli title # Print page title
93
- camoufox-cli close # Close browser and stop daemon
97
+ camoufox-cli close # Close your tab (browser exits when the last tab closes)
94
98
  ```
95
99
 
96
100
  ### Snapshot
@@ -146,17 +150,29 @@ camoufox-cli wait --url "*/dashboard" # Wait for URL pattern
146
150
  ### Tabs
147
151
 
148
152
  ```bash
149
- camoufox-cli tabs # List open tabs
153
+ camoufox-cli tabs # List open tabs (with owner names)
150
154
  camoufox-cli switch 2 # Switch to tab by index
151
- camoufox-cli close-tab # Close current tab
152
155
  ```
153
156
 
157
+ Named tabs let concurrent agents share one browser — same fingerprint, same cookies/login state — while each keeps its own page, element refs, and history. Tabs share one browser process (commands from different tabs may queue behind a slow one); separate sessions run as independent processes in parallel:
158
+
159
+ ```bash
160
+ camoufox-cli --tab inbox-scan-x4q open https://app.example.com/a
161
+ camoufox-cli --tab report-pull-9kf open https://app.example.com/b
162
+ camoufox-cli --tab inbox-scan-x4q snapshot -i # refs are per tab
163
+ camoufox-cli --tab inbox-scan-x4q close # frees only this tab; browser exits when the last tab closes
164
+ ```
165
+
166
+ Tab names must be unique per agent (nothing enforces this): use a task slug plus a short shell-generated random suffix (e.g. `price-scan-$(openssl rand -hex 2)`), chosen once and reused.
167
+
154
168
  ### Sessions
155
169
 
170
+ Each named session is a separate browser process with its own randomly-generated fingerprint and its own cookies. Use sessions for isolated identities, named tabs (above) for cheap parallelism under one identity. For real multi-account isolation, combine sessions with a per-session proxy (config file) and `--persistent` — see Persistent Identity below:
171
+
156
172
  ```bash
157
173
  camoufox-cli sessions # List active sessions
158
174
  camoufox-cli --session work open <url> # Use named session
159
- camoufox-cli close --all # Close all sessions
175
+ camoufox-cli close --all # Force-close all sessions
160
176
  ```
161
177
 
162
178
  ### Cookies
@@ -171,6 +187,8 @@ camoufox-cli cookies export file.json # Export cookies
171
187
 
172
188
  ```
173
189
  --session <name> Named session (default: "default")
190
+ --tab <name> Named tab within the session's shared browser: same fingerprint and
191
+ cookies/login, independent page/refs/history (default: "default")
174
192
  --headed Show browser window (default: headless)
175
193
  --timeout <seconds> Daemon idle timeout (default: 1800)
176
194
  --json Output as JSON
@@ -40,6 +40,10 @@ On Linux, install system dependencies with:
40
40
  camoufox-cli install --with-deps
41
41
  ```
42
42
 
43
+ The browser is downloaded from GitHub releases. If the anonymous GitHub API
44
+ rate limit is exhausted (common on shared server/CI IPs), the installer
45
+ automatically falls back to scraping github.com release pages.
46
+
43
47
  ### Agent Skill
44
48
 
45
49
  ```bash
@@ -68,7 +72,7 @@ camoufox-cli forward # Go forward
68
72
  camoufox-cli reload # Reload page
69
73
  camoufox-cli url # Print current URL
70
74
  camoufox-cli title # Print page title
71
- camoufox-cli close # Close browser and stop daemon
75
+ camoufox-cli close # Close your tab (browser exits when the last tab closes)
72
76
  ```
73
77
 
74
78
  ### Snapshot
@@ -124,17 +128,29 @@ camoufox-cli wait --url "*/dashboard" # Wait for URL pattern
124
128
  ### Tabs
125
129
 
126
130
  ```bash
127
- camoufox-cli tabs # List open tabs
131
+ camoufox-cli tabs # List open tabs (with owner names)
128
132
  camoufox-cli switch 2 # Switch to tab by index
129
- camoufox-cli close-tab # Close current tab
130
133
  ```
131
134
 
135
+ Named tabs let concurrent agents share one browser — same fingerprint, same cookies/login state — while each keeps its own page, element refs, and history. Tabs share one browser process (commands from different tabs may queue behind a slow one); separate sessions run as independent processes in parallel:
136
+
137
+ ```bash
138
+ camoufox-cli --tab inbox-scan-x4q open https://app.example.com/a
139
+ camoufox-cli --tab report-pull-9kf open https://app.example.com/b
140
+ camoufox-cli --tab inbox-scan-x4q snapshot -i # refs are per tab
141
+ camoufox-cli --tab inbox-scan-x4q close # frees only this tab; browser exits when the last tab closes
142
+ ```
143
+
144
+ Tab names must be unique per agent (nothing enforces this): use a task slug plus a short shell-generated random suffix (e.g. `price-scan-$(openssl rand -hex 2)`), chosen once and reused.
145
+
132
146
  ### Sessions
133
147
 
148
+ Each named session is a separate browser process with its own randomly-generated fingerprint and its own cookies. Use sessions for isolated identities, named tabs (above) for cheap parallelism under one identity. For real multi-account isolation, combine sessions with a per-session proxy (config file) and `--persistent` — see Persistent Identity below:
149
+
134
150
  ```bash
135
151
  camoufox-cli sessions # List active sessions
136
152
  camoufox-cli --session work open <url> # Use named session
137
- camoufox-cli close --all # Close all sessions
153
+ camoufox-cli close --all # Force-close all sessions
138
154
  ```
139
155
 
140
156
  ### Cookies
@@ -149,6 +165,8 @@ camoufox-cli cookies export file.json # Export cookies
149
165
 
150
166
  ```
151
167
  --session <name> Named session (default: "default")
168
+ --tab <name> Named tab within the session's shared browser: same fingerprint and
169
+ cookies/login, independent page/refs/history (default: "default")
152
170
  --headed Show browser window (default: headless)
153
171
  --timeout <seconds> Daemon idle timeout (default: 1800)
154
172
  --json Output as JSON
@@ -1,18 +1,18 @@
1
1
  {
2
2
  "name": "camoufox-cli",
3
- "version": "0.1.7",
3
+ "version": "0.7.0",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "camoufox-cli",
9
- "version": "0.1.7",
9
+ "version": "0.7.0",
10
10
  "hasInstallScript": true,
11
11
  "license": "MIT",
12
12
  "dependencies": {
13
- "camoufox-js": "^0.8.5",
13
+ "camoufox-js": "^0.11.1",
14
14
  "pdf-lib": "^1.17.1",
15
- "playwright-core": "^1.52.0"
15
+ "playwright-core": "1.52.0"
16
16
  },
17
17
  "bin": {
18
18
  "camoufox-cli": "dist/cli.js"
@@ -1017,6 +1017,15 @@
1017
1017
  "node": ">=12.0"
1018
1018
  }
1019
1019
  },
1020
+ "node_modules/ansi-regex": {
1021
+ "version": "5.0.1",
1022
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
1023
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
1024
+ "license": "MIT",
1025
+ "engines": {
1026
+ "node": ">=8"
1027
+ }
1028
+ },
1020
1029
  "node_modules/assertion-error": {
1021
1030
  "version": "2.0.1",
1022
1031
  "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz",
@@ -1069,9 +1078,9 @@
1069
1078
  }
1070
1079
  },
1071
1080
  "node_modules/better-sqlite3": {
1072
- "version": "12.6.2",
1073
- "resolved": "https://registry.npmjs.org/better-sqlite3/-/better-sqlite3-12.6.2.tgz",
1074
- "integrity": "sha512-8VYKM3MjCa9WcaSAI3hzwhmyHVlH8tiGFwf0RlTsZPWJ1I5MkzjiudCo4KC4DxOaL/53A5B1sI/IbldNFDbsKA==",
1081
+ "version": "12.11.1",
1082
+ "resolved": "https://registry.npmjs.org/better-sqlite3/-/better-sqlite3-12.11.1.tgz",
1083
+ "integrity": "sha512-dq9AtApgg5PGFtBzPFSBl3HZQjHok5gaQCM6zh2Yk0aSmDCs1CbnVI8/HgASQkNKsWFpseIO9beg5xxpYhbIfA==",
1075
1084
  "hasInstallScript": true,
1076
1085
  "license": "MIT",
1077
1086
  "dependencies": {
@@ -1079,7 +1088,7 @@
1079
1088
  "prebuild-install": "^7.1.1"
1080
1089
  },
1081
1090
  "engines": {
1082
- "node": "20.x || 22.x || 23.x || 24.x || 25.x"
1091
+ "node": "20.x || 22.x || 23.x || 24.x || 25.x || 26.x"
1083
1092
  }
1084
1093
  },
1085
1094
  "node_modules/bindings": {
@@ -1181,20 +1190,21 @@
1181
1190
  }
1182
1191
  },
1183
1192
  "node_modules/camoufox-js": {
1184
- "version": "0.8.5",
1185
- "resolved": "https://registry.npmjs.org/camoufox-js/-/camoufox-js-0.8.5.tgz",
1186
- "integrity": "sha512-20ihPbspAcOVSUTX9Drxxp0C116DON1n8OVA1eUDglWZiHwiHwFVFOMrIEBwAHMZpU11mIEH/kawJtstRIrDPA==",
1193
+ "version": "0.11.1",
1194
+ "resolved": "https://registry.npmjs.org/camoufox-js/-/camoufox-js-0.11.1.tgz",
1195
+ "integrity": "sha512-/tSgFAgjcbxudXFLd+u5VARZHOK9fm5bg1QRAP/2NySdaq6Vf7UTk2aMEUqaXAfnV7ncf4y87KjIFVpWVbZ+RQ==",
1187
1196
  "license": "MPL-2.0",
1188
1197
  "dependencies": {
1189
1198
  "adm-zip": "^0.5.16",
1190
- "better-sqlite3": "^12.2.0",
1199
+ "better-sqlite3": "^12.10.0",
1200
+ "cli-progress": "^3.12.0",
1191
1201
  "commander": "^14.0.0",
1192
1202
  "fingerprint-generator": "^2.1.66",
1193
1203
  "glob": "^13.0.0",
1194
- "impit": "^0.7.0",
1204
+ "impit": "^0.14.1",
1195
1205
  "language-tags": "^2.0.1",
1196
1206
  "maxmind": "^5.0.0",
1197
- "progress": "^2.0.3",
1207
+ "pretty-bytes": "^7.1.0",
1198
1208
  "ua-parser-js": "^2.0.2",
1199
1209
  "xml2js": "^0.6.2"
1200
1210
  },
@@ -1202,7 +1212,7 @@
1202
1212
  "camoufox-js": "dist/__main__.js"
1203
1213
  },
1204
1214
  "engines": {
1205
- "node": ">= 20"
1215
+ "node": ">= 22"
1206
1216
  },
1207
1217
  "peerDependencies": {
1208
1218
  "playwright-core": "*"
@@ -1244,6 +1254,18 @@
1244
1254
  "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==",
1245
1255
  "license": "ISC"
1246
1256
  },
1257
+ "node_modules/cli-progress": {
1258
+ "version": "3.12.0",
1259
+ "resolved": "https://registry.npmjs.org/cli-progress/-/cli-progress-3.12.0.tgz",
1260
+ "integrity": "sha512-tRkV3HJ1ASwm19THiiLIXLO7Im7wlTuKnvkYaTkyoAPefqjNg7W7DHKUlGRxy9vxDvbyCYQkQozvptuMkGCg8A==",
1261
+ "license": "MIT",
1262
+ "dependencies": {
1263
+ "string-width": "^4.2.3"
1264
+ },
1265
+ "engines": {
1266
+ "node": ">=4"
1267
+ }
1268
+ },
1247
1269
  "node_modules/commander": {
1248
1270
  "version": "14.0.3",
1249
1271
  "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.3.tgz",
@@ -1327,6 +1349,12 @@
1327
1349
  "integrity": "sha512-5z3uFKBWjiNR44nFcYdkcXjKMbg5KXNdciu7mhTPo9tB7NbqSNP2sSnGR+fqknZSCwKkBN+oxiiajWs4dT6ORg==",
1328
1350
  "license": "ISC"
1329
1351
  },
1352
+ "node_modules/emoji-regex": {
1353
+ "version": "8.0.0",
1354
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
1355
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
1356
+ "license": "MIT"
1357
+ },
1330
1358
  "node_modules/end-of-stream": {
1331
1359
  "version": "1.4.5",
1332
1360
  "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz",
@@ -1551,28 +1579,28 @@
1551
1579
  "license": "BSD-3-Clause"
1552
1580
  },
1553
1581
  "node_modules/impit": {
1554
- "version": "0.7.6",
1555
- "resolved": "https://registry.npmjs.org/impit/-/impit-0.7.6.tgz",
1556
- "integrity": "sha512-AkS6Gv63+E6GMvBrcRhMmOREKpq5oJ0J5m3xwfkHiEs97UIsbpEqFmW3sFw/sdyOTDGRF5q4EjaLxtb922Ta8g==",
1582
+ "version": "0.14.1",
1583
+ "resolved": "https://registry.npmjs.org/impit/-/impit-0.14.1.tgz",
1584
+ "integrity": "sha512-ooFuGjrJzV16S5y4t7ICpfaAapNRrrUCv3cd5xIPKUqbbgKtx7CbVB+w+YRDMntoHwjuZ9ijI2AM8hMKISbvcw==",
1557
1585
  "license": "Apache-2.0",
1558
1586
  "engines": {
1559
1587
  "node": ">= 20"
1560
1588
  },
1561
1589
  "optionalDependencies": {
1562
- "impit-darwin-arm64": "0.7.6",
1563
- "impit-darwin-x64": "0.7.6",
1564
- "impit-linux-arm64-gnu": "0.7.6",
1565
- "impit-linux-arm64-musl": "0.7.6",
1566
- "impit-linux-x64-gnu": "0.7.6",
1567
- "impit-linux-x64-musl": "0.7.6",
1568
- "impit-win32-arm64-msvc": "0.7.6",
1569
- "impit-win32-x64-msvc": "0.7.6"
1590
+ "impit-darwin-arm64": "0.14.1",
1591
+ "impit-darwin-x64": "0.14.1",
1592
+ "impit-linux-arm64-gnu": "0.14.1",
1593
+ "impit-linux-arm64-musl": "0.14.1",
1594
+ "impit-linux-x64-gnu": "0.14.1",
1595
+ "impit-linux-x64-musl": "0.14.1",
1596
+ "impit-win32-arm64-msvc": "0.14.1",
1597
+ "impit-win32-x64-msvc": "0.14.1"
1570
1598
  }
1571
1599
  },
1572
1600
  "node_modules/impit-darwin-arm64": {
1573
- "version": "0.7.6",
1574
- "resolved": "https://registry.npmjs.org/impit-darwin-arm64/-/impit-darwin-arm64-0.7.6.tgz",
1575
- "integrity": "sha512-M7NQXkttyzqilWfzVkNCp7hApT69m0etyJkVpHze4bR5z1kJnHhdsb8BSdDv2dzvZL4u1JyqZNxq+qoMn84eUw==",
1601
+ "version": "0.14.1",
1602
+ "resolved": "https://registry.npmjs.org/impit-darwin-arm64/-/impit-darwin-arm64-0.14.1.tgz",
1603
+ "integrity": "sha512-K3KXto3gzR60kOFFxRmuxPNl3sPhdTLLpjBIW3RKD6vJFiGV5YH/T218WBECygPxRaIhESfsxfcOYrP53bHgFw==",
1576
1604
  "cpu": [
1577
1605
  "arm64"
1578
1606
  ],
@@ -1586,9 +1614,9 @@
1586
1614
  }
1587
1615
  },
1588
1616
  "node_modules/impit-darwin-x64": {
1589
- "version": "0.7.6",
1590
- "resolved": "https://registry.npmjs.org/impit-darwin-x64/-/impit-darwin-x64-0.7.6.tgz",
1591
- "integrity": "sha512-kikTesWirAwJp9JPxzGLoGVc+heBlEabWS5AhTkQedACU153vmuL90OBQikVr3ul2N0LPImvnuB+51wV0zDE6g==",
1617
+ "version": "0.14.1",
1618
+ "resolved": "https://registry.npmjs.org/impit-darwin-x64/-/impit-darwin-x64-0.14.1.tgz",
1619
+ "integrity": "sha512-k+w8SBHUtLX3KbzsCqSmcwitHfbOXXsLryL++KVahtFqU5D93T1buoTANnd63/mm5dNyadecIGG0MQ7SwvWx8g==",
1592
1620
  "cpu": [
1593
1621
  "x64"
1594
1622
  ],
@@ -1602,9 +1630,9 @@
1602
1630
  }
1603
1631
  },
1604
1632
  "node_modules/impit-linux-arm64-gnu": {
1605
- "version": "0.7.6",
1606
- "resolved": "https://registry.npmjs.org/impit-linux-arm64-gnu/-/impit-linux-arm64-gnu-0.7.6.tgz",
1607
- "integrity": "sha512-H6GHjVr/0lG9VEJr6IHF8YLq+YkSIOF4k7Dfue2ygzUAj1+jZ5ZwnouhG/XrZHYW6EWsZmEAjjRfWE56Q0wDRQ==",
1633
+ "version": "0.14.1",
1634
+ "resolved": "https://registry.npmjs.org/impit-linux-arm64-gnu/-/impit-linux-arm64-gnu-0.14.1.tgz",
1635
+ "integrity": "sha512-yBT7h6cVHL/hefzI/qjJc22fKP386O0inReOpUzCnb4SGnwhEHvL9nJk3OzU2prO9vvKNKSb6vfRBcvQ8HHH1g==",
1608
1636
  "cpu": [
1609
1637
  "arm64"
1610
1638
  ],
@@ -1618,9 +1646,9 @@
1618
1646
  }
1619
1647
  },
1620
1648
  "node_modules/impit-linux-arm64-musl": {
1621
- "version": "0.7.6",
1622
- "resolved": "https://registry.npmjs.org/impit-linux-arm64-musl/-/impit-linux-arm64-musl-0.7.6.tgz",
1623
- "integrity": "sha512-1sCB/UBVXLZTpGJsXRdNNSvhN9xmmQcYLMWAAB4Itb7w684RHX1pLoCb6ichv7bfAf6tgaupcFIFZNBp3ghmQA==",
1649
+ "version": "0.14.1",
1650
+ "resolved": "https://registry.npmjs.org/impit-linux-arm64-musl/-/impit-linux-arm64-musl-0.14.1.tgz",
1651
+ "integrity": "sha512-lFatihYntVIN814AnoNm/hSw5iONLKt6XtaAaJahZNdJOU+zsclcg9pbK0/61aENamkpIBpok/H8j5Sw/Xjuuw==",
1624
1652
  "cpu": [
1625
1653
  "arm64"
1626
1654
  ],
@@ -1634,9 +1662,9 @@
1634
1662
  }
1635
1663
  },
1636
1664
  "node_modules/impit-linux-x64-gnu": {
1637
- "version": "0.7.6",
1638
- "resolved": "https://registry.npmjs.org/impit-linux-x64-gnu/-/impit-linux-x64-gnu-0.7.6.tgz",
1639
- "integrity": "sha512-yYhlRnZ4fhKt8kuGe0JK2WSHc8TkR6BEH0wn+guevmu8EOn9Xu43OuRvkeOyVAkRqvFnlZtMyySUo/GuSLz9Gw==",
1665
+ "version": "0.14.1",
1666
+ "resolved": "https://registry.npmjs.org/impit-linux-x64-gnu/-/impit-linux-x64-gnu-0.14.1.tgz",
1667
+ "integrity": "sha512-oioVQzHqSi68BzxRpVLbNv9HRgOxAA21QNlzCMyeEM3/c02MkURCQ1W66yAlEFOR1gaqPZDJi/ymnmIGk6+PjQ==",
1640
1668
  "cpu": [
1641
1669
  "x64"
1642
1670
  ],
@@ -1650,9 +1678,9 @@
1650
1678
  }
1651
1679
  },
1652
1680
  "node_modules/impit-linux-x64-musl": {
1653
- "version": "0.7.6",
1654
- "resolved": "https://registry.npmjs.org/impit-linux-x64-musl/-/impit-linux-x64-musl-0.7.6.tgz",
1655
- "integrity": "sha512-sdGWyu+PCLmaOXy7Mzo4WP61ZLl5qpZ1L+VeXW+Ycazgu0e7ox0NZLdiLRunIrEzD+h0S+e4CyzNwaiP3yIolg==",
1681
+ "version": "0.14.1",
1682
+ "resolved": "https://registry.npmjs.org/impit-linux-x64-musl/-/impit-linux-x64-musl-0.14.1.tgz",
1683
+ "integrity": "sha512-v7fBi405zZepQo0LqH51H+aXc/MYEtrQviIK+34kEqFBYOaSC9+wFZrs6A4WwrF9DaUuRZ3klisljwglN7rxDQ==",
1656
1684
  "cpu": [
1657
1685
  "x64"
1658
1686
  ],
@@ -1666,9 +1694,9 @@
1666
1694
  }
1667
1695
  },
1668
1696
  "node_modules/impit-win32-arm64-msvc": {
1669
- "version": "0.7.6",
1670
- "resolved": "https://registry.npmjs.org/impit-win32-arm64-msvc/-/impit-win32-arm64-msvc-0.7.6.tgz",
1671
- "integrity": "sha512-sM5deBqo0EuXg5GACBUMKEua9jIau/i34bwNlfrf/Amnw1n0GB4/RkuUh+sKiUcbNAntrRq+YhCq8qDP8IW19w==",
1697
+ "version": "0.14.1",
1698
+ "resolved": "https://registry.npmjs.org/impit-win32-arm64-msvc/-/impit-win32-arm64-msvc-0.14.1.tgz",
1699
+ "integrity": "sha512-W4kPvvra8dXDdtJQbkxWPCCouUlZpOrLqHsJ7gc8CwAr69ljZqw6v+qB395nCD1rn3u32dV4d4fjBsyMdolQoA==",
1672
1700
  "cpu": [
1673
1701
  "arm64"
1674
1702
  ],
@@ -1682,9 +1710,9 @@
1682
1710
  }
1683
1711
  },
1684
1712
  "node_modules/impit-win32-x64-msvc": {
1685
- "version": "0.7.6",
1686
- "resolved": "https://registry.npmjs.org/impit-win32-x64-msvc/-/impit-win32-x64-msvc-0.7.6.tgz",
1687
- "integrity": "sha512-ry63ADGLCB/PU/vNB1VioRt2V+klDJ34frJUXUZBEv1kA96HEAg9AxUk+604o+UHS3ttGH2rkLmrbwHOdAct5Q==",
1713
+ "version": "0.14.1",
1714
+ "resolved": "https://registry.npmjs.org/impit-win32-x64-msvc/-/impit-win32-x64-msvc-0.14.1.tgz",
1715
+ "integrity": "sha512-gwzWsaORyzq294t8CCxfHAmqulnQNQZK8ad8YM6oQaGVXeUFa8r/ZnR+PglfYcrYF/GbYwGrf9U8StUU8KFLmQ==",
1688
1716
  "cpu": [
1689
1717
  "x64"
1690
1718
  ],
@@ -1709,6 +1737,15 @@
1709
1737
  "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
1710
1738
  "license": "ISC"
1711
1739
  },
1740
+ "node_modules/is-fullwidth-code-point": {
1741
+ "version": "3.0.0",
1742
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
1743
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
1744
+ "license": "MIT",
1745
+ "engines": {
1746
+ "node": ">=8"
1747
+ }
1748
+ },
1712
1749
  "node_modules/is-obj": {
1713
1750
  "version": "2.0.0",
1714
1751
  "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz",
@@ -1883,9 +1920,9 @@
1883
1920
  "license": "MIT"
1884
1921
  },
1885
1922
  "node_modules/node-abi": {
1886
- "version": "3.87.0",
1887
- "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.87.0.tgz",
1888
- "integrity": "sha512-+CGM1L1CgmtheLcBuleyYOn7NWPVu0s0EJH2C4puxgEZb9h8QpR9G2dBfZJOAUhi7VQxuBPMd0hiISWcTyiYyQ==",
1923
+ "version": "3.92.0",
1924
+ "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.92.0.tgz",
1925
+ "integrity": "sha512-KdHvFWZjEKDf0cakgFjebl371GPsISX2oZHcuyKqM7DtogIsHrqKeLTo8wBHxaXRAQlY2PsPlZmfo+9ZCxEREQ==",
1889
1926
  "license": "MIT",
1890
1927
  "dependencies": {
1891
1928
  "semver": "^7.3.5"
@@ -2006,9 +2043,9 @@
2006
2043
  }
2007
2044
  },
2008
2045
  "node_modules/playwright-core": {
2009
- "version": "1.58.2",
2010
- "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.58.2.tgz",
2011
- "integrity": "sha512-yZkEtftgwS8CsfYo7nm0KE8jsvm6i/PTgVtB8DL726wNf6H2IMsDuxCpJj59KDaxCtSnrWan2AeDqM7JBaultg==",
2046
+ "version": "1.52.0",
2047
+ "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.52.0.tgz",
2048
+ "integrity": "sha512-l2osTgLXSMeuLZOML9qYODUQoPPnUsKsb5/P6LJ2e6uPKXUdPK5WYhN4z03G+YNbWmGDY4YENauNu4ZKczreHg==",
2012
2049
  "license": "Apache-2.0",
2013
2050
  "bin": {
2014
2051
  "playwright-core": "cli.js"
@@ -2073,13 +2110,16 @@
2073
2110
  "node": ">=10"
2074
2111
  }
2075
2112
  },
2076
- "node_modules/progress": {
2077
- "version": "2.0.3",
2078
- "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
2079
- "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
2113
+ "node_modules/pretty-bytes": {
2114
+ "version": "7.1.0",
2115
+ "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-7.1.0.tgz",
2116
+ "integrity": "sha512-nODzvTiYVRGRqAOvE84Vk5JDPyyxsVk0/fbA/bq7RqlnhksGpset09XTxbpvLTIjoaF7K8Z8DG8yHtKGTPSYRw==",
2080
2117
  "license": "MIT",
2081
2118
  "engines": {
2082
- "node": ">=0.4.0"
2119
+ "node": ">=20"
2120
+ },
2121
+ "funding": {
2122
+ "url": "https://github.com/sponsors/sindresorhus"
2083
2123
  }
2084
2124
  },
2085
2125
  "node_modules/pump": {
@@ -2196,9 +2236,9 @@
2196
2236
  }
2197
2237
  },
2198
2238
  "node_modules/semver": {
2199
- "version": "7.7.4",
2200
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz",
2201
- "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==",
2239
+ "version": "7.8.4",
2240
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.4.tgz",
2241
+ "integrity": "sha512-rUCObTnP32Q08R2uuIrt7r9PlEonuTmtuXYcW6s5kjdlj3xbnwe+21yXptAUYcMAABLkYYTtnmzb3w3EDZfueA==",
2202
2242
  "license": "ISC",
2203
2243
  "bin": {
2204
2244
  "semver": "bin/semver.js"
@@ -2292,6 +2332,32 @@
2292
2332
  "safe-buffer": "~5.2.0"
2293
2333
  }
2294
2334
  },
2335
+ "node_modules/string-width": {
2336
+ "version": "4.2.3",
2337
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
2338
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
2339
+ "license": "MIT",
2340
+ "dependencies": {
2341
+ "emoji-regex": "^8.0.0",
2342
+ "is-fullwidth-code-point": "^3.0.0",
2343
+ "strip-ansi": "^6.0.1"
2344
+ },
2345
+ "engines": {
2346
+ "node": ">=8"
2347
+ }
2348
+ },
2349
+ "node_modules/strip-ansi": {
2350
+ "version": "6.0.1",
2351
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
2352
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
2353
+ "license": "MIT",
2354
+ "dependencies": {
2355
+ "ansi-regex": "^5.0.1"
2356
+ },
2357
+ "engines": {
2358
+ "node": ">=8"
2359
+ }
2360
+ },
2295
2361
  "node_modules/strip-json-comments": {
2296
2362
  "version": "2.0.1",
2297
2363
  "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "camoufox-cli",
3
- "version": "0.4.0",
3
+ "version": "0.7.0",
4
4
  "description": "Anti-detect headless browser automation CLI & Skills for AI agents, powered by Camoufox",
5
5
  "type": "module",
6
6
  "bin": {
@@ -27,9 +27,9 @@
27
27
  "homepage": "https://github.com/Bin-Huang/camoufox-cli",
28
28
  "bugs": "https://github.com/Bin-Huang/camoufox-cli/issues",
29
29
  "dependencies": {
30
- "camoufox-js": "^0.8.5",
30
+ "camoufox-js": "^0.11.1",
31
31
  "pdf-lib": "^1.17.1",
32
- "playwright-core": "^1.52.0"
32
+ "playwright-core": "1.52.0"
33
33
  },
34
34
  "devDependencies": {
35
35
  "@types/node": "^22.0.0",