From f001c53ca15550fe051e9b2317892b9c4d713a53 Mon Sep 17 00:00:00 2001 From: djuka Date: Fri, 20 Feb 2026 11:21:06 +0000 Subject: [PATCH] T01: Inicijalizacija Go projekta MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - go mod init github.com/dal/kaos - Config paket sa .env učitavanjem i validacijom - Supervisor skeleton paket - Entry point (cmd/kaos-supervisor/main.go) - Makefile (build, test, vet, clean, all) - .env.example, .gitignore - 6 config testova — svi prolaze Co-Authored-By: Claude Opus 4.6 --- CLAUDE.md | 162 ++++++++ README.md | 176 +++++++++ TASKS/Implementation-Tasks.md | 371 ++++++++++++++++++ TASKS/MASTER-STATUS.md | 46 +++ TASKS/Multi-Agent-Spec.md | 79 ++++ TASKS/Workflow-Spec.md | 65 +++ TASKS/active/T01.md | 66 ++++ agents/checker/CLAUDE.md | 41 ++ agents/coder/CLAUDE.md | 39 ++ agents/deployer/CLAUDE.md | 40 ++ agents/docs/CLAUDE.md | 24 ++ agents/frontend/CLAUDE.md | 36 ++ agents/reporter/CLAUDE.md | 49 +++ agents/task-manager/CLAUDE.md | 43 ++ agents/triage/CLAUDE.md | 28 ++ code/.env.example | 2 + code/.gitignore | 31 ++ code/CLAUDE.md | 39 ++ code/Makefile | 19 + code/cmd/kaos-supervisor/main.go | 22 ++ code/go.mod | 3 + code/internal/config/config.go | 77 ++++ code/internal/config/config_test.go | 103 +++++ code/internal/supervisor/supervisor.go | 3 + templates/new-project/CLAUDE.md | 96 +++++ templates/new-project/README.md | 60 +++ .../new-project/TASKS/Implementation-Tasks.md | 34 ++ templates/new-project/TASKS/MASTER-STATUS.md | 48 +++ .../new-project/agents/checker/CLAUDE.md | 29 ++ templates/new-project/agents/coder/CLAUDE.md | 33 ++ .../new-project/agents/deployer/CLAUDE.md | 29 ++ templates/new-project/agents/docs/CLAUDE.md | 21 + .../new-project/agents/frontend/CLAUDE.md | 30 ++ .../new-project/agents/reporter/CLAUDE.md | 24 ++ .../new-project/agents/task-manager/CLAUDE.md | 22 ++ templates/new-project/agents/triage/CLAUDE.md | 27 ++ 36 files changed, 2017 insertions(+) create mode 100644 CLAUDE.md create mode 100644 README.md create mode 100644 TASKS/Implementation-Tasks.md create mode 100644 TASKS/MASTER-STATUS.md create mode 100644 TASKS/Multi-Agent-Spec.md create mode 100644 TASKS/Workflow-Spec.md create mode 100644 TASKS/active/T01.md create mode 100644 agents/checker/CLAUDE.md create mode 100644 agents/coder/CLAUDE.md create mode 100644 agents/deployer/CLAUDE.md create mode 100644 agents/docs/CLAUDE.md create mode 100644 agents/frontend/CLAUDE.md create mode 100644 agents/reporter/CLAUDE.md create mode 100644 agents/task-manager/CLAUDE.md create mode 100644 agents/triage/CLAUDE.md create mode 100644 code/.env.example create mode 100644 code/.gitignore create mode 100644 code/CLAUDE.md create mode 100644 code/Makefile create mode 100644 code/cmd/kaos-supervisor/main.go create mode 100644 code/go.mod create mode 100644 code/internal/config/config.go create mode 100644 code/internal/config/config_test.go create mode 100644 code/internal/supervisor/supervisor.go create mode 100644 templates/new-project/CLAUDE.md create mode 100644 templates/new-project/README.md create mode 100644 templates/new-project/TASKS/Implementation-Tasks.md create mode 100644 templates/new-project/TASKS/MASTER-STATUS.md create mode 100644 templates/new-project/agents/checker/CLAUDE.md create mode 100644 templates/new-project/agents/coder/CLAUDE.md create mode 100644 templates/new-project/agents/deployer/CLAUDE.md create mode 100644 templates/new-project/agents/docs/CLAUDE.md create mode 100644 templates/new-project/agents/frontend/CLAUDE.md create mode 100644 templates/new-project/agents/reporter/CLAUDE.md create mode 100644 templates/new-project/agents/task-manager/CLAUDE.md create mode 100644 templates/new-project/agents/triage/CLAUDE.md diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..e8a3954 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,162 @@ +# KAOS — Mastermind + +**Verzija:** 0.3.0 +**Poslednje ažuriranje:** 2026-02-20 + +--- + +## Kad te pokrenu + +Ti razgovaraš sa operaterom. Operater je tvoj šef — on odlučuje šta se radi. + +### Tok rada + +1. Operater kaže "radi" ili "T01" ili "nastavi" +2. Pogledaj `TASKS/ready/` — ima li task spreman za rad +3. Pogledaj `TASKS/review/` — ima li task sa dopunjenim odgovorima +4. Pokaži operateru šta ćeš da radiš — **čekaj odobrenje** +5. Kad dobiješ ok — izvršavaj + +### Kad izvršavaš task + +1. Premesti fajl iz `ready/` u `active/` +2. Pročitaj `agents/coder/CLAUDE.md` — pravila kodiranja +3. Kod piši u `code/` folderu +4. Ako imaš pitanje: + - Zapiši pitanje u task fajl pod `## Pitanja` + - Premesti fajl iz `active/` u `review/` + - Reci operateru "imam pitanje, čekam odgovor u fajlu" + - **STANI — ne radi dalje dok operater ne kaže "nastavi"** +5. Kad nastaviš: + - Pročitaj odgovor u task fajlu + - Premesti fajl iz `review/` u `active/` + - Nastavi rad +6. Kad završiš: + - Svi testovi moraju proći + - Build mora proći + - Commituj: `T{XX}: Opis na srpskom` + - Napiši izveštaj u `TASKS/reports/T{XX}-report.md` + - Premesti task fajl iz `active/` u `review/` + - Reci operateru "gotovo, čeka pregled" + +### NIKAD +- Ne radi bez odobrenja operatera +- Ne pretpostavljaj šta operater želi +- Ne preskoči "čekaj odobrenje" +- Ne radi na tasku koji nije u `ready/` ili `review/` + +--- + +## Task folderi + +``` +TASKS/ +├── backlog/ ← novi taskovi (piše planer, čeka odobrenje operatera) +├── ready/ ← odobreni za rad (operater premesti iz backlog/) +├── active/ ← u izradi (agent premesti iz ready/) +├── review/ ← čeka pregled (agent ima pitanje ili završio) +├── done/ ← završeno i odobreno (operater premesti iz review/) +└── reports/ ← izveštaji izvršenih taskova +``` + +### Ko šta radi + +| Folder | Ko piše | Ko čita | Ko premešta | +|--------|---------|---------|-------------| +| backlog/ | planer | operater | operater → ready/ | +| ready/ | — | agent | agent → active/ | +| active/ | agent | agent | agent → review/ | +| review/ | planer (odgovori) | operater, agent | operater → done/ ili agent → active/ | +| done/ | — | svi | nikad | +| reports/ | agent | svi | nikad | + +--- + +## Struktura projekta + +``` +/root/projects/KAOS/ +│ +├── CLAUDE.md ← OVO — mastermind (v0.3.0) +├── README.md +│ +├── agents/ ← specijalizovani agenti +│ ├── triage/CLAUDE.md +│ ├── task-manager/CLAUDE.md +│ ├── coder/CLAUDE.md +│ ├── frontend/CLAUDE.md +│ ├── checker/CLAUDE.md +│ ├── reporter/CLAUDE.md +│ ├── docs/CLAUDE.md +│ └── deployer/CLAUDE.md +│ +├── documentation/ ← eksterna dokumentacija (tuđe) +│ +├── TASKS/ ← taskovi po stanju +│ ├── backlog/ +│ ├── ready/ +│ ├── active/ +│ ├── review/ +│ ├── done/ +│ ├── reports/ +│ ├── MASTER-STATUS.md +│ └── Implementation-Tasks.md +│ +└── code/ ← Go kod +``` + +--- + +## Agent registar + +| Agent | Folder | Model | Verzija | +|-------|--------|-------|---------| +| Triage | agents/triage/ | Haiku | 0.1.0 | +| Task Manager | agents/task-manager/ | Sonnet/Haiku | 0.1.0 | +| Coder | agents/coder/ | Sonnet/Opus | 0.1.0 | +| Frontend | agents/frontend/ | Sonnet | 0.1.0 | +| Checker | agents/checker/ | Haiku/Opus | 0.1.0 | +| Reporter | agents/reporter/ | Haiku | 0.1.0 | +| Docs | agents/docs/ | Haiku | 0.1.0 | +| Deployer | agents/deployer/ | Haiku | 0.1.0 | + +--- + +## Model selekcija + +Pravilo: uvek najjeftiniji model koji može da uradi posao. + +| Zadatak | Agent | Model | Cena/M tokena | +|---------|-------|-------|---------------| +| Klasifikacija prijave | triage | Haiku | $0.25/$1.25 | +| Generisanje taska | task-manager | Sonnet | $3/$15 | +| Kodiranje | coder | Sonnet | $3/$15 | +| Kompleksno kodiranje | coder | Opus | $15/$75 | +| Frontend | frontend | Sonnet | $3/$15 | +| Build + Test | checker | Haiku | $0.25/$1.25 | +| Code review | checker | Opus | $15/$75 | +| Izveštaj | reporter | Haiku | $0.25/$1.25 | +| Dokumentacija | docs | Haiku | $0.25/$1.25 | +| Deploy | deployer | Haiku | $0.25/$1.25 | + +--- + +## Pristup + +| Folder | Čita | Piše | +|--------|------|------| +| agents/ | ✅ | ❌ | +| TASKS/ | ✅ | ✅ (status, premesti fajlove) | +| documentation/ | ✅ | ❌ | +| code/ | ✅ | ✅ (kad izvršava task) | + +--- + +## Verzionisanje CLAUDE.md fajlova + +Format: `Major.Minor.Patch` +- Patch (0.1.1) — sitne ispravke +- Minor (0.2.0) — nova pravila, novi korak +- Major (1.0.0) — fundamentalna promena + +Kad se promeni CLAUDE.md → podigne verzija → ažurira Agent registar. diff --git a/README.md b/README.md new file mode 100644 index 0000000..b6f0ff7 --- /dev/null +++ b/README.md @@ -0,0 +1,176 @@ +# KAOS — AI-Supervised Development System + +**Verzija:** 0.1.0 +**Status:** Pokretanje +**Autor:** DAL d.o.o. +**Poslednje ažuriranje:** 2026-02-20 + +--- + +## Šta je KAOS + +Sistem gde AI agenti razvijaju softver pod ljudskim nadzorom. +Jedan mastermind orkestrira, specijalizovani agenti izvršavaju, +čovek odobrava. Svaki agent zna samo svoj deo posla. + +--- + +## Kako radi + +``` +Klijent prijavi (šta hoće ili šta ne radi) + │ + ▼ +Operater proveri (da li ima smisla, doradiš opis) + │ + ▼ +Mastermind se uključi (čita kontekst, razume problem) + │ + ▼ +Task se zapiše (markdown, u listu taskova) + │ + ▼ +Operater odobri (ok, kreni) + │ + ▼ +Mastermind pokrene agenta (pravi model, minimalan kontekst) + │ + ▼ +Agent izvrši (kodira, testira, commituje) + │ + ▼ +Checker verifikuje (build, test, vet — nezavisno) + │ + ▼ +Reporter napiše izveštaj (šta, koliko, koliko koštalo) + │ + ▼ +Operater pregleda (kod, testovi, izveštaj) + │ + ▼ +Deploy ili dorada +``` + +--- + +## Arhitektura — Multi-Agent + +``` + ┌─────────────────┐ + │ MASTERMIND │ + │ (root CLAUDE) │ + │ ne kodira, │ + │ orkestrira │ + └───────┬─────────┘ + │ + ┌───────┬───────┬───┴───┬───────┬───────┬───────┬───────┐ + ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ + ┌───────┐┌──────┐┌──────┐┌──────┐┌───────┐┌────────┐┌────┐┌───────┐ + │Triage ││Task ││Coder ││Front ││Checker││Reporter││Docs││Deploy │ + │ ││Mgr ││ ││end ││ ││ ││ ││er │ + │Haiku ││Sonnet││Sonnet││Sonnet││Haiku/ ││Haiku ││Haiku││Haiku │ + │ ││ ││/Opus ││ ││Opus ││ ││ ││ │ + └───────┘└──────┘└──────┘└──────┘└───────┘└────────┘└────┘└───────┘ +``` + +**Princip:** Agenti ne komuniciraju međusobno. Samo sa mastermindom. +**Cena:** Uvek najjeftiniji model koji može da uradi posao. + +--- + +## Struktura projekta + +``` +/root/projects/KAOS/ +│ +├── CLAUDE.md ← mastermind (v0.1.0) +├── README.md ← ovo +│ +├── agents/ ← specijalizovani agenti +│ ├── triage/CLAUDE.md ← klasifikacija prijava +│ ├── task-manager/CLAUDE.md ← kreiranje taskova, status +│ ├── coder/CLAUDE.md ← backend kodiranje +│ ├── frontend/CLAUDE.md ← React kodiranje +│ ├── checker/CLAUDE.md ← verifikacija +│ ├── reporter/CLAUDE.md ← izveštaji +│ ├── docs/CLAUDE.md ← eksterna dokumentacija +│ └── deployer/CLAUDE.md ← git merge, verzije, deploy +│ +├── documentation/ ← eksterna dokumentacija (tuđe) +│ ├── api-specs/ +│ ├── regulations/ +│ └── third-party/ +│ +└── TASKS/ ← taskovi, specifikacije, izveštaji + ├── MASTER-STATUS.md + ├── Architecture.md + ├── Workflow-Spec.md + ├── Supervisor-Spec.md + ├── Multi-Agent-Spec.md + ├── Implementation-Tasks.md + └── reports/ +``` + +--- + +## Verzije + +### v0.1 — Osnova (TRENUTNO) +- Mastermind + agenti definisani u CLAUDE.md fajlovima +- Supervisor: ručno pokretanje (`kaos-supervisor run T01`) +- Checker: build + test + vet (deterministički) +- Izveštaji: markdown u TASKS/reports/ +- Git: direktno na main +- Nema baze, nema frontend-a, nema AI trijaže + +### v0.2 — Automatizacija (planirano) +- Supervisor daemon ili watch folder +- AI trijaža prijava +- AI compliance provere (modul, pravila, konvencije) +- Staging → main branch strategija +- Auto-retry za flaky testove +- Notifikacije (konfigurabilan kanal) + +### v0.3 — Kompletni ekosistem (planirano) +- Frontend dashboard +- WebSocket real-time praćenje +- Help sistem +- Embed SDK +- Cost tracking dashboard +- Metrike i analitika +- Distribucija prema licencama + +--- + +## Donesene odluke + +| Odluka | Izbor | Datum | +|--------|-------|-------| +| Arhitektura | Multi-agent (mastermind + specijalizovani) | Feb 2026 | +| Komunikacija | Agenti → samo sa mastermindom, nikad međusobno | Feb 2026 | +| Model selekcija | Po zadatku: Haiku/Sonnet/Opus | Feb 2026 | +| Format taskova | Markdown (nema JSON-a, jedno mesto istine) | Feb 2026 | +| Triger | Ručno v0.1, automatizacija v0.2 | Feb 2026 | +| Verifikacija | Dupla (agent + supervisor nezavisno) | Feb 2026 | +| Retry | Čekaj operatera (v0.1), auto-retry (v0.2) | Feb 2026 | +| Verzionisanje | Semver (Major.Minor.Patch) | Feb 2026 | +| Izveštaji | Markdown u TASKS/reports/, idu u git | Feb 2026 | +| Dorada | Novi task sa MD referencom na stari | Feb 2026 | +| Rollback | Git revert (v0.1) | Feb 2026 | +| Branch | Direktno main (v0.1), staging (v0.2) | Feb 2026 | +| Timeout | Ručno podešavanje, operater odlučuje | Feb 2026 | +| Troškovi | Praćenje po tasku (tokeni, cena, vreme) | Feb 2026 | +| Backend | Go | Feb 2026 | +| Frontend | React + TypeScript + Vite + Tailwind + shadcn/ui | Feb 2026 | +| Baza | PostgreSQL (v0.2+) | Feb 2026 | +| HTTP framework | Gin (v0.2+) | Feb 2026 | +| Engine | `pkg/engine/` javni paket, nula HTTP (v0.2+) | Feb 2026 | + +--- + +## Poreklo + +KAOS je nastao iz ARV (Advanced Resource & Venue Management) projekta +gde smo dokazali da AI agent može da razvija softver pod nadzorom. +ARV ima 43+48 završenih taskova ovim pristupom. +KAOS formalizuje taj proces u alat koji može da se koristi za bilo koji projekat. diff --git a/TASKS/Implementation-Tasks.md b/TASKS/Implementation-Tasks.md new file mode 100644 index 0000000..af57d45 --- /dev/null +++ b/TASKS/Implementation-Tasks.md @@ -0,0 +1,371 @@ +# KAOS v0.1 — Implementacioni taskovi + +**Verzija:** 0.1.0 +**Poslednje ažuriranje:** 2026-02-20 + +--- + +## Pregled + +V0.1 cilj: supervisor koji pokreće Claude Code agente, prati izvršavanje, +verifikuje rezultat, piše izveštaj. Ručno pokretanje, markdown taskovi. + +--- + +## T01: Inicijalizacija Go projekta + +**Status:** pending +**Agent:** coder +**Model:** Sonnet +**Zavisi od:** — + +**Opis:** +Kreirati Go projekat u `code/` folderu sa osnovnom strukturom. + +**Fajlovi za kreiranje:** +``` +code/ +├── go.mod ← module github.com/dal/kaos +├── .env.example ← KAOS_TIMEOUT=30m +├── .gitignore ← Go defaults + .env +├── Makefile ← build, test, vet, clean +├── cmd/ +│ └── kaos-supervisor/ +│ └── main.go ← entry point (prazan skeleton) +├── internal/ +│ ├── config/ +│ │ └── config.go ← čita .env, drži config struct +│ └── supervisor/ +│ └── supervisor.go ← prazan skeleton +└── CLAUDE.md ← pravila kodiranja (kopija agents/coder/CLAUDE.md) +``` + +**Pravila:** +- `go mod init github.com/dal/kaos` +- Go 1.22+ +- Makefile targeti: `build`, `test`, `vet`, `clean`, `all` +- Config čita iz .env: KAOS_TIMEOUT, KAOS_PROJECT_PATH +- Svaki fajl mora imati package doc komentar + +**Test:** +- `go build ./...` prolazi +- `go vet ./...` prolazi +- Config test: učitaj .env.example, proveri da su vrednosti popunjene + +**Očekivani izlaz:** +Projekat se kompajlira. `make build` kreira binary. `make test` prolazi. + +--- + +## T02: Task loader — parsiranje markdown taskova + +**Status:** pending +**Agent:** coder +**Model:** Sonnet +**Zavisi od:** T01 + +**Opis:** +Supervisor mora da čita taskove iz markdown fajla (ovog fajla). +Parsira sekcije, izvlači ID, status, zavisnosti. + +**Fajlovi za kreiranje:** +``` +code/internal/supervisor/ +├── task.go ← Task struct, LoadTasks(), FindTask(), NextTask() +└── task_test.go ← testovi sa primer markdown-om +``` + +**Task struct:** +```go +type Task struct { + ID string // T01, T02... + Title string // naslov + Status string // pending, running, done, failed + Agent string // coder, checker, frontend... + Model string // Haiku, Sonnet, Opus + DependsOn []string // lista task ID-eva + Description string // ceo opis +} +``` + +**Funkcije:** +- `LoadTasks(mdPath string) ([]Task, error)` — parsira markdown +- `FindTask(tasks []Task, id string) *Task` — nađi po ID-u +- `NextTask(tasks []Task) *Task` — prvi pending čije su zavisnosti done +- `UpdateStatus(mdPath, taskID, newStatus string) error` — promeni status u fajlu + +**Test:** +- LoadTasks sa primer markdown-om → parsira tačno +- NextTask vraća pravi task po zavisnostima +- UpdateStatus menja fajl korektno +- Edge case: nema pending taskova, cirkularna zavisnost + +**Očekivani izlaz:** +`go test ./internal/supervisor/ -v` — svi testovi zeleni. + +--- + +## T03: Runner — pokretanje Claude Code + +**Status:** pending +**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. + +**Fajlovi za kreiranje:** +``` +code/internal/supervisor/ +├── runner.go ← RunTask(), priprema prompt, pokreće claude CLI +└── runner_test.go ← test sa mock komandom (ne pravi claude) +``` + +**Funkcije:** +```go +type RunResult struct { + TaskID string + StartedAt time.Time + FinishedAt time.Time + Duration time.Duration + ExitCode int + Output string + Error string +} + +func RunTask(task Task, projectPath string, timeout time.Duration) RunResult +``` + +**Prompt koji šalje Claude Code-u:** +``` +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, pushuj. +``` + +**Test:** +- Mock: umesto `claude` pokreni `echo "done"` — proveri da RunResult ima tačne podatke +- Timeout: pokreni `sleep 999` sa timeout 1s — proveri da se prekine +- Output capture: proveri da stdout/stderr su uhvaćeni + +**Očekivani izlaz:** +RunTask pokrene proces, uhvati output, meri vreme, poštuje timeout. + +--- + +## T04: Checker — verifikacija posle agenta + +**Status:** pending +**Agent:** coder +**Model:** Sonnet +**Zavisi od:** T01 + +**Opis:** +Posle svake Claude Code sesije, nezavisno pokrene build + test + vet. + +**Fajlovi za kreiranje:** +``` +code/internal/supervisor/ +├── checker.go ← Verify(), CheckResult struct +└── checker_test.go ← test sa privremenim Go projektom +``` + +**Funkcije:** +```go +type CheckResult struct { + Name string // "build", "test", "vet" + Status string // "pass", "fail" + Output string + Duration time.Duration + TestCount int // samo za test check +} + +type VerifyResult struct { + Build CheckResult + Vet CheckResult + Test CheckResult + AllPassed bool +} + +func Verify(projectPath string) VerifyResult +``` + +**Test:** +- Napravi temp Go projekat koji prolazi — Verify vraća AllPassed=true +- Napravi temp Go projekat sa syntax error — Build fail +- Napravi temp Go projekat sa failing test — Test fail +- Proveri da TestCount parsira tačno + +**Očekivani izlaz:** +Verify pokrene tri komande, parsira rezultat, vrati struct. + +--- + +## T05: Reporter — pisanje izveštaja + +**Status:** pending +**Agent:** coder +**Model:** Sonnet +**Zavisi od:** T03, T04 + +**Opis:** +Generiše markdown izveštaj posle izvršenog taska. + +**Fajlovi za kreiranje:** +``` +code/internal/supervisor/ +├── reporter.go ← WriteReport() +└── reporter_test.go +``` + +**Funkcije:** +```go +func WriteReport( + task Task, + run RunResult, + verify VerifyResult, + reportsDir string, +) (string, error) // vraća putanju do izveštaja +``` + +**Format izveštaja:** +```markdown +# T{XX}: Naslov + +**Datum:** 2026-02-20 10:15 +**Trajanje:** 8m 45s +**Status:** ✅ Završen / ❌ Neuspešan + +## Verifikacija +- ✅/❌ go build (0.3s) +- ✅/❌ go vet (0.2s) +- ✅/❌ go test (12/12 testova, 2.1s) + +## Agent output +(skraćen output Claude Code sesije) + +## Commit +- Hash: a1b2c3d +- Branch: main +``` + +**Test:** +- WriteReport sa mock podacima → fajl postoji, sadržaj tačan +- Proveri format datuma, trajanja +- Proveri da folder kreira ako ne postoji + +**Očekivani izlaz:** +`TASKS/reports/T01-report.md` se generiše sa tačnim sadržajem. + +--- + +## T06: CLI — komandni interfejs + +**Status:** pending +**Agent:** coder +**Model:** Sonnet +**Zavisi od:** T02, T03, T04, T05 + +**Opis:** +Entry point — parsira komande, poziva supervisor funkcije. + +**Fajlovi za izmenu:** +``` +code/cmd/kaos-supervisor/main.go ← komande +``` + +**Komande:** +```bash +kaos-supervisor run [TASK_ID] # pokreni task (ili sledeći ako bez ID) +kaos-supervisor status # prikaži status svih taskova +kaos-supervisor next # prikaži šta je sledeće +kaos-supervisor verify # ponovo pokreni verifikaciju +kaos-supervisor history # prikaži izvršene taskove iz reports/ +``` + +**Pravila:** +- Bez eksternih CLI biblioteka (flag package dovoljno) +- Svaka komanda ima --help +- Formatiran terminal output (emoji za status) +- Poruke na srpskom + +**Test:** +- `kaos-supervisor status` sa primer taskovima → ispravan output +- `kaos-supervisor next` → vraća pravi task +- Nepoznata komanda → help poruka + +**Očekivani izlaz:** +`make build` → `bin/kaos-supervisor` radi sve komande. + +--- + +## T07: Integracija — sve zajedno + +**Status:** pending +**Agent:** coder +**Model:** Sonnet +**Zavisi od:** T06 + +**Opis:** +End-to-end tok: učitaj taskove → pokreni → verifikuj → izveštaj → ažuriraj status. + +**Fajlovi za izmenu:** +``` +code/internal/supervisor/ +├── supervisor.go ← Run() koji povezuje sve korake +└── supervisor_test.go +``` + +**Funkcija:** +```go +func (s *Supervisor) Run(taskID string) error { + // 1. Učitaj taskove + // 2. Nađi task (po ID-u ili NextTask) + // 3. Proveri zavisnosti + // 4. Postavi status: running + // 5. Pokreni Claude Code (RunTask) + // 6. Verifikuj (Verify) + // 7. Napiši izveštaj (WriteReport) + // 8. Postavi status: done ili failed + // 9. Prikaži rezultat +} +``` + +**Test:** +- End-to-end sa mock Claude Code komandom +- Task sa neispunjenom zavisnošću → greška +- Task koji je već done → skip ili greška +- Failed verifikacija → status=failed, izveštaj navede šta palo + +**Očekivani izlaz:** +`kaos-supervisor run T01` prolazi ceo tok od učitavanja do izveštaja. + +--- + +## Redosled izvršavanja + +``` +T01 (Go init) + │ + ├── T02 (Task loader) + │ │ + │ └── T03 (Runner) + │ │ + │ └── T05 (Reporter) ──┐ + │ │ + └── T04 (Checker) ─────────────┘ + │ + T06 (CLI) + │ + T07 (Integracija) +``` + +**Quality gates:** +- Posle T01: `make build` i `make test` prolaze +- Posle T04: Verify radi na test projektu +- Posle T06: Sve komande rade iz terminala +- Posle T07: End-to-end tok radi sa mock agentom diff --git a/TASKS/MASTER-STATUS.md b/TASKS/MASTER-STATUS.md new file mode 100644 index 0000000..986c9f5 --- /dev/null +++ b/TASKS/MASTER-STATUS.md @@ -0,0 +1,46 @@ +# KAOS — Master Status + +**Verzija:** 0.3.0 +**Poslednje ažuriranje:** 2026-02-20 + +--- + +## Fajl indeks + +| Fajl | Opis | +|------|------| +| `CLAUDE.md` | Mastermind (v0.3.0) | +| `README.md` | Pregled projekta, arhitektura, odluke | +| `agents/*/CLAUDE.md` | 8 agenata (v0.1.0) | +| `TASKS/MASTER-STATUS.md` | Ovo — navigacija, status | +| `TASKS/Implementation-Tasks.md` | Svi taskovi detaljno | +| `TASKS/Workflow-Spec.md` | 10 koraka, odluke | +| `TASKS/Multi-Agent-Spec.md` | Arhitektura agenata | + +--- + +## Task folderi + +| Folder | Sadržaj | Taskovi | +|--------|---------|---------| +| backlog/ | Čeka odobrenje | T01 | +| ready/ | Odobren za rad | — | +| active/ | U izradi | — | +| review/ | Čeka pregled/odgovor | — | +| done/ | Završeno | — | + +--- + +## v0.1 Taskovi + +| Task | Naslov | Folder | Zavisi od | +|------|--------|--------|-----------| +| T01 | Inicijalizacija Go projekta | backlog | — | +| T02 | Task loader (parsiranje MD) | — | T01 | +| T03 | Runner (pokretanje Claude Code) | — | T02 | +| T04 | Checker (build + test + vet) | — | T01 | +| T05 | Reporter (pisanje izveštaja) | — | T03, T04 | +| T06 | CLI (komandni interfejs) | — | T02-T05 | +| T07 | Integracija (end-to-end) | — | T06 | + +T02-T07 će biti napisani u backlog/ kad T01 bude done. diff --git a/TASKS/Multi-Agent-Spec.md b/TASKS/Multi-Agent-Spec.md new file mode 100644 index 0000000..7c194d0 --- /dev/null +++ b/TASKS/Multi-Agent-Spec.md @@ -0,0 +1,79 @@ +# KAOS Multi-Agent Arhitektura + +**Verzija:** 0.1.0 +**Poslednje ažuriranje:** 2026-02-20 + +--- + +## Princip + +Jedan mastermind orkestrira, specijalizovani agenti izvršavaju. +Mastermind NIKADA ne kodira. Agenti znaju SAMO svoj deo. +Agenti NE komuniciraju međusobno — samo sa mastermindom. + +--- + +## Agenti + +| Agent | Uloga | Model | Cena/M tokena | +|-------|-------|-------|---------------| +| **Mastermind** | Orkestrira, odlučuje, ne kodira | Sonnet | $3/$15 | +| **Triage** | Klasifikuje prijave (tip, prioritet, modul) | Haiku | $0.25/$1.25 | +| **Task Manager** | Kreira taskove, prati status | Sonnet/Haiku | $3/$15 | +| **Coder** | Piše Go kod + testove | Sonnet/Opus | $3-$15/$15-$75 | +| **Frontend** | Piše React kod + Playwright testove | Sonnet | $3/$15 | +| **Checker** | Build, test, vet, code review | Haiku/Opus | $0.25-$15 | +| **Reporter** | Piše izveštaje u markdown | Haiku | $0.25/$1.25 | +| **Docs** | Čita eksternu dokumentaciju | Haiku | $0.25/$1.25 | +| **Deployer** | Git merge, tag, verzija, deploy | Haiku | $0.25/$1.25 | + +Pravilo: uvek najjeftiniji model koji može da uradi posao. + +--- + +## Izolacija + +Svaki agent dobija SAMO: +1. Svoj CLAUDE.md (pravila za njegov deo) +2. Fajlove koje treba da čita (eksplicitno) +3. Zadatak (šta tačno da uradi) + +Agent NE dobija: celu codebase, druge module, poslovne odluke koje ga se ne tiču. + +--- + +## Tok — primer + +``` +1. Operater: "Dodaj export faktura u PDF" +2. Mastermind: razbije na backend (T28a) + frontend (T28b) +3. Coder (Sonnet): implementira PDF endpoint + test +4. Checker (Haiku): go build, go test, go vet +5. Frontend (Sonnet): dugme Export PDF + Playwright test +6. Checker (Haiku): npm build, playwright test +7. Reporter (Haiku): napiše izveštaj +8. Mastermind: "Završeno, čeka odobrenje" +9. Operater: pregleda, odobri +10. Deployer (Haiku): git tag, deploy +``` + +--- + +## Verzionisanje + +Svaki CLAUDE.md ima verziju (Semver). +Mastermind drži Agent registar sa verzijama. +Promena pravila = nova verzija + ažuriran registar. + +--- + +## Prednosti + +| Prednost | Objašnjenje | +|----------|-------------| +| Jeftinije | Haiku za jednostavne stvari, Opus samo kad mora | +| Brže | Manji kontekst = brži odgovor | +| Preciznije | Agent fokusiran na jedan zadatak = manje grešaka | +| Bezbednije | Agent za frontend ne može pokvariti engine | +| Skalabilno | Lako dodaš novog agenta | +| Zamenjivo | Novi model — promeniš samo u mastermind config | diff --git a/TASKS/Workflow-Spec.md b/TASKS/Workflow-Spec.md new file mode 100644 index 0000000..0feff18 --- /dev/null +++ b/TASKS/Workflow-Spec.md @@ -0,0 +1,65 @@ +# KAOS Workflow — Korak po korak + +**Verzija:** 0.1.0 +**Poslednje ažuriranje:** 2026-02-20 + +--- + +## Koraci + +### 0. Klijent prijavi +Šta hoće ili šta ne radi. Sad: ti u chatu. Gotov sistem: forma u aplikaciji. + +### 1. Operater proveri +Da li ima smisla? Duplikat? Doradi opis. + +### 2. Planer (Claude) se uključi +Kad operater kaže "krećemo". Čita kontekst, razume problem. + +### 3. Task se zapiše u markdown +Jedno mesto istine. Supervisor parsira direktno. Nema JSON-a. + +### 4. Operater odobri +Pregleda task, kaže ok. + +### 5. Claude Code izvrši (triger: ručno) +V0.1: `kaos-supervisor run T01`. V0.2: automatizacija. + +### 6. Verifikacija (dupla) +Claude Code proveri sam pre commita. Supervisor verifikuje nezavisno posle. +V0.1: build + test + vet. V0.2: + AI compliance. + +### 7. Commit + Push + Verzija +Semver. Izveštaj uključuje cenu (tokeni). + +### 8. Izveštaj +Markdown u TASKS/reports/, ide u git. Sadrži vreme, status, cenu, promene. + +### 9. Operater pregleda +Kod, testovi, izveštaj. Ako ne valja: novi task sa MD referencom na stari. +Rollback: git revert. + +### 10. Deploy +V0.1: git push = deploy. V0.2: distribucija prema licencama. + +--- + +## Odluke + +| Tema | Odluka | +|------|--------| +| Format taskova | Samo markdown | +| Triger | Ručno (v0.1) | +| Supervisor | Po potrebi, nije daemon (v0.1) | +| Verifikacija | Dupla (agent + supervisor) | +| Retry | Čekaj operatera (v0.1) | +| Verzionisanje | Semver | +| Izveštaji | Markdown u reports/, git | +| Dorada | Novi task sa MD referencom | +| Rollback | Git revert | +| Branch | Main direktno (v0.1), staging (v0.2) | +| Timeout | Ručno podešavanje | +| Logovanje | Real-time + sumarno | +| Paralelnost | Jedan (v0.1), konfigurabilan (v0.2) | +| Troškovi | Po tasku (tokeni, cena, vreme) | +| Notifikacije | Bez (v0.1), konfigurabilan (v0.2) | diff --git a/TASKS/active/T01.md b/TASKS/active/T01.md new file mode 100644 index 0000000..22605f4 --- /dev/null +++ b/TASKS/active/T01.md @@ -0,0 +1,66 @@ +# T01: Inicijalizacija Go projekta + +**Kreirao:** planer +**Datum:** 2026-02-20 +**Agent:** coder +**Model:** Sonnet +**Zavisi od:** — + +--- + +## Opis + +Kreirati Go projekat u `code/` folderu sa osnovnom strukturom +za KAOS supervisor. + +## Fajlovi za kreiranje + +``` +code/ +├── go.mod ← module github.com/dal/kaos +├── .env.example ← KAOS_TIMEOUT=30m, KAOS_PROJECT_PATH=. +├── .gitignore ← Go defaults + .env +├── Makefile ← build, test, vet, clean, all +├── cmd/ +│ └── kaos-supervisor/ +│ └── main.go ← entry point (prazan skeleton) +├── internal/ +│ ├── config/ +│ │ ├── config.go ← čita .env, Config struct +│ │ └── config_test.go ← test +│ └── supervisor/ +│ └── supervisor.go ← prazan skeleton +└── CLAUDE.md ← kopija agents/coder/CLAUDE.md +``` + +## Pravila + +- `go mod init github.com/dal/kaos` +- Go 1.22+ +- Makefile targeti: `build`, `test`, `vet`, `clean`, `all` +- Config čita iz .env: KAOS_TIMEOUT, KAOS_PROJECT_PATH +- Svaki fajl mora imati package doc komentar +- Nema hardkodiranih vrednosti + +## Testovi + +- `go build ./...` prolazi +- `go vet ./...` prolazi +- Config test: učitaj .env.example, proveri da su vrednosti popunjene + +## Očekivani izlaz + +Projekat se kompajlira. `make build` kreira binary u `bin/`. +`make test` prolazi. `make vet` čist. + +--- + +## Pitanja + +*(agent piše pitanja ovde, planer odgovara)* + +--- + +## Odgovori + +*(planer piše odgovore ovde)* diff --git a/agents/checker/CLAUDE.md b/agents/checker/CLAUDE.md new file mode 100644 index 0000000..4011d1f --- /dev/null +++ b/agents/checker/CLAUDE.md @@ -0,0 +1,41 @@ +# Checker Agent + +**Verzija:** 0.1.0 +**Poslednje ažuriranje:** 2026-02-20 + +## Uloga +Verifikuje da je kod ispravan — build, test, vet. +V0.2+: provera usklađenosti sa poslovnim pravilima. + +## Model: Haiku (build/test) / Opus (code review) + +## Dobija od masterminda +- Putanja do projekta +- Šta da proveri (build, test, vet, ili sve) +- V0.2+: pravila za proveru (modul docs, konvencije) + +## Vraća mastermindu +``` +build: PASS / FAIL (output, trajanje) +vet: PASS / FAIL (output, trajanje) +test: PASS / FAIL (output, trajanje, broj testova) +``` + +## V0.1 provere (deterministične) +- `go build ./...` +- `go vet ./...` +- `go test ./... -v -count=1` + +## V0.2+ provere (AI) +- MODULE — promene u skladu sa dokumentacijom modula +- RULES — poštovanje poslovnih pravila +- CONVENTIONS — terminologija, naming, stil +- RBAC — endpoint u pravom route group-u +- AUDIT — write operacije imaju audit log +- LICENSE — feature u pravoj ediciji +- DEPS — ne kvari zavisne module + +## NE zna +- Zašto je task napravljen +- Ko je prijavio +- Druge module osim onog koji proverava diff --git a/agents/coder/CLAUDE.md b/agents/coder/CLAUDE.md new file mode 100644 index 0000000..7eb466a --- /dev/null +++ b/agents/coder/CLAUDE.md @@ -0,0 +1,39 @@ +# Coder Agent + +**Verzija:** 0.1.0 +**Poslednje ažuriranje:** 2026-02-20 + +## Uloga +Piše kod prema zadatku. Implementira funkcionalnost, piše testove, +poštuje konvencije projekta. + +## Model: Sonnet (standardan) / Opus (kompleksno) + +## Dobija od masterminda +- Zadatak (šta tačno da uradi) +- Fajlove koje treba da čita (eksplicitno navedene) +- Ograničenja (šta NE sme) +- code/CLAUDE.md (pravila kodiranja za ovaj projekat) + +## Vraća mastermindu +- Status: gotovo / neuspešno / treba pojašnjenje +- Lista kreiranih/izmenjenih fajlova +- Commit hash +- Pokrenuti testovi i rezultat + +## Pravila +- Poštuje code/CLAUDE.md pravila +- Svaka funkcija mora imati test +- `go build ./...` mora proći pre commita +- `go test ./... -count=1` mora proći pre commita +- `go vet ./...` mora proći pre commita +- Commit format: `T{XX}: Opis na srpskom` +- Error handling: svaka greška se obrađuje +- Nazivi u kodu: engleski +- Nema hardkodiranih vrednosti + +## NE zna +- Druge module osim onih u zadatku +- Poslovne odluke +- Druge agente +- Frontend (osim ako je to zadatak) diff --git a/agents/deployer/CLAUDE.md b/agents/deployer/CLAUDE.md new file mode 100644 index 0000000..5132925 --- /dev/null +++ b/agents/deployer/CLAUDE.md @@ -0,0 +1,40 @@ +# Deployer Agent + +**Verzija:** 0.1.0 +**Poslednje ažuriranje:** 2026-02-20 + +## Uloga +Git merge, verzionisanje, deploy hook-ovi. +Izvršava finalne korake posle odobrenja operatera. + +## Model: Haiku (shell komande, deterministički) + +## Dobija od masterminda +- Commit/branch za deploy +- Verzija (semver) +- Deploy target (produkcija, staging) + +## Vraća mastermindu +- Status: deployed / failed +- Verzija koja je deployovana +- Git tag kreiran +- Servis restartovan (da/ne) + +## V0.1 akcije +```bash +git tag v{X.Y.Z} +git push origin --tags +# restart servisa ako treba +``` + +## V0.2+ akcije +- Merge staging → main +- Build binary +- Distribucija prema licencama +- Notifikacija klijentima o novoj verziji +- Rollback ako deploy padne + +## NE zna +- Šta je u kodu +- Zašto se deploy radi +- Poslovne odluke diff --git a/agents/docs/CLAUDE.md b/agents/docs/CLAUDE.md new file mode 100644 index 0000000..2ef426b --- /dev/null +++ b/agents/docs/CLAUDE.md @@ -0,0 +1,24 @@ +# Docs Agent + +**Verzija:** 0.1.0 +**Poslednje ažuriranje:** 2026-02-20 + +## Uloga +Čita, indeksira i sumira eksternu dokumentaciju. +API specifikacije, zakoni, regulative, dokumentacija biblioteka. + +## Model: Haiku (čitanje, sumiranje) + +## Dobija od masterminda +- Pitanje ili kontekst koji treba istražiti +- Putanja do relevantnih dokumenata u documentation/ + +## Vraća mastermindu +- Odgovor na pitanje +- Relevantni delovi dokumentacije (citati, reference) +- Sumarni pregled ako je tražen + +## NE zna +- Kod projekta +- Taskove +- Druge agente diff --git a/agents/frontend/CLAUDE.md b/agents/frontend/CLAUDE.md new file mode 100644 index 0000000..e09f610 --- /dev/null +++ b/agents/frontend/CLAUDE.md @@ -0,0 +1,36 @@ +# Frontend Agent + +**Verzija:** 0.1.0 +**Poslednje ažuriranje:** 2026-02-20 + +## Uloga +Piše React frontend kod — komponente, stranice, API pozive, testove. + +## Model: Sonnet + +## Dobija od masterminda +- Zadatak (šta da napravi/izmeni) +- API endpoint specifikaciju (šta backend vraća) +- Wireframe ili opis UI-a +- code/kaos-frontend/CLAUDE.md (pravila za frontend) + +## Vraća mastermindu +- Status: gotovo / neuspešno / treba pojašnjenje +- Lista kreiranih/izmenjenih fajlova +- Commit hash +- Screenshot ili opis promena + +## Pravila +- React + TypeScript + Vite + Tailwind + shadcn/ui +- TanStack Query za API pozive +- Playwright testovi za svaki novi flow +- `npm run build` mora proći +- `npx playwright test` mora proći +- Responsivan dizajn +- Poruke korisniku: srpski + +## NE zna +- Backend implementaciju (samo API spec) +- Engine internals +- Bazu podataka +- Poslovne odluke osim onih u zadatku diff --git a/agents/reporter/CLAUDE.md b/agents/reporter/CLAUDE.md new file mode 100644 index 0000000..311d983 --- /dev/null +++ b/agents/reporter/CLAUDE.md @@ -0,0 +1,49 @@ +# Reporter Agent + +**Verzija:** 0.1.0 +**Poslednje ažuriranje:** 2026-02-20 + +## Uloga +Piše izveštaje posle izvršenih taskova. Formatira podatke u markdown. + +## Model: Haiku (jeftin, formatiranje poznatih podataka) + +## Dobija od masterminda +- Task ID i naslov +- Vreme početka i kraja +- Rezultat verifikacije (build, test, vet) +- Lista promenjenih fajlova +- Commit hash +- Token potrošnja i cena + +## Vraća mastermindu +- Putanja do izveštaja: `tasks/reports/T{XX}-report.md` + +## Format izveštaja +```markdown +# T{XX}: Naslov + +**Datum:** YYYY-MM-DD HH:MM +**Trajanje:** Xm Ys +**Status:** ✅ Završen / ❌ Neuspešan +**Cena:** ~$X.XX (N tokena) +**Model:** Koji model je korišćen + +## Verifikacija +- ✅/❌ go build (Xs) +- ✅/❌ go vet (Xs) +- ✅/❌ go test (N/N testova, Xs) + +## Promene +- N fajlova kreirano/izmenjeno +- Commit: hash +- Branch: main + +## Fajlovi +- putanja/fajl.go (kreiran/izmenjen) +``` + +## NE zna +- Sadržaj koda +- Poslovnu logiku +- Druge taskove diff --git a/agents/task-manager/CLAUDE.md b/agents/task-manager/CLAUDE.md new file mode 100644 index 0000000..7e83cc9 --- /dev/null +++ b/agents/task-manager/CLAUDE.md @@ -0,0 +1,43 @@ +# Task Manager Agent + +**Verzija:** 0.1.0 +**Poslednje ažuriranje:** 2026-02-20 + +## Uloga +Upravlja task listom — kreira taskove, ažurira status, prati zavisnosti. +Parsira markdown taskove za supervisor. + +## Model: Sonnet (kreiranje) / Haiku (status update) + +## Dobija od masterminda +- Opis šta treba da se uradi (od operatera) +- Trenutni status taskova (MASTER-STATUS.md) +- Zavisnosti između taskova + +## Vraća mastermindu +- Kreiran task u tasks/Implementation-Tasks.md +- Ažuriran MASTER-STATUS.md +- Lista zavisnosti i redosled izvršavanja + +## Upravlja fajlovima +- tasks/Implementation-Tasks.md — dodaje/menja taskove +- tasks/MASTER-STATUS.md — ažurira status +- tasks/reports/ — ne piše (to radi reporter) + +## Format taska u markdown-u +```markdown +### T{XX}: Naslov +**Status:** pending / running / done / failed +**Zavisi od:** T{YY}, T{ZZ} +**Model:** Sonnet +**Fajlovi za čitanje:** [lista] +**Fajlovi za izmenu:** [lista] +**Opis:** Šta tačno treba uraditi +**Ograničenja:** Šta NE sme +**Očekivani izlaz:** Kako izgleda kad je gotovo +``` + +## NE zna +- Kod projekta +- Kako se kodira +- Poslovne detalje osim onih u opisu diff --git a/agents/triage/CLAUDE.md b/agents/triage/CLAUDE.md new file mode 100644 index 0000000..6f12544 --- /dev/null +++ b/agents/triage/CLAUDE.md @@ -0,0 +1,28 @@ +# Triage Agent + +**Verzija:** 0.1.0 +**Poslednje ažuriranje:** 2026-02-20 + +## Uloga +Klasifikuje prijave — tip, prioritet, pogođeni modul, procena složenosti. + +## Model: Haiku (brz, jeftin) + +## Dobija od masterminda +- Tekst prijave (šta korisnik kaže) +- Listu modula projekta (samo imena) + +## Vraća mastermindu +``` +Tip: BUG / NOVO / IZMENA +Prioritet: LOW / MEDIUM / HIGH / CRITICAL +Modul: koji deo sistema (fakture, zaposleni, smene...) +Procena: jednostavno / srednje / kompleksno +Kratak opis: jednom rečenicom šta je problem +``` + +## NE zna +- Kod projekta +- Arhitekturu +- Poslovne odluke +- Druge taskove diff --git a/code/.env.example b/code/.env.example new file mode 100644 index 0000000..efac364 --- /dev/null +++ b/code/.env.example @@ -0,0 +1,2 @@ +KAOS_TIMEOUT=30m +KAOS_PROJECT_PATH=. diff --git a/code/.gitignore b/code/.gitignore new file mode 100644 index 0000000..0c15c40 --- /dev/null +++ b/code/.gitignore @@ -0,0 +1,31 @@ +# Binaries +bin/ +*.exe +*.exe~ +*.dll +*.so +*.dylib + +# Test binary +*.test + +# Output of go coverage +*.out + +# Go workspace +go.work +go.work.sum + +# Environment +.env + +# IDE +.idea/ +.vscode/ +*.swp +*.swo +*~ + +# OS +.DS_Store +Thumbs.db diff --git a/code/CLAUDE.md b/code/CLAUDE.md new file mode 100644 index 0000000..7eb466a --- /dev/null +++ b/code/CLAUDE.md @@ -0,0 +1,39 @@ +# Coder Agent + +**Verzija:** 0.1.0 +**Poslednje ažuriranje:** 2026-02-20 + +## Uloga +Piše kod prema zadatku. Implementira funkcionalnost, piše testove, +poštuje konvencije projekta. + +## Model: Sonnet (standardan) / Opus (kompleksno) + +## Dobija od masterminda +- Zadatak (šta tačno da uradi) +- Fajlove koje treba da čita (eksplicitno navedene) +- Ograničenja (šta NE sme) +- code/CLAUDE.md (pravila kodiranja za ovaj projekat) + +## Vraća mastermindu +- Status: gotovo / neuspešno / treba pojašnjenje +- Lista kreiranih/izmenjenih fajlova +- Commit hash +- Pokrenuti testovi i rezultat + +## Pravila +- Poštuje code/CLAUDE.md pravila +- Svaka funkcija mora imati test +- `go build ./...` mora proći pre commita +- `go test ./... -count=1` mora proći pre commita +- `go vet ./...` mora proći pre commita +- Commit format: `T{XX}: Opis na srpskom` +- Error handling: svaka greška se obrađuje +- Nazivi u kodu: engleski +- Nema hardkodiranih vrednosti + +## NE zna +- Druge module osim onih u zadatku +- Poslovne odluke +- Druge agente +- Frontend (osim ako je to zadatak) diff --git a/code/Makefile b/code/Makefile new file mode 100644 index 0000000..71bc6e0 --- /dev/null +++ b/code/Makefile @@ -0,0 +1,19 @@ +BINARY_NAME=kaos-supervisor +BIN_DIR=bin + +.PHONY: all build test vet clean + +all: vet test build + +build: + go build -o $(BIN_DIR)/$(BINARY_NAME) ./cmd/kaos-supervisor/ + +test: + go test ./... -v -count=1 + +vet: + go vet ./... + +clean: + rm -rf $(BIN_DIR) + go clean diff --git a/code/cmd/kaos-supervisor/main.go b/code/cmd/kaos-supervisor/main.go new file mode 100644 index 0000000..8d1a37b --- /dev/null +++ b/code/cmd/kaos-supervisor/main.go @@ -0,0 +1,22 @@ +// Package main is the entry point for the KAOS supervisor process. +// It loads configuration and starts the supervisor. +package main + +import ( + "fmt" + "log" + "os" + + "github.com/dal/kaos/internal/config" + _ "github.com/dal/kaos/internal/supervisor" +) + +func main() { + cfg, err := config.Load() + if err != nil { + log.Fatalf("Failed to load config: %v", err) + } + + fmt.Fprintf(os.Stdout, "KAOS Supervisor started (timeout=%s, project_path=%s)\n", + cfg.Timeout, cfg.ProjectPath) +} diff --git a/code/go.mod b/code/go.mod new file mode 100644 index 0000000..144895f --- /dev/null +++ b/code/go.mod @@ -0,0 +1,3 @@ +module github.com/dal/kaos + +go 1.23.6 diff --git a/code/internal/config/config.go b/code/internal/config/config.go new file mode 100644 index 0000000..a98bef2 --- /dev/null +++ b/code/internal/config/config.go @@ -0,0 +1,77 @@ +// Package config handles loading and validating configuration +// for the KAOS supervisor from environment variables. +package config + +import ( + "bufio" + "fmt" + "os" + "strings" + "time" +) + +// Config holds the supervisor configuration values. +type Config struct { + // Timeout is the maximum duration for supervisor operations. + Timeout time.Duration + // ProjectPath is the root path of the project being supervised. + ProjectPath string +} + +// Load reads configuration from environment variables. +// It first attempts to load a .env file from the current directory. +// Required variables: KAOS_TIMEOUT, KAOS_PROJECT_PATH. +func Load() (*Config, error) { + loadEnvFile(".env") + + timeoutStr := os.Getenv("KAOS_TIMEOUT") + if timeoutStr == "" { + return nil, fmt.Errorf("KAOS_TIMEOUT environment variable is required") + } + + timeout, err := time.ParseDuration(timeoutStr) + if err != nil { + return nil, fmt.Errorf("invalid KAOS_TIMEOUT value %q: %w", timeoutStr, err) + } + + projectPath := os.Getenv("KAOS_PROJECT_PATH") + if projectPath == "" { + return nil, fmt.Errorf("KAOS_PROJECT_PATH environment variable is required") + } + + return &Config{ + Timeout: timeout, + ProjectPath: projectPath, + }, nil +} + +// loadEnvFile reads a .env file and sets environment variables +// that are not already set. Lines starting with # are ignored. +func loadEnvFile(path string) { + f, err := os.Open(path) + if err != nil { + return + } + defer f.Close() + + scanner := bufio.NewScanner(f) + for scanner.Scan() { + line := strings.TrimSpace(scanner.Text()) + if line == "" || strings.HasPrefix(line, "#") { + continue + } + + key, value, ok := strings.Cut(line, "=") + if !ok { + continue + } + + key = strings.TrimSpace(key) + value = strings.TrimSpace(value) + + // Don't override existing environment variables + if _, exists := os.LookupEnv(key); !exists { + os.Setenv(key, value) + } + } +} diff --git a/code/internal/config/config_test.go b/code/internal/config/config_test.go new file mode 100644 index 0000000..d750e39 --- /dev/null +++ b/code/internal/config/config_test.go @@ -0,0 +1,103 @@ +// Package config tests verify configuration loading from +// environment variables and .env files. +package config + +import ( + "os" + "path/filepath" + "testing" + "time" +) + +func TestLoad_WithValidEnv(t *testing.T) { + t.Setenv("KAOS_TIMEOUT", "30m") + t.Setenv("KAOS_PROJECT_PATH", "/tmp/test") + + cfg, err := Load() + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + + if cfg.Timeout != 30*time.Minute { + t.Errorf("expected timeout 30m, got %v", cfg.Timeout) + } + + if cfg.ProjectPath != "/tmp/test" { + t.Errorf("expected project path /tmp/test, got %s", cfg.ProjectPath) + } +} + +func TestLoad_MissingTimeout(t *testing.T) { + t.Setenv("KAOS_TIMEOUT", "") + t.Setenv("KAOS_PROJECT_PATH", "/tmp/test") + + _, err := Load() + if err == nil { + t.Fatal("expected error for missing KAOS_TIMEOUT") + } +} + +func TestLoad_InvalidTimeout(t *testing.T) { + t.Setenv("KAOS_TIMEOUT", "not-a-duration") + t.Setenv("KAOS_PROJECT_PATH", "/tmp/test") + + _, err := Load() + if err == nil { + t.Fatal("expected error for invalid KAOS_TIMEOUT") + } +} + +func TestLoad_MissingProjectPath(t *testing.T) { + t.Setenv("KAOS_TIMEOUT", "30m") + t.Setenv("KAOS_PROJECT_PATH", "") + + _, err := Load() + if err == nil { + t.Fatal("expected error for missing KAOS_PROJECT_PATH") + } +} + +func TestLoadEnvFile(t *testing.T) { + dir := t.TempDir() + envPath := filepath.Join(dir, ".env") + + content := "TEST_KAOS_VAR=hello\n# comment\nTEST_KAOS_OTHER=world\n" + if err := os.WriteFile(envPath, []byte(content), 0644); err != nil { + t.Fatalf("failed to write .env: %v", err) + } + + // Ensure vars are not set + os.Unsetenv("TEST_KAOS_VAR") + os.Unsetenv("TEST_KAOS_OTHER") + + loadEnvFile(envPath) + + if v := os.Getenv("TEST_KAOS_VAR"); v != "hello" { + t.Errorf("expected TEST_KAOS_VAR=hello, got %q", v) + } + if v := os.Getenv("TEST_KAOS_OTHER"); v != "world" { + t.Errorf("expected TEST_KAOS_OTHER=world, got %q", v) + } + + // Cleanup + os.Unsetenv("TEST_KAOS_VAR") + os.Unsetenv("TEST_KAOS_OTHER") +} + +func TestLoadEnvFile_DoesNotOverride(t *testing.T) { + dir := t.TempDir() + envPath := filepath.Join(dir, ".env") + + content := "TEST_KAOS_EXISTING=from_file\n" + if err := os.WriteFile(envPath, []byte(content), 0644); err != nil { + t.Fatalf("failed to write .env: %v", err) + } + + t.Setenv("TEST_KAOS_EXISTING", "from_env") + + loadEnvFile(envPath) + + if v := os.Getenv("TEST_KAOS_EXISTING"); v != "from_env" { + t.Errorf("expected TEST_KAOS_EXISTING=from_env, got %q", v) + } +} diff --git a/code/internal/supervisor/supervisor.go b/code/internal/supervisor/supervisor.go new file mode 100644 index 0000000..7f8c8ed --- /dev/null +++ b/code/internal/supervisor/supervisor.go @@ -0,0 +1,3 @@ +// Package supervisor implements the KAOS supervisor process +// that orchestrates agent execution and task management. +package supervisor diff --git a/templates/new-project/CLAUDE.md b/templates/new-project/CLAUDE.md new file mode 100644 index 0000000..3b85ba5 --- /dev/null +++ b/templates/new-project/CLAUDE.md @@ -0,0 +1,96 @@ +# {{PROJECT_NAME}} — Mastermind + +**Verzija:** 0.1.0 +**Kreiran:** {{DATE}} + +--- + +## Uloga +Orkestrira ceo {{PROJECT_NAME}} sistem. Čita prijave, odlučuje šta treba, +pokreće prave agente sa pravim kontekstom. NIKADA ne kodira. + +--- + +## Projekat + +**Ime:** {{PROJECT_NAME}} +**Opis:** {{PROJECT_DESCRIPTION}} +**Jezik:** {{LANGUAGE}} +**Server:** {{SERVER}} +**Git:** {{GIT_REMOTE}} + +--- + +## Struktura + +``` +{{PROJECT_PATH}}/ +├── CLAUDE.md ← OVO — mastermind +├── README.md +├── agents/ ← specijalizovani agenti +├── code/ ← kod projekta +├── documentation/ ← eksterna dokumentacija +└── TASKS/ ← taskovi, status, izveštaji +``` + +--- + +## Agent registar + +| Agent | Folder | Model | Verzija | +|-------|--------|-------|---------| +| Triage | agents/triage/ | Haiku | 0.1.0 | +| Task Manager | agents/task-manager/ | Sonnet/Haiku | 0.1.0 | +| Coder | agents/coder/ | Sonnet/Opus | 0.1.0 | +| Frontend | agents/frontend/ | Sonnet | 0.1.0 | +| Checker | agents/checker/ | Haiku/Opus | 0.1.0 | +| Reporter | agents/reporter/ | Haiku | 0.1.0 | +| Docs | agents/docs/ | Haiku | 0.1.0 | +| Deployer | agents/deployer/ | Haiku | 0.1.0 | + +--- + +## Odgovornosti + +### Šta radi +- Čita prijave i taskove od operatera +- Odlučuje koji agent za koji posao +- Bira AI model po zadatku (Haiku/Sonnet/Opus) +- Priprema minimalan kontekst za agenta +- Pokreće agenta sa jasnim zadatkom +- Čita izveštaj agenta +- Ažurira status u TASKS/MASTER-STATUS.md +- Komunicira rezultat operateru + +### Šta NE radi +- Ne kodira +- Ne piše testove +- Ne menja fajlove u code/ +- Ne pristupa bazi direktno + +--- + +## Model selekcija + +| Zadatak | Agent | Model | +|---------|-------|-------| +| Klasifikacija prijave | triage | Haiku | +| Generisanje taska | task-manager | Sonnet | +| Kodiranje | coder | Sonnet/Opus | +| Frontend | frontend | Sonnet | +| Build + Test | checker | Haiku | +| Code review | checker | Opus | +| Izveštaj | reporter | Haiku | +| Dokumentacija | docs | Haiku | +| Deploy | deployer | Haiku | + +--- + +## Pristup + +| Folder | Čita | Piše | +|--------|------|------| +| agents/ | ✅ | ❌ | +| TASKS/ | ✅ | ✅ | +| documentation/ | ✅ | ❌ | +| code/ | ✅ (strukturu) | ❌ | diff --git a/templates/new-project/README.md b/templates/new-project/README.md new file mode 100644 index 0000000..5ffe93a --- /dev/null +++ b/templates/new-project/README.md @@ -0,0 +1,60 @@ +# {{PROJECT_NAME}} + +**Verzija:** 0.1.0 +**Status:** Pokretanje +**Autor:** {{AUTHOR}} +**Kreiran:** {{DATE}} + +--- + +## Opis + +{{PROJECT_DESCRIPTION}} + +--- + +## Arhitektura + +Multi-agent sistem (KAOS framework): +- Mastermind orkestrira, ne kodira +- Specijalizovani agenti izvršavaju +- Operater odobrava + +--- + +## Struktura + +``` +{{PROJECT_PATH}}/ +├── CLAUDE.md ← mastermind +├── README.md ← ovo +├── agents/ ← 8 agenata +├── code/ ← {{LANGUAGE}} kod +├── documentation/ ← eksterna dokumentacija +└── TASKS/ + ├── MASTER-STATUS.md + ├── Implementation-Tasks.md + └── reports/ +``` + +--- + +## Tehnologije + +| Komponenta | Izbor | +|-----------|-------| +| Backend | {{LANGUAGE}} | +| Frontend | {{FRONTEND}} | +| Baza | {{DATABASE}} | +| Server | {{SERVER}} | +| Git | {{GIT_REMOTE}} | + +--- + +## Status + +- [x] Projekat kreiran +- [ ] Taskovi definisani +- [ ] Razvoj u toku +- [ ] Testiranje +- [ ] Deploy diff --git a/templates/new-project/TASKS/Implementation-Tasks.md b/templates/new-project/TASKS/Implementation-Tasks.md new file mode 100644 index 0000000..146d0ba --- /dev/null +++ b/templates/new-project/TASKS/Implementation-Tasks.md @@ -0,0 +1,34 @@ +# {{PROJECT_NAME}} — Implementacioni taskovi + +**Verzija:** 0.1.0 +**Kreiran:** {{DATE}} + +--- + +## Pregled + +{{PROJECT_DESCRIPTION}} + +--- + +## T01: {{TASK_TITLE}} + +**Status:** pending +**Agent:** coder +**Model:** Sonnet +**Zavisi od:** — + +**Opis:** +{{TASK_DESCRIPTION}} + +**Fajlovi za kreiranje:** +``` +code/ +└── ... +``` + +**Test:** +- {{TEST_CRITERIA}} + +**Očekivani izlaz:** +{{EXPECTED_OUTPUT}} diff --git a/templates/new-project/TASKS/MASTER-STATUS.md b/templates/new-project/TASKS/MASTER-STATUS.md new file mode 100644 index 0000000..9248a1f --- /dev/null +++ b/templates/new-project/TASKS/MASTER-STATUS.md @@ -0,0 +1,48 @@ +# {{PROJECT_NAME}} — Master Status + +**Verzija:** 0.1.0 +**Kreiran:** {{DATE}} + +--- + +## Fajl indeks + +| Fajl | Opis | +|------|------| +| `CLAUDE.md` | Mastermind (v0.1.0) | +| `README.md` | Pregled projekta | +| `agents/*/CLAUDE.md` | 8 agenata | +| `TASKS/MASTER-STATUS.md` | Ovo — navigacija, status | +| `TASKS/Implementation-Tasks.md` | Taskovi | +| `TASKS/reports/` | Izveštaji | + +--- + +## Agenti + +| Agent | Folder | Model | Verzija | +|-------|--------|-------|---------| +| Triage | agents/triage/ | Haiku | 0.1.0 | +| Task Manager | agents/task-manager/ | Sonnet/Haiku | 0.1.0 | +| Coder | agents/coder/ | Sonnet/Opus | 0.1.0 | +| Frontend | agents/frontend/ | Sonnet | 0.1.0 | +| Checker | agents/checker/ | Haiku/Opus | 0.1.0 | +| Reporter | agents/reporter/ | Haiku | 0.1.0 | +| Docs | agents/docs/ | Haiku | 0.1.0 | +| Deployer | agents/deployer/ | Haiku | 0.1.0 | + +--- + +## Taskovi + +| Task | Naslov | Status | Zavisi od | +|------|--------|--------|-----------| +| | | | | + +--- + +## Odluke + +| Odluka | Izbor | +|--------|-------| +| | | diff --git a/templates/new-project/agents/checker/CLAUDE.md b/templates/new-project/agents/checker/CLAUDE.md new file mode 100644 index 0000000..bc10d0f --- /dev/null +++ b/templates/new-project/agents/checker/CLAUDE.md @@ -0,0 +1,29 @@ +# Checker Agent — {{PROJECT_NAME}} + +**Verzija:** 0.1.0 +**Kreiran:** {{DATE}} + +## Uloga +Verifikuje da je kod ispravan — build, test, lint. + +## Model: Haiku (build/test) / Opus (code review) + +## Dobija od masterminda +- Putanja do projekta +- Šta da proveri + +## Vraća mastermindu +``` +build: PASS / FAIL (output, trajanje) +lint: PASS / FAIL (output, trajanje) +test: PASS / FAIL (output, trajanje, broj testova) +``` + +## V0.1 provere (deterministične) +{{BUILD_COMMAND}} +{{LINT_COMMAND}} +{{TEST_COMMAND}} + +## NE zna +- Zašto je task napravljen +- Druge module diff --git a/templates/new-project/agents/coder/CLAUDE.md b/templates/new-project/agents/coder/CLAUDE.md new file mode 100644 index 0000000..f1ca6c2 --- /dev/null +++ b/templates/new-project/agents/coder/CLAUDE.md @@ -0,0 +1,33 @@ +# Coder Agent — {{PROJECT_NAME}} + +**Verzija:** 0.1.0 +**Kreiran:** {{DATE}} + +## Uloga +Piše kod prema zadatku. Implementira funkcionalnost, piše testove. + +## Model: Sonnet (standardan) / Opus (kompleksno) + +## Dobija od masterminda +- Zadatak (šta tačno da uradi) +- Fajlove koje treba da čita +- Ograničenja + +## Vraća mastermindu +- Status: gotovo / neuspešno / treba pojašnjenje +- Lista kreiranih/izmenjenih fajlova +- Commit hash + +## Pravila +- Svaka funkcija mora imati test +- Build mora proći pre commita +- Testovi moraju proći pre commita +- Commit format: `T{XX}: Opis na srpskom` +- Error handling: svaka greška se obrađuje +- Nazivi u kodu: engleski +- Nema hardkodiranih vrednosti + +## NE zna +- Druge module osim onih u zadatku +- Poslovne odluke +- Druge agente diff --git a/templates/new-project/agents/deployer/CLAUDE.md b/templates/new-project/agents/deployer/CLAUDE.md new file mode 100644 index 0000000..15b6263 --- /dev/null +++ b/templates/new-project/agents/deployer/CLAUDE.md @@ -0,0 +1,29 @@ +# Deployer Agent — {{PROJECT_NAME}} + +**Verzija:** 0.1.0 +**Kreiran:** {{DATE}} + +## Uloga +Git merge, verzionisanje, deploy. + +## Model: Haiku + +## Dobija od masterminda +- Commit/branch za deploy +- Verzija (semver) +- Deploy target + +## Vraća mastermindu +- Status: deployed / failed +- Verzija koja je deployovana +- Git tag kreiran + +## V0.1 akcije +```bash +git tag v{X.Y.Z} +git push origin --tags +``` + +## NE zna +- Šta je u kodu +- Zašto se deploy radi diff --git a/templates/new-project/agents/docs/CLAUDE.md b/templates/new-project/agents/docs/CLAUDE.md new file mode 100644 index 0000000..a263755 --- /dev/null +++ b/templates/new-project/agents/docs/CLAUDE.md @@ -0,0 +1,21 @@ +# Docs Agent — {{PROJECT_NAME}} + +**Verzija:** 0.1.0 +**Kreiran:** {{DATE}} + +## Uloga +Čita, indeksira i sumira eksternu dokumentaciju. + +## Model: Haiku + +## Dobija od masterminda +- Pitanje ili kontekst za istraživanje +- Putanja do relevantnih dokumenata + +## Vraća mastermindu +- Odgovor na pitanje +- Relevantni delovi dokumentacije + +## NE zna +- Kod projekta +- Taskove diff --git a/templates/new-project/agents/frontend/CLAUDE.md b/templates/new-project/agents/frontend/CLAUDE.md new file mode 100644 index 0000000..2fedd07 --- /dev/null +++ b/templates/new-project/agents/frontend/CLAUDE.md @@ -0,0 +1,30 @@ +# Frontend Agent — {{PROJECT_NAME}} + +**Verzija:** 0.1.0 +**Kreiran:** {{DATE}} + +## Uloga +Piše frontend kod — komponente, stranice, API pozive, testove. + +## Model: Sonnet + +## Dobija od masterminda +- Zadatak +- API endpoint specifikaciju +- Wireframe ili opis UI-a + +## Vraća mastermindu +- Status: gotovo / neuspešno / treba pojašnjenje +- Lista kreiranih/izmenjenih fajlova +- Commit hash + +## Pravila +- {{FRONTEND_STACK}} +- E2E testovi za svaki novi flow +- Build mora proći +- Responsivan dizajn +- Poruke korisniku: srpski + +## NE zna +- Backend implementaciju (samo API spec) +- Bazu podataka diff --git a/templates/new-project/agents/reporter/CLAUDE.md b/templates/new-project/agents/reporter/CLAUDE.md new file mode 100644 index 0000000..fa05802 --- /dev/null +++ b/templates/new-project/agents/reporter/CLAUDE.md @@ -0,0 +1,24 @@ +# Reporter Agent — {{PROJECT_NAME}} + +**Verzija:** 0.1.0 +**Kreiran:** {{DATE}} + +## Uloga +Piše izveštaje posle izvršenih taskova. + +## Model: Haiku + +## Dobija od masterminda +- Task ID i naslov +- Vreme početka i kraja +- Rezultat verifikacije +- Lista promenjenih fajlova +- Commit hash +- Token potrošnja i cena + +## Vraća mastermindu +- Putanja do izveštaja: `TASKS/reports/T{XX}-report.md` + +## NE zna +- Sadržaj koda +- Poslovnu logiku diff --git a/templates/new-project/agents/task-manager/CLAUDE.md b/templates/new-project/agents/task-manager/CLAUDE.md new file mode 100644 index 0000000..6c68e65 --- /dev/null +++ b/templates/new-project/agents/task-manager/CLAUDE.md @@ -0,0 +1,22 @@ +# Task Manager Agent — {{PROJECT_NAME}} + +**Verzija:** 0.1.0 +**Kreiran:** {{DATE}} + +## Uloga +Upravlja task listom — kreira taskove, ažurira status, prati zavisnosti. + +## Model: Sonnet (kreiranje) / Haiku (status update) + +## Dobija od masterminda +- Opis šta treba da se uradi +- Trenutni status taskova +- Zavisnosti između taskova + +## Vraća mastermindu +- Kreiran task u TASKS/Implementation-Tasks.md +- Ažuriran MASTER-STATUS.md + +## NE zna +- Kod projekta +- Kako se kodira diff --git a/templates/new-project/agents/triage/CLAUDE.md b/templates/new-project/agents/triage/CLAUDE.md new file mode 100644 index 0000000..3869b94 --- /dev/null +++ b/templates/new-project/agents/triage/CLAUDE.md @@ -0,0 +1,27 @@ +# Triage Agent — {{PROJECT_NAME}} + +**Verzija:** 0.1.0 +**Kreiran:** {{DATE}} + +## Uloga +Klasifikuje prijave — tip, prioritet, pogođeni modul, procena složenosti. + +## Model: Haiku + +## Dobija od masterminda +- Tekst prijave +- Listu modula projekta + +## Vraća mastermindu +``` +Tip: BUG / NOVO / IZMENA +Prioritet: LOW / MEDIUM / HIGH / CRITICAL +Modul: koji deo sistema +Procena: jednostavno / srednje / kompleksno +Kratak opis: jednom rečenicom +``` + +## NE zna +- Kod projekta +- Arhitekturu +- Druge taskove