端到端重构创作台为 5 步 task-first Agent 创作流程
1. 背景
KidMemory 桌面端的「创作台」是未来 Agent 产品形态的核心入口,但当前 Issue #2 原始提案已经落后于仓库现状:
- 仓库当前 canonical creation flow 已明确为:
Compose -> Plan -> Generate -> Review -> Publish
- 仓库当前 canonical API 已明确为:
/creation/tasks
- 协议和 Sidecar 当前实现方向已明确为单一
taskId 的 task-first 模型
- 旧提案中的
/creation/jobs、planId -> jobId 双身份流、以及“优先复用 books/jobs 运行时”的表述,已经不再符合当前代码库方向
因此,本 Issue 的目标不再是引入一套新的 jobs/plan 双资源模型,而是:
- 保留原始 Issue 的产品目标:把创作台重构为 5 步 Agent 创作工作台
- 按当前仓库事实统一为 task-first 方案
- 补齐桌面端工作台 UI、阶段状态、预览/导出/分享体验和端到端验证
- 清理仍残留在文档、测试、客户端或 UI 心智中的旧 jobs/dual-id 叙事
2. 最终决策
本 Issue 采用以下最终方案:
- 保留 5 步主流程,但统一到 canonical vocabulary:
Compose
Plan
Generate
Review
Publish
- 保留当前 KidMemory 暖色、本地优先、桌面工作台式布局方向:左侧导航、中间主工作区、右侧控制台
- 统一使用 task-first 架构:创作主路径只存在一个
taskId
- 不再引入或恢复
/creation/jobs、planId、jobId 主流程模型
- Plan 是 task 生命周期中的一个阶段,不是先创建 plan 再转成另一个 job 的独立主资源
- 当前 UI 中的中文文案可以继续保留“准备创作 / 计划确认 / 结果预览 / 导出分享”等表达,但它们必须映射到 canonical 5-stage 模型,而不能再驱动另一套独立状态体系
3. 用户故事
US1
作为用户,我希望进入创作台时只看到当前阶段真正需要完成的事情,以便我清楚知道下一步是整理需求、确认计划、等待生成、检查结果还是发布作品。
US2
作为用户,我希望创作台更像一个连续的 Agent 工作台,而不是同时堆满配置、日志、预览和导出区域的表单页。
US3
作为用户,我希望填写创作目标和选择素材后,系统先生成并展示一份可以确认的创作计划,再开始真正生成。
US4
作为用户,我希望绘本、成长纪念册和回忆视频都走真实后端 task 流程,而不是前端静态模拟。
US5
作为用户,我希望在生成中看到真实阶段、真实步骤和真实失败原因,以便理解当前卡在哪里。
US6
作为用户,我希望生成完成后能进入明确的 Review 阶段查看 PDF 或 MP4,再决定导出或分享。
US7
作为用户,我希望在创建 Web 分享链接前得到一次明确确认,以便知道作品会被上传用于分享。
US8
作为维护者,我希望创作主链路只保留一个 canonical API 和一个 canonical identity,避免旧 jobs 模型回流造成再次迁移。
4. 目标
本 Issue 要完成:
- 将当前
GenerateExportPage 收敛为一个 5 步 task-first Agent 创作工作台
- 桌面端、Sidecar、protocol、相关文档和测试统一使用
/creation/tasks
- 主流程统一使用单一
taskId
POST /creation/tasks 负责创建任务并完成 plan 阶段
POST /creation/tasks/{taskId}/generate 负责触发生成阶段
GET /creation/tasks/{taskId}、events、preview、export、share 构成同一 task 生命周期的读取/动作接口
- 创作类型支持:
storybook
memory_book
memoir_video
storybook / memory_book 的 Review 结果为可预览书稿,并支持导出 PDF
memoir_video 的 Review 结果为可播放/可打开的视频制品,并支持导出 MP4
- Publish 阶段支持 Web 分享链接创建,且分享前必须用户确认
- 回忆视频流程在缺少 FFmpeg 时走现有自动处理路径,不额外弹出用户确认
- UI 保持一个连续工作台,而不是做成 11 个彼此割裂的独立页面
- 清理或更新所有仍在传播
/creation/jobs、planId、jobId 主流程心智的代码、文档、测试和客户端引用
5. 不做什么
本 Issue 不处理:
- 不恢复
/creation/jobs 兼容主路径
- 不恢复
planId -> jobId 双身份主流程
- 不为了“兼容历史提案”重新引入 books/jobs 运行时依赖
- 不新增 cloud-api 侧 Agent runtime
- 不新增独立作品库页面
- 不新增独立 Skill 市场
- 不新增独立 Hyperframes 编辑器
- 不新增 SSE / WebSocket;本轮仍可使用轮询
- 不做任务取消能力
- 不做假进度百分比
- 不在普通用户页面暴露
taskId 等技术词;仅日志/调试可见
6. 产品方案
6.1 主流程
创作台按以下 5 个主阶段组织:
- Compose
- Plan
- Generate
- Review
- Publish
中文 UI 文案可以继续使用更自然的表达,例如:
- Compose -> 准备创作
- Plan -> 计划确认
- Generate -> 生成中
- Review -> 结果预览
- Publish -> 导出分享
但设计、状态映射、实现和验收都必须以 canonical 5-stage 模型为准。
6.2 页面布局
整体布局保持当前方向:
- Sidebar:KidMemory 现有左侧导航
- MainStage:连续创作工作流主内容
- RightPanel:当前阶段相关的设置摘要、状态摘要或动作区
6.3 信息架构原则
- Compose 阶段聚焦:目标、创作类型、素材状态、开始规划
- Plan 阶段聚焦:计划摘要、Skill、步骤、前置条件、确认生成
- Generate 阶段聚焦:真实步骤、当前状态、活动日志、失败原因
- Review 阶段聚焦:预览结果、检查质量、决定是否导出/分享
- Publish 阶段聚焦:导出结果、分享确认、分享结果
原则上不在 Compose 阶段展示大面积空预览或导出结果区,不让页面重新退化成 settings-first 工具页。
6.4 状态表达
允许存在比 5 个主阶段更细的 UI 子状态,但这些子状态必须是 同一个工作台内部的阶段细化,而不是新的顶层流程模型。
允许的典型细化示例:
- Compose:素材不足 / 可开始规划
- Plan:规划中 / 计划已生成 / 规划失败
- Generate:创建生成任务中 / 环境准备中 / 生成中 / 生成失败
- Review:PDF 预览 / MP4 预览 / 预览失败
- Publish:导出中 / 分享确认 / 分享中 / 分享完成 / 分享失败
不要求机械地维持“11 个固定状态名”作为产品主模型;核心要求是:这些状态都能在 5-stage workbench 中被清晰表达。
7. 技术方案
7.1 Canonical API
本 Issue 只认以下 task-first API:
POST /creation/tasks
POST /creation/tasks/{taskId}/generate
GET /creation/tasks/{taskId}
GET /creation/tasks/{taskId}/events
GET /creation/tasks/{taskId}/preview
POST /creation/tasks/{taskId}/export
POST /creation/tasks/{taskId}/share
7.2 Identity model
创作主流程只存在一个 identity:
明确禁止:
- 在创作主流程重新引入
planId
- 在创作主流程重新引入
jobId
- 增加
plan -> job 兼容适配层,除非后续单独出现“仍在运行的既有客户端必须兼容”的明确需求
7.3 Task lifecycle
POST /creation/tasks:创建 task,并完成 Plan 阶段
- 任务成功返回
status: ready,失败返回 status: failed
POST /creation/tasks/{taskId}/generate:在同一 taskId 上继续 Generate 阶段
- Review / Publish 继续复用同一 task 的详情、制品和事件流
7.4 Runtime boundary
- Sidecar 继续作为本地受信边界,负责 task 编排、任务状态、预览、导出、分享、本地依赖修复
@kidmemory/agent-runtime 继续作为受控运行时能力,不重新把业务编排拉回旧 books/jobs 模式
- 不引入与 task-first 边界冲突的 legacy runtime 恢复动作
8. 设计要求
- 视觉风格与当前 KidMemory 桌面端一致
- 保持暖色、本地优先、亲子感、非 SaaS 紫色风
- 5 个主阶段关系清晰
- 中间态要告诉用户:当前在做什么、为什么要等待、失败后怎么办
- Review 必须成为预览和确认的主阶段,而不是生成后顺手弹出的附属区域
- Publish 必须作为最终阶段承载导出与分享,分享前必须明确确认
- 1280px、1440px、1728px 宽度下不出现布局溢出
- 低高度窗口可滚动,不出现 Flutter overflow
9. 验收标准
架构 / 协议
Sidecar / Runtime
Desktop / UX
验证
10. 备注
如果后续发现某个仍在使用的旧客户端必须兼容旧接口,必须单独新增 issue,明确:
- 为什么必须兼容
- 兼容层的 owner
- 兼容层的删除条件
- 为什么它不会重新把 creation 主流程拉回双模型
在没有这类明确需求之前,本 Issue 以 一个 canonical API、一个 canonical identity、一个 canonical creation runtime boundary 为完成标准。
端到端重构创作台为 5 步 task-first Agent 创作流程
1. 背景
KidMemory 桌面端的「创作台」是未来 Agent 产品形态的核心入口,但当前 Issue #2 原始提案已经落后于仓库现状:
Compose -> Plan -> Generate -> Review -> Publish/creation/taskstaskId的 task-first 模型/creation/jobs、planId -> jobId双身份流、以及“优先复用 books/jobs 运行时”的表述,已经不再符合当前代码库方向因此,本 Issue 的目标不再是引入一套新的 jobs/plan 双资源模型,而是:
2. 最终决策
本 Issue 采用以下最终方案:
ComposePlanGenerateReviewPublishtaskId/creation/jobs、planId、jobId主流程模型3. 用户故事
US1
作为用户,我希望进入创作台时只看到当前阶段真正需要完成的事情,以便我清楚知道下一步是整理需求、确认计划、等待生成、检查结果还是发布作品。
US2
作为用户,我希望创作台更像一个连续的 Agent 工作台,而不是同时堆满配置、日志、预览和导出区域的表单页。
US3
作为用户,我希望填写创作目标和选择素材后,系统先生成并展示一份可以确认的创作计划,再开始真正生成。
US4
作为用户,我希望绘本、成长纪念册和回忆视频都走真实后端 task 流程,而不是前端静态模拟。
US5
作为用户,我希望在生成中看到真实阶段、真实步骤和真实失败原因,以便理解当前卡在哪里。
US6
作为用户,我希望生成完成后能进入明确的 Review 阶段查看 PDF 或 MP4,再决定导出或分享。
US7
作为用户,我希望在创建 Web 分享链接前得到一次明确确认,以便知道作品会被上传用于分享。
US8
作为维护者,我希望创作主链路只保留一个 canonical API 和一个 canonical identity,避免旧 jobs 模型回流造成再次迁移。
4. 目标
本 Issue 要完成:
GenerateExportPage收敛为一个 5 步 task-first Agent 创作工作台/creation/taskstaskIdPOST /creation/tasks负责创建任务并完成 plan 阶段POST /creation/tasks/{taskId}/generate负责触发生成阶段GET /creation/tasks/{taskId}、events、preview、export、share构成同一 task 生命周期的读取/动作接口storybookmemory_bookmemoir_videostorybook/memory_book的 Review 结果为可预览书稿,并支持导出 PDFmemoir_video的 Review 结果为可播放/可打开的视频制品,并支持导出 MP4/creation/jobs、planId、jobId主流程心智的代码、文档、测试和客户端引用5. 不做什么
本 Issue 不处理:
/creation/jobs兼容主路径planId -> jobId双身份主流程taskId等技术词;仅日志/调试可见6. 产品方案
6.1 主流程
创作台按以下 5 个主阶段组织:
中文 UI 文案可以继续使用更自然的表达,例如:
但设计、状态映射、实现和验收都必须以 canonical 5-stage 模型为准。
6.2 页面布局
整体布局保持当前方向:
6.3 信息架构原则
原则上不在 Compose 阶段展示大面积空预览或导出结果区,不让页面重新退化成 settings-first 工具页。
6.4 状态表达
允许存在比 5 个主阶段更细的 UI 子状态,但这些子状态必须是 同一个工作台内部的阶段细化,而不是新的顶层流程模型。
允许的典型细化示例:
不要求机械地维持“11 个固定状态名”作为产品主模型;核心要求是:这些状态都能在 5-stage workbench 中被清晰表达。
7. 技术方案
7.1 Canonical API
本 Issue 只认以下 task-first API:
POST /creation/tasksPOST /creation/tasks/{taskId}/generateGET /creation/tasks/{taskId}GET /creation/tasks/{taskId}/eventsGET /creation/tasks/{taskId}/previewPOST /creation/tasks/{taskId}/exportPOST /creation/tasks/{taskId}/share7.2 Identity model
创作主流程只存在一个 identity:
taskId明确禁止:
planIdjobIdplan -> job兼容适配层,除非后续单独出现“仍在运行的既有客户端必须兼容”的明确需求7.3 Task lifecycle
POST /creation/tasks:创建 task,并完成 Plan 阶段status: ready,失败返回status: failedPOST /creation/tasks/{taskId}/generate:在同一taskId上继续 Generate 阶段7.4 Runtime boundary
@kidmemory/agent-runtime继续作为受控运行时能力,不重新把业务编排拉回旧 books/jobs 模式8. 设计要求
9. 验收标准
架构 / 协议
/creation/taskstaskId/creation/jobs或planId/jobId兼容主路径Sidecar / Runtime
Desktop / UX
GenerateExportPage被实现为连续的 5-stage workbench验证
10. 备注
如果后续发现某个仍在使用的旧客户端必须兼容旧接口,必须单独新增 issue,明确:
在没有这类明确需求之前,本 Issue 以 一个 canonical API、一个 canonical identity、一个 canonical creation runtime boundary 为完成标准。