dsh-app-restart:在 DSH 桌面端设置里一键重启整个应用

前言

DeepSeek Harness(DSH)桌面端由 Electron 外壳、托管的 Web GUI 和 cordis Host 进程共同组成。改插件、换配置或排查异常时,往往需要完整退出再重新打开,才能确保各层都加载最新状态。手动 Cmd+Q 或关掉窗口再点图标,步骤琐碎;而 Electron 侧并未向插件暴露 app.relaunch() 这类重启 IPC,插件很难在应用内自行完成「优雅退出并自动拉起」。

下面介绍社区插件 dsh-app-restart(维护者 foreee,分类:客户端)。它在 DSH 桌面应用的 Settings 中增加 Restart App 区块,用带确认的按钮触发整应用重启:先走平台正常的退出路径,再由独立 relauncher 在主进程结束后重新打开应用包。无需改 DSH 源码,在 OS 层由 Host 进程编排。

这是什么

dsh-app-restart 是面向 DSH 桌面 profile 的客户端插件。一句话:在设置页提供受保护的重启入口,执行 graceful quit + automatic relaunch,覆盖 Electron shell、Web GUI 与 cordis Host。

  • 仓库:foreee/dsh-app-restart
  • 社区目录:skillhub.cn 插件页
  • 许可证:MIT(见仓库 LICENSE)
  • 当前 package 版本:0.1.1(以仓库为准)
  • 引擎要求:@deepseek-ai/dsh 为 >=0.2.0-rc.2 <0.3.0-0 或 >=0.3.0-rc.0 <0.4.0-0

社区插件目录为独立站点,与 DeepSeek / 幻方无官方从属关系;安装前请自行查看源码与许可证。插件以当前 DSH 进程权限运行。

核心功能

设置页入口与防误触

安装并重启桌面应用一次后,Settings 会出现 Restart App 分区,列出本次重启会做什么,以及当前环境是否支持该操作。重启按钮为两步确认:先点再确认,避免误触。

重启流程

重启不等于强杀进程,而是:

  1. 启动一个 detached relauncher,等待应用主进程退出后重新打开应用 bundle;
  2. 插件触发平台正常的退出路径——在 macOS 上为 Quit Apple Event,与 Cmd+Q 行为一致,包括活动任务确认对话框;
  3. 若用户在对话框中取消退出,relauncher 会超时,最后的 open 只会聚焦仍在运行的应用,相当于无害空操作。

README 说明:Electron shell 不向插件提供重启 IPC(app.relaunch() 仅限主进程),因此重启在 Host 进程侧于 OS 层编排,无需修改 DSH 源码。

HTTP 路由与安全边界

Route Method 用途
api/dsh-app-restart/status GET 按钮可用性相关状态
api/dsh-app-restart/restart POST 执行重启

两路由均在 loopback 信任边界内(loopback socket 且 loopback Host header,同源标记校验)。已配对的远程设备会被拒绝:只有本机 GUI 可以触发重启。

配置项

字段 默认值 含义
enabled true 设为 false 则不挂载相关能力
dryRun false POST /restart 仅返回计算出的计划且不实际拉起进程,用于校验

平台支持

平台 退出方式 再次启动 说明
macOS Quit Apple Event(bundle id,再 app 名) 主 PID 退出后 open <bundle> 主要目标平台
Windows taskkill /PID(优雅 WM_CLOSE) PID 退出后 PowerShell Start-Process best effort;若无法优雅关闭,relauncher 仍可能在下次手动退出后重开
Linux SIGTERM PID 退出后 nohup <exe> best effort

插件会拒绝针对开发态 Electron 检出运行:可执行文件旁无 app.asar,或 bundle id 为通用的 com.github.Electron 时不会执行——误拉起通用 Electron 二进制也无法正常启动 DSH。

安装与启用

一条命令(GitHub)

dsh plugin --profile desktop add "https://github.com/foreee/dsh-app-restart"

Web 端 Plugins 页面也可通过「按路径 / git 安装」对话框填入同一地址。

与插件管理器等价的手动步骤

cd ~/.dsh/profiles/desktop
pnpm add "file:/absolute/path/to/dsh-app-restart"   # 或上述 GitHub 地址
# 然后将 "dsh-app-restart" 加入 package.json -> dsh.profile.bundles

重启桌面应用一次 以加载插件;之后 Restart App 会出现在 Settings 中。

典型用法

  1. 完成安装并重启 DSH 桌面端。
  2. 打开 Settings,找到 Restart App,阅读说明与当前环境是否支持。
  3. 点击重启按钮,在二次确认后执行整应用重启。

若需在不动进程的前提下验证重启计划,可将配置 dryRun 设为 true,对 POST api/dsh-app-restart/restart 的响应会包含计算结果且不实际 spawn relauncher(具体以仓库文档为准)。

开发侧:lib/client.js 为手写 window.__ModuleLoader__ bundle,形态与官方客户端插件 tsdown 产出一致,改代码后重新安装即可,无需单独构建步骤。

适用场景与注意

适合谁: 经常在桌面端试插件、改 cordis patch 或 Host 相关行为,需要「完整冷启动」而非仅刷新页面的 DSH 用户;macOS 上体验最完整,Windows / Linux 为 best effort。

注意:

  • 重启会走系统级退出与拉起,进行中的对话或未保存状态请自行评估风险。
  • 仅本机 loopback GUI 可调用重启 API,远程配对设备不能代你重启。
  • 开发用 Electron 检出不会启用该插件的重启逻辑,避免误操作。
  • 安装命令、配置字段与行为以 GitHub README 为准;社区目录页:https://www.skillhub.cn/plugins/foreee/dsh-app-restart。

结尾

dsh-app-restart 把「整应用优雅退出并自动重开」收进 Settings,用两步确认和 loopback 限制降低误触与远程滥用风险,在插件无法调用 app.relaunch() 的前提下用 OS 层 relauncher 补齐能力。若你维护桌面端插件或频繁需要完整重启 DSH,可按 README 安装并在设置页使用 Restart App。

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

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

小夜