第 13 章 · Profile、Bundle 与「第五种模式」
本篇目标:不改源码,造出一个属于你的运行时。 这是 DSH 相对其他 Harness 最独特的一层,也是「大师级」的分界。
13.1 插件树:一个运行中的 dsh 到底是什么
官方 docs/architecture.md:
A running
dshis a plugin tree composed at boot from ordered layers.
三个概念:
| 概念 | 定义 |
|---|---|
| Profile | 存在 Harness home 里的具名组合。列出它堆叠的 bundles、持有的 out-of-tree 插件、以及用户自己的 cordis.patch.yml。web / headless / sdk / sdk-minimal / acp 是随附模板 |
| Bundle | Cordis 配置行 + 所挂载代码的分发格式。它插入的每一行仍可被上层 patch |
| Patch | 按 row id 定位,整体替换该行配置或插入新行;preset patch 在 config.plugins 内做同样的事 |
每个包在自己 package.json 的 dsh 字段里声明:dsh.profile 列出 bundles,dsh.bundle 指向 patch 文件。
层叠顺序(后者覆盖前者):
空 entry list
→ profile 的 ordered bundles
→ profile 自带的 cordis.patch.yml
→ Harness home 的 patch
→ --patch overlays
官方 随附 bundles:
| Bundle | 提供 |
|---|---|
dsh-base |
web / headless / sdk / acp 共享的第一层:模型适配器、工具、持久化、沙箱与审批策略、设置、凭据、遥测 |
dsh-web-app |
浏览器应用 |
dsh-headless |
一次性 runner,无 server |
dsh-sdk-app |
SDK JSON-RPC server |
dsh-acp-app |
automation-only ACP server |
dsh-sdk-minimal |
刻意例外:单个 bundle 拥有完整显式 SDK 树,不套 dsh-base |
dsh --profile web --dump-config # 打印本机真实启动的整棵树
原文:"Any row it prints can be replaced by a patch of your own." —— 这就是「配置层自由组合」的全部含义。
13.2 一个最小 patch 的心智模型
官方 patch 以 row id 定位、整行替换或插入。下面是示意结构(字段名以 reference/config-catalog.md 生成目录为准,动手前 dump 核对):
# cordis.patch.yml —— 示意,非可直接运行的完整配置
- id: dsh-tool-web-search
config:
enabled: false # 关掉联网搜索,缩小攻击面与提示词体积
- id: custom-sidebar-plugin
config:
package: "@you/dsh-usage-panel"
inject: ["sessions", "tokenMeter"]
三类常见改法:
| 目的 | 改什么 | 对应章节 |
|---|---|---|
| 砍工具降固定开销 | 禁用若干 tool row | 09 |
| 换模型适配器 | 替换 ctx.llm provider row |
12 |
| 收紧沙箱 / 审批 | 改 sandbox 与 approval 配置行 | 17 |
| 加自研 UI / Tool | 插入新 row | 12 |
| 换持久化后端 | 替换 SessionPersistence provider |
03 |
判据 17:能看懂
--dump-config输出、并能用 patch 精确替换其中任意一行,才算真正「拥有」这个 Harness。只会点设置页的人,仍在 inner harness 里。
13.3 第五种模式:把试验固化为预设
原文 创造模式的进阶路径:
检查运行时 → 加载与测试插件 → 观察服务与依赖 → 调整组合 → 固化为新的预设模式
产出例子:写作模式、数据分析模式。原文 那句「从此你就不只是在用 DSH,你是在用『你的 DSH』」,工程含义是:预设 = 一份可版本化、可分发的 Harness 配置。
一个「写作模式」该长什么样(推断 设计建议,需自行验证):
| 维度 | 取舍 |
|---|---|
| 工具集 | 保留文件读写与检索;关掉 shell、子 Agent、定时任务(降低固定开销与误操作面) |
| 系统提示词 | 换成写作向 section,注入术语表与风格指南 |
| Skills | 按需加载素材库、引用规范、事实核查清单 |
| 审批 | 写文件仍需审批;外部发布动作强制人工 gate |
| 沙箱 | 只读仓库根,写仅允许 drafts/ |
| 观测 | 记录每轮 token 与素材引用来源 |
一个「数据分析模式」则相反:保留 PTC、只读并行、沙箱内 Python,关掉 UI 相关插件。
模式的本质不是「换个提示词」,是换掉整个能力集合与约束集合。 这正是第 05 章「四种模式不是等级」的推广。
13.4 预设的工程纪律
| 纪律 | 理由 |
|---|---|
| 预设进 git,与代码一起 review | Harness 是资产,不是本地偏好 |
| 每个预设固定 DSH 版本 | 官方 developer preview 会有 breaking change |
用 --dump-config 做变更后回归 |
patch 层叠顺序易错,看真实树而非看 YAML |
| 预设至少跑通一个端到端用例 | 配置正确 ≠ 行为正确 |
| 记录「为什么关掉某工具」 | 否则半年后没人敢删,退化成新的固定开销 |
| 关闭 HMR 的场景要明确 | 官方 headless / sdk / acp 默认禁用,sdk-minimal 不含 |
官方 还有一条容易踩的:plugin 是管理命令名,若有同名 profile,必须写 --profile plugin。
13.5 从 DSH 迁移到任意 Harness
把这一章抽象成通用清单,任何框架都适用:
| 能力 | 追问 |
|---|---|
| 组合可描述 | 我的运行时能否用一份配置文件完整表达? |
| 组合可观测 | 能否 dump 出实际生效的树? |
| 组合可覆盖 | 上层配置能否替换任意一行而不改源码? |
| 依赖可声明 | 组件能否声明依赖,由运行时决定启停? |
| 变更可热更 | 改配置是否需要重启?是否有 HMR? |
| 卸载可撤销 | 进程内注册能否自动回收? |
| 版本可锁定 | 配置与运行时版本是否解耦、可分别固定? |
七问全答得上来,你就能在 Claude Code / Codex / LangGraph / 自研运行时里复刻同一套工程方法——具体文件名不同,结构完全同构。这也是本系列不止讲 DSH 的原因。
13.6 本章产出与验收
核心产出:一个自定义预设(如 writing),含 patch 文件、dump-config 前后 diff、一个端到端用例、一份 README 说明每个取舍的理由。
验收点:
- 能画出 profile → bundle → patch → overlay 的层叠顺序并指出覆盖方向
- 能解释
dsh-sdk-minimal为何不套dsh-base - 能用 patch 精确关掉一个工具,并在 dump 输出中验证
- 能说出预设与「换个提示词」的三点以上区别
- 能用 13.5 的七问评估另一个 Harness 框架
延伸阅读
| 来源 | URL | 等级 |
|---|---|---|
| DSH 架构 · Profiles and bundles / Application launch | https://github.com/deepseek-ai/deepseek-harness/blob/master/docs/architecture.md | 官方 |
| 官方文档 · 插件配置生成目录 | https://deepseek-harness.github.io/deepseek-harness/reference/config-catalog | 官方 |
| 官方文档 · 子系统总览 | https://deepseek-harness.github.io/deepseek-harness/reference/subsystems/ | 官方 |
| 官方文档 · 扩展模式 Cookbook | https://deepseek-harness.github.io/deepseek-harness/reference/cookbook/extension-cookbook | 官方 |
| 官方文档 · 组合与热重载(Cordis 教程 06) | https://deepseek-harness.github.io/deepseek-harness/develop/cordis-tutorial/06-composition-and-hmr | 官方 |
| 官网 · 配置层自由组合 | https://www.deepseek.com/harness/zh/ | 官方 |
| 原文(固化第五种模式) | https://mp.weixin.qq.com/s/rsfp0Kie5xlDOKDsE3Fqvw | 原文 |