LAYER 02 · 掌握组合语法

Profile、Bundle、Patch 与启动树

同一批插件如何组合成 Web、Headless 或你自己的产品

18 min3 处源码锚点upstream@47f9438
bundle layers → profile patch → home patch → CLI overlay
本章要解决的问题

不 fork 官方仓库,怎样替换模型、沙箱或工具集合?

先建立直觉

Bundle 是可分发的积木盒,Profile 是一套命名方案,Patch 是用户在装配说明上贴的覆盖便签;启动器按固定顺序把它们叠成最终清单。

MECHANISM

机制拆解

dsh-base 提供公共能力,web-app/headless 增加不同表面;profile 的 package.json 通过 dsh.profile 声明 bundle,bundle 通过 dsh.bundle 指向配置。

Patch 按稳定 id 替换整条 config 或插入新条目;--dump-config 是理解真实运行树的权威入口。

第 1 步 / 共 5 步

发现 Profile

从 Harness home 与发行模板解析具名组合。

INVARIANTS

无论怎么扩展,都不能破坏

  • Patch 依赖稳定 config id,而不是数组位置
  • Bundle 仍可被上层 patch
  • 启动失败应回滚尚未发布的组合
FAILURE MODES

最容易踩中的坑

  • ×直接改 dsh-base 以做本地定制
  • ×把 Profile 当作 cwd 或安全沙箱
  • ×只读静态文件而不检查 dump-config
VERIFY IN SOURCE

不要相信结论,去源码里复核

以下链接固定到官方 deepseek-harness@47f9438;查看当前上游时请留意后续 breaking changes。

KNOWLEDGE CHECK

先停十秒,再揭晓答案

Patch 为什么替换整条 config,而不是做任意深合并?

为什么下一章紧接在这里

组合树准备完毕后,下一层从 Agent 的创建、拥有和销毁开始追踪运行主干。

Learn DeepSeek Harness

独立教学项目。解释力来自源码,判断边界以官方仓库为准。