Stealth Chromium that passes every bot detection test. Drop-in Playwright replacement with source-level fingerprint patches. 30/30 tests passed.
This report summarizes scanner evidence for CloakHQ/CloakBrowser, a Python project with 32,025 GitHub stars. SynthScan examined 69,781 lines of code across 216 source files, recording 1261 pattern matches distributed across 18 syntactic categories. The legacy adjusted pattern signal is 34.1 (High pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Can maintainers explain intent, assumptions, and trade-offs? 710 finding(s).
Are imports declared and package/API names verified? 194 finding(s).
Are wrappers, guards, and repeated structures necessary? 976 finding(s).
Which changes need focused human review? 1261 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 1261 distinct pattern matches across 18 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | js/tests/license.test.ts | 46 | // ── resolveLicenseKey ───────────────────────────────── | COMMENT |
| MEDIUM | js/tests/license.test.ts | 87 | // ── validateLicense ─────────────────────────────────── | COMMENT |
| MEDIUM | js/tests/license.test.ts | 283 | // ── getProLatestVersion ─────────────────────────────── | COMMENT |
| MEDIUM | js/tests/license.test.ts | 487 | // ── Config pro parameter ────────────────────────────── | COMMENT |
| MEDIUM | js/tests/license.test.ts | 503 | // ── buildLaunchEnv ───────────────────────────────────── | COMMENT |
| MEDIUM | js/tests/license.test.ts | 609 | // ── post-handshake denial: helpers + guard ───────────── | COMMENT |
| MEDIUM | js/tests/license.test.ts | 877 | // ── getActiveSessionCount ───────────────────────────── | COMMENT |
| MEDIUM | js/tests/license.test.ts | 941 | // ── getSessionSeats ─────────────────────────────────── | COMMENT |
| MEDIUM | js/tests/cli.test.ts | 119 | // ── formatSeats ─────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_geoip.py | 52 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_geoip.py | 54 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_geoip.py | 71 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_geoip.py | 73 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_geoip.py | 126 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_geoip.py | 128 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_geoip.py | 143 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_geoip.py | 145 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_geoip.py | 300 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_geoip.py | 302 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_geoip.py | 320 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_geoip.py | 322 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_geoip.py | 19 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_geoip.py | 21 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_persistent_context.py | 31 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_persistent_context.py | 33 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_persistent_context.py | 224 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_persistent_context.py | 226 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_persistent_context.py | 316 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_persistent_context.py | 324 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_humanize_unit.py | 39 | # ========================================================================= | COMMENT |
| MEDIUM⚡ | tests/test_humanize_unit.py | 41 | # ========================================================================= | COMMENT |
| MEDIUM⚡ | tests/test_humanize_unit.py | 44 | # ========================================================================= | COMMENT |
| MEDIUM⚡ | tests/test_humanize_unit.py | 46 | # ========================================================================= | COMMENT |
| MEDIUM⚡ | tests/test_humanize_unit.py | 61 | # ========================================================================= | COMMENT |
| MEDIUM⚡ | tests/test_humanize_unit.py | 63 | # ========================================================================= | COMMENT |
| MEDIUM⚡ | tests/test_humanize_unit.py | 112 | # ========================================================================= | COMMENT |
| MEDIUM⚡ | tests/test_humanize_unit.py | 114 | # ========================================================================= | COMMENT |
| MEDIUM⚡ | tests/test_humanize_unit.py | 183 | # ========================================================================= | COMMENT |
| MEDIUM⚡ | tests/test_humanize_unit.py | 185 | # ========================================================================= | COMMENT |
| MEDIUM⚡ | tests/test_humanize_unit.py | 188 | # ========================================================================= | COMMENT |
| MEDIUM⚡ | tests/test_humanize_unit.py | 190 | # ========================================================================= | COMMENT |
| MEDIUM⚡ | tests/test_humanize_unit.py | 193 | # ========================================================================= | COMMENT |
| MEDIUM⚡ | tests/test_humanize_unit.py | 195 | # ========================================================================= | COMMENT |
| MEDIUM⚡ | tests/test_humanize_unit.py | 198 | # ========================================================================= | COMMENT |
| MEDIUM⚡ | tests/test_humanize_unit.py | 200 | # ========================================================================= | COMMENT |
| MEDIUM⚡ | tests/test_humanize_unit.py | 203 | # ========================================================================= | COMMENT |
| MEDIUM⚡ | tests/test_humanize_unit.py | 205 | # ========================================================================= | COMMENT |
| MEDIUM⚡ | tests/test_humanize_unit.py | 208 | # ========================================================================= | COMMENT |
| MEDIUM⚡ | tests/test_humanize_unit.py | 210 | # ========================================================================= | COMMENT |
| MEDIUM⚡ | tests/test_humanize_unit.py | 213 | # ========================================================================= | COMMENT |
| MEDIUM⚡ | tests/test_humanize_unit.py | 215 | # ========================================================================= | COMMENT |
| MEDIUM⚡ | tests/test_humanize_unit.py | 229 | # ========================================================================= | COMMENT |
| MEDIUM⚡ | tests/test_humanize_unit.py | 231 | # ========================================================================= | COMMENT |
| MEDIUM⚡ | tests/test_humanize_unit.py | 255 | # ========================================================================= | COMMENT |
| MEDIUM⚡ | tests/test_humanize_unit.py | 257 | # ========================================================================= | COMMENT |
| MEDIUM⚡ | tests/test_humanize_unit.py | 260 | # ========================================================================= | COMMENT |
| MEDIUM⚡ | tests/test_humanize_unit.py | 262 | # ========================================================================= | COMMENT |
| MEDIUM⚡ | tests/test_humanize_unit.py | 359 | # ========================================================================= | COMMENT |
| MEDIUM⚡ | tests/test_humanize_unit.py | 361 | # ========================================================================= | COMMENT |
| MEDIUM⚡ | tests/test_humanize_unit.py | 676 | # ========================================================================= | COMMENT |
| 189 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tests/test_launch.py | 85 | """window.chrome should exist (Playwright leaks undefined).""" | STRING |
| HIGH | tests/test_stealth_reproduction_110.py | 37 | window.__detections.evaluateQS.push(sel); | CODE |
| HIGH | tests/test_stealth_reproduction_110.py | 46 | window.__detections.untrustedKeydown.push(e.key); | CODE |
| HIGH | tests/test_stealth_reproduction_110.py | 146 | window.__evalLeaks.push(sel); | CODE |
| HIGH⚡ | tests/test_stealth_unit.py | 580 | if (e.stack && e.stack.includes(':302:')) { | CODE |
| HIGH⚡ | tests/test_stealth_unit.py | 581 | window.__evalLeaks.push(sel); | CODE |
| HIGH⚡ | tests/test_stealth_unit.py | 590 | window.__untrustedKeys.push(e.key); | CODE |
| HIGH | tests/test_stealth_unit.py | 415 | if (e.stack && e.stack.includes(':302:')) { | CODE |
| HIGH | tests/test_stealth_unit.py | 416 | window.__evaluateDetections.push(sel); | CODE |
| HIGH | tests/test_stealth_unit.py | 459 | window.__untrustedKeys.push(e.key); | CODE |
| HIGH | tests/test_stealth_unit.py | 461 | window.__trustedKeys.push(e.key); | CODE |
| HIGH | tests/test_stealth_unit.py | 534 | if (e.stack && e.stack.includes(':302:')) { | CODE |
| HIGH | tests/test_stealth_unit.py | 535 | window.__evalLeaks.push({sel, stack: e.stack.substring(0, 200)}); | CODE |
| HIGH | tests/test_stealth_unit.py | 643 | if (e.stack && e.stack.includes(':302:')) { | CODE |
| HIGH | tests/test_stealth_unit.py | 644 | window.__evalLeaks.push(sel); | CODE |
| HIGH | tests/test_stealth_unit.py | 679 | if (!e.isTrusted) window.__untrusted.push(e.key); | CODE |
| HIGH⚡ | tests/test_humanize_engine.py | 105 | if (!el || el === document) return 'document'; | CODE |
| HIGH⚡ | tests/test_humanize_engine.py | 113 | if ('detail' in e && type !== 'focus') rec.detail = e.detail; | CODE |
| HIGH⚡ | tests/test_humanize_engine.py | 120 | log.push(rec); | CODE |
| HIGH⚡ | tests/test_humanize_engine.py | 124 | log.push({ t: 'scroll', ts: performance.now(), sx: scrollX, sy: scrollY }); | CODE |
| HIGH⚡ | tests/test_humanize_engine.py | 233 | if (!el || el === document) return 'document'; | CODE |
| HIGH⚡ | tests/test_humanize_engine.py | 241 | if ('detail' in e && type !== 'focus') rec.detail = e.detail; | CODE |
| HIGH⚡ | tests/test_humanize_engine.py | 248 | log.push(rec); | CODE |
| HIGH⚡ | tests/test_humanize_engine.py | 252 | log.push({ t: 'scroll', ts: performance.now(), sx: scrollX, sy: scrollY }); | CODE |
| HIGH⚡ | tests/test_humanize_engine.py | 491 | " e => __kd.push(e.target.id + ':' + e.key)); }") | CODE |
| HIGH⚡ | tests/test_humanize_engine.py | 520 | window.__clicks = []; document.addEventListener('click', e => { __clicks.push(e.target.id); e.preventDefault(); | CODE |
| HIGH⚡ | tests/test_humanize_engine.py | 560 | document.addEventListener('dragstart', e => __dt.push(e.dataTransfer instanceof DataTransfer)); }""") | CODE |
| HIGH⚡ | tests/test_humanize_engine.py | 570 | page.evaluate("() => { window.__keys = []; document.addEventListener('keydown', e => __keys.push(e.key)); }") | CODE |
| HIGH | tests/test_humanize_engine.py | 61 | const note = (probe, detail) => hits.push({ probe, detail: String(detail ?? '') }); | CODE |
| HIGH | tests/test_humanize_engine.py | 65 | if (name === 'contenteditable') note('getAttribute(contenteditable)', this.id || this.tagName); | CODE |
| HIGH | tests/test_humanize_engine.py | 189 | const note = (probe, detail) => hits.push({ probe, detail: String(detail ?? '') }); | CODE |
| HIGH | tests/test_humanize_engine.py | 193 | if (name === 'contenteditable') note('getAttribute(contenteditable)', this.id || this.tagName); | CODE |
| HIGH | tests/test_humanize_engine.py | 699 | window.__sel = []; for (const t of ['input', 'change']) s.addEventListener(t, () => __sel.push(t)); | CODE |
| HIGH⚡ | tests/test_license.py | 544 | """Leaseless mode on the server → {"active": null}, never a false 0.""" | STRING |
| HIGH⚡ | tests/test_stealth.py | 49 | """window.chrome must be an object (not undefined).""" | STRING |
| HIGH | tests/test_stealth.py | 106 | failed.push(cells[0].innerText.trim()); | CODE |
| HIGH | tests/test_stealth.py | 167 | const isBot = botMatch ? botMatch[1] === 'true' : null; | CODE |
| HIGH | tests/test_stealth.py | 215 | return {score: scoreMatch ? parseFloat(scoreMatch[1]) : null}; | CODE |
| HIGH | tests/test_stealth_dom_browser.py | 11 | window.__clicked.push(el ? el.id : null); | CODE |
| HIGH | tests/test_stealth_dom_browser.py | 11 | window.__clicked.push(el ? el.id : null); | CODE |
| HIGH⚡ | cloakbrowser/human/world.py | 79 | if (Math.abs(b.left - x) < 0.6 && Math.abs(b.top - y) < 0.6 && | CODE |
| HIGH⚡ | cloakbrowser/human/world.py | 80 | Math.abs(b.width - w) < 0.6 && Math.abs(b.height - h) < 0.6) out.push(e); | CODE |
| HIGH⚡ | cloakbrowser/human/world.py | 80 | Math.abs(b.width - w) < 0.6 && Math.abs(b.height - h) < 0.6) out.push(e); | CODE |
| HIGH⚡ | cloakbrowser/human/world.py | 141 | catch (err) { return { error: err && err.message ? err.message : String(err) }; } | CODE |
| HIGH⚡ | cloakbrowser/human/world.py | 145 | if (!a || a === document.body) return { tag: null }; | CODE |
| HIGH⚡ | cloakbrowser/human/world.py | 145 | if (!a || a === document.body) return { tag: null }; | CODE |
| HIGH⚡ | cloakbrowser/human/world.py | 146 | return { tag: a.nodeName.toLowerCase(), type: a.nodeName === 'INPUT' ? String(a.type).toLowerCase() : null, | CODE |
| HIGH⚡ | cloakbrowser/human/world.py | 154 | if (r === undefined) return null; | CODE |
| HIGH⚡ | cloakbrowser/human/world.py | 164 | return null; | CODE |
| HIGH⚡ | cloakbrowser/human/world.py | 173 | return { checked: r === true, radio: !!t && t.nodeName === 'INPUT' && t.type === 'radio' }; | CODE |
| HIGH⚡ | cloakbrowser/human/world.py | 179 | if (!e.isConnected) return null; | CODE |
| HIGH⚡ | cloakbrowser/human/world.py | 189 | const top = document.scrollingElement || document.documentElement; | CODE |
| HIGH⚡ | cloakbrowser/human/world.py | 190 | for (let p = parentOrHost(e); p && p !== top && p !== document.body; p = parentOrHost(p)) { | CODE |
| HIGH⚡ | cloakbrowser/human/world.py | 197 | if ((sy && (b.top < y || b.bottom > y + h)) || (sx && (b.left < x || b.right > x + w))) | CODE |
| HIGH⚡ | cloakbrowser/human/world.py | 200 | return null; | CODE |
| HIGH⚡ | cloakbrowser/human/world.py | 203 | const e = document.scrollingElement || document.documentElement; | CODE |
| HIGH⚡ | cloakbrowser/human/world.py | 205 | const rtl = getComputedStyle(document.body || e).direction === 'rtl'; | CODE |
| HIGH⚡ | cloakbrowser/human/world.py | 238 | const lbl = (l) => l === o.label || norm(l) === norm(o.label); | CODE |
| HIGH⚡ | cloakbrowser/human/world.py | 240 | if (w.valueOrLabel !== undefined) ok = ok && (w.valueOrLabel === o.value || lbl(w.valueOrLabel)); | CODE |
| HIGH⚡ | cloakbrowser/human/world.py | 240 | if (w.valueOrLabel !== undefined) ok = ok && (w.valueOrLabel === o.value || lbl(w.valueOrLabel)); | CODE |
| 48 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | js/src/license.ts | 345 | export function resolveLicenseKeyWithSource( | CODE |
| LOW | js/src/download.ts | 349 | export function resetPreviewFallbackWarned(): void { | CODE |
| LOW | js/src/download.ts | 1255 | export function resetWrapperUpdateChecked(): void { | CODE |
| LOW | js/src/proxy.ts | 76 | function lenientDecodeURIComponent(s: string): string { | CODE |
| LOW | js/src/config.ts | 75 | export function normalizeRequestedVersion(version?: string): string | undefined { | CODE |
| LOW | js/src/config.ts | 279 | export function binarySupportsHeadlessNoViewport( | CODE |
| LOW | js/src/config.ts | 326 | export function binarySupportsMaximizedWindow( | CODE |
| LOW | js/src/config.ts | 366 | export function binarySupportsHttpProxyInlineAuth( | CODE |
| LOW | tests/test_font_warning.py | 43 | def test_warns_when_no_windows_fonts(tmp_path, capsys, monkeypatch): | CODE |
| LOW | tests/test_font_warning.py | 55 | def test_in_process_flag_blocks_second_call(tmp_path, capsys): | CODE |
| LOW | tests/test_font_warning.py | 68 | def test_marker_suppresses_across_processes(tmp_path, capsys): | CODE |
| LOW | tests/test_font_warning.py | 80 | def test_env_suppresses_and_writes_no_marker(tmp_path, capsys, monkeypatch): | CODE |
| LOW⚡ | tests/test_font_warning.py | 92 | def test_no_warn_on_non_linux(tmp_path, capsys): | CODE |
| LOW⚡ | tests/test_font_warning.py | 101 | def test_no_warn_when_platform_overridden(tmp_path, capsys): | CODE |
| LOW⚡ | tests/test_font_warning.py | 110 | def test_no_warn_no_crash_when_fc_list_absent(tmp_path, capsys): | CODE |
| LOW | tests/test_font_warning.py | 121 | def test_no_warn_when_full_set_present(tmp_path, capsys): | CODE |
| LOW | tests/test_font_warning.py | 131 | def test_warns_on_partial_set(tmp_path, capsys): | CODE |
| LOW | tests/test_profile_seed.py | 35 | def test_first_launch_writes_seed_and_second_reuses(tmp_path): | CODE |
| LOW | tests/test_profile_seed.py | 49 | async def test_async_launch_uses_stored_seed(tmp_path): | CODE |
| LOW | tests/test_profile_seed.py | 67 | def test_explicit_fingerprint_wins_and_file_untouched(tmp_path, flag): | CODE |
| LOW⚡ | tests/test_profile_seed.py | 78 | def test_stealth_args_false_writes_nothing(tmp_path): | CODE |
| LOW⚡ | tests/test_profile_seed.py | 86 | def test_non_persistent_launch_stays_random(tmp_path, monkeypatch): | CODE |
| LOW⚡ | tests/test_profile_seed.py | 96 | def test_corrupt_file_logs_and_regenerates(tmp_path, caplog, content): | CODE |
| LOW⚡ | tests/test_profile_seed.py | 107 | def test_python_file_format_is_cross_wrapper(tmp_path): | CODE |
| LOW⚡ | tests/test_profile_seed.py | 115 | def test_empty_user_data_dir_is_ignored(): | CODE |
| LOW⚡ | tests/test_profile_seed.py | 119 | def test_concurrent_first_launches_agree(tmp_path): | CODE |
| LOW | tests/test_profile_seed.py | 135 | def test_no_hard_link_support_falls_back_to_exclusive_create(tmp_path): | CODE |
| LOW⚡ | tests/test_geoip.py | 57 | def test_locale_map_has_common_countries(): | CODE |
| LOW⚡ | tests/test_geoip.py | 76 | def test_default_geoip_timeout_is_twenty_seconds(): | CODE |
| LOW⚡ | tests/test_geoip.py | 131 | def test_resolve_exit_ip_no_proxy_fetches_directly(): | CODE |
| LOW⚡ | tests/test_geoip.py | 148 | def test_maybe_resolve_skips_when_geoip_false(): | CODE |
| LOW⚡ | tests/test_geoip.py | 155 | def test_maybe_resolve_no_proxy_uses_machine_ip(): | CODE |
| LOW⚡ | tests/test_geoip.py | 185 | def test_maybe_resolve_skips_when_both_explicit(): | CODE |
| LOW⚡ | tests/test_geoip.py | 194 | def test_maybe_resolve_fills_missing_timezone(): | CODE |
| LOW⚡ | tests/test_geoip.py | 202 | def test_maybe_resolve_fills_missing_locale(): | CODE |
| LOW⚡ | tests/test_geoip.py | 210 | def test_maybe_resolve_fills_both(): | CODE |
| LOW⚡ | tests/test_geoip.py | 219 | def test_maybe_resolve_raw_timezone_flag_wins_over_geoip(): | CODE |
| LOW⚡ | tests/test_geoip.py | 290 | def test_maybe_resolve_geoip_rejects_incomplete_result(): | CODE |
| LOW⚡ | tests/test_geoip.py | 325 | def test_download_overwrites_existing_db(tmp_path): | CODE |
| LOW | tests/test_geoip.py | 92 | def test_resolve_geo_raises_when_exit_ip_missing(): | CODE |
| LOW | tests/test_geoip.py | 103 | def test_resolve_geo_raises_when_db_missing(): | CODE |
| LOW | tests/test_geoip.py | 114 | def test_resolve_geo_raises_when_lookup_fails(): | CODE |
| LOW | tests/test_geoip.py | 169 | def test_maybe_resolve_no_proxy_both_explicit_skips_ip(): | CODE |
| LOW | tests/test_geoip.py | 234 | def test_maybe_resolve_raw_lang_flag_wins_over_geoip(): | CODE |
| LOW | tests/test_geoip.py | 247 | def test_maybe_resolve_raw_flags_both_skip_geo_lookup(): | CODE |
| LOW | tests/test_geoip.py | 262 | def test_maybe_resolve_param_beats_raw_flag(): | CODE |
| LOW | tests/test_geoip.py | 276 | def test_maybe_resolve_geoip_timeout_aborts_launch(monkeypatch): | CODE |
| LOW | tests/test_geoip.py | 356 | def test_ensure_db_downloads_once_under_concurrency(tmp_path): | CODE |
| LOW | tests/test_launch.py | 17 | def test_removed_backend_kwarg_raises(env, monkeypatch): | CODE |
| LOW | tests/test_launch.py | 65 | def test_launch_with_extra_args(): | CODE |
| LOW | tests/test_launch.py | 84 | def test_chrome_object_exists(): | CODE |
| LOW | tests/test_resolver_sources_match.py | 26 | def test_world_helpers_are_byte_identical(): | CODE |
| LOW⚡ | tests/test_persistent_context.py | 21 | def _make_mock_pw_and_context(): | CODE |
| LOW⚡ | tests/test_persistent_context.py | 38 | def test_persistent_context_args_built(_mock_geoip, _mock_bin): | CODE |
| LOW⚡ | tests/test_persistent_context.py | 229 | def _make_mock_async_pw_and_context(): | CODE |
| LOW⚡ | tests/test_persistent_context.py | 329 | def test_persistent_context_humanizes_before_the_license_guard(_mock_geoip, _mock_bin): | CODE |
| LOW | tests/test_persistent_context.py | 54 | def test_persistent_context_default_viewport(_mock_geoip, _mock_bin): | CODE |
| LOW | tests/test_persistent_context.py | 68 | def test_persistent_context_headed_no_viewport(_mock_geoip, _mock_bin): | CODE |
| LOW | tests/test_persistent_context.py | 84 | def test_persistent_context_custom_viewport(_mock_geoip, _mock_bin): | CODE |
| LOW | tests/test_persistent_context.py | 99 | def test_persistent_context_user_agent(_mock_geoip, _mock_bin): | CODE |
| 553 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tests/test_human_visual.py | 53 | except: | CODE |
| HIGH | tests/test_stealth.py | 189 | except Exception: | CODE |
| HIGH | cloakbrowser/config.py | 90 | except FileNotFoundError: | CODE |
| HIGH | cloakbrowser/config.py | 131 | except FileExistsError: | CODE |
| HIGH | cloakbrowser/config.py | 346 | except (ValueError, OSError): | CODE |
| HIGH | cloakbrowser/config.py | 360 | except (ValueError, OSError): | CODE |
| HIGH | cloakbrowser/config.py | 140 | except FileExistsError: | CODE |
| HIGH | cloakbrowser/download.py | 136 | except Exception: | CODE |
| HIGH | cloakbrowser/download.py | 190 | except OSError: | CODE |
| HIGH | cloakbrowser/download.py | 533 | except OSError: | CODE |
| HIGH | cloakbrowser/download.py | 1197 | except (ValueError, OSError): | CODE |
| HIGH | cloakbrowser/download.py | 496 | except OSError: | CODE |
| HIGH | cloakbrowser/browser.py | 1661 | except Exception: | CODE |
| HIGH | cloakbrowser/browser.py | 1654 | except Exception: | CODE |
| HIGH | cloakbrowser/browser.py | 1659 | except OSError: | CODE |
| HIGH | cloakbrowser/browser.py | 1142 | except BaseException: | CODE |
| HIGH | cloakbrowser/geoip.py | 167 | except OSError: | CODE |
| HIGH | cloakbrowser/geoip.py | 172 | except OSError: | CODE |
| HIGH | cloakbrowser/license.py | 227 | except OSError: | CODE |
| HIGH | cloakbrowser/license.py | 287 | except OSError: | CODE |
| HIGH | cloakbrowser/license.py | 203 | except OSError: | CODE |
| HIGH | cloakbrowser/license.py | 454 | except (OSError, ValueError, TypeError): | CODE |
| HIGH | cloakbrowser/license.py | 550 | except Exception: | CODE |
| HIGH | cloakbrowser/license.py | 225 | except OSError: | CODE |
| HIGH | cloakbrowser/license.py | 510 | except OSError: | CODE |
| HIGH | cloakbrowser/license.py | 612 | except (ValueError, TypeError): | CODE |
| HIGH | cloakbrowser/license.py | 507 | except (OSError, ValueError, TypeError): | CODE |
| HIGH | cloakbrowser/__main__.py | 597 | except OSError: | CODE |
| HIGH | cloakbrowser/__main__.py | 608 | except Exception: | CODE |
| HIGH | cloakbrowser/human/patch.py | 415 | except Exception: # e.g. called from an event handler; done lazily | CODE |
| HIGH | cloakbrowser/human/world.py | 587 | except Error: | CODE |
| HIGH | cloakbrowser/human/world.py | 349 | except Exception: # pragma: no cover - emitter missing in mocks | CODE |
| HIGH | examples/integrations/aws_lambda/lambda_handler.py | 302 | except Exception: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | bin/fetch-widevine.py | 299 | except Exception as e: # noqa: BLE001 — top-level guard; entrypoint treats nonzero as soft-fail | CODE |
| LOW | tests/test_stealth.py | 189 | except Exception: | CODE |
| MEDIUM | tests/test_extract.py | 246 | def run_caller(): | CODE |
| MEDIUM | tests/test_extract.py | 309 | def run_caller(): | CODE |
| LOW | tests/test_extract.py | 249 | except Exception as err: | CODE |
| LOW | tests/test_extract.py | 312 | except Exception as err: | CODE |
| LOW⚡ | cloakbrowser/download.py | 771 | except Exception as exc: | CODE |
| LOW⚡ | cloakbrowser/download.py | 779 | except Exception: | CODE |
| LOW⚡ | cloakbrowser/download.py | 787 | except Exception: | CODE |
| LOW | cloakbrowser/download.py | 136 | except Exception: | CODE |
| LOW | cloakbrowser/download.py | 257 | except Exception as e: | CODE |
| LOW | cloakbrowser/download.py | 373 | except Exception as primary_err: | CODE |
| LOW | cloakbrowser/download.py | 513 | except Exception: | CODE |
| LOW | cloakbrowser/download.py | 604 | except Exception as exc: | CODE |
| LOW | cloakbrowser/download.py | 753 | except Exception: | CODE |
| LOW | cloakbrowser/download.py | 815 | except Exception: | CODE |
| LOW | cloakbrowser/download.py | 1054 | except Exception: | CODE |
| LOW | cloakbrowser/download.py | 1219 | except Exception: | CODE |
| LOW | cloakbrowser/download.py | 1280 | except Exception: | CODE |
| LOW | cloakbrowser/download.py | 1315 | except Exception: | CODE |
| MEDIUM | cloakbrowser/browser.py | 1011 | def _close_context_with_cleanup() -> None: | CODE |
| LOW | cloakbrowser/browser.py | 117 | except Exception: | CODE |
| LOW | cloakbrowser/browser.py | 146 | except Exception as exc: | CODE |
| LOW | cloakbrowser/browser.py | 188 | except Exception as exc: | CODE |
| LOW | cloakbrowser/browser.py | 402 | except Exception as exc: | CODE |
| LOW | cloakbrowser/browser.py | 406 | except Exception as stop_exc: | CODE |
| LOW | cloakbrowser/browser.py | 535 | except Exception as exc: | CODE |
| LOW | cloakbrowser/browser.py | 539 | except Exception as stop_exc: | CODE |
| LOW | cloakbrowser/browser.py | 701 | except Exception as exc: | CODE |
| LOW | cloakbrowser/browser.py | 705 | except Exception as stop_exc: | CODE |
| LOW | cloakbrowser/browser.py | 872 | except Exception as exc: | CODE |
| LOW | cloakbrowser/browser.py | 876 | except Exception as stop_exc: | CODE |
| LOW | cloakbrowser/browser.py | 1004 | except Exception: | CODE |
| LOW | cloakbrowser/browser.py | 1391 | except Exception: | CODE |
| LOW | cloakbrowser/browser.py | 1654 | except Exception: | CODE |
| LOW | cloakbrowser/browser.py | 1661 | except Exception: | CODE |
| LOW⚡ | cloakbrowser/geoip.py | 147 | except Exception as exc: | CODE |
| LOW | cloakbrowser/geoip.py | 182 | except Exception as exc: | CODE |
| LOW⚡ | cloakbrowser/geoip.py | 280 | except Exception: | CODE |
| LOW | cloakbrowser/geoip.py | 313 | except Exception as exc: | CODE |
| LOW | cloakbrowser/geoip.py | 347 | except Exception: | CODE |
| LOW | cloakbrowser/geoip.py | 367 | except Exception: | CODE |
| LOW | cloakbrowser/widevine.py | 122 | except Exception: | CODE |
| LOW | cloakbrowser/widevine.py | 127 | except Exception as e: | CODE |
| LOW | cloakbrowser/license.py | 422 | except Exception as e: | CODE |
| LOW | cloakbrowser/license.py | 492 | except Exception as e: | CODE |
| LOW | cloakbrowser/license.py | 538 | except Exception as e: | CODE |
| LOW | cloakbrowser/license.py | 550 | except Exception: | CODE |
| LOW | cloakbrowser/license.py | 558 | except Exception as e: | CODE |
| LOW | cloakbrowser/__main__.py | 139 | except Exception as exc: | CODE |
| LOW | cloakbrowser/__main__.py | 284 | except Exception as exc: | CODE |
| LOW | cloakbrowser/__main__.py | 289 | except Exception as exc: # platform unsupported, etc. | CODE |
| LOW | cloakbrowser/__main__.py | 351 | except Exception as exc: # network/proxy failure — never crash `info` | CODE |
| LOW | cloakbrowser/__main__.py | 608 | except Exception: | CODE |
| LOW | cloakbrowser/__main__.py | 740 | except Exception as e: | CODE |
| MEDIUM | cloakbrowser/__main__.py | 741 | print(f"Error: {e}", file=sys.stderr) | CODE |
| LOW | cloakbrowser/human/patch.py | 415 | except Exception: # e.g. called from an event handler; done lazily | CODE |
| LOW | cloakbrowser/human/world.py | 349 | except Exception: # pragma: no cover - emitter missing in mocks | CODE |
| LOW | examples/stealth_test.py | 253 | except Exception: | CODE |
| LOW | examples/stealth_test.py | 261 | except Exception: | CODE |
| 9 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_resolver_sources_match.py | 10 | CODE | |
| LOW | tests/test_stealth_unit.py | 16 | CODE | |
| LOW | tests/test_stealth_unit.py | 17 | CODE | |
| LOW | tests/test_stealth_unit.py | 19 | CODE | |
| LOW | tests/test_stealth_unit.py | 22 | CODE | |
| LOW | tests/test_stealth_unit.py | 22 | CODE | |
| LOW | tests/test_stealth_unit.py | 22 | CODE | |
| LOW | tests/test_humanize_engine.py | 10 | CODE | |
| LOW | tests/test_update.py | 3 | CODE | |
| LOW | tests/test_extract.py | 8 | CODE | |
| LOW | tests/test_lambda_security.py | 3 | CODE | |
| LOW | tests/test_lambda_security.py | 7 | CODE | |
| LOW | cloakbrowser/config.py | 3 | CODE | |
| LOW | cloakbrowser/download.py | 7 | CODE | |
| LOW | cloakbrowser/__init__.py | 14 | CODE | |
| LOW | cloakbrowser/__init__.py | 14 | CODE | |
| LOW | cloakbrowser/__init__.py | 14 | CODE | |
| LOW | cloakbrowser/__init__.py | 14 | CODE | |
| LOW | cloakbrowser/__init__.py | 14 | CODE | |
| LOW | cloakbrowser/__init__.py | 14 | CODE | |
| LOW | cloakbrowser/__init__.py | 14 | CODE | |
| LOW | cloakbrowser/__init__.py | 14 | CODE | |
| LOW | cloakbrowser/__init__.py | 14 | CODE | |
| LOW | cloakbrowser/__init__.py | 15 | CODE | |
| LOW | cloakbrowser/__init__.py | 15 | CODE | |
| LOW | cloakbrowser/__init__.py | 16 | CODE | |
| LOW | cloakbrowser/__init__.py | 16 | CODE | |
| LOW | cloakbrowser/__init__.py | 16 | CODE | |
| LOW | cloakbrowser/__init__.py | 16 | CODE | |
| LOW | cloakbrowser/__init__.py | 17 | CODE | |
| LOW | cloakbrowser/__init__.py | 17 | CODE | |
| LOW | cloakbrowser/__init__.py | 17 | CODE | |
| LOW | cloakbrowser/__init__.py | 18 | CODE | |
| LOW | cloakbrowser/browser.py | 15 | CODE | |
| LOW | cloakbrowser/geoip.py | 11 | CODE | |
| LOW | cloakbrowser/widevine.py | 23 | CODE | |
| LOW | cloakbrowser/license.py | 7 | CODE | |
| LOW | cloakbrowser/__main__.py | 11 | CODE | |
| LOW | cloakbrowser/human/patch.py | 21 | CODE | |
| LOW | cloakbrowser/human/world.py | 17 | CODE | |
| LOW | cloakbrowser/human/config.py | 7 | CODE | |
| LOW | cloakbrowser/human/config.py | 9 | CODE | |
| LOW | cloakbrowser/human/config.py | 12 | CODE | |
| LOW | cloakbrowser/human/fields.py | 15 | CODE | |
| LOW | cloakbrowser/human/__init__.py | 19 | CODE | |
| LOW | cloakbrowser/human/__init__.py | 21 | CODE | |
| LOW | cloakbrowser/human/__init__.py | 21 | CODE | |
| LOW | cloakbrowser/human/__init__.py | 21 | CODE | |
| LOW | cloakbrowser/human/__init__.py | 21 | CODE | |
| LOW | cloakbrowser/human/__init__.py | 22 | CODE | |
| LOW | cloakbrowser/human/__init__.py | 23 | CODE | |
| LOW | cloakbrowser/human/__init__.py | 23 | CODE | |
| LOW | cloakbrowser/human/__init__.py | 23 | CODE | |
| LOW | cloakbrowser/human/__init__.py | 23 | CODE | |
| LOW | cloakbrowser/human/__init__.py | 23 | CODE | |
| LOW | cloakbrowser/human/__init__.py | 23 | CODE | |
| LOW | cloakbrowser/human/__init__.py | 23 | CODE | |
| LOW | cloakbrowser/human/__init__.py | 23 | CODE | |
| LOW | cloakbrowser/human/__init__.py | 23 | CODE | |
| LOW | cloakbrowser/human/__init__.py | 23 | CODE | |
| 22 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | bin/docker-entrypoint.sh | 1 | #!/bin/bash | COMMENT |
| LOW | bin/docker-entrypoint.sh | 21 | done | COMMENT |
| LOW | js/src/fonts.ts | 1 | // --------------------------------------------------------------------------- | COMMENT |
| LOW | js/src/download.ts | 41 | // Seconds, matching the Python/.NET `.last_update_check` marker format so the | COMMENT |
| LOW | js/src/config.ts | 41 | // --------------------------------------------------------------------------- | COMMENT |
| LOW | js/src/config.ts | 401 | } | COMMENT |
| LOW | tests/test_humanize_unit.py | 181 | COMMENT | |
| LOW | cloakbrowser/config.py | 41 | # --------------------------------------------------------------------------- | COMMENT |
| LOW | cloakbrowser/config.py | 461 | version = get_effective_version(pro=pro, release_channel=release_channel) | COMMENT |
| LOW | cloakbrowser/browser.py | 1501 | seen["--start-maximized"] = "--start-maximized" | COMMENT |
| LOW | dotnet/tests/CloakBrowser.Tests/ViewportTests.cs | 1 | using CloakBrowser; | COMMENT |
| LOW | …loakBrowser.Tests/Wrappers/GeneratorDelegationTests.cs | 141 | Assert.NotNull(wrapper.GetProperty("Original")); | COMMENT |
| LOW | dotnet/src/CloakBrowser/ViewportDefaults.cs | 1 | using Microsoft.Playwright; | COMMENT |
| LOW | dotnet/src/CloakBrowser/Download.cs | 21 | /// <summary> | COMMENT |
| LOW | dotnet/src/CloakBrowser/Download.cs | 141 | COMMENT | |
| LOW | dotnet/src/CloakBrowser/Download.cs | 201 | /// CloakBrowser Pro license key. Also read from the <c>CLOAKBROWSER_LICENSE_KEY</c> | COMMENT |
| LOW | dotnet/src/CloakBrowser/Download.cs | 681 | /// | COMMENT |
| LOW | dotnet/src/CloakBrowser/Download.cs | 1161 | CloakLog.Info("Cache cleared: {0}", cacheDir); | COMMENT |
| LOW | dotnet/src/CloakBrowser/Handles.cs | 61 | Browser = (IBrowser)LicenseGuard.Wrap(visible, denialPath); | COMMENT |
| LOW | dotnet/src/CloakBrowser/Handles.cs | 81 | public Task<IBrowserContext> NewContextAsync(BrowserNewContextOptions? options = null) => | COMMENT |
| LOW | dotnet/src/CloakBrowser/Handles.cs | 121 | /// A denial that lands after Playwright connected kills the browser without a launch | COMMENT |
| LOW | dotnet/src/CloakBrowser/Config.cs | 41 | "MKFKwIhUcKWq5xTuNA0Ovg99njcDEcEJvmWYYhApvaU=", | COMMENT |
| LOW | dotnet/src/CloakBrowser/Config.cs | 521 | NormalizeReleaseChannel(releaseChannel) == "preview" | COMMENT |
| LOW | dotnet/src/CloakBrowser/Config.cs | 621 | }; | COMMENT |
| LOW | dotnet/src/CloakBrowser/CloakLauncher.cs | 601 | } | COMMENT |
| LOW | dotnet/src/CloakBrowser/Widevine.cs | 1 | using System.Runtime.InteropServices; | COMMENT |
| LOW | dotnet/src/CloakBrowser/LaunchOptions.cs | 41 | /// <summary>Chrome extension paths to load.</summary> | COMMENT |
| LOW | dotnet/src/CloakBrowser/LaunchOptions.cs | 61 | /// Binary release channel (<c>stable</c> or <c>preview</c>). Also read from the | COMMENT |
| LOW | dotnet/src/CloakBrowser/License.cs | 1 | using System.Security.Cryptography; | COMMENT |
| LOW | dotnet/src/CloakBrowser/License.cs | 21 | /// <list type="bullet"> | COMMENT |
| LOW | dotnet/src/CloakBrowser/License.cs | 41 | public sealed record ProReleaseInfo( | COMMENT |
| LOW | dotnet/src/CloakBrowser/License.cs | 61 | internal enum LicenseKeySource | COMMENT |
| LOW | dotnet/src/CloakBrowser/License.cs | 121 | /// message when the browser process exited with a known license exit code, else | COMMENT |
| LOW | dotnet/src/CloakBrowser/License.cs | 161 | /// Maps a raw license exit code (76-79) to a <see cref="CloakBrowserLicenseError"/>, | COMMENT |
| LOW | dotnet/src/CloakBrowser/License.cs | 361 | /// <list type="bullet"> | COMMENT |
| LOW | dotnet/src/CloakBrowser/License.cs | 641 | } | COMMENT |
| LOW | dotnet/src/CloakBrowser/Wrappers/Humanize.cs | 1 | using System.Collections.Generic; | COMMENT |
| LOW | …et/src/CloakBrowser/Wrappers/HumanizedElementHandle.cs | 1 | using CloakBrowser.Human; | COMMENT |
| LOW | dotnet/src/CloakBrowser/Wrappers/HumanizedLocator.cs | 1 | using System.Text.RegularExpressions; | COMMENT |
| LOW | dotnet/src/CloakBrowser/Human/HumanPage.cs | 21 | /// <summary> | COMMENT |
| LOW | dotnet/src/CloakBrowser/Human/InjectedSource.cs | 1 | using System.Text; | COMMENT |
| LOW | dotnet/src/CloakBrowser/Human/Actionability.cs | 101 | // --------------------------------------------------------------------------- | COMMENT |
| LOW | dotnet/src/CloakBrowser/Human/HumanRandom.cs | 1 | namespace CloakBrowser.Human; | COMMENT |
| LOW | dotnet/src/CloakBrowser/Human/HumanKeyboard.cs | 101 | char lower = char.ToLowerInvariant(ch); | COMMENT |
| LOW | dotnet/src/CloakBrowser/Human/HumanScroll.cs | 1 | namespace CloakBrowser.Human; | COMMENT |
| LOW | dotnet/src/CloakBrowser/Human/HumanScroll.cs | 21 | /// <summary> | COMMENT |
| LOW | dotnet/src/CloakBrowser.Cli/Program.cs | 1 | using System.Diagnostics; | COMMENT |
| LOW | examples/integrations/agent_browser.sh | 1 | #!/bin/bash | COMMENT |
| LOW | examples/integrations/aws_lambda/lambda-entrypoint.sh | 1 | #!/bin/sh | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | bin/fetch-widevine.py | 74 | CODE | |
| LOW | tests/test_geoip.py | 92 | CODE | |
| LOW | tests/test_geoip.py | 103 | CODE | |
| LOW | tests/test_geoip.py | 114 | CODE | |
| LOW | tests/test_humanize_engine.py | 661 | CODE | |
| LOW | tests/test_update.py | 505 | CODE | |
| LOW | tests/test_update.py | 587 | CODE | |
| LOW | tests/test_lambda_security.py | 131 | CODE | |
| LOW | cloakbrowser/config.py | 103 | CODE | |
| LOW | cloakbrowser/config.py | 313 | CODE | |
| LOW | cloakbrowser/download.py | 862 | CODE | |
| LOW | cloakbrowser/download.py | 906 | CODE | |
| LOW | cloakbrowser/download.py | 1202 | CODE | |
| LOW | cloakbrowser/geoip.py | 318 | CODE | |
| LOW | cloakbrowser/license.py | 217 | CODE | |
| LOW | cloakbrowser/license.py | 433 | CODE | |
| LOW | cloakbrowser/license.py | 585 | CODE | |
| LOW | cloakbrowser/__main__.py | 148 | CODE | |
| LOW | cloakbrowser/__main__.py | 398 | CODE | |
| LOW | cloakbrowser/human/engine.py | 448 | CODE | |
| LOW | cloakbrowser/human/engine.py | 804 | CODE | |
| LOW | cloakbrowser/human/injected.py | 46 | CODE | |
| LOW | examples/fingerprint_scan_test.py | 89 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | examples/integrations/browser_use_example.py | 18 | # Step 1: Launch CloakBrowser (handles binary, stealth args, fingerprints) | COMMENT |
| LOW⚡ | examples/integrations/browser_use_example.py | 24 | # Step 2: Connect browser-use to the stealth browser via CDP | COMMENT |
| LOW⚡ | examples/integrations/browser_use_example.py | 27 | # Step 3: Run your AI agent — it browses through CloakBrowser | COMMENT |
| LOW⚡ | examples/integrations/crawl4ai_example.py | 17 | # Step 1: Launch CloakBrowser with remote debugging | COMMENT |
| LOW⚡ | examples/integrations/crawl4ai_example.py | 23 | # Step 2: Connect Crawl4AI to the stealth browser via CDP | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | examples/integrations/browser_use_example.py | 18 | # Step 1: Launch CloakBrowser (handles binary, stealth args, fingerprints) | COMMENT |
| LOW⚡ | examples/integrations/browser_use_example.py | 24 | # Step 2: Connect browser-use to the stealth browser via CDP | COMMENT |
| LOW⚡ | examples/integrations/browser_use_example.py | 27 | # Step 3: Run your AI agent — it browses through CloakBrowser | COMMENT |
| LOW⚡ | examples/integrations/crawl4ai_example.py | 17 | # Step 1: Launch CloakBrowser with remote debugging | COMMENT |
| LOW⚡ | examples/integrations/crawl4ai_example.py | 23 | # Step 2: Connect Crawl4AI to the stealth browser via CDP | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/test_update.py | 455 | # Create the binary dir so it looks already downloaded | COMMENT |
| MEDIUM | tests/test_update.py | 494 | # Create a fake cached binary | COMMENT |
| MEDIUM⚡ | tests/test_license.py | 710 | # Create the binary so effective version returns it | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | cloakbrowser/__init__.py | 32 | __all__ = [ | CODE |
| LOW | cloakbrowser/__main__.py | 49 | def _setup_logging() -> None: | CODE |
| LOW | cloakbrowser/human/patch.py | 203 | async def set_checked(h: Human, impl: Any, a: dict) -> None: | CODE |
| LOW | cloakbrowser/human/__init__.py | 40 | __all__ = [ | CODE |
| LOW | cloakbrowser/human/engine.py | 782 | async def set_checked(self, target: Target, checked: bool, opts: dict, api: str) -> None: | CODE |
| LOW | cloakbrowser/human/errors.py | 81 | __all__ = [ | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | cloakbrowser/browser.py | 1460 | # feature set matches a stock browser rather than a test harness. Merged into any | COMMENT |
| MEDIUM | examples/fingerprint_scan_test.py | 90 | """abrahamjuliot.github.io/creepjs — comprehensive fingerprint analysis.""" | STRING |
| MEDIUM | examples/stealth_test.py | 53 | """bot.incolumitas.com — comprehensive 30+ check bot detection.""" | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | cloakbrowser/human/config.py | 179 | Resolve a preset name + optional overrides into a full HumanConfig. Args: preset: 'default' or 'careful'. | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | README.md | 610 | page.locator("#email").fill("user@example.com") # per-character timing, thinking pauses | CODE |
| LOW | README.md | 1401 | page.type("#email", "user@example.com", delay=50) | CODE |
| LOW | js/README.md | 330 | await page.type('#email', 'user@example.com', { delay: 50 }); | CODE |
| LOW | js/src/puppeteer.ts | 183 | * await page.type('#email', 'user@example.com'); // Per-character timing | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | cloakbrowser/browser.py | 320 | CODE | |
| LOW | cloakbrowser/browser.py | 456 | CODE | |
| LOW | cloakbrowser/browser.py | 584 | CODE | |
| LOW | cloakbrowser/browser.py | 753 | CODE | |
| LOW | cloakbrowser/browser.py | 922 | CODE | |
| LOW | cloakbrowser/browser.py | 1035 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | examples/integrations/aws_lambda/INSTRUCTIONS.md | 113 | ### Retry orchestration | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_stealth_unit.py | 429 | # Check if any querySelector calls came from evaluate context | STRING |