# T08: HTTP server + API za taskove **Kreirao:** planer **Datum:** 2026-02-20 **Agent:** coder **Model:** Sonnet **Zavisi od:** T07 ✅ --- ## Opis Go HTTP server koji servira dashboard i API za upravljanje taskovima. Koristi postojeću supervisor logiku (ScanTasks, FindTask, MoveTask). ## Fajlovi za kreiranje ``` code/ ├── cmd/kaos-server/ │ └── main.go ← HTTP server entry point ├── internal/server/ │ ├── server.go ← Server struct, rute, handler-i │ └── server_test.go ← testovi API-ja └── web/ └── static/ ├── htmx.min.js ← HTMX (ugradi u binary) └── sortable.min.js ← Sortable.js (ugradi u binary) ``` ## API endpointi ``` GET / → dashboard stranica (HTML) GET /api/tasks → svi taskovi (JSON) GET /api/task/{id} → jedan task (JSON + sadržaj fajla) POST /api/task/{id}/move → premesti task (query: to=ready) GET /task/{id} → task detalj (HTML fragment za HTMX) POST /task/{id}/move → premesti + vrati ažuriran HTML ``` ## Pravila - Gin framework (već odlučeno) - Port iz .env: KAOS_PORT (default 8080) - Static fajlovi ugrađeni u binary (embed.FS) - CORS nije potreban (sve sa istog servera) - Graceful shutdown ## Pravila premestanja (server MORA da validira) Dozvoljeno iz dashboarda (operater): - backlog → ready (odobri task) - ready → backlog (povuče nazad) - review → done (odobri završen) - review → ready (vrati na doradu) Dozvoljeno samo iz CLI/agenta: - ready → active (agent preuzme) - active → review (agent završi ili ima pitanje) Zabranjeno (server odbije sa 403): - done → bilo gde - active → bilo gde osim review - backlog → active (preskoči odobrenje) - bilo šta → active osim ready → active Move endpoint prima `source` parametar: `dashboard` ili `agent`. Ako source=dashboard, dozvoljeni su samo operaterski potezi. Ako source=agent, dozvoljeni su samo agentski potezi. Nepoznat source → 403. ## Testovi - GET /api/tasks → vraća JSON listu taskova - GET /api/task/T01 → vraća task sa sadržajem - POST /api/task/T08/move?to=ready&source=dashboard → premesti, 200 - POST /api/task/T08/move?to=active&source=dashboard → odbije, 403 - POST /api/task/T08/move?to=active&source=agent → premesti, 200 - POST /api/task/T01/move?to=backlog&source=dashboard → done task, 403 - POST /api/task/T99/move?to=ready → nepostojeći, 404 - POST /api/task/T01/move?to=invalid → nepoznat folder, 400 ## Očekivani izlaz `go build ./cmd/kaos-server/` kreira binary. `go test ./internal/server/ -v` — svi testovi zeleni. Server sluša na portu, vraća JSON na API pozive. --- ## Pitanja --- ## Odgovori