dsh-tray-restart:为 DeepSeek Harness 桌面端托盘与应用菜单增加「重启」项

前言

DeepSeek Harness(DSH)桌面端基于 Electron,系统托盘右键和应用菜单里通常只有「打开」「退出」等项。开发版里会有「重启 DeepSeek Harness」,正式安装包往往没有。改 Host 配置或杀进程再拉起,容易打断任务、也不走应用正常的退出路径。下面介绍社区插件 dsh-tray-restart(维护者 hxh230802):在现有菜单里加入固定中文文案 「重启 DeepSeek Harness」,行为与官方开发版一致,通过 app.relaunch() 加 quitWithoutConfirmation() 完成重启。

这是什么

dsh-tray-restart 是 DSH 生态里的客户端类插件(npm 包名 @hxhxh/dsh-tray-restart,当前版本 0.3.1,MIT 许可证)。它不改 Host 插件 API,而是在每次 Host 启动时对桌面安装目录里的 resources/app.asar 内 lib/main.js 做一次性文本补丁,把重启项写进:

  • 系统托盘上下文菜单(与 Open、Quit 同级);
  • 应用菜单(Windows 标题栏「Application」、macOS 菜单栏;正式版里该项通常仅开发构建可见)。

DSH 插件运行在 Host 子进程,无法直接挂接 Electron 主进程里的原生菜单,因此采用「补丁 asar + 重启 DSH 生效」的方式。插件页与源码见 SkillHub 目录 与 GitHub 仓库(社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系)。

核心功能

菜单行为

点击「重启 DeepSeek Harness」后,应用走正常退出路径关闭 Host,再 relaunch。README 说明:不会额外确认,与官方开发版菜单项一致;重启会中断正在运行的任务。

补丁机制(Host 每次启动)

托盘与应用菜单逻辑在 Electron 主进程的 lib/main.js 中。插件在 Host 启动时按序执行(资料中的要点):

  1. 若已存在标记 dsh-tray-restart:menu:v2,则跳过;
  2. 对 main.js 做两处文本替换,并删去等量注释字节,用空格填充,使文件字节长度不变(asar 内偏移固定);
  3. 对补丁后的 ESM 执行 node --check;失败则不写入 app.asar;
  4. 备份原始 main.js,写入补丁,更新 asar 头里该文件的 SHA256,读回校验;
  5. 需要再重启 DSH 一次——当前主进程仍加载旧代码。

应用更新会替换 app.asar;下次启动插件会对新文件自动重新补丁。README 写明已在桌面版 0.2.0-rc.2 上验证;若后续构建改了菜单源码,插件会记录 unsupported 且不动 app.asar。

插件管理页

插件管理器中会渲染 plugins.bundle.config 卡片,展示补丁状态、桌面应用版本、补丁版本,以及 app.asar、备份目录、日志路径。可操作:

  • Re-check:重新检查;
  • Apply now:立即应用并恢复自动补丁;
  • Restore original menu:用备份写回并暂停自动补丁(下次启动不会立刻再补丁);已写入的补丁仍须重启 DSH 后菜单才变。

安装与启用

通过 DSH 插件管理器从 npm 安装:

@hxhxh/dsh-tray-restart

或从 GitHub 指定来源:

github:hxh230802/dsh-tray-restart

plugin_manager 的 npm 安装目标示例:

{ "action": "install_bundle", "target": "@hxhxh/dsh-tray-restart" }

Host 配置片段(字段以 README 为准):

- id: dsh-tray-restart
  config:
    enabled: true
    dryRun: false       # 仅生成并语法检查,不写 app.asar
    verifySyntax: true
    asarPath: ''        # 调试或非标准安装路径

安装并完成补丁后,按上文说明至少重启 DSH 一次(首次补丁流程里可能还需要第二次重启),菜单项才会出现在托盘与应用菜单中。

典型用法与恢复

调试:手动一次性补丁

在插件包目录下(资料给出的命令):

node scripts/apply.mjs

从备份恢复菜单

默认备份位置(Windows 示例):

%USERPROFILE%\.dsh\dsh-tray-restart\backup\main.original.js
%USERPROFILE%\.dsh\dsh-tray-restart\backup\manifest.json

执行:

node scripts/restore.mjs

若当前 main.js 不是本插件写入的精确副本(例如应用已更新),restore 会拒绝。若 asar 头损坏导致无法正常 restore:

node scripts/emergency-restore.mjs

插件管理页上的 Restore original menu 与上述脚本目的一致:恢复原始菜单并暂停自动补丁;需要菜单项时再点 Apply now。

适用场景与注意

适合谁:长期在 Windows / macOS 上使用 DSH 桌面端、希望像开发版一样从托盘或应用菜单一键重启、且接受「修改已安装应用文件」做法的开发者。

权限与信任:插件以当前 DSH 进程权限运行,会改写本机 app.asar。这不是官方公开 API;安装前应阅读 源码与 LICENSE,确认备份与 node --check 流程可接受。若桌面端无法启动,README 建议运行 node scripts/restore.mjs。

环境与依赖:package.json 要求 Node >=22.19.0。dryRun: true 时可只验证补丁逻辑而不写盘。

结尾

dsh-tray-restart 用可逆的 asar 补丁,把「重启 DeepSeek Harness」补进托盘与应用菜单,并配合管理页与 restore 脚本降低误改风险。需要安装说明与 issue 时,可查阅 SkillHub 插件页 与 GitHub:hxh230802/dsh-tray-restart。

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

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

小夜