* feat: add npm run api scripts and document API contract change flow Adds three root package.json scripts mirroring the sqlc convention: - api:spec — runs go generate to regenerate openapi.yaml - api:ts — runs openapi-typescript@7.4.4 to generate frontend/src/api/schema.ts - api — runs both in sequence (the single contributor command) Documents the full flow in a new AGENTS.md "API contract changes" section so contributors know which files to edit, how to regenerate, and what to verify. Implements slice 1 of issue #102. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * fix: correct paths in AGENTS.md API contract changes section - api:ts equivalent command: use full relative path backend/internal/httpd/apispec/openapi.yaml, not bare openapi.yaml - verify command: prefix with `cd backend &&` so it works from repo root Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat: add CI drift guard for OpenAPI spec and frontend TS types - Adds api-drift job to go.yml: regenerates openapi.yaml + schema.ts via `npm run api`, then fails if git diff detects any change - Expands go.yml path filter to trigger on package.json and schema.ts - Commits initial schema.ts generated from the current spec - Notes the CI guard in AGENTS.md API contract changes section Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * fix: address review feedback on api-drift CI job - Scope git diff to schema.ts only; openapi.yaml drift is already caught by TestBuild_MatchesEmbedded in the build-test Go job - Add npm ci step so openapi-typescript is installed from the lockfile rather than re-fetched by npx on every run - Move openapi-typescript from npx -y to a pinned devDependency (exact 7.4.4, no caret) with a committed package-lock.json - Note in AGENTS.md Verify block that go test does not cover schema.ts drift Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com> |
||
|---|---|---|
| .github/workflows | ||
| backend | ||
| docs | ||
| frontend | ||
| test/cli | ||
| .envrc | ||
| .gitignore | ||
| AGENTS.md | ||
| CLAUDE.md | ||
| README.md | ||
| flake.lock | ||
| flake.nix | ||
| package-lock.json | ||
| package.json | ||
README.md
agent-orchestrator
Rewrite of the agent-orchestrator: a long-running Go backend daemon (backend/)
paired with a placeholder Electron + TypeScript frontend shell (frontend/).
See docs/ for architecture and status — start with the
Lifecycle Manager + Session Service lane in docs/architecture.md.
Backend daemon
The Go backend now has a Cobra-based ao CLI in backend/cmd/ao.
The CLI controls the HTTP daemon — a loopback-only sidecar the Electron
supervisor will also use. The daemon skeleton includes the chi router,
middleware stack (recoverer → request-id → logger → real-ip), /healthz +
/readyz, atomic running.json PID/port handshake, graceful shutdown on
SIGINT/SIGTERM, SQLite storage, CDC polling, and lifecycle/reaper wiring.
Run
cd backend
go run ./cmd/ao start # start the daemon and wait for readiness
go run ./cmd/ao status # inspect PID/port/health/readiness
go run ./cmd/ao stop # gracefully stop the daemon
go run ./cmd/ao daemon # internal daemon entrypoint
go run . # compatibility wrapper; starts the daemon
AO_PORT=3019 go run ./cmd/ao start # override per invocation
Health check:
curl localhost:3001/healthz # includes status/service/pid
curl localhost:3001/readyz # includes status/service/pid
Configuration (env only)
The bind host is always 127.0.0.1: the daemon is a loopback-only sidecar
and binding any other interface would be a security regression, so the host
is intentionally not env-configurable.
| Var | Default | Purpose |
|---|---|---|
AO_PORT |
3001 |
bind port; fails fast if taken |
AO_REQUEST_TIMEOUT |
60s |
per-request timeout (Go duration) |
AO_SHUTDOWN_TIMEOUT |
10s |
graceful-shutdown hard cap |
AO_RUN_FILE |
<UserConfigDir>/agent-orchestrator/running.json |
PID + port handshake path |
AO_DATA_DIR |
<UserConfigDir>/agent-orchestrator/data |
SQLite DB, WAL files, and managed state |
Test
npm run lint
# optional deeper backend pass:
cd backend && go test -race ./...