mirror of
https://github.com/aiclientproxy/proxycast.git
synced 2026-09-24 23:10:56 +08:00
docs: align agent app roadmap with v0.3
This commit is contained in:
@@ -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 实验岛。
|
||||
|
||||
@@ -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。
|
||||
|
||||
|
||||
+46
-46
@@ -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 控制面边界稳定后,再进入真实文件解析、批量生成、质量评分和外部平台数据复盘。
|
||||
@@ -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 边界。
|
||||
|
||||
@@ -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。
|
||||
Reference in New Issue
Block a user