基于多智能体LLM的中文金融交易框架 - TradingAgents中文增强版
This report summarizes scanner evidence for hsliuping/TradingAgents-CN, a Python project with 32,238 GitHub stars. SynthScan examined 549,112 lines of code across 1556 source files, recording 12118 pattern matches distributed across 23 syntactic categories. The legacy adjusted pattern signal is 26.2 (Elevated 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? 4144 finding(s).
Are imports declared and package/API names verified? 1819 finding(s).
Are wrappers, guards, and repeated structures necessary? 9087 finding(s).
Which changes need focused human review? 12118 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 12118 distinct pattern matches across 23 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 | core/assistant/metrics.py | 69 | except Exception as exc: # 埋点失败绝不影响对话 | CODE |
| LOW | core/assistant/lexicon.py | 160 | except Exception as exc: | CODE |
| LOW | core/tools/external_skill_loader.py | 92 | except Exception as e: | CODE |
| LOW | core/tools/external_skill_loader.py | 205 | except Exception as e: | CODE |
| LOW | core/tools/external_skill_loader.py | 254 | except Exception as e: | CODE |
| LOW | core/tools/registry.py | 78 | except Exception as e: | CODE |
| LOW⚡ | core/tools/sector_tools.py | 881 | except Exception as e: | CODE |
| LOW⚡ | core/tools/sector_tools.py | 1319 | except Exception as e: | CODE |
| LOW | core/tools/sector_tools.py | 35 | except Exception: | CODE |
| LOW | core/tools/sector_tools.py | 52 | except Exception as e: | CODE |
| LOW | core/tools/sector_tools.py | 76 | except Exception as e: | CODE |
| LOW | core/tools/sector_tools.py | 185 | except Exception as e: | CODE |
| LOW | core/tools/sector_tools.py | 223 | except Exception as e: | CODE |
| LOW | core/tools/sector_tools.py | 333 | except Exception as e: | CODE |
| LOW | core/tools/sector_tools.py | 480 | except Exception as e: | CODE |
| LOW | core/tools/sector_tools.py | 707 | except Exception as e: | CODE |
| LOW | core/tools/sector_tools.py | 803 | except Exception as e: | CODE |
| LOW | core/tools/sector_tools.py | 1066 | except Exception as e: | CODE |
| LOW | core/tools/sector_tools.py | 1148 | except Exception as e: | CODE |
| LOW | core/tools/sector_tools.py | 1202 | except Exception as e: | CODE |
| LOW | core/tools/sector_tools.py | 1266 | except Exception as e: | CODE |
| LOW | core/tools/index_tools.py | 95 | except Exception as e: | CODE |
| LOW | core/tools/index_tools.py | 167 | except Exception as e: | CODE |
| LOW | core/tools/index_tools.py | 271 | except Exception as e: | CODE |
| LOW | core/tools/index_tools.py | 360 | except Exception as e: | CODE |
| LOW | core/tools/index_tools.py | 434 | except Exception as e: | CODE |
| LOW | core/tools/index_tools.py | 514 | except Exception as e: | CODE |
| LOW | core/tools/index_tools.py | 574 | except Exception as e: | CODE |
| LOW | core/tools/index_tools.py | 660 | except Exception: | CODE |
| LOW | core/tools/index_tools.py | 758 | except Exception as e: | CODE |
| LOW | core/tools/index_tools.py | 892 | except Exception as e: | CODE |
| LOW | core/tools/index_tools.py | 985 | except Exception as e: | CODE |
| LOW | core/tools/index_tools.py | 1156 | except Exception as e: | CODE |
| LOW | core/tools/loader.py | 77 | except Exception as e: | CODE |
| LOW | core/tools/loader.py | 108 | except Exception as e: | CODE |
| LOW | core/tools/loader.py | 136 | except Exception as e: | CODE |
| LOW | core/tools/chip_distribution_tools.py | 127 | except Exception as e: | CODE |
| LOW | core/tools/chip_distribution_tools.py | 217 | except Exception as e: | CODE |
| LOW | core/tools/trade_date_policy.py | 19 | except Exception: | CODE |
| LOW | core/tools/execution_logger.py | 77 | except Exception as e: | CODE |
| LOW⚡ | core/tools/execution_logger.py | 88 | except Exception as e: | CODE |
| LOW⚡ | core/tools/execution_logger.py | 97 | except Exception as e: | CODE |
| LOW | core/tools/custom_tool.py | 82 | except Exception as e: | CODE |
| LOW | core/tools/custom_tool.py | 121 | except Exception as e: | CODE |
| LOW | core/tools/base.py | 184 | except Exception as e: | CODE |
| LOW | core/tools/base.py | 215 | except Exception: | CODE |
| LOW | core/tools/base.py | 280 | except Exception as e: | CODE |
| LOW⚡ | core/tools/mcp/datasource_adapter.py | 126 | except Exception as e: | CODE |
| LOW⚡ | core/tools/mcp/datasource_adapter.py | 191 | except Exception as e: | CODE |
| LOW⚡ | core/tools/mcp/client_manager.py | 178 | except Exception as e: | CODE |
| LOW⚡ | core/tools/implementations/legacy_bridge.py | 20 | except Exception as e: | CODE |
| LOW | …s/implementations/fundamentals/cashflow_enhancement.py | 311 | except Exception as exc: | CODE |
| LOW | …s/implementations/fundamentals/cashflow_enhancement.py | 569 | except Exception as exc: | CODE |
| LOW | …ols/implementations/fundamentals/stock_fundamentals.py | 54 | except Exception: | CODE |
| LOW | …ols/implementations/fundamentals/stock_fundamentals.py | 127 | except Exception as exc: | CODE |
| LOW | …ols/implementations/fundamentals/stock_fundamentals.py | 141 | except Exception as exc: | CODE |
| LOW | …ols/implementations/fundamentals/stock_fundamentals.py | 153 | except Exception as exc: | CODE |
| LOW | …ols/implementations/fundamentals/stock_fundamentals.py | 203 | except Exception as exc: | CODE |
| LOW | …ols/implementations/fundamentals/stock_fundamentals.py | 248 | except Exception as exc: | CODE |
| LOW | …ols/implementations/fundamentals/stock_fundamentals.py | 281 | except Exception as exc: | CODE |
| 4552 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | core/python_runtime.py | 17 | def resolve_python_executable( | CODE |
| LOW | core/assistant/defense.py | 66 | def _build_untraced_interception(untraced_detail: str) -> str: | CODE |
| LOW | core/assistant/defense.py | 329 | def _get_untraced_risky_numbers( | CODE |
| LOW | core/assistant/defense.py | 382 | def _build_data_transparency_note( | CODE |
| LOW | core/assistant/defense.py | 429 | def _has_fabricated_tool_json(reply: str) -> bool: | CODE |
| LOW | core/assistant/defense.py | 446 | def _has_fabricated_tool_refs(reply: str, tools_used: list) -> bool: | CODE |
| LOW | core/assistant/defense.py | 485 | def _has_untraced_risky_numbers( | CODE |
| LOW | core/tools/external_skill_loader.py | 161 | async def load_external_skills_to_registry(db, registry) -> int: | CODE |
| LOW | core/tools/external_skill_loader.py | 210 | def register_single_external_skill(db_sync, registry, skill_doc: Dict[str, Any]) -> bool: | CODE |
| LOW | core/tools/qmt_market_tools.py | 88 | def get_market_overview_qmt_sync(trade_date: str, lookback_days: int = 60) -> str: | CODE |
| LOW | core/tools/qmt_market_tools.py | 220 | def get_sector_analysis_qmt_sync(ticker: str, trade_date: str, lookback_days: int = 20, top_n: int = 10) -> str: | CODE |
| LOW | core/tools/qmt_market_tools.py | 349 | def get_sector_analysis_qmt_enhanced(ticker: str, trade_date: str, lookback_days: int = 20, top_n: int = 10) -> str: | CODE |
| LOW | core/tools/qmt_market_tools.py | 624 | def get_amount_ranking_qmt_sync(top_n: int = 20, trade_date: Optional[str] = None) -> str: | CODE |
| LOW | core/tools/qmt_market_tools.py | 731 | def get_market_overview_qmt_enhanced(trade_date: str, lookback_days: int = 60) -> str: | CODE |
| LOW | core/tools/registry.py | 71 | def _load_tool_implementations(self) -> None: | CODE |
| LOW | core/tools/registry.py | 213 | def _build_langchain_args_schema(self, metadata: ToolMetadata) -> Optional[Type]: | CODE |
| LOW | core/tools/fc_converter.py | 106 | def tool_metadata_list_to_openai(tools: List[ToolMetadata]) -> List[Dict[str, Any]]: | CODE |
| LOW | core/tools/sector_tools.py | 80 | async def _get_ths_index_list_cached(provider, index_type: str) -> Optional[pd.DataFrame]: | CODE |
| LOW | core/tools/sector_tools.py | 112 | async def _get_ths_member_reverse_cached(provider, con_code: str) -> Optional[pd.DataFrame]: | CODE |
| LOW | core/tools/sector_tools.py | 712 | async def get_industry_top_companies( | CODE |
| LOW | core/tools/sector_tools.py | 1362 | def get_sector_performance_sync(ticker: str, trade_date: str, lookback_days: int = 20) -> str: | CODE |
| LOW | core/tools/sector_tools.py | 1378 | def get_industry_top_companies_sync(ticker: str, top_n: int = 5) -> str: | CODE |
| LOW | core/tools/sector_tools.py | 1393 | def get_sector_constituents_sync(sector_name: str, trade_date: str, top_n: int = 15) -> str: | CODE |
| LOW | core/tools/sector_tools.py | 1398 | def analyze_sector_by_name_sync(sector_name: str, trade_date: str) -> str: | CODE |
| LOW⚡ | core/tools/index_tools.py | 30 | def _format_compact_trade_date(trade_date: str) -> str: | CODE |
| LOW⚡ | core/tools/index_tools.py | 37 | def _get_required_margin_exchanges(trade_date: str) -> List[str]: | CODE |
| LOW⚡ | core/tools/index_tools.py | 45 | def _get_margin_exchange_coverage(day_data: pd.DataFrame, trade_date: str) -> Dict[str, Any]: | CODE |
| LOW | core/tools/index_tools.py | 596 | def get_market_environment_sync(trade_date: str) -> str: | CODE |
| LOW | core/tools/index_tools.py | 601 | def identify_market_cycle_sync(trade_date: str) -> str: | CODE |
| LOW⚡ | core/tools/context.py | 107 | def set_current_assistant_thread_id(thread_id: Optional[str]) -> contextvars.Token: | CODE |
| LOW⚡ | core/tools/context.py | 112 | def get_current_assistant_thread_id() -> Optional[str]: | CODE |
| LOW⚡ | core/tools/context.py | 117 | def set_current_assistant_thread_context(thread_context: Optional[Dict[str, Any]]) -> contextvars.Token: | CODE |
| LOW⚡ | core/tools/context.py | 123 | def get_current_assistant_thread_context() -> Dict[str, Any]: | CODE |
| LOW⚡ | core/tools/context.py | 128 | def set_current_analysis_data_source(data_source: Optional[str]) -> contextvars.Token: | CODE |
| LOW | core/tools/context.py | 144 | def reset_current_analysis_data_source(token: contextvars.Token) -> None: | CODE |
| LOW | core/tools/context.py | 149 | def get_current_analysis_data_source() -> Optional[str]: | CODE |
| LOW | core/tools/context.py | 165 | def set_latest_nanobot_intent(intent_dict: Dict[str, Any]) -> None: | CODE |
| LOW | core/tools/context.py | 182 | def get_latest_nanobot_intent() -> Dict[str, Any]: | CODE |
| LOW | core/tools/context.py | 188 | def clear_latest_nanobot_intent() -> None: | CODE |
| LOW | core/tools/chip_distribution_tools.py | 39 | def get_chip_distribution_akshare(ticker: str, trade_date: str) -> Optional[Dict[str, Any]]: | CODE |
| LOW | core/tools/chip_distribution_tools.py | 132 | def get_chip_distribution_tushare(ticker: str, trade_date: str) -> Optional[Dict[str, Any]]: | CODE |
| LOW | core/tools/chip_distribution_tools.py | 259 | def get_chip_distribution_unified(ticker: str, trade_date: str) -> str: | STRING |
| LOW | core/tools/chip_distribution_tools.py | 320 | def get_chip_distribution_sync(ticker: str, trade_date: str) -> str: | STRING |
| LOW | core/tools/trade_date_policy.py | 31 | def build_stable_data_cutoff_note( | CODE |
| LOW⚡ | core/tools/execution_logger.py | 105 | def get_tool_execution_logger() -> ToolExecutionLogger: | CODE |
| LOW | core/tools/base.py | 188 | def _extract_parameters_from_signature(func: Callable) -> List: | CODE |
| LOW⚡ | core/tools/mcp/datasource_adapter.py | 202 | def get_mcp_datasource_adapter() -> MCPDatasourceAdapter: | CODE |
| LOW⚡ | core/tools/implementations/legacy_bridge.py | 160 | def get_reddit_stock_info_bridge(ticker: str, curr_date: str) -> str: | CODE |
| LOW⚡ | core/tools/implementations/legacy_bridge.py | 204 | def get_china_market_overview_bridge(curr_date: str) -> str: | CODE |
| LOW⚡ | core/tools/implementations/legacy_bridge.py | 327 | def get_finnhub_company_insider_sentiment_bridge(ticker: str, curr_date: str) -> str: | CODE |
| LOW | core/tools/implementations/legacy_bridge.py | 95 | def get_realtime_stock_news_bridge(ticker: str, curr_date: str) -> str: | CODE |
| LOW | core/tools/implementations/legacy_bridge.py | 116 | def get_stock_news_openai_bridge(ticker: str, curr_date: str) -> str: | CODE |
| LOW | core/tools/implementations/legacy_bridge.py | 137 | def get_global_news_openai_bridge(curr_date: str) -> str: | CODE |
| LOW | core/tools/implementations/legacy_bridge.py | 180 | def get_chinese_social_sentiment_bridge(ticker: str, curr_date: str) -> str: | CODE |
| LOW | core/tools/implementations/legacy_bridge.py | 232 | def get_stockstats_indicators_report_bridge(symbol: str, indicator: str, curr_date: str, look_back_days: int = 30) -> st | CODE |
| LOW | core/tools/implementations/legacy_bridge.py | 259 | def get_stockstats_indicators_report_online_bridge(symbol: str, indicator: str, curr_date: str, look_back_days: int = 30 | CODE |
| LOW | core/tools/implementations/legacy_bridge.py | 302 | def get_yfin_data_online_bridge(symbol: str, start_date: str, end_date: str) -> str: | CODE |
| LOW | core/tools/implementations/legacy_bridge.py | 347 | def get_finnhub_company_insider_transactions_bridge(ticker: str, curr_date: str) -> str: | CODE |
| LOW | core/tools/implementations/legacy_bridge.py | 367 | def get_simfin_income_stmt_bridge(ticker: str, freq: str, curr_date: str) -> str: | CODE |
| LOW | core/tools/implementations/legacy_bridge.py | 388 | def get_simfin_balance_sheet_bridge(ticker: str, freq: str, curr_date: str) -> str: | CODE |
| 2824 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | core/assistant/defense.py | 22 | # ── 编造/未溯源检测的正则与重试指令 ─────────────────────────────────────────── | COMMENT |
| MEDIUM | core/assistant/defense.py | 81 | # ── 第4道防线:高风险数字溯源校验 ───────────────────────────────────────────── | COMMENT |
| MEDIUM | core/assistant/defense.py | 427 | # ── 四道主防线 ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | core/assistant/paths.py | 18 | # ─────────────────────────── 路径 ID 与显式优先级 ─────────────────────────── | COMMENT |
| MEDIUM | core/assistant/lexicon.py | 29 | # ─────────────────────────── A 股代码 ─────────────────────────── | COMMENT |
| MEDIUM | core/assistant/lexicon.py | 44 | # ─────────────────────────── 不支持品种(港股/美股)─────────────────────────── | COMMENT |
| MEDIUM | core/assistant/lexicon.py | 115 | # ─────────────────────────── A 股名称目录(全量 + TTL)─────────────────────────── | COMMENT |
| MEDIUM⚡ | core/tools/sector_tools.py | 16 | # ============================================================ | COMMENT |
| MEDIUM⚡ | core/tools/sector_tools.py | 18 | # ============================================================ | COMMENT |
| MEDIUM⚡ | core/tools/sector_tools.py | 886 | # ============================================================ | COMMENT |
| MEDIUM⚡ | core/tools/sector_tools.py | 888 | # ============================================================ | COMMENT |
| MEDIUM⚡ | core/tools/sector_tools.py | 1324 | # ============================================================ | COMMENT |
| MEDIUM⚡ | core/tools/sector_tools.py | 1326 | # ============================================================ | COMMENT |
| MEDIUM | core/tools/mcp/datasource_adapter.py | 33 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | core/tools/mcp/datasource_adapter.py | 35 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM⚡ | core/tools/mcp/datasource_adapter.py | 129 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM⚡ | core/tools/mcp/datasource_adapter.py | 131 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM⚡ | core/tools/mcp/datasource_adapter.py | 195 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM⚡ | core/tools/mcp/datasource_adapter.py | 197 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM⚡ | core/tools/mcp/client_manager.py | 50 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM⚡ | core/tools/mcp/client_manager.py | 52 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM⚡ | core/tools/mcp/client_manager.py | 59 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM⚡ | core/tools/mcp/client_manager.py | 61 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | core/tools/mcp/client_manager.py | 107 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | core/tools/mcp/client_manager.py | 109 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | core/tools/mcp/client_manager.py | 139 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | core/tools/mcp/client_manager.py | 141 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM⚡ | core/tools/mcp/client_manager.py | 169 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM⚡ | core/tools/mcp/client_manager.py | 171 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM⚡ | core/tools/mcp/client_manager.py | 182 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM⚡ | core/tools/mcp/client_manager.py | 184 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM⚡ | core/tools/implementations/legacy_bridge.py | 24 | # ============================================================================== | COMMENT |
| MEDIUM⚡ | core/tools/implementations/legacy_bridge.py | 26 | # ============================================================================== | COMMENT |
| MEDIUM⚡ | core/tools/implementations/legacy_bridge.py | 149 | # ============================================================================== | COMMENT |
| MEDIUM⚡ | core/tools/implementations/legacy_bridge.py | 151 | # ============================================================================== | COMMENT |
| MEDIUM⚡ | core/tools/implementations/legacy_bridge.py | 193 | # ============================================================================== | COMMENT |
| MEDIUM⚡ | core/tools/implementations/legacy_bridge.py | 195 | # ============================================================================== | COMMENT |
| MEDIUM⚡ | core/tools/implementations/legacy_bridge.py | 316 | # ============================================================================== | COMMENT |
| MEDIUM⚡ | core/tools/implementations/legacy_bridge.py | 318 | # ============================================================================== | COMMENT |
| MEDIUM | core/tools/implementations/legacy_bridge.py | 216 | # ============================================================================== | COMMENT |
| MEDIUM | core/tools/implementations/legacy_bridge.py | 218 | # ============================================================================== | COMMENT |
| MEDIUM | core/tools/implementations/fundamentals/option_tools.py | 15 | # ── scipy availability check ──────────────────────────────────────── | COMMENT |
| MEDIUM | core/tools/implementations/fundamentals/option_tools.py | 38 | # ── Black-Scholes 内部计算 ───────────────────────────────────────── | COMMENT |
| MEDIUM | core/tools/implementations/fundamentals/option_tools.py | 94 | # ── Tool 1: Black-Scholes 期权定价 ───────────────────────────────── | COMMENT |
| MEDIUM | core/tools/implementations/fundamentals/option_tools.py | 239 | # ── Tool 2: 隐含波动率 ───────────────────────────────────────────── | COMMENT |
| MEDIUM | core/tools/implementations/fundamentals/option_tools.py | 406 | # ── Tool 3: 希腊字母计算 ─────────────────────────────────────────── | COMMENT |
| MEDIUM | core/tools/implementations/fundamentals/option_tools.py | 618 | # ── Tool 4: 期权策略盈亏图 ───────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | …ools/implementations/fundamentals/statistical_tools.py | 378 | # ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | …ools/implementations/fundamentals/statistical_tools.py | 380 | # ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | …ools/implementations/fundamentals/statistical_tools.py | 555 | # ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | …ools/implementations/fundamentals/statistical_tools.py | 557 | # ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | …ools/implementations/fundamentals/statistical_tools.py | 749 | # ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | …ools/implementations/fundamentals/statistical_tools.py | 751 | # ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | …ools/implementations/fundamentals/statistical_tools.py | 885 | # ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | …ools/implementations/fundamentals/statistical_tools.py | 887 | # ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | …ools/implementations/fundamentals/statistical_tools.py | 1024 | # ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | …ools/implementations/fundamentals/statistical_tools.py | 1026 | # ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …ools/implementations/fundamentals/statistical_tools.py | 27 | # ─── 辅助函数 ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …ools/implementations/fundamentals/statistical_tools.py | 184 | # ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …ools/implementations/fundamentals/statistical_tools.py | 186 | # ──────────────────────────────────────────────────────────────── | COMMENT |
| 596 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | start_dev.py | 10 | CODE | |
| LOW | core/python_runtime.py | 3 | CODE | |
| LOW | core/assistant/metrics.py | 18 | CODE | |
| LOW | core/assistant/metrics.py | 22 | CODE | |
| LOW | core/assistant/reply_gate.py | 18 | CODE | |
| LOW | core/assistant/__init__.py | 14 | CODE | |
| LOW | core/assistant/__init__.py | 14 | CODE | |
| LOW | core/assistant/__init__.py | 14 | CODE | |
| LOW | core/assistant/__init__.py | 14 | CODE | |
| LOW | core/assistant/__init__.py | 14 | CODE | |
| LOW | core/assistant/__init__.py | 14 | CODE | |
| LOW | core/assistant/__init__.py | 14 | CODE | |
| LOW | core/assistant/__init__.py | 14 | CODE | |
| LOW | core/assistant/__init__.py | 14 | CODE | |
| LOW | core/assistant/__init__.py | 14 | CODE | |
| LOW | core/assistant/__init__.py | 14 | CODE | |
| LOW | core/assistant/__init__.py | 14 | CODE | |
| LOW | core/assistant/__init__.py | 14 | CODE | |
| LOW | core/assistant/__init__.py | 29 | CODE | |
| LOW | core/assistant/__init__.py | 30 | CODE | |
| LOW | core/assistant/__init__.py | 31 | CODE | |
| LOW | core/assistant/__init__.py | 31 | CODE | |
| LOW | core/assistant/__init__.py | 31 | CODE | |
| LOW | core/assistant/__init__.py | 31 | CODE | |
| LOW | core/assistant/__init__.py | 31 | CODE | |
| LOW | core/assistant/__init__.py | 38 | CODE | |
| LOW | core/assistant/__init__.py | 38 | CODE | |
| LOW | core/assistant/__init__.py | 39 | CODE | |
| LOW | core/assistant/__init__.py | 39 | CODE | |
| LOW | core/assistant/__init__.py | 39 | CODE | |
| LOW | core/assistant/__init__.py | 39 | CODE | |
| LOW | core/assistant/__init__.py | 39 | CODE | |
| LOW | core/assistant/__init__.py | 39 | CODE | |
| LOW | core/assistant/__init__.py | 39 | CODE | |
| LOW | core/assistant/__init__.py | 39 | CODE | |
| LOW | core/assistant/__init__.py | 39 | CODE | |
| LOW | core/assistant/__init__.py | 39 | CODE | |
| LOW | core/assistant/__init__.py | 39 | CODE | |
| LOW | core/assistant/__init__.py | 39 | CODE | |
| LOW | core/assistant/__init__.py | 39 | CODE | |
| LOW | core/assistant/__init__.py | 39 | CODE | |
| LOW | core/assistant/__init__.py | 39 | CODE | |
| LOW | core/assistant/__init__.py | 39 | CODE | |
| LOW | core/assistant/__init__.py | 39 | CODE | |
| LOW | core/assistant/__init__.py | 39 | CODE | |
| LOW | core/assistant/lexicon.py | 19 | CODE | |
| LOW | core/tools/external_skill_loader.py | 12 | CODE | |
| LOW | core/tools/external_skill_loader.py | 16 | CODE | |
| LOW | core/tools/qmt_market_tools.py | 3 | CODE | |
| LOW | core/tools/registry.py | 11 | CODE | |
| LOW | core/tools/registry.py | 267 | CODE | |
| LOW | core/tools/__init__.py | 7 | CODE | |
| LOW | core/tools/__init__.py | 7 | CODE | |
| LOW | core/tools/__init__.py | 8 | CODE | |
| LOW | core/tools/__init__.py | 8 | CODE | |
| LOW | core/tools/__init__.py | 8 | CODE | |
| LOW | core/tools/__init__.py | 8 | CODE | |
| LOW | core/tools/__init__.py | 8 | CODE | |
| LOW | core/tools/__init__.py | 9 | CODE | |
| LOW | core/tools/__init__.py | 9 | CODE | |
| 1691 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | core/tools/external_skill_loader.py | 124 | except (json.JSONDecodeError, TypeError): | CODE |
| HIGH | core/tools/chip_distribution_tools.py | 114 | except (ValueError, TypeError): | CODE |
| HIGH | core/tools/execution_logger.py | 71 | except RuntimeError: | CODE |
| HIGH | core/tools/mcp/datasource_adapter.py | 145 | except (json.JSONDecodeError, TypeError): | CODE |
| HIGH | …tools/implementations/fundamentals/etf_fundamentals.py | 271 | except (TypeError, ValueError): | CODE |
| HIGH | core/tools/implementations/fundamentals/bond_tools.py | 567 | except (ValueError, TypeError): | CODE |
| HIGH | …plementations/fundamentals/batch_profit_consistency.py | 142 | except Exception: | CODE |
| HIGH | …/tools/implementations/fundamentals/financial_tools.py | 439 | except (ValueError, TypeError): | CODE |
| HIGH | …/tools/implementations/fundamentals/financial_tools.py | 459 | except (ValueError, TypeError): | CODE |
| HIGH | …tions/fundamentals/screening/multi_factor_screening.py | 184 | except Exception: | CODE |
| HIGH | …lementations/fundamentals/screening/value_screening.py | 180 | except Exception: | CODE |
| HIGH | core/tools/implementations/trade_review/trade_info.py | 125 | except Exception: | CODE |
| HIGH | …entations/agent_builder/nanobot_agent_builder_tools.py | 1586 | except Exception: | CODE |
| HIGH | …entations/agent_builder/nanobot_agent_builder_tools.py | 1864 | except Exception: | CODE |
| HIGH | …entations/agent_builder/nanobot_agent_builder_tools.py | 1868 | except Exception: | CODE |
| HIGH | …entations/agent_builder/nanobot_agent_builder_tools.py | 2417 | except Exception: | CODE |
| HIGH | …entations/agent_builder/nanobot_agent_builder_tools.py | 2714 | except Exception: | CODE |
| HIGH | …entations/agent_builder/nanobot_agent_builder_tools.py | 7408 | except Exception: | CODE |
| HIGH | …entations/agent_builder/nanobot_agent_builder_tools.py | 7416 | except Exception: | CODE |
| HIGH | …entations/agent_builder/nanobot_agent_builder_tools.py | 3127 | except Exception: | CODE |
| HIGH | …/implementations/assistant_ops/paper_trading_status.py | 59 | except Exception: | CODE |
| HIGH | …/implementations/assistant_ops/paper_trading_status.py | 82 | except Exception: | CODE |
| HIGH | …re/tools/implementations/assistant_ops/report_query.py | 45 | except ValueError: | CODE |
| HIGH | core/tools/implementations/assistant_ops/web_search.py | 77 | except Exception: | CODE |
| HIGH | core/tools/implementations/assistant_ops/web_search.py | 225 | except Exception: | CODE |
| HIGH | …e/tools/implementations/assistant_ops/running_tasks.py | 156 | except Exception: | CODE |
| HIGH | …e/tools/implementations/assistant_ops/running_tasks.py | 182 | except Exception: | CODE |
| HIGH | …e/tools/implementations/market/stock_screening_tool.py | 147 | except Exception: | CODE |
| HIGH | core/tools/implementations/market/index_market_tools.py | 120 | except (TypeError, ValueError): | CODE |
| HIGH | core/tools/external/recon_tools.py | 211 | except Exception: | CODE |
| HIGH | core/tools/external/recon_tools.py | 453 | except Exception: | CODE |
| HIGH | core/tools/external/sandbox_runner.py | 348 | except json.JSONDecodeError: | CODE |
| HIGH | core/tools/external/iteration_controller.py | 2256 | except (TypeError, ValueError): | CODE |
| HIGH | core/tools/external/iteration_controller.py | 2482 | except Exception: | CODE |
| HIGH | core/tools/external/reconnaissance_controller.py | 1505 | except (json.JSONDecodeError, ValueError): | CODE |
| HIGH | core/tools/external/reconnaissance_controller.py | 1126 | except Exception: | CODE |
| HIGH | core/tools/external/reconnaissance_controller.py | 1535 | except Exception: | CODE |
| HIGH | core/tools/external/reconnaissance_controller.py | 986 | except Exception: | CODE |
| HIGH | core/tools/external/requirement_analyzer.py | 302 | except (json.JSONDecodeError, ValueError): | CODE |
| HIGH | core/tools/external/code_generator.py | 1172 | except json.JSONDecodeError: | CODE |
| HIGH | core/llm/tool_normalizer.py | 203 | except Exception: | CODE |
| HIGH | core/llm/tool_normalizer.py | 245 | except Exception: | CODE |
| HIGH | core/llm/tool_normalizer.py | 260 | except Exception: | CODE |
| HIGH | core/llm/tool_normalizer.py | 286 | except Exception: | CODE |
| HIGH | core/llm/tool_normalizer.py | 330 | except Exception: | CODE |
| HIGH | core/llm/tool_normalizer.py | 351 | except Exception: | CODE |
| HIGH | core/memory/service.py | 545 | except Exception: | CODE |
| HIGH | core/memory/memory_manager.py | 352 | except ValueError: | CODE |
| HIGH | core/memory/qdrant_adapter.py | 171 | except Exception: | CODE |
| HIGH | core/memory/mem0_mongodb_store.py | 340 | except Exception: | CODE |
| HIGH | core/agents/execution_trace_recorder.py | 386 | except Exception: | CODE |
| HIGH | core/agents/analyst.py | 312 | except Exception: | CODE |
| HIGH | core/agents/analyst.py | 296 | except Exception: | CODE |
| HIGH | core/agents/researcher.py | 583 | except Exception: | CODE |
| HIGH | core/agents/researcher.py | 590 | except Exception: | CODE |
| HIGH | core/agents/researcher.py | 623 | except Exception: | CODE |
| HIGH | core/agents/researcher.py | 262 | except Exception: | CODE |
| HIGH | core/agents/researcher.py | 434 | except Exception: | CODE |
| HIGH | core/agents/researcher.py | 247 | except Exception: | CODE |
| HIGH | core/agents/researcher.py | 802 | except: | CODE |
| 235 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | start_dev.py | 27 | CODE | |
| LOW | core/assistant/defense.py | 152 | CODE | |
| LOW | core/assistant/defense.py | 231 | CODE | |
| LOW | core/tools/external_skill_loader.py | 49 | CODE | |
| LOW | core/tools/external_skill_loader.py | 58 | CODE | |
| LOW | core/tools/qmt_market_tools.py | 349 | CODE | |
| LOW | core/tools/qmt_market_tools.py | 731 | CODE | |
| LOW | core/tools/registry.py | 130 | CODE | |
| LOW | core/tools/sector_tools.py | 229 | CODE | |
| LOW | core/tools/sector_tools.py | 338 | CODE | |
| LOW | core/tools/sector_tools.py | 568 | CODE | |
| LOW | core/tools/sector_tools.py | 964 | CODE | |
| LOW | core/tools/sector_tools.py | 995 | CODE | |
| LOW | core/tools/sector_tools.py | 1153 | CODE | |
| LOW | core/tools/sector_tools.py | 1328 | CODE | |
| LOW | core/tools/index_tools.py | 172 | CODE | |
| LOW | core/tools/index_tools.py | 439 | CODE | |
| LOW | core/tools/index_tools.py | 608 | CODE | |
| LOW | core/tools/index_tools.py | 897 | CODE | |
| LOW | core/tools/index_tools.py | 990 | CODE | |
| LOW | core/tools/chip_distribution_tools.py | 39 | CODE | |
| LOW | core/tools/base.py | 188 | CODE | |
| LOW | core/tools/mcp/datasource_adapter.py | 133 | CODE | |
| LOW | core/tools/mcp/client_manager.py | 111 | CODE | |
| LOW | core/tools/mcp/client_manager.py | 118 | CODE | |
| LOW | …s/implementations/fundamentals/cashflow_enhancement.py | 102 | CODE | |
| LOW | …s/implementations/fundamentals/cashflow_enhancement.py | 340 | CODE | |
| LOW | …ols/implementations/fundamentals/stock_fundamentals.py | 630 | CODE | |
| LOW | …ols/implementations/fundamentals/stock_fundamentals.py | 803 | CODE | |
| LOW | …ols/implementations/fundamentals/stock_fundamentals.py | 944 | CODE | |
| LOW | …ools/implementations/fundamentals/macro_cycle_tools.py | 48 | CODE | |
| LOW | …ools/implementations/fundamentals/macro_cycle_tools.py | 140 | CODE | |
| LOW | …ools/implementations/fundamentals/macro_cycle_tools.py | 230 | CODE | |
| LOW | …ools/implementations/fundamentals/macro_cycle_tools.py | 428 | CODE | |
| LOW | …ools/implementations/fundamentals/macro_cycle_tools.py | 739 | CODE | |
| LOW | core/tools/implementations/fundamentals/macro_tools.py | 346 | CODE | |
| LOW | core/tools/implementations/fundamentals/option_tools.py | 762 | CODE | |
| LOW | …tools/implementations/fundamentals/etf_fundamentals.py | 61 | CODE | |
| LOW | …tools/implementations/fundamentals/etf_fundamentals.py | 236 | CODE | |
| LOW | …tools/implementations/fundamentals/etf_fundamentals.py | 304 | CODE | |
| LOW | …ools/implementations/fundamentals/statistical_tools.py | 134 | CODE | |
| LOW | …ools/implementations/fundamentals/statistical_tools.py | 224 | CODE | |
| LOW | …ools/implementations/fundamentals/statistical_tools.py | 924 | CODE | |
| LOW | core/tools/implementations/fundamentals/bond_tools.py | 47 | CODE | |
| LOW | core/tools/implementations/fundamentals/bond_tools.py | 142 | CODE | |
| LOW | core/tools/implementations/fundamentals/bond_tools.py | 469 | CODE | |
| LOW | core/tools/implementations/fundamentals/bond_tools.py | 647 | CODE | |
| LOW | …/tools/implementations/fundamentals/financial_tools.py | 388 | CODE | |
| LOW | …/tools/implementations/fundamentals/financial_tools.py | 497 | CODE | |
| LOW | …/tools/implementations/fundamentals/financial_tools.py | 643 | CODE | |
| LOW | …/tools/implementations/fundamentals/financial_tools.py | 849 | CODE | |
| LOW | …/tools/implementations/fundamentals/financial_tools.py | 945 | CODE | |
| LOW | …/tools/implementations/fundamentals/financial_tools.py | 1041 | CODE | |
| LOW | …/tools/implementations/fundamentals/financial_tools.py | 1197 | CODE | |
| LOW | …/tools/implementations/fundamentals/financial_tools.py | 1239 | CODE | |
| LOW | …s/implementations/fundamentals/dividend_enhancement.py | 116 | CODE | |
| LOW | …tations/fundamentals/valuation/comparable_valuation.py | 56 | CODE | |
| LOW | …lementations/fundamentals/valuation/wacc_calculator.py | 34 | CODE | |
| LOW | …mplementations/fundamentals/valuation/dcf_valuation.py | 34 | CODE | |
| LOW | …entations/fundamentals/valuation/extended_valuation.py | 83 | CODE | |
| 1038 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | core/__init__.py | 73 | __all__ = [ | CODE |
| LOW | core/assistant/defense.py | 19 | logger = logging.getLogger(__name__) | CODE |
| LOW | core/assistant/metrics.py | 24 | logger = logging.getLogger(__name__) | CODE |
| LOW | core/assistant/reply_gate.py | 31 | logger = logging.getLogger(__name__) | CODE |
| LOW | core/assistant/__init__.py | 60 | __all__ = [ | CODE |
| LOW | core/assistant/lexicon.py | 27 | logger = logging.getLogger(__name__) | CODE |
| LOW | core/tools/external_skill_loader.py | 20 | logger = logging.getLogger(__name__) | CODE |
| LOW | core/tools/qmt_market_tools.py | 13 | logger = logging.getLogger(__name__) | CODE |
| LOW | core/tools/registry.py | 13 | logger = logging.getLogger(__name__) | CODE |
| LOW | core/tools/__init__.py | 13 | __all__ = [ | CODE |
| LOW⚡ | core/tools/sector_tools.py | 14 | logger = logging.getLogger(__name__) | CODE |
| LOW | core/tools/index_tools.py | 17 | logger = logging.getLogger(__name__) | CODE |
| LOW | core/tools/context.py | 12 | logger = logging.getLogger(__name__) | CODE |
| LOW | core/tools/context.py | 165 | def set_latest_nanobot_intent(intent_dict: Dict[str, Any]) -> None: | CODE |
| LOW | core/tools/loader.py | 14 | logger = logging.getLogger(__name__) | CODE |
| LOW | core/tools/chip_distribution_tools.py | 16 | logger = logging.getLogger(__name__) | CODE |
| LOW | core/tools/execution_logger.py | 12 | logger = logging.getLogger(__name__) | CODE |
| LOW | core/tools/custom_tool.py | 15 | logger = logging.getLogger(__name__) | CODE |
| LOW | core/tools/base.py | 13 | logger = logging.getLogger(__name__) | CODE |
| LOW | core/tools/mcp/datasource_adapter.py | 16 | logger = logging.getLogger(__name__) | CODE |
| LOW | core/tools/mcp/__init__.py | 13 | __all__ = ["MCPClientManager", "get_mcp_client_manager"] | CODE |
| LOW | core/tools/mcp/client_manager.py | 15 | logger = logging.getLogger(__name__) | CODE |
| LOW | core/tools/implementations/__init__.py | 197 | __all__ = [ | CODE |
| LOW⚡ | core/tools/implementations/legacy_bridge.py | 10 | logger = logging.getLogger(__name__) | CODE |
| LOW | …s/implementations/fundamentals/cashflow_enhancement.py | 31 | logger = logging.getLogger(__name__) | CODE |
| LOW | …s/implementations/fundamentals/cashflow_enhancement.py | 574 | __all__ = [ | CODE |
| LOW | …ols/implementations/fundamentals/stock_fundamentals.py | 20 | logger = logging.getLogger(__name__) | CODE |
| LOW | …ools/implementations/fundamentals/macro_cycle_tools.py | 15 | logger = logging.getLogger(__name__) | CODE |
| LOW | …ools/implementations/fundamentals/macro_cycle_tools.py | 947 | __all__ = [ | CODE |
| LOW | core/tools/implementations/fundamentals/macro_tools.py | 14 | logger = logging.getLogger(__name__) | CODE |
| LOW | core/tools/implementations/fundamentals/macro_tools.py | 427 | __all__ = ["get_macro_dashboard", "get_yield_curve_analysis"] | CODE |
| LOW | core/tools/implementations/fundamentals/__init__.py | 42 | __all__ = [ | CODE |
| LOW | …s/implementations/fundamentals/valuation_excel_tool.py | 26 | logger = logging.getLogger(__name__) | CODE |
| LOW | core/tools/implementations/fundamentals/event_study.py | 18 | logger = logging.getLogger(__name__) | CODE |
| LOW | core/tools/implementations/fundamentals/event_study.py | 289 | __all__ = ["get_event_study"] | CODE |
| LOW | core/tools/implementations/fundamentals/option_tools.py | 13 | logger = logging.getLogger(__name__) | CODE |
| LOW | core/tools/implementations/fundamentals/option_tools.py | 997 | __all__ = [ | CODE |
| LOW | …tools/implementations/fundamentals/etf_fundamentals.py | 16 | logger = logging.getLogger(__name__) | CODE |
| LOW | …ls/implementations/fundamentals/factor_bundle_tools.py | 17 | logger = logging.getLogger(__name__) | CODE |
| LOW | …ls/implementations/fundamentals/factor_bundle_tools.py | 351 | __all__ = [ | CODE |
| LOW | …ools/implementations/fundamentals/statistical_tools.py | 24 | logger = logging.getLogger(__name__) | CODE |
| LOW | …ools/implementations/fundamentals/statistical_tools.py | 1174 | __all__ = [ | CODE |
| LOW | core/tools/implementations/fundamentals/bond_tools.py | 15 | logger = logging.getLogger(__name__) | CODE |
| LOW | core/tools/implementations/fundamentals/bond_tools.py | 800 | __all__ = [ | CODE |
| LOW | …plementations/fundamentals/batch_profit_consistency.py | 16 | logger = logging.getLogger(__name__) | CODE |
| LOW | …plementations/fundamentals/standard_financial_tools.py | 48 | logger = logging.getLogger(__name__) | CODE |
| LOW | …/tools/implementations/fundamentals/financial_tools.py | 22 | logger = logging.getLogger(__name__) | CODE |
| LOW | …s/implementations/fundamentals/dividend_enhancement.py | 25 | logger = logging.getLogger(__name__) | CODE |
| LOW | …s/implementations/fundamentals/dividend_enhancement.py | 421 | __all__ = [ | CODE |
| LOW | …/implementations/fundamentals/management_assessment.py | 16 | logger = logging.getLogger(__name__) | CODE |
| LOW | …tations/fundamentals/valuation/comparable_valuation.py | 18 | logger = logging.getLogger(__name__) | CODE |
| LOW | …tations/fundamentals/valuation/comparable_valuation.py | 283 | __all__ = ["get_comparable_company_valuation"] | CODE |
| LOW | …lementations/fundamentals/valuation/wacc_calculator.py | 12 | logger = logging.getLogger(__name__) | CODE |
| LOW | …lementations/fundamentals/valuation/wacc_calculator.py | 232 | __all__ = ["get_wacc_calculation"] | CODE |
| LOW | …mplementations/fundamentals/valuation/dcf_valuation.py | 12 | logger = logging.getLogger(__name__) | CODE |
| LOW | …mplementations/fundamentals/valuation/dcf_valuation.py | 316 | __all__ = ["get_dcf_valuation"] | CODE |
| LOW | …entations/fundamentals/valuation/extended_valuation.py | 13 | logger = logging.getLogger(__name__) | CODE |
| LOW | …entations/fundamentals/valuation/extended_valuation.py | 1683 | __all__ = [ | CODE |
| LOW | …tions/fundamentals/screening/multi_factor_screening.py | 15 | logger = logging.getLogger(__name__) | CODE |
| LOW | …tions/fundamentals/screening/multi_factor_screening.py | 457 | __all__ = ["get_multi_factor_screening"] | CODE |
| 444 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | …s/implementations/fundamentals/valuation_excel_tool.py | 116 | 生成估值测算 Excel 表格(盈利推演 + 估值情景)。 Args: symbol: A 股股票代码,6 位数字 context_notes: 可选研究结论摘要 forecast_ | STRING |
| HIGH | …ls/implementations/fundamentals/factor_bundle_tools.py | 63 | 获取标准化价值因子包。 Args: symbol: A 股股票代码,如 "600519"、"000001" Returns: str: JSON 字符串,字段说明—— | STRING |
| HIGH | …ls/implementations/fundamentals/factor_bundle_tools.py | 144 | 获取标准化质量因子包。 Args: symbol: A 股股票代码,如 "600519"、"000001" Returns: str: JSON 字符串,字段说明—— | STRING |
| HIGH | …ls/implementations/fundamentals/factor_bundle_tools.py | 239 | 获取标准化成长/现金流因子包。 Args: symbol: A 股股票代码,如 "600519"、"000001" Returns: str: JSON 字符串,字段说明—— | STRING |
| HIGH | …lementations/fundamentals/valuation/wacc_calculator.py | 40 | WACC 加权平均资本成本计算 Args: symbol: A 股股票代码,如 600519 risk_free_rate: 无风险利率(小数形式,如 0.025 表示 2.5%),默认 0.025 | STRING |
| HIGH | …mplementations/fundamentals/valuation/dcf_valuation.py | 42 | DCF 两阶段估值模型 Args: symbol: A 股股票代码,如 600519 growth_rate: 预测期年化增长率(小数形式,如 0.15 表示 15%),默认 None 由历史营收数 | STRING |
| HIGH | …entations/fundamentals/valuation/extended_valuation.py | 94 | DCF 三阶段估值模型:高增长 → 过渡(线性递减) → 永续 Args: symbol: A 股股票代码,如 600519 growth_rate: 预测期年化增长率(小数形式),默认 None | STRING |
| HIGH | …entations/fundamentals/valuation/extended_valuation.py | 408 | 股利贴现模型(Gordon Growth Model) Args: symbol: A 股股票代码,如 600519 growth_rate: 股利永续增长率(小数形式),默认 0.05;若 ≥ r | STRING |
| HIGH | …entations/fundamentals/valuation/extended_valuation.py | 535 | 剩余收益估值模型:RI_t = (ROE_t - r_e) × BV_{t-1} Args: symbol: A 股股票代码,如 600519 growth_years: 预测期年数,默认 5,自动 | STRING |
| HIGH | …entations/fundamentals/valuation/extended_valuation.py | 1067 | PEG = PE / Earnings_Growth_Rate Args: symbol: A 股股票代码,如 600519 Returns: str: JSON 字符串,包含以下可能结构 | STRING |
| HIGH | …entations/fundamentals/valuation/extended_valuation.py | 1194 | Graham Number = √(22.5 × EPS × BVPS) Args: symbol: A 股股票代码,如 600519 Returns: str: JSON 字符串,包含以 | STRING |
| HIGH | …entations/fundamentals/valuation/extended_valuation.py | 1337 | CAPM = Rf + β × ERP Args: symbol: A 股股票代码,如 600519 risk_free_rate: 无风险利率(小数形式,如 0.025 表示 2.5%),默认 0 | STRING |
| HIGH | …entations/fundamentals/valuation/extended_valuation.py | 1473 | 基于增长质量评分调整 PE Args: symbol: A 股股票代码,如 600519 Returns: str: JSON 字符串,包含以下可能结构—— 错误情形返回 | STRING |
| HIGH | …plementations/assistant_ops/export_table_excel_tool.py | 199 | 把对话中的 Markdown 表格导出为 Excel 文件。 Args: title: 表格主题(文件名) markdown_tables: Markdown 表格原文,多 sheet 用 ## 标 | STRING |
| HIGH | core/tools/implementations/portfolio/quant_tools.py | 316 | 基于几何布朗运动进行蒙特卡洛价格模拟。预测未来价格分布及风险指标。 Args: symbol: A 股股票代码,如 600519、000001 days: 模拟的交易日数,默认 252(约 1 年) | STRING |
| HIGH | …implementations/market/technical_factor_bundle_tool.py | 81 | 获取标准化技术因子包,从 MongoDB 物化快照中读取 MA20、RSI14、KDJ、MACD 等核心技术指标。 Args: symbol: A 股股票代码,如 600519、000001 Return | STRING |
| HIGH | core/tools/implementations/technical/indicators.py | 216 | 根据 IndicatorSpec 在 DataFrame 上计算单个技术指标并追加结果列。 支持的指标名称:ma、ema、macd、rsi、boll、atr、kdj。 Args: df: 包含价格数据的 | STRING |
| HIGH | core/config/tool_config_manager.py | 63 | 获取工具配置 Args: tool_id: 工具ID Returns: 工具配置字典,包含: | STRING |
| HIGH | core/skill_runtime/fundamental_factors.py | 1116 | 获取股票的价值因子 bundle(value_core)。 Args: symbol: A 股股票代码(6 位数字或含交易所前后缀) allow_remote_fetch: 透传给 get_shar | STRING |
| HIGH | core/skill_runtime/fundamental_factors.py | 1208 | 获取股票的质量因子 bundle(quality_core)。 Args: symbol: A 股股票代码(6 位数字或含交易所前后缀) Returns: dict: 字段说明(合并 _b | STRING |
| HIGH | core/skill_runtime/fundamental_factors.py | 1423 | 获取股票的成长与现金流因子 bundle(growth_cashflow_core)。 Args: symbol: A 股股票代码(6 位数字或含交易所前后缀) Returns: dict | STRING |
| HIGH | app/routers/skills.py | 2706 | 将本地 Skill 包导入 MongoDB Args: skill_dir: Skill 包目录绝对路径 db: MongoDB 数据库 source_type: 来源类型(claw | STRING |
| HIGH | app/utils/thread_safe_db.py | 33 | 线程安全的 bulk_write 操作 自动检测运行环境: - 在主线程中:使用异步 MongoDB 客户端 - 在线程池中:使用同步 MongoDB 客户端 Args: | STRING |
| HIGH | app/services/unified_analysis_service.py | 392 | 执行股票分析 Args: stock_code: 股票代码 analysis_date: 分析日期,默认今天 workflow_id | STRING |
| HIGH | app/services/unified_analysis_service.py | 632 | 批量分析股票 Args: stock_codes: 股票代码列表 analysis_date: 分析日期 workflow_id: | STRING |
| HIGH | app/services/unified_analysis_engine.py | 138 | 执行分析任务 Args: task: 统一分析任务对象 progress_callback: 进度回调函数 callback(progress: int, m | STRING |
| HIGH | app/services/unified_analysis_engine.py | 417 | 选择执行引擎 Args: requested_engine: 请求的引擎类型 (auto/workflow/legacy/llm) default_engine: 默认引擎类 | STRING |
| HIGH | app/services/unified_analysis_engine.py | 779 | 通过旧引擎执行(TradingAgentsGraph)— 已停用 v3.0 起旧版 legacy 引擎已停用,所有入口已封堵。 详见 docs/99-archive/deprecated-features/ | STRING |
| HIGH | app/services/portfolio_service.py | 3040 | 校验成本价是否在买入日历史数据的最高价和最低价范围内。 校验策略: 1. 优先用数据库中的前复权数据校验(大多数情况成本价就是前复权价格) 2. 若前复权校验失败,实时调用 | STRING |
| HIGH | app/services/portfolio_service.py | 4379 | 使用旧版 simple_analysis_service 获取分析报告(降级方案)— 已停用 v3.0 起旧版 legacy 引擎已停用(死代码,无调用者)。 详见 docs/99-archive/depr | STRING |
| HIGH | app/services/scheduler_service.py | 345 | 手动触发任务执行 注意:如果任务处于暂停状态,会先临时恢复任务,执行一次后不会自动暂停 Args: job_id: 任务ID kwargs | STRING |
| HIGH | tradingagents/core/engine/data_access_manager.py | 57 | 根据契约获取 Agent 的输入数据 按契约声明的输入层和字段聚合数据: - 指定 fields 时只返回这些字段 - fields 为空时返回整层所有数据 | STRING |
| HIGH | tradingagents/config/mongodb_utils.py | 19 | 构建 MongoDB 连接字符串 优先级: 1. 如果设置了 MONGODB_CONNECTION_STRING 环境变量,直接使用 2. 如果传入了参数,使用传入的参数 3. 否则从环境 | STRING |
| HIGH | tradingagents/config/mongodb_utils.py | 116 | 构建 Redis 连接字符串 优先级: 1. 如果设置了 REDIS_URL 环境变量,直接使用 2. 如果传入了参数,使用传入的参数 3. 否则从环境变量读取 REDIS_HOST, REDIS | STRING |
| HIGH | …gagents/dataflows/providers/us/alpha_vantage_common.py | 167 | 发起 Alpha Vantage API 请求 Args: function: API 函数名(如 NEWS_SENTIMENT, OVERVIEW 等) params: 请求参数 | STRING |
| HIGH | skills/ifind-repilot-news-search/scripts/fetch_data.py | 65 | 查询金融资讯数据 Args: query: 查询问句 start_date: 开始日期,格式为 YYYY-MM-DDTHH:MM:SS (例如 2025-01-01T00:00:00) | STRING |
| HIGH | …find-repilot-finance-data-search/scripts/fetch_data.py | 55 | 查询金融数据 Args: query: 查询问句 Returns: API 返回的 JSON 数据 Raises: ValueError: 参数无效或认 | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH⚡ | core/workflow/generator/workflow_planner.py | 121 | {{"id": "e1", "source": "start", "target": "parallel_1", "type": "normal", "condition": null}} | CODE |
| HIGH⚡ | core/workflow/generator/workflow_planner.py | 131 | "default": null, | CODE |
| HIGH⚡ | core/workflow/generator/workflow_planner.py | 134 | "options": null, | CODE |
| HIGH⚡ | core/workflow/generator/workflow_planner.py | 135 | "option_labels": null, | CODE |
| HIGH⚡ | core/workflow/generator/workflow_planner.py | 136 | "min": null, | CODE |
| HIGH⚡ | core/workflow/generator/workflow_planner.py | 137 | "max": null, | CODE |
| HIGH⚡ | core/workflow/generator/workflow_planner.py | 151 | "min": null, | CODE |
| HIGH⚡ | core/workflow/generator/workflow_planner.py | 152 | "max": null, | CODE |
| HIGH⚡ | app/services/intelligent_screening_v2.py | 154 | "target_metric": "roe" | "pe" | "pb" | "margin" | "debt" | "cashflow" | "other" | null, | CODE |
| HIGH⚡ | app/services/intelligent_screening_v2.py | 155 | "adjust_direction": "loosen" | "tighten" | null, | CODE |
| HIGH⚡ | app/services/intelligent_screening_v2.py | 156 | "target_value": "10%" | "20" | "30%" | null, | CODE |
| HIGH⚡ | app/services/intelligent_screening_v2.py | 157 | "stock_code": "002582" | "600519" | null, | CODE |
| HIGH⚡ | app/services/intelligent_screening_v2.py | 158 | "stock_name": "好想你" | "贵州茅台" | null, | CODE |
| HIGH⚡ | app/services/intelligent_screening_service.py | 525 | "adjustment_target": "roe" | "pe" | "pb" | "margin" | "debt" | "cashflow" | "other" | null, | CODE |
| HIGH⚡ | app/services/intelligent_screening_service.py | 526 | "adjustment_direction": "loosen" | "tighten" | null, | CODE |
| HIGH⚡ | app/services/intelligent_screening_service.py | 527 | "explicit_parameters": "用户明确提到的具体参数,如'把ROE放宽到10%'中的'10%'" | null, | CODE |
| HIGH⚡ | app/services/intelligent_screening_service.py | 492 | "adjustment_target": "roe" | "pe" | "pb" | "margin" | "other" | null, | STRING |
| HIGH⚡ | app/services/intelligent_screening_service.py | 493 | "adjustment_direction": "loosen" | "tighten" | null, | STRING |
| HIGH⚡ | app/services/intelligent_screening_service.py | 494 | "explicit_parameters": str | null, | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | core/agents/base.py | 0 | ✅ 工具调用已完成,所有需要的数据都已获取。 🚫 **严格禁止再次调用工具** 📝 **现在请立即执行**: 基于上述工具返回的真实数据,按照之前的分析要求和输出格式,直接撰写完整的持仓基本面分析报告。 ⚠️ **重要提醒**: - 不要返 | STRING |
| HIGH | core/agents/adapters/position/technical_analyst_v2.py | 0 | ✅ 工具调用已完成,所有需要的数据都已获取。 🚫 **严格禁止再次调用工具** 📝 **现在请立即执行**: 基于上述工具返回的真实数据,按照之前的分析要求和输出格式,直接撰写完整的持仓基本面分析报告。 ⚠️ **重要提醒**: - 不要返 | STRING |
| HIGH | core/agents/adapters/position/fundamental_analyst_v2.py | 0 | ✅ 工具调用已完成,所有需要的数据都已获取。 🚫 **严格禁止再次调用工具** 📝 **现在请立即执行**: 基于上述工具返回的真实数据,按照之前的分析要求和输出格式,直接撰写完整的持仓基本面分析报告。 ⚠️ **重要提醒**: - 不要返 | STRING |
| HIGH | core/agents/adapters/risky_analyst_v2.py | 0 | 构建系统提示词 args: state: 工作流状态(可选,用于提取变量如 company_name, ticker 等) returns: 系统提示词 | STRING |
| HIGH | core/agents/adapters/safe_analyst_v2.py | 0 | 构建系统提示词 args: state: 工作流状态(可选,用于提取变量如 company_name, ticker 等) returns: 系统提示词 | STRING |
| HIGH | core/agents/adapters/neutral_analyst_v2.py | 0 | 构建系统提示词 args: state: 工作流状态(可选,用于提取变量如 company_name, ticker 等) returns: 系统提示词 | STRING |
| HIGH | core/agents/adapters/social_analyst_v2.py | 0 | 构建系统提示词(参考 fundamentals_analyst_v2 的实现) args: market_type: 市场类型(a股/港股/美股)(保留以兼容基类) context: agentcontext 对象(用于调试模式) stat | STRING |
| HIGH | core/agents/adapters/sector_analyst_v2.py | 0 | 构建系统提示词(参考 fundamentals_analyst_v2 的实现) args: market_type: 市场类型(a股/港股/美股)(保留以兼容基类) context: agentcontext 对象(用于调试模式) stat | STRING |
| HIGH | core/agents/adapters/market_analyst_v2.py | 0 | 构建系统提示词(参考 fundamentals_analyst_v2 的实现) args: market_type: 市场类型(a股/港股/美股)(保留以兼容基类) context: agentcontext 对象(用于调试模式) stat | STRING |
| HIGH | core/agents/adapters/news_analyst_v2.py | 0 | 构建系统提示词(参考 fundamentals_analyst_v2 的实现) args: market_type: 市场类型(a股/港股/美股)(保留以兼容基类) context: agentcontext 对象(用于调试模式) stat | STRING |
| HIGH | core/agents/adapters/index_analyst_v2.py | 0 | 构建系统提示词(参考 fundamentals_analyst_v2 的实现) args: market_type: 市场类型(a股/港股/美股)(保留以兼容基类) context: agentcontext 对象(用于调试模式) stat | STRING |
| HIGH | core/agents/adapters/social_analyst_v2.py | 0 | 构建用户提示词(参考 research_manager_v2 和 fundamentals_analyst_v2 的实现) args: ticker: 股票代码 analysis_date: 分析日期 tool_data: 工具返回的数据( | STRING |
| HIGH | core/agents/adapters/sector_analyst_v2.py | 0 | 构建用户提示词(参考 research_manager_v2 和 fundamentals_analyst_v2 的实现) args: ticker: 股票代码 analysis_date: 分析日期 tool_data: 工具返回的数据( | STRING |
| HIGH | core/agents/adapters/news_analyst_v2.py | 0 | 构建用户提示词(参考 research_manager_v2 和 fundamentals_analyst_v2 的实现) args: ticker: 股票代码 analysis_date: 分析日期 tool_data: 工具返回的数据( | STRING |
| HIGH | core/agents/adapters/index_analyst_v2.py | 0 | 构建用户提示词(参考 research_manager_v2 和 fundamentals_analyst_v2 的实现) args: ticker: 股票代码 analysis_date: 分析日期 tool_data: 工具返回的数据( | STRING |
| HIGH | core/agents/adapters/risk_manager_v2.py | 0 | 构建系统提示词(参考 fundamentals_analyst_v2 的实现) args: state: 工作流状态(用于提取模板变量) returns: 系统提示词 | STRING |
| HIGH | core/agents/adapters/trader_v2.py | 0 | 构建系统提示词(参考 fundamentals_analyst_v2 的实现) args: state: 工作流状态(用于提取模板变量) returns: 系统提示词 | STRING |
| HIGH | core/agents/adapters/research_manager_v2.py | 0 | 构建系统提示词(参考 fundamentals_analyst_v2 的实现) args: state: 工作流状态(用于提取模板变量) returns: 系统提示词 | STRING |
| HIGH | app/worker/us_data_service.py | 0 | 标准化股票信息格式 args: stock_info: 原始股票信息 source: 数据源 returns: dict: 标准化后的股票信息 | STRING |
| HIGH | app/worker/hk_data_service.py | 0 | 标准化股票信息格式 args: stock_info: 原始股票信息 source: 数据源 returns: dict: 标准化后的股票信息 | STRING |
| HIGH | app/worker/us_sync_service.py | 0 | 标准化股票信息格式 args: stock_info: 原始股票信息 source: 数据源 returns: dict: 标准化后的股票信息 | STRING |
| HIGH | app/worker/hk_sync_service.py | 0 | 标准化股票信息格式 args: stock_info: 原始股票信息 source: 数据源 returns: dict: 标准化后的股票信息 | STRING |
| HIGH | app/worker/baostock_sync_service.py | 0 | 获取最后同步日期 args: symbol: 股票代码,如果提供则返回该股票的最后日期+1天 returns: 日期字符串 (yyyy-mm-dd) | STRING |
| HIGH | app/worker/tushare_sync_service.py | 0 | 获取最后同步日期 args: symbol: 股票代码,如果提供则返回该股票的最后日期+1天 returns: 日期字符串 (yyyy-mm-dd) | STRING |
| HIGH | app/worker/akshare_sync_service.py | 0 | 获取最后同步日期 args: symbol: 股票代码,如果提供则返回该股票的最后日期+1天 returns: 日期字符串 (yyyy-mm-dd) | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | core/skill_runtime/standard_financial_apis.py | 231 | CODE | |
| MEDIUM | core/skill_runtime/standard_financial_apis.py | 232 | CODE | |
| MEDIUM | core/workflow/builder.py | 2298 | CODE | |
| MEDIUM | core/workflow/builder.py | 2321 | CODE | |
| MEDIUM | core/workflow/builder.py | 2324 | CODE | |
| MEDIUM | core/workflow/builder.py | 2326 | CODE | |
| MEDIUM | app/utils/report_formatter.py | 41 | CODE | |
| MEDIUM | app/utils/report_formatter.py | 43 | CODE | |
| MEDIUM | app/services/unified_analysis_engine.py | 802 | CODE | |
| MEDIUM | app/services/unified_analysis_engine.py | 805 | CODE | |
| MEDIUM | app/services/unified_analysis_engine.py | 809 | CODE | |
| MEDIUM | app/services/unified_analysis_engine.py | 812 | CODE | |
| MEDIUM | app/services/unified_analysis_engine.py | 813 | CODE | |
| MEDIUM | app/services/unified_analysis_engine.py | 815 | CODE | |
| MEDIUM | app/services/unified_analysis_engine.py | 819 | CODE | |
| MEDIUM | app/services/unified_analysis_engine.py | 822 | CODE | |
| MEDIUM | app/services/unified_analysis_engine.py | 825 | CODE | |
| MEDIUM | app/services/unified_analysis_engine.py | 828 | CODE | |
| MEDIUM | app/services/unified_analysis_engine.py | 837 | CODE | |
| MEDIUM | app/services/portfolio_service.py | 4305 | CODE | |
| MEDIUM | app/services/portfolio_service.py | 4402 | CODE | |
| MEDIUM | app/services/portfolio_service.py | 4403 | CODE | |
| MEDIUM | app/services/portfolio_service.py | 4404 | CODE | |
| MEDIUM | app/services/portfolio_service.py | 4405 | CODE | |
| MEDIUM | app/services/portfolio_service.py | 4407 | CODE | |
| MEDIUM | app/services/portfolio_service.py | 4409 | CODE | |
| MEDIUM | app/services/portfolio_service.py | 4412 | CODE | |
| MEDIUM | app/services/portfolio_service.py | 4414 | CODE | |
| MEDIUM | app/services/portfolio_service.py | 4419 | CODE | |
| MEDIUM | app/services/portfolio_service.py | 4425 | CODE | |
| MEDIUM | app/services/portfolio_service.py | 4462 | CODE | |
| MEDIUM | app/services/portfolio_service.py | 4468 | CODE | |
| MEDIUM | app/services/portfolio_service.py | 4474 | CODE | |
| MEDIUM | app/services/portfolio_service.py | 4481 | CODE | |
| MEDIUM | app/services/portfolio_service.py | 4484 | CODE | |
| MEDIUM | app/services/portfolio_service.py | 4495 | CODE | |
| MEDIUM | app/services/portfolio_service.py | 4496 | CODE | |
| MEDIUM | app/services/portfolio_service.py | 4499 | CODE | |
| MEDIUM | app/services/portfolio_service.py | 4502 | CODE | |
| MEDIUM | app/services/simple_analysis_service.py | 939 | CODE | |
| MEDIUM | app/services/simple_analysis_service.py | 941 | CODE | |
| MEDIUM | app/services/simple_analysis_service.py | 947 | CODE | |
| MEDIUM | app/services/simple_analysis_service.py | 949 | CODE | |
| MEDIUM | app/services/simple_analysis_service.py | 1157 | CODE | |
| MEDIUM | app/services/simple_analysis_service.py | 1160 | CODE | |
| MEDIUM | app/services/simple_analysis_service.py | 1168 | CODE | |
| MEDIUM | app/services/simple_analysis_service.py | 1169 | CODE | |
| MEDIUM | app/services/simple_analysis_service.py | 1491 | CODE | |
| MEDIUM | app/services/simple_analysis_service.py | 1492 | CODE | |
| MEDIUM | app/services/simple_analysis_service.py | 1493 | CODE | |
| MEDIUM | app/services/simple_analysis_service.py | 1494 | CODE | |
| MEDIUM | app/services/simple_analysis_service.py | 1502 | CODE | |
| MEDIUM | app/services/simple_analysis_service.py | 1503 | CODE | |
| MEDIUM | app/services/simple_analysis_service.py | 1526 | CODE | |
| MEDIUM | app/services/analysis_service.py | 124 | CODE | |
| MEDIUM | app/services/analysis_service.py | 126 | CODE | |
| MEDIUM | app/services/analysis_service.py | 137 | CODE | |
| MEDIUM | app/services/analysis_service.py | 155 | CODE | |
| MEDIUM | app/services/analysis_service.py | 315 | CODE | |
| MEDIUM | app/services/analysis_service.py | 735 | CODE | |
| 3 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | core/workflow/builder.py | 579 | if model_api_key and model_api_key.strip() and model_api_key != "your-api-key" and not model_api_key.startsw | CODE |
| HIGH | core/workflow/builder.py | 584 | if provider_api_key and provider_api_key.strip() and provider_api_key != "your-api-key" and not provider | CODE |
| HIGH | core/workflow/builder.py | 745 | if pk and pk.strip() and pk != "your-api-key" and not pk.startswith("sk-xxx"): | CODE |
| HIGH | core/workflow/builder.py | 750 | if model_api_key and model_api_key.strip() and model_api_key != "your-api-key": | CODE |
| HIGH | app/services/skill_credential_service.py | 251 | - `--set-api-key <your_api_key>` | STRING |
| HIGH | app/services/unified_analysis_engine.py | 290 | if model_api_key and model_api_key.strip() and model_api_key != "your-api-key" and not model_api_key.startswith( | CODE |
| HIGH | app/services/unified_analysis_engine.py | 295 | if provider_api_key and provider_api_key.strip() and provider_api_key != "your-api-key" and not provider_api | CODE |
| HIGH | app/services/unified_analysis_engine.py | 347 | if deep_model_api_key and deep_model_api_key.strip() and deep_model_api_key != "your-api-key" and not deep_m | CODE |
| HIGH | app/services/unified_analysis_engine.py | 354 | if deep_provider_api_key and deep_provider_api_key.strip() and deep_provider_api_key != "your-api-ke | CODE |
| HIGH | tests/test_dashscope_adapter_fix.py | 286 | print(" Windows: set DASHSCOPE_API_KEY=your_api_key") | CODE |
| HIGH | tests/test_dashscope_adapter_fix.py | 287 | print(" Linux/Mac: export DASHSCOPE_API_KEY=your_api_key") | CODE |
| HIGH⚡ | tests/integration/test_dashscope_integration.py | 44 | print("💡 请设置: set DASHSCOPE_API_KEY=your_api_key") | CODE |
| HIGH⚡ | tests/integration/test_dashscope_integration.py | 51 | print("💡 请设置: set FINNHUB_API_KEY=your_api_key") | CODE |
| HIGH | docs/02-user-guide/user-manual-v3.0.md | 3085 | "MCP_API_KEY": "your-api-key" | CODE |
| HIGH | …dingagents/dataflows/providers/examples/example_sdk.py | 367 | provider = ExampleSDKProvider(api_key="your_api_key") | CODE |
| HIGH | …dingagents/dataflows/providers/examples/example_sdk.py | 388 | async with ExampleSDKProvider(api_key="your_api_key") as provider: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | app/services/basics_sync_service.py | 224 | # Step 1: Fetch stock basic list from Tushare (blocking -> thread) | COMMENT |
| LOW⚡ | app/services/basics_sync_service.py | 229 | # Step 2: Determine latest trade_date and fetch daily_basic for financial metrics (blocking -> thread) | COMMENT |
| LOW⚡ | app/services/basics_sync_service.py | 237 | # Step 3: Upsert into MongoDB (batched bulk writes) | COMMENT |
| LOW⚡ | app/services/multi_source_basics_sync_service.py | 345 | # Step 2: 尝试从数据源获取股票列表(排除本地数据源) | COMMENT |
| LOW⚡ | app/services/multi_source_basics_sync_service.py | 353 | # Step 3: 获取最新交易日期和财务数据 | COMMENT |
| LOW | app/services/multi_source_basics_sync_service.py | 326 | # Step 1: 获取数据源管理器 | COMMENT |
| LOW | app/services/multi_source_basics_sync_service.py | 402 | # Step 5: 处理和更新数据(分批处理) | COMMENT |
| LOW | app/services/multi_source_basics_sync_service.py | 509 | # Step 7: 更新统计信息 | COMMENT |
| LOW⚡ | tests/test_mcp_endpoint.py | 55 | # Step 1: initialize | COMMENT |
| LOW | tests/test_mcp_endpoint.py | 89 | # Step 2: tools/list | COMMENT |
| LOW | tests/skills/test_create_moat_skill.py | 81 | # Step 1: 启动会话 | COMMENT |
| LOW | tests/skills/test_create_moat_skill.py | 109 | # Step 2: 如果需要多轮对话,回应 AI 的问题 | COMMENT |
| LOW | tests/skills/test_create_moat_skill.py | 136 | # Step 3: 确认规格并触发代码生成(异步) | COMMENT |
| LOW | tests/skills/test_create_moat_skill.py | 193 | # Step 5: 测试生成的 skill | COMMENT |
| LOW⚡ | cli/main.py | 559 | # Step 1: Market selection | COMMENT |
| LOW⚡ | cli/main.py | 569 | # Step 2: Ticker symbol | COMMENT |
| LOW⚡ | cli/main.py | 579 | # Step 3: Analysis date | COMMENT |
| LOW⚡ | cli/main.py | 602 | # Step 5: Research depth | COMMENT |
| LOW⚡ | cli/main.py | 611 | # Step 6: LLM Provider | COMMENT |
| LOW⚡ | cli/main.py | 620 | # Step 7: Thinking agents | COMMENT |
| LOW | cli/main.py | 590 | # Step 4: Select analysts | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | app/services/basics_sync_service.py | 224 | # Step 1: Fetch stock basic list from Tushare (blocking -> thread) | COMMENT |
| LOW⚡ | app/services/basics_sync_service.py | 229 | # Step 2: Determine latest trade_date and fetch daily_basic for financial metrics (blocking -> thread) | COMMENT |
| LOW⚡ | app/services/basics_sync_service.py | 237 | # Step 3: Upsert into MongoDB (batched bulk writes) | COMMENT |
| LOW⚡ | app/services/multi_source_basics_sync_service.py | 345 | # Step 2: 尝试从数据源获取股票列表(排除本地数据源) | COMMENT |
| LOW⚡ | app/services/multi_source_basics_sync_service.py | 353 | # Step 3: 获取最新交易日期和财务数据 | COMMENT |
| LOW | app/services/multi_source_basics_sync_service.py | 326 | # Step 1: 获取数据源管理器 | COMMENT |
| LOW | app/services/multi_source_basics_sync_service.py | 402 | # Step 5: 处理和更新数据(分批处理) | COMMENT |
| LOW | app/services/multi_source_basics_sync_service.py | 509 | # Step 7: 更新统计信息 | COMMENT |
| LOW⚡ | tests/test_mcp_endpoint.py | 55 | # Step 1: initialize | COMMENT |
| LOW | tests/test_mcp_endpoint.py | 89 | # Step 2: tools/list | COMMENT |
| LOW | tests/skills/test_create_moat_skill.py | 81 | # Step 1: 启动会话 | COMMENT |
| LOW | tests/skills/test_create_moat_skill.py | 109 | # Step 2: 如果需要多轮对话,回应 AI 的问题 | COMMENT |
| LOW | tests/skills/test_create_moat_skill.py | 136 | # Step 3: 确认规格并触发代码生成(异步) | COMMENT |
| LOW | tests/skills/test_create_moat_skill.py | 193 | # Step 5: 测试生成的 skill | COMMENT |
| LOW⚡ | cli/main.py | 559 | # Step 1: Market selection | COMMENT |
| LOW⚡ | cli/main.py | 569 | # Step 2: Ticker symbol | COMMENT |
| LOW⚡ | cli/main.py | 579 | # Step 3: Analysis date | COMMENT |
| LOW⚡ | cli/main.py | 602 | # Step 5: Research depth | COMMENT |
| LOW⚡ | cli/main.py | 611 | # Step 6: LLM Provider | COMMENT |
| LOW⚡ | cli/main.py | 620 | # Step 7: Thinking agents | COMMENT |
| LOW | cli/main.py | 590 | # Step 4: Select analysts | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | core/tools/base.py | 75 | CODE | |
| LOW | core/tools/implementations/fundamentals/option_tools.py | 762 | CODE | |
| LOW | …entations/fundamentals/valuation/extended_valuation.py | 83 | CODE | |
| LOW | …entations/agent_builder/nanobot_agent_builder_tools.py | 78 | CODE | |
| LOW | …entations/agent_builder/nanobot_agent_builder_tools.py | 405 | CODE | |
| LOW | …entations/agent_builder/nanobot_agent_builder_tools.py | 2993 | CODE | |
| LOW | …entations/agent_builder/nanobot_agent_builder_tools.py | 3202 | CODE | |
| LOW | …entations/agent_builder/nanobot_agent_builder_tools.py | 4328 | CODE | |
| LOW | …entations/agent_builder/nanobot_agent_builder_tools.py | 4414 | CODE | |
| LOW | …entations/agent_builder/nanobot_agent_builder_tools.py | 4518 | CODE | |
| LOW | …entations/agent_builder/nanobot_agent_builder_tools.py | 5963 | CODE | |
| LOW | core/llm/unified_client.py | 516 | CODE | |
| LOW | core/memory/service.py | 350 | CODE | |
| LOW | core/agents/adapters/sector_analyst_v2.py | 316 | CODE | |
| LOW | core/embedded_nanobot/intent_context.py | 517 | CODE | |
| LOW | core/embedded_nanobot/intent_context.py | 180 | CODE | |
| LOW | app/routers/intelligent_screening.py | 69 | CODE | |
| LOW | app/routers/stock_sync.py | 1078 | CODE | |
| LOW | app/routers/analysis.py | 1958 | CODE | |
| LOW | app/routers/memory.py | 119 | CODE | |
| LOW | app/routers/memory.py | 165 | CODE | |
| LOW | app/routers/quality_metrics.py | 38 | CODE | |
| LOW | app/routers/review.py | 129 | CODE | |
| LOW | app/routers/reports.py | 210 | CODE | |
| LOW | app/routers/unified_tasks.py | 274 | CODE | |
| LOW | app/routers/operation_logs.py | 26 | CODE | |
| LOW | app/utils/report_saver.py | 139 | CODE | |
| LOW | app/utils/report_exporter.py | 731 | CODE | |
| LOW | app/worker/financial_data_sync_service.py | 78 | CODE | |
| LOW | app/worker/tushare_sync_service.py | 578 | CODE | |
| LOW | app/services/task_analysis_service.py | 2229 | CODE | |
| LOW | app/services/unified_analysis_engine.py | 837 | CODE | |
| LOW | app/services/unified_analysis_engine.py | 882 | CODE | |
| LOW | app/services/intelligent_assistant_service.py | 1258 | CODE | |
| LOW | app/services/intelligent_assistant_service.py | 4586 | CODE | |
| LOW | app/services/intelligent_assistant_service.py | 4718 | CODE | |
| LOW | app/services/portfolio_service.py | 395 | CODE | |
| LOW | app/services/quality_metrics_service.py | 35 | CODE | |
| LOW | app/services/quality_metrics_service.py | 149 | CODE | |
| LOW | app/services/enhanced_screening_service.py | 209 | CODE | |
| LOW | app/services/prompt_assembly_service.py | 249 | CODE | |
| LOW | app/services/embedded_nanobot_service.py | 66 | CODE | |
| LOW | tests/test_asyncio_thread_pool_fix.py | 36 | CODE | |
| LOW | tradingagents/core/engine/stock_analysis_engine.py | 79 | CODE | |
| LOW | tradingagents/graph/reflection.py | 76 | CODE | |
| LOW | tradingagents/utils/stock_validator.py | 20 | CODE | |
| LOW | tradingagents/dataflows/providers/us/optimized.py | 443 | CODE | |
| LOW | tradingagents/dataflows/news/google_news.py | 41 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | …entations/agent_builder/nanobot_agent_builder_tools.py | 2425 | if normalized in {"placeholder_mock", "mock", "placeholder"}: | CODE |
| LOW | core/tools/external/iteration_controller.py | 2761 | '"mock"', '"模拟"', '"fake"', '"dummy"', '"placeholder"', | CODE |
| LOW⚡ | core/memory/mem0_mongodb_store.py | 81 | collection.insert_one({"_id": "placeholder", "placeholder": True}) | CODE |
| LOW⚡ | core/memory/mem0_mongodb_store.py | 82 | collection.delete_one({"_id": "placeholder"}) | CODE |
| LOW⚡ | core/workflow/generator/workflow_planner.py | 133 | "placeholder": "如: 600519.SH", | CODE |
| LOW⚡ | core/workflow/generator/workflow_planner.py | 148 | "placeholder": "", | CODE |
| LOW | core/api/workflow_api.py | 81 | "placeholder": "请输入分析目标", | CODE |
| LOW | core/api/workflow_api.py | 96 | "placeholder": "选择模型", | CODE |
| LOW | core/api/workflow_api.py | 107 | "placeholder": "选择模型", | CODE |
| LOW | core/api/workflow_api.py | 127 | "placeholder": "持仓数据", | CODE |
| LOW | core/api/workflow_api.py | 138 | "placeholder": "", "options": None, "option_labels": None, | CODE |
| LOW | core/api/workflow_api.py | 148 | "placeholder": "选择模型", | CODE |
| LOW | core/api/workflow_api.py | 159 | "placeholder": "选择模型", | CODE |
| LOW | core/api/workflow_api.py | 176 | "placeholder": "交易记录", | CODE |
| LOW | core/api/workflow_api.py | 187 | "placeholder": "", "options": None, "option_labels": None, | CODE |
| LOW | core/api/workflow_api.py | 197 | "placeholder": "选择模型", | CODE |
| LOW | core/api/workflow_api.py | 208 | "placeholder": "选择模型", | CODE |
| LOW | core/api/workflow_api.py | 234 | "placeholder": ticker_placeholder, | CODE |
| LOW | core/api/workflow_api.py | 245 | "placeholder": "", "options": None, "option_labels": None, | CODE |
| LOW | core/api/workflow_api.py | 255 | "placeholder": "", | CODE |
| LOW | core/api/workflow_api.py | 267 | "placeholder": "选择分析师", | CODE |
| LOW | core/api/workflow_api.py | 279 | "placeholder": "选择模型", | CODE |
| LOW | core/api/workflow_api.py | 290 | "placeholder": "选择模型", | CODE |
| LOW | core/api/workflow_api.py | 301 | "placeholder": "", | CODE |
| LOW | core/api/workflow_api.py | 312 | "placeholder": "", | CODE |
| LOW | frontend/src/components/DeepModelSelector.vue | 7 | :placeholder="placeholder" | CODE |
| LOW | frontend/src/components/Global/MarketSelector.vue | 4 | :placeholder="placeholder" | CODE |
| LOW | frontend/src/views/Settings/index.vue | 774 | email: authStore.user?.email || 'admin@example.com', | CODE |
| LOW | frontend/src/views/Settings/index.vue | 819 | generalSettings.value.email = newUser.email || 'admin@example.com' | CODE |
| LOW | tests/test_post_processors.py | 104 | "to": "user@example.com", | CODE |
| LOW | tests/test_post_processors.py | 129 | "to": "user@example.com", | CODE |
| LOW | tests/unit/core/licensing/test_community_stub.py | 36 | return _community_license_info("user@example.com") | CODE |
| LOW | tradingagents/agents/utils/embedding_provider.py | 132 | if not api_key or api_key.startswith('your_') or api_key == 'placeholder': | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | main.py | 9 | # Create a custom config | COMMENT |
| MEDIUM | app/worker.py | 104 | # Define a thread-safe callback to publish progress from worker thread | COMMENT |
| MEDIUM⚡ | cli/main.py | 551 | # Create a boxed questionnaire for each step | COMMENT |
| MEDIUM | cli/main.py | 151 | # Create a deque to store recent messages with a maximum length | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | core/tools/external/iteration_controller.py | 1263 | # 将完整的 agentic prompt 写入日志文件,方便排查 LLM 未调用推荐 helper 的问题 | COMMENT |
| MEDIUM | core/tools/external/iteration_controller.py | 2310 | # agentic 反思含最多 5 轮工具调用往返,配合深度推理模型需要充足时间; | COMMENT |
| MEDIUM | app/services/planned_analysis_service.py | 454 | # RAG 动态知识检索(优雅降级:不可用时返回空字符串) | COMMENT |
| MEDIUM | app/services/intelligent_assistant_service.py | 2366 | # RAG 动态知识检索(优雅降级:不可用时返回空字符串) | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | start_dev.py | 131 | # Check if any process exited | COMMENT |
| LOW | app/routers/sse.py | 141 | # Check if batch belongs to user | COMMENT |
| LOW | tests/config/test_logging_json.py | 20 | # Set CWD to temp | COMMENT |
| LOW | tradingagents/dataflows/interface.py | 386 | # Check if there are any available reports; if not, return a notification | COMMENT |
| LOW | tradingagents/dataflows/interface.py | 433 | # Check if there are any available reports; if not, return a notification | COMMENT |
| LOW | tradingagents/dataflows/interface.py | 480 | # Check if there are any available reports; if not, return a notification | COMMENT |
| LOW | tradingagents/dataflows/interface.py | 889 | # Check if data is empty | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | core/assistant/defense.py | 101 | ] | COMMENT |
| LOW | core/memory/memory_manager.py | 461 | # 原因: | COMMENT |
| LOW | app/routers/config.py | 1001 | # 🔥 方案1:不要自动从厂家配置复制 API Key 到模型配置 | COMMENT |
| LOW | app/routers/analysis.py | 1881 | COMMENT | |
| LOW | app/routers/analysis.py | 1901 | # return t | COMMENT |
| LOW | app/core/config.py | 241 | # 通过 JDYUN_MODE=true 启用京东云合作版模式 | COMMENT |
| LOW | app/core/jdyun.py | 161 | if is_jdyun_mode(): | COMMENT |
| LOW | app/worker/unified_thread_pool_sync_service.py | 321 | if 'news_service' in thread_local_connections: | COMMENT |
| LOW | app/worker/unified_thread_pool_sync_service.py | 341 | # 3. MongoDB连接是线程安全的,多个连接可以并发使用 | COMMENT |
| LOW | app/worker/tushare_sync_service.py | 421 | logger.error(f"❌ 实时行情同步失败: {e}") | COMMENT |
| LOW | app/worker/tushare_sync_service.py | 441 | # try: | COMMENT |
| LOW | app/services/task_analysis_service.py | 221 | try: | COMMENT |
| LOW | tradingagents/config/runtime_settings.py | 41 | # 临时解决方案:完全禁用动态配置获取,避免事件循环冲突 | COMMENT |
| LOW | tradingagents/config/runtime_settings.py | 61 | # # 第三次检查:在调用asyncio.run之前再次确认 | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | frontend/package-lock.json | 6357 | "resolved": "https://registry.npmmirror.com/robust-predicates/-/robust-predicates-3.0.2.tgz", | CODE |
| MEDIUM | tradingagents/dataflows/optimized_china_data.py | 600 | else: # detailed, comprehensive | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | app/services/task_analysis_service.py | 145 | async def execute_task( | CODE |
| LOW | app/services/unified_analysis_engine.py | 133 | async def execute_task( | CODE |
| LOW | tests/test_sse_and_worker_config.py | 257 | async def execute_task(self, updated_task, progress_callback=None): | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tradingagents/agents/utils/memory.py | 916 | # Example usage | COMMENT |