# Task: AI 设计项目多会话客户端 ## Identity - Task ID: 20260806-design-multisession-ui-4e7d - Mode: Feature - Branch: codex/20260806-design-multisession-ui-4e7d-design-multisession-ui - Worktree: D:\Datas\OthersProjects\makelore-design-multisession-4e7d - Base commit: 498089401708dc08123141891dba9b54e47cefea - Owner: codex - Status: Completed ## Scope - Extend the shared AI Design contract with project Conversations and Conversation-tagged events/tasks. - Add Electron adapter and host API support for listing, creating, reading and submitting to a Conversation. - Add renderer store state/actions for the active Conversation and protect asynchronous/streaming updates with Workspace + Conversation identity. - Add a compact Conversation selector and “new conversation” action to AI Design while leaving the generation-task panel project-scoped. - Migrate the local fallback Workspace data model to create a default Conversation. - Cover adapter, route, store and page behavior, including Conversation switching and project-level task persistence. ## Intent And Constraints - Product model: one design project contains multiple independent conversations; starting a new conversation must not create a new project. - The selected Conversation owns messages, Brief, Quote and `turnRevision`; changing Conversations must not leak pending or streaming text. - Generation tasks and assets belong to the project and remain visible when the selected Conversation changes. - Each Conversation uses its stable Gateway Session/stream. Switching Conversation reconnects to that Session without changing projects; task events delivered on any Conversation stream are still reduced by `workspaceId` only. - Preserve compatibility with the deployed single-conversation server during rollout where practical, without retaining two sources of client state. - Keep the existing visual language and input behavior, including Enter to send, Shift+Enter for newline and IME composition protection. ## Outcome - Split the client model into Workspace, Conversation and Workspace-owned generation tasks, including local v2-to-v3 migration of the previous single chat into a default historical Conversation. - Added Electron/host APIs for Conversation list/create/read/turn/confirm/event flows and reused the server-owned persistent Gateway Session for each Conversation. - Added active Conversation state, guarded async/stream updates by Workspace + Conversation identity, and preserved the Workspace task list while switching chats. - Added generation-token and monotonic-revision guards for Conversation/Workspace ABA races, including late failures. - Task event watermarks now advance only from real stream events; REST freshness continues to use per-task `updatedAt`. - Added Conversation switching and new-Conversation actions to both the AI Design header and expanded project sidebar, with a global in-flight guard against duplicate creation. - Preserved composer keyboard behavior: Enter sends, Shift+Enter inserts a newline, and IME composition Enter is ignored. ## Verification - TypeScript `tsc --noEmit`: passed. - Focused AI Design suites: `7 files / 93 tests passed`, including all 19 migrated adapter behavior tests. - ESLint for all changed TypeScript/TSX files: passed. - Production Vite + Electron build: passed; only existing chunk-size/dynamic-import warnings remain. - Full Vitest run is not green on the base environment: 19 failures reproduce in the original client tree (missing `zip`/`.opencode` resources and existing timing checks); one additional speech-transcription test is outside this task's diff and passes only with the user's uncommitted original-tree changes. ## Follow-ups - Publish only after server migration `0033` and the multi-conversation API are live. - Consider pagination/search when a project grows beyond the six recent Conversations shown inline in the sidebar. ## Promotion Candidates - Promote Workspace/Conversation/Task client-state ownership and stream routing into the canonical client architecture/current-state documents during integration.