From f682aad4ff8da5fb96a7ce969164accc47e829c1 Mon Sep 17 00:00:00 2001 From: duffyduck Date: Wed, 6 May 2026 23:33:31 +0200 Subject: [PATCH] fix(wake-word): manueller Mikro-Stop beendet Konversation, zurueck zu armed MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bug: Nach Wake-Word "Computer" → conversing → User drueckt manuell den Mikro-Button um zu stoppen → Audio wird gesendet, aber state bleibt 'conversing'. Nach ARIAs Antwort oeffnet sich automatisch wieder das Mikro fuer Multi-Turn — obwohl der User explizit den Knopf gedrueckt hat um zu signalisieren "ich bin fertig". Fix: Im handleVoiceRecording (= manueller Stop ueber VoiceButton) wird nach dem Send wakeWordService.endConversation() gerufen wenn aktuell in conversing-State. Das setzt zurueck auf 'armed' und startet openWakeWord wieder fuer passives Lauschen. ARIAs Antwort kommt durch, TTS spielt, aber resume() ist dann no-op weil state schon 'armed'. Bei VAD-Auto-Stop (silence-callback im Wake-Word-Pfad) bleibt das Multi-Turn-Verhalten unveraendert — das ist die "natuerliche" Pause und passt zum Konversations-Modus. Co-Authored-By: Claude Opus 4.7 (1M context) --- android/src/screens/ChatScreen.tsx | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/android/src/screens/ChatScreen.tsx b/android/src/screens/ChatScreen.tsx index 562a516..e891b53 100644 --- a/android/src/screens/ChatScreen.tsx +++ b/android/src/screens/ChatScreen.tsx @@ -770,6 +770,17 @@ const ChatScreen: React.FC = () => { ...(location && { location }), }); scheduleStaleAudioCleanup(audioRequestId, result.durationMs); + + // Manueller Mikro-Stop waehrend Wake-Word-Konversation: User hat explizit + // den Knopf gedrueckt → er moechte nicht in den automatischen Multi-Turn- + // Modus, sondern nach ARIAs Antwort zurueck zu passivem Wake-Word-Lauschen. + // Bei VAD-Auto-Stop (Wake-Word-Pfad) laeuft das ueber den silence-callback + // und endet mit resume() — der manuelle Stop hier ist der "ich bin fertig"- + // Knopf. + if (wakeWordService.isConversing()) { + console.log('[Chat] Manueller Stop in Konversation → endConversation, zurueck zu armed'); + await wakeWordService.endConversation(); + } }, [getCurrentLocation, interruptAriaIfBusy, scheduleStaleAudioCleanup]); // Datei auswaehlen → zur Pending-Liste hinzufuegen