前言¶
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 倉庫。
核心功能¶
- 關閉即退出:關閉按鈕會結束 Electron 殼層及其進程樹,包括運行插件的宿主子進程;窗口、托盤圖標、進行中的 agent 輪次、後臺任務、終端子進程一併消失。
- 零配置:安裝並啓用後即生效,README 未描述額外配置文件或插件頁選項。
- 僅 Windows 桌面端:依賴
@koromix/koffi-win32-x64做 Win32 層窗口可見性輪詢與進程樹終止;其他平臺或瀏覽器裏的dsh web未兼容。 - 隔離性:不聲明
@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 進程」的場景。
務必知曉
- 強制終止,非優雅退出:已落盤的會話、附件、日誌仍在(DSH 運行中會落盤);進行中的模型輸出與正在跑的子進程會丟失。
- 首次關閉:可能先出現官方「任務會繼續,可從托盤打開」類提示,確認一次後不再出現(README 行爲說明)。
- 版本兼容:作者在 README 中寫明已在 DSH 桌面版
0.2.0-rc.2/0.2.1-rc.2(Electron 44 / Node 24 / Windows x64)驗證;其他版本未測試。 - 生態說明: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