A股多Agent投研框架 — 适配A股数据源(龙虎榜/游资/解禁等),7位分析师基于A股规则的辩论决策,基于TradingAgents深度改造,适配大A。A-share multi-agent investment research framework — 7 AI analysts, bull/bear debate, risk assessment。
This report presents the forensic synthetic code analysis of simonlin1212/TradingAgents-astock, a Python project with 2,781 GitHub stars. SynthScan v2.0 examined 24,055 lines of code across 136 source files, recording 731 pattern matches distributed across 16 syntactic categories. The overall adjusted score of 48.1 places this repository in the Strong 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).
Longitudinal tracking requires multiple scan runs. Once this repository is re-scanned after new commits land, this chart will visualise how the synthetic code signal evolves over time — enabling you to detect whether AI authorship is growing, stabilising, or being actively corrected by human engineers.
Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.
This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.
The scanner identified 731 distinct pattern matches across 16 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | README.md | 171 | # ── 方案 A:MiniMax(推荐,国内直连,性价比高)────────── | COMMENT |
| MEDIUM⚡ | README.md | 175 | # ── 方案 B:DeepSeek ───────────────────────────────── | COMMENT |
| MEDIUM⚡ | README.md | 179 | # ── 方案 C:智谱 GLM ───────────────────────────────── | COMMENT |
| MEDIUM⚡ | README.md | 183 | # ── 方案 D:通义千问 Qwen ──────────────────────────── | COMMENT |
| MEDIUM⚡ | README.md | 187 | # ── 方案 E:OpenAI ─────────────────────────────────── | COMMENT |
| MEDIUM⚡ | README.md | 190 | # ── 方案 F:Anthropic ──────────────────────────────── | COMMENT |
| MEDIUM⚡ | README.md | 193 | # ── 方案 G:Kimi(Anthropic 兼容 API)──────────────── | COMMENT |
| MEDIUM⚡ | README.md | 213 | # ── MiniMax 示例(推荐)───────────────────────────── | COMMENT |
| MEDIUM⚡ | README.md | 221 | # ── DeepSeek 示例 ─────────────────────────────────── | COMMENT |
| MEDIUM⚡ | README.md | 229 | # ── Anthropic + Kimi 示例 ─────────────────────────── | COMMENT |
| MEDIUM⚡ | README_en.md | 161 | # ── Option B: DeepSeek ───────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | README_en.md | 165 | # ── Option C: Zhipu GLM ──────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | README_en.md | 169 | # ── Option D: Tongyi Qianwen Qwen ────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | README_en.md | 173 | # ── Option E: OpenAI ─────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | README_en.md | 176 | # ── Option F: Anthropic ──────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | README_en.md | 179 | # ── Option G: Kimi (Anthropic-compatible API) ─────────────────────────────── | COMMENT |
| MEDIUM⚡ | README_en.md | 200 | # ── MiniMax Example (Recommended) ────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | README_en.md | 208 | # ── DeepSeek Example ─────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | README_en.md | 216 | # ── Anthropic + Kimi Example ─────────────────────────────────────────────── | 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 | 233 | # ── Main area state machine ───────────────────────────────────────────────── | COMMENT |
| MEDIUM | web/components/sidebar.py | 201 | # ── 个人 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 |
| MEDIUM⚡ | tests/test_performance.py | 185 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_market_guard.py | 16 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_market_guard.py | 18 | # --------------------------------------------------------------------------- | COMMENT |
| 71 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 | 54 | def _clear_analysis_artifacts(ticker: str, trade_date: str) -> None: | CODE |
| LOW | web/components/sidebar.py | 59 | def _render_analysis_controls(raw_ticker: str, trade_date_value: date) -> None: | 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_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_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_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 |
| LOW⚡ | tests/test_stock_display.py | 57 | def test_stock_display_label_falls_back_to_report_code_name(monkeypatch): | CODE |
| LOW | tests/test_stock_display.py | 68 | def test_stock_display_label_falls_back_to_nested_report_code_name(monkeypatch): | CODE |
| LOW | tests/test_stock_display.py | 80 | def test_stock_display_label_falls_back_to_code(monkeypatch): | CODE |
| LOW | tests/test_stock_display.py | 86 | def test_normalize_stock_mentions_adds_name_without_duplicates(monkeypatch): | CODE |
| LOW | tests/test_stock_display.py | 104 | def test_normalize_report_state_mentions_updates_generated_fields(monkeypatch): | CODE |
| LOW | tests/test_sentiment_data_tools.py | 31 | def test_analyst_binds_quantitative_tools(): | CODE |
| LOW | tests/test_sentiment_data_tools.py | 36 | def test_graph_tool_node_matches_analyst_tools(): | CODE |
| LOW⚡ | tests/test_sentiment_data_tools.py | 51 | def test_prompt_names_every_bound_tool(): | CODE |
| LOW⚡ | tests/test_sentiment_data_tools.py | 58 | def test_prompt_requires_divergence_check(): | CODE |
| LOW⚡ | tests/test_sentiment_data_tools.py | 64 | def test_prompt_forbids_fabricating_missing_data(): | CODE |
| LOW⚡ | tests/test_signal_processing.py | 27 | def test_explicit_label_overweight(self): | CODE |
| LOW⚡ | tests/test_signal_processing.py | 30 | def test_explicit_label_with_markdown_bold_value(self): | CODE |
| LOW⚡ | tests/test_signal_processing.py | 34 | def test_explicit_label_with_markdown_bold_label(self): | CODE |
| LOW⚡ | tests/test_signal_processing.py | 37 | def test_rendered_pm_markdown_shape(self): | CODE |
| LOW⚡ | tests/test_signal_processing.py | 46 | def test_explicit_label_wins_over_prose_with_markdown(self): | CODE |
| LOW⚡ | tests/test_signal_processing.py | 54 | def test_no_rating_returns_default(self): | CODE |
| LOW⚡ | tests/test_signal_processing.py | 57 | def test_no_rating_custom_default(self): | CODE |
| LOW⚡ | tests/test_signal_processing.py | 60 | def test_all_five_tiers_recognised(self): | CODE |
| LOW⚡ | tests/test_signal_processing.py | 108 | def test_cn_label_with_english_word_all_tiers(self): | CODE |
| LOW⚡ | tests/test_signal_processing.py | 112 | def test_cn_label_still_prefers_chinese_term(self): | CODE |
| LOW⚡ | tests/test_signal_processing.py | 121 | def test_cn_strong_beats_plain(self): | CODE |
| LOW⚡ | tests/test_signal_processing.py | 126 | def test_cn_label_wins_over_prose_term(self): | CODE |
| 261 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_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 | 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 | |
| LOW | tradingagents/agents/__init__.py | 5 | CODE | |
| LOW | tradingagents/agents/__init__.py | 6 | CODE | |
| LOW | tradingagents/agents/__init__.py | 7 | CODE | |
| LOW | tradingagents/agents/__init__.py | 8 | CODE | |
| LOW | tradingagents/agents/__init__.py | 9 | CODE | |
| LOW | tradingagents/agents/__init__.py | 10 | CODE | |
| 65 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 | 246 | except Exception as exc: | CODE |
| LOW | web/pdf_export.py | 371 | except Exception as exc: | CODE |
| LOW | web/history.py | 141 | except Exception: | CODE |
| LOW | web/components/report_viewer.py | 112 | 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 | 529 | 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 | 478 | except Exception: | CODE |
| LOW⚡ | tradingagents/dataflows/a_stock.py | 727 | except Exception as e: | CODE |
| LOW⚡ | tradingagents/dataflows/a_stock.py | 1942 | except Exception as e: | CODE |
| LOW⚡ | tradingagents/dataflows/a_stock.py | 2182 | except Exception as e: | CODE |
| LOW⚡ | tradingagents/dataflows/a_stock.py | 2308 | except Exception: | CODE |
| LOW⚡ | tradingagents/dataflows/a_stock.py | 2389 | except Exception as e: | CODE |
| LOW | tradingagents/dataflows/a_stock.py | 145 | except Exception as e: | CODE |
| LOW | tradingagents/dataflows/a_stock.py | 288 | except Exception as e: # mootdx 版本变动导致取不到就只用精选表,不影响主流程 | CODE |
| LOW | tradingagents/dataflows/a_stock.py | 327 | except Exception: | CODE |
| LOW | tradingagents/dataflows/a_stock.py | 369 | except Exception as e: # 版本差异导致取不到就跳过保护,别影响主流程 | CODE |
| LOW | tradingagents/dataflows/a_stock.py | 380 | except Exception as e: | CODE |
| LOW | tradingagents/dataflows/a_stock.py | 424 | except Exception as e: | CODE |
| LOW | tradingagents/dataflows/a_stock.py | 443 | except Exception as e: | CODE |
| LOW | tradingagents/dataflows/a_stock.py | 792 | except Exception as e: | CODE |
| LOW | tradingagents/dataflows/a_stock.py | 799 | except Exception: | CODE |
| LOW | tradingagents/dataflows/a_stock.py | 854 | except Exception as e: | CODE |
| LOW | tradingagents/dataflows/a_stock.py | 862 | except Exception: | CODE |
| LOW | tradingagents/dataflows/a_stock.py | 974 | except Exception as e: | CODE |
| LOW | tradingagents/dataflows/a_stock.py | 1015 | except Exception as e: | CODE |
| LOW | tradingagents/dataflows/a_stock.py | 1040 | except Exception as e: | CODE |
| LOW | tradingagents/dataflows/a_stock.py | 1068 | except Exception as e: | CODE |
| LOW | tradingagents/dataflows/a_stock.py | 1138 | except Exception as e: | CODE |
| LOW | tradingagents/dataflows/a_stock.py | 1140 | except Exception as e: | CODE |
| LOW | tradingagents/dataflows/a_stock.py | 1153 | except Exception as e: | CODE |
| LOW | tradingagents/dataflows/a_stock.py | 1237 | except Exception as e: | CODE |
| LOW | tradingagents/dataflows/a_stock.py | 1268 | except Exception as e: | CODE |
| LOW | tradingagents/dataflows/a_stock.py | 1299 | except Exception as e: | CODE |
| LOW | tradingagents/dataflows/a_stock.py | 1412 | except Exception as e: | CODE |
| LOW | tradingagents/dataflows/a_stock.py | 1419 | except Exception as e: | CODE |
| LOW | tradingagents/dataflows/a_stock.py | 1502 | except Exception as e: | CODE |
| LOW | tradingagents/dataflows/a_stock.py | 1529 | except Exception as e: | CODE |
| LOW | tradingagents/dataflows/a_stock.py | 1605 | except Exception as e: | CODE |
| LOW | tradingagents/dataflows/a_stock.py | 1696 | except Exception as e: | CODE |
| 13 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | main.py | 9 | # Create a custom config | COMMENT |
| 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 | 48 | # Create a copy of params to avoid modifying the original | 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 |
|---|---|---|---|---|
| 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 | 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 | 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 | 37 | 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 | 12 | logger = logging.getLogger(__name__) | CODE |
| LOW | tradingagents/llm_clients/anthropic_client.py | 10 | logger = logging.getLogger(__name__) | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | web/stock_display.py | 91 | CODE | |
| LOW | cli/main.py | 977 | CODE | |
| LOW | tradingagents/graph/trading_graph.py | 392 | CODE | |
| LOW | tradingagents/graph/trading_graph.py | 669 | CODE | |
| LOW | tradingagents/dataflows/alpha_vantage_indicator.py | 3 | CODE | |
| LOW | tradingagents/dataflows/a_stock.py | 123 | CODE | |
| LOW | tradingagents/dataflows/a_stock.py | 384 | CODE | |
| LOW | tradingagents/dataflows/a_stock.py | 981 | CODE | |
| LOW | tradingagents/dataflows/a_stock.py | 1465 | CODE | |
| LOW | tradingagents/dataflows/a_stock.py | 1612 | CODE | |
| LOW | tradingagents/dataflows/a_stock.py | 1802 | CODE | |
| LOW | tradingagents/dataflows/a_stock.py | 1824 | CODE | |
| LOW | tradingagents/dataflows/a_stock.py | 1844 | CODE | |
| LOW | tradingagents/dataflows/a_stock.py | 1965 | CODE | |
| LOW | tradingagents/dataflows/a_stock.py | 2033 | CODE | |
| LOW | tradingagents/dataflows/a_stock.py | 2190 | CODE | |
| LOW | tradingagents/dataflows/a_stock.py | 2399 | CODE | |
| LOW | tradingagents/dataflows/yfinance_news.py | 51 | CODE | |
| LOW | tradingagents/dataflows/yfinance_news.py | 107 | CODE | |
| LOW | tradingagents/llm_clients/openai_client.py | 172 | CODE |
| 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 |
|---|---|---|---|---|
| LOW | pyproject.toml | 61 | # combination satisfies both — the conflict is structural, not a bad pin. | COMMENT |
| LOW | README.md | 221 | # ── DeepSeek 示例 ─────────────────────────────────── | COMMENT |
| LOW | README_en.md | 201 | config = { | 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 | # "bear": {"provider": "qwen", "model": "qwen-plus"}, | COMMENT |
| LOW | tradingagents/default_config.py | 61 | "agent_sdk_model": "opus", | COMMENT |
| LOW | tradingagents/agents/utils/rating.py | 61 | # 结果是静默落到默认值 Hold —— 决策评级被悄悄改写,报告里完全看不出来。 | COMMENT |
| LOW | tradingagents/llm_clients/claude_agent_sdk_client.py | 481 | async def _query(self, prompt: str, options, prefer_result: bool = False): | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | CHANGELOG.md | 1193 | - [@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 | 71 | # Check if response is JSON (error responses are typically JSON) | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tradingagents/dataflows/stockstats_utils.py | 93 | CODE |