dsh-daemon:將 dsh web 註冊爲自啓動、自愈後臺服務

前言

在 DSH 的智能體工作流裏,dsh web 經常是本地開發、測試和 agent 協作的服務入口。手動在前臺啓動 dsh web 有一個明顯問題:終端關閉、進程異常退出、機器睡眠喚醒之後,服務可能不再可用;如果需要在多個會話裏穩定訪問本地 web 服務,就得反覆確認端口、進程和日誌狀態。

dsh-daemon 解決的就是這件事:把 dsh web 註冊爲一個自啓動、自愈的後臺服務。下面介紹它的能力、安裝方式、典型命令,以及部署時需要注意的權限和升級事項。

這是什麼

dsh-daemon 是一個 DSH 插件,用於將 DeepSeek Harness 的網絡服務 dsh web 註冊爲後臺服務。它不是直接替代 dsh web,而是在其外圍生成一個 watchdog 腳本,並按平臺註冊系統級服務來保持 watchdog 運行。

本次資料中可覈實的包信息如下:

  • 倉庫路徑:chenkai2/dsh-daemon
  • npm 包名:@chenkai114/dsh-daemon
  • 版本:0.1.20
  • 許可證:MIT
  • Node 要求:>=18

peerDependencies 要求:

@deepseek-ai/cordis >=3
@deepseek-ai/dsh-tools >=0.1.0-rc.6

它的主要價值在於:安裝後,dsh web 可以按用戶級服務啓動,在異常退出、睡眠喚醒、進程不可用等場景下,由 watchdog 按策略恢復。

核心能力

平臺服務註冊

dsh-daemon 支持不同平臺的服務註冊方式:

  • macOS:LaunchAgent,使用 RunAtLoadKeepAlive
  • Linux:systemd user service;systemd 不可用時回退 cron @reboot
  • Windows:VBS + 計劃任務;資料標註尚未在真實 Windows 機器上驗證

其中,Windows 行爲目前只能按“已實現但未在真實機器驗證”理解,不建議在未驗證環境裏直接當作生產可用能力。

watchdog 自愈

安裝後,插件會生成一個獨立的 watchdog 腳本。該腳本不依賴當前 DSH 會話,運行在用戶級服務管理之下。

已覈實的 watchdog 行爲包括:

  • 每 30 秒進行一次健康檢查
  • 連續 3 次健康檢查失敗後重啓服務
  • 睡眠喚醒後自動重啓服務
  • watchdog 是獨立生成的腳本,不依賴當前會話
  • 維護 $DSH_HOME/daemon/ 下的狀態文件與日誌

默認被檢查的健康地址爲:

http://127.0.0.1:<port>/health

端口解析順序爲:當前監聽的 webServer 端口(通常 3080),其次 DSH_WEB_PORT,再其次工具顯式 port 參數。

工具與 CLI

插件註冊 7 個 dsh_daemon_* 工具,可供 agent 調用:

  • dsh_daemon_install
  • dsh_daemon_uninstall
  • dsh_daemon_reinstall
  • dsh_daemon_status
  • dsh_daemon_start
  • dsh_daemon_stop
  • dsh_daemon_update

同時,安裝過程會生成一個輕量 CLI:dsh-daemon。終端中可使用以下命令:

dsh-daemon status
dsh-daemon restart
dsh-daemon start
dsh-daemon stop
dsh-daemon update
dsh-daemon install
dsh-daemon uninstall
dsh-daemon reinstall
dsh-daemon help

其中,dsh-daemon restartdsh-daemon stop 會中斷所有打開的會話;如果直接拉起失敗,watchdog 會在後續健康週期中重新拉起 web 服務。

自動更新

watchdog 會按配置檢查 npm registry,並嘗試更新同 major 版本。

已覈實的更新策略:

  • 同 major 版本可以自動更新
  • major 版本變更不會自動更新,需要人工執行 dsh_daemon_update
  • 自動更新模式支持 restartdownload

restart 模式下,watchdog 會在下載完成後等待安靜窗口,再重啓 dsh web
download 模式下,新包安裝到 profile 並寫入待生效標記,下次自然重啓 dsh web 時生效。

安裝與啓用

安裝前需要確認 PATH 中已經有 pnpm。如果沒有,可以先啓用:

corepack enable

下面介紹正式安裝步驟。

1、安裝插件到 web profile

使用官方插件安裝命令,把包安裝到 web profile:

dsh plugin --profile web add @chenkai114/dsh-daemon

這一步會把包安裝到 web profile 的依賴目錄中。僅全局安裝不一定能被 loader 解析到,因爲 profile 內依賴是更直接的解析路徑。

2、重啓 dsh web

安裝完成後,重啓 dsh web,讓插件 bundle 生效。

3、讓 agent 運行 dsh_daemon_install

在重啓後的會話中,讓 agent 執行:

dsh_daemon_install

該工具會生成 watchdog 腳本、狀態文件,並按平臺寫入服務註冊,然後啓動 watchdog。

4、檢查安裝狀態

安裝完成後,可以用 agent 工具檢查:

dsh_daemon_status

也可以用 CLI 檢查:

dsh-daemon status

狀態信息包括安裝狀態、端口、本地/最新版本、更新狀態、watchdog PID、服務健康、最近日誌等。

典型用法

安裝後常用 agent 工具

在 agent 會話中,可以使用以下工具:

dsh_daemon_status
dsh_daemon_start
dsh_daemon_stop
dsh_daemon_reinstall
dsh_daemon_update

如果更換端口,使用:

dsh_daemon_reinstall

如果升級到包含新 watchdog 更新邏輯的版本後,也建議運行一次:

dsh_daemon_reinstall

這樣可以按當前配置重新生成 watchdog 腳本。

終端 CLI 用法

終端中可以直接使用:

dsh-daemon status

查看當前 daemon 狀態。

立即重啓 dsh web

dsh-daemon restart

啓動或恢復服務:

dsh-daemon start

停止託管服務:

dsh-daemon stop

檢查或應用更新:

dsh-daemon update

註冊、卸載、重裝類命令:

dsh-daemon install
dsh-daemon uninstall
dsh-daemon reinstall
dsh-daemon help

插件升級

升級時使用:

dsh plugin --profile web update @chenkai114/dsh-daemon

升級後重啓 dsh web

從舊版本升級的注意事項

如果從 v0.1.8 及更早版本升級,之前可能在 ~/.dsh/profiles/web/cordis.patch.yml 中手動添加過類似:

- insert: dsh-daemon

升級後必須刪除這一行,但保留文件裏的其他內容。否則 bundle 層和手動層會插入同一個 loader entry,導致 dsh web 啓動時報:

duplicate loader entry id: dsh-daemon

刪除後重啓 dsh web 即可。

自動更新相關配置

以下環境變量會參與 watchdog 行爲。它們的具體值可以在安裝或重裝時納入生成腳本。

DSH_DAEMON_AUTO_UPDATE
DSH_DAEMON_UPDATE_INTERVAL
DSH_DAEMON_UPDATE_MODE
DSH_DAEMON_QUIET_WINDOW
DSH_DAEMON_DEFER_MAX
DSH_DAEMON_NPM_REGISTRY
DSH_DAEMON_PROFILE
DSH_DAEMON_HEALTH_INTERVAL
DSH_DAEMON_OPEN_BROWSER
DSH_DAEMON_CLI_DIR
DSH_DAEMON_NO_SYSTEM
DSH_DAEMON_TRUSTED_HOST

其中幾個關鍵項:

  • DSH_DAEMON_AUTO_UPDATE:是否啓用自動更新檢查
  • DSH_DAEMON_UPDATE_MODE:自動更新模式,可爲 restartdownload
  • DSH_DAEMON_HEALTH_INTERVAL:watchdog 健康檢查間隔
  • DSH_DAEMON_NPM_REGISTRY:檢查與更新使用的 npm registry
  • DSH_DAEMON_PROFILE:插件所在 profile 目錄

適用場景與注意

這個插件適合需要長期運行 dsh web 的 DSH 使用者,尤其是:

  • 希望在登錄或系統啓動後自動拉起 dsh web
  • 希望進程異常退出後能自動恢復
  • 需要統一查看狀態、日誌、更新狀態
  • 需要在 agent 會話中直接管理 daemon
  • 需要在終端中不打開 GUI 也能控制服務

部署前需要注意以下幾點。

權限

該插件對文件與命令操作會請求 danger-full-access。它會處理用戶級系統服務、$DSH_HOME/daemon/ 下的狀態文件,以及生成 watchdog 腳本。

如果部署環境拒絕提權,相關工具會以沙箱拒絕失敗。因此安裝前應檢查源碼與許可證,並確認該權限範圍符合團隊要求。

會話中斷

restartstop 會中斷所有打開的會話。執行這些操作前,應先確認當前沒有正在進行的重要對話或任務。

Windows 支持狀態

Windows 支持資料中明確標註尚未在真實 Windows 機器上驗證。若你的環境主要在 Windows 上使用,建議先在測試環境中驗證登錄時啓動、計劃任務、VBS 啓動器和日誌行爲。

major 版本更新

major 版本變更不會自動更新。需要人工執行:

dsh_daemon_update

依賴要求

插件要求 Node >=18,並依賴:

@deepseek-ai/cordis >=3
@deepseek-ai/dsh-tools >=0.1.0-rc.6

安裝到 web profile 時,還需要 PATH 中有 pnpm,可通過 corepack enable 啓用。

結尾

dsh-daemon 的價值在於把 dsh web 從“手動前臺服務”變成“用戶級後臺服務”:登錄或系統啓動後可自動拉起,異常退出後可按 watchdog 策略恢復,並提供 agent 工具與終端 CLI 兩套管理入口。

對於需要穩定使用 dsh web 的 DSH 開發者,它可以減少手動啓停、端口檢查、日誌確認和異常恢復的重複操作。

倉庫地址:

https://github.com/chenkai2/dsh-daemon
羽毛球分组比赛记分
小程序二维码

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

小夜