LPK Resource Export 规范
本文定义 LPK 中静态资源的导出与导入机制。
说明:
- 本文只定义静态资源的发现、聚合与运行时投影。
- 本文不定义应用间访问、鉴权、授权、网络路由或资源内容本身的业务语义。
- 本机制要求
lzcos >= v1.5.2。 - LZCOS 在该机制中只感知
kind、resource id与payload,不感知具体资源类型的业务字段。
1. 基本概念
1.1 Resource Export
LPK 可以导出静态资源,供系统发现、聚合,并在运行时投影给其他 LPK 消费。
每个导出资源由以下三部分组成:
kind- 资源类型。
resource id- 当前 LPK 内该资源的稳定标识。
payload- 资源目录本身的全部文件内容。
1.2 Resource Import
LPK 可以在 package.yml 中声明希望导入的资源类型。
系统根据导入声明,将对应类型的已安装资源投影到当前 LPK 的运行时目录中。
2. LPK 内导出目录
LPK 内所有可导出资源统一放在 exports/ 下:
text
.
├── package.yml
└── exports/
└── <kind>/
└── <resource-id>/
└── ...示例:
text
exports/skills/todo-assistant/SKILL.md
exports/mcp-providers/default/mcp.yml
exports/browser-extensions/ublock-origin/manifest.json规则:
exports/是唯一的资源导出根目录。exports/<kind>/<resource-id>/整个目录就是该资源的payload。- 系统只感知
kind、resource-id与payload。 - 系统不解析
payload的业务内容。 - 同一个 LPK 内,
(kind, resource-id)必须唯一。 - 资源的全局唯一身份是
(package-id, kind, resource-id)。
3. kind
kind 用于标识资源类型。
规则:
- 不能为空。
- 不能以
.开头。 - 只能使用小写字母、数字、点号、下划线和中划线。
示例:
text
skills
mcp-providers
browser-extensions4. resource-id
resource-id 是某个 kind 下的资源标识。
规则:
- 不能为空。
- 不能以
.开头。 - 只能使用小写字母、数字、点号、下划线和中划线。
5. import_resources
LPK 通过 package.yml 的 import_resources 字段声明需要导入的资源类型。
结构如下:
yml
import_resources:
- kind: skills
- kind: mcp-providers规则:
import_resources是可选字段。import_resources是一个列表。- 当前每个元素只定义一个字段:
kind。 - 同一个
kind只能声明一次。 - 系统只投影已声明的
kind。
说明:
import_resources只表达“需要哪类资源”。- 当前版本不定义过滤条件、投影格式或自定义路径。
- 后续如需扩展,应在列表项中新增字段,不破坏现有结构。
6. 系统聚合
系统对已安装 LPK 的资源执行统一发现与聚合。
规则:
- 系统扫描每个已安装 LPK 的
exports/<kind>/<resource-id>/。 - 系统按
(package-id, kind, resource-id)建立聚合视图。 - 系统在安装、卸载、升级后刷新聚合结果。
- 系统不要求不同
kind共享统一索引文件。 - 系统不保证为每个
kind提供额外的 catalog 文件。
7. 运行时投影
当某个 LPK 声明导入某个 kind 时,系统将该 kind 的聚合结果只读投影到运行时:
text
/lzcapp/run/resources/.digest/<kind>/summary
/lzcapp/run/resources/.digest/<kind>/<package-id>/<resource-id>/digest
/lzcapp/run/resources/<kind>/<package-id>/<resource-id>/...示例:
text
/lzcapp/run/resources/.digest/skills/summary
/lzcapp/run/resources/.digest/skills/cloud.lazycat.app.todo/todo-assistant/digest
/lzcapp/run/resources/skills/cloud.lazycat.app.todo/todo-assistant/SKILL.md
/lzcapp/run/resources/.digest/mcp-providers/summary
/lzcapp/run/resources/.digest/mcp-providers/cloud.lazycat.app.todo/default/digest
/lzcapp/run/resources/mcp-providers/cloud.lazycat.app.todo/default/mcp.yml
/lzcapp/run/resources/.digest/browser-extensions/summary
/lzcapp/run/resources/.digest/browser-extensions/cloud.lazycat.browser.adblock/ublock-origin/digest
/lzcapp/run/resources/browser-extensions/cloud.lazycat.browser.adblock/ublock-origin/manifest.json规则:
- 运行时资源根目录固定为
/lzcapp/run/resources/。 - 每个
kind独立投影到/lzcapp/run/resources/<kind>/。 - digest 元数据统一放在
/lzcapp/run/resources/.digest/<kind>/。 /lzcapp/run/resources/<kind>/下不包含.digest/目录。.digest/<kind>/summary表示当前kind聚合结果的整体 digest。.digest/<kind>/<package-id>/<resource-id>/digest表示对应资源payload的 digest。- 当该
kind的聚合结果发生变化时,系统更新.digest/<kind>/summary与相关资源的单项 digest。 - 消费方可以通过读取
.digest/<kind>/summary快速判断是否需要进一步检查该kind的资源变化。 - 当
.digest/<kind>/summary变化后,消费方可以读取.digest/<kind>/<package-id>/<resource-id>/digest判断具体哪些资源发生了变化。 - 运行时目录结构固定为
<package-id>/<resource-id>/...。 - 投影结果是只读目录。
- 系统不修改
payload内容。 - 消费方自行解释资源内容。
8. 适用范围
本机制适用于以下类型的静态资源:
skillsmcp-providersbrowser-extensions
说明:
- 上述
kind仅作为示例,不构成完整列表。 - 后续新增资源类型时,优先复用本机制。