前言¶
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 中途失敗,也會強制收斂到一致狀態:
- 從
package.json的dependencies與dsh.profile.bundles移除引用 - 清理
cordis.patch.yml中的殘留 patch 行 - 運行時停用其 loader 條目,下次啓動不再組合
- 被鎖而刪不掉的殘留目錄單獨提示,可手動刪除
經過上面的步驟,頁面不會因殘留引用出問題,也不影響系統繼續運行。
安裝與啓用¶
兩種常用安裝方式,按來源二選一:
dsh plugin --profile web add dsh-plugin-doctor # npm
dsh plugin --profile web add github:Oo0520/dsh-plugin-doctor # github
也支持本地路徑 / tarball 安裝。倉庫已包含構建產物 lib/,github 安裝無需構建腳本。安裝後需重啓 profile。
三個注意事項:
- pnpm 供應鏈冷卻期:pnpm 11 默認
minimumReleaseAge(約 24h)會拒絕當天新發布的包。被攔時可在命令尾部追加--config.minimum-release-age=0一次性繞過,不修改持久配置。 - link: 安裝形態:本地路徑安裝生成
link:依賴,源目錄需自帶node_modules(先npm install即可);npm/tarball/github 安裝無此要求。 - 配置項:只有一個
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