Repository Analysis

sansan0/TrendRadar

⭐AI-driven public opinion & trend monitor with multi-platform aggregation, RSS, and smart alerts.🎯 告别信息过载,你的 AI 舆情监控助手与热点筛选工具!聚合多平台热点 + RSS 订阅,支持关键词精准筛选。AI 智能筛选新闻 + AI 翻译 + AI 分析简报直推手机,也支持接入 MCP 架构,赋能 AI 自然语言对话分析、情感洞察与趋势预测等。支持 Docker ,数据本地/云端自持。集成微信/飞书/钉钉/Telegram/邮件/ntfy/bark/slack 等渠道智能推送。

37.0 Strong AI signal View on GitHub

Analysis Overview

This report presents the forensic synthetic code analysis of sansan0/TrendRadar, a Python project with 60,535 GitHub stars. SynthScan v2.0 examined 57,917 lines of code across 110 source files, recording 1072 pattern matches distributed across 14 syntactic categories. The overall adjusted score of 37.0 places this repository in the Strong AI signal band.

The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).

37.0
Adjusted Score
37.0
Raw Score
100%
Time Factor
2026-07-08
Last Push
60.5K
Stars
Python
Language
57.9K
Lines of Code
110
Files
1.1K
Pattern Hits
2026-07-14
Scan Date
1.39
HC Hit Rate

What These Metrics Mean

Adjusted Score
Primary synthetic code indicator. Raw score normalised per 1,000 lines of code and multiplied by the temporal discount factor. This is the definitive comparative metric — use it to rank repositories by AI authorship density.
Raw Score
The unmodified sum of all severity-weighted, context-multiplied pattern match scores before temporal discounting. Reflects the absolute signal strength independent of when the repository was last active.
Time Factor
The temporal discount multiplier (0–100%) applied to the raw score. Repositories last updated before ChatGPT's launch (Nov 2022) receive a 5% factor. Full signal is only assigned to repositories active in the post-adoption era (Jan 2024+).
Pattern Hits
Total count of individual pattern matches across all files and categories. A high hit count with a low score may indicate a very large codebase with isolated AI snippets; a low count with a high score indicates dense, concentrated AI signatures.
HC Hit Rate
High+Critical pattern hits per file, averaged across the repository. This orthogonal signal catches repositories where a few files are densely packed with high-severity AI tells — a strong indicator even when the normalised score appears moderate due to codebase size.
Lines of Code / Files
Total lines and files analysed. The scanner examines 94 file extensions. These denominators are used to normalise the score, enabling fair comparison between repositories of vastly different sizes.

Score History

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.

Severity Breakdown

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.

CRITICAL 0HIGH 153MEDIUM 289LOW 630

Directory Score Breakdown

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.

Pattern Findings

The scanner identified 1072 distinct pattern matches across 14 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.

Decorative Section Separators288 hits · 892 pts
SeverityFileLineSnippetContext
MEDIUMconfig/config.en.yaml1# ═══════════════════════════════════════════════════════════════COMMENT
MEDIUMconfig/config.en.yaml4# ═══════════════════════════════════════════════════════════════COMMENT
MEDIUMconfig/config.en.yaml10# ===============================================================COMMENT
MEDIUMconfig/config.en.yaml12# ===============================================================COMMENT
MEDIUMconfig/config.en.yaml24# ===============================================================COMMENT
MEDIUMconfig/config.en.yaml41# ===============================================================COMMENT
MEDIUMconfig/config.en.yaml47# ===============================================================COMMENT
MEDIUMconfig/config.en.yaml64# ===============================================================COMMENT
MEDIUMconfig/config.en.yaml106# ===============================================================COMMENT
MEDIUMconfig/config.en.yaml113# ===============================================================COMMENT
MEDIUMconfig/config.en.yaml153# ===============================================================COMMENT
MEDIUMconfig/config.en.yaml155# ===============================================================COMMENT
MEDIUMconfig/config.en.yaml175# ===============================================================COMMENT
MEDIUMconfig/config.en.yaml177# ===============================================================COMMENT
MEDIUMconfig/config.en.yaml190# ===============================================================COMMENT
MEDIUMconfig/config.en.yaml192# ===============================================================COMMENT
MEDIUMconfig/config.en.yaml220# ===============================================================COMMENT
MEDIUMconfig/config.en.yaml224# ===============================================================COMMENT
MEDIUMconfig/config.en.yaml254# ===============================================================COMMENT
MEDIUMconfig/config.en.yaml262# ===============================================================COMMENT
MEDIUMconfig/config.en.yaml308# ===============================================================COMMENT
MEDIUMconfig/config.en.yaml310# ===============================================================COMMENT
MEDIUMconfig/config.en.yaml352# ===============================================================COMMENT
MEDIUMconfig/config.en.yaml354# ===============================================================COMMENT
MEDIUMconfig/config.en.yaml409# ===============================================================COMMENT
MEDIUMconfig/config.en.yaml411# ===============================================================COMMENT
MEDIUMconfig/config.en.yaml436# ===============================================================COMMENT
MEDIUMconfig/config.en.yaml440# ===============================================================COMMENT
MEDIUMconfig/config.en.yaml456# ===============================================================COMMENT
MEDIUMconfig/config.en.yaml458# ===============================================================COMMENT
MEDIUMconfig/ai_translation_prompt.txt1# ═══════════════════════════════════════════════════════════════COMMENT
MEDIUMconfig/ai_translation_prompt.txt4# ═══════════════════════════════════════════════════════════════COMMENT
MEDIUMconfig/ai_translation_prompt.txt12# ═══════════════════════════════════════════════════════════════COMMENT
MEDIUMconfig/ai_interests.txt1# ═══════════════════════════════════════════════════════════════COMMENT
MEDIUMconfig/ai_interests.txt4# ═══════════════════════════════════════════════════════════════COMMENT
MEDIUMconfig/ai_analysis_prompt.txt1# ═══════════════════════════════════════════════════════════════COMMENT
MEDIUMconfig/ai_analysis_prompt.txt4# ═══════════════════════════════════════════════════════════════COMMENT
MEDIUMconfig/ai_analysis_prompt.txt21# ═══════════════════════════════════════════════════════════════COMMENT
MEDIUMconfig/config.yaml1# ═══════════════════════════════════════════════════════════════COMMENT
MEDIUMconfig/config.yaml4# ═══════════════════════════════════════════════════════════════COMMENT
MEDIUMconfig/config.yaml10# ===============================================================COMMENT
MEDIUMconfig/config.yaml12# ===============================================================COMMENT
MEDIUMconfig/config.yaml24# ===============================================================COMMENT
MEDIUMconfig/config.yaml41# ===============================================================COMMENT
MEDIUMconfig/config.yaml47# ===============================================================COMMENT
MEDIUMconfig/config.yaml63# ===============================================================COMMENT
MEDIUMconfig/config.yaml105# ===============================================================COMMENT
MEDIUMconfig/config.yaml112# ===============================================================COMMENT
MEDIUMconfig/config.yaml152# ===============================================================COMMENT
MEDIUMconfig/config.yaml154# ===============================================================COMMENT
MEDIUMconfig/config.yaml174# ===============================================================COMMENT
MEDIUMconfig/config.yaml176# ===============================================================COMMENT
MEDIUMconfig/config.yaml189# ===============================================================COMMENT
MEDIUMconfig/config.yaml191# ===============================================================COMMENT
MEDIUMconfig/config.yaml219# ===============================================================COMMENT
MEDIUMconfig/config.yaml223# ===============================================================COMMENT
MEDIUMconfig/config.yaml253# ===============================================================COMMENT
MEDIUMconfig/config.yaml261# ===============================================================COMMENT
MEDIUMconfig/config.yaml307# ===============================================================COMMENT
MEDIUMconfig/config.yaml309# ===============================================================COMMENT
228 more matches not shown…
Cross-Language Confusion82 hits · 354 pts
SeverityFileLineSnippetContext
HIGHtrendradar/report/html.py2379 var timer = null;CODE
HIGHtrendradar/report/html.py2386 item.style.display = (!query || title.toLowerCase().indexOf(query) !== -1) ? '' : 'none';CODE
HIGHtrendradar/report/html.py2390 item.style.display = (!query || title.toLowerCase().indexOf(query) !== -1) ? '' : 'none';CODE
HIGHtrendradar/report/html.py2867 lines.push('# ' + (headerTitle ? headerTitle.textContent.trim() : 'TrendRadar'));CODE
HIGHtrendradar/report/html.py2868 lines.push('');CODE
HIGHtrendradar/report/html.py2876 if (label && value) {CODE
HIGHtrendradar/report/html.py2877 lines.push('- **' + label.textContent.trim() + '**: ' + value.textContent.trim());CODE
HIGHtrendradar/report/html.py2880 lines.push('');CODE
HIGHtrendradar/report/html.py2899 if (rank && rank.textContent.trim() && rank.textContent.trim() !== '?') meta.push('#' + rank.textConCODE
HIGHtrendradar/report/html.py2899 if (rank && rank.textContent.trim() && rank.textContent.trim() !== '?') meta.push('#' + rank.textConCODE
HIGHtrendradar/report/html.py2901 if (source) meta.push(source.textContent.trim());CODE
HIGHtrendradar/report/html.py2903 if (keyword) meta.push(keyword.textContent.trim());CODE
HIGHtrendradar/report/html.py2905 if (time) meta.push(time.textContent.trim());CODE
HIGHtrendradar/report/html.py2907 if (count) meta.push(count.textContent.trim());CODE
HIGHtrendradar/report/html.py2922 lines.push('## 热点新闻');CODE
HIGHtrendradar/report/html.py2923 lines.push('');CODE
HIGHtrendradar/report/html.py2928 lines.push('### ' + wordName.textContent.trim() + (wordCount ? ' (' + wordCount.textContent.CODE
HIGHtrendradar/report/html.py2929 lines.push('');CODE
HIGHtrendradar/report/html.py2934 if (line) lines.push(line);CODE
HIGHtrendradar/report/html.py2936 lines.push('');CODE
HIGHtrendradar/report/html.py2944 lines.push('## ' + (newTitle ? newTitle.textContent.trim() : '本次新增热点'));CODE
HIGHtrendradar/report/html.py2945 lines.push('');CODE
HIGHtrendradar/report/html.py2950 lines.push('### ' + srcTitle.textContent.trim());CODE
HIGHtrendradar/report/html.py2951 lines.push('');CODE
HIGHtrendradar/report/html.py2956 if (line) lines.push(line);CODE
HIGHtrendradar/report/html.py2958 lines.push('');CODE
HIGHtrendradar/report/html.py2966 lines.push('## ' + (rssSectionTitle ? rssSectionTitle.textContent.trim() : 'RSS 订阅更新'));CODE
HIGHtrendradar/report/html.py2967 lines.push('');CODE
HIGHtrendradar/report/html.py2973 lines.push('### ' + feedName.textContent.trim() + (feedCount ? ' (' + feedCount.textContent.CODE
HIGHtrendradar/report/html.py2974 lines.push('');CODE
HIGHtrendradar/report/html.py2984 if (time) meta.push(time.textContent.trim());CODE
HIGHtrendradar/report/html.py2986 if (author) meta.push(author.textContent.trim());CODE
HIGHtrendradar/report/html.py2991 lines.push(line);CODE
HIGHtrendradar/report/html.py2993 lines.push('');CODE
HIGHtrendradar/report/html.py3003 lines.push('## AI 分析');CODE
HIGHtrendradar/report/html.py3004 lines.push('');CODE
HIGHtrendradar/report/html.py3005 lines.push('> ' + aiError.textContent.trim());CODE
HIGHtrendradar/report/html.py3006 lines.push('');CODE
HIGHtrendradar/report/html.py3011 lines.push('## ' + (aiTitle ? aiTitle.textContent.trim() : 'AI 热点分析'));CODE
HIGHtrendradar/report/html.py3012 lines.push('');CODE
HIGHtrendradar/report/html.py3018 lines.push('### ' + blockTitle.textContent.trim());CODE
HIGHtrendradar/report/html.py3019 lines.push('');CODE
HIGHtrendradar/report/html.py3022 lines.push(blockContent.textContent.trim());CODE
HIGHtrendradar/report/html.py3023 lines.push('');CODE
HIGHtrendradar/report/html.py3033 lines.push('## ' + (standaloneTitle ? standaloneTitle.textContent.trim() : '独立展示区'));CODE
HIGHtrendradar/report/html.py3034 lines.push('');CODE
HIGHtrendradar/report/html.py3040 lines.push('### ' + name.textContent.trim() + (cnt ? ' (' + cnt.textContent.trim() + ')' : 'CODE
HIGHtrendradar/report/html.py3041 lines.push('');CODE
HIGHtrendradar/report/html.py3046 if (line) lines.push(line);CODE
HIGHtrendradar/report/html.py3048 lines.push('');CODE
HIGHtrendradar/report/html.py3057 lines.push('## 抓取异常');CODE
HIGHtrendradar/report/html.py3058 lines.push('');CODE
HIGHtrendradar/report/html.py3060 lines.push('- ' + item.textContent.trim());CODE
HIGHtrendradar/report/html.py3062 lines.push('');CODE
HIGHtrendradar/report/html.py3067 lines.push('---');CODE
HIGHtrendradar/report/html.py3068 lines.push('*Generated by TrendRadar*');CODE
HIGHtrendradar/report/html.py3087 var savedMode = null;CODE
HIGHtrendradar/report/html.py3089 if (savedMode === '1' || (savedMode === null && window.innerWidth > 768)) {CODE
HIGHtrendradar/report/html.py3096 var savedDark = null;CODE
HIGHtrendradar/report/html.py2299 var tabBar = wrapper ? wrapper.querySelector('.tab-bar') : null;CODE
22 more matches not shown…
Docstring Block Structure68 hits · 340 pts
SeverityFileLineSnippetContext
HIGHtrendradar/core/frequency.py99 加载频率词配置 配置文件格式说明: - 每个词组由空行分隔 - [GLOBAL_FILTER] 区域定义全局过滤词 - [WORD_GROUPS] 区域定义词组(默认) 词组语法: STRING
HIGHtrendradar/core/config.py12 解析多账号配置,返回账号列表 Args: config_value: 配置值字符串,多个账号用分隔符分隔 separator: 分隔符,默认为 ; Returns: STRING
HIGHtrendradar/core/config.py45 验证配对配置的数量是否一致 对于需要多个配置项配对的渠道(如 Telegram 的 token 和 chat_id), 验证所有配置项的账号数量是否一致。 Args: configs: STRING
HIGHtrendradar/core/config.py102 限制账号数量 当配置的账号数量超过最大限制时,只使用前 N 个账号, 并输出警告信息。 Args: accounts: 账号列表 max_count: 最大账号数量 STRING
HIGHtrendradar/core/config.py129 安全获取指定索引的账号值 当索引超出范围或账号值为空时,返回默认值。 Args: accounts: 账号列表 index: 索引 default: 默认值 STRING
HIGHtrendradar/core/loader.py525 加载配置文件 Args: config_path: 配置文件路径,默认从环境变量 CONFIG_PATH 获取或使用 config/config.yaml Returns: 包含STRING
HIGHtrendradar/utils/url.py39 标准化 URL,去除动态参数 用于数据库去重,确保同一条新闻的不同 URL 变体能被正确识别为同一条。 处理规则: 1. 去除平台特定的动态参数(如微博的 band_rank) 2. 去除通用追STRING
HIGHtrendradar/ai/client.py47 调用 AI 模型进行对话 Args: messages: 消息列表,格式: [{"role": "system/user/assistant", "content": "..."}STRING
HIGHmcp_server/server.py122 【推荐优先调用】将自然语言日期表达式解析为标准日期范围 **为什么需要这个工具?** 用户经常使用"本周"、"最近7天"等自然语言表达日期,但 AI 模型自己计算日期 可能导致不一致的结果。此工具在服务器STRING
HIGHmcp_server/server.py225 获取热点话题统计 Args: top_n: 返回TOP N话题,默认10 mode: 时间模式 - "daily": 当日累计数据统计 - STRING
HIGHmcp_server/server.py261 获取最新的 RSS 订阅数据(支持多日查询) RSS 数据与热榜新闻分开存储,按时间流展示,适合获取特定来源的最新内容。 Args: feeds: RSS 源 ID 列表,如 ['hacker-STRING
HIGHmcp_server/server.py295 搜索 RSS 数据 在 RSS 订阅数据中搜索包含指定关键词的文章。 Args: keyword: 搜索关键词(必需) feeds: RSS 源 ID 列表,如 ['hackerSTRING
HIGHmcp_server/server.py398 统一话题趋势分析工具 - 整合多种趋势分析模式 建议:使用自然语言日期时,先调用 resolve_date_range 获取精确日期范围。 Args: topic: 话题关键词(必需) STRING
HIGHmcp_server/server.py447 统一数据洞察分析工具 - 整合多种数据分析模式 Args: insight_type: 洞察类型,可选值: - "platform_compare": 平台对比分析(对比不同平台对STRING
HIGHmcp_server/server.py492 分析新闻的情感倾向和热度趋势 建议:使用自然语言日期时,先调用 resolve_date_range 获取精确日期范围。 Args: topic: 话题关键词(可选) platfSTRING
HIGHmcp_server/server.py532 查找与指定新闻标题相关的其他新闻(支持当天和历史数据) Args: reference_title: 参考新闻标题(完整或部分) date_range: 日期范围(可选) STRING
HIGHmcp_server/server.py599 跨平台新闻聚合 - 对相似新闻进行去重合并 将不同平台报道的同一事件合并为一条聚合新闻,显示跨平台覆盖情况和综合热度。 Args: date_range: 日期范围,不指定则查询今天 STRING
HIGHmcp_server/server.py639 时期对比分析 - 比较两个时间段的新闻数据 对比不同时期的热点话题、平台活跃度、新闻数量等维度。 **使用场景:** - 对比本周和上周的热点变化 - 分析某个话题在两个时期的热度差异 STRING
HIGHmcp_server/server.py705 统一搜索接口,支持多种搜索模式,可同时搜索热榜和RSS 建议:使用自然语言日期时,先调用 resolve_date_range 获取精确日期范围。 Args: query: 搜索关键词或内容片段STRING
HIGHmcp_server/server.py794 检查版本更新(同时检查 TrendRadar 和 MCP Server) 比较本地版本与 GitHub 远程版本,判断是否需要更新。 Args: proxy_url: 可选的代理URL,用于访问STRING
HIGHmcp_server/server.py820 手动触发一次爬取任务(可选持久化) Args: platforms: 平台ID列表,如 ['zhihu', 'weibo'],不指定则使用所有平台 save_to_local: 是否保存到STRING
HIGHmcp_server/server.py849 从远程存储拉取数据到本地 用于 MCP Server 等场景:爬虫存到远程云存储(如 Cloudflare R2), MCP Server 拉取到本地进行分析查询。 Args: daysSTRING
HIGHmcp_server/server.py905 列出本地/远程可用的日期范围 查看本地和远程存储中有哪些日期的数据可用。 Args: source: 数据来源 - "local": 仅本地 - STRING
HIGHmcp_server/server.py935 读取指定 URL 的文章内容,返回 LLM 友好的 Markdown 格式 通过 Jina AI Reader 将网页转换为干净的 Markdown,自动去除广告、导航栏等噪音内容。 适合用于:阅读新闻正文、获取STRING
HIGHmcp_server/server.py975 批量读取多篇文章内容(最多 5 篇,间隔 5 秒) 逐篇请求文章内容,每篇之间自动间隔 5 秒以遵守速率限制。 **典型使用流程:** 1. 先用 search_news(include_url=TruSTRING
HIGHmcp_server/server.py1014 获取通知渠道的格式化策略指南 返回各渠道支持的 Markdown 特性、格式限制和最佳格式化提示词。 在调用 send_notification 之前使用此工具,可以了解目标渠道的格式要求, 从而生成最佳STRING
HIGHmcp_server/server.py1077 向已配置的通知渠道发送消息 接受 markdown 格式内容,内部自动适配各渠道的格式要求和限制: - 飞书:Markdown 卡片消息(支持 **粗体**、<font color>彩色文本、[链接](url)、STRING
HIGHmcp_server/tools/search_tools.py43 统一新闻搜索工具 - 整合多种搜索模式,支持同时搜索热榜和RSS Args: query: 查询内容(必需)- 关键词、内容片段或实体名称 search_mSTRING
HIGHmcp_server/tools/analytics.py119 统一数据洞察分析工具 - 整合多种数据分析模式 Args: insight_type: 洞察类型,可选值: - "platform_compare"STRING
HIGHmcp_server/tools/analytics.py272 热度趋势分析 - 追踪特定话题的热度变化趋势 Args: topic: 话题关键词 date_range: 日期范围(可选) STRING
HIGHmcp_server/tools/analytics.py430 平台对比分析 - 对比不同平台对同一话题的关注度 Args: topic: 话题关键词(可选,不指定则对比整体活跃度) date_range: 日期范围,格STRING
HIGHmcp_server/tools/analytics.py554 关键词共现分析 - 分析哪些关键词经常同时出现 Args: min_frequency: 最小共现频次 top_n: 返回TOP N关键词对 STRING
HIGHmcp_server/tools/analytics.py666 情感倾向分析 - 生成用于 AI 情感分析的结构化提示词 本工具收集新闻数据并生成优化的 AI 提示词,你可以将其发送给 AI 进行深度情感分析。 Args: tSTRING
HIGHmcp_server/tools/analytics.py944 相似新闻查找 - 基于标题相似度查找相关新闻 Args: reference_title: 参考标题 threshold: 相似度阈值(0-1之间) STRING
HIGHmcp_server/tools/analytics.py1059 实体识别搜索 - 搜索包含特定人物/地点/机构的新闻 Args: entity: 实体名称 entity_type: 实体类型(person/locatioSTRING
HIGHmcp_server/tools/analytics.py1188 每日/每周摘要生成器 - 自动生成热点摘要报告 Args: report_type: 报告类型(daily/weekly) date_range: 自定义日STRING
HIGHmcp_server/tools/analytics.py1367 平台活跃度统计 - 统计各平台的发布频率和活跃时间段 Args: date_range: 日期范围(可选) Returns: 平台活跃度统STRING
HIGHmcp_server/tools/analytics.py1495 话题生命周期分析 - 追踪话题从出现到消失的完整周期 Args: topic: 话题关键词 date_range: 日期范围(可选) STRING
HIGHmcp_server/tools/analytics.py1653 异常热度检测 - 自动识别突然爆火的话题 Args: threshold: 热度突增倍数阈值 time_window: 检测时间窗口(小时) STRING
HIGHmcp_server/tools/analytics.py1792 话题预测 - 基于历史数据预测未来可能的热点 Args: lookahead_hours: 预测未来多少小时 confidence_threshold: 置STRING
HIGHmcp_server/utils/validators.py22 将字符串解析为列表 支持格式: - JSON 数组: '["zhihu", "weibo"]' - Python 列表字符串: "['zhihu', 'weibo']" - 逗号分隔: "zhihSTRING
HIGHmcp_server/utils/validators.py74 将字符串解析为整数 Args: value: 字符串值 param_name: 参数名(用于错误消息) Returns: 解析后的整数 Raises: STRING
HIGHmcp_server/utils/validators.py106 将字符串解析为浮点数 Args: value: 字符串值 param_name: 参数名(用于错误消息) Returns: 解析后的浮点数 RaisesSTRING
HIGHmcp_server/utils/validators.py197 验证平台列表 Args: platforms: 平台ID列表或字符串,None表示使用 config.yaml 中配置的所有平台 支持多种格式: STRING
HIGHmcp_server/utils/validators.py258 验证数量限制参数 Args: limit: 限制数量(整数或字符串) default: 默认值 max_limit: 最大限制 Returns: STRING
HIGHmcp_server/utils/validators.py295 验证日期格式 Args: date_str: 日期字符串 (YYYY-MM-DD) Returns: datetime对象 Raises: InvaliSTRING
HIGHmcp_server/utils/validators.py317 规范化 date_range 参数 某些 MCP 客户端(特别是 HTTP 方式)会将 JSON 对象序列化为字符串传入。 此函数尝试将 JSON 字符串解析为 dict,如果不是 JSON 格式则保持原样。 STRING
HIGHmcp_server/utils/validators.py364 验证日期范围 Args: date_range: 日期范围,支持多种格式: - dict: {"start": "YYYY-MM-DD", "end": "YYYY-MM-DD"}STRING
HIGHmcp_server/utils/validators.py483 验证关键词 Args: keyword: 搜索关键词 Returns: 处理后的关键词 Raises: InvalidParameterError: 关STRING
HIGHmcp_server/utils/validators.py516 验证TOP N参数 Args: top_n: TOP N数量(整数或字符串) default: 默认值 Returns: 验证后的值 Raises: STRING
HIGHmcp_server/utils/validators.py533 验证模式参数 Args: mode: 模式字符串 valid_modes: 有效模式列表 default: 默认模式 Returns: 验证后的模STRING
HIGHmcp_server/utils/validators.py563 验证配置节参数 Args: section: 配置节名称 Returns: 验证后的配置节 Raises: InvalidParameterError:STRING
HIGHmcp_server/utils/validators.py586 验证阈值参数(浮点数) Args: threshold: 阈值(浮点数、整数或字符串) default: 默认值 min_value: 最小值 max_vaSTRING
HIGHmcp_server/utils/validators.py633 验证并解析日期查询字符串 Args: date_query: 日期查询字符串 allow_future: 是否允许未来日期 max_days_ago: 允许查询的最大天数 STRING
HIGHmcp_server/utils/date_parser.py93 解析日期查询字符串 支持的格式: - 相对日期(中文):今天、昨天、前天、大前天、N天前 - 相对日期(英文):today、yesterday、N days ago STRING
HIGHmcp_server/utils/date_parser.py279 将日期格式化为文件夹名称 Args: date: datetime对象 Returns: 文件夹名称,格式: YYYY-MM-DD STRING
HIGHmcp_server/utils/date_parser.py332 将自然语言日期表达式解析为标准日期范围 这是专门为 MCP 工具设计的方法,用于在服务器端解析日期表达式, 避免 AI 模型自己计算日期导致的不一致问题。 Args: STRING
HIGHmcp_server/services/data_service.py52 获取最新一批爬取的新闻数据 Args: platforms: 平台ID列表,None表示所有平台 limit: 返回条数限制 incSTRING
HIGHmcp_server/services/data_service.py127 按指定日期获取新闻 Args: target_date: 目标日期 platforms: 平台ID列表,None表示所有平台 limSTRING
HIGHmcp_server/services/data_service.py207 按关键词搜索新闻 Args: keyword: 搜索关键词 date_range: 日期范围 (start_date, end_date) STRING
8 more matches not shown…
Hyper-Verbose Identifiers138 hits · 137 pts
SeverityFileLineSnippetContext
LOWdocker/manage.py452def _is_expected_webserver_process(pid: int) -> bool:CODE
LOWdocker/manage.py460def _terminate_webserver_process(pid: int, require_expected: bool = True) -> bool:CODE
LOWdocs/assets/script.js474function saveFrequencyToLocalStorage() {CODE
LOWdocs/assets/script.js478function saveTimelineToLocalStorage() {CODE
LOWdocs/assets/script.js2637function parseDisplayRegionsFromYaml() {CODE
LOWdocs/assets/script.js2744function updateDisplayRegionsInYaml(regions) {CODE
LOWdocs/assets/script.js3142function parseStandaloneConfigFromYaml() {CODE
LOWdocs/assets/script.js3221function updateStandaloneConfigInYaml(type, list) {CODE
LOWdocs/assets/script.js3364function showVersionComparisonModal(fileName, currentVersion, latestVersion) {CODE
LOWdocs/assets/script.js4647function applyTimelineEditorChanges(editor, lines) {CODE
LOWdocs/assets/script.js4703function updateTimelineSectionField(presetName, field, value) {CODE
LOWdocs/assets/script.js4887function scrollTimelineEditorToPreset(presetName) {CODE
LOWdocs/assets/script.js5603function removePeriodFromDayPlanInLines(lines, sectionInfo, planKey, periodKey) {CODE
LOWtrendradar/context.py465 def create_notification_dispatcher(self) -> NotificationDispatcher:CODE
LOWtrendradar/context.py518 def convert_ai_filter_to_report_data(CODE
LOWtrendradar/__main__.py109 def _detect_docker_environment(self) -> bool:CODE
LOWtrendradar/__main__.py136 def _set_update_info_from_config(self) -> None:CODE
LOWtrendradar/__main__.py158 def _has_notification_configured(self) -> bool:CODE
LOWtrendradar/__main__.py199 def _prepare_ai_analysis_data(CODE
LOWtrendradar/__main__.py482 def _prepare_current_title_info(self, results: Dict, time_info: str) -> Dict:CODE
LOWtrendradar/__main__.py792 def _send_notification_if_needed(CODE
LOWtrendradar/__main__.py925 def _initialize_and_check_config(self) -> bool:CODE
LOWtrendradar/__main__.py1090 def _process_rss_data_by_mode(self, rss_data) -> Tuple[Optional[List[Dict]], Optional[List[Dict]], Optional[List[DicCODE
LOWtrendradar/__main__.py1263 def _convert_rss_items_to_list(self, items_dict: Dict, id_to_name: Dict) -> List[Dict]:CODE
LOWtrendradar/__main__.py1359 def _generate_rss_html_report(self, rss_items: list, feeds_info: dict) -> str:CODE
LOWtrendradar/core/config.py11def parse_multi_account_config(config_value: str, separator: str = ";") -> List[str]:CODE
LOWtrendradar/core/analyzer.py712def convert_keyword_stats_to_platform_stats(CODE
LOWtrendradar/core/loader.py86def _load_notification_config(config_data: Dict) -> Dict:CODE
LOWtrendradar/core/loader.py295def _load_ai_translation_config(config_data: Dict) -> Dict:CODE
LOWtrendradar/core/loader.py442def _print_notification_sources(config: Dict) -> None:CODE
LOWtrendradar/core/data.py15def read_all_today_titles_from_storage(CODE
LOWtrendradar/core/data.py113def detect_latest_new_titles_from_storage(CODE
LOWtrendradar/notification/formatters.py72def convert_markdown_to_mrkdwn(content: str) -> str:CODE
LOWtrendradar/notification/renderer.py287def _render_rss_section_feishu(rss_items: list, separator: str = "---") -> str:CODE
LOWtrendradar/notification/renderer.py330def _render_rss_section_markdown(rss_items: list) -> str:CODE
LOWtrendradar/notification/batch.py34def get_max_batch_header_size(format_type: str) -> int:CODE
LOWtrendradar/notification/batch.py73def truncate_at_line_boundary(text: str, max_bytes: int) -> str:CODE
LOWtrendradar/notification/batch.py95def truncate_preserving_footer(content: str, max_bytes: int) -> str:CODE
LOWtrendradar/notification/splitter.py135def split_content_into_batches(CODE
LOWtrendradar/notification/splitter.py617 def process_new_titles_section(current_batch, current_batch_has_content, batches, add_separator=True):CODE
LOWtrendradar/notification/splitter.py845 def process_standalone_section_wrapper(current_batch, current_batch_has_content, batches, add_separator=True):CODE
LOWtrendradar/notification/splitter.py856 def process_rss_stats_wrapper(current_batch, current_batch_has_content, batches, add_separator=True):CODE
LOWtrendradar/notification/splitter.py995def _process_rss_stats_section(CODE
LOWtrendradar/notification/splitter.py1226def _process_rss_new_titles_section(CODE
LOWtrendradar/notification/splitter.py1474def _process_standalone_section(CODE
LOWtrendradar/notification/splitter.py1701def _format_standalone_platform_item(item: Dict, index: int, format_type: str, rank_threshold: int = 10) -> str:CODE
LOWtrendradar/notification/splitter.py1807def _format_standalone_rss_item(CODE
LOWtrendradar/storage/remote.py489 def get_active_ai_filter_tags(self, date=None, interests_file="ai_interests.txt"):CODE
LOWtrendradar/storage/remote.py495 def get_latest_ai_filter_tag_version(self, date=None):CODE
LOWtrendradar/storage/remote.py498 def deprecate_all_ai_filter_tags(self, date=None, interests_file="ai_interests.txt"):CODE
LOWtrendradar/storage/remote.py516 def get_active_ai_filter_results(self, date=None, interests_file="ai_interests.txt"):CODE
LOWtrendradar/storage/remote.py519 def deprecate_specific_ai_filter_tags(self, tag_ids, date=None):CODE
LOWtrendradar/storage/remote.py525 def update_ai_filter_tags_hash(self, interests_file, new_hash, date=None):CODE
LOWtrendradar/storage/remote.py531 def update_ai_filter_tag_descriptions(self, tag_updates, date=None, interests_file="ai_interests.txt"):CODE
LOWtrendradar/storage/remote.py537 def update_ai_filter_tag_priorities(self, tag_priorities, date=None, interests_file="ai_interests.txt"):CODE
LOWtrendradar/storage/remote.py558 def clear_unmatched_analyzed_news(self, date=None, interests_file="ai_interests.txt"):CODE
LOWtrendradar/storage/local.py234 def get_active_ai_filter_tags(self, date=None, interests_file="ai_interests.txt"):CODE
LOWtrendradar/storage/local.py240 def get_latest_ai_filter_tag_version(self, date=None):CODE
LOWtrendradar/storage/local.py243 def deprecate_all_ai_filter_tags(self, date=None, interests_file="ai_interests.txt"):CODE
LOWtrendradar/storage/local.py252 def get_active_ai_filter_results(self, date=None, interests_file="ai_interests.txt"):CODE
78 more matches not shown…
Excessive Try-Catch Wrapping179 hits · 135 pts
SeverityFileLineSnippetContext
LOWdocker/manage.py448 except Exception:CODE
LOWdocker/manage.py32 except Exception as e:CODE
LOWdocker/manage.py113 except Exception as e:CODE
LOWdocker/manage.py135 except Exception as e:CODE
LOWdocker/manage.py180 except Exception:CODE
LOWdocker/manage.py222 except Exception as e:CODE
LOWdocker/manage.py316 except Exception as e:CODE
LOWdocker/manage.py411 except Exception as e:CODE
LOWdocker/manage.py435 except Exception as e:CODE
LOWdocker/manage.py507 except Exception:CODE
LOWdocker/manage.py512 except Exception:CODE
LOWdocker/manage.py527 except Exception:CODE
LOWdocker/manage.py554 except Exception as e:CODE
LOWdocker/manage.py590 except Exception as e:CODE
LOWdocker/manage.py608 except Exception as e:CODE
LOWdocker/manage.py613 except Exception:CODE
LOWdocker/manage.py641 except Exception as e:CODE
LOWdocker/manage.py726 except Exception as e:STRING
LOWtrendradar/__main__.py119 except Exception:CODE
LOWtrendradar/__main__.py151 except Exception as e:CODE
LOWtrendradar/__main__.py298 except Exception as e:CODE
LOWtrendradar/__main__.py429 except Exception as e:CODE
LOWtrendradar/__main__.py478 except Exception as e:CODE
LOWtrendradar/__main__.py1086 except Exception as e:CODE
LOWtrendradar/__main__.py1385 except Exception as e:CODE
LOWtrendradar/__main__.py1630 except Exception as e:CODE
LOWtrendradar/__main__.py1708 except Exception as e:STRING
LOWtrendradar/core/cdn.py69 except Exception as e:CODE
LOWtrendradar/core/cdn.py86 except Exception:CODE
LOWtrendradar/core/data.py78 except Exception as e:CODE
LOWtrendradar/core/data.py193 except Exception as e:CODE
LOWtrendradar/notification/senders.py221 except Exception as e:CODE
LOWtrendradar/notification/senders.py337 except Exception as e:CODE
LOWtrendradar/notification/senders.py464 except Exception as e:CODE
LOWtrendradar/notification/senders.py579 except Exception as e:CODE
LOWtrendradar/notification/senders.py740 except Exception as e:STRING
LOWtrendradar/notification/senders.py923 except Exception as e:STRING
LOWtrendradar/notification/senders.py1085 except Exception as e:STRING
LOWtrendradar/notification/senders.py1197 except Exception as e:STRING
LOWtrendradar/notification/senders.py1321 except Exception as e:STRING
LOWtrendradar/crawler/fetcher.py139 except Exception as e:CODE
LOWtrendradar/crawler/fetcher.py225 except Exception as e:CODE
LOWtrendradar/crawler/rss/fetcher.py149 except Exception as e:CODE
LOWtrendradar/utils/time.py164 except Exception:CODE
LOWtrendradar/utils/time.py237 except Exception:CODE
LOWtrendradar/utils/time.py285 except Exception:CODE
LOWtrendradar/utils/url.py126 except Exception:CODE
LOWtrendradar/storage/remote.py638 except Exception as e:CODE
LOWtrendradar/storage/remote.py765 except Exception:CODE
LOWtrendradar/storage/remote.py203 except Exception as e:CODE
LOWtrendradar/storage/remote.py251 except Exception as e:CODE
LOWtrendradar/storage/remote.py319 except Exception as e:CODE
LOWtrendradar/storage/remote.py616 except Exception as e:CODE
LOWtrendradar/storage/remote.py658 except Exception as e:CODE
LOWtrendradar/storage/remote.py671 except Exception as e:CODE
LOWtrendradar/storage/remote.py725 except Exception:CODE
LOWtrendradar/storage/remote.py743 except Exception as e:CODE
LOWtrendradar/storage/remote.py754 except Exception as e:CODE
LOWtrendradar/storage/remote.py825 except Exception as e:CODE
LOWtrendradar/storage/remote.py857 except Exception as e:CODE
119 more matches not shown…
Unused Imports91 hits · 90 pts
SeverityFileLineSnippetContext
LOWtrendradar/__init__.py10CODE
LOWtrendradar/context.py12CODE
LOWtrendradar/context.py12CODE
LOWtrendradar/core/__init__.py6CODE
LOWtrendradar/core/__init__.py6CODE
LOWtrendradar/core/__init__.py6CODE
LOWtrendradar/core/__init__.py6CODE
LOWtrendradar/core/__init__.py12CODE
LOWtrendradar/core/__init__.py13CODE
LOWtrendradar/core/__init__.py13CODE
LOWtrendradar/core/__init__.py14CODE
LOWtrendradar/core/__init__.py14CODE
LOWtrendradar/core/__init__.py15CODE
LOWtrendradar/core/__init__.py15CODE
LOWtrendradar/core/__init__.py15CODE
LOWtrendradar/core/__init__.py15CODE
LOWtrendradar/core/__init__.py21CODE
LOWtrendradar/core/__init__.py21CODE
LOWtrendradar/core/__init__.py21CODE
LOWtrendradar/core/__init__.py21CODE
LOWtrendradar/notification/dispatcher.py13CODE
LOWtrendradar/notification/dispatcher.py40CODE
LOWtrendradar/notification/__init__.py19CODE
LOWtrendradar/notification/__init__.py19CODE
LOWtrendradar/notification/__init__.py23CODE
LOWtrendradar/notification/__init__.py23CODE
LOWtrendradar/notification/__init__.py23CODE
LOWtrendradar/notification/__init__.py23CODE
LOWtrendradar/notification/__init__.py29CODE
LOWtrendradar/notification/__init__.py29CODE
LOWtrendradar/notification/__init__.py33CODE
LOWtrendradar/notification/__init__.py33CODE
LOWtrendradar/notification/__init__.py37CODE
LOWtrendradar/notification/__init__.py37CODE
LOWtrendradar/notification/__init__.py37CODE
LOWtrendradar/notification/__init__.py37CODE
LOWtrendradar/notification/__init__.py37CODE
LOWtrendradar/notification/__init__.py37CODE
LOWtrendradar/notification/__init__.py37CODE
LOWtrendradar/notification/__init__.py37CODE
LOWtrendradar/notification/__init__.py37CODE
LOWtrendradar/notification/__init__.py48CODE
LOWtrendradar/crawler/__init__.py6CODE
LOWtrendradar/crawler/rss/__init__.py8CODE
LOWtrendradar/crawler/rss/__init__.py9CODE
LOWtrendradar/crawler/rss/__init__.py9CODE
LOWtrendradar/crawler/rss/fetcher.py17CODE
LOWtrendradar/utils/__init__.py6CODE
LOWtrendradar/utils/__init__.py6CODE
LOWtrendradar/utils/__init__.py6CODE
LOWtrendradar/utils/__init__.py6CODE
LOWtrendradar/utils/__init__.py6CODE
LOWtrendradar/utils/__init__.py13CODE
LOWtrendradar/storage/__init__.py11CODE
LOWtrendradar/storage/__init__.py11CODE
LOWtrendradar/storage/__init__.py11CODE
LOWtrendradar/storage/__init__.py11CODE
LOWtrendradar/storage/__init__.py11CODE
LOWtrendradar/storage/__init__.py11CODE
LOWtrendradar/storage/__init__.py19CODE
31 more matches not shown…
Deep Nesting110 hits · 86 pts
SeverityFileLineSnippetContext
LOWdocker/manage.py36CODE
LOWdocker/manage.py117CODE
LOWdocker/manage.py322CODE
LOWtrendradar/__main__.py199CODE
LOWtrendradar/__main__.py305CODE
LOWtrendradar/__main__.py502CODE
LOWtrendradar/__main__.py792CODE
LOWtrendradar/__main__.py988CODE
LOWtrendradar/__main__.py1263CODE
LOWtrendradar/__main__.py1335CODE
LOWtrendradar/core/frequency.py96CODE
LOWtrendradar/core/analyzer.py93CODE
LOWtrendradar/core/analyzer.py494CODE
LOWtrendradar/core/scheduler.py363CODE
LOWtrendradar/core/data.py113CODE
LOWtrendradar/notification/dispatcher.py73CODE
LOWtrendradar/notification/dispatcher.py750CODE
LOWtrendradar/notification/renderer.py18CODE
LOWtrendradar/notification/renderer.py150CODE
LOWtrendradar/notification/splitter.py135CODE
LOWtrendradar/notification/splitter.py995CODE
LOWtrendradar/notification/splitter.py1226CODE
LOWtrendradar/notification/splitter.py1474CODE
LOWtrendradar/notification/splitter.py1701CODE
LOWtrendradar/notification/splitter.py1807CODE
LOWtrendradar/notification/splitter.py376CODE
LOWtrendradar/notification/splitter.py617CODE
LOWtrendradar/notification/splitter.py791CODE
LOWtrendradar/notification/senders.py96CODE
LOWtrendradar/notification/senders.py230CODE
LOWtrendradar/notification/senders.py346CODE
LOWtrendradar/notification/senders.py473CODE
LOWtrendradar/notification/senders.py588CODE
LOWtrendradar/notification/senders.py747CODE
LOWtrendradar/notification/senders.py938CODE
LOWtrendradar/notification/senders.py1100CODE
LOWtrendradar/notification/senders.py1206CODE
LOWtrendradar/crawler/fetcher.py153CODE
LOWtrendradar/crawler/rss/fetcher.py200CODE
LOWtrendradar/utils/time.py96CODE
LOWtrendradar/utils/time.py175CODE
LOWtrendradar/utils/time.py242CODE
LOWtrendradar/storage/remote.py574CODE
LOWtrendradar/storage/remote.py680CODE
LOWtrendradar/storage/remote.py773CODE
LOWtrendradar/storage/remote.py831CODE
LOWtrendradar/storage/local.py289CODE
LOWtrendradar/storage/local.py395CODE
LOWtrendradar/storage/sqlite_mixin.py119CODE
LOWtrendradar/storage/sqlite_mixin.py343CODE
LOWtrendradar/storage/sqlite_mixin.py482CODE
LOWtrendradar/storage/sqlite_mixin.py620CODE
LOWtrendradar/storage/sqlite_mixin.py818CODE
LOWtrendradar/storage/sqlite_mixin.py1044CODE
LOWtrendradar/storage/sqlite_mixin.py1581CODE
LOWtrendradar/storage/base.py230CODE
LOWtrendradar/ai/analyzer.py255CODE
LOWtrendradar/ai/analyzer.py470CODE
LOWtrendradar/ai/filter.py119CODE
LOWtrendradar/ai/filter.py386CODE
50 more matches not shown…
Over-Commented Block58 hits · 32 pts
SeverityFileLineSnippetContext
LOWconfig/config.en.yaml1# ═══════════════════════════════════════════════════════════════COMMENT
LOWconfig/config.en.yaml21 show_version_update: true # Show version-update prompt (true=show, false=hide)COMMENT
LOWconfig/config.en.yaml41# ===============================================================COMMENT
LOWconfig/config.en.yaml141 - id: "yahoo-finance"COMMENT
LOWconfig/config.en.yaml361 # - gemini/gemini-2.5-flash (Google Gemini)COMMENT
LOWconfig/config.en.yaml381 # Step 2 — prefix the model with "openai/"COMMENT
LOWconfig/ai_translation_prompt.txt1# ═══════════════════════════════════════════════════════════════COMMENT
LOWconfig/ai_analysis_prompt.txt1# ═══════════════════════════════════════════════════════════════COMMENT
LOWconfig/config.yaml1# ═══════════════════════════════════════════════════════════════COMMENT
LOWconfig/config.yaml21 show_version_update: true # 是否显示版本更新提示(true=显示, false=隐藏)COMMENT
LOWconfig/config.yaml41# ===============================================================COMMENT
LOWconfig/config.yaml141 name: "雅虎财经"COMMENT
LOWconfig/config.yaml361 # - anthropic/claude-sonnet-4-20250514 (Anthropic)COMMENT
LOWconfig/config.yaml381 #COMMENT
LOWconfig/timeline.en.yaml1# ═══════════════════════════════════════════════════════════════COMMENT
LOWconfig/timeline.en.yaml21#COMMENT
LOWconfig/timeline.en.yaml41# Call an AI model to deeply analyze the collected news (optional; needs an API key)COMMENT
LOWconfig/timeline.en.yaml61#COMMENT
LOWconfig/timeline.en.yaml81#COMMENT
LOWconfig/timeline.en.yaml101#COMMENT
LOWconfig/timeline.en.yaml361#COMMENT
LOWconfig/timeline.en.yaml381# Fields not written inside a block also fall back to the default.COMMENT
LOWconfig/timeline.en.yaml401COMMENT
LOWconfig/timeline.en.yaml421COMMENT
LOWconfig/timeline.en.yaml441 # A period can also set this to overrideCOMMENT
LOWconfig/timeline.en.yaml541 #COMMENT
LOWconfig/frequency_words.en.txt1# ═══════════════════════════════════════════════════════════════COMMENT
LOWconfig/frequency_words.en.txt21# Global FilterCOMMENT
LOWconfig/frequency_words.en.txt41#COMMENT
LOWconfig/frequency_words.en.txt61# ┌─────────────────────────────────────────────────────────────┐COMMENT
LOWconfig/frequency_words.en.txt81# 3. Name the group (recommended)COMMENT
LOWconfig/frequency_words.en.txt101#COMMENT
LOWconfig/frequency_words.en.txt121# [Apple Inc.]COMMENT
LOWconfig/frequency_words.en.txt141# ────────────────────COMMENT
LOWconfig/timeline.yaml1# ═══════════════════════════════════════════════════════════════COMMENT
LOWconfig/timeline.yaml21#COMMENT
LOWconfig/timeline.yaml41# 调用 AI 大模型对采集到的新闻进行深度分析(可选,需配置 API Key)COMMENT
LOWconfig/timeline.yaml61#COMMENT
LOWconfig/timeline.yaml81# ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─COMMENT
LOWconfig/timeline.yaml101# ═══════════════════════════════════════════════════════════════COMMENT
LOWconfig/timeline.yaml361#COMMENT
LOWconfig/timeline.yaml381#COMMENT
LOWconfig/timeline.yaml401 # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━COMMENT
LOWconfig/timeline.yaml421 COMMENT
LOWconfig/timeline.yaml441 # 例如晚间汇总用 AI 筛选:COMMENT
LOWconfig/timeline.yaml541 # 什么是「冲突」?COMMENT
LOWconfig/frequency_words.txt1# ═══════════════════════════════════════════════════════════════COMMENT
LOWconfig/frequency_words.txt21# 全局过滤区COMMENT
LOWconfig/frequency_words.txt41#COMMENT
LOWconfig/frequency_words.txt61# ┌─────────────────────────────────────────────────────────────┐COMMENT
LOWconfig/frequency_words.txt81# 3. 给词组起个名字(推荐)COMMENT
LOWconfig/frequency_words.txt101#COMMENT
LOWconfig/frequency_words.txt121# [苹果公司]COMMENT
LOWconfig/frequency_words.txt141# ────────────────────COMMENT
LOWdocs/assets/style.css1/* 编辑器区域滚动条 */COMMENT
LOW.github/workflows/crawler.yml1name: Get Hot NewsCOMMENT
LOW.github/workflows/crawler.yml21 # 🙏 珍惜资源 / Respect shared resources:COMMENT
LOW.github/workflows/crawler.yml101 # Critical for load balancing.COMMENT
AI Structural Patterns22 hits · 20 pts
SeverityFileLineSnippetContext
LOWtrendradar/context.py308CODE
LOWtrendradar/context.py405CODE
LOWtrendradar/__main__.py652CODE
LOWtrendradar/__main__.py792CODE
LOWtrendradar/core/analyzer.py93CODE
LOWtrendradar/notification/dispatcher.py248CODE
LOWtrendradar/notification/splitter.py135CODE
LOWtrendradar/notification/senders.py96CODE
LOWtrendradar/notification/senders.py230CODE
LOWtrendradar/notification/senders.py346CODE
LOWtrendradar/notification/senders.py473CODE
LOWtrendradar/notification/senders.py747CODE
LOWtrendradar/notification/senders.py938CODE
LOWtrendradar/notification/senders.py1100CODE
LOWtrendradar/notification/senders.py1206CODE
LOWtrendradar/storage/manager.py372CODE
LOWtrendradar/storage/manager.py30CODE
LOWtrendradar/ai/formatter.py65CODE
LOWtrendradar/report/html.py16CODE
LOWtrendradar/report/generator.py142CODE
LOWmcp_server/server.py693CODE
LOWmcp_server/tools/search_tools.py30CODE
Structural Annotation Overuse13 hits · 19 pts
SeverityFileLineSnippetContext
LOWREADME-EN.md1746### Step 1: Create Slack AppCOMMENT
LOWREADME-EN.md1760### Step 2: Enable Incoming WebhooksCOMMENT
LOWREADME-EN.md1770### Step 3: Generate Webhook URLCOMMENT
LOWREADME-EN.md1785### Step 4: Copy and Save Webhook URLCOMMENT
LOWREADME-EN.md2368# Step 1: Start with broad keywords for testingCOMMENT
LOWREADME-EN.md2373# Step 2: After finding mismatches, add required wordsCOMMENT
LOWREADME-EN.md2379# Step 3: After finding noise, add filter wordsCOMMENT
LOWconfig/timeline.en.yaml368# Step 1: Define "blocks" (periods)COMMENT
LOWconfig/timeline.en.yaml372# Step 2: Assemble "a day's plan" (day_plans)COMMENT
LOWconfig/timeline.en.yaml376# Step 3: Assign "which plan each day uses" (week_map)COMMENT
LOWconfig/timeline.en.yaml450 # Step 1: Define blocks (periods)COMMENT
LOWconfig/timeline.en.yaml511 # Step 2: Assemble blocks into day plansCOMMENT
LOWconfig/timeline.en.yaml525 # Step 3: Assign which day plan each day usesCOMMENT
Cross-File Repetition3 hits · 15 pts
SeverityFileLineSnippetContext
HIGHtrendradar/core/scheduler.py0检查指定时间段的某个 action 是否已执行 args: date_str: 日期字符串 yyyy-mm-dd period_key: 时间段 key action: 动作类型 (analyze / push) returns: 是否已执STRING
HIGHtrendradar/storage/sqlite_mixin.py0检查指定时间段的某个 action 是否已执行 args: date_str: 日期字符串 yyyy-mm-dd period_key: 时间段 key action: 动作类型 (analyze / push) returns: 是否已执STRING
HIGHtrendradar/storage/base.py0检查指定时间段的某个 action 是否已执行 args: date_str: 日期字符串 yyyy-mm-dd period_key: 时间段 key action: 动作类型 (analyze / push) returns: 是否已执STRING
Modern Structural Boilerplate13 hits · 14 pts
SeverityFileLineSnippetContext
LOWtrendradar/__init__.py13__all__ = ["AppContext", "__version__"]CODE
LOWtrendradar/__main__.py126 def _setup_proxy(self) -> None:CODE
LOWtrendradar/__main__.py136 def _set_update_info_from_config(self) -> None:CODE
LOWtrendradar/core/__init__.py28__all__ = [CODE
LOWtrendradar/core/cdn.py16logger = logging.getLogger(__name__)CODE
LOWtrendradar/notification/__init__.py50__all__ = [CODE
LOWtrendradar/crawler/__init__.py8__all__ = ["DataFetcher"]CODE
LOWtrendradar/crawler/rss/__init__.py11__all__ = ["RSSParser", "RSSFetcher", "RSSFeedConfig"]CODE
LOWtrendradar/utils/__init__.py15__all__ = [CODE
LOWtrendradar/storage/__init__.py31__all__ = [CODE
LOWtrendradar/ai/__init__.py21__all__ = [CODE
LOWtrendradar/report/__init__.py28__all__ = [CODE
LOWtrendradar/commands/__init__.py13__all__ = [CODE
Verbosity Indicators6 hits · 7 pts
SeverityFileLineSnippetContext
LOWconfig/timeline.en.yaml368# Step 1: Define "blocks" (periods)COMMENT
LOWconfig/timeline.en.yaml372# Step 2: Assemble "a day's plan" (day_plans)COMMENT
LOWconfig/timeline.en.yaml376# Step 3: Assign "which plan each day uses" (week_map)COMMENT
LOWconfig/timeline.en.yaml450 # Step 1: Define blocks (periods)COMMENT
LOWconfig/timeline.en.yaml511 # Step 2: Assemble blocks into day plansCOMMENT
LOWconfig/timeline.en.yaml525 # Step 3: Assign which day plan each day usesCOMMENT
Modern AI Meta-Vocabulary1 hit · 2 pts
SeverityFileLineSnippetContext
MEDIUMREADME-EN.md2705 └── docker-compose.yml # Docker Compose orchestration fileCODE