Something went wrong. Try again.
source dump of claude code forked from oppi.li/claude-code
Something went wrong. Try again.
1.1 kB · 25 lines
TypeScript
at main
1234567891011121314151617181920212223242526import { useMemo } from 'react'import { useAppState } from '../state/AppState.js'import { hasVoiceAuth, isVoiceGrowthBookEnabled,} from '../voice/voiceModeEnabled.js'
/** * Combines user intent (settings.voiceEnabled) with auth + GB kill-switch. * Only the auth half is memoized on authVersion — it's the expensive one * (cold getClaudeAIOAuthTokens memoize → sync `security` spawn, ~60ms/call, * ~180ms total in profile v5 when token refresh cleared the cache mid-session). * GB is a cheap cached-map lookup and stays outside the memo so a mid-session * kill-switch flip still takes effect on the next render. * * authVersion bumps on /login only. Background token refresh leaves it alone * (user is still authed), so the auth memo stays correct without re-eval. */export function useVoiceEnabled(): boolean { const userIntent = useAppState(s => s.settings.voiceEnabled === true) const authVersion = useAppState(s => s.authVersion) // eslint-disable-next-line react-hooks/exhaustive-deps const authed = useMemo(hasVoiceAuth, [authVersion]) return userIntent && authed && isVoiceGrowthBookEnabled()}