iOS: Leere Assistenten-Bubble nach reinen Tool-Call-Jobs #13

Closed
opened 2026-06-13 11:33:35 +00:00 by alf · 1 comment
Owner

Problem

Wenn Hermes einen Job mit ausschließlich Tool-Calls beendet (z.B. Websuche) und keinen abschließenden Text generiert, wird eine leere Assistenten-Bubble als winziger dunkler Punkt angezeigt. Der Speaker-Button erscheint darunter, aber der eigentliche Inhalt fehlt.

Ursache

expandedBubble renderte bubbleContent (mit Padding + Hintergrund) immer, auch wenn cleanMessageText leer ist. Ohne Textinhalt entsteht nur ein Padding-Rechteck.

Fix

Guard in expandedBubble: Bubble-Content-Block wird nicht gerendert wenn cleanMessageText nach Trimmen leer ist (AgentChatView.swift). Commit a89a53a.

Status: behoben

## Problem Wenn Hermes einen Job mit ausschließlich Tool-Calls beendet (z.B. Websuche) und keinen abschließenden Text generiert, wird eine leere Assistenten-Bubble als winziger dunkler Punkt angezeigt. Der Speaker-Button erscheint darunter, aber der eigentliche Inhalt fehlt. ## Ursache `expandedBubble` renderte `bubbleContent` (mit Padding + Hintergrund) immer, auch wenn `cleanMessageText` leer ist. Ohne Textinhalt entsteht nur ein Padding-Rechteck. ## Fix Guard in `expandedBubble`: Bubble-Content-Block wird nicht gerendert wenn `cleanMessageText` nach Trimmen leer ist (`AgentChatView.swift`). Commit `a89a53a`. **Status: behoben**
alf closed this issue 2026-06-13 11:33:40 +00:00
Author
Owner

Nachtrag: Die eigentliche Ursache ist eine Race-Condition, nicht fehlender Text. SSE .done feuert bevor der Mac die Session fertig geschrieben hat — reloadMessages bekommt leere Daten und überschreibt damit die lokal korrekte Kopie. Nach App-Neustart funktioniert es, weil dann ein frischer /messages-Abruf die vollständige Session findet.

Zwei weitere Fixes in Commit d610bfb:

  1. reloadMessages schützt nun gute lokale Daten vor leeren Server-Antworten
  2. AgentChatView.onChange(status → .completed) löst nach 1,5 s einen zweiten Reload aus wenn die letzte Bubble noch leer ist
**Nachtrag:** Die eigentliche Ursache ist eine Race-Condition, nicht fehlender Text. SSE `.done` feuert bevor der Mac die Session fertig geschrieben hat — `reloadMessages` bekommt leere Daten und überschreibt damit die lokal korrekte Kopie. Nach App-Neustart funktioniert es, weil dann ein frischer `/messages`-Abruf die vollständige Session findet. Zwei weitere Fixes in Commit `d610bfb`: 1. `reloadMessages` schützt nun gute lokale Daten vor leeren Server-Antworten 2. `AgentChatView.onChange(status → .completed)` löst nach 1,5 s einen zweiten Reload aus wenn die letzte Bubble noch leer ist
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
iris/Iris#13
No description provided.