dsh-plugin-doctor:DSH 插件的體檢與管理工具

前言

DSH(DeepSeek Harness)的理念是「一切皆插件」,裝的東西多了,兩個問題會慢慢冒出來。一是不知道哪些插件靠譜:第三方插件的 manifest 是否完整、patch 層有沒有覆蓋不該動的內置行、代碼裏有沒有高危調用,平時很難逐個確認。二是排查困難:插件沒起來、服務缺失時,往往只看到 PENDING 或 FAILED 狀態,不知道該停誰、該保誰。

dsh-plugin-doctor 針對的就是這兩件事:把插件審計做成對話裏的只讀工具,把啓停、安裝、卸載和版本更新收進設置面板。下面介紹它的功能、安裝方式和注意事項。

這是什麼

dsh-plugin-doctor 是一個 DSH 插件管家:審計已安裝插件的規範性與安全隱患,並在設置面板中提供插件管理,覆蓋啓停、安裝、卸載、版本更新。當前版本 0.1.1,許可證 MIT,代碼託管在 GitHub 的 Oo0520/dsh-plugin-doctor 倉庫。

核心功能

Host 工具

插件註冊五個工具,在對話中由 AI 調用:

工具 用途 副作用
plugin_audit 審計 profile 全部 bundle:manifest 契約、patch 層風險、靜態代碼掃描、供應鏈風險 只讀
plugin_list 只讀列出 loader 組合行與 fiber 運行狀態(PENDING 缺失服務 / FAILED 錯誤) 只讀
plugin_toggle 熱啓用/禁用插件:loader 運行時即時生效,同時寫 profile cordis.patch.yml 持久化(HMR 自動應用) 改運行狀態 + patch 文件
plugin_uninstall 卸載插件包(dsh plugin remove 轉發 pnpm),帶 dry-run 確認 刪除依賴,需重啓
plugin_install 安裝插件包(dsh plugin add 轉發 pnpm) 需重啓

設置面板

Web 客戶端裏進入「設置 → 插件體檢」,有插件列表和體檢報告兩個視圖:

  • 插件列表展示運行狀態、版本、中文功能描述和安裝時間,7 天內新裝的插件標「新」徽章
  • 搜索同時匹配插件名、ID 與中文描述
  • 啓停支持運行時熱切換並持久化;禁用前會先探測是否使其他條目變 PENDING(比如停掉某個服務提供方),有則自動回滾並拒絕
  • 裝卸可以直接在面板安裝/卸載社區插件;純客戶端插件(無 dsh.bundle)也能從孤兒 patch 行啓用,重啓後由市場掛載
  • 版本更新會查詢 npm registry 對比本地版本,支持一鍵升級,並能識別 pnpm minimumReleaseAge 導致的更新假象
  • 界面描述跟隨 DSH 語言切換,中文優先顯示中文詞典內容,英文下顯示精簡英文摘要

審計規則

審計規則分錯誤、警告、提示三級,例如:

  • 錯誤(需處理):eval/new Function、讀取 .credentials.yaml、安裝期腳本(preinstall/postinstall)
  • 警告(建議關注):直接使用 child_process、遍歷 process.env、github 依賴未固定 commit
  • 提示:低優先級的風險提示項

體檢範圍 = profile bundles 列表 ∪ 非官方 dependencies,新裝插件立即可掃描;@deepseek-ai/* 官方內置包僅做 manifest 輕檢(trusted),不掃代碼。

卸載可靠性

卸載的成敗以清單是否還引用該包爲準,而不是 pnpm 退出碼。即使 pnpm 中途失敗,也會強制收斂到一致狀態:

  1. 從 package.json 的 dependencies 與 dsh.profile.bundles 移除引用
  2. 清理 cordis.patch.yml 中的殘留 patch 行
  3. 運行時停用其 loader 條目,下次啓動不再組合
  4. 被鎖而刪不掉的殘留目錄單獨提示,可手動刪除

經過上面的步驟,頁面不會因殘留引用出問題,也不影響系統繼續運行。

安裝與啓用

兩種常用安裝方式,按來源二選一:

dsh plugin --profile web add dsh-plugin-doctor          # npm
dsh plugin --profile web add github:Oo0520/dsh-plugin-doctor   # github

也支持本地路徑 / tarball 安裝。倉庫已包含構建產物 lib/,github 安裝無需構建腳本。安裝後需重啓 profile。

三個注意事項:

  1. pnpm 供應鏈冷卻期:pnpm 11 默認 minimumReleaseAge(約 24h)會拒絕當天新發布的包。被攔時可在命令尾部追加 --config.minimum-release-age=0 一次性繞過,不修改持久配置。
  2. link: 安裝形態:本地路徑安裝生成 link: 依賴,源目錄需自帶 node_modules(先 npm install 即可);npm/tarball/github 安裝無此要求。
  3. 配置項:只有一個 profile 配置項,爲目標 profile 名,默認 web;運行時會優先從 ctx.baseUrl 自動推斷當前 profile。

典型用法

  • 啓停插件:在對話中讓 AI 調用 plugin_toggle,運行時即時生效,同時寫入 profile 的 cordis.patch.yml 持久化。首次改寫該文件前會自動備份爲 cordis.patch.yml.bak.plugin-doctor。
  • 卸載插件:plugin_uninstall 默認 dry-run,必須 confirm=true 才真正執行;拒絕卸載 @deepseek-ai/* 官方包與插件自身。
  • 自維護中文描述:在外部詞典 ~/.dsh/.plugin-doctor/descriptions.json 中按 { "包名": "中文描述" } 格式補充描述,優先級高於內置詞典。
  • 二次開發:修改 src/ 後運行 npm run build(build:host 走 tsc,build:client 走 tsdown)並重啓 profile。

適用場景與注意

適合長期使用 DSH、裝了多個社區插件的用戶:定期跑一次審計看新增依賴有沒有風險,用面板集中處理啓停和版本更新,出問題時用 plugin_list 看 PENDING/FAILED 定位。

需要明確的邊界:

  • plugin_toggle 拒絕禁用官方內置行(fs/tools/webserver/loader 等)與 plugin-doctor 自身,避免把自己鎖在門外。
  • 插件以當前 dsh 進程權限運行,安裝任何第三方插件前,建議先檢查其源碼與許可證;本插件的審計能力是輔助排查手段,不等於安全兜底。

結尾

dsh-plugin-doctor 把 DSH 插件的「看不見」變成「可審計、可管理」:裝之前能查風險,裝之後能熱啓停、能升級、能幹淨卸載。插件地址:

  • 社區插件目錄頁:https://www.skillhub.cn/plugins/Oo0520/dsh-plugin-doctor (獨立站點,與 DeepSeek / 幻方無官方從屬關係)
  • GitHub 倉庫:https://github.com/Oo0520/dsh-plugin-doctor
羽毛球分组比赛记分
小程序二维码

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

小夜