99 lines
5.0 KiB
Markdown
99 lines
5.0 KiB
Markdown
# 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.
|
|
|
|
This file tracks progress. For what the product _is_ and how to run it, see the
|
|
top-level [`README.md`](../README.md); for the backend mental model see
|
|
[`architecture.md`](architecture.md).
|
|
|
|
## Build & test
|
|
|
|
The local gate is the backend Go build and race-enabled test suite:
|
|
|
|
```bash
|
|
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`](../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 into `change_log`.
|
|
- CDC poller + broadcaster feeding in-process subscribers and the SSE stream
|
|
at `GET /api/v1/events` (with `Last-Event-ID` replay).
|
|
- 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}/merge` and
|
|
`/prs/{id}/resolve-comments`.
|
|
- Review routes registered: `GET /reviews`, `POST /reviews/execute`,
|
|
`POST /reviews/{id}/send`.
|
|
- Durable dashboard notifications for `needs_input`, `ready_to_merge`,
|
|
`pr_merged`, and `pr_closed_unmerged`: backend enrichment/persistence,
|
|
unread list, live notification stream, and read acknowledgement API.
|
|
- 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
|
|
([#75](https://github.com/aoagents/agent-orchestrator/issues/75),
|
|
[#108](https://github.com/aoagents/agent-orchestrator/issues/108),
|
|
[#109](https://github.com/aoagents/agent-orchestrator/issues/109)).
|
|
- Terminal mux over WebSocket (`/mux`): per-client `zellij attach` PTY.
|
|
- Lifecycle reducer plus reaper (`internal/observe/reaper`).
|
|
- Agent adapter platform under `internal/adapters/agent/` (23 adapters) with a
|
|
registry and `ao hooks` activity 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-fetch` typed client
|
|
(`src/api/schema.ts`); mock data only in `VITE_NO_ELECTRON` web-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.
|
|
- Desktop status and SCM summary V1: session status comes from
|
|
`GET /api/v1/sessions`; visible/active PR context comes from
|
|
`GET /api/v1/sessions/{sessionId}/pr`; `GET /api/v1/events` is kept open as
|
|
an invalidation stream rather than a full PR payload stream.
|
|
- Concise PR summaries include PR identity, CI state with failing check names
|
|
and links, human reviewer IDs/counts/links for unresolved review comments,
|
|
and mergeability reasons. Raw CI logs and review comment bodies are
|
|
intentionally not part of the desktop V1 API/UI.
|
|
- Terminal pane (xterm) over the mux WebSocket, with a live SSE events
|
|
connection and port-rebind on daemon restart.
|
|
- In-app notification center with unread catch-up over REST, live notification
|
|
stream updates, explicit open-target actions, mark-read controls, and
|
|
Electron app toasts while the app is running.
|
|
|
|
## 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](https://github.com/aoagents/agent-orchestrator/issues/112)).
|
|
- **Full raw PR/tracker fact surfacing**: the SCM observer writes facts and the
|
|
desktop consumes concise PR summaries, but exposing the full raw `pr_*` /
|
|
`tracker_*` CDC events to live consumers
|
|
([#110](https://github.com/aoagents/agent-orchestrator/issues/110)) and in
|
|
`ao session get` ([#111](https://github.com/aoagents/agent-orchestrator/issues/111))
|
|
is still open.
|
|
- **CLI parity for PR/review actions**: merge, resolve-comments, and review are
|
|
HTTP-only (frontend-driven); there are no `ao pr` / `ao review` commands.
|
|
|
|
Tracking milestone:
|
|
[`rewrite`](https://github.com/aoagents/agent-orchestrator/milestone/1).
|