- internal/llama/template.go: ChatML/Llama3 template engine with stop tokens - internal/agent/reasoning.go: parse <think>/<reasoning> tags from LLM output - companion/promptbuilder.go: output structured BuildResult, add date/time context - agent/agent.go: wire templates + reasoning split into message loop - storage: add reasoning TEXT column to messages table + migration - channel/tui.go: collapsible reasoning (tab toggle), mouse scroll, polished dimmed style - config: CHAT_TEMPLATE env var (chatml|llama3|none) - plan.md: mark Phase 2 complete, add themes TODO
4.0 KiB
4.0 KiB
AGENTS.md — DivaCode
Commands
make all # lint → vet → build
make build # go build -o build/divad ./cmd/divad
make run # build + run (needs llama.cpp on :8080)
make test # go test -race -count=1 ./...
make lint # golangci-lint run ./...
make vet # go vet ./...
make tidy # go mod tidy
make clean # rm -rf build/
Private proxy for deps:
GONOSUMDB=git.db123.ir GONOSUMCHECK=git.db123.ir GOPRIV=git.db123.ir \
GOPROXY=https://proxy.golang.org,direct go vet ./...
Architecture
| Layer | Dir | Role |
|---|---|---|
| Entrypoint | cmd/divad/main.go |
Wires agent, llama, companion, TUI, API, scheduler |
| Agent | internal/agent/ |
Message loop: receive → memory search → prompt → llama → save → respond |
| Companion | internal/companion/ |
Personality (5 traits), relationship, reflection, mood, prompt builder |
| Memory | internal/memory/ |
RAG store + self-memory (promises, strategies) |
| Inference | internal/llama/ |
llama.cpp HTTP client (POST /completion, POST /embedding, GET /health) |
| Storage | internal/storage/ |
SQLite wrapper, auto-creates data/, auto-migrates on startup |
| Channel | internal/channel/ |
Bubble Tea TUI + Matrix stub |
| Tools | internal/tools/ |
MCP tool registry + builtins (web_fetch, web_search stub) |
| Config | internal/config/ |
All env vars via std lib os.Getenv only |
| Types | pkg/types/, pkg/personality/ |
Shared data types |
Key constraints
- Module:
git.db123.ir/db123/divacode— private Gitea. SetGOPRIV,GONOSUMDB,GONOSUMCHECKforgo mod tidy/go build. - Database:
modernc.org/sqlite(pure Go, no CGO). 12 tables across two schema groups ininternal/storage/migrations.go. Two DB files:divacode.db(conversations, messages, context_state, memories) andcompanion.db(personality, relationship, reflection, self-memory).data/dir auto-created on startup. - Migrations are code-internal constants; the
migrations/directory is empty. - llama.cpp required at runtime. Default
http://localhost:8080. Agent exits if health check fails. - Logging:
[LEVEL] [TIME] [FILE:LINE] message key=val. SetLOG_LEVEL=DEBUGfor verbose output. - HTTP API (enabled via
API_ENABLED=true): std libnet/httponly. Endpoints:GET /health,POST /v1/chat,POST /v1/conversations. - TUI: Bubble Tea with
tea.WithAltScreen(). Enter to send, backspace to edit, Ctrl+C/Ctrl+Q to quit. - Formatters in
opencode.json:gofmtfor.go,prettierfor everything else. LSP enabled. - Config: all via env vars, never third-party config libs. See
.env.examplefor all knobs.
Conventions (from "The Holy Code Bible")
| Context | Rule |
|---|---|
| Exported Go identifiers | PascalCase |
| Unexported Go identifiers | camelCase |
| Go file names | snake_case.go |
| Error wrapping | fmt.Errorf("context: %w", err) |
| Error checking | always check, no silent discards |
| Config | env vars only via os.Getenv |
| HTTP API | std lib net/http only, no third-party routers |