jo-inc/camofox-browser
Stealth headless browser for AI agents — bypass Cloudflare, bot detection, and anti-scraping. Drop-in Puppeteer/Playwright replacement.
JavaScript★ 10,643+871 that day#6 on trending
3.56%duplicated code · 566 of 15,909 lines
58clones in code
68code files of 195 scanned
13.52%duplicated over all files · 231 clones
The code number leaves out tests, fixtures, docs, examples, data files, styles, translations and vendored code, and 1 generated file: tests/unit/openapi.test.js.
Largest clones in the code
- 26 lines in 2 placesjavascript257 tokens
23const proc = spawn(process.execPath, [SERVER], { 24 cwd: ROOT, 25 env: { 26 PATH: process.env.PATH, HOME: process.env.HOME, USER: process.env.USER, 27 NODE_OPTIONS: process.env.NODE_OPTIONS || "", 28 CAMOFOX_BASE_URL: process.env.CAMOFOX_BASE_URL || "http://localhost:9377", 29 }, 30 stdio: ["pipe", "pipe", "pipe"], 31}); 32First 10 of 26 lines.
- 14 lines in 3 placesjavascript124 tokens
4330app.post('/tabs/:tabId/back', async (req, res) => { 4331 const tabId = req.params.tabId; 4332 4333 try { 4334 const { userId } = req.body; 4335 const session = sessions.get(normalizeUserId(userId)); 4336 const found = session && findTab(session, tabId); 4337 if (!found) return tabNotFoundResponse(res, req.params.tabId || req.body?.tabId); 4338 session.lastAccess = Date.now(); 4339First 10 of 14 lines.
- 8 lines in 4 placesjavascript75 tokens
3240const offset = parseInt(req.query.offset) || 0; 3241const session = sessions.get(normalizeUserId(userId)); 3242const found = session && findTab(session, req.params.tabId); 3243if (!found) return tabNotFoundResponse(res, req.params.tabId || req.body?.tabId); 3244session.lastAccess = Date.now(); 3245 3246const { tabState } = found; 3247tabState.toolCalls++; tabState.consecutiveTimeouts = 0; tabState.consecutiveFailures = 0;4641const maxBytes = Number.isFinite(maxBytesRaw) && maxBytesRaw > 0 ? maxBytesRaw : MAX_DOWNLOAD_INLINE_BYTES; 4642const session = sessions.get(normalizeUserId(userId)); 4643const found = session && findTab(session, req.params.tabId); 4644if (!found) return tabNotFoundResponse(res, req.params.tabId || req.body?.tabId); 4645session.lastAccess = Date.now(); 4646 4647const { tabState } = found; 4648tabState.toolCalls++;
7 more
- 7 lines in 4 placesjavascript70 tokens
- 8 lines in 3 placesjavascript88 tokens
- 21 lines in 2 placesjavascript151 tokens
- 22 lines in 2 placesjavascript144 tokens
- 9 lines in 2 placesjavascript102 tokens
- 18 lines in 2 placesjavascript101 tokens
- 7 lines in 3 placesjavascript50 tokens
Largest clones over all files, tests and data included
- 1024 lines in 2 placesjsondocs and examples2,508 tokens
1631 "description": "Tab not found.", 1632 "content": { 1633 "application/json": { 1634 "schema": { 1635 "$ref": "#/components/schemas/Error" 1636 } 1637 } 1638 } 1639 } 1640}First 10 of 1024 lines.
- 627 lines in 2 placesjsondocs and examples1,538 tokens
1013}, 1014"404": { 1015 "description": "Tab not found.", 1016 "content": { 1017 "application/json": { 1018 "schema": { 1019 "$ref": "#/components/schemas/Error" 1020 } 1021 } 1022 }First 10 of 627 lines.
- 506 lines in 2 placesjsondocs and examples1,256 tokens
292 } 293 } 294 } 295 } 296 } 297 } 298}, 299"/tabs": { 300 "post": { 301 "tags": [First 10 of 506 lines.
- 236 lines in 2 placesjsondocs and examples574 tokens
- 9 lines in 9 placesjavascripttests56 tokens
By format, code only
| Format | Files | Lines | Clones | Duplicated lines | Duplication |
|---|---|---|---|---|---|
| javascript | 49 | 13,793 | 58 | 566 | 4.1% |
| bash | 15 | 1,013 | 0 | 0 | 0% |
| typescript | 2 | 758 | 0 | 0 | 0% |
| perl | 1 | 174 | 0 | 0 | 0% |
| powershell | 1 | 171 | 0 | 0 | 0% |
By format, all files
| Format | Files | Lines | Clones | Duplicated lines | Duplication |
|---|---|---|---|---|---|
| javascript | 141 | 28,534 | 173 | 1,679 | 5.88% |
| json | 9 | 6,214 | 49 | 3,720 | 59.86% |
| yaml | 7 | 578 | 7 | 84 | 14.53% |
| bash | 19 | 1,287 | 1 | 4 | 0.31% |
| markup | 1 | 837 | 1 | 6 | 0.72% |
| markdown | 10 | 2,000 | 0 | 0 | 0% |
| typescript | 3 | 769 | 0 | 0 | 0% |
| powershell | 2 | 184 | 0 | 0 | 0% |
| perl | 1 | 174 | 0 | 0 | 0% |
| text | 2 | 53 | 0 | 0 | 0% |
Trending appearances
| Day | Rank | Stars | Files | Lines | Clones | All files | Code | Health | Commit |
|---|---|---|---|---|---|---|---|---|---|
| Sep 9, 2026 | #6 | 10,643 (+871) | 195 | 40,630 | 231 | 13.52% | 3.56% | — | e5a36f5 |
| Sep 8, 2026 | #2 | 9,918 (+135) | 195 | 40,630 | 231 | 13.52% | 3.56% | — | e5a36f5 |
Want this for your own project? Install jscpd and run jscpd ., or measure it the way the baselines were measured.