# Supervisor Prototype Supervisor je prvý funkčný prototyp ako jedna Go aplikácia s embednutým Vue frontendom. ## Čo projekt robí - spúšťa paralelné externé konzolové procesy v PTY session - session bežia ďalej nezávisle od pripojeného browsera - streamuje live terminál výstup cez WebSocket - prijíma input z klávesnice (xterm.js) aj programový input cez HTTP API - drží metadata a scrollback output v in-memory store - podporuje odstránenie ukončených session (status `stopped`, `exited`, `error`) ## Architektúra - `cmd/supervisor/main.go`: entrypoint - `internal/app`: zostavenie aplikácie, wiring komponentov - `internal/httpserver`: čistý `net/http` router, middleware, API + WS handlery - `internal/session`: PTY procesy, lifecycle session, output buffer, subscribe mechanizmus - `internal/store/memory`: in-memory persistencia metadata session - `internal/supervisor`: skeleton orchestration vrstvy pre budúce supervisor/worker rozšírenie - `web/`: samostatný Vue 3 + Vite frontend - `internal/static`: embedded statické assets servované zo zabudovaného FS ## API endpointy - `GET /healthz` - `GET /api/sessions` - `POST /api/sessions` - `GET /api/sessions/{id}` - `POST /api/sessions/{id}/input` - `POST /api/sessions/{id}/stop` - `DELETE /api/sessions/{id}` - `GET /ws/sessions/{id}` Poznámka k mazaniu: - bežiacu session (`running`) nie je možné odstrániť (`409 Conflict`) - neexistujúca session vracia `404` - úspešné odstránenie vracia `204 No Content` ### Session model Každá session obsahuje: - `id` - `name` - `agentId` - `command` - `status` - `createdAt` - `startedAt` - `exitedAt` - `exitCode` ## WebSocket protokol JSON envelope: ```json { "type": "terminal.input | terminal.output | terminal.resize | session.status | error", "session": "session-id", "payload": {} } ``` Použité payloady: - `terminal.input`: `{ "data": "..." }` - `terminal.output`: `{ "data": "..." }` - `terminal.resize`: `{ "cols": 120, "rows": 30 }` - `session.status`: `{ "status": "running", "exitCode": null }` - `error`: `{ "message": "..." }` ## Frontend poznámky - layout má globálny reset okrajov (`body { margin: 0; }`) - v sidebare je pri ukončených session tlačidlo `Remove` - pri odstránení aktuálne otvorenej session UI presmeruje na dashboard ## Build Predpoklady: - Go (1.23+) - Node.js + npm Frontend build do `web/dist` a následne sa skopíruje do `internal/static/dist` pre `go:embed`. ```bash make frontend-build make backend-build make build ``` ## Spustenie ```bash make run ``` alebo: ```bash ./bin/supervisor ``` Default adresa: `:8080`. Konfigurácia: - `SUPERVISOR_ADDR` (napr. `:9090`) ## Budúce rozšírenie Štruktúra je pripravená na doplnenie: - supervisor orchestration manager - worker agents - workflow runs - audit log - persistent store (DB)