跳至正文
教程 / Step 6

Profiles 与 Bundles

理解 dsh 启动时如何一层层组合插件树,以及 web 与 headless 的区别。

简要结论

理解 dsh 启动时如何一层层组合插件树,以及 web 与 headless 的区别。

一个正在运行的 dsh 可以看成启动时组合出来的插件树。Profile 负责描述“使用哪些层”,Bundle 负责分发一组配置和代码。

Profile

Profile 是保存在 Harness Home 中的一套命名组合。官方提供的模板包括 webheadless

  • web 添加浏览器应用与交互界面;
  • headless 面向不启动服务器的一次性执行。

Profile 还可以保存外部 Plugin 和用户自己的补丁配置。

Bundle

Bundle 把 Cordis 配置行和对应代码包装在一起。基础 Bundle 会提供模型适配器、工具、持久化、沙箱、审批、设置和凭据等能力;其他 Bundle 再向上叠加 Web 或 Headless 行为。

查看实际启动配置

官方架构文档提供了查看当前配置树的命令:

dsh --profile web --dump-config

开发者预览期命令可能变化,执行前请对照当前版本帮助信息。

为什么顺序重要

Bundle、Profile 补丁、Home 补丁和命令行 Overlay 会按顺序应用。后面的层能够替换或增加配置,因此两个 Plugin 竞争同一能力时,加载位置可能决定最终行为。

修改前先导出当前配置,并把自定义内容放在受版本控制或可备份的位置。不要直接改依赖包内部文件。

建立可回滚的配置实验

把一次配置修改当作实验,而不是直接在主环境堆叠补丁:

  1. 记录当前 dsh 版本、Profile 名称和启动命令。
  2. --dump-config 保存“修改前”的解析结果。
  3. 一次只增加一个 Plugin 或 Overlay。
  4. 再次导出配置并比较差异。
  5. 运行最小健康检查:启动、创建会话、调用一个只读工具、正常退出。
  6. 移除新增层,确认基础 Profile 能恢复。

PENDING 不一定是启动顺序问题

Cordis 配置项可能并发启动,服务依赖由插件的 inject 决定,而不是 YAML 中的肉眼顺序。一个消费方长期保持 PENDING 时,先检查所需服务的 Provider 是否已包含在组合中,再检查配置项路径和包名。

例如工具插件注入 tools,工具服务又要向系统提示贡献 Schema;若组合缺少对应服务提供方,仅仅把插件行上下移动通常不能解决根因。

变更记录模板

目标:
新增配置层:
预期新增的服务/工具:
解析配置差异:
健康检查结果:
回滚步骤:

这个小记录能防止“配置越改越多,但没人知道哪一层真正生效”。进入复杂架构前,先确保每个变化都可观察、可比较、可撤销。

一手来源