feat(voice): кнопка X в overlay закрывает прослушивание
All checks were successful
Deploy / deploy (push) Successful in 2m13s

В overlay появляется крестик в правом верхнем углу. Тап = эмитит
voice-cancel → VoiceController прерывает активный VAD-захват и сам
overlay закрывается. Wake-word, если был активен, продолжает слушать
в фоне.
This commit is contained in:
Cosmo
2026-04-27 10:25:21 +00:00
parent 0ea9fad144
commit 9583c84e27
2 changed files with 42 additions and 0 deletions

View File

@@ -68,7 +68,23 @@ export default function VoiceController() {
useEffect(() => {
console.log('[VoiceController] mounted, state=idle, ждём тап на микрофон')
// Кнопка X в overlay шлёт voice-cancel → прерываем активную запись фразы,
// но wake-word оставляем слушать в фоне (если он включён).
const onCancel = () => {
console.log('[voice] cancel — прерываю запись')
try { vadRef.current?.pause?.() } catch {}
try { vadRef.current?.destroy?.() } catch {}
vadRef.current = null
busyRef.current = false
try { wakeRef.current?.resume?.() } catch {}
setState((s) => (wakeRef.current ? 'listening' : 'idle'))
emitLocal('idle', AGENT)
}
window.addEventListener('voice-cancel', onCancel)
return () => {
window.removeEventListener('voice-cancel', onCancel)
try { vadRef.current?.destroy?.() } catch {}
try { wakeRef.current?.stop?.() } catch {}
vadRef.current = null