前言¶
在 macOS 上跑 DeepSeek Harness(DSH)桌面版時,一旦裝了新插件或改了配置,往往要靠退出再手動打開才能重新加載。官方發佈版沒有獨立的「重啓」命令;開發構建裏 App 菜單的「重啓應用與 Host」僅在 !app.isPackaged 時注入,日常用戶看不到。遠程連上 Mac、或習慣用智能體替你操作時,「Cmd+Q 再點開」既慢,也容易在「有進行中任務」時被原生確認框卡住——沒人點框,進程就退不下去。下面介紹社區插件 dsh-macos-restart(維護者 craig90x,分類:客戶端),它給桌面 DSH 增加設置頁按鈕和 restart_dsh 工具,並在確認框無法遠程處理時用 detached helper 做 quit → 重拉的完整流程。
這是什麼¶
dsh-macos-restart 是面向 macOS 桌面版 DSH 的一鍵重啓插件:在 UI 和 agent 工具各提供一個入口,由獨立 helper 在宿主退出後負責重新拉起應用。純 Node 的 dsh web 宿主會明確拒絕,不適用本插件。
當前插件包版本爲 0.1.3(見倉庫 package.json),要求 Node >=20、DSH >=0.2.0-rc.1。
核心功能¶
裝好後有兩處入口,行爲一致:
| 入口 | 說明 |
|---|---|
| 設置 → 通用 → 「重啓 DSH」 | 一行按鈕,點一下即觸發重啓流程 |
工具 restart_dsh |
對 agent 明確說「重啓 DSH」時調用;僅響應用戶明確要求 |
重啓時宿主會 spawn 一個 detached helper,存活於宿主結束之後,大致順序爲:等待 delayMs(默認 1.5s,讓 HTTP 響應先送達瀏覽器)→ osascript quit → 若在 dialogWaitMs(默認 6s)內未退出(常見原因:有任務時彈出原生「確認退出」框)→ 可選 SIGTERM,再 5s 仍不退則可選 SIGKILL 主進程 → 等待主進程與整棵 bundle 進程樹消失 → 用 spawn 與 open -n 交替重試拉起,跨過約 15s 的系統回收窗口 → 寫日誌、系統通知、刪除鎖文件。
運維相關路徑:
- 日誌:
~/.dsh/logs/macos-restart.log(每行帶階段) - 鎖:
~/.dsh/macos-restart.lock(3 分鐘自動過期)
安裝與啓用¶
通過 DSH 插件管理器安裝本地目錄(也可在 設置 → 插件 → 添加插件 → 本地目錄):
plugin_manager install_bundle target=/path/to/dsh-macos-restart
若需從 GitHub 取得源碼,可先 clone 到本地,再執行同一條 install_bundle(路徑換成你的目錄):
git clone https://github.com/craig90x/dsh-macos-restart.git
plugin_manager install_bundle target=/path/to/dsh-macos-restart
注意: 首次安裝後插件尚未加載,需要 手動重啓一次 DSH;之後上述重啓入口才會生效。
卸載與回滾:
plugin_manager remove_bundle target=dsh-macos-restart
若改過 ~/.dsh/profiles/desktop/cordis.patch.yml,請還原備份後再重啓一次 DSH。
配置項¶
可在 profile 的 cordis.patch.yml 或插件默認裏調整(片段來自 README):
- id: macos-restart
name: dsh-macos-restart
config:
appPath: /Applications/DeepSeek Harness.app # 應用路徑(默認值同此)
delayMs: 1500 # 交接前等待,讓 HTTP 響應送達
dialogWaitMs: 6000 # 發出 quit 後等這麼久,仍未退出即視爲確認框
quitTimeoutMs: 25000 # osascript quit 的超時上限
relaunchTimeoutMs: 30000 # 重拉總時限(需跨過約 15s 的系統回收窗口)
allowSigtermFallback: true # 是否允許 SIGTERM(通常無效,僅先試一下)
allowSigkillFallback: true # 是否允許 SIGKILL 兜底(false 則只優雅退出,遠程可能永久卡框)
典型用法¶
- 本地:打開 DSH → 設置 → 通用 → 點擊「重啓 DSH」。
- 對話:在會話裏明確要求 agent「重啓 DSH」,由其調用
restart_dsh。 - 排障:重啓失敗或卡住時查看
~/.dsh/logs/macos-restart.log,對照各階段日誌(quit、SIGTERM/SIGKILL、relaunch 等)。
適用場景與注意¶
適合: 經常在 macOS 桌面 DSH 上裝插件、改 cordis 配置,需要少一步「完全退出再打開」;遠程維護同一臺 Mac 上的 DSH,希望在確認框無人點擊時仍能完成重啓(默認允許 SIGKILL 兜底)。
務必瞭解:
- 重啓會 中斷進行中的任務;有任務時幾乎必彈原生確認框。
allowSigkillFallback: false時遇到框可能只能本地人工確認,遠程會失敗。 - 每次重啓後 host 端口會變(README 舉例 51489 → 59523);本地窗口由新實例自帶,遠端訪問靠代理自動跟隨。
- 若 macOS TCC 拒絕 Apple Events(日誌出現
osascript quit failed),helper 會走 SIGTERM/SIGKILL 兜底。 - 插件在 當前 DSH 進程權限 下運行;安裝前請自行查看 GitHub 倉庫 源碼與許可證,確認符合你的環境策略。DSH 生態採用「一切皆插件」思路,SkillHub 目錄頁 爲社區站點,與 DeepSeek / 幻方無官方從屬關係。
結尾¶
經過上面的步驟,桌面版 DSH 在 macOS 上多了與發佈版對等的「重啓」能力,並把遠程場景下確認框、進程樹回收、重拉誤判等邊角一併處理進 helper 流程。需要試用或跟進修復記錄(如 v0.1.3 對 SIGTERM 在確認框下無效的修正)時,以倉庫 README 爲準。
- 目錄頁:https://www.skillhub.cn/plugins/craig90x/dsh-macos-restart
- GitHub:https://github.com/craig90x/dsh-macos-restart