From b4115bb3456eb9803b6291d20cb9bcfd8e8d54cf Mon Sep 17 00:00:00 2001 From: duffyduck Date: Sat, 30 May 2026 20:38:14 +0200 Subject: [PATCH] debug(wake): mehr Log-Punkte zwischen onWakeDetected-Trigger und Callback-Feuern MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Stefan's Test zeigt: 'wake.detect keyword=computer state=armed' kommt im Background durch (WakeLock greift!), aber 'wake.cb callback fired' aus ChatScreen fehlt. Heisst: zwischen Detection und Callback-Feuern geht's irgendwo verloren. Mehr Logs: - nach OpenWakeWord.stop(): 'native stop ok' oder 'native stop FAIL msg' → klaert ob async stop() haengt - vor setTimeout: 'state→conversing, wakeCallbacks.length=N, scheduling' → klaert ob Liste leer ist (ChatScreen unmounted) und ob wir's schedulen - im setTimeout: 'timeout fired, state=X, cbs=N' → klaert ob der Timer in 200ms tatsaechlich feuert (Doze-Throttle?) - bei barge-path: 'barge path: cbs=N' Damit sehen wir genau wo's klemmt. Co-Authored-By: Claude Opus 4.7 (1M context) --- android/src/services/wakeword.ts | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/android/src/services/wakeword.ts b/android/src/services/wakeword.ts index 18ee4e2..17ed71e 100644 --- a/android/src/services/wakeword.ts +++ b/android/src/services/wakeword.ts @@ -242,13 +242,20 @@ class WakeWordService { `keyword=${this.keyword} state=${this.state} barge=${this.bargeListening}`)).catch(()=>{}); this.lastTriggerAt = now; if (this.nativeReady && OpenWakeWord) { - try { await OpenWakeWord.stop(); } catch {} + try { + await OpenWakeWord.stop(); + import('./logger').then(m => m.reportAppDebug('wake.detect', 'native stop ok')).catch(()=>{}); + } catch (e: any) { + import('./logger').then(m => m.reportAppDebug('wake.detect', `native stop FAIL ${e?.message}`)).catch(()=>{}); + } } this.bargeListening = false; // Wenn wir bereits in 'conversing' sind und der Trigger waehrend ARIAs TTS // kam (Barge-In via Wake-Word), feuern wir einen separaten Callback damit // ChatScreen das TTS abbrechen + neue Aufnahme starten kann. Sonst normal. if (this.state === 'conversing') { + import('./logger').then(m => m.reportAppDebug('wake.detect', + `barge path: cbs=${this.bargeCallbacks.length}`)).catch(()=>{}); this.bargeCallbacks.forEach(cb => { try { cb(); } catch (e) { console.warn('[WakeWord] barge cb err:', e); } }); @@ -256,7 +263,11 @@ class WakeWordService { return; } this.setState('conversing'); + import('./logger').then(m => m.reportAppDebug('wake.detect', + `state→conversing, wakeCallbacks.length=${this.wakeCallbacks.length}, scheduling 200ms timeout`)).catch(()=>{}); setTimeout(() => { + import('./logger').then(m => m.reportAppDebug('wake.detect', + `timeout fired, state=${this.state}, cbs=${this.wakeCallbacks.length}`)).catch(()=>{}); if (this.state === 'conversing') { this.wakeCallbacks.forEach(cb => cb()); }