Repository Analysis

ZhuLinsen/daily_stock_analysis

LLM驱动的 A/H/美股智能分析:多数据源行情 + 实时新闻 + LLM决策仪表盘 + 多渠道推送,零成本定时运行,纯白嫖. LLM-powered stock analysis system for A/H/US markets.

23.0 Moderate AI signal View on GitHub
23.0
Adjusted Score
23.0
Raw Score
100%
Time Factor
2026-05-30
Last Push
39,455
Stars
Python
Language
230,649
Lines of Code
689
Files
4455
Pattern Hits
2026-05-31
Scan Date

Score History

Severity Breakdown

CRITICAL 4HIGH 39MEDIUM 393LOW 4019

Pattern Findings

4455 matches across 17 categories. Click a row to expand file-level details.

Hyper-Verbose Identifiers2780 hits · 2590 pts
SeverityFileLineSnippet
LOWmain.py161def _get_stock_analysis_pipeline():
LOWmain.py200def _reload_env_file_values_preserving_overrides() -> None:
LOWmain.py388def _compute_trading_day_filter(
LOWmain.py430def _run_market_review_with_shared_lock(
LOWmain.py451def _refresh_stock_index_cache_for_analysis(config: Config) -> None:
LOWmain.py733def _resolve_scheduled_stock_codes(stock_codes: Optional[List[str]]) -> Optional[List[str]]:
LOWmain.py749def _build_schedule_time_provider(default_schedule_time: str):
LOWtests/test_backtest_service.py148 def test_result_fields_correct(self) -> None:
LOWtests/test_backtest_service.py181 def test_summaries_created_after_run(self) -> None:
LOWtests/test_backtest_service.py209 def test_get_summary_overall_returns_sentinel_as_none(self) -> None:
LOWtests/test_backtest_service.py220 def test_agent_learning_summary_helpers_keep_skill_rollups_neutral_until_supported(self) -> None:
LOWtests/test_backtest_service.py242 def test_get_recent_evaluations(self) -> None:
LOWtests/test_backtest_service.py259 def test_get_recent_evaluations_supports_tracking_fields_and_analysis_date_filters(self) -> None:
LOWtests/test_backtest_service.py291 def test_get_summary_supports_analysis_date_range(self) -> None:
LOWtests/test_backtest_service.py322 def test_get_summary_date_range_filters_to_single_window_and_engine(self) -> None:
LOWtests/test_backtest_service.py430 def test_get_summary_date_range_rejects_excessive_row_counts(self) -> None:
LOWtests/test_backtest_service.py443 def test_multi_stock_summaries(self) -> None:
LOWtests/test_backtest_service.py503 def test_run_backtest_excludes_market_review_records(self) -> None:
LOWtests/test_backtest_service.py535 def test_run_backtest_includes_null_report_type_records(self) -> None:
LOWtests/test_notification_sender.py63 def test_send_returns_false_when_not_configured(self):
LOWtests/test_notification_sender.py69 def test_is_discord_configured_webhook_only(self):
LOWtests/test_notification_sender.py74 def test_is_discord_configured_bot_only(self):
LOWtests/test_notification_sender.py79 def test_is_discord_configured_neither(self):
LOWtests/test_notification_sender.py85 def test_send_webhook_success_builds_correct_payload(self, mock_post):
LOWtests/test_notification_sender.py119 def test_send_returns_false_when_no_webhook_url(self):
LOWtests/test_notification_sender.py126 def test_send_success_returns_true(self, mock_post):
LOWtests/test_notification_sender.py133 def test_gen_wechat_payload_markdown(self):
LOWtests/test_notification_sender.py140 def test_gen_wechat_payload_text(self):
LOWtests/test_notification_sender.py148 def test_send_wechat_image_over_limit_returns_false(self, mock_post):
LOWtests/test_notification_sender.py160 def test_send_returns_false_when_no_webhook_url(self):
LOWtests/test_notification_sender.py167 def test_send_success_returns_true(self, mock_post):
LOWtests/test_notification_sender.py175 def test_send_http_error_returns_false(self, mock_post):
LOWtests/test_notification_sender.py184 def test_send_with_secret_and_keyword_builds_signed_payload(self, mock_post, _mock_time):
LOWtests/test_notification_sender.py402 def test_send_returns_false_when_url_has_no_topic(self, mock_post):
LOWtests/test_notification_sender.py412 def test_send_returns_false_when_url_scheme_is_not_http(self, mock_post):
LOWtests/test_notification_sender.py422 def test_send_http_error_returns_false(self, mock_post):
LOWtests/test_notification_sender.py432 def test_send_timeout_does_not_log_token_value(self, mock_post):
LOWtests/test_notification_sender.py447 def test_send_returns_false_when_not_configured(self):
LOWtests/test_notification_sender.py455 def test_send_returns_false_when_token_is_blank(self):
LOWtests/test_notification_sender.py464 def test_send_success_uses_json_payload_and_header_auth(self, mock_post):
LOWtests/test_notification_sender.py552 def test_send_returns_false_when_no_urls(self):
LOWtests/test_notification_sender.py559 def test_send_success_payload_has_text_and_content(self, mock_post):
LOWtests/test_notification_sender.py569 def test_send_returns_true_when_one_custom_webhook_succeeds(self, mock_post):
LOWtests/test_notification_sender.py794 def test_send_returns_false_when_no_token(self):
LOWtests/test_notification_sender.py801 def test_send_success_returns_true(self, mock_post):
LOWtests/test_notification_sender.py810 def test_send_long_message_chunks_pushplus_requests(self, mock_post, _mock_sleep):
LOWtests/test_notification_sender.py842 def test_send_returns_false_when_not_configured(self):
LOWtests/test_notification_sender.py848 def test_is_slack_configured_webhook_only(self):
LOWtests/test_notification_sender.py853 def test_is_slack_configured_bot_only(self):
LOWtests/test_notification_sender.py858 def test_is_slack_configured_neither(self):
LOWtests/test_notification_sender.py864 def test_send_webhook_success(self, mock_post):
LOWtests/test_notification_sender.py896 def test_send_bot_error_returns_false(self, mock_post):
LOWtests/test_notification_sender.py903 def test_build_blocks_splits_long_content(self):
LOWtests/test_notification_sender.py913 def test_send_text_prefers_bot_when_both_configured(self, mock_post):
LOWtests/test_notification_sender.py97 def test_send_webhook_http_error_returns_false(self, mock_post):
LOWtests/test_notification_sender.py105 def test_send_bot_success_uses_channel_url(self, mock_post):
LOWtests/test_notification_sender.py212 def test_send_error_response_returns_false(self, mock_post):
LOWtests/test_notification_sender.py223 def test_send_with_keyword_that_leaves_too_little_chunk_budget_returns_false(self, mock_post):
LOWtests/test_notification_sender.py240 def test_send_returns_false_when_not_configured(self):
LOWtests/test_notification_sender.py246 def test_get_receivers_for_stocks_no_groups_returns_default(self):
2720 more matches not shown…
Decorative Section Separators355 hits · 1306 pts
SeverityFileLineSnippet
MEDIUMrequirements.txt1# ===================================
MEDIUMrequirements.txt3# ===================================
MEDIUMdocker/docker-compose.yml1# ===================================
MEDIUMdocker/docker-compose.yml3# ===================================
MEDIUMtests/test_multi_agent.py42# ============================================================
MEDIUMtests/test_multi_agent.py44# ============================================================
MEDIUMtests/test_multi_agent.py171# ============================================================
MEDIUMtests/test_multi_agent.py173# ============================================================
MEDIUMtests/test_multi_agent.py248# ============================================================
MEDIUMtests/test_multi_agent.py250# ============================================================
MEDIUMtests/test_multi_agent.py337# ============================================================
MEDIUMtests/test_multi_agent.py339# ============================================================
MEDIUMtests/test_multi_agent.py1538# ============================================================
MEDIUMtests/test_multi_agent.py1540# ============================================================
MEDIUMtests/test_multi_agent.py1817# ============================================================
MEDIUMtests/test_multi_agent.py1819# ============================================================
MEDIUMtests/test_multi_agent.py1905# ============================================================
MEDIUMtests/test_multi_agent.py1907# ============================================================
MEDIUMtests/test_multi_agent.py374# ============================================================
MEDIUMtests/test_multi_agent.py376# ============================================================
MEDIUMtests/test_multi_agent.py462# ============================================================
MEDIUMtests/test_multi_agent.py464# ============================================================
MEDIUMtests/test_multi_agent.py1217# ============================================================
MEDIUMtests/test_multi_agent.py1219# ============================================================
MEDIUMtests/test_image_stock_extractor_litellm.py78# ---------------------------------------------------------------------------
MEDIUMtests/test_image_stock_extractor_litellm.py80# ---------------------------------------------------------------------------
MEDIUMtests/test_image_stock_extractor_litellm.py126# ---------------------------------------------------------------------------
MEDIUMtests/test_image_stock_extractor_litellm.py128# ---------------------------------------------------------------------------
MEDIUMtests/test_image_stock_extractor_litellm.py153# ---------------------------------------------------------------------------
MEDIUMtests/test_image_stock_extractor_litellm.py155# ---------------------------------------------------------------------------
MEDIUMtests/test_image_stock_extractor_litellm.py216# ---------------------------------------------------------------------------
MEDIUMtests/test_image_stock_extractor_litellm.py218# ---------------------------------------------------------------------------
MEDIUMtests/test_image_stock_extractor_litellm.py289# ---------------------------------------------------------------------------
MEDIUMtests/test_image_stock_extractor_litellm.py291# ---------------------------------------------------------------------------
MEDIUMtests/test_image_stock_extractor_litellm.py37# ---------------------------------------------------------------------------
MEDIUMtests/test_image_stock_extractor_litellm.py39# ---------------------------------------------------------------------------
MEDIUMtests/test_agent_pipeline.py36# ============================================================
MEDIUMtests/test_agent_pipeline.py38# ============================================================
MEDIUMtests/test_agent_pipeline.py1312# ============================================================
MEDIUMtests/test_agent_pipeline.py1314# ============================================================
MEDIUMtests/test_agent_pipeline.py1343# ============================================================
MEDIUMtests/test_agent_pipeline.py1345# ============================================================
MEDIUMtests/test_agent_pipeline.py1811# ============================================================
MEDIUMtests/test_agent_pipeline.py1813# ============================================================
MEDIUMtests/test_agent_pipeline.py2501# ============================================================
MEDIUMtests/test_agent_pipeline.py2503# ============================================================
MEDIUMtests/test_agent_pipeline.py2577# ============================================================
MEDIUMtests/test_agent_pipeline.py2579# ============================================================
MEDIUMtests/test_agent_pipeline.py552# ============================================================
MEDIUMtests/test_agent_pipeline.py554# ============================================================
MEDIUMtests/test_history_loader.py15 # ------------------------------------------------------------------
MEDIUMtests/test_history_loader.py17 # ------------------------------------------------------------------
MEDIUMtests/test_history_loader.py32 # ------------------------------------------------------------------
MEDIUMtests/test_history_loader.py34 # ------------------------------------------------------------------
MEDIUMtests/test_history_loader.py59 # ------------------------------------------------------------------
MEDIUMtests/test_history_loader.py61 # ------------------------------------------------------------------
MEDIUMtests/test_history_loader.py82 # ------------------------------------------------------------------
MEDIUMtests/test_history_loader.py84 # ------------------------------------------------------------------
MEDIUMtests/test_history_loader.py111 # ------------------------------------------------------------------
MEDIUMtests/test_history_loader.py113 # ------------------------------------------------------------------
295 more matches not shown…
Excessive Try-Catch Wrapping670 hits · 648 pts
SeverityFileLineSnippet
LOWmain.py78 except Exception as exc: # pragma: no cover - defensive branch
LOWmain.py464 except Exception as exc: # noqa: BLE001 - stock index freshness must not block analysis.
LOWmain.py640 except Exception as e:
LOWmain.py660 except Exception as e:
LOWmain.py663 except Exception as e:
LOWmain.py714 except Exception as exc:
LOWmain.py729 except Exception as exc:
LOWmain.py789 except Exception as exc:
LOWmain.py800 except Exception as exc:
LOWmain.py807 except Exception as exc:
LOWmain.py864 except Exception as e:
LOWmain.py1011 except Exception as e:
LOWtests/test_portfolio_service.py934 except Exception as exc: # pragma: no cover - asserted below
LOWtests/test_portfolio_service.py989 except Exception as exc: # pragma: no cover - asserted below
LOWtests/longbridge_live_smoke.py106 except Exception as e:
LOWtests/test_social_sentiment_service.py129 except Exception as exc: # pragma: no cover - thread collection
MEDIUMtests/test_social_sentiment_service.py125def worker():
LOWtests/test_llm_usage.py195 except Exception as exc:
LOWtests/test_conversation_manager.py22 except Exception as exc: # pragma: no cover - failures are asserted below
LOWtests/test_search_service_concurrency.py114 except Exception as exc: # pragma: no cover - thread collection
LOWtests/test_search_service_concurrency.py171 except Exception as exc: # pragma: no cover - thread collection
LOWtests/test_search_service_concurrency.py265 except Exception as exc: # pragma: no cover - thread collection
MEDIUMtests/test_search_service_concurrency.py110def worker():
MEDIUMtests/test_search_service_concurrency.py167def worker():
MEDIUMtests/test_search_service_concurrency.py261def worker():
MEDIUMtests/test_storage.py378def initialize_manager() -> None:
MEDIUMtests/test_storage.py387def use_manager() -> None:
MEDIUMtests/test_storage.py470def construct_directly() -> None:
MEDIUMtests/test_storage.py479def use_get_instance() -> None:
LOWtests/test_storage.py383 except Exception as exc:
LOWtests/test_storage.py399 except Exception as exc:
LOWtests/test_storage.py475 except Exception as exc:
LOWtests/test_storage.py491 except Exception as exc:
LOWtests/test_data_fetcher_prefetch_stock_names.py291 except Exception as exc: # pragma: no cover - thread collection
MEDIUMtests/test_data_fetcher_prefetch_stock_names.py286def worker():
LOWtests/test_agent_sse_cleanup.py50 except Exception as exc:
LOWtests/test_main_schedule_mode.py48 except Exception:
LOWtests/test_main_schedule_mode.py655 except Exception:
LOWtests/test_run_diagnostics_p1.py103 except Exception as exc: # pragma: no cover - exercised by queue behavior
LOWtests/test_analysis_api_contract.py29except Exception: # pragma: no cover - optional dependency environments
LOWtests/test_analysis_api_contract.py461 except Exception as exc: # pragma: no cover - exercised via assert below
LOWtests/test_analysis_api_contract.py1947 except Exception: # pragma: no cover - optional dependency environments
LOWtests/test_stooq_fallback.py12except Exception:
LOWtests/test_realtime_types.py29 except Exception as exc: # pragma: no cover - thread collection
LOWtests/test_realtime_types.py56 except Exception as exc: # pragma: no cover - thread collection
LOWtests/test_realtime_types.py64 except Exception as exc: # pragma: no cover - thread collection
MEDIUMtests/test_realtime_types.py25def worker():
MEDIUMtests/test_realtime_types.py51def record_success():
MEDIUMtests/test_realtime_types.py59def record_failure():
LOWdata_provider/alphavantage_fetcher.py60 except Exception as e:
LOWdata_provider/alphavantage_fetcher.py130 except Exception as e:
LOWdata_provider/alphavantage_fetcher.py174 except Exception as e:
LOWdata_provider/yfinance_fetcher.py200 except Exception as e:
LOWdata_provider/yfinance_fetcher.py351 except Exception as e:
LOWdata_provider/yfinance_fetcher.py358 except Exception as e:
LOWdata_provider/yfinance_fetcher.py378 except Exception as e:
LOWdata_provider/yfinance_fetcher.py385 except Exception as e:
LOWdata_provider/yfinance_fetcher.py410 except Exception as e:
LOWdata_provider/yfinance_fetcher.py417 except Exception as e:
LOWdata_provider/yfinance_fetcher.py503 except Exception:
610 more matches not shown…
Unused Imports385 hits · 330 pts
SeverityFileLineSnippet
LOWserver.py40
LOWwebui.py18
LOWmain.py24
LOWtests/test_portfolio_service.py4
LOWtests/test_analysis_context_pack_prompt.py4
LOWtests/test_generate_index_from_csv.py11
LOWtests/test_generate_index_from_csv.py11
LOWtests/test_generate_index_from_csv.py17
LOWtests/test_analysis_context_builder.py4
LOWtests/test_analysis_context_pack_overview.py4
LOWtests/test_market_light_service.py4
LOWtests/test_fetch_tushare_stock_list.py4
LOWtests/test_multi_agent.py25
LOWtests/test_run_diagnostics_p2.py4
LOWtests/test_agent_pipeline.py20
LOWtests/test_agent_pipeline.py21
LOWtests/test_agent_pipeline.py21
LOWtests/test_agent_pipeline.py22
LOWtests/test_agent_pipeline.py22
LOWtests/test_report_integrity.py16
LOWtests/test_anspire_search.py27
LOWtests/test_anspire_search.py27
LOWtests/test_anspire_search.py28
LOWtests/test_anspire_search.py29
LOWtests/test_analysis_context_pack_schema.py4
LOWtests/test_daily_analysis_workflow_llm_env.py4
LOWtests/test_alert_api.py4
LOWtests/test_alert_api.py20
LOWtests/test_stock_index_remote_service.py4
LOWtests/test_analysis_integration.py18
LOWtests/test_analysis_integration.py19
LOWtests/test_history_loader.py3
LOWtests/test_market_light_alerts.py4
LOWtests/test_agent_frozen_context.py3
LOWtests/test_realtime_quote_fallback_logging.py11
LOWtests/test_ask_command.py10
LOWtests/test_market_analyzer_generate_text.py21
LOWtests/test_report_renderer.py15
LOWtests/test_agent_executor.py27
LOWtests/test_yfinance_fundamental_adapter.py9
LOWtests/test_fetcher_logging.py1
LOWtests/test_alert_worker.py4
LOWtests/test_auth_api.py19
LOWtests/test_analyzer_news_prompt.py9
LOWtests/test_skill_load_warning.py9
LOWtests/test_hk_stock_name_fallback.py18
LOWtests/test_get_latest_data.py21
LOWtests/test_longbridge_fetcher.py23
LOWtests/test_longbridge_fetcher.py24
LOWtests/test_import_parser.py84
LOWtests/test_import_parser.py105
LOWtests/test_stock_code_utils.py7
LOWtests/test_refresh_stock_index.py4
LOWtests/test_agent_sse_cleanup.py14
LOWtests/test_main_schedule_mode.py8
LOWtests/test_report_schema.py18
LOWtests/test_bot_market_command.py11
LOWtests/test_task_queue_config_sync.py4
LOWtests/test_chip_structure_fallback.py15
LOWtests/test_llm_adapter_provider_trace.py10
325 more matches not shown…
Deep Nesting180 hits · 130 pts
SeverityFileLineSnippet
LOWmain.py468
LOWmain.py700
LOWmain.py776
LOWtests/test_portfolio_service.py1153
LOWtests/test_multi_agent.py884
LOWtests/test_multi_agent.py906
LOWtests/test_multi_agent.py921
LOWtests/test_ask_command.py281
LOWtests/test_market_review.py16
LOWtests/test_agent_executor.py93
LOWtests/test_fetcher_logging.py127
LOWtests/test_storage.py535
LOWtests/test_auth_status_setup_state.py103
LOWtests/test_analysis_api_contract.py149
LOWtests/test_analysis_api_contract.py1629
LOWdata_provider/realtime_types.py219
LOWdata_provider/realtime_types.py390
LOWdata_provider/yfinance_fetcher.py205
LOWdata_provider/yfinance_fetcher.py320
LOWdata_provider/yfinance_fetcher.py363
LOWdata_provider/yfinance_fetcher.py390
LOWdata_provider/fundamental_adapter.py240
LOWdata_provider/yfinance_fundamental_adapter.py146
LOWdata_provider/akshare_fetcher.py605
LOWdata_provider/akshare_fetcher.py908
LOWdata_provider/akshare_fetcher.py952
LOWdata_provider/akshare_fetcher.py1357
LOWdata_provider/akshare_fetcher.py1686
LOWdata_provider/akshare_fetcher.py1788
LOWdata_provider/efinance_fetcher.py805
LOWdata_provider/efinance_fetcher.py921
LOWdata_provider/efinance_fetcher.py1049
LOWdata_provider/longbridge_fetcher.py145
LOWdata_provider/longbridge_fetcher.py489
LOWdata_provider/longbridge_fetcher.py626
LOWdata_provider/tushare_fetcher.py778
LOWdata_provider/tushare_fetcher.py849
LOWdata_provider/tushare_fetcher.py930
LOWdata_provider/baostock_fetcher.py290
LOWdata_provider/baostock_fetcher.py337
LOWdata_provider/pytdx_fetcher.py48
LOWdata_provider/pytdx_fetcher.py185
LOWdata_provider/pytdx_fetcher.py283
LOWdata_provider/base.py756
LOWdata_provider/base.py928
LOWdata_provider/base.py1123
LOWdata_provider/base.py1431
LOWdata_provider/base.py1722
LOWdata_provider/base.py1750
LOWdata_provider/base.py1933
LOWdata_provider/base.py2002
LOWdata_provider/base.py2315
LOWdata_provider/base.py2520
LOWscripts/generate_index_from_csv.py85
LOWscripts/generate_index_from_csv.py393
LOWscripts/generate_index_from_csv.py583
LOWscripts/generate_stock_index.py101
LOWscripts/check_env.py218
LOWscripts/refresh_stock_index.py33
LOWscripts/fetch_tushare_stock_list.py295
120 more matches not shown…
Docstring Block Structure18 hits · 90 pts
SeverityFileLineSnippet
HIGHdata_provider/yfinance_fetcher.py82 转换股票代码为 Yahoo Finance 格式 Yahoo Finance 代码格式: - A股沪市:600519.SS (Shanghai Stock Exchange)
HIGHdata_provider/us_index_mapping.py47 判断代码是否为美股指数符号。 Args: code: 股票/指数代码,如 'SPX', 'DJI' Returns: True 表示是已知美股指数符号,否则 False
HIGHdata_provider/us_index_mapping.py66 判断代码是否为美股股票符号(排除美股指数)。 美股股票代码为 1-5 个大写字母,可选 .X 后缀如 BRK.B。 美股指数(SPX、DJI 等)明确排除。 Args: code: 股票
HIGHdata_provider/us_index_mapping.py98 获取美股指数的 Yahoo Finance 符号与中文名称。 Args: code: 用户输入,如 'SPX', '^GSPC', 'DJI' Returns: (yf_symb
HIGHdata_provider/akshare_fetcher.py210 判断代码是否为美股股票(不包括美股指数)。 委托给 us_index_mapping 模块的 is_us_stock_code()。 Args: stock_code: 股票代码 Re
HIGHdata_provider/base.py1130 获取日线数据(自动切换数据源) 故障切换策略: 1. 美股指数/美股股票直接路由到 YfinanceFetcher 2. 其他代码从最高优先级数据源开始尝试
HIGHapi/v1/endpoints/stocks.py254 获取股票实时行情 获取指定股票的最新行情数据 Args: stock_code: 股票代码(如 600519、00700、AAPL) Returns:
HIGHapi/v1/endpoints/analysis.py233 触发股票分析 启动 AI 智能分析任务,支持单只或多只股票批量分析 流程: 1. 校验请求参数 2. 异步模式:检查重复 -> 提交任务队列 -> 返回 202 3. 同
HIGHapi/v1/endpoints/analysis.py823 查询分析任务状态 优先从任务队列查询,如果不存在则从数据库查询历史记录 Args: task_id: 任务 ID Returns: Ta
HIGHapi/v1/endpoints/history.py198 获取历史报告详情 根据分析历史记录主键 ID 或 query_id 获取完整的历史分析报告。 优先尝试按主键 ID(整数)查询,若参数不是合法整数则按 query_id 查询。 Args
HIGHapi/v1/endpoints/history.py456 获取历史报告的 Markdown 格式内容 根据分析历史记录 ID 或 query_id 生成与推送通知格式一致的 Markdown 报告。 Args: record_id: 分析历史记录主键
HIGHsrc/agent/skills/base.py141Load a single Skill from a YAML file. The YAML file must contain at minimum: ``name``, ``display_name``, ``desc
HIGHsrc/services/stock_service.py94 获取股票历史行情 Args: stock_code: 股票代码 period: K 线周期 (daily/weekly/monthly)
HIGHsrc/services/task_queue.py316 Submit a single analysis task. Args: stock_code: Stock code stock_name: Option
HIGHsrc/services/image_stock_extractor.py287 从图片中提取股票代码及名称(使用 Vision LLM)。 优先级:Gemini -> Anthropic -> OpenAI(首个可用)。 支持多 Key 轮询与重试(最多 3 次,指数退避)。 Ar
HIGHsrc/services/history_service.py354 Delete specified analysis history records. Args: record_ids: List of history record primar
HIGHsrc/services/history_service.py505 Generate a Markdown report for a single analysis history record. This method reconstructs an AnalysisR
HIGHsrc/services/import_parser.py129 Parse file bytes (CSV/Excel) into items. Args: data: File content bytes. filename: Optional fi
Cross-Language Confusion9 hits · 54 pts
SeverityFileLineSnippet
HIGHtests/test_chip_structure_fallback.py218 """When LLM returns data_perspective: null, fill should still work."""
HIGHtests/test_bot_dispatcher_async.py96 content='{"intent":"analysis","codes":["600519"],"strategy":null}',
HIGHdata_provider/longbridge_fetcher.py85 GitHub Actions sets ``LONGBRIDGE_HTTP_URL: ${{ vars.X || secrets.X }}``
HIGHscripts/check_static_assets.py84 "`cd apps/dsa-web && npm install && npm run build`.",
HIGHbot/dispatcher.py396{"intent":"analysis","codes":["600519","000858"],"strategy":null}
HIGHbot/dispatcher.py402{"intent":"chat","codes":[],"strategy":null}
HIGHbot/dispatcher.py405{"intent":"none","codes":[],"strategy":null}
HIGHbot/dispatcher.py408{"intent":"analysis","codes":["600519"],"strategy":null}
HIGHbot/dispatcher.py411{"intent":"analysis","codes":[],"strategy":null}
Verbosity Indicators25 hits · 43 pts
SeverityFileLineSnippet
LOWtests/test_notification_sender.py941 # Step 2: upload must send raw bytes (not multipart) to match declared length
LOWtests/longbridge_live_smoke.py100 # Step 1: yfinance only
LOWtests/longbridge_live_smoke.py126 # Step 2: Supplement from Longbridge
LOWtests/test_agent_executor.py216 # Step 1: LLM requests tool call
LOWtests/test_agent_executor.py225 # Step 2: LLM returns final text
LOWdata_provider/base.py447 # Step 1: 获取原始数据
LOWdata_provider/base.py453 # Step 2: 标准化列名
LOWdata_provider/base.py456 # Step 3: 数据清洗
LOWdata_provider/base.py459 # Step 4: 计算技术指标
LOWsrc/core/pipeline.py333 # Step 2: 获取筹码分布 - 使用统一入口,带熔断保护
LOWsrc/core/pipeline.py307 # Step 1: 获取实时行情(量比、换手率等)- 使用统一入口,自动故障切换
LOWsrc/core/pipeline.py398 # Step 3: 趋势分析(基于交易理念)— 在 Agent 分支之前执行,供两条路径共用
LOWsrc/core/pipeline.py433 # Step 4: 多维度情报搜索(最新消息+风险排查+业绩预期)
LOWsrc/core/pipeline.py488 # Step 5: 获取分析上下文(技术面数据)
LOWsrc/core/pipeline.py506 # Step 6: 增强上下文数据(添加实时行情、筹码、趋势分析结果、股票名称)
LOWsrc/core/pipeline.py517 # Step 7: 调用 AI 分析(传入增强的上下文和新闻)
LOWsrc/core/pipeline.py611 # Step 8: 保存分析历史记录
LOWsrc/core/pipeline.py2074 # Step 1: 获取并保存数据
LOWsrc/core/pipeline.py2085 # Step 2: AI 分析
LOWsrc/notification_sender/telegram_sender.py322 # Step 1: temporarily protect markdown links
LOWsrc/notification_sender/telegram_sender.py331 # Step 2: escape remaining special chars
LOWsrc/notification_sender/telegram_sender.py335 # Step 3: restore links
LOWsrc/notification_sender/slack_sender.py186 # Step 1: 获取上传 URL
LOWsrc/notification_sender/slack_sender.py204 # Step 2: 上传文件内容(raw body,不能用 multipart)
LOWsrc/notification_sender/slack_sender.py215 # Step 3: 完成上传并分享到频道
Hallucination Indicators4 hits · 40 pts
SeverityFileLineSnippet
CRITICALbot/platforms/feishu_stream.py135 response = self._client.im.v1.message.reply(request)
CRITICALbot/platforms/feishu_stream.py148 response = self._client.im.v1.message.create(request)
CRITICALsrc/feishu_doc.py55 response = self.client.docx.v1.document.create(create_request)
CRITICALsrc/feishu_doc.py87 write_resp = self.client.docx.v1.document_block_children.create(batch_add_request)
Cross-File Repetition8 hits · 40 pts
SeverityFileLineSnippet
HIGHdata_provider/efinance_fetcher.py0判断代码是否为美股 美股代码规则: - 1-5个大写字母,如 'aapl', 'tsla' - 可能包含 '.',如 'brk.b'
HIGHdata_provider/tushare_fetcher.py0判断代码是否为美股 美股代码规则: - 1-5个大写字母,如 'aapl', 'tsla' - 可能包含 '.',如 'brk.b'
HIGHdata_provider/baostock_fetcher.py0判断代码是否为美股 美股代码规则: - 1-5个大写字母,如 'aapl', 'tsla' - 可能包含 '.',如 'brk.b'
HIGHdata_provider/pytdx_fetcher.py0判断代码是否为美股 美股代码规则: - 1-5个大写字母,如 'aapl', 'tsla' - 可能包含 '.',如 'brk.b'
HIGHsrc/agent/memory.py0compatibility wrapper for legacy strategy-based callers.
HIGHsrc/agent/memory.py0compatibility wrapper for legacy strategy-based callers.
HIGHsrc/agent/skills/router.py0compatibility wrapper for legacy strategy-based callers.
HIGHsrc/services/backtest_service.py0compatibility wrapper for legacy strategy-based callers.
Magic Placeholder Names4 hits · 20 pts
SeverityFileLineSnippet
HIGHtests/test_anspire_search.py547 print(" Windows PowerShell: $env:ANSPIRE_API_KEYS=\"your_api_key\"")
HIGHtests/test_anspire_search.py548 print(" Linux/Mac: export ANSPIRE_API_KEYS=\"your_api_key\"")
HIGHtests/test_anspire_search.py618 print(" Windows PowerShell: $env:ANSPIRE_API_KEYS=\"your_api_key\"")
HIGHtests/test_anspire_search.py619 print(" Linux/Mac: export ANSPIRE_API_KEYS=\"your_api_key\"")
Self-Referential Comments3 hits · 8 pts
SeverityFileLineSnippet
MEDIUMtests/test_agent_pipeline.py2589 # Create a fresh Skill with default enabled=False
MEDIUMtests/test_agent_registry.py806 # Create a custom directory with an overriding strategy
MEDIUMtests/test_agent_registry.py679 # Create an invalid YAML file (should be skipped)
Over-Commented Block8 hits · 8 pts
SeverityFileLineSnippet
LOWtests/test_stock_analyzer_bias.py161 trend_status=TrendStatus.BULL,
LOWdocs/LLM_CONFIG_GUIDE.md41# Anspire Open API Keys(支持多个,逗号分隔)
LOWdocs/examples/litellm_config.example.yaml1# ===================================
LOWdocs/examples/litellm_config.example.yaml61 - model_name: gemini/gemini-2.5-flash
LOWdocs/examples/litellm_config.example.yaml81 # litellm_params:
LOWscripts/test.sh1#!/bin/bash
LOWsrc/config.py881 market_review_region: str = "cn"
LOWsrc/market_analyzer.py401
Dead Code2 hits · 4 pts
SeverityFileLineSnippet
MEDIUMtests/test_market_analyzer_generate_text.py298
MEDIUMtests/test_llm_param_recovery.py169
Redundant / Tautological Comments1 hit · 2 pts
SeverityFileLineSnippet
LOWsrc/config.py373 # Check if the prefix is a known LiteLLM provider; if so, keep it.
Fake / Example Data2 hits · 1 pts
SeverityFileLineSnippet
LOWtests/test_config_env_compat.py477 "EMAIL_GROUP_1": "user@example.com",
LOWtests/test_config_env_compat.py485 self.assertEqual(emails, ["user@example.com"])
AI Slop Vocabulary1 hit · 1 pts
SeverityFileLineSnippet
MEDIUMtests/test_agent_pipeline.py2506 """Test the _safe_int helper for robust sentiment_score parsing."""