• Will Chen's avatar
    Support concurrent chats (#1478) · 9691c983
    Will Chen 提交于
    Fixes #212 
    
    
    <!-- CURSOR_SUMMARY -->
    ---
    
    > [!NOTE]
    > Add concurrent chat support with per-chat state, chat activity UI, IPC
    per-chat handling, and accompanying tests.
    > 
    > - **Frontend (Chat concurrency)**
    > - Replace global chat atoms with per-chat maps:
    `chatMessagesByIdAtom`, `isStreamingByIdAtom`, `chatErrorByIdAtom`,
    `chatStreamCountByIdAtom`, `recentStreamChatIdsAtom`.
    > - Update `ChatPanel`, `ChatInput`, `MessagesList`,
    `DyadMarkdownParser`, and `useVersions` to read/write per-chat state.
    > - Add `useSelectChat` to centralize selecting/navigating chats; wire
    into `ChatList`.
    > - **UI**
    > - Add chat activity popover: `ChatActivityButton` and list; integrate
    into `preview_panel/ActionHeader` (renamed from `PreviewHeader`) and
    swap in `TitleBar`.
    > - **IPC/Main**
    > - Send error payloads with `chatId` on `chat:response:error`; update
    `ipc_client` to route errors per chat.
    > - Persist streaming partial assistant content periodically; improve
    cancellation/end handling.
    > - Make `FileUploadsState` per-chat (`addFileUpload({chatId,fileId},
    ...)`, `clear(chatId)`, `getFileUploadsForChat(chatId)`); update
    handlers/processors accordingly.
    > - **Testing**
    > - Add e2e `concurrent_chat.spec.ts` and snapshots; extend helpers
    (`snapshotMessages` timeout, chat activity helpers).
    > - Fake LLM server: support `tc=` with options, optional sleep delay to
    simulate concurrency.
    > 
    > <sup>Written by [Cursor
    Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
    9035f30b73a1f2e5a366a0cac1c63411742b16f3. This will update automatically
    on new commits. Configure
    [here](https://cursor.com/dashboard?tab=bugbot).</sup>
    <!-- /CURSOR_SUMMARY -->
    9691c983
名称
最后提交
最后更新
.cursor/rules 正在载入提交数据...
.devcontainer 正在载入提交数据...
.github 正在载入提交数据...
.husky 正在载入提交数据...
assets 正在载入提交数据...
docs 正在载入提交数据...
drizzle 正在载入提交数据...
e2e-tests 正在载入提交数据...
packages/@dyad-sh 正在载入提交数据...
scaffold 正在载入提交数据...
scripts 正在载入提交数据...
shared 正在载入提交数据...
src 正在载入提交数据...
testing 正在载入提交数据...
tools 正在载入提交数据...
worker 正在载入提交数据...
workers/tsc 正在载入提交数据...
.cursorignore 正在载入提交数据...
.env.example 正在载入提交数据...
.eslintrc.json 正在载入提交数据...
.gitattributes 正在载入提交数据...
.gitignore 正在载入提交数据...
.oxlintrc.json 正在载入提交数据...
.prettierignore 正在载入提交数据...
.prettierrc 正在载入提交数据...
CONTRIBUTING.md 正在载入提交数据...
LICENSE 正在载入提交数据...
README.md 正在载入提交数据...
SECURITY.md 正在载入提交数据...
biome.json 正在载入提交数据...
components.json 正在载入提交数据...
drizzle.config.ts 正在载入提交数据...
forge.config.ts 正在载入提交数据...
forge.env.d.ts 正在载入提交数据...
index.html 正在载入提交数据...
merge.config.ts 正在载入提交数据...
package-lock.json 正在载入提交数据...
package.json 正在载入提交数据...
playwright.config.ts 正在载入提交数据...
tsconfig.app.json 正在载入提交数据...
tsconfig.json 正在载入提交数据...
tsconfig.node.json 正在载入提交数据...
vite.main.config.mts 正在载入提交数据...
vite.preload.config.mts 正在载入提交数据...
vite.renderer.config.mts 正在载入提交数据...
vite.worker.config.mts 正在载入提交数据...
vitest.config.ts 正在载入提交数据...