fix(app+brain): leere Bubble bei Tool-Loop/Fehler beheben + Limit hoch

Symptom: ARIA laeuft ins Tool-Loop-Limit (host_agent-Exploration), postet die
Meldung, aber die App zeigt eine LEERE Bubble.

Ursache: stripSystemHints (App) entfernt fuehrende [..]-Bloecke (fuer Hinweise
wie '[Kontext:..] Hallo'). Die Tool-Loop-/Fehler-Meldung ist KOMPLETT ein
[..]-Block -> restlos gestrippt -> leer.

Fixes:
- App (ChatScreen): stripSystemHints zeigt das Original, wenn nach dem Strippen
  nichts uebrig bleibt -> Fehler-/Meta-Meldungen (auch '[Fehler: ...]') sind
  wieder sichtbar statt leer.
- Brain: MAX_TOOL_ITERATIONS 8 -> 20 (env-tunebar) — 8 war zu knapp fuer echte
  agentische Arbeit (Host-Exploration); ARIA brach mittendrin ab.
- Brain: Loop-Limit-Meldung ARIA-stimmig + handlungsleitend statt technischer
  Marker (liest sich natuerlich in der Bubble).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-09-24 18:47:58 +02:00
co-authored by Claude Opus 4.8
parent 145c64e67f
commit 6b5d847615
2 changed files with 12 additions and 3 deletions
+4 -1
View File
@@ -185,7 +185,10 @@ function stripSystemHints(text: string): string {
if (!m) break;
out = out.slice(m[0].length);
}
return out;
// Bestand die Nachricht NUR aus Klammer-Bloecken (z.B. "[Tool-Loop-Limit ...]"
// oder "[Fehler: ...]"), waere sie jetzt leer → dann das ORIGINAL zeigen. Sonst
// haette der User eine leere Bubble. Fehler-/Meta-Meldungen sollen sichtbar sein.
return out.trim() ? out : text;
}
/** Sekunden → "M:SS" fuer die Sprachnachricht-Dauer. */
function formatDur(sec: number): string {
+8 -2
View File
@@ -2044,7 +2044,10 @@ class Agent:
# ── Hauptpfad: ein User-Turn → Tool-Loop → finaler Reply ──
MAX_TOOL_ITERATIONS = 8 # Schutz vor Endlos-Loops
# Schutz vor Endlos-Loops, aber hoch genug fuer echte agentische Arbeit
# (Host-Agent-Exploration, Multi-Datei-Tasks brauchen viele Tool-Runden).
# 8 war zu knapp — ARIA brach mitten in laufender Arbeit ab. Env-tunebar.
MAX_TOOL_ITERATIONS = int(os.getenv("MAX_TOOL_ITERATIONS", "20"))
def chat(self, user_message: str, source: str = "",
project_id: Optional[str] = None,
@@ -2343,7 +2346,10 @@ class Agent:
break
else:
# Loop-Limit erreicht
final_reply = "[Tool-Loop-Limit erreicht — ARIA hat zu viele Tool-Calls gemacht ohne fertig zu werden]"
final_reply = (
f"Ich hab die Aufgabe nach {self.MAX_TOOL_ITERATIONS} Arbeitsschritten "
f"gestoppt, damit ich nicht endlos weiterlaufe — war aber noch mittendrin. "
f"Sag mir, ob ich weitermachen oder es anders angehen soll.")
logger.warning("Tool-Loop hit MAX_TOOL_ITERATIONS=%d", self.MAX_TOOL_ITERATIONS)
if not final_reply: