diff --git a/bridge/aria_bridge.py b/bridge/aria_bridge.py index db688a0..2f39744 100644 --- a/bridge/aria_bridge.py +++ b/bridge/aria_bridge.py @@ -2811,9 +2811,25 @@ class ARIABridge: return elif msg_type == "stt_stream_end": - # Session vorbei — Focus-Tracking fuer diese requestId aufraeumen. + # Session vorbei — ABER nicht sofort aufraeumen: nach einem manuellen + # Stop folgt noch der finale stt_endpoint (Whisper-Final-Transcribe), + # der die Focus-projectId aus dieser Registry braucht. Wuerden wir hier + # sofort poppen, bekaeme der Endpoint "" → die Nachricht (und ARIA's + # Antwort) landet im Hauptchat statt im fokussierten Projekt. Der + # stt_endpoint-Handler popt selbst; hier nur ein verzoegerter Cleanup + # als Leak-Schutz, falls gar kein Endpoint mehr kommt. req_id = payload.get("requestId", "") or "" - self._stt_stream_projects.pop(req_id, None) + if req_id: + try: + loop = asyncio.get_event_loop() + loop.call_later( + 20.0, + lambda rid=req_id: self._stt_stream_projects.pop(rid, None), + ) + except Exception: + # Kein laufender Loop (sollte im ws-Handler nie passieren) — + # dann lieber gar nicht aufraeumen als crashen. + pass return elif msg_type == "stt_endpoint":