dsh-restart-desktop:DeepSeek Harness 桌面端侧边栏一键重启

前言

在 DeepSeek Harness(DSH)桌面版里做插件或改 profile 时,经常需要让 Electron 宿主完整退出再拉起,才能加载新的 Host 端代码或 bundle。托盘里关窗口往往只是藏到托盘,真正退出还要再点一层;用终端杀进程又容易漏掉渲染进程或 GPU 子进程。下面介绍社区插件 dsh-restart-desktop(仓库 StarMoon-win/dsh-restart-plugin):在侧边栏底部、Settings 上方放一个 Restart / 重启 按钮,一次点击完成「整棵进程树结束 + 同路径可执行文件再启动」,无需托盘菜单或额外命令行窗口。

这是什么

dsh-restart-desktop 是 DSH 的 bundle 插件(Host 半 + 浏览器半),由维护者 StarMoon-win 发布,分类属于 客户端 能力。它面向 Windows 10/11 上的 DeepSeek Harness Desktop(Electron) 构建,要求 dsh >= 0.2.0-rc.1。在 SkillHub 目录页可见简介:Sidebar restart button for DeepSeek Harness Desktop: one click fully quits and reopens the app. 许可证为 MIT(package.json 版本 1.0.0)。

插件不是业务项目的 npm 依赖,而是安装进 ~/.dsh/profiles/<profile>/ 的 profile;在 dsh web 或非 Windows 桌面环境下,按钮会根据 Host 上报的 supported 状态自行隐藏。

核心功能

  1. 一键真重启:整桌面应用退出后再启动,效果接近从托盘完全退出再手动打开,但合并为一次操作。
  2. 入口固定:展开侧栏为图标 + Restart / 重启;56px 折叠轨显示圆形图标按钮与原生 tooltip。
  3. 平台感知:仅在 Host 报告为 Windows 桌面应用时渲染;不支持的平台不占位。
  4. 无闪屏 shell:通过 detached 的 Node 进程与隐藏的 PowerShell 子进程完成 relaunch,不在屏幕上弹出命令行窗口。
  5. 失败可追查:每次尝试追加写入 %TEMP%\dsh-restart-desktop\restart.log,启动结果带重试校验。
  6. 界面与元数据本地化:英文与简体中文 UI,插件管理器展示信息及独立图标。

安装与启用

官方做法是在 profile 的 package.json 里增加依赖,并把 bundle 名写入 dsh.profile.bundles,然后重启应用(保留你已有的条目,各加一行):

{
  "dependencies": {
    // ...your existing entries
    "dsh-restart-desktop": "github:StarMoon-win/dsh-restart-plugin"
  },
  "dsh": {
    "profile": {
      "bundles": [
        // ...your existing entries
        "dsh-restart-desktop"
      ]
    }
  }
}

也可以在当前构建的 Settings → Plugins 里从 GitHub 源安装。新 bundle 可热激活;若侧栏未出现按钮,刷新页面后再看。

卸载时从 dsh.profile.bundles 与 dependencies 中移除 dsh-restart-desktop,再重启应用。

典型用法

  1. 在侧栏底部、Settings 上方找到 Restart。
  2. 点击后页面显示 Restarting…,约一秒后应用退出,新实例自动打开。
  3. 正在运行的任务会被打断;没有二次确认对话框,点击即视为确认。

若按钮显示 Restart failed,等待数秒后重试,并查看日志:

%TEMP%\dsh-restart-desktop\restart.log

排查侧栏无按钮时,可在应用同源打开 /dsh-restart-desktop/status,确认 supported 为 true,且当前 profile 的 dsh.profile.bundles 已包含该 bundle。

工作原理(简述)

侧栏按钮(client.js)先 GET /dsh-restart-desktop/status 决定是否渲染,再 POST /dsh-restart-desktop/restart 触发重启(返回 202 后页面随应用一起结束)。Host 路由(index.js)写入 %TEMP%\dsh-restart-desktop\request.json,并以 ELECTRON_RUN_AS_NODE=1 拉起 detached 的 helper.mjs。Helper 等待约 1.2 秒让 HTTP 响应离开 Host,再按映像名计算 Windows 进程树(排除 helper 与 PowerShell 子进程)、终止主进程、渲染器、GPU、Host 及其拉起的工具进程,然后用干净环境启动同一可执行文件;约 4 秒后校验,最多重试三次并写日志。

README 说明:桌面壳把关窗变成「藏到托盘」,且 app.asar 未向插件暴露 app.quit() / app.relaunch(),因此完整重启只能由插件在进程外结束应用树并重新启动可执行文件。两条 API 仅接受本机 loopback 请求,并对转发头、Host、Origin 等做了限制;重启必须为 POST。

适用场景与注意

适合:在 Windows 桌面 DSH 上频繁改 bundle、调试 Host 或需要「干净进程」而不想手动托盘退出的开发者。

务必注意:

  • 仅 Windows 桌面 Electron 构建;Node 20+ 主要面向插件开发,非日常使用硬性条件(见 README Requirements 表)。
  • 插件以 当前 dsh 进程权限 运行,安装前请阅读仓库源码与 MIT 许可证,自行评估终止进程树的行为是否符合你的环境策略。
  • 社区目录 SkillHub 插件页 与 GitHub 仓库由社区维护,与 DeepSeek / 幻方无官方从属关系;DSH 生态强调「一切皆插件」,本文事实以仓库 README 与 package.json 为准。

结尾

dsh-restart-desktop 把「完全退出再打开」收进侧栏一脚,并附带 loopback 限制下的 Host 路由与外部 helper 重启链路。需要安装说明与故障表时,以 GitHub 仓库 为准;在目录站检索可用 SkillHub 条目。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜