前言¶
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