DSH入门

第 8 章 插件、Bundle 与 Profile:给 DSH 装能力

约 5 分钟 · 2,568 字 · 13 个小节

本章你会学会

  • 分清 Plugin、Bundle、Profile 三个词;
  • 知道一个插件是怎么被“装进去”的;
  • 用 Plugin Manager 安装、启用、停用、卸载;
  • 理解第三方插件的信任边界;
  • 遇到“装了但不生效”时怎么排查。

8.1 三个词,三个层级

先记住一句话:

Plugin 是能力,Bundle 是安装包,Profile 是工作环境。

词 你可以理解成 回答的问题
Plugin 一个可插拔的能力模块 运行的时候执行什么?
Bundle 一个可安装的“补丁包” 哪些配置和代码一起分发?
Profile 一套安装环境 这个环境装了哪些 Bundle?

Plugin

Plugin 是运行时单元。它可以:[1]

  • 注册工具;
  • 注册服务;
  • 注册 Skill;
  • 添加界面;
  • 监听事件;
  • 改变 Agent 的行为。

例如,一个笔记类插件可以注册一组笔记工具、一个 Config 和一个 Skill。

Bundle

Bundle 是一个 npm 包,里面通常有:[2]

  • 一个 cordis.patch.yml(或一组 patch 文件);
  • 要挂载的插件代码;
  • 可能还有 Skill、界面资源、图标。

它的作用是:

  • 把“要加哪些插件、怎么配置”打包;
  • 让用户一条命令安装;
  • 安装后,它的配置行仍然可以被上层覆盖。

一个 Bundle 可以挂载多个 Plugin;一个 Plugin 也可以被不同的 Bundle 引用。

Profile

Profile 是安装环境,通常对应:[3]

  • desktop:桌面应用;
  • web:浏览器;
  • headless:命令行一次性执行。

它里面有:

  • 已安装的 Bundle 列表;
  • 自己的 cordis.patch.yml;
  • 第三方插件依赖。

Profile 决定“这个环境装了什么”,Bundle 决定“装的东西包含什么”,Plugin 决定“实际运行什么”。


8.2 它们和 Preset 的关系

Profile(desktop)
 ├─ Bundle A(dsh-base)
 ├─ Bundle B(dsh-web-app)
 │    └─ 声明 Preset: standard / creator / ...
 └─ Bundle C(你的插件)
      └─ 挂载 Plugin: 你的工具

Preset(standard / creator)
 └─ 给某个 Agent 选择一组 Plugin
  • Bundle 可以声明 Preset;
  • Preset 是“给哪个 Agent 用哪些 Plugin”;
  • Profile 是“这个环境装了哪些 Bundle”;
  • Plugin 是“真正执行的能力”。

8.3 用 Plugin Manager 安装

在 Desktop 里,通常有 Plugin Manager / 插件页面。

基本流程:

  1. 打开插件页面;
  2. 搜索或选择要安装的 Bundle;
  3. 阅读说明、权限、依赖;
  4. 确认安装;
  5. 按提示重启/重载;
  6. 检查工具、Skill、界面是否出现。

安装前要看的

  • 作者/来源是否可信;
  • 它要求什么权限;
  • 是否依赖外部 CLI/服务;
  • 是否会执行安装脚本;
  • 是否和已有插件重名/冲突;
  • 有没有卸载方式。

安装后要检查

  • 插件是否显示“已启用”;
  • 工具列表里有没有新工具;
  • Skill 列表里有没有新 Skill;
  • 有没有报错/警告;
  • 是否需要重启。

8.4 为什么“装了但不生效”

常见原因:

现象 可能原因
插件列表里有,但工具没有 没启用;需要重启/重载;依赖缺失
启动报错 版本不兼容;缺 peer 依赖;配置错误
工具名冲突 和另一个插件用了同一个名字
需要登录/CLI 外部依赖没装/没登录
只在某个模式里有 工具被挂在某个 Preset 里,不是全局
改了代码不生效 服务端插件需要重载;不是热更新

排查顺序

  1. 看 Plugin Manager 的状态和错误;
  2. 看是否需要重启;
  3. 看依赖/版本;
  4. 看是否和已有插件冲突;
  5. 看工具是否只在某个 Preset 中;
  6. 看日志/诊断。

8.5 配置插件

很多插件有配置项,例如:

  • 可执行文件路径;
  • API 地址;
  • 超时;
  • 输出上限。

在 DSH 里,插件通常用 Config schema 声明这些字段,Plugin Manager 会显示成表单。

原则:

  • 优先用界面配置;
  • 不要手动改 profile 的 package.json;
  • 不要手动改 cordis.patch.yml,除非你知道层顺序;
  • 改完要重载/重启;
  • 配置里的密钥要放在安全位置。

8.6 第三方插件的信任边界

这是最重要的一节。

插件不是“配置文件”,它可能执行代码。

安装第三方插件,相当于让别人的代码在你的 DSH 进程里运行。它可能:

  • 读取你的文件;
  • 调用网络;
  • 执行命令;
  • 修改配置;
  • 安装依赖;
  • 运行安装脚本。

所以:

  • 只装可信来源;
  • 看权限和代码;
  • 不要给不必要的 full access;
  • 先在测试工作区试;
  • 出问题能卸载/回滚;
  • 不要把密钥交给不信任的插件。

8.7 卸载与回滚

安装前就要想好怎么卸载:

  • Plugin Manager 里能否停用/移除;
  • 是否会留下配置/数据;
  • 是否会改 profile 的 bundle 列表;
  • 是否需要重启;
  • 有没有版本回退。

重要环境先备份 profile,或至少记录安装前的状态。


马上试试

  1. 打开 Plugin Manager,看看当前装了哪些 Bundle;
  2. 找到“已启用/已停用”的区别;
  3. 不要急着安装新插件,先读一个插件的说明和权限;
  4. 找一个你已经在用的插件,看看它注册了哪些工具/Skill;
  5. 写下:如果它出问题,你怎么停用它?

常见坑

  • 把 Plugin 和 Bundle 混为一谈:一个是能力,一个是安装包。
  • 以为装了 Bundle 就一定启用:还要看选择/重载/依赖。
  • 手动改 profile 配置:容易破坏层顺序。
  • 不看权限就装:插件可以执行代码。
  • 装完不重启:很多插件需要重载才生效。

小结

  • Plugin = 能力,Bundle = 安装包,Profile = 工作环境。
  • Preset 决定“给哪个 Agent 用哪些 Plugin”。
  • 用 Plugin Manager 安装/启用/卸载;不要手改 profile。
  • 第三方插件是代码,不是纯配置;信任和权限第一。
  • 装了不生效,先查状态、重载、依赖、冲突、Preset 范围。

第三部分练习

  1. 用一句话向你朋友解释 Plugin、Bundle、Profile 的区别。
  2. 打开 Plugin Manager,记录当前启用的 Bundle 数量。
  3. 找一个插件,阅读它的权限/依赖,判断你是否愿意安装。
  4. 解释为什么“Preset 不是安全沙箱”。
  5. 写下一个“插件装坏了怎么回滚”的步骤清单。

参考

  1. DeepSeek Harness 插件开发
  2. npm publish 文档
  3. DeepSeek Harness GitHub 仓库

链接均为公开来源;产品行为可能随版本变化。

↑