READMESource: main@f9a2b026
dsh-reader
DeepSeek Harness 的右侧栏阅读器:在 dsh 的 Web GUI 里注册一个 reader 标签,点开就在右侧栏里读书——不跳页、不弹新窗口。文件取自 dsh 自己注册的工作区,渲染 EPUB / TXT / Markdown / HTML,PDF 交给浏览器原生查看器。
零运行时依赖、不写工作区文件、插件自身不请求任何非本机服务。
安装
dsh plugin --profile web add github:guiyuan77/dsh-reader
需要 dsh 0.2.x。装完重启 dsh web 才生效——plugin add 会改写 profile 的 package.json 与 node_modules;跑着的会话 UI 会断开,会话记录不丢。
插件自带 cordis.patch.yml(dsh.bundle.patch),安装时由 bundle 层自动插入条目,不需要手工编辑 profile。
尚未发布到 npm,请用上面的 GitHub 形式安装。插件没有构建步骤,从源码安装即可用。
打开方式
重启后点右侧栏的 + → 引导页里的「阅读器」卡片;如果上次会话留着这个标签,会直接恢复。
主要功能
| 能力 | 说明 |
|---|---|
| 书架 | 递归扫描工作区找书(深度 ≤ 5,自动跳过 node_modules / dist / .git 等),EPUB、PDF 优先排序 |
| 目录浏览 | 逐层展开工作区,点开任意文件即读 |
| EPUB | 自写 ZIP 解析(中央目录 + DecompressionStream),读 OPF 元数据与 spine 分章,插图正常显示;书内 <style> / <script> / 事件属性一律剥掉 |
| TXT | UTF-8 严格解码失败时回退 GB18030,保留原始换行 |
| Markdown | 标题 / 列表 / 代码块 / 行内码 / 粗体 / 引用 |
| HTML | DOMParser 解析后剥掉脚本、样式与事件属性,按当前主题排版 |
| 续读 | 按「工作区 + 书籍路径」记住章节与滚动位置,切书、收起面板、刷新页面都会先落盘 |
| 主题 | 跟随 dsh / 纸白 / 护眼 / 夜间(默认跟随),深色下书里写死的黑字自动回落为主题色 |
| 老板键 | 面板内按 Esc 直接收起整个右侧栏,会话区不受影响;再展开时标签、章节、滚动位置都还在 |
快捷键
| 键 | 作用 |
|---|---|
| Esc | 收起右侧栏(目录抽屉或设置浮层打开时先关它们) |
| ← → | EPUB 翻章;TXT / Markdown 滚动一屏 |
| j k | 上下滚动 |
配置
在 profile 的插件条目里给 config,不填则全部用默认值:
| 字段 | 默认 | 说明 |
|---|---|---|
roots |
[] |
额外允许的阅读根目录(绝对路径)。不填则只认 dsh 已注册的工作区 |
maxBytes |
134217728 |
单文件上限(128 MiB),超过返回 413 |
数据边界
- 只读:不写、不删、不改工作区里的任何文件。
- 只能读到 dsh 已注册的工作区(以及你在
roots里显式授权的目录);请求里的路径一律拼在某个根之下,越界与未注册都是 403。 - 插件自身只访问本机的
/reader/api/*,不上传书籍内容;阅读进度存在浏览器 localStorage。 - 脚本、表单、内嵌框架、书外样式表均被剥除;EPUB 插图只从包内解析。
- 正文里写死的外链图片(
<img src="https://…">)仍会由浏览器按普通网页规则加载——这一点与你在浏览器里直接打开该文件相同,插件无法替你决定一本书里写了什么。
已知限制
- 不做标注、书签、全文搜索。
- EPUB 不支持 ZIP64;不渲染书内 CSS,统一用本面板排版。
- PDF 用浏览器原生查看器,焦点进入后 Esc 可能不冒泡到面板。
- 不做章节级分页,长章节靠滚动。
- 不做网络隔离:上面那种外链图片不会被拦,敏感书籍请选无外链的版本。
许可
MIT,见 LICENSE。
界面截图见 screenshots.json:EPUB 阅读、书架、Markdown、阅读设置浮层、夜间主题。
No comments yet. Be the first to write one.