dsh-plugin-preflight:DSH 插件安裝前的九項預檢閘門

前言

DeepSeek Harness(DSH)採用「一切皆插件」的擴展方式:新能力往往來自社區 bundle,安裝路徑會拉取 npm 包或 GitHub 源並執行依賴解析。宿主本身不會替你逐項審 package 元數據、倉庫活躍度或 install 腳本風險。若你在團隊或生產 profile 裏裝第三方插件,缺少一道「按下安裝到 pnpm 真正執行之間」的檢查,供應鏈問題更容易在裝完才暴露。

下面介紹維護者 NingZhenPeng 發佈的 dsh-plugin-preflight(社區分類 admin-security)。它本身也是 DSH 插件,通過 cordis.patch.yml 掛到加載鏈,在 pluginManager.installBundle 之前插入預檢:判定爲拒絕則中止安裝,並把每次嘗試寫入審計日誌。它不是市場,也不替你決定裝什麼——只在安裝流程里加一道閘門。

這是什麼

dsh-plugin-preflight 是 DeepSeek Harness 的插件安裝預檢閘門。九項規則的閾值全部在倉庫內的 policy.json,判斷邏輯與標準分離;預檢腳本爲 scripts/preflight.mjs。

核心功能

九項內置檢查

預檢只攔「明確拒絕」;警告與需人工項一律放行,由人判斷。

# 檢查 阻斷級
1 GitHub 倉庫存在、未歸檔、90 天內有推送 拒絕
2 無 preinstall / install / postinstall 拒絕
3 未被 deprecated 拒絕
4 直接依賴數 > 8 拒絕、> 1 警告 拒絕 / 警告
5 兼容宿主版本(dsh.compatibility / engines.dsh / peer 範圍) 拒絕 / 警告
6 自更新、熱重載痕跡(腳本 / 依賴 / README) 警告
7 是否要求第三方賬號 需人工
8 npm provenance 簽名 警告
9 裝後釘精確版本 提醒

安裝流程中的位置

安裝請求進入被包裝後的 pluginManager.installBundle 後,會先執行:

node scripts/preflight.mjs <包名> --json
  • 拒絕:拋錯中止,寫審計,並在「安裝詳情」裏附帶結構化報告。
  • 通過:調用原來的安裝方法。
  • 預檢跑不成(斷網、限流、超時):默認按策略處置,見下一節。

預檢跑不完時的策略

默認 攔截,避免「故意卡住網絡」繞過檢查。處置順序:

  1. 30 分鐘內驗過同一包 → 沿用 verdict-cache.json,不重複聯網。
  2. 無緩存且 onUnverified 爲 block(默認)→ 中止安裝,報告說明原因與可選處置。
  3. onUnverified 爲 allow → 放行,審計記 unverified。

面板「高級設置 → 預檢跑不完時」可切換;離線環境建議選放行,否則可能無法安裝任何插件。README 明確這是安全與可用之間的取捨。

運行模式與審計

側欄「插件預檢」面板可熱切換,無需重啓:

  • enforce:預檢拒絕時中止安裝。
  • warn:照常安裝,只寫審計。

默認數據目錄爲 ~/.dsh/plugin-guard/(可通過 dataDir 等配置覆蓋)。典型文件包括:

  • runtime.json:運行期配置
  • audit/plugin-guard.jsonl:每次安裝嘗試一行
  • audit/last-block.md / last-block.json:最近一次攔截說明

自定義規則

可在 runtime.json 的 customRules 或面板「高級設置 → 自定義規則」中追加檢查。每條規則含 title、when(條件表達式)、status(warn / reject / manual)、detail。條件可使用 repo.stars、depsCount、deprecated、deps contains "axios" 等字段;與內置規則疊加,內置拒絕不會被自定義「通過」覆蓋。

安裝與啓用

本插件面向 DSH 桌面端與 Web 端。插件以當前 DSH 進程權限運行;安裝前應自行覈對源碼與許可證。

桌面端:DeepSeek Harness 插件頁 →「添加插件」→ 填寫 dsh-plugin-preflight(已發佈 npm 時)或本目錄絕對路徑 → 重啓。

未發佈 npm 時,從 GitHub 安裝(資料原文命令):

dsh plugin --profile desktop add github:NingZhenPeng/dsh-plugin-preflight

純 web profile 命令行:

dsh plugin --profile web add dsh-plugin-preflight

典型用法

運行期只記錄、不攔截

適合先觀察一段時間再收緊。改 runtime.json 或面板切換:

{ "mode": "warn" }

離線或不穩定網絡

將「預檢跑不完時」設爲放行(onUnverified: allow),避免默認 block 導致無法裝包;審計仍會記 unverified。

自定義冷門倉庫警告

{
  "id": "custom-abc123",
  "title": "冷門倉庫",
  "when": "repo.stars < 50 && repo.idleDays > 90",
  "status": "warn",
  "detail": "{repo.slug} 只有 {repo.stars} star,且已 {repo.idleDays} 天沒更新"
}

命中後報告會追加警告行,但不阻斷安裝(除非你將 status 設爲 reject)。

本地自測(開發者)

倉庫提供不聯網自測(不進 npm 包):

node scripts/selftest.mjs

適用場景與注意

適合:需要在 DSH 裏統一約束「插件頁 / 市場走 installBundle 的安裝路徑」、希望有審計與結構化攔截報告的團隊或個人。

務必知曉的限制(來自 README「已知限制」):

  • 依賴宿主內部 API(如 pluginManager.installBundle、側欄槽位);宿主大版本升級後可能界面降級,閘門仍可能攔截但提示不全。
  • 只覆蓋 pluginManager.installBundle;CLI dsh plugin add、手改 package.json 後 pnpm install 可繞過。
  • 第 6、7 條爲啓發式,有誤報與漏報。
  • HTTP 層准入防遠程濫用;本機進程可直接改 runtime.json。
  • Windows 爲 README 記載的實測平臺;macOS / Linux 未實測但已避免寫死平臺假設。

社區目錄 SkillHub 爲獨立站點,與 DeepSeek / 幻方無官方從屬關係。

結尾

dsh-plugin-preflight 在 DSH 安裝插件與 pnpm 執行之間插入九項可配置預檢,拒絕即攔截並留審計,警告與人工項交給人判斷。若你主要走圖形化插件安裝且希望供應鏈上有默認閘門,可先裝此插件,再按網絡環境調整 onUnverified 與 mode。

  • 目錄頁:https://www.skillhub.cn/plugins/NingZhenPeng/dsh-plugin-preflight
  • GitHub:https://github.com/NingZhenPeng/dsh-plugin-preflight
羽毛球分组比赛记分
小程序二维码

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

小夜