Back to home@1024483906-pixel

dsh-novel-reader

DSH休闲阅读文本插件

Stars
0
Language
JavaScript
Created
Aug 25, 2026
Updated
Aug 25, 2026
GitHub repo

Introduction

dsh-novel-reader 📖

在 DeepSeek Harness Web 界面中摸鱼看小说的插件。

在等待模型运行的间隙,把小说 txt 导入进来,用一个可拖动、可调整大小的悬浮窗 分页阅读——窗口小到不挡聊天界面,还能一键切换成"纯文字透明模式"彻底隐形。

dsh-plugin GitHub release License GitHub repo


🚀 安装

方式一:从 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,约一行高)
  • 窗口默认出现在页面右下角,打开后自动收进视口边缘
  • 拖动窗口/悬浮球不会打断阅读进度(拖动结束后不会误触发翻页或重置)

📸 截图预览

悬浮球与书架 字幕条阅读与章节搜索 透明模式

📖 快速上手

  1. 点击右下角 📖 悬浮球 → 阅读器展开
  2. 标题栏点 导入新书 → 选择一本 .txt 小说
  3. 滚轮滚动开始阅读; 跳章节;Ctrl+F 搜内容; 进入透明模式
  4. 看完合上——进度自动保存,下次打开接着读

⌨️ 快捷键一览

按键功能
/ 上一行 / 下一行
/ 上一页 / 下一页
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