dsh-tray-restart:为 DSH 桌面托盘增加「重启」菜单项

前言

DeepSeek Harness(DSH)桌面端在系统托盘提供右键菜单,默认常见只有「打开」与「退出」。改插件、换配置或长时间运行后想完整重载进程时,往往只能先退出再重新点开托盘图标。社区插件 dsh-tray-restart(npm 包名 @aaayeaaa-p1ws/dsh-tray-restart)在托盘菜单里多插入一条「重启 DeepSeek Harness」,走 Electron 主进程自带的 app.relaunch() 与静默退出路径,效果等价于手动关掉再开,但不必反复找图标。下面按定位、安装、用法与实现要点说明。

这是什么

  • 维护者:aaayeaaa-P1WS
  • 分类:客户端(仅作用于 DSH Windows 桌面端)
  • 一句话:给桌面托盘右键菜单增加「重启 DeepSeek Harness」,在「打开」与「退出」之间显示。
  • 许可证:MIT(见仓库 package.json 与 README)

DSH 插件跑在 Host 子进程,拿不到 Electron 的 Menu/Tray,主进程 IPC 也没有「动态加菜单项」的协议。本插件因此在 asar 归档层面对 resources/app.asar 内的 lib/main.js 做等长文本补丁,而不是在运行时挂菜单 API。

核心功能

装妥并重启 DSH 后,托盘菜单大致变为:

打开 DeepSeek Harness
重启 DeepSeek Harness   ← 新增
─────────────
退出 DeepSeek Harness

点击「重启」会调用主进程逻辑:app.relaunch() 配合 quitWithoutConfirmation(),进程退出后按 relaunch 路径再起,与手动重开一致。

插件还提供工具 tray_restart_status:

参数 作用
(无) 查看补丁状态、asar 路径、main.js 大小、备份位置
apply: true 立即检查并打补丁(幂等)
restore: true 用备份还原原始菜单

运行日志写在 ~/.dsh/tray-restart/log.ndjson。首次打补丁前会将原始 main.js 备份到 ~/.dsh/tray-restart/main.js.orig。

版本与引擎(资料原文):当前包版本 1.0.1;dsh.engines.dsh 要求 >=0.2.2-rc.1;补丁锚点按 0.2.2-rc.1 的 lib/main.js 形状编写。桌面端自动更新会覆盖 app.asar,插件在每次启动时会检查并在缺失补丁时自动补回。

安装与启用

托盘菜单在 DSH 启动时一次性构建,安装插件后必须再重启一次 DSH,新菜单项才会出现;之后每次启动会自动尝试补丁。

插件市场(README 推荐):在 DSH「插件市场」搜索 tray-restart,安装,然后重启 DSH。

命令行:

dsh plugin add @aaayeaaa-p1ws/dsh-tray-restart

尚未发版时也可从 GitHub 安装:

dsh plugin add github:aaayeaaa-P1WS/dsh-tray-restart

本地开发可用 link(示例路径按本机修改):

// ~/.dsh/profiles/desktop/package.json
"dependencies": { "@aaayeaaa-p1ws/dsh-tray-restart": "link:C:/path/to/dsh-tray-restart" }

装完后重启 DSH,右键托盘图标应能看到「重启 DeepSeek Harness」。

典型用法

  1. 按上一节完成安装并重启 DSH。
  2. 右键托盘图标,点「重启 DeepSeek Harness」完成一次完整重载。
  3. 桌面端升级后若菜单恢复为两项 only,可调用 tray_restart_status 并传 apply: true 立刻补补丁;需要撤销时可传 restore: true 或手动用备份写回。

工作原理(简要)

主进程模板中原有「打开 / 分隔线 / 退出」。插件在 Host 侧:

  1. 读取 asar 头,定位 /lib/main.js 字节区间;
  2. 将 //#region lib/types/tray.js 整段等长替换,在「打开」与「退出」之间插入重启项,标签为 "重启 " + messages.aboutProduct(随产品与界面语言,不写死中文);
  3. 用空格补齐使字节数与原段完全一致,保证 asar 头 offset/size 仍有效;
  4. fsync 后回读比对,不一致则报错并保留备份。

README 强调:找不到 quitWithoutConfirmation() 或代码形状因应用升级变化时,不会乱改,只记日志(anchor-mismatch),需维护者适配后再发版。

适用场景与注意

适合:常驻 Windows 桌面端、频繁试插件或希望一键重载而不退出再点的用户。

限制(资料原文):

  • 仅 Windows 桌面端;Web / macOS / Linux 无对应托盘代码,插件会自动跳过,不影响启动。
  • 依赖当前 DSH 桌面版本中 main.js 锚点;不匹配时不补丁。
  • 插件以 当前 dsh 进程权限 读写 app.asar;安装前宜自行查看 GitHub 仓库 源码与 MIT 许可证,确认是否接受对安装目录内 asar 的修改与备份策略。

DSH 生态主张「一切皆插件」;社区目录 SkillHub 插件页 为独立站点,与 DeepSeek / 幻方无官方从属关系,本文仅介绍该社区插件能力,不视为官方应用商店条目。

结尾

dsh-tray-restart 用等长 asar 补丁在 Windows 桌面托盘补上「重启」入口,并在升级后自动尝试补回;安装后记得重启一次 DSH。目录与源码:

  • 目录页:https://www.skillhub.cn/plugins/aaayeaaa-P1WS/dsh-tray-restart
  • GitHub:https://github.com/aaayeaaa-P1WS/dsh-tray-restart
羽毛球分组比赛记分
小程序二维码

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

小夜