From 446c7b0c1fdf5e6c121eed3fcad6f66495fad4a2 Mon Sep 17 00:00:00 2001 From: coso Date: Fri, 15 May 2026 09:54:30 +0800 Subject: [PATCH] docs: align agent app roadmap with v0.3 --- docs/roadmap/agentapp/README.md | 38 ++-- docs/roadmap/agentapp/capability-sdk.md | 16 +- ...-engineering.md => content-factory-app.md} | 92 ++++----- docs/roadmap/agentapp/implementation-plan.md | 110 +++++++---- docs/roadmap/agentapp/p0-technical-design.md | 71 ++++--- .../agentapp/p1-mock-capability-host.md | 108 +++++++++++ .../agentapp/p2-adapter-capability-host.md | 118 ++++++++++++ docs/roadmap/agentapp/p3-ui-extension-host.md | 107 +++++++++++ .../agentapp/p4-content-factory-demo.md | 101 ++++++++++ docs/roadmap/agentapp/p4-workflow-runtime.md | 174 ++++++++++++++++++ 10 files changed, 792 insertions(+), 143 deletions(-) rename docs/roadmap/agentapp/{ai-content-engineering.md => content-factory-app.md} (78%) create mode 100644 docs/roadmap/agentapp/p1-mock-capability-host.md create mode 100644 docs/roadmap/agentapp/p2-adapter-capability-host.md create mode 100644 docs/roadmap/agentapp/p3-ui-extension-host.md create mode 100644 docs/roadmap/agentapp/p4-content-factory-demo.md create mode 100644 docs/roadmap/agentapp/p4-workflow-runtime.md diff --git a/docs/roadmap/agentapp/README.md b/docs/roadmap/agentapp/README.md index b51c631a4..81b5aff96 100644 --- a/docs/roadmap/agentapp/README.md +++ b/docs/roadmap/agentapp/README.md @@ -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 实验岛。 diff --git a/docs/roadmap/agentapp/capability-sdk.md b/docs/roadmap/agentapp/capability-sdk.md index 32e2d2759..12278b422 100644 --- a/docs/roadmap/agentapp/capability-sdk.md +++ b/docs/roadmap/agentapp/capability-sdk.md @@ -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。 diff --git a/docs/roadmap/agentapp/ai-content-engineering.md b/docs/roadmap/agentapp/content-factory-app.md similarity index 78% rename from docs/roadmap/agentapp/ai-content-engineering.md rename to docs/roadmap/agentapp/content-factory-app.md index b8da46066..9dcd960fe 100644 --- a/docs/roadmap/agentapp/ai-content-engineering.md +++ b/docs/roadmap/agentapp/content-factory-app.md @@ -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 控制面边界稳定后,再进入真实文件解析、批量生成、质量评分和外部平台数据复盘。 diff --git a/docs/roadmap/agentapp/implementation-plan.md b/docs/roadmap/agentapp/implementation-plan.md index 42d37db85..74a74b0f1 100644 --- a/docs/roadmap/agentapp/implementation-plan.md +++ b/docs/roadmap/agentapp/implementation-plan.md @@ -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 边界。 diff --git a/docs/roadmap/agentapp/p0-technical-design.md b/docs/roadmap/agentapp/p0-technical-design.md index ba2be783f..980cbcfe4 100644 --- a/docs/roadmap/agentapp/p0-technical-design.md +++ b/docs/roadmap/agentapp/p0-technical-design.md @@ -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`。 | diff --git a/docs/roadmap/agentapp/p1-mock-capability-host.md b/docs/roadmap/agentapp/p1-mock-capability-host.md new file mode 100644 index 000000000..5a00661f9 --- /dev/null +++ b/docs/roadmap/agentapp/p1-mock-capability-host.md @@ -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/ + 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 关闭。 + diff --git a/docs/roadmap/agentapp/p2-adapter-capability-host.md b/docs/roadmap/agentapp/p2-adapter-capability-host.md new file mode 100644 index 000000000..2ed8759d0 --- /dev/null +++ b/docs/roadmap/agentapp/p2-adapter-capability-host.md @@ -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/) + 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 代码带入主路径。 diff --git a/docs/roadmap/agentapp/p3-ui-extension-host.md b/docs/roadmap/agentapp/p3-ui-extension-host.md new file mode 100644 index 000000000..6a50312b1 --- /dev/null +++ b/docs/roadmap/agentapp/p3-ui-extension-host.md @@ -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 可追踪、可删除。 diff --git a/docs/roadmap/agentapp/p4-content-factory-demo.md b/docs/roadmap/agentapp/p4-content-factory-demo.md new file mode 100644 index 000000000..fefb65aac --- /dev/null +++ b/docs/roadmap/agentapp/p4-content-factory-demo.md @@ -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/` 写入 App namespace storage。 | +| 知识绑定 | `knowledge-bindings/` 保存 `agentknowledge` binding 结果。 | +| 内容场景规划 | `content_scenarios/` 保存场景、痛点、解决方案、决策阶段、标签。 | +| 内容资产 | `content-assets/` 保存平台、格式、标题、正文、评分。 | +| 内容表 | 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)。 diff --git a/docs/roadmap/agentapp/p4-workflow-runtime.md b/docs/roadmap/agentapp/p4-workflow-runtime.md new file mode 100644 index 000000000..db2195ca2 --- /dev/null +++ b/docs/roadmap/agentapp/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。