一个 dsh plugin 里有什么?DeepSeek Harness 插件的工具、设置、权限与依赖四件套

概念与架构发布于 2026-10-01作者: DeepSeek Plugin 插件市场
DeepSeek HarnessDSH plugin插件结构设置命名空间插件依赖
一个 dsh plugin 由四部分组成:能力(工具与命令)、设置命名空间、权限声明、依赖。本文逐件拆开,并对应到插件卡片、设置页表单、工具列表与 profile 依赖,教你在安装前判断一个插件会不会动你的东西。

一个 dsh plugin 里就四件东西:能力、设置、权限、依赖。 能力是它往对话里加的工具与命令,设置是它在设置页里暴露的配置项,权限是安装期与运行期两条边界,依赖是它带进来的包和它要求的服务。装之前把这四件各看一遍,就知道它会不会动你的东西——这篇不介绍生态,只做解剖。

DSH plugin 的四件套:能力、设置、权限、依赖

四件套对应到插件的代码里各有明确位置:能力在 apply 里注册,设置在 Config schema 里声明,权限分安装期与运行期两条,依赖写在 package.json 并通过 inject 提要求。 逐件拆开:

  1. 能力(工具与命令):插件的加载入口是 apply(ctx),能力全部在这里通过 ctx 注册——模型可调用的工具走 ctx.tools.register(defineTool({...})),配合 parameters 与 output schema 约束输入输出(来源)。注册工具前必须先 export const inject = ['tools'] 声明依赖,否则框架不保证 ctx.tools 已就绪。
  2. 设置命名空间:插件用 Config 类型配同名的 Schemastery schema 声明配置项与默认值;要让配置出现在界面上,Host 半调用 ctx.settings.installSection() 注册命名空间,浏览器半把卡片注册进 settings.plugin.item 槽,两半靠同一个命名空间自动配对(来源)。
  3. 权限声明:分两层——安装期看 allowBuilds,它授权该包的代码在你的机器上于安装时执行且不进沙箱;运行期看工具调用携带的 sandbox_permissions 档位,请求变宽时要走审批(来源)。
  4. 依赖:一层是包自己的 dependencies,一层是它在 profile 里留下的记录。声明了 dsh.bundle 的包会被 dsh plugin add 追加进 profile 的 dsh.profile.bundles,决定它作为哪一层参与启动(来源)。

一句话:能力回答「它能做什么」,设置回答「你能改什么」,权限回答「它被允许做什么」,依赖回答「它带进来什么」。

每一件在界面上落在哪:dsh plugin 卡片、设置页、工具列表与 profile

四件套不是纸上的术语,每一件都能在界面上或目录里找到对应位置——认出这些位置,就等于把插件看穿了。 对照关系如下:

  1. 能力 → 对话里的工具列表。 装完重启后,模型可调用的工具会出现在工具清单里;插件市场卡片上的 features 描述的就是这一件。
  2. 设置命名空间 → 设置页「Plugins」区的表单。 卡片由 schema 渲染,你在表单里改的值与手写进 cordis.patch.yml 的 config: 块是同一层配置。命名空间没注册的插件不会在这区出现卡片,ui-theme、permission 这类键就属于不渲染的情况(来源)。
  3. 权限声明 → 安装提示与审批弹窗。 安装期对应终端里要求放行 allowBuilds 的提示,运行期对应工具调用越权时弹出的确认窗。
  4. 依赖 → profile 目录。 依赖记录写在 $DSH_HOME/profiles/<名字>/package.json 与 node_modules 里,dsh plugin list 输出的就是这个口径。

想一次看全四项,插件市场是最快的入口:在「设置 → 插件市场」即 DSH Plugin Hub 里打开插件卡片,能力、来源、版本、安装命令都在一起。插件目录的默认位置见 DSH 配置文件在哪。

装之前用这四件套读一个 DSH plugin

四件套真正好用的地方是「预览」:面对一个陌生插件,按四条各问一句,答不上来的就先别装。 四问如下:

  1. 能力问「加了几个工具」:工具越多,模型能做的事越多,出错面也越大;只加一两个只读工具的插件明显比加一堆写文件工具的插件稳。
  2. 设置问「有没有开关」:有设置命名空间意味着你能在设置页关掉某部分行为;完全没有设置项的插件,装上去就只能靠卸载来关。
  3. 权限问「要不要放行、会不会求助审批」:装的时候要 allowBuilds 的包必须审过源码再放行;运行期频繁请求更宽 sandbox_permissions 的工具要格外留意。
  4. 依赖问「拉进来多少包」:依赖越多、钉版越死,越容易在 DSH 升级后掉队,也可能和已有插件抢同一个核心包。

四件里只要有一件你答不上来,就先不装——这套判断的完整版见 dsh plugin 的能力与权限边界,概念之间的关系见 装插件前先懂的 5 个概念。

DSH plugin 解剖的注意事项

四件套是核对清单,不是评分表:四件都看清楚之后,再决定装不装。

  1. 四件套是可核对的四个位置,不是四个形容词:能力看工具列表、设置看设置页、权限看安装提示与审批、依赖看 profile 目录。
  2. 没有设置项 ≠ 不能用:只是缺少可调开关,判断重点要回到能力与权限两件。
  3. 工具多不等于强:每个工具都是一条模型可以走错的路,按需装。
  4. allowBuilds 只是安装期边界:放行等于让该包在安装时以你的身份执行代码,与运行期的权限档位是两回事。
  5. 看依赖要看 profile 层:仓库里的 devDependencies 与你无关,dsh plugin list 输出的才是真实生效的那层。
  6. 确认插件真的挂上了用 --dump-config:dsh --profile web --dump-config 里出现 # == <包名> 那一层,才算配置层生效。
  7. 想自己看代码结构:apply 的注册、Config schema、inject 声明、dsh.bundle 标记这四处,就是四件套在代码里的落点,写法参考 dsh plugin 怎么写。
DSH Plugin Hub 插件市场:在插件卡片上核对一个 dsh plugin 的能力、来源、版本与安装命令

来源:DeepSeek Harness 官方文档 - 你的第一个插件、官方文档 - 工具、官方文档 - 插件配置、官方 Cookbook - 添加设置卡片。

常见问题

一个 dsh plugin 里到底包含哪几部分?

**一个 dsh plugin 由四部分组成:能力、设置命名空间、权限声明与依赖。** 能力是它注册的工具与命令,设置是它在设置页里暴露的配置项,权限是安装期与运行期两条边界,依赖是它带进来的包与它要求的服务。读懂了这四件,就能判断它会不会动你的文件和配置。

dsh plugin 的设置项在哪里改?界面和配置文件冲突吗?

**dsh plugin 的设置项由插件自己声明,落在 Web UI 设置页的「Plugins」区。** 插件用 Config schema 声明配置项与默认值、通过 installSection 注册命名空间,浏览器半再把卡片注册到同一命名空间;你手改 cordis.patch.yml 时覆盖要写在 config: 块里,并按整段重写来写,界面与文件改的是同一层。

怎么判断一个 dsh plugin 会不会动我的文件或网络?

**判断一个 dsh plugin 会不会动你的东西,看它的工具与权限声明这两件。** 工具决定了它能读写哪些资源,权限声明决定了它需不需要额外授权:工具调用请求更宽档位时会弹审批,安装期要求 allowBuilds 的包则在那时就以你的身份执行代码,没审过源码不要放行。

dsh plugin 的依赖和它装进 profile 的包是一回事吗?

**不是一回事,dsh plugin 的依赖分两层:包自己的 dependencies,和它在 profile 里留下的依赖记录。** 前者随插件包分发,后者写在 profile 目录的 package.json 与 node_modules 里,dsh plugin list 看到的是后者;声明了 dsh.bundle 的包还会被追加进 dsh.profile.bundles,决定它以哪一层被加载。

相关术语

ctx
ctx 是 DSH plugin 框架传给 apply 的上下文对象,也是插件访问框架能力的唯一入口:注册工具走 ctx.tools,订阅事件走 ctx.on,交出清理函数走 ctx.effect,读取其他服务走 ctx.get。插件不需要 import 框架内部对象。— https://github.com/deepseek-ai/deepseek-harness/blob/master/docs/user/develop/basic/index.md
设置命名空间(settings namespace)
设置命名空间是 DSH plugin 暴露配置项的标识:Host 半用 ctx.settings.installSection() 注册命名空间与 Config schema,浏览器半把卡片注册进 settings.plugin.item 槽,两半靠同一个 key 配对,设置页「Plugins」区据此渲染表单。— https://github.com/deepseek-ai/deepseek-harness/blob/master/docs/cookbook/adding-a-settings-card.md
dsh.bundle
dsh.bundle 是 DSH plugin 在 package.json 里声明的组合包标记。声明了它的包被 dsh plugin add 安装时,dsh 会把包追加进 profile 的 dsh.profile.bundles 清单,决定它作为哪一层参与启动;没声明 dsh.bundle 的包只是普通依赖,不会激活配置层。— https://github.com/deepseek-ai/deepseek-harness/blob/master/apps/cli/README.md
sandbox_permissions
sandbox_permissions 是 DSH plugin 工具调用携带的权限档位参数,用于在工作区写入与完全访问等档位之间请求授权。它只允许朝更宽的方向变化,取值必须配上 justification 说明才能通过校验,越宽越容易触发人工审批。— https://github.com/deepseek-ai/deepseek-harness/blob/master/docs/cookbook/adding-a-settings-card.md

来源