- WriteReport generiše markdown izveštaj u reports/ - formatDuration, truncateOutput za formatiranje - Kreira folder ako ne postoji, skraćuje output na 50 linija - 10 reporter testova — svi prolaze - T03 premešten u done/ Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
92 lines
2.0 KiB
Markdown
92 lines
2.0 KiB
Markdown
# T03: Runner — pokretanje Claude Code
|
|
|
|
**Kreirao:** planer
|
|
**Datum:** 2026-02-20
|
|
**Agent:** coder
|
|
**Model:** Sonnet
|
|
**Zavisi od:** T02 ✅
|
|
|
|
---
|
|
|
|
## Opis
|
|
|
|
Pokreće Claude Code sa task promptom, prati stdout/stderr u realnom vremenu,
|
|
meri vreme, čuva exit code. Koristi task loader iz T02 za čitanje taskova.
|
|
|
|
## Fajlovi za kreiranje
|
|
|
|
```
|
|
code/internal/supervisor/
|
|
├── runner.go ← RunTask(), priprema prompt, pokreće claude CLI
|
|
└── runner_test.go ← testovi sa mock komandom
|
|
```
|
|
|
|
## Strukture
|
|
|
|
```go
|
|
type RunResult struct {
|
|
TaskID string
|
|
StartedAt time.Time
|
|
FinishedAt time.Time
|
|
Duration time.Duration
|
|
ExitCode int
|
|
Output string // stdout
|
|
Error string // stderr
|
|
}
|
|
```
|
|
|
|
## Funkcije
|
|
|
|
- `RunTask(task Task, projectPath string, timeout time.Duration) RunResult`
|
|
- `buildPrompt(task Task) string` — pripremi prompt za Claude Code
|
|
|
|
## Prompt format
|
|
|
|
```
|
|
Radi na KAOS projektu.
|
|
Tvoj task: {ID} — {Title}
|
|
Pročitaj CLAUDE.md u root-u projekta za pravila rada.
|
|
{Description}
|
|
Kad završiš: go build, go test, commituj sa "T{XX}: opis".
|
|
```
|
|
|
|
## Pokretanje
|
|
|
|
```go
|
|
cmd := exec.CommandContext(ctx, "claude",
|
|
"--print",
|
|
"--model", task.Model,
|
|
"--message", prompt,
|
|
)
|
|
cmd.Dir = projectPath
|
|
```
|
|
|
|
Timeout se čita iz config-a (KAOS_TIMEOUT). Context sa cancel za timeout.
|
|
|
|
## Testovi
|
|
|
|
- Mock: umesto `claude` pokreni `echo "done"` — proveri RunResult polja
|
|
- Timeout: pokreni `sleep 999` sa timeout 1s — proveri da se prekine, ExitCode != 0
|
|
- Output capture: pokreni komandu koja piše na stdout i stderr — proveri da su uhvaćeni
|
|
- buildPrompt: proveri da sadrži task ID, title, description
|
|
- Prazan task → graceful error
|
|
|
|
**Napomena:** Testovi koriste mock komande (echo, sleep), ne pravi Claude CLI.
|
|
|
|
## Očekivani izlaz
|
|
|
|
RunTask pokrene proces, uhvati output, meri vreme, poštuje timeout.
|
|
`go test ./internal/supervisor/ -v` — svi testovi zeleni.
|
|
|
|
---
|
|
|
|
## Pitanja
|
|
|
|
*(agent piše pitanja ovde, planer odgovara)*
|
|
|
|
---
|
|
|
|
## Odgovori
|
|
|
|
*(planer piše odgovore ovde)*
|