Added
- Plugin Pages 新增独立「概览」页,展示总订阅、启用订阅、Feed 源和用户数,并加入 Feed 新鲜度、推送成功率、Feed 订阅占比三类图表。
- 新增 Dashboard 图表 Web API:
GET /dashboard/charts?range=24h|7d|30d。推送成功率按success / (success + failed + stopped + skipped)计算,pending/retrying仅作为积压参考。 - Plugin Pages 引入本地 Chart.js 静态资源,不依赖 CDN;仓库体积仍控制在 16 MB 上限内。
- 推送历史仓储新增按最后活动时间聚合状态桶的查询能力,用于 Dashboard 成功率趋势。
- 新增
requirements-dev.txt,将测试、帮助图生成等开发依赖从运行时依赖中拆出。 - FFmpeg 来源配置简化为
auto/system两个选项:auto优先系统 PATH,系统缺失时后台异步下载捆绑 FFmpeg,不阻塞插件启动;system仅使用系统 PATH。原bundled选项已合并为auto。 - 新增共享镜像测速模块 (
mirror_helper.py):FFmpeg 下载和知识库同步共用同一套镜像列表和 HEAD 测速逻辑。 - FFmpeg 下载镜像新增
auto选项(默认):并发测速内置镜像 + 直连 GitHub + 用户配置的ffmpeg_mirror_custom_url(如有),选最快的下载,并保留直连 GitHub 作为最终兜底。 - 知识库同步来源新增
speed_test模式(默认):启动时自动测速选最快镜像下载 Routes 知识库。 - 新增 JSON Feed 1.0 / 1.1 解析支持;Feed 抓取链路现在兼容 RSS 2.0、Atom 1.0 和 JSON Feed 三种格式,自动按响应内容识别并委派对应解析器。
Changed
- Feed 轮询水位推进改为内部 ack 语义:只有发送成功或明确规则性跳过后才写入已见 hash,发送失败、pending、dispatcher 异常或进程中断不会永久吞掉条目。
history_entry_limit现在只限制本轮尝试分发数量,不再把未尝试分发的条目提前写入水位。- Plugin Pages 布局从顶部指标 + 横向标签页改为左侧侧边栏 + 页面内容区;原指标卡移动到「概览」页,列表页高度占用更少。
- 订阅、用户、Feed 和推送历史列表筛选改为紧凑筛选栏:关键词搜索常驻,精确条件通过「筛选列 + 筛选值 + 添加条件」生成 chip;刷新按钮改为 icon-only。
- 订阅、用户、Feed 和推送历史列表移除与刷新按钮位置重复的「搜索」按钮,关键词输入回车与刷新按钮继续保留。
- LLM tools 从单文件
src/application/llmtools.py拆分为src/application/llmtools/包,保持build_llm_tools与LLM_TOOL_NAMES对外导入不变。 - 优化 AI tool 描述、
skills/rsshub-agent-tools/SKILL.md与docs/usage/ai-tools.md,让 agent 更明确区分订阅、用户默认、会话默认、handlers、push history 和一次性 XML/HTML 直推。 - 原始顺序排版
style=original的 layout 文本现在同样遵守订阅最终生效的length_limit;length_limit<=0时保持完整正文。 - FFmpeg 捆绑下载目录从插件缓存目录 (
cache/ffmpeg/) 改为插件数据目录 (ffmpeg/);插件重载时自动清理上次中断遗留的.tmp_*临时目录。 - 运行时依赖瘦身:
requirements.txt仅保留插件运行必需依赖,pytest、pytest-asyncio、jinja2、playwright迁移到开发依赖。
Fixed
- 修复轮询链路在分发前提前标记条目已见,导致发送失败、异常中断或分发异常后下轮无法补推的问题。
- 修复无声视频可被 FFmpeg 转 GIF,但 sender 侧因媒体类型识别不稳导致没有进入 GIF 转换分支的问题;RSSHub wrapped URL、无扩展 URL 和下载后探测为 video 的媒体都可触发转换。
- 修复转换成功后的
.gif仍可能按视频发送的问题;GIF 转换产物统一按图片组件发送。 - 修复配置 reload 后 sender 的 GIF 转码开关可能没有刷新到最新
media.gif_transcode的问题。 - 修复
original模式下长正文 layout text 未按length_limit裁剪的问题,同时保持原解析结果和历史正文不被改写。 - 修复 original layout 中 PDF/doc 等文档链接可能被误按图片路径处理的风险;文档链接继续作为 file 媒体走文件/尾部组件。
- 修复 Plugin Pages 从「概览」切换到其他侧边栏项时可能无法切换的问题;Chart.js 实例不再放入 PetiteVue reactive state。
- 修复 Plugin Pages「概览」推送成功率折线图空间拥挤,以及稀疏历史节点没有连线的问题。
- 修复推送历史状态聚合排序不稳定的问题。
Removed
- 移除运行时依赖中不必要的开发依赖,降低普通用户安装体积。
- 移除把
xml_parse作为可配置 handler 的 agent skill 推荐示例。
Security
- 镜像测速恢复 TLS 证书验证,攻破 mirror HTTPS 才能影响候选选择。
- FFmpeg 归档当前未配 SHA256(
latest源校验值不稳定),由 1 MB 大小检查 + 解包路径校验兜底;ZIP 解包前拒绝绝对路径和..跨目录条目,封掉 zip slip 风险面。
Notes
- 本版本不新增聊天命令,不新增用户可见配置项;防漏推 ack、GIF 判定补强和 original 行为修正均为内部语义修复。
ffmpeg_source仅保留auto和system;原bundled选项已合并为auto,旧配置文件中的bundled会自动回退为auto并打 warning。- 知识库同步
source_mode默认值升级为speed_test;现存配置经 schema heal 维持原值,全新安装会自动启用测速选最快镜像。 - Plugin Pages 新增图表只读接口,不改变已有筛选 query 参数和列表 Web API 语义。