Runtime Package 设计
Agent App 的核心不是 APP.md,而是 runtime package。APP.md 让宿主知道“有什么、要什么、从哪里加载”;runtime package 才承载真实 UI、worker、storage schema、workflow 和业务实现。
最小结构
text
app-name/
├── APP.md
├── dist/
│ ├── ui/
│ └── worker/
├── storage/
│ ├── schema.json
│ └── migrations/
├── workflows/
├── agents/
├── artifacts/
└── policies/不是每个 App 都要有全部目录。Catalog-only App 可以只有 APP.md;Product-level App 必须有至少一个可运行入口和真实实现。
UI bundle
UI bundle 用于注册 App 自有页面、面板、设置页和 Artifact viewer。它应该运行在宿主受控容器中,不能直接访问文件系统、网络、数据库或凭证。
UI 只能通过注入的 SDK capability 调用平台能力:
ts
const project = await lime.storage.table('projects').get(projectId)
await lime.ui.openArtifact({ id: project.latestReportArtifactId })Worker / Service
Worker 用于长任务、批处理、后台同步、索引构建和业务 workflow。Worker 不应该自己实现模型网关、文件权限、凭证存储或 Artifact 存储;这些都应通过宿主 capability 完成。
ts
export default defineWorker(async ({ lime, input }) => {
const snippets = await lime.knowledge.search(input.query)
const task = await lime.agent.startTask({ input: { snippets } })
return lime.artifacts.create({ type: 'report', data: task.output })
})Storage schema
App 可以声明自己的 namespace 和 schema,但宿主拥有物理存储实现。
yaml
storage:
namespace: shenlan-content-engineering
schema: ./storage/schema.json
migrations: ./storage/migrations设计规则:
- 表名、索引、migration 都必须限定在 App namespace 下。
- 用户数据和 overlay 不随官方包升级被覆盖。
- Migration 必须和 App version 绑定。
- App 卸载时要区分删除应用、保留数据、导出数据三种策略。
业务 Workflow
Workflow 是业务状态机,不是 prompt。它可以调用 Skills、Tools、Knowledge、Storage、Artifact 和人工确认节点。
text
上传资料
→ 文件解析
→ AI 分层结构化
→ 人工确认
→ 写入知识库版本
→ 生成 Evidence如果 workflow 只能通过聊天描述,说明它还不是 Product-level Agent App。
Runtime package 校验
Host 安装时应检查:
- manifest 引用的路径存在。
- UI / worker / storage / workflow 的 hash 与 package lock 一致。
- capability 版本满足要求。
- migration plan 可执行。
- 所有 executable 入口都有 policy。
- 所有外部网络、文件和 secret 都有 permission 声明。
作者检查清单
APP.md只写声明和使用指南,不塞业务实现。- 真实功能进入
dist/、storage/、workflows/、artifacts/。 - 业务逻辑只通过
@lime/app-sdk调 Lime 能力。 - 不复制 Lime 的文件、任务、Artifact、Knowledge、Tool、Policy 实现。
- 每个 entry 都能追溯到 UI、worker、workflow 或 expert 实现。