dsh-plugin-dynamic-assembler:用自然语言按需组装 DSH 插件,并带安全门禁

前言

DeepSeek Harness(dsh)把能力拆成插件,由 Cordis 在运行时加载。实际做智能体时,需求往往是「这次要联网搜、下次要写 Markdown、再下次要多一步 MCP」——若每次都在 profile 里手工增删插件,列表会越堆越长,和当前任务也对不齐。

更自然的方向是让 Agent 根据任务说明,在运行时从已注册插件里挑能力、按需加载。难点在于:第三方插件和官方包混用时,谁被加载、是否经过审查,不能靠模型静默决定。下面介绍社区插件 dsh-plugin-dynamic-assembler(维护者 QLM1234,目录分类 admin-security),它用自然语言驱动「发现 → 计划 → 确认 → 加载」,并对非官方插件做静态审计与用户确认。

这是什么

dsh-plugin-dynamic-assembler 是面向 dsh 的「动态组装」插件:Agent 用 plain language 描述要构建的能力,插件在运行时遍历 ctx.registry 发现可用插件,生成组装计划,经你确认后通过 Cordis 加载;非 @deepseek-ai/* 的插件在加载前会走内置静态安全审计。npm 包名与仓库一致,GitHub 为 QLM1234/dsh-plugin-dynamic-assembler。

核心功能

运行时发现与官方优先

可用插件从 ctx.registry 读取,不维护硬编码列表。匹配能力时优先 @deepseek-ai/*;仅当没有官方插件匹配时,才考虑第三方(且需在计划里显式列出)。

用户确认与 unofficial 策略

涉及第三方插件时不会默认静默加载。配置项 unofficialPolicy 可选 ask(默认)、allow、deny。执行加载时,非官方插件通常需要 allow_unofficial;涉及网络、文件系统、shell、subagent、MCP、代码、凭证等敏感操作时,需要 confirm_sensitive 等显式确认。

静态安全审计

工具 assemble_inspect 对插件包做静态扫描:元数据(scope、license、repository、install/postinstall 脚本、peer 依赖等)与源码中的危险模式(如 eval、child_process、硬编码密钥等)。评分从 100 起扣,划分为 green(≥80)、yellow(≥60)、red(<60);red 默认拒绝加载,仅在高风险场景下可通过 force 覆盖。README 明确说明:静态审计是风险信号,不是安全保证;插件以 Node 进程权限运行,恶意代码可能绕过正则扫描。

工具一览

除上述审计外,插件还提供(README 列出的 8 个工具):

工具 作用概要
assemble_discover 发现当前环境中可用插件与能力
assemble_plan 根据自然语言需求生成计划(不加载)
assemble_execute 按计划经 Cordis 加载并启动
assemble_unload 卸载本插件动态加载的全部内容(回滚)
assemble_freeze 冻结当前组装状态(见仓库文档)
assemble_auto 自动化组装流程(见仓库文档)
assemble_compare 同类插件对比(含审计列等,版本演进见 CHANGELOG)

意图到能力的映射在源码 CAPABILITY_RULES(src/dynamic-assembler.ts)中,支持中英文关键词;未加载的官方插件可按约定名 @deepseek-ai/dsh-<name> 动态导入。

卸载与生命周期

插件卸载时会级联 dispose 其动态加载的内容,便于与 Cordis 的时间可组合性对齐。

安装与启用

推荐从 npm 安装,dsh 会自动发现,无需本地路径:

npm i dsh-plugin-dynamic-assembler

若由 dsh profile 管理,可使用:

pnpm dsh plugin --profile web add dsh-plugin-dynamic-assembler

安装后需重启 Web 服务,例如:

pnpm dsh web

运行环境要求 Node.js >= 22(见 package.json engines)。许可证为 MIT。

可选配置

在 profile 的 cordis.patch.yml 中新增条目时需包在 - insert: 下:

- insert:
    - id: dynamic-assembler
      name: dsh-plugin-dynamic-assembler
      config:
        denyList: []                  # 永不组装的 capability 名称子串
        unofficialPolicy: ask         # ask | allow | deny
        pluginSources: []             # 尚未加载的第三方:npm 包名或本地目录

尚未加载的第三方可通过 pluginSources 声明,例如 npm 包名或 /path/to/local-plugin。已在 Cordis 中加载的插件(官方或第三方)会自动被发现,无需额外配置。

典型用法

README 中的对话示例:用户希望「能搜网页并把结果写成 Markdown 文档」。

  1. 模型调用 assemble_plan,传入 requirement(自然语言需求)。插件在运行时发现已加载插件,按官方优先匹配能力,返回计划与推荐顺序,此时尚未加载任何新插件。

  2. 用户确认后,模型调用 assemble_execute,例如传入计划中的插件名,并设置 confirm: true、confirm_sensitive: true、allow_unofficial: false(若计划不含第三方则保持 false)。已加载的插件被激活;未加载的官方插件按约定动态 import。

  3. 需要回滚时调用 assemble_unload(),清理由本插件动态加载的部分。

单独审计某个包时,可使用 assemble_inspect,参数 plugin;对仅发布在 GitHub Releases、不在 npm 的社区包,可传可选参数 github_repo(owner/repo)做 release 制品审计(v0.3.6+ 能力,见 README)。

适用场景与注意

适合谁: 已在用 dsh、希望 Agent 按任务临时组合工具链、又希望第三方插件必须经过审计与确认的开发者或团队。与 DeepSeek 论文方向中的「时空可组合、自演化 harness」验证场景一致,但实现与维护在社区仓库,不属于 DeepSeek 官方应用商店;插件目录见 SkillHub 条目。

务必注意:

  • 插件与所加载的任意 dsh 插件共享当前 dsh 进程的 Node 权限;安装前请自行查看源码、许可证与发布来源。
  • 静态审计不能替代信任边界;只安装你信任的来源,对第三方保持警惕。
  • denyList 可用于禁止组装某些 capability 名称子串,降低误装风险。

本地开发与回归测试(维护者流程):

npm install
npm test

审计引擎位于 src/inspect.ts,与 Cordis 解耦,便于单测。

结尾

dsh-plugin-dynamic-assembler 把「用自然语言说明要什么能力 → 运行时发现与计划 → 确认后加载 → 可随时 unload」做成一条可操作流程,并把 admin-security 类需求落在 unofficial 策略与 assemble_inspect 评分上。若你要在 dsh 里做按需 toolchain 而非静态堆插件,可从 npm 安装并在 profile 中按需配置 unofficialPolicy 与 pluginSources。

  • 目录页:https://www.skillhub.cn/plugins/QLM1234/dsh-plugin-dynamic-assembler
  • GitHub:https://github.com/QLM1234/dsh-plugin-dynamic-assembler
羽毛球分组比赛记分
小程序二维码

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

Xiaoye