• 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
名称
最后提交
最后更新
..
chat 正在载入提交数据...
preview_panel 正在载入提交数据...
settings 正在载入提交数据...
ui 正在载入提交数据...
AppList.tsx 正在载入提交数据...
AppSearchDialog.tsx 正在载入提交数据...
AppUpgrades.tsx 正在载入提交数据...
AutoApproveSwitch.tsx 正在载入提交数据...
AutoFixProblemsSwitch.tsx 正在载入提交数据...
AutoUpdateSwitch.tsx 正在载入提交数据...
CapacitorControls.tsx 正在载入提交数据...
ChatInputControls.tsx 正在载入提交数据...
ChatList.tsx 正在载入提交数据...
ChatModeSelector.tsx 正在载入提交数据...
ChatPanel.tsx 正在载入提交数据...
ChatSearchDialog.tsx 正在载入提交数据...
CommunityCodeConsentDialog.tsx 正在载入提交数据...
ConfirmationDialog.tsx 正在载入提交数据...
ContextFilesPicker.tsx 正在载入提交数据...
CreateAppDialog.tsx 正在载入提交数据...
CreateCustomModelDialog.tsx 正在载入提交数据...
CreateCustomProviderDialog.tsx 正在载入提交数据...
CreatePromptDialog.tsx 正在载入提交数据...
CustomErrorToast.tsx 正在载入提交数据...
DeleteConfirmationDialog.tsx 正在载入提交数据...
DyadProSuccessDialog.tsx 正在载入提交数据...
EditCustomModelDialog.tsx 正在载入提交数据...
ErrorBoundary.tsx 正在载入提交数据...
GitHubConnector.tsx 正在载入提交数据...
GitHubIntegration.tsx 正在载入提交数据...
HelpBotDialog.tsx 正在载入提交数据...
HelpDialog.tsx 正在载入提交数据...
ImportAppButton.tsx 正在载入提交数据...
ImportAppDialog.tsx 正在载入提交数据...
InputRequestToast.tsx 正在载入提交数据...
LoadingBlock.tsx 正在载入提交数据...
MaxChatTurnsSelector.tsx 正在载入提交数据...
McpConsentToast.tsx 正在载入提交数据...
McpToolsPicker.tsx 正在载入提交数据...
ModelPicker.tsx 正在载入提交数据...
NeonConnector.tsx 正在载入提交数据...
NeonDisconnectButton.tsx 正在载入提交数据...
NeonIntegration.tsx 正在载入提交数据...
PortalMigrate.tsx 正在载入提交数据...
PriceBadge.tsx 正在载入提交数据...
ProBanner.tsx 正在载入提交数据...
ProModeSelector.tsx 正在载入提交数据...
ProviderSettings.tsx 正在载入提交数据...
ReleaseChannelSelector.tsx 正在载入提交数据...
RuntimeModeSelector.tsx 正在载入提交数据...
SettingsList.tsx 正在载入提交数据...
SetupBanner.tsx 正在载入提交数据...
SetupProviderCard.tsx 正在载入提交数据...
SupabaseConnector.tsx 正在载入提交数据...
SupabaseIntegration.tsx 正在载入提交数据...
TelemetryBanner.tsx 正在载入提交数据...
TelemetrySwitch.tsx 正在载入提交数据...
TemplateCard.tsx 正在载入提交数据...
ThinkingBudgetSelector.tsx 正在载入提交数据...
VercelConnector.tsx 正在载入提交数据...
VercelIntegration.tsx 正在载入提交数据...
app-sidebar.tsx 正在载入提交数据...
appItem.tsx 正在载入提交数据...