3.7 KiB
3.7 KiB
agent-orchestrator status
Current main ships a working single-user local loop: the Go daemon and the
Electron/React frontend both drive a live daemon over HTTP/SSE/WebSocket. The
core GitHub flow works end-to-end: add project → spawn session/orchestrator →
attach terminal → observe PR → merge.
Build & test
The local gate is the backend Go build and race-enabled test suite:
cd backend && go build ./... && go test -race ./...
npm run lint (from the repo root) runs go test ./... plus golangci-lint.
Frontend checks live under frontend/ (npm run typecheck, npm run build).
See AGENTS.md for the regen workflow when touching the API
surface (npm run sqlc, npm run api).
Shipped
Backend (Go daemon)
- Loopback-only HTTP daemon (chi router, CORS, per-request timeout,
/healthz//readyz//shutdown). - SQLite store with goose migrations and sqlc-generated queries; DB
trigger-based change-data-capture intochange_log. - CDC poller + broadcaster feeding in-process subscribers and the SSE stream
atGET /api/v1/events(withLast-Event-IDreplay). - Full session lifecycle over HTTP: list, get, spawn, kill, restore, rename,
rollback, cleanup, send, activity, PR claim/list. Orchestrator routes
(list/spawn/get) are wired too. - Project CRUD plus per-project config (
PUT /projects/{id}/config). - PR action engine wired into the API:
POST /prs/{id}/mergeand
/prs/{id}/resolve-comments. - Review routes registered:
GET /reviews,POST /reviews/execute,
POST /reviews/{id}/send. - SCM observer (
internal/observe/scm) wired into the daemon: GitHub provider,
lazy/non-blocking auth, per-PR polling with ETag guards and semantic diffing,
feeding PR facts into lifecycle, which sends agent nudges for CI failures,
review feedback, and merge conflicts. - Terminal mux over WebSocket (
/mux): per-clientzellij attachPTY. - Lifecycle reducer plus reaper (
internal/observe/reaper). - Agent adapter platform under
internal/adapters/agent/(20+ adapters) with a
registry andao hooksactivity dispatch. - OpenAPI spec generated from Go DTOs; frontend TS types generated from it and
drift-checked in CI.
Frontend (Electron + React)
- Electron + React 19 + TanStack Router/Query + Tailwind + shadcn primitives.
- Real daemon wiring via the generated
openapi-fetchtyped client
(src/api/schema.ts); mock data only inVITE_NO_ELECTRONweb-preview mode. - Electron main handles daemon discovery, launch, and status reporting.
- Shell: sidebar (projects + sessions, add/remove project), sessions board,
session view + inspector, project settings, pull-requests page,
spawn-orchestrator flow. - Terminal pane (xterm) over the mux WebSocket, with a live SSE events
connection and port-rebind on daemon restart.
In flight / not yet a runtime feature
- Tracker lane: GitHub tracker adapter exists, but there is no daemon
observer loop or agent-lifecycle→issue mirroring yet, so the tracker does
nothing at runtime (#112). - Notifications: design/in-flight only; no shipped backend notifier or UI
center. - Live PR/tracker fact surfacing: the observer writes facts, but exposing
the fullpr_*/tracker_*CDC events to live consumers
(#110) and in
ao session get(#111)
is still open. - CLI parity for PR/review actions: merge, resolve-comments, and review are
HTTP-only (frontend-driven); there are noao pr/ao reviewcommands.
Tracking milestone:
rewrite.