dsh-novel-reader
DSH休闲阅读文本插件
- Stars
- 0
- Language
- JavaScript
- Created
- Aug 25, 2026
- Updated
- Aug 25, 2026
Introduction
dsh-novel-reader 📖
在 DeepSeek Harness Web 界面中摸鱼看小说的插件。
在等待模型运行的间隙,把小说 txt 导入进来,用一个可拖动、可调整大小的悬浮窗
分页阅读——窗口小到不挡聊天界面,还能一键切换成"纯文字透明模式"彻底隐形。
🚀 安装
方式一:从 GitHub 安装(推荐,无需构建授权)
本插件是预构建分发(lib/ 构建产物已随仓库发布,无需 prepare 脚本,
也不会触发 pnpm 的构建授权提示):
dsh plugin --profile web add github:1024483906-pixel/dsh-novel-reader
参考官方文档 打包与安装插件: 分发预构建产物(而非源码 +
prepare脚本)时,用户不需要做任何构建授权。
方式二:本地路径安装(开发用)
cd D:\dsh插件
node D:\dsh\node_modules\@deepseek-ai\dsh\lib\bin.js plugin --profile web add link:./dsh-novel-reader
以上任意方式安装后,重启 DSH(如 D:\dsh\restart-dsh.ps1),刷新
http://127.0.0.1:3080,右下角出现 📖 悬浮球即安装成功。
也可以把
dsh-novel-reader/目录复制到任意位置,再用link:<绝对路径>安装。
✨ 功能特性
📚 小说管理
- txt 导入:点击悬浮窗标题栏 → 书架 →
导入新书,用浏览器文件选择器选择本地.txt小说(UTF-8),自动上传并加入书架。 - 书架切换:导入多本后,点标题栏
书打开书架,当前书 📖 高亮,点击即可切换。 - 独立进度:每本书的阅读进度、字号、窗口位置/大小、透明模式状态各自独立保存, 切换书目互不干扰,重启 DSH 后自动恢复。
📖 阅读体验
- 字幕条式阅读:窗口默认为约两行高的迷你字幕条,放在角落不挡视线;拖动四边/ 右下角拖柄可任意放大,变成舒适的多行阅读窗。
- 多方式翻页:
- 鼠标滚轮滑动逐行翻页
- 方向键
↑/↓逐行、←/→整页 - 底栏
上一页/下一页按钮
- 页码显示:底栏显示
第 X / Y 页(按当前窗口大小计算的"一屏一页"),读到 末尾显示"已到末尾"。 - 字号调节:
A−/A+按钮,或Ctrl + =/Ctrl + -快捷键,范围 12–32px。
🧭 章节与搜索
- 章节导航:点标题栏
章打开章节列表,自动识别常见的章节标题格式:第X章/第X节/第X回/第X卷/第X部/第X集/第X篇/Chapter N, 当前章节高亮,点击一键跳转。 - 全文搜索:
Ctrl+F或点标题栏搜打开搜索条,输入关键词回车搜索 (大小写不敏感,最多 200 条结果,带上下文片段),↑上/↓下在结果间循环跳转。
🎨 透明模式
点标题栏 透 开启:窗口背景、边框、标题栏、底栏全部消失,只剩下文字悬浮在
界面上,彻底不挡内容。该模式下:
- 拖动文字即可移动位置
- 双击文字或按
Esc退出透明模式 - 支持滚轮/方向键继续翻页阅读
- 透明模式下显示的行数(窗口高度一致的前提下)与普通模式相同,切换不跳动
🖱️ 窗口控制
- 标题栏拖动移动位置;窗口四边(上/下/左/右)+ 右下角拖柄均可拖动调整大小 (最小 140×90,约一行高)
- 窗口默认出现在页面右下角,打开后自动收进视口边缘
- 拖动窗口/悬浮球不会打断阅读进度(拖动结束后不会误触发翻页或重置)
📸 截图预览
📖 快速上手
- 点击右下角 📖 悬浮球 → 阅读器展开
- 标题栏点
书→导入新书→ 选择一本.txt小说 - 滚轮滚动开始阅读;
章跳章节;Ctrl+F搜内容;透进入透明模式 - 看完合上——进度自动保存,下次打开接着读
⌨️ 快捷键一览
| 按键 | 功能 |
|---|---|
↑ / ↓ | 上一行 / 下一行 |
← / → | 上一页 / 下一页 |
Ctrl+F | 打开搜索 |
Ctrl+= / Ctrl+- | 增大 / 减小字号 |
Esc | 关闭搜索/章节/书架;退出透明模式 |
💾 数据存储
书籍与进度存储在 $DSH_HOME/novel-reader/($DSH_HOME 通常是
D:\dsh\.dsh,以环境变量为准):
novel-reader/
├── books/<id>.txt # 导入的小说原文(UTF-8)
├── books/<id>.chapters.json # 章节索引(自动解析,可重建)
├── books.json # 书架元数据
└── progress.json # 每本书的进度/窗口偏好
数据只保存在本地,不会上传任何书籍内容。
🗑️ 卸载
node D:\dsh\node_modules\@deepseek-ai\dsh\lib\bin.js plugin --profile web remove dsh-novel-reader
重启后生效;$DSH_HOME/novel-reader/ 下的书籍数据会保留(如需删除请手动清理)。
🧱 项目结构
dsh-novel-reader/
├── package.json # 插件清单(dsh.bundle / dsh.client 声明)
├── cordis.patch.yml # 插件注册行
├── lib/
│ ├── index.js # 主机半体:HTTP 路由 + 数据持久化(Node)
│ ├── client.js # 浏览器半体:悬浮窗 UI(手写 bundle,零构建依赖)
│ ├── store.js # 纯函数数据层:章节解析 / 全文搜索 / 原子写入
│ └── *.test.js # node:test 单元测试
└── README.md
- 主机半体:Cordis 插件,注册
/novel/books/novel/upload/novel/content/novel/chapters/novel/search/novel/progress六个路由,文本与状态 原子写入磁盘。 - 浏览器半体:注册进 DSH 的
shell.overlay槽位,纯React.createElement手写,不依赖构建工具链,跟随 DSH 客户端模块系统加载。 - 测试:
cd dsh-novel-reader && node --test lib/(14 个用例:章节解析、 全文搜索、存储读写、路径穿越防护等)。
📄 License
MIT