🗃 Open source self-hosted web archiving. Takes URLs/browser history/bookmarks/Pocket/Pinboard/etc., saves HTML, JS, PDFs, media, and more...
This report presents the forensic synthetic code analysis of ArchiveBox/ArchiveBox, a Python project with 27,925 GitHub stars. SynthScan v2.0 examined 190,101 lines of code across 626 source files, recording 2297 pattern matches distributed across 22 syntactic categories. The overall adjusted score of 17.0 places this repository in the Moderate AI signal band.
The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).
This chart maps the temporal evolution of the adjusted synthetic code score across successive scan runs. An upward trajectory indicates ongoing incorporation of AI-generated code or expanding LLM-assisted scaffolding; a stable or declining trajectory may reflect active human refactoring, code removal, or the adoption of stricter authorship policies. The dashed secondary line (right axis) independently tracks total raw pattern hit count, which can diverge from the normalised score when codebase size changes significantly between scans.
Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.
This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.
The scanner identified 2297 distinct pattern matches across 22 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. 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 diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | old/TODO_hook_statemachine_cleanup.md | 127 | def has_running_background_hooks(self) -> bool: | CODE |
| LOW⚡ | old/TODO_fs_migrations.md | 305 | def reconcile_with_index_json(self): | CODE |
| LOW⚡ | old/TODO_fs_migrations.md | 465 | def move_directory_to_invalid(snapshot_dir: Path): | CODE |
| LOW | old/TODO_fs_migrations.md | 113 | def get_storage_path_for_version(self, version: str) -> Path: | CODE |
| LOW | old/TODO_fs_migrations.md | 284 | def _detect_fs_version_from_index(data: dict) -> str: | CODE |
| LOW | old/TODO_fs_migrations.md | 368 | def _merge_archive_results_from_index(self, index_data: dict): | CODE |
| LOW | old/TODO_fs_migrations.md | 387 | def _create_archive_result_if_missing(self, result_data: dict, existing: dict): | CODE |
| LOW | old/TODO_fs_migrations.md | 489 | def find_and_merge_duplicates(cls) -> int: | CODE |
| LOW | old/TODO_fs_migrations.md | 662 | def _cleanup_old_migration_dir(self, old_dir: Path): | CODE |
| LOW | old/TODO_fs_migrations.md | 787 | def import_orphans_from_archive(resume_from: str = None, batch_size: int = 100) -> dict: | CODE |
| LOW | old/TODO_fs_migrations.md | 891 | def process_filtered_snapshots( | CODE |
| LOW | old/TODO_fs_migrations.md | 1135 | def fix_invalid_folder_locations(out_dir: Path = DATA_DIR) -> Tuple[List[str], List[str]]: | CODE |
| LOW | old/TODO_process_tracking.md | 1108 | def has_running_background_hooks(self) -> bool: | CODE |
| LOW | old/TODO_process_tracking.md | 1126 | def has_running_background_hooks(self) -> bool: | CODE |
| LOW | old/TODO_process_tracking.md | 1828 | def stop_existing_supervisord_process(): | CODE |
| LOW | old/TODO_process_tracking.md | 1840 | def start_new_supervisord_process(): | CODE |
| LOW | old/TODO_process_tracking.md | 1852 | def stop_existing_supervisord_process(): | CODE |
| LOW | old/TODO_archivebox_jsonl_cli.md | 591 | def assert_jsonl_contains_type(stdout: str, record_type: str, min_count: int = 1): | CODE |
| LOW | old/TODO_archivebox_jsonl_cli.md | 600 | def assert_jsonl_pass_through(stdout: str, input_records: List[Dict[str, Any]]): | CODE |
| LOW | old/TODO_archivebox_jsonl_cli.md | 662 | def create_test_snapshot_json(url: str = None, **kwargs) -> Dict[str, Any]: | CODE |
| LOW | old/archivebox.ts | 6051 | // async function setupScreenrecordingWithAudio(page, wss) { | COMMENT |
| LOW | old/archivebox.ts | 1039 | async function getChromeExtensionsFromPersona({CHROME_EXTENSIONS, CHROMEWEBSTORE_EXTENSIONS_DIR}) { | CODE |
| LOW | old/archivebox.ts | 1061 | async function getChromeExtensionsFromCache({browser, extensions=CHROME_EXTENSIONS, extensions_dir=CHROMEWEBSTORE_EXTENS | CODE |
| LOW | old/archivebox.ts | 1715 | async function collectSnapshotDirVersionFiles(snap_dir) { | CODE |
| LOW | old/archivebox.ts | 1825 | async function symlinkBestSnapshotResults(snap_dir) { | CODE |
| LOW | old/archivebox.ts | 3380 | async function saveAIQualityAssuranceResult(page, {original_url, version}) { | CODE |
| LOW | old/TODO_hook_architecture.md | 1427 | def check_background_hook_completed(archiveresult: 'ArchiveResult') -> bool: | CODE |
| LOW | old/TODO_hook_architecture.md | 1583 | def test_background_hook_detection(): | CODE |
| LOW | old/TODO_hook_architecture.md | 1588 | def test_find_binary_by_abspath(): | CODE |
| LOW | old/TODO_hook_architecture.md | 1627 | def test_foreground_hook_execution(snapshot): | STRING |
| LOW | old/TODO_hook_architecture.md | 1646 | def test_background_hook_execution(snapshot): | STRING |
| LOW | old/TODO_hook_architecture.md | 1667 | def test_background_hook_finalization(snapshot): | STRING |
| LOW | archivebox/misc/util.py | 25 | def filter_queryset_by_uuid_substring(queryset, slug: str, field: str = "id"): | CODE |
| LOW | archivebox/misc/util.py | 248 | def split_comma_separated_urls(url: str): | CODE |
| LOW | archivebox/misc/checks.py | 26 | def _migration_interrupt_message(*, before_apply: bool = False) -> str: | CODE |
| LOW | archivebox/misc/checks.py | 38 | def _exit_on_migration_interrupt(): | CODE |
| LOW | archivebox/misc/checks.py | 210 | def check_not_inside_source_dir(): | CODE |
| LOW | archivebox/misc/checks.py | 220 | def check_data_dir_permissions(config=None, **config_kwargs): | CODE |
| LOW | archivebox/misc/logging_util.py | 455 | def printable_dependency_version(name: str, dependency: dict) -> str: | CODE |
| LOW | archivebox/misc/serve_static.py | 102 | def _render_mhtml_preview_document(filename: str, output_path: str) -> str: | CODE |
| LOW | archivebox/misc/serve_static.py | 121 | def _format_direntry_timestamp(stat_result: os.stat_result) -> str: | CODE |
| LOW | archivebox/misc/serve_static.py | 169 | def _build_directory_zip_response( | CODE |
| LOW | archivebox/misc/serve_static.py | 259 | async def _stream_ranged_file_async(ranged_file: "RangedFileReader"): | CODE |
| LOW | archivebox/misc/serve_static.py | 361 | def _extract_markdown_candidate(text: str) -> str: | CODE |
| LOW | archivebox/misc/serve_static.py | 385 | def _render_text_preview_document(text: str, title: str) -> str: | CODE |
| LOW | archivebox/misc/serve_static.py | 435 | def _render_image_preview_document(image_url: str, title: str) -> str: | CODE |
| LOW | archivebox/misc/serve_static.py | 485 | def _render_markdown_fallback(text: str) -> str: | CODE |
| LOW | archivebox/misc/serve_static.py | 640 | def _render_markdown_document(markdown_text: str) -> str: | CODE |
| LOW | archivebox/misc/serve_static.py | 660 | def _is_risky_replay_document(fullpath: Path, content_type: str) -> bool: | CODE |
| LOW | archivebox/misc/serve_static.py | 677 | def _apply_archive_replay_headers( | CODE |
| LOW | archivebox/misc/serve_static.py | 718 | def serve_static_with_byterange_support(request, path, document_root=None, show_indexes=False, is_archive_replay: bool = | CODE |
| LOW | archivebox/core/admin_archiveresults.py | 39 | def build_abx_dl_display_command(result: ArchiveResult) -> str: | CODE |
| LOW | archivebox/core/admin_archiveresults.py | 50 | def build_abx_dl_replay_command(result: ArchiveResult, config=None) -> str: | CODE |
| LOW | archivebox/core/admin_archiveresults.py | 84 | def render_archiveresults_list(archiveresults_qs, limit=50, config=None): | CODE |
| LOW | archivebox/core/admin_archiveresults.py | 341 | def get_parent_object_from_request(self, request): | STRING |
| LOW⚡ | archivebox/core/models.py | 791 | def get_delete_after_config_value(self): | CODE |
| LOW⚡ | archivebox/core/models.py | 797 | def missing_delete_at_candidates(cls): | CODE |
| LOW⚡ | archivebox/core/models.py | 803 | def is_archivebox_internal_url(cls, url: str, *, config: Mapping[str, Any] | Any | None = None) -> bool: | CODE |
| LOW⚡ | archivebox/core/models.py | 2071 | def move_directory_to_invalid(snapshot_dir: Path): | CODE |
| LOW⚡ | archivebox/core/models.py | 3462 | def get_detail_page_auxiliary_items( | CODE |
| 1321 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | old/TODO_fs_migrations.md | 301 | # ========================================================================= | COMMENT |
| MEDIUM⚡ | old/TODO_fs_migrations.md | 303 | # ========================================================================= | COMMENT |
| MEDIUM⚡ | old/TODO_fs_migrations.md | 460 | # ========================================================================= | COMMENT |
| MEDIUM⚡ | old/TODO_fs_migrations.md | 462 | # ========================================================================= | COMMENT |
| MEDIUM | old/TODO_fs_migrations.md | 79 | # ========================================================================= | COMMENT |
| MEDIUM | old/TODO_fs_migrations.md | 81 | # ========================================================================= | COMMENT |
| MEDIUM | old/TODO_fs_migrations.md | 145 | # ========================================================================= | COMMENT |
| MEDIUM | old/TODO_fs_migrations.md | 147 | # ========================================================================= | COMMENT |
| MEDIUM | old/TODO_archivebox_jsonl_cli.md | 467 | # ============================================================================= | COMMENT |
| MEDIUM | old/TODO_archivebox_jsonl_cli.md | 469 | # ============================================================================= | COMMENT |
| MEDIUM | old/TODO_archivebox_jsonl_cli.md | 532 | # ============================================================================= | COMMENT |
| MEDIUM | old/TODO_archivebox_jsonl_cli.md | 534 | # ============================================================================= | COMMENT |
| MEDIUM | old/TODO_archivebox_jsonl_cli.md | 574 | # ============================================================================= | COMMENT |
| MEDIUM | old/TODO_archivebox_jsonl_cli.md | 576 | # ============================================================================= | COMMENT |
| MEDIUM | old/TODO_archivebox_jsonl_cli.md | 619 | # ============================================================================= | COMMENT |
| MEDIUM | old/TODO_archivebox_jsonl_cli.md | 621 | # ============================================================================= | COMMENT |
| MEDIUM | old/TODO_archivebox_jsonl_cli.md | 636 | # ============================================================================= | COMMENT |
| MEDIUM | old/TODO_archivebox_jsonl_cli.md | 638 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | archivebox/core/models.py | 1269 | # ========================================================================= | COMMENT |
| MEDIUM⚡ | archivebox/core/models.py | 1271 | # ========================================================================= | COMMENT |
| MEDIUM⚡ | archivebox/core/models.py | 2066 | # ========================================================================= | COMMENT |
| MEDIUM⚡ | archivebox/core/models.py | 2068 | # ========================================================================= | COMMENT |
| MEDIUM⚡ | archivebox/core/models.py | 3458 | # ========================================================================= | COMMENT |
| MEDIUM⚡ | archivebox/core/models.py | 3460 | # ========================================================================= | COMMENT |
| MEDIUM | archivebox/core/models.py | 286 | # ========================================================================= | COMMENT |
| MEDIUM | archivebox/core/models.py | 288 | # ========================================================================= | COMMENT |
| MEDIUM | archivebox/core/models.py | 390 | # ========================================================================= | COMMENT |
| MEDIUM | archivebox/core/models.py | 392 | # ========================================================================= | COMMENT |
| MEDIUM | archivebox/core/models.py | 484 | # ========================================================================= | COMMENT |
| MEDIUM | archivebox/core/models.py | 486 | # ========================================================================= | COMMENT |
| MEDIUM | archivebox/core/models.py | 1055 | # ========================================================================= | COMMENT |
| MEDIUM | archivebox/core/models.py | 1057 | # ========================================================================= | COMMENT |
| MEDIUM | archivebox/core/models.py | 1327 | # ========================================================================= | COMMENT |
| MEDIUM | archivebox/core/models.py | 1329 | # ========================================================================= | COMMENT |
| MEDIUM | archivebox/core/models.py | 1611 | # ========================================================================= | COMMENT |
| MEDIUM | archivebox/core/models.py | 1613 | # ========================================================================= | COMMENT |
| MEDIUM | archivebox/core/models.py | 2168 | # ========================================================================= | COMMENT |
| MEDIUM | archivebox/core/models.py | 2170 | # ========================================================================= | COMMENT |
| MEDIUM | archivebox/core/models.py | 3020 | # ========================================================================= | COMMENT |
| MEDIUM | archivebox/core/models.py | 3022 | # ========================================================================= | COMMENT |
| MEDIUM | archivebox/core/models.py | 3081 | # ========================================================================= | COMMENT |
| MEDIUM | archivebox/core/models.py | 3083 | # ========================================================================= | COMMENT |
| MEDIUM | archivebox/core/models.py | 3133 | # ========================================================================= | COMMENT |
| MEDIUM | archivebox/core/models.py | 3135 | # ========================================================================= | COMMENT |
| MEDIUM | archivebox/core/models.py | 3329 | # ========================================================================= | COMMENT |
| MEDIUM | archivebox/core/models.py | 3331 | # ========================================================================= | COMMENT |
| MEDIUM | archivebox/core/models.py | 3532 | # ============================================================================= | COMMENT |
| MEDIUM | archivebox/core/models.py | 3534 | # ============================================================================= | COMMENT |
| MEDIUM | archivebox/core/models.py | 4804 | # ============================================================================= | COMMENT |
| MEDIUM | archivebox/core/models.py | 4806 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | archivebox/plugins/hooks.py | 571 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | archivebox/plugins/hooks.py | 573 | # ============================================================================= | COMMENT |
| MEDIUM | archivebox/plugins/hooks.py | 83 | # ============================================================================= | COMMENT |
| MEDIUM | archivebox/plugins/hooks.py | 85 | # ============================================================================= | COMMENT |
| MEDIUM | archivebox/tests/conftest.py | 123 | # ============================================================================= | COMMENT |
| MEDIUM | archivebox/tests/conftest.py | 125 | # ============================================================================= | COMMENT |
| MEDIUM | archivebox/tests/conftest.py | 294 | # ============================================================================= | COMMENT |
| MEDIUM | archivebox/tests/conftest.py | 296 | # ============================================================================= | COMMENT |
| MEDIUM | archivebox/tests/conftest.py | 1555 | # ============================================================================= | COMMENT |
| MEDIUM | archivebox/tests/conftest.py | 1557 | # ============================================================================= | COMMENT |
| 115 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | archivebox/misc/checks.py | 113 | print(" docker compose pull && docker compose up -d", file=sys.stderr) | CODE |
| HIGH | archivebox/misc/hashing.py | 253 | # "num_subpaths": null, | COMMENT |
| HIGH⚡ | archivebox/core/widgets.py | 532 | return window.updateHiddenField_id_config || null; | CODE |
| HIGH⚡ | archivebox/core/widgets.py | 532 | return window.updateHiddenField_id_config || null; | CODE |
| HIGH⚡ | archivebox/core/widgets.py | 538 | return null; | CODE |
| HIGH⚡ | archivebox/core/widgets.py | 542 | return keyInput && keyInput.value.trim() === key; | CODE |
| HIGH⚡ | archivebox/core/widgets.py | 544 | return matches.length ? matches[0] : null; | CODE |
| HIGH⚡ | archivebox/core/widgets.py | 551 | return rows ? rows.lastElementChild : null; | CODE |
| HIGH⚡ | archivebox/core/widgets.py | 553 | return null; | CODE |
| HIGH⚡ | archivebox/core/widgets.py | 618 | if (!domain || seen[domain]) {{ | CODE |
| HIGH⚡ | archivebox/core/widgets.py | 623 | domains.push(domain); | CODE |
| HIGH⚡ | archivebox/core/widgets.py | 627 | var hostAndPort = String(parsed.host || parsed.hostname || '').toLowerCase(); | CODE |
| HIGH⚡ | archivebox/core/widgets.py | 629 | if (!hostAndPort || seen[pathKey]) {{ | CODE |
| HIGH⚡ | archivebox/core/widgets.py | 633 | paths.push({{ host: hostAndPort, path: pathname }}); | CODE |
| HIGH | archivebox/core/widgets.py | 134 | onkeypress="if(event.key==='Enter' || event.keyCode===13 || event.key===' ' || event.code==='Space' | | CODE |
| HIGH | archivebox/core/widgets.py | 144 | var autocompleteTimeout_{widget_id} = null; | CODE |
| HIGH | archivebox/core/widgets.py | 181 | if (!(options && options.skipHiddenUpdate)) {{ | CODE |
| HIGH | archivebox/core/widgets.py | 325 | if (isEnter || isSpace || isComma) {{ | CODE |
| HIGH | archivebox/core/widgets.py | 335 | }} else if (event.key === 'Backspace' && !value && currentTags_{widget_id}.length > 0) {{ | CODE |
| HIGH | archivebox/core/widgets.py | 349 | if (!query || query.length < 1) {{ | CODE |
| HIGH | archivebox/core/widgets.py | 471 | if (!trimmed || trimmed.charAt(0) === '#') {{ | CODE |
| HIGH | archivebox/core/widgets.py | 513 | if (!pathname || pathname === '/') {{ | CODE |
| HIGH | archivebox/core/widgets.py | 607 | var seen = Object.create(null); | CODE |
| HIGH | archivebox/core/admin_snapshots.py | 998 | "this.dataset.fallbacks && this.dataset.fallbacks.length ? " | CODE |
| HIGH | archivebox/core/admin_snapshots.py | 1025 | "this.dataset.fallbacks && this.dataset.fallbacks.length ? " | CODE |
| HIGH⚡ | archivebox/tests/test_server_security_browser.py | 37 | finalUrl: null, | CODE |
| HIGH⚡ | archivebox/tests/test_server_security_browser.py | 38 | status: null, | CODE |
| HIGH⚡ | archivebox/tests/test_server_security_browser.py | 39 | error: null, | CODE |
| HIGH⚡ | archivebox/tests/test_server_security_browser.py | 48 | result.status = response ? response.status() : null; | CODE |
| HIGH⚡ | archivebox/tests/test_server_security_browser.py | 94 | consoleMessages.push({type: message.type(), text: message.text()}); | CODE |
| HIGH⚡ | archivebox/tests/test_server_security_browser.py | 97 | consoleMessages.push({type: "pageerror", text: String(error)}); | CODE |
| HIGH⚡ | archivebox/tests/test_server_security_browser.py | 100 | requestFailures.push({ | CODE |
| HIGH⚡ | archivebox/tests/test_server_security_browser.py | 112 | () => window.__dangerousScriptRan !== true || window.__probeResults !== undefined, | CODE |
| HIGH⚡ | archivebox/tests/test_server_security_browser.py | 112 | () => window.__dangerousScriptRan !== true || window.__probeResults !== undefined, | CODE |
| HIGH⚡ | archivebox/tests/test_server_security_browser.py | 119 | probeResults: window.__probeResults || null, | CODE |
| HIGH⚡ | archivebox/tests/test_server_security_browser.py | 119 | probeResults: window.__probeResults || null, | CODE |
| HIGH⚡ | archivebox/tests/test_server_security_browser.py | 127 | status: response ? response.status() : null, | CODE |
| HIGH⚡ | archivebox/tests/test_server_security_browser.py | 129 | contentSecurityPolicy: response ? response.headers()["content-security-policy"] || null : null, | CODE |
| HIGH⚡ | archivebox/tests/test_server_security_browser.py | 130 | archiveboxSecurityMode: response ? response.headers()["x-archivebox-security-mode"] || null : null, | CODE |
| HIGH⚡ | archivebox/tests/test_server_security_browser.py | 224 | consoleMessages.push({type: message.type(), text: message.text()}); | CODE |
| HIGH⚡ | archivebox/tests/test_server_security_browser.py | 227 | consoleMessages.push({type: "pageerror", text: String(error)}); | CODE |
| HIGH⚡ | archivebox/tests/test_server_security_browser.py | 230 | requestFailures.push({ | CODE |
| HIGH | archivebox/tests/test_server_security_browser.py | 166 | return body || root || ""; | CODE |
| HIGH | archivebox/tests/test_server_security_browser.py | 186 | lastState.push({ | CODE |
| HIGH | archivebox/tests/test_server_security_browser.py | 193 | if (previewFrame && (frame === previewFrame || isDescendantOf(frame, previewFrame)) && text.includes(expectedText) | CODE |
| HIGH | archivebox/tests/test_server_security_browser.py | 244 | status: response ? response.status() : null, | CODE |
| HIGH | archivebox/tests/test_hooks.py | 9 | sudo -u testuser bash -c 'source .venv/bin/activate && python -m pytest archivebox/tests/test_hooks.py -v' | STRING |
| HIGH | archivebox/crawls/admin.py | 314 | var cookieValue = null; | STRING |
| HIGH⚡ | archivebox/base_models/admin.py | 170 | if (!meta || meta.type === undefined || meta.type === null) {{ | CODE |
| HIGH⚡ | archivebox/base_models/admin.py | 170 | if (!meta || meta.type === undefined || meta.type === null) {{ | CODE |
| HIGH⚡ | archivebox/base_models/admin.py | 178 | return null; | CODE |
| HIGH⚡ | archivebox/base_models/admin.py | 224 | if (meta.minimum !== undefined || meta.maximum !== undefined) {{ | CODE |
| HIGH⚡ | archivebox/base_models/admin.py | 224 | if (meta.minimum !== undefined || meta.maximum !== undefined) {{ | CODE |
| HIGH⚡ | archivebox/base_models/admin.py | 226 | if (meta.minimum !== undefined) bounds.push('min ' + meta.minimum); | CODE |
| HIGH⚡ | archivebox/base_models/admin.py | 226 | if (meta.minimum !== undefined) bounds.push('min ' + meta.minimum); | CODE |
| HIGH⚡ | archivebox/base_models/admin.py | 227 | if (meta.maximum !== undefined) bounds.push('max ' + meta.maximum); | CODE |
| HIGH⚡ | archivebox/base_models/admin.py | 227 | if (meta.maximum !== undefined) bounds.push('max ' + meta.maximum); | CODE |
| HIGH⚡ | archivebox/base_models/admin.py | 352 | return left === right || JSON.stringify(left) === JSON.stringify(right); | CODE |
| HIGH⚡ | archivebox/base_models/admin.py | 359 | if (typeName && meta && meta.key && isRegexConfigKey_{widget_id}(meta.key)) {{ | CODE |
| HIGH⚡ | archivebox/base_models/admin.py | 363 | if (typeName === 'string' && meta && meta.key && meta.key.endsWith('_BINARY')) {{ | CODE |
| 18 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | bin/test_plugins.sh | 71 | except Exception: | CODE |
| MEDIUM | old/TODO_fs_migrations.md | 252 | def is_valid_timestamp(ts): | CODE |
| LOW | old/TODO_fs_migrations.md | 110 | except Exception: | CODE |
| LOW | old/TODO_fs_migrations.md | 673 | except Exception as e: | CODE |
| LOW | old/TODO_fs_migrations.md | 1153 | except Exception: | CODE |
| LOW | old/TODO_process_tracking.md | 1405 | except Exception as e: | CODE |
| LOW | old/TODO_hook_architecture.md | 145 | except Exception: | CODE |
| LOW | old/TODO_hook_architecture.md | 232 | except Exception as e: | CODE |
| LOW | old/TODO_hook_architecture.md | 1102 | except Exception as e: | CODE |
| LOW | docs/conf.py | 49 | except Exception: | CODE |
| LOW | .github/workflows/pip.yml | 72 | except Exception: | CODE |
| LOW | .github/workflows/docker.yml | 74 | except Exception: | CODE |
| LOW | archivebox/misc/db.py | 75 | except Exception: | CODE |
| LOW⚡ | archivebox/misc/db.py | 89 | except Exception: | CODE |
| LOW⚡ | archivebox/misc/db.py | 95 | except Exception: | CODE |
| LOW⚡ | archivebox/misc/db.py | 104 | except Exception: | CODE |
| LOW | archivebox/misc/db.py | 359 | except Exception as err: | CODE |
| LOW⚡ | archivebox/misc/util.py | 522 | except Exception: | CODE |
| LOW⚡ | archivebox/misc/util.py | 527 | except Exception: | CODE |
| LOW⚡ | archivebox/misc/util.py | 532 | except Exception: | CODE |
| LOW | archivebox/misc/checks.py | 49 | except Exception: | CODE |
| LOW | archivebox/misc/checks.py | 272 | except Exception: | CODE |
| LOW | archivebox/misc/checks.py | 277 | except Exception: | CODE |
| LOW | archivebox/misc/checks.py | 325 | except Exception as e: | CODE |
| LOW | archivebox/misc/checks.py | 378 | except Exception as e: | CODE |
| MEDIUM | archivebox/misc/checks.py | 46 | def handle_shutdown(_signum, _frame): | CODE |
| LOW | archivebox/misc/logging_util.py | 72 | except Exception: | CODE |
| LOW | archivebox/misc/toml_util.py | 32 | except Exception: | CODE |
| LOW | archivebox/misc/toml_util.py | 37 | except Exception: | CODE |
| LOW | archivebox/misc/toml_util.py | 101 | except Exception: | CODE |
| LOW | archivebox/misc/serve_static.py | 52 | except Exception: | CODE |
| LOW | archivebox/misc/serve_static.py | 493 | except Exception: | CODE |
| LOW | archivebox/misc/serve_static.py | 671 | except Exception: | CODE |
| LOW | archivebox/misc/serve_static.py | 838 | except Exception: | CODE |
| LOW | archivebox/misc/serve_static.py | 866 | except Exception: | CODE |
| LOW | archivebox/misc/serve_static.py | 894 | except Exception: | CODE |
| LOW | archivebox/misc/serve_static.py | 927 | except Exception: | CODE |
| LOW | archivebox/misc/serve_static.py | 980 | except Exception: | CODE |
| LOW | archivebox/core/admin_archiveresults.py | 131 | except Exception: | CODE |
| LOW⚡ | archivebox/core/models.py | 1264 | except Exception as e: | CODE |
| LOW | archivebox/core/models.py | 235 | except Exception: | CODE |
| LOW | archivebox/core/models.py | 1250 | except Exception as e: | CODE |
| LOW | archivebox/core/models.py | 1300 | except Exception: | CODE |
| LOW | archivebox/core/models.py | 2091 | except Exception: | CODE |
| LOW | archivebox/core/models.py | 2116 | except Exception: | CODE |
| LOW | archivebox/core/models.py | 2152 | except Exception: | CODE |
| LOW | archivebox/core/models.py | 2381 | except Exception: | CODE |
| LOW | archivebox/core/models.py | 2542 | except Exception: | CODE |
| LOW | archivebox/core/models.py | 2559 | except Exception: | CODE |
| LOW | archivebox/core/models.py | 4664 | except Exception: | CODE |
| LOW | archivebox/core/settings_logging.py | 100 | except Exception: | CODE |
| LOW | archivebox/core/admin_snapshots.py | 518 | except Exception as e: | CODE |
| LOW | archivebox/core/admin_snapshots.py | 1357 | except Exception: | CODE |
| MEDIUM | archivebox/core/admin_snapshots.py | 1321 | def _get_expected_hook_total(self, obj) -> int: | CODE |
| LOW | archivebox/core/settings.py | 382 | except Exception: | CODE |
| LOW | archivebox/core/settings.py | 389 | except Exception: | CODE |
| LOW⚡ | archivebox/core/takeover_util.py | 134 | except Exception: | CODE |
| LOW | archivebox/core/views.py | 172 | except Exception: | CODE |
| LOW | archivebox/core/views.py | 867 | except Exception: | CODE |
| MEDIUM | archivebox/core/templatetags/core_tags.py | 94 | def _count_media_files(result) -> int: | CODE |
| 151 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | archivebox/tests/test_cli_add.py | 0 | <?xml version="1.0" encoding="utf-8"?> <rss version="2.0"> <channel> <title>archivebox rss import fixture</title> <link> | STRING |
| HIGH | archivebox/tests/test_api_v1_cli_add.py | 0 | <?xml version="1.0" encoding="utf-8"?> <rss version="2.0"> <channel> <title>archivebox rss import fixture</title> <link> | STRING |
| HIGH | archivebox/tests/test_ui_add_view_runtime.py | 0 | <?xml version="1.0" encoding="utf-8"?> <rss version="2.0"> <channel> <title>archivebox rss import fixture</title> <link> | STRING |
| HIGH | archivebox/tests/test_cli_add.py | 0 | <!doctype netscape-bookmark-file-1> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <title>bookmarks | STRING |
| HIGH | archivebox/tests/test_api_v1_cli_add.py | 0 | <!doctype netscape-bookmark-file-1> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <title>bookmarks | STRING |
| HIGH | archivebox/tests/test_ui_add_view_runtime.py | 0 | <!doctype netscape-bookmark-file-1> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <title>bookmarks | STRING |
| HIGH | archivebox/tests/test_cli_add.py | 0 | <!doctype html> <html> <head><title>dom import fixture</title></head> <body> <a href="https://www.iana.org/help/example- | STRING |
| HIGH | archivebox/tests/test_api_v1_cli_add.py | 0 | <!doctype html> <html> <head><title>dom import fixture</title></head> <body> <a href="https://www.iana.org/help/example- | STRING |
| HIGH | archivebox/tests/test_ui_add_view_runtime.py | 0 | <!doctype html> <html> <head><title>dom import fixture</title></head> <body> <a href="https://www.iana.org/help/example- | STRING |
| HIGH | archivebox/tests/test_cli_add.py | 0 | <?xml version="1.0"?> <!doctype rss [ <!entity localfile system "file:///etc/hosts"> ]> <rss version="2.0" xmlns:xi="htt | STRING |
| HIGH | archivebox/tests/test_api_v1_cli_add.py | 0 | <?xml version="1.0"?> <!doctype rss [ <!entity localfile system "file:///etc/hosts"> ]> <rss version="2.0" xmlns:xi="htt | STRING |
| HIGH | archivebox/tests/test_ui_add_view_runtime.py | 0 | <?xml version="1.0"?> <!doctype rss [ <!entity localfile system "file:///etc/hosts"> ]> <rss version="2.0" xmlns:xi="htt | STRING |
| HIGH | archivebox/tests/test_cli_persona.py | 0 | tests for archivebox binary command. todo: expand beyond command discovery into create/list/update/delete behavior. | STRING |
| HIGH | archivebox/tests/test_cli_tag.py | 0 | tests for archivebox binary command. todo: expand beyond command discovery into create/list/update/delete behavior. | STRING |
| HIGH | archivebox/tests/test_cli_binary.py | 0 | tests for archivebox binary command. todo: expand beyond command discovery into create/list/update/delete behavior. | STRING |
| HIGH | archivebox/cli/archivebox_archiveresult.py | 0 | list personas as jsonl with optional filters. exit codes: 0: success (even if no results) | STRING |
| HIGH | archivebox/cli/archivebox_process.py | 0 | list personas as jsonl with optional filters. exit codes: 0: success (even if no results) | STRING |
| HIGH | archivebox/cli/archivebox_tag.py | 0 | list personas as jsonl with optional filters. exit codes: 0: success (even if no results) | STRING |
| HIGH | archivebox/cli/archivebox_binary.py | 0 | list personas as jsonl with optional filters. exit codes: 0: success (even if no results) | STRING |
| HIGH | archivebox/cli/archivebox_snapshot.py | 0 | list personas as jsonl with optional filters. exit codes: 0: success (even if no results) | STRING |
| HIGH | archivebox/cli/archivebox_machine.py | 0 | list personas as jsonl with optional filters. exit codes: 0: success (even if no results) | STRING |
| HIGH | archivebox/cli/archivebox_crawl.py | 0 | list personas as jsonl with optional filters. exit codes: 0: success (even if no results) | STRING |
| HIGH | archivebox/cli/archivebox_persona.py | 0 | list personas as jsonl with optional filters. exit codes: 0: success (even if no results) | STRING |
| HIGH | archivebox/cli/archivebox_archiveresult.py | 0 | update personas from stdin jsonl. reads persona records from stdin and applies updates. uses patch semantics - only spec | STRING |
| HIGH | archivebox/cli/archivebox_tag.py | 0 | update personas from stdin jsonl. reads persona records from stdin and applies updates. uses patch semantics - only spec | STRING |
| HIGH | archivebox/cli/archivebox_binary.py | 0 | update personas from stdin jsonl. reads persona records from stdin and applies updates. uses patch semantics - only spec | STRING |
| HIGH | archivebox/cli/archivebox_snapshot.py | 0 | update personas from stdin jsonl. reads persona records from stdin and applies updates. uses patch semantics - only spec | STRING |
| HIGH | archivebox/cli/archivebox_crawl.py | 0 | update personas from stdin jsonl. reads persona records from stdin and applies updates. uses patch semantics - only spec | STRING |
| HIGH | archivebox/cli/archivebox_persona.py | 0 | update personas from stdin jsonl. reads persona records from stdin and applies updates. uses patch semantics - only spec | STRING |
| HIGH | archivebox/cli/archivebox_archiveresult.py | 0 | delete personas from stdin jsonl. requires --yes flag to confirm deletion. exit codes: 0: success 1: no input or missing | STRING |
| HIGH | archivebox/cli/archivebox_tag.py | 0 | delete personas from stdin jsonl. requires --yes flag to confirm deletion. exit codes: 0: success 1: no input or missing | STRING |
| HIGH | archivebox/cli/archivebox_binary.py | 0 | delete personas from stdin jsonl. requires --yes flag to confirm deletion. exit codes: 0: success 1: no input or missing | STRING |
| HIGH | archivebox/cli/archivebox_snapshot.py | 0 | delete personas from stdin jsonl. requires --yes flag to confirm deletion. exit codes: 0: success 1: no input or missing | STRING |
| HIGH | archivebox/cli/archivebox_crawl.py | 0 | delete personas from stdin jsonl. requires --yes flag to confirm deletion. exit codes: 0: success 1: no input or missing | STRING |
| HIGH | archivebox/cli/archivebox_persona.py | 0 | delete personas from stdin jsonl. requires --yes flag to confirm deletion. exit codes: 0: success 1: no input or missing | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | archivebox/misc/db.py | 190 | CODE | |
| LOW | archivebox/misc/system.py | 19 | CODE | |
| LOW | archivebox/misc/system.py | 57 | CODE | |
| LOW | archivebox/misc/util.py | 495 | CODE | |
| LOW | archivebox/misc/checks.py | 98 | CODE | |
| LOW | archivebox/misc/logging_util.py | 277 | CODE | |
| LOW | archivebox/misc/hashing.py | 156 | CODE | |
| LOW | archivebox/misc/serve_static.py | 485 | CODE | |
| LOW | archivebox/misc/serve_static.py | 718 | CODE | |
| LOW | archivebox/core/admin_archiveresults.py | 84 | CODE | |
| LOW | archivebox/core/models.py | 165 | CODE | |
| LOW | archivebox/core/models.py | 191 | CODE | |
| LOW | archivebox/core/models.py | 1274 | CODE | |
| LOW | archivebox/core/models.py | 1332 | CODE | |
| LOW | archivebox/core/models.py | 1432 | CODE | |
| LOW | archivebox/core/models.py | 1615 | CODE | |
| LOW | archivebox/core/models.py | 1713 | CODE | |
| LOW | archivebox/core/models.py | 1919 | CODE | |
| LOW | archivebox/core/models.py | 1960 | CODE | |
| LOW | archivebox/core/models.py | 2122 | CODE | |
| LOW | archivebox/core/models.py | 2374 | CODE | |
| LOW | archivebox/core/models.py | 2436 | CODE | |
| LOW | archivebox/core/models.py | 2680 | CODE | |
| LOW | archivebox/core/models.py | 3154 | CODE | |
| LOW | archivebox/core/models.py | 4008 | CODE | |
| LOW | archivebox/core/models.py | 4469 | CODE | |
| LOW | archivebox/core/widgets.py | 63 | CODE | |
| LOW | archivebox/core/widgets.py | 686 | CODE | |
| LOW | archivebox/core/forms.py | 36 | CODE | |
| LOW | archivebox/core/tag_util.py | 59 | CODE | |
| LOW | archivebox/core/admin_site.py | 123 | CODE | |
| LOW | archivebox/core/middleware.py | 116 | CODE | |
| LOW | archivebox/core/middleware.py | 190 | CODE | |
| LOW | archivebox/core/middleware.py | 120 | CODE | |
| LOW | archivebox/core/middleware.py | 195 | CODE | |
| LOW | archivebox/core/views.py | 475 | CODE | |
| LOW | archivebox/core/views.py | 683 | CODE | |
| LOW | archivebox/core/views.py | 1228 | CODE | |
| LOW | archivebox/core/templatetags/core_tags.py | 125 | CODE | |
| LOW | archivebox/core/sqlite_backend/base.py | 25 | CODE | |
| LOW | archivebox/config/django.py | 34 | CODE | |
| LOW | archivebox/config/paths.py | 44 | CODE | |
| LOW | archivebox/config/common.py | 168 | CODE | |
| LOW | archivebox/config/common.py | 459 | CODE | |
| LOW | archivebox/config/common.py | 994 | CODE | |
| LOW | archivebox/config/collection.py | 215 | CODE | |
| LOW | archivebox/config/views.py | 62 | CODE | |
| LOW | archivebox/config/views.py | 225 | CODE | |
| LOW | archivebox/plugins/hooks.py | 244 | CODE | |
| LOW | archivebox/plugins/hooks.py | 527 | CODE | |
| LOW | archivebox/plugins/hooks.py | 576 | CODE | |
| LOW | archivebox/plugins/discovery.py | 116 | CODE | |
| LOW | archivebox/plugins/forms.py | 348 | CODE | |
| LOW | archivebox/plugins/views.py | 261 | CODE | |
| LOW | archivebox/tests/conftest.py | 542 | CODE | |
| LOW | archivebox/tests/test_search.py | 700 | CODE | |
| LOW | archivebox/tests/test_cli_run.py | 600 | CODE | |
| LOW | archivebox/tests/test_cli_run.py | 1576 | CODE | |
| LOW | archivebox/tests/test_cli_run.py | 620 | CODE | |
| LOW | archivebox/tests/test_server_security_browser.py | 558 | CODE | |
| 74 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | archivebox/core/admin_archiveresults.py | 17 | from django.core.exceptions import ValidationError | CODE |
| CRITICAL⚡ | archivebox/core/recovery_util.py | 18 | from django.core.exceptions import ValidationError | CODE |
| CRITICAL | archivebox/tests/test_snapshot_url_length.py | 9 | from django.core.exceptions import ValidationError | CODE |
| CRITICAL | archivebox/crawls/models.py | 17 | from django.core.exceptions import ValidationError | CODE |
| CRITICAL | archivebox/api/v1_core.py | 18 | from django.core.exceptions import ValidationError | CODE |
| CRITICAL | archivebox/templates/static/jquery-3.7.1.slim.min.js | 2 | !function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):f | CODE |
| CRITICAL | archivebox/templates/static/jquery.min.js | 2 | !function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):f | CODE |
| CRITICAL | archivebox/services/snapshot_service.py | 7 | from django.core.exceptions import ValidationError | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | archivebox/__main__.py | 6 | CODE | |
| LOW | archivebox/misc/shell_welcome_message.py | 6 | CODE | |
| LOW | archivebox/misc/shell_welcome_message.py | 7 | CODE | |
| LOW | archivebox/misc/shell_welcome_message.py | 8 | CODE | |
| LOW | archivebox/misc/shell_welcome_message.py | 9 | CODE | |
| LOW | archivebox/misc/shell_welcome_message.py | 10 | CODE | |
| LOW | archivebox/misc/shell_welcome_message.py | 11 | CODE | |
| LOW | archivebox/misc/shell_welcome_message.py | 12 | CODE | |
| LOW | archivebox/misc/shell_welcome_message.py | 13 | CODE | |
| LOW | archivebox/misc/shell_welcome_message.py | 14 | CODE | |
| LOW | archivebox/misc/shell_welcome_message.py | 16 | CODE | |
| LOW | archivebox/misc/shell_welcome_message.py | 17 | CODE | |
| LOW | archivebox/misc/shell_welcome_message.py | 17 | CODE | |
| LOW | archivebox/misc/shell_welcome_message.py | 19 | CODE | |
| LOW | archivebox/misc/shell_welcome_message.py | 20 | CODE | |
| LOW | archivebox/misc/shell_welcome_message.py | 22 | CODE | |
| LOW | archivebox/core/models.py | 63 | CODE | |
| LOW | archivebox/core/routes_util.py | 1 | CODE | |
| LOW | archivebox/core/apps.py | 26 | CODE | |
| LOW | archivebox/core/tag_util.py | 1 | CODE | |
| LOW | archivebox/core/shutdown_util.py | 1 | CODE | |
| LOW | archivebox/core/admin_site.py | 26 | CODE | |
| LOW | archivebox/core/admin_site.py | 27 | CODE | |
| LOW | archivebox/core/admin_site.py | 28 | CODE | |
| LOW | archivebox/core/admin_site.py | 28 | CODE | |
| LOW | archivebox/core/admin_site.py | 30 | CODE | |
| LOW | archivebox/core/settings.py | 597 | CODE | |
| LOW | archivebox/core/settings.py | 631 | CODE | |
| LOW | archivebox/core/permissions.py | 1 | CODE | |
| LOW | archivebox/core/recovery_util.py | 1 | CODE | |
| LOW | archivebox/core/takeover_util.py | 1 | CODE | |
| LOW | archivebox/core/wsgi.py | 10 | CODE | |
| LOW | archivebox/core/sqlite_backend/base.py | 1 | CODE | |
| LOW | archivebox/config/django.py | 53 | CODE | |
| LOW | archivebox/config/paths.py | 17 | CODE | |
| LOW | archivebox/config/common.py | 1 | CODE | |
| LOW | archivebox/tests/test_server_security_browser.py | 4 | CODE | |
| LOW | archivebox/crawls/schedule_util.py | 1 | CODE | |
| LOW | archivebox/crawls/apps.py | 15 | CODE | |
| LOW | archivebox/cli/archivebox_update.py | 2 | CODE | |
| LOW | archivebox/cli/archivebox_add.py | 2 | CODE | |
| LOW | archivebox/search/sonic_daemon.py | 1 | CODE | |
| LOW | archivebox/personas/importers.py | 8 | CODE | |
| LOW | archivebox/machine/models.py | 1 | CODE | |
| LOW | archivebox/machine/apps.py | 19 | CODE | |
| LOW | archivebox/services/binary_service.py | 1 | CODE | |
| LOW | archivebox/services/runner.py | 1 | CODE | |
| LOW | archivebox/services/process_service.py | 1 | CODE | |
| LOW | archivebox/services/crawl_service.py | 1 | CODE | |
| LOW | archivebox/services/tag_service.py | 1 | CODE | |
| LOW | archivebox/services/__init__.py | 1 | CODE | |
| LOW | archivebox/services/__init__.py | 2 | CODE | |
| LOW | archivebox/services/__init__.py | 2 | CODE | |
| LOW | archivebox/services/__init__.py | 3 | CODE | |
| LOW | archivebox/services/__init__.py | 4 | CODE | |
| LOW | archivebox/services/__init__.py | 5 | CODE | |
| LOW | archivebox/services/__init__.py | 6 | CODE | |
| LOW | archivebox/services/__init__.py | 6 | CODE | |
| LOW | archivebox/services/__init__.py | 6 | CODE | |
| LOW | archivebox/services/__init__.py | 6 | CODE | |
| 5 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | docker-compose.yml | 21 | # - ADMIN_USERNAME=admin # creates an admin user on first run with the given use | COMMENT |
| LOW | docker-compose.yml | 41 | # are processed by the main container without needing a separate scheduler sidecar. To add a new job: | COMMENT |
| LOW | docker-compose.yml | 61 | # - novnc | COMMENT |
| LOW | docker-compose.yml | 161 | COMMENT | |
| LOW | docker-compose.yml | 221 | else | COMMENT |
| LOW | docker-compose.yml | 241 | COMMENT | |
| LOW | docker-compose.yml | 261 | # drive_id = 1234567... | COMMENT |
| LOW | bin/setup.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | bin/export_browser_history.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | bin/docker_entrypoint.sh | 1 | #!/bin/bash | COMMENT |
| LOW | bin/test_plugins.sh | 1 | #!/bin/bash | COMMENT |
| LOW | old/archivebox.ts | 81 | // 'https://browserleaks.com/canvas', | COMMENT |
| LOW | old/archivebox.ts | 101 | // 'https://docker-compose.archivebox.io', | COMMENT |
| LOW | old/archivebox.ts | 121 | // 'https://facebook.com/815781663692514/?comment_id=924451748966499', | COMMENT |
| LOW | old/archivebox.ts | 221 | isLandscape: false, | COMMENT |
| LOW | old/archivebox.ts | 261 | // { | COMMENT |
| LOW | old/archivebox.ts | 321 | // if (snap_id.startsWith('.')) continue | COMMENT |
| LOW | old/archivebox.ts | 341 | // if (fs.existsSync(dest_path)) { | COMMENT |
| LOW | old/archivebox.ts | 361 | COMMENT | |
| LOW | old/archivebox.ts | 481 | {webstore_id: 'ifibfemgeogfhoebkmokieepdoobkbpo', name: 'twocaptcha'}, // https://2captcha.com/blog/ | COMMENT |
| LOW | old/archivebox.ts | 661 | '--autoplay-policy=no-user-gesture-required', // auto-start videos so they trigger network requests + show up i | COMMENT |
| LOW | old/archivebox.ts | 1761 | if (snapshot_entry.sha256 == version_entry.sha256) { | COMMENT |
| LOW | old/archivebox.ts | 1781 | // mv ./data/archive/<snap_id>/example.txt -> ./data/archive/<snap_id>/versions/<version_id>/example.txt | COMMENT |
| LOW | old/archivebox.ts | 2101 | // ffmpeg_Path: '<path of ffmpeg_path>' || null, | COMMENT |
| LOW | old/archivebox.ts | 2421 | // await page.setCookie(...cookies) | COMMENT |
| LOW | old/archivebox.ts | 3121 | const recorder = page_state.recorder | COMMENT |
| LOW | old/archivebox.ts | 3241 | // const screenshot_jpg = SCREENSHOT_JPG_PATH(page) | COMMENT |
| LOW | old/archivebox.ts | 3261 | // cropped_bytes[idx + 1] = this.data[idx + 1]; | COMMENT |
| LOW | old/archivebox.ts | 3501 | // spawn( | COMMENT |
| LOW | old/archivebox.ts | 4541 | COMMENT | |
| LOW | old/archivebox.ts | 5341 | COMMENT | |
| LOW | old/archivebox.ts | 5361 | // mimeType: 'inode/directory' | COMMENT |
| LOW | old/archivebox.ts | 5461 | // { | COMMENT |
| LOW | old/archivebox.ts | 5501 | // example: detectFilename({url: 'https://example.com/favicon.png', extension: 'ico'}) outputs 'favicon.ico' | COMMENT |
| LOW | old/archivebox.ts | 6041 | COMMENT | |
| LOW | old/archivebox.ts | 6061 | // video: true, | COMMENT |
| LOW | docs/.readthedocs.yaml | 1 | # Read the Docs configuration file for ArchiveBox docs | COMMENT |
| LOW | .github/workflows/codeql.yml | 1 | # For most projects, this workflow file will not need changing; you simply need | COMMENT |
| LOW | archivebox/misc/hashing.py | 241 | # "mime_type": "inode/directory", | COMMENT |
| LOW | archivebox/core/models.py | 1041 | # from archivebox.misc.logging_util import log_worker_event | COMMENT |
| LOW | archivebox/core/models.py | 4041 | # Moving an ArchiveResult between Snapshots is rare and cannot | COMMENT |
| LOW | archivebox/core/models.py | 4061 | ) | COMMENT |
| LOW | archivebox/core/asgi.py | 81 | # from archivebox.core.routing import websocket_urlpatterns | COMMENT |
| LOW | archivebox/core/admin_snapshots.py | 761 | # ''' | COMMENT |
| LOW | archivebox/core/settings.py | 181 | CUSTOM_TEMPLATES_ENABLED = os.path.isdir(CONSTANTS.CUSTOM_TEMPLATES_DIR) and os.access(CONSTANTS.CUSTOM_TEMPLATES_DIR, o | COMMENT |
| LOW | archivebox/core/settings.py | 281 | # Django requires DEFAULT_AUTO_FIELD to subclass AutoField (BigAutoField, SmallAutoField, etc.) | COMMENT |
| LOW | archivebox/core/settings.py | 301 | # return 'default' | COMMENT |
| LOW | archivebox/core/settings.py | 341 | "location": CONSTANTS.ARCHIVE_DIR, | COMMENT |
| LOW | archivebox/core/settings.py | 361 | COMMENT | |
| LOW | archivebox/core/settings.py | 421 | SECURE_REFERRER_POLICY = "strict-origin-when-cross-origin" | COMMENT |
| LOW | archivebox/core/urls.py | 101 | COMMENT | |
| LOW | archivebox/core/urls.py | 121 | # path('api/v1/core/archiveresult', [GET, POST, PUT]), | COMMENT |
| LOW | archivebox/config/version.py | 121 | # the recommended upgrade version and the currently installed version | COMMENT |
| LOW | archivebox/config/version.py | 141 | # current_version = None | COMMENT |
| LOW | archivebox/tests/test_archiveresult_pause.py | 1 | # test_crawl_pause_resume_api_cascades_archiveresults_and_leaves_finished_snapshot_results_alone moved to test_api_v1_cr | COMMENT |
| LOW | archivebox/crawls/models.py | 341 | # if is_new: | COMMENT |
| LOW | archivebox/cli/archivebox_remove.py | 81 | started_at = time.monotonic() | COMMENT |
| LOW | archivebox/machine/detect.py | 61 | pass | COMMENT |
| LOW | archivebox/machine/detect.py | 301 | # 'os_arch': 'arm64', | COMMENT |
| LOW | archivebox/machine/detect.py | 321 | # 'cpu_boot_time': '2024-09-24T21:20:16', | COMMENT |
| 7 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | old/TODO_hook_concurrency.md | 94 | ### Step 0: Pre-Setup | COMMENT |
| LOW⚡ | old/TODO_hook_concurrency.md | 99 | ### Step 1: Chrome Launch & Tab Creation | COMMENT |
| LOW⚡ | old/TODO_hook_concurrency.md | 106 | ### Step 2: Navigation & Settlement | COMMENT |
| LOW⚡ | old/TODO_hook_concurrency.md | 114 | ### Step 3: Page Adjustment | COMMENT |
| LOW⚡ | old/TODO_hook_concurrency.md | 124 | ### Step 4: Ready for Archiving | COMMENT |
| LOW⚡ | old/TODO_hook_concurrency.md | 131 | ### Step 5: DOM Extraction (Sequential, Non-BG) | COMMENT |
| LOW | old/TODO_hook_concurrency.md | 147 | ### Step 6: Post-DOM Extraction | COMMENT |
| LOW⚡ | old/TODO_hook_concurrency.md | 158 | ### Step 7: Chrome Cleanup | COMMENT |
| LOW⚡ | old/TODO_hook_concurrency.md | 165 | ### Step 8: Post-Processing | COMMENT |
| LOW⚡ | old/TODO_hook_concurrency.md | 174 | ### Step 9: Indexing & Finalization | COMMENT |
| LOW | old/TODO_hook_concurrency.md | 361 | # Step 5: DOM Extraction (sequential, non-background) | COMMENT |
| LOW | old/TODO_hook_concurrency.md | 372 | # Step 6: Post-DOM Extraction (background for long-running) | COMMENT |
| LOW | old/TODO_hook_concurrency.md | 380 | # Step 7: URL Extraction (parse_* hooks moved from step 6) | COMMENT |
| LOW | old/TODO_hook_architecture.md | 1693 | ### Step 1: Create migration | STRING |
| LOW⚡ | old/TODO_hook_architecture.md | 1704 | ### Step 3: Update run_hook() (Phase 5) | STRING |
| LOW⚡ | old/TODO_hook_architecture.md | 1710 | ### Step 4: Update ArchiveResult.run() (Phase 6) | STRING |
| LOW⚡ | old/TODO_hook_architecture.md | 1718 | ### Step 5: Add finalization helpers (Phase 7) | STRING |
| LOW⚡ | old/TODO_hook_architecture.md | 1723 | ### Step 6: Update SnapshotMachine.is_finished() (Phase 7) | STRING |
| LOW⚡ | old/TODO_hook_architecture.md | 1727 | ### Step 7: Rename background hooks (Phase 7) | STRING |
| LOW⚡ | old/TODO_hook_architecture.md | 1730 | ### Step 8: Test | STRING |
| LOW | old/TODO_Process_cleanup_unification.md | 192 | ### Step 1: Update Process.launch() (DONE - already exists) | COMMENT |
| LOW | old/TODO_Process_cleanup_unification.md | 195 | ### Step 2: Refactor run_hook() to use Process.launch() | COMMENT |
| LOW | old/TODO_Process_cleanup_unification.md | 234 | ### Step 3: Update SnapshotWorker to use Process methods | COMMENT |
| LOW | old/TODO_Process_cleanup_unification.md | 239 | ### Step 4: Update ArchiveResult.run() to use new run_hook() | COMMENT |
| LOW | old/TODO_Process_cleanup_unification.md | 263 | ### Step 5: Update Crawl.run() similarly | COMMENT |
| LOW⚡ | archivebox/machine/models.py | 2220 | # Step 1: Send SIGTERM for graceful shutdown | COMMENT |
| LOW⚡ | archivebox/machine/models.py | 2223 | # Step 2: Wait for graceful exit | COMMENT |
| LOW | archivebox/machine/models.py | 2236 | # Step 3: Force kill with SIGKILL | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | bin/kill_chrome.sh | 50 | # Check if still alive | COMMENT |
| LOW | bin/kill_chrome.sh | 59 | # Check if it's a zombie/uninterruptible process BEFORE trying to kill | COMMENT |
| LOW | bin/build_docker.sh | 110 | # Check if docker is ready for cross-plaform builds, if not, recreate builder | COMMENT |
| LOW | bin/docker_entrypoint.sh | 84 | # Check if user attempted to run it in the root of their home folder or hard drive (common mistake) | COMMENT |
| LOW | bin/test_plugins.sh | 264 | # Check if there are any Python test files | COMMENT |
| LOW | archivebox/core/models.py | 2920 | # Check if any ARs are still pending/started | COMMENT |
| LOW | archivebox/core/models.py | 2970 | # Check if sealed | COMMENT |
| LOW | archivebox/plugins/hooks.py | 227 | # Check if this is a plugin directory (not the root plugins dir) | COMMENT |
| LOW | archivebox/plugins/hooks.py | 616 | # Check if discovered snapshot exceeds crawl max_depth | COMMENT |
| LOW | archivebox/mcp/server.py | 162 | # Check if this is a positional Argument (not an Option) | COMMENT |
| LOW | archivebox/crawls/models.py | 481 | # Check if crawl already exists by ID | COMMENT |
| LOW | archivebox/crawls/models.py | 954 | # Check if already in urls (parse existing JSONL entries) | COMMENT |
| LOW | archivebox/crawls/models.py | 1567 | # Check if any snapshots exist for this crawl | COMMENT |
| LOW | archivebox/crawls/models.py | 1730 | # Set retry_at to near future so tick() can poll and check is_finished() | COMMENT |
| LOW | archivebox/cli/archivebox_update.py | 691 | # Check if needs migration (0.8.x → 0.9.x) | COMMENT |
| LOW | archivebox/cli/archivebox_extract.py | 394 | # Output results as JSONL (when piped) or human-readable (when TTY) | COMMENT |
| LOW | archivebox/cli/archivebox_extract.py | 446 | # Check if input looks like existing ArchiveResult IDs to process | COMMENT |
| LOW | archivebox/cli/archivebox_version.py | 181 | # Check if LDAP is enabled (simple config lookup) | COMMENT |
| LOW⚡ | archivebox/cli/archivebox_persona.py | 265 | # Check if resolved_path is a child of personas_dir | COMMENT |
| LOW | archivebox/progressmonitor/views.py | 822 | # Check if crawl can start (for debugging stuck crawls) | COMMENT |
| LOW | archivebox/progressmonitor/views.py | 838 | # Check if retry_at is in the future (would prevent worker from claiming) | COMMENT |
| LOW | archivebox/machine/models.py | 809 | # Check if it's already pointing to the right place | COMMENT |
| LOW | archivebox/machine/models.py | 1604 | # Check if too old (PID definitely reused) | COMMENT |
| LOW | archivebox/machine/models.py | 1608 | # Check if OS process still exists with matching start time | COMMENT |
| LOW | archivebox/machine/models.py | 2313 | # Check if process exited | COMMENT |
| LOW | archivebox/machine/models.py | 2608 | # Check if installation succeeded by looking at updated status | COMMENT |
| LOW | archivebox/workers/supervisord_util.py | 1137 | # Check if the monitored process has exited | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | archivebox/misc/logging_util.py | 371 | # Create a Rich Text object for proper formatting | COMMENT |
| MEDIUM | archivebox/core/templatetags/core_tags.py | 772 | # Create a mini template and render it with context | STRING |
| MEDIUM | archivebox/config/collection.py | 20 | "# This file is kept in sync 1:1 with Machine.config in the index DB —\n" | CODE |
| MEDIUM | archivebox/plugins/hooks.py | 327 | # Create a failed Process record for hooks that don't exist | COMMENT |
| MEDIUM | archivebox/plugins/hooks.py | 482 | # Create a failed Process record for exceptions | COMMENT |
| MEDIUM⚡ | archivebox/tests/test_cli_status.py | 100 | # Create an orphaned directory | COMMENT |
| MEDIUM | archivebox/tests/test_cli_crawl.py | 237 | # Create a crawl | COMMENT |
| MEDIUM | archivebox/tests/migrations_helpers.py | 570 | # Create a user | COMMENT |
| MEDIUM | archivebox/tests/migrations_helpers.py | 737 | # Create a user | COMMENT |
| MEDIUM | archivebox/tests/test_cli_archiveresult.py | 34 | # Create a snapshot first | COMMENT |
| MEDIUM | archivebox/cli/archivebox_update.py | 675 | # Create a new crawl (created_by will default to system user) | COMMENT |
| MEDIUM | archivebox/cli/archivebox_persona.py | 15 | # Create a new persona | STRING |
| MEDIUM | archivebox/machine/models.py | 784 | # Create the derived convenience bin dir if it doesn't exist. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | docs/Web-Archiving-Community.md | 220 | - [ReadableWebProxy](https://github.com/fake-name/ReadableWebProxy) A proxying archiver that downloads content from site | CODE |
| LOW | archivebox/core/admin_tags.py | 45 | "placeholder": "research, receipts, product-design...", | CODE |
| LOW | archivebox/core/forms.py | 103 | "placeholder": ( | CODE |
| LOW | archivebox/core/forms.py | 136 | "placeholder": "0 = unlimited", | CODE |
| LOW | archivebox/core/forms.py | 146 | "placeholder": "0 = unlimited, or e.g. 45mb / 1gb", | CODE |
| LOW | archivebox/core/forms.py | 158 | "placeholder": "0, 300, 1.5m, or 1hr", | CODE |
| LOW⚡ | archivebox/core/forms.py | 169 | "placeholder": "60, 1.5m, or 1hr", | CODE |
| LOW⚡ | archivebox/core/forms.py | 179 | "placeholder": "0 = unlimited, or e.g. 45mb / 1gb", | CODE |
| LOW⚡ | archivebox/core/forms.py | 189 | "placeholder": "0 = keep forever, or e.g. 1d / 6mo", | CODE |
| LOW | archivebox/core/forms.py | 210 | "placeholder": "Optional notes about this crawl", | CODE |
| LOW | archivebox/core/forms.py | 271 | "placeholder": "e.g., daily, weekly, 0 */6 * * * (every 6 hours)", | CODE |
| LOW | archivebox/tests/test_server_security_browser.py | 343 | defaults={"email": "admin@example.com", "is_staff": True, "is_superuser": True}, | CODE |
| LOW | archivebox/tests/migrations_helpers.py | 575 | 'admin@example.com', 1, 1, datetime('now')) | CODE |
| LOW | archivebox/tests/migrations_helpers.py | 742 | 'admin@example.com', 1, 1, datetime('now')) | CODE |
| LOW | archivebox/tests/test_urls.py | 85 | defaults={"email": "admin@example.com", "is_staff": True, "is_superuser": True}, | STRING |
| LOW | archivebox/crawls/admin.py | 405 | "placeholder": "https://example.com\nhttps://example2.com\n# Comments start with #", | CODE |
| LOW | archivebox/personas/forms.py | 65 | "placeholder": "/Users/alice/Library/Application Support/Google/Chrome or http://127.0.0.1:9222 or w | CODE |
| LOW | archivebox/personas/forms.py | 76 | "placeholder": "Default or Profile 1", | CODE |
| LOW | …onitor/templates/progressmonitor/progress_monitor.html | 1108 | preview.classList.add('placeholder'); | CODE |
| LOW | …onitor/templates/progressmonitor/progress_monitor.html | 1186 | type: 'placeholder', | CODE |
| LOW | …onitor/templates/progressmonitor/progress_monitor.html | 1202 | type: 'placeholder', | CODE |
| LOW | …onitor/templates/progressmonitor/progress_monitor.html | 1214 | type: 'placeholder', | CODE |
| LOW | …onitor/templates/progressmonitor/progress_monitor.html | 1253 | type: 'placeholder', | CODE |
| LOW | …onitor/templates/progressmonitor/progress_monitor.html | 1260 | if (target.type === 'placeholder') { | CODE |
| LOW | …onitor/templates/progressmonitor/progress_monitor.html | 1274 | if (screencastPanel.dataset.mode === 'placeholder' && screencastPanel.dataset.key === placeholderKey) { | CODE |
| LOW | …onitor/templates/progressmonitor/progress_monitor.html | 1277 | screencastPanel.dataset.mode = 'placeholder'; | CODE |
| LOW | archivebox/templates/static/select2.min.js | 2 | !function(n){"function"==typeof define&&define.amd?define(["jquery"],n):"object"==typeof module&&module.exports?module.e | CODE |
| LOW | archivebox/templates/static/jquery.dataTables.min.js | 41 | g):j+g,b=h("<div/>",{id:!f.f?c+"_filter":null,"class":b.sFilter}).append(h("<label/>").append(j)),f=function(){var b=!th | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | old/TODO_process_tracking.md | 711 | Wait for process to exit, polling periodically. Args: timeout: Max seconds to wait (None = | STRING |
| HIGH | archivebox/plugins/hooks.py | 89 | Check if a hook is a background hook (doesn't block foreground progression). Background hooks have '.bg.' in t | STRING |
| HIGH | archivebox/plugins/hooks.py | 152 | Find all hook scripts for an event family. Searches both built-in and user plugin directories. Filters out | STRING |
| HIGH | archivebox/machine/models.py | 2163 | Wait for process to exit, polling periodically. Args: timeout: Max seconds to wait (None = | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | archivebox/uuid_compat.py | 48 | __all__ = ["CompactUUID", "CompactUUIDField", "compact_uuid", "uuid7"] | CODE |
| LOW | archivebox/core/models.py | 4749 | def _set_binary_from_cmd(self, cmd: list) -> None: | CODE |
| LOW | archivebox/tests/conftest.py | 77 | def _set_test_source_pythonpath(env: dict[str, str]) -> None: | CODE |
| LOW⚡ | archivebox/tests/test_version_metadata.py | 6 | def _set_package_dir(monkeypatch, package_dir: Path) -> None: | CODE |
| LOW | archivebox/tests/test_opencode_agent.py | 36 | def _set_archivebox_config(data_dir: Path, *values: str, env: dict[str, str] | None = None) -> None: | CODE |
| LOW | archivebox/tests/test_crawl_runner.py | 645 | async def update_config_between_snapshots(event: SnapshotCompletedEvent) -> None: | CODE |
| LOW | archivebox/tests/test_urls.py | 172 | def _setup_data_dir(self, real_archive_with_example: Path) -> None: | CODE |
| LOW | archivebox/tests/test_urls.py | 195 | def _set_config(self, *settings: str) -> None: | CODE |
| LOW | archivebox/crawls/models.py | 648 | def set_url_filters(self, allowlist, denylist) -> None: | CODE |
| LOW⚡ | archivebox/cli/__init__.py | 93 | def _setup_django_for_lazy_import(cls, cmd_name: str) -> None: | CODE |
| LOW | archivebox/api/webhooks.py | 11 | logger = logging.getLogger(__name__) | CODE |
| LOW | archivebox/workers/models.py | 41 | logger = logging.getLogger(__name__) | CODE |
| LOW | archivebox/services/__init__.py | 10 | __all__ = [ | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | bin/fuzz_test.sh | 4 | # This is intentionally not a test harness: it does not assert success/failure. | COMMENT |
| LOW | archivebox/misc/util.py | 460 | # if response is non-test (e.g. image or other binary files), just return the filename instead | COMMENT |
| MEDIUM | archivebox/core/models.py | 4537 | # these properties provide seamless access to Process data through ArchiveResult | COMMENT |
| LOW | archivebox/core/views.py | 1457 | # We can't just call request.build_absolute_uri in the template, because it would include query parameters | COMMENT |
| LOW | archivebox/cli/archivebox_archiveresult.py | 115 | # If no id, we could create it, but for now just pass through | COMMENT |
| LOW | archivebox/cli/archivebox_crawl.py | 94 | # Handle existing Crawl records (just pass through with id) | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | archivebox/core/models.py | 3375 | CODE | |
| LOW | archivebox/core/tag_util.py | 268 | CODE | |
| LOW | archivebox/config/common.py | 994 | CODE | |
| LOW | archivebox/tests/conftest.py | 181 | CODE | |
| LOW | archivebox/tests/test_cli_status.py | 24 | CODE | |
| LOW | archivebox/cli/archivebox_schedule.py | 12 | CODE | |
| LOW | archivebox/cli/archivebox_update.py | 177 | CODE | |
| LOW | archivebox/cli/archivebox_remove.py | 30 | CODE | |
| LOW | archivebox/cli/archivebox_add.py | 54 | CODE | |
| LOW | archivebox/workers/supervisord_util.py | 1306 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | pyproject.toml | 94 | # to use sonic make sure you have a sonic server running in docker (archivebox/sonic) or locally: | COMMENT |
| MEDIUM | .github/workflows/codeql.yml | 59 | # If you are analyzing a compiled language, you can modify the 'build-mode' for that language to customize how | COMMENT |
| LOW | archivebox/core/admin_snapshots.py | 1488 | f"Successfully deleted {total} Snapshots ({deleted_count} total objects including related records). Don' | CODE |
| LOW | archivebox/cli/archivebox_install.py | 117 | stderr("\n[+] Don't forget to create a new admin user for the Web UI...", color="green") | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | docker-compose.yml | 1 | # Usage: | COMMENT |
| LOW | bin/kill_chrome.sh | 5 | # Usage: | COMMENT |
| LOW | bin/export_browser_history.sh | 4 | # Usage: | COMMENT |
| LOW | archivebox/machine/detect.py | 287 | # Example usage | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | old/TODO_hook_statemachine_cleanup.md | 74 | # 1. State Machine orchestrates transitions | COMMENT |
| MEDIUM | docs/Setting-up-Search.md | 259 | - [#1139 Feature Request: Add AI-assisted summarization, tagging, search, and more using LLMs / RAG](https://github.com/ | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | archivebox/machine/models.py | 2220 | # Step 1: Send SIGTERM for graceful shutdown | COMMENT |
| LOW⚡ | archivebox/machine/models.py | 2223 | # Step 2: Wait for graceful exit | COMMENT |
| LOW | archivebox/machine/models.py | 2236 | # Step 3: Force kill with SIGKILL | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | archivebox/mcp/server.py | 311 | def handle_request(self, request: dict) -> dict: | CODE |