健康的插件系统里,「内置」是来源,不是秘密握手。
1. 动机
中央分支让第一个提供商很容易,却让第五十个提供商变成政治问题:meta.yaml 中声明记录;Context 安装并检查这些记录;类型化入口在需要时解析行为。内置与外部项目共享相同描述符、Registry、解析器、验证、生命周期与契约形态。
2. 区分扩展概念
Extension 是一种 Registry 记录;它不是 Registry 本身。后端、处理器、逻辑类型、策略、查询操作、序列化器与 profile 都是同级记录类型,而不是巨型 Extension 对象上的字段。
3. 理解内置基础与根
Catalog 与 MetaSchema 是固定的工作区基础实体。任何 Extension 都不能替换它们。
Capsule 是必需 Extension 根。Toolkit 与 Prompt 是打包默认根。Agent、Memory 与 Database 是应用主动启用的可选根。每个 Extension 声明精确的 requires 标识符;重新打开工作区会从请求根重新计算硬依赖闭包。
4. 声明可分发模块文件夹
最小外部实体 Extension 可以使用以下布局:source: path 目标相对于模块文件夹。请把导入保留在捕获根内,或使用稳定的绝对公共 API。
5. 安装、检查、解析与启用
install() 把本地可执行文件捕获为经过验证的内容寻址制品,并返回精确回执。inspect() 读取惰性记录数据。enable_extension() 通过工作区的 Context 解析 Extension 及其声明的 Entity 记录,再注册规范类。
只有在你有意移除该安装代时才使用 modules.uninstall(receipt)。卸载模块不会删除应用工作区数据。
6. 挂载工作区绑定 API
Extension 可以通过api 与 api_name 挂载一个领域服务。工厂接收工作区,因此服务会继承正确的 Context、规范 Entity 类与生命周期。
heavenbase.executable 目标发布。启用后,应用代码使用挂载 API,例如 ws.notes.list(),CLI 与 MCP 界面则保持为薄适配器。
程序化 Extension(...).register(resolver=...) 对本地或生成定义仍然有用。发布包应优先使用一个 meta.yaml,让检查、安装回执、兼容性与制品保持显式。
7. 通过注册角色扩展物理行为
高级作者通过hb.ext 与所属包使用后端类型、处理器、策略、逻辑类型、查询操作、Toolkit family、profile、序列化器及相关 Registry 支持角色。
每个开放 family 都遵循同一规则:
- 通过目标 Context 的解析器发布一条规范记录。
- 把实现加载保留在类型化入口后面。
- 声明精确依赖与兼容性。
- 通过安装、检查、解析、使用与卸载测试内置/外部一致性。
8. 检查声明而不过度承诺
explain() 判断执行路线。
9. 使用扩展检查清单
- 给模块、每条记录与每个 Extension 稳定标识符。
- 在内聚模块根保留一个精确
meta.yaml。 - 声明依赖,不要依赖导入顺序。
- 把路径目标保留在捕获的模块根内。
- 当身份或生命周期真实存在时,通过一个工作区 API 挂载领域行为。
- 给 MCP 工具加命名空间,并把 profile 限定到所需的精确工具、实体、Skill 与序列化器。
- 测试全新 Context 恢复、惰性检查、激活、普通使用与精确回执卸载。
- 把已安装可执行源码视为可信代码。
摘要
- 内置模块与外部模块使用同一套
meta.yaml文件夹协议。 - Registry 记录会在导入实现前接受检查。
- 工作区 Extension 通过显式根与依赖附加领域行为。

