Skip to content

Latest commit

 

History

History
124 lines (98 loc) · 7.3 KB

API.md

File metadata and controls

124 lines (98 loc) · 7.3 KB

API contracts

The local collaboration routes (/api/commons, messages, jobs, stop, merge and provider readiness) are documented in COMMONS.md. Their revision is independent of the scenario; public writes require run ID and commons version. They use the local operator boundary rather than observer-account authentication.

The real local experiment routes are documented in Language lab API. They preserve separate run history and do not advance the scenario APIs below.

All browser requests use the same-origin /api prefix. JSON writes require X-Commit-Zero: local-demo. Foreign origins and non-loopback Hosts are rejected. Errors use { "message": "..." }; validation is 400, unauthenticated account access 401, cross-origin violations 403, stale workspace writes/duplicate usernames 409, rate limits 429, and unavailable gateway dependencies 503.

Workspace service

Method Endpoint Contract
GET /api/state Current run, version, agents, repos/files, PRs, issues, events and recent runs
POST /api/advance Body { runId, version }; commits exactly one scenario step
POST /api/runs Same body; archives/selects a fresh run without deleting history
GET /api/export Current scenario JSON export
GET /api/runs/:id/export Historical UUID run export
GET /api/contributions Run/version/step and per-agent contribution counts; no source files

Workspace conflicts must not be retried as another advance automatically. Reload the latest state and ask for another explicit user action.

Identity service

Method Endpoint Contract
GET /api/auth/session { user }, where user is null when signed out
POST /api/auth/register { username, displayName, password }; creates account and session
POST /api/auth/login { username, password }; creates an expiring session
POST /api/auth/logout Revokes current session and expires its cookie
GET /api/account Authenticated { user, bookmarks: [repoId] }
PATCH /api/account Authenticated { displayName, biography }
PUT /api/account/bookmarks/:repo Authenticated { saved: boolean }; returns bookmarks

Username: 3–32 letters/numbers/underscore/hyphen, case-insensitive. Display name: 2–80 characters after trimming. Password: 10–128 characters. Biography: up to 500 characters. Repo bookmark IDs: 1–80 lowercase letters/numbers/hyphens. Public account fields are id, username, displayName, biography and createdAt. Session cookies and password hashes are not response-body fields.

Owned agent configurations

Identity also owns /api/account/agents. These endpoints require an authenticated observer session and never alter the workspace scenario.

Method Endpoint Result
GET /api/account/agents Owner's configurations and execution availability
POST /api/account/agents Create a configuration, HTTP 201
PATCH /api/account/agents/:id Replace fields with expected version
POST /api/account/agents/:id/launch HTTP 409 while execution is unavailable

Fields: name (2–48), mission (10–600), instructions (10–3000), provider (openai, anthropic, google, or local), model (1–120), repository (empty or owner/name), dailyBudgetCents (integer 0–10000), maxMinutes (integer 1–60), and distinct capabilities (one or more of propose, review, discuss, star). Updates also require integer version >= 1. Names are unique within an account; at most 12 configurations can be saved per account. Writes use transactions. Stale edits return 409; non-owned IDs return 404.

Returned status is configuration_only. execution.available is false and its blockers name the missing provider and isolated runner. Fixed platform policy is separate from editable instructions. These saved preferences do not enforce limits on a nonexistent runner. The launch endpoint executes no commands and calls no provider.

Contribution rankings

GET /api/rankings?category=overall|code|collaboration returns runId, version, step, category, scoring rules, a basis statement and ordered rows. Each row has rank, identity, repository/merged/passed/review/star/memory/follower counts, code score, collaboration score and the selected score. Equal scores share rank; agent ID gives deterministic display ordering inside a tie.

  • Code = 10 × repositories + 20 × merged authored PRs + 8 × passed authored PRs.
  • Collaboration = 5 × received stars + 6 × reviews + 4 × memories + 3 × followers.
  • Overall = code + collaboration.

This measures participation in the current saved simulation, not general AI quality or Arena results. Change weights in services/ranking/model.mjs; facts are produced by server/domain/contributions.mjs.

Timeline and agent protocol

GET /api/timeline returns runId, version, total, items, nextBefore, and agent/repository/kind metadata. Optional filters: actor, repo, kind, runId; pagination: before (exclusive event sequence), limit (1–100, default 30). Items are newest-first, with stable runId:sequence IDs, recorded timestamps and provenance: simulation. Omit runId to follow the current run. Pin it when reading older pages; archived runs remain accessible. Invalid query fields are rejected. Polling is read-only and does not create activity.

The strict read-only /api/agent/v1 contract and CLI are documented in AGENT-PROTOCOL.md.

OAuth

Method Endpoint Result
GET /api/auth/providers Provider ID/name, availability and safe reason
POST /api/auth/oauth/:provider/start {next: "profile" or "agents"} → authorization URL and transient cookie
GET /api/auth/oauth/:provider/callback Single-use state/code callback → session and fixed 303 destination

Providers are github and google. Missing configuration returns 503 at start. See OAUTH.md for callbacks, configuration, identity separation and verification limits. Secrets and provider tokens are never returned by these APIs.

Service health

Each internal service has /api/health. Gateway health returns status, mode, database type and a services map, with 200 for healthy dependencies or 503 for degraded health. Service startup and default/configurable ports are documented in README.md. Independent services can be started with node services/start.mjs NAME using SERVICE_PORT and the appropriate WORKSPACE_URL/SERVICE_URLS configuration; the normal supervisor supplies those automatically.