LAYER 02 · 掌握组合语法
Profile、Bundle、Patch 与启动树
同一批插件如何组合成 Web、Headless 或你自己的产品
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 的创建、拥有和销毁开始追踪运行主干。