Laeuft einem Agenten die Claude-Anmeldung aus, laeuft das Cron-Skript um ihn herum unbeeindruckt weiter: es meldet "working", ruft claude auf, bekommt nichts Brauchbares zurueck und meldet am Ende "idle". last_seen_at ist frisch, der Agent sieht beschaeftigt aus - waehrend Lauf fuer Lauf nichts entsteht. Der Ausfall fiel bisher erst auf, wenn jemand merkte, dass keine PRs mehr kommen. Agenten melden den Fall jetzt ueber zwei neue state-Werte (auth_expiring, auth_expired) am bestehenden Activity-Endpunkt. state ist serverseitig nicht eingeschraenkt, daher ohne Migration und ohne Aenderung an der API. Dargestellt in drei Stufen der Aufmerksamkeit: - Schloss ueber dem Avatar (bei auth_expired pulsierend), entsaettigter Koerper, eingefaerbter Bildschirm und Namensschild am Platz - Header-Banner mit den betroffenen Agenten, gelb bei Vorwarnung, rot bei Ausfall - auch aus einigen Metern Entfernung noch lesbar - KPI-Kachel "Problem: n", die sich nur einfaerbt, wenn n > 0 Kern ist isAgentVisible(), bewusst getrennt von isAgentPresent(): ein blockierter Agent bleibt sichtbar, obwohl er sich nicht mehr meldet, zaehlt aber nicht als "Online" mit. Ohne das verschwaende er nach dem Praesenz-Timeout genau dann vom Schreibtisch, wenn seine Warnung dort stehen soll. MAX_KPI_TILES von 4 auf 5, sonst verdraengen Agenten/Online/Problem/Hooks die gemeldeten KPIs (F7) vollstaendig. Nebenbei: "npm test" lief seit Node 24 nicht mehr (das Verzeichnis-Argument wird nicht mehr als Testverzeichnis aufgeloest), jetzt per Glob. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
33 lines
1.4 KiB
HTML
33 lines
1.4 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="de">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<link rel="icon" type="image/png" href="/favicon.png">
|
|
<title>FDS Buero-Visualisierung</title>
|
|
<link rel="stylesheet" href="css/office.css">
|
|
</head>
|
|
<body>
|
|
<header class="office-header">
|
|
<h1>Agent-Status</h1>
|
|
<span id="reload-countdown" class="reload-countdown" aria-hidden="true"></span>
|
|
</header>
|
|
|
|
<div id="api-status-banner" class="api-banner" role="alert" hidden>API nicht erreichbar!</div>
|
|
|
|
<!-- Agent blockiert (Claude-Anmeldung abgelaufen): anders als der API-Banner mit
|
|
dynamischem Text, weil er die betroffenen Agenten nennt. Siehe
|
|
setAgentProblemBanner() in js/office-render.js. -->
|
|
<div id="agent-problem-banner" class="api-banner" role="alert" hidden></div>
|
|
|
|
<main id="office-scene" aria-label="Buero-Szene"></main>
|
|
|
|
<!-- Laufzeit-Konfiguration (API-Basis-URL, Sync-Intervall fuer den kosmetischen
|
|
Reload-Countdown): wird vom Webserver aus den Umgebungsvariablen MONITOR_API_BASE
|
|
und MONITOR_SYNC_INTERVAL erzeugt, siehe docker/nginx/default.conf.template und
|
|
.env.example. Muss vor dem Modul stehen - ein klassisches Script laeuft synchron vor
|
|
jedem Modul. -->
|
|
<script src="/config.js"></script>
|
|
<script type="module" src="js/office-render.js"></script>
|
|
</body>
|
|
</html>
|