Bundle
dsh-novel-launcher
在 DSH 界面右下角放一个悬浮球:点开本地书单,选一本用你自己的阅读器打开,窗口自动归位到习惯的位置。支持中文/拼音/首字母搜索。
- Source
- unsiscon
- License
- MIT
- Updated
- Updated yesterday
Readme
# dsh-novel-launcher 📖 **在 DeepSeek Harness 的界面里放一个悬浮球:点开本地书单,选一本用你自己的阅读器打开,窗口自动落在你习惯的位置。** 写代码的间隙看两眼小说,不用切窗口。 --- ## 界面预览 点右下角的 📖 悬浮球,展开本地书单 —— 顶部「继续读」直接续上,中间三路搜索,底部一键记住窗口位置: <img src="screenshots/2-book-list.png" width="380" alt="书单面板:继续读、拼音搜索、书库列表、记住位置 / 设置按钮"> 悬浮球常驻在界面右下角,不占布局、不影响写代码: <img src="screenshots/1-floating-ball.png" width="760" alt="悬浮球常驻在 DSH 界面右下角"> --- ## 它做什么 - 🟢 **右下角悬浮球** —— 不占布局,点开点收 - 📚 **本地书单** —— 扫描你的书库文件夹,只列出真正的电子书 - 🔍 **三路搜索** —— 中文(`魔界`)、全拼(`mojie`)、首字母(`mjd`)都能搜到《魔界的女婿》 - ⏯ **继续读** —— 顶部永远显示上次读到哪本、第几章 - 🪟 **窗口归位** —— 打开后自动把阅读器窗口搬到预设位置,顺手收掉上一个旧窗口 - 🎨 **跟随主题** —— 用 DSH 的设计变量,明暗自动适配 - 🌗 **点外部关闭 / Esc / 选书即收起 / 关闭自动清空搜索** ## 它不做什么 - 不抓网络小说、不带阅读器。书是你自己的,阅读器也是你自己的。 - 不上传任何东西,纯本地。 --- ## 安装 ```bash dsh plugin --profile web add github:<you>/dsh-novel-launcher ``` 装好后重启一次 `dsh web`,刷新浏览器,右下角出现 📖 即可。 > 开发版:把本目录放进 `~/.dsh/profiles/web/node_modules/dsh-novel-launcher/`, > 再把 `dsh-novel-launcher` 加进 `~/.dsh/profiles/web/package.json` 的 > `dsh.profile.bundles` 列表,重启即可(无需构建 —— 本插件纯 JS)。 ## 首次使用 点悬浮球 → 自动进入设置页 → **选一个放书的文件夹** → 保存。完事。 ## 设置项 | 设置 | 说明 | |---|---| | 书库目录 | 你的电子书放在哪 | | 阅读器进程名 | 窗口归位用(macOS)。例如 `OmniReader` | | 阅读器 Bundle ID | 优先用它来打开书,例如 `com.shrek.masterreader` | | 阅读器 .app 路径 | 可选,填了最优先 | | 认这些格式 | 默认 `epub, txt, mobi, azw3, pdf, fb2, chm, djvu, rtf, md, html` | | 窗口归位 | 开书后搬窗口 + 收旧窗(仅 macOS) | | 拼音搜索 | 用 macOS 系统自带的中文转拼音(仅 macOS) | | 显示「继续读」 | 自动探测阅读器的本地数据库 | ## 窗口归位(macOS)是怎么工作的 macOS 不允许随便操纵别的程序的窗口,必须拿到「辅助功能」授权。为了拿到一个**稳定可授权的身份**,插件会: 1. 首次启用时用 `osacompile` 把 `assets/window-helper.applescript` 编译成 `~/Applications/小说窗口助手.app` 2. 你在 **系统设置 → 隐私与安全性 → 辅助功能** 里把它加进去(**只需一次**) 3. 之后每次开书,插件通过 `/tmp` 下的一个小命令文件告诉它做什么模式 这样做而不是直接跑 `osascript`,是因为后者的授权身份挂在 Node 上 —— **Node 一升级路径就变,授权会静默失效**。用一个独立小程序就没这个问题。 助手只做两件事:记住当前窗口位置 / 把窗口搬回那个位置(并关掉停在那个位置上的旧窗口)。 它**永远不会关掉最前面那个窗口** —— 那是你刚打开的新书。 > 不想授权也完全没问题:关掉「窗口归位」,其他功能照常。 ## 跨平台 | 功能 | macOS | Windows / Linux | |---|---|---| | 悬浮球 / 书单 / 搜索 / 打开书 | ✅ | ✅(交给系统默认程序) | | 窗口归位 · 收旧窗 | ✅ | ❌ 自动隐藏该选项 | | 拼音搜索 | ✅ | ❌ 自动关闭 | ## 数据与隐私 - 配置:`$DSH_HOME/novel-launcher/config.json` - 窗口位置:`~/Library/Application Support/DSHNovelLauncher/frame.txt` - 命令文件:`/tmp/dsh-novel-window-cmd.txt`(每次开书覆盖一次) - 全部只在本机,不联网、不上传。 ## 架构 - **Host 半体**(`lib/index.js`):普通 Cordis 插件。扫目录、算拼音(走 `osascript` 调 macOS 的 `NSString` 转写)、探测阅读器数据库、拉起窗口助手,并注册 `/novel-launcher/*` 这组同源 JSON 接口。 - **浏览器半体**(`lib/client.js`):`window.__ModuleLoader__.load` 的纯 JS bundle, 注册进 `shell.overlay` 槽位。 - 两者只用 HTTP 通信,不依赖任何私有 RPC。 ## License MIT
Install
dsh plugin --profile web add github:unsiscon/dsh-novel-launcher#fbabe18b53c86568969b4e79c6bf7125f4aa685b
Profile: web
With the hub plugin installed, ask your agent to install it by name — it resolves the same plan shown here.
dsh plugin --profile web add github:stvlynn/dsh.fish#path:packages/dsh-plugin-hub
install dsh-novel-launcher from the hub