11import { useRenderer } from '@opentui/react'
2- import React , {
3- useCallback ,
4- useEffect ,
5- useMemo ,
6- useRef ,
7- useState ,
8- } from 'react'
9-
10-
11- import { logger } from './logger'
12- import { buildMessageTree } from './message-tree-utils'
13- import { MultilineInput } from './multiline-input'
14- import { Separator } from './separator'
15- import { StatusIndicator , useHasStatus } from './status-indicator'
2+ import React , { useCallback , useEffect , useMemo , useRef , useState } from 'react'
3+
4+ import { MultilineInput } from './components/multiline-input'
5+ import { Separator } from './components/separator'
6+ import { StatusIndicator , useHasStatus } from './components/status-indicator'
7+ import { useClipboard } from './hooks/use-clipboard'
8+ import { useInputHistory } from './hooks/use-input-history'
9+ import { useKeyboardHandlers } from './hooks/use-keyboard-handlers'
10+ import { useMessageQueue } from './hooks/use-message-queue'
11+ import { useMessageRenderer } from './hooks/use-message-renderer'
12+ import { useScrollManagement } from './hooks/use-scroll-management'
13+ import { useSendMessage } from './hooks/use-send-message'
14+ import { formatTimestamp , formatQueuedPreview } from './utils/helpers'
15+ import { logger } from './utils/logger'
16+ import { buildMessageTree } from './utils/message-tree-utils'
1617import {
1718 type ThemeName ,
1819 chatThemes ,
1920 createMarkdownPalette ,
2021 detectSystemTheme ,
21- } from './theme-system'
22- import { useClipboard } from './use-clipboard'
23- import { useInputHistory } from './use-input-history'
24- import { useKeyboardHandlers } from './use-keyboard-handlers'
25- import { useMessageQueue } from './use-message-queue'
26- import { useMessageRenderer } from './use-message-renderer'
27- import { useScrollManagement } from './use-scroll-management'
28- import { useSendMessage } from './use-send-message'
29- import { formatTimestamp , formatQueuedPreview } from './utils'
22+ } from './utils/theme-system'
3023
3124import type { ToolName } from '@codebuff/sdk'
32- import type {
33- InputRenderable ,
34- ScrollBoxRenderable ,
35- } from '@opentui/core'
25+ import type { InputRenderable , ScrollBoxRenderable } from '@opentui/core'
3626
3727type ChatVariant = 'ai' | 'user' | 'agent'
3828
@@ -117,10 +107,6 @@ export const App = ({ initialPrompt }: { initialPrompt?: string } = {}) => {
117107 renderer ?. setBackgroundColor ( theme . background )
118108 } , [ renderer , theme . background ] )
119109
120-
121-
122-
123-
124110 const abortControllerRef = useRef < AbortController | null > ( null )
125111
126112 const registerAgentRef = useCallback ( ( agentId : string , element : any ) => {
@@ -142,7 +128,8 @@ export const App = ({ initialPrompt }: { initialPrompt?: string } = {}) => {
142128 setInputValue ,
143129 )
144130
145- const sendMessageRef = useRef < ( content : string , onComplete ?: ( ) => void ) => Promise < void > > ( )
131+ const sendMessageRef =
132+ useRef < ( content : string , onComplete ?: ( ) => void ) => Promise < void > > ( )
146133
147134 const {
148135 queuedMessages,
@@ -260,7 +247,15 @@ export const App = ({ initialPrompt }: { initialPrompt?: string } = {}) => {
260247 }
261248
262249 sendMessage ( trimmed )
263- } , [ inputValue , isStreaming , sendMessage , saveToHistory , addToQueue , streamMessageIdRef , isChainInProgressRef ] )
250+ } , [
251+ inputValue ,
252+ isStreaming ,
253+ sendMessage ,
254+ saveToHistory ,
255+ addToQueue ,
256+ streamMessageIdRef ,
257+ isChainInProgressRef ,
258+ ] )
264259
265260 const handleThemeToggle = useCallback ( ( ) => {
266261 setThemeName ( ( prev ) => ( prev === 'dark' ? 'light' : 'dark' ) )
@@ -372,11 +367,12 @@ export const App = ({ initialPrompt }: { initialPrompt?: string } = {}) => {
372367 />
373368 { hasStatus && queuedMessages . length > 0 && ' ' }
374369 { queuedMessages . length > 0 && (
375- < span
376- fg = { theme . statusSecondary }
377- bg = { theme . inputFocusedBg }
378- >
379- { ' ' } { formatQueuedPreview ( queuedMessages , Math . max ( 30 , renderer . width - 25 ) ) } { ' ' }
370+ < span fg = { theme . statusSecondary } bg = { theme . inputFocusedBg } >
371+ { ' ' }
372+ { formatQueuedPreview (
373+ queuedMessages ,
374+ Math . max ( 30 , renderer . width - 25 ) ,
375+ ) } { ' ' }
380376 </ span >
381377 ) }
382378 </ text >
0 commit comments