前言¶
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:
- 自动拦截:
tools/pre-execute在plugin_manager install_bundle真正执行前inspect该 spec;仅有阻断性冲突时返回ask,冲突清单进审批卡片,用户拒绝则不安装。 - 主动预检:
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
安装后检查:
- 工具
plugin_guard出现在当前会话; - 设置 → 插件 → 「插件生态守护」有独立页面;
- 若 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。目录页与仓库链接如下,便于核对版本与发行说明。