KAOS/TASKS/review/T03.md
djuka 9d2c249ed1 T03: Runner — pokretanje Claude Code
- RunTask sa timeout-om, stdout/stderr capture, exit code
- buildPrompt generiše prompt za Claude CLI
- CommandBuilder interfejs za mock testiranje
- 7 runner testova — svi prolaze
- T04 premešten u done/

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 11:46:07 +00:00

2.0 KiB

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

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

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)