Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 | 29x 29x 29x 29x 29x 29x 29x 29x 29x 29x 29x 29x 6x 6x 29x 29x 6x 6x 29x 29x 5x 29x 4x 29x 29x 29x 29x | import { useCallback, useRef, useState } from 'react'
import { vscode } from '../lib/vscode'
import type { MessageRouter } from './useMessageRouter'
type SessionMode = 'default' | 'plan' | 'yolo'
type CommandInfo = { name: string; description: string; aliases?: string[] }
export function useSettingsState(router: MessageRouter) {
const [environment, setEnvironment] = useState('')
const [mode, setMode] = useState<SessionMode>('default')
const [availableModes, setAvailableModes] = useState<string[]>(['default', 'plan', 'yolo'])
const [cliCommands, setCliCommands] = useState<CommandInfo[]>([])
const [currentModel, setCurrentModel] = useState<{
name: string
displayName: string
contextWindow?: number
tokenScalingFactor?: number
vendor?: string
} | null>(null)
const [availableModels, setAvailableModels] = useState<
{ name: string; displayName: string; contextWindow?: number; tokenScalingFactor?: number; vendor?: string }[]
>([])
const [logoTheme, setLogoTheme] = useState<'red' | 'blue'>('blue')
const [showPerMessageTokens, setShowPerMessageTokens] = useState(false)
const [progressAnimationStyle, setProgressAnimationStyle] = useState<number>(2)
const [aboutInfo, setAboutInfo] = useState<{
extensionVersion: string
cliVersion: string
latestCliVersion: string | null
} | null>(null)
const modeRef = useRef<SessionMode>('default')
const updateMode = useCallback((m: SessionMode) => {
modeRef.current = m
setMode(m)
}, [])
router.register('session', (msg) => {
setEnvironment(msg.environment as string)
if (msg.commands) setCliCommands(msg.commands as CommandInfo[])
if (msg.modes && Array.isArray(msg.modes)) setAvailableModes(msg.modes as string[])
if (msg.availableModels && Array.isArray(msg.availableModels))
setAvailableModels(msg.availableModels as typeof availableModels)
const savedMode = localStorage.getItem('bzcode-mode')
if (savedMode && savedMode !== 'default') {
vscode.postMessage({ type: 'setMode', mode: savedMode })
}
})
router.register('status', (msg) => {
Eif (msg.mode) updateMode(msg.mode as SessionMode)
Iif ((msg.model as { displayName?: string })?.displayName) setCurrentModel(msg.model as typeof currentModel)
})
router.register('initialModel', (msg) => {
setCurrentModel((prev) => prev ?? { name: msg.model as string, displayName: msg.model as string })
})
router.register('availableModels', (msg) => {
setAvailableModels(msg.models as typeof availableModels)
})
router.register('logoTheme', (msg) => {
setLogoTheme(msg.theme as 'red' | 'blue')
})
router.register('showPerMessageTokens', (msg) => {
setShowPerMessageTokens(msg.show as boolean)
})
router.register('progressAnimationStyle', (msg) => {
setProgressAnimationStyle(msg.style as number)
})
router.register('aboutInfo', (msg) => {
setAboutInfo({
extensionVersion: msg.extensionVersion as string,
cliVersion: msg.cliVersion as string,
latestCliVersion: (msg.latestCliVersion as string) ?? null,
})
})
return {
environment,
mode,
availableModes,
cliCommands,
currentModel,
availableModels,
logoTheme,
showPerMessageTokens,
progressAnimationStyle,
setProgressAnimationStyle,
aboutInfo,
setAboutInfo,
}
}
|