TradingAgents: Multi-Agents LLM Financial Trading Framework
This report summarizes scanner evidence for TauricResearch/TradingAgents, a Python project with 110,502 GitHub stars. SynthScan examined 28,016 lines of code across 191 source files, recording 1108 pattern matches distributed across 18 syntactic categories. The legacy adjusted pattern signal is 50.1 (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? 918 finding(s).
Are imports declared and package/API names verified? 97 finding(s).
Are wrappers, guards, and repeated structures necessary? 971 finding(s).
Which changes need focused human review? 1108 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 1108 distinct pattern matches across 18 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 |
|---|---|---|---|---|
| LOW⚡ | tests/test_yfinance_stale_ohlcv_guard.py | 39 | def test_recent_prior_trading_day_is_accepted(self): | CODE |
| LOW⚡ | tests/test_yfinance_stale_ohlcv_guard.py | 43 | def test_year_old_row_is_rejected_with_detail(self): | CODE |
| LOW⚡ | tests/test_yfinance_stale_ohlcv_guard.py | 51 | def test_empty_frame_is_left_to_caller(self): | CODE |
| LOW⚡ | tests/test_yfinance_stale_ohlcv_guard.py | 57 | def test_long_holiday_gap_within_threshold_is_accepted(self): | CODE |
| LOW⚡ | tests/test_yfinance_stale_ohlcv_guard.py | 63 | def test_get_yfin_data_online_raises_on_stale_frame(self): | CODE |
| LOW | tests/test_yfinance_stale_ohlcv_guard.py | 92 | def test_router_sentinel_surfaces_stale_reason(self): | CODE |
| LOW⚡ | tests/test_structured_agents.py | 40 | def test_minimal_required_fields(self): | CODE |
| LOW⚡ | tests/test_structured_agents.py | 49 | def test_optional_fields_included_when_present(self): | CODE |
| LOW⚡ | tests/test_structured_agents.py | 90 | def test_trader_real_numeric_string_still_parses(self): | CODE |
| LOW⚡ | tests/test_structured_agents.py | 94 | def test_pm_nullish_price_target_coerces_to_none(self): | CODE |
| LOW⚡ | tests/test_structured_agents.py | 103 | def test_percentage_answer_to_a_price_field_becomes_none(self): | CODE |
| LOW⚡ | tests/test_structured_agents.py | 343 | def test_falls_back_to_freetext_when_structured_unavailable(self): | CODE |
| LOW⚡ | tests/test_structured_agents.py | 360 | def test_header_contains_band_and_score(self): | CODE |
| LOW⚡ | tests/test_structured_agents.py | 371 | def test_header_contains_confidence(self): | CODE |
| LOW⚡ | tests/test_structured_agents.py | 380 | def test_narrative_preserved_in_output(self): | CODE |
| LOW⚡ | tests/test_structured_agents.py | 390 | def test_all_six_bands_render(self): | CODE |
| LOW⚡ | tests/test_structured_agents.py | 398 | def test_score_out_of_range_rejected(self): | CODE |
| LOW⚡ | tests/test_structured_agents.py | 462 | def test_sentiment_report_also_in_messages(self): | CODE |
| LOW⚡ | tests/test_structured_agents.py | 469 | def test_prompt_contains_ticker(self): | CODE |
| LOW⚡ | tests/test_structured_agents.py | 474 | def test_falls_back_to_freetext_when_structured_unavailable(self): | CODE |
| LOW⚡ | tests/test_structured_agents.py | 481 | def test_falls_back_to_freetext_when_structured_call_fails(self): | CODE |
| LOW⚡ | tests/test_structured_agents.py | 522 | def test_a_price_that_is_a_number_survives(): | CODE |
| LOW⚡ | tests/test_structured_agents.py | 531 | def test_a_field_the_model_did_not_give_says_so(): | CODE |
| LOW⚡ | tests/test_structured_agents.py | 541 | def test_the_trader_names_the_levels_it_did_not_give(): | CODE |
| LOW | tests/test_structured_agents.py | 64 | def test_optional_fields_are_named_as_not_provided(self): | CODE |
| LOW | tests/test_structured_agents.py | 79 | def test_trader_nullish_strings_coerce_to_none(self): | CODE |
| LOW | tests/test_structured_agents.py | 117 | def test_human_formatted_price_is_reduced_to_its_number(self): | CODE |
| LOW | tests/test_structured_agents.py | 127 | def test_one_bad_field_no_longer_fails_the_whole_proposal(self): | CODE |
| LOW | tests/test_structured_agents.py | 197 | def test_invoke_structured_falls_back_when_result_is_none(): | CODE |
| LOW | tests/test_structured_agents.py | 216 | def test_structured_path_produces_rendered_markdown(self): | CODE |
| LOW | tests/test_structured_agents.py | 235 | def test_prompt_includes_investment_plan(self): | CODE |
| LOW | tests/test_structured_agents.py | 244 | def test_prompt_includes_market_report_for_price_levels(self): | CODE |
| LOW | tests/test_structured_agents.py | 257 | def test_empty_market_report_omits_the_section_and_grounding(self): | CODE |
| LOW | tests/test_structured_agents.py | 269 | def test_falls_back_to_freetext_when_structured_unavailable(self): | CODE |
| LOW | tests/test_structured_agents.py | 318 | def test_structured_path_produces_rendered_markdown(self): | CODE |
| LOW | tests/test_structured_agents.py | 415 | def _structured_sentiment_llm(captured: dict, report: SentimentReport | None = None): | CODE |
| LOW | tests/test_structured_agents.py | 450 | def test_structured_path_produces_rendered_markdown(self): | CODE |
| LOW | tests/test_structured_agents.py | 498 | def test_conflict_alone_is_not_a_hold_trigger(source): | CODE |
| LOW | tests/test_structured_agents.py | 510 | def test_a_price_written_as_a_range_drops_only_that_field(written): | CODE |
| LOW | tests/test_memory_pointintime.py | 28 | def test_resolution_date_is_stored_and_parsed(tmp_path): | CODE |
| LOW | tests/test_memory_pointintime.py | 37 | def test_as_of_excludes_lessons_resolved_after_the_run_date(tmp_path): | CODE |
| LOW | tests/test_memory_pointintime.py | 50 | def test_no_as_of_is_unfiltered_live_behavior(tmp_path): | CODE |
| LOW | tests/test_memory_pointintime.py | 58 | def test_legacy_entry_without_resolution_date_excluded_in_backtest(tmp_path): | CODE |
| LOW | tests/test_memory_pointintime.py | 73 | def test_cross_ticker_lessons_are_also_gated(tmp_path): | CODE |
| LOW | tests/test_memory_pointintime.py | 82 | def test_memory_as_of_gates_historical_but_not_live(): | CODE |
| LOW | tests/test_graph_end_to_end.py | 133 | def test_a_full_run_reaches_a_logged_decision(tmp_path, monkeypatch, offline, structured): | CODE |
| LOW | tests/test_graph_end_to_end.py | 151 | def test_an_interrupted_run_resumes_from_its_checkpoint(tmp_path, monkeypatch, offline): | CODE |
| LOW | tests/test_graph_end_to_end.py | 169 | def test_a_graph_reused_across_runs_keeps_no_run_state(tmp_path, monkeypatch, offline): | CODE |
| LOW | tests/test_graph_end_to_end.py | 182 | def test_the_analysts_run_at_the_same_time(tmp_path, monkeypatch, offline): | CODE |
| LOW | tests/test_graph_end_to_end.py | 193 | def test_a_debug_run_prints_the_analysts_work_and_reaches_the_same_decision(tmp_path, monkeypatch, offline, capsys): | CODE |
| LOW | tests/test_graph_end_to_end.py | 206 | def test_each_report_streams_as_soon_as_its_analyst_files_it(tmp_path, monkeypatch, offline): | CODE |
| LOW | tests/test_graph_end_to_end.py | 220 | def test_a_streamed_run_reads_its_own_graph_config(tmp_path, monkeypatch, offline): | CODE |
| LOW | tests/test_graph_end_to_end.py | 257 | def test_an_analyst_that_keeps_calling_tools_writes_its_report_at_the_limit(tmp_path, monkeypatch, offline): | CODE |
| LOW | tests/test_graph_end_to_end.py | 271 | def test_the_last_turn_is_offered_no_tools_and_reads_its_tool_results_as_text(tmp_path, monkeypatch, offline): | CODE |
| LOW | tests/test_graph_end_to_end.py | 288 | def test_a_tool_limit_the_recursion_limit_cannot_hold_is_refused(tmp_path, monkeypatch): | CODE |
| LOW | tests/test_graph_end_to_end.py | 310 | def test_past_decisions_settle_alongside_the_analysts(tmp_path, monkeypatch, offline): | CODE |
| LOW | tests/test_graph_end_to_end.py | 334 | def test_a_settlement_failure_is_noted_and_the_run_goes_on(tmp_path, monkeypatch, offline): | CODE |
| LOW | tests/test_graph_end_to_end.py | 353 | def test_the_run_settles_other_tickers_due_decisions_too(tmp_path, monkeypatch, offline): | CODE |
| LOW | tests/test_graph_end_to_end.py | 369 | def test_the_memory_step_reads_lessons_as_of_the_trade_date_and_settles_once(tmp_path, monkeypatch, offline): | CODE |
| LOW | tests/test_no_data_handling.py | 36 | def test_empty_download_raises_and_does_not_cache(self): | CODE |
| 816 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | tests/test_structured_agents.py | 33 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_structured_agents.py | 35 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_structured_agents.py | 353 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_structured_agents.py | 355 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_structured_agents.py | 165 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_structured_agents.py | 167 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_structured_agents.py | 282 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_structured_agents.py | 284 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_alpha_vantage_hardening.py | 125 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_alpha_vantage_hardening.py | 127 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_signal_processing.py | 11 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_signal_processing.py | 13 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_deepseek_reasoning.py | 27 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_deepseek_reasoning.py | 30 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_deepseek_reasoning.py | 50 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_deepseek_reasoning.py | 52 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_deepseek_reasoning.py | 182 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_deepseek_reasoning.py | 184 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_deepseek_reasoning.py | 226 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_deepseek_reasoning.py | 228 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_deepseek_reasoning.py | 118 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_deepseek_reasoning.py | 120 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_memory_log.py | 110 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_memory_log.py | 112 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_memory_log.py | 408 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_memory_log.py | 410 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_memory_log.py | 734 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_memory_log.py | 736 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_memory_log.py | 866 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_memory_log.py | 868 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_memory_log.py | 30 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_memory_log.py | 32 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tradingagents/agents/schemas.py | 61 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tradingagents/agents/schemas.py | 63 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tradingagents/agents/schemas.py | 90 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tradingagents/agents/schemas.py | 92 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tradingagents/agents/schemas.py | 141 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tradingagents/agents/schemas.py | 143 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tradingagents/agents/schemas.py | 216 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tradingagents/agents/schemas.py | 218 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tradingagents/agents/schemas.py | 291 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tradingagents/agents/schemas.py | 293 | # --------------------------------------------------------------------------- | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_memory_pointintime.py | 9 | CODE | |
| LOW | tests/test_graph_end_to_end.py | 8 | CODE | |
| LOW | tests/test_sec_edgar.py | 10 | CODE | |
| LOW | tests/test_debate_opening.py | 9 | CODE | |
| LOW | tests/test_ollama_base_url.py | 3 | CODE | |
| LOW | tests/test_stocktwits_resilience.py | 8 | CODE | |
| LOW | tests/test_cli_no_console.py | 7 | CODE | |
| LOW | tests/test_ohlcv_cache_freshness.py | 8 | CODE | |
| LOW | tests/test_structured_agent_prompts.py | 11 | CODE | |
| LOW | tests/test_reddit_fallback.py | 4 | CODE | |
| LOW | tests/test_yahoo_snapshot.py | 3 | CODE | |
| LOW | tests/test_ohlcv_date_column.py | 7 | CODE | |
| LOW | tests/test_llm_max_tokens.py | 9 | CODE | |
| LOW | tests/test_portfolio_context.py | 10 | CODE | |
| LOW | tests/test_backtest.py | 9 | CODE | |
| LOW | tests/test_cli_display.py | 7 | CODE | |
| LOW | tests/test_fundamentals_lookahead.py | 16 | CODE | |
| LOW | tests/test_llm_max_retries.py | 7 | CODE | |
| LOW | tests/test_cli_prefs.py | 10 | CODE | |
| LOW | tests/test_cli_memory_log.py | 10 | CODE | |
| LOW | tests/test_rating_integrity.py | 10 | CODE | |
| LOW | tests/test_env_overrides.py | 3 | CODE | |
| LOW | tests/test_undated_tools_as_of.py | 8 | CODE | |
| LOW | tests/test_social_lookahead.py | 8 | CODE | |
| LOW | tests/test_cli_commands.py | 7 | CODE | |
| LOW | tests/test_checkpoint_lifecycle.py | 10 | CODE | |
| LOW | tests/test_api_key_env.py | 3 | CODE | |
| LOW | tests/test_tool_date_enforcement.py | 9 | CODE | |
| LOW | tests/test_openai_responses_base_url.py | 4 | CODE | |
| LOW | tests/test_ohlcv_latest_bar.py | 14 | CODE | |
| LOW | tests/test_prompt_integrity.py | 9 | CODE | |
| LOW | cli/prefs.py | 17 | CODE | |
| LOW | tradingagents/backtest.py | 17 | CODE | |
| LOW | tradingagents/portfolio.py | 14 | CODE | |
| LOW | tradingagents/memory/__init__.py | 8 | CODE | |
| LOW | tradingagents/graph/checkpointer.py | 6 | CODE | |
| LOW | tradingagents/graph/__init__.py | 1 | CODE | |
| LOW | tradingagents/graph/__init__.py | 2 | CODE | |
| LOW | tradingagents/graph/__init__.py | 3 | CODE | |
| LOW | tradingagents/graph/__init__.py | 4 | CODE | |
| LOW | tradingagents/agents/rating.py | 16 | CODE | |
| LOW | tradingagents/agents/__init__.py | 1 | CODE | |
| LOW | tradingagents/agents/__init__.py | 2 | CODE | |
| LOW | tradingagents/agents/__init__.py | 3 | 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 | |
| LOW | tradingagents/agents/__init__.py | 11 | CODE | |
| LOW | tradingagents/agents/__init__.py | 12 | CODE | |
| LOW | tradingagents/agents/__init__.py | 12 | CODE | |
| LOW | tradingagents/agents/__init__.py | 12 | CODE | |
| LOW | tradingagents/agents/__init__.py | 13 | CODE | |
| LOW | tradingagents/agents/schemas.py | 19 | CODE | |
| LOW | tradingagents/agents/structured.py | 19 | CODE | |
| LOW | tradingagents/agents/trader/trader.py | 3 | CODE | |
| LOW | tradingagents/agents/managers/portfolio_manager.py | 11 | CODE | |
| 25 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tradingagents/backtest.py | 31 | logger = logging.getLogger(__name__) | CODE |
| LOW | tradingagents/memory/settlement.py | 11 | logger = logging.getLogger(__name__) | CODE |
| LOW | tradingagents/memory/__init__.py | 10 | __all__ = ["TradingMemoryLog"] | CODE |
| LOW | tradingagents/graph/__init__.py | 6 | __all__ = [ | CODE |
| LOW | tradingagents/graph/trading_graph.py | 27 | logger = logging.getLogger(__name__) | CODE |
| LOW | tradingagents/graph/setup.py | 29 | logger = logging.getLogger(__name__) | CODE |
| LOW | tradingagents/agents/post_screen.py | 25 | logger = logging.getLogger(__name__) | CODE |
| LOW | tradingagents/agents/__init__.py | 15 | __all__ = [ | CODE |
| LOW | tradingagents/agents/context.py | 11 | logger = logging.getLogger(__name__) | CODE |
| LOW | tradingagents/agents/structured.py | 27 | logger = logging.getLogger(__name__) | CODE |
| LOW | tradingagents/dataflows/files.py | 11 | logger = logging.getLogger(__name__) | CODE |
| LOW | tradingagents/dataflows/symbols.py | 28 | logger = logging.getLogger(__name__) | CODE |
| LOW | tradingagents/dataflows/router.py | 42 | logger = logging.getLogger(__name__) | CODE |
| LOW | tradingagents/dataflows/vendors/polymarket.py | 20 | logger = logging.getLogger(__name__) | CODE |
| LOW | tradingagents/dataflows/vendors/stocktwits.py | 28 | logger = logging.getLogger(__name__) | CODE |
| LOW | tradingagents/dataflows/vendors/fred.py | 20 | logger = logging.getLogger(__name__) | CODE |
| LOW | tradingagents/dataflows/vendors/sec_edgar.py | 34 | logger = logging.getLogger(__name__) | CODE |
| LOW | tradingagents/dataflows/vendors/reddit.py | 35 | logger = logging.getLogger(__name__) | CODE |
| LOW | …ingagents/dataflows/vendors/alpha_vantage/indicator.py | 6 | logger = logging.getLogger(__name__) | CODE |
| LOW | …dingagents/dataflows/vendors/alpha_vantage/__init__.py | 17 | __all__ = [ | CODE |
| LOW | tradingagents/dataflows/vendors/yahoo/market.py | 15 | logger = logging.getLogger(__name__) | CODE |
| LOW | tradingagents/dataflows/vendors/yahoo/common.py | 12 | logger = logging.getLogger(__name__) | CODE |
| LOW | tradingagents/dataflows/vendors/yahoo/ohlcv.py | 13 | logger = logging.getLogger(__name__) | CODE |
| LOW | tradingagents/llm_clients/__init__.py | 4 | __all__ = ["BaseLLMClient", "build_llm_kwargs", "create_llm_client", "create_tier_client", "tier_provider"] | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tradingagents/graph/checkpointer.py | 96 | except sqlite3.OperationalError: | CODE |
| HIGH | tradingagents/agents/post_screen.py | 115 | except (ValueError, KeyError, TypeError): | CODE |
| HIGH | tradingagents/dataflows/vendors/polymarket.py | 63 | except ValueError: | CODE |
| HIGH | tradingagents/dataflows/vendors/sec_edgar.py | 127 | except ValueError: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_memory_log.py | 1050 | except Exception as exc: # noqa: BLE001 — collected for the assertion | CODE |
| LOW | cli/run.py | 452 | except Exception as e: | CODE |
| LOW | cli/prompts.py | 114 | except Exception: | CODE |
| LOW | cli/prompts.py | 236 | except Exception as e: | CODE |
| LOW | cli/main.py | 147 | except Exception as exc: # a missing key or an unknown analyst is a setup error | CODE |
| LOW | cli/announcements.py | 25 | except Exception: | CODE |
| LOW | tradingagents/backtest.py | 169 | except Exception as exc: # one unreachable vendor must not end the sweep | CODE |
| LOW | tradingagents/backtest.py | 178 | except Exception as exc: # reflection calls an LLM; one failure is not the sweep's | CODE |
| LOW | tradingagents/memory/settlement.py | 132 | except Exception as exc: | CODE |
| LOW | tradingagents/memory/settlement.py | 146 | except Exception as exc: | CODE |
| LOW | tradingagents/graph/trading_graph.py | 325 | except Exception as exc: | CODE |
| LOW | tradingagents/graph/trading_graph.py | 331 | except Exception as exc: | CODE |
| LOW | tradingagents/agents/context.py | 80 | except Exception as exc: # noqa: BLE001 — fail open, never block the run | CODE |
| LOW | tradingagents/agents/structured.py | 76 | except Exception as exc: | CODE |
| LOW | tradingagents/dataflows/router.py | 251 | except Exception as e: | CODE |
| LOW | …ingagents/dataflows/vendors/alpha_vantage/indicator.py | 217 | except Exception as e: | CODE |
| LOW | tradingagents/dataflows/vendors/yahoo/market.py | 185 | except Exception as e: | CODE |
| LOW | tradingagents/dataflows/vendors/yahoo/market.py | 257 | except Exception as e: | CODE |
| LOW | tradingagents/dataflows/vendors/yahoo/common.py | 73 | except Exception as exc: | CODE |
| LOW | tradingagents/dataflows/vendors/yahoo/snapshot.py | 85 | except Exception as exc: # noqa: BLE001 — one bad indicator shouldn't sink the snapshot | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | tests/test_minimax.py | 18 | os.environ.setdefault("MINIMAX_API_KEY", "placeholder") | CODE |
| LOW⚡ | tests/test_minimax.py | 21 | api_key="placeholder", | CODE |
| LOW | tests/conftest.py | 116 | monkeypatch.setenv(env_var, os.environ.get(env_var) or "placeholder") | CODE |
| LOW⚡ | tests/test_temperature_config.py | 29 | provider=provider, model=model, temperature=0.0, api_key="placeholder" | CODE |
| LOW⚡ | tests/test_temperature_config.py | 36 | provider="openai", model="gpt-4.1", api_key="placeholder" | CODE |
| LOW⚡ | tests/test_deepseek_reasoning.py | 58 | os.environ.setdefault("DEEPSEEK_API_KEY", "placeholder") | CODE |
| LOW⚡ | tests/test_deepseek_reasoning.py | 61 | api_key="placeholder", | CODE |
| LOW⚡ | tests/test_deepseek_reasoning.py | 141 | model=model, api_key="placeholder", base_url="https://api.deepseek.com", | CODE |
| LOW⚡ | tests/test_deepseek_reasoning.py | 189 | return bool(key) and key != "placeholder" | CODE |
| LOW⚡ | tests/test_anthropic_effort.py | 92 | api_key="placeholder", | CODE |
| LOW⚡ | tests/test_anthropic_effort.py | 96 | assert captured["kwargs"]["api_key"] == "placeholder" | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tests/test_llm_max_tokens.py | 0 | the defaults as the environment given here would set them. | STRING |
| HIGH | tests/test_llm_max_retries.py | 0 | the defaults as the environment given here would set them. | STRING |
| HIGH | tests/test_env_overrides.py | 0 | the defaults as the environment given here would set them. | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_checkpoint_lifecycle.py | 86 | CODE | |
| LOW | tests/test_checkpoint_lifecycle.py | 118 | CODE | |
| LOW | cli/run.py | 98 | CODE | |
| LOW | cli/selections.py | 103 | CODE | |
| LOW | tradingagents/memory/log.py | 32 | CODE | |
| LOW | tradingagents/memory/log.py | 203 | CODE | |
| LOW | tradingagents/graph/trading_graph.py | 372 | CODE | |
| LOW | tradingagents/graph/trading_graph.py | 406 | CODE | |
| LOW | tradingagents/agents/context.py | 107 | CODE | |
| LOW | tradingagents/dataflows/symbols.py | 103 | CODE | |
| LOW | tradingagents/dataflows/vendors/sec_edgar.py | 153 | CODE | |
| LOW | …ingagents/dataflows/vendors/alpha_vantage/indicator.py | 9 | CODE | |
| LOW | tradingagents/llm_clients/factory.py | 90 | CODE | |
| LOW | tradingagents/llm_clients/openai_client.py | 277 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | cli/selections.py | 152 | # Step 1: Ticker symbol | COMMENT |
| LOW | cli/selections.py | 173 | # Step 2: Analysis date | COMMENT |
| LOW | cli/selections.py | 188 | # Step 3: Output language (skipped when set via TRADINGAGENTS_OUTPUT_LANGUAGE) | COMMENT |
| LOW | cli/selections.py | 203 | # Step 4: Select analysts | COMMENT |
| LOW | cli/selections.py | 218 | # Step 5: Research depth (skipped when both round counts are set via env). | COMMENT |
| LOW | cli/selections.py | 237 | # Step 6: LLM Provider (skipped when set via TRADINGAGENTS_LLM_PROVIDER). | COMMENT |
| LOW | cli/selections.py | 288 | # Step 7: Thinking agents (skipped when either model is set via environment) | COMMENT |
| LOW | cli/selections.py | 310 | # Step 8: Provider-specific reasoning/thinking configuration. Each knob is | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | cli/selections.py | 152 | # Step 1: Ticker symbol | COMMENT |
| LOW | cli/selections.py | 173 | # Step 2: Analysis date | COMMENT |
| LOW | cli/selections.py | 188 | # Step 3: Output language (skipped when set via TRADINGAGENTS_OUTPUT_LANGUAGE) | COMMENT |
| LOW | cli/selections.py | 203 | # Step 4: Select analysts | COMMENT |
| LOW | cli/selections.py | 218 | # Step 5: Research depth (skipped when both round counts are set via env). | COMMENT |
| LOW | cli/selections.py | 237 | # Step 6: LLM Provider (skipped when set via TRADINGAGENTS_LLM_PROVIDER). | COMMENT |
| LOW | cli/selections.py | 288 | # Step 7: Thinking agents (skipped when either model is set via environment) | COMMENT |
| LOW | cli/selections.py | 310 | # Step 8: Provider-specific reasoning/thinking configuration. Each knob is | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/test_checkpoint_resume.py | 85 | # Create a checkpoint by crashing | COMMENT |
| MEDIUM | tradingagents/dataflows/vendors/alpha_vantage/common.py | 76 | # Create a copy of params to avoid modifying the original | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | CHANGELOG.md | 521 | - [@Bcardo](https://github.com/Bcardo) — memory-log redesign (#579), empty-memory hallucination report (#572), encoding | CODE |
| MEDIUM | tradingagents/llm_clients/model_catalog.py | 61 | # M3 carries a 1M-token context window; the M2.x line is 204,800 tokens. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tradingagents/agents/analysts/sentiment_analyst.py | 147 | return f"""You are a financial market sentiment analyst. Your task is to produce a comprehensive sentiment report fo | CODE |
| MEDIUM | tradingagents/agents/analysts/sentiment_analyst.py | 172 | ## How to analyze this data (best practices) | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tradingagents/llm_clients/factory.py | 13 | 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/default_config.py | 101 | # A tier may name its own provider and endpoint (#1440): the quick tier serves | COMMENT |
| LOW | tradingagents/default_config.py | 121 | # Cap on output tokens forwarded to every provider chat client. None leaves | COMMENT |
| LOW | tradingagents/default_config.py | 161 | # Statements come from SEC EDGAR as filed (US filers), then Yahoo; the | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tradingagents/dataflows/vendors/stocktwits.py | 6 | user-labeled sentiment field (``Bullish``/``Bearish``/null), the message | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | cli/main.py | 33 | CODE | |
| LOW | cli/main.py | 104 | CODE |