1+ import { RECONNECTION_MESSAGE_DURATION_MS } from '@codebuff/sdk'
12import { useKeyboard } from '@opentui/react'
2- import { useCallback , useEffect , useMemo , useRef , useState } from 'react'
3+ import { useQueryClient } from '@tanstack/react-query'
4+ import {
5+ useCallback ,
6+ useEffect ,
7+ useMemo ,
8+ useRef ,
9+ useState ,
10+ useTransition ,
11+ } from 'react'
312import { useShallow } from 'zustand/react/shallow'
413
514import { routeUserPrompt } from './commands/router'
@@ -9,11 +18,12 @@ import { MessageWithAgents } from './components/message-with-agents'
918import { StatusBar } from './components/status-bar'
1019import { SLASH_COMMANDS } from './data/slash-commands'
1120import { useAgentValidation } from './hooks/use-agent-validation'
21+ import { authQueryKeys } from './hooks/use-auth-query'
1222import { useChatInput } from './hooks/use-chat-input'
1323import { useClipboard } from './hooks/use-clipboard'
1424import { useConnectionStatus } from './hooks/use-connection-status'
1525import { useElapsedTime } from './hooks/use-elapsed-time'
16- import { useTimeout } from './hooks/use-timeout '
26+ import { useEvent } from './hooks/use-event '
1727import { useExitHandler } from './hooks/use-exit-handler'
1828import { useInputHistory } from './hooks/use-input-history'
1929import { useKeyboardHandlers } from './hooks/use-keyboard-handlers'
@@ -26,6 +36,7 @@ import { useSuggestionEngine } from './hooks/use-suggestion-engine'
2636import { useSuggestionMenuHandlers } from './hooks/use-suggestion-menu-handlers'
2737import { useTerminalDimensions } from './hooks/use-terminal-dimensions'
2838import { useTheme } from './hooks/use-theme'
39+ import { useTimeout } from './hooks/use-timeout'
2940import { useValidationBanner } from './hooks/use-validation-banner'
3041import { useChatStore } from './state/chat-store'
3142import { useFeedbackStore } from './state/feedback-store'
@@ -36,23 +47,18 @@ import {
3647 getStatusIndicatorState ,
3748 type AuthStatus ,
3849} from './utils/status-indicator-state'
39- import { authQueryKeys } from './hooks/use-auth-query'
40- import { RECONNECTION_MESSAGE_DURATION_MS } from '@codebuff/sdk'
41- import { useQueryClient } from '@tanstack/react-query'
42- import { useTransition } from 'react'
4350import { computeInputLayoutMetrics } from './utils/text-layout'
4451import { createMarkdownPalette } from './utils/theme-system'
4552
4653import type { MultilineInputHandle } from './components/multiline-input'
4754import type { ContentBlock } from './types/chat'
4855import type { SendMessageFn } from './types/contracts/send-message'
4956import type { User } from './utils/auth'
57+ import type { AgentMode } from './utils/constants'
5058import type { FileTreeNode } from '@codebuff/common/util/file'
5159import type { ScrollBoxRenderable } from '@opentui/core'
5260import type { UseMutationResult } from '@tanstack/react-query'
5361import type { Dispatch , SetStateAction } from 'react'
54- import { useEvent } from './hooks/use-event'
55- import { AgentMode } from './utils/constants'
5662
5763export const Chat = ( {
5864 headerContent,
@@ -133,16 +139,16 @@ export const Chat = ({
133139 setLastMessageMode,
134140 addSessionCredits,
135141 resetChatStore,
136- sessionCreditsUsed,
137- setRunState,
138- isAnnouncementVisible,
139- setIsAnnouncementVisible,
140- isRetrying,
141- } = useChatStore (
142- useShallow ( ( store ) => ( {
143- inputValue : store . inputValue ,
144- cursorPosition : store . cursorPosition ,
145- lastEditDueToNav : store . lastEditDueToNav ,
142+ sessionCreditsUsed,
143+ setRunState,
144+ isAnnouncementVisible,
145+ setIsAnnouncementVisible,
146+ isRetrying,
147+ } = useChatStore (
148+ useShallow ( ( store ) => ( {
149+ inputValue : store . inputValue ,
150+ cursorPosition : store . cursorPosition ,
151+ lastEditDueToNav : store . lastEditDueToNav ,
146152 setInputValue : store . setInputValue ,
147153 inputFocused : store . inputFocused ,
148154 setInputFocused : store . setInputFocused ,
@@ -169,13 +175,13 @@ export const Chat = ({
169175 setLastMessageMode : store . setLastMessageMode ,
170176 addSessionCredits : store . addSessionCredits ,
171177 resetChatStore : store . reset ,
172- sessionCreditsUsed : store . sessionCreditsUsed ,
173- setRunState : store . setRunState ,
174- isAnnouncementVisible : store . isAnnouncementVisible ,
175- setIsAnnouncementVisible : store . setIsAnnouncementVisible ,
176- isRetrying : store . isRetrying ,
177- } ) ) ,
178- )
178+ sessionCreditsUsed : store . sessionCreditsUsed ,
179+ setRunState : store . setRunState ,
180+ isAnnouncementVisible : store . isAnnouncementVisible ,
181+ setIsAnnouncementVisible : store . setIsAnnouncementVisible ,
182+ isRetrying : store . isRetrying ,
183+ } ) ) ,
184+ )
179185
180186 // Memoize toggle IDs extraction - only recompute when messages change
181187 const allToggleIds = useMemo ( ( ) => {
@@ -534,10 +540,7 @@ export const Chat = ({
534540 // Timer events are currently tracked but not used for UI updates
535541 // Future: Could be used for analytics or debugging
536542
537- const {
538- sendMessage,
539- clearMessages,
540- } = useSendMessage ( {
543+ const { sendMessage, clearMessages } = useSendMessage ( {
541544 messages,
542545 allToggleIds,
543546 setMessages,
0 commit comments