前言¶
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 启动时按序执行(资料中的要点):
- 若已存在标记
dsh-tray-restart:menu:v2,则跳过; - 对
main.js做两处文本替换,并删去等量注释字节,用空格填充,使文件字节长度不变(asar 内偏移固定); - 对补丁后的 ESM 执行
node --check;失败则不写入app.asar; - 备份原始
main.js,写入补丁,更新 asar 头里该文件的 SHA256,读回校验; - 需要再重启 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。