前言¶
DeepSeek Harness(DSH)桌面应用在侧边栏底部没有「Reload Page」菜单,也没有内置快捷键;应用自身也无法从界面触发完整重启——Electron 主进程里的 app.relaunch() 只接在崩溃恢复路径上。开发插件或改 client 半部时,你往往只需要重载页面;改 Host 半部或 Cordis patch 时,则必须关掉整个进程再拉起。社区插件 dsh-desktop-restart(npm:@moonsand/dsh-desktop-restart)在侧边栏底部增加两个按钮,分别对应这两种操作。
这是什么¶
维护者为 MoonSand,分类为客户端插件。它在 DSH 桌面应用侧边栏底部注入两个操作:刷新界面(location.reload())与重启应用(由 Host 结束当前可执行文件的全部进程后,从同一路径再次启动)。刷新只动页面与 client 插件,Host 继续跑,进行中的 Agent turn 不会被中断;重启则是硬杀进程,会打断进行中的 turn。
仅 Windows 桌面端支持完整重启链路(依赖 Windows 任务计划程序与 Windows Script Host)。在纯 dsh web Host 上,重启接口返回 409 not-desktop,按钮会退化为仅刷新页面。
目录页:https://www.skillhub.cn/plugins/MoonSand/dsh-desktop-restart
源码与说明:https://github.com/MoonSand/dsh-desktop-restart
核心功能¶
界面示意(来自 README):
[⟲ 刷新界面] [↻ 重启应用]
| 按钮 | 行为 |
|---|---|
| Reload UI / 刷新界面 | 调用 location.reload(),重载页面及所有 client 插件;Host 不退出,进行中的 turn 不受影响。 |
| Restart app / 重启应用 | 请求 Host 结束应用二进制对应的全部进程并同路径再起。需二次点击确认;若有 Agent turn 进行中,标签会变为红色提示。 |
包内自带 cordis.patch.yml,会注入 Host 侧服务,一般无需再改 profile 的 patch 层。因声明了 Host 半部,Host 相关改动需要重启应用;仅 client 半部改动时,刷新界面即可。
Host 暴露的 HTTP 路由(节选):
| 路由 | 用途 |
|---|---|
GET /desktop-restart/status |
返回 { desktop, restarting, activeAgents, logPath } |
POST /desktop-restart/restart |
触发重启;需请求头 x-dsh-desktop-restart: 1(或桌面代理允许的 loopback 形态) |
POST /desktop-restart/diagnose |
以探测模式武装 watchdog,不杀进程,用于检查链路 |
重启在 Windows 上通过「非 detached 的 PowerShell helper → 一次性计划任务 → 脱离 Chromium job 的 watchdog」完成,避免 Host 子进程随主进程一并被 job 对象清掉。细节见仓库 README 的 How the restart works。
环境与依赖¶
- Windows only(重启路径)。
- DeepSeek Harness 桌面 0.2.1-rc.2 或更新(
engines.dsh声明;README 写明在 0.2.1-rc.3 上测过),Node >=20。 - 无 npm 运行时依赖;
index.js仅用 Node 内置模块,client.js使用 shell 提供的react。
当前 package.json 中版本为 0.1.6,许可证 MIT。
安装与启用¶
1、用 pnpm 安装包:
pnpm add @moonsand/dsh-desktop-restart
本地开发时可使用 link: 指向检出目录后再 pnpm install(见 README Install)。
2、在 profile 里注册 bundle——只有安装、未写入 bundles 时插件不会加载,也不会报错:
"dsh": { "profile": { "bundles": [ ..., "@moonsand/dsh-desktop-restart" ] } }
3、保存配置后重启 DSH 桌面应用,侧边栏底部应出现两个按钮。
若要通过桌面 Plugins → Discover 从自建市场安装:仓库内 market/index.json 为 format 1 索引;在 Discover 里 Add index source 填入
https://raw.githubusercontent.com/MoonSand/dsh-desktop-restart/main/market/index.json(须 http/https,无凭证与 fragment)。安装时使用索引里声明的 npm 版本。
典型用法¶
- 改 client 插件或 UI:点「刷新界面」,等价于整页 reload,不必杀 Host。
- 改 Host 服务、
cordis.patch.yml或 bundle Host 半部:点「重启应用」,确认后等待 watchdog 杀进程并拉起;会话历史与已落盘内容不受影响,但进行中的 turn 会被硬中断。 - 排查重启链路:对 Host 发
POST /desktop-restart/diagnose,不重启,只验证 helper / 计划任务是否可武装。
插件管理器正在向 profile 安装包时会拒绝重启(409 installing),避免安装中途进程被杀死;详见 README Known limitations。
适用场景与注意¶
适合在 Windows DSH 桌面端日常开发、调试 client 与 Host 的开发者。不适合把「重启应用」当作优雅退出:实现上使用 TerminateProcess,且仅在 Windows 桌面 shell 上完整可用。
插件 Host 半部以当前 DSH 进程权限运行;安装前请阅读 index.js 与 README 中的进程检测、计划任务与日志路径说明,并确认 MIT 许可证可接受。README 还列出:无全局快捷键(shell 快捷键先于页面处理)、任务计划被策略拦截时可能闪控制台、以及 tasklist.exe 在此上下文不可用等限制。
结尾¶
dsh-desktop-restart 用两个侧边栏动作补上了官方桌面壳缺少的「只 reload UI」与「整应用重启」入口,并把 Windows 下 Electron job 对象与重启顺序的约束写进了实现说明。需要安装步骤与 HTTP 契约时,以 GitHub README 为准: