diff --git a/android/src/screens/ChatScreen.tsx b/android/src/screens/ChatScreen.tsx index 92cbe6e..b64402b 100644 --- a/android/src/screens/ChatScreen.tsx +++ b/android/src/screens/ChatScreen.tsx @@ -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 { diff --git a/aria-brain/agent.py b/aria-brain/agent.py index 365344b..5561dda 100644 --- a/aria-brain/agent.py +++ b/aria-brain/agent.py @@ -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: