dsh-macos-restart:爲 macOS 桌面版 DSH 補原生重啓入口

前言

在 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 則只優雅退出,遠程可能永久卡框)

典型用法

  1. 本地:打開 DSH → 設置 → 通用 → 點擊「重啓 DSH」。
  2. 對話:在會話裏明確要求 agent「重啓 DSH」,由其調用 restart_dsh。
  3. 排障:重啓失敗或卡住時查看 ~/.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
羽毛球分组比赛记分
小程序二维码

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

小夜