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
羽毛球分组比赛记分
小程序二维码

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

小夜