AI Slop Code RIsk Monitor

Anionex/banana-slides

一站式原生AI PPT生成应用,几分钟内生成一套幻灯片; 支持上传任意模板图片,上传任意素材&智能解析,一句话/大纲/页面描述自动生成PPT,口头修改指定区域、一键导出可编辑ppt、视频等 - An AI-native slides generator based on nano banana pro🍌

17.2 Elevated pattern signal View on GitHub

Maintenance and Governance Review

This report summarizes scanner evidence for Anionex/banana-slides, a TypeScript project with 15,731 GitHub stars. SynthScan examined 146,105 lines of code across 552 source files, recording 1963 pattern matches distributed across 21 syntactic categories. The legacy adjusted pattern signal is 17.2 (Elevated pattern signal); it is not an authorship estimate.

Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.

17.2
Adjusted Signal
17.2
Raw Pattern Score
100%
Time Factor
2026-10-08
Last Push
15.7K
Stars
TypeScript
Language
146.1K
Lines of Code
552
Files
2.0K
Pattern Hits
2026-10-12
Scan Date
0.11
HC Hit Rate

Risk Review · v3

Use each vector to guide manual verification of the underlying findings.

Cognitive Ownership Risk 35.7/100 · MEDIUM

Can maintainers explain intent, assumptions, and trade-offs? 1195 finding(s).

Hallucinated Dependency & Supply Chain Risk 10.0/100 · LOW

Are imports declared and package/API names verified? 230 finding(s).

Agent Over-Engineering Ratio 45.9/100 · MEDIUM

Are wrappers, guards, and repeated structures necessary? 1437 finding(s).

PR Review Velocity Impact 58.0/100 · HIGH

Which changes need focused human review? 1963 finding(s).

What These Metrics Mean

Adjusted Signal
Legacy pattern score normalized per 1,000 scanned lines and multiplied by the repository-level time factor. It is not an estimate of AI authorship.
Raw Pattern Score
Sum of severity- and context-weighted pattern findings before applying the time factor.
Time Factor
A coarse multiplier based on repository last-push metadata. It does not identify when individual code was written.
Pattern Hits
Count of configured pattern findings. Review each location and surrounding code before acting.
HC Hit Rate
High- and critical-severity findings per scanned file. Severity is a configured detector weight, not proof of a vulnerability or authorship.
Lines / Files
Scan coverage denominators used by the legacy normalized score.

Pattern-Signal History

This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.

Severity Breakdown

Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.

CRITICAL 5HIGH 56MEDIUM 123LOW 1779

Directory Score Breakdown

This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.

Pattern Findings

The scanner identified 1963 distinct pattern matches across 21 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.

Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.

Hyper-Verbose Identifiers881 hits · 864 pts
SeverityFileLineSnippetContext
LOWTODO_video_narration_fixes.md23def _sanitize_ass_dialogue_text(text: str) -> str:CODE
LOWfrontend/e2e/material-aspect-ratio.spec.ts24 async function openMaterialGeneratorModal(page: Page) {CODE
LOWfrontend/e2e/desktop-update-check.spec.ts5async function installDesktopUpdateBridge(page: Page, startWithUpdate: boolean) {CODE
LOWfrontend/src/types/dataStorage.ts34export function getDataStorageElectronApi(): DataStorageElectronApi | null {CODE
LOWfrontend/src/utils/index.ts224export function normalizeRenovationErrorMessage(errorMessage: string | null | undefined): string {CODE
LOWfrontend/src/api/client.ts15function resolveDesktopBackendPort(): number {CODE
LOWfrontend/src/pages/Settings.tsx260function toDesktopUpdateResultView(info: DesktopUpdateCheckResult): UpdateResultView {CODE
LOWfrontend/src/store/useProjectStore.ts83(function cleanupLegacyTemplateLocalStorageKeys() {CODE
LOWdesktop/auto-updater.js99async function checkGitHubReleaseFallback({ app, logger = console }) {CODE
LOWdesktop/main.js53function configureSmokeUserDataPath() {CODE
LOWdesktop/main.js144function shouldOpenInExternalBrowser(targetUrl) {CODE
LOWdesktop/main.js291async function showDownloadedUpdateDialog(checkResult) {CODE
LOWdesktop/update-policy.js68function selectLatestDesktopRelease(releases, currentVersion, platform, arch) {CODE
LOWdesktop/update-policy.js100function resolveCurrentBuildTimestamp(buildMeta) {CODE
LOWdesktop/scripts/test-markdown-image-macos.js29function assertSafeOutputDirectory(outputDir) {CODE
LOWdesktop/scripts/prepare-artifacts.js37function copyDirDereferenceSymlinks(src, dest) {CODE
LOWdesktop/scripts/prepare-artifacts.js244async function prepareWindowsFfmpegArtifacts() {CODE
LOWbackend/desktop_bootstrap.py6def repair_desktop_settings_schema(db):CODE
LOWbackend/app.py434def _reconcile_orphaned_tasks_on_startup() -> None:CODE
LOWbackend/tests/unit/test_pptx_transitions.py23def test_create_pptx_from_images_adds_selected_transition_effects(tmp_path):CODE
LOWbackend/tests/unit/test_pptx_transitions.py58def test_create_pptx_from_images_maps_page_turn_to_cover(tmp_path):CODE
LOWbackend/tests/unit/test_pptx_transitions.py74def test_create_pptx_from_images_omits_transition_when_disabled(tmp_path):CODE
LOWbackend/tests/unit/test_inferera_domain_defaults.py5def test_config_openai_api_base_defaults_to_inferera(monkeypatch):CODE
LOWbackend/tests/unit/test_inferera_domain_defaults.py16def test_openai_provider_fallbacks_use_inferera(monkeypatch):CODE
LOW⚡backend/tests/unit/test_lazyllm_vlm_only_model.py53 def test_llm_model_initializes_with_llm_type(self, patch_env):CODE
LOW⚡backend/tests/unit/test_lazyllm_vlm_only_model.py62 def test_vlm_model_detected_as_vlm_only(self, patch_env):CODE
LOW⚡backend/tests/unit/test_lazyllm_vlm_only_model.py71 def test_vlm_only_generate_with_image_reuses_client(self, patch_env):CODE
LOWbackend/tests/unit/test_lazyllm_vlm_only_model.py83 def test_normal_model_generate_with_image_creates_vlm_client(self, patch_env):CODE
LOWbackend/tests/unit/test_lazyllm_vlm_only_model.py97 def test_ai_service_init_succeeds_with_vlm_caption_model(self, patch_env):CODE
LOWbackend/tests/unit/test_template_analysis.py71def test_analyze_template_persists_nine_field_schema(client, stub_submit_task, app):CODE
LOWbackend/tests/unit/test_template_analysis.py101def test_analyze_template_handles_not_a_slide(client, stub_submit_task, app):CODE
LOWbackend/tests/unit/test_template_analysis.py116def test_reanalyze_resets_status_to_pending(client, stub_submit_task, app):CODE
LOWbackend/tests/unit/test_openai_image_proxy_compat.py90 def test_standard_images_response(self):CODE
LOWbackend/tests/unit/test_openai_image_proxy_compat.py102 def test_result_is_raw_string_url(self):CODE
LOWbackend/tests/unit/test_openai_image_proxy_compat.py110 def test_result_is_dict_with_data_list(self):CODE
LOW⚡backend/tests/unit/test_openai_image_proxy_compat.py122 def test_result_is_flat_dict_url(self):CODE
LOW⚡backend/tests/unit/test_openai_image_proxy_compat.py131 def test_result_data_is_empty_list_falls_through(self):CODE
LOW⚡backend/tests/unit/test_openai_image_proxy_compat.py138 def test_unsupported_type_raises(self):CODE
LOWbackend/tests/unit/test_material_process.py20def test_blend_region_into_source_changes_only_selected_area():CODE
LOWbackend/tests/unit/test_material_process.py31def test_aspect_ratio_from_size_maps_to_supported_ratio():CODE
LOWbackend/tests/unit/test_material_process.py38def test_process_material_requires_source_for_region_edit(client, sample_project):CODE
LOWbackend/tests/unit/test_material_process.py57def test_process_material_region_edit_enqueues_task(mock_submit_task, mock_get_ai_service, client, sample_project):CODE
LOW⚡backend/tests/unit/test_gpt_image_25_support.py327def test_factory_forwards_image_quality_setting(monkeypatch):CODE
LOW⚡backend/tests/unit/test_gpt_image_25_support.py361def test_startup_loader_restores_image_quality(monkeypatch):CODE
LOWbackend/tests/unit/test_gpt_image_25_support.py76def test_is_gpt_image_model_matches_family_by_prefix(model, expected):CODE
LOWbackend/tests/unit/test_gpt_image_25_support.py183def test_resolve_quality_per_model(model, quality, expected):CODE
LOWbackend/tests/unit/test_gpt_image_25_support.py199def test_older_model_request_clamps_extended_quality():CODE
LOWbackend/tests/unit/test_gpt_image_25_support.py256def test_apimart_default_quality_keeps_original_payload():CODE
LOWbackend/tests/unit/test_gpt_image_25_support.py271def test_apimart_forwards_explicit_extended_quality():CODE
LOWbackend/tests/unit/test_gpt_image_25_support.py286def test_apimart_clamps_extended_quality_for_older_model():CODE
LOWbackend/tests/unit/test_gpt_image_25_support.py301def test_apimart_non_gpt_image_model_never_sends_quality():CODE
LOWbackend/tests/unit/test_gpt_image_25_support.py343def test_factory_defaults_image_quality_to_auto(monkeypatch):CODE
LOWbackend/tests/unit/test_gpt_image_25_support.py379def test_startup_loader_falls_back_to_env_quality(monkeypatch):CODE
LOWbackend/tests/unit/test_gpt_image_25_support.py432def test_sync_settings_invalidates_provider_cache_on_quality_change():CODE
LOWbackend/tests/unit/test_gpt_image_25_support.py444def test_update_settings_stores_explicit_auto_quality():CODE
LOWbackend/tests/unit/test_gpt_image_25_support.py464def test_codex_quality_mapping(monkeypatch):CODE
LOWbackend/tests/unit/test_api_health.py11 def test_health_check_returns_ok(self, client):CODE
LOWbackend/tests/unit/test_api_health.py20 def test_health_check_response_format(self, client):CODE
LOWbackend/tests/unit/test_sensenova_image_provider.py38def test_sensenova_generation_uses_json_images_api():CODE
LOW⚡backend/tests/unit/test_sensenova_image_provider.py68def test_sensenova_edit_uses_json_image_urls():CODE
821 more matches not shown…
Decorative Section Separators107 hits · 363 pts
SeverityFileLineSnippetContext
MEDIUMfrontend/e2e/generation-requirements.spec.ts53// ── Mock tests ──────────────────────────────────────────────────────COMMENT
MEDIUMfrontend/e2e/generation-requirements.spec.ts191// ── Integration tests ───────────────────────────────────────────────COMMENT
MEDIUMfrontend/e2e/lazyllm-global-vendor.spec.ts15// ─── Mock tests ────────────────────────────────────────────────────COMMENT
MEDIUMfrontend/e2e/lazyllm-global-vendor.spec.ts147// ─── Integration tests ─────────────────────────────────────────────COMMENT
MEDIUMfrontend/e2e/history-pagination.spec.ts83// ───────────────── Mock tests ─────────────────COMMENT
MEDIUMfrontend/e2e/history-pagination.spec.ts195// ───────────────── Integration test ─────────────────COMMENT
MEDIUMfrontend/e2e/preset-capsules.spec.ts63// ── Mock tests: Outline presets ──────────────────────────────────────COMMENT
MEDIUMfrontend/e2e/preset-capsules.spec.ts226// ── Mock tests: Description presets ──────────────────────────────────COMMENT
MEDIUMfrontend/e2e/preset-capsules.spec.ts284// ── Integration tests ────────────────────────────────────────────────COMMENT
MEDIUMfrontend/e2e/material-textarea-picker.spec.ts64// ── Mock tests: Upload button dropdown on Home page ──────────────────COMMENT
MEDIUMfrontend/e2e/material-textarea-picker.spec.ts150// ── Mock tests: Upload button dropdown on OutlineEditor ──────────────COMMENT
MEDIUMfrontend/src/components/shared/PresetCapsules.tsx8// ─── i18n ────────────────────────────────────────────────────────────────────COMMENT
MEDIUMfrontend/src/components/shared/PresetCapsules.tsx36// ─── Types ───────────────────────────────────────────────────────────────────COMMENT
MEDIUMfrontend/src/components/shared/PresetCapsules.tsx41// ─── System presets ──────────────────────────────────────────────────────────COMMENT
MEDIUMfrontend/src/components/shared/PresetCapsules.tsx71// ─── Component ───────────────────────────────────────────────────────────────COMMENT
MEDIUMbackend/tests/conftest.py173# =====================================COMMENT
MEDIUMbackend/tests/conftest.py175# =====================================COMMENT
MEDIUM⚡backend/tests/unit/test_gpt_image_25_support.py323# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡backend/tests/unit/test_gpt_image_25_support.py325# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡backend/tests/unit/test_gpt_image_25_support.py357# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡backend/tests/unit/test_gpt_image_25_support.py359# ---------------------------------------------------------------------------COMMENT
MEDIUMbackend/tests/unit/test_gpt_image_25_support.py54# ---------------------------------------------------------------------------COMMENT
MEDIUMbackend/tests/unit/test_gpt_image_25_support.py56# ---------------------------------------------------------------------------COMMENT
MEDIUMbackend/tests/unit/test_gpt_image_25_support.py155# ---------------------------------------------------------------------------COMMENT
MEDIUMbackend/tests/unit/test_gpt_image_25_support.py157# ---------------------------------------------------------------------------COMMENT
MEDIUMbackend/tests/unit/test_gpt_image_25_support.py211# ---------------------------------------------------------------------------COMMENT
MEDIUMbackend/tests/unit/test_gpt_image_25_support.py213# ---------------------------------------------------------------------------COMMENT
MEDIUMbackend/tests/unit/test_codex_image_retry.py18# ---------------------------------------------------------------------------COMMENT
MEDIUMbackend/tests/unit/test_codex_image_retry.py20# ---------------------------------------------------------------------------COMMENT
MEDIUMbackend/tests/unit/test_codex_image_retry.py52# ---------------------------------------------------------------------------COMMENT
MEDIUMbackend/tests/unit/test_codex_image_retry.py54# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡backend/tests/unit/test_codex_image_retry.py99# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡backend/tests/unit/test_codex_image_retry.py101# ---------------------------------------------------------------------------COMMENT
MEDIUMbackend/tests/unit/test_codex_text_retry.py21# ---------------------------------------------------------------------------COMMENT
MEDIUMbackend/tests/unit/test_codex_text_retry.py24# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡backend/tests/unit/test_codex_text_retry.py51# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡backend/tests/unit/test_codex_text_retry.py53# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡backend/tests/unit/test_codex_text_retry.py88# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡backend/tests/unit/test_codex_text_retry.py90# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡backend/tests/unit/test_codex_text_retry.py111# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡backend/tests/unit/test_codex_text_retry.py113# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡backend/tests/unit/test_codex_text_retry.py170# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡backend/tests/unit/test_codex_text_retry.py172# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡backend/tests/unit/test_tts_video_service.py71# ═══════════════════════════════════════════════════════════════════════════════COMMENT
MEDIUM⚡backend/tests/unit/test_tts_video_service.py73# ═══════════════════════════════════════════════════════════════════════════════COMMENT
MEDIUM⚡backend/tests/unit/test_tts_video_service.py626# ═══════════════════════════════════════════════════════════════════════════════COMMENT
MEDIUM⚡backend/tests/unit/test_tts_video_service.py629# ═══════════════════════════════════════════════════════════════════════════════COMMENT
MEDIUMbackend/tests/unit/test_tts_video_service.py24# ═══════════════════════════════════════════════════════════════════════════════COMMENT
MEDIUMbackend/tests/unit/test_tts_video_service.py26# ═══════════════════════════════════════════════════════════════════════════════COMMENT
MEDIUMbackend/controllers/openai_oauth_controller.py225# ---------------------------------------------------------------------------COMMENT
MEDIUMbackend/controllers/openai_oauth_controller.py227# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡backend/controllers/page_controller.py966# ═══════════════════════════════════════════════════════════════════════════════COMMENT
MEDIUM⚡backend/controllers/page_controller.py968# ═══════════════════════════════════════════════════════════════════════════════COMMENT
MEDIUM⚡backend/services/ai_service.py1398 # =========================================================================COMMENT
MEDIUM⚡backend/services/ai_service.py1400 # =========================================================================COMMENT
MEDIUM⚡backend/services/tts_video_service.py24# ═══════════════════════════════════════════════════════════════════════════════COMMENT
MEDIUM⚡backend/services/tts_video_service.py26# ═══════════════════════════════════════════════════════════════════════════════COMMENT
MEDIUM⚡backend/services/tts_video_service.py233# ═══════════════════════════════════════════════════════════════════════════════COMMENT
MEDIUM⚡backend/services/tts_video_service.py235# ═══════════════════════════════════════════════════════════════════════════════COMMENT
MEDIUMbackend/services/tts_video_service.py332# ═══════════════════════════════════════════════════════════════════════════════COMMENT
47 more matches not shown…
Excessive Try-Catch Wrapping326 hits · 302 pts
SeverityFileLineSnippetContext
LOWbackend/app.py182 except Exception as e:CODE
LOWbackend/app.py412 except Exception as e:CODE
LOWbackend/app.py451 except Exception as reconcile_error: # pragma: no cover - never block startupCODE
LOWbackend/tests/conftest.py65 except Exception:CODE
LOWbackend/tests/unit/test_desktop_backend_startup.py68 except Exception:CODE
LOWbackend/tests/integration/test_seedream5_real_api.py63 except Exception as e:CODE
LOWbackend/tests/integration/test_seedream5_real_api.py97 except Exception as e:CODE
LOW…kend/tests/integration/test_codex_retry_integration.py28 except Exception:CODE
LOWbackend/tests/integration/test_api_full_flow.py83 except Exception as e:CODE
LOWbackend/tests/integration/test_api_full_flow.py138 except Exception as e:CODE
LOWbackend/tests/integration/test_api_full_flow.py164 except Exception as e:CODE
LOWbackend/utils/latex_utils.py175 except Exception as e:CODE
LOWbackend/utils/latex_utils.py217 except Exception as e:CODE
LOWbackend/utils/pptx_builder.py109 except Exception as e:CODE
LOWbackend/utils/pptx_builder.py137 except Exception as e:CODE
LOWbackend/utils/pptx_builder.py173 except Exception as e:CODE
LOWbackend/utils/pptx_builder.py674 except Exception as e:CODE
LOWbackend/utils/pptx_builder.py730 except Exception as e:CODE
LOWbackend/utils/pptx_builder.py785 except Exception as e:CODE
LOWbackend/utils/pptx_math.py165 except Exception as exc:CODE
LOWbackend/utils/path_utils.py97 except Exception as e:CODE
LOWbackend/utils/mask_utils.py220 except Exception as e:CODE
LOWbackend/utils/mask_utils.py326 except Exception as e:CODE
LOWbackend/models/settings.py324 except Exception:CODE
LOWbackend/models/settings.py327 except Exception:CODE
LOWbackend/controllers/material_controller.py112 except Exception:CODE
LOWbackend/controllers/material_controller.py165 except Exception as e:CODE
LOWbackend/controllers/material_controller.py231 except Exception as e:CODE
LOWbackend/controllers/material_controller.py296 except Exception:CODE
LOWbackend/controllers/material_controller.py499 except Exception as e:CODE
LOWbackend/controllers/material_controller.py505 except Exception as e:CODE
LOWbackend/controllers/material_controller.py645 except Exception:CODE
LOWbackend/controllers/material_controller.py650 except Exception as e:CODE
LOWbackend/controllers/material_controller.py673 except Exception as e:CODE
LOWbackend/controllers/material_controller.py717 except Exception as e:CODE
LOWbackend/controllers/material_controller.py762 except Exception as e:CODE
LOWbackend/controllers/material_controller.py814 except Exception as e:CODE
LOWbackend/controllers/material_controller.py853 except Exception:CODE
LOWbackend/controllers/material_controller.py879 except Exception as e:CODE
LOWbackend/controllers/material_controller.py903 except Exception as e:CODE
LOWbackend/controllers/template_asset_controller.py107 except Exception as exc:CODE
LOWbackend/controllers/template_asset_controller.py230 except Exception as exc:CODE
LOWbackend/controllers/template_asset_controller.py252 except Exception as exc:CODE
LOWbackend/controllers/template_asset_controller.py571 except Exception as exc:CODE
LOW⚡backend/controllers/file_controller.py49 except Exception as e:CODE
LOWbackend/controllers/file_controller.py85 except Exception as e:CODE
LOW⚡backend/controllers/file_controller.py118 except Exception as e:CODE
LOW⚡backend/controllers/file_controller.py150 except Exception as e:CODE
LOWbackend/controllers/file_controller.py175 except Exception:CODE
LOWbackend/controllers/file_controller.py192 except Exception:CODE
LOWbackend/controllers/file_controller.py198 except Exception as e:CODE
LOWbackend/controllers/openai_oauth_controller.py66 except Exception:CODE
LOWbackend/controllers/openai_oauth_controller.py283 except Exception as e:CODE
LOWbackend/controllers/openai_oauth_controller.py313 except Exception as e:CODE
LOWbackend/controllers/openai_oauth_controller.py399 except Exception:CODE
MEDIUMbackend/controllers/openai_oauth_controller.py77def _parse_expires_in(value) -> int:CODE
LOW⚡backend/controllers/reference_file_controller.py445 except Exception as img_err:CODE
LOW⚡backend/controllers/reference_file_controller.py453 except Exception as e:CODE
LOWbackend/controllers/reference_file_controller.py108 except Exception as img_err:CODE
LOWbackend/controllers/reference_file_controller.py120 except Exception as e:CODE
266 more matches not shown…
Empty Error Handlers37 hits · 185 pts
SeverityFileLineSnippetContext
HIGHbackend/app.py521except OSError: # pragma: no cover - 写 pid 失败不影响锁CODE
HIGHbackend/app.py568except KeyboardInterrupt:CODE
HIGHbackend/tests/conftest.py65except Exception:CODE
HIGHbackend/tests/unit/test_task_watchdog.py495except RuntimeError:CODE
HIGHbackend/tests/unit/test_tts_video_service.py377except OSError:CODE
HIGHbackend/utils/path_utils.py45except (RuntimeError, ImportError, TypeError, AttributeError):CODE
HIGHbackend/models/settings.py107except (json.JSONDecodeError, TypeError):CODE
HIGHbackend/models/settings.py118except (json.JSONDecodeError, TypeError):CODE
HIGHbackend/controllers/material_controller.py112except Exception:CODE
HIGHbackend/controllers/openai_oauth_controller.py66except Exception:CODE
HIGHbackend/controllers/reference_file_controller.py165except Exception:CODE
HIGHbackend/controllers/settings_controller.py836except (json.JSONDecodeError, TypeError):CODE
HIGHbackend/controllers/settings_controller.py991except OSError:CODE
HIGHbackend/services/ai_service.py1186except Exception:CODE
HIGHbackend/services/file_service.py142except Exception:CODE
HIGHbackend/services/file_service.py594except Exception:CODE
HIGHbackend/services/update_check_service.py50except Exception:CODE
HIGHbackend/services/tts_video_service.py227except Exception:CODE
HIGHbackend/services/tts_video_service.py1242except Exception:CODE
HIGHbackend/services/tts_video_service.py100except queue.Empty:CODE
HIGHbackend/services/task_watchdog.py149except Exception: # pragma: no cover - 请求上下文之外CODE
HIGHbackend/services/task_watchdog.py416except Exception: # pragma: no cover - 非 ORM 对象/已分离实例CODE
HIGHbackend/services/task_watchdog.py511except Exception: # pragma: no cover - defensiveCODE
HIGHbackend/services/task_manager.py79except Exception:CODE
HIGHbackend/services/task_manager.py139except OSError:CODE
HIGHbackend/services/task_manager.py1525except Exception:CODE
HIGHbackend/services/file_parser_service.py44except RuntimeError:CODE
HIGHbackend/services/file_parser_service.py72except (RuntimeError, ImportError, TypeError, AttributeError):CODE
HIGHbackend/services/file_parser_service.py763except OSError:CODE
HIGHbackend/services/ai_providers/__init__.py75except RuntimeError:CODE
HIGHbackend/services/ai_providers/__init__.py103except RuntimeError:CODE
HIGH…/services/ai_providers/ocr/baidu_table_ocr_provider.py273except RuntimeError:CODE
HIGH…rvices/ai_providers/ocr/baidu_accurate_ocr_provider.py363except RuntimeError:CODE
HIGH…rvices/ai_providers/image/baidu_inpainting_provider.py244except RuntimeError:CODE
HIGHbackend/services/ai_providers/image/lazyllm_provider.py135except ValueError:CODE
HIGHbackend/services/ai_providers/image/lazyllm_provider.py344except OSError:CODE
HIGHv0_demo/gemini_genai.py41except Exception:CODE
Unused Imports191 hits · 181 pts
SeverityFileLineSnippetContext
LOWbackend/config.py5CODE
LOWbackend/config.py6CODE
LOWbackend/tests/unit/test_template_analysis.py7CODE
LOWbackend/tests/unit/test_api_health.py5CODE
LOWbackend/tests/unit/test_cli_run_monitor.py3CODE
LOWbackend/tests/unit/test_api_material.py9CODE
LOWbackend/tests/unit/test_renovation_filename.py11CODE
LOWbackend/tests/unit/test_pdf_image_service.py2CODE
LOWbackend/tests/unit/test_ai_mock.py7CODE
LOWbackend/tests/unit/test_ai_mock.py8CODE
LOWbackend/tests/unit/test_ai_mock.py8CODE
LOWbackend/tests/unit/test_cli_loader.py3CODE
LOWbackend/tests/unit/test_cli_interactive_builder.py3CODE
LOWbackend/tests/unit/test_template_asset_model.py12CODE
LOWbackend/tests/unit/test_template_asset_file_service.py11CODE
LOWbackend/tests/unit/test_description_field_contract.py7CODE
LOWbackend/tests/unit/test_api_project.py261CODE
LOWbackend/tests/unit/test_icon_subject_extraction.py11CODE
LOWbackend/tests/unit/test_cli_plain_help.py3CODE
LOWbackend/tests/unit/test_smart_merge.py2CODE
LOWbackend/tests/unit/test_openai_image_multi_reference.py5CODE
LOWbackend/tests/unit/test_openai_image_seedream_size.py10CODE
LOWbackend/tests/unit/test_template_assets_api.py8CODE
LOWbackend/tests/unit/test_cli_resolve.py3CODE
LOWbackend/tests/unit/test_cli_resolve.py5CODE
LOWbackend/tests/unit/test_cli_resolve.py6CODE
LOWbackend/tests/unit/test_cli_resolve.py11CODE
LOWbackend/tests/unit/test_cli_config.py3CODE
LOWbackend/tests/unit/test_template_auto_match.py516CODE
LOWbackend/tests/integration/test_lazyllm_real_vendors.py16CODE
LOW…ckend/tests/integration/test_migration_019_backfill.py13CODE
LOW…ckend/tests/integration/test_migration_019_backfill.py14CODE
LOW…ckend/tests/integration/test_migration_019_backfill.py16CODE
LOWbackend/tests/integration/test_full_workflow.py7CODE
LOWbackend/tests/integration/test_full_workflow.py8CODE
LOWbackend/tests/integration/test_seedream5_real_api.py15CODE
LOWbackend/tests/integration/test_api_full_flow.py23CODE
LOWbackend/utils/__init__.py2CODE
LOWbackend/utils/__init__.py2CODE
LOWbackend/utils/__init__.py2CODE
LOWbackend/utils/__init__.py2CODE
LOWbackend/utils/__init__.py2CODE
LOWbackend/utils/__init__.py2CODE
LOWbackend/utils/__init__.py2CODE
LOWbackend/utils/__init__.py11CODE
LOWbackend/utils/__init__.py11CODE
LOWbackend/utils/__init__.py11CODE
LOWbackend/utils/__init__.py12CODE
LOWbackend/utils/__init__.py12CODE
LOWbackend/utils/__init__.py12CODE
LOWbackend/utils/__init__.py13CODE
LOWbackend/utils/__init__.py14CODE
LOWbackend/utils/__init__.py14CODE
LOWbackend/utils/__init__.py14CODE
LOWbackend/utils/pptx_builder.py8CODE
LOWbackend/utils/pptx_builder.py16CODE
LOWbackend/utils/pptx_builder.py16CODE
LOWbackend/utils/page_utils.py4CODE
LOWbackend/models/__init__.py19CODE
LOWbackend/models/__init__.py20CODE
131 more matches not shown…
Verbosity Indicators57 hits · 99 pts
SeverityFileLineSnippetContext
LOW⚡frontend/e2e/ui-full-flow.spec.ts674 // Step 2: Click "导出为 PPTX" in the dropdown menuCOMMENT
LOW⚡frontend/e2e/ui-full-flow.spec.ts680 // Step 3: In the PPTX export settings panel, click "开始导出"COMMENT
LOWfrontend/e2e/ui-full-flow.spec.ts40 // Step 1: Visit homepageCOMMENT
LOWfrontend/e2e/ui-full-flow.spec.ts55 // Step 2: Ensure "一句话生成" tab is selected (it's selected by default)COMMENT
LOWfrontend/e2e/ui-full-flow.spec.ts68 // Step 3: Enter idea and click "Next"COMMENT
LOWfrontend/e2e/ui-full-flow.spec.ts83 // Step 4: Click batch generate outline button on outline editor pageCOMMENT
LOWfrontend/e2e/ui-full-flow.spec.ts124 // Step 5: Wait for outline generation to complete (smart wait)COMMENT
LOWfrontend/e2e/ui-full-flow.spec.ts153 // Step 6: Click "Next" to go to description editor pageCOMMENT
LOWfrontend/e2e/ui-full-flow.spec.ts166 // Step 7: Click batch generate descriptions buttonCOMMENT
LOWfrontend/e2e/ui-full-flow.spec.ts178 // Step 8: Wait for descriptions to generate (smart wait)COMMENT
LOWfrontend/e2e/ui-full-flow.spec.ts193 // Step 9: Test retry single card functionalityCOMMENT
LOWfrontend/e2e/ui-full-flow.spec.ts254 // Step 10: Click "生成图片" to go to image generation pageCOMMENT
LOWfrontend/e2e/ui-full-flow.spec.ts346 // Step 11: Select template (required before generating images)COMMENT
LOWfrontend/e2e/ui-full-flow.spec.ts438 // Step 12: Click batch generate images buttonCOMMENT
LOWfrontend/e2e/ui-full-flow.spec.ts625 // Step 14: Export PPTCOMMENT
LOWfrontend/e2e/ui-full-flow.spec.ts663 // Step 1: Wait for export button to be enabled (it's disabled until all images are generated)COMMENT
LOW⚡frontend/e2e/ui-full-flow-mocked.spec.ts132 // Step 1: Visit homepageCOMMENT
LOW⚡frontend/e2e/ui-full-flow-mocked.spec.ts140 // Step 2: Ensure "一句话生成" tab is selected (it's selected by default)COMMENT
LOW⚡frontend/e2e/ui-full-flow-mocked.spec.ts165 // Step 4: Verify outline editor page loadedCOMMENT
LOW⚡frontend/e2e/ui-full-flow-mocked.spec.ts172 // Step 5: Click generate outline (mocked)COMMENT
LOW⚡frontend/e2e/ui-full-flow-mocked.spec.ts183 // Step 6: Verify UI shows outline (mocked data)COMMENT
LOW⚡frontend/e2e/ui-full-flow-mocked.spec.ts192 // Step 7: Navigate to description editorCOMMENT
LOW⚡frontend/e2e/ui-full-flow-mocked.spec.ts203 // Step 8: Test description generation UI (mocked)COMMENT
LOW⚡frontend/e2e/ui-full-flow-mocked.spec.ts213 // Step 9: Navigate to image generationCOMMENT
LOWfrontend/e2e/ui-full-flow-mocked.spec.ts151 // Step 3: Enter idea and click "Next"COMMENT
LOWfrontend/e2e/ui-full-flow-mocked.spec.ts224 // Step 10: Test image generation UI (mocked)COMMENT
LOWfrontend/e2e/ui-full-flow-mocked.spec.ts236 // Step 11: Test export UICOMMENT
LOW⚡backend/tests/integration/test_api_full_flow.py188 # Step 1: Create projectCOMMENT
LOWbackend/tests/integration/test_api_full_flow.py227 # Step 2: Generate outlineCOMMENT
LOWbackend/tests/integration/test_api_full_flow.py240 # Step 3: Wait for outline completionCOMMENT
LOWbackend/tests/integration/test_api_full_flow.py253 # Step 4: Generate descriptionsCOMMENT
LOWbackend/tests/integration/test_api_full_flow.py273 # Step 5: Generate imagesCOMMENT
LOWbackend/tests/integration/test_api_full_flow.py310 # Step 6: Export PPTCOMMENT
LOWbackend/tests/integration/test_api_full_flow.py325 # Step 7: Verify PPT can be downloadedCOMMENT
LOW⚡backend/controllers/project_controller.py720 # Step 1: Parse description to outlineCOMMENT
LOW⚡backend/controllers/project_controller.py725 # Step 2: Split description into page descriptionsCOMMENT
LOW⚡backend/controllers/project_controller.py730 # Step 3: Flatten outline to pagesCOMMENT
LOW⚡backend/controllers/project_controller.py740 # Step 4: Delete existing pages (using ORM session to trigger cascades)COMMENT
LOW⚡backend/controllers/project_controller.py745 # Step 5: Create pages with both outline and descriptionCOMMENT
LOW⚡backend/controllers/page_controller.py919 # Step 2: AI extract structured contentCOMMENT
LOW⚡backend/controllers/page_controller.py923 # Step 3: Optional layout captionCOMMENT
LOW⚡backend/controllers/page_controller.py938 # Step 4: Update page in databaseCOMMENT
LOWbackend/controllers/page_controller.py898 # Step 1: Parse page PDF → markdownCOMMENT
LOW⚡backend/services/export_service.py1537 # Step 3: 合并结果COMMENT
LOWbackend/services/export_service.py1306 # Step 1: 收集所有文本元素COMMENT
LOWbackend/services/export_service.py1326 # Step 2: 并行执行两种识别COMMENT
LOW⚡backend/services/task_manager.py1955 # Step 1: 准备工作COMMENT
LOW⚡backend/services/task_manager.py1984 # Step 2: 创建文字属性提取器COMMENT
LOW⚡backend/services/task_manager.py1989 # Step 3: 调用导出方法(使用项目的导出设置)COMMENT
LOWbackend/services/task_manager.py1591 # Step 1: Split PDF into per-page PDFsCOMMENT
LOWbackend/services/task_manager.py2011 # Step 4: 标记任务完成COMMENT
LOW⚡backend/services/file_parser_service.py187 # Step 1: Get upload URLCOMMENT
LOW⚡backend/services/file_parser_service.py195 # Step 2: Upload fileCOMMENT
LOW⚡backend/services/file_parser_service.py203 # Step 3: Poll for parsing resultCOMMENT
LOW⚡backend/services/file_parser_service.py211 # Step 4: Enhance markdown with image captionsCOMMENT
LOWbackend/services/image_editability/inpaint_providers.py377 # Step 1: 百度图像修复 - 精确去除文字COMMENT
LOWbackend/services/image_editability/inpaint_providers.py393 # Step 2: 生成式画质提升(可选)COMMENT
Structural Annotation Overuse57 hits · 99 pts
SeverityFileLineSnippetContext
LOW⚡frontend/e2e/ui-full-flow.spec.ts674 // Step 2: Click "导出为 PPTX" in the dropdown menuCOMMENT
LOW⚡frontend/e2e/ui-full-flow.spec.ts680 // Step 3: In the PPTX export settings panel, click "开始导出"COMMENT
LOWfrontend/e2e/ui-full-flow.spec.ts40 // Step 1: Visit homepageCOMMENT
LOWfrontend/e2e/ui-full-flow.spec.ts55 // Step 2: Ensure "一句话生成" tab is selected (it's selected by default)COMMENT
LOWfrontend/e2e/ui-full-flow.spec.ts68 // Step 3: Enter idea and click "Next"COMMENT
LOWfrontend/e2e/ui-full-flow.spec.ts83 // Step 4: Click batch generate outline button on outline editor pageCOMMENT
LOWfrontend/e2e/ui-full-flow.spec.ts124 // Step 5: Wait for outline generation to complete (smart wait)COMMENT
LOWfrontend/e2e/ui-full-flow.spec.ts153 // Step 6: Click "Next" to go to description editor pageCOMMENT
LOWfrontend/e2e/ui-full-flow.spec.ts166 // Step 7: Click batch generate descriptions buttonCOMMENT
LOWfrontend/e2e/ui-full-flow.spec.ts178 // Step 8: Wait for descriptions to generate (smart wait)COMMENT
LOWfrontend/e2e/ui-full-flow.spec.ts193 // Step 9: Test retry single card functionalityCOMMENT
LOWfrontend/e2e/ui-full-flow.spec.ts254 // Step 10: Click "生成图片" to go to image generation pageCOMMENT
LOWfrontend/e2e/ui-full-flow.spec.ts346 // Step 11: Select template (required before generating images)COMMENT
LOWfrontend/e2e/ui-full-flow.spec.ts438 // Step 12: Click batch generate images buttonCOMMENT
LOWfrontend/e2e/ui-full-flow.spec.ts625 // Step 14: Export PPTCOMMENT
LOWfrontend/e2e/ui-full-flow.spec.ts663 // Step 1: Wait for export button to be enabled (it's disabled until all images are generated)COMMENT
LOW⚡frontend/e2e/ui-full-flow-mocked.spec.ts132 // Step 1: Visit homepageCOMMENT
LOW⚡frontend/e2e/ui-full-flow-mocked.spec.ts140 // Step 2: Ensure "一句话生成" tab is selected (it's selected by default)COMMENT
LOW⚡frontend/e2e/ui-full-flow-mocked.spec.ts165 // Step 4: Verify outline editor page loadedCOMMENT
LOW⚡frontend/e2e/ui-full-flow-mocked.spec.ts172 // Step 5: Click generate outline (mocked)COMMENT
LOW⚡frontend/e2e/ui-full-flow-mocked.spec.ts183 // Step 6: Verify UI shows outline (mocked data)COMMENT
LOW⚡frontend/e2e/ui-full-flow-mocked.spec.ts192 // Step 7: Navigate to description editorCOMMENT
LOW⚡frontend/e2e/ui-full-flow-mocked.spec.ts203 // Step 8: Test description generation UI (mocked)COMMENT
LOW⚡frontend/e2e/ui-full-flow-mocked.spec.ts213 // Step 9: Navigate to image generationCOMMENT
LOWfrontend/e2e/ui-full-flow-mocked.spec.ts151 // Step 3: Enter idea and click "Next"COMMENT
LOWfrontend/e2e/ui-full-flow-mocked.spec.ts224 // Step 10: Test image generation UI (mocked)COMMENT
LOWfrontend/e2e/ui-full-flow-mocked.spec.ts236 // Step 11: Test export UICOMMENT
LOW⚡backend/tests/integration/test_api_full_flow.py188 # Step 1: Create projectCOMMENT
LOWbackend/tests/integration/test_api_full_flow.py227 # Step 2: Generate outlineCOMMENT
LOWbackend/tests/integration/test_api_full_flow.py240 # Step 3: Wait for outline completionCOMMENT
LOWbackend/tests/integration/test_api_full_flow.py253 # Step 4: Generate descriptionsCOMMENT
LOWbackend/tests/integration/test_api_full_flow.py273 # Step 5: Generate imagesCOMMENT
LOWbackend/tests/integration/test_api_full_flow.py310 # Step 6: Export PPTCOMMENT
LOWbackend/tests/integration/test_api_full_flow.py325 # Step 7: Verify PPT can be downloadedCOMMENT
LOW⚡backend/controllers/project_controller.py720 # Step 1: Parse description to outlineCOMMENT
LOW⚡backend/controllers/project_controller.py725 # Step 2: Split description into page descriptionsCOMMENT
LOW⚡backend/controllers/project_controller.py730 # Step 3: Flatten outline to pagesCOMMENT
LOW⚡backend/controllers/project_controller.py740 # Step 4: Delete existing pages (using ORM session to trigger cascades)COMMENT
LOW⚡backend/controllers/project_controller.py745 # Step 5: Create pages with both outline and descriptionCOMMENT
LOW⚡backend/controllers/page_controller.py919 # Step 2: AI extract structured contentCOMMENT
LOW⚡backend/controllers/page_controller.py923 # Step 3: Optional layout captionCOMMENT
LOW⚡backend/controllers/page_controller.py938 # Step 4: Update page in databaseCOMMENT
LOWbackend/controllers/page_controller.py898 # Step 1: Parse page PDF → markdownCOMMENT
LOW⚡backend/services/export_service.py1537 # Step 3: 合并结果COMMENT
LOWbackend/services/export_service.py1306 # Step 1: 收集所有文本元素COMMENT
LOWbackend/services/export_service.py1326 # Step 2: 并行执行两种识别COMMENT
LOW⚡backend/services/task_manager.py1955 # Step 1: 准备工作COMMENT
LOW⚡backend/services/task_manager.py1984 # Step 2: 创建文字属性提取器COMMENT
LOW⚡backend/services/task_manager.py1989 # Step 3: 调用导出方法(使用项目的导出设置)COMMENT
LOWbackend/services/task_manager.py1591 # Step 1: Split PDF into per-page PDFsCOMMENT
LOWbackend/services/task_manager.py2011 # Step 4: 标记任务完成COMMENT
LOW⚡backend/services/file_parser_service.py187 # Step 1: Get upload URLCOMMENT
LOW⚡backend/services/file_parser_service.py195 # Step 2: Upload fileCOMMENT
LOW⚡backend/services/file_parser_service.py203 # Step 3: Poll for parsing resultCOMMENT
LOW⚡backend/services/file_parser_service.py211 # Step 4: Enhance markdown with image captionsCOMMENT
LOWbackend/services/image_editability/inpaint_providers.py377 # Step 1: 百度图像修复 - 精确去除文字COMMENT
LOWbackend/services/image_editability/inpaint_providers.py393 # Step 2: 生成式画质提升(可选)COMMENT
Deep Nesting131 hits · 93 pts
SeverityFileLineSnippetContext
LOWbackend/desktop_bootstrap.py6CODE
LOWbackend/app.py62CODE
LOWbackend/app.py266CODE
LOWbackend/tests/unit/test_pptx_font_size.py14CODE
LOWbackend/tests/unit/test_api_project.py302CODE
LOWbackend/tests/unit/test_api_settings_provider.py86CODE
LOWbackend/tests/unit/test_api_settings_provider.py104CODE
LOWbackend/tests/unit/test_api_settings_provider.py521CODE
LOWbackend/tests/integration/test_requests_socks_proxy.py65CODE
LOWbackend/tests/integration/test_api_full_flow.py42CODE
LOWbackend/tests/integration/test_api_full_flow.py94CODE
LOWbackend/tests/integration/test_reference_file_ssrf.py18CODE
LOWbackend/utils/pptx_builder.py709CODE
LOWbackend/utils/pptx_math.py309CODE
LOWbackend/utils/path_utils.py26CODE
LOWbackend/utils/path_utils.py142CODE
LOWbackend/utils/mask_utils.py59CODE
LOWbackend/utils/mask_utils.py109CODE
LOWbackend/utils/mask_utils.py274CODE
LOWbackend/controllers/material_controller.py44CODE
LOWbackend/controllers/material_controller.py381CODE
LOWbackend/controllers/material_controller.py511CODE
LOWbackend/controllers/material_controller.py820CODE
LOWbackend/controllers/file_controller.py155CODE
LOWbackend/controllers/openai_oauth_controller.py51CODE
LOWbackend/controllers/reference_file_controller.py41CODE
LOWbackend/controllers/reference_file_controller.py135CODE
LOWbackend/controllers/reference_file_controller.py300CODE
LOWbackend/controllers/reference_file_controller.py394CODE
LOWbackend/controllers/export_controller.py303CODE
LOWbackend/controllers/export_controller.py371CODE
LOWbackend/controllers/project_controller.py336CODE
LOWbackend/controllers/project_controller.py462CODE
LOWbackend/controllers/project_controller.py554CODE
LOWbackend/controllers/project_controller.py885CODE
LOWbackend/controllers/project_controller.py1279CODE
LOWbackend/controllers/project_controller.py1405CODE
LOWbackend/controllers/project_controller.py577CODE
LOWbackend/controllers/project_controller.py909CODE
LOWbackend/controllers/page_controller.py336CODE
LOWbackend/controllers/page_controller.py424CODE
LOWbackend/controllers/page_controller.py609CODE
LOWbackend/controllers/page_controller.py849CODE
LOWbackend/controllers/page_controller.py1098CODE
LOWbackend/controllers/settings_controller.py61CODE
LOWbackend/controllers/settings_controller.py226CODE
LOWbackend/controllers/settings_controller.py511CODE
LOWbackend/controllers/settings_controller.py585CODE
LOWbackend/controllers/settings_controller.py686CODE
LOWbackend/controllers/settings_controller.py877CODE
LOWbackend/controllers/settings_controller.py1146CODE
LOWbackend/controllers/settings_controller.py1212CODE
LOWbackend/controllers/settings_controller.py1323CODE
LOWbackend/services/ai_service.py387CODE
LOWbackend/services/ai_service.py442CODE
LOWbackend/services/ai_service.py633CODE
LOWbackend/services/ai_service.py1074CODE
LOWbackend/services/ai_service.py1282CODE
LOWbackend/services/ai_service.py502CODE
LOWbackend/services/update_check_service.py177CODE
71 more matches not shown…
Modern Structural Boilerplate68 hits · 69 pts
SeverityFileLineSnippetContext
LOWbackend/utils/latex_utils.py13logger = logging.getLogger(__name__)CODE
LOWbackend/utils/__init__.py16__all__ = [CODE
LOWbackend/utils/pptx_builder.py20logger = logging.getLogger(__name__)CODE
LOWbackend/utils/pptx_builder.py163 def _set_core_properties(prs: Presentation) -> None:CODE
LOWbackend/utils/pptx_math.py18logger = logging.getLogger(__name__)CODE
LOWbackend/utils/path_utils.py9logger = logging.getLogger(__name__)CODE
LOWbackend/utils/mask_utils.py9logger = logging.getLogger(__name__)CODE
LOWbackend/models/project_template_asset.py70 def set_analysis(self, data) -> None:CODE
LOWbackend/models/__init__.py30__all__ = ['db', 'Project', 'Page', 'Task', 'UserTemplate', 'PageImageVersion', 'Material', 'ReferenceFile', 'Settings',CODE
LOWbackend/controllers/material_controller.py26logger = logging.getLogger(__name__)CODE
LOWbackend/controllers/template_asset_controller.py27logger = logging.getLogger(__name__)CODE
LOWbackend/controllers/openai_oauth_controller.py26logger = logging.getLogger(__name__)CODE
LOWbackend/controllers/reference_file_controller.py21logger = logging.getLogger(__name__)CODE
LOWbackend/controllers/__init__.py15__all__ = ['project_bp', 'style_bp', 'page_bp', 'template_bp',CODE
LOWbackend/controllers/export_controller.py25logger = logging.getLogger(__name__)CODE
LOWbackend/controllers/project_controller.py34logger = logging.getLogger(__name__)CODE
LOWbackend/controllers/page_controller.py24logger = logging.getLogger(__name__)CODE
LOWbackend/controllers/template_controller.py11logger = logging.getLogger(__name__)CODE
LOWbackend/controllers/settings_controller.py26logger = logging.getLogger(__name__)CODE
LOWbackend/services/ai_service.py39logger = logging.getLogger(__name__)CODE
LOWbackend/services/pdf_service.py9logger = logging.getLogger(__name__)CODE
LOWbackend/services/inpainting_service.py23logger = logging.getLogger(__name__)CODE
LOWbackend/services/__init__.py6__all__ = ['AIService', 'ProjectContext', 'FileService', 'ExportService']CODE
LOW⚡backend/services/tts_video_service.py22logger = logging.getLogger(__name__)CODE
LOWbackend/services/task_watchdog.py59logger = logging.getLogger(__name__)CODE
LOW⚡backend/services/prompts.py21logger = logging.getLogger(__name__)CODE
LOWbackend/services/ai_service_manager.py28logger = logging.getLogger(__name__)CODE
LOWbackend/services/export_service.py30logger = logging.getLogger(__name__)CODE
LOW⚡backend/services/task_manager.py25logger = logging.getLogger(__name__)CODE
LOW⚡backend/services/task_manager.py2424def _set_task_processing(task_id: str) -> None:CODE
LOWbackend/services/pdf_image_service.py13logger = logging.getLogger(__name__)CODE
LOWbackend/services/file_parser_service.py19logger = logging.getLogger(__name__)CODE
LOWbackend/services/material_import_service.py19logger = logging.getLogger(__name__)CODE
LOWbackend/services/image_editability/service.py31logger = logging.getLogger(__name__)CODE
LOW…ervices/image_editability/text_attribute_extractors.py17logger = logging.getLogger(__name__)CODE
LOWbackend/services/image_editability/extractors.py23logger = logging.getLogger(__name__)CODE
LOWbackend/services/image_editability/inpaint_providers.py21logger = logging.getLogger(__name__)CODE
LOWbackend/services/image_editability/__init__.py90__all__ = [CODE
LOWbackend/services/image_editability/factories.py25logger = logging.getLogger(__name__)CODE
LOWbackend/services/image_editability/hybrid_extractor.py24logger = logging.getLogger(__name__)CODE
LOWbackend/services/image_editability/helpers.py15logger = logging.getLogger(__name__)CODE
LOWbackend/services/ai_providers/genai_client.py8logger = logging.getLogger(__name__)CODE
LOWbackend/services/ai_providers/__init__.py28logger = logging.getLogger(__name__)CODE
LOWbackend/services/ai_providers/__init__.py30__all__ = [CODE
LOWbackend/services/ai_providers/lazyllm_env.py7logger = logging.getLogger(__name__)CODE
LOW…/services/ai_providers/ocr/baidu_table_ocr_provider.py16logger = logging.getLogger(__name__)CODE
LOW…rvices/ai_providers/ocr/baidu_accurate_ocr_provider.py16logger = logging.getLogger(__name__)CODE
LOWbackend/services/ai_providers/ocr/__init__.py12__all__ = [CODE
LOW…s/ai_providers/image/volcengine_inpainting_provider.py15logger = logging.getLogger(__name__)CODE
LOWbackend/services/ai_providers/image/codex_provider.py30logger = logging.getLogger(__name__)CODE
LOWbackend/services/ai_providers/image/__init__.py12__all__ = [CODE
LOW…vices/ai_providers/image/gemini_inpainting_provider.py13logger = logging.getLogger(__name__)CODE
LOWbackend/services/ai_providers/image/openai_provider.py26logger = logging.getLogger(__name__)CODE
LOWbackend/services/ai_providers/image/genai_provider.py19logger = logging.getLogger(__name__)CODE
LOW…kend/services/ai_providers/image/anthropic_provider.py18logger = logging.getLogger(__name__)CODE
LOW…rvices/ai_providers/image/baidu_inpainting_provider.py16logger = logging.getLogger(__name__)CODE
LOWbackend/services/ai_providers/image/lazyllm_provider.py27logger = logging.getLogger(__name__)CODE
LOW…vices/ai_providers/image/rmbg_segmentation_provider.py18logger = logging.getLogger(__name__)CODE
LOWbackend/services/ai_providers/text/codex_provider.py19logger = logging.getLogger(__name__)CODE
LOWbackend/services/ai_providers/text/__init__.py9__all__ = ['TextProvider', 'GenAITextProvider', 'OpenAITextProvider', 'AnthropicTextProvider', 'LazyLLMTextProvider', 'CCODE
8 more matches not shown…
Hallucination Indicators5 hits · 65 pts
SeverityFileLineSnippetContext
CRITICAL⚡backend/tests/unit/test_sensenova_image_provider.py63 provider.client.chat.completions.create.assert_not_called()CODE
CRITICAL⚡backend/tests/unit/test_sensenova_image_provider.py64 provider.client.images.with_raw_response.generate.assert_not_called()CODE
CRITICAL⚡backend/tests/unit/test_sensenova_image_provider.py65 provider.client.images.with_raw_response.edit.assert_not_called()CODE
CRITICALbackend/tests/unit/test_sensenova_image_provider.py94 provider.client.images.with_raw_response.edit.assert_not_called()CODE
CRITICALbackend/tests/unit/test_openai_image_multi_reference.py144 provider.client.images.with_raw_response.edit.assert_not_called()CODE
Redundant / Tautological Comments32 hits · 54 pts
SeverityFileLineSnippetContext
LOWbackend/run.sh10# Check if .env existsCOMMENT
LOWbackend/run.sh18# Check if virtual environment existsCOMMENT
LOWbackend/tests/integration/test_seedream5_real_api.py13# Check if lazyllm is availableCOMMENT
LOWbackend/tests/integration/test_seedream5_real_api.py66 # Check if it's the guidance_scale errorCOMMENT
LOWbackend/utils/pptx_builder.py192 # Check if dimensions exceed python-pptx limits and scale down if neededCOMMENT
LOWbackend/utils/pptx_builder.py388 # Check if we have colored segments (multi-color text)COMMENT
LOWbackend/utils/pptx_builder.py658 # Check if image existsCOMMENT
LOW⚡backend/controllers/file_controller.py35 # Check if directory existsCOMMENT
LOW⚡backend/controllers/file_controller.py39 # Check if file existsCOMMENT
LOW⚡backend/controllers/file_controller.py106 # Check if directory existsCOMMENT
LOW⚡backend/controllers/file_controller.py110 # Check if file existsCOMMENT
LOW⚡backend/controllers/file_controller.py138 # Check if directory existsCOMMENT
LOW⚡backend/controllers/file_controller.py142 # Check if file existsCOMMENT
LOWbackend/controllers/file_controller.py171 # Check if the path is trying to escape the root directoryCOMMENT
LOWbackend/controllers/reference_file_controller.py147 # Check if file is in requestCOMMENT
LOWbackend/controllers/export_controller.py451 # Check if pages have generated imagesCOMMENT
LOWbackend/controllers/project_controller.py1311 # Check if pages have descriptions (允许没有描述,从空开始)COMMENT
LOWbackend/controllers/page_controller.py360 # Check if already generatedCOMMENT
LOWbackend/controllers/page_controller.py449 # Check if already generatedCOMMENT
LOWbackend/controllers/template_controller.py32 # Check if file is in requestCOMMENT
LOWbackend/controllers/template_controller.py125 # Check if file is in requestCOMMENT
LOWbackend/controllers/settings_controller.py762 # Check if reasoning configuration changed (requires AIService cache clear)COMMENT
LOWbackend/services/export_service.py943 # Check if this is a table with子元素 (cells from Baidu OCR)COMMENT
LOWbackend/services/export_service.py969 # Check if this is a table with HTML data (legacy)COMMENT
LOWbackend/services/task_manager.py299 # Check if task raised an exceptionCOMMENT
LOW⚡backend/services/file_parser_service.py172 # Check if it's a plain text file that doesn't need MinerU parsingCOMMENT
LOW⚡backend/services/file_parser_service.py179 # Check if it's a spreadsheet file (xlsx, csv) - use markitdownCOMMENT
LOWbackend/services/file_parser_service.py241 # Read file contentCOMMENT
LOWbackend/services/file_parser_service.py249 # Check if content has markdown imagesCOMMENT
LOWscripts/setup-env-from-secrets.sh56 # Check if this configuration item exists in .env fileCOMMENT
LOWscripts/test_docker_environment.sh255# Check if project still existsCOMMENT
LOWscripts/run-local-ci.sh147 # Check if Docker is runningCOMMENT
Docstring Block Structure8 hits · 40 pts
SeverityFileLineSnippetContext
HIGHbackend/services/ai_service.py242 生成并解析JSON,如果解析失败则重新生成 Args: prompt: 生成提示词 thinking_budget: 思考预算(会根据 enSTRING
HIGHbackend/services/ai_service.py274 带图片输入的JSON生成,如果解析失败则重新生成(最多重试3次) Args: prompt: 生成提示词 image_path: 图片文件路STRING
HIGHbackend/services/ai_service.py1077 Generate image using configured image provider Based on gemini_genai.py gen_image() ArSTRING
HIGHbackend/services/image_editability/service.py92 将图片转换为可编辑结构(递归) 线程安全:此方法可以被多个线程并行调用 Args: image_path: 图片路径 STRING
HIGHbackend/services/image_editability/factories.py313 创建基于生成式大模型的Inpaint提供者 使用生成式大模型(如Gemini图片编辑)通过自然语言指令移除图片中的文字和图标。 适用于不需要精确bbox的场景,大模型自动理STRING
HIGHbackend/services/image_editability/factories.py506 从默认参数创建配置 默认配置(推荐用于导出PPTX): - 元素提取:混合提取器(MinerU版面分析 + 百度高精度OCR) - 背景生成:混合InpaiSTRING
HIGHbackend/services/image_editability/factories.py702 创建基于Caption Model的文字属性提取器 使用视觉语言模型(如Gemini)分析文字区域图像, 通过生成JSON的方式获取字体颜色、是否粗体、是否斜体等属性。 STRING
HIGHbackend/services/image_editability/factories.py730 创建文字属性提取器注册表 支持动态注册新元素类型,不限于预定义类型。 Args: caption_extractor: CaptiSTRING
Magic Placeholder Names7 hits · 30 pts
SeverityFileLineSnippetContext
HIGHREADME.md268GOOGLE_API_KEY=your-api-key-hereCODE
HIGHREADME.md273OPENAI_API_KEY=your-api-key-hereCODE
HIGHREADME_EN.md269GOOGLE_API_KEY=your-api-key-hereCODE
HIGHREADME_EN.md276OPENAI_API_KEY=your-api-key-hereCODE
HIGHbackend/controllers/settings_controller.py233 "api_key": "your-api-key",STRING
HIGHscripts/setup-env-from-secrets.sh76 sed -i '/^GOOGLE_API_KEY=/s/your-api-key-here/mock-api-key/' "$ENV_FILE"CODE
HIGHv0_demo/lazyllm_genai.py22 export BANANA_QWEN_API_KEY = "your-api-key"STRING
Fake / Example Data24 hits · 20 pts
SeverityFileLineSnippetContext
LOWfrontend/e2e/settings-backfill.spec.ts67 const placeholder = await apiKeyInput.getAttribute('placeholder')CODE
LOWfrontend/e2e/settings-backfill.spec.ts116 const placeholder = await apiKeyInput.getAttribute('placeholder')CODE
LOW…nd/e2e/settings-per-model-provider-integration.spec.ts63 const placeholder = await apiKeyInput.getAttribute('placeholder')CODE
LOWfrontend/e2e/file-preview-scrollbar.spec.ts12const LONG_MARKDOWN = '# Test Document\n\n' + 'Lorem ipsum dolor sit amet. '.repeat(200) +CODE
LOWfrontend/e2e/file-preview-scrollbar.spec.ts12const LONG_MARKDOWN = '# Test Document\n\n' + 'Lorem ipsum dolor sit amet. '.repeat(200) +CODE
LOWfrontend/e2e/per-model-startup-creds.spec.ts100 const placeholder = await apiKeyInput.getAttribute('placeholder')CODE
LOWfrontend/e2e/openai-oauth.spec.ts80 json: { success: true, data: { ...base, openai_oauth_connected: true, openai_oauth_account_id: 'user@exampleCODE
LOWfrontend/e2e/openai-oauth.spec.ts409 json: { success: true, data: { ...base, openai_oauth_connected: true, openai_oauth_account_id: 'user@exampleCODE
LOWfrontend/e2e/openai-oauth.spec.ts454 json: { success: true, data: { message: 'Connected', account_id: 'user@example.com' } },CODE
LOWfrontend/e2e/openai-oauth.spec.ts461 json: { success: true, data: { connected: true, account_id: 'user@example.com' } },CODE
LOWfrontend/e2e/openai-oauth.spec.ts484 json: { success: true, data: { ...base, openai_oauth_connected: true, openai_oauth_account_id: 'user@exampleCODE
LOWfrontend/src/components/shared/AccessCodeGuard.tsx103 placeholder={t('placeholder')}CODE
LOW⚡backend/tests/unit/test_api_material.py215 app.config['GOOGLE_API_KEY'] = 'fake-key'STRING
LOWbackend/tests/unit/test_alembic_cli_target.py88 conn.execute("INSERT INTO waitlist_signups VALUES (1, 'user@example.com', '2026-09-27')")CODE
LOW⚡backend/tests/unit/test_api_settings_provider.py667 settings.openai_oauth_account_id = 'user@example.com'CODE
LOWbackend/tests/unit/test_api_settings_provider.py555 settings.openai_oauth_account_id = 'user@example.com'CODE
LOWbackend/tests/unit/test_api_settings_provider.py621 settings.openai_oauth_account_id = 'user@example.com'CODE
LOWbackend/tests/unit/test_api_settings_provider.py694 assert settings.openai_oauth_account_id == 'user@example.com'CODE
LOWbackend/tests/unit/test_api_settings_provider.py712 settings.openai_oauth_account_id = 'user@example.com'CODE
LOWbackend/tests/unit/test_api_settings_provider.py744 assert settings.openai_oauth_account_id == 'user@example.com'CODE
LOWbackend/tests/unit/test_api_settings_provider.py762 settings.openai_oauth_account_id = 'user@example.com'CODE
LOWbackend/tests/unit/test_api_settings_provider.py787 assert settings.openai_oauth_account_id == 'user@example.com'CODE
LOWbackend/services/prompts.py1425 "extracted_text": "模板图上可见的真实文字:主标题 + 关键要点,≤80 字;若全是 Lorem ipsum 等占位文字则留空字符串",CODE
LOWbackend/services/prompts.py1529 "extracted_text": "real text visible on the template: main title + key bullets, <= 80 chars; empty string if it is allCODE
Self-Referential Comments5 hits · 14 pts
SeverityFileLineSnippetContext
MEDIUMbackend/tests/unit/test_api_material.py180 # Create a temp imageSTRING
MEDIUMbackend/tests/integration/test_api_full_flow.py210 # Create a simple test template imageCOMMENT
MEDIUMbackend/controllers/page_controller.py717 # Create a temporary directory in the project's upload folderCOMMENT
MEDIUMscripts/test_docker_environment.sh236# Create a projectCOMMENT
MEDIUM⚡v0_demo/lazyllm_genai.py196 # Create a test image if it doesn't existCOMMENT
AI Structural Patterns18 hits · 14 pts
SeverityFileLineSnippetContext
LOWbackend/utils/latex_utils.py158CODE
LOWbackend/services/tts_video_service.py824CODE
LOWbackend/services/tts_video_service.py941CODE
LOWbackend/services/tts_video_service.py1497CODE
LOWbackend/services/export_service.py1575CODE
LOWbackend/services/task_manager.py727CODE
LOWbackend/services/task_manager.py1365CODE
LOWbackend/services/task_manager.py2073CODE
LOWbackend/services/file_parser_service.py97CODE
LOWbackend/services/image_editability/factories.py494CODE
LOWbackend/services/image_editability/data_models.py106CODE
LOW…rvices/ai_providers/ocr/baidu_accurate_ocr_provider.py82CODE
LOWcli/banana_cli/config.py91CODE
LOWcli/banana_cli/commands/exports.py93CODE
LOWcli/banana_cli/commands/workflows.py149CODE
LOWcli/banana_cli/commands/projects.py44CODE
LOWcli/banana_cli/commands/projects.py73CODE
LOWv0_demo/lazyllm_genai.py66CODE
Cross-Language Confusion3 hits · 12 pts
SeverityFileLineSnippetContext
HIGHbackend/tests/unit/test_alembic_cli_target.py5the launchd `alembic upgrade head && python app.py`) therefore migrated a scratchSTRING
HIGHbackend/models/material.py16 project_id = db.Column(db.String(36), db.ForeignKey('projects.id'), nullable=True) # Can be null, for global materiCODE
HIGHbackend/services/prompts.py17146. **When unsure**: prefer `status=undecided` (template_asset_id=null) over guessing. confidence<0.5 should be undecidedCODE
AI Slop Vocabulary2 hits · 6 pts
SeverityFileLineSnippetContext
MEDIUMbackend/tests/unit/test_api_settings_provider.py208 # so the test is robust to module import-path differences in CI.COMMENT
MEDIUMbackend/services/ai_providers/image/openai_provider.py343 # Build comprehensive extra_body that works with multiple providersCOMMENT
Synthetic Comment Markers1 hit · 5 pts
SeverityFileLineSnippetContext
HIGHbackend/models/material.py20 caption = db.Column(db.String(500), nullable=True) # AI-generated image descriptionCODE
Over-Commented Block2 hits · 2 pts
SeverityFileLineSnippetContext
LOWREADME.md281# IMAGE_API_BASE=https://token.sensenova.cn/v1COMMENT
LOW.github/workflows/docker-publish.yml321 # VERSION: ${{ inputs.version }}COMMENT
Example Usage Blocks1 hit · 2 pts
SeverityFileLineSnippetContext
LOWscripts/setup-env-from-secrets.sh5# Usage:COMMENT