fix(voice): Passiv-Backstop lang genug — schneidet lange Antworten nicht mehr ab

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 <noreply@anthropic.com>
This commit is contained in:
2026-08-16 01:59:45 +02:00
co-authored by Claude Opus 4.8
parent 9636a702d3
commit 4ab0e68245
+8 -6
View File
@@ -30,12 +30,14 @@ type PassiveListenCallback = () => void;
export type WakeWordState = 'off' | 'armed' | 'conversing' | 'listening'; export type WakeWordState = 'off' | 'armed' | 'conversing' | 'listening';
/** Backstop-Dauer fuer den Passive-Listen-Modus nach einer Antwort. Das echte /** Reine HANG-Notbremse fuer den Passive-Listen-Modus. Das echte Ende regelt IMMER
* Ende regelt die Stille-Toleranz (die passive Aufnahme endet nach dem einen * die passive Aufnahme selbst: Stille-Toleranz (User pausiert), No-Speech (User
* No-Speech-Fenster → ChatScreen ruft exitPassiveListening). Dieser Timer ist * sagt gar nichts) oder Hard-Cap (max. Aufnahmedauer, ~5min) → ChatScreen ruft
* nur die Notbremse, falls die Aufnahme mal nicht sauber endpointet — daher * dann exitPassiveListening. Dieser Timer darf aktives Reden NIE abschneiden —
* fix und kurz, kein separater Nutzer-Wert mehr (das alte 30s-Fenster ist raus). */ * deshalb LÄNGER als der Hard-Cap (nur falls ein Endpoint-Event mal verloren geht
const PASSIVE_BACKSTOP_MS = 15_000; * 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'; export const WAKE_KEYWORD_STORAGE = 'aria_wake_keyword';