본문으로 건너뛰기
S

dsh-rss-daily

shangjian2023/dsh-rss-daily

엄선된 46개 RSS 소스의 일일 뉴스 다이제스트. dsh에 이미 구성된 모델이 편집하고, Webhook으로 IM에 전달하며, 일반 모델 답변처럼 채팅에도 브로드캐스트되어 컨텍스트 비용이 없습니다.

설치

dsh plugin --profile web add github:shangjian2023/dsh-rss-daily

README

📰 dsh-rss-daily

一句话:每天早上 8 点,dsh 自动给你端上一份主编级的要闻日报 —— 用你已经配好的模型编辑、送到你的微信 / Telegram,还会像一条普通回复一样出现在对话里(不占任何上下文)。

npm npm downloads awesome · DSH plugin CI License: MIT

English README

长什么样

日报直接出现在你的对话里,样式和模型回答一模一样 —— 纯 markdown 排版、同样的字体和宽度:

对话内日报

它是纯前端渲染:只显示,不写会话记录、不发给模型,你的上下文干干净净。

为什么值得装

  • 像主编选的,不是聚合器堆的。 ~20 条候选先打分(源等级 × 时效 × 信号词)、去重(Jaccard + 14 天 MD5 历史)、多源事件图谱交叉验证,最后交给 dsh 里你已配好的模型做主编:合并同事件、剔除 PR 通稿、平衡选题(同话题 ≤2 条)、每条浓缩成一句 ≤45 字的具体事实。
  • 零额外 API key。 编辑这步走 ctx.llm,用 dsh 现成的模型,不多花一分钱、不多配一个密钥。
  • 永不断更。 模型调用失败自动降级规则模式照常出稿;错过定时段落,开机 12 小时内自动补跑。
  • 送到你读的地方。 Server酱 / PushDeer / 企业微信 / Telegram / Bark / gotify / 自定义 webhook,任一成功即算送达。
  • 生产级管线。 移植自 2026 年 6 月起每天在生产环境运行、迭代过 9 版的私人脚本:源健康度自适应超时、feed 乱码修复、短摘要抓原文补全、420 秒硬预算(POSIX 用 SIGALRM 硬中断;Windows 无此信号,靠逐请求超时 + 软预算检查兜底)、幂等两阶段送达(fetch → outbox → 投递 → confirm)。

安装(npm 推荐)

# npm(推荐,无 git 克隆、无构建脚本)
dsh plugin --profile web add dsh-rss-daily

# 或 GitHub
dsh plugin --profile web add github:shangjian2023/dsh-rss-daily

重启 dsh web:每个会话头部出现 📰 按钮,定时任务即刻生效。

30 秒配好:

  1. 点任意会话头部的 📰 按钮 → 设置 标签
  2. 改时间、加一个投递目标(Server酱 / PushDeer / 企微 / Telegram / Bark / gotify / 自定义)
  3. 点 获取今日日报 —— 立刻生成、立刻投递、立刻出现在对话里

不用碰任何 YAML —— 时间、目标、源、条数、模型,全部在面板里改,即时生效。

亮点

  • 🖥 三个界面,零上下文消耗:对话内插播、📰 面板(日报 / 源 / 设置)、设置页卡片 —— 全部客户端渲染,永不进会话日志

  • 📝 插播即模型回答的原样:日报正文用宿主同款 MarkdownText 渲染组件(与真实 assistant 消息同一组件、同一套样式),上屏时以打字机节奏渐显、完稿前不显示操作行——看起来就是模型在作答,但一个 token 的上下文都不占

  • 🧰 46 个精选源,覆盖 AI / 科技 / 科学 / 国际 / 财经 / 开发 / 人文 等 15 个类目,从中国大陆实测可达;源标签页里随意增删停启(连续失败 3 次的源自动降级 24 小时,恢复需连续成功 2 次)

  • 🤖 rss_daily 对话工具 —— run / status / redo / deliver,直接吩咐 agent "生成今天的新闻日报"也行

  • 🔌 无界面模式 —— py/daily.py 可脱离 dsh 独立跑,对接任意 OpenAI 兼容端点:

    RSS_LLM_ENDPOINT=https://api.deepseek.com/v1 RSS_LLM_KEY=sk-... \
      python py/daily.py --state-dir ~/.rss-daily
    

配置

默认值开箱即用,面板覆盖一切。主要开关:

键默认含义
time08:00每天本地 HH:MM 运行(错过 <12h 开机补跑)。日报标题日期按北京时间(UTC+8)计算
targets[][]投递目标;≥1 个成功即算送达
digestItems8每日最多条数
llmModeharnessharness(用 dsh 的模型)或 none(仅规则)
broadcasttrue对话内插播开关
stateDir~/.dsh/rss-daily源 / 去重历史 / outbox 目录

进阶用户也可以在 profile 的 cordis.patch.yml 里覆盖配置行;HTTP API 与管线阶段见下文。

工作原理

46 源 ──▶ 抓取(健康度/超时/去重) ──▶ ~20 条候选
                                          │
                        ctx.llm 主编编排(失败→翻译兜底→规则模式)
                                          │
                            日报 ──▶ webhook 投递 ──▶ confirm
                                          │
                          对话内插播(纯前端,零上下文)

py/daily.py 可独立脚本化(--stage fetch|finalize|confirm|status,stdout 输出单行 JSON),插件本体驱动的就是这些阶段。送达成功前绝不 confirm —— 确认过的条目会永久进入 14 天去重窗口。

编辑纪律(蒸馏自 AIHOT)

AIHOT 是卡神开源的"自己找热点、自己写日报"网站框架;本插件的编辑管线是它的插件化蒸馏——信源是综合要闻而非仅 AI,跑在 dsh 内部而非三进程网站:

AIHOT 概念本插件对应
预筛 + 两次独立评分 + 分级门槛规则预打分(信源分级×新鲜度×信号词)排出候选池,选题交给主编
五轴评分 + 噪声压制表主编 prompt 内化:实质份量/信息增量/证据强度/共鸣面/可用性;通稿、营销、例行小版本压分
写作(中文标题/答案先行摘要/防幻觉)一句话铁律:答案前置、标题自洽(必点主体)、防幻觉(不加原文没有的数字版本、相对时间照抄)
聚簇与热度(独立来源计数)同事件合并只出一条;newsflash 多源交叉验证条目带 ✚N家 佐证徽标
花钱的请求有回执 / 预算熔断stateDir/llm-receipts.json 记每笔调用,单日超 8 次熔断
页面不调模型 / 一个读取层outbox JSON 是面板/插播/agent 工具/MCP/webhook 的唯一事实源
日报导语lead 字段:提示词要求 ≤60 字概括当日主线(解析层按 120 字兜底截断),面板与插播都展示

语言不降级:主编调用失败时先做"翻译兜底"(规则选题 + 仅翻译改写),再不行才规则直出并诚实标注"原文标题速览"——日报语言是硬约束。

桌面版(DSH Desktop)适配:默认模型跟随宿主 agentDefaultModel(你聊天用的那个),空回复自动翻倍预算重试(思考型模型会把 max_tokens 烧在推理上);面板自带完整设计系统(实色明暗面板,打开时采样宿主亮度决定),不借宿主 CSS 变量——0.2.0-rc 宿主变量改名曾让面板透明到看不清;宿主没有 settings.register() 时面板配置自持久化到 stateDir/panel-config.json。

HTTP API(进阶)

同源 API /rss-daily/api/*(仅带 webserver 的 profile 注册):GET status、POST run、POST redo、POST redeliver(重投,{"onlyFailed":true} 只投上次失败的目标)、GET/PUT sources、POST config。投递目标里的密钥在响应中打码;写回时带打码值的字段按目标类型回填原值。所有写入要求同源 + Content-Type: application/json(防跨站简单请求改写投递目标),并过字段白名单校验再落盘。

MCP(给其他 Agent 用)

mcp/server.py 把同一条管线暴露成 MCP 工具,Claude Code / Codex / opencode / Cursor 等任何 MCP 客户端都能用:rss_status(查状态)、rss_fetch(抓取出编辑提示词)、rss_finalize(把编辑结果落稿)、rss_confirm(确认送达)。宿主 agent 既是主编(按提示词挑选改写),也是投递渠道(把日报展示给用户)。

状态目录默认与 dsh 插件共享(幂等门互认、抓取锁互斥);定时投递仍由 dsh 插件或 cron 负责,MCP 管交互式操作。

一行配进 Claude Code(用户级,所有项目可用):

claude mcp add --scope user rss-daily -- python /path/to/dsh-rss-daily/mcp/server.py

Codex / opencode 配置、长任务轮询约定见 mcp/README.md。

依赖

  • dsh,使用 web(或任意常驻)profile
  • Python 3.9+ 且装了 feedparser:pip install feedparser(走 MCP 再加 pip install mcp,1.x 与 2.x 均可)
  • Node.js ≥ 22.19(对齐 dsh 宿主自身的 Node 要求;纯 JS 逻辑层兼容 18,但插件只能跑在 dsh 里)

许可

MIT

관련 플러그인