前言¶
DeepSeek Harness Desktop 默認只有一種關閉動作:點關閉就是退出。日常掛在後臺跑 Agent 的人會碰到兩個具體問題——想暫時收起窗口但讓任務繼續跑,只能靠關掉再重開;想把某個會話或整個工作區單獨拉出來看,也沒有入口。DSH 的窗口和退出邏輯不在插件運行時裏,插件只跑在 Host(Node 子進程)和 Web 前端,拿不到窗口 IPC。
下面介紹 lczment 維護的插件 dsh-window。它把關閉行爲做成可選(最小化到後臺 / 完全退出 / 每次詢問),並支持把單個會話或整個工作區開進獨立子窗口。注意這是第三方擴展,不是 DeepSeek 官方組件,殼擴展部分會直接改本機安裝目錄的 resources/app。
這是什麼¶
dsh-window 是 DeepSeek Harness Desktop 的客戶端插件,由 lczment 維護,MIT 協議,npm 包 @lczment/dsh-window@0.1.0。它解決上面說的兩個動作缺口:關閉窗口時由你決定退到托盤還是完全退出,以及把會話 / 工作區開成子窗口。
項目分兩部分:插件(index.js / client.js)負責設置頁、側欄按鈕、會話行按鈕和關閉對話框的 UI,加上 Host 側路由;殼擴展(shell/install.mjs)注入 Electron 主進程,接管窗口關閉、創建子窗口、讀寫共享配置。只裝插件的話,設置頁和多開按鈕會出現,但頂部會提示殼擴展未安裝,關閉窗口仍走 DSH 原行爲。
核心功能¶
關閉行爲可選:關閉主窗口時彈出與主界面同風格的對話框,選項是最小化到後臺、完全退出、取消,可勾選「記住我的選擇」。
設置頁:設置 →「窗口與多開」裏有三個選項(每次詢問 / 最小化到後臺 / 完全退出),立即生效,與關閉對話框共用同一份配置。
側欄快捷入口:側欄底部、設置齒輪上方新增「多開」按鈕(窄欄只顯示圖標),點開可改關閉行爲或把目標丟進子窗口。
每會話獨立窗口:會話行懸停時,在「…」菜單旁出現窗口圖標,點擊即把該會話開進新窗口。
工作區整窗:設置頁裏每個工作區有 Open workspace,把整個工作區開進新窗口。
後臺保活:選「最小化到後臺」後進程與 Agent 繼續運行,托盤圖標可以重新打開或退出。
另外插件內按鈕帶 120ms 懸停過渡,系統開啓「減少動畫」時自動關閉位移效果。安裝 / 升級收尾通過隱藏的 wscript 啓動,不會閃控制台窗口。
安裝與啓用¶
前置條件:Windows、DeepSeek Harness Desktop 0.2.1-rc.5 或更新、Node.js 可用。兩個步驟要分開做,先裝插件,再裝殼擴展。
第一步,裝插件。已發佈到 npm,命令如下:
dsh plugin add @lczment/dsh-window
也可以在 設置 → 插件 → 發現 裏搜索 DSH Window,或直接按倉庫安裝:
dsh plugin add github:lczment/dsh-window
裝完打開 設置 → 窗口與多開,應能看到設置頁。
第二步,裝殼擴展。這一步要寫入 D:\DeepSeek Harness(或你的安裝目錄),並以當前用戶運行 PowerShell:
# 在倉庫根目錄
node tools/install-shell-extension.mjs --stage-only
# 註冊隱藏的收尾任務(每分鐘檢查一次,成功後自動刪除)
powershell -NoProfile -ExecutionPolicy Bypass -File tools/register-completion-task.ps1
# 然後:托盤圖標 → 退出。約一分鐘內應用會帶着擴展重啓
--stage-only 做的是:解包 resources/app.asar → resources/app、疊加 app.asar.unpacked、給 lib/main.js 打補丁(關閉鉤子、子窗口 WebSocket 白名單、子窗口 IPC 放行)、給 lib/preload-app.cjs 加 window.dshWindow 橋,然後等應用退出時把 app.asar 改名爲 app.asar.orig。應用正在運行時 app.asar 被佔用,所以切換必須等退出後由收尾任務完成。
通過市場 / npm 安裝時,插件位於 %USERPROFILE%\.dsh\profiles\desktop\node_modules\@lczment\dsh-window(設置了 DSH_HOME 則在 %DSH_HOME%\profiles\desktop\node_modules\@lczment\dsh-window),把上面命令裏的 tools/ 換成該目錄下的 tools/ 即可。安裝目錄不是默認的 D:\DeepSeek Harness 時,先設置環境變量:
$env:DSH_DESKTOP_ROOT = 'E:\Apps\DeepSeek Harness'
收尾任務有 75 秒健康檢查:啓動後擴展沒寫日誌、或補丁缺失,會自動回滾到原版 app.asar 並重啓,不會把應用留在壞狀態。
第三步,驗證。設置頁頂部顯示綠色 “Desktop shell extension is installed”;關閉主窗口出現對話框;側欄會話懸停出現窗口圖標。
配置與行爲¶
配置文件在 %USERPROFILE%\.dsh\desktop\window-policy.json(DSH_HOME 存在時用 $DSH_HOME\desktop\window-policy.json):
{ "closeAction": "ask" }
三個取值:ask 是每次關閉都詢問(默認),background 直接隱藏到托盤,quit 直接退出。關閉對話框勾選「記住我的選擇」會寫入同一文件;設置頁修改後立即廣播給所有窗口。
典型用法¶
把某個長任務的會話單獨開出來:會話行懸停 → 點窗口圖標,新窗口加載該會話。子窗口與主窗口共享同一份登錄 cookie 與 Host 連接,會話數據是同一個 runtime。
把整個工作區整體隔離到獨立窗口:設置 →「窗口與多開」裏點該工作區的 Open workspace。
收窗口不退任務:在設置頁選「最小化到後臺」或在關閉對話框勾選「記住我的選擇」,之後關主窗口只會把應用收到托盤,Agent 繼續跑,可以從托盤圖標重新打開或退出。
改回原行爲:把關閉行爲設爲「每次詢問」即可,對話框每次彈出。
適用場景與注意¶
適合 Windows 上用 DeepSeek Harness Desktop、希望關窗不退、或需要把會話 / 工作區拆到子窗口並行看的人。
幾條必須說清楚的限制:殼擴展只支持 Windows(依賴 DSH 的 win32 托盤、titleBarOverlay 與 PowerShell 腳本);它是對本機安裝目錄的補丁,不是官方擴展點,DSH 升級後 resources/app.asar 會被新文件替換,舊補丁失效,需要重跑第 2 步那條收尾命令;插件運行在當前 dsh 進程權限下,殼擴展要寫安裝目錄,安裝前應先檢查 shell/install.mjs 與倉庫源碼、確認 MIT 許可證;前端尚未就緒時關閉對話框回退到系統原生對話框;只裝插件不裝殼擴展的話,關閉行爲不會改變。
DSH 升級後重新執行安裝腳本即可:
node tools/install-shell-extension.mjs --stage-only
powershell -NoProfile -ExecutionPolicy Bypass -File tools/register-completion-task.ps1
插件部分通常不需要重裝。卸載則先退出應用,運行 tools/uninstall-shell-extension.ps1(會恢復 app.asar.orig、刪除 resources/app 與 resources/dsh-window-extension),再在 設置 → 插件 裏移除本插件。
小結¶
dsh-window 的價值在於把 DSH Desktop 裏原本寫死的關閉動作和單窗口結構變成可選項,不需要自己改官方代碼。它由 lczment 個人維護(當前星標 0,客戶端分類),功能邊界和補丁式安裝方式在 README 裏都寫得很清楚,裝之前按上面的注意項覈對一遍即可。
目錄頁:https://www.skillhub.cn/plugins/lczment/dsh-window
GitHub:https://github.com/lczment/dsh-window