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
羽毛球分组比赛记分
小程序二维码

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

小夜