dsh-plugin-ecosystem-guard:DSH 插件生态守护

前言

DeepSeek Harness(DSH)把能力拆成可安装的插件包,条目多了之后,常见问题不再是「装不上」,而是装之前不知道会不会和现有 bundle 冲突、装完之后某条目 fiberPhase=failed 却缺少一份只读体检报告,以及 Agent 想代调另一个插件的工具时缺少统一门禁。手工翻插件管理器、凭包名猜工具归属,既费时间也容易在无人确认时误操作。

下面介绍维护者 youchen-yc 发布的 dsh-plugin-ecosystem-guard(分类 admin-security)。它在安装前做冲突预检、用跨插件权限网关约束代调用,并对自检发现的问题只做经用户确认的修复与维护。README 明确说明:npm 上的 dsh-plugin-guard 是另一项目(客户端崩溃隔离 + npm 自更新),与本插件无代码关系;本项目因此改名为 dsh-plugin-ecosystem-guard。

安全公告(资料原文): 1.0.3 之前的版本存在安全缺陷,请不要使用;请升级到 1.0.3 或更高版本。当前 package.json 版本为 1.0.3。

这是什么

  • 包名: dsh-plugin-ecosystem-guard · bundle id:ecosystem-guard · 客户端模块 id:dsh-plugin-ecosystem-guard
  • 入口: Agent 工具 plugin_guard;设置页「插件生态守护」(设置 → 插件 → 插件生态守护)。设置页与工具共用 Host 操作(lib/actions.js),不是两套逻辑。
  • 许可: MIT · 运行时: Node ≥ 20、DSH ≥ 0.2.1-rc.1,零运行时依赖。

插件定位是「体检 + 安装前预检 + 确认制代调用与维护」,默认只读:除读取本地路径包 package.json 中 engines.dsh 等字段外,不写盘、不 spawn、不 eval、不联网。

四种核心能力

1. 自检 action=scan

只读。基于 ctx.pluginManager.listPlugins()/listBundles() 与 ctx.tools.schemas() 生成体检报告,典型 finding 包括:entry-failed、bundle-error / incompatible、duplicate-module、duplicate-function、self-degraded、config-invalid / integrity。工具归属用包名 token 与工具名匹配的启发式推断,报告里标注 attribution: "heuristic"。

验收:安装后在当前会话调用 plugin_guard 且 action=scan 即可。

2. 安装前冲突预检

两条路径共用 lib/doctor.js#analyzeInstall:

  1. 自动拦截: tools/pre-execute 在 plugin_manager install_bundle 真正执行前 inspect 该 spec;仅有阻断性冲突时返回 ask,冲突清单进审批卡片,用户拒绝则不安装。
  2. 主动预检: plugin_guard action=check-install spec=<包名/路径/git/tarball>,只读、不产生写入。

判定口径(资料摘要):

结论 含义
block 本地路径包 engines.dsh 与当前 DSH 版本明确不兼容
warn 管理器会拒绝 spec、需重启、同包多挂载、描述高度重合、版本范围无法解析等
ok 未发现冲突

插件管理器拒绝 spec(已安装、找不到等)只作提示,不弹审批;engines.dsh 无法解析的范围不阻断,只降级提示。配置项 installPolicy 默认 ask(audit 只记录不拦截,off 不监听)。

3. 跨插件权限:capabilities / invoke

  • action=capabilities:列出各插件标题、模块名、启用状态、fiber 阶段,以及对外工具与服务(可读目录)。
  • action=invoke:代调用指定工具的统一入口——解析归属、检查拦截名单、用户确认卡片,确认后走 ctx.tools.execute(与正常调用相同管线:tools/pre-execute、超时、作用域限制仍生效)。

默认拦截:plugin_guard、plugin_manager、run_code;同一轮不允许嵌套代调用。invokeRequireConfirmation 等在配置里写死为 true,不能关掉。

4. 维护操作(均需用户确认)

action 作用
repair 安全重试:失败条目/bundle 先停用再启用,刷新自身缓存
reset self 恢复本插件默认配置;state 清空内存状态;<entryId> 清空该插件配置覆盖(受保护模块拒绝)
upgrade 对已安装 bundle:inspect → 版本比较 → installBundle,回报 applied / restart-required 等
debug 脱敏诊断,不写盘

不会自动决定保留哪个重复功能插件,不会替用户批准安装脚本或授予版本豁免。

确认是硬约束: 工具侧用 ctx.userQuestions.askTimed(无则 ask);子 agent / 无人可交互调用方直接拒绝(fail closed)。设置页需先点按钮再「确认执行」,Host 要求 confirmed: true。

配置要点

用户可在 patch 层覆盖 cordis.patch.yml 的 config(升级不丢),例如:

字段 默认 说明
installPolicy ask 安装预检拦截策略
invokeBlocklist 见 README 在硬拒绝名单之上追加,不能削减硬名单
invokeTimeoutMs 120000 代调用超时
confirmTimeoutMs 600000 等待确认超时(下限 30s)
locale zh 报告语言 zh / en

正式发行 tarball 含 integrity.json;校验失败时仅本插件停摆并返回 integrity-failed,不关其他插件、不删文件。开发目录 path 安装无清单时按正常模式运行。

安装与启用

三种方式装同一份代码(命令来自 README,经 Agent 工具 plugin_manager 执行):

# 1) 从 npm(推荐)
plugin_manager action=install_bundle target=dsh-plugin-ecosystem-guard

# 2) 本地 tgz
plugin_manager action=install_bundle target=<tgz 绝对路径>

# 3) 从 Git 仓库
plugin_manager action=install_bundle target=git+https://gitee.com/youchen-yc/dsh-plugin-ecosystem-guard.git

npm 包:https://www.npmjs.com/package/dsh-plugin-ecosystem-guard
源码与发行版:https://gitee.com/youchen-yc/dsh-plugin-ecosystem-guard

安装后检查:

  1. 工具 plugin_guard 出现在当前会话;
  2. 设置 → 插件 → 「插件生态守护」有独立页面;
  3. 若 client 半未能加载,Host 工具与自检仍可用。

典型用法示例

体检:

plugin_guard action=scan

安装前先查(不写盘):

plugin_guard action=check-install spec=dsh-plugin-ecosystem-guard

查看其他插件对外能力:

plugin_guard action=capabilities

在用户确认后代调其他插件工具(示例形态,具体 tool 名以 capabilities 为准):

plugin_guard action=invoke tool=<工具名> ...

维护类 repair / reset / upgrade / debug 均会弹出确认卡片,仅在用户确认后执行。

适用场景与注意

适合: 经常增减 DSH 插件、需要安装前可见冲突与 DSH 版本不兼容阻断、希望 Agent 代调第三方插件工具时必须过人工确认、希望定期只读扫描条目失败与 bundle 不兼容的开发者。

务必知晓:

  • 插件以当前 DSH 进程权限运行;安装前请自行查看源码与 MIT 许可证,并遵守 1.0.3+ 安全公告。
  • 它不是插件沙箱,不能阻止其他插件自行行为;不验证包签名;重复功能判定是启发式的。
  • 代调用有硬拒绝正则(如 run_code、write、bash 等),invokeBlocklist 只能加码不能减码。
  • 社区目录 SkillHub 与 DeepSeek / 幻方无官方从属关系;本文事实以项目 README 与 package.json 为准。

结尾

dsh-plugin-ecosystem-guard 把「装前预检、生态体检、代调用门禁、确认制维护」收进一个 admin-security 向的持久插件:默认只读,破坏性路径一律 fail closed。目录页与仓库链接如下,便于核对版本与发行说明。

羽毛球分组比赛记分
小程序二维码

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

小夜