前言¶
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 分区,列出本次重启会做什么,以及当前环境是否支持该操作。重启按钮为两步确认:先点再确认,避免误触。
重启流程¶
重启不等于强杀进程,而是:
- 启动一个 detached relauncher,等待应用主进程退出后重新打开应用 bundle;
- 插件触发平台正常的退出路径——在 macOS 上为 Quit Apple Event,与 Cmd+Q 行为一致,包括活动任务确认对话框;
- 若用户在对话框中取消退出,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 中。
典型用法¶
- 完成安装并重启 DSH 桌面端。
- 打开 Settings,找到 Restart App,阅读说明与当前环境是否支持。
- 点击重启按钮,在二次确认后执行整应用重启。
若需在不动进程的前提下验证重启计划,可将配置 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