KAOS/TASKS/review/T14.md
djuka 70e2ee684f T14: Dodata konzola sa SSE streaming i dva paralelna panela
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 12:51:16 +00:00

111 lines
3.8 KiB
Markdown

# T14: Dashboard — konzola za komunikaciju sa agentom
**Kreirao:** planer
**Datum:** 2026-02-20
**Agent:** coder
**Model:** Sonnet
**Zavisi od:** T12
---
## Opis
Terminal/konzola unutar dashboarda. Operater šalje komande mastermindu,
vidi output. Kao chat sa Claude Code-om ali iz browsera.
## Kako radi
1. Tab "Konzola" na dashboardu
2. Dva panela — mogućnost pokretanja 2 paralelne sesije
3. Svaka sesija = zaseban Claude Code proces (`claude` CLI)
4. Operater šalje komandu → ENTER
5. Server pokrene Claude Code sa tom komandom
6. Output se prikazuje u realnom vremenu (SSE stream)
7. Kad završi — prompt se vraća
## Izgled
```
┌──────────────────────────┬──────────────────────────┐
│ 🔧 Sesija 1 │ 🔧 Sesija 2 │
├──────────────────────────┼──────────────────────────┤
│ > radi T13 │ > radi T14 │
│ ✅ T13 pokrenut... │ ✅ T14 pokrenut... │
│ [streaming output] │ [streaming output] │
│ ... │ ... │
│ │ │
│ ┌────────────────────┐ │ ┌────────────────────┐ │
│ │ Komanda... [⏎] │ │ │ Komanda... [⏎] │ │
│ └────────────────────┘ │ └────────────────────┘ │
└──────────────────────────┴──────────────────────────┘
```
Operater može koristiti 1 ili 2 panela. Drugi panel se otvara dugmetom [+].
## Endpointi
```
POST /console/exec → pokreni komandu (body: {"cmd": "...", "session": 1|2})
GET /console/stream/{id} → SSE stream outputa
GET /console/history/{session} → istorija komandi za sesiju
POST /console/kill/{session} → prekini proces u sesiji
GET /console/sessions → status obe sesije (idle/running)
```
## Podržane komande
Konzola poziva kaos-supervisor CLI:
| Komanda | Šta radi |
|---------|----------|
| `status` | Prikaži status svih taskova |
| `next` | Šta je sledeće za rad |
| `verify` | Pokreni verifikaciju |
| `history` | Prikaži izvršene taskove |
| `radi [TASK_ID]` | Pokreni task |
Nepoznata komanda → prosleđuje se Claude Code-u kao free-form prompt.
## SSE streaming
```javascript
const source = new EventSource('/console/stream/' + execId);
source.onmessage = function(e) {
document.getElementById('console-output').innerHTML += e.data + '\n';
};
source.addEventListener('done', function(e) {
source.close();
// vrati prompt
});
```
## Pravila
- Max 2 paralelne sesije (svaka = zaseban `claude` proces)
- Sesije ne smeju raditi na istom tasku
- Server proverava: ako je task već active/ u drugoj sesiji → odbij
- Timeout: KAOS_TIMEOUT iz .env (po sesiji)
- Output se čuva u memoriji (poslednje 50 komandi po sesiji)
- Scroll to bottom na novi output
- Ctrl+C → prekini trenutnu komandu (POST /console/kill/{session})
- Istorija komandi: ↑/↓ strelice (po sesiji)
- Claude Code se pokreće: `claude --dangerously-skip-permissions`
## Testovi
- POST /console/exec {"cmd": "status", "session": 1} → 200 + exec ID
- GET /console/stream/{id} → SSE stream
- Dve sesije paralelno → obe rade
- Isti task u obe sesije → druga odbijena
- POST /console/kill/1 → prekine sesiju 1
- GET /console/sessions → status obe sesije
- GET /console/history/1 → lista komandi sesije 1
---
## Pitanja
---
## Odgovori