整合 Enter 发送与多会话交互,保留服务端持久 Conversation Session,并补齐迁移、回归、Electron E2E 与 canonical 文档。
2.4 KiB
2.4 KiB
ADR-001: AI 绘画 Workspace / Conversation 状态归属
Status
Accepted
Date
2026-08-11
Context
旧客户端把一个 AI 绘画 Workspace 等同于一条持续对话,并由客户端按 Workspace 创建和回收临时 Agent Session。多会话产品模型要求同一设计项目内存在多条独立对话,同时保留项目级生成任务与资产。继续沿用旧 Session 所有权会让注销时的远端 DELETE 破坏 Conversation 的持久上下文。
Decision
- Workspace 持有项目身份、Conversation 列表、生成任务和资产。
- Conversation 持有消息、Brief、Quote、
turnRevision以及服务端持久 Agent Gateway Session 的绑定。 - 新建 Conversation 不创建新 Workspace;切换 Conversation 只读取该对话并重连其事件流,项目级任务和资产保持可见。
- Conversation 异步与流式更新必须同时校验 Workspace + Conversation 身份;Task 更新按 Workspace 归并。
- 客户端不创建、旋转或在注销/退出时 DELETE 服务端持久 Conversation Session。终端清理只关闭本地流、清除本机 Session-id 缓存和本地凭据;后续访问重新从 Conversation API 读取 Session。
- 未打包的本地开发适配器把旧单会话 schema v2 迁移为带默认 Conversation 的 schema v3;该适配器不得成为打包应用的云端失败回退。
Rationale
该分层与用户可见的“一个设计项目,多条独立会话,共享生成结果”一致,并让 Session 生命周期由持久化 Conversation 的服务端权威管理。Workspace + Conversation 双重身份和 generation/revision 防护可以阻止切换过程中的迟到异步结果污染当前对话。
Consequences
- 客户端发布前必须先部署服务端迁移
0033与多 Conversation API。 - 退出登录不会删除远端 Conversation Session;服务端继续通过认证与授权控制访问。
- Renderer、Host API、云端适配器和本地开发适配器都必须保持相同的 Workspace / Conversation / Task 所有权语义。
- Conversation 数量增长后可能需要分页和搜索;当前侧栏只内联展示近期会话。
Supersedes
- 旧的未文档化“每个 Workspace 由客户端创建并在注销时删除临时事件 Session”实现。
Related
498089401708dc08123141891dba9b54e47cefea03dae62cf35d643bba253d1013579cc3f4f528e4.project-docs/30-worklog/tasks/20260806-design-multisession-ui-4e7d.md