前言¶
DeepSeek Harness(DSH)的桌面客戶端退出方式比較有限:要麼去找窗口的關閉按鈕,要麼在任務管理器裏找進程。如果你習慣在命令行裏工作,想在腳本里、快捷方式裏或者終端窗口裏直接說一句”關掉客戶端”,原生是做不到的。
dsh-command-quit 就是解決這個問題的第三方插件。它給客戶端補上兩條退出通道:對話框裏的斜槓指令 /quit-dsh,以及任意終端窗口裏的 quit-dsh。兩條通道都走同一條應用原生退出流程,不會強殺進程。
下面介紹這個插件。
這是什麼¶
dsh-command-quit 是一個 DSH 客戶端插件,維護者是 Noobboi-22401,當前版本 1.4.0,倉庫地址是 https://github.com/Noobboi-22401/dsh-command-quit 。它做的事情很集中:讓 DSH 桌面客戶端可以被命令關閉。
有幾點需要先說清楚,來自 README 的原文聲明:
- 不是 DeepSeek 官方插件,與 DeepSeek 官方沒有任何關係。配置面板裏那幾項設置只是借用了 DSH 自帶的插件設置入口,控件是 DSH 提供的公共控件,排在同一個分組裏,僅此而已。
- 代碼由 Deepseek V4.1 Flash 編寫,上傳者只做了基本功能測試,未逐行復查代碼,可能存在未知的 bug。
- 許可證是 MIT。
這個插件在社區目錄站點上的分類是「客戶端」,星標數爲 0(以目錄頁當前顯示爲準)。
核心功能¶
插件提供兩種退出方式,走的是同一條應用原生退出流程。
一、對話框指令。 在 DSH 對話框裏輸入 /quit-dsh 並回車,客戶端關閉。輸入 /q 會看到 /quit-dsh 候選,按 Tab 之後補全並立即執行——當前版本里補全和執行是一步完成的。也可以在命令面板裏選擇 quit-dsh,描述是「關閉 DeepSeek Harness 客戶端(退出程序)」。
二、終端命令。 在任意終端窗口(PowerShell、cmd、Windows Terminal、Git Bash 都行)輸入 quit-dsh 並回車,同樣關閉客戶端。默認會先問一句”確認退出嗎 [y/N]”,只有輸入 y、yes 或 是 才繼續,直接回車等於不退出。
兩種方式都不能繞過客戶端自己的確認框:如果此時還有任務在跑,會彈出確認框,而不是直接殺掉進程。同時開着多個客戶端時,一次會把它們都請退出。
運行時不消耗 Token。 命令完全在本地處理,只是通過 IPC 讓應用外殼退出,不會發起任何模型調用,不計入 token 用量。
安裝與啓用¶
安裝插件¶
從 GitHub 安裝,用 install_bundle:
install_bundle github:Noobboi-22401/dsh-command-quit
也可以克隆下來走本地路徑安裝。先克隆:
git clone https://github.com/Noobboi-22401/dsh-command-quit.git
然後:
install_bundle link:<克隆到的絕對路徑>/dsh-command-quit
安裝由 DSH 自帶的 plugin_manager 完成,它會執行 pnpm add、把 dsh-command-quit 寫進 profile 的 dsh.profile.bundles、建立符號鏈接並更新 lockfile。
生效方式:必須打退出補丁¶
從 1.4.0 起,/quit-dsh 需要給客戶端打一次”退出補丁”。原因是桌面客戶端對子進程發來的消息只認固定幾種,其餘一律當成異常:它會報一句 dsh desktop host sent an invalid IPC event,把幹活的進程掐掉,然後彈出”應用無法啓動或已意外停止”的窗口。所以插件在發送之前會先檢查補丁在不在,沒打就只回答一句話、不發消息,不會再崩。
打補丁最省事的方式是雙擊插件目錄裏的 install-dsh-quit.cmd,它本來是裝終端命令的,現在會順便找到客戶端、打好補丁並記住客戶端位置。如果不想裝終端命令、只想讓 /quit-dsh 能用,在插件目錄執行一次:
node tools\patch-asar.mjs
補丁只改客戶端 app.asar 裏的兩處語句,改完文件大小一個字節都不變,不會破壞客戶端自身的完整性校驗,也能用一條命令精確還原。打完要重啓客戶端才生效——profile 的 bundle 列表在客戶端啓動時讀取,剛裝上的插件也要重啓後再用。
補丁狀態可以隨時查:
node tools\patch-asar.mjs --check # patched / unpatched / unknown
node tools\patch-asar.mjs --revert # 還原出廠字節
客戶端升級之後¶
客戶端升級會換掉 app.asar,補丁隨之消失,/quit-dsh 會回答”這個客戶端還沒打好退出補丁”,不會崩潰。重新雙擊一次 install-dsh-quit.cmd 或跑一次 node tools\patch-asar.mjs,然後重啓客戶端。
另外,終端命令的啓動文件寫在 DSH 的安裝目錄裏,客戶端升級有可能把它清掉。升級後 quit-dsh 不見了,同樣是雙擊一次 install-dsh-quit.cmd,配置頁的狀態行會顯示”尚未安裝”。
典型用法¶
對話框裏退出¶
在輸入框輸入 /q,下方出現 /quit-dsh 候選,按 Tab 就會補全並立即執行。如果此時還有任務在跑,先彈確認框。命令面板裏也能找到 quit-dsh。
終端裏退出¶
終端命令需要先裝一次,之後就能在任何終端窗口用。
安裝步驟(只做一次):
- 打開插件文件夾,雙擊
install-dsh-quit.cmd。 - 看到”安裝完成”後關掉窗口。
- 重新打開一個終端(已經開着的終端認不到新命令),輸入
quit-dsh回車。
安裝做兩件事:把兩個幾行的小文件寫進 DSH 自己的命令目錄(也就是放着 dsh.cmd 的那個目錄),並且順帶找到客戶端、打好補丁、記住位置。兩件都不需要管理員權限,客戶端開着也能做。
實際跑起來的樣子:
> quit-dsh
即將關閉 DeepSeek Harness 客戶端。
(如果客戶端裏還有任務在跑,關的時候它自己還會再彈一次確認框。)
確認退出嗎? [y/N] y
正在請求關閉 DeepSeek Harness 客戶端…
已發送退出請求,客戶端正在關閉。
幾個參數:
| 命令 | 作用 |
|---|---|
quit-dsh |
先問一句,答 y 才退出(默認行爲) |
quit-dsh --yes |
不詢問,直接退出(寫腳本或快捷方式時用) |
quit-dsh --list |
只列出正在運行的客戶端,不退出 |
quit-dsh --help |
顯示說明 |
改命令名¶
兩個命令名都可以自己改。在 DSH 界面左側欄打開插件頁面,在官方分組裏找到”退出命令”,點開就能改。
對話框命令的四個預設是 /quit、/quit-dsh、/quitdsh、/qd,也可以在”命令名”輸入框裏直接打 / 後面那一段。同一時刻只生效一個,保存後立刻生效、不需要重啓,舊名字同時失效。
保存前會過兩道檢查,不通過就拒絕保存(輸入框變紅、保存按鈕點不動):
- 格式。 必須以小寫英文字母開頭,只能包含小寫字母、數字、下劃線和連字符。
- 撞名。 不能和 DSH 內置命令、其他插件已註冊的命令重名。這裏有個坑:DSH 的命令分兩層存放,
compact、goal、plan這類登記在會話/預設作用域裏,export、feedback這類纔是全局的。只檢查全局層的話,compact會被當成沒人用,結果退出命令登記成功卻被同名內置命令遮住,輸入它根本不會退出。插件現在的檢查會遍歷註冊表裏所有已知作用域,任一層被佔用就拒絕保存。
萬一已經把撞名保存進去了,插件啓動時發現這個名字不可用,會自動退回默認命令名 /quit-dsh 並在日誌裏寫明。還有一種保存時查不出來的情況——另一個插件在某個會話跑起來之後才登記同名命令——插件會監聽 DSH 的命令表變化通知,發現被蓋住後就自動改回 /quit-dsh,並在插件配置頁顯示紅字、在應用界面底部彈出橫幅,不用打開設置頁也能看到,可以點 × 關掉。關掉只關這一條,換個名字再撞、或重啓後仍是同一個衝突,會再彈一次。
配置由 DSH 自己保管,寫進當前 profile 的 cordis.patch.yml,插件目錄下不會產生獨立的配置文件。衝突提醒作爲 notice 字段寫進同一個配置項,只有真的發生時纔出現,換回可用的名字後會自動清掉。
終端命令名在同一配置頁的”終端命令”一節裏改,默認 quit-dsh,預設有 quit-dsh、dsh-quit、dshq、dsq。改完保存後,已安裝的啓動文件會自動改名,不用重新安裝。不過已經開着的終端要重新打開才能認到新名字,因爲終端會緩存 PATH 上的命令。
終端命令那一節還有兩個開關:
| 控件 | 默認 | 說明 |
|---|---|---|
| 啓用終端退出功能 | 開 | 關掉後 quit-dsh 不會退出客戶端,只提示功能已關閉,已經安裝的啓動文件會保留 |
| 執行前先詢問確認(y/N) | 開 | 關掉後 quit-dsh 直接退出、不再提問。上一項關掉時這一項會變灰 |
終端命令名保存時也檢查撞名:若該名字在 PATH 上已被別的文件佔用,保存直接拒絕並列出佔用的文件,因爲終端解析命令看的是整個 PATH,撞名會讓你的命令變成另一個程序。Windows 的保留設備名(con、nul、com1 等)同樣拒絕。
終端命令怎麼關掉客戶端的¶
終端裏的 quit-dsh 和插件是兩個不同的進程,客戶端內部那條”請退出”的專線插件的子進程夠得着,終端夠不着。所以插件在客戶端運行時會開一個只允許本機連接的小接口:優先 Windows 命名管道,環境不支持時退回 127.0.0.1 迴環端口,並拒絕任何非本機來源的連接。接口門牌號不是祕密,另配一把 64 位十六進制的隨機口令,放在 ~/.dsh-command-quit/ 下。終端命令讀到門牌號和口令、連上去說”請退出”,插件收到後做的事和 /quit-dsh 完全相同。口令對不上會被明確拒絕。
適用場景與注意事項¶
適合這幾類人:
- 習慣在終端裏幹活,想讓客戶端在腳本或快捷方式裏被正常關掉的人。
- 希望用斜槓命令退出客戶端、而不是找窗口關閉按鈕的人。
- 需要在有任務在跑時仍能安全退出、不想強殺進程的人。
使用前要注意幾件事:
- 插件以 DSH 進程權限運行。 它提供的功能是給客戶端打補丁、註冊命令,安裝前應先檢查源碼和許可證。許可證是 MIT,源碼在 GitHub 上公開可查。
- 1.3.0 版本已作廢。 1.3.0 聲稱”不再需要給客戶端打補丁,直接用客戶端自帶的官方退出消息”——README 明確說這個判斷是錯的,按它做會讓客戶端彈崩潰窗口。1.4.0 已改回打補丁的方式。如果你裝的是 1.3.0,先移除再裝 1.4.0:
remove_bundle dsh-command-quit
install_bundle github:Noobboi-22401/dsh-command-quit
已經有終端命令的(例如用過測試版)不用先手動刪除,插件按”第幾代”識別自己寫過的啓動文件,發現舊版會自動換成新版。升級之後記得重啓客戶端。
3. 卸載時補丁要撤掉。 卸載分幾步:先用 remove_bundle dsh-command-quit 移除插件,再重啓客戶端;如果裝過終端命令,雙擊 uninstall-dsh-quit.cmd。它只刪帶本插件標記的那兩個文件,你自己創建的同名文件不會被動,客戶端的 /quit-dsh 不受影響。正常卸載時 uninstall-dsh-quit.cmd 會自動把補丁撤掉;如果插件目錄已經被刪掉,要手動在仍留有插件副本的目錄執行 node tools\patch-asar.mjs --revert 還原。
結尾¶
dsh-command-quit 的價值在於把退出這個動作標準化成了命令:對話框裏有 /quit-dsh,終端裏有 quit-dsh,兩條通道都走客戶端的原生退出流程、不強殺、不丟數據,而且不消耗 Token。命令名和確認方式都能自己配,撞名有現場提示。
它不是官方插件,代碼由模型生成、只做過基本功能測試,裝之前建議先過一遍源碼。
目錄頁:https://www.skillhub.cn/plugins/Noobboi-22401/dsh-command-quit
GitHub:https://github.com/Noobboi-22401/dsh-command-quit