dsh-reader:DSH 内置的 RSS 阅读器插件

前言

DSH 的理念是「一切皆插件」,但日常排在读长文这件事上,还得靠外部工具:把 RSS 链接丢给浏览器、或者开一个独立阅读器窗口,正文和当前会话、插件环境是割裂的。dsh-reader 把阅读器放进 DSH 的右侧栏,订阅管理收在设置里,数据落在本地文件,不需要额外服务,也不离开当前工作区。

它由 ShoWin2333 维护,分类属于客户端插件,定位是一个内置 RSS 阅读器:三栏阅读界面、正文渲染、已读/收藏、搜索、OPML 导入导出。下面介绍它的功能、安装方式和接口。

这是什么

一句话:dsh-reader 是 DSH(DeepSeek Harness)的一个 RSS 阅读器插件,在 DSH 界面内提供订阅、阅读、检索和 OPML 备份能力,维护者是 ShoWin2333。

它解决的是「在 DSH 里顺手读订阅」的问题。阅读器打开在右侧栏而不是主屏幕,读完可以回到会话继续工作;插件不需要你自建数据库或外部服务,状态存成本地 JSON 文件。

核心功能

1、三栏布局:订阅源|文章列表|正文。点开一篇文章后,正文在右侧 iframe 内渲染,使用了 sandbox 隔离,不执行页面脚本,读取的同时自动标记为已读。

2、订阅管理:集中在 DSH 的 设置 → 订阅管理(由插件的 settings.section 提供),支持搜索筛选、勾选后批量刷新/批量删除、添加订阅、导入导出 OPML。阅读界面里不再放单个源的删除按钮。

3、阅读状态:已读/未读、收藏、全部标为已读;状态本地持久化,重启不丢。

4、搜索与筛选:按标题/摘要/作者搜索,只看未读,只看收藏,按源过滤。

5、OPML:导入(合并、去重)与导出备份。

6、自动刷新:打开面板时若数据超过 30 分钟未更新,会后台刷新一次。

面板宽度不足时会自动切成单栏(列表与正文之间带返回按钮),在窄窗口下也能用。

安装与启用

从 GitHub 直接安装,装完需要重开 DSH(或刷新窗口):

dsh plugin --profile desktop add github:ShoWin2333/dsh-reader

本地开发时也可以直接装一个目录:

dsh plugin --profile desktop add "C:\path\to\reader-plugin"

dsh-reader 的 package.json 里声明了 engines:node >=22.19.0、dsh >=0.2.1-rc.3。如果本机 DSH 版本低于这个要求,安装前先升级。

安装后从两个入口使用:

  • 阅读:会话标题栏右上角的 RSS 按钮,或右侧栏引导页的「RSS 阅读」卡片,会在右侧栏打开阅读器。
  • 订阅管理:DSH 设置 → 订阅管理,用于增删订阅、批量刷新、OPML 导入导出。

典型用法

先添加订阅,再打开面板阅读。

在 设置 → 订阅管理 里点添加订阅,填 RSS 地址即可;有多份 OPML 时用导入功能合并,重复的源会自动去重。

进阅读器后,左边是订阅源列表,中间是文章列表,右边是正文。点一篇文章,正文在 iframe 中渲染并自动标记已读;只想看未读或只看收藏,用列表上方的筛选项;按标题/摘要/作者搜索的关键字填在搜索框里。想临时清空某个源的未读状态,在订阅管理里勾选该源后使用「全部已读」。

插件把数据写在一个本地文件里,路径是:

~/.dsh/storages/dsh-reader/data.json

可以用环境变量 DSH_HOME 指定 DSH 主目录。每个源最多保留最近 120 篇,文章被裁剪时对应的已读状态会一并清理。想备份订阅列表,用 OPML 导出。

接口

插件的后端在单个路由 /_dsh/dsh-reader/api 上,前端就是它的使用者。接口如下:

方法 参数 说明
GET op=state 订阅列表 + 统计
GET op=items&feed=&unread=&starred=&q=&offset=&limit= 文章列表
GET op=item&id= 单篇正文
GET op=opml 导出 OPML
POST {action:'add', url} 添加订阅
POST {action:'remove', id} 删除订阅
POST {action:'refreshAll'} / {action:'refresh', id} 刷新
POST {action:'read', id, read} / {action:'star', id, starred} 已读/收藏
POST {action:'markAllRead', feedId} 全部已读
POST {action:'import', opml} 导入 OPML

POST 请求需要带 x-dsh-reader: 1 标记头(浏览器跨站请求无法携带),并且接口只接受本机回环访问。写一个脚本调这些接口时,记得补上这个头。

适用场景与注意

适合这几类人:

  • 想让 DSH 会话旁边顺手读订阅、不想另开浏览器标签页的 DSH 用户。
  • 用 OPML 管理多份订阅源、需要定期导出备份的人。
  • 想在 DSH 内联环境里按已读/收藏过滤文章,而不是用外部阅读器来回切换的人。

需要注意的几点:

  • 插件以当前 DSH 进程的权限运行。安装第三方插件前先读一遍源码和许可证(该项目 package.json 中声明的许可是 MIT),确认依赖和行为符合预期再启用。
  • 数据默认写在 ~/.dsh/storages/dsh-reader/data.json,只有本地持久化,不会跨机器同步,换机器要用 OPML 导出再导入。
  • 正文渲染走 iframe + sandbox,不执行文章页面脚本;但订阅源本身是外部内容,仍建议只订阅可信来源。
  • 这是社区目录里的第三方插件,与 DeepSeek / 幻方没有官方从属关系。

结尾

dsh-reader 把 RSS 阅读收进 DSH 右侧栏,订阅管理放进设置页,用本地 JSON 存状态,提供了一条不离开当前工作区的读长文路径。如果你需要在 DSH 里管理订阅,可以先试试。

目录页:https://www.skillhub.cn/plugins/ShoWin2333/dsh-reader
代码仓库:https://github.com/ShoWin2333/dsh-reader

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜