KAOS/docs/ARCHITECTURE.md
djuka 098ed13705 T22: Reorganizacija testova + logs handler + konzola fix
- Razbijen monolitni server_test.go na fokusirane test fajlove:
  api_test.go, dashboard_test.go, docs_test.go, search_test.go,
  submit_test.go, task_detail_test.go, console_test.go, sse_test.go,
  timestamp_test.go, ui_test.go, test_helpers_test.go
- Dodat logs.go handler (handleLogsTail) koji je nedostajao
- Dodat LogFile u config
- Fix konzola: prompt se šalje preko fajla umesto direktno u PTY
- 192 testova prolazi

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-21 04:45:50 +00:00

160 lines
3.9 KiB
Markdown

# KAOS — Arhitektura
**Verzija:** 0.3.0
**Poslednje azuriranje:** 2026-02-21
---
## Tech Stack
| Komponenta | Tehnologija |
|------------|-------------|
| Backend | Go 1.22+ |
| HTTP framework | Gin |
| Frontend | Go templates + HTMX + xterm.js |
| Terminali | xterm.js 5.5.0 (CDN) + WebSocket |
| PTY | github.com/creack/pty |
| WebSocket | github.com/gorilla/websocket |
| Markdown | github.com/yuin/goldmark |
| Drag & Drop | Sortable.js |
| Real-time | Server-Sent Events (SSE) |
| Baza | Nema (disk je source of truth) |
---
## Struktura koda
```
code/
├── cmd/
│ ├── kaos-server/ # HTTP server entry point
│ └── kaos-supervisor/ # CLI supervisor (legacy)
├── internal/
│ ├── config/ # Konfiguracija (env vars)
│ ├── server/ # HTTP handleri, PTY, WS, render
│ └── supervisor/ # Task scanner, file ops
├── web/
│ ├── static/ # CSS, JS (htmx, sortable, theme)
│ └── templates/ # Go templates (go:embed)
│ ├── layout.html
│ ├── console.html
│ └── partials/
│ ├── task-card.html
│ └── task-detail.html
├── go.mod
├── go.sum
└── .env.example
```
---
## Kljucne komponente
### Server (server.go)
- Gin router sa svim rutama
- No-cache middleware za dinamicke rute
- SSE event broker za real-time update
- Task session manager za PTY sesije
### Task Session Manager (console.go)
- `taskSessionManager` - mapa PTY sesija po task ID
- `startSession()` - spawna interaktivni claude u PTY
- Prompt se pise u temp fajl, claude dobija jednolinijsku instrukciju
- Sesije prezivljavaju page reload (PTY na serveru)
### PTY Session (pty_session.go)
- `consolePTYSession` - wrapper oko PTY procesa
- RingBuffer (1MB) za replay output-a
- Subscriber pattern za vise WS klijenata
- `spawnTaskPTY()` - claude --permission-mode dontAsk
### WebSocket Handler (ws.go)
- Konektuje se na postojecu PTY sesiju po kljucu
- Replay buffer na konekciju
- Bidirekcioni: PTY output -> browser, keyboard -> PTY
- Resize podrska
### Render Engine (render.go)
- Go templates sa go:embed
- Dashboard, task detail, report modal
- Markdown -> HTML sa goldmark
- Docs sa sidebar layoutom
### SSE Events (events.go)
- Event broker sa poll intervalom
- Hash task stanja za detekciju promena
- Broadcast samo kad se nesto promeni
---
## Dijagram toka - "Pusti" dugme
```
Browser: klik "Pusti"
|
v
POST /task/T08/run
|
v
handleRunTask:
1. Validacija (status, deps)
2. MoveTask ready -> active
3. appendTimestamp
4. Cita task sadrzaj
5. buildWorkPrompt -> temp fajl
6. startSession(T08, "work", ...)
|
v
spawnTaskPTY -> claude --permission-mode dontAsk
|
v
goroutine: ceka first output, salje prompt
|
v
JSON response {status: started, task: T08}
|
v
Browser: redirect /console
|
v
refreshSessions() -> GET /console/sessions
|
v
createTerminal(T08) -> WS /console/ws/T08
|
v
Replay buffer + live output
```
---
## Environment varijable
| Varijabla | Opis | Primer |
|-----------|------|--------|
| KAOS_PORT | HTTP port | 8080 |
| KAOS_PROJECT_PATH | Root projekta | /root/projects/KAOS |
| KAOS_TASKS_DIR | Tasks folder | /root/projects/KAOS/TASKS |
| KAOS_TIMEOUT | Timeout za agente | 300s |
---
## Testovi
Testovi su razdvojeni po oblasti:
| Fajl | Oblast |
|------|--------|
| test_helpers_test.go | Deljeni setup i helper funkcije |
| api_test.go | REST API endpointi |
| dashboard_test.go | Dashboard HTML rendering |
| task_detail_test.go | Task detail, report, run |
| docs_test.go | Dokumenti stranica |
| search_test.go | Pretraga |
| submit_test.go | Prijava taskova |
| sse_test.go | Server-Sent Events |
| console_test.go | Konzola, sesije, prompt builderi |
| ui_test.go | UI ponasanje |
| timestamp_test.go | Vremena, PTY, RingBuffer |
| logs_test.go | Server logovi |