dsh-plugin-healthcheck:裝完插件不重啓,先驗再上線

前言

在 DeepSeek Harness(DSH)裏,dsh plugin add 負責把插件登記進 profile,但裝完並不會自動驗證插件能否正常加載。常見問題要等到下次後端重啓才暴露:缺構建產物導致 loader fibers failed、依賴聲明不當引發 ERR_MODULE_NOT_FOUND、核心包被裝成副本造成模塊雙實例,乃至供應鏈投毒。下面介紹社區插件 dsh-plugin-healthcheck,它把靜態檢查、配置組合校驗、隔離試跑和木馬掃描串成一條鏈路,讓你在重啓後端之前就能發現問題,並提供一鍵修復、自動回滾或預製提示詞等處置手段。

這是什麼

dsh-plugin-healthcheck 是 DSH 的插件健康檢查工具,維護者爲 chenw2759-wq,在 SkillHub 社區目錄中歸類爲 admin-security,當前 GitHub 星標 14、fork 1,許可證爲 MIT(版本 0.1.0)。

它在 Web GUI 設置面板中提供「插件檢測」入口,核心思路是:純靜態檢查 + 配置組合 + 隔離試跑 + 木馬掃描,發現異常後可自動修復、自動回滾,或把複雜問題打包成預製提示詞交給 agent 處理。

它解決什麼問題

DSH 的插件安裝流程只完成登記,不做啓動驗證。README 中列舉了若干真實事故類型及對應攔截方式:

事故 根因 攔截方式
啓動報 ERR_MODULE_NOT_FOUND files 白名單漏掉代碼分割產物 C1 files 完整性
後端啓動報缺 zod / schemastery 插件登記成 link: 依賴,繞過 profile 的 node_modules C2 依賴聲明審計
agent 報 Cannot read properties of undefined (reading 'prepare') file: 依賴裝出 harness 核心包副本,模塊雙實例 C3 高危副本檢測
dsh-skin CLI not found(Windows) 命令不在註冊表 PATH C5 Windows 命令
改了 link:file: 不生效 pnpm 不重解析 lockfile C6 lockfile 一致性
被禁用的插件長期殘留在依賴裏 禁用只壓制症狀 C7 禁用插件識別
供應鏈投毒 / 惡意代碼 發佈包內注入惡意邏輯 C8 木馬掃描
啓動報 loader fibers failed 插件未構建或 cordis 用法錯誤 C9 cordis 用法檢測 + L2 隔離試跑

README 還以 dsh-ssh-workspace 爲例說明:插件 lib/ 未構建、異步 ctx.plugin() 後同步取服務,會在重啓時觸發 cannot get property "fs" without inject。L2 隔離試跑能在子進程完整 boot 中提前復現同類錯誤,而不必等用戶重啓後端。

核心功能

L0 靜態檢查(不加載、不啓動)

在完全不加載插件代碼的前提下,逐項審計:

  1. C1 files 完整性files 白名單與實際 lib 產物對比,缺 chunk 即報錯。
  2. C2 依賴聲明:檢查 link: 是否帶運行時依賴、file: 是否帶 harness peer。
  3. C3 高危副本:檢測 cordis、cosmokit、dsh-tools、schemastery、dsh-credentials、dsh-home-paths 六個核心包是否被裝成真實目錄副本。
  4. C4 依賴可解析:從插件錨點逐個試解析依賴。
  5. C5 Windows 命令execFile/spawn 引用的命令在註冊表 PATH 中是否有對應 .exe
  6. C6 lockfile 一致性:specifier 與 lockfile version: 前綴是否一致。
  7. C7 禁用插件:識別被 disabled 但仍登記的插件。
  8. C9 cordis 用法:靜態檢測三類錯誤——ctx.plugin() 後同步取服務、直接 new 需 config 的 Service 卻缺 config、訪問的服務不在 inject 聲明裏。

L1 配置組合

複用基座 composeEntries 組合 bundle、profile 與 home 補丁層,與真實啓動使用同一算法,檢測補丁語法錯誤、行 id 衝突、補丁跳失。

L2 隔離試跑

這是「不重啓試跑」的核心能力。插件在子進程中完整執行 boot() 加載全樹,webserver 端口偏置爲 0,與運行中後端零衝突;基座 assertEntriesActivated 斷言每個啓用插件都已激活,超時 90 秒捕獲 hang。失敗後可自動回滾——寫 home patch 禁用行,HMR 熱生效,無需重啓。

C8 木馬掃描(純靜態、隔離)

木馬掃描遵守隔離鐵律:只 readFile,絕不 import、require 或執行插件代碼。覆蓋 7 類惡意模式(下載執行、憑據竊取、外聯回傳、混淆後門、持久化、破壞性、環境劫持)。強組合命中(如下載執行、破壞性、憑據+外聯)報 error,單一命中報 warn 提示人工複覈。密鑰、令牌、私鑰在證據中一律脫敏爲 [REDACTED]。掃描跳過 tests、node_modules 和構建產物,對 schemastery 慣用法、數據解碼、迴環 IP 等場景做了誤報控制。

修復與鐵律

修復執行器有一條硬性約束:嚴禁修改 harness 源碼或安裝本體,只允許修改:

  1. 插件代碼(~/.dsh/plugins/**
  2. 配置層(~/.dsh/profiles/**~/.dsh/cordis.patch.yml

所有寫路徑經 assertSafeTarget 門禁校驗,界面彈確認後路由仍要求 confirmed: true。需要判斷力的修復打包成預製提示詞交給 agent,修復執行器自身不跑 LLM。

安裝與啓用

下面三步來自插件 README 的官方安裝說明:

# 1. 克隆到插件目錄
mkdir -p ~/.dsh/plugins
cd ~/.dsh/plugins
git clone https://github.com/chenw2759-wq/dsh-plugin-healthcheck.git

# 2. 裝進 web profile
npx @deepseek-ai/dsh plugin --profile web add "file:$HOME/.dsh/plugins/dsh-plugin-healthcheck"

# 3. 重啓後端,打開左下角設置 → 「插件檢測」

Windows 下 file: 路徑需使用正斜槓絕對路徑,例如 file:C:/Users/<你>/.dsh/plugins/dsh-plugin-healthcheck

典型用法

圖形界面

  1. 打開 Web GUI 左下角設置,在導航中點「插件檢測」;
  2. 選擇作用域(全部插件或指定插件)與檢測層級(L0 / L1 / L2 / 木馬掃描);
  3. 點「開始檢測」;
  4. 結果按 severity 徽標列出,每條含證據與修復動作:一鍵修復(確定性,彈確認)、自動回滾(L2 失敗寫 disabled 行,HMR 熱生效)、複製提示詞(複雜問題交給 agent)。

HTTP 路由

也可直接調用後端路由:

  • /healthcheck/inventory — 插件清單
  • /healthcheck/run — 執行檢測
  • /healthcheck/status — 查詢狀態
  • /healthcheck/repair — 執行修復
  • /healthcheck/rollback — 自動回滾
  • /healthcheck/history — 歷史記錄

適用場景與注意

適合誰: 經常通過 dsh plugin add 安裝社區插件的 DSH 用戶;需要在 CI 化安裝流程中做裝後驗證的團隊;關注 admin-security 類供應鏈風險的維護者。

使用前注意:

  1. 插件以當前 dsh 進程權限運行,L2 隔離試跑會在子進程中完整 boot 全樹,安裝前應自行檢查源碼與 MIT 許可證。
  2. 木馬掃描爲純靜態模式,單一命中僅 warn,需人工複覈;不能替代專業安全審計。
  3. 自動修復和回滾均會修改 ~/.dsh/plugins/** 或配置層,操作前界面會彈確認,但仍建議先備份 profile 與 patch 文件。
  4. SkillHub(https://www.skillhub.cn)是獨立的 DSH 插件社區目錄,與 DeepSeek / 幻方無官方從屬關係。

結語

dsh-plugin-healthcheck 把「裝完即驗」補進了 DSH 插件生命週期:L0 看文件與依賴是否合規,L1 看配置組合是否正確,L2 在隔離子進程裏試跑全樹,C8 做靜態木馬掃描。發現異常後可直接修復、回滾或交給 agent,且修復範圍被鐵律限制在插件與配置層,不會動 harness 本體。

  • 社區目錄頁:https://www.skillhub.cn/plugins/chenw2759-wq/dsh-plugin-healthcheck
  • GitHub 倉庫:https://github.com/chenw2759-wq/dsh-plugin-healthcheck
羽毛球分组比赛记分
小程序二维码

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

小夜