Hermes-Lauf mit Aufruflimit zeigt „Unbekannter Fehler“ statt der vorhandenen Antwort #42

Closed
opened 2026-10-13 17:56:46 +00:00 by alf · 2 comments
Owner

Symptom: Erreicht der Hermes-Agent sein Aufruflimit (max_turns, aktuell 90), zeigt Iris „⚠️ Hermes Fehler: Unbekannter Fehler" — obwohl der Agent eine Abschlussantwort geschrieben hat. Heute fünfmal aufgetreten (Sessions mit turn_exit_reason=max_iterations_reached um 16:13, 16:48, 17:18, 18:00, 19:50).

Beleg (live, 2026-10-13): GET /v1/runs/run_441bcb7d… meldet

status: failed   last_event: run.failed   completed: False   partial: False   interrupted: False
turn_exit_reason: max_iterations_reached(90/90)
output: "Ich muss hier abbrechen und den Stand ehrlich melden …"   (1722 Zeichen)

Kein Feld error.

Ursache: Hermes führt einen Turn ohne regulären Abschluss bewusst als failed (hermes/gateway/platforms/api_server_runs.py, terminal_run_status: „a turn that ended without finishing … such as the iteration budget … is failed"), liefert aber output und turn_exit_reason mit. Iris liest bei run.failed nur error (Iris/HermesGatewayClient.swift:318, raw["error"] as? String ?? "Unbekannter Fehler") und verwirft den vorhandenen output; AgentJob.swift:3519 macht daraus „Hermes Fehler".

Vorschlag (Punkt 1, nur Iris):

  • HermesRunEvent.runFailed um output: String? und turnExitReason: String? erweitern.
  • AgentJob: Ist kein error da, aber output nicht leer, die Antwort normal anzeigen, darunter eine Zeile „⚠️ Der Agent hat sein Aufruflimit erreicht (90/90) — die Antwort ist möglicherweise unvollständig." Nur ohne error UND ohne output bleibt „Unbekannter Fehler".
  • Ein Fehler mit error-Feld bleibt unverändert ein Fehler.
  • Test: run.failed-Event mit output und turn_exit_reason, ohne error.

Nicht Teil dieses Issues: Hermes (Fork) anders einstufen zu lassen, das Limit zu erhöhen. Der Linux-Server hat denselben Fehler an zwei Stellen: iris/iris-linux-server (Schwester-Issue). Wire-Hinweis: Clients (iOS, IrisClient) sehen nur die Nachrichten des Servers; der Mac-Server wird mit diesem Fix mitgezogen.

**Symptom:** Erreicht der Hermes-Agent sein Aufruflimit (`max_turns`, aktuell 90), zeigt Iris „⚠️ Hermes Fehler: Unbekannter Fehler" — obwohl der Agent eine Abschlussantwort geschrieben hat. Heute fünfmal aufgetreten (Sessions mit `turn_exit_reason=max_iterations_reached` um 16:13, 16:48, 17:18, 18:00, 19:50). **Beleg (live, 2026-10-13):** `GET /v1/runs/run_441bcb7d…` meldet ``` status: failed last_event: run.failed completed: False partial: False interrupted: False turn_exit_reason: max_iterations_reached(90/90) output: "Ich muss hier abbrechen und den Stand ehrlich melden …" (1722 Zeichen) ``` Kein Feld `error`. **Ursache:** Hermes führt einen Turn ohne regulären Abschluss bewusst als `failed` (`hermes/gateway/platforms/api_server_runs.py`, `terminal_run_status`: „a turn that ended without finishing … such as the iteration budget … is failed"), liefert aber `output` und `turn_exit_reason` mit. Iris liest bei `run.failed` nur `error` (`Iris/HermesGatewayClient.swift:318`, `raw["error"] as? String ?? "Unbekannter Fehler"`) und verwirft den vorhandenen `output`; `AgentJob.swift:3519` macht daraus „Hermes Fehler". **Vorschlag (Punkt 1, nur Iris):** - `HermesRunEvent.runFailed` um `output: String?` und `turnExitReason: String?` erweitern. - `AgentJob`: Ist kein `error` da, aber `output` nicht leer, die Antwort normal anzeigen, darunter eine Zeile „⚠️ Der Agent hat sein Aufruflimit erreicht (90/90) — die Antwort ist möglicherweise unvollständig." Nur ohne `error` UND ohne `output` bleibt „Unbekannter Fehler". - Ein Fehler mit `error`-Feld bleibt unverändert ein Fehler. - Test: `run.failed`-Event mit `output` und `turn_exit_reason`, ohne `error`. **Nicht Teil dieses Issues:** Hermes (Fork) anders einstufen zu lassen, das Limit zu erhöhen. Der Linux-Server hat denselben Fehler an zwei Stellen: iris/iris-linux-server (Schwester-Issue). Wire-Hinweis: Clients (iOS, IrisClient) sehen nur die Nachrichten des Servers; der Mac-Server wird mit diesem Fix mitgezogen.
Author
Owner

PR #43 gemergt: fix(hermes): run.failed mit vorhandener Antwort (Aufruflimit) zeigt die Antwort statt Unbekannter Fehler (#42)
#43

Commits:

  • fix(hermes): run.failed mit vorhandener Antwort (Aufruflimit) zeigt die Antwort statt Unbekannter Fehler (#42)
PR #43 gemergt: fix(hermes): run.failed mit vorhandener Antwort (Aufruflimit) zeigt die Antwort statt Unbekannter Fehler (#42) https://forgejo.lewerken.duckdns.org/iris/Iris/pulls/43 Commits: - fix(hermes): run.failed mit vorhandener Antwort (Aufruflimit) zeigt die Antwort statt Unbekannter Fehler (#42)
Author
Owner

Stand nach PR #43 (Mac-App):

Geändert: neue Iris/HermesRunFailure.swift (nur Foundation) wertet run.failed aus: mit error → Fehler wie bisher; ohne error, aber mit nicht leerem output → neues Event HermesRunEvent.runIncomplete(output:note:); ohne beides → „Unbekannter Fehler". AgentJob zeigt die Antwort und hängt eine Zeile an („⚠️ Der Agent hat sein Aufruflimit erreicht (90/90) — die Antwort ist möglicherweise unvollständig."). HermesGatewayClient verteilt die beiden Fälle.

Geprüft: Prüfprogramm scripts/hermes-run-harness/run.sh (swiftc, ohne Xcode): 11 Prüfungen grün, darunter das echte Event vom 2026-10-13; Mutationsprobe (Guard auf leeren output entfernt) lässt 3 Prüfungen scheitern. swiftc -parse der beiden geänderten App-Dateien ist fehlerfrei.

Nicht geprüft: Ein Xcode-Build der App und ein Live-Lauf, weil xcodebuild im Terminal laut CLAUDE.md die TCC-Freigaben entwertet. Das neue Event ist der einzige neue Fall im einzigen exhaustiven switch über HermesRunEvent (AgentJob.swift); die Typprüfung gegen das Modul steht aus. Bitte in Xcode neu bauen und mit einem Lauf bis zum Aufruflimit prüfen (Wirkung: Antwort sichtbar, kein „Hermes Fehler").

Offen: Linux-Server (iris/iris-linux-server#14), IrisClient nutzt HermesGatewayClient nicht (ausgeschlossen), das neue File ist dort mitkompiliert und ohne Abhängigkeiten.

Stand nach PR #43 (Mac-App): **Geändert:** neue `Iris/HermesRunFailure.swift` (nur Foundation) wertet `run.failed` aus: mit `error` → Fehler wie bisher; ohne `error`, aber mit nicht leerem `output` → neues Event `HermesRunEvent.runIncomplete(output:note:)`; ohne beides → „Unbekannter Fehler". `AgentJob` zeigt die Antwort und hängt eine Zeile an („⚠️ Der Agent hat sein Aufruflimit erreicht (90/90) — die Antwort ist möglicherweise unvollständig."). `HermesGatewayClient` verteilt die beiden Fälle. **Geprüft:** Prüfprogramm `scripts/hermes-run-harness/run.sh` (swiftc, ohne Xcode): 11 Prüfungen grün, darunter das echte Event vom 2026-10-13; Mutationsprobe (Guard auf leeren `output` entfernt) lässt 3 Prüfungen scheitern. `swiftc -parse` der beiden geänderten App-Dateien ist fehlerfrei. **Nicht geprüft:** Ein Xcode-Build der App und ein Live-Lauf, weil `xcodebuild` im Terminal laut CLAUDE.md die TCC-Freigaben entwertet. Das neue Event ist der einzige neue Fall im einzigen exhaustiven `switch` über `HermesRunEvent` (`AgentJob.swift`); die Typprüfung gegen das Modul steht aus. Bitte in Xcode neu bauen und mit einem Lauf bis zum Aufruflimit prüfen (Wirkung: Antwort sichtbar, kein „Hermes Fehler"). **Offen:** Linux-Server (iris/iris-linux-server#14), IrisClient nutzt `HermesGatewayClient` nicht (ausgeschlossen), das neue File ist dort mitkompiliert und ohne Abhängigkeiten.
alf 2026-10-19 13:19:17 +00:00
  • closed this issue
  • added the
    typ
    bug
    label
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#42
No description provided.