返回 DSH Guides

DeepSeek Harness 架构指南

DSH Plugin、Bundle 与 Profile 是什么关系?

理解 DeepSeek Harness 如何组合插件:Plugin 负责什么行为,Bundle 如何分发配置,Profile 启动什么组合,以及这些 Patch Layer 最终怎样构成真实运行的 Plugin Tree。

DeepSeek HarnessDSH PluginsDeveloper Preview

Plugin = 行为

通过 Context 注册 Tool、Service、Event、Provider、UI、Policy、Storage 等能力。

Bundle = 分发层

通过 dsh.bundle 指向 Patch,把一组 Cordis 配置行作为 Package 分发。

Profile = 启动组合

声明 Bundle 顺序和本地 Plugin Dependencies,形成一个独立 Harness Runtime。

01

“Everything Is a Plugin” 为什么重要

DeepSeek Harness 不是固定应用 Core 外面再加插件。Model Adapter、Tool Registry、Session Log、Agent Loop、Runtime Service、Web App、Policy 等都通过同一套 Cordis Plugin Composition 挂载。

因此扩展 Harness 通常是把新的 Plugin 加到 Tree 里,或者替换已有 Provider,而不是修改一个无法替换的核心。插件拥有的注册行为会随生命周期卸载。

02

什么是 DSH Plugin

在 Framework 层,Plugin 是获得 Cordis Context 并注册行为的代码。常见 Function Form 会导出 apply(ctx),需要依赖其他 Service 时通过 inject 声明。

Plugin 不等于“模型 Tool”。它也可以是 LLM Adapter、Filesystem Provider、Shell Backend、Background Job、Approval Policy、UI Renderer、Command 或其他 Extension Point。

Consumer

消费 Context 上已经存在的能力。

Provider

实现其他 Plugin 可以消费的 Service。

Observer / Policy

监听生命周期或能力事件,控制、观察或改写执行。

03

什么是 DSH Bundle

Bundle 是 Cordis 配置行及其挂载代码的分发形式。Package Manifest 通过 dsh.bundle 声明自己,并指向贡献这个 Bundle Layer 的 Patch 文件。

Bundle 的关键不是把配置封死,而是让它继续可组合:Bundle 插入的 Row 仍然可以被更高层的 Profile/User Patch 修改。

Bundle Metadata
{
  "dsh": {
    "bundle": {
      "patch": "./cordis.patch.yml"
    }
  }
}
04

什么是 DSH Profile

Profile 是保存在 Harness Home 下的命名组合。它声明要按顺序堆叠哪些 Bundle,同时保存这个 Profile 安装的外部 Plugin Dependencies 和自己的 cordis.patch.yml。

官方 Web 与 Headless Profile 会按模板自动初始化;TUI 或特定工作流可以有独立 Profile,因此它们不必跟 Web 使用同一套扩展。

Profile Metadata 结构
{
  "dsh": {
    "profile": {
      "bundles": [
        "@deepseek-ai/dsh-base",
        "@deepseek-ai/dsh-web-app"
      ]
    }
  }
}
05

启动时这些 Layer 按什么顺序合成

Harness 从空 Entry List 开始组合。先按 dsh.profile.bundles 的顺序应用 Bundle Patch,再应用 Profile 自己的 Patch、Harness Home 的 Patch,最后才是命令行 --patch Overlay。

1. Bundle Layers

按 dsh.profile.bundles 声明顺序依次应用。

2. Profile Patch

当前 Profile 的 cordis.patch.yml。

3. Home Patch

$DSH_HOME/cordis.patch.yml 的机器级覆盖。

4. CLI Overlay

本次启动额外传入的 --patch,位于最上层。

更高层可以替换已有 Row 的配置,也可以插入新 Row,因此 Bundle 提供的默认行为仍然可以定制。

06

Web、Headless 与自定义 Profile 的差异

dsh-base 提供多个 Profile 共用的基础 Harness 能力,例如模型适配、Tool、Persistence、Sandbox、Approval Policy、Settings、Credentials 和 Telemetry。不同 Profile 再堆叠各自需要的 Surface Bundle。

Web

在 Base 之上加入 Web App Bundle,形成浏览器界面和对应 Client/Runtime Plugins。

Headless

在 Base 之上加入 Headless Runner,执行一次任务并退出,不需要 Web Server。

自定义 / 社区 Profile

可以组合其他 Bundle,并为 TUI 或特定工作流安装不同的外部插件。

07

如何查看自己机器真正启动的 Plugin Tree

当插件行为与预期不同,不要只盯着 package.json 推断。直接 Dump 最终 Composition,可以看到选中 Profile 和所有 Patch Layer 应用后的真实配置。

  • 确认目标 Plugin Row 是否存在,并判断它来自哪个 Layer。
  • 检查更高层 Patch 是否替换了 Bundle 中的配置。
  • 比较不同 Profile,不要假设一次安装会影响所有 DSH Surface。
查看 Web Profile 最终配置
dsh --profile web --dump-config
只查看默认 Bundle Layer
dsh --profile web --dump-default-config

一手资料

本文以 DeepSeek AI 官方 Harness 仓库与当前开发文档为主要依据;由于 Harness 仍处于 Developer Preview,具体命令与契约以后续官方版本为准。