前言¶
在 DeepSeek Harness(DSH)桌面版里改插件、调界面,常见做法是整程序退出再开。桌面版把关窗当成「藏到托盘」,有任务时还会在 before-quit 弹确认,并没有一条干净的「退出并立刻回来」的入口。HMR 出现后,宿主可以只 reconcile profile、重新加载磁盘上变过的插件,但这类操作仍需要有人接到设置里、做成一键动作。
下面介绍社区插件 dsh-reloader(维护者 kuroshio4396,GitHub:kuroshio4396/dsh-reloader)。它面向 DSH 桌面版(Electron 打包版),在设置里提供「重载刷新」和「自动重启」两条路径,分别对应不关程序刷新插件与界面、以及彻底结束进程再由独立重启器拉起。
这是什么¶
dsh-reloader 是 DSH 的客户端类插件(package.json 中 engines.dsh 为 >=0.2.0,许可证 MIT,当前版本 1.0.0)。职责很集中:
- 不关程序:让宿主在 HMR 队列里重新组合 profile,停掉并重新加载磁盘上已变更的插件,再刷新页面取数。
- 需要硬重启时:结束整个 Electron 主进程,由脱离 job object 的 PowerShell 重启器在短延迟后重新启动桌面版 exe。
入口在宿主界面:设置 → 重载与重启。
核心功能¶
重载刷新¶
行为类似在浏览器里强制刷新(README 类比 Ctrl+F5),但底层是 DSH 的 profile reconcile,而不是单纯清缓存。
- 在
runExclusive中调用ctx.hmr.reconcileProfile(),与 HMR 其它变更共用串行队列。 - 磁盘上文件变过的插件会被停掉、重新 import 并 apply。
- 接口会返回
warnings、pending、restartReason;其中pending表示仍有模块写了盘但必须整程序重启才生效的数量。
代价:页面会闪一下,设置面板会关闭。若重载替换了本插件自身(文件变更会换新实例),内存状态会清零,因此插件把需要保留的结果写到 state.json。
在源码模式跑 dsh web 时,「重载刷新」可用;「自动重启」会提示不支持。
自动重启¶
用于必须杀掉整个桌面进程的场景(例如部分变更无法仅靠 HMR 生效)。
- 前端 POST 重启接口后,宿主通过
launch-restarter.ps1用 WMIWin32_Process.Create拉起重启器(父进程为WmiPrvSE.exe,避免落在 Electron 的 job object 里被连带结束)。 - 接口立即返回
ok、restarterPid、delayMs(默认延迟 2500ms,便于 HTTP 响应先落地);前端可进入倒计时。 - 重启器在
restart.ps1中校验进程名为 DeepSeek*,对主进程taskkill /PID(不带/T),等待宿主与子进程退出后再Start-Process启动 exe。
代价:窗口会消失约数秒,进行中的任务会中断。
安装与启用¶
插件装进桌面版自带的 desktop profile,使用安装目录内自带的 dsh.cmd(目录中应有 DeepSeek Harness.exe):
# <安装目录> 里应是 DeepSeek Harness.exe
<安装目录>/resources/runtime/cli/bin/dsh.cmd plugin --profile desktop add "link:<本仓库的绝对路径>"
也可以用 git 依赖安装:
<安装目录>/resources/runtime/cli/bin/dsh.cmd plugin --profile desktop add "https://github.com/kuroshio4396/dsh-reloader.git"
装完后 HMR 通常会当场载入插件;若未载入,可在设置里点一次「重载刷新」,或手动重启桌面版。
维护者在仓库提供自检脚本,改代码或排查集成问题时可运行:
node selfcheck.mjs
README 说明自检共 13 项,覆盖包字段、client 模块 id、cordis patch、API 前缀、PowerShell 脚本约束等。
典型用法¶
- 安装或修改了其它 DSH 插件、希望在不退出桌面的前提下让变更生效:打开 设置 → 重载与重启,执行「重载刷新」。
- 仍有
pending项或必须重启整个 Electron 进程:在同一页面使用「自动重启」,等待倒计时与窗口短暂消失后程序被重新拉起。 - 开发本插件或 fork 后:在仓库根目录执行
node selfcheck.mjs,确认路由、脚本与打包约束未破坏。
前端会探测 /ping,在 connection.fetch 注册的 /api/dsh-reloader/* 与 webServer 上的 /dsh-reloader/api/* 之间选用可用前缀,以兼容桌面自定义协议与源码模式。
适用场景与注意¶
适合谁
- 经常在桌面版上安装、调试 DSH 插件的开发者。
- 需要少做「整程序退出再开」,但又偶尔必须硬重启桌面版的用户。
环境与限制
- 「自动重启」面向 Windows 打包版实现(PowerShell + WMI);非桌面打包环境不要依赖重启链路。
- 插件以当前 DSH 进程权限运行;安装前请阅读 GitHub 仓库 源码与 MIT 许可证,自行评估是否纳入自己的桌面环境。
- 社区目录 SkillHub 插件页 与 DeepSeek / 幻方无官方从属关系,仅为社区收录信息。
结尾¶
dsh-reloader 把「热重载插件与界面」和「彻底重启桌面版」收敛到设置页两个按钮,对应 DSH 桌面版关窗语义与 HMR 能力之间的缝隙。需要进一步了解实现细节(路由挂载、HMR 队列、重启器时序)可直接阅读仓库 README。
- 目录页:https://www.skillhub.cn/plugins/kuroshio4396/dsh-reloader
- GitHub:https://github.com/kuroshio4396/dsh-reloader