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: