基于多智能体LLM的中文金融交易框架 - TradingAgents中文增强版
This report presents the forensic synthetic code analysis of hsliuping/TradingAgents-CN, a Python project with 30,184 GitHub stars. SynthScan v2.0 examined 496,941 lines of code across 1873 source files, recording 7013 pattern matches distributed across 21 syntactic categories. The overall adjusted score of 15.5 places this repository in the Moderate AI signal band.
The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).
This chart maps the temporal evolution of the adjusted synthetic code score across successive scan runs. An upward trajectory indicates ongoing incorporation of AI-generated code or expanding LLM-assisted scaffolding; a stable or declining trajectory may reflect active human refactoring, code removal, or the adoption of stricter authorship policies. The dashed secondary line (right axis) independently tracks total raw pattern hit count, which can diverge from the normalised score when codebase size changes significantly between scans.
Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.
This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.
The scanner identified 7013 distinct pattern matches across 21 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | app/worker.py | 50 | except Exception as e: | CODE |
| LOW | app/worker.py | 76 | except Exception: | CODE |
| LOW | app/worker.py | 148 | except Exception as analysis_error: | CODE |
| LOW | app/worker.py | 174 | except Exception as e: | CODE |
| LOW | app/worker.py | 200 | except Exception as e: | CODE |
| LOW | app/worker.py | 217 | except Exception as e: | CODE |
| LOW | app/main.py | 80 | except Exception: | CODE |
| LOW | app/main.py | 123 | except Exception as e: | CODE |
| LOW | app/main.py | 192 | except Exception as e: | CODE |
| LOW | app/main.py | 207 | except Exception as e: | CODE |
| LOW | app/main.py | 211 | except Exception as e: | CODE |
| LOW | app/main.py | 226 | except Exception as e: | CODE |
| LOW | app/main.py | 236 | except Exception as e: | CODE |
| LOW | app/main.py | 251 | except Exception: | CODE |
| LOW | app/main.py | 253 | except Exception as e: | CODE |
| LOW | app/main.py | 267 | except Exception as e: | CODE |
| LOW | app/main.py | 274 | except Exception: | CODE |
| LOW | app/main.py | 552 | except Exception as e: | CODE |
| LOW | app/main.py | 577 | except Exception as e: | CODE |
| LOW | app/main.py | 589 | except Exception as e: | CODE |
| LOW | app/main.py | 596 | except Exception as e: | CODE |
| LOW | app/__main__.py | 30 | except Exception: | CODE |
| LOW | app/__main__.py | 33 | except Exception as e: | CODE |
| LOW | app/__main__.py | 88 | except Exception as e: | CODE |
| LOW | app/__main__.py | 103 | except Exception as e: | CODE |
| LOW | app/__main__.py | 156 | except Exception: | CODE |
| LOW | app/__main__.py | 174 | except Exception as e: | CODE |
| LOW | app/routers/sync.py | 22 | except Exception as e: | CODE |
| LOW | app/routers/tags.py | 41 | except Exception as e: | CODE |
| LOW | app/routers/tags.py | 55 | except Exception as e: | CODE |
| LOW | app/routers/tags.py | 75 | except Exception as e: | CODE |
| LOW | app/routers/tags.py | 88 | except Exception as e: | CODE |
| LOW | app/routers/news_data.py | 113 | except Exception as e: | CODE |
| LOW | app/routers/news_data.py | 126 | except Exception as e: | CODE |
| LOW | app/routers/news_data.py | 176 | except Exception as e: | CODE |
| LOW | app/routers/news_data.py | 221 | except Exception as e: | CODE |
| LOW | app/routers/news_data.py | 265 | except Exception as e: | CODE |
| LOW | app/routers/news_data.py | 322 | except Exception as e: | CODE |
| LOW | app/routers/news_data.py | 374 | except Exception as e: | CODE |
| LOW | app/routers/news_data.py | 427 | except Exception as e: | CODE |
| LOW | app/routers/news_data.py | 461 | except Exception as e: | CODE |
| LOW | app/routers/news_data.py | 482 | except Exception as e: | CODE |
| LOW⚡ | app/routers/news_data.py | 499 | except Exception as e: | CODE |
| LOW⚡ | app/routers/news_data.py | 511 | except Exception as e: | CODE |
| LOW | app/routers/stocks.py | 27 | except Exception: | CODE |
| LOW | app/routers/stocks.py | 103 | except Exception as e: | CODE |
| LOW | app/routers/stocks.py | 160 | except Exception: | CODE |
| LOW | app/routers/stocks.py | 187 | except Exception as e: | CODE |
| LOW | app/routers/stocks.py | 247 | except Exception as e: | CODE |
| LOW | app/routers/stocks.py | 322 | except Exception as e: | CODE |
| LOW | app/routers/stocks.py | 468 | except Exception as e: | CODE |
| LOW | app/routers/stocks.py | 527 | except Exception as e: | CODE |
| LOW | app/routers/stocks.py | 546 | except Exception as e: | CODE |
| LOW | app/routers/stocks.py | 610 | except Exception as e: | CODE |
| LOW | app/routers/stocks.py | 702 | except Exception as e: | CODE |
| LOW | app/routers/stocks.py | 739 | except Exception as e: | CODE |
| LOW | app/routers/stock_sync.py | 244 | except Exception as e: | CODE |
| LOW | app/routers/stock_sync.py | 285 | except Exception as e: | CODE |
| LOW | app/routers/stock_sync.py | 308 | except Exception as e: | CODE |
| LOW | app/routers/stock_sync.py | 333 | except Exception as e: | CODE |
| 3406 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | app/routers/news_data.py | 503 | async def _execute_market_news_sync(sync_service, request: NewsSyncRequest): | CODE |
| LOW | app/routers/stock_sync.py | 25 | async def _sync_latest_to_market_quotes(symbol: str) -> None: | CODE |
| LOW⚡ | app/routers/config.py | 165 | def _sanitize_database_configs(items): | CODE |
| LOW⚡ | app/routers/config.py | 1583 | async def remove_datasource_from_category( | CODE |
| LOW⚡ | app/routers/config.py | 1621 | async def update_datasource_grouping( | CODE |
| LOW⚡ | app/routers/config.py | 1660 | async def update_category_datasource_order( | CODE |
| LOW | app/routers/config.py | 97 | def _sort_llm_configs_by_newest(items): | CODE |
| LOW | app/routers/config.py | 113 | def _sanitize_datasource_configs(items): | CODE |
| LOW | app/routers/config.py | 576 | async def init_aggregator_providers( | CODE |
| LOW | app/routers/config.py | 936 | async def test_saved_database_config( | CODE |
| LOW | app/routers/config.py | 1134 | async def update_data_source_config( | CODE |
| LOW | app/routers/config.py | 1344 | async def delete_data_source_config( | CODE |
| LOW | app/routers/config.py | 1545 | async def add_datasource_to_category( | CODE |
| LOW | app/routers/config.py | 2050 | async def get_provider_model_catalog( | CODE |
| LOW | app/routers/analysis.py | 985 | async def get_user_analysis_history( | CODE |
| LOW | app/routers/model_capabilities.py | 78 | async def get_default_model_configs(): | CODE |
| LOW⚡ | app/routers/model_capabilities.py | 134 | async def get_capability_descriptions(): | CODE |
| LOW | app/routers/database.py | 104 | async def test_database_connections( | CODE |
| LOW | app/routers/screening.py | 74 | def _convert_legacy_conditions_to_new_format(legacy_conditions: Dict[str, Any]) -> List[ScreeningCondition]: | CODE |
| LOW | app/routers/websocket_notifications.py | 110 | async def websocket_notifications_endpoint( | CODE |
| LOW | app/routers/websocket_notifications.py | 201 | async def websocket_task_progress_endpoint( | CODE |
| LOW | app/routers/websocket_notifications.py | 272 | async def send_notification_via_websocket(user_id: str, notification: dict): | CODE |
| LOW | app/routers/websocket_notifications.py | 287 | async def send_task_progress_via_websocket(task_id: str, progress_data: dict): | CODE |
| LOW | app/routers/reports.py | 356 | async def get_report_module_content( | CODE |
| LOW | app/routers/social_media.py | 69 | async def save_social_media_messages(request: SocialMediaBatchRequest): | CODE |
| LOW | app/routers/social_media.py | 94 | async def query_social_media_messages(request: SocialMediaQueryRequest): | CODE |
| LOW | app/routers/financial_data.py | 91 | async def get_latest_financial_data( | CODE |
| LOW | app/routers/financial_data.py | 184 | async def sync_single_stock_financial( | CODE |
| LOW | app/routers/scheduler.py | 58 | async def update_job_metadata_route( | CODE |
| LOW | app/routers/scheduler.py | 381 | async def get_single_job_executions( | CODE |
| LOW | app/routers/tushare_init.py | 112 | async def get_initialization_status( | CODE |
| LOW | app/routers/tushare_init.py | 137 | async def start_basic_initialization( | CODE |
| LOW | app/routers/tushare_init.py | 161 | async def start_full_initialization( | CODE |
| LOW | app/routers/tushare_init.py | 226 | async def _run_basic_initialization(): | CODE |
| LOW | app/routers/baostock_init.py | 84 | async def start_full_initialization( | CODE |
| LOW | app/routers/baostock_init.py | 136 | async def start_basic_initialization(background_tasks: BackgroundTasks): | CODE |
| LOW | app/routers/baostock_init.py | 178 | async def get_initialization_status(): | CODE |
| LOW | app/routers/baostock_init.py | 252 | async def _run_full_initialization_task(historical_days: int, force: bool, task_id: str): | CODE |
| LOW | app/routers/baostock_init.py | 285 | async def _run_basic_initialization_task(task_id: str): | CODE |
| LOW⚡ | app/routers/akshare_init.py | 146 | async def start_full_initialization( | CODE |
| LOW | app/routers/akshare_init.py | 260 | async def get_initialization_status(): | CODE |
| LOW | app/routers/akshare_init.py | 326 | async def _run_full_initialization_background(historical_days: int, force: bool): | CODE |
| LOW | app/routers/akshare_init.py | 352 | async def _run_basic_sync_background(force_update: bool): | CODE |
| LOW | app/middleware/operation_log_middleware.py | 21 | def set_operation_log_enabled(flag: bool) -> None: | CODE |
| LOW | app/core/database.py | 214 | async def init_database_views_and_indexes(): | CODE |
| LOW | app/core/database.py | 232 | async def create_stock_screening_view(db): | CODE |
| LOW | app/core/rate_limiter.py | 213 | def get_baostock_rate_limiter() -> BaoStockRateLimiter: | CODE |
| LOW | app/core/config_compat.py | 31 | def _emit_deprecation_warning(self): | CODE |
| LOW | app/core/startup_validator.py | 186 | def _validate_required_configs(self): | CODE |
| LOW | app/core/startup_validator.py | 200 | def _validate_recommended_configs(self): | CODE |
| LOW | app/core/config_bridge.py | 299 | def _bridge_datasource_details(data_source_configs) -> int: | CODE |
| LOW | app/core/config_bridge.py | 673 | async def _sync_pricing_config_from_db(): | CODE |
| LOW | app/core/unified_config.py | 327 | async def get_data_source_configs_async(self) -> List[DataSourceConfig]: | CODE |
| LOW | app/core/unified_config.py | 442 | async def get_unified_system_config(self) -> SystemConfig: | CODE |
| LOW | app/constants/model_capabilities.py | 353 | def get_model_capability_badge(level: int) -> Dict[str, str]: | CODE |
| LOW | app/utils/api_key_utils.py | 76 | def get_env_api_key_for_provider(provider_name: str) -> Optional[str]: | CODE |
| LOW | app/utils/api_key_utils.py | 97 | def get_env_api_key_for_datasource(ds_type: str) -> Optional[str]: | CODE |
| LOW | app/utils/api_key_utils.py | 137 | def should_skip_api_key_update(api_key: Optional[str]) -> bool: | CODE |
| LOW | app/utils/error_formatter.py | 199 | def _generate_friendly_message( | CODE |
| LOW | app/utils/report_exporter.py | 167 | def _clean_markdown_for_pandoc(self, md_content: str) -> str: | CODE |
| 1206 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | app/worker.py | 23 | CODE | |
| LOW | app/main.py | 40 | CODE | |
| LOW | app/routers/sync.py | 7 | CODE | |
| LOW | app/routers/tags.py | 4 | CODE | |
| LOW | app/routers/news_data.py | 6 | CODE | |
| LOW | app/routers/news_data.py | 6 | CODE | |
| LOW | app/routers/stocks.py | 7 | CODE | |
| LOW | app/routers/stocks.py | 7 | CODE | |
| LOW | app/routers/stocks.py | 7 | CODE | |
| LOW | app/routers/stock_sync.py | 6 | CODE | |
| LOW | app/routers/config.py | 22 | CODE | |
| LOW | app/routers/config.py | 88 | CODE | |
| LOW | app/routers/analysis.py | 17 | CODE | |
| LOW | app/routers/analysis.py | 20 | CODE | |
| LOW | app/routers/analysis.py | 20 | CODE | |
| LOW | app/routers/analysis.py | 20 | CODE | |
| LOW | app/routers/analysis.py | 20 | CODE | |
| LOW | app/routers/model_capabilities.py | 5 | CODE | |
| LOW | app/routers/model_capabilities.py | 21 | CODE | |
| LOW | app/routers/database.py | 6 | CODE | |
| LOW | app/routers/database.py | 8 | CODE | |
| LOW | app/routers/database.py | 15 | CODE | |
| LOW | app/routers/database.py | 15 | CODE | |
| LOW | app/routers/cache.py | 6 | CODE | |
| LOW | app/routers/cache.py | 7 | CODE | |
| LOW | app/routers/cache.py | 7 | CODE | |
| LOW | app/routers/historical_data.py | 7 | CODE | |
| LOW | app/routers/historical_data.py | 8 | CODE | |
| LOW | app/routers/screening.py | 8 | CODE | |
| LOW | app/routers/favorites.py | 11 | CODE | |
| LOW | app/routers/favorites.py | 11 | CODE | |
| LOW | app/routers/websocket_notifications.py | 9 | CODE | |
| LOW | app/routers/multi_market_stocks.py | 12 | CODE | |
| LOW | app/routers/multi_market_stocks.py | 12 | CODE | |
| LOW | app/routers/multi_market_stocks.py | 12 | CODE | |
| LOW | app/routers/reports.py | 4 | CODE | |
| LOW | app/routers/reports.py | 6 | CODE | |
| LOW | app/routers/reports.py | 8 | CODE | |
| LOW | app/routers/reports.py | 10 | CODE | |
| LOW | app/routers/reports.py | 11 | CODE | |
| LOW | app/routers/social_media.py | 7 | CODE | |
| LOW | app/routers/social_media.py | 10 | CODE | |
| LOW | app/routers/financial_data.py | 7 | CODE | |
| LOW | app/routers/financial_data.py | 306 | CODE | |
| LOW | app/routers/scheduler.py | 9 | CODE | |
| LOW | app/routers/scheduler.py | 10 | CODE | |
| LOW | app/routers/operation_logs.py | 6 | CODE | |
| LOW | app/routers/operation_logs.py | 6 | CODE | |
| LOW | app/routers/stock_data.py | 5 | CODE | |
| LOW | app/routers/stock_data.py | 11 | CODE | |
| LOW | app/routers/stock_data.py | 11 | CODE | |
| LOW | app/routers/stock_data.py | 11 | CODE | |
| LOW | app/routers/tushare_init.py | 7 | CODE | |
| LOW | app/routers/tushare_init.py | 7 | CODE | |
| LOW | app/routers/internal_messages.py | 7 | CODE | |
| LOW | app/routers/internal_messages.py | 10 | CODE | |
| LOW | app/routers/usage_statistics.py | 7 | CODE | |
| LOW | app/routers/usage_statistics.py | 11 | CODE | |
| LOW | app/routers/usage_statistics.py | 11 | CODE | |
| LOW | app/routers/baostock_init.py | 6 | CODE | |
| 946 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | app/main.py | 85 | CODE | |
| LOW | app/__main__.py | 42 | CODE | |
| LOW | app/routers/news_data.py | 44 | CODE | |
| LOW | app/routers/stocks.py | 422 | CODE | |
| LOW | app/routers/stocks.py | 625 | CODE | |
| LOW | app/routers/stock_sync.py | 123 | CODE | |
| LOW | app/routers/stock_sync.py | 571 | CODE | |
| LOW | app/routers/config.py | 113 | CODE | |
| LOW | app/routers/config.py | 247 | CODE | |
| LOW | app/routers/config.py | 639 | CODE | |
| LOW | app/routers/config.py | 748 | CODE | |
| LOW | app/routers/config.py | 903 | CODE | |
| LOW | app/routers/config.py | 1134 | CODE | |
| LOW | app/routers/config.py | 1344 | CODE | |
| LOW | app/routers/analysis.py | 106 | CODE | |
| LOW | app/routers/analysis.py | 222 | CODE | |
| LOW | app/routers/analysis.py | 772 | CODE | |
| LOW | app/routers/analysis.py | 985 | CODE | |
| LOW | app/routers/paper.py | 194 | CODE | |
| LOW | app/routers/screening.py | 74 | CODE | |
| LOW | app/routers/screening.py | 276 | CODE | |
| LOW | app/routers/sse.py | 18 | CODE | |
| LOW | app/routers/sse.py | 113 | CODE | |
| LOW | app/routers/multi_source_sync.py | 41 | CODE | |
| LOW | app/routers/multi_source_sync.py | 89 | CODE | |
| LOW | app/routers/multi_source_sync.py | 155 | CODE | |
| LOW | app/routers/multi_source_sync.py | 193 | CODE | |
| LOW | app/routers/system_config.py | 64 | CODE | |
| LOW | app/routers/reports.py | 429 | CODE | |
| LOW | app/routers/social_media.py | 266 | CODE | |
| LOW | app/routers/akshare_init.py | 47 | CODE | |
| LOW | app/middleware/operation_log_middleware.py | 177 | CODE | |
| LOW | app/core/logging_config.py | 66 | CODE | |
| LOW | app/core/config_bridge.py | 15 | CODE | |
| LOW | app/core/config_bridge.py | 359 | CODE | |
| LOW | app/core/config_bridge.py | 673 | CODE | |
| LOW | app/core/unified_config.py | 259 | CODE | |
| LOW | app/core/unified_config.py | 327 | CODE | |
| LOW | app/utils/trading_time.py | 133 | CODE | |
| LOW | app/utils/error_formatter.py | 199 | CODE | |
| LOW | app/utils/report_exporter.py | 284 | CODE | |
| LOW | app/scripts/normalize_provider_keys.py | 139 | CODE | |
| LOW | app/scripts/migrate_mongo_db.py | 74 | CODE | |
| LOW | app/worker/news_data_sync_service.py | 89 | CODE | |
| LOW | app/worker/news_data_sync_service.py | 183 | CODE | |
| LOW | app/worker/news_data_sync_service.py | 228 | CODE | |
| LOW | app/worker/news_data_sync_service.py | 260 | CODE | |
| LOW | app/worker/news_data_sync_service.py | 357 | CODE | |
| LOW | app/worker/news_data_sync_service.py | 433 | CODE | |
| LOW | app/worker/example_sdk_sync_service.py | 211 | CODE | |
| LOW | app/worker/baostock_sync_service.py | 117 | CODE | |
| LOW | app/worker/baostock_sync_service.py | 172 | CODE | |
| LOW | app/worker/baostock_sync_service.py | 413 | CODE | |
| LOW | app/worker/baostock_sync_service.py | 493 | CODE | |
| LOW | app/worker/financial_data_sync_service.py | 143 | CODE | |
| LOW | app/worker/tushare_sync_service.py | 160 | CODE | |
| LOW | app/worker/tushare_sync_service.py | 228 | CODE | |
| LOW | app/worker/tushare_sync_service.py | 517 | CODE | |
| LOW | app/worker/tushare_sync_service.py | 543 | CODE | |
| LOW | app/worker/tushare_sync_service.py | 780 | CODE | |
| 720 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH⚡ | scripts/mongo-init.js | 21 | print('✓ 创建应用用户成功'); | CODE |
| HIGH⚡ | scripts/mongo-init.js | 23 | print('⚠ 用户可能已存在: ' + e.message); | CODE |
| HIGH⚡ | scripts/mongo-init.js | 31 | print('\n创建集合...'); | CODE |
| HIGH⚡ | scripts/mongo-init.js | 187 | print('✓ 初始数据插入完成'); | CODE |
| HIGH⚡ | scripts/mongo-init.js | 191 | print('\n验证数据库初始化...'); | CODE |
| HIGH⚡ | scripts/mongo-init.js | 194 | print('✓ 集合数量: ' + collections.length); | CODE |
| HIGH⚡ | scripts/mongo-init.js | 200 | print('✓ 索引数量: ' + indexes); | CODE |
| HIGH⚡ | scripts/mongo-init.js | 203 | print('✓ 系统配置数量: ' + configCount); | CODE |
| HIGH⚡ | scripts/mongo-init.js | 205 | print('\n========================================'); | CODE |
| HIGH⚡ | scripts/mongo-init.js | 206 | print('TradingAgents数据库初始化完成!'); | CODE |
| HIGH⚡ | scripts/mongo-init.js | 207 | print('========================================'); | CODE |
| HIGH⚡ | scripts/mongo-init.js | 208 | print('数据库: tradingagents'); | CODE |
| HIGH⚡ | scripts/mongo-init.js | 209 | print('用户: tradingagents'); | CODE |
| HIGH⚡ | scripts/mongo-init.js | 210 | print('密码: tradingagents123'); | CODE |
| HIGH⚡ | scripts/mongo-init.js | 211 | print('集合数: ' + collections.length); | CODE |
| HIGH⚡ | scripts/mongo-init.js | 212 | print('索引数: ' + indexes); | CODE |
| HIGH⚡ | scripts/mongo-init.js | 213 | print('========================================'); | CODE |
| HIGH | scripts/mongo-init.js | 4 | print('开始初始化TradingAgents数据库...'); | CODE |
| HIGH | scripts/mongo-init.js | 63 | print('✓ 集合创建完成'); | CODE |
| HIGH | scripts/mongo-init.js | 67 | print('\n创建索引...'); | CODE |
| HIGH | scripts/mongo-init.js | 153 | print('✓ 索引创建完成'); | CODE |
| HIGH | scripts/mongo-init.js | 157 | print('\n插入初始数据...'); | CODE |
| HIGH⚡ | scripts/mongo-init-debug.js | 4 | print('========================================'); | CODE |
| HIGH⚡ | scripts/mongo-init-debug.js | 5 | print('🔍 MongoDB 初始化脚本开始执行'); | CODE |
| HIGH⚡ | scripts/mongo-init-debug.js | 6 | print('========================================'); | CODE |
| HIGH⚡ | scripts/mongo-init-debug.js | 9 | print('\n📋 环境变量检查:'); | CODE |
| HIGH⚡ | scripts/mongo-init-debug.js | 10 | print('MONGO_INITDB_ROOT_USERNAME: ' + (typeof MONGO_INITDB_ROOT_USERNAME !== 'undefined' ? MONGO_INITDB_ROOT_USERNAME : | CODE |
| HIGH⚡ | scripts/mongo-init-debug.js | 11 | print('MONGO_INITDB_ROOT_PASSWORD: ' + (typeof MONGO_INITDB_ROOT_PASSWORD !== 'undefined' ? '已设置' : '未设置')); | CODE |
| HIGH⚡ | scripts/mongo-init-debug.js | 12 | print('MONGO_INITDB_DATABASE: ' + (typeof MONGO_INITDB_DATABASE !== 'undefined' ? MONGO_INITDB_DATABASE : '未设置')); | CODE |
| HIGH⚡ | scripts/mongo-init-debug.js | 15 | print('\n📋 切换到 admin 数据库...'); | CODE |
| HIGH⚡ | scripts/mongo-init-debug.js | 17 | print('✅ 当前数据库: ' + db.getName()); | CODE |
| HIGH⚡ | scripts/mongo-init-debug.js | 20 | print('\n📋 检查现有用户...'); | CODE |
| HIGH⚡ | scripts/mongo-init-debug.js | 23 | print('现有用户数量: ' + users.users.length); | CODE |
| HIGH⚡ | scripts/mongo-init-debug.js | 25 | print('用户列表:'); | CODE |
| HIGH⚡ | scripts/mongo-init-debug.js | 27 | print(' - ' + user.user + ' (角色: ' + JSON.stringify(user.roles) + ')'); | CODE |
| HIGH⚡ | scripts/mongo-init-debug.js | 31 | print('⚠️ 无法获取用户列表: ' + e.message); | CODE |
| HIGH⚡ | scripts/mongo-init-debug.js | 35 | print('\n📋 创建 root 用户 (admin)...'); | CODE |
| HIGH⚡ | scripts/mongo-init-debug.js | 47 | print('✅ root 用户创建成功'); | CODE |
| HIGH⚡ | scripts/mongo-init-debug.js | 49 | print('⚠️ 用户可能已存在: ' + e.message); | CODE |
| HIGH⚡ | scripts/mongo-init-debug.js | 53 | print('\n📋 创建应用用户 (tradingagents)...'); | CODE |
| HIGH⚡ | scripts/mongo-init-debug.js | 65 | print('✅ 应用用户创建成功'); | CODE |
| HIGH⚡ | scripts/mongo-init-debug.js | 67 | print('⚠️ 用户可能已存在: ' + e.message); | CODE |
| HIGH⚡ | scripts/mongo-init-debug.js | 71 | print('\n📋 验证用户创建...'); | CODE |
| HIGH⚡ | scripts/mongo-init-debug.js | 74 | print('当前用户数量: ' + users.users.length); | CODE |
| HIGH⚡ | scripts/mongo-init-debug.js | 76 | print(' ✅ ' + user.user + ' (角色: ' + JSON.stringify(user.roles) + ')'); | CODE |
| HIGH⚡ | scripts/mongo-init-debug.js | 79 | print('❌ 无法验证用户: ' + e.message); | CODE |
| HIGH⚡ | scripts/mongo-init-debug.js | 83 | print('\n📋 切换到应用数据库 (tradingagents)...'); | CODE |
| HIGH⚡ | scripts/mongo-init-debug.js | 85 | print('✅ 当前数据库: ' + db.getName()); | CODE |
| HIGH⚡ | scripts/mongo-init-debug.js | 88 | print('\n📋 创建测试集合...'); | CODE |
| HIGH⚡ | scripts/mongo-init-debug.js | 91 | print('✅ 测试集合创建成功'); | CODE |
| HIGH⚡ | scripts/mongo-init-debug.js | 93 | print('❌ 集合创建失败: ' + e.message); | CODE |
| HIGH⚡ | scripts/mongo-init-debug.js | 97 | print('\n📋 插入测试数据...'); | CODE |
| HIGH⚡ | scripts/mongo-init-debug.js | 103 | print('✅ 测试数据插入成功'); | CODE |
| HIGH⚡ | scripts/mongo-init-debug.js | 105 | print('❌ 数据插入失败: ' + e.message); | CODE |
| HIGH⚡ | scripts/mongo-init-debug.js | 109 | print('\n📋 验证数据...'); | CODE |
| HIGH⚡ | scripts/mongo-init-debug.js | 112 | print('✅ 测试集合文档数量: ' + count); | CODE |
| HIGH⚡ | scripts/mongo-init-debug.js | 114 | print('❌ 数据验证失败: ' + e.message); | CODE |
| HIGH⚡ | scripts/mongo-init-debug.js | 117 | print('\n========================================'); | CODE |
| HIGH⚡ | scripts/mongo-init-debug.js | 118 | print('✅ MongoDB 初始化脚本执行完成'); | CODE |
| HIGH⚡ | scripts/mongo-init-debug.js | 119 | print('========================================'); | CODE |
| 12 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | app/__main__.py | 11 | # ============================================================================ | COMMENT |
| MEDIUM | app/__main__.py | 13 | # ============================================================================ | COMMENT |
| MEDIUM | tests/test_akshare_hk_apis.py | 48 | # ======================================== | COMMENT |
| MEDIUM | tests/test_akshare_hk_apis.py | 50 | # ======================================== | COMMENT |
| MEDIUM | tests/test_akshare_hk_apis.py | 91 | # ======================================== | COMMENT |
| MEDIUM | tests/test_akshare_hk_apis.py | 93 | # ======================================== | COMMENT |
| MEDIUM | tests/test_akshare_hk_apis.py | 107 | # ======================================== | COMMENT |
| MEDIUM | tests/test_akshare_hk_apis.py | 109 | # ======================================== | COMMENT |
| MEDIUM⚡ | tests/test_akshare_hk_apis.py | 124 | # ======================================== | COMMENT |
| MEDIUM⚡ | tests/test_akshare_hk_apis.py | 126 | # ======================================== | COMMENT |
| MEDIUM⚡ | tests/test_akshare_hk_apis.py | 150 | # ======================================== | COMMENT |
| MEDIUM⚡ | tests/test_akshare_hk_apis.py | 152 | # ======================================== | COMMENT |
| MEDIUM | tests/test_akshare_hk_apis.py | 173 | # ======================================== | COMMENT |
| MEDIUM | tests/test_akshare_hk_apis.py | 175 | # ======================================== | COMMENT |
| MEDIUM | docs/design/configuration_management.md | 14 | # =========================================== | COMMENT |
| MEDIUM | docs/design/configuration_management.md | 16 | # =========================================== | COMMENT |
| MEDIUM | docs/configuration/config-guide.md | 28 | # =========================================== | COMMENT |
| MEDIUM | docs/configuration/config-guide.md | 30 | # =========================================== | COMMENT |
| MEDIUM | docs/configuration/quotes_ingestion_config.md | 52 | # ======================================== | COMMENT |
| MEDIUM | docs/configuration/quotes_ingestion_config.md | 54 | # ======================================== | COMMENT |
| MEDIUM | docs/configuration/quotes_ingestion_config.md | 69 | # ======================================== | COMMENT |
| MEDIUM | docs/configuration/quotes_ingestion_config.md | 71 | # ======================================== | COMMENT |
| MEDIUM | docs/guides/portable-installation-guide.md | 351 | # ============================================================================ | COMMENT |
| MEDIUM | docs/guides/portable-installation-guide.md | 353 | # ============================================================================ | COMMENT |
| MEDIUM | docs/guides/portable-installation-guide.md | 367 | # ============================================================================ | COMMENT |
| MEDIUM | docs/guides/portable-installation-guide.md | 369 | # ============================================================================ | COMMENT |
| MEDIUM | docs/guides/portable-installation-guide.md | 381 | # ============================================================================ | COMMENT |
| MEDIUM | docs/guides/portable-installation-guide.md | 383 | # ============================================================================ | COMMENT |
| MEDIUM | docs/guides/portable-installation-guide.md | 398 | # ============================================================================ | COMMENT |
| MEDIUM | docs/guides/portable-installation-guide.md | 400 | # ============================================================================ | COMMENT |
| MEDIUM | docs/guides/portable-installation-guide.md | 415 | # ============================================================================ | COMMENT |
| MEDIUM | docs/guides/portable-installation-guide.md | 417 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | docs/guides/installation-guide.md | 195 | # =========================================== | COMMENT |
| MEDIUM⚡ | docs/guides/installation-guide.md | 197 | # =========================================== | COMMENT |
| MEDIUM⚡ | docs/guides/installation-guide.md | 204 | # =========================================== | COMMENT |
| MEDIUM⚡ | docs/guides/installation-guide.md | 206 | # =========================================== | COMMENT |
| MEDIUM | docs/guides/installation-guide.md | 229 | # =========================================== | COMMENT |
| MEDIUM | docs/guides/installation-guide.md | 231 | # =========================================== | COMMENT |
| MEDIUM | docs/guides/installation-guide.md | 242 | # =========================================== | COMMENT |
| MEDIUM | docs/guides/installation-guide.md | 244 | # =========================================== | COMMENT |
| MEDIUM | docs/guides/installation-guide.md | 256 | # =========================================== | COMMENT |
| MEDIUM | docs/guides/installation-guide.md | 258 | # =========================================== | COMMENT |
| MEDIUM | docs/guides/INSTALLATION_GUIDE.md | 348 | # ============================================================================= | COMMENT |
| MEDIUM | docs/guides/INSTALLATION_GUIDE.md | 350 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | docs/guides/INSTALLATION_GUIDE.md | 366 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | docs/guides/INSTALLATION_GUIDE.md | 368 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | docs/guides/INSTALLATION_GUIDE.md | 376 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | docs/guides/INSTALLATION_GUIDE.md | 378 | # ============================================================================= | COMMENT |
| MEDIUM | docs/guides/INSTALLATION_GUIDE.md | 395 | # ============================================================================= | COMMENT |
| MEDIUM | docs/guides/INSTALLATION_GUIDE.md | 397 | # ============================================================================= | COMMENT |
| MEDIUM | scripts/test_google_sdk_basic.py | 31 | # ============================================================================ | COMMENT |
| MEDIUM | scripts/test_google_sdk_basic.py | 33 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | scripts/test_google_sdk_basic.py | 61 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | scripts/test_google_sdk_basic.py | 63 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | scripts/test_google_sdk_basic.py | 93 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | scripts/test_google_sdk_basic.py | 95 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | scripts/test_google_sdk_basic.py | 127 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | scripts/test_google_sdk_basic.py | 129 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | scripts/test_google_sdk_basic.py | 163 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | scripts/test_google_sdk_basic.py | 165 | # ============================================================================ | COMMENT |
| 4 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | app/routers/stocks.py | 16 | logger = logging.getLogger(__name__) | CODE |
| LOW | app/routers/model_capabilities.py | 24 | logger = logging.getLogger(__name__) | CODE |
| LOW | app/routers/historical_data.py | 14 | logger = logging.getLogger(__name__) | CODE |
| LOW | app/routers/multi_source_sync.py | 14 | logger = logging.getLogger(__name__) | CODE |
| LOW | app/routers/financial_data.py | 15 | logger = logging.getLogger(__name__) | CODE |
| LOW | app/routers/multi_period_sync.py | 14 | logger = logging.getLogger(__name__) | CODE |
| LOW | app/routers/baostock_init.py | 16 | logger = logging.getLogger(__name__) | CODE |
| LOW | app/routers/akshare_init.py | 19 | logger = logging.getLogger(__name__) | CODE |
| LOW | app/middleware/request_id.py | 16 | logger = logging.getLogger(__name__) | CODE |
| LOW | app/middleware/rate_limit.py | 12 | logger = logging.getLogger(__name__) | CODE |
| LOW | app/middleware/operation_log_middleware.py | 21 | def set_operation_log_enabled(flag: bool) -> None: | CODE |
| LOW | app/middleware/error_handler.py | 12 | logger = logging.getLogger(__name__) | CODE |
| LOW | app/core/database.py | 17 | logger = logging.getLogger(__name__) | CODE |
| LOW | app/core/rate_limiter.py | 11 | logger = logging.getLogger(__name__) | CODE |
| LOW | app/core/redis_client.py | 10 | logger = logging.getLogger(__name__) | CODE |
| LOW | app/core/startup_validator.py | 15 | logger = logging.getLogger(__name__) | CODE |
| LOW | app/core/config_bridge.py | 733 | __all__ = [ | CODE |
| LOW | app/utils/report_exporter.py | 18 | logger = logging.getLogger(__name__) | CODE |
| LOW | app/models/__init__.py | 20 | __all__ = [ | CODE |
| LOW | app/worker/us_data_service.py | 32 | logger = logging.getLogger(__name__) | CODE |
| LOW | app/worker/hk_data_service.py | 33 | logger = logging.getLogger(__name__) | CODE |
| LOW | app/worker/news_data_sync_service.py | 16 | logger = logging.getLogger(__name__) | CODE |
| LOW | app/worker/example_sdk_sync_service.py | 20 | logger = logging.getLogger(__name__) | CODE |
| LOW | app/worker/baostock_sync_service.py | 17 | logger = logging.getLogger(__name__) | CODE |
| LOW | app/worker/financial_data_sync_service.py | 18 | logger = logging.getLogger(__name__) | CODE |
| LOW | app/worker/akshare_init_service.py | 14 | logger = logging.getLogger(__name__) | CODE |
| LOW | app/worker/tushare_sync_service.py | 19 | logger = logging.getLogger(__name__) | CODE |
| LOW | app/worker/multi_period_sync_service.py | 17 | logger = logging.getLogger(__name__) | CODE |
| LOW | app/worker/us_sync_service.py | 33 | logger = logging.getLogger(__name__) | CODE |
| LOW | app/worker/tushare_init_service.py | 14 | logger = logging.getLogger(__name__) | CODE |
| LOW | app/worker/akshare_sync_service.py | 15 | logger = logging.getLogger(__name__) | CODE |
| LOW | app/worker/hk_sync_service.py | 35 | logger = logging.getLogger(__name__) | CODE |
| LOW | app/worker/analysis_worker.py | 29 | logger = logging.getLogger(__name__) | CODE |
| LOW | app/worker/baostock_init_service.py | 16 | logger = logging.getLogger(__name__) | CODE |
| LOW | app/services/basics_sync_service.py | 32 | logger = logging.getLogger(__name__) | CODE |
| LOW | app/services/queue_service.py | 40 | logger = logging.getLogger(__name__) | CODE |
| LOW | app/services/multi_source_basics_sync_service.py | 25 | logger = logging.getLogger(__name__) | CODE |
| LOW | app/services/social_media_service.py | 14 | logger = logging.getLogger(__name__) | CODE |
| LOW | app/services/stock_data_service.py | 20 | logger = logging.getLogger(__name__) | CODE |
| LOW | app/services/quotes_ingestion_service.py | 13 | logger = logging.getLogger(__name__) | CODE |
| LOW | app/services/model_capability_service.py | 19 | logger = logging.getLogger(__name__) | CODE |
| LOW | app/services/redis_progress_tracker.py | 8 | __all__ = [ | CODE |
| LOW | app/services/financial_data_service.py | 14 | logger = logging.getLogger(__name__) | CODE |
| LOW | app/services/progress_log_handler.py | 8 | __all__ = [ | CODE |
| LOW | app/services/memory_state_manager.py | 14 | logger = logging.getLogger(__name__) | CODE |
| LOW | app/services/historical_data_service.py | 15 | logger = logging.getLogger(__name__) | CODE |
| LOW | app/services/database_screening_service.py | 13 | logger = logging.getLogger(__name__) | CODE |
| LOW | app/services/database_service.py | 26 | logger = logging.getLogger(__name__) | CODE |
| LOW | app/services/foreign_stock_service.py | 21 | logger = logging.getLogger(__name__) | CODE |
| LOW | app/services/enhanced_screening_service.py | 15 | logger = logging.getLogger(__name__) | CODE |
| LOW | app/services/config_service.py | 24 | logger = logging.getLogger(__name__) | CODE |
| LOW | app/services/news_data_service.py | 15 | logger = logging.getLogger(__name__) | CODE |
| LOW | app/services/internal_message_service.py | 15 | logger = logging.getLogger(__name__) | CODE |
| LOW | app/services/quotes_service.py | 13 | logger = logging.getLogger(__name__) | CODE |
| LOW | app/services/data_consistency_checker.py | 12 | logger = logging.getLogger(__name__) | CODE |
| LOW | app/services/analysis_service.py | 43 | logger = logging.getLogger(__name__) | CODE |
| LOW | app/services/websocket_manager.py | 12 | logger = logging.getLogger(__name__) | CODE |
| LOW | app/services/database/backups.py | 22 | logger = logging.getLogger(__name__) | CODE |
| LOW | app/services/database/__init__.py | 3 | __all__ = [ | CODE |
| LOW⚡ | app/services/progress/tracker.py | 348 | def _update_steps_by_progress(self, progress_pct: float) -> None: | CODE |
| 104 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | app/services/simple_analysis_service.py | 138 | if model_api_key and model_api_key.strip() and model_api_key != "your-api-key": | CODE |
| HIGH | app/services/simple_analysis_service.py | 143 | if provider_api_key and provider_api_key.strip() and provider_api_key != "your-api-key": | CODE |
| HIGH | app/services/simple_analysis_service.py | 203 | if provider_api_key and provider_api_key.strip() and provider_api_key != "your-api-key": | CODE |
| HIGH | app/services/simple_analysis_service.py | 262 | if provider_api_key and provider_api_key.strip() and provider_api_key != "your-api-key": | CODE |
| HIGH | app/services/simple_analysis_service.py | 309 | if api_key and api_key.strip() and api_key != "your-api-key": | 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/google-ai-base-url-support.md | 147 | google_api_key="YOUR_API_KEY" | CODE |
| HIGH | docs/google-ai-base-url-support.md | 157 | google_api_key="YOUR_API_KEY", | CODE |
| HIGH | docs/configuration/UNIFIED_CONFIG.md | 135 | api_key="your-api-key", | CODE |
| HIGH | docs/configuration/UNIFIED_CONFIG.md | 170 | api_key: 'your-api-key' | CODE |
| HIGH | docs/configuration/API_KEY_PRIORITY.md | 141 | api_key = "your-api-key-here" | CODE |
| HIGH | docs/configuration/dashscope-config.md | 229 | dashscope.api_key = "your_api_key" | CODE |
| HIGH | docs/configuration/migration/CONFIG_MIGRATION.md | 177 | api_key: 'your-api-key', | CODE |
| HIGH | docs/guides/config-management-guide.md | 95 | "api_key": "sk-your-api-key-here", | CODE |
| HIGH | docs/guides/stock_data_sdk_integration_guide.md | 438 | NEW_SDK_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 |
| HIGH | examples/demo_deepseek_analysis.py | 38 | logger.info(f" DEEPSEEK_API_KEY=your_api_key") | CODE |
| HIGH | examples/simple_analysis_demo.py | 29 | logger.info(f"💡 在 .env 文件中添加: DASHSCOPE_API_KEY=your_api_key") | CODE |
| HIGH | examples/dashscope_examples/demo_dashscope.py | 38 | logger.info(f" Windows: set DASHSCOPE_API_KEY=your_api_key") | CODE |
| HIGH | examples/dashscope_examples/demo_dashscope.py | 39 | logger.info(f" Linux/Mac: export DASHSCOPE_API_KEY=your_api_key") | CODE |
| HIGH | examples/dashscope_examples/demo_dashscope.py | 52 | logger.info(f" Windows: set FINNHUB_API_KEY=your_api_key") | CODE |
| HIGH | examples/dashscope_examples/demo_dashscope.py | 53 | logger.info(f" Linux/Mac: export FINNHUB_API_KEY=your_api_key") | CODE |
| HIGH | scripts/test_google_api_connection.py | 26 | print("请在 .env 文件中设置:GOOGLE_API_KEY=your-api-key") | CODE |
| HIGH | scripts/test_qianfan_raw.py | 214 | print(" 方式1 (推荐): QIANFAN_API_KEY=your_api_key") | CODE |
| HIGH | scripts/test_api_key_validation.py | 31 | ("your-api-key-here", False, "占位符 - your- 前缀 + -here 后缀"), | CODE |
| HIGH | scripts/test_google_api_with_proxy.py | 39 | print("请在 .env 文件中设置:GOOGLE_API_KEY=your-api-key") | CODE |
| HIGH | scripts/test_api_key_priority.py | 42 | ("your-api-key-here", False, "占位符 (your-)"), | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | app/routers/stock_sync.py | 378 | # Step 2: 获取最新交易日和财务指标 | COMMENT |
| LOW⚡ | app/routers/stock_sync.py | 383 | # Step 3: 构建文档(参考 basics_sync_service 的逻辑) | COMMENT |
| LOW | app/routers/stock_sync.py | 356 | # Step 1: 获取股票基础信息 | COMMENT |
| LOW | app/routers/stock_sync.py | 478 | # Step 4: 更新数据库 | COMMENT |
| LOW | app/services/basics_sync_service.py | 194 | # Step 0: Check if Tushare is enabled | COMMENT |
| LOW⚡ | app/services/basics_sync_service.py | 206 | # Step 1: Fetch stock basic list from Tushare (blocking -> thread) | COMMENT |
| LOW⚡ | app/services/basics_sync_service.py | 211 | # Step 2: Determine latest trade_date and fetch daily_basic for financial metrics (blocking -> thread) | COMMENT |
| LOW⚡ | app/services/basics_sync_service.py | 219 | # Step 3: Upsert into MongoDB (batched bulk writes) | COMMENT |
| LOW | app/services/multi_source_basics_sync_service.py | 164 | # Step 1: 获取数据源管理器 | COMMENT |
| LOW⚡ | app/services/multi_source_basics_sync_service.py | 178 | # Step 2: 尝试从数据源获取股票列表 | COMMENT |
| LOW⚡ | app/services/multi_source_basics_sync_service.py | 188 | # Step 3: 获取最新交易日期和财务数据 | COMMENT |
| LOW | app/services/multi_source_basics_sync_service.py | 207 | # Step 5: 处理和更新数据(分批处理) | COMMENT |
| LOW | app/services/multi_source_basics_sync_service.py | 308 | # Step 7: 更新统计信息 | COMMENT |
| LOW | docs/fixes/data-source/fix_multi_source_basics_sync.md | 109 | # Step 0: Check if Tushare is enabled | COMMENT |
| LOW | …/design/v1.0.1/prompt_template_implementation_guide.md | 5 | ### Step 1: 创建模版存储结构 | COMMENT |
| LOW | …/design/v1.0.1/prompt_template_implementation_guide.md | 81 | ### Step 2: 创建模版管理器 | COMMENT |
| LOW⚡ | …/design/v1.0.1/prompt_template_implementation_guide.md | 92 | ### Step 3: 分析师集成 | COMMENT |
| LOW⚡ | …/design/v1.0.1/prompt_template_implementation_guide.md | 112 | ### Step 4: Web API 实现 | COMMENT |
| LOW | …/design/v1.0.1/prompt_template_implementation_guide.md | 124 | ### Step 5: 前端集成 | COMMENT |
| LOW⚡ | docs/design/v1.0.1/FINAL_DESIGN_NOTES.md | 145 | ### Step 1: 创建新集合 | COMMENT |
| LOW⚡ | docs/design/v1.0.1/FINAL_DESIGN_NOTES.md | 150 | ### Step 2: 创建索引 | COMMENT |
| LOW⚡ | docs/design/v1.0.1/FINAL_DESIGN_NOTES.md | 155 | ### Step 3: 导入系统模板 | COMMENT |
| LOW⚡ | docs/design/v1.0.1/FINAL_DESIGN_NOTES.md | 160 | ### Step 4: 创建默认偏好 | COMMENT |
| LOW⚡ | docs/design/v1.0.1/FINAL_DESIGN_NOTES.md | 165 | ### Step 5: 创建默认配置 | COMMENT |
| LOW⚡ | docs/design/v1.0.1/IMPLEMENTATION_IN_APP_DIRECTORY.md | 315 | ### Step 1: 创建模型文件 | COMMENT |
| LOW⚡ | docs/design/v1.0.1/IMPLEMENTATION_IN_APP_DIRECTORY.md | 323 | ### Step 2: 创建服务文件 | COMMENT |
| LOW⚡ | docs/design/v1.0.1/IMPLEMENTATION_IN_APP_DIRECTORY.md | 331 | ### Step 3: 创建路由文件 | COMMENT |
| LOW⚡ | docs/design/v1.0.1/IMPLEMENTATION_IN_APP_DIRECTORY.md | 339 | ### Step 4: 在main.py中注册路由 | COMMENT |
| LOW⚡ | docs/design/v1.0.1/IMPLEMENTATION_IN_APP_DIRECTORY.md | 349 | ### Step 5: 创建数据库集合和索引 | COMMENT |
| LOW⚡ | docs/design/v1.0.1/INTEGRATION_WITH_EXISTING_SYSTEM.md | 240 | ### Step 1: 创建新集合 | COMMENT |
| LOW⚡ | docs/design/v1.0.1/INTEGRATION_WITH_EXISTING_SYSTEM.md | 250 | ### Step 2: 创建索引 | COMMENT |
| LOW⚡ | docs/design/v1.0.1/INTEGRATION_WITH_EXISTING_SYSTEM.md | 256 | ### Step 3: 创建系统模板 | COMMENT |
| LOW⚡ | docs/design/v1.0.1/INTEGRATION_WITH_EXISTING_SYSTEM.md | 262 | ### Step 4: 创建默认偏好 | COMMENT |
| LOW⚡ | docs/design/v1.0.1/INTEGRATION_WITH_EXISTING_SYSTEM.md | 268 | ### Step 5: 创建默认配置 | COMMENT |
| LOW⚡ | docs/analysis/pe-pb-data-update-analysis.md | 62 | # Step 1: 获取股票基本信息列表 | COMMENT |
| LOW⚡ | docs/analysis/pe-pb-data-update-analysis.md | 65 | # Step 2: 获取最近交易日 | COMMENT |
| LOW⚡ | docs/analysis/pe-pb-data-update-analysis.md | 68 | # Step 3: 获取该交易日的 PE/PB 等指标 | COMMENT |
| LOW⚡ | docs/analysis/pe-pb-data-update-analysis.md | 74 | # Step 4: 更新到 MongoDB stock_basic_info 集合 | COMMENT |
| LOW⚡ | docs/development/BRANCH_MANAGEMENT_STRATEGY.md | 41 | # Step 1: 确保feature/tushare-integration包含所有v0.1.6功能 | COMMENT |
| LOW⚡ | docs/development/BRANCH_MANAGEMENT_STRATEGY.md | 45 | # Step 2: 合并到develop分支 | COMMENT |
| LOW⚡ | docs/development/BRANCH_MANAGEMENT_STRATEGY.md | 49 | # Step 3: 合并到main分支并打标签 | COMMENT |
| LOW⚡ | docs/development/BRANCH_MANAGEMENT_STRATEGY.md | 55 | # Step 4: 清理功能分支 | COMMENT |
| LOW⚡ | docs/development/BRANCH_MANAGEMENT_STRATEGY.md | 64 | # Step 1: 从main创建新的功能分支 | COMMENT |
| LOW⚡ | docs/development/BRANCH_MANAGEMENT_STRATEGY.md | 69 | # Step 2: 开发新功能 | COMMENT |
| LOW⚡ | docs/development/BRANCH_MANAGEMENT_STRATEGY.md | 72 | # Step 3: 定期同步main分支 | COMMENT |
| LOW⚡ | docs/development/BRANCH_MANAGEMENT_STRATEGY.md | 78 | # Step 4: 完成后合并回main | COMMENT |
| LOW⚡ | docs/integration/dataflows_integration_plan.md | 246 | ### Step 1: 准备阶段 | COMMENT |
| LOW⚡ | docs/integration/dataflows_integration_plan.md | 251 | ### Step 2: 核心整合 | COMMENT |
| LOW⚡ | docs/integration/dataflows_integration_plan.md | 256 | ### Step 3: 接口扩展 | COMMENT |
| LOW⚡ | docs/integration/dataflows_integration_plan.md | 261 | ### Step 4: 测试验证 | COMMENT |
| LOW⚡ | docs/integration/dataflows_integration_plan.md | 266 | ### Step 5: 部署上线 | COMMENT |
| LOW⚡ | docs/deployment/stop-services-guide.md | 254 | #### Step 1: Stop Using PID File (Graceful Stop) | COMMENT |
| LOW⚡ | docs/deployment/stop-services-guide.md | 263 | #### Step 2: Force Stop All Related Processes (Fallback) | COMMENT |
| LOW⚡ | docs/deployment/stop-services-guide.md | 272 | #### Step 3: Cleanup Temporary Files | COMMENT |
| LOW⚡ | docs/deployment/stop-services-guide.md | 280 | #### Step 4: Verify Service Status | COMMENT |
| LOW⚡ | cli/main.py | 560 | # Step 1: Market selection | COMMENT |
| LOW⚡ | cli/main.py | 570 | # Step 2: Ticker symbol | COMMENT |
| LOW⚡ | cli/main.py | 580 | # Step 3: Analysis date | COMMENT |
| LOW⚡ | cli/main.py | 603 | # Step 5: Research depth | COMMENT |
| LOW⚡ | cli/main.py | 612 | # Step 6: LLM Provider | COMMENT |
| 2 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | web/app.py | 574 | const newUrl = currentUrl.origin + currentUrl.pathname + '?' + existingParams.toString(); | CODE |
| HIGH | web/utils/auth_manager.py | 82 | if (!authData) return null; | CODE |
| HIGH | web/utils/auth_manager.py | 92 | return null; | CODE |
| HIGH | web/utils/auth_manager.py | 103 | return null; | CODE |
| HIGH | web/components/sidebar.py | 47 | console.log('Loaded from localStorage:', key, value || defaultValue); | CODE |
| HIGH | web/components/sidebar.py | 48 | return value || defaultValue; | CODE |
| HIGH | scripts/check_old_mongodb_volume.py | 139 | if (config.llm_configs && config.llm_configs.length > 0) {{ | CODE |
| HIGH | scripts/check_old_mongodb_volume.py | 148 | if (config.data_source_configs && config.data_source_configs.length > 0) {{ | CODE |
| HIGH | scripts/fix_docker_logging.py | 258 | print("2. 重启容器: docker-compose down && docker-compose up -d") | STRING |
| HIGH | scripts/init_system_data.py | 327 | logger.info("2. 启动前端服务: cd frontend && npm run dev") | CODE |
| HIGH | scripts/fix_logging_config_error.py | 270 | print("2. 重启容器: docker-compose down && docker-compose up -d") | STRING |
| HIGH | scripts/verify_docker_logs.py | 234 | print(" 2. 重启容器: docker-compose down && docker-compose up -d") | CODE |
| HIGH | scripts/git/check_branch_overlap.py | 199 | git checkout feature/akshare-integration 2>/dev/null && git checkout -b backup/akshare-integration-$(date +%Y%m%d) | CODE |
| HIGH | scripts/git/check_branch_overlap.py | 200 | git checkout feature/akshare-integration-clean 2>/dev/null && git checkout -b backup/akshare-integration-clean-$(date +% | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| 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 |
| HIGH | app/services/news_data_service.py | 0 | 转换 mongodb objectid 为字符串,避免 json 序列化错误 args: data: 单个文档或文档列表 returns: 转换后的数据 | STRING |
| HIGH | app/services/internal_message_service.py | 0 | 转换 mongodb objectid 为字符串,避免 json 序列化错误 args: data: 单个文档或文档列表 returns: 转换后的数据 | STRING |
| HIGH | docs/fixes/mongodb_objectid_serialization_fix.md | 0 | 转换 mongodb objectid 为字符串,避免 json 序列化错误 args: data: 单个文档或文档列表 returns: 转换后的数据 | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | app/routers/stock_sync.py | 378 | # Step 2: 获取最新交易日和财务指标 | COMMENT |
| LOW⚡ | app/routers/stock_sync.py | 383 | # Step 3: 构建文档(参考 basics_sync_service 的逻辑) | COMMENT |
| LOW | app/routers/stock_sync.py | 356 | # Step 1: 获取股票基础信息 | COMMENT |
| LOW | app/routers/stock_sync.py | 478 | # Step 4: 更新数据库 | COMMENT |
| LOW | app/services/basics_sync_service.py | 194 | # Step 0: Check if Tushare is enabled | COMMENT |
| LOW⚡ | app/services/basics_sync_service.py | 206 | # Step 1: Fetch stock basic list from Tushare (blocking -> thread) | COMMENT |
| LOW⚡ | app/services/basics_sync_service.py | 211 | # Step 2: Determine latest trade_date and fetch daily_basic for financial metrics (blocking -> thread) | COMMENT |
| LOW⚡ | app/services/basics_sync_service.py | 219 | # Step 3: Upsert into MongoDB (batched bulk writes) | COMMENT |
| LOW | app/services/multi_source_basics_sync_service.py | 164 | # Step 1: 获取数据源管理器 | COMMENT |
| LOW⚡ | app/services/multi_source_basics_sync_service.py | 178 | # Step 2: 尝试从数据源获取股票列表 | COMMENT |
| LOW⚡ | app/services/multi_source_basics_sync_service.py | 188 | # Step 3: 获取最新交易日期和财务数据 | COMMENT |
| LOW | app/services/multi_source_basics_sync_service.py | 207 | # Step 5: 处理和更新数据(分批处理) | COMMENT |
| LOW | app/services/multi_source_basics_sync_service.py | 308 | # Step 7: 更新统计信息 | COMMENT |
| LOW⚡ | cli/main.py | 560 | # Step 1: Market selection | COMMENT |
| LOW⚡ | cli/main.py | 570 | # Step 2: Ticker symbol | COMMENT |
| LOW⚡ | cli/main.py | 580 | # Step 3: Analysis date | COMMENT |
| LOW⚡ | cli/main.py | 603 | # Step 5: Research depth | COMMENT |
| LOW⚡ | cli/main.py | 612 | # Step 6: LLM Provider | COMMENT |
| LOW⚡ | cli/main.py | 621 | # Step 7: Thinking agents | COMMENT |
| LOW | cli/main.py | 591 | # Step 4: Select analysts | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | docker-compose.hub.nginx.arm.yml | 1 | version: '3.8' | COMMENT |
| LOW | docker-compose.hub.nginx.yml | 1 | version: '3.8' | COMMENT |
| LOW | requirements-lock.txt | 1 | # ==================== 锁定版本依赖文件 ==================== | COMMENT |
| LOW | app/routers/stock_sync.py | 281 | if hist_result.get("success_count", 0) > 0: | COMMENT |
| LOW | app/routers/analysis.py | 921 | # user: dict = Depends(get_current_user), | COMMENT |
| LOW | app/worker/tushare_sync_service.py | 401 | # Dict[symbol, quote_data] | COMMENT |
| LOW | docs/design/v1.0.1/prompt_template_usage_examples.md | 61 | print("---") | COMMENT |
| LOW | docs/design/v1.0.1/prompt_template_usage_examples.md | 121 | print(rendered['system_prompt']) | COMMENT |
| LOW | docs/releases/upgrade-to-v0.1.13-preview.md | 201 | ### 问题 2: Google AI包导入失败 | COMMENT |
| LOW | docs/configuration/docker-config.md | 221 | COMMENT | |
| LOW | docs/configuration/quotes_ingestion_config.md | 61 | # - 付费用户建议: 5-60 秒 | COMMENT |
| LOW | …/integration/providers/tushare/tdx_removal_complete.md | 121 | #### 1. 检查环境变量 | COMMENT |
| LOW | docs/features/aggregator/CHANGELOG_AGGREGATOR.md | 201 | ### 使用聚合渠道模型 | COMMENT |
| LOW | docs/blog/2025-10-24-realtime-quotes-optimization.md | 401 | # 📈 实时行情入库服务 | COMMENT |
| LOW | docs/guides/report-export-guide.md | 61 | ## 📊 使用指南 | COMMENT |
| LOW | docs/guides/report-export-guide.md | 81 | # 1. 滚动到页面底部 | COMMENT |
| LOW | …cs/guides/tushare_unified/data_initialization_guide.md | 61 | COMMENT | |
| LOW | docs/deployment/SIMPLE_DEPLOYMENT_GUIDE.md | 41 | COMMENT | |
| LOW | docs/deployment/demo/deploy_demo_with_docker.md | 621 | # 找到 DASHSCOPE_API_KEY= 这一行 | COMMENT |
| LOW | docs/deployment/demo/deploy_demo_with_docker.md | 661 | cd ~/tradingagents-demo | COMMENT |
| LOW | docs/deployment/demo/deploy_demo_with_docker.md | 681 | # 将等号后面改为你的 API Key,例如:DEEPSEEK_API_KEY=sk-xxxxxxxxxxxxx | COMMENT |
| LOW | docs/deployment/demo/deploy_demo_with_docker.md | 721 | # 3. 下载环境配置文件 | COMMENT |
| LOW | tradingagents/config/runtime_settings.py | 41 | # 临时解决方案:完全禁用动态配置获取,避免事件循环冲突 | COMMENT |
| LOW | tradingagents/config/runtime_settings.py | 61 | # # 第三次检查:在调用asyncio.run之前再次确认 | COMMENT |
| LOW | scripts/smart_start.sh | 1 | #!/bin/bash | COMMENT |
| LOW | scripts/deploy_demo.sh | 1 | #!/bin/bash | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | main.py | 9 | # Create a custom config | COMMENT |
| MEDIUM | app/worker.py | 106 | # Define a thread-safe callback to publish progress from worker thread | COMMENT |
| MEDIUM⚡ | cli/main.py | 552 | # Create a boxed questionnaire for each step | COMMENT |
| MEDIUM | cli/main.py | 152 | # Create a deque to store recent messages with a maximum length | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | docs/design/v1.0.1/prompt_template_technical_spec.md | 25 | 加载指定的模版 Args: analyst_type: 分析师类型 (fundamentals/market/news/social) te | STRING |
| HIGH | …gagents/dataflows/providers/us/alpha_vantage_common.py | 167 | 发起 Alpha Vantage API 请求 Args: function: API 函数名(如 NEWS_SENTIMENT, OVERVIEW 等) params: 请求参数 | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | app/routers/analysis.py | 985 | CODE | |
| LOW | app/routers/reports.py | 120 | CODE | |
| LOW | app/routers/operation_logs.py | 26 | CODE | |
| LOW | app/services/enhanced_screening_service.py | 203 | CODE | |
| LOW | web/components/analysis_results.py | 125 | CODE | |
| LOW | tests/test_asyncio_thread_pool_fix.py | 36 | CODE | |
| LOW | tradingagents/graph/reflection.py | 75 | CODE | |
| LOW | tradingagents/utils/stock_validator.py | 19 | CODE | |
| LOW | tradingagents/dataflows/providers/us/optimized.py | 321 | CODE | |
| LOW | tradingagents/dataflows/news/google_news.py | 41 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| 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 | 380 | # Check if there are any available reports; if not, return a notification | COMMENT |
| LOW | tradingagents/dataflows/interface.py | 427 | # Check if there are any available reports; if not, return a notification | COMMENT |
| LOW | tradingagents/dataflows/interface.py | 474 | # Check if there are any available reports; if not, return a notification | COMMENT |
| LOW | tradingagents/dataflows/interface.py | 877 | # Check if data is empty | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| 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 | 536 | email: authStore.user?.email || 'admin@example.com', | CODE |
| LOW | frontend/src/views/Settings/index.vue | 587 | generalSettings.value.email = newUser.email || 'admin@example.com' | CODE |
| LOW | docs/security/auth_system_improvement.md | 79 | "email": "user@example.com", | CODE |
| LOW | docs/blog/green-version-backup-restore-upgrade.md | 1174 | Send-MailMessage -To "admin@example.com" ` | CODE |
| LOW | docs/deployment/database/export-sanitization-guide.md | 117 | "email": "admin@example.com", | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | …gagents/dataflows/providers/us/alpha_vantage_common.py | 140 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tradingagents/agents/utils/memory.py | 659 | # Example usage | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tradingagents/dataflows/optimized_china_data.py | 568 | else: # detailed, comprehensive | STRING |