AI Slop Code RIsk Monitor

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 等渠道智能推送。

41.1 High pattern signal View on GitHub

Maintenance and Governance Review

This report summarizes scanner evidence for sansan0/TrendRadar, a Python project with 62,784 GitHub stars. SynthScan examined 57,925 lines of code across 110 source files, recording 1122 pattern matches distributed across 15 syntactic categories. The legacy adjusted pattern signal is 41.1 (High pattern signal); it is not an authorship estimate.

Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.

41.1
Adjusted Signal
41.1
Raw Pattern Score
100%
Time Factor
2026-10-10
Last Push
62.8K
Stars
Python
Language
57.9K
Lines of Code
110
Files
1.1K
Pattern Hits
2026-10-12
Scan Date
1.85
HC Hit Rate

Risk Review · v3

Use each vector to guide manual verification of the underlying findings.

Cognitive Ownership Risk 42.2/100 · MEDIUM

Can maintainers explain intent, assumptions, and trade-offs? 416 finding(s).

Hallucinated Dependency & Supply Chain Risk 31.8/100 · MEDIUM

Are imports declared and package/API names verified? 173 finding(s).

Agent Over-Engineering Ratio 71.4/100 · HIGH

Are wrappers, guards, and repeated structures necessary? 693 finding(s).

PR Review Velocity Impact 90.4/100 · CRITICAL

Which changes need focused human review? 1122 finding(s).

What These Metrics Mean

Adjusted Signal
Legacy pattern score normalized per 1,000 scanned lines and multiplied by the repository-level time factor. It is not an estimate of AI authorship.
Raw Pattern Score
Sum of severity- and context-weighted pattern findings before applying the time factor.
Time Factor
A coarse multiplier based on repository last-push metadata. It does not identify when individual code was written.
Pattern Hits
Count of configured pattern findings. Review each location and surrounding code before acting.
HC Hit Rate
High- and critical-severity findings per scanned file. Severity is a configured detector weight, not proof of a vulnerability or authorship.
Lines / Files
Scan coverage denominators used by the legacy normalized score.

Pattern-Signal History

This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.

Severity Breakdown

Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.

CRITICAL 0HIGH 203MEDIUM 289LOW 630

Directory Score Breakdown

This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.

Pattern Findings

The scanner identified 1122 distinct pattern matches across 15 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.

Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.

Decorative Section Separators288 hits · 891 pts
SeverityFileLineSnippetContext
MEDIUM⚡config/config.en.yaml1# ═══════════════════════════════════════════════════════════════COMMENT
MEDIUM⚡config/config.en.yaml4# ═══════════════════════════════════════════════════════════════COMMENT
MEDIUM⚡config/config.en.yaml10# ===============================================================COMMENT
MEDIUM⚡config/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
MEDIUM⚡config/ai_translation_prompt.txt1# ═══════════════════════════════════════════════════════════════COMMENT
MEDIUM⚡config/ai_translation_prompt.txt4# ═══════════════════════════════════════════════════════════════COMMENT
MEDIUM⚡config/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
MEDIUM⚡config/config.yaml1# ═══════════════════════════════════════════════════════════════COMMENT
MEDIUM⚡config/config.yaml4# ═══════════════════════════════════════════════════════════════COMMENT
MEDIUM⚡config/config.yaml10# ===============================================================COMMENT
MEDIUM⚡config/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
HIGH⚡trendradar/report/html.py2379 var timer = null;CODE
HIGH⚡trendradar/report/html.py2386 item.style.display = (!query || title.toLowerCase().indexOf(query) !== -1) ? '' : 'none';CODE
HIGH⚡trendradar/report/html.py2390 item.style.display = (!query || title.toLowerCase().indexOf(query) !== -1) ? '' : 'none';CODE
HIGH⚡trendradar/report/html.py2867 lines.push('# ' + (headerTitle ? headerTitle.textContent.trim() : 'TrendRadar'));CODE
HIGH⚡trendradar/report/html.py2868 lines.push('');CODE
HIGH⚡trendradar/report/html.py2876 if (label && value) {CODE
HIGH⚡trendradar/report/html.py2877 lines.push('- **' + label.textContent.trim() + '**: ' + value.textContent.trim());CODE
HIGH⚡trendradar/report/html.py2880 lines.push('');CODE
HIGH⚡trendradar/report/html.py2899 if (rank && rank.textContent.trim() && rank.textContent.trim() !== '?') meta.push('#' + rank.textConCODE
HIGH⚡trendradar/report/html.py2899 if (rank && rank.textContent.trim() && rank.textContent.trim() !== '?') meta.push('#' + rank.textConCODE
HIGH⚡trendradar/report/html.py2901 if (source) meta.push(source.textContent.trim());CODE
HIGH⚡trendradar/report/html.py2903 if (keyword) meta.push(keyword.textContent.trim());CODE
HIGH⚡trendradar/report/html.py2905 if (time) meta.push(time.textContent.trim());CODE
HIGH⚡trendradar/report/html.py2907 if (count) meta.push(count.textContent.trim());CODE
HIGH⚡trendradar/report/html.py2922 lines.push('## 热点新闻');CODE
HIGH⚡trendradar/report/html.py2923 lines.push('');CODE
HIGH⚡trendradar/report/html.py2928 lines.push('### ' + wordName.textContent.trim() + (wordCount ? ' (' + wordCount.textContent.CODE
HIGH⚡trendradar/report/html.py2929 lines.push('');CODE
HIGH⚡trendradar/report/html.py2934 if (line) lines.push(line);CODE
HIGH⚡trendradar/report/html.py2936 lines.push('');CODE
HIGH⚡trendradar/report/html.py2944 lines.push('## ' + (newTitle ? newTitle.textContent.trim() : '本次新增热点'));CODE
HIGH⚡trendradar/report/html.py2945 lines.push('');CODE
HIGH⚡trendradar/report/html.py2950 lines.push('### ' + srcTitle.textContent.trim());CODE
HIGH⚡trendradar/report/html.py2951 lines.push('');CODE
HIGH⚡trendradar/report/html.py2956 if (line) lines.push(line);CODE
HIGH⚡trendradar/report/html.py2958 lines.push('');CODE
HIGH⚡trendradar/report/html.py2966 lines.push('## ' + (rssSectionTitle ? rssSectionTitle.textContent.trim() : 'RSS 订阅更新'));CODE
HIGH⚡trendradar/report/html.py2967 lines.push('');CODE
HIGH⚡trendradar/report/html.py2973 lines.push('### ' + feedName.textContent.trim() + (feedCount ? ' (' + feedCount.textContent.CODE
HIGH⚡trendradar/report/html.py2974 lines.push('');CODE
HIGH⚡trendradar/report/html.py2984 if (time) meta.push(time.textContent.trim());CODE
HIGH⚡trendradar/report/html.py2986 if (author) meta.push(author.textContent.trim());CODE
HIGH⚡trendradar/report/html.py2991 lines.push(line);CODE
HIGH⚡trendradar/report/html.py2993 lines.push('');CODE
HIGH⚡trendradar/report/html.py3003 lines.push('## AI 分析');CODE
HIGH⚡trendradar/report/html.py3004 lines.push('');CODE
HIGH⚡trendradar/report/html.py3005 lines.push('> ' + aiError.textContent.trim());CODE
HIGH⚡trendradar/report/html.py3006 lines.push('');CODE
HIGH⚡trendradar/report/html.py3011 lines.push('## ' + (aiTitle ? aiTitle.textContent.trim() : 'AI 热点分析'));CODE
HIGH⚡trendradar/report/html.py3012 lines.push('');CODE
HIGH⚡trendradar/report/html.py3018 lines.push('### ' + blockTitle.textContent.trim());CODE
HIGH⚡trendradar/report/html.py3019 lines.push('');CODE
HIGH⚡trendradar/report/html.py3022 lines.push(blockContent.textContent.trim());CODE
HIGH⚡trendradar/report/html.py3023 lines.push('');CODE
HIGH⚡trendradar/report/html.py3033 lines.push('## ' + (standaloneTitle ? standaloneTitle.textContent.trim() : '独立展示区'));CODE
HIGH⚡trendradar/report/html.py3034 lines.push('');CODE
HIGH⚡trendradar/report/html.py3040 lines.push('### ' + name.textContent.trim() + (cnt ? ' (' + cnt.textContent.trim() + ')' : 'CODE
HIGH⚡trendradar/report/html.py3041 lines.push('');CODE
HIGH⚡trendradar/report/html.py3046 if (line) lines.push(line);CODE
HIGH⚡trendradar/report/html.py3048 lines.push('');CODE
HIGH⚡trendradar/report/html.py3057 lines.push('## 抓取异常');CODE
HIGH⚡trendradar/report/html.py3058 lines.push('');CODE
HIGH⚡trendradar/report/html.py3060 lines.push('- ' + item.textContent.trim());CODE
HIGH⚡trendradar/report/html.py3062 lines.push('');CODE
HIGH⚡trendradar/report/html.py3067 lines.push('---');CODE
HIGH⚡trendradar/report/html.py3068 lines.push('*Generated by TrendRadar*');CODE
HIGH⚡trendradar/report/html.py3087 var savedMode = null;CODE
HIGH⚡trendradar/report/html.py3089 if (savedMode === '1' || (savedMode === null && window.innerWidth > 768)) {CODE
HIGH⚡trendradar/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…
Empty Error Handlers50 hits · 250 pts
SeverityFileLineSnippetContext
HIGHdocker/manage.py613except Exception:CODE
HIGHdocker/manage.py180except Exception:CODE
HIGHtrendradar/__main__.py1354except FileNotFoundError:CODE
HIGHtrendradar/__main__.py1285except (ValueError, TypeError):CODE
HIGHtrendradar/core/frequency.py196except (ValueError, IndexError):CODE
HIGHtrendradar/notification/senders.py1076except:CODE
HIGHtrendradar/notification/senders.py914except:CODE
HIGHtrendradar/crawler/rss/parser.py191except (ValueError, TypeError):CODE
HIGHtrendradar/crawler/rss/parser.py285except (ValueError, TypeError):CODE
HIGHtrendradar/crawler/rss/parser.py294except (ValueError, TypeError):CODE
HIGHtrendradar/crawler/rss/parser.py301except (ValueError, TypeError):CODE
HIGHtrendradar/utils/time.py124except ValueError:CODE
HIGHtrendradar/utils/time.py137except ValueError:CODE
HIGHtrendradar/utils/time.py210except ValueError:CODE
HIGHtrendradar/utils/time.py221except ValueError:CODE
HIGHtrendradar/utils/time.py264except ValueError:CODE
HIGHtrendradar/utils/time.py275except ValueError:CODE
HIGHtrendradar/storage/remote.py765except Exception:CODE
HIGHtrendradar/storage/local.py430except Exception:CODE
HIGHtrendradar/storage/local.py453except Exception:CODE
HIGHtrendradar/storage/sqlite_mixin.py1710except Exception:CODE
HIGHtrendradar/storage/sqlite_mixin.py1476except Exception:CODE
HIGHtrendradar/storage/sqlite_mixin.py1572except sqlite3.IntegrityError:CODE
HIGHtrendradar/storage/sqlite_mixin.py907except sqlite3.IntegrityError:CODE
HIGHtrendradar/storage/manager.py88except (FileNotFoundError, PermissionError):CODE
HIGHtrendradar/ai/analyzer.py606except Exception:CODE
HIGHtrendradar/ai/filter.py560except json.JSONDecodeError:CODE
HIGHtrendradar/ai/filter_pipeline.py60except (ValueError, TypeError):CODE
HIGHmcp_server/tools/search_tools.py892except DataNotFoundError:CODE
HIGHmcp_server/tools/search_tools.py895except (OSError, KeyError, TypeError, ValueError):CODE
HIGHmcp_server/tools/search_tools.py147except DataNotFoundError:CODE
HIGHmcp_server/tools/search_tools.py595except DataNotFoundError:CODE
HIGHmcp_server/tools/notification.py1299except Exception:CODE
HIGHmcp_server/tools/notification.py1311except Exception:CODE
HIGHmcp_server/tools/analytics.py2485except DataNotFoundError:CODE
HIGHmcp_server/tools/analytics.py497except DataNotFoundError:CODE
HIGHmcp_server/tools/analytics.py754except DataNotFoundError:CODE
HIGHmcp_server/tools/analytics.py1257except DataNotFoundError:CODE
HIGHmcp_server/tools/analytics.py1432except DataNotFoundError:CODE
HIGHmcp_server/tools/analytics.py1849except DataNotFoundError:CODE
HIGHmcp_server/tools/analytics.py2109except DataNotFoundError:CODE
HIGHmcp_server/tools/storage_sync.py134except ValueError:CODE
HIGHmcp_server/tools/storage_sync.py146except ValueError:CODE
HIGHmcp_server/utils/validators.py50except json.JSONDecodeError:CODE
HIGHmcp_server/utils/validators.py61except (ValueError, SyntaxError):CODE
HIGHmcp_server/utils/validators.py92except ValueError:CODE
HIGHmcp_server/utils/validators.py357except json.JSONDecodeError:CODE
HIGHmcp_server/services/data_service.py828except DataNotFoundError:CODE
HIGHmcp_server/services/data_service.py265except DataNotFoundError:CODE
HIGHmcp_server/services/data_service.py603except (OSError, ValueError):CODE
Hyper-Verbose Identifiers138 hits · 132 pts
SeverityFileLineSnippetContext
LOW⚡docker/manage.py452def _is_expected_webserver_process(pid: int) -> bool:CODE
LOW⚡docker/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
LOW⚡trendradar/__main__.py109 def _detect_docker_environment(self) -> bool:CODE
LOW⚡trendradar/__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
LOW⚡trendradar/storage/remote.py489 def get_active_ai_filter_tags(self, date=None, interests_file="ai_interests.txt"):CODE
LOW⚡trendradar/storage/remote.py495 def get_latest_ai_filter_tag_version(self, date=None):CODE
LOW⚡trendradar/storage/remote.py498 def deprecate_all_ai_filter_tags(self, date=None, interests_file="ai_interests.txt"):CODE
LOW⚡trendradar/storage/remote.py516 def get_active_ai_filter_results(self, date=None, interests_file="ai_interests.txt"):CODE
LOW⚡trendradar/storage/remote.py519 def deprecate_specific_ai_filter_tags(self, tag_ids, date=None):CODE
LOW⚡trendradar/storage/remote.py525 def update_ai_filter_tags_hash(self, interests_file, new_hash, date=None):CODE
LOW⚡trendradar/storage/remote.py531 def update_ai_filter_tag_descriptions(self, tag_updates, date=None, interests_file="ai_interests.txt"):CODE
LOW⚡trendradar/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
LOW⚡trendradar/storage/local.py234 def get_active_ai_filter_tags(self, date=None, interests_file="ai_interests.txt"):CODE
LOW⚡trendradar/storage/local.py240 def get_latest_ai_filter_tag_version(self, date=None):CODE
LOW⚡trendradar/storage/local.py243 def deprecate_all_ai_filter_tags(self, date=None, interests_file="ai_interests.txt"):CODE
LOW⚡trendradar/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 · 130 pts
SeverityFileLineSnippetContext
LOW⚡docker/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
LOW⚡trendradar/__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
LOW⚡trendradar/storage/remote.py638 except Exception as e:CODE
LOW⚡trendradar/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 · 84 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
Structural Annotation Overuse13 hits · 19 pts
SeverityFileLineSnippetContext
LOWREADME-EN.md1748### Step 1: Create Slack AppCOMMENT
LOWREADME-EN.md1762### Step 2: Enable Incoming WebhooksCOMMENT
LOWREADME-EN.md1772### Step 3: Generate Webhook URLCOMMENT
LOWREADME-EN.md1787### Step 4: Copy and Save Webhook URLCOMMENT
LOW⚡README-EN.md2370# Step 1: Start with broad keywords for testingCOMMENT
LOW⚡README-EN.md2375# Step 2: After finding mismatches, add required wordsCOMMENT
LOW⚡README-EN.md2381# Step 3: After finding noise, add filter wordsCOMMENT
LOW⚡config/timeline.en.yaml368# Step 1: Define "blocks" (periods)COMMENT
LOW⚡config/timeline.en.yaml372# Step 2: Assemble "a day's plan" (day_plans)COMMENT
LOW⚡config/timeline.en.yaml376# Step 3: Assign "which plan each day uses" (week_map)COMMENT
LOW⚡config/timeline.en.yaml450 # Step 1: Define blocks (periods)COMMENT
LOW⚡config/timeline.en.yaml511 # Step 2: Assemble blocks into day plansCOMMENT
LOW⚡config/timeline.en.yaml525 # Step 3: Assign which day plan each day usesCOMMENT
AI Structural Patterns22 hits · 19 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
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
LOW⚡trendradar/__main__.py126 def _setup_proxy(self) -> None:CODE
LOW⚡trendradar/__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
LOW⚡config/timeline.en.yaml368# Step 1: Define "blocks" (periods)COMMENT
LOW⚡config/timeline.en.yaml372# Step 2: Assemble "a day's plan" (day_plans)COMMENT
LOW⚡config/timeline.en.yaml376# Step 3: Assign "which plan each day uses" (week_map)COMMENT
LOW⚡config/timeline.en.yaml450 # Step 1: Define blocks (periods)COMMENT
LOW⚡config/timeline.en.yaml511 # Step 2: Assemble blocks into day plansCOMMENT
LOW⚡config/timeline.en.yaml525 # Step 3: Assign which day plan each day usesCOMMENT
Modern AI Meta-Vocabulary1 hit · 2 pts
SeverityFileLineSnippetContext
MEDIUMREADME-EN.md2707 └── docker-compose.yml # Docker Compose orchestration fileCODE