前言¶
在 DeepSeek Harness(DSH)桌面端里改插件、调 Host 或验证 bundle 时,往往需要整进程重新加载:插件脚本、原生菜单和 Host 路由都要走一遍冷启动。Windows 上「应用」菜单里的「退出」只能关进程,没有「退出并立刻再开」的入口;完全手动关窗口再点快捷方式,步骤多且容易漏掉「先保存当前状态」的判断。社区插件 dsh-restart(维护者 mwk719)针对的是这一类操作:在 Windows 桌面端标题栏「应用 / 编辑」同一行追加「重启 / Restart」,点一次先弹确认框,确认后再关闭并重新打开应用,效果接近「退出后重新打开」。
下面按定位、能力、安装用法、实现要点与限制说明;事实以 GitHub 仓库 README 为准。该插件属于社区客户端类插件,与 DeepSeek / 幻方无官方从属关系;DSH 生态里插件目录为独立站点,并非官方应用商店。
这是什么¶
dsh-restart 给 DeepSeek Harness Desktop(Windows) 的标题栏加一颗「重启」按钮:单击只打开确认对话框,在对话框里确认后,应用关闭并用同一可执行文件再次启动。仓库地址:https://github.com/mwk719/dsh-restart,插件目录页:https://www.skillhub.cn/plugins/mwk719/dsh-restart。许可证为 MIT(README 标明)。
核心功能¶
- 标题栏按钮:装好后重启一次 DSH 桌面端,标题栏「应用 / 编辑」右侧出现「重启」(英文界面为
Restart)。 - 两步确认:单击按钮只弹框,不发起重启请求;取消、
Esc、点击遮罩均不执行任何操作。 - 会话提示:确认框标题为「重启 DeepSeek Harness?」,正文说明会关闭并重新打开,并显示当前正在运行的会话数量(空闲时会说明没有正在运行的会话),便于判断重启是否会中断进行中的回合。
- Host 侧保护:实际重启需 Host 接受带
?force=1的POST /dsh-restart/restart;未确认的调用返回409,不会重启。 - 诊断路由(同源、需自定义请求头):
GET /dsh-restart/state返回状态、保护版本、是否桌面端、忙碌会话数、按钮挂载时间、日志路径等;POST /dsh-restart/restart?dry=1仅说明「若现在确认会如何」,不会重启。 - 日志:行为写入
~/.dsh/dsh-restart.log(弹框、确认、取消、重启及助手进程步骤均有记录)。
插件为零依赖、零构建:Host 端 index.js、浏览器端 client.js、助手 restart-child.mjs 均为手写 ESM,安装后可直接使用,无需 pnpm install 或构建步骤。
安装与启用¶
先用 DSH CLI 为 desktop profile 添加插件(命令来自 README 原文):
dsh plugin --profile desktop add github:mwk719/dsh-restart
也可以从插件市场(dsh-market)安装。装完后再重启一次 DeepSeek Harness 应用,标题栏才会出现「重启」按钮。
安装前建议自行查看仓库源码与 MIT 许可证;插件在 当前 dsh 进程权限 下运行,重启会结束 Electron 主进程与 Host,属于高影响操作,只应在可信来源安装。
典型用法¶
- 点标题栏「重启」(或
Restart)。 - 阅读确认框中的会话数量说明,评估是否会中断正在生成的回答。
- 选「取消」则关闭对话框;选「重启应用」则立刻执行重启流程。
- 若约 20 秒后应用仍在运行(重启未生效),确认框会改为报错文案并允许重试;细节可查
~/.dsh/dsh-restart.log。
卸载:设置 → 插件 → dsh-restart → 停用或卸载,按钮随之消失。
为什么放在标题栏而不是「应用」菜单¶
「应用」菜单是 Electron 主进程里的原生菜单,由 app.asar 内 lib/main.js 的 applicationItems() 构造(最后一项为「退出」)。DSH 插件系统未给该菜单留插槽,桌面端也未把 quit / restart 暴露给网页或插件,因此无法向该菜单追加条目。
本插件改为向桌面端 preload 在页面中创建的 [data-windows-menu] 元素下手:在其 shadow root 内的 [role="menubar"](即「应用 / 编辑」所在行)追加一个按钮,样式与布局与该 row 一致,并随界面语言显示「重启 / Restart」。此处是插件唯一依赖桌面端内部结构的地方:只读 shadow root 并 append 按钮,不修改既有按钮、不拦截事件。若未来桌面端不再提供该元素,插件在 20 秒内找不到目标则不渲染(不报错、不影响其它插件)。
重启如何实现¶
- 桌面端 Host 进程即
DeepSeek Harness.exe以 Node 模式运行(ELECTRON_RUN_AS_NODE=1,由 Electron 主进程 spawn 并带 IPC)。因此在 Host 里process.execPath为应用可执行文件,process.ppid为 Electron 主进程。 - 确认后,Host 启动 detached 助手进程(
restart-child.mjs):助手先结束 Electron 主进程,再结束 Host(释放 HTTP 端口),约 2 秒后用同一可执行文件重新启动。 - 效果等同手动「退出后重新打开」:插件代码、原生菜单、Host 全部重新加载。实现方式是结束进程再拉起,不是优雅退出;若某次重启后应用未起来,可手动再打开一次(日志中有各步结果)。
代价:正在生成的回答会中断;会话记录、消息与文件在磁盘上,重开后仍在列表中。
适用场景与注意¶
适合:在 Windows 上频繁验证插件或 Host 变更、需要整应用冷启动而不想反复手动关开窗口的 DSH 桌面用户。
限制(README 明确要求):
- 仅 Windows 桌面端:macOS 使用原生应用菜单,Linux 桌面端没有该 menubar,其它平台插件不渲染任何 UI。
- 需要
dsh >= 0.2.0-rc.1(package.json中engines.dsh与dsh.engines.dsh一致)。 - 重启会中断进行中的回合;安全设计上单击绝不直接重启,Host 侧
?force=1为第二道闸。
结尾¶
dsh-restart 用标题栏一颗按钮和双重确认,把 Windows 桌面端「整应用重启」收成可预期的几步操作,并附带会话数提示与 Host 诊断路由。需要安装或源码细节时,可看目录页 https://www.skillhub.cn/plugins/mwk719/dsh-restart 与 GitHub https://github.com/mwk719/dsh-restart。