docs: align agent app roadmap with v0.3

This commit is contained in:
coso
2026-05-15 09:54:30 +08:00
parent af6133164f
commit 446c7b0c1f
10 changed files with 792 additions and 143 deletions
+24 -14
View File
@@ -25,11 +25,16 @@ Agent App Runtime Package
| 分类 | 对象 | 说明 |
|---|---|---|
| current | `/Users/coso/Documents/dev/ai/limecloud/agentapp` | Agent App v0.2 标准、runtime package、schema、参考 CLI 与示例包。 |
| current | `/Users/coso/Documents/dev/ai/limecloud/agentapp` | Agent App v0.3 标准、runtime package、schema、参考 CLI 与示例包。 |
| current | `docs/roadmap/agentapp/capability-sdk.md` | Lime Desktop 侧 Capability SDK 与 Host Bridge 方案。 |
| current | `docs/roadmap/agentapp/implementation-plan.md` | 客户端落地实施方案,覆盖 P0-P4。 |
| current | `docs/roadmap/agentapp/p0-technical-design.md` | P0 只读 App Host 技术设计,覆盖 manifest、projection、readiness、cleanup dry-run。 |
| current | `docs/roadmap/agentapp/ai-content-engineering.md` | AI 内容工程化 App 作为客户端标杆案例的 UI / storage / workflow / artifact 方案。 |
| current | `docs/roadmap/agentapp/p1-mock-capability-host.md` | P1 Mock Capability Host 技术设计,覆盖 SDK facade、mock artifact/evidence、uninstall delete-data。 |
| current | `docs/roadmap/agentapp/p2-adapter-capability-host.md` | P2 Adapter Capability Host 技术设计,覆盖本地 adapter store、knowledge / agent adapter、provenance 查询、delete-data 清理。 |
| current | `docs/roadmap/agentapp/p3-ui-extension-host.md` | P3 UI Extension Host 技术设计,覆盖受控 UI Host、sandbox、injected SDK bridge、Lab 预览。 |
| current | `docs/roadmap/agentapp/p4-content-factory-demo.md` | P4 APP 内容工厂最小闭环,覆盖项目、知识、内容场景、内容资产、Artifact、Evidence、cleanup。 |
| current | `docs/roadmap/agentapp/p4-workflow-runtime.md` | P4.2 受控 Workflow Runtime,覆盖白名单 DSL、runtime policy、trace、cancel 和内容工厂 demo 迁移。 |
| current | `docs/roadmap/agentapp/content-factory-app.md` | APP 内容工厂作为客户端标杆案例的 UI / storage / workflow / artifact 方案。 |
| reference | `/Users/coso/Documents/dev/ai/limecloud/limecore/docs/roadmap/agentapp` | 服务端 catalog、release、tenant enablement、gateway、ToolHub 路线图。 |
## 文档索引
@@ -39,7 +44,12 @@ Agent App Runtime Package
| [capability-sdk.md](./capability-sdk.md) | 客户端 Capability SDK、runtime bridge、能力注入、权限拦截和 mock host。 |
| [implementation-plan.md](./implementation-plan.md) | 客户端 App Host 落地实施方案:manifest parser、projection、installer、storage、UI host、worker runtime。 |
| [p0-technical-design.md](./p0-technical-design.md) | P0 技术设计:只读 package、manifest normalize、projection、readiness、cleanup dry-run、Lab 展示。 |
| [ai-content-engineering.md](./ai-content-engineering.md) | AI 内容工程化 Product-level Agent App 的客户端产品与实现方案。 |
| [p1-mock-capability-host.md](./p1-mock-capability-host.md) | P1 技术设计:SDK facade、MockCapabilityHost、mock artifact/evidence、uninstall delete-data。 |
| [p2-adapter-capability-host.md](./p2-adapter-capability-host.md) | P2 技术设计:AdapterCapabilityHost、本地 adapter store、knowledge / agent adapter、provenance 查询、delete-data 清理。 |
| [p3-ui-extension-host.md](./p3-ui-extension-host.md) | P3 技术设计:受控 UI Host、sandbox policy、injected SDK bridge、Lab 预览。 |
| [p4-content-factory-demo.md](./p4-content-factory-demo.md) | P4 技术设计:内容工厂最小闭环、content table Artifact、Evidence、delete-data 清理。 |
| [p4-workflow-runtime.md](./p4-workflow-runtime.md) | P4.2 技术设计:受控 workflow runtime、白名单 DSL、trace、cancel、policy guard。 |
| [content-factory-app.md](./content-factory-app.md) | APP 内容工厂 Product-level Agent App 的客户端产品与实现方案。 |
## 客户端边界
@@ -55,7 +65,7 @@ Agent App Runtime Package
```mermaid
flowchart TD
Standard[Agent App v0.2 Standard] --> Parser[Manifest Parser]
Standard[Agent App v0.3 Standard] --> Parser[Manifest Parser]
Parser --> Projection[Client Projection]
Projection --> Installer[Local Installer]
Installer --> SDK[Capability SDK]
@@ -64,21 +74,21 @@ flowchart TD
SDK --> Worker[Worker / Workflow Runtime]
SDK --> Agent[Local Agent Runtime Bridge]
SDK --> Artifact[Artifact + Evidence]
Artifact --> App[AI 内容工程化 App P0]
Artifact --> App[APP 内容工厂 P0]
```
## 当前执行顺序
先按 P0 技术设计落最小只读闭环:
当前已推进到 P4.1 内容工厂最小闭环:
```text
feature flags
→ manifest model / normalizer
→ projection model
→ readiness result
→ cleanup dry-run
→ Lab readonly UI
→ Mock SDK host
P0 manifest / projection / readiness / cleanup dry-run
→ P1 Mock Capability Host
→ P2 Adapter Capability Host
→ P3.1 UI Extension Host mount contract
→ P4.1 APP 内容工厂业务闭环
→ P4.2 受控 Workflow Runtime
→ P5 Cloud Bootstrap
```
不要先做市场页、Cloud、完整深澜内容系统,也不要先把 entry 接入正式主路径。
不要先做市场页、Cloud、完整行业内容系统,也不要先把 entry 接入正式主路径;P5 前仍保持 Lab 实验岛。
+8 -8
View File
@@ -1,6 +1,6 @@
# Agent App 客户端 Capability SDK 方案
更新时间:2026-05-14
更新时间:2026-05-15
## 一句话目标
@@ -127,11 +127,11 @@ app-package/
```yaml
requires:
lime:
appRuntime: ">=0.2.0 <1.0.0"
appRuntime: ">=0.3.0 <1.0.0"
capabilities:
lime.ui: "^0.1.0"
lime.storage: "^0.1.0"
lime.agent: "^0.1.0"
lime.ui: "^0.3.0"
lime.storage: "^0.3.0"
lime.agent: "^0.3.0"
runtimePackage:
ui:
path: ./dist/ui
@@ -154,7 +154,7 @@ entries:
| 交付物 | 说明 | 验收 |
|---|---|---|
| App manifest v0.2 parser | 支持 `requires`、`runtimePackage`、`storage`、`entries`。 | 示例 App 可 validate / project。 |
| App manifest v0.3 parser | 支持 `requires`、`runtimePackage`、`storage`、`entries`。 | 示例 App 可 validate / project。 |
| Capability SDK 类型草案 | TypeScript types + mock host。 | App 示例可以用 mock 运行单测。 |
| Desktop Installer 方案 | 安装、hash、projection、readiness、权限。 | 能生成 projection,不运行代码。 |
| Storage namespace 方案 | schema、migration、保留/删除策略。 | 卸载时可选择保留数据。 |
@@ -166,7 +166,7 @@ entries:
### P0:单机 App Host 骨架
- 完成 Agent App v0.2 标准对齐。
- 完成 Agent App v0.3 标准对齐。
- 设计 `@lime/app-sdk` 最小 API surface 和 mock host。
- Desktop 支持安装本地 package、projection、readiness。
- 支持 page / expert-chat / workflow 三类 entry。
@@ -175,7 +175,7 @@ entries:
### P1:真实垂直 App 验证
- 用 AI 内容工程化 App 验证 UI、storage、workflow、worker、Agent task、Artifact。
- 用 APP 内容工厂验证 UI、storage、workflow、worker、Agent task、Artifact。
- 支持文件选择、文档解析、Knowledge binding、批量生成和去 AI 味 eval。
- App 所有业务 UI 不进 Lime Core。
@@ -1,21 +1,21 @@
# AI 内容工程化 Agent App PRD
# APP 内容工厂 PRD
更新时间:2026-05-14
更新时间:2026-05-15
## 一句话目标
基于 Lime Agent App 平台开发一个独立垂直产品:`AI 内容工程化 App`。它不是“内容专家聊天框”,而是有自己 UI、storage、worker、workflow、Knowledge 绑定、Artifact 和数据复盘闭环的完整业务应用,安装到 Lime Desktop 后本地运行。
基于 Lime Agent App 平台开发一个独立垂直产品:`APP 内容工厂`。它不是“内容专家聊天框”,而是有自己 UI、storage、worker、workflow、Knowledge 绑定、Artifact 和数据复盘闭环的完整业务应用,安装到 Lime Desktop 后本地运行。
## 关键校准
这份需求不能用 `APP.md + prompt` 解决。功能背后必须有完整实现:
```text
AI 内容工程化 App
├── UI:项目首页 / 三层知识库 / 场景穷尽 / 内容工厂 / 策略报告 / 数据复盘
├── Storage:项目、知识条目、场景、内容资产、复盘数据、洞察
APP 内容工厂
├── UI:项目首页 / 三层知识库 / 内容场景规划 / 内容工厂 / 策略报告 / 数据复盘
├── Storage:项目、知识条目、内容场景、内容资产、复盘数据、洞察
├── Worker:文件解析、知识结构化、批量生成、去 AI 味评分、PPT / 报告生成
├── Workflow:建项目、知识库构建、场景穷尽、内容生产、策略交付、数据复盘
├── Workflow:建项目、知识库构建、内容场景规划、内容生产、策略交付、数据复盘
├── Agent Entries:内容策略专家、知识库整理专家、文案优化专家
├── Skills / Tools / Knowledge:复用生态能力,不重复造底座
└── Artifacts / Evidence / Evals:内容表、脚本、报告、PPT、复盘和质量记录
@@ -25,13 +25,13 @@ AI 内容工程化 App
## 背景
来自深澜智能内容工程化方案的真实需求:团队希望把个人 IP、项目事实、内容方法论、素材资产和运营复盘沉淀成可复用系统,而不是每次在 Claude、豆包、Gemini、图片工具、PPT 工具之间复制粘贴。
来自行业内容团队的真实需求:团队希望把个人 IP、项目事实、内容方法论、素材资产和运营复盘沉淀成可复用系统,而不是每次在 Claude、豆包、Gemini、图片工具、PPT 工具之间复制粘贴。
核心链路:
```text
三层知识库
→ 场景穷尽
→ 内容场景规划
→ 批量内容生产
→ 脚本 / 图片提示词 / 策略报告 / PPT
→ 数据复盘
@@ -52,7 +52,7 @@ AI 内容工程化 App
## 非目标
- 不把深澜内容系统写进 Lime Core。
- 不把行业内容系统写进 Lime Core。
- 不把客户真实资料、私有 SOP、品牌语气、投放数据打进官方 App 包。
- 不在 Lime Cloud 增加默认云端 Agent Runtime。
- P0 不做完整 SaaS:不做账号体系、计费、复杂审核、公开 marketplace。
@@ -63,13 +63,13 @@ AI 内容工程化 App
### 主导航
```text
AI 内容工程化 App
APP 内容工厂
├── 项目首页
├── 知识库
│ ├── IP 知识库
│ ├── 项目知识库
│ └── 素材库
├── 场景穷尽
├── 内容场景规划
├── 内容工厂
│ ├── 批量文案
│ ├── 短视频脚本
@@ -96,7 +96,7 @@ AI 内容工程化 App
## App Package 草案
```text
shenlan-content-engineering/
content-factory-app/
├── APP.md
├── dist/
│ ├── ui/
@@ -107,7 +107,7 @@ shenlan-content-engineering/
├── workflows/
│ ├── create-project.workflow.md
│ ├── build-knowledge.workflow.md
│ ├── exhaust-scenes.workflow.md
│ ├── content-scenarios.workflow.md
│ ├── batch-copy.workflow.md
│ ├── strategy-report.workflow.md
│ └── data-review.workflow.md
@@ -125,27 +125,27 @@ shenlan-content-engineering/
## Manifest 草案
```yaml
manifestVersion: 0.2.0
name: shenlan-content-engineering
version: 0.1.0
manifestVersion: 0.3.0
name: content-factory-app
version: 0.3.0
status: draft
appType: domain-app
description: AI 内容工程化 App,用于知识库构建、场景穷尽、批量内容生产和数据复盘。
description: APP 内容工厂,用于知识库构建、内容场景规划、批量内容生产和数据复盘。
runtimeTargets:
- local
requires:
lime:
appRuntime: ">=0.2.0 <1.0.0"
appRuntime: ">=0.3.0 <1.0.0"
capabilities:
lime.ui: "^0.1.0"
lime.storage: "^0.1.0"
lime.files: "^0.1.0"
lime.agent: "^0.1.0"
lime.knowledge: "^0.1.0"
lime.tools: "^0.1.0"
lime.artifacts: "^0.1.0"
lime.workflow: "^0.1.0"
lime.evidence: "^0.1.0"
lime.ui: "^0.3.0"
lime.storage: "^0.3.0"
lime.files: "^0.3.0"
lime.agent: "^0.3.0"
lime.knowledge: "^0.3.0"
lime.tools: "^0.3.0"
lime.artifacts: "^0.3.0"
lime.workflow: "^0.3.0"
lime.evidence: "^0.3.0"
runtimePackage:
ui:
path: ./dist/ui
@@ -155,7 +155,7 @@ runtimePackage:
schema: ./storage/schema.json
migrations: ./storage/migrations
storage:
namespace: shenlan-content-engineering
namespace: content-factory-app
schema: ./storage/schema.json
migrations: ./storage/migrations
entries:
@@ -167,10 +167,10 @@ entries:
kind: page
title: 三层知识库
route: /knowledge
- key: scene_exhaustion
- key: content_scenario_planning
kind: workflow
title: 场景穷尽
workflow: ./workflows/exhaust-scenes.workflow.md
title: 内容场景规划
workflow: ./workflows/content-scenarios.workflow.md
- key: content_factory
kind: page
title: 内容工厂
@@ -201,7 +201,7 @@ knowledgeTemplates:
| `projects` | 项目、行业、平台、是否需要 IP、默认模型和状态。 |
| `knowledge_spaces` | IP / project / material 三层知识库空间、版本和健康度。 |
| `knowledge_items` | 分区知识条目、来源、证据、字数、版本。 |
| `scenes` | 场景穷尽结果:维度、痛点、解决方案、决策阶段、标签。 |
| `content_scenarios` | 内容场景规划结果:维度、痛点、解决方案、决策阶段、标签。 |
| `content_assets` | 文案、脚本、图片提示词、报告等内容资产。 |
| `review_imports` | CSV / Excel 数据导入批次。 |
| `metrics` | 完播率、搜索占比、转化、素材复用率等指标。 |
@@ -226,7 +226,7 @@ flowchart TD
```mermaid
flowchart TD
Select[选择项目 / 场景 / 平台 / 数量] --> Retrieve[lime.knowledge 检索]
Select[选择项目 / 内容场景 / 平台 / 数量] --> Retrieve[lime.knowledge 检索]
Retrieve --> Generate[lime.agent 批量生成]
Generate --> Score[去 AI 味 + 事实支撑 Eval]
Score --> Grade[A/B/C 分级]
@@ -241,7 +241,7 @@ flowchart TD
Import[导入运营数据] --> Normalize[字段映射 / 清洗]
Normalize --> Analyze[归因分析]
Analyze --> Insight[生成洞察和动作]
Insight --> Update[更新选题库 / 场景权重]
Insight --> Update[更新选题库 / 内容场景权重]
Update --> Report[复盘 Artifact]
```
@@ -267,7 +267,7 @@ P0 只做最小闭环:
→ 上传资料
→ 生成三层知识库草稿
→ 人工确认
→ 生成 120 个场景
→ 生成 120 个内容场景
→ 批量生成 20 条文案 / 脚本
→ 去 AI 味评分
→ A/B/C 分级
@@ -278,7 +278,7 @@ P0 页面:
1. 项目首页。
2. 三层知识库。
3. 场景穷尽。
3. 内容场景规划。
4. 内容工厂。
5. 交付物列表。
@@ -295,7 +295,7 @@ P0 不做:
| 阶段 | 目标 | 验收 |
|---|---|---|
| P0 App Host 验证 | 用 mock SDK 跑通 App UI + storage + workflow + artifact。 | 不修改 Lime Core 业务代码即可打开 App 页面和保存数据。 |
| P1 内容生产 MVP | 跑通知识库构建、场景穷尽、批量文案 / 脚本。 | 30 秒内输出 20 条,评分和分级可见,Artifact 可追溯。 |
| P1 内容生产 MVP | 跑通知识库构建、内容场景规划、批量文案 / 脚本。 | 30 秒内输出 20 条,评分和分级可见,Artifact 可追溯。 |
| P2 策略交付 | 策略分析、报告、PPT 大纲或 pptx 导出。 | 输入项目与竞品资料,10 分钟内生成可编辑交付物。 |
| P3 数据飞轮 | 运营数据导入、自动归因、选题库迭代。 | 导入一周数据后自动生成复盘 Artifact。 |
| P4 企业启用 | Cloud catalog、tenant enablement、overlay、secrets。 | 租户可启用 App,客户数据不进入官方包。 |
@@ -328,8 +328,8 @@ P0 不做:
| US-01 | 作为运营,我可以创建一个内容项目,并选择行业、目标平台和是否需要 IP 库。 | `projects` 写入 App storage namespace;不新增 Lime Core 业务表。 |
| US-02 | 作为运营,我可以上传产品资料,系统生成三层知识库草稿。 | 文件通过 `lime.files` 授权读取;结构化结果进入 `knowledge_items`。 |
| US-03 | 作为负责人,我可以逐条确认、裁剪和版本化知识条目。 | 知识库健康度显示字数、分区、来源和版本。 |
| US-04 | 作为内容同学,我可以基于确认后的项目知识库生成 120+ 场景。 | `scenes` 表保存应用场景、用户痛点、解决方案、决策阶段。 |
| US-05 | 作为内容同学,我可以选择场景和平台批量生成 20 条文案或脚本。 | 生成结果进入 `content_assets`,带 A/B/C 分级和去 AI 味评分。 |
| US-04 | 作为内容同学,我可以基于确认后的项目知识库生成 120+ 场景。 | `content_scenarios` 表保存应用场景、用户痛点、解决方案、决策阶段。 |
| US-05 | 作为内容同学,我可以选择内容场景和平台批量生成 20 条文案或脚本。 | 生成结果进入 `content_assets`,带 A/B/C 分级和去 AI 味评分。 |
| US-06 | 作为交付顾问,我可以把内容批次保存为 Artifact 并追溯来源。 | Artifact 带 app / knowledge / skill / tool / eval provenance。 |
| US-07 | 作为管理员,我可以看到缺失能力或缺失知识绑定的 readiness 提示。 | 缺少 `project_knowledge`、`lime.files` 或 writer skill 时不能静默运行。 |
@@ -346,7 +346,7 @@ P0 不做:
### 用例 2:内容工厂批量生产
```text
输入:项目、场景、平台、数量、人群画像
输入:项目、内容场景、平台、数量、人群画像
过程:知识检索 → 技能编排 → 批量生成 → 去 AI 味评分 → A/B/C 分级
输出:内容表 Artifact、可编辑内容资产、Eval 记录
```
@@ -378,8 +378,8 @@ P0 不做:
|---|---|---|
| 项目首页 | 项目列表、知识健康度、最近 Artifact、快捷操作。 | `lime.storage`、`lime.artifacts` |
| 三层知识库 | IP / 项目 / 素材 tabs、分区表、字数警告、来源查看。 | `lime.files`、`lime.storage`、`lime.knowledge` |
| 场景穷尽 | 场景表、维度筛选、人工编辑、批量保存。 | `lime.agent`、`lime.storage` |
| 内容工厂 | 平台选择、数量、场景选择、批量结果、评分与分级。 | `lime.agent`、`lime.artifacts`、`lime.evidence` |
| 内容场景规划 | 内容场景表、维度筛选、人工编辑、批量保存。 | `lime.agent`、`lime.storage` |
| 内容工厂 | 平台选择、数量、内容场景选择、批量结果、评分与分级。 | `lime.agent`、`lime.artifacts`、`lime.evidence` |
| 交付物 | 内容表、报告、导出、版本历史。 | `lime.artifacts`、`lime.evidence` |
## 暂缓项
@@ -395,10 +395,10 @@ P0 不做:
## 下一刀
先做 App Host 与 SDK 的垂直切片,而不是先做内容系统全部功能:
当前客户端已完成 App Host、SDK、UI Host、内容工厂最小闭环和受控 workflow runtime 的实验岛切片。下一刀不扩成完整内容系统,先补真实 worker sandbox 前置边界、package hash 校验与 Cloud bootstrap:
```text
App manifest → projection → readiness → mock SDK → storage namespace → 一个页面 → 一个 workflow → 一个 Artifact
真实 worker sandbox policy → package hash 校验 → Cloud bootstrap payload 适配 → 断网可用性验证
```
只有这条链路跑通后,再进入内容工程化的知识库和批量生成业务实现。
只有 runtime policy、cleanup 和 Cloud 控制面边界稳定后,再进入真实文件解析、批量生成、质量评分和外部平台数据复盘。
+75 -35
View File
@@ -6,10 +6,10 @@
Agent App 在 Lime Desktop 里必须先做成一个可关闭、可卸载、可删除数据、可移除代码的“实验岛”,而不是一开始改造 Chat、Skill、Workspace、Artifact 主路径。
第一阶段目标不是做一个完整生态,也不是复刻深澜内容系统,而是证明:一个真实 App package 可以在本地被安装、解析、投影、检查 readiness、调用 Capability SDK、生成可追溯产物,并且在方向失败时能干净清理。
第一阶段目标不是做一个完整生态,也不是复刻行业内容系统,而是证明:一个真实 App package 可以在本地被安装、解析、投影、检查 readiness、调用 Capability SDK、生成可追溯产物,并且在方向失败时能干净清理。
```text
Agent App Standard v0.2
Agent App Standard v0.3
↓
Local Package / Fixture
↓
@@ -39,9 +39,9 @@ Agent App 不是专家卡片、不是 Prompt 包、不是 Markdown 目录,也
| 目标 | 说明 |
|---|---|
| 验证 App package | 本地读取 Agent App v0.2 package / fixture,生成 manifest、projection、readiness。 |
| 验证 App package | 本地读取 Agent App v0.3 package / fixture,生成 manifest、projection、readiness。 |
| 验证 SDK 边界 | App 只能通过 `@lime/app-sdk` capability facade 调 Lime 能力,不能 import Lime internal modules。 |
| 验证真实业务切片 | 用 AI 内容工程化 App 跑通一个最小业务闭环,而不是停留在专家聊天。 |
| 验证真实业务切片 | 用 APP 内容工厂跑通一个最小业务闭环,而不是停留在专家聊天。 |
| 验证本地数据隔离 | App storage、artifact、evidence、log、package cache 独立命名空间,可按 app 清理。 |
| 验证失败退出 | P0 就实现 cleanup plan / uninstall plan,保证失败后能删干净。 |
| 验证未来 Cloud 对接 | 客户端先用 local JSON / fixture,Cloud 只在 P5 作为 catalog / release / tenant enablement 输入。 |
@@ -50,7 +50,7 @@ Agent App 不是专家卡片、不是 Prompt 包、不是 Markdown 目录,也
1. P0 不做公开市场、审核流、支付分账、企业分发控制台。
2. P0 不执行任意 App 代码,不支持任意 npm install、native binary、任意文件系统访问。
3. P0 不把 AI 内容工程化写进 Lime Core。
3. P0 不把 APP 内容工厂写进 Lime Core。
4. P0 不改造 AgentChat、Skill Catalog、Artifact 主 schema。
5. P0 不要求 Cloud 先完成;Cloud 不运行默认 Agent Runtime。
6. P0 不承诺兼容历史实验数据;实验数据必须可删除。
@@ -100,7 +100,7 @@ Agent App 不是专家卡片、不是 Prompt 包、不是 Markdown 目录,也
```mermaid
flowchart TD
Standard[Agent App v0.2 Standard] --> Source[Local Package / Fixture]
Standard[Agent App v0.3 Standard] --> Source[Local Package / Fixture]
Cloud[LimeCore Control Plane] --> Bootstrap[Optional Bootstrap Payload]
Source --> Host[Agent App Host 实验岛]
Bootstrap --> Host
@@ -192,8 +192,8 @@ src/features/agent-app/
│ ├── AgentAppRunPanel.tsx
│ └── AgentAppCleanupPanel.tsx
└── fixtures/
├── content-engineering-app.json
└── content-engineering-run.fixture.json
├── content-factory-app.json
└── content-factory-run.fixture.json
```
主系统只允许极薄入口:
@@ -264,7 +264,7 @@ agentAppHost: {
| `localStorageEnabled` | 创建 App namespace。 | off | 不写本地实验数据。 |
| `realAdapterEnabled` | 接入少量真实 Lime adapter。 | off | 回退 mock。 |
| `uiRuntimeEnabled` | 加载受控 UI bundle。 | off | 回退只读 projection。 |
| `workerRuntimeEnabled` | 执行受控 worker。 | off | 不跑后台任务。 |
| `workerRuntimeEnabled` | 执行受控 workflow DSL,仍不执行 raw worker bundle。 | off | 不跑后台任务。 |
| `cloudBootstrapEnabled` | 消费 LimeCore bootstrap。 | off | 只用本地 fixture。 |
## 数据边界
@@ -503,7 +503,9 @@ Worker 是最高风险项,必须晚于 UI Host:
| P1 | mock entry action | 否,只跑内置 mock handler |
| P2 | thin adapter action | 否,仍由 Lime 内置 runner 调 adapter |
| P3 | 受控 UI bundle | 是,仅 UI 容器 |
| P4 | 受控 workflow DSL / worker | 是,必须有 policy、cancel、trace、resource limit |
| P4.1 | 内容工厂内置 runner | 否,仍由 Lime 内置 demo 编排 |
| P4.2 | 受控 workflow DSL | 否,只执行白名单 SDK step,不执行 raw worker bundle |
| P4.x | 真实 worker sandbox | 是,必须有 policy、cancel、trace、resource limit |
Worker 禁止项:
@@ -519,9 +521,9 @@ App 自带模型网关
无 trace 的工具调用
```
## AI 内容工程化验证切片
## APP 内容工厂验证切片
AI 内容工程化 App 只作为平台验证样板,不进入 Lime Core。
APP 内容工厂只作为平台验证样板,不进入 Lime Core。
P4 最小闭环:
@@ -529,7 +531,7 @@ P4 最小闭环:
创建项目
→ 保存到 app namespace
→ 选择本地 fixture 知识
→ 生成场景表 mock / local agent result
→ 生成内容场景表 mock / local agent result
→ 生成内容资产
→ 创建内容表 Artifact
→ 记录 Evidence provenance
@@ -543,7 +545,7 @@ P4 最小闭环:
|---|---|---|
| project | App storage namespace | 项目配置。 |
| knowledge binding | App storage + lime.knowledge ref | 三层知识库引用。 |
| scenes | App storage | 场景穷尽表。 |
| content_scenarios | App storage | 内容场景规划表。 |
| content assets | App storage | 文案 / 脚本 / 图片提示词。 |
| content table | Artifact store 或实验 artifact dir | 可导出内容表。 |
| evidence | Evidence store 或实验 evidence dir | 来源、模型、知识版本、App provenance。 |
@@ -617,7 +619,7 @@ rg "agent-app|AgentApp|agent_app" src src-tauri docs/roadmap/agentapp
### P0:只读 App Host 骨架
目标:证明客户端能读取 Agent App v0.2 package,并生成稳定 projection / readiness。
目标:证明客户端能读取 Agent App v0.3 package,并生成稳定 projection / readiness。
交付:
@@ -628,7 +630,7 @@ rg "agent-app|AgentApp|agent_app" src src-tauri docs/roadmap/agentapp
- `InstalledAppState`。
- `AgentAppProjection`。
- `AgentAppLabPage` 只读展示。
- 本地 fixture:`content-engineering-app`。
- 本地 fixture:`content-factory-app`。
- `cleanupPlan` 类型和 dry-run。
验收:
@@ -661,6 +663,14 @@ rg "agent-app|AgentApp|agent_app" src src-tauri docs/roadmap/agentapp
- uninstall delete data 删除 package / projection / readiness / storage / artifact / evidence。
- mock SDK 不依赖真实 Lime internal store。
当前客户端 P1 最小落地:
- `sdk/CapabilityHost.ts` 定义 `LimeAppSdk` facade 与 storage / artifacts / evidence capability。
- `sdk/MockCapabilityHost.ts` 以内存态运行 fixture entry,生成 mock Artifact、Evidence 和 run record。
- `sdk/mockCapabilityProfile.ts` 在 `mockSdkEnabled` 开启时提供 mock capability readiness profile,但仍不启用 UI / worker runtime。
- `install/uninstallApp.ts` 通过 host 执行 delete-data / keep-data 卸载语义。
- `AgentAppLabPage` 仅在 `mockSdkEnabled` 开启后显示 run entry 按钮,默认 P0 只读行为不变。
### P2:少量真实 Adapter
目标:用最小真实能力验证 SDK facade 是否能隔离内部实现。
@@ -688,6 +698,15 @@ rg "agent-app|AgentApp|agent_app" src src-tauri docs/roadmap/agentapp
- Adapter 删除后主路径仍可编译。
- Agent App 产物可按 provenance 查询和清理。
当前客户端 P2 最小落地:
- `adapters/AdapterCapabilityHost.ts` 复用 `CapabilityHost` 接口,通过 `realAdapterEnabled` 控制运行。
- `adapters/InMemoryAgentAppCapabilityStore.ts` 提供本地 adapter store,支持按 appId / entryKey / workflowRunId 查询 storage、Artifact、Evidence、Task。
- `adapters/adapterCapabilityProfile.ts` 将 `lime.storage`、`lime.artifacts`、`lime.evidence`、`lime.knowledge`、`lime.agent` 标记为 `adapter`,其余 fixture 所需能力保留 mock readiness,不启用 UI / worker runtime。
- `AdapterCapabilityHost.runEntry("content_scenario_planning")` 会通过 `lime.knowledge.search` 解析 fixture knowledge binding,并通过 `lime.agent.startTask` 生成本地 task trace。
- `AgentAppLabPage` 在 `realAdapterEnabled` 开启时优先使用 adapter host,默认路径仍保持 P0/P1 关闭态。
- P2 仍不接正式 Artifact 主 schema、不新增 Tauri command、不写主产品 registry。
### P3:受控 UI Extension Host
目标:验证 App 可以拥有自己的 UI 表现形式,而不是只能作为专家对话框。
@@ -707,17 +726,25 @@ rg "agent-app|AgentApp|agent_app" src src-tauri docs/roadmap/agentapp
- 权限在 bridge 层强制拦截。
- 关闭 `uiRuntimeEnabled` 后回退 Lab projection 展示。
### P4:AI 内容工程化最小业务闭环
当前客户端 P3.1 最小落地:
- `runtime/uiExtensionHost.ts` 提供 `UiExtensionHost.mountEntry()`,只允许 `page / panel / settings` entry。
- `runtime/uiRuntimeCapabilityProfile.ts` 在 `uiRuntimeEnabled` 开启时将 `lime.ui` 标记为 `native`,可叠加 P1 mock 或 P2 adapter capability。
- `AgentAppLabPage` 在 UI runtime 开启后显示 Open UI Host 操作,并展示 bundle、route、sandbox policy、injected SDK bridge。
- `UiExtensionHost` 明确阻断 raw Tauri API、Node API、未声明网络、下载和弹窗;worker runtime 仍保持关闭。
- P3 仍不新增 Tauri command、不注册正式主路由、不执行 App worker。
### P4:APP 内容工厂最小业务闭环
目标:验证 Product-level App 是否值得继续投入。
交付:
- AI 内容工程化 App fixture / demo package。
- APP 内容工厂 fixture / demo package。
- 项目创建 UI。
- App namespace storage。
- 知识 fixture binding。
- 场景穷尽 mock / local agent result。
- 内容场景规划 mock / local agent result。
- 内容资产表。
- Artifact + Evidence。
- cleanup / uninstall UI。
@@ -729,6 +756,24 @@ rg "agent-app|AgentApp|agent_app" src src-tauri docs/roadmap/agentapp
- Artifact 和 Evidence 可追溯、可清理。
- 完成一次从项目创建到内容表生成再到卸载清理的闭环。
当前客户端 P4.1 最小落地:
- `runtime/contentFactoryDemo.ts` 只通过 `CapabilityHost` / `LimeAppSdk` 编排业务闭环,不 import Lime internal store。
- demo 先运行 `content_scenario_planning` adapter entry,再用同一 `workflowRunId` 写入 `projects/*`、`knowledge-bindings/*`、`content_scenarios/*`、`content-assets/*`。
- demo 生成 `content_table` Artifact,并记录 `content_factory_demo` Evidence,refs 串联内容表、P2 adapter artifact、P2 evidence 和 agent task。
- `AgentAppLabPage` 在 real adapter 模式下展示 P4 demo 入口和结果统计。
- delete-data 卸载测试覆盖 P4 demo 的 storage、artifact、evidence、task 清理。
- P4.1 仍不新增 Tauri command、不修改 AgentChat / Skill Catalog / Artifact 主 schema、不进入正式主导航。
当前客户端 P4.2 最小落地:
- `runtime/runtimePolicy.ts` 定义 workflow runtime policy:只允许 `storage.set`、`knowledge.search`、`agent.startTask`、`artifacts.create`、`evidence.record` 五类 DSL step。
- `runtime/workflowRuntimeHost.ts` 提供 `WorkflowRuntimeHost.runWorkflow()`,通过 `workerRuntimeEnabled` 受控开启,支持 trace、step 间 cancel、policy violation 和 disabled error。
- `runtime/workflowRuntimeCapabilityProfile.ts` 在 P4.2 profile 中把 `lime.workflow` 标记为 `native`,但仍不执行 raw worker bundle。
- `runContentFactoryDemo()` 可在传入 `workflowRuntime` 时把内容工厂闭环迁移到 `content_factory_demo` workflow definition。
- `AgentAppLabPage` 在 real adapter + worker runtime 模式下展示 P4.2 policy hint、trace count、关键 step 和 raw worker / network block 状态。
- P4.2 仍不新增 Tauri command、不执行 App package JS、不注册正式 workflow 入口、不修改 AgentChat / Skill Catalog / Artifact 主 schema。
### P5:Cloud Bootstrap 接入
目标:客户端 P0-P4 成立后,再消费 LimeCore 控制面。
@@ -758,10 +803,11 @@ rg "agent-app|AgentApp|agent_app" src src-tauri docs/roadmap/agentapp
| P1.1 | SDK facade。 | `sdk/LimeAppSdk.ts` | type contract。 |
| P1.2 | Mock host。 | `sdk/MockCapabilityHost.ts` | contract tests。 |
| P1.3 | mock artifact / evidence。 | `sdk/*`、`install/*` | run entry test。 |
| P2.1 | artifact / evidence adapter。 | `adapters/*` | adapter tests。 |
| P2.2 | knowledge / agent adapter。 | `adapters/*` | targeted integration test。 |
| P2.1 | storage / artifact / evidence adapter。 | `adapters/*` | adapter tests。 |
| P2.2 | knowledge / agent adapter。 | `adapters/*` | adapter tests。 |
| P3.1 | UI host。 | `runtime/uiExtensionHost.ts` | sandbox smoke。 |
| P4.1 | 内容工程化切片。 | `fixtures/*`、`ui/*` | end-to-end demo。 |
| P4.1 | 内容工厂切片。 | `fixtures/*`、`ui/*` | end-to-end demo。 |
| P4.2 | 受控 workflow runtime。 | `runtime/workflowRuntimeHost.ts`、`runtime/runtimePolicy.ts` | workflow runtime tests / UI test。 |
## 验证策略
@@ -830,24 +876,18 @@ rg "agent-app|AgentApp|agent_app" src src-tauri docs/roadmap/agentapp
| D1 | P1 结束 | SDK facade 是否足够表达业务? | mock entry 生成可追溯产物。 | 重写 SDK,不接真实 adapter。 |
| D2 | P2 结束 | Adapter 是否足够薄? | 删除 adapter 不影响主路径。 | 回退 mock,重画边界。 |
| D3 | P3 结束 | UI Host 是否安全可控? | App UI 不能越权访问资源。 | 暂停 UI bundle,保留 projection UI。 |
| D4 | P4 结束 | Product-level App 是否有平台价值? | 内容工程化闭环跑通。 | 清理实验岛,不进入正式入口。 |
| D4 | P4 结束 | Product-level App 是否有平台价值? | 内容工厂闭环跑通。 | 清理实验岛,不进入正式入口。 |
| D5 | P5 结束 | Cloud bootstrap 是否只是控制面? | 断网已安装 App 可用。 | Cloud 回退为 catalog-only。 |
## 下一刀
P0 技术设计已落到 [p0-technical-design.md](./p0-technical-design.md)。下一刀只按该设计落最小只读闭环,不做市场页、不做 Cloud、不做完整 AI 内容工程化业务:
P0-P4.2 已证明 Agent App 可以在客户端实验岛内完成 package 解析、projection、readiness、cleanup dry-run、SDK facade、mock / adapter capability、受控 UI Host、内容工厂最小业务闭环和受控 workflow runtime。下一刀进入真实 worker sandbox 前置清障与 P5 Cloud bootstrap,但仍不做市场页、不进正式主路径:
```text
Feature flags
→ AppManifest / NormalizedAppManifest
→ PackageIdentity
→ AgentAppProjection
→ ReadinessResult
→ CapabilityRequirement
→ AgentAppProvenance
→ AppCleanupPlan
→ content-engineering local fixture
→ Lab readonly projection UI
真实 worker sandbox policy 草案
→ package hash / manifest hash 校验
→ Cloud bootstrap payload 本地适配器
→ 断网已安装 App 可用性验证
```
完成 P0 后再决定是否进入 Mock SDK。没有 P0 的 cleanup dry-run,不进入 P1。
后续退出条件仍是:如果需要修改超过 3 个 Lime 核心主路径模块、App 需要绕过 SDK 直接调 internal store、或数据无法按 namespace 清理,就停止堆业务功能,回到 SDK / Host 边界。
+31 -40
View File
@@ -4,7 +4,7 @@
## 一句话目标
P0 只做“只读 App Host 骨架”:客户端能读取一个 Agent App v0.2 本地 package / fixture,得到稳定的 manifest、projection、readiness、cleanup dry-run,并在 Lab 页面展示出来;不执行 App UI,不执行 App worker,不写入主路径 registry。
P0 只做“只读 App Host 骨架”:客户端能读取一个 Agent App v0.3 本地 package / fixture,得到稳定的 manifest、projection、readiness、cleanup dry-run,并在 Lab 页面展示出来;不执行 App UI,不执行 App worker,不写入主路径 registry。
P0 成功后,才允许进入 P1 Mock Capability Host。没有 cleanup dry-run,不进入 P1。
@@ -32,10 +32,9 @@ P0 成功后,才允许进入 P1 Mock Capability Host。没有 cleanup dry-run
```mermaid
flowchart TD
Fixture[Local Package / Fixture] --> Identity[compute PackageIdentity]
Fixture --> Parse[parseManifest]
Parse --> Normalize[normalizeManifest]
Normalize --> Validate[validateManifest]
Validate --> Project[projectApp]
Fixture --> ParseValidate[parseManifest + core validation]
ParseValidate --> Normalize[normalizeManifest]
Normalize --> Project[projectApp]
Project --> Readiness[checkReadiness]
Project --> Cleanup[buildCleanupPlan]
Readiness --> State[InstalledAppPreview]
@@ -54,31 +53,23 @@ src/features/agent-app/
├── manifest/
│ ├── parseManifest.ts
│ ├── normalizeManifest.ts
│ ├── validateManifest.ts
│ └── parseManifest.test.ts
├── projection/
│ ├── projectApp.ts
│ ├── projectionGuards.ts
│ └── projectApp.test.ts
├── readiness/
│ ├── hostCapabilityProfile.ts
│ ├── checkReadiness.ts
│ ├── capabilityNegotiation.ts
│ └── checkReadiness.test.ts
├── install/
│ ├── packageIdentity.ts
│ ├── packageSource.ts
│ ├── installedAppPreview.ts
│ ├── cleanupPlan.ts
│ └── cleanupPlan.test.ts
│ └── cleanupPlan.ts
├── ui/
│ ├── AgentAppLabPage.tsx
│ ├── AgentAppCard.tsx
│ ├── AgentAppEntriesPanel.tsx
│ ├── AgentAppReadinessPanel.tsx
│ └── AgentAppCleanupPanel.tsx
│ └── AgentAppLabPage.test.tsx
└── fixtures/
└── content-engineering-app.json
└── content-factory-app.json
```
P0 如果能全部在前端完成,就不增加 Tauri command。只有本地 package hash、文件枚举或 app data 路径必须走系统能力时,才增加 `src-tauri/src/agent_app/`。
@@ -145,7 +136,7 @@ P0 只实现 `fixture`,可预留 `local_folder` 类型但不接 UI。
### AppManifest
`AppManifest` 对齐 Agent App v0.2 声明,P0 只解析核心字段:
`AppManifest` 对齐 Agent App v0.3 声明,P0 只解析核心字段:
```ts
type AppManifest = {
@@ -369,15 +360,15 @@ P0 默认 profile:
```ts
const p0HostCapabilityProfile: HostCapabilityProfile = {
appRuntimeVersion: '0.2.0',
appRuntimeVersion: '0.3.0',
runtimeTargets: ['local'],
capabilities: {
'lime.ui': { version: '0.1.0', enabled: false, implementation: 'none' },
'lime.storage': { version: '0.1.0', enabled: false, implementation: 'none' },
'lime.agent': { version: '0.1.0', enabled: false, implementation: 'none' },
'lime.knowledge': { version: '0.1.0', enabled: false, implementation: 'none' },
'lime.artifacts': { version: '0.1.0', enabled: false, implementation: 'none' },
'lime.evidence': { version: '0.1.0', enabled: false, implementation: 'none' }
'lime.ui': { version: '0.3.0', enabled: false, implementation: 'none' },
'lime.storage': { version: '0.3.0', enabled: false, implementation: 'none' },
'lime.agent': { version: '0.3.0', enabled: false, implementation: 'none' },
'lime.knowledge': { version: '0.3.0', enabled: false, implementation: 'none' },
'lime.artifacts': { version: '0.3.0', enabled: false, implementation: 'none' },
'lime.evidence': { version: '0.3.0', enabled: false, implementation: 'none' }
},
featureFlags: defaultAgentAppHostFlags
}
@@ -475,7 +466,7 @@ P0 Lab 页面只做开发者 / 内测入口:
```text
Agent App Lab
├── Package Source
│ └── content-engineering-app fixture
│ └── content-factory-app fixture
├── App Card
│ ├── name / version / status / packageHash
│ └── readiness badge
@@ -498,28 +489,28 @@ P0 UI 不出现“运行 App”“打开 App 页面”“启用 App 到主导航
## Fixture 要求
`content-engineering-app.json` 应该覆盖足够多字段,避免 P0 只验证玩具样例:
`content-factory-app.json` 应该覆盖足够多字段,避免 P0 只验证玩具样例:
```json
{
"manifestVersion": "0.2.0",
"name": "shenlan-content-engineering",
"version": "0.1.0",
"manifestVersion": "0.3.0",
"name": "content-factory-app",
"version": "0.3.0",
"status": "draft",
"appType": "domain-app",
"description": "AI 内容工程化 App fixture",
"description": "APP 内容工厂 fixture",
"runtimeTargets": ["local"],
"requires": {
"lime": {
"appRuntime": ">=0.2.0 <1.0.0"
"appRuntime": ">=0.3.0 <1.0.0"
},
"capabilities": {
"lime.ui": "^0.1.0",
"lime.storage": "^0.1.0",
"lime.agent": "^0.1.0",
"lime.knowledge": "^0.1.0",
"lime.artifacts": "^0.1.0",
"lime.evidence": "^0.1.0"
"lime.ui": "^0.3.0",
"lime.storage": "^0.3.0",
"lime.agent": "^0.3.0",
"lime.knowledge": "^0.3.0",
"lime.artifacts": "^0.3.0",
"lime.evidence": "^0.3.0"
}
},
"runtimePackage": {
@@ -527,14 +518,14 @@ P0 UI 不出现“运行 App”“打开 App 页面”“启用 App 到主导航
"worker": { "path": "./dist/worker" }
},
"storage": {
"namespace": "shenlan-content-engineering",
"namespace": "content-factory-app",
"schema": "./storage/schema.json",
"migrations": "./storage/migrations"
},
"entries": [
{ "key": "dashboard", "kind": "page", "title": "项目首页", "route": "/dashboard" },
{ "key": "content_strategist", "kind": "expert-chat", "title": "内容策略专家", "persona": "./agents/content-strategist.md" },
{ "key": "scene_exhaustion", "kind": "workflow", "title": "场景穷尽", "workflow": "./workflows/exhaust-scenes.workflow.md" }
{ "key": "content_scenario_planning", "kind": "workflow", "title": "内容场景规划", "workflow": "./workflows/content-scenarios.workflow.md" }
]
}
```
@@ -545,7 +536,7 @@ P0 UI 不出现“运行 App”“打开 App 页面”“启用 App 到主导航
| 测试 | 输入 | 期望 |
|---|---|---|
| parse valid fixture | content engineering fixture | 返回 `AppManifest`。 |
| parse valid fixture | content factory fixture | 返回 `AppManifest`。 |
| reject missing entries | 无 entries | manifest validation error。 |
| normalize defaults | 缺 status / runtimeTargets | 默认 draft / local。 |
| project entries | page + expert-chat + workflow | 生成 3 个 `ProjectedEntry`。 |
@@ -0,0 +1,108 @@
# Agent App P1 Mock Capability Host 技术设计
更新时间:2026-05-15
## 一句话目标
P1 在 P0 只读 Lab 之后,增加一个默认关闭的 mock SDK 运行层:点击 fixture entry 时不执行 App 自带 UI / worker,只通过 `LimeAppSdk` facade 调用内存态 `MockCapabilityHost`,生成带 `sourceKind: agent_app` provenance 的 mock Artifact、Evidence 和 run record,并能通过 uninstall delete-data 清理实验数据。
## 范围
| 范围 | 做 | 不做 |
|---|---|---|
| SDK facade | 定义 `LimeAppSdk`、storage、artifact、evidence capability 类型。 | 不暴露 Lime internal path。 |
| Mock Host | 内存态运行 entry、写 run record、生成 mock Artifact / Evidence。 | 不写真实 Artifact Store / Evidence Store。 |
| Readiness | `mockSdkEnabled` 时使用 mock capability profile,消除 capability blocker。 | 不启用 UI runtime / worker runtime。 |
| Lab UI | 在实验开关开启时显示 “Run mock entry”,展示 run result。 | 默认关闭,不进入主导航命令面板。 |
| Cleanup | `uninstallApp(deleteData)` 清理 package、projection、readiness、storage、artifact、evidence 目标。 | 不执行真实文件删除。 |
## Feature Flag
P1 只新增一层开关:
```text
VITE_LIME_AGENT_APP_MOCK_SDK=1
```
或通过 `resolveAgentAppHostFlags({ mockSdkEnabled: true })` 注入测试状态。
规则:
1. `mockSdkEnabled=false` 时,P0 行为保持只读,不出现运行按钮。
2. `mockSdkEnabled=true` 时,自动打开 Lab / local package / projection / readiness / cleanup dry-run。
3. 即使 `mockSdkEnabled=true`,`uiRuntimeEnabled`、`workerRuntimeEnabled`、`realAdapterEnabled` 仍保持关闭。
## 架构图
```mermaid
flowchart TD
Lab[AgentAppLabPage] --> Preview[InstalledAppPreview]
Preview --> Profile[Mock Capability Profile]
Lab --> Host[MockCapabilityHost]
Host --> SDK[LimeAppSdk facade]
SDK --> Storage[In-memory storage namespace]
SDK --> Artifact[Mock Artifact]
SDK --> Evidence[Mock Evidence]
Artifact --> Provenance[agent_app provenance]
Evidence --> Provenance
Host --> Uninstall[uninstallApp delete-data]
```
## 运行时序
```mermaid
sequenceDiagram
participant User as 用户
participant Lab as Agent App Lab
participant Host as MockCapabilityHost
participant SDK as LimeAppSdk
participant Storage as Mock Storage
participant Artifact as Mock Artifact
participant Evidence as Mock Evidence
User->>Lab: 点击 Run mock entry
Lab->>Host: runEntry(entryKey)
Host->>Host: readiness guard
Host->>SDK: createSdkContext(entryKey, runId)
SDK->>Storage: set runs/<runId>
SDK->>Artifact: create mock artifact
SDK->>Evidence: record mock evidence
Host-->>Lab: AgentAppRunResult
Lab-->>User: 展示 runId / artifact / evidence / provenance
```
## 用例
| 用例 | 验收 |
|---|---|
| 开关关闭 | Lab 只读展示,不出现 run entry 按钮。 |
| 开关开启 | 点击 `content_scenario_planning` 生成 `mock-artifact-*` 与 `mock-evidence-*`。 |
| Provenance | Artifact / Evidence / storage entry 均带 `sourceKind: agent_app`、appId、entryKey、packageHash、manifestHash、workflowRunId。 |
| 卸载 delete-data | 返回 deleted targets,覆盖 package、projection、readiness、storage、artifact、evidence,并清空内存态 mock 数据。 |
| Readiness 阻断 | 如果 capability 未启用或 entry 不存在,抛稳定 `AgentAppCapabilityError.code`。 |
## 文件边界
```text
src/features/agent-app/
├── sdk/
│ ├── CapabilityHost.ts
│ ├── MockCapabilityHost.ts
│ ├── MockCapabilityHost.test.ts
│ ├── capabilityErrors.ts
│ ├── mockCapabilityProfile.ts
│ └── provenance.ts
├── install/
│ └── uninstallApp.ts
└── ui/
└── AgentAppLabPage.tsx
```
## P1 不变量
1. P1 不执行 App 自带 UI bundle、worker 或 workflow 文件。
2. P1 不新增 Tauri command。
3. P1 不写 command / skill / artifact / workspace 全局 registry。
4. P1 mock host 不 import Lime 主业务 store,只依赖 Agent App projection / readiness / cleanup plan。
5. P1 产物必须可追溯、可删除、可通过 feature flag 关闭。
@@ -0,0 +1,118 @@
# Agent App P2 Adapter Capability Host 技术设计
更新时间:2026-05-15
## 一句话目标
P2 在 P1 mock host 之后增加一个仍默认关闭的 adapter host:不执行 App UI / worker、不改 AgentChat 主流程,只把 `lime.storage`、`lime.artifacts`、`lime.evidence` 从硬编码 mock 行为推进到可替换的本地 adapter store,并证明产物可以按 `agent_app` provenance 查询和卸载清理。
## 范围
| 范围 | 做 | 不做 |
|---|---|---|
| Adapter Host | 新增 `AdapterCapabilityHost`,复用 `CapabilityHost` 接口。 | 不接正式 Artifact 主 schema,不写全局 registry。 |
| Adapter Store | 新增 `InMemoryAgentAppCapabilityStore`,按 appId / entryKey / workflowRunId 查询 storage、Artifact、Evidence、Task。 | 不把实验数据写入真实用户文件目录。 |
| Knowledge Adapter | `lime.knowledge.search` 从 App knowledge bindings 中只读解析候选资料。 | 不访问真实项目知识库、不做网络检索。 |
| Agent Adapter | `lime.agent.startTask / cancelTask / getTask` 记录本地任务 trace。 | 不修改 AgentChat 主流程、不提交真实模型 turn。 |
| Capability Profile | 新增 `buildAdapterCapabilityProfile`,`storage / artifacts / evidence / knowledge / agent` 标记为 `adapter`,其余能力保留 mock readiness。 | 不声明 UI / worker runtime 已可执行。 |
| Feature Flag | 新增 `VITE_LIME_AGENT_APP_REAL_ADAPTER=1` 与 `realAdapterEnabled`。 | 默认不启用,不影响主产品路径。 |
| Lab UI | real adapter 开启后使用 adapter host 运行 entry,展示 adapter artifact / evidence。 | 不把 App entry 放入正式命令面板。 |
| Cleanup | `delete-data` 清理 adapter storage、artifact、evidence refs。 | 不执行真实文件删除。 |
## Feature Flag
```text
VITE_LIME_AGENT_APP_REAL_ADAPTER=1
```
或测试注入:
```ts
resolveAgentAppHostFlags({ realAdapterEnabled: true })
```
规则:
1. `realAdapterEnabled=false` 时,P2 adapter host 完全不可运行。
2. `realAdapterEnabled=true` 时,自动打开 Lab / local package / projection / readiness / cleanup dry-run / local storage capability。
3. `mockSdkEnabled` 不会被自动打开;如果 mock 和 adapter 同时开启,Lab 优先使用 adapter host。
4. `uiRuntimeEnabled`、`workerRuntimeEnabled`、`cloudBootstrapEnabled` 仍保持关闭。
## 架构图
```mermaid
flowchart TD
Lab[AgentAppLabPage] --> Preview[InstalledAppPreview]
Preview --> Profile[Adapter Capability Profile]
Lab --> Host[AdapterCapabilityHost]
Host --> SDK[LimeAppSdk facade]
SDK --> Store[InMemoryAgentAppCapabilityStore]
Store --> Storage[Adapter storage entries]
Store --> Artifact[Adapter Artifact records]
Store --> Evidence[Adapter Evidence records]
Store --> Task[Adapter task records]
Host --> Knowledge[Knowledge binding resolver]
Artifact --> Provenance[agent_app provenance index]
Evidence --> Provenance
Storage --> Provenance
Host --> Cleanup[uninstallApp delete-data]
```
## 运行时序
```mermaid
sequenceDiagram
participant User as 用户
participant Lab as Agent App Lab
participant Host as AdapterCapabilityHost
participant SDK as LimeAppSdk
participant Store as Adapter Store
User->>Lab: 点击 Run adapter entry
Lab->>Host: runEntry(entryKey)
Host->>Host: realAdapterEnabled/readiness guard
Host->>SDK: createSdkContext(entryKey, runId)
SDK->>Store: setStorage(runs/<runId>)
SDK->>Store: searchKnowledge(entry)
SDK->>Store: startTask(entry)
SDK->>Store: createArtifact(...provenance)
SDK->>Store: recordEvidence(...refs)
Host-->>Lab: AgentAppRunResult
Lab-->>User: 展示 adapter runId / artifact / evidence
```
## 用例
| 用例 | 验收 |
|---|---|
| 开关关闭 | `AdapterCapabilityHost.runEntry` 抛 `FEATURE_DISABLED`。 |
| 开关开启 | 点击 `dashboard` 生成 `adapter-artifact-*` 与 `adapter-evidence-*`。 |
| Workflow entry | 点击 `content_scenario_planning` 生成 knowledge search result 与 `adapter-task-*` trace。 |
| Provenance 查询 | `getArtifacts({ appId })`、`getEvidence({ entryKey })`、`getStorageEntries({ workflowRunId })`、`getTasks({ entryKey })` 能命中本次运行数据。 |
| 任务取消 | `sdk.agent.cancelTask(taskId)` 可把 running task 标记为 cancelled 并追加 trace。 |
| 卸载 delete-data | 返回 deleted targets,覆盖 package、projection、readiness、storage namespace、adapter storage、artifact、evidence、task,并清空 adapter store。 |
| 主路径隔离 | 不新增 Tauri command,不写正式命令面板,不执行 App UI / worker。 |
## 文件边界
```text
src/features/agent-app/
├── adapters/
│ ├── AdapterCapabilityHost.ts
│ ├── AdapterCapabilityHost.test.ts
│ ├── InMemoryAgentAppCapabilityStore.ts
│ └── adapterCapabilityProfile.ts
├── sdk/
│ ├── CapabilityHost.ts
│ └── provenanceQuery.ts
└── ui/
└── AgentAppLabPage.tsx
```
## P2 不变量
1. P2 adapter host 只验证 capability facade 与 adapter seam,不代表正式 Artifact / Evidence Store 已接入。
2. P2 不改 AgentChat、Skill Catalog、Artifact 主 schema 或 command registry。
3. P2 的 adapter store 必须可以整体删除;失败时只需移除 `adapters/`、feature flag 和 Lab 分支。
4. 所有 adapter 产物和任务必须带 `agent_app` provenance,支持按 appId / entryKey / workflowRunId 查询。
5. P2 仍保持 UI / worker runtime 关闭,避免把未沙箱化 App 代码带入主路径。
@@ -0,0 +1,107 @@
# Agent App P3 UI Extension Host 技术设计
更新时间:2026-05-15
## 一句话目标
P3.1 在 P2 adapter 之后增加一个仍默认关闭的受控 UI Host:App 可以拥有自己的 `page / panel / settings` UI 表现形式,但 UI 只能在 Lab 实验岛里挂载,只能拿到 injected SDK bridge,不能注册主路由、不能访问 raw Tauri / Node API、不能执行 worker。
## 范围
| 范围 | 做 | 不做 |
|---|---|---|
| UI Runtime Flag | 新增 `VITE_LIME_AGENT_APP_UI_RUNTIME=1` 与 `uiRuntimeEnabled`。 | 不默认开启,不自动进入正式导航。 |
| Capability Profile | `buildUiRuntimeCapabilityProfile` 将 `lime.ui` 标记为 `native`,可叠加 mock 或 adapter capability。 | 不把 worker runtime 一起打开。 |
| UI Host | `UiExtensionHost.mountEntry()` 只允许 `page / panel / settings` entry。 | 不执行任意 JS、不加载远程资源、不运行 npm 依赖。 |
| Sandbox Contract | 输出 sandbox policy,明确阻断 raw Tauri、Node、未声明网络、下载和弹窗。 | 不把安全只做成 UI 提示。 |
| SDK Bridge | 输出 injected SDK bridge descriptor,只暴露 readiness 允许的 capability。 | App 不能 import Lime internal modules。 |
| Lab UI | Lab 中可点击 page entry 打开 UI Host 预览,并展示 bundle、route、sandbox、SDK bridge。 | 不修改 Workspace layout 或正式命令面板。 |
| Tests | 覆盖 flag、host mount、非 UI entry 拒绝、Lab UI 可视化。 | 不做完整业务 App UI。 |
## Feature Flag
```text
VITE_LIME_AGENT_APP_UI_RUNTIME=1
```
规则:
1. `uiRuntimeEnabled=false` 时,`UiExtensionHost.mountEntry()` 必须抛 `FEATURE_DISABLED`。
2. `uiRuntimeEnabled=true` 时,只自动打开 Lab / local package / projection / readiness / cleanup dry-run。
3. P3 不自动打开 `workerRuntimeEnabled`;worker 仍需要 P4 单独设计。
4. 若同时打开 `realAdapterEnabled=true`,UI Host 使用 adapter capability readiness;若只开 UI runtime,其他 capability 仍可能被 readiness 阻塞。
5. 关闭 `uiRuntimeEnabled` 后,所有 App UI 回退 Lab projection 展示。
## 架构图
```mermaid
flowchart TD
Lab[Agent App Lab] --> Entry[page / panel / settings entry]
Lab --> Profile[UI Runtime Capability Profile]
Entry --> Host[UiExtensionHost]
Profile --> Host
Host --> Sandbox[Sandbox Policy]
Host --> Bridge[Injected SDK Bridge Descriptor]
Bridge --> SDK[Capability SDK facade]
SDK --> Mock[Mock Host]
SDK --> Adapter[Adapter Host]
Host --> Fallback[Lab Projection Fallback]
```
关键点:
- `UiExtensionHost` 只负责挂载契约与边界,不拥有业务状态。
- `buildUiRuntimeCapabilityProfile` 只把 `lime.ui` 变成 native;其他能力仍来自 mock / adapter。
- `AgentAppLabPage` 只显示 P3 实验入口,不把 App entry 写入主产品路由。
## 运行时序
```mermaid
sequenceDiagram
participant User as 用户
participant Lab as Agent App Lab
participant Host as UiExtensionHost
participant Profile as Capability Profile
User->>Lab: 点击 page entry 的 Open UI Host
Lab->>Profile: 构建 UI runtime readiness
Lab->>Host: mountEntry(entryKey)
Host->>Host: 校验 uiRuntimeEnabled
Host->>Host: 校验 entry kind / UI bundle / readiness
Host-->>Lab: AgentAppUiMountResult
Lab-->>User: 展示 bundle、route、sandbox、SDK bridge
```
## 用例
| 用例 | 验收 |
|---|---|
| 开关关闭 | `mountEntry("dashboard")` 抛 `FEATURE_DISABLED`。 |
| Page entry | `mountEntry("dashboard")` 返回 `entryKind=page`、`bundlePath=./dist/ui`、`route=/dashboard`。 |
| Sandbox | `allowRawTauriApi=false`、`allowNodeApi=false`、`allowNetworkAccess=false`。 |
| SDK Bridge | 只列出 readiness 支持且启用的 capability,raw Tauri / Node 永远为 false。 |
| 非 UI entry | `mountEntry("content_scenario_planning")` 抛 `UI_ENTRY_UNSUPPORTED`。 |
| Lab UI | 开启 UI runtime 后,Entry 卡片出现 Open UI Host,面板展示 sandbox 与 SDK bridge。 |
| 主路径隔离 | 不新增 Tauri command,不注册主路由,不执行 App worker。 |
## 文件边界
```text
src/features/agent-app/
├── runtime/
│ ├── uiExtensionHost.ts
│ ├── uiExtensionHost.test.ts
│ └── uiRuntimeCapabilityProfile.ts
├── ui/
│ └── AgentAppLabPage.tsx
├── featureFlag.ts
└── types.ts
```
## P3 不变量
1. UI Host 是实验岛能力,不是正式 App 路由系统。
2. UI Host 不能绕过 Capability SDK;所有能力都必须经 injected SDK bridge。
3. UI Host 关闭后必须回退只读 projection,不影响 Chat、Skill、Artifact、Workspace 主路径。
4. P3 不执行 worker,不支持任意 JS worker、native binary、任意网络和任意文件访问。
5. 进入 P4 前,必须继续证明业务状态、Artifact、Evidence、cleanup 都仍按 app namespace 可追踪、可删除。
@@ -0,0 +1,101 @@
# Agent App P4 APP 内容工厂最小闭环
更新时间:2026-05-15
## 一句话目标
P4.1 用 APP 内容工厂验证 Agent App 不是专家聊天框,也不是 Markdown 声明,而是可以通过 Capability SDK 跑通自己的业务流程:创建项目、绑定知识、规划内容场景、生成内容资产、保存内容表 Artifact、记录 Evidence,并在卸载 delete-data 时可清理。
## 范围
| 范围 | 做 | 不做 |
|---|---|---|
| 业务闭环 | `runContentFactoryDemo()` 编排项目、知识、内容场景、内容资产、Artifact、Evidence。 | 不做完整 SaaS、不做外部平台 API。 |
| SDK 边界 | 只通过 `CapabilityHost` / `LimeAppSdk` 调用 storage、knowledge、agent、artifacts、evidence。 | 不 import Lime 内部 store、AgentChat 或 Artifact 主 schema。 |
| Storage | 写入 `projects/*`、`knowledge-bindings/*`、`content_scenarios/*`、`content-assets/*`。 | 不新增 Lime Core 业务表。 |
| Artifact | 生成 `content_table` 实验 Artifact。 | 不接正式 Artifact catalog。 |
| Evidence | 记录 `content_factory_demo`,refs 串联内容表、P2 adapter 产物、Evidence 和 task。 | 不伪造外部来源。 |
| Lab UI | Adapter 模式下展示 P4 demo 按钮和结果统计。 | 不进入正式主导航。 |
| Cleanup | 复用 adapter store delete-data 清理 storage、artifact、evidence、task。 | 不删除非 Agent App 数据。 |
## 架构图
```mermaid
flowchart TD
Lab[Agent App Lab] --> Demo[runContentFactoryDemo]
Demo --> Host[CapabilityHost]
Host --> SDK[LimeAppSdk]
SDK --> Storage[lime.storage namespace]
SDK --> Knowledge[lime.knowledge search]
SDK --> Agent[lime.agent task]
SDK --> Artifact[lime.artifacts.create]
SDK --> Evidence[lime.evidence.record]
Demo --> Result[Project / Content Scenarios / Assets / Artifact / Evidence]
```
## 运行时序
```mermaid
sequenceDiagram
participant User as 用户
participant Lab as Agent App Lab
participant Demo as Content Factory Demo
participant Host as AdapterCapabilityHost
participant SDK as LimeAppSdk
User->>Lab: 点击运行内容工厂闭环
Lab->>Demo: runContentFactoryDemo(host)
Demo->>Host: runEntry(content_scenario_planning)
Host-->>Demo: adapter run + task + knowledge + artifact + evidence
Demo->>Host: createSdkContext(content_scenario_planning, runId)
Demo->>SDK: storage.set(project / knowledge / content_scenarios / assets)
Demo->>SDK: knowledge.search(project)
Demo->>SDK: artifacts.create(content_table)
Demo->>SDK: evidence.record(content_factory_demo)
Demo-->>Lab: ContentFactoryDemoResult
Lab-->>User: 展示项目、内容场景数、内容资产数、Artifact、Evidence
```
## 验收
| 用例 | 验收 |
|---|---|
| 项目创建 | `projects/<projectId>` 写入 App namespace storage。 |
| 知识绑定 | `knowledge-bindings/<projectId>` 保存 `agentknowledge` binding 结果。 |
| 内容场景规划 | `content_scenarios/<projectId>` 保存场景、痛点、解决方案、决策阶段、标签。 |
| 内容资产 | `content-assets/<projectId>` 保存平台、格式、标题、正文、评分。 |
| 内容表 | Artifact kind 为 `content_table`,带 `agent_app` provenance。 |
| Evidence | Evidence kind 为 `content_factory_demo`,refs 包含内容表、adapter artifact、adapter evidence、task。 |
| 清理 | delete-data 后 storage、artifact、evidence、task 均清空。 |
| 隔离 | 不新增 Tauri command,不修改 AgentChat / Skill Catalog / Artifact 主 schema。 |
## 文件边界
```text
src/features/agent-app/
├── runtime/
│ ├── contentFactoryDemo.ts
│ └── contentFactoryDemo.test.ts
└── ui/
└── AgentAppLabPage.tsx
```
## P4.1 不变量
1. APP 内容工厂只是 Agent App 平台验证样板,不进入 Lime Core 垂直功能。
2. 业务状态必须写入 App namespace,不新增全局业务表。
3. 所有产物必须带 `sourceKind: agent_app` provenance。
4. cleanup / uninstall 必须覆盖 P4 demo 写入的数据。
5. P4.1 仍不等于完整内容系统;worker runtime、真实文件解析、批量生成、质量评分和 Cloud bootstrap 仍在后续阶段。
## P4.2 增量
P4.2 已把同一内容工厂闭环迁移到受控 workflow runtime 可执行路径:
- `runContentFactoryDemo({ workflowRuntime })` 使用 `WorkflowRuntimeHost.runWorkflow()` 执行 `content_factory_demo` definition。
- workflow 只允许白名单 DSL step,不执行 App package raw worker。
- `workerRuntimeEnabled` 受控开启,关闭时返回 `WORKFLOW_RUNTIME_DISABLED`。
- Lab 展示 workflow status、trace count、关键 step、raw worker / network block 状态。
- delete-data 清理仍依赖 `CapabilityHost` 写入的 storage、Artifact、Evidence 和 Task,不新增独立 runtime store。
详见 [p4-workflow-runtime.md](./p4-workflow-runtime.md)。
@@ -0,0 +1,174 @@
# Agent App P4.2 受控 Workflow Runtime
更新时间:2026-05-15
## 一句话目标
P4.2 把 P4.1 的“内置 demo 编排”推进为可执行的受控 workflow runtime:App 仍不能执行 raw worker bundle 或任意 JS,只能通过 Lime Desktop 提供的白名单 DSL step 调用 Capability SDK,并产出可取消、可追溯、可清理的运行记录。
## 背景
P4.1 已证明 APP 内容工厂可以作为 Product-level Agent App 跑通项目、知识、内容场景、内容资产、Artifact 和 Evidence;但它仍像一段内置 TypeScript 编排。下一步如果直接执行 App package 里的 worker,会过早暴露安全、资源、权限和清理风险。
因此 P4.2 先做“受控 workflow DSL runner”:
- 只执行 `storage.set`、`knowledge.search`、`agent.startTask`、`artifacts.create`、`evidence.record` 等白名单 step。
- `workerRuntimeEnabled` 默认关闭,开启后仍不执行 raw worker bundle。
- 每个 step 通过 `CapabilityHost` / `LimeAppSdk` 调用能力,不 import Lime 内部模块。
- runtime trace 只记录在 Lab 结果中;业务数据仍写入 App namespace,继续由 delete-data 清理。
## 目标与收益
| 目标 | 收益 |
|---|---|
| 把业务流程从散落的内置函数收敛成 workflow definition。 | 后续 App package 可以由 manifest / DSL 编译到同一 runner,避免每个 App 重复造 orchestration。 |
| 建立 runtime policy。 | 在真正 worker sandbox 前先固定安全边界,降低未来失败后清理成本。 |
| 建立 trace / cancel seam。 | UI 可以展示每一步执行结果,后续可接暂停、重试、回滚和 Evidence 归档。 |
| 继续复用 Capability SDK。 | App 能力调用层稳定,后续 SDK 升级不需要重写每个 App。 |
| 保持实验岛。 | 不污染 AgentChat、Skill Catalog、Artifact 主 schema 和 Workspace 主路径。 |
## 非目标
1. 不执行 App package 中的任意 JS / worker bundle。
2. 不新增 Tauri command。
3. 不把 workflow 注册进正式命令面板或 Workspace 主路由。
4. 不实现完整内容工厂 SaaS。
5. 不让 Lime Cloud / LimeCore 运行默认 Agent。
## 架构图
```mermaid
flowchart TD
Lab[Agent App Lab] --> Flags[workerRuntimeEnabled]
Flags --> Runtime[WorkflowRuntimeHost]
Runtime --> Policy[Runtime Policy]
Runtime --> Definition[Workflow Definition]
Definition --> Step[Allow-listed Step]
Step --> SDK[LimeAppSdk]
SDK --> Storage[lime.storage]
SDK --> Knowledge[lime.knowledge]
SDK --> Agent[lime.agent]
SDK --> Artifact[lime.artifacts]
SDK --> Evidence[lime.evidence]
Runtime --> Trace[Workflow Trace]
Runtime --> Result[P4 Content Demo Result]
```
## 时序图
```mermaid
sequenceDiagram
participant User as 用户
participant Lab as Agent App Lab
participant Demo as Content Demo
participant Runtime as WorkflowRuntimeHost
participant SDK as LimeAppSdk
participant Host as AdapterCapabilityHost
User->>Lab: 开启 realAdapter + workerRuntime 并运行 P4 demo
Lab->>Demo: runContentFactoryDemo(host, workflowRuntime)
Demo->>Host: runEntry(content_scenario_planning)
Host-->>Demo: source run + task + artifact + evidence
Demo->>Runtime: runWorkflow(content_factory_demo, runId)
Runtime->>Runtime: 校验 workerRuntimeEnabled / policy / entry kind
Runtime->>SDK: storage.set(project)
Runtime->>SDK: knowledge.search(project)
Runtime->>SDK: storage.set(knowledge / content_scenarios / assets)
Runtime->>SDK: artifacts.create(content_table)
Runtime->>SDK: evidence.record(content_factory_demo)
Runtime-->>Demo: run trace + outputs + refs
Demo-->>Lab: 项目、内容资产、Artifact、Evidence、workflow trace
```
## 流程图
```mermaid
flowchart LR
Start[runWorkflow] --> Enabled{workerRuntimeEnabled?}
Enabled -- no --> Disabled[WORKFLOW_RUNTIME_DISABLED]
Enabled -- yes --> Policy{Policy pass?}
Policy -- no --> Blocked[WORKFLOW_POLICY_VIOLATION]
Policy -- yes --> Entry{workflow entry?}
Entry -- no --> Blocked
Entry -- yes --> StepLoop[逐步执行白名单 step]
StepLoop --> Cancel{cancel requested?}
Cancel -- yes --> Cancelled[cancelled trace]
Cancel -- no --> Done{succeeded?}
Done -- no --> Failed[failed trace]
Done -- yes --> Success[succeeded trace + outputs]
```
## 用户故事
| 角色 | 故事 | 验收 |
|---|---|---|
| App 开发者 | 我希望把内容工厂流程声明成 workflow step,而不是写死在 Lime 内部。 | `runContentFactoryDemo()` 可通过 `WorkflowRuntimeHost` 执行 `content_factory_demo`。 |
| Lime 平台维护者 | 我希望 workflow 只能调用 SDK 能力,不直接碰内部 store。 | runner 只依赖 `CapabilityHost` / `LimeAppSdk`。 |
| 安全审查者 | 我希望 raw worker、外部代码、网络、文件系统默认被阻断。 | policy 固定 `allowRawWorker=false`、`allowExternalCode=false`、`allowNetworkAccess=false`、`allowFileSystemAccess=false`。 |
| 产品使用者 | 我希望看到 workflow 每一步是否成功。 | Lab 在 P4 demo 结果里展示 workflow status、trace count 和关键 step。 |
| 失败清理负责人 | 我希望实验失败后能删除业务数据。 | workflow 写入的 storage / artifact / evidence 仍由 adapter delete-data 清理。 |
## 当前落地
| 文件 | 作用 |
|---|---|
| `src/features/agent-app/runtime/runtimePolicy.ts` | 定义白名单 step kind 与默认 runtime policy。 |
| `src/features/agent-app/runtime/workflowRuntimeHost.ts` | 执行受控 workflow、生成 trace、支持 step 间取消。 |
| `src/features/agent-app/runtime/workflowRuntimeCapabilityProfile.ts` | 在 `workerRuntimeEnabled=true` 时把 `lime.workflow` 标记为 native。 |
| `src/features/agent-app/runtime/contentFactoryDemo.ts` | 支持把 P4 demo 迁移到受控 workflow DSL。 |
| `src/features/agent-app/ui/AgentAppLabPage.tsx` | Lab 展示 P4.2 policy hint、trace count 和关键 step。 |
| `src/i18n/resources/*/agent.json` | 补齐五语言 UI 文案。 |
## Runtime Policy
```ts
{
maxSteps: 24,
maxTraceEvents: 96,
allowedStepKinds: [
"storage.set",
"knowledge.search",
"agent.startTask",
"artifacts.create",
"evidence.record"
],
allowRawWorker: false,
allowExternalCode: false,
allowNetworkAccess: false,
allowFileSystemAccess: false
}
```
## 用例
| 用例 | 结果 |
|---|---|
| workflow runtime 默认关闭 | `WorkflowRuntimeHost.runWorkflow()` 返回 `WORKFLOW_RUNTIME_DISABLED`。 |
| 运行内容工厂 P4 demo | 生成 project、knowledge binding、content_scenarios、content assets、content table Artifact、Evidence 和 workflow trace。 |
| policy 禁止某类 step | 返回 `WORKFLOW_POLICY_VIOLATION`,不执行后续 step。 |
| step 间取消 | runtime 返回 `cancelled`,已完成 step 的数据保留并可由 delete-data 清理,后续 Artifact 不生成。 |
| raw worker / network 类 step | 被 policy 拒绝,不进入执行阶段。 |
## 清理与失败退出
P4.2 不新增独立持久化 runtime store。workflow 产生的业务数据全部通过 SDK 写入 App namespace:
- `projects/*`
- `knowledge-bindings/*`
- `content_scenarios/*`
- `content-assets/*`
- `content_table` Artifact
- `content_factory_demo` Evidence
如果路线失败,关闭 `VITE_LIME_AGENT_APP_WORKFLOW_RUNTIME` / `workerRuntimeEnabled` 即可让 workflow runner 失效;delete-data 仍由 `AdapterCapabilityHost.uninstall()` 清理 storage、Artifact、Evidence、Task。
## 验收命令
```bash
npm run test -- \
src/features/agent-app/runtime/workflowRuntimeHost.test.ts \
src/features/agent-app/runtime/contentFactoryDemo.test.ts \
src/features/agent-app/ui/AgentAppLabPage.test.tsx
```
进入正式主路径前仍需补:真实 worker sandbox、资源限额、长期 trace 持久化、UI 级取消按钮、package hash 校验和 Cloud bootstrap。