From f55329706ee8aee42d209f2894e694c7f5eadd1f Mon Sep 17 00:00:00 2001 From: duffyduck Date: Wed, 6 May 2026 20:29:26 +0200 Subject: [PATCH] debug(stt): Toasts in App + Bridge-Log fuer STT-Broadcast-Erfolg MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Da kein adb-Zugriff: visuelle Debug-Pfade direkt in der App + im Diagnostic-Bridge-Tab. App: zwei Toasts beim Empfang eines stt-events - "STT empfangen: ..." sobald das chat-event mit sender=stt reinkommt - "Bubble #X ersetzt" oder "keine Placeholder → neue Bubble" Bridge: explizites Info-Log "STT-Text an RVS broadcastet (sender=stt)" nach erfolgreichem _send_to_rvs, "NICHT broadcastet" wenn die Methode False lieferte (Ping fehlgeschlagen / Verbindung tot). Naechster Test: - Sprachnachricht aufnehmen - Toast erscheint? → STT-Event kommt in App an, Bug ist im findIndex - Toast erscheint nicht? → Diagnostic Bridge-Tab pruefen ob das Log "STT-Text an RVS broadcastet" steht Co-Authored-By: Claude Opus 4.7 (1M context) --- android/src/screens/ChatScreen.tsx | 17 +++++++++++++++-- bridge/aria_bridge.py | 6 +++++- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/android/src/screens/ChatScreen.tsx b/android/src/screens/ChatScreen.tsx index bc71ab4..8178569 100644 --- a/android/src/screens/ChatScreen.tsx +++ b/android/src/screens/ChatScreen.tsx @@ -292,14 +292,27 @@ const ChatScreen: React.FC = () => { // den gleichen Text bekommen (Bug: zweite Antwort ueberschreibt erste). if (sender === 'stt') { const sttText = (message.payload.text as string) || ''; + // Debug-Toast: visualisiert dass das STT-Event in der App angekommen ist. + // Wenn dieser Toast NICHT erscheint, kommt das Event nicht durch (Bridge + // oder RVS broadcastet es nicht), und der Bug liegt server-side. + ToastAndroid.show(`STT empfangen: "${sttText.slice(0, 40)}"`, ToastAndroid.SHORT); if (sttText) { setMessages(prev => { const idx = prev.findIndex(m => m.sender === 'user' && m.text.includes('Spracheingabe wird verarbeitet') ); + const placeholderCount = prev.filter(m => + m.sender === 'user' && m.text.includes('Spracheingabe wird verarbeitet') + ).length; console.log('[Chat] STT-Result: idx=%d text="%s" placeholders=%d', - idx, sttText.slice(0, 60), - prev.filter(m => m.sender === 'user' && m.text.includes('Spracheingabe wird verarbeitet')).length); + idx, sttText.slice(0, 60), placeholderCount); + // Zweiter Toast: zeigt ob die Placeholder gefunden wurde. + ToastAndroid.show( + idx < 0 + ? `STT: keine Placeholder (${placeholderCount}) \u2192 neue Bubble` + : `STT: Bubble #${idx} ersetzt`, + ToastAndroid.SHORT, + ); const newText = `\uD83C\uDFA4 ${sttText}`; if (idx < 0) { // Defensiv: wenn keine Placeholder im State (z.B. weil sie nie diff --git a/bridge/aria_bridge.py b/bridge/aria_bridge.py index 42cf0f7..0a8c413 100644 --- a/bridge/aria_bridge.py +++ b/bridge/aria_bridge.py @@ -1576,7 +1576,7 @@ class ARIABridge: # STT-Text an RVS senden (fuer Anzeige in App + Diagnostic) # sender="stt" damit Bridge es ignoriert (kein Loop) try: - await self._send_to_rvs({ + ok = await self._send_to_rvs({ "type": "chat", "payload": { "text": text, @@ -1584,6 +1584,10 @@ class ARIABridge: }, "timestamp": int(asyncio.get_event_loop().time() * 1000), }) + if ok: + logger.info("[rvs] STT-Text an RVS broadcastet (sender=stt)") + else: + logger.warning("[rvs] STT-Text NICHT broadcastet — _send_to_rvs lieferte False") except Exception as e: logger.warning("[rvs] STT-Text konnte nicht an RVS gesendet werden: %s", e) else: