From c34eb1c7403888cdc04cff096e1808e0f5facf35 Mon Sep 17 00:00:00 2001 From: duffyduck Date: Sat, 27 Dec 2025 21:09:02 +0100 Subject: [PATCH] message index are now numbers no hash values --- python_bridge/chat_web_interface.py | 44 +++++++++++++++++++---------- 1 file changed, 29 insertions(+), 15 deletions(-) diff --git a/python_bridge/chat_web_interface.py b/python_bridge/chat_web_interface.py index 87ef78b..7e9e3d6 100644 --- a/python_bridge/chat_web_interface.py +++ b/python_bridge/chat_web_interface.py @@ -523,19 +523,30 @@ class ClaudeChatInterface: elif msg.id == since_id: found_marker = True - # WICHTIG: Wenn since_id nicht gefunden wurde, könnte es sein dass: - # 1. Der Chat gewechselt wurde - # 2. Die Seite neu geladen wurde - # 3. Die ID-Generierung sich geändert hat (Hashes sind nicht 100% stabil) - # - # LÖSUNG: Gib KEINE Nachrichten zurück um Wiederholungen zu vermeiden! - # Bei Neustart würden sonst alle alten Nachrichten nochmal vorgelesen. - # Der TTS-State sollte bei echtem Chat-Wechsel manuell gelöscht werden. + # WICHTIG: Wenn since_id nicht gefunden wurde, versuche eine Fallback-Logik if not found_marker and all_messages: + # Neue IDs haben Format "claude_msg_X" wobei X ein Zähler ist + # Alte IDs haben Format "claude_HASH" - diese sind nicht mehr gültig + if since_id and since_id.startswith("claude_msg_"): + # Extrahiere den Zähler und gib alle Nachrichten NACH diesem Index zurück + try: + last_index = int(since_id.split("_")[-1]) + # Zähle Claude-Nachrichten und gib nur die nach dem Index zurück + claude_msgs = [m for m in all_messages if m.is_from_assistant] + if last_index < len(claude_msgs): + # Es gibt neue Nachrichten! + new_claude_msgs = claude_msgs[last_index + 1:] + logger.debug(f"Fallback: {len(new_claude_msgs)} neue Claude-Nachrichten ab Index {last_index + 1}") + return new_claude_msgs + else: + # Keine neuen Nachrichten + return [] + except (ValueError, IndexError): + pass + + # Alte Hash-basierte IDs oder ungültiges Format if since_id and since_id.startswith("claude_"): - logger.debug(f"since_id '{since_id[:30]}...' nicht gefunden in {len(all_messages)} Nachrichten - überspringe alle (Neustart-Schutz)") - # Aktualisiere intern auf die letzte bekannte Nachricht - # damit zukünftige NEUE Nachrichten erkannt werden + logger.debug(f"since_id '{since_id[:30]}...' hat altes Format oder nicht gefunden - überspringe alle (Neustart-Schutz)") return [] return [] @@ -821,9 +832,12 @@ class ClaudeChatInterface: msg_id = elem.get_attribute("data-message-id") if not msg_id: - # WICHTIG: ID nur aus Text-Hash generieren, NICHT aus Index! - # So bleibt die ID stabil auch wenn sich die Reihenfolge ändert - msg_id = f"claude_{hash(text[:200])}" + # WICHTIG: Nutze einen ZÄHLER statt Hash! + # Der Zähler ist die Anzahl der bisherigen Claude-Nachrichten. + # 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}" messages.append(ChatMessage( id=msg_id, @@ -831,7 +845,7 @@ class ClaudeChatInterface: is_from_assistant=True, timestamp=time.time() )) - logger.debug(f"Claude-Nachricht {i}: '{text[:80]}...' ({len(text)} Zeichen)") + logger.debug(f"Claude-Nachricht {claude_msg_count if 'claude_msg_count' in dir() else i}: '{text[:80]}...' ({len(text)} Zeichen)") except Exception as e: logger.debug(f"Fehler bei Claude-Nachricht {i}: {e}")