NotebookLM for Competitive Intelligence Research. Give your AI agents access to live data from Reddit, YouTube, Instagram, TikTok, Google Maps, Google Search, open web etc. Join our Discord: https://discord.gg/ejRNvftDp9
This report presents the forensic synthetic code analysis of MODSetter/SurfSense, a Python project with 15,240 GitHub stars. SynthScan v2.0 examined 594,357 lines of code across 3671 source files, recording 10143 pattern matches distributed across 23 syntactic categories. The overall adjusted score of 25.2 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 10143 distinct pattern matches across 23 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 |
|---|---|---|---|---|
| MEDIUM | docker/docker-compose.e2e.yml | 1 | # ============================================================================= | COMMENT |
| MEDIUM | docker/docker-compose.e2e.yml | 3 | # ============================================================================= | COMMENT |
| MEDIUM | docker/docker-compose.e2e.yml | 20 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | docker/docker-compose.proxy.yml | 1 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | docker/docker-compose.proxy.yml | 3 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | docker/docker-compose.proxy.yml | 10 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | docker/docker-compose.dev.yml | 1 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | docker/docker-compose.dev.yml | 3 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | docker/docker-compose.dev.yml | 9 | # ============================================================================= | COMMENT |
| MEDIUM | docker/docker-compose.watch-e2e.yml | 1 | # ============================================================================= | COMMENT |
| MEDIUM | docker/docker-compose.watch-e2e.yml | 3 | # ============================================================================= | COMMENT |
| MEDIUM | docker/docker-compose.watch-e2e.yml | 14 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | docker/docker-compose.yml | 1 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | docker/docker-compose.yml | 4 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | docker/docker-compose.yml | 8 | # ============================================================================= | COMMENT |
| MEDIUM | docker/docker-compose.deps-only.yml | 1 | # ============================================================================= | COMMENT |
| MEDIUM | docker/docker-compose.deps-only.yml | 3 | # ============================================================================= | COMMENT |
| MEDIUM | docker/docker-compose.deps-only.yml | 34 | # ============================================================================= | COMMENT |
| MEDIUM | docker/scripts/install.sh | 2 | # ============================================================================= | COMMENT |
| MEDIUM | docker/scripts/install.sh | 27 | # ============================================================================= | COMMENT |
| MEDIUM | docker/scripts/install.sh | 49 | # ── Parse flags ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | docker/scripts/install.sh | 126 | # ── Pre-flight checks ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | docker/scripts/install.sh | 147 | # ── Wait-for-postgres helper ───────────────────────────────────────────────── | COMMENT |
| MEDIUM | docker/scripts/install.sh | 166 | # ── Stack startup helper ───────────────────────────────────────────────────── | COMMENT |
| MEDIUM | docker/scripts/install.sh | 192 | # ── Variant and .env helpers ───────────────────────────────────────────────── | COMMENT |
| MEDIUM | docker/scripts/install.sh | 330 | # ── Download files ─────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | docker/scripts/install.sh | 357 | # ── Legacy all-in-one detection ────────────────────────────────────────────── | COMMENT |
| MEDIUM | docker/scripts/install.sh | 391 | # ── Set up .env ────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | docker/scripts/install.sh | 423 | # ── Start containers ───────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | docker/scripts/install.sh | 497 | # ── Watchtower (auto-update) ───────────────────────────────────────────────── | COMMENT |
| MEDIUM | docker/scripts/install.sh | 525 | # ── Done ───────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | docker/scripts/migrate-database.sh | 2 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | docker/scripts/migrate-database.sh | 39 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | docker/scripts/migrate-database.sh | 43 | # ── Colours ────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | docker/scripts/migrate-database.sh | 51 | # ── Logging — tee everything to a log file ─────────────────────────────────── | COMMENT |
| MEDIUM⚡ | docker/scripts/migrate-database.sh | 55 | # ── Output helpers ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | docker/scripts/migrate-database.sh | 62 | # ── Constants ───────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | docker/scripts/migrate-database.sh | 69 | # ── Defaults ────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | docker/scripts/migrate-database.sh | 75 | # ── Argument parsing ────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | docker/scripts/migrate-database.sh | 90 | # ── Confirmation helper ─────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | docker/scripts/migrate-database.sh | 98 | # ── Cleanup trap — always remove the temp container ────────────────────────── | COMMENT |
| MEDIUM | docker/scripts/migrate-database.sh | 114 | # ── Wait-for-postgres helper ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | docker/scripts/migrate-database.sh | 137 | # ── Step 0: Pre-flight checks ───────────────────────────────────────────────── | COMMENT |
| MEDIUM | docker/scripts/migrate-database.sh | 195 | # ── Confirmation prompt ─────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | docker/scripts/migrate-database.sh | 204 | # ── Step 1: Start temporary PostgreSQL 14 container ────────────────────────── | COMMENT |
| MEDIUM | docker/scripts/migrate-database.sh | 239 | # ── Step 2: Dump the database ───────────────────────────────────────────────── | COMMENT |
| MEDIUM | docker/scripts/migrate-database.sh | 275 | # ── Step 3: Recover SECRET_KEY ──────────────────────────────────────────────── | COMMENT |
| MEDIUM | docker/scripts/migrate-database.sh | 314 | # ── Done ────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | surfsense_evals/tests/core/test_metrics.py | 20 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | surfsense_evals/tests/core/test_metrics.py | 22 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | surfsense_evals/tests/core/test_metrics.py | 59 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | surfsense_evals/tests/core/test_metrics.py | 61 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | surfsense_evals/tests/core/test_metrics.py | 103 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | surfsense_evals/tests/core/test_metrics.py | 105 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | surfsense_evals/tests/core/test_metrics.py | 120 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | surfsense_evals/tests/core/test_metrics.py | 122 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | surfsense_evals/tests/core/test_vision_llm.py | 26 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | surfsense_evals/tests/core/test_vision_llm.py | 28 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | surfsense_evals/tests/core/test_vision_llm.py | 62 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | surfsense_evals/tests/core/test_vision_llm.py | 64 | # --------------------------------------------------------------------------- | COMMENT |
| 1281 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | .cursor/skills/tdd/tests.md | 9 | def test_user_can_checkout_with_valid_cart(): | CODE |
| LOW | .cursor/skills/tdd/tests.md | 31 | def test_checkout_calls_payment_service_process(): | CODE |
| LOW | .cursor/skills/tdd/tests.md | 49 | def test_create_user_saves_to_database(): | CODE |
| LOW | .cursor/skills/tdd/tests.md | 55 | def test_create_user_makes_user_retrievable(): | CODE |
| LOW | surfsense_browser_extension/routes/pages/HomePage.tsx | 39 | async function migrateLegacyWorkspaceKeys(storage: Storage): Promise<void> { | CODE |
| LOW | surfsense_evals/tests/test_integration_smoke.py | 22 | async def test_smoke_against_localhost(): | CODE |
| LOW⚡ | surfsense_evals/tests/core/test_registry.py | 31 | def test_auto_discovery_skips_underscore_prefixed_subpackages(): | CODE |
| LOW⚡ | surfsense_evals/tests/core/test_registry.py | 40 | def test_demo_benchmark_registers_on_explicit_import(): | CODE |
| LOW⚡ | surfsense_evals/tests/core/test_registry.py | 50 | def test_register_unregister_roundtrip(): | CODE |
| LOW | surfsense_evals/tests/core/test_parse_answer_letter.py | 29 | def test_extract_answer_letter(text, expected_letter, expected_strategy): | CODE |
| LOW | …fsense_evals/tests/core/test_pdf_render_with_images.py | 31 | def test_renders_pdf_with_no_images(self, tmp_path: Path) -> None: | CODE |
| LOW | …fsense_evals/tests/core/test_pdf_render_with_images.py | 42 | def test_renders_pdf_with_one_image(self, tmp_path: Path, tiny_png: Path) -> None: | CODE |
| LOW | …fsense_evals/tests/core/test_pdf_render_with_images.py | 63 | def test_skips_invalid_image_silently(self, tmp_path: Path) -> None: | CODE |
| LOW⚡ | surfsense_evals/tests/core/test_metrics.py | 40 | def test_wilson_ci_known_values(k, n, low, high): | CODE |
| LOW⚡ | surfsense_evals/tests/core/test_metrics.py | 46 | def test_accuracy_with_wilson_ci_object(): | CODE |
| LOW⚡ | surfsense_evals/tests/core/test_metrics.py | 52 | def test_invalid_inputs_raise(): | CODE |
| LOW⚡ | surfsense_evals/tests/core/test_metrics.py | 64 | def test_mcnemar_degenerate_returns_p_value_one(): | CODE |
| LOW⚡ | surfsense_evals/tests/core/test_metrics.py | 73 | def test_mcnemar_exact_branch_strong_signal(): | CODE |
| LOW | surfsense_evals/tests/core/test_metrics.py | 86 | def test_mcnemar_chi_square_approx_for_large_discordant(): | CODE |
| LOW⚡ | surfsense_evals/tests/core/test_metrics.py | 98 | def test_mcnemar_length_mismatch(): | CODE |
| LOW⚡ | surfsense_evals/tests/core/test_metrics.py | 108 | def test_bootstrap_delta_ci_shape_and_determinism(): | CODE |
| LOW⚡ | surfsense_evals/tests/core/test_metrics.py | 137 | def test_ndcg_at_k_perfect_order(): | CODE |
| LOW⚡ | surfsense_evals/tests/core/test_metrics.py | 142 | def test_ndcg_at_k_irrelevant_first(): | CODE |
| LOW⚡ | surfsense_evals/tests/core/test_metrics.py | 149 | def test_score_run_aggregates_across_queries(): | CODE |
| LOW | surfsense_evals/tests/core/test_auth.py | 39 | async def test_acquire_token_jwt_mode_short_circuits(): | CODE |
| LOW | surfsense_evals/tests/core/test_auth.py | 49 | async def test_acquire_token_local_mode_posts_desktop_login_json(): | CODE |
| LOW | surfsense_evals/tests/core/test_auth.py | 63 | async def test_acquire_token_no_credentials(): | CODE |
| LOW⚡ | surfsense_evals/tests/core/test_vision_llm.py | 31 | def test_explicit_slug_resolves_to_matching_config_id(): | CODE |
| LOW | surfsense_evals/tests/core/test_vision_llm.py | 42 | def test_explicit_slug_with_no_match_raises_with_helpful_listing(): | CODE |
| LOW | surfsense_evals/tests/core/test_vision_llm.py | 51 | def test_explicit_slug_skips_non_openrouter_entries(): | CODE |
| LOW⚡ | surfsense_evals/tests/core/test_vision_llm.py | 67 | def test_auto_pick_walks_priority_list_in_order(): | CODE |
| LOW | surfsense_evals/tests/core/test_vision_llm.py | 80 | def test_auto_pick_skips_to_next_priority_when_first_unavailable(): | CODE |
| LOW | surfsense_evals/tests/core/test_vision_llm.py | 91 | def test_auto_pick_falls_back_to_first_openrouter_when_no_recommended_match(): | CODE |
| LOW⚡ | surfsense_evals/tests/core/test_vision_llm.py | 102 | def test_auto_pick_with_zero_openrouter_candidates_raises(): | CODE |
| LOW⚡ | surfsense_evals/tests/core/test_vision_llm.py | 109 | def test_auto_pick_ignores_non_openrouter_entries(): | CODE |
| LOW⚡ | surfsense_evals/tests/core/test_vision_llm.py | 117 | def test_recommended_priority_is_a_stable_public_list(): | CODE |
| LOW | surfsense_evals/tests/core/test_pdf_render.py | 14 | def test_render_pdf_writes_pdf_with_magic(tmp_path: Path): | CODE |
| LOW | surfsense_evals/tests/core/test_pdf_render.py | 26 | def test_render_pdf_deterministic_dates(tmp_path: Path): | CODE |
| LOW | surfsense_evals/tests/core/test_pdf_render.py | 38 | def test_render_text_files_uses_filename_as_section(tmp_path: Path): | CODE |
| LOW⚡ | surfsense_evals/tests/core/test_clients.py | 34 | async def test_create_search_space_returns_row(respx_mock, http): | CODE |
| LOW | surfsense_evals/tests/core/test_clients.py | 66 | async def test_set_model_roles_partial_update(respx_mock, http): | CODE |
| LOW⚡ | surfsense_evals/tests/core/test_clients.py | 91 | async def test_documents_status_parses_state(respx_mock, http): | CODE |
| LOW | surfsense_evals/tests/core/test_clients.py | 121 | async def test_documents_upload_returns_payload(respx_mock, http, tmp_path: Path): | CODE |
| LOW | surfsense_evals/tests/core/test_clients.py | 145 | async def test_documents_list_chunks_paginated(respx_mock, http): | CODE |
| LOW⚡ | surfsense_evals/tests/core/test_clients.py | 182 | async def test_create_thread_returns_id(respx_mock, http): | CODE |
| LOW | surfsense_evals/tests/core/test_clients.py | 213 | async def test_ask_accumulates_text_deltas(respx_mock, http): | CODE |
| LOW⚡ | …rfsense_evals/tests/core/test_parse_freeform_answer.py | 11 | def test_empty_string_returns_empty(self) -> None: | CODE |
| LOW⚡ | …rfsense_evals/tests/core/test_parse_freeform_answer.py | 15 | def test_simple_answer_marker(self) -> None: | CODE |
| LOW⚡ | …rfsense_evals/tests/core/test_parse_freeform_answer.py | 21 | def test_the_answer_is_marker(self) -> None: | CODE |
| LOW⚡ | …rfsense_evals/tests/core/test_parse_freeform_answer.py | 24 | def test_multiline_picks_last_answer_marker(self) -> None: | CODE |
| LOW⚡ | …rfsense_evals/tests/core/test_parse_freeform_answer.py | 28 | def test_falls_back_to_last_nonempty_line(self) -> None: | CODE |
| LOW | …rfsense_evals/tests/core/test_parse_freeform_answer.py | 39 | def test_uses_fenced_block_when_no_marker(self) -> None: | CODE |
| LOW | …rfsense_evals/tests/core/test_parse_freeform_answer.py | 43 | def test_case_insensitive_markers(self) -> None: | CODE |
| LOW | …rfsense_evals/tests/core/test_parse_freeform_answer.py | 58 | def test_inline_answer_after_thinking_trace(self) -> None: | CODE |
| LOW | …rfsense_evals/tests/core/test_parse_freeform_answer.py | 69 | def test_inline_picks_last_inline_answer(self) -> None: | CODE |
| LOW | …rfsense_evals/tests/core/test_parse_freeform_answer.py | 73 | def test_inline_does_not_override_proper_marker(self) -> None: | CODE |
| LOW⚡ | surfsense_evals/tests/core/test_config.py | 18 | def test_load_config_defaults_to_localhost(tmp_env): # noqa: ARG001 | CODE |
| LOW⚡ | surfsense_evals/tests/core/test_config.py | 26 | def test_load_config_picks_up_jwt_env(tmp_env, monkeypatch): # noqa: ARG001 | CODE |
| LOW⚡ | surfsense_evals/tests/core/test_config.py | 32 | def test_load_config_picks_up_local_env(tmp_env, monkeypatch): # noqa: ARG001 | CODE |
| LOW⚡ | surfsense_evals/tests/core/test_config.py | 39 | def test_state_roundtrip_per_suite(tmp_env): # noqa: ARG001 | CODE |
| 3549 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | surfsense_evals/tests/conftest.py | 3 | CODE | |
| LOW | surfsense_evals/tests/test_integration_smoke.py | 8 | CODE | |
| LOW | surfsense_evals/tests/core/test_registry.py | 9 | CODE | |
| LOW | surfsense_evals/tests/core/test_parse_answer_letter.py | 3 | CODE | |
| LOW | …fsense_evals/tests/core/test_pdf_render_with_images.py | 6 | CODE | |
| LOW | surfsense_evals/tests/core/test_metrics.py | 3 | CODE | |
| LOW | surfsense_evals/tests/core/test_auth.py | 3 | CODE | |
| LOW | surfsense_evals/tests/core/test_vision_llm.py | 3 | CODE | |
| LOW | surfsense_evals/tests/core/test_pdf_render.py | 7 | CODE | |
| LOW | surfsense_evals/tests/core/test_clients.py | 3 | CODE | |
| LOW | …rfsense_evals/tests/core/test_parse_freeform_answer.py | 3 | CODE | |
| LOW | surfsense_evals/tests/core/test_config.py | 3 | CODE | |
| LOW | surfsense_evals/tests/core/test_scenarios.py | 3 | CODE | |
| LOW | surfsense_evals/tests/core/test_provider_openrouter.py | 3 | CODE | |
| LOW | surfsense_evals/tests/core/test_ingest_settings.py | 17 | CODE | |
| LOW | surfsense_evals/tests/core/test_parse_citations.py | 9 | CODE | |
| LOW | surfsense_evals/tests/core/test_parse_sse.py | 3 | CODE | |
| LOW | surfsense_evals/tests/suites/test_crag_html_extract.py | 12 | CODE | |
| LOW | surfsense_evals/tests/suites/test_frames_dataset.py | 14 | CODE | |
| LOW | surfsense_evals/tests/suites/test_crag_grader.py | 8 | CODE | |
| LOW | surfsense_evals/tests/suites/test_frames_wiki_fetch.py | 12 | CODE | |
| LOW | surfsense_evals/tests/suites/test_mmlongbench_grader.py | 8 | CODE | |
| LOW | surfsense_evals/tests/suites/test_crag_dataset.py | 8 | CODE | |
| LOW | surfsense_evals/tests/suites/test_frames_grader.py | 9 | CODE | |
| LOW | surfsense_evals/scripts/analyze_failures.py | 12 | CODE | |
| LOW | surfsense_evals/scripts/peek_disagreements.py | 3 | CODE | |
| LOW | surfsense_evals/scripts/compute_blog_extras.py | 22 | CODE | |
| LOW | surfsense_evals/scripts/inspect_first30.py | 11 | CODE | |
| LOW | surfsense_evals/scripts/compute_post_retry_accuracy.py | 22 | CODE | |
| LOW | surfsense_evals/scripts/analyze_failure_timing.py | 10 | CODE | |
| LOW | surfsense_evals/scripts/peek_crag_run.py | 3 | CODE | |
| LOW | surfsense_evals/scripts/check_extraction_sizes.py | 9 | CODE | |
| LOW | …ense_evals/scripts/test_context_overflow_hypothesis.py | 15 | CODE | |
| LOW | surfsense_evals/scripts/retry_failed_questions.py | 41 | CODE | |
| LOW | surfsense_evals/scripts/summarise_crag_run.py | 3 | CODE | |
| LOW | surfsense_evals/scripts/check_uploaded_status.py | 9 | CODE | |
| LOW | surfsense_evals/scripts/compute_adjusted_accuracy.py | 23 | CODE | |
| LOW | surfsense_evals/scripts/summarise_parser_compare_run.py | 12 | CODE | |
| LOW | …se_evals/scripts/patch_manifest_for_parallel_ingest.py | 25 | CODE | |
| LOW | surfsense_evals/src/surfsense_evals/__init__.py | 8 | CODE | |
| LOW | surfsense_evals/src/surfsense_evals/__main__.py | 8 | CODE | |
| LOW | surfsense_evals/src/surfsense_evals/core/scenarios.py | 10 | CODE | |
| LOW | surfsense_evals/src/surfsense_evals/core/auth.py | 22 | CODE | |
| LOW | surfsense_evals/src/surfsense_evals/core/config.py | 14 | CODE | |
| LOW | surfsense_evals/src/surfsense_evals/core/registry.py | 13 | CODE | |
| LOW | surfsense_evals/src/surfsense_evals/core/registry.py | 265 | CODE | |
| LOW | …ense_evals/src/surfsense_evals/core/ingest_settings.py | 46 | CODE | |
| LOW | surfsense_evals/src/surfsense_evals/core/__init__.py | 8 | CODE | |
| LOW | surfsense_evals/src/surfsense_evals/core/cli.py | 31 | CODE | |
| LOW | surfsense_evals/src/surfsense_evals/core/vision_llm.py | 15 | CODE | |
| LOW | …nse_evals/src/surfsense_evals/core/metrics/__init__.py | 3 | CODE | |
| LOW | …nse_evals/src/surfsense_evals/core/metrics/__init__.py | 8 | CODE | |
| LOW | …nse_evals/src/surfsense_evals/core/metrics/__init__.py | 8 | CODE | |
| LOW | …nse_evals/src/surfsense_evals/core/metrics/__init__.py | 8 | CODE | |
| LOW | …nse_evals/src/surfsense_evals/core/metrics/__init__.py | 8 | CODE | |
| LOW | …nse_evals/src/surfsense_evals/core/metrics/__init__.py | 9 | CODE | |
| LOW | …nse_evals/src/surfsense_evals/core/metrics/__init__.py | 9 | CODE | |
| LOW | …nse_evals/src/surfsense_evals/core/metrics/__init__.py | 9 | CODE | |
| LOW | …nse_evals/src/surfsense_evals/core/metrics/__init__.py | 10 | CODE | |
| LOW | …nse_evals/src/surfsense_evals/core/metrics/__init__.py | 10 | CODE | |
| 2148 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | .cursor/skills/system-architecture/examples.md | 111 | except Exception as e: | CODE |
| LOW | docker/docker-compose.e2e.yml | 133 | except Exception: | CODE |
| LOW | surfsense_evals/scripts/retry_failed_questions.py | 434 | except Exception: | CODE |
| LOW | surfsense_evals/src/surfsense_evals/core/cli.py | 779 | except Exception as exc: # noqa: BLE001 | CODE |
| LOW | …se_evals/src/surfsense_evals/core/parsers/pdf_pages.py | 30 | except Exception as exc: # noqa: BLE001 | CODE |
| LOW | surfsense_evals/src/surfsense_evals/core/pdf/render.py | 287 | except Exception: # noqa: BLE001 — bad image shouldn't kill PDF | CODE |
| LOW | …ense_evals/src/surfsense_evals/core/arms/native_pdf.py | 76 | except Exception as exc: # noqa: BLE001 | CODE |
| LOW | …sense_evals/src/surfsense_evals/core/arms/surfsense.py | 62 | except Exception as exc: # noqa: BLE001 | CODE |
| LOW | …sense_evals/src/surfsense_evals/core/arms/surfsense.py | 74 | except Exception as exc: # noqa: BLE001 | CODE |
| LOW | …fsense_evals/src/surfsense_evals/core/arms/bare_llm.py | 78 | except Exception as exc: # noqa: BLE001 | CODE |
| LOW | surfsense_evals/src/surfsense_evals/suites/__init__.py | 55 | except Exception as exc: # noqa: BLE001 | CODE |
| LOW | surfsense_evals/src/surfsense_evals/suites/__init__.py | 62 | except Exception as exc: # noqa: BLE001 | CODE |
| LOW | …s/src/surfsense_evals/suites/research/frames/ingest.py | 100 | except Exception as exc: # noqa: BLE001 | CODE |
| LOW | …s/src/surfsense_evals/suites/research/frames/grader.py | 271 | except Exception as exc: # noqa: BLE001 | CODE |
| LOW | …als/src/surfsense_evals/suites/research/crag/ingest.py | 438 | except Exception as exc: # noqa: BLE001 | CODE |
| LOW | …als/src/surfsense_evals/suites/research/crag/grader.py | 441 | except Exception as exc: # noqa: BLE001 | CODE |
| LOW⚡ | …c/surfsense_evals/suites/research/crag/html_extract.py | 74 | except Exception as exc: # noqa: BLE001 - trafilatura raises a zoo | CODE |
| LOW⚡ | …c/surfsense_evals/suites/research/crag/html_extract.py | 158 | except Exception as exc: # noqa: BLE001 - HTMLParser is fragile on garbage input | CODE |
| LOW⚡ | …ense_evals/suites/multimodal_doc/mmlongbench/ingest.py | 335 | except Exception as exc: # noqa: BLE001 | CODE |
| LOW | …ls/src/surfsense_evals/suites/medical/mirage/ingest.py | 538 | except Exception as exc: # noqa: BLE001 | CODE |
| LOW | …vals/src/surfsense_evals/suites/medical/cure/ingest.py | 151 | except Exception as exc: # noqa: BLE001 | CODE |
| LOW | …vals/src/surfsense_evals/suites/medical/cure/ingest.py | 200 | except Exception as exc: # noqa: BLE001 | CODE |
| LOW | …vals/src/surfsense_evals/suites/medical/cure/runner.py | 127 | except Exception as exc: # noqa: BLE001 | CODE |
| LOW | …vals/src/surfsense_evals/suites/medical/cure/runner.py | 160 | except Exception as exc: # noqa: BLE001 | CODE |
| LOW⚡ | …rc/surfsense_evals/suites/medical/medxpertqa/ingest.py | 335 | except Exception as exc: # noqa: BLE001 | CODE |
| LOW | surfsense_backend/app/db.py | 3013 | except Exception as exc: | CODE |
| LOW | surfsense_backend/app/users.py | 125 | except Exception as e: | CODE |
| LOW | surfsense_backend/app/users.py | 144 | except Exception as e: | CODE |
| LOW | surfsense_backend/app/users.py | 209 | except Exception as e: | CODE |
| LOW | surfsense_backend/app/users.py | 278 | except Exception as e: | CODE |
| LOW | surfsense_backend/app/users.py | 356 | except Exception: | CODE |
| LOW | surfsense_backend/app/users.py | 367 | except Exception: | CODE |
| LOW | surfsense_backend/app/celery_app.py | 74 | except Exception: | CODE |
| LOW | surfsense_backend/app/celery_app.py | 98 | except Exception: | CODE |
| LOW | surfsense_backend/app/app.py | 548 | except Exception: | CODE |
| LOW | surfsense_backend/app/app.py | 572 | except Exception: | CODE |
| LOW | surfsense_backend/app/app.py | 607 | except Exception: | CODE |
| LOW | surfsense_backend/app/app.py | 633 | except Exception: | CODE |
| LOW | surfsense_backend/app/app.py | 1063 | except Exception as exc: | CODE |
| LOW | surfsense_backend/app/connectors/clickup_connector.py | 207 | except Exception as e: | CODE |
| LOW⚡ | surfsense_backend/app/connectors/slack_history.py | 124 | except Exception as e: | CODE |
| LOW⚡ | surfsense_backend/app/connectors/slack_history.py | 134 | except Exception as e: | CODE |
| LOW | surfsense_backend/app/connectors/slack_history.py | 182 | except Exception as e: | CODE |
| LOW | surfsense_backend/app/connectors/slack_history.py | 302 | except Exception as general_error: | CODE |
| LOW | surfsense_backend/app/connectors/slack_history.py | 409 | except Exception as general_error: # Catch any other unexpected errors | CODE |
| LOW | surfsense_backend/app/connectors/slack_history.py | 519 | except Exception as general_error: # Catch any other unexpected errors | CODE |
| LOW | surfsense_backend/app/connectors/slack_history.py | 556 | except Exception: | CODE |
| LOW | …sense_backend/app/connectors/google_gmail_connector.py | 50 | except Exception as e: | CODE |
| LOW | …sense_backend/app/connectors/google_gmail_connector.py | 166 | except Exception as e: | CODE |
| LOW | …sense_backend/app/connectors/google_gmail_connector.py | 197 | except Exception as e: | CODE |
| LOW | …sense_backend/app/connectors/google_gmail_connector.py | 225 | except Exception as e: | CODE |
| LOW | …sense_backend/app/connectors/google_gmail_connector.py | 266 | except Exception as e: | CODE |
| LOW | …sense_backend/app/connectors/google_gmail_connector.py | 300 | except Exception as e: | CODE |
| LOW | …sense_backend/app/connectors/google_gmail_connector.py | 370 | except Exception as e: | CODE |
| LOW | …sense_backend/app/connectors/google_gmail_connector.py | 431 | except Exception as e: | CODE |
| LOW | …sense_backend/app/connectors/google_gmail_connector.py | 497 | except Exception as e: | CODE |
| LOW | surfsense_backend/app/connectors/notion_history.py | 171 | except Exception as e: | CODE |
| LOW | surfsense_backend/app/connectors/notion_history.py | 205 | except Exception as e: | CODE |
| LOW | surfsense_backend/app/connectors/notion_history.py | 258 | except Exception as e: | CODE |
| LOW | surfsense_backend/app/connectors/notion_history.py | 396 | except Exception as callback_error: | CODE |
| 1120 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | surfsense_backend/app/connectors/notion_history.py | 0 | initialize the airtablehistoryconnector with auto-refresh capability. args: session: database session for updating conne | STRING |
| HIGH | surfsense_backend/app/connectors/confluence_history.py | 0 | initialize the airtablehistoryconnector with auto-refresh capability. args: session: database session for updating conne | STRING |
| HIGH | surfsense_backend/app/connectors/airtable_history.py | 0 | initialize the airtablehistoryconnector with auto-refresh capability. args: session: database session for updating conne | STRING |
| HIGH | surfsense_backend/app/connectors/notion_history.py | 0 | get valid airtable access token, refreshing if needed. returns: valid access token raises: valueerror: if credentials ar | STRING |
| HIGH | surfsense_backend/app/connectors/confluence_history.py | 0 | get valid airtable access token, refreshing if needed. returns: valid access token raises: valueerror: if credentials ar | STRING |
| HIGH | surfsense_backend/app/connectors/linear_connector.py | 0 | get valid airtable access token, refreshing if needed. returns: valid access token raises: valueerror: if credentials ar | STRING |
| HIGH | surfsense_backend/app/connectors/teams_connector.py | 0 | get valid airtable access token, refreshing if needed. returns: valid access token raises: valueerror: if credentials ar | STRING |
| HIGH | surfsense_backend/app/connectors/airtable_history.py | 0 | get valid airtable access token, refreshing if needed. returns: valid access token raises: valueerror: if credentials ar | STRING |
| HIGH | …ackend/app/tasks/connector_indexers/discord_indexer.py | 0 | slack connector indexer. implements batch indexing: groups up to slack_batch_size messages per channel into a single doc | STRING |
| HIGH | …_backend/app/tasks/connector_indexers/teams_indexer.py | 0 | slack connector indexer. implements batch indexing: groups up to slack_batch_size messages per channel into a single doc | STRING |
| HIGH | …_backend/app/tasks/connector_indexers/slack_indexer.py | 0 | slack connector indexer. implements batch indexing: groups up to slack_batch_size messages per channel into a single doc | STRING |
| HIGH | …ackend/app/tasks/connector_indexers/discord_indexer.py | 0 | index slack messages from all accessible channels. messages are grouped into batches of slack_batch_size per channel, so | STRING |
| HIGH | …_backend/app/tasks/connector_indexers/teams_indexer.py | 0 | index slack messages from all accessible channels. messages are grouped into batches of slack_batch_size per channel, so | STRING |
| HIGH | …_backend/app/tasks/connector_indexers/slack_indexer.py | 0 | index slack messages from all accessible channels. messages are grouped into batches of slack_batch_size per channel, so | STRING |
| HIGH | …ckend/app/tasks/connector_indexers/onedrive_indexer.py | 0 | download and etl files in parallel. returns (connector_docs, failed_files), where failed_files is a list of (file_id, re | STRING |
| HIGH | …ackend/app/tasks/connector_indexers/dropbox_indexer.py | 0 | download and etl files in parallel. returns (connector_docs, failed_files), where failed_files is a list of (file_id, re | STRING |
| HIGH | …d/app/tasks/connector_indexers/google_drive_indexer.py | 0 | download and etl files in parallel. returns (connector_docs, failed_files), where failed_files is a list of (file_id, re | STRING |
| HIGH | …ckend/app/tasks/connector_indexers/onedrive_indexer.py | 0 | full scan indexing of a folder. returns (indexed, skipped, unsupported_count). | STRING |
| HIGH | …d/app/tasks/connector_indexers/google_drive_indexer.py | 0 | full scan indexing of a folder. returns (indexed, skipped, unsupported_count). | STRING |
| HIGH | …ackend/app/tasks/connector_indexers/dropbox_indexer.py | 0 | full scan indexing of a folder. returns (indexed, skipped, unsupported_count). | STRING |
| HIGH | …ckend/app/proprietary/platforms/google_maps/scraper.py | 0 | collect :func:`iter_serps` into a list, honoring an optional ``limit``. ``limit`` is a request-time policy guard (used b | STRING |
| HIGH | …e_backend/app/proprietary/platforms/youtube/scraper.py | 0 | collect :func:`iter_serps` into a list, honoring an optional ``limit``. ``limit`` is a request-time policy guard (used b | STRING |
| HIGH | …end/app/proprietary/platforms/google_search/scraper.py | 0 | collect :func:`iter_serps` into a list, honoring an optional ``limit``. ``limit`` is a request-time policy guard (used b | STRING |
| HIGH | …ckend/app/proprietary/platforms/google_maps/schemas.py | 0 | serialize to the flat dict shape apify emits (keeps extras). | STRING |
| HIGH | …e_backend/app/proprietary/platforms/youtube/schemas.py | 0 | serialize to the flat dict shape apify emits (keeps extras). | STRING |
| HIGH | …end/app/proprietary/platforms/google_search/schemas.py | 0 | serialize to the flat dict shape apify emits (keeps extras). | STRING |
| HIGH | …backend/app/proprietary/platforms/youtube/innertube.py | 0 | drop the current ip and connect through a fresh one. returns new session. | STRING |
| HIGH | …ense_backend/app/proprietary/platforms/reddit/fetch.py | 0 | drop the current ip and connect through a fresh one. returns new session. | STRING |
| HIGH | …e_backend/app/proprietary/platforms/instagram/fetch.py | 0 | drop the current ip and connect through a fresh one. returns new session. | STRING |
| HIGH | …backend/app/proprietary/platforms/youtube/innertube.py | 0 | open a warm rotate-on-block session holder (caller owns ``close()``). | STRING |
| HIGH | …ense_backend/app/proprietary/platforms/reddit/fetch.py | 0 | open a warm rotate-on-block session holder (caller owns ``close()``). | STRING |
| HIGH | …kend/app/proprietary/platforms/tiktok/session/proxy.py | 0 | open a warm rotate-on-block session holder (caller owns ``close()``). | STRING |
| HIGH | …e_backend/app/proprietary/platforms/instagram/fetch.py | 0 | open a warm rotate-on-block session holder (caller owns ``close()``). | STRING |
| HIGH | …backend/app/proprietary/platforms/youtube/innertube.py | 0 | open one reused, rotate-on-block proxy session for a continuation chain. | STRING |
| HIGH | …ense_backend/app/proprietary/platforms/reddit/fetch.py | 0 | open one reused, rotate-on-block proxy session for a continuation chain. | STRING |
| HIGH | …kend/app/proprietary/platforms/tiktok/session/proxy.py | 0 | open one reused, rotate-on-block proxy session for a continuation chain. | STRING |
| HIGH | …e_backend/app/proprietary/platforms/instagram/fetch.py | 0 | open one reused, rotate-on-block proxy session for a continuation chain. | STRING |
| HIGH | …ackend/app/capabilities/google_maps/scrape/executor.py | 0 | bind the executor to a comments fn (defaults to the proprietary actor). | STRING |
| HIGH | …se_backend/app/capabilities/youtube/scrape/executor.py | 0 | bind the executor to a comments fn (defaults to the proprietary actor). | STRING |
| HIGH | …kend/app/capabilities/google_search/scrape/executor.py | 0 | bind the executor to a comments fn (defaults to the proprietary actor). | STRING |
| HIGH | …nse_backend/app/capabilities/reddit/scrape/executor.py | 0 | bind the executor to a comments fn (defaults to the proprietary actor). | STRING |
| HIGH | …nse_backend/app/capabilities/tiktok/scrape/executor.py | 0 | bind the executor to a comments fn (defaults to the proprietary actor). | STRING |
| HIGH | …backend/app/capabilities/instagram/details/executor.py | 0 | bind the executor to a comments fn (defaults to the proprietary actor). | STRING |
| HIGH | …_backend/app/capabilities/instagram/scrape/executor.py | 0 | bind the executor to a comments fn (defaults to the proprietary actor). | STRING |
| HIGH | …ckend/app/capabilities/google_maps/reviews/executor.py | 0 | bind the executor to a comments fn (defaults to the proprietary actor). | STRING |
| HIGH | …_backend/app/capabilities/youtube/comments/executor.py | 0 | bind the executor to a comments fn (defaults to the proprietary actor). | STRING |
| HIGH | …e_backend/app/capabilities/tiktok/comments/executor.py | 0 | bind the executor to a comments fn (defaults to the proprietary actor). | STRING |
| HIGH | …ense_backend/app/capabilities/reddit/scrape/schemas.py | 0 | worst-case billable items for the pre-flight gate: ``max_items`` is a hard cross-source ceiling (le=100), so no call can | STRING |
| HIGH | …ense_backend/app/capabilities/tiktok/scrape/schemas.py | 0 | worst-case billable items for the pre-flight gate: ``max_items`` is a hard cross-source ceiling (le=100), so no call can | STRING |
| HIGH | …e_backend/app/capabilities/instagram/scrape/schemas.py | 0 | worst-case billable items for the pre-flight gate: ``max_items`` is a hard cross-source ceiling (le=100), so no call can | STRING |
| HIGH | …ulti_agent_chat/subagents/connectors/onedrive/agent.py | 0 | ``deliverables`` route: ``surfsensesubagentspec`` builder for deepagents. tools self-gate inside their bodies via :func: | STRING |
| HIGH | …multi_agent_chat/subagents/connectors/dropbox/agent.py | 0 | ``deliverables`` route: ``surfsensesubagentspec`` builder for deepagents. tools self-gate inside their bodies via :func: | STRING |
| HIGH | …_agent_chat/subagents/connectors/google_drive/agent.py | 0 | ``deliverables`` route: ``surfsensesubagentspec`` builder for deepagents. tools self-gate inside their bodies via :func: | STRING |
| HIGH | …ti_agent_chat/subagents/builtins/deliverables/agent.py | 0 | ``deliverables`` route: ``surfsensesubagentspec`` builder for deepagents. tools self-gate inside their bodies via :func: | STRING |
| HIGH | …gent_chat/subagents/connectors/onedrive/tools/index.py | 0 | ``gmail`` native tools and (empty) permission ruleset. tools self-gate via :func:`request_approval` in their bodies. | STRING |
| HIGH | …agent_chat/subagents/connectors/dropbox/tools/index.py | 0 | ``gmail`` native tools and (empty) permission ruleset. tools self-gate via :func:`request_approval` in their bodies. | STRING |
| HIGH | …_chat/subagents/connectors/google_drive/tools/index.py | 0 | ``gmail`` native tools and (empty) permission ruleset. tools self-gate via :func:`request_approval` in their bodies. | STRING |
| HIGH | …nt_chat/subagents/builtins/deliverables/tools/index.py | 0 | ``gmail`` native tools and (empty) permission ruleset. tools self-gate via :func:`request_approval` in their bodies. | STRING |
| HIGH | …/subagents/builtins/mcp_discovery/tools/gmail/index.py | 0 | ``gmail`` native tools and (empty) permission ruleset. tools self-gate via :func:`request_approval` in their bodies. | STRING |
| HIGH | …backend/app/routes/google_gmail_add_connector_route.py | 0 | handle jira oauth callback. args: request: fastapi request object code: authorization code from atlassian (if user grant | STRING |
| 76 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | surfsense_evals/src/surfsense_evals/core/scenarios.py | 55 | __all__ = ["format_scenario_md"] | CODE |
| LOW | surfsense_evals/src/surfsense_evals/core/auth.py | 32 | logger = logging.getLogger(__name__) | CODE |
| LOW | surfsense_evals/src/surfsense_evals/core/auth.py | 265 | __all__ = [ | CODE |
| LOW | surfsense_evals/src/surfsense_evals/core/config.py | 254 | def set_suite_state(config: Config, suite: str, suite_state: SuiteState) -> None: | CODE |
| LOW | surfsense_evals/src/surfsense_evals/core/registry.py | 248 | __all__ = [ | CODE |
| LOW | …ense_evals/src/surfsense_evals/core/ingest_settings.py | 275 | __all__ = [ | CODE |
| LOW | surfsense_evals/src/surfsense_evals/core/vision_llm.py | 122 | __all__ = [ | CODE |
| LOW | …nse_evals/src/surfsense_evals/core/metrics/__init__.py | 12 | __all__ = [ | CODE |
| LOW | …e_evals/src/surfsense_evals/core/metrics/comparison.py | 245 | __all__ = [ | CODE |
| LOW | …se_evals/src/surfsense_evals/core/metrics/retrieval.py | 134 | __all__ = ["RetrievalScores", "mrr", "ndcg_at_k", "recall_at_k", "score_run"] | CODE |
| LOW | …_evals/src/surfsense_evals/core/metrics/mc_accuracy.py | 117 | __all__ = [ | CODE |
| LOW | …se_evals/src/surfsense_evals/core/clients/documents.py | 31 | logger = logging.getLogger(__name__) | CODE |
| LOW | …nse_evals/src/surfsense_evals/core/clients/__init__.py | 9 | __all__ = [ | CODE |
| LOW | …nse_evals/src/surfsense_evals/core/clients/new_chat.py | 34 | logger = logging.getLogger(__name__) | CODE |
| LOW | …se_evals/src/surfsense_evals/core/parsers/pdf_pages.py | 19 | logger = logging.getLogger(__name__) | CODE |
| LOW | …se_evals/src/surfsense_evals/core/parsers/pdf_pages.py | 35 | __all__ = ["count_pdf_pages"] | CODE |
| LOW | …nse_evals/src/surfsense_evals/core/parsers/__init__.py | 29 | __all__ = [ | CODE |
| LOW | …e_evals/src/surfsense_evals/core/parsers/llamacloud.py | 29 | logger = logging.getLogger(__name__) | CODE |
| LOW | …e_evals/src/surfsense_evals/core/parsers/llamacloud.py | 174 | __all__ = ["LlamaCloudError", "parse_with_llamacloud"] | CODE |
| LOW | …nse_evals/src/surfsense_evals/core/parsers/azure_di.py | 30 | logger = logging.getLogger(__name__) | CODE |
| LOW | …nse_evals/src/surfsense_evals/core/parsers/azure_di.py | 148 | __all__ = ["AzureDIError", "parse_with_azure_di"] | CODE |
| LOW | …/src/surfsense_evals/core/providers/openrouter_chat.py | 37 | logger = logging.getLogger(__name__) | CODE |
| LOW | …/src/surfsense_evals/core/providers/openrouter_chat.py | 118 | __all__ = ["OpenRouterChatProvider"] | CODE |
| LOW | …e_evals/src/surfsense_evals/core/providers/__init__.py | 14 | __all__ = ["OpenRouterPdfProvider", "OpenRouterResponse"] | CODE |
| LOW | …s/src/surfsense_evals/core/providers/openrouter_pdf.py | 43 | logger = logging.getLogger(__name__) | CODE |
| LOW | …s/src/surfsense_evals/core/providers/openrouter_pdf.py | 229 | __all__ = ["OpenRouterPdfProvider", "OpenRouterResponse", "PdfEngine"] | CODE |
| LOW | …ense_evals/src/surfsense_evals/core/parse/citations.py | 104 | __all__ = [ | CODE |
| LOW | …vals/src/surfsense_evals/core/parse/freeform_answer.py | 85 | __all__ = ["extract_freeform_answer"] | CODE |
| LOW | …_evals/src/surfsense_evals/core/parse/answer_letter.py | 122 | __all__ = ["AnswerLetterResult", "ParserStrategy", "extract_answer_letter"] | CODE |
| LOW | …sense_evals/src/surfsense_evals/core/parse/__init__.py | 10 | __all__ = [ | CODE |
| LOW | surfsense_evals/src/surfsense_evals/core/parse/sse.py | 72 | __all__ = ["SseEvent", "iter_sse_events"] | CODE |
| LOW | …rfsense_evals/src/surfsense_evals/core/pdf/__init__.py | 15 | __all__ = [ | CODE |
| LOW | …ense_evals/src/surfsense_evals/core/report/__init__.py | 10 | __all__ = ["write_report"] | CODE |
| LOW | …fsense_evals/src/surfsense_evals/core/report/writer.py | 89 | __all__ = ["ReportSection", "write_report"] | CODE |
| LOW | …ense_evals/src/surfsense_evals/core/arms/native_pdf.py | 18 | logger = logging.getLogger(__name__) | CODE |
| LOW | …ense_evals/src/surfsense_evals/core/arms/native_pdf.py | 104 | __all__ = ["NativePdfArm"] | CODE |
| LOW | …sense_evals/src/surfsense_evals/core/arms/surfsense.py | 27 | logger = logging.getLogger(__name__) | CODE |
| LOW | …sense_evals/src/surfsense_evals/core/arms/surfsense.py | 102 | __all__ = ["SurfSenseArm"] | CODE |
| LOW | …fsense_evals/src/surfsense_evals/core/arms/__init__.py | 21 | __all__ = [ | CODE |
| LOW | …fsense_evals/src/surfsense_evals/core/arms/bare_llm.py | 19 | logger = logging.getLogger(__name__) | CODE |
| LOW | …fsense_evals/src/surfsense_evals/core/arms/bare_llm.py | 100 | __all__ = ["BareLlmArm"] | CODE |
| LOW | surfsense_evals/src/surfsense_evals/suites/__init__.py | 25 | logger = logging.getLogger(__name__) | CODE |
| LOW⚡ | …s/src/surfsense_evals/suites/research/frames/ingest.py | 62 | logger = logging.getLogger(__name__) | CODE |
| LOW | …s/src/surfsense_evals/suites/research/frames/ingest.py | 345 | __all__ = ["run_ingest"] | CODE |
| LOW⚡ | …s/src/surfsense_evals/suites/research/frames/runner.py | 53 | logger = logging.getLogger(__name__) | CODE |
| LOW | …s/src/surfsense_evals/suites/research/frames/runner.py | 724 | __all__ = ["FramesBenchmark", "FramesRunnerQuestion"] | CODE |
| LOW⚡ | …s/src/surfsense_evals/suites/research/frames/grader.py | 44 | logger = logging.getLogger(__name__) | CODE |
| LOW | …s/src/surfsense_evals/suites/research/frames/grader.py | 348 | __all__ = [ | CODE |
| LOW | …/src/surfsense_evals/suites/research/frames/dataset.py | 31 | logger = logging.getLogger(__name__) | CODE |
| LOW | …/src/surfsense_evals/suites/research/frames/dataset.py | 171 | __all__ = [ | CODE |
| LOW | …s/src/surfsense_evals/suites/research/frames/prompt.py | 70 | __all__ = ["build_bare_prompt", "build_surfsense_prompt"] | CODE |
| LOW | …c/surfsense_evals/suites/research/frames/wiki_fetch.py | 38 | logger = logging.getLogger(__name__) | CODE |
| LOW | …c/surfsense_evals/suites/research/frames/wiki_fetch.py | 241 | __all__ = [ | CODE |
| LOW | …als/src/surfsense_evals/suites/research/crag/ingest.py | 70 | logger = logging.getLogger(__name__) | CODE |
| LOW | …als/src/surfsense_evals/suites/research/crag/ingest.py | 447 | __all__ = ["read_page_markdown", "run_ingest"] | CODE |
| LOW⚡ | …als/src/surfsense_evals/suites/research/crag/runner.py | 72 | logger = logging.getLogger(__name__) | CODE |
| LOW | …als/src/surfsense_evals/suites/research/crag/runner.py | 1051 | __all__ = ["CragBenchmark", "CragRunnerQuestion"] | CODE |
| LOW⚡ | …als/src/surfsense_evals/suites/research/crag/grader.py | 45 | logger = logging.getLogger(__name__) | CODE |
| LOW | …als/src/surfsense_evals/suites/research/crag/grader.py | 562 | __all__ = [ | CODE |
| LOW | …c/surfsense_evals/suites/research/crag/html_extract.py | 33 | logger = logging.getLogger(__name__) | CODE |
| 611 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | surfsense_backend/app/connectors/clickup_connector.py | 58 | Make a request to the ClickUp API. Args: endpoint: API endpoint (without base URL) | STRING |
| HIGH | surfsense_backend/app/connectors/clickup_connector.py | 105 | Fetch all tasks from a ClickUp workspace using the filtered team tasks endpoint. Args: wor | STRING |
| HIGH | surfsense_backend/app/connectors/clickup_connector.py | 211 | Fetch detailed information about a specific task. Args: task_id: ClickUp task ID | STRING |
| HIGH | surfsense_backend/app/connectors/clickup_connector.py | 227 | Fetch comments for a specific task. Args: task_id: ClickUp task ID Returns: | STRING |
| HIGH | surfsense_backend/app/connectors/slack_history.py | 223 | Fetch all channels that the bot has access to, with rate limit handling. Args: include_pri | STRING |
| HIGH | surfsense_backend/app/connectors/slack_history.py | 320 | Fetch conversation history for a channel. Args: channel_id: The ID of the channel to fetch | STRING |
| HIGH | surfsense_backend/app/connectors/slack_history.py | 475 | Get information about a user. Args: user_id: The ID of the user to get info for R | STRING |
| HIGH | surfsense_backend/app/connectors/notion_history.py | 288 | Execute Notion API call with retry logic and exponential backoff. Handles retryable errors per Notion | STRING |
| HIGH | surfsense_backend/app/connectors/notion_history.py | 843 | Create a new Notion page. Args: title: Page title content: Page content (markd | STRING |
| HIGH | surfsense_backend/app/connectors/notion_history.py | 938 | Update an existing Notion page by appending new content. Note: Content is appended to the page, not re | STRING |
| HIGH | surfsense_backend/app/connectors/notion_history.py | 1035 | Delete (archive) a Notion page. Note: Notion doesn't truly delete pages, it archives them. Ar | STRING |
| HIGH | surfsense_backend/app/connectors/confluence_history.py | 288 | Make a request to the Confluence API. Args: endpoint: API endpoint (without base URL) | STRING |
| HIGH | surfsense_backend/app/connectors/confluence_history.py | 449 | Fetch all pages in a specific space. Args: space_id: The ID of the space to fetch pages fr | STRING |
| HIGH | surfsense_backend/app/connectors/confluence_history.py | 500 | Fetch all comments for a specific page (both footer and inline comments). Args: page_id: T | STRING |
| HIGH | surfsense_backend/app/connectors/linear_connector.py | 292 | Execute a GraphQL query against the Linear API with automatic token refresh. Args: query: | STRING |
| HIGH | surfsense_backend/app/connectors/linear_connector.py | 332 | Fetch all issues from Linear. Args: include_comments: Whether to include comments in the r | STRING |
| HIGH | surfsense_backend/app/connectors/luma_connector.py | 57 | Make a request to the Luma API. Args: endpoint: API endpoint path (without base URL) | STRING |
| HIGH | surfsense_backend/app/connectors/discord_connector.py | 345 | Fetch all text channels in a guild. Args: guild_id (str): The ID of the guild to fetch cha | STRING |
| HIGH | surfsense_backend/app/connectors/discord_connector.py | 384 | Fetch message history from a text channel. Args: channel_id (str): The ID of the channel t | STRING |
| HIGH | surfsense_backend/app/connectors/discord_connector.py | 460 | Get information about a user in a guild. Args: guild_id (str): The ID of the guild. | STRING |
| HIGH | surfsense_backend/app/connectors/bookstack_connector.py | 107 | Make a request to the BookStack API. Args: endpoint: API endpoint (without base URL, e.g., | STRING |
| HIGH | surfsense_backend/app/connectors/bookstack_connector.py | 159 | Fetch all pages from BookStack with pagination. Args: count: Number of records per request | STRING |
| HIGH | surfsense_backend/app/connectors/bookstack_connector.py | 202 | Get detailed information for a single page. The response includes 'html' (rendered) and optionally 'ma | STRING |
| HIGH | surfsense_backend/app/connectors/bookstack_connector.py | 225 | Export a page as Markdown content. Args: page_id: The ID of the page Returns: | STRING |
| HIGH | surfsense_backend/app/connectors/bookstack_connector.py | 244 | Get detailed information for a single book. The response includes a 'content' property with the book's | STRING |
| HIGH | surfsense_backend/app/connectors/bookstack_connector.py | 272 | Fetch pages updated within a specific date range. Uses the filter[updated_at:gt] parameter for increme | STRING |
| HIGH | surfsense_backend/app/connectors/bookstack_connector.py | 334 | Get page details along with its full content. Args: page_id: The ID of the page | STRING |
| HIGH | surfsense_backend/app/connectors/clickup_history.py | 271 | Fetch all tasks from a ClickUp workspace. Args: workspace_id: ClickUp workspace (team) ID | STRING |
| HIGH | surfsense_backend/app/connectors/clickup_history.py | 318 | Fetch detailed information about a specific task. Args: task_id: ClickUp task ID | STRING |
| HIGH | surfsense_backend/app/connectors/clickup_history.py | 335 | Fetch comments for a specific task. Args: task_id: ClickUp task ID Returns: | STRING |
| HIGH | …rfsense_backend/app/connectors/confluence_connector.py | 96 | Make a request to the Confluence API. Args: endpoint: API endpoint (without base URL) | STRING |
| HIGH | …rfsense_backend/app/connectors/confluence_connector.py | 172 | Fetch all pages in a specific space. Args: space_id: The ID of the space to fetch pages fr | STRING |
| HIGH | …rfsense_backend/app/connectors/confluence_connector.py | 223 | Fetch all comments for a specific page (both footer and inline comments). Args: page_id: T | STRING |
| HIGH | …nse_backend/app/connectors/google_drive/credentials.py | 24 | Get valid Google OAuth credentials, refreshing if needed. Args: session: Database session conn | STRING |
| HIGH | surfsense_backend/app/tasks/composio_indexer.py | 60 | Dynamically import and return the indexer function for a toolkit. Args: toolkit_id: The toolkit ID (e. | STRING |
| HIGH | surfsense_backend/app/tasks/connector_indexers/base.py | 66 | Parse date from multiple common formats. Args: date_str: Date string to parse Returns: Pa | STRING |
| HIGH | …subagents/connectors/google_drive/tools/create_file.py | 34 | Create a new Google Doc or Google Sheet in Google Drive. Use this tool when the user explicitly asks to create | STRING |
| HIGH | …/subagents/connectors/google_drive/tools/trash_file.py | 27 | Move a Google Drive file to trash. Use this tool when the user explicitly asks to delete, remove, or trash | STRING |
| HIGH | …t_chat/subagents/builtins/deliverables/tools/report.py | 590 | Generate a structured Markdown report artifact from provided content. Use this tool when the user asks | STRING |
| HIGH | …/builtins/mcp_discovery/tools/calendar/update_event.py | 48 | Update an existing Google Calendar event. Use when the user asks to modify, reschedule, or change a calendar ev | STRING |
| HIGH | …/builtins/mcp_discovery/tools/calendar/delete_event.py | 29 | Delete a Google Calendar event. Use when the user asks to delete, remove, or cancel a calendar event. | STRING |
| HIGH | …/builtins/mcp_discovery/tools/calendar/create_event.py | 33 | Create a new event on Google Calendar. Use when the user asks to schedule, create, or add a calendar event. | STRING |
| HIGH | …nts/builtins/mcp_discovery/tools/gmail/create_draft.py | 32 | Create a draft email in Gmail. Use when the user asks to draft, compose, or prepare an email without se | STRING |
| HIGH | …ts/builtins/mcp_discovery/tools/gmail/search_emails.py | 28 | Search emails in the user's Gmail inbox using Gmail search syntax. Args: query: Gmail search query, | STRING |
| HIGH | …gents/builtins/mcp_discovery/tools/gmail/send_email.py | 37 | Send an email via Gmail. Use when the user explicitly asks to send an email. This sends the email immed | STRING |
| HIGH | …ents/builtins/mcp_discovery/tools/gmail/trash_email.py | 27 | Move an email or draft to trash in Gmail. Use when the user asks to delete, remove, or trash an email or draft. | STRING |
| HIGH | …nts/builtins/mcp_discovery/tools/gmail/update_draft.py | 33 | Update an existing Gmail draft. Use when the user asks to modify, edit, or add content to an existing e | STRING |
| HIGH | …pp/agents/chat/multi_agent_chat/shared/date_filters.py | 11 | Parse either an ISO date (YYYY-MM-DD) or ISO datetime into an aware UTC datetime. - If `value` is a date, inte | STRING |
| HIGH | …gents/chat/multi_agent_chat/shared/tools/mcp/client.py | 46 | Connect to the MCP server and manage its lifecycle. Retries only apply to the **connection** phase (spawning th | STRING |
| HIGH | …gents/chat/multi_agent_chat/shared/tools/mcp/client.py | 181 | Call a tool on the MCP server. Args: tool_name: Name of the tool to call arguments: Arg | STRING |
| HIGH | …are/checkpointed_subagent_middleware/resume_routing.py | 35 | Slice ``decisions`` into ``{tool_call_id: {"decisions": <slice>}}``. Args: decisions: Flat list of decision | STRING |
| HIGH | …are/checkpointed_subagent_middleware/resume_routing.py | 70 | Extract ``[(tool_call_id, action_count), ...]`` from a paused parent state. Reads ``state.interrupts`` (the bundle | STRING |
| HIGH | surfsense_backend/app/utils/oauth_security.py | 100 | Validate and decode state parameter with signature verification. Args: state: The state pa | STRING |
| HIGH | surfsense_backend/app/utils/validators.py | 69 | Validate and convert workspace_id to integer. Args: workspace_id: The workspace ID to validate Re | STRING |
| HIGH | surfsense_backend/app/utils/validators.py | 123 | Validate and convert document_ids to list of integers. Args: document_ids: The document IDs to validat | STRING |
| HIGH | surfsense_backend/app/utils/validators.py | 189 | Validate selected_connectors list. Args: connectors: The connectors to validate Returns: | STRING |
| HIGH | surfsense_backend/app/utils/validators.py | 233 | Validate research_mode parameter. Args: research_mode: The research mode to validate Returns: | STRING |
| HIGH | surfsense_backend/app/utils/validators.py | 264 | Validate search_mode parameter. Args: search_mode: The search mode to validate Returns: s | STRING |
| HIGH | surfsense_backend/app/utils/validators.py | 295 | Validate and convert top_k to integer. Args: top_k: The top_k value to validate Returns: | STRING |
| HIGH | surfsense_backend/app/utils/validators.py | 349 | Validate messages structure. Args: messages: The messages to validate Returns: List[dict] | STRING |
| 23 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | surfsense_evals/scripts/compute_blog_extras.py | 102 | CODE | |
| LOW | surfsense_evals/scripts/compute_blog_extras.py | 325 | CODE | |
| LOW | surfsense_evals/scripts/retry_failed_questions.py | 343 | CODE | |
| LOW | …ense_evals/src/surfsense_evals/core/ingest_settings.py | 238 | CODE | |
| LOW | surfsense_evals/src/surfsense_evals/core/cli.py | 573 | CODE | |
| LOW | …nse_evals/src/surfsense_evals/core/clients/new_chat.py | 198 | CODE | |
| LOW | …s/src/surfsense_evals/core/providers/openrouter_pdf.py | 173 | CODE | |
| LOW | …vals/src/surfsense_evals/core/parse/freeform_answer.py | 34 | CODE | |
| LOW | …/src/surfsense_evals/suites/research/frames/dataset.py | 119 | CODE | |
| LOW | …als/src/surfsense_evals/suites/research/crag/ingest.py | 174 | CODE | |
| LOW | …als/src/surfsense_evals/suites/research/crag/runner.py | 580 | CODE | |
| LOW | …c/surfsense_evals/suites/research/crag/html_extract.py | 170 | CODE | |
| LOW | …e_evals/suites/multimodal_doc/parser_compare/runner.py | 134 | CODE | |
| LOW | …e_evals/suites/multimodal_doc/parser_compare/runner.py | 731 | CODE | |
| LOW | …e_evals/suites/multimodal_doc/parser_compare/runner.py | 618 | CODE | |
| LOW | …ls/src/surfsense_evals/suites/medical/mirage/ingest.py | 112 | CODE | |
| LOW | …ls/src/surfsense_evals/suites/medical/mirage/ingest.py | 290 | CODE | |
| LOW | …vals/src/surfsense_evals/suites/medical/cure/ingest.py | 121 | CODE | |
| LOW | …vals/src/surfsense_evals/suites/medical/cure/runner.py | 75 | CODE | |
| LOW | …vals/src/surfsense_evals/suites/medical/cure/runner.py | 221 | CODE | |
| LOW | surfsense_backend/app/users.py | 65 | CODE | |
| LOW | surfsense_backend/app/connectors/slack_history.py | 55 | CODE | |
| LOW | surfsense_backend/app/connectors/slack_history.py | 220 | CODE | |
| LOW | surfsense_backend/app/connectors/slack_history.py | 313 | CODE | |
| LOW | surfsense_backend/app/connectors/slack_history.py | 474 | CODE | |
| LOW | …sense_backend/app/connectors/google_gmail_connector.py | 79 | CODE | |
| LOW | …sense_backend/app/connectors/google_gmail_connector.py | 385 | CODE | |
| LOW | surfsense_backend/app/connectors/notion_history.py | 115 | CODE | |
| LOW | surfsense_backend/app/connectors/notion_history.py | 281 | CODE | |
| LOW | surfsense_backend/app/connectors/notion_history.py | 591 | CODE | |
| LOW | surfsense_backend/app/connectors/notion_history.py | 675 | CODE | |
| LOW | surfsense_backend/app/connectors/notion_history.py | 757 | CODE | |
| LOW | surfsense_backend/app/connectors/notion_history.py | 935 | CODE | |
| LOW | surfsense_backend/app/connectors/confluence_history.py | 57 | CODE | |
| LOW | surfsense_backend/app/connectors/confluence_history.py | 347 | CODE | |
| LOW | surfsense_backend/app/connectors/confluence_history.py | 574 | CODE | |
| LOW | surfsense_backend/app/connectors/linear_connector.py | 102 | CODE | |
| LOW | surfsense_backend/app/connectors/linear_connector.py | 256 | CODE | |
| LOW | surfsense_backend/app/connectors/linear_connector.py | 406 | CODE | |
| LOW | surfsense_backend/app/connectors/teams_history.py | 79 | CODE | |
| LOW | …se_backend/app/connectors/google_calendar_connector.py | 50 | CODE | |
| LOW | surfsense_backend/app/connectors/luma_connector.py | 54 | CODE | |
| LOW | surfsense_backend/app/connectors/luma_connector.py | 210 | CODE | |
| LOW | surfsense_backend/app/connectors/teams_connector.py | 53 | CODE | |
| LOW | surfsense_backend/app/connectors/discord_connector.py | 87 | CODE | |
| LOW | surfsense_backend/app/connectors/airtable_connector.py | 53 | CODE | |
| LOW | surfsense_backend/app/connectors/airtable_connector.py | 332 | CODE | |
| LOW | surfsense_backend/app/connectors/airtable_history.py | 49 | CODE | |
| LOW | surfsense_backend/app/connectors/clickup_history.py | 53 | CODE | |
| LOW | …rfsense_backend/app/connectors/confluence_connector.py | 295 | CODE | |
| LOW | …ense_backend/app/connectors/onedrive/folder_manager.py | 50 | CODE | |
| LOW | …sense_backend/app/connectors/dropbox/folder_manager.py | 43 | CODE | |
| LOW | …nse_backend/app/connectors/google_drive/credentials.py | 20 | CODE | |
| LOW | …fsense_backend/app/tasks/celery_tasks/gateway_tasks.py | 66 | CODE | |
| LOW | …fsense_backend/app/tasks/celery_tasks/gateway_tasks.py | 67 | CODE | |
| LOW | …d/app/tasks/celery_tasks/stripe_reconciliation_task.py | 39 | CODE | |
| LOW | …/tasks/celery_tasks/stale_notification_cleanup_task.py | 81 | CODE | |
| LOW | …/tasks/celery_tasks/stale_notification_cleanup_task.py | 264 | CODE | |
| LOW | …sense_backend/app/tasks/celery_tasks/document_tasks.py | 454 | CODE | |
| LOW | …sense_backend/app/tasks/celery_tasks/document_tasks.py | 722 | CODE | |
| 231 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | .cursor/skills/entity-optimizer/SKILL.md | 185 | ### Step 1: Entity Discovery | COMMENT |
| LOW | .cursor/skills/entity-optimizer/SKILL.md | 225 | ### Step 2: Entity Signal Audit | COMMENT |
| LOW | .cursor/skills/entity-optimizer/SKILL.md | 240 | ### Step 3: Report & Action Plan | COMMENT |
| LOW⚡ | …s/entity-optimizer/references/knowledge-graph-guide.md | 110 | #### Step 1: Check Eligibility | COMMENT |
| LOW⚡ | …s/entity-optimizer/references/knowledge-graph-guide.md | 114 | #### Step 2: Create the Item | COMMENT |
| LOW⚡ | …s/entity-optimizer/references/knowledge-graph-guide.md | 122 | #### Step 3: Add Core Statements | COMMENT |
| LOW | …s/entity-optimizer/references/knowledge-graph-guide.md | 159 | #### Step 4: Add External Identifiers | COMMENT |
| LOW | …s/entity-optimizer/references/knowledge-graph-guide.md | 173 | #### Step 5: Add References | COMMENT |
| LOW | …keyword-research/references/topic-cluster-templates.md | 13 | ### Step 1: Define the Pillar Topic | COMMENT |
| LOW | …keyword-research/references/topic-cluster-templates.md | 36 | ### Step 2: Map Cluster Subtopics | COMMENT |
| LOW | …keyword-research/references/topic-cluster-templates.md | 49 | ### Step 3: Define Internal Linking Map | COMMENT |
| LOW⚡ | …kills/playwright-testing/core/projects-dependencies.md | 172 | // Step 1: Database setup | COMMENT |
| LOW⚡ | …kills/playwright-testing/core/projects-dependencies.md | 178 | // Step 2: Auth setup (needs DB) | COMMENT |
| LOW⚡ | …kills/playwright-testing/core/projects-dependencies.md | 185 | // Step 3: Seed data (needs auth) | COMMENT |
| LOW⚡ | …lls/playwright-testing/testing-patterns/api-testing.md | 474 | // Step 1: Create a product | COMMENT |
| LOW⚡ | …lls/playwright-testing/testing-patterns/api-testing.md | 481 | // Step 2: Create a cart | COMMENT |
| LOW⚡ | …lls/playwright-testing/testing-patterns/api-testing.md | 489 | // Step 3: Checkout | COMMENT |
| LOW | …lls/playwright-testing/testing-patterns/api-testing.md | 505 | // Step 4: Verify order in list | COMMENT |
| LOW | …lls/playwright-testing/testing-patterns/api-testing.md | 510 | // Step 5: Verify stock decreased | COMMENT |
| LOW | .cursor/skills/content-quality-auditor/SKILL.md | 184 | ### Step 1: Preparation | COMMENT |
| LOW | .cursor/skills/content-quality-auditor/SKILL.md | 204 | ### Step 2: CORE Audit (40 items) | COMMENT |
| LOW | .cursor/skills/content-quality-auditor/SKILL.md | 228 | ### Step 3: EEAT Audit (40 items) | COMMENT |
| LOW | .cursor/skills/content-quality-auditor/SKILL.md | 245 | ### Step 4: Scoring & Report | COMMENT |
| LOW | .cursor/skills/domain-authority-auditor/SKILL.md | 170 | ### Step 1: Preparation | COMMENT |
| LOW | .cursor/skills/domain-authority-auditor/SKILL.md | 201 | ### Step 2: C + I Audit (20 items) | COMMENT |
| LOW | .cursor/skills/domain-authority-auditor/SKILL.md | 232 | ### Step 3: T + E Audit (20 items) | COMMENT |
| LOW | .cursor/skills/domain-authority-auditor/SKILL.md | 258 | ### Step 4: Scoring & Report | COMMENT |
| LOW | …ent-gap-analysis/references/gap-analysis-frameworks.md | 20 | #### Step 1: Define Your Keyword Universe | COMMENT |
| LOW | …ent-gap-analysis/references/gap-analysis-frameworks.md | 32 | #### Step 2: Build Competitor Keyword Profiles | COMMENT |
| LOW | …ent-gap-analysis/references/gap-analysis-frameworks.md | 43 | #### Step 3: Calculate Keyword Overlap | COMMENT |
| LOW | …ent-gap-analysis/references/gap-analysis-frameworks.md | 68 | #### Step 4: Filter and Categorize Gaps (Segment C) | COMMENT |
| LOW | …ent-gap-analysis/references/gap-analysis-frameworks.md | 89 | #### Step 5: Prioritize Gaps | COMMENT |
| LOW | …ent-gap-analysis/references/gap-analysis-frameworks.md | 99 | #### Step 1: Inventory Your Content Formats | COMMENT |
| LOW | …ent-gap-analysis/references/gap-analysis-frameworks.md | 119 | #### Step 2: Benchmark Against Competitors | COMMENT |
| LOW | …ent-gap-analysis/references/gap-analysis-frameworks.md | 134 | #### Step 3: Identify Format Gaps | COMMENT |
| LOW | …ent-gap-analysis/references/gap-analysis-frameworks.md | 143 | #### Step 4: Format-SERP Feature Alignment | COMMENT |
| LOW | …ent-gap-analysis/references/gap-analysis-frameworks.md | 164 | #### Step 1: Define Funnel Stages and Content Expectations | COMMENT |
| LOW | …ent-gap-analysis/references/gap-analysis-frameworks.md | 176 | #### Step 2: Audit Content by Funnel Stage | COMMENT |
| LOW | …ent-gap-analysis/references/gap-analysis-frameworks.md | 199 | #### Step 3: Identify Drop-Off Points | COMMENT |
| LOW⚡ | …ent-gap-analysis/references/gap-analysis-frameworks.md | 260 | #### Step 1: Group Gaps by Topic Cluster | COMMENT |
| LOW⚡ | …ent-gap-analysis/references/gap-analysis-frameworks.md | 270 | #### Step 2: Sequence by Priority and Dependencies | COMMENT |
| LOW⚡ | …ent-gap-analysis/references/gap-analysis-frameworks.md | 280 | #### Step 3: Assign Resources and Track | COMMENT |
| LOW | .cursor/skills/ugc-brief/SKILL.md | 12 | ### Step 1: Define Product & Key Messages | COMMENT |
| LOW | .cursor/skills/ugc-brief/SKILL.md | 27 | ### Step 2: Specify Hook Requirements | COMMENT |
| LOW | .cursor/skills/ugc-brief/SKILL.md | 45 | ### Step 3: List Talking Points | COMMENT |
| LOW | .cursor/skills/ugc-brief/SKILL.md | 66 | ### Step 4: Include Authenticity Guidelines | COMMENT |
| LOW | .cursor/skills/ugc-brief/SKILL.md | 89 | ### Step 5: Output Creator Brief | COMMENT |
| LOW | …mpetitor-analysis/references/positioning-frameworks.md | 78 | #### Step 1: Choose Your Axes | COMMENT |
| LOW | …mpetitor-analysis/references/positioning-frameworks.md | 95 | #### Step 2: Plot Competitors | COMMENT |
| LOW | …mpetitor-analysis/references/positioning-frameworks.md | 114 | #### Step 3: Identify White Space | COMMENT |
| LOW | …mpetitor-analysis/references/positioning-frameworks.md | 121 | #### Step 4: Choose Your Position | COMMENT |
| LOW | …ills/content-refresher/references/refresh-templates.md | 7 | ## Step 5: Create Refresh Plan | COMMENT |
| LOW | …ills/content-refresher/references/refresh-templates.md | 73 | ## Step 6: Write Refresh Content | COMMENT |
| LOW | …ills/content-refresher/references/refresh-templates.md | 120 | ## Step 7: Optimize for GEO During Refresh | COMMENT |
| LOW | …ills/content-refresher/references/refresh-templates.md | 159 | ## Step 8: Generate Republishing Strategy | COMMENT |
| LOW | …ills/content-refresher/references/refresh-templates.md | 209 | ## Step 9: Create Refresh Report | COMMENT |
| LOW | …al-seo-checker/references/technical-audit-templates.md | 7 | ## Step 3: Audit Site Speed & Core Web Vitals | COMMENT |
| LOW | …al-seo-checker/references/technical-audit-templates.md | 64 | ## Step 4: Audit Mobile-Friendliness | COMMENT |
| LOW | …al-seo-checker/references/technical-audit-templates.md | 104 | ## Step 5: Audit Security & HTTPS | COMMENT |
| LOW | …al-seo-checker/references/technical-audit-templates.md | 134 | ## Step 6: Audit URL Structure | COMMENT |
| 72 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | surfsense_backend/app/connectors/clickup_connector.py | 143 | # Check if there are more pages | COMMENT |
| LOW | surfsense_backend/app/connectors/clickup_connector.py | 196 | # Check if there are more pages | COMMENT |
| LOW⚡ | surfsense_backend/app/connectors/slack_history.py | 67 | # Check if client was initialized with a token directly (not via credentials) | COMMENT |
| LOW⚡ | surfsense_backend/app/connectors/slack_history.py | 137 | # Check if token is expired and refreshable | COMMENT |
| LOW | surfsense_backend/app/connectors/notion_history.py | 211 | # Check if token is expired and refreshable | COMMENT |
| LOW | surfsense_backend/app/connectors/notion_history.py | 323 | # Check if this error is retryable | COMMENT |
| LOW | surfsense_backend/app/connectors/notion_history.py | 328 | # Check if we've exhausted retries | COMMENT |
| LOW | surfsense_backend/app/connectors/notion_history.py | 638 | # Check if this is an unsupported block type error | COMMENT |
| LOW | surfsense_backend/app/connectors/notion_history.py | 691 | # Check if this is a known unsupported block type before processing | COMMENT |
| LOW | surfsense_backend/app/connectors/notion_history.py | 709 | # Check if block has children | COMMENT |
| LOW | surfsense_backend/app/connectors/notion_history.py | 731 | # Check if this is an unsupported block type error | COMMENT |
| LOW | surfsense_backend/app/connectors/confluence_history.py | 82 | # Check if using OAuth or legacy API token | COMMENT |
| LOW | surfsense_backend/app/connectors/confluence_history.py | 89 | # Check if access_token exists before processing | COMMENT |
| LOW | surfsense_backend/app/connectors/confluence_history.py | 168 | # Check if token is expired and refreshable (only for OAuth) | COMMENT |
| LOW | surfsense_backend/app/connectors/confluence_history.py | 432 | # Check if there are more spaces to fetch | COMMENT |
| LOW | surfsense_backend/app/connectors/confluence_history.py | 485 | # Check if there are more pages to fetch | COMMENT |
| LOW | surfsense_backend/app/connectors/confluence_history.py | 560 | # Check if there are more comments to fetch | COMMENT |
| LOW | surfsense_backend/app/connectors/linear_connector.py | 127 | # Check if access_token exists before processing | COMMENT |
| LOW | surfsense_backend/app/connectors/linear_connector.py | 177 | # Check if token is expired and refreshable | COMMENT |
| LOW | surfsense_backend/app/connectors/linear_connector.py | 538 | # Check if there are more pages | STRING |
| LOW | …se_backend/app/connectors/google_calendar_connector.py | 241 | # Set start to beginning of day (00:00:00) and end to end of day (23:59:59) | COMMENT |
| LOW | surfsense_backend/app/connectors/luma_connector.py | 246 | # Check if event falls within the date range | COMMENT |
| LOW | surfsense_backend/app/connectors/teams_connector.py | 127 | # Check if token is expired and refreshable | COMMENT |
| LOW | surfsense_backend/app/connectors/teams_connector.py | 295 | # Check if message is within date range | COMMENT |
| LOW⚡ | surfsense_backend/app/connectors/discord_connector.py | 159 | # Check if token is expired and refreshable | COMMENT |
| LOW | surfsense_backend/app/connectors/bookstack_connector.py | 191 | # Check if we've fetched all pages | COMMENT |
| LOW | surfsense_backend/app/connectors/bookstack_connector.py | 312 | # Check if we've fetched all pages | COMMENT |
| LOW | surfsense_backend/app/connectors/airtable_history.py | 74 | # Check if access_token exists before processing | COMMENT |
| LOW | surfsense_backend/app/connectors/airtable_history.py | 124 | # Check if token is expired and refreshable | COMMENT |
| LOW | surfsense_backend/app/connectors/clickup_history.py | 83 | # Check if using OAuth or legacy API token | COMMENT |
| LOW | surfsense_backend/app/connectors/clickup_history.py | 162 | # Check if token is expired and refreshable (only for OAuth) | COMMENT |
| LOW | …rfsense_backend/app/connectors/confluence_connector.py | 155 | # Check if there are more spaces to fetch | COMMENT |
| LOW | …rfsense_backend/app/connectors/confluence_connector.py | 208 | # Check if there are more pages to fetch | COMMENT |
| LOW | …rfsense_backend/app/connectors/confluence_connector.py | 281 | # Check if there are more comments to fetch | COMMENT |
| LOW | …nse_backend/app/connectors/google_drive/credentials.py | 141 | # Check if this is an invalid_grant error (token expired/revoked) | COMMENT |
| LOW | surfsense_backend/app/tasks/composio_indexer.py | 161 | # Check if toolkit is indexable | COMMENT |
| LOW | …sense_backend/app/tasks/celery_tasks/document_tasks.py | 425 | # Check if file exists and is accessible | COMMENT |
| LOW | …sense_backend/app/tasks/celery_tasks/document_tasks.py | 548 | # Check if this is an insufficient-credit error (either direct or | COMMENT |
| LOW | …sense_backend/app/tasks/celery_tasks/document_tasks.py | 670 | # Check if file exists and is accessible | COMMENT |
| LOW | …sense_backend/app/tasks/celery_tasks/document_tasks.py | 820 | # Set status to PROCESSING (shows spinner in UI via Zero) | COMMENT |
| LOW | …sense_backend/app/tasks/celery_tasks/document_tasks.py | 872 | # Check if this is an insufficient-credit error | COMMENT |
| LOW | …e_backend/app/tasks/connector_indexers/luma_indexer.py | 299 | # Check if document with this unique identifier already exists | COMMENT |
| LOW | …e_backend/app/tasks/connector_indexers/luma_indexer.py | 341 | # Check if a document with the same content_hash exists (from another connector) | COMMENT |
| LOW | …kend/app/tasks/connector_indexers/bookstack_indexer.py | 251 | # Check if document with this unique identifier already exists | COMMENT |
| LOW | …kend/app/tasks/connector_indexers/bookstack_indexer.py | 293 | # Check if a document with the same content_hash exists (from another connector) | COMMENT |
| LOW | …ackend/app/tasks/connector_indexers/discord_indexer.py | 240 | # Check if using OAuth (has bot_token in config) or legacy (has DISCORD_BOT_TOKEN) | COMMENT |
| LOW | …ackend/app/tasks/connector_indexers/discord_indexer.py | 517 | # Check if document with this unique identifier already exists | COMMENT |
| LOW | …ackend/app/tasks/connector_indexers/discord_indexer.py | 562 | # Check if a document with the same content_hash exists (from another connector) | COMMENT |
| LOW | …_backend/app/tasks/connector_indexers/teams_indexer.py | 409 | # Check if document with this unique identifier already exists | COMMENT |
| LOW | …_backend/app/tasks/connector_indexers/teams_indexer.py | 454 | # Check if a document with the same content_hash exists (from another connector) | COMMENT |
| LOW | …_backend/app/tasks/connector_indexers/slack_indexer.py | 391 | # Check if document with this unique identifier already exists | COMMENT |
| LOW | …_backend/app/tasks/connector_indexers/slack_indexer.py | 434 | # Check if a document with the same content_hash exists (from another connector) | COMMENT |
| LOW | …ackend/app/tasks/connector_indexers/clickup_indexer.py | 100 | # Check if using OAuth (has access_token in config) or legacy (has CLICKUP_API_TOKEN) | COMMENT |
| LOW | …ackend/app/tasks/connector_indexers/clickup_indexer.py | 252 | # Check if document with this unique identifier already exists | COMMENT |
| LOW | …ackend/app/tasks/connector_indexers/clickup_indexer.py | 296 | # Check if a document with the same content_hash exists (from another connector) | COMMENT |
| LOW | …backend/app/tasks/connector_indexers/github_indexer.py | 230 | # Check if document with this unique identifier already exists | COMMENT |
| LOW | …backend/app/tasks/connector_indexers/github_indexer.py | 264 | # Check if a document with the same content_hash exists (from another connector) | COMMENT |
| LOW | …/app/tasks/connector_indexers/elasticsearch_indexer.py | 504 | # Check if custom query is provided | COMMENT |
| LOW | …ckend/app/tasks/connector_indexers/airtable_indexer.py | 270 | # Check if document with this unique identifier already exists | COMMENT |
| LOW | …ckend/app/tasks/connector_indexers/airtable_indexer.py | 306 | # Check if a document with the same content_hash exists (from another connector) | COMMENT |
| 56 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …r/skills/playwright-testing/advanced/authentication.md | 200 | email: "admin@example.com", | CODE |
| LOW | …or/skills/playwright-testing/advanced/multi-context.md | 53 | await popup.getByLabel("Email").fill("user@example.com"); | CODE |
| LOW | .cursor/skills/playwright-testing/core/test-data.md | 259 | { email: "user@example.com", password: "pass123", expected: "Dashboard" }, | CODE |
| LOW | .cursor/skills/playwright-testing/core/test-data.md | 260 | { email: "admin@example.com", password: "admin123", expected: "Admin Panel" }, | CODE |
| LOW | .cursor/skills/playwright-testing/core/test-data.md | 440 | const user = await seedUser({ name: "John Doe" }); | CODE |
| LOW | .cursor/skills/playwright-testing/core/test-data.md | 443 | await expect(page.getByText("John Doe")).toBeVisible(); | CODE |
| LOW | …or/skills/playwright-testing/core/page-object-model.md | 70 | await loginPage.login("user@example.com", "password123"); | CODE |
| LOW | …or/skills/playwright-testing/core/page-object-model.md | 209 | const dashboardPage = await loginPage.login("user@example.com", "pass"); | CODE |
| LOW | …or/skills/playwright-testing/core/page-object-model.md | 242 | await loginPage.login("user@example.com", "password"); | CODE |
| LOW | …or/skills/playwright-testing/core/page-object-model.md | 307 | await loginPage.login("user@example.com", "password"); | CODE |
| LOW | …ursor/skills/playwright-testing/core/fixtures-hooks.md | 106 | defaultUser: { email: "admin@example.com", password: "admin123" }, | CODE |
| LOW | …ursor/skills/playwright-testing/core/fixtures-hooks.md | 283 | await login(page, "admin@example.com", "adminpass"); | CODE |
| LOW | …ursor/skills/playwright-testing/core/fixtures-hooks.md | 288 | await login(page, "user@example.com", "userpass"); | CODE |
| LOW | .cursor/skills/playwright-testing/core/annotations.md | 205 | await page.getByLabel("Name").fill("John Doe"); | CODE |
| LOW | …r/skills/playwright-testing/core/assertions-waiting.md | 47 | await expect(page.getByLabel("Email")).toHaveValue("user@example.com"); | CODE |
| LOW | …laywright-testing/testing-patterns/forms-validation.md | 158 | await page.getByLabel("Phone").fill("555-1234"); | CODE |
| LOW | …laywright-testing/testing-patterns/forms-validation.md | 205 | await page.getByLabel("Phone").fill("555-1234"); | CODE |
| LOW | …laywright-testing/testing-patterns/forms-validation.md | 501 | | `await page.fill('#email', 'test@test.com')` | CSS selector is fragile | | CODE |
| LOW | …playwright-testing/testing-patterns/file-operations.md | 71 | expect(content).toContain("John Doe"); | CODE |
| LOW | …laywright-testing/testing-patterns/security-testing.md | 180 | await page.getByLabel("Email").fill("user@example.com"); | CODE |
| LOW | …laywright-testing/testing-patterns/security-testing.md | 207 | await page1.getByLabel("Email").fill("user@example.com"); | CODE |
| LOW | …laywright-testing/testing-patterns/security-testing.md | 217 | await page2.getByLabel("Email").fill("user@example.com"); | CODE |
| LOW | …laywright-testing/testing-patterns/security-testing.md | 238 | await page.getByLabel("Email").fill("user@example.com"); | CODE |
| LOW | .cursor/skills/frontend-design/SKILL.md | 14 | If the brief does not pin down the product or subject, pin it yourself before designing: name one concrete subject, its | CODE |
| LOW | surfsense_web/messages/zh.json | 411 | "placeholder": "输入 URL 并按 Enter", | CODE |
| LOW | surfsense_web/messages/zh.json | 440 | "placeholder": "在此粘贴 YouTube 视频或播放列表 URL", | CODE |
| LOW | surfsense_web/messages/pt.json | 412 | "placeholder": "Insira uma URL e pressione Enter", | CODE |
| LOW | surfsense_web/messages/pt.json | 441 | "placeholder": "Cole URLs de vídeos ou playlists do YouTube aqui", | CODE |
| LOW | surfsense_web/messages/en.json | 249 | "name_placeholder": "John Doe", | CODE |
| LOW | surfsense_web/messages/en.json | 412 | "placeholder": "Enter a URL and press Enter", | CODE |
| LOW | surfsense_web/messages/en.json | 441 | "placeholder": "Paste YouTube video or playlist URLs here", | CODE |
| LOW | surfsense_web/messages/hi.json | 412 | "placeholder": "URL दर्ज करें और Enter दबाएं", | CODE |
| LOW | surfsense_web/messages/hi.json | 441 | "placeholder": "YouTube वीडियो या प्लेलिस्ट URL यहां पेस्ट करें", | CODE |
| LOW | surfsense_web/messages/ko.json | 412 | "placeholder": "URL을 입력하고 Enter를 누르세요", | CODE |
| LOW | surfsense_web/messages/ko.json | 441 | "placeholder": "유튜브 동영상 또는 재생목록 URL을 붙여넣으세요", | CODE |
| LOW | surfsense_web/messages/es.json | 412 | "placeholder": "Ingresa una URL y presiona Enter", | CODE |
| LOW | surfsense_web/messages/es.json | 441 | "placeholder": "Pega URLs de videos o listas de reproducción de YouTube aquí", | CODE |
| LOW | …tant-ui/connector-popup/views/youtube-crawler-view.tsx | 254 | placeholder={t("placeholder")} | CODE |
| LOW | …fsense_backend/app/tasks/celery_tasks/gateway_tasks.py | 154 | parsed = TelegramAdapter("placeholder").parse_inbound(raw_update) | CODE |
| LOW | surfsense_backend/app/utils/crawl/contacts.py | 143 | "placeholder", | CODE |
| LOW | surfsense_backend/app/utils/crawl/contacts.py | 163 | "placeholder", | CODE |
| LOW | …/tests/unit/proprietary/web_crawler/test_url_policy.py | 76 | "text": "Jane Doe", | STRING |
| LOW⚡ | …fsense_backend/tests/unit/capabilities/test_billing.py | 35 | fake_user = _FakeUser(balance_micros) | CODE |
| LOW⚡ | …fsense_backend/tests/unit/capabilities/test_billing.py | 42 | result.unique.return_value.scalar_one_or_none.return_value = fake_user # debit | CODE |
| LOW⚡ | …fsense_backend/tests/unit/capabilities/test_billing.py | 46 | return session, fake_user | CODE |
| LOW | …backend/tests/unit/capabilities/test_run_truncation.py | 243 | "text": "Jane Doe", | CODE |
| LOW | …backend/tests/unit/capabilities/test_run_truncation.py | 256 | "text": "Jane Doe", | CODE |
| LOW⚡ | …backend/tests/unit/capabilities/test_run_truncation.py | 278 | assert links[0]["text"] == "Jane Doe" | CODE |
| LOW⚡ | …backend/tests/unit/capabilities/test_run_truncation.py | 291 | assert "Jane Doe" in lines[1] | CODE |
| LOW⚡ | …/unit/connector_indexers/test_google_drive_parallel.py | 258 | fake_user = _FakeUser(balance_micros, reserved_micros) | CODE |
| LOW⚡ | …/unit/connector_indexers/test_google_drive_parallel.py | 264 | fake_user.credit_micros_balance, | CODE |
| LOW⚡ | …/unit/connector_indexers/test_google_drive_parallel.py | 265 | fake_user.credit_micros_reserved, | CODE |
| LOW⚡ | …/unit/connector_indexers/test_google_drive_parallel.py | 267 | r.unique.return_value.scalar_one_or_none.return_value = fake_user | CODE |
| LOW⚡ | …/unit/connector_indexers/test_google_drive_parallel.py | 271 | return session, fake_user | CODE |
| LOW⚡ | …kend/tests/unit/connector_indexers/test_etl_credits.py | 129 | fake_user = _FakeUser(balance_micros, reserved_micros) | CODE |
| LOW⚡ | …kend/tests/unit/connector_indexers/test_etl_credits.py | 135 | fake_user.credit_micros_balance, | CODE |
| LOW⚡ | …kend/tests/unit/connector_indexers/test_etl_credits.py | 136 | fake_user.credit_micros_reserved, | CODE |
| LOW⚡ | …kend/tests/unit/connector_indexers/test_etl_credits.py | 138 | result.unique.return_value.scalar_one_or_none.return_value = fake_user | CODE |
| LOW⚡ | …kend/tests/unit/connector_indexers/test_etl_credits.py | 142 | return session, fake_user | CODE |
| LOW⚡ | …kend/tests/unit/connector_indexers/test_etl_credits.py | 164 | session, fake_user = _make_credit_session(_micros(100)) | CODE |
| 49 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | surfsense_backend/app/connectors/notion_history.py | 890 | # Create the page with standard title property | COMMENT |
| MEDIUM | surfsense_backend/app/connectors/github_connector.py | 90 | # Create a temporary file for output | COMMENT |
| MEDIUM | …nse_backend/app/tasks/celery_tasks/auto_reload_task.py | 133 | # Create the PENDING purchase row first so its id seeds the Stripe | COMMENT |
| MEDIUM | …sense_backend/app/tasks/celery_tasks/document_tasks.py | 567 | # Create a dedicated insufficient credits notification | COMMENT |
| MEDIUM | …rfsense_backend/app/proprietary/web_crawler/captcha.py | 3 | # This module is part of the ``app.proprietary`` package and is licensed | COMMENT |
| MEDIUM | …rfsense_backend/app/proprietary/web_crawler/stealth.py | 3 | # This module is part of the ``app.proprietary`` package and is licensed | COMMENT |
| MEDIUM | …sense_backend/app/proprietary/web_crawler/connector.py | 3 | # This module is part of the ``app.proprietary`` package and is licensed | COMMENT |
| MEDIUM | …app/proprietary/web_crawler/testbench/suite_stealth.py | 3 | # This module is part of the ``app.proprietary`` package and is licensed | COMMENT |
| MEDIUM | …kend/app/proprietary/web_crawler/testbench/__init__.py | 3 | # This module is part of the ``app.proprietary`` package and is licensed | COMMENT |
| MEDIUM | …_backend/app/proprietary/web_crawler/testbench/core.py | 3 | # This module is part of the ``app.proprietary`` package and is licensed | COMMENT |
| MEDIUM | …/proprietary/web_crawler/testbench/suite_extraction.py | 3 | # This module is part of the ``app.proprietary`` package and is licensed | COMMENT |
| MEDIUM | …kend/app/proprietary/web_crawler/testbench/__main__.py | 3 | # This module is part of the ``app.proprietary`` package and is licensed | COMMENT |
| MEDIUM | …ense_backend/app/config/global_llm_config.example.yaml | 8 | # This file is intentionally safe to commit. Do not put real API keys in this | COMMENT |
| MEDIUM | surfsense_backend/app/config/__init__.py | 1208 | # Create a config instance | COMMENT |
| MEDIUM | surfsense_backend/app/routes/new_chat_routes.py | 2250 | # Create a wrapper generator that deletes messages only AFTER streaming succeeds | COMMENT |
| MEDIUM | …_backend/app/routes/search_source_connectors_routes.py | 1977 | # Create a wrapper function that calls index_google_gmail_messages with max_messages | COMMENT |
| MEDIUM | …_backend/app/routes/search_source_connectors_routes.py | 2631 | # Create the connector with single server config | COMMENT |
| MEDIUM | surfsense_backend/app/routes/incentive_tasks_routes.py | 113 | # Create the task completion record | COMMENT |
| MEDIUM | surfsense_backend/app/services/reranker_service.py | 95 | # Create a deep copy to preserve the full structure including chunks | COMMENT |
| MEDIUM | surfsense_backend/app/services/llm_router_service.py | 852 | # Create a new instance with tools bound. Carry through ``model_kwargs`` | COMMENT |
| MEDIUM | …sions/9_add_discord_connector_enum_and_documenttype.py | 17 | # Define the ENUM type name and the new value | COMMENT |
| MEDIUM | …ckend/alembic/versions/59_add_teams_connector_enums.py | 17 | # Define the ENUM type name and the new value | COMMENT |
| MEDIUM | …d/alembic/versions/48_add_note_to_documenttype_enum.py | 18 | # Define the ENUM type name and the new value | COMMENT |
| MEDIUM | …ic/versions/3_add_linear_connector_to_documenttype_.py | 18 | # Define the ENUM type name and the new value | COMMENT |
| MEDIUM | …/e55302644c51_add_github_connector_to_documenttype_.py | 11 | # Define the ENUM type name and the new value | COMMENT |
| MEDIUM | …backend/alembic/versions/73_add_user_memories_table.py | 30 | # Create the MemoryCategory enum type | COMMENT |
| MEDIUM | …66_add_notifications_table_and_electric_replication.py | 113 | # Create the publication if not exists | STRING |
| MEDIUM | …ons/10_update_chattype_enum_to_qna_report_structure.py | 19 | # Define the ENUM type name | COMMENT |
| MEDIUM | …sense_backend/alembic/versions/99_add_reports_table.py | 21 | # Create the reports table | COMMENT |
| MEDIUM | …nd/alembic/versions/79_add_composio_connector_enums.py | 30 | # Define the ENUM type names and the new values | COMMENT |
| MEDIUM | …mbic/versions/61_add_chat_visibility_and_created_by.py | 26 | # Create the ChatVisibility enum type | COMMENT |
| MEDIUM⚡ | …/alembic/versions/80_add_user_incentive_tasks_table.py | 35 | # Create the enum type only if it doesn't exist | COMMENT |
| MEDIUM⚡ | …/alembic/versions/80_add_user_incentive_tasks_table.py | 53 | # Create the user_incentive_tasks table | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | …ense_evals/suites/multimodal_doc/mmlongbench/ingest.py | 338 | # Step 3: upload to SurfSense | COMMENT |
| LOW | …ense_evals/suites/multimodal_doc/mmlongbench/ingest.py | 294 | # Step 1: questions | COMMENT |
| LOW | …ense_evals/suites/multimodal_doc/mmlongbench/ingest.py | 323 | # Step 2: download unique PDFs | COMMENT |
| LOW | …ense_evals/suites/multimodal_doc/mmlongbench/ingest.py | 351 | # Step 4: persist doc_id -> document_id manifest | COMMENT |
| LOW⚡ | …rc/surfsense_evals/suites/medical/medxpertqa/ingest.py | 325 | # Step 3: render PDFs | COMMENT |
| LOW | …rc/surfsense_evals/suites/medical/medxpertqa/ingest.py | 279 | # Step 1: download jsonl(s) | COMMENT |
| LOW | …rc/surfsense_evals/suites/medical/medxpertqa/ingest.py | 306 | # Step 2: download images.zip + extract once | COMMENT |
| LOW | …rc/surfsense_evals/suites/medical/medxpertqa/ingest.py | 346 | # Step 4: upload | COMMENT |
| LOW | …rc/surfsense_evals/suites/medical/medxpertqa/ingest.py | 359 | # Step 5: persist manifest + questions | COMMENT |
| LOW | surfsense_web/tests/helpers/api/connectors.ts | 176 | // Step 1: kick off OAuth, get auth_url. | COMMENT |
| LOW | surfsense_web/tests/helpers/api/connectors.ts | 193 | // Step 2: follow the auth_url. The fake makes this same-origin and | COMMENT |
| LOW | surfsense_web/tests/helpers/api/connectors.ts | 204 | // Step 3: look up the resulting connector (if any). | COMMENT |
| LOW | …ckend/app/connectors/google_drive/content_extractor.py | 178 | # Step 1: Download or export the file | COMMENT |
| LOW | …t_chat/subagents/builtins/deliverables/tools/report.py | 344 | # Step 1: Ask LLM which sections need modification | COMMENT |
| LOW | …t_chat/subagents/builtins/deliverables/tools/report.py | 417 | # Step 2: Revise only the affected sections | COMMENT |
| LOW | …t_chat/subagents/builtins/deliverables/tools/report.py | 484 | # Step 3: Handle new section additions (insert in reverse order to preserve indices) | COMMENT |
| LOW | …t_chat/subagents/builtins/deliverables/tools/report.py | 548 | # Step 4: Handle removals (reverse order to preserve indices) | COMMENT |
| LOW⚡ | surfsense_backend/app/etl_pipeline/picture_describer.py | 566 | # Step 1: layout-aware figures. One-shot batch -- finds ALL | COMMENT |
| LOW⚡ | surfsense_backend/app/etl_pipeline/picture_describer.py | 571 | # Step 2: Docling-style replacement markers. One match per | COMMENT |
| LOW⚡ | …tests/integration/chat/test_append_message_recovery.py | 477 | # Step 2: server stream's persist_assistant_shell now races | COMMENT |
| LOW⚡ | …tests/integration/chat/test_append_message_recovery.py | 486 | # Step 3: server finalize then overwrites the FE's stub with | COMMENT |
| LOW | …tests/integration/chat/test_append_message_recovery.py | 343 | # Step 1: server stream completes. Server-built rich content is | COMMENT |
| LOW | …tests/integration/chat/test_append_message_recovery.py | 363 | # Step 2: simulate the legacy FE ``appendMessage`` round-trip | COMMENT |
| LOW | …tests/integration/chat/test_append_message_recovery.py | 462 | # Step 1: legacy FE appendMessage lands first. No prior shell | COMMENT |
| LOW⚡ | …versions/23_associate_connectors_with_search_spaces.py | 42 | # Step 1: Add search_space_id column as nullable first (if it doesn't exist) | COMMENT |
| LOW⚡ | …versions/23_associate_connectors_with_search_spaces.py | 49 | # Step 2: Populate search_space_id with each user's first search space | COMMENT |
| LOW⚡ | …versions/23_associate_connectors_with_search_spaces.py | 65 | # Step 3: Make search_space_id NOT NULL | COMMENT |
| LOW⚡ | …versions/23_associate_connectors_with_search_spaces.py | 72 | # Step 4: Add foreign key constraint (if it doesn't exist) | COMMENT |
| LOW | …versions/23_associate_connectors_with_search_spaces.py | 86 | # Step 5: Drop the old unique constraint (user_id, connector_type) if it exists | COMMENT |
| LOW | …versions/23_associate_connectors_with_search_spaces.py | 98 | # Step 6: Create new unique constraint (search_space_id, user_id, connector_type) if it doesn't exist | COMMENT |
| LOW⚡ | …versions/23_associate_connectors_with_search_spaces.py | 130 | # Step 1: Drop the new unique constraint if it exists | COMMENT |
| LOW⚡ | …versions/23_associate_connectors_with_search_spaces.py | 138 | # Step 2: Recreate the old unique constraint (user_id, connector_type) if it doesn't exist | COMMENT |
| LOW⚡ | …versions/23_associate_connectors_with_search_spaces.py | 148 | # Step 3: Drop the foreign key constraint if it exists | COMMENT |
| LOW⚡ | …versions/23_associate_connectors_with_search_spaces.py | 156 | # Step 4: Drop the search_space_id column if it exists | COMMENT |
| LOW | …nse_backend/alembic/versions/72_simplify_rbac_roles.py | 70 | # Step 1: Move all memberships from Admin roles to corresponding Editor roles (BULK) | COMMENT |
| LOW | …nse_backend/alembic/versions/72_simplify_rbac_roles.py | 84 | # Step 2: Move all invites from Admin roles to corresponding Editor roles (BULK) | STRING |
| LOW⚡ | …nse_backend/alembic/versions/72_simplify_rbac_roles.py | 97 | # Step 3: Delete all Admin roles (BULK) | STRING |
| LOW⚡ | …nse_backend/alembic/versions/72_simplify_rbac_roles.py | 105 | # Step 4: Update Editor permissions for all search spaces (BULK) | STRING |
| LOW | …nse_backend/alembic/versions/72_simplify_rbac_roles.py | 118 | # Step 5: Update Viewer permissions for all search spaces (BULK) | STRING |
| LOW⚡ | …ic/versions/46_remove_last_edited_at_from_documents.py | 33 | # Step 1: Copy last_edited_at values to updated_at where updated_at is NULL | COMMENT |
| LOW⚡ | …ic/versions/46_remove_last_edited_at_from_documents.py | 43 | # Step 2: For documents where both exist, use the most recent timestamp | STRING |
| LOW⚡ | …ic/versions/46_remove_last_edited_at_from_documents.py | 53 | # Step 3: Drop the last_edited_at column | STRING |
| LOW⚡ | …ons/10_update_chattype_enum_to_qna_report_structure.py | 63 | # Step 1: Rename the current enum type | COMMENT |
| LOW⚡ | …ons/10_update_chattype_enum_to_qna_report_structure.py | 66 | # Step 2: Create the new enum type with new values | COMMENT |
| LOW⚡ | …ons/10_update_chattype_enum_to_qna_report_structure.py | 69 | # Step 3: Add a temporary column with the new type | COMMENT |
| LOW⚡ | …ons/10_update_chattype_enum_to_qna_report_structure.py | 74 | # Step 4: Update the temporary column with mapped values | COMMENT |
| LOW⚡ | …ons/10_update_chattype_enum_to_qna_report_structure.py | 88 | # Step 5: Drop the old column | COMMENT |
| LOW⚡ | …ons/10_update_chattype_enum_to_qna_report_structure.py | 91 | # Step 6: Rename the new column to the original name | COMMENT |
| LOW⚡ | …ons/10_update_chattype_enum_to_qna_report_structure.py | 96 | # Step 7: Drop the old enum type | COMMENT |
| LOW⚡ | …ons/10_update_chattype_enum_to_qna_report_structure.py | 118 | # Step 1: Rename the current enum type | COMMENT |
| LOW⚡ | …ons/10_update_chattype_enum_to_qna_report_structure.py | 121 | # Step 2: Create the new enum type with original values | COMMENT |
| LOW⚡ | …ons/10_update_chattype_enum_to_qna_report_structure.py | 124 | # Step 3: Add a temporary column with the original type | COMMENT |
| LOW⚡ | …ons/10_update_chattype_enum_to_qna_report_structure.py | 129 | # Step 4: Update the temporary column with mapped values back to old values | COMMENT |
| LOW⚡ | …ons/10_update_chattype_enum_to_qna_report_structure.py | 143 | # Step 5: Drop the old column | COMMENT |
| LOW⚡ | …ons/10_update_chattype_enum_to_qna_report_structure.py | 146 | # Step 6: Rename the new column to the original name | COMMENT |
| LOW⚡ | …ons/10_update_chattype_enum_to_qna_report_structure.py | 151 | # Step 7: Drop the old enum type | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | .cursor/skills/system-architecture/examples.md | 54 | application/ # Use cases, orchestrates domain | CODE |
| MEDIUM | .cursor/skills/playwright-testing/core/configuration.md | 18 | npx playwright init # scaffold config + first test | CODE |
| MEDIUM | surfsense_evals/README.md | 41 | # 1a. headline head-to-head: Native PDF (vision) vs SurfSense (vision RAG) | COMMENT |
| MEDIUM⚡ | surfsense_evals/src/surfsense_evals/core/config.py | 135 | # Measures whether vision-RAG ingestion lets a cheap downstream model | COMMENT |
| MEDIUM | …s/src/surfsense_evals/suites/research/crag/__init__.py | 35 | ``(#correct - #incorrect) / total`` — penalising hallucinations | STRING |
| MEDIUM | …e_evals/suites/multimodal_doc/parser_compare/ingest.py | 283 | # ingestion. parser_compare doesn't re-upload; SurfSense's agentic | COMMENT |
| MEDIUM⚡ | …e_evals/suites/multimodal_doc/parser_compare/runner.py | 96 | # The SurfSense agentic arm is fed by the existing mmlongbench | COMMENT |
| MEDIUM⚡ | surfsense_backend/app/config/model_list_fallback.json | 9 | "description": "Gemini 3.1 Pro Preview is Google’s frontier reasoning model, delivering enhanced software engineer | CODE |
| MEDIUM⚡ | surfsense_backend/app/config/model_list_fallback.json | 9 | "description": "Gemini 3.1 Pro Preview is Google’s frontier reasoning model, delivering enhanced software engineer | CODE |
| MEDIUM⚡ | surfsense_backend/app/config/model_list_fallback.json | 9 | "description": "Gemini 3.1 Pro Preview is Google’s frontier reasoning model, delivering enhanced software engineer | CODE |
| MEDIUM⚡ | surfsense_backend/app/config/model_list_fallback.json | 2715 | "description": "Gemini 3 Pro is Google’s flagship frontier model for high-precision multimodal reasoning, combinin | CODE |
| MEDIUM⚡ | surfsense_backend/app/config/model_list_fallback.json | 2715 | "description": "Gemini 3 Pro is Google’s flagship frontier model for high-precision multimodal reasoning, combinin | CODE |
| MEDIUM⚡ | surfsense_backend/app/config/model_list_fallback.json | 2715 | "description": "Gemini 3 Pro is Google’s flagship frontier model for high-precision multimodal reasoning, combinin | CODE |
| MEDIUM⚡ | surfsense_backend/app/config/model_list_fallback.json | 9834 | "description": "Note: Sonar Pro pricing includes Perplexity search pricing. See [details here](https://docs.perple | CODE |
| MEDIUM | surfsense_backend/app/config/model_list_fallback.json | 1011 | "description": "GPT-5.2-Codex is an upgraded version of GPT-5.1-Codex optimized for software engineering and codin | CODE |
| MEDIUM | surfsense_backend/app/config/model_list_fallback.json | 1011 | "description": "GPT-5.2-Codex is an upgraded version of GPT-5.1-Codex optimized for software engineering and codin | CODE |
| MEDIUM | surfsense_backend/app/config/model_list_fallback.json | 1762 | "description": "The relace-search model uses 4-12 `view_file` and `grep` tools in parallel to explore a codebase a | CODE |
| MEDIUM | surfsense_backend/app/config/model_list_fallback.json | 2896 | "description": "GPT-5.1-Codex is a specialized version of GPT-5.1 optimized for software engineering and coding wo | CODE |
| MEDIUM | surfsense_backend/app/config/model_list_fallback.json | 2896 | "description": "GPT-5.1-Codex is a specialized version of GPT-5.1 optimized for software engineering and coding wo | CODE |
| MEDIUM | surfsense_backend/app/config/model_list_fallback.json | 4311 | "description": "DeepSeek-V3.2-Exp is an experimental large language model released by DeepSeek as an intermediate | CODE |
| MEDIUM | surfsense_backend/app/config/model_list_fallback.json | 4311 | "description": "DeepSeek-V3.2-Exp is an experimental large language model released by DeepSeek as an intermediate | CODE |
| MEDIUM | surfsense_backend/app/config/model_list_fallback.json | 4670 | "description": "GPT-5-Codex is a specialized version of GPT-5 optimized for software engineering and coding workfl | CODE |
| MEDIUM | surfsense_backend/app/config/model_list_fallback.json | 4670 | "description": "GPT-5-Codex is a specialized version of GPT-5 optimized for software engineering and coding workfl | CODE |
| MEDIUM | surfsense_backend/app/config/model_list_fallback.json | 4713 | "description": "DeepSeek-V3.1 Terminus is an update to [DeepSeek V3.1](/deepseek/deepseek-chat-v3.1) that maintain | CODE |
| MEDIUM | surfsense_backend/app/config/model_list_fallback.json | 4713 | "description": "DeepSeek-V3.1 Terminus is an update to [DeepSeek V3.1](/deepseek/deepseek-chat-v3.1) that maintain | CODE |
| MEDIUM | surfsense_backend/app/config/model_list_fallback.json | 4764 | "description": "DeepSeek-V3.1 Terminus is an update to [DeepSeek V3.1](/deepseek/deepseek-chat-v3.1) that maintain | CODE |
| MEDIUM | surfsense_backend/app/config/model_list_fallback.json | 4764 | "description": "DeepSeek-V3.1 Terminus is an update to [DeepSeek V3.1](/deepseek/deepseek-chat-v3.1) that maintain | CODE |
| MEDIUM | surfsense_backend/app/config/model_list_fallback.json | 5558 | "description": "DeepSeek-V3.1 is a large hybrid reasoning model (671B parameters, 37B active) that supports both t | CODE |
| MEDIUM | surfsense_backend/app/config/model_list_fallback.json | 5558 | "description": "DeepSeek-V3.1 is a large hybrid reasoning model (671B parameters, 37B active) that supports both t | CODE |
| MEDIUM | surfsense_backend/app/config/model_list_fallback.json | 9794 | "description": "Note: Sonar Pro pricing includes Perplexity search pricing. See [details here](https://docs.perple | CODE |
| MEDIUM | …ents/builtins/deliverables/tools/video_presentation.py | 90 | # timeout (multi-agent) or HTTP lifetime (single-agent) — | COMMENT |
| MEDIUM | …/agents/chat/multi_agent_chat/shared/tools/mcp/tool.py | 60 | # multi-agent paths cannot share tool closures with different HITL wiring. | COMMENT |
| MEDIUM | …ent_chat/main_agent/middleware/otel_span/middleware.py | 68 | # the usual culprit when the multi-agent path feels slow to start. | COMMENT |
| MEDIUM⚡ | surfsense_backend/app/utils/document_converters.py | 17 | # This reentrant lock serialises tokenizer + embedding model access so that | COMMENT |
| MEDIUM | surfsense_backend/app/utils/document_converters.py | 121 | # Get model context window | COMMENT |
| MEDIUM | surfsense_backend/app/routes/documents_routes.py | 712 | # Local import: the retriever pulls in the embedding model + agent stack, | COMMENT |
| MEDIUM | surfsense_backend/tests/e2e/fakes/embeddings.py | 74 | # passthrough to a real embedding model would be expensive | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | docker/docker-compose.e2e.yml | 1 | # ============================================================================= | COMMENT |
| LOW | docker/docker-compose.watch-e2e.yml | 1 | # ============================================================================= | COMMENT |
| LOW | docker/docker-compose.yml | 61 | # otel-collector: | COMMENT |
| LOW | docker/docker-compose.yml | 161 | # build: ../surfsense_backend/scripts/whatsapp-bridge | COMMENT |
| LOW | docker/docker-compose.deps-only.yml | 1 | # ============================================================================= | COMMENT |
| LOW | docker/docker-compose.deps-only.yml | 21 | # - Web .env: NEXT_PUBLIC_ZERO_CACHE_URL=http://localhost:${ZERO_CACHE_PORT:-4848} | COMMENT |
| LOW | docker/scripts/install.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | docker/scripts/migrate-database.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | docker/scripts/migrate-database.sh | 21 | # - ~500 MB free disk space for the dump file | COMMENT |
| LOW | surfsense_evals/src/surfsense_evals/core/config.py | 121 | COMMENT | |
| LOW | …ense_evals/src/surfsense_evals/core/parse/citations.py | 21 | # /[\[【]\u200B?citation:\s*(https?:\/\/[^\]】\u200B]+|urlcite\d+|(?:doc-)?-?\d+(?:\s*,\s*(?:doc-)?-?\d+)*)\s*\u200B?[\] | COMMENT |
| LOW | surfsense_web/components/editor/plate-editor.tsx | 221 | [onSave, hasUnsavedChanges, isSaving, canToggleMode, reserveToolbarSpace] | COMMENT |
| LOW | …fsense_web/components/editor/utils/safe-deserialize.ts | 1 | // --------------------------------------------------------------------------- | COMMENT |
| LOW | surfsense_web/components/editor/utils/escape-mdx.ts | 1 | // --------------------------------------------------------------------------- | COMMENT |
| LOW | surfsense_web/lib/markdown/code-regions.ts | 1 | // Matches fenced (```...```) and inline (`...`) code regions. Used by MDX | COMMENT |
| LOW | surfsense_web/lib/announcements/announcements-data.ts | 81 | // title: "Podcast Generation Improvements", | COMMENT |
| LOW | surfsense_web/lib/announcements/announcements-data.ts | 101 | // isImportant: true, | COMMENT |
| LOW | surfsense_web/lib/announcements/announcements-data.ts | 121 | // title: "Enhanced Team Collaboration", | COMMENT |
| LOW | surfsense_backend/alembic.ini | 1 | # A generic, single database configuration. | COMMENT |
| LOW | surfsense_backend/alembic.ini | 21 | # leave blank for localtime | COMMENT |
| LOW | surfsense_backend/alembic.ini | 41 | COMMENT | |
| LOW | surfsense_backend/alembic.ini | 61 | # are written from script.py.mako | COMMENT |
| LOW | surfsense_backend/app/db.py | 1361 | # copy / duplicate operations. Path uniqueness lives on | COMMENT |
| LOW | surfsense_backend/app/users.py | 241 | COMMENT | |
| LOW | surfsense_backend/app/app.py | 281 | extra_headers={"Retry-After": retry_after}, | COMMENT |
| LOW | surfsense_backend/app/tasks/chat/persistence.py | 81 | # list with an empty text part so a crash between shell-INSERT and finalize | COMMENT |
| LOW | surfsense_backend/app/tasks/chat/content_builder.py | 101 | # streaming is open; -1 means "no active part" and the next delta | COMMENT |
| LOW | …ckend/app/tasks/chat/streaming/shared/stream_result.py | 21 | write_succeeded: bool = False | COMMENT |
| LOW | …ckend/app/proprietary/platforms/google_maps/parsers.py | 381 | COMMENT | |
| LOW | …ckend/app/proprietary/platforms/google_search/fetch.py | 61 | _STICKY_PORT_RANGE = (10000, 20000) | COMMENT |
| LOW | …ckend/app/proprietary/platforms/google_search/fetch.py | 221 | return page | COMMENT |
| LOW | …end/app/proprietary/platforms/google_search/parsers.py | 461 | COMMENT | |
| LOW | …ense_backend/app/proprietary/platforms/reddit/fetch.py | 81 | # is the real safety net if an IP's limit is tighter. | COMMENT |
| LOW | …backend/app/proprietary/platforms/instagram/parsers.py | 281 | # 1. An inline ``<script type="application/json">`` block embedding the mobile | COMMENT |
| LOW | …ense_backend/app/config/global_llm_config.example.yaml | 1 | # Global LLM Configuration | COMMENT |
| LOW | …ense_backend/app/config/global_llm_config.example.yaml | 21 | # - Connection fields: provider, api_key, api_base, api_version | COMMENT |
| LOW | …ense_backend/app/config/global_llm_config.example.yaml | 41 | # | COMMENT |
| LOW | …ense_backend/app/config/global_llm_config.example.yaml | 61 | router_settings: | COMMENT |
| LOW | …ense_backend/app/config/global_llm_config.example.yaml | 181 | tpm: 4000000 | COMMENT |
| LOW | …ense_backend/app/config/global_llm_config.example.yaml | 281 | # Field Notes | COMMENT |
| LOW | …ense_backend/app/config/global_llm_config.example.yaml | 301 | # - is_planner: true marks the internal-only planner model. Only one config | COMMENT |
| LOW | surfsense_backend/app/config/__init__.py | 501 | # CREATE INDEX / CREATE TABLE fails fast instead of hanging the FastAPI | COMMENT |
| LOW | surfsense_backend/app/config/__init__.py | 621 | ) | COMMENT |
| LOW | surfsense_backend/app/config/__init__.py | 661 | # keep crawling effectively-free; hosted deployments set this TRUE. | COMMENT |
| LOW | surfsense_backend/app/config/__init__.py | 681 | # $3/1000 -> 3000 (default) | $5/1000 -> 5000 | COMMENT |
| LOW | surfsense_backend/app/config/__init__.py | 821 | # premium-model run. Tune via env. | COMMENT |
| LOW | surfsense_backend/app/config/__init__.py | 1081 | # unchanged (reusing their embeddings) and embed only new/changed chunks. | COMMENT |
| LOW | surfsense_backend/app/config/__init__.py | 1101 | PROXY_URL = os.getenv("PROXY_URL") | COMMENT |
| LOW | surfsense_backend/app/config/__init__.py | 1121 | CAPTCHA_SOLVER_API_KEY = os.getenv("CAPTCHA_SOLVER_API_KEY") | COMMENT |
| LOW | surfsense_backend/app/config/__init__.py | 1141 | # Map the active proxy provider's exit region (ProxyProvider.get_location()) | COMMENT |
| LOW | …/agents/chat/multi_agent_chat/subagents/shared/spec.py | 21 | COMMENT | |
| LOW | …p/agents/chat/multi_agent_chat/shared/feature_flags.py | 61 | # Plugins | COMMENT |
| LOW | surfsense_backend/app/utils/validators.py | 541 | "BAIDU_SEARCH_API": { | COMMENT |
| LOW | surfsense_backend/app/utils/validators.py | 561 | # "scope", | COMMENT |
| LOW | surfsense_backend/app/utils/validators.py | 581 | # "JIRA_EMAIL": lambda: validate_email_field("JIRA_EMAIL", "JIRA"), | COMMENT |
| LOW | surfsense_backend/app/etl_pipeline/picture_describer.py | 61 | # raises if OCR failed unrecoverably (which the describer catches and | COMMENT |
| LOW | surfsense_backend/app/etl_pipeline/picture_describer.py | 401 | parts.append(description.strip()) | COMMENT |
| LOW | surfsense_backend/app/routes/new_chat_routes.py | 1321 | Access is granted if: | COMMENT |
| LOW | surfsense_backend/app/routes/new_chat_routes.py | 1401 | COMMENT | |
| LOW | surfsense_backend/app/routes/new_chat_routes.py | 1421 | # where no Python exception is constructed at all. | COMMENT |
| 19 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | surfsense_evals/scripts/compute_blog_extras.py | 379 | # because the harness recorded a failure. | COMMENT |
| MEDIUM | …vals/src/surfsense_evals/core/parse/freeform_answer.py | 25 | # next newline ourselves — robust to multiple inline answers because | COMMENT |
| MEDIUM | …stant-ui/connector-popup/utils/mcp-config-validator.ts | 130 | // Use Zod schema validation for robust type checking | COMMENT |
| LOW⚡ | surfsense_backend/app/connectors/slack_history.py | 77 | # But we can't easily extract the token, so we'll just use the client | COMMENT |
| LOW⚡ | surfsense_backend/app/connectors/slack_history.py | 79 | # This is the old pattern - just use the client as-is | COMMENT |
| MEDIUM | …_backend/app/proprietary/web_crawler/testbench/core.py | 27 | # Results live next to the harness; screenshots are gitignored, scorecard JSON is | COMMENT |
| MEDIUM⚡ | surfsense_backend/app/config/__init__.py | 1137 | # is the single source of truth imported by the crawler AND the 03f harness | COMMENT |
| MEDIUM⚡ | surfsense_backend/app/config/model_list_fallback.json | 2715 | "description": "Gemini 3 Pro is Google’s flagship frontier model for high-precision multimodal reasoning, combinin | CODE |
| MEDIUM⚡ | surfsense_backend/app/config/model_list_fallback.json | 2715 | "description": "Gemini 3 Pro is Google’s flagship frontier model for high-precision multimodal reasoning, combinin | CODE |
| MEDIUM⚡ | surfsense_backend/app/config/model_list_fallback.json | 9834 | "description": "Note: Sonar Pro pricing includes Perplexity search pricing. See [details here](https://docs.perple | CODE |
| MEDIUM⚡ | surfsense_backend/app/config/model_list_fallback.json | 9834 | "description": "Note: Sonar Pro pricing includes Perplexity search pricing. See [details here](https://docs.perple | CODE |
| MEDIUM | surfsense_backend/app/config/model_list_fallback.json | 9794 | "description": "Note: Sonar Pro pricing includes Perplexity search pricing. See [details here](https://docs.perple | CODE |
| MEDIUM⚡ | …t_chat/subagents/builtins/deliverables/tools/report.py | 92 | _REPORT_PROMPT = """You are an expert report writer. Generate a comprehensive Markdown report. | CODE |
| MEDIUM | …nts/chat/multi_agent_chat/main_agent/tools/registry.py | 35 | # call-time import to keep module import order robust. | COMMENT |
| MEDIUM⚡ | …nts/chat/multi_agent_chat/main_agent/plugins/loader.py | 110 | except Exception: # pragma: no cover - defensive (entry_points is robust) | CODE |
| MEDIUM | …sense_backend/app/agents/video_presentation/prompts.py | 204 | "content_in_markdown": "## The Quantum Leap\\n- Classical computers use **bits** (0 or 1)\\n- Quantum computers us | STRING |
| MEDIUM | …d/tests/unit/services/test_token_quota_service_cost.py | 582 | # simulate "no outer" explicitly to be robust against test order. | COMMENT |
| MEDIUM | …rsions/35_update_litellmprovider_enum_comprehensive.py | 1 | """Update LiteLLMProvider enum with comprehensive provider support | STRING |
| LOW | …ackend/alembic/versions/1_add_github_connector_enum.py | 72 | # For now, we'll just pass. If you needed to reverse this, you'd likely | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | …/tasks/celery_tasks/stale_notification_cleanup_task.py | 87 | 3. Mark those as failed with O(1) batch UPDATE using JSONB || operator | STRING |
| HIGH | …/tasks/celery_tasks/stale_notification_cleanup_task.py | 159 | SET metadata = metadata || CAST(:update_json AS jsonb), | CODE |
| HIGH | …/tasks/celery_tasks/stale_notification_cleanup_task.py | 335 | SET metadata = metadata || CAST(:update_json AS jsonb), | CODE |
| HIGH⚡ | …rfsense_backend/app/proprietary/web_crawler/captcha.py | 198 | if (cfg && cfg.clients) { | CODE |
| HIGH⚡ | …rfsense_backend/app/proprietary/web_crawler/captcha.py | 203 | if (o && typeof o === 'object') { | CODE |
| HIGH⚡ | …rfsense_backend/app/proprietary/web_crawler/captcha.py | 206 | if (cb && cb.callback && typeof cb.callback === 'function') { | CODE |
| HIGH | …/alembic/versions/107_add_video_presentations_table.py | 34 | WHEN duplicate_object THEN null; | CODE |
| HIGH | …d/alembic/versions/82_add_podcast_status_and_thread.py | 26 | WHEN duplicate_object THEN null; | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | surfsense_web/messages/zh.json | 127 | "your_api_key": "您的API密钥", | CODE |
| HIGH | surfsense_web/messages/pt.json | 127 | "your_api_key": "Sua chave API", | CODE |
| HIGH | surfsense_web/messages/en.json | 127 | "your_api_key": "Your API Key", | CODE |
| HIGH | surfsense_web/messages/hi.json | 127 | "your_api_key": "आपकी API कुंजी", | CODE |
| HIGH | surfsense_web/messages/ko.json | 127 | "your_api_key": "내 API 키", | CODE |
| HIGH | surfsense_web/messages/es.json | 127 | "your_api_key": "Tu clave API", | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | surfsense_backend/app/file_storage/backends/azure.py | 43 | from azure.core.exceptions import ResourceNotFoundError | CODE |
| CRITICAL | …ration/document_upload/test_stripe_credit_purchases.py | 22 | from tests.utils.helpers import TEST_EMAIL, TEST_PASSWORD, auth_headers | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | surfsense_evals/tests/suites/test_crag_dataset.py | 32 | CODE | |
| LOW | …/mcp_server/features/scrapers/platforms/google_maps.py | 28 | CODE | |
| LOW | …/mcp_server/features/scrapers/platforms/google_maps.py | 90 | CODE | |
| LOW | …e_mcp/mcp_server/features/scrapers/platforms/reddit.py | 29 | CODE | |
| LOW | …e_backend/app/tasks/chat/streaming/agent/event_loop.py | 38 | CODE | |
| LOW | …pp/tasks/chat/streaming/flows/new_chat/orchestrator.py | 121 | CODE | |
| LOW | surfsense_backend/app/capabilities/core/runs.py | 79 | CODE | |
| LOW | …t_chat/subagents/builtins/deliverables/tools/resume.py | 293 | CODE | |
| LOW | …ts/chat/multi_agent_chat/main_agent/runtime/factory.py | 59 | CODE | |
| LOW | …agent_chat/main_agent/system_prompt/builder/compose.py | 42 | CODE | |
| LOW | surfsense_backend/app/observability/otel.py | 289 | CODE | |
| LOW | surfsense_backend/app/routes/logs_routes.py | 60 | CODE | |
| LOW | surfsense_backend/app/routes/documents_routes.py | 328 | CODE | |
| LOW | surfsense_backend/app/routes/documents_routes.py | 1678 | CODE | |
| LOW | surfsense_backend/app/notifications/api/api.py | 213 | CODE | |
| LOW | …rfsense_backend/app/services/token_tracking_service.py | 517 | CODE | |
| LOW | surfsense_backend/app/services/composio_service.py | 1325 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | …ests/unit/platforms/instagram/test_fetch_resilience.py | 297 | CODE | |
| MEDIUM | …nd/tests/unit/tasks/test_video_presentation_billing.py | 104 | CODE | |
| MEDIUM | …ents/new_chat/middleware/test_scoped_model_fallback.py | 50 | CODE | |
| MEDIUM | …i_agent_chat/subagents/shared/test_subagent_builder.py | 71 | CODE | |
| MEDIUM | surfsense_backend/tests/unit/podcasts/test_renderer.py | 45 | CODE | |
| MEDIUM | …d/tests/unit/services/test_quota_checked_vision_llm.py | 111 | CODE | |
| MEDIUM | …_backend/tests/integration/podcasts/test_draft_task.py | 82 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | surfsense_web/lib/playground/code-snippets.ts | 80 | print(data["items"])`; | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | docker/docker-compose.yml | 5 | # Usage: | COMMENT |
| LOW | docker/scripts/migrate-database.sh | 8 | # Usage: | COMMENT |