Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
4.2 KiB
Info-Board Neu - Erster HTTP-Statuspfad fuer den Player-Agent
Ziel
Dieses Dokument beschreibt den ersten bewusst kleinen Statuspfad zwischen player/agent und server/backend.
Er ist fuer die aktuelle Entwicklungsstufe gedacht und noch kein finales Persistenz-, Authentifizierungs- oder MQTT-Modell.
V1-Dev-Entscheidung
- der Agent sendet zunaechst Statusdaten per HTTP an das Backend
- das Backend validiert und bestaetigt den Request und haelt den letzten bekannten Status pro Screen in-memory vor
- der Pfad dient als erste echte Backend-Agent-Integration vor Registration, Sync und MQTT
Endpoint
POST /api/v1/player/status
Request-Felder
Mindestens enthalten:
screen_idtsstatus
Fuer die aktuelle Entwicklungsstufe sind zulaessig:
status:starting,running,stoppedserver_connectivity:unknown,online,degraded,offlineheartbeat_every_seconds: positive Ganzzahl
Aktuell zusaetzlich enthalten:
server_connectivityserver_urlmqtt_brokerheartbeat_every_secondsstarted_atlast_heartbeat_at
Beispiel
{
"screen_id": "info01-dev",
"ts": "2026-03-22T16:00:00Z",
"status": "running",
"server_connectivity": "online",
"server_url": "http://127.0.0.1:8080",
"mqtt_broker": "tcp://127.0.0.1:1883",
"heartbeat_every_seconds": 30,
"started_at": "2026-03-22T15:59:30Z",
"last_heartbeat_at": "2026-03-22T16:00:00Z"
}
Antwort
Bei gueltigem Request liefert das Backend aktuell:
{
"status": "accepted"
}
Bei ungueltigen Requests wird wie bei den anderen API-Endpunkten der gemeinsame Fehlerumschlag verwendet.
Aktueller Read-Pfad
Zusätzlich zur Write-Route gibt es in dieser Stufe:
GET /api/v1/screens/statusGET /api/v1/screens/{screenId}/status
GET /api/v1/screens/status liefert eine kleine Uebersicht aller bisher berichtenden Screens mit ihrem jeweils letzten bekannten Datensatz.
GET /api/v1/screens/{screenId}/status liefert den zuletzt akzeptierten Status fuer einen einzelnen Screen zurueck.
Wenn fuer den Screen noch kein Status vorliegt, liefert das Backend 404 mit dem gemeinsamen Fehlerumschlag.
Der aktuell zurueckgelieferte Datensatz enthaelt damit sowohl den Lifecycle-Status (status) als auch den vom Agenten lokal abgeleiteten Reachability-Zustand (server_connectivity).
Zusaetzlich fuegt das Backend im Read-Pfad derzeit hinzu:
received_atals serverseitigen Annahmezeitpunkt des letzten gueltigen Reportsstaleals einfache serverseitige Einordnung, ob der letzte Report bereits veraltet wirktderived_stateals zusammengefasste Diagnoseeinschaetzung fuer Konsumenten des Read-Pfads
stale ist aktuell bewusst nur eine kleine Diagnosehilfe fuer die Entwicklungsstufe und noch kein vollstaendiges Online-/Offline-Modell fuer spaetere Admin-Oberflaechen.
Die Schwelle wird derzeit einfach aus dem gemeldeten heartbeat_every_seconds abgeleitet: mehr als zwei Intervalle ohne neuen Report gelten als veraltet.
derived_state wird aktuell bewusst einfach abgeleitet:
offlinebeistale = trueoderserver_connectivity = offlinedegradedbeiserver_connectivity = degraded|unknownoder wennstatusnichtrunningistonlinein den verbleibenden Faellen
Abgrenzung
Noch nicht Teil dieser Stufe:
- dauerhafte Speicherung in Datenbank oder State-Store
- Screen-Authentifizierung
- MQTT-Heartbeat oder MQTT-Status
- Admin-UI-Anzeige des letzten Status
- Retry-Queue oder lokale Zwischenspeicherung im Agent
Agent-seitig wird die Server-Erreichbarkeit aktuell lokal als unknown, online, degraded oder offline aus dem Erfolg der HTTP-Reports abgeleitet.
Fuer den transportierten Wert im erfolgreichen HTTP-Report gilt aktuell bewusst einfach:
- wenn ein Report vom Backend akzeptiert wurde, wird dieser Report selbst als
server_connectivity = onlinegespeichert - anhaltende Ausfaelle werden primaer ueber lokale Agent-Zustaende und serverseitige
stale-Ableitung sichtbar
Folgeschritte
Auf diesem Pfad bauen spaeter auf:
- Screen-Identitaet und Authentifizierung
- persistierter letzter Heartbeat und letzter Status auf dem Server
- Trennung zwischen HTTP-Snapshot und MQTT-Heartbeat
- Admin-Vorschau fuer Online-/Offline- und Degraded-Zustaende