feat: wire ModelSelectorBar + message queue into ChatInterface
This commit is contained in:
parent
b637f0287d
commit
f7be8ff31d
1 changed files with 24 additions and 2 deletions
|
|
@ -14,6 +14,7 @@ import { useSessionStore } from '../../../stores/useSessionStore';
|
|||
|
||||
import ChatMessagesPane from './subcomponents/ChatMessagesPane';
|
||||
import ChatComposer from './subcomponents/ChatComposer';
|
||||
import ModelSelectorBar from './subcomponents/ModelSelectorBar';
|
||||
|
||||
|
||||
type PendingViewSession = {
|
||||
|
|
@ -72,6 +73,10 @@ function ChatInterface({
|
|||
setCodexModel,
|
||||
geminiModel,
|
||||
setGeminiModel,
|
||||
claudeModelOptions,
|
||||
codexModelOptions,
|
||||
geminiModelOptions,
|
||||
cursorModelOptions,
|
||||
permissionMode,
|
||||
pendingPermissionRequests,
|
||||
setPendingPermissionRequests,
|
||||
|
|
@ -171,6 +176,7 @@ function ChatInterface({
|
|||
handleGrantToolPermission,
|
||||
handleInputFocusChange,
|
||||
isInputFocused,
|
||||
messageQueue,
|
||||
} = useChatComposerState({
|
||||
selectedProject,
|
||||
selectedSession,
|
||||
|
|
@ -205,13 +211,11 @@ function ChatInterface({
|
|||
});
|
||||
|
||||
// On WebSocket reconnect, re-fetch the current session's messages from the server
|
||||
// so missed streaming events are shown. Also reset isLoading.
|
||||
const handleWebSocketReconnect = useCallback(async () => {
|
||||
if (!selectedProject || !selectedSession) return;
|
||||
const providerVal = (localStorage.getItem('selected-provider') as LLMProvider) || 'claude';
|
||||
await sessionStore.refreshFromServer(selectedSession.id, {
|
||||
provider: (selectedSession.__provider || providerVal) as LLMProvider,
|
||||
// Use DB projectId; legacy folder-derived projectName is no longer accepted here.
|
||||
projectId: selectedProject.projectId,
|
||||
projectPath: selectedProject.fullPath || selectedProject.path || '',
|
||||
});
|
||||
|
|
@ -299,6 +303,23 @@ function ChatInterface({
|
|||
return (
|
||||
<PermissionContext.Provider value={permissionContextValue}>
|
||||
<div className="flex h-full flex-col">
|
||||
{/* Floating model selector bar — always visible above messages */}
|
||||
<ModelSelectorBar
|
||||
provider={provider}
|
||||
claudeModel={claudeModel}
|
||||
setClaudeModel={setClaudeModel}
|
||||
cursorModel={cursorModel}
|
||||
setCursorModel={setCursorModel}
|
||||
codexModel={codexModel}
|
||||
setCodexModel={setCodexModel}
|
||||
geminiModel={geminiModel}
|
||||
setGeminiModel={setGeminiModel}
|
||||
claudeModelOptions={claudeModelOptions}
|
||||
codexModelOptions={codexModelOptions}
|
||||
geminiModelOptions={geminiModelOptions}
|
||||
cursorModelOptions={cursorModelOptions}
|
||||
/>
|
||||
|
||||
<ChatMessagesPane
|
||||
scrollContainerRef={scrollContainerRef}
|
||||
onWheel={handleScroll}
|
||||
|
|
@ -410,6 +431,7 @@ function ChatInterface({
|
|||
})}
|
||||
isTextareaExpanded={isTextareaExpanded}
|
||||
sendByCtrlEnter={sendByCtrlEnter}
|
||||
messageQueue={messageQueue}
|
||||
/>
|
||||
</div>
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue