diff --git a/python_bridge/chat_audio_bridge.py b/python_bridge/chat_audio_bridge.py index 60fd812..24cb084 100755 --- a/python_bridge/chat_audio_bridge.py +++ b/python_bridge/chat_audio_bridge.py @@ -995,10 +995,11 @@ Erst wenn ich [READY] sehe, starten die TICKs mit Bildern!""" time.sleep(0.5) continue - # WICHTIG: Wenn Claude spricht (TTS) oder wir auf TTS warten, nicht aufzeichnen! - # Das verhindert Echo (Mikrofon nimmt TTS auf) und - # überlappende Gespräche - wir lassen Claude ausreden. - if self._speaking.is_set() or self._awaiting_tts.is_set(): + # WICHTIG: Wenn Claude spricht (TTS aktiv), nicht aufzeichnen! + # Das verhindert Echo (Mikrofon nimmt TTS auf). + # ABER: _awaiting_tts blockiert NICHT mehr das Mikrofon! + # Der User soll sprechen können auch wenn TTS noch wartet. + if self._speaking.is_set(): # Falls wir mitten in einer Aufnahme waren, diese beenden if self._recording.is_set(): self._finalize_recording(current_session_texts) @@ -1010,7 +1011,7 @@ Erst wenn ich [READY] sehe, starten die TICKs mit Bildern!""" result = self.stt.listen_once(timeout=1) # Nochmal prüfen nach dem Hören (falls zwischendurch gemutet oder Claude spricht) - if self.is_muted() or self._speaking.is_set() or self._awaiting_tts.is_set(): + if self.is_muted() or self._speaking.is_set(): continue if result and result.text and len(result.text) > 2: diff --git a/python_bridge/chat_web_interface.py b/python_bridge/chat_web_interface.py index c807d6e..1737580 100644 --- a/python_bridge/chat_web_interface.py +++ b/python_bridge/chat_web_interface.py @@ -562,7 +562,12 @@ class ClaudeChatInterface: claude_msgs = [m for m in all_messages if m.is_from_assistant] total_claude = len(claude_msgs) - if last_index < total_claude - 1: + # WICHTIG: last_index ist 0-basiert. + # Wenn last_index=26 und total_claude=27, dann gibt es 27 Nachrichten (0-26). + # In diesem Fall ist 26 der letzte Index, also keine neuen. + # Aber wenn total_claude=28, dann gibt es eine neue (Index 27). + # Bedingung: last_index + 1 < total_claude + if last_index + 1 < total_claude: # Es gibt neue Nachrichten! new_claude_msgs = claude_msgs[last_index + 1:] logger.debug(f"Index-basiert: {len(new_claude_msgs)} neue Claude-Nachrichten (Index {last_index + 1} bis {total_claude - 1})") @@ -900,12 +905,12 @@ class ClaudeChatInterface: msg_id = elem.get_attribute("data-message-id") if not msg_id: - # WICHTIG: Nutze einen ZÄHLER statt Hash! - # Der Zähler ist die Anzahl der bisherigen Claude-Nachrichten. + # WICHTIG: Nutze einen 0-basierten INDEX statt Anzahl! + # Der Index entspricht der Position in der Claude-Nachrichten-Liste. + # Beispiel: Erste Claude-Nachricht = claude_msg_0, zweite = claude_msg_1, etc. # Das ist stabil weil neue Nachrichten nur HINZUGEFÜGT werden. - # Der Hash war instabil weil der Text sich leicht ändern kann. - claude_msg_count = sum(1 for m in messages if m.is_from_assistant) - msg_id = f"claude_msg_{claude_msg_count}" + current_claude_count = sum(1 for m in messages if m.is_from_assistant) + msg_id = f"claude_msg_{current_claude_count}" # 0-basiert: bei 0 bisherigen -> Index 0 messages.append(ChatMessage( id=msg_id,