Repository Analysis

ZhuLinsen/daily_stock_analysis

LLM 驱动的多市场股票智能分析系统:多源行情、实时新闻、决策看板与自动推送,支持零成本定时运行。 LLM-powered multi-market stock analysis system with multi-source market data, real-time news, decision dashboard, automated notifications, and cost-free scheduled runs.

22.1 Moderate AI signal View on GitHub

Analysis Overview

This report presents the forensic synthetic code analysis of ZhuLinsen/daily_stock_analysis, a Python project with 64,207 GitHub stars. SynthScan v2.0 examined 460,533 lines of code across 1040 source files, recording 9783 pattern matches distributed across 22 syntactic categories. The overall adjusted score of 22.1 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).

22.1
Adjusted Score
22.1
Raw Score
100%
Time Factor
2026-08-28
Last Push
64.2K
Stars
Python
Language
460.5K
Lines of Code
1.0K
Files
9.8K
Pattern Hits
2026-08-29
Scan Date
0.04
HC Hit Rate

What These Metrics Mean

Adjusted Score
Primary synthetic code indicator. Raw score normalised per 1,000 lines of code and multiplied by the temporal discount factor. This is the definitive comparative metric — use it to rank repositories by AI authorship density.
Raw Score
The unmodified sum of all severity-weighted, context-multiplied pattern match scores before temporal discounting. Reflects the absolute signal strength independent of when the repository was last active.
Time Factor
The temporal discount multiplier (0–100%) applied to the raw score. Repositories last updated before ChatGPT's launch (Nov 2022) receive a 5% factor. Full signal is only assigned to repositories active in the post-adoption era (Jan 2024+).
Pattern Hits
Total count of individual pattern matches across all files and categories. A high hit count with a low score may indicate a very large codebase with isolated AI snippets; a low count with a high score indicates dense, concentrated AI signatures.
HC Hit Rate
High+Critical pattern hits per file, averaged across the repository. This orthogonal signal catches repositories where a few files are densely packed with high-severity AI tells — a strong indicator even when the normalised score appears moderate due to codebase size.
Lines of Code / Files
Total lines and files analysed. The scanner examines 94 file extensions. These denominators are used to normalise the score, enabling fair comparison between repositories of vastly different sizes.

Score History

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.

Severity Breakdown

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.

CRITICAL 5HIGH 41MEDIUM 617LOW 9120

Directory Score Breakdown

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.

Pattern Findings

The scanner identified 9783 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.

Hyper-Verbose Identifiers6810 hits · 5756 pts
SeverityFileLineSnippetContext
LOWmain.py103def _warn_if_public_webui_without_auth(host: str) -> None:CODE
LOWmain.py119def _resolve_web_service_bind(args: argparse.Namespace, config: Config) -> Tuple[str, int]:CODE
LOWmain.py216def _get_stock_analysis_pipeline():CODE
LOWmain.py255def _reload_env_file_values_preserving_overrides() -> None:CODE
LOWmain.py632def _can_reuse_market_context_for_review(summary: str, region: str) -> bool:STRING
LOWmain.py642def _resolve_daily_market_context_market(market: str, normalized_region: str) -> str:STRING
LOWmain.py651def _resolve_daily_market_context_target_date(STRING
LOWmain.py452def _compute_trading_day_filter(STRING
LOWmain.py503def _run_market_review_with_shared_lock(STRING
LOWmain.py536def _refresh_stock_index_cache_for_analysis(config: Config) -> None:STRING
LOWmain.py553def _resolve_portfolio_stock_codes(args: argparse.Namespace) -> Optional[List[str]]:STRING
LOWmain.py572def _prime_daily_market_context(STRING
LOWmain.py666def _market_review_report_text(review_result: Any) -> str:STRING
LOWmain.py675def _save_reused_market_review_report(STRING
LOWmain.py775 def _return_with_auto_backtest(result: bool) -> bool:STRING
LOWmain.py1183def _run_analysis_with_runtime_scheduler_lock(STRING
LOWmain.py1357def _resolve_scheduled_stock_codes(stock_codes: Optional[List[str]]) -> Optional[List[str]]:STRING
LOWmain.py1387def _build_schedule_time_provider(default_schedule_time: str):STRING
LOWmain.py1414def _build_schedule_times_provider(default_schedule_time: str):STRING
LOWtests/test_backtest_service.py187 def _seed_legacy_offshore_analysis(CODE
LOWtests/test_backtest_service.py263 def test_kr_suffix_filter_reaches_legacy_bare_history(self) -> None:CODE
LOWtests/test_backtest_service.py288 def test_jp_suffix_filter_reaches_legacy_bare_history(self) -> None:CODE
LOWtests/test_backtest_service.py313 def test_unfiltered_rerun_uses_persisted_market_for_legacy_jp_kr_bare_codes(CODE
LOWtests/test_backtest_service.py366 def test_unfiltered_rerun_rebuilds_legacy_cn_snapshot_for_indexed_bare_jp_code(CODE
LOWtests/test_backtest_service.py422 def test_canonical_hk_query_does_not_backtest_legacy_bare_jp_collision(CODE
LOWtests/test_backtest_service.py483 def test_run_backtest_rejects_invalid_eval_window_days_at_entry(self) -> None:CODE
LOWtests/test_backtest_service.py495 def test_run_backtest_accepts_dotted_exchange_prefix_and_filters_analysis_date_range(self) -> None:CODE
LOWtests/test_backtest_service.py525 def test_run_backtest_keeps_dotted_cn_code_match_when_analysis_history_is_dotted(self) -> None:CODE
LOWtests/test_backtest_service.py563 def test_run_backtest_matches_compact_prefixed_analysis_history_with_canonical_query(self) -> None:CODE
LOWtests/test_backtest_service.py622 def test_run_backtest_matches_compact_ss_alias_after_request_normalization(self) -> None:CODE
LOWtests/test_backtest_service.py656 def test_run_backtest_uses_bare_daily_bars_and_summary_for_compact_ss_history(self) -> None:CODE
LOWtests/test_backtest_service.py725 def test_run_backtest_uses_compact_forward_bars_when_analysis_history_is_bare_code(self) -> None:CODE
LOWtests/test_backtest_service.py782 def test_run_backtest_matches_compact_bj_code_shape_with_no_prefix_query(self) -> None:CODE
LOWtests/test_backtest_service.py841 def test_get_candidates_does_not_match_invalid_a_share_hk_cross_input(self) -> None:CODE
LOWtests/test_backtest_service.py854 def test_get_candidates_does_not_match_explicit_wrong_a_share_market(self) -> None:CODE
LOWtests/test_backtest_service.py868 def test_run_backtest_rejects_invalid_market_suffix_length_input(self) -> None:CODE
LOWtests/test_backtest_service.py881 def test_run_backtest_rejects_explicit_wrong_a_share_market(self) -> None:CODE
LOWtests/test_backtest_service.py896 def test_get_recent_evaluations_rejects_explicit_wrong_a_share_market(self) -> None:CODE
LOWtests/test_backtest_service.py910 def test_get_summary_rejects_explicit_wrong_a_share_market(self) -> None:CODE
LOWtests/test_backtest_service.py923 def test_run_backtest_bare_code_query_matches_dotted_history_records(self) -> None:CODE
LOWtests/test_backtest_service.py967 def test_run_backtest_uses_bare_daily_bars_for_dotted_history_record(self) -> None:CODE
LOWtests/test_backtest_service.py1027 def test_run_backtest_does_not_mix_start_and_forward_bars_across_code_shapes(self) -> None:CODE
LOWtests/test_backtest_service.py1091 def test_run_backtest_uses_exact_expected_start_across_code_aliases(self) -> None:CODE
LOWtests/test_backtest_service.py1177 def test_run_backtest_replays_legacy_non_session_effective_date_from_local_bars(CODE
LOWtests/test_backtest_service.py1239 def test_non_session_resolution_exposes_backtest_only_local_start(CODE
LOWtests/test_backtest_service.py1264 def test_run_backtest_consumes_explicit_backtest_only_start(self) -> None:CODE
LOWtests/test_backtest_service.py1320 def test_run_backtest_rebuilds_legacy_cn_snapshot_for_jp_history(self) -> None:CODE
LOWtests/test_backtest_service.py1405 def test_run_backtest_refills_from_authoritative_start_date(self) -> None:CODE
LOWtests/test_backtest_service.py1499 def test_run_backtest_rejects_all_stale_daily_window_candidates(self) -> None:CODE
LOWtests/test_backtest_service.py1587 def test_run_backtest_supports_us_suffix_code_shape_when_run_with_suffix(self) -> None:CODE
LOWtests/test_backtest_service.py1620 def test_run_backtest_preserves_supported_us_index_identity(self) -> None:CODE
LOWtests/test_backtest_service.py1664 def test_run_backtest_us_suffix_query_matches_bare_history_and_summary(self) -> None:CODE
LOWtests/test_backtest_service.py1711 def test_run_backtest_bare_us_query_matches_us_suffix_history_and_summary(self) -> None:CODE
LOWtests/test_backtest_service.py1758 def test_us_code_queries_match_legacy_results_without_rerun(self) -> None:CODE
LOWtests/test_backtest_service.py1875 def test_run_backtest_reaches_legacy_bare_hk_rows_from_supported_aliases(self) -> None:CODE
LOWtests/test_backtest_service.py1953 def test_run_backtest_matches_hk_daily_shape_variants_for_prefixed_history(self) -> None:CODE
LOWtests/test_backtest_service.py2018 def test_run_backtest_supports_dotted_hk_prefix_query_shape(self) -> None:CODE
LOWtests/test_backtest_service.py2098 def test_run_backtest_filters_by_snapshot_analysis_date_not_created_at(self) -> None:CODE
LOWtests/test_backtest_service.py2150 def test_run_backtest_persists_snapshot_date_when_start_daily_falls_back(self) -> None:CODE
LOWtests/test_backtest_service.py2223 def test_date_filtered_rerun_aligns_legacy_result_date_to_snapshot_date(self) -> None:CODE
6750 more matches not shown…
Decorative Section Separators557 hits · 2020 pts
SeverityFileLineSnippetContext
MEDIUMrequirements.txt1# ===================================COMMENT
MEDIUMrequirements.txt3# ===================================COMMENT
MEDIUMdocker/docker-compose.yml1# ===================================COMMENT
MEDIUMdocker/docker-compose.yml3# ===================================COMMENT
MEDIUMtests/test_notification_sender.py434 # ------------------------------------------------------------------COMMENT
MEDIUMtests/test_notification_sender.py436 # ------------------------------------------------------------------COMMENT
MEDIUMtests/test_notification_sender.py747 # ------------------------------------------------------------------COMMENT
MEDIUMtests/test_notification_sender.py749 # ------------------------------------------------------------------COMMENT
MEDIUMtests/test_generate_index_from_csv.py664# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_generate_index_from_csv.py666# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_a_share_index_data_routing.py607# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_a_share_index_data_routing.py609# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_multi_agent.py67# ============================================================COMMENT
MEDIUMtests/test_multi_agent.py69# ============================================================COMMENT
MEDIUMtests/test_multi_agent.py223# ============================================================COMMENT
MEDIUMtests/test_multi_agent.py225# ============================================================COMMENT
MEDIUMtests/test_multi_agent.py540# ============================================================COMMENT
MEDIUMtests/test_multi_agent.py542# ============================================================COMMENT
MEDIUMtests/test_multi_agent.py629# ============================================================COMMENT
MEDIUMtests/test_multi_agent.py631# ============================================================COMMENT
MEDIUMtests/test_multi_agent.py2747# ============================================================COMMENT
MEDIUMtests/test_multi_agent.py2749# ============================================================COMMENT
MEDIUMtests/test_multi_agent.py3060# ============================================================COMMENT
MEDIUMtests/test_multi_agent.py3062# ============================================================COMMENT
MEDIUMtests/test_multi_agent.py3148# ============================================================COMMENT
MEDIUMtests/test_multi_agent.py3150# ============================================================COMMENT
MEDIUMtests/test_multi_agent.py3715 # ------------------------------------------------------------------COMMENT
MEDIUMtests/test_multi_agent.py3717 # ------------------------------------------------------------------COMMENT
MEDIUMtests/test_multi_agent.py3775 # ------------------------------------------------------------------COMMENT
MEDIUMtests/test_multi_agent.py3777 # ------------------------------------------------------------------COMMENT
MEDIUMtests/test_multi_agent.py3802 # ------------------------------------------------------------------COMMENT
MEDIUMtests/test_multi_agent.py3804 # ------------------------------------------------------------------COMMENT
MEDIUMtests/test_multi_agent.py3845 # ------------------------------------------------------------------COMMENT
MEDIUMtests/test_multi_agent.py3847 # ------------------------------------------------------------------COMMENT
MEDIUMtests/test_multi_agent.py3886 # ------------------------------------------------------------------COMMENT
MEDIUMtests/test_multi_agent.py3888 # ------------------------------------------------------------------COMMENT
MEDIUMtests/test_multi_agent.py3921 # ------------------------------------------------------------------COMMENT
MEDIUMtests/test_multi_agent.py3923 # ------------------------------------------------------------------COMMENT
MEDIUMtests/test_multi_agent.py463# ============================================================COMMENT
MEDIUMtests/test_multi_agent.py465# ============================================================COMMENT
MEDIUMtests/test_multi_agent.py948# ============================================================COMMENT
MEDIUMtests/test_multi_agent.py950# ============================================================COMMENT
MEDIUMtests/test_multi_agent.py1055# ============================================================COMMENT
MEDIUMtests/test_multi_agent.py1057# ============================================================COMMENT
MEDIUMtests/test_multi_agent.py2426# ============================================================COMMENT
MEDIUMtests/test_multi_agent.py2428# ============================================================COMMENT
MEDIUMtests/test_image_stock_extractor_litellm.py78# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_image_stock_extractor_litellm.py80# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_image_stock_extractor_litellm.py126# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_image_stock_extractor_litellm.py128# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_image_stock_extractor_litellm.py153# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_image_stock_extractor_litellm.py155# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_image_stock_extractor_litellm.py358# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_image_stock_extractor_litellm.py360# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_image_stock_extractor_litellm.py431# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_image_stock_extractor_litellm.py433# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_image_stock_extractor_litellm.py37# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_image_stock_extractor_litellm.py39# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_agent_pipeline.py36# ============================================================COMMENT
MEDIUMtests/test_agent_pipeline.py38# ============================================================COMMENT
497 more matches not shown…
Excessive Try-Catch Wrapping998 hits · 920 pts
SeverityFileLineSnippetContext
MEDIUMmain.py1284def run_server():CODE
LOWmain.py55 except Exception as exc:CODE
LOWmain.py133 except Exception as exc: # pragma: no cover - defensive branchCODE
LOWmain.py549 except Exception as exc: # noqa: BLE001 - stock index freshness must not block analysis.STRING
LOWmain.py704 except Exception as exc:STRING
LOWmain.py730 except Exception as exc:STRING
LOWmain.py1156 except Exception as e:STRING
LOWmain.py1165 except Exception as e:STRING
LOWmain.py1287 except Exception as exc: # noqa: BLE001 - surface startup issues to caller promptlySTRING
LOWmain.py1338 except Exception as exc:STRING
LOWmain.py1353 except Exception as exc:STRING
LOWmain.py1381 except Exception as exc: # pragma: no cover - defensive guardSTRING
LOWmain.py1457 except Exception as exc:STRING
LOWmain.py1468 except Exception as exc:STRING
LOWmain.py1475 except Exception as exc:STRING
LOWmain.py1592 except Exception as e:STRING
LOWmain.py1785 except Exception as e:STRING
LOWtests/test_portfolio_service.py1162 except Exception as exc: # pragma: no cover - asserted belowCODE
LOWtests/test_portfolio_service.py1217 except Exception as exc: # pragma: no cover - asserted belowCODE
LOWtests/test_multi_agent.py4078 except Exception as exc:CODE
LOWtests/test_multi_agent.py4131 except Exception as exc:CODE
LOWtests/longbridge_live_smoke.py106 except Exception as e:CODE
LOWtests/test_anspire_search.py481 except Exception:CODE
LOWtests/test_social_sentiment_service.py129 except Exception as exc: # pragma: no cover - thread collectionCODE
MEDIUMtests/test_social_sentiment_service.py125def worker():CODE
LOWtests/test_llm_usage.py1764 except Exception as exc:CODE
LOWtests/test_conversation_manager.py40 except Exception as exc: # pragma: no cover - failures are asserted belowCODE
MEDIUMtests/test_search_service_concurrency.py116def worker():CODE
MEDIUMtests/test_search_service_concurrency.py173def worker():CODE
MEDIUMtests/test_search_service_concurrency.py526def worker():CODE
LOWtests/test_search_service_concurrency.py120 except Exception as exc: # pragma: no cover - thread collectionCODE
LOWtests/test_search_service_concurrency.py177 except Exception as exc: # pragma: no cover - thread collectionCODE
LOWtests/test_search_service_concurrency.py530 except Exception as exc: # pragma: no cover - thread collectionCODE
MEDIUMtests/test_storage.py456def ensure_record() -> None:CODE
MEDIUMtests/test_storage.py902def initialize_manager() -> None:CODE
MEDIUMtests/test_storage.py911def use_manager() -> None:CODE
MEDIUMtests/test_storage.py994def construct_directly() -> None:CODE
MEDIUMtests/test_storage.py1003def use_get_instance() -> None:CODE
LOWtests/test_storage.py460 except Exception as exc:CODE
LOWtests/test_storage.py907 except Exception as exc:CODE
LOWtests/test_storage.py923 except Exception as exc:CODE
LOWtests/test_storage.py999 except Exception as exc:CODE
LOWtests/test_storage.py1015 except Exception as exc:CODE
LOWtests/test_data_fetcher_prefetch_stock_names.py294 except Exception as exc: # pragma: no cover - thread collectionCODE
MEDIUMtests/test_data_fetcher_prefetch_stock_names.py289def worker():CODE
LOWtests/test_agent_sse_cleanup.py50 except Exception as exc:CODE
LOWtests/test_main_schedule_mode.py77 except Exception:CODE
LOWtests/test_main_schedule_mode.py2418 except Exception:CODE
LOWtests/tw_institutional_live_smoke.py42except Exception: # noqa: BLE001 - cosmetic only; never block the smoke on console encodingCODE
LOWtests/test_run_diagnostics_p1.py106 except Exception as exc: # pragma: no cover - exercised by queue behaviorCODE
LOWtests/test_analysis_api_contract.py37except Exception: # pragma: no cover - optional dependency environmentsCODE
LOWtests/test_analysis_api_contract.py1232 except Exception as exc: # pragma: no cover - exercised via assert belowCODE
LOWtests/test_analysis_api_contract.py3606 except Exception: # pragma: no cover - optional dependency environmentsCODE
LOWtests/test_stooq_fallback.py12except Exception:CODE
LOWtests/test_realtime_types.py64 except Exception as exc: # pragma: no cover - thread collectionCODE
LOWtests/test_realtime_types.py91 except Exception as exc: # pragma: no cover - thread collectionCODE
LOWtests/test_realtime_types.py99 except Exception as exc: # pragma: no cover - thread collectionCODE
MEDIUMtests/test_realtime_types.py60def worker():CODE
MEDIUMtests/test_realtime_types.py86def record_success():CODE
MEDIUMtests/test_realtime_types.py94def record_failure():CODE
938 more matches not shown…
Unused Imports610 hits · 520 pts
SeverityFileLineSnippetContext
LOWserver.py40CODE
LOWwebui.py18CODE
LOWmain.py24CODE
LOWtests/test_screening_selection_variant.py3CODE
LOWtests/test_portfolio_service.py4CODE
LOWtests/test_agent_chat_executor.py4CODE
LOWtests/test_analysis_context_pack_prompt.py4CODE
LOWtests/test_generate_index_from_csv.py11CODE
LOWtests/test_generate_index_from_csv.py11CODE
LOWtests/test_generate_index_from_csv.py17CODE
LOWtests/test_analysis_context_builder.py4CODE
LOWtests/test_analysis_context_pack_overview.py4CODE
LOWtests/test_market_light_service.py4CODE
LOWtests/test_main_portfolio.py1CODE
LOWtests/test_fetch_tushare_stock_list.py4CODE
LOWtests/test_multi_agent.py30CODE
LOWtests/test_multi_agent.py25CODE
LOWtests/conftest.py4CODE
LOWtests/test_decision_signal_repo.py4CODE
LOWtests/test_ci_workflow_contract.py4CODE
LOWtests/test_run_diagnostics_p2.py4CODE
LOWtests/test_runtime_scheduler_service.py4CODE
LOWtests/test_agent_pipeline.py20CODE
LOWtests/test_agent_pipeline.py21CODE
LOWtests/test_agent_pipeline.py21CODE
LOWtests/test_agent_pipeline.py22CODE
LOWtests/test_agent_pipeline.py22CODE
LOWtests/test_report_integrity.py16CODE
LOWtests/test_anspire_search.py27CODE
LOWtests/test_anspire_search.py27CODE
LOWtests/test_anspire_search.py28CODE
LOWtests/test_anspire_search.py29CODE
LOWtests/test_pipeline_index_targets.py20CODE
LOWtests/test_pipeline_index_targets.py24CODE
LOWtests/test_pipeline_index_targets.py24CODE
LOWtests/test_decision_signal_api.py4CODE
LOWtests/test_decision_signal_api.py19CODE
LOWtests/test_futu_distribution_contract.py4CODE
LOWtests/test_skill_opinion_outcomes.py4CODE
LOWtests/test_local_cli_backend.py4CODE
LOWtests/test_analysis_context_pack_schema.py4CODE
LOWtests/test_index_realtime_routing.py15CODE
LOWtests/test_daily_analysis_workflow_llm_env.py4CODE
LOWtests/test_screening_history.py4CODE
LOWtests/test_alert_api.py4CODE
LOWtests/test_alert_api.py29CODE
LOWtests/test_alert_api.py21CODE
LOWtests/test_stock_index_remote_service.py4CODE
LOWtests/test_codex_tool_process.py4CODE
LOWtests/test_analysis_integration.py18CODE
LOWtests/test_analysis_integration.py19CODE
LOWtests/test_history_loader.py3CODE
LOWtests/test_market_light_alerts.py4CODE
LOWtests/test_decision_signal_service.py4CODE
LOWtests/test_build_release_notes.py1CODE
LOWtests/test_agent_frozen_context.py3CODE
LOWtests/test_agent_backend.py4CODE
LOWtests/test_realtime_quote_fallback_logging.py11CODE
LOWtests/test_ask_command.py10CODE
LOWtests/test_decision_profile_policy.py1CODE
550 more matches not shown…
Deep Nesting329 hits · 228 pts
SeverityFileLineSnippetContext
LOWmain.py734CODE
LOWmain.py1324CODE
LOWmain.py1444CODE
LOWtests/test_portfolio_service.py1381CODE
LOWtests/test_multi_agent.py1554CODE
LOWtests/test_multi_agent.py1989CODE
LOWtests/test_multi_agent.py2012CODE
LOWtests/test_multi_agent.py2028CODE
LOWtests/test_multi_agent.py2060CODE
LOWtests/test_multi_agent.py2123CODE
LOWtests/test_runtime_scheduler_service.py447CODE
LOWtests/test_runtime_scheduler_service.py489CODE
LOWtests/test_anspire_search.py461CODE
LOWtests/test_ask_command.py281CODE
LOWtests/test_market_review.py17CODE
LOWtests/test_agent_executor.py227CODE
LOWtests/test_agent_executor.py284CODE
LOWtests/test_agent_executor.py337CODE
LOWtests/test_agent_executor.py1035CODE
LOWtests/test_fetcher_logging.py127CODE
LOWtests/test_storage.py41CODE
LOWtests/test_storage.py419CODE
LOWtests/test_storage.py1059CODE
LOWtests/test_storage.py1788CODE
LOWtests/test_notification.py965CODE
LOWtests/test_notification.py1000CODE
LOWtests/test_auth_status_setup_state.py103CODE
LOWtests/test_analysis_api_contract.py166CODE
LOWtests/test_analysis_api_contract.py512CODE
LOWtests/test_analysis_api_contract.py3275CODE
LOWtests/test_analysis_history.py2382CODE
LOWtests/test_notification_empty_news_disclosure.py344CODE
LOWtests/test_notification_empty_news_disclosure.py366CODE
LOWdata_provider/realtime_types.py234CODE
LOWdata_provider/realtime_types.py405CODE
LOWdata_provider/yfinance_fetcher.py236CODE
LOWdata_provider/yfinance_fetcher.py351CODE
LOWdata_provider/yfinance_fetcher.py401CODE
LOWdata_provider/yfinance_fetcher.py428CODE
LOWdata_provider/yfinance_fetcher.py460CODE
LOWdata_provider/yfinance_fetcher.py483CODE
LOWdata_provider/yfinance_fetcher.py506CODE
LOWdata_provider/yfinance_fetcher.py794CODE
LOWdata_provider/fundamental_adapter.py240CODE
LOWdata_provider/tickflow_fetcher.py396CODE
LOWdata_provider/yfinance_fundamental_adapter.py146CODE
LOWdata_provider/akshare_fetcher.py718CODE
LOWdata_provider/akshare_fetcher.py1071CODE
LOWdata_provider/akshare_fetcher.py1115CODE
LOWdata_provider/akshare_fetcher.py1520CODE
LOWdata_provider/akshare_fetcher.py1619CODE
LOWdata_provider/akshare_fetcher.py1930CODE
LOWdata_provider/akshare_fetcher.py2068CODE
LOWdata_provider/efinance_fetcher.py924CODE
LOWdata_provider/efinance_fetcher.py1062CODE
LOWdata_provider/efinance_fetcher.py1190CODE
LOWdata_provider/longbridge_fetcher.py145CODE
LOWdata_provider/longbridge_fetcher.py497CODE
LOWdata_provider/longbridge_fetcher.py634CODE
LOWdata_provider/futu_fundamental_adapter.py138CODE
269 more matches not shown…
Modern Structural Boilerplate214 hits · 216 pts
SeverityFileLineSnippetContext
LOWserver.py43__all__ = ['app']CODE
LOWwebui.py23logger = logging.getLogger(__name__)CODE
LOWmain.py86logger = logging.getLogger(__name__)CODE
LOWmain.py178def _setup_bootstrap_logging(debug: bool = False) -> None:CODE
LOWtests/test_runtime_scheduler_service.py654 def set_daily_task(self, task, run_immediately: bool) -> None:CODE
LOWtests/test_runtime_scheduler_service.py735 def set_daily_task(self, task, run_immediately: bool) -> None:CODE
LOWtests/test_signal_attribution_supplement.py23logger = logging.getLogger(__name__)CODE
LOWtests/test_run_flow.py222 def update_analysis_history_diagnostics(self, *, query_id: str, code: str, diagnostics: dict) -> None:CODE
LOWdata_provider/realtime_types.py24logger = logging.getLogger(__name__)CODE
LOWdata_provider/alphavantage_fetcher.py22logger = logging.getLogger(__name__)CODE
LOWdata_provider/yfinance_fetcher.py55logger = logging.getLogger(__name__)CODE
LOWdata_provider/fundamental_adapter.py18logger = logging.getLogger(__name__)CODE
LOWdata_provider/futu_fetcher.py19logger = logging.getLogger(__name__)CODE
LOWdata_provider/tickflow_fetcher.py44logger = logging.getLogger(__name__)CODE
LOWdata_provider/tickflow_fetcher.py552 def _set_daily_cache(self, cache_key: Tuple[str, str, str, str], df: pd.DataFrame) -> None:CODE
LOWdata_provider/yfinance_fundamental_adapter.py36logger = logging.getLogger(__name__)CODE
LOWdata_provider/akshare_fetcher.py62logger = logging.getLogger(__name__)CODE
LOWdata_provider/akshare_fetcher.py435 def _set_random_user_agent(self) -> None:CODE
LOWdata_provider/efinance_fetcher.py119logger = logging.getLogger(__name__)CODE
LOWdata_provider/efinance_fetcher.py318 def _set_random_user_agent(self) -> None:CODE
LOWdata_provider/longbridge_fetcher.py40logger = logging.getLogger(__name__)CODE
LOWdata_provider/finnhub_fetcher.py22logger = logging.getLogger(__name__)CODE
LOWdata_provider/__init__.py48__all__ = [CODE
LOWdata_provider/tushare_fetcher.py40logger = logging.getLogger(__name__)CODE
LOWdata_provider/tw_institutional_fetcher.py37logger = logging.getLogger(__name__)CODE
LOWdata_provider/baostock_fetcher.py42logger = logging.getLogger(__name__)CODE
LOWdata_provider/pytdx_fetcher.py43logger = logging.getLogger(__name__)CODE
LOWdata_provider/tencent_fetcher.py21logger = logging.getLogger(__name__)CODE
LOWdata_provider/base.py37logger = logging.getLogger(__name__)CODE
LOWscripts/check_env.py73logger = logging.getLogger(__name__)CODE
LOWapi/app.py47logger = logging.getLogger(__name__)CODE
LOWapi/v1/__init__.py13__all__ = ["api_v1_router"]CODE
LOWapi/v1/endpoints/alerts.py29logger = logging.getLogger(__name__)CODE
LOWapi/v1/endpoints/auth.py37logger = logging.getLogger(__name__)CODE
LOWapi/v1/endpoints/auth.py143def _set_session_cookie(response: Response, session_value: str, request: Request) -> None:CODE
LOWapi/v1/endpoints/stocks.py46logger = logging.getLogger(__name__)CODE
LOWapi/v1/endpoints/analysis.py99logger = logging.getLogger(__name__)CODE
LOWapi/v1/endpoints/__init__.py26__all__ = [CODE
LOWapi/v1/endpoints/intelligence.py27logger = logging.getLogger(__name__)CODE
LOWapi/v1/endpoints/decision_signals.py45logger = logging.getLogger(__name__)CODE
LOWapi/v1/endpoints/agent.py43logger = logging.getLogger(__name__)CODE
LOWapi/v1/endpoints/system_config.py46logger = logging.getLogger(__name__)CODE
LOWapi/v1/endpoints/backtest.py24logger = logging.getLogger(__name__)CODE
LOWapi/v1/endpoints/portfolio.py48logger = logging.getLogger(__name__)CODE
LOWapi/v1/endpoints/usage.py16logger = logging.getLogger(__name__)CODE
LOWapi/v1/endpoints/history.py68logger = logging.getLogger(__name__)CODE
LOWapi/v1/schemas/__init__.py132__all__ = [CODE
LOWapi/middlewares/auth.py17logger = logging.getLogger(__name__)CODE
LOWapi/middlewares/__init__.py13__all__ = ["ErrorHandlerMiddleware"]CODE
LOWapi/middlewares/error_handler.py21logger = logging.getLogger(__name__)CODE
LOWbot/dispatcher.py21logger = logging.getLogger(__name__)CODE
LOWbot/dispatcher.py363 def set_help_command_getter(self, getter: Callable) -> None:CODE
LOWbot/handler.py23logger = logging.getLogger(__name__)CODE
LOWbot/__init__.py37__all__ = [CODE
LOWbot/platforms/dingtalk.py25logger = logging.getLogger(__name__)CODE
LOWbot/platforms/discord.py26logger = logging.getLogger(__name__)CODE
LOWbot/platforms/__init__.py56__all__ = [CODE
LOWbot/platforms/feishu_stream.py33logger = logging.getLogger(__name__)CODE
LOWbot/platforms/dingtalk_stream.py28logger = logging.getLogger(__name__)CODE
LOWbot/commands/strategies.py14logger = logging.getLogger(__name__)CODE
154 more matches not shown…
Docstring Block Structure18 hits · 90 pts
SeverityFileLineSnippetContext
HIGHdata_provider/yfinance_fetcher.py98 转换股票代码为 Yahoo Finance 格式 Yahoo Finance 代码格式: - A股沪市:600519.SS (Shanghai Stock Exchange) STRING
HIGHdata_provider/us_index_mapping.py47 判断代码是否为美股指数符号。 Args: code: 股票/指数代码,如 'SPX', 'DJI' Returns: True 表示是已知美股指数符号,否则 False STRING
HIGHdata_provider/us_index_mapping.py66 判断代码是否为美股股票符号(排除美股指数)。 美股股票代码为 1-5 个大写字母,可选 .X 后缀如 BRK.B。 美股指数(SPX、DJI 等)明确排除。 Args: code: 股票STRING
HIGHdata_provider/us_index_mapping.py98 获取美股指数的 Yahoo Finance 符号与中文名称。 Args: code: 用户输入,如 'SPX', '^GSPC', 'DJI' Returns: (yf_symbSTRING
HIGHdata_provider/akshare_fetcher.py227 判断代码是否为美股股票(不包括美股指数)。 委托给 us_index_mapping 模块的 is_us_stock_code()。 Args: stock_code: 股票代码 ReSTRING
HIGHdata_provider/base.py1886 获取日线数据(自动切换数据源) 故障切换策略: 1. 美股指数/美股股票直接路由到 YfinanceFetcher 2. 当前注册表已识别的 A 股指数使用STRING
HIGHapi/v1/endpoints/stocks.py420 获取股票实时行情 获取指定股票的最新行情数据 Args: stock_code: 股票代码(如 600519、00700、AAPL) Returns: STRING
HIGHapi/v1/endpoints/analysis.py283 触发股票分析 启动 AI 智能分析任务,支持单只或多只股票批量分析 流程: 1. 校验请求参数 2. 异步模式:检查重复 -> 提交任务队列 -> 返回 202 3. 同STRING
HIGHapi/v1/endpoints/analysis.py1037 查询分析任务状态 优先从任务队列查询,如果不存在则从数据库查询历史记录 Args: task_id: 任务 ID Returns: TaSTRING
HIGHapi/v1/endpoints/history.py517 获取历史报告详情 根据分析历史记录主键 ID 或 query_id 获取完整的历史分析报告。 优先尝试按主键 ID(整数)查询,若参数不是合法整数则按 query_id 查询。 ArgsSTRING
HIGHapi/v1/endpoints/history.py931 获取历史报告的 Markdown 格式内容 根据分析历史记录 ID 或 query_id 生成与推送通知格式一致的 Markdown 报告。 Args: record_id: 分析历史记录主键 STRING
HIGHsrc/agent/skills/base.py141Load a single Skill from a YAML file. The YAML file must contain at minimum: ``name``, ``display_name``, ``descSTRING
HIGHsrc/services/stock_service.py94 获取股票历史行情 Args: stock_code: 股票代码 period: K 线周期 (daily/weekly/monthly) STRING
HIGHsrc/services/task_queue.py341 Submit a single analysis task. Args: stock_code: Stock code stock_name: OptionSTRING
HIGHsrc/services/image_stock_extractor.py349 从图片中提取股票代码及名称(使用 Vision LLM)。 优先级:Gemini -> Anthropic -> OpenAI(首个可用)。 支持多 Key 轮询与重试(最多 3 次,指数退避)。 ArSTRING
HIGHsrc/services/history_service.py732 Delete specified analysis history records. Args: record_ids: List of history record primarSTRING
HIGHsrc/services/history_service.py883 Generate a Markdown report for a single analysis history record. This method reconstructs an AnalysisRSTRING
HIGHsrc/services/import_parser.py129 Parse file bytes (CSV/Excel) into items. Args: data: File content bytes. filename: Optional fiSTRING
Structural Annotation Overuse49 hits · 79 pts
SeverityFileLineSnippetContext
LOWtests/test_notification_sender.py1834 # Step 2: upload must send raw bytes (not multipart) to match declared lengthCOMMENT
LOWtests/longbridge_live_smoke.py100 # Step 1: yfinance onlyCOMMENT
LOWtests/longbridge_live_smoke.py126 # Step 2: Supplement from LongbridgeCOMMENT
LOWtests/test_agent_executor.py1161 # Step 1: LLM requests tool callCOMMENT
LOWtests/test_agent_executor.py1170 # Step 2: LLM returns final textCOMMENT
LOW.claude/skills/analyze-pr/SKILL.md17### Step 1: 同步最新代码基线COMMENT
LOW.claude/skills/analyze-pr/SKILL.md32### Step 2: 拉取 PR 基本信息COMMENT
LOW.claude/skills/analyze-pr/SKILL.md47### Step 3: 检查标题与描述完整性COMMENT
LOW.claude/skills/analyze-pr/SKILL.md77### Step 4: 优先使用 CI / Diff 证据COMMENT
LOW.claude/skills/analyze-pr/SKILL.md89### Step 5: 评估正确性与风险COMMENT
LOW.claude/skills/analyze-pr/SKILL.md98### Step 6: 生成评审文档COMMENT
LOW.claude/skills/analyze-issue/SKILL.md17### Step 1: 同步最新代码基线COMMENT
LOW.claude/skills/analyze-issue/SKILL.md32### Step 2: 拉取 Issue 信息COMMENT
LOW.claude/skills/analyze-issue/SKILL.md46### Step 3: 回答 4 个核心问题COMMENT
LOW.claude/skills/analyze-issue/SKILL.md53### Step 4: 结合仓库现状做证据检查COMMENT
LOW.claude/skills/analyze-issue/SKILL.md60### Step 5: 形成结论COMMENT
LOW.claude/skills/analyze-issue/SKILL.md74### Step 6: 生成分析文档COMMENT
LOW.claude/skills/fix-issue/SKILL.md19### Step 1: 确认分析基线COMMENT
LOW.claude/skills/fix-issue/SKILL.md23### Step 2: 同步最新代码基线并选择安全的工作方式COMMENT
LOW.claude/skills/fix-issue/SKILL.md41### Step 3: 实施修复COMMENT
LOW.claude/skills/fix-issue/SKILL.md51### Step 4: 按改动面验证COMMENT
LOW.claude/skills/fix-issue/SKILL.md62### Step 5: 更新 issue 分析文档COMMENT
LOW.claude/skills/fix-issue/SKILL.md89### Step 6: 需要确认的后续动作COMMENT
LOWdata_provider/base.py506 # Step 2: 标准化列名COMMENT
LOWdata_provider/base.py509 # Step 3: 数据清洗COMMENT
LOWdata_provider/base.py512 # Step 4: 计算技术指标COMMENT
LOWdata_provider/base.py491 # Step 1: 获取原始数据COMMENT
LOWsrc/core/pipeline.py539 # Step 2: 获取筹码分布 - 使用统一入口,带熔断保护COMMENT
LOWsrc/core/pipeline.py638 # Step 3: 趋势分析(基于交易理念)— 在 Agent 分支之前执行,供两条路径共用COMMENT
LOWsrc/core/pipeline.py756 # Step 5: 获取分析上下文(技术面数据)COMMENT
LOWsrc/core/pipeline.py513 # Step 1: 获取实时行情(量比、换手率等)- 使用统一入口,自动故障切换COMMENT
LOWsrc/core/pipeline.py680 # Step 4: 多维度情报搜索(最新消息+风险排查+业绩预期)COMMENT
LOWsrc/core/pipeline.py776 # Step 6: 增强上下文数据(添加实时行情、筹码、趋势分析结果、股票名称)COMMENT
LOWsrc/core/pipeline.py798 # Step 7: 调用 AI 分析(传入增强的上下文和新闻)COMMENT
LOWsrc/core/pipeline.py942 # Step 8: 保存分析历史记录COMMENT
LOWsrc/core/pipeline.py3346 # Step 1: 获取并保存数据COMMENT
LOWsrc/core/pipeline.py3357 # Step 2: AI 分析COMMENT
LOWsrc/notification_sender/telegram_sender.py385 # Step 1: temporarily protect markdown linksCOMMENT
LOWsrc/notification_sender/telegram_sender.py394 # Step 2: escape remaining special charsCOMMENT
LOWsrc/notification_sender/telegram_sender.py398 # Step 3: restore linksCOMMENT
LOWsrc/notification_sender/slack_sender.py191 # Step 1: 获取上传 URLCOMMENT
LOWsrc/notification_sender/slack_sender.py209 # Step 2: 上传文件内容(raw body,不能用 multipart)COMMENT
LOWsrc/notification_sender/slack_sender.py220 # Step 3: 完成上传并分享到频道COMMENT
LOWsrc/agent/web_intent_tokenizer.py661 for t in _extract_full_names_first(normalized): # Step 1: 全名实体扫描CODE
LOWsrc/agent/web_intent_tokenizer.py665 tokens.extend(_split_by_special_punct(t.text)) # Step 2: 标点/空白只切 gapCODE
LOWsrc/agent/web_intent_tokenizer.py666 tokens = _apply_code_extraction(tokens) # Step 3: 代码形提取CODE
LOWsrc/agent/web_intent_tokenizer.py667 tokens = _apply_market_extraction(tokens) # Step 4: 市场关键词CODE
LOWsrc/agent/web_intent_tokenizer.py668 tokens = _apply_clean_keyword_extraction(tokens) # Step 5: 无歧义关键词CODE
LOWsrc/agent/web_intent_tokenizer.py669 tokens = _apply_multi_extraction(tokens) # Step 6: 多策略匹配CODE
Cross-Language Confusion12 hits · 71 pts
SeverityFileLineSnippetContext
HIGHtests/test_searxng_env_docs.py35 "SEARXNG_BASE_URLS: ${{ vars.SEARXNG_BASE_URLS || secrets.SEARXNG_BASE_URLS }}"CODE
HIGHtests/test_storage.py282 ("600519", "cn", "analysis", 12, "trace-12", "buy", "3d", "intraday", "2026-01-01", '{"decision_CODE
HIGHtests/test_chip_structure_fallback.py218 """When LLM returns data_perspective: null, fill should still work."""STRING
HIGHtests/test_bot_dispatcher_async.py96 content='{"intent":"analysis","codes":["600519"],"strategy":null}',CODE
HIGHdata_provider/longbridge_fetcher.py85 GitHub Actions sets ``LONGBRIDGE_HTTP_URL: ${{ vars.X || secrets.X }}``STRING
HIGHscripts/check_static_assets.py84 "`cd apps/dsa-web && npm install && npm run build`.",CODE
HIGHbot/dispatcher.py396{"intent":"analysis","codes":["600519","000858"],"strategy":null}CODE
HIGHbot/dispatcher.py402{"intent":"chat","codes":[],"strategy":null}CODE
HIGHbot/dispatcher.py405{"intent":"none","codes":[],"strategy":null}CODE
HIGHbot/dispatcher.py408{"intent":"analysis","codes":["600519"],"strategy":null}CODE
HIGHbot/dispatcher.py411{"intent":"analysis","codes":[],"strategy":null}CODE
HIGHsrc/md2img.py61 "cd apps/dsa-web && npm ci. Fallback to text."CODE
Verbosity Indicators31 hits · 51 pts
SeverityFileLineSnippetContext
LOWtests/test_notification_sender.py1834 # Step 2: upload must send raw bytes (not multipart) to match declared lengthCOMMENT
LOWtests/longbridge_live_smoke.py100 # Step 1: yfinance onlyCOMMENT
LOWtests/longbridge_live_smoke.py126 # Step 2: Supplement from LongbridgeCOMMENT
LOWtests/test_agent_executor.py1161 # Step 1: LLM requests tool callCOMMENT
LOWtests/test_agent_executor.py1170 # Step 2: LLM returns final textCOMMENT
LOWdata_provider/base.py506 # Step 2: 标准化列名COMMENT
LOWdata_provider/base.py509 # Step 3: 数据清洗COMMENT
LOWdata_provider/base.py512 # Step 4: 计算技术指标COMMENT
LOWdata_provider/base.py491 # Step 1: 获取原始数据COMMENT
LOWsrc/core/pipeline.py539 # Step 2: 获取筹码分布 - 使用统一入口,带熔断保护COMMENT
LOWsrc/core/pipeline.py638 # Step 3: 趋势分析(基于交易理念)— 在 Agent 分支之前执行,供两条路径共用COMMENT
LOWsrc/core/pipeline.py756 # Step 5: 获取分析上下文(技术面数据)COMMENT
LOWsrc/core/pipeline.py513 # Step 1: 获取实时行情(量比、换手率等)- 使用统一入口,自动故障切换COMMENT
LOWsrc/core/pipeline.py680 # Step 4: 多维度情报搜索(最新消息+风险排查+业绩预期)COMMENT
LOWsrc/core/pipeline.py776 # Step 6: 增强上下文数据(添加实时行情、筹码、趋势分析结果、股票名称)COMMENT
LOWsrc/core/pipeline.py798 # Step 7: 调用 AI 分析(传入增强的上下文和新闻)COMMENT
LOWsrc/core/pipeline.py942 # Step 8: 保存分析历史记录COMMENT
LOWsrc/core/pipeline.py3346 # Step 1: 获取并保存数据COMMENT
LOWsrc/core/pipeline.py3357 # Step 2: AI 分析COMMENT
LOWsrc/notification_sender/telegram_sender.py385 # Step 1: temporarily protect markdown linksCOMMENT
LOWsrc/notification_sender/telegram_sender.py394 # Step 2: escape remaining special charsCOMMENT
LOWsrc/notification_sender/telegram_sender.py398 # Step 3: restore linksCOMMENT
LOWsrc/notification_sender/slack_sender.py191 # Step 1: 获取上传 URLCOMMENT
LOWsrc/notification_sender/slack_sender.py209 # Step 2: 上传文件内容(raw body,不能用 multipart)COMMENT
LOWsrc/notification_sender/slack_sender.py220 # Step 3: 完成上传并分享到频道COMMENT
LOWsrc/agent/web_intent_tokenizer.py661 for t in _extract_full_names_first(normalized): # Step 1: 全名实体扫描CODE
LOWsrc/agent/web_intent_tokenizer.py665 tokens.extend(_split_by_special_punct(t.text)) # Step 2: 标点/空白只切 gapCODE
LOWsrc/agent/web_intent_tokenizer.py666 tokens = _apply_code_extraction(tokens) # Step 3: 代码形提取CODE
LOWsrc/agent/web_intent_tokenizer.py667 tokens = _apply_market_extraction(tokens) # Step 4: 市场关键词CODE
LOWsrc/agent/web_intent_tokenizer.py668 tokens = _apply_clean_keyword_extraction(tokens) # Step 5: 无歧义关键词CODE
LOWsrc/agent/web_intent_tokenizer.py669 tokens = _apply_multi_extraction(tokens) # Step 6: 多策略匹配CODE
Hallucination Indicators5 hits · 50 pts
SeverityFileLineSnippetContext
CRITICALtests/test_notification_sender.py850 dummy_client.im.v1.file.create.assert_called_once()CODE
CRITICALbot/platforms/feishu_stream.py173 response = self._client.im.v1.message.reply(request)CODE
CRITICALbot/platforms/feishu_stream.py186 response = self._client.im.v1.message.create(request)CODE
CRITICALsrc/feishu_doc.py55 response = self.client.docx.v1.document.create(create_request)CODE
CRITICALsrc/feishu_doc.py87 write_resp = self.client.docx.v1.document_block_children.create(batch_add_request)CODE
Fake / Example Data51 hits · 40 pts
SeverityFileLineSnippetContext
LOWtests/test_config_env_compat.py1006 "EMAIL_GROUP_1": "user@example.com",CODE
LOWtests/test_config_env_compat.py1014 self.assertEqual(emails, ["user@example.com"])CODE
LOWtests/test_search_service_concurrency.py240 bocha_keys=["dummy_key"],CODE
LOWtests/test_search_service_concurrency.py271 bocha_keys=["dummy_key"],CODE
LOWtests/test_search_service_concurrency.py314 bocha_keys=["dummy_key"],CODE
LOWtests/test_search_service_concurrency.py339 bocha_keys=["dummy_key"],CODE
LOWtests/test_search_news_freshness.py64 bocha_keys=["dummy_key"],CODE
LOWtests/test_search_news_freshness.py163 bocha_keys=["dummy_key"],CODE
LOWtests/test_search_news_freshness.py192 bocha_keys=["dummy_key"],CODE
LOWtests/test_search_news_freshness.py234 bocha_keys=["dummy_key"],CODE
LOWtests/test_search_news_freshness.py268 bocha_keys=["dummy_key"],CODE
LOWtests/test_search_news_freshness.py299 bocha_keys=["dummy_key"],CODE
LOWtests/test_search_news_freshness.py333 bocha_keys=["dummy_key"],CODE
LOWtests/test_search_news_freshness.py371 bocha_keys=["dummy_key"],CODE
LOWtests/test_search_news_freshness.py421 bocha_keys=["dummy_key"],CODE
LOWtests/test_search_news_freshness.py448 bocha_keys=["dummy_key"],CODE
LOWtests/test_search_news_freshness.py500 bocha_keys=["dummy_key"],CODE
LOWtests/test_search_news_freshness.py1478 bocha_keys=["dummy_key"],CODE
LOWtests/test_search_news_freshness.py1527 bocha_keys=["dummy_key"],CODE
LOWtests/test_search_news_freshness.py1580 bocha_keys=["dummy_key"],CODE
LOWtests/test_search_news_freshness.py1704 bocha_keys=["dummy_key"],CODE
LOWtests/test_search_news_freshness.py1752 bocha_keys=["dummy_key"],CODE
LOWtests/test_search_news_freshness.py1800 bocha_keys=["dummy_key"],CODE
LOWtests/test_search_news_freshness.py1888 brave_keys=["dummy_key"],CODE
LOWtests/test_search_news_freshness.py2274 bocha_keys=["dummy_key"],CODE
LOWtests/test_search_news_freshness.py2324 bocha_keys=["dummy_key"],CODE
LOWtests/test_search_news_freshness.py2347 bocha_keys=["dummy_key"],CODE
LOWtests/test_search_serpapi_provider.py307 provider = SerpAPISearchProvider(["dummy_key"])CODE
LOWtests/test_search_serpapi_provider.py52 provider = SerpAPISearchProvider(["dummy_key"])CODE
LOWtests/test_search_serpapi_provider.py78 provider = SerpAPISearchProvider(["dummy_key"])CODE
LOWtests/test_search_serpapi_provider.py113 provider = SerpAPISearchProvider(["dummy_key"])CODE
LOWtests/test_search_serpapi_provider.py151 provider = SerpAPISearchProvider(["dummy_key"])CODE
LOWtests/test_search_serpapi_provider.py187 provider = SerpAPISearchProvider(["dummy_key"])CODE
LOWtests/test_search_serpapi_provider.py221 provider = SerpAPISearchProvider(["dummy_key"])CODE
LOWtests/test_search_serpapi_provider.py248 provider = SerpAPISearchProvider(["dummy_key"])CODE
LOWtests/test_search_serpapi_provider.py349 provider = SerpAPISearchProvider(["dummy_key"])CODE
LOWtests/test_search_serpapi_provider.py391 provider = SerpAPISearchProvider(["dummy_key"])CODE
LOWtests/test_search_serpapi_provider.py433 provider = SerpAPISearchProvider(["dummy_key"])CODE
LOWtests/test_search_serpapi_provider.py468 provider = SerpAPISearchProvider(["dummy_key"])CODE
LOWtests/test_search_serpapi_provider.py503 provider = SerpAPISearchProvider(["dummy_key"])CODE
LOWtests/test_search_tavily_provider.py57 provider = TavilySearchProvider(["dummy_key"])CODE
LOWtests/test_search_tavily_provider.py74 self.assertEqual(_FakeTavilyClient.init_api_keys, ["dummy_key"])CODE
LOWtests/test_search_tavily_provider.py85 provider = TavilySearchProvider(["dummy_key"])CODE
LOWtests/test_search_tavily_provider.py106 provider = TavilySearchProvider(["dummy_key"])CODE
LOWtests/test_search_tavily_provider.py145 tavily_keys=["dummy_key"],CODE
LOWtests/test_search_tavily_provider.py170 tavily_keys=["dummy_key"],CODE
LOWtests/test_search_tavily_provider.py196 tavily_keys=["dummy_key"],CODE
LOWtests/test_search_tavily_provider.py226 tavily_keys=["dummy_key"],CODE
LOWtests/test_search_tavily_provider.py258 tavily_keys=["dummy_key"],CODE
LOWbot/commands/ask.py217 skill_id = self._parse_skill(["placeholder"] + remaining_args) if remaining_args else self._get_default_skill_idCODE
LOWsrc/core/config_registry.py161 "placeholder": "optional provider/model override",CODE
Cross-File Repetition7 hits · 35 pts
SeverityFileLineSnippetContext
HIGHdata_provider/efinance_fetcher.py0判断代码是否为美股 美股代码规则: - 1-5个大写字母,如 'aapl', 'tsla' - 可能包含 '.',如 'brk.b'STRING
HIGHdata_provider/tushare_fetcher.py0判断代码是否为美股 美股代码规则: - 1-5个大写字母,如 'aapl', 'tsla' - 可能包含 '.',如 'brk.b'STRING
HIGHdata_provider/baostock_fetcher.py0判断代码是否为美股 美股代码规则: - 1-5个大写字母,如 'aapl', 'tsla' - 可能包含 '.',如 'brk.b'STRING
HIGHdata_provider/pytdx_fetcher.py0判断代码是否为美股 美股代码规则: - 1-5个大写字母,如 'aapl', 'tsla' - 可能包含 '.',如 'brk.b'STRING
HIGHsrc/agent/memory.py0compatibility wrapper for legacy strategy-based callers.STRING
HIGHsrc/agent/skills/router.py0compatibility wrapper for legacy strategy-based callers.STRING
HIGHsrc/services/backtest_service.py0compatibility wrapper for legacy strategy-based callers.STRING
AI Structural Patterns37 hits · 30 pts
SeverityFileLineSnippetContext
LOWtests/test_decision_signal_api.py1321CODE
LOWtests/test_stock_analyzer_bias.py22CODE
LOWtests/test_report_renderer.py23CODE
LOWtests/test_skill_opinion_weights.py48CODE
LOWtests/test_decision_signal_outcome_service.py36CODE
LOWtests/test_tickflow_fetcher.py147CODE
LOWapi/v1/endpoints/decision_signals.py152CODE
LOWapi/v1/endpoints/backtest.py99CODE
LOWapi/v1/endpoints/portfolio.py492CODE
LOWsrc/search_service.py2383CODE
LOWsrc/llm/provider_cache.py167CODE
LOWsrc/core/market_review.py174CODE
LOWsrc/core/pipeline.py236CODE
LOWsrc/core/pipeline.py1459CODE
LOWsrc/repositories/decision_signal_repo.py159CODE
LOWsrc/repositories/decision_signal_outcome_repo.py35CODE
LOWsrc/repositories/intelligence_repo.py152CODE
LOWsrc/services/run_diagnostics.py868CODE
LOWsrc/services/run_diagnostics.py931CODE
LOWsrc/services/task_queue.py327CODE
LOWsrc/services/task_queue.py380CODE
LOWsrc/services/decision_signal_service.py197CODE
LOWsrc/services/daily_market_context.py103CODE
LOWsrc/services/system_config_service.py3990CODE
LOWsrc/services/alert_indicators.py210CODE
LOWsrc/services/run_flow.py1245CODE
LOWsrc/services/alert_service.py309CODE
LOWsrc/services/analyzer_service.py68CODE
LOWsrc/services/decision_signal_outcome_service.py96CODE
LOWsrc/services/analysis_service.py51CODE
LOWsrc/services/screening/strategy.py451CODE
LOWsrc/services/screening/context.py49CODE
LOWsrc/services/screening/pipeline.py47CODE
LOWsrc/services/screening/ranker.py64CODE
LOWsrc/services/screening/ranker.py111CODE
LOWsrc/services/screening/ranker.py517CODE
LOWsrc/services/screening/daily.py62CODE
Over-Commented Block33 hits · 23 pts
SeverityFileLineSnippetContext
LOWtests/test_web_intent_tokenizer.py1021COMMENT
LOWtests/test_stock_analyzer_bias.py161 mock_get_config.return_value.bias_threshold = 5.0COMMENT
LOWtests/test_stock_list_parser.py241 @pytest.mark.parametrize(COMMENT
LOWtests/test_stock_list_parser.py281 ("uSfd", "uSfd"),COMMENT
LOWtests/test_stock_list_parser.py521 """COMMENT
LOWtests/test_stock_list_parser.py561 # ---- OR-COR-bare-us-suffix-prefix-collision ----------------------------COMMENT
LOWtests/test_stock_list_parser.py881 # ---- OR-COR-b3e32200 / OR-COR-6f4d6b12: dotted-prefix formCOMMENT
LOWdata_provider/base.py4021 # programming / deploy bug, so log it LOUD (error). Still fail-openCOMMENT
LOWdocs/examples/litellm_config.example.yaml1# ===================================COMMENT
LOWdocs/examples/litellm_config.example.yaml61 - model_name: gemini/gemini-2.5-flashCOMMENT
LOWdocs/examples/litellm_config.example.yaml81 # litellm_params:COMMENT
LOWscripts/test.sh1#!/bin/bashCOMMENT
LOWsrc/config.py921 # --- Multi-channel LLM config (new) ---COMMENT
LOWsrc/config.py1221 # 实时行情数据源优先级(逗号分隔)COMMENT
LOWsrc/market_analyzer.py701 # """获取北向资金流入"""COMMENT
LOWsrc/search_service.py3241 # in src/data/stock_mapping.py — sibling of STOCK_NAME_MAP, asserted toCOMMENT
LOWsrc/search_service.py4021COMMENT
LOWsrc/agent/factory.py41_TOOL_REGISTRY = NoneCOMMENT
LOWsrc/agent/llm_adapter.py101_OPT_IN_THINKING_MODELS: Dict[str, dict] = {COMMENT
LOWsrc/agent/tools/execution.py21COMMENT
LOWsrc/data/stock_mapping.py121# This map is the single source of truth for the English company identityCOMMENT
LOWsrc/services/name_to_code_resolver.py41COMMENT
LOWsrc/services/stock_list_parser.py141 "BJ": "bj",COMMENT
LOWsrc/services/stock_list_parser.py201 so contract #3's "prefix supplied → degrade to stock" semantics remainCOMMENT
LOWsrc/services/stock_list_parser.py681 # ``_split_prefix`` only short-circuited ALL-UPPERCASE 1-5 letter tokensCOMMENT
LOWsrc/services/stock_list_parser.py701 # AND ``us1`` / ``us12345`` (lowercase prefix with non-letter base —COMMENT
LOWsrc/services/stock_list_parser.py761COMMENT
LOWsrc/services/stock_list_parser.py781 # ``OR-COR-607f1395`` / ``OR-COR-26596201`` / ``OR-COR-d6afd0d6``).COMMENT
LOWsrc/services/stock_list_parser.py801 if norm_code is None:COMMENT
LOWsrc/services/stock_list_parser.py821 for pfx in _PREFIX_DIGIT_LENSCOMMENT
LOWsrc/services/stock_list_parser.py841 suffix_exchange, base_candidate, _ = explicit_partsCOMMENT
LOWsrc/services/stock_list_parser.py961 # token ≤5 letters (``USFD``/``USM``) is a bare US ticker and isCOMMENT
LOWsrc/services/stock_list_parser.py981 # rule, and together they mirror the shape gate at lines 566-585.COMMENT
Magic Placeholder Names4 hits · 20 pts
SeverityFileLineSnippetContext
HIGHtests/test_anspire_search.py575 print(" Windows PowerShell: $env:ANSPIRE_API_KEYS=\"your_api_key\"")CODE
HIGHtests/test_anspire_search.py576 print(" Linux/Mac: export ANSPIRE_API_KEYS=\"your_api_key\"")CODE
HIGHtests/test_anspire_search.py646 print(" Windows PowerShell: $env:ANSPIRE_API_KEYS=\"your_api_key\"")CODE
HIGHtests/test_anspire_search.py647 print(" Linux/Mac: export ANSPIRE_API_KEYS=\"your_api_key\"")CODE
Modern AI Meta-Vocabulary6 hits · 14 pts
SeverityFileLineSnippetContext
MEDIUMtests/test_phase_decision_guardrail.py2"""Tests for Issue #1386 P5 phase decision guardrails."""STRING
MEDIUMsrc/config.py1013 agent_orchestrator_timeout_s: int = 600 # Cooperative timeout budget for the whole multi-agent pipelineCODE
MEDIUMsrc/config.py1038 agent_event_monitor_enabled: bool = False # Enable periodic event-driven alert checks in schedule modeCODE
MEDIUMsrc/market_analyzer.py292 # Structural/template language. Korean reuses the English scaffolding;COMMENT
MEDIUMsrc/agent/agents/base_agent.py242 # Cap per-field size to avoid overwhelming the context windowCOMMENT
MEDIUMsrc/services/screening/ranker.py631 # Do NOT fall back to internal 'reasoning_content' (chain-of-thought) as theCOMMENT
AI Slop Vocabulary5 hits · 12 pts
SeverityFileLineSnippetContext
MEDIUMtests/test_agent_pipeline.py3252 """Test the _safe_int helper for robust sentiment_score parsing."""STRING
MEDIUMtests/test_stock_list_parser.py428 # Parsing the Chinese name must not elevate to index.COMMENT
MEDIUMtests/test_stock_list_parser.py397 # elevate to index status — they degrade to stock (contract #3).STRING
MEDIUMsrc/services/stock_list_parser.py120# elevate a bare code to ``asset_type=index`` (contract #1). Other prefixesCOMMENT
MEDIUMsrc/services/stock_list_parser.py619 # re-elevate ``sh000300`` to ``index`` even though the caller asked forCOMMENT
Self-Referential Comments3 hits · 8 pts
SeverityFileLineSnippetContext
MEDIUMtests/test_agent_pipeline.py3335 # Create a fresh Skill with default enabled=FalseCOMMENT
MEDIUMtests/test_agent_registry.py852 # Create a custom directory with an overriding strategyCOMMENT
MEDIUMtests/test_agent_registry.py725 # Create an invalid YAML file (should be skipped)STRING
Dead Code2 hits · 4 pts
SeverityFileLineSnippetContext
MEDIUMtests/test_market_analyzer_generate_text.py1443CODE
MEDIUMtests/test_llm_param_recovery.py169CODE
Redundant / Tautological Comments1 hit · 2 pts
SeverityFileLineSnippetContext
LOWsrc/config.py556 # Check if the prefix is a known LiteLLM provider; if so, keep it.COMMENT
Slop Phrases1 hit · 1 pts
SeverityFileLineSnippetContext
MEDIUMtests/test_screening_ranker.py375 return "I cannot provide structured output."STRING