dsh-ExitOnClose:让 DSH 桌面端点 × 真正退出

前言

DeepSeek Harness(DSH)桌面端默认行为是:点窗口右上角关闭按钮后,主窗口隐藏到系统托盘,Harness 相关进程仍在后台运行。对习惯「关窗即结束会话」的开发者来说,容易误以为已经退出,托盘里却还在跑 agent 轮次、终端子进程和后台任务。官方目前没有开关把「关闭」改成「退出应用」。

社区插件 dsh-ExitOnClose(维护者 xia0x1,npm 包名 dsh-exit-on-close)针对这一点:装上后,点 × 会结束 Electron 壳层及整棵 DSH 进程树,而不是只藏窗口。下面介绍它的定位、安装方式和使用时要注意的行为。

这是什么

dsh-ExitOnClose 是 DSH 桌面端(Windows) 客户端插件,分类上属于客户端能力增强。它不注册工具、Slot 或路由,也不改共享配置;通过 bundle patch 挂载后,在 Windows 上监听「窗口从可见变为不可见」并触发进程终止。

行为对比(来自项目 README):

之前   点 ×  →  窗口隐藏,托盘图标还在,DSH 继续运行
之后   点 ×  →  窗口关闭,DSH 全部进程结束

当前版本 0.1.0,许可证 MIT。在 SkillHub 插件目录 可找到条目;源码与说明见 GitHub 仓库。

核心功能

  1. 关闭即退出:关闭按钮会结束 Electron 壳层及其进程树,包括运行插件的宿主子进程;窗口、托盘图标、进行中的 agent 轮次、后台任务、终端子进程一并消失。
  2. 零配置:安装并启用后即生效,README 未描述额外配置文件或插件页选项。
  3. 仅 Windows 桌面端:依赖 @koromix/koffi-win32-x64 做 Win32 层窗口可见性轮询与进程树终止;其他平台或浏览器里的 dsh web 未兼容。
  4. 隔离性:不声明 @deepseek-ai/dsh* peer 依赖,不注入或消费 DSH 服务;koffi 懒加载,加载失败时只记日志,不影响其他插件或 profile 启动。

安装与启用

图形界面

在 DSH 桌面端打开插件页面,粘贴仓库 GitHub 链接:

https://github.com/xia0x1/dsh-ExitOnClose

命令行

在 PowerShell 中执行(# 后可跟分支或 tag 固定版本):

dsh plugin --profile desktop add https://github.com/xia0x1/dsh-ExitOnClose
dsh plugin --profile desktop add https://github.com/xia0x1/dsh-ExitOnClose#v0.1.0

本地开发时,可将 URL 换成本地目录路径。

停用:插件页关闭 dsh-exit-on-close。
卸载:插件页对 dsh-exit-on-close 执行卸载。

插件以当前 DSH 进程权限运行;安装前建议自行阅读仓库源码与 MIT 许可证。

典型用法与调试

日常使用没有额外步骤:启用插件后,照常点窗口关闭即可。

若想在不真正杀进程的前提下观察「关闭时会结束什么」,README 提供安全模式:设置环境变量后再启动桌面端:

DSH_EXIT_ON_CLOSE_DRY_RUN=1

此模式下关闭按钮只记录、不结束进程。

开发者可在仓库根目录跑纯逻辑单元测试(README 说明零依赖):

node --test "test/*.test.mjs"

仓库还提供 tools/dry-run.mjs 作为手动探针,只打印信息、不实际终止。

适用场景与注意事项

适合谁

  • 在 Windows 上使用 DSH 桌面版,希望关窗后 Harness 完全退出、不在托盘常驻。
  • 需要明确区分「隐藏窗口」与「结束全部 DSH 进程」的场景。

务必知晓

  1. 强制终止,非优雅退出:已落盘的会话、附件、日志仍在(DSH 运行中会落盘);进行中的模型输出与正在跑的子进程会丢失。
  2. 首次关闭:可能先出现官方「任务会继续,可从托盘打开」类提示,确认一次后不再出现(README 行为说明)。
  3. 版本兼容:作者在 README 中写明已在 DSH 桌面版 0.2.0-rc.2 / 0.2.1-rc.2(Electron 44 / Node 24 / Windows x64)验证;其他版本未测试。
  4. 生态说明:DSH 社区插件目录(如 SkillHub)为独立站点,与 DeepSeek / 幻方无官方从属关系;安装第三方插件前核对来源与代码是常规做法。

原理简述(可选阅读)

桌面端大致分为处理关闭按钮的 Electron 壳层,以及运行插件的宿主子进程。壳层只接受固定 IPC,插件无法直接请求其退出;关闭按钮又是原生控件,页面内难以观测。插件因此用 koffi 以约每秒 4 次轮询顶层窗口是否可见,捕获「曾经上屏 → 全部不可见」的跃迁,再依次终止壳层、其进程树与自身;选用轮询而非 Win32 钩子,是为了避免长期持有钩子状态。

结尾

若你的痛点是「点 × 后 DSH 还在托盘里跑」,dsh-ExitOnClose 用最小安装成本把关闭按钮改成整应用退出;接受强制终止带来的未保存输出风险,并仅在 Windows 桌面端使用时,可以按上文链接安装。

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

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

小夜