From 4ab0e68245534ba640d603d3fae05d916da48568 Mon Sep 17 00:00:00 2001 From: duffyduck Date: Sun, 16 Aug 2026 01:59:45 +0200 Subject: [PATCH] =?UTF-8?q?fix(voice):=20Passiv-Backstop=20lang=20genug=20?= =?UTF-8?q?=E2=80=94=20schneidet=20lange=20Antworten=20nicht=20mehr=20ab?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Log-Analyse (alter Build): eine lange gesprochene Antwort wurde vom 30s-Passiv- Timer mitten im Wort gekappt (exit reason=timeout, dann stt_endpoint reason= stream_end mit abgeschnittenem Text). Genau das Fenster ist raus — ABER mein Ersatz-Backstop (15s) hätte sogar früher abgeschnitten. Der Backstop ist eine reine HANG-Notbremse und darf aktives Reden NIE kappen → jetzt 10min (länger als der ~5min-Hardcap der Aufnahme). Das echte Ende regelt immer die Aufnahme selbst (Stille-Toleranz / No-Speech / Hardcap). Lange zusammenhängende Antworten laufen jetzt durch, bis du ≥ Stille-Toleranz pausierst. Hinweis: der geloggte Fehler ist der ALTE Build — die Fixes sind noch nicht ausgerollt. Dieser Commit korrigiert den noch-nicht-deployten Stand. Deploy: neue APK. Co-Authored-By: Claude Opus 4.8 --- android/src/services/wakeword.ts | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/android/src/services/wakeword.ts b/android/src/services/wakeword.ts index 6a83f48..2b0771d 100644 --- a/android/src/services/wakeword.ts +++ b/android/src/services/wakeword.ts @@ -30,12 +30,14 @@ type PassiveListenCallback = () => void; export type WakeWordState = 'off' | 'armed' | 'conversing' | 'listening'; -/** Backstop-Dauer fuer den Passive-Listen-Modus nach einer Antwort. Das echte - * Ende regelt die Stille-Toleranz (die passive Aufnahme endet nach dem einen - * No-Speech-Fenster → ChatScreen ruft exitPassiveListening). Dieser Timer ist - * nur die Notbremse, falls die Aufnahme mal nicht sauber endpointet — daher - * fix und kurz, kein separater Nutzer-Wert mehr (das alte 30s-Fenster ist raus). */ -const PASSIVE_BACKSTOP_MS = 15_000; +/** Reine HANG-Notbremse fuer den Passive-Listen-Modus. Das echte Ende regelt IMMER + * die passive Aufnahme selbst: Stille-Toleranz (User pausiert), No-Speech (User + * sagt gar nichts) oder Hard-Cap (max. Aufnahmedauer, ~5min) → ChatScreen ruft + * dann exitPassiveListening. Dieser Timer darf aktives Reden NIE abschneiden — + * deshalb LÄNGER als der Hard-Cap (nur falls ein Endpoint-Event mal verloren geht + * und der State sonst ewig 'listening' bliebe). Das alte 30s-Fenster, das lange + * Antworten mitten im Satz kappte, ist damit raus. */ +const PASSIVE_BACKSTOP_MS = 10 * 60_000; export const WAKE_KEYWORD_STORAGE = 'aria_wake_keyword';