message index are now numbers no hash values

This commit is contained in:
duffyduck 2025-12-27 21:09:02 +01:00
parent 18dc24e86b
commit c34eb1c740
1 changed files with 29 additions and 15 deletions

View File

@ -523,19 +523,30 @@ class ClaudeChatInterface:
elif msg.id == since_id: elif msg.id == since_id:
found_marker = True found_marker = True
# WICHTIG: Wenn since_id nicht gefunden wurde, könnte es sein dass: # WICHTIG: Wenn since_id nicht gefunden wurde, versuche eine Fallback-Logik
# 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.
if not found_marker and all_messages: 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_"): 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)") logger.debug(f"since_id '{since_id[:30]}...' hat altes Format oder nicht gefunden - überspringe alle (Neustart-Schutz)")
# Aktualisiere intern auf die letzte bekannte Nachricht
# damit zukünftige NEUE Nachrichten erkannt werden
return [] return []
return [] return []
@ -821,9 +832,12 @@ class ClaudeChatInterface:
msg_id = elem.get_attribute("data-message-id") msg_id = elem.get_attribute("data-message-id")
if not msg_id: if not msg_id:
# WICHTIG: ID nur aus Text-Hash generieren, NICHT aus Index! # WICHTIG: Nutze einen ZÄHLER statt Hash!
# So bleibt die ID stabil auch wenn sich die Reihenfolge ändert # Der Zähler ist die Anzahl der bisherigen Claude-Nachrichten.
msg_id = f"claude_{hash(text[:200])}" # 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( messages.append(ChatMessage(
id=msg_id, id=msg_id,
@ -831,7 +845,7 @@ class ClaudeChatInterface:
is_from_assistant=True, is_from_assistant=True,
timestamp=time.time() 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: except Exception as e:
logger.debug(f"Fehler bei Claude-Nachricht {i}: {e}") logger.debug(f"Fehler bei Claude-Nachricht {i}: {e}")