A股多Agent投研框架 — 适配A股数据源(龙虎榜/游资/解禁等),7位分析师基于A股规则的辩论决策,基于TradingAgents深度改造,适配大A。A-share multi-agent investment research framework — 7 AI analysts, bull/bear debate, risk assessment。
This report summarizes scanner evidence for simonlin1212/TradingAgents-astock, a Python project with 3,667 GitHub stars. SynthScan examined 29,219 lines of code across 150 source files, recording 926 pattern matches distributed across 17 syntactic categories. The legacy adjusted pattern signal is 47.7 (High 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.
Use each vector to guide manual verification of the underlying findings.
Can maintainers explain intent, assumptions, and trade-offs? 550 finding(s).
Are imports declared and package/API names verified? 143 finding(s).
Are wrappers, guards, and repeated structures necessary? 716 finding(s).
Which changes need focused human review? 926 finding(s).
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.
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.
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.
The scanner identified 926 distinct pattern matches across 17 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.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | README.md | 184 | # ── 方案 A:MiniMax(推荐,国内直连,性价比高)────────── | COMMENT |
| MEDIUM⚡ | README.md | 188 | # ── 方案 B:DeepSeek ───────────────────────────────── | COMMENT |
| MEDIUM⚡ | README.md | 192 | # ── 方案 C:智谱 GLM ───────────────────────────────── | COMMENT |
| MEDIUM⚡ | README.md | 196 | # ── 方案 D:通义千问 Qwen ──────────────────────────── | COMMENT |
| MEDIUM⚡ | README.md | 200 | # ── 方案 E:OpenAI ─────────────────────────────────── | COMMENT |
| MEDIUM⚡ | README.md | 203 | # ── 方案 F:Anthropic ──────────────────────────────── | COMMENT |
| MEDIUM⚡ | README.md | 206 | # ── 方案 G:Kimi(Anthropic 兼容 API)──────────────── | COMMENT |
| MEDIUM⚡ | README.md | 228 | # ── MiniMax 示例(推荐)───────────────────────────── | COMMENT |
| MEDIUM⚡ | README.md | 236 | # ── DeepSeek 示例 ─────────────────────────────────── | COMMENT |
| MEDIUM⚡ | README.md | 244 | # ── Anthropic + Kimi 示例 ─────────────────────────── | COMMENT |
| MEDIUM⚡ | README_en.md | 182 | # ── Option B: DeepSeek ───────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | README_en.md | 186 | # ── Option C: Zhipu GLM ──────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | README_en.md | 190 | # ── Option D: Tongyi Qianwen Qwen ────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | README_en.md | 194 | # ── Option E: OpenAI ─────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | README_en.md | 197 | # ── Option F: Anthropic ──────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | README_en.md | 200 | # ── Option G: Kimi (Anthropic-compatible API) ─────────────────────────────── | COMMENT |
| MEDIUM⚡ | README_en.md | 223 | # ── MiniMax Example (Recommended) ────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | README_en.md | 231 | # ── DeepSeek Example ─────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | README_en.md | 239 | # ── Anthropic + Kimi Example ─────────────────────────────────────────────── | COMMENT |
| MEDIUM | main.py | 13 | # ── MiniMax 示例(推荐)───────────────────────────── | COMMENT |
| MEDIUM | main.py | 21 | # ── DeepSeek 示例 ─────────────────────────────────── | COMMENT |
| MEDIUM | web/app.py | 30 | # ── Page config ────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | web/app.py | 39 | # ── Custom CSS ─────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | web/app.py | 157 | # ── Build config ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | web/app.py | 199 | # ── Sidebar ────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | web/app.py | 205 | # ── Handle "Start Analysis" trigger ────────────────────────────────────────── | COMMENT |
| MEDIUM | web/app.py | 243 | # ── Main area state machine ───────────────────────────────────────────────── | COMMENT |
| MEDIUM | web/components/sidebar.py | 25 | # ── LLM config persistence ──────────────────────────────────────────────────── | COMMENT |
| MEDIUM | web/components/sidebar.py | 324 | # ── 个人 Claude 订阅额度(可选,仅个人自用)──────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_structured_agents.py | 26 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_structured_agents.py | 28 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_structured_agents.py | 75 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_structured_agents.py | 77 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_structured_agents.py | 170 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_structured_agents.py | 172 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_signal_processing.py | 17 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_signal_processing.py | 19 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_signal_processing.py | 145 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_signal_processing.py | 147 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_role_llms.py | 32 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_role_llms.py | 34 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_role_llms.py | 63 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_role_llms.py | 65 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_role_llms.py | 101 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_role_llms.py | 103 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_role_llms.py | 234 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_role_llms.py | 236 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_output_token_limit.py | 31 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_output_token_limit.py | 33 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_output_token_limit.py | 120 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_output_token_limit.py | 122 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_performance.py | 33 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_performance.py | 35 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_performance.py | 69 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_performance.py | 71 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_performance.py | 113 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_performance.py | 115 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_performance.py | 144 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_performance.py | 146 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_performance.py | 183 | # --------------------------------------------------------------------------- | COMMENT |
| 74 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | web/stock_display.py | 126 | def _extract_stock_name_from_text(code: str, text: str) -> str | None: | CODE |
| LOW | web/stock_display.py | 141 | def _extract_stock_name_from_state(code: str, final_state: dict) -> str | None: | CODE |
| LOW | web/stock_display.py | 255 | def normalize_report_state_mentions(final_state: dict[str, Any], ticker: str) -> dict[str, Any]: | CODE |
| LOW | web/components/sidebar.py | 173 | def _clear_analysis_artifacts(ticker: str, trade_date: str) -> None: | CODE |
| LOW | web/components/sidebar.py | 178 | def _render_analysis_controls(raw_ticker: str, trade_date_value: date) -> None: | CODE |
| LOW | web/components/report_viewer.py | 98 | def _render_missing_data_panel( | CODE |
| LOW⚡ | tests/test_structured_agents.py | 33 | def test_minimal_required_fields(self): | CODE |
| LOW⚡ | tests/test_structured_agents.py | 42 | def test_optional_fields_omitted_when_absent(self): | CODE |
| LOW⚡ | tests/test_structured_agents.py | 110 | def test_schema_has_no_level_fields(self): | CODE |
| LOW⚡ | tests/test_structured_agents.py | 116 | def test_prompt_forbids_levels(self): | CODE |
| LOW⚡ | tests/test_structured_agents.py | 123 | def test_render_never_emits_levels(self): | CODE |
| LOW⚡ | tests/test_structured_agents.py | 132 | def test_structured_path_produces_rendered_markdown(self): | CODE |
| LOW | tests/test_structured_agents.py | 148 | def test_prompt_includes_investment_plan(self): | CODE |
| LOW | tests/test_structured_agents.py | 157 | def test_falls_back_to_freetext_when_structured_unavailable(self): | CODE |
| LOW | tests/test_structured_agents.py | 207 | def test_structured_path_produces_rendered_markdown(self): | CODE |
| LOW | tests/test_structured_agents.py | 232 | def test_falls_back_to_freetext_when_structured_unavailable(self): | CODE |
| LOW | tests/test_progress_pause.py | 8 | def test_pause_blocks_until_resume() -> None: | CODE |
| LOW | tests/test_progress_pause.py | 31 | def test_completion_unblocks_paused_waiter() -> None: | CODE |
| LOW | tests/test_progress_pause.py | 55 | def test_stop_request_clears_progress_and_unblocks_waiter() -> None: | CODE |
| LOW | tests/test_progress_pause.py | 88 | def test_mark_stopped_returns_tracker_to_idle() -> None: | CODE |
| LOW | tests/test_news_data_tools.py | 7 | def test_get_news_rejects_non_code_ticker_without_vendor_call(monkeypatch): | CODE |
| LOW | tests/test_news_data_tools.py | 31 | def test_get_news_routes_valid_six_digit_code(monkeypatch): | CODE |
| LOW | tests/test_news_data_tools.py | 54 | def test_get_insider_transactions_rejects_non_code_ticker(monkeypatch): | CODE |
| LOW⚡ | tests/test_context_compaction.py | 26 | def test_empty_history_returns_empty(self): | CODE |
| LOW⚡ | tests/test_context_compaction.py | 30 | def test_under_max_turns_returns_unchanged(self): | CODE |
| LOW⚡ | tests/test_context_compaction.py | 34 | def test_exact_max_turns_returns_unchanged(self): | CODE |
| LOW⚡ | tests/test_context_compaction.py | 40 | def test_over_max_turns_compacts_old_rounds(self): | CODE |
| LOW | tests/test_context_compaction.py | 73 | def test_first_sentence_truncates_long_text(self): | CODE |
| LOW | tests/test_context_compaction.py | 86 | def test_bull_prompt_dedupes_last_bear_argument(self): | CODE |
| LOW | tests/test_context_compaction.py | 117 | def test_aggressive_prompt_dedupes_last_arguments(self): | CODE |
| LOW | tests/test_pdf_export.py | 19 | def test_generate_pdf_with_chinese_markdown_when_cjk_font_available(): | CODE |
| LOW | tests/test_pdf_export.py | 37 | def test_pdf_text_helpers_compact_alignment_whitespace(): | CODE |
| LOW | tests/test_pdf_export.py | 42 | def test_pdf_multicell_defaults_to_left_alignment(): | CODE |
| LOW | tests/test_pdf_export.py | 58 | def test_wqy_discovery_reuses_same_font_for_bold(monkeypatch, tmp_path): | CODE |
| LOW | tests/test_web_model_selection.py | 41 | def test_sentinel_renders_text_input_and_uses_typed_id(fake_st): | CODE |
| LOW | tests/test_web_model_selection.py | 55 | def test_real_model_value_passes_through_without_prompting(fake_st): | CODE |
| LOW | tests/test_web_model_selection.py | 63 | def test_every_provider_sentinel_is_intercepted(fake_st): | CODE |
| LOW | tests/test_web_model_selection.py | 80 | def test_deepseek_deep_index_three_was_the_reported_case(fake_st): | CODE |
| LOW | tests/test_web_model_selection.py | 102 | def test_validation_blocks_sentinel_or_empty(fake_st, quick, deep, expected_label): | CODE |
| LOW | tests/test_web_model_selection.py | 114 | def test_validation_passes_for_real_models(fake_st): | CODE |
| LOW | tests/test_web_model_selection.py | 131 | def test_validation_accepts_an_explicit_config(quick, deep, expected_label): | CODE |
| LOW | tests/test_web_model_selection.py | 142 | def test_validation_of_explicit_config_passes(): | CODE |
| LOW | tests/test_web_model_selection.py | 149 | def test_app_guards_at_the_consumption_point(): | CODE |
| LOW | tests/test_capabilities.py | 28 | def test_unknown_model_uses_permissive_defaults(): | CODE |
| LOW⚡ | tests/test_capabilities.py | 43 | def test_minimax_payload_enables_reasoning_split(): | CODE |
| LOW⚡ | tests/test_capabilities.py | 54 | def test_minimax_payload_does_not_enable_reasoning_split_for_custom_model(): | CODE |
| LOW⚡ | tests/test_capabilities.py | 65 | def test_minimax_structured_output_keeps_schema_and_tool_choice(): | CODE |
| LOW | tests/test_capabilities.py | 106 | def test_explicit_tool_choice_is_dropped_for_unsupported_model(): | CODE |
| LOW | tests/test_capabilities.py | 127 | def test_optional_tool_call_returning_none_still_falls_back_to_free_text(): | CODE |
| LOW | tests/test_llm_config_persistence.py | 22 | def test_config_file_lives_under_user_home(): | CODE |
| LOW | tests/test_llm_config_persistence.py | 29 | def test_save_creates_parent_dir_and_roundtrips_scope(fake_st): | CODE |
| LOW | tests/test_llm_config_persistence.py | 51 | def test_load_does_not_override_in_session_choice(fake_st): | CODE |
| LOW | tests/test_llm_config_persistence.py | 62 | def test_unknown_scope_or_provider_falls_back_to_first(fake_st): | CODE |
| LOW | tests/test_llm_config_persistence.py | 71 | def test_write_failure_only_warns(fake_st, monkeypatch, caplog): | CODE |
| LOW | tests/test_stock_display.py | 6 | def test_generate_markdown_uses_display_label(monkeypatch): | CODE |
| LOW⚡ | tests/test_stock_display.py | 18 | def test_stock_display_label_resolves_code_to_name(monkeypatch): | CODE |
| LOW⚡ | tests/test_stock_display.py | 26 | def test_stock_display_label_removes_invisible_name_chars(monkeypatch): | CODE |
| LOW⚡ | tests/test_stock_display.py | 32 | def test_stock_display_label_resolves_name_input(monkeypatch): | CODE |
| LOW⚡ | tests/test_stock_display.py | 39 | def test_stock_display_label_falls_back_to_state_name(monkeypatch): | CODE |
| LOW⚡ | tests/test_stock_display.py | 48 | def test_stock_display_label_falls_back_to_original_input_name(monkeypatch): | CODE |
| 422 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | test.py | 2 | CODE | |
| LOW | test.py | 2 | CODE | |
| LOW | test.py | 2 | CODE | |
| LOW | test.py | 2 | CODE | |
| LOW | test.py | 2 | CODE | |
| LOW | web/runner.py | 3 | CODE | |
| LOW | web/stock_display.py | 3 | CODE | |
| LOW | web/launch.py | 3 | CODE | |
| LOW | web/app.py | 3 | CODE | |
| LOW | web/progress.py | 3 | CODE | |
| LOW | web/pdf_export.py | 3 | CODE | |
| LOW | web/history.py | 3 | CODE | |
| LOW | web/components/sidebar.py | 3 | CODE | |
| LOW | web/components/report_viewer.py | 3 | CODE | |
| LOW | web/components/progress_panel.py | 3 | CODE | |
| LOW | tests/test_progress_pause.py | 1 | CODE | |
| LOW | tests/test_context_compaction.py | 7 | CODE | |
| LOW | tests/test_web_model_selection.py | 14 | CODE | |
| LOW | tests/test_llm_config_persistence.py | 3 | CODE | |
| LOW | tests/test_report_viewer_pdf_gate.py | 3 | CODE | |
| LOW | tests/test_deepseek_v4_max_tokens.py | 16 | CODE | |
| LOW | tests/test_checkpoint_resume.py | 3 | CODE | |
| LOW | tests/test_checkpoint_resume.py | 6 | CODE | |
| LOW | tests/test_checkpoint_resume.py | 10 | CODE | |
| LOW | tests/test_agent_sdk_provider.py | 12 | CODE | |
| LOW | tests/test_web_history.py | 3 | CODE | |
| LOW | tests/test_missing_data_tasks.py | 3 | CODE | |
| LOW | cli/models.py | 2 | CODE | |
| LOW | cli/models.py | 2 | CODE | |
| LOW | cli/models.py | 2 | CODE | |
| LOW | cli/models.py | 3 | CODE | |
| LOW | cli/utils.py | 2 | CODE | |
| LOW | cli/utils.py | 2 | CODE | |
| LOW | cli/main.py | 1 | CODE | |
| LOW | cli/main.py | 15 | CODE | |
| LOW | cli/main.py | 22 | CODE | |
| LOW | cli/main.py | 29 | CODE | |
| LOW | cli/main.py | 30 | CODE | |
| LOW | cli/stats_handler.py | 2 | CODE | |
| LOW | tradingagents/performance.py | 19 | CODE | |
| LOW | tradingagents/performance.py | 22 | CODE | |
| LOW | tradingagents/graph/checkpointer.py | 6 | CODE | |
| LOW | tradingagents/graph/__init__.py | 3 | CODE | |
| LOW | tradingagents/graph/__init__.py | 4 | CODE | |
| LOW | tradingagents/graph/__init__.py | 5 | CODE | |
| LOW | tradingagents/graph/__init__.py | 6 | CODE | |
| LOW | tradingagents/graph/__init__.py | 7 | CODE | |
| LOW | tradingagents/graph/__init__.py | 8 | CODE | |
| LOW | tradingagents/graph/trading_graph.py | 18 | CODE | |
| LOW | tradingagents/graph/trading_graph.py | 22 | CODE | |
| LOW | tradingagents/graph/trading_graph.py | 22 | CODE | |
| LOW | tradingagents/graph/trading_graph.py | 22 | CODE | |
| LOW | tradingagents/graph/setup.py | 7 | CODE | |
| LOW | tradingagents/graph/propagation.py | 4 | CODE | |
| LOW | tradingagents/graph/signal_processing.py | 13 | CODE | |
| LOW | tradingagents/agents/__init__.py | 1 | CODE | |
| LOW | tradingagents/agents/__init__.py | 2 | CODE | |
| LOW | tradingagents/agents/__init__.py | 2 | CODE | |
| LOW | tradingagents/agents/__init__.py | 2 | CODE | |
| LOW | tradingagents/agents/__init__.py | 4 | CODE | |
| 73 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | test_data_quality.py | 77 | except Exception as e: | CODE |
| LOW | web/runner.py | 190 | except Exception as exc: | CODE |
| LOW | web/runner.py | 194 | except Exception: | CODE |
| MEDIUM | web/runner.py | 187 | def _target() -> None: | CODE |
| LOW | web/stock_display.py | 67 | except Exception: | CODE |
| LOW | web/stock_display.py | 84 | except Exception: | CODE |
| LOW | web/app.py | 256 | except Exception as exc: | CODE |
| LOW | web/pdf_export.py | 390 | except Exception as exc: | CODE |
| LOW | web/history.py | 141 | except Exception: | CODE |
| LOW | web/components/report_viewer.py | 234 | except Exception as exc: # noqa: BLE001 — never let PDF crash the page | STRING |
| LOW | tests/test_agent_sdk_provider.py | 298 | except Exception: | CODE |
| LOW | cli/utils.py | 155 | except Exception as e: | CODE |
| LOW | cli/main.py | 1252 | except Exception as e: | CODE |
| LOW | cli/announcements.py | 23 | except Exception: | CODE |
| LOW | tradingagents/graph/trading_graph.py | 642 | except Exception as e: | CODE |
| LOW | tradingagents/agents/quality_gate.py | 155 | except Exception as e: | STRING |
| LOW | tradingagents/agents/utils/structured.py | 66 | except Exception as exc: | CODE |
| LOW | tradingagents/dataflows/alpha_vantage_indicator.py | 220 | except Exception as e: | CODE |
| MEDIUM | tradingagents/dataflows/alpha_vantage_indicator.py | 221 | print(f"Error getting Alpha Vantage indicator data for {indicator}: {e}") | CODE |
| LOW | tradingagents/dataflows/y_finance.py | 166 | except Exception as e: | CODE |
| MEDIUM | tradingagents/dataflows/y_finance.py | 167 | print(f"Error getting bulk stockstats data: {e}") | CODE |
| LOW | tradingagents/dataflows/y_finance.py | 239 | except Exception as e: | CODE |
| LOW | tradingagents/dataflows/y_finance.py | 301 | except Exception as e: | CODE |
| LOW | tradingagents/dataflows/y_finance.py | 333 | except Exception as e: | CODE |
| LOW | tradingagents/dataflows/y_finance.py | 365 | except Exception as e: | CODE |
| LOW | tradingagents/dataflows/y_finance.py | 397 | except Exception as e: | CODE |
| LOW | tradingagents/dataflows/y_finance.py | 421 | except Exception as e: | CODE |
| LOW⚡ | tradingagents/dataflows/a_stock.py | 479 | except Exception: | CODE |
| LOW⚡ | tradingagents/dataflows/a_stock.py | 728 | except Exception as e: | CODE |
| LOW⚡ | tradingagents/dataflows/a_stock.py | 2061 | except Exception as e: | CODE |
| LOW⚡ | tradingagents/dataflows/a_stock.py | 2311 | except Exception as e: | CODE |
| LOW⚡ | tradingagents/dataflows/a_stock.py | 2437 | except Exception: | CODE |
| LOW⚡ | tradingagents/dataflows/a_stock.py | 2518 | except Exception as e: | CODE |
| LOW | tradingagents/dataflows/a_stock.py | 146 | except Exception as e: | CODE |
| LOW | tradingagents/dataflows/a_stock.py | 289 | except Exception as e: # mootdx 版本变动导致取不到就只用精选表,不影响主流程 | CODE |
| LOW | tradingagents/dataflows/a_stock.py | 328 | except Exception: | CODE |
| LOW | tradingagents/dataflows/a_stock.py | 370 | except Exception as e: # 版本差异导致取不到就跳过保护,别影响主流程 | CODE |
| LOW | tradingagents/dataflows/a_stock.py | 381 | except Exception as e: | CODE |
| LOW | tradingagents/dataflows/a_stock.py | 425 | except Exception as e: | CODE |
| LOW | tradingagents/dataflows/a_stock.py | 444 | except Exception as e: | CODE |
| LOW | tradingagents/dataflows/a_stock.py | 793 | except Exception as e: | CODE |
| LOW | tradingagents/dataflows/a_stock.py | 800 | except Exception: | CODE |
| LOW | tradingagents/dataflows/a_stock.py | 855 | except Exception as e: | CODE |
| LOW | tradingagents/dataflows/a_stock.py | 863 | except Exception: | CODE |
| LOW | tradingagents/dataflows/a_stock.py | 975 | except Exception as e: | CODE |
| LOW | tradingagents/dataflows/a_stock.py | 1016 | except Exception as e: | CODE |
| LOW | tradingagents/dataflows/a_stock.py | 1041 | except Exception as e: | CODE |
| LOW | tradingagents/dataflows/a_stock.py | 1069 | except Exception as e: | CODE |
| LOW | tradingagents/dataflows/a_stock.py | 1139 | except Exception as e: | CODE |
| LOW | tradingagents/dataflows/a_stock.py | 1141 | except Exception as e: | CODE |
| LOW | tradingagents/dataflows/a_stock.py | 1154 | except Exception as e: | CODE |
| LOW | tradingagents/dataflows/a_stock.py | 1356 | except Exception as e: | CODE |
| LOW | tradingagents/dataflows/a_stock.py | 1387 | except Exception as e: | CODE |
| LOW | tradingagents/dataflows/a_stock.py | 1418 | except Exception as e: | CODE |
| LOW | tradingagents/dataflows/a_stock.py | 1531 | except Exception as e: | CODE |
| LOW | tradingagents/dataflows/a_stock.py | 1538 | except Exception as e: | CODE |
| LOW | tradingagents/dataflows/a_stock.py | 1621 | except Exception as e: | CODE |
| LOW | tradingagents/dataflows/a_stock.py | 1648 | except Exception as e: | CODE |
| LOW | tradingagents/dataflows/a_stock.py | 1724 | except Exception as e: | CODE |
| LOW | tradingagents/dataflows/a_stock.py | 1815 | except Exception as e: | CODE |
| 15 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tests/test_agent_sdk_provider.py | 298 | except Exception: | CODE |
| HIGH | tradingagents/graph/checkpointer.py | 87 | except sqlite3.OperationalError: | CODE |
| HIGH | tradingagents/dataflows/a_stock.py | 2416 | except Exception: | CODE |
| HIGH | tradingagents/dataflows/a_stock.py | 2437 | except Exception: | CODE |
| HIGH | tradingagents/dataflows/a_stock.py | 1552 | except (ValueError, IndexError): | CODE |
| HIGH | tradingagents/dataflows/alpha_vantage_common.py | 86 | except json.JSONDecodeError: | CODE |
| HIGH | tradingagents/dataflows/missing_data.py | 429 | except Exception: | CODE |
| HIGH | tradingagents/dataflows/missing_data.py | 479 | except OSError: | CODE |
| HIGH | tradingagents/dataflows/yfinance_news.py | 30 | except (ValueError, AttributeError): | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | web/stock_display.py | 91 | CODE | |
| LOW | web/components/sidebar.py | 369 | CODE | |
| LOW | tests/test_web_model_selection.py | 63 | CODE | |
| LOW | cli/main.py | 977 | CODE | |
| LOW | tradingagents/graph/trading_graph.py | 495 | CODE | |
| LOW | tradingagents/graph/trading_graph.py | 785 | CODE | |
| LOW | tradingagents/dataflows/alpha_vantage_indicator.py | 3 | CODE | |
| LOW | tradingagents/dataflows/a_stock.py | 124 | CODE | |
| LOW | tradingagents/dataflows/a_stock.py | 385 | CODE | |
| LOW | tradingagents/dataflows/a_stock.py | 982 | CODE | |
| LOW | tradingagents/dataflows/a_stock.py | 1196 | CODE | |
| LOW | tradingagents/dataflows/a_stock.py | 1584 | CODE | |
| LOW | tradingagents/dataflows/a_stock.py | 1731 | CODE | |
| LOW | tradingagents/dataflows/a_stock.py | 1921 | CODE | |
| LOW | tradingagents/dataflows/a_stock.py | 1943 | CODE | |
| LOW | tradingagents/dataflows/a_stock.py | 1963 | CODE | |
| LOW | tradingagents/dataflows/a_stock.py | 2084 | CODE | |
| LOW | tradingagents/dataflows/a_stock.py | 2162 | CODE | |
| LOW | tradingagents/dataflows/a_stock.py | 2319 | CODE | |
| LOW | tradingagents/dataflows/a_stock.py | 2528 | CODE | |
| LOW | tradingagents/dataflows/missing_data.py | 129 | CODE | |
| LOW | tradingagents/dataflows/yfinance_news.py | 51 | CODE | |
| LOW | tradingagents/dataflows/yfinance_news.py | 107 | CODE | |
| LOW | tradingagents/llm_clients/claude_agent_sdk_client.py | 590 | CODE | |
| LOW | tradingagents/llm_clients/openai_client.py | 260 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | cli/main.py | 502 | # Step 1: Ticker symbol | COMMENT |
| LOW⚡ | cli/main.py | 512 | # Step 2: Analysis date | COMMENT |
| LOW⚡ | cli/main.py | 533 | # Step 3: Output language | COMMENT |
| LOW⚡ | cli/main.py | 542 | # Step 4: Select analysts | COMMENT |
| LOW⚡ | cli/main.py | 553 | # Step 5: Research depth | COMMENT |
| LOW⚡ | cli/main.py | 561 | # Step 6: LLM Provider | COMMENT |
| LOW⚡ | cli/main.py | 569 | # Step 7: Thinking agents | COMMENT |
| LOW⚡ | cli/main.py | 578 | # Step 8: Provider-specific thinking configuration | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | cli/main.py | 502 | # Step 1: Ticker symbol | COMMENT |
| LOW⚡ | cli/main.py | 512 | # Step 2: Analysis date | COMMENT |
| LOW⚡ | cli/main.py | 533 | # Step 3: Output language | COMMENT |
| LOW⚡ | cli/main.py | 542 | # Step 4: Select analysts | COMMENT |
| LOW⚡ | cli/main.py | 553 | # Step 5: Research depth | COMMENT |
| LOW⚡ | cli/main.py | 561 | # Step 6: LLM Provider | COMMENT |
| LOW⚡ | cli/main.py | 569 | # Step 7: Thinking agents | COMMENT |
| LOW⚡ | cli/main.py | 578 | # Step 8: Provider-specific thinking configuration | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/test_checkpoint_resume.py | 91 | # Create a checkpoint by crashing | COMMENT |
| MEDIUM⚡ | cli/main.py | 494 | # Create a boxed questionnaire for each step | COMMENT |
| MEDIUM | cli/main.py | 43 | # Create a deque to store recent messages with a maximum length | COMMENT |
| MEDIUM | tradingagents/dataflows/y_finance.py | 207 | # Create a dictionary mapping date strings to indicator values | COMMENT |
| MEDIUM | tradingagents/dataflows/alpha_vantage_common.py | 55 | # Create a copy of params to avoid modifying the original | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | web/progress.py | 163 | def update_stats(self, llm: int, tool: int, tok_in: int, tok_out: int) -> None: | CODE |
| LOW | web/history.py | 17 | logger = logging.getLogger(__name__) | CODE |
| LOW | web/components/sidebar.py | 23 | logger = logging.getLogger(__name__) | CODE |
| LOW | tradingagents/graph/__init__.py | 10 | __all__ = [ | CODE |
| LOW | tradingagents/graph/trading_graph.py | 12 | logger = logging.getLogger(__name__) | CODE |
| LOW | tradingagents/agents/__init__.py | 26 | __all__ = [ | CODE |
| LOW | tradingagents/agents/utils/structured.py | 26 | logger = logging.getLogger(__name__) | CODE |
| LOW | tradingagents/dataflows/stockstats_utils.py | 13 | logger = logging.getLogger(__name__) | CODE |
| LOW⚡ | tradingagents/dataflows/a_stock.py | 38 | logger = logging.getLogger(__name__) | CODE |
| LOW | tradingagents/dataflows/utils.py | 9 | logger = logging.getLogger(__name__) | CODE |
| LOW | tradingagents/llm_clients/claude_agent_sdk_client.py | 41 | logger = logging.getLogger(__name__) | CODE |
| LOW | tradingagents/llm_clients/base_client.py | 6 | logger = logging.getLogger(__name__) | CODE |
| LOW | tradingagents/llm_clients/__init__.py | 4 | __all__ = ["BaseLLMClient", "create_llm_client"] | CODE |
| LOW | tradingagents/llm_clients/openai_client.py | 19 | logger = logging.getLogger(__name__) | CODE |
| LOW | tradingagents/llm_clients/anthropic_client.py | 10 | logger = logging.getLogger(__name__) | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | pyproject.toml | 61 | # combination satisfies both — the conflict is structural, not a bad pin. | COMMENT |
| LOW | README.md | 241 | # "output_language": "Chinese", | COMMENT |
| LOW | main.py | 21 | # ── DeepSeek 示例 ─────────────────────────────────── | COMMENT |
| LOW | web/components/sidebar.py | 21 | ) | COMMENT |
| LOW | tests/test_llm_timeout.py | 121 | def test_anthropic_and_google_do_not_zero_max_retries(self): | COMMENT |
| LOW | tradingagents/default_config.py | 21 | # provider-specific URL here would leak (e.g. OpenAI's /v1 was previously | COMMENT |
| LOW | tradingagents/default_config.py | 41 | # 子进程)不走该链路,暂不受此超时保护(已知缺口)。 | COMMENT |
| LOW | tradingagents/default_config.py | 61 | # Provider-specific thinking configuration | COMMENT |
| LOW | tradingagents/default_config.py | 81 | # 订阅调用失败 / 撞额度时的兜底。None → 回落到 llm_provider + deep_think_llm。 | COMMENT |
| LOW | tradingagents/graph/trading_graph.py | 201 | # Initialize LLMs with provider-specific thinking configuration | COMMENT |
| LOW | tradingagents/graph/trading_graph.py | 421 | # `reasoning_effort`、google 的 `thinking_level`、anthropic 的 `effort` | COMMENT |
| LOW | tradingagents/agents/utils/rating.py | 61 | # 结果是静默落到默认值 Hold —— 决策评级被悄悄改写,报告里完全看不出来。 | COMMENT |
| LOW | tradingagents/dataflows/a_stock.py | 1261 | return pd.DataFrame() | COMMENT |
| LOW | tradingagents/llm_clients/claude_agent_sdk_client.py | 601 | # was actually blocked. Raising on anything else discards a | COMMENT |
| LOW | tradingagents/llm_clients/openai_client.py | 341 | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/conftest.py | 31 | monkeypatch.setenv(env_var, os.environ.get(env_var, "placeholder")) | CODE |
| LOW⚡ | tests/test_capabilities.py | 46 | api_key="placeholder", | CODE |
| LOW⚡ | tests/test_capabilities.py | 57 | api_key="placeholder", | CODE |
| LOW⚡ | tests/test_capabilities.py | 71 | api_key="placeholder", | CODE |
| LOW⚡ | tests/test_deepseek_reasoning.py | 56 | os.environ.setdefault("DEEPSEEK_API_KEY", "placeholder") | CODE |
| LOW⚡ | tests/test_deepseek_reasoning.py | 59 | api_key="placeholder", | CODE |
| LOW⚡ | tests/test_deepseek_reasoning.py | 126 | api_key="placeholder", | CODE |
| LOW | tests/test_deepseek_reasoning.py | 143 | api_key="placeholder", | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | web/pdf_export.py | 150 | ' pip uninstall -y fpdf fpdf2 && pip install "fpdf2>=2.8.0"\n' | CODE |
| HIGH | web/pdf_export.py | 161 | ' pip uninstall -y fpdf && pip install "fpdf2>=2.8.0"\n' | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | CHANGELOG.md | 1583 | - [@Bcardo](https://github.com/Bcardo) — memory-log redesign (#579), empty-memory hallucination report (#572), encoding | CODE |
| MEDIUM | tradingagents/llm_clients/claude_agent_sdk_client.py | 47 | # to run a multi-turn agentic loop internally (call tool → read result → …). | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tradingagents/llm_clients/factory.py | 22 | Create an LLM client for the specified provider. Provider modules are imported lazily so that simply importing this | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tradingagents/dataflows/alpha_vantage_indicator.py | 194 | # Check if date is in our range | COMMENT |
| LOW | tradingagents/dataflows/y_finance.py | 24 | # Check if data is empty | COMMENT |
| LOW | tradingagents/dataflows/alpha_vantage_common.py | 78 | # Check if response is JSON (error responses are typically JSON) | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tradingagents/dataflows/stockstats_utils.py | 93 | CODE |