The Operator's ===OPERATOR-DECISION=== schema gains an optional "escalation" field (<=2 steps of model/reasoning_effort/iteration_limit, validated against a new per-runtime orchestration.MODEL_POOL allowlist): per-parent for direct_builder, per-child for split. On limit_reached, completion_watcher.py now walks this ladder (via the shared fanout.escalation_ladder_for()) instead of a single flat identical-params retry, escalating model/iteration_limit before falling back to today's manual repair/Aufteilen-angefordert checkpoints. A card that never went through the Operator keeps its existing flat single-retry behavior unchanged. orchestration.child_failed(), fanout.child_terminal(), and trigger.py's Aufteilen-angefordert guard all switch from the old hardcoded ">= 1" threshold to the card's actual ladder length. board.html surfaces the current attempt count on affected cards. Also includes the board-session-usage-indicator research writeup (Codex app-server JSON-RPC + Claude /api/oauth/usage as the two non-interactive usage sources) and its Operator-produced child intents, plus the operator_klaerung_noetig phase-visibility fix already staged in this checkout (distinct phase for a needs_human/crashed Operator run that never produced children, instead of reusing "durch_kinder_blockiert"). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SyeDivnWm6hgiNd3YKjK7Z
64 lines
2.8 KiB
Markdown
64 lines
2.8 KiB
Markdown
# Intent: Nutzungsanzeige in der Board-Kopfzeile
|
|
|
|
## Ziel
|
|
|
|
Ein kleines, dauerhaft sichtbares UI-Element im Intent-Board, das auf
|
|
einen Blick zeigt, wie viel Prozent des aktuellen Nutzungslimits für
|
|
Claude Code und Codex CLI noch übrig sind — damit vor dem Losschicken
|
|
einer Karte sichtbar ist, ob überhaupt noch Spielraum besteht.
|
|
|
|
## Umfang
|
|
|
|
- In `hosts/blunix/localServices/board-agent/board.html`:
|
|
- Ein kompaktes Element in der bestehenden `<header>`-Zeile neben
|
|
`<h1>Intent-Board</h1>` (oder als schmale eigene Leiste direkt
|
|
darunter), unauffällig gestaltet im vorhandenen Stil.
|
|
- Periodischer Abruf von `GET /api/board/usage` alle 60 Sekunden,
|
|
getrennt vom bestehenden `setInterval(render, 5000)`, plus ein
|
|
initialer Abruf beim Laden.
|
|
- Anzeige der *verbleibenden* Prozent, berechnet aus den vom Endpunkt
|
|
gelieferten verbrauchten Prozent (`100 - used_percent`, auf ganze
|
|
Prozent gerundet und auf 0..100 begrenzt), knapp formatiert, etwa
|
|
"Claude: 60 % übrig · Codex: 0 % übrig".
|
|
- Der Endpunkt liefert je Anbieter ein 5-Stunden- und ein
|
|
Wochenfenster; angezeigt wird pro Anbieter der knappere der beiden
|
|
Werte (also das kleinere "übrig"), damit die Anzeige nie zu
|
|
optimistisch ist. Die `resets_at`-Zeitstempel dürfen höchstens als
|
|
`title`-Tooltip erscheinen.
|
|
- Bei `null` oder fehlgeschlagenem Abruf für einen Anbieter dessen
|
|
Wert als "—" darstellen; die jeweils andere Seite bleibt sichtbar.
|
|
Ein fehlgeschlagener Abruf darf das übrige Board-Rendering nicht
|
|
stören.
|
|
- Ein Strukturtest in `test_board_agent.py` im Stil der vorhandenen
|
|
`board.html`-Tests (Vorhandensein des Elements, des Abrufs von
|
|
`/api/board/usage` und des 60-Sekunden-Intervalls).
|
|
|
|
## Explizit ausgeschlossen
|
|
|
|
- Keine Änderung an `trigger.py`, `board-agent.nix` oder am
|
|
Antwortvertrag des Endpunkts.
|
|
- Kein neuer Dialog, keine neue Spalte, keine Änderung an Board-Spalten
|
|
oder Trigger-Logik.
|
|
- Kein Verlauf/Graph über die Zeit, keine Alarmierung bei niedrigem
|
|
Kontingent, keine Aufschlüsselung pro Rolle.
|
|
|
|
## Annahmen
|
|
|
|
- `GET /api/board/usage` existiert bereits und liefert je Anbieter
|
|
`five_hour_used_percent`, `seven_day_used_percent` und die zugehörigen
|
|
`resets_at`-Felder, jeweils möglicherweise `null`.
|
|
- Der Endpunkt gibt bereits nur berechnete Prozentwerte heraus; das
|
|
Frontend braucht keine zusätzliche Filterung von Secrets.
|
|
|
|
## Offene Risiken
|
|
|
|
- Bei dauerhaft fehlschlagendem Endpunkt darf die Kopfzeile nicht
|
|
flackern oder Fehlermeldungen aufdrängen; die Leerdarstellung muss
|
|
ruhig bleiben.
|
|
|
|
## Erfolgskriterien
|
|
|
|
- Das Board zeigt einen aktuellen, unaufdringlichen Prozentwert für
|
|
Claude und für Codex oder eine klare Leerdarstellung.
|
|
- Die Anzeige aktualisiert sich ohne Seitenneuladen.
|
|
- Der Testlauf von `test_board_agent.py` ist grün.
|