dsh-tray-restart:为 DSH 桌面端托盘菜单增加重启与刷新

前言

DeepSeek Harness(DSH)官方 Windows 桌面端在系统托盘右键菜单里,通常只有「打开」和「退出」。日常开发或长时间挂着任务时,若 Host 或前端界面状态异常,往往需要关掉整个应用再开,或依赖开发版菜单里才有的操作,而托盘入口并不完整。

dsh-tray-restart 是社区维护的客户端类插件,在官方桌面托盘菜单中增加「重启应用与 Host」与「刷新页面」,并在桌面端自动更新覆盖 app.asar 后自动重新打补丁。下面介绍它的定位、能力与安装方式。

这是什么

  • 名称:dsh-tray-restart(仓库 QIRSHENG/dsh-tray-restart)
  • 维护者:QIRSHENG
  • 分类:客户端(DeepSeek Harness 社区插件目录中的「客户端」类)
  • 当前版本(package.json):1.1.0
  • 许可证:MIT

插件在 Cordis Host 子进程中加载,通过等长改写官方打包的 resources/app.asar 内 /lib/main.js 的托盘菜单模板,把两项菜单挂到 Electron 主进程的托盘右键菜单上;官方未暴露托盘主进程扩展点时,这是 README 中说明的实现路径。

核心功能

托盘菜单变化

安装并重启应用后,托盘菜单由:

打开 DeepSeek Harness
────────────
退出 DeepSeek Harness

变为:

打开 DeepSeek Harness
重启应用与 Host          ← 新增
刷新页面                 ← 新增(刷新前端,Host 不重启)
────────────
退出 DeepSeek Harness

两项菜单分别做什么

  1. 重启应用与 Host:执行 app.relaunch(); quitWithoutConfirmation(),与官方开发版应用菜单里的同名项一致——干净退出 Host、重启整个应用,不弹「任务仍在运行」的确认框。
  2. 刷新页面:对主窗口执行 webContents.reload(),等价于前台按 Ctrl+R。只重载前端页面,Host、会话和正在跑的任务都不受影响;适合前端改坏、白屏或需要重新加载界面时使用。

两项复用官方已有的本地化文案(messages.restartAppHostMenu / messages.reloadPageMenu),中英文随系统语言切换。

更新后自动重打补丁

桌面端自动更新会把 app.asar 换回官方版本。插件在每次 Host 启动约 2 秒后运行检查,必要时重新应用补丁。README 说明:更新后第一次启动只负责重打补丁,托盘新菜单在下一次启动才出现。

补丁器支持从 1.0.x(仅重启项)升级到 1.1.0(重启 + 刷新两项),并同步 asar 目录内 /lib/main.js 的 SHA-256,以便在开启 EnableEmbeddedAsarIntegrityValidation 时仍能通过校验。

环境与限制

  • 需要 DSH 桌面端 0.2.x(Windows);package.json 中 engines.dsh 为 >=0.2.0 <0.3.0。
  • README 记载已在 @deepseek-ai/dsh-desktop 0.2.1-rc.2、Windows 11、Node 24 上验证。
  • 仅支持官方 Windows 桌面端;开发模式、dsh web、dsh --profile headless 无系统托盘,插件会安全跳过。
  • 非 Windows(macOS 菜单栏、Linux 托盘实现不同)不支持。
  • 主进程托盘代码仅在启动时加载,安装或补丁后需完全退出并重新打开应用才能看到菜单;官方更新后通常需启动两次(第一次重打补丁,第二次显示新菜单)。

安装与启用

桌面端 profile 由 Electron 应用独占管理,dsh plugin --profile desktop ... 会被拒绝,桌面端请走插件管理器(或由 agent 调用 plugin_manager 的 install_bundle)。

方式一:插件管理器(桌面端推荐)

  1. 将仓库克隆到任意目录(安装命令以 README 为准):
git clone https://github.com/QIRSHENG/dsh-tray-restart.git
  1. 打开 DeepSeek Harness → 设置 → 插件,选择「从本地目录安装」,指向含 package.json 的 dsh-tray-restart 目录。
  2. 安装完成后完全退出并重新打开 DeepSeek Harness。

方式二:CLI(非桌面端独占的 profile)

dsh plugin --profile <profile> add github:QIRSHENG/dsh-tray-restart
# 或本地目录
dsh plugin --profile <profile> add C:\path\to\dsh-tray-restart

同样需要在安装后完全退出并重新打开应用。

若托盘菜单未变化,可先托盘 → 退出,在 PowerShell 中于插件目录执行:

node lib/patcher.mjs status

确认输出中 status: "patched" 后再启动应用。

典型用法与手动补丁 CLI

日常使用只需通过托盘右键选择「重启应用与 Host」或「刷新页面」。

不安装插件、仅用 Node.js ≥ 20 时,也可在插件仓库目录运行补丁器(默认 asar:%LOCALAPPDATA%\Programs\DeepSeek Harness\resources\app.asar,可用环境变量 DSH_DESKTOP_APP_ASAR 覆盖):

node lib/patcher.mjs status          # 只读检查
node lib/patcher.mjs apply           # 需要时打补丁(幂等)
node lib/patcher.mjs apply --dry-run # 只检查能否安全打补丁
node lib/patcher.mjs restore         # 写回安装前的原始 main.js

加 --json 输出机器可读结果;运行记录写在 %USERPROFILE%\.dsh\dsh-tray-restart\status.json。

卸载

# 1. 先还原托盘菜单
node lib/patcher.mjs restore

# 2. 移除插件(桌面端:插件管理器;其它 profile 用 CLI)
dsh plugin --profile <profile> remove dsh-tray-restart

若 restore 报 size-mismatch(桌面端版本已变化),README 建议直接重新安装官方桌面端。

适用场景与注意

适合谁:在 Windows 上长期使用 DSH 官方桌面端、希望从托盘一键重启整个应用或只刷新前端、又不想在每次自动更新后手动改 app.asar 的用户。

安全与边界(摘自 README):只改写 /lib/main.js 中已知的托盘菜单模板;锚点不匹配或补丁会变长时会拒绝写入。不改注册表、不加启动项、不联网。升级后若补丁失败,菜单保持官方原样,不应影响启动。与其它直接修改 app.asar 的工具可能冲突;status: "unsupported" 时不应强行写入。应用无法启动时,可先 node lib/patcher.mjs restore,仍不行则重装桌面端。

权限与信任:插件在 DSH Host 进程权限下运行,并会修改本地桌面安装包内的 app.asar。安装前建议阅读仓库源码与 MIT 许可证,自行判断是否符合环境合规要求。

结尾

dsh-tray-restart 用最小 asar 补丁把开发版里已有的重启与刷新能力补到 Windows 托盘菜单,并在桌面端更新后自动重打补丁,适合需要稳定托盘运维入口的 DSH 桌面用户。

  • 社区目录页:https://www.skillhub.cn/plugins/QIRSHENG/dsh-tray-restart
  • 源码与完整说明:https://github.com/QIRSHENG/dsh-tray-restart

社区插件目录为独立站点,与 DeepSeek / 幻方无官方从属关系;星标与版本以仓库当前信息为准。

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

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

小夜