A4 · Profile 与 Bundle:分层组合与 Patch 覆盖机制
developer preview:API 可能变更。
1. Profile 与 Bundle 是什么
- Profile(配置档):存放在 Harness home 中的具名组装。它列出自己叠加的 bundles、保存树外插件、保留用户的
cordis.patch.yml。web与headless作为模板随发行版交付。 - Bundle(组合包):Cordis 配置行 + 其挂载代码的发布格式。它插入的内容始终可被上层 patch。
- 两者都在各自
package.json通过dsh字段声明:dsh.profile列出 profile 的 bundles,dsh.bundle指向 bundle 的 patch 文件。
// packages/bundle/base/package.json
"dsh": {
"bundle": { "patch": "./cordis.patch.yml" }
}
2. 分层叠加顺序
运行中的 dsh 是一棵按序叠加各层组合出的插件树:
每一层按此顺序应用在空条目列表之上:先按 profile 列出的顺序应用每个 bundle,然后是 profile 的 patch,然后是 home 级 patch,最后是 --patch overlay。一条 patch 按 id 定位某个条目并替换其整个 config,或插入新条目。
3. 三大基础 Bundle
| Bundle | ctx 贡献 | 说明 |
|---|---|---|
dsh-base | 模型适配器、工具、持久化、沙箱、审批、设置、凭据、遥测 | 每个 profile 的第一层 |
dsh-web-app | 浏览器应用 | 增加 Web UI |
dsh-headless | 一次性运行器(无服务器) | headless 形态 |
// packages/boot/app-boot/src/profile.ts
export const PROFILE_TEMPLATES = {
web: ['@deepseek-ai/dsh-base', '@deepseek-ai/dsh-web-app'],
headless: ['@deepseek-ai/dsh-base', '@deepseek-ai/dsh-headless'],
}
4. Patch 机制(insert / replace by id)
composeEntries(layers) 调用 applyEntryPatches,按 id 合并各 layer 的 cordis.patch.yml 补丁条目,用户层最后叠加。
5. 可运行示例:查看与覆盖配置
# 打印本机实际启动的配置树(排查 patch 是否生效的神器)
pnpm dsh --profile web --dump-config
# 自定义覆盖层:插入一个本地插件
# my-overlay.yml
- insert:
- id: hello
name: '/abs/path/to/scratch-plugin/src/my-plugin.ts'
pnpm dsh web --patch ./my-overlay.yml
--dump-config 打印出的任何条目都可被你自己的 patch 替换。
6. 核心术语中英对照
| 中文 | 英文 | 说明 |
|---|---|---|
| 配置档 | Profile | 具名组装 |
| 组合包 | Bundle | 配置行 + 挂载代码 |
| 覆盖层 | Overlay / Patch | 按 id 替换或插入条目 |
| 条目 | Entry | Cordis 配置树中的一个插件行 |
7. 官方文档 vs 源码 对照表
| 主题 | 官方文档 | 精确源码路径 |
|---|---|---|
| Profile 与组合包 | reference/#profile-与组合包 | packages/boot/app-boot/src/profile.ts |
| 启动函数 / dump | reference/#profile-与组合包 | packages/boot/app-boot/src/index.ts(boot / renderConfigDump) |
| CLI 标志 | — | apps/cli/src/args.ts(--profile / --patch / --dump-config) |
| Bundle 声明 | — | packages/bundle/base/package.json |
8. 一句话小结
dsh 用「profile 列 bundles + 逐层 patch 叠加」实现了可预测的组装:你永远可以用 --dump-config 看到真实启动树,再用一条 patch 改写其中任意条目。

424

被折叠的 条评论
为什么被折叠?



