openapi: 3.1.0 info: description: Loopback-only HTTP surface served by the Go daemon. Generated from Go (code-first) — do not edit by hand; run `go generate ./...`. title: Agent Orchestrator HTTP daemon version: 0.1.0-route-shell servers: - description: Local daemon (loopback only) url: http://127.0.0.1:3001 paths: /api/v1/agents: get: operationId: listAgents responses: "200": content: application/json: schema: $ref: '#/components/schemas/ListAgentsResponse' description: OK "500": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Internal Server Error "501": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Not Implemented summary: Return cached supported and locally installed agent adapters tags: - agents /api/v1/agents/{agent}/probe: post: operationId: probeAgent parameters: - description: Agent adapter identifier. in: path name: agent required: true schema: description: Agent adapter identifier. type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/ProbeAgentResponse' description: OK "400": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Bad Request "500": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Internal Server Error "501": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Not Implemented summary: Run a fresh local readiness probe for one agent adapter tags: - agents /api/v1/agents/refresh: post: operationId: refreshAgents responses: "200": content: application/json: schema: $ref: '#/components/schemas/ListAgentsResponse' description: OK "500": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Internal Server Error "501": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Not Implemented summary: Refresh the cached local agent adapter catalog tags: - agents /api/v1/browser/commands: post: operationId: executeBrowserCommand parameters: - description: Opaque browser capability injected into the owning AO worker. in: header name: X-AO-Browser-Capability schema: description: Opaque browser capability injected into the owning AO worker. type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/BrowserCommandRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/BrowserCommandResponse' description: OK "400": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Bad Request "403": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Forbidden "404": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Not Found "409": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Conflict "422": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Unprocessable Entity "501": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Not Implemented "503": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Service Unavailable summary: Execute a target-scoped command in a session's desktop browser tags: - browser /api/v1/browser/status: get: operationId: getBrowserStatus parameters: - description: AO session identifier. in: query name: sessionId schema: description: AO session identifier. type: string - description: Opaque browser capability injected into the owning AO worker. in: header name: X-AO-Browser-Capability schema: description: Opaque browser capability injected into the owning AO worker. type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/BrowserStatusResponse' description: OK "400": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Bad Request "403": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Forbidden "404": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Not Found "409": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Conflict "501": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Not Implemented summary: Check whether the desktop browser runtime is connected for a session tags: - browser /api/v1/dev/import-projects: post: operationId: runDevImportProjects requestBody: content: application/json: schema: $ref: '#/components/schemas/DevImportProjectsRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/DevImportProjectsResponse' description: OK "400": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Bad Request "500": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Internal Server Error "501": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Not Implemented summary: Run the developer project-registry import through the daemon store tags: - dev /api/v1/events: get: operationId: streamEvents parameters: - description: Replay events with seq greater than this cursor. When omitted, clients may send Last-Event-ID instead. in: query name: after schema: description: Replay events with seq greater than this cursor. When omitted, clients may send Last-Event-ID instead. minimum: 0 type: - "null" - integer responses: "200": content: text/event-stream: schema: type: string description: OK "400": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Bad Request "500": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Internal Server Error "501": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Not Implemented summary: Stream CDC events with durable replay tags: - events /api/v1/import: get: operationId: getImportStatus responses: "200": content: application/json: schema: $ref: '#/components/schemas/ImportStatusResponse' description: OK "500": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Internal Server Error "501": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Not Implemented summary: Check whether a legacy AO install is available to import tags: - import post: operationId: runImport responses: "200": content: application/json: schema: $ref: '#/components/schemas/ImportRunResponse' description: OK "500": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Internal Server Error "501": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Not Implemented summary: Run the legacy AO project import through the daemon store tags: - import /api/v1/mobile/disable: post: operationId: disableMobile responses: "200": content: application/json: schema: $ref: '#/components/schemas/MobileStatusResponse' description: OK "403": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Forbidden "500": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Internal Server Error summary: Disable the Connect Mobile LAN bridge tags: - mobile /api/v1/mobile/enable: post: operationId: enableMobile responses: "200": content: application/json: schema: $ref: '#/components/schemas/MobileStatusResponse' description: OK "403": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Forbidden "500": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Internal Server Error summary: Enable the Connect Mobile LAN bridge and issue a fresh password tags: - mobile /api/v1/mobile/regenerate: post: operationId: regenerateMobile responses: "200": content: application/json: schema: $ref: '#/components/schemas/MobileStatusResponse' description: OK "403": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Forbidden "500": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Internal Server Error summary: Rotate the Connect Mobile password, dropping any connected phone tags: - mobile /api/v1/mobile/status: get: operationId: getMobileStatus responses: "200": content: application/json: schema: $ref: '#/components/schemas/MobileStatusResponse' description: OK "403": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Forbidden summary: Check whether Connect Mobile's LAN bridge is enabled tags: - mobile /api/v1/notifications: get: operationId: listNotifications parameters: - description: Notification filter. Defaults to unread (unseen); unresolved returns notifications whose underlying issue is still open; all includes read history. in: query name: status schema: description: Notification filter. Defaults to unread (unseen); unresolved returns notifications whose underlying issue is still open; all includes read history. enum: - unread - all - unresolved type: string - description: Maximum notifications to return. Defaults to 100. in: query name: limit schema: description: Maximum notifications to return. Defaults to 100. maximum: 100 minimum: 1 type: integer - description: Opaque cursor returned by the previous page. in: query name: cursor schema: description: Opaque cursor returned by the previous page. type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/ListNotificationsResponse' description: OK "400": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Bad Request "500": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Internal Server Error "501": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Not Implemented summary: List notification history tags: - notifications /api/v1/notifications/{id}: patch: operationId: markNotificationRead parameters: - description: Notification identifier. in: path name: id required: true schema: description: Notification identifier. type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/MarkNotificationReadRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/NotificationEnvelope' description: OK "400": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Bad Request "404": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Not Found "500": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Internal Server Error "501": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Not Implemented summary: Mark a notification read tags: - notifications /api/v1/notifications/read-all: post: operationId: markAllNotificationsRead requestBody: content: application/json: schema: $ref: '#/components/schemas/MarkAllNotificationsReadRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/MarkAllNotificationsReadResponse' description: OK "400": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Bad Request "500": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Internal Server Error "501": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Not Implemented summary: Mark notifications read tags: - notifications /api/v1/notifications/stream: get: operationId: streamNotifications parameters: - description: Optional project id filter for live notifications. in: query name: projectId schema: description: Optional project id filter for live notifications. type: string responses: "200": content: text/event-stream: schema: type: string description: OK "500": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Internal Server Error "501": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Not Implemented summary: Stream created notifications tags: - notifications /api/v1/orchestrators: get: operationId: listOrchestrators responses: "200": content: application/json: schema: $ref: '#/components/schemas/ListSessionsResponse' description: OK "500": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Internal Server Error "501": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Not Implemented summary: List orchestrator sessions across projects tags: - sessions post: operationId: spawnOrchestrator requestBody: content: application/json: schema: $ref: '#/components/schemas/SpawnOrchestratorRequest' required: true responses: "201": content: application/json: schema: $ref: '#/components/schemas/SpawnOrchestratorResponse' description: Created "400": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Bad Request "404": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Not Found "500": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Internal Server Error "501": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Not Implemented summary: Spawn an orchestrator session tags: - sessions /api/v1/orchestrators/{id}: get: operationId: getOrchestrator parameters: - description: Orchestrator session identifier, e.g. project-orchestrator. in: path name: id required: true schema: description: Orchestrator session identifier, e.g. project-orchestrator. type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/SessionResponse' description: OK "404": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Not Found "500": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Internal Server Error "501": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Not Implemented summary: Fetch one orchestrator session tags: - sessions /api/v1/projects: get: operationId: listProjects responses: "200": content: application/json: schema: $ref: '#/components/schemas/ListProjectsResponse' description: OK "500": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Internal Server Error summary: List all registered projects (active + degraded) tags: - projects post: operationId: addProject requestBody: content: application/json: schema: $ref: '#/components/schemas/AddProjectInput' required: true responses: "201": content: application/json: schema: $ref: '#/components/schemas/ProjectResponse' description: Created "400": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Bad Request "409": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Conflict "500": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Internal Server Error summary: Register a new project from a git repository path tags: - projects /api/v1/projects/{id}: delete: operationId: removeProject parameters: - description: Project identifier (registry key). in: path name: id required: true schema: description: Project identifier (registry key). type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/RemoveProjectResult' description: OK "400": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Bad Request "404": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Not Found "500": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Internal Server Error summary: Remove a project; stops sessions, cleans workspaces, unregisters tags: - projects get: operationId: getProject parameters: - description: Project identifier (registry key). in: path name: id required: true schema: description: Project identifier (registry key). type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/ProjectGetResponse' description: OK "404": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Not Found "500": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Internal Server Error summary: Fetch one project; discriminates ok vs degraded tags: - projects put: operationId: updateProjectSettings parameters: - description: Project identifier (registry key). in: path name: id required: true schema: description: Project identifier (registry key). type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/UpdateProjectSettingsInput' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/ProjectResponse' description: OK "400": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Bad Request "404": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Not Found "500": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Internal Server Error summary: Atomically replace a project's display name and config tags: - projects /api/v1/projects/{id}/config: put: operationId: setProjectConfig parameters: - description: Project identifier (registry key). in: path name: id required: true schema: description: Project identifier (registry key). type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/SetProjectConfigInput' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/ProjectResponse' description: OK "400": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Bad Request "404": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Not Found "500": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Internal Server Error summary: Replace a project's per-project config tags: - projects /api/v1/projects/initialize: post: operationId: initializeProjectRepository requestBody: content: application/json: schema: $ref: '#/components/schemas/InitializeRepositoryInput' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/InitializeRepositoryResult' description: OK "400": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Bad Request "409": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Conflict "500": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Internal Server Error summary: Initialize a selected folder as a Git repository with an initial commit tags: - projects /api/v1/prs/{id}/merge: post: operationId: mergePR parameters: - description: PR number. in: path name: id required: true schema: description: PR number. type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/MergePRResponse' description: OK "404": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Not Found "409": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Conflict "422": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Unprocessable Entity "501": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Not Implemented summary: Squash-merge a pull request tags: - prs /api/v1/prs/{id}/resolve-comments: post: operationId: resolveComments parameters: - description: PR number. in: path name: id required: true schema: description: PR number. type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/ResolveCommentsResponse' description: OK "404": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Not Found "422": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Unprocessable Entity "501": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Not Implemented summary: Resolve review threads on a pull request tags: - prs /api/v1/push/devices: post: operationId: registerPushDevice requestBody: content: application/json: schema: $ref: '#/components/schemas/RegisterPushDeviceRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/PushDeviceEnvelope' description: OK "400": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Bad Request "500": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Internal Server Error "501": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Not Implemented summary: Register (upsert) a phone's Expo push token tags: - push /api/v1/push/devices/{token}: delete: operationId: unregisterPushDevice parameters: - description: Expo push token (URL-encoded) identifying the device. in: path name: token required: true schema: description: Expo push token (URL-encoded) identifying the device. type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/UnregisterPushDeviceResponse' description: OK "500": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Internal Server Error "501": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Not Implemented summary: Unregister a phone's Expo push token tags: - push /api/v1/sessions: get: operationId: listSessions parameters: - description: Project id filter. in: query name: project schema: description: Project id filter. type: string - description: When true, return non-terminated sessions; when false, return terminated sessions. in: query name: active schema: description: When true, return non-terminated sessions; when false, return terminated sessions. type: - "null" - boolean - description: When true, return only orchestrator sessions. in: query name: orchestratorOnly schema: description: When true, return only orchestrator sessions. type: - "null" - boolean - description: When true, return only fresh non-terminated sessions. in: query name: fresh schema: description: When true, return only fresh non-terminated sessions. type: - "null" - boolean responses: "200": content: application/json: schema: $ref: '#/components/schemas/ListSessionsResponse' description: OK "400": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Bad Request "500": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Internal Server Error summary: List sessions tags: - sessions post: operationId: spawnSession requestBody: content: application/json: schema: $ref: '#/components/schemas/SpawnSessionRequest' required: true responses: "201": content: application/json: schema: $ref: '#/components/schemas/SpawnSessionResponse' description: Created "400": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Bad Request "404": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Not Found "500": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Internal Server Error summary: Spawn a new agent session tags: - sessions /api/v1/sessions/{sessionId}: get: operationId: getSession parameters: - description: Session identifier, e.g. project-1. in: path name: sessionId required: true schema: description: Session identifier, e.g. project-1. type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/SessionResponse' description: OK "404": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Not Found "500": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Internal Server Error summary: Fetch one session tags: - sessions patch: operationId: renameSession parameters: - description: Session identifier, e.g. project-1. in: path name: sessionId required: true schema: description: Session identifier, e.g. project-1. type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/RenameSessionRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/RenameSessionResponse' description: OK "400": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Bad Request "404": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Not Found "500": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Internal Server Error "501": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Not Implemented summary: Rename a session display name tags: - sessions /api/v1/sessions/{sessionId}/activity: post: operationId: setSessionActivity parameters: - description: Session identifier, e.g. project-1. in: path name: sessionId required: true schema: description: Session identifier, e.g. project-1. type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/SetActivityRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/SetActivityResponse' description: OK "400": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Bad Request "404": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Not Found "500": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Internal Server Error "501": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Not Implemented summary: Report an agent activity-state signal for a session tags: - sessions /api/v1/sessions/{sessionId}/kill: post: operationId: killSession parameters: - description: Session identifier, e.g. project-1. in: path name: sessionId required: true schema: description: Session identifier, e.g. project-1. type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/KillSessionResponse' description: OK "404": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Not Found "409": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Conflict "500": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Internal Server Error summary: Mark a session terminated and tear down runtime/workspace resources tags: - sessions /api/v1/sessions/{sessionId}/merge-policy: patch: operationId: setSessionMergePolicy parameters: - description: Session identifier, e.g. project-1. in: path name: sessionId required: true schema: description: Session identifier, e.g. project-1. type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/SetSessionMergePolicyRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/SetSessionMergePolicyResponse' description: OK "400": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Bad Request "404": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Not Found "500": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Internal Server Error "501": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Not Implemented summary: Configure whether PR completion terminates the session tags: - sessions /api/v1/sessions/{sessionId}/pr: get: operationId: listSessionPRs parameters: - description: Session identifier, e.g. project-1. in: path name: sessionId required: true schema: description: Session identifier, e.g. project-1. type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/ListSessionPRsResponse' description: OK "404": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Not Found "500": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Internal Server Error "501": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Not Implemented summary: List pull requests owned by a session tags: - sessions /api/v1/sessions/{sessionId}/pr/claim: post: operationId: claimSessionPR parameters: - description: Session identifier, e.g. project-1. in: path name: sessionId required: true schema: description: Session identifier, e.g. project-1. type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/ClaimPRRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/ClaimPRResponse' description: OK "400": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Bad Request "404": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Not Found "409": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Conflict "422": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Unprocessable Entity "501": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Not Implemented "503": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Service Unavailable summary: Claim an existing pull request for a session tags: - sessions /api/v1/sessions/{sessionId}/preview: delete: operationId: clearSessionPreview parameters: - description: Session identifier, e.g. project-1. in: path name: sessionId required: true schema: description: Session identifier, e.g. project-1. type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/SessionResponse' description: OK "404": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Not Found "500": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Internal Server Error "501": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Not Implemented summary: Clear the browser preview URL for a session tags: - sessions get: operationId: getSessionPreview parameters: - description: Session identifier, e.g. project-1. in: path name: sessionId required: true schema: description: Session identifier, e.g. project-1. type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/SessionPreviewResponse' description: OK "404": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Not Found "500": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Internal Server Error "501": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Not Implemented summary: Discover a browser preview URL for a session workspace tags: - sessions post: operationId: setSessionPreview parameters: - description: Session identifier, e.g. project-1. in: path name: sessionId required: true schema: description: Session identifier, e.g. project-1. type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/SetSessionPreviewRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/SessionResponse' description: OK "400": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Bad Request "404": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Not Found "500": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Internal Server Error "501": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Not Implemented summary: Set (or autodetect) the browser preview URL for a session tags: - sessions /api/v1/sessions/{sessionId}/preview/files/*: get: operationId: getSessionPreviewFile parameters: - description: Session identifier, e.g. project-1. in: path name: sessionId required: true schema: description: Session identifier, e.g. project-1. type: string responses: "200": content: text/html: schema: type: string description: OK "404": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Not Found "500": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Internal Server Error "501": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Not Implemented summary: Serve a static browser preview file from a session workspace tags: - sessions /api/v1/sessions/{sessionId}/preview/server: delete: operationId: stopSessionPreviewServer parameters: - description: Session identifier, e.g. project-1. in: path name: sessionId required: true schema: description: Session identifier, e.g. project-1. type: string - description: Opaque browser capability injected into the owning AO worker. in: header name: X-AO-Browser-Capability schema: description: Opaque browser capability injected into the owning AO worker. type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/PreviewServerStatusResponse' description: OK "403": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Forbidden "404": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Not Found "409": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Conflict "500": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Internal Server Error "501": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Not Implemented summary: Stop the managed preview server for a session tags: - sessions get: operationId: getSessionPreviewServer parameters: - description: Session identifier, e.g. project-1. in: path name: sessionId required: true schema: description: Session identifier, e.g. project-1. type: string - description: Opaque browser capability injected into the owning AO worker. in: header name: X-AO-Browser-Capability schema: description: Opaque browser capability injected into the owning AO worker. type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/PreviewServerStatusResponse' description: OK "403": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Forbidden "404": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Not Found "409": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Conflict "500": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Internal Server Error "501": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Not Implemented summary: Get the managed preview server status for a session tags: - sessions post: operationId: startSessionPreviewServer parameters: - description: Session identifier, e.g. project-1. in: path name: sessionId required: true schema: description: Session identifier, e.g. project-1. type: string - description: Opaque browser capability injected into the owning AO worker. in: header name: X-AO-Browser-Capability schema: description: Opaque browser capability injected into the owning AO worker. type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/StartPreviewServerRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/PreviewServerStatusResponse' description: OK "400": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Bad Request "403": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Forbidden "404": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Not Found "408": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Request Timeout "409": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Conflict "422": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Unprocessable Entity "500": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Internal Server Error "501": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Not Implemented "504": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Gateway Timeout summary: Start a session-owned server from .ao/launch.json and open its application preview tags: - sessions /api/v1/sessions/{sessionId}/restore: post: operationId: restoreSession parameters: - description: Session identifier, e.g. project-1. in: path name: sessionId required: true schema: description: Session identifier, e.g. project-1. type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/RestoreSessionResponse' description: OK "404": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Not Found "409": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Conflict "500": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Internal Server Error summary: Restore a terminated session tags: - sessions /api/v1/sessions/{sessionId}/resume-agent: post: operationId: resumeAgent parameters: - description: Session identifier, e.g. project-1. in: path name: sessionId required: true schema: description: Session identifier, e.g. project-1. type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/ResumeAgentResponse' description: OK "404": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Not Found "409": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Conflict "500": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Internal Server Error "501": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Not Implemented summary: Resume an exited agent in its existing session tags: - sessions /api/v1/sessions/{sessionId}/reviews: get: operationId: listReviews parameters: - description: Session identifier, e.g. project-1. in: path name: sessionId required: true schema: description: Session identifier, e.g. project-1. type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/ListReviewsResponse' description: OK "422": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Unprocessable Entity "501": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Not Implemented summary: List a worker's code-review runs tags: - reviews /api/v1/sessions/{sessionId}/reviews/cancel: post: operationId: cancelReview parameters: - description: Session identifier, e.g. project-1. in: path name: sessionId required: true schema: description: Session identifier, e.g. project-1. type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/CancelReviewResponse' description: OK "404": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Not Found "422": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Unprocessable Entity "501": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Not Implemented summary: Cancel a running code review tags: - reviews /api/v1/sessions/{sessionId}/reviews/submit: post: operationId: submitReview parameters: - description: Session identifier, e.g. project-1. in: path name: sessionId required: true schema: description: Session identifier, e.g. project-1. type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/SubmitReviewInput' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/ReviewRunResponse' description: OK "400": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Bad Request "404": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Not Found "422": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Unprocessable Entity "501": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Not Implemented summary: Record a reviewer's result for a worker's PR tags: - reviews /api/v1/sessions/{sessionId}/reviews/trigger: post: operationId: triggerReview parameters: - description: Session identifier, e.g. project-1. in: path name: sessionId required: true schema: description: Session identifier, e.g. project-1. type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/TriggerReviewResponse' description: OK "201": content: application/json: schema: $ref: '#/components/schemas/TriggerReviewResponse' description: Created "404": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Not Found "422": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Unprocessable Entity "501": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Not Implemented summary: Trigger a code review of a worker's PR tags: - reviews /api/v1/sessions/{sessionId}/rollback: post: operationId: rollbackSession parameters: - description: Session identifier, e.g. project-1. in: path name: sessionId required: true schema: description: Session identifier, e.g. project-1. type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/RollbackSessionResponse' description: OK "404": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Not Found "409": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Conflict "500": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Internal Server Error summary: Undo a partially-completed spawn (delete seed row, or kill if spawn output exists) tags: - sessions /api/v1/sessions/{sessionId}/send: post: operationId: sendSessionMessage parameters: - description: Session identifier, e.g. project-1. in: path name: sessionId required: true schema: description: Session identifier, e.g. project-1. type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/SendSessionMessageRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/SendSessionMessageResponse' description: OK "400": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Bad Request "404": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Not Found "409": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Conflict "500": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Internal Server Error summary: Send a message to a running session's agent tags: - sessions /api/v1/sessions/{sessionId}/workspace/events: get: operationId: streamSessionWorkspaceChanges parameters: - description: Session identifier, e.g. project-1. in: path name: sessionId required: true schema: description: Session identifier, e.g. project-1. type: string responses: "200": content: text/event-stream: schema: type: string description: OK "404": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Not Found "500": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Internal Server Error "501": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Not Implemented summary: Stream session workspace file changes tags: - sessions /api/v1/sessions/{sessionId}/workspace/file: get: operationId: getSessionWorkspaceFile parameters: - description: Session identifier, e.g. project-1. in: path name: sessionId required: true schema: description: Session identifier, e.g. project-1. type: string - description: Session-worktree-relative file path. in: query name: path schema: description: Session-worktree-relative file path. type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/WorkspaceFileResponse' description: OK "400": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Bad Request "404": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Not Found "500": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Internal Server Error "501": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Not Implemented summary: Read one session workspace file and its git diff tags: - sessions /api/v1/sessions/{sessionId}/workspace/files: get: operationId: listSessionWorkspaceFiles parameters: - description: Session identifier, e.g. project-1. in: path name: sessionId required: true schema: description: Session identifier, e.g. project-1. type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/ListWorkspaceFilesResponse' description: OK "404": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Not Found "500": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Internal Server Error "501": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Not Implemented summary: List files in a session workspace with git change status tags: - sessions /api/v1/sessions/cleanup: post: operationId: cleanupSessions parameters: - description: Project id filter. When omitted, clean terminated sessions across all projects. in: query name: project schema: description: Project id filter. When omitted, clean terminated sessions across all projects. type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/CleanupSessionsResponse' description: OK "500": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Internal Server Error "501": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Not Implemented summary: Clean up terminated session workspaces tags: - sessions /api/v1/shell-terminals: get: operationId: listShellTerminals responses: "200": content: application/json: schema: $ref: '#/components/schemas/ListShellTerminalsResponse' description: OK "500": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Internal Server Error "501": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Not Implemented summary: List the standalone shell terminals owned by the current app run tags: - shellTerminals post: operationId: openShellTerminal requestBody: content: application/json: schema: $ref: '#/components/schemas/OpenShellTerminalRequest' required: true responses: "201": content: application/json: schema: $ref: '#/components/schemas/ShellTerminalEnvelope' description: Created "400": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Bad Request "404": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Not Found "500": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Internal Server Error "501": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Not Implemented summary: Open a standalone shell terminal tags: - shellTerminals /api/v1/shell-terminals/{handleId}: delete: operationId: closeShellTerminal parameters: - description: Shell terminal runtime handle identifier. in: path name: handleId required: true schema: description: Shell terminal runtime handle identifier. type: string responses: "204": description: No Content "400": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Bad Request "404": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Not Found "500": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Internal Server Error "501": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Not Implemented summary: Close a standalone shell terminal and destroy its PTY tags: - shellTerminals patch: operationId: renameShellTerminal parameters: - description: Shell terminal runtime handle identifier. in: path name: handleId required: true schema: description: Shell terminal runtime handle identifier. type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/UpdateShellTerminalRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/ShellTerminalEnvelope' description: OK "400": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Bad Request "404": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Not Found "500": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Internal Server Error "501": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Not Implemented summary: Rename a standalone shell terminal tab tags: - shellTerminals components: schemas: APIError: properties: code: type: string details: additionalProperties: {} type: object error: type: string message: type: string requestId: type: string required: - error - code - message type: object AddProjectInput: properties: asWorkspace: type: boolean config: $ref: '#/components/schemas/ProjectConfig' name: type: - "null" - string path: type: string projectId: type: - "null" - string required: - path type: object AgentConfig: properties: model: type: string permissions: type: string type: object AgentInfo: properties: authStatus: description: Advisory local auth probe result. authorized means a recent local probe passed; spawn remains the authoritative validation point. enum: - authorized - unauthorized - unknown type: string id: type: string label: type: string required: - id - label type: object BrowserCommandRequest: properties: action: type: string args: additionalProperties: {} type: object sessionId: type: string required: - sessionId - action type: object BrowserCommandResponse: properties: action: type: string requestId: type: string result: {} sessionId: type: string required: - requestId - sessionId - action - result type: object BrowserStatusResponse: properties: connected: type: boolean connectedAt: format: date-time type: string sessionId: type: string transport: type: string required: - sessionId - connected - transport type: object CancelReviewResponse: properties: reviewerHandleId: type: string reviews: items: $ref: '#/components/schemas/PRReviewState' type: array required: - reviewerHandleId - reviews type: object ClaimPRRequest: properties: allowTakeover: type: - "null" - boolean pr: minLength: 1 type: string required: - pr type: object ClaimPRResponse: properties: branchChanged: type: boolean ok: type: boolean prs: items: $ref: '#/components/schemas/SessionPRFacts' type: array sessionId: type: string takenOverFrom: items: type: string type: array required: - ok - sessionId - prs - branchChanged - takenOverFrom type: object CleanupSessionsResponse: properties: cleaned: items: type: string type: array ok: type: boolean skipped: items: $ref: '#/components/schemas/CleanupSkippedSession' type: array required: - ok - cleaned - skipped type: object CleanupSkippedSession: properties: reason: type: string sessionId: type: string required: - sessionId - reason type: object ContainerReapConfig: properties: disabled: type: boolean type: object ControllersSessionView: properties: activity: $ref: '#/components/schemas/DomainActivity' branch: type: string createdAt: format: date-time type: string displayName: type: string harness: type: string id: type: string isTerminated: type: boolean issueId: type: string kind: type: string previewRevision: format: int64 type: integer previewUrl: type: string projectId: type: string prs: items: $ref: '#/components/schemas/SessionPRFacts' type: array scmStatus: enum: - pr_open - draft - ci_failed - review_pending - changes_requested - approved - mergeable - merged type: string status: enum: - working - pr_open - draft - ci_failed - review_pending - changes_requested - approved - mergeable - merged - needs_input - exited - idle - terminated - no_signal type: string terminalHandleId: type: string terminateOnPrMerge: type: boolean updatedAt: format: date-time type: string required: - id - projectId - kind - activity - isTerminated - terminateOnPrMerge - createdAt - updatedAt - status - prs type: object ControllersSpawnAttachmentInput: properties: data: type: string mimeType: type: string required: - data type: object DegradedProject: properties: id: type: string kind: enum: - single_repo - workspace - scratch type: string name: type: string path: type: string resolveError: type: string required: - id - name - kind - path - resolveError type: object DevImportProjectsConflict: properties: path: type: string projectId: type: string reason: type: string targetId: type: string targetPath: type: string required: - projectId - path - reason type: object DevImportProjectsReport: properties: conflicts: items: $ref: '#/components/schemas/DevImportProjectsConflict' type: array dryRun: type: boolean inserted: type: integer skipped: type: integer sourceDataDir: type: string targetDataDir: type: string updated: type: integer required: - sourceDataDir - targetDataDir - dryRun - inserted - updated - skipped type: object DevImportProjectsRequest: properties: dryRun: type: boolean sourceDataDir: minLength: 1 type: string required: - sourceDataDir - dryRun type: object DevImportProjectsResponse: properties: report: $ref: '#/components/schemas/DevImportProjectsReport' required: - report type: object DomainActivity: properties: lastActivityAt: format: date-time type: string state: type: string required: - state - lastActivityAt type: object DomainReviewerConfig: properties: harness: type: string required: - harness type: object ImportReport: properties: dryRun: type: boolean notes: items: type: string type: array projectsImported: type: integer projectsSkipped: type: integer required: - dryRun - projectsImported - projectsSkipped type: object ImportRunResponse: properties: report: $ref: '#/components/schemas/ImportReport' required: - report type: object ImportStatusResponse: properties: available: type: boolean legacyRoot: type: string required: - available - legacyRoot type: object InitializeRepositoryInput: properties: path: type: string required: - path type: object InitializeRepositoryResult: properties: path: type: string required: - path type: object KillSessionResponse: properties: freed: type: boolean ok: type: boolean sessionId: type: string required: - ok - sessionId type: object ListAgentsResponse: properties: authorized: description: Compatibility list of installed agents whose local auth probe recently returned authorized. Advisory and stale-prone; spawn may still fail. items: $ref: '#/components/schemas/AgentInfo' type: array installed: description: Agents whose binary resolved during the latest best-effort local catalog probe. items: $ref: '#/components/schemas/AgentInfo' type: array supported: description: Agents supported by this daemon build. items: $ref: '#/components/schemas/AgentInfo' type: array required: - supported - installed - authorized type: object ListNotificationsResponse: properties: nextCursor: type: string notifications: items: $ref: '#/components/schemas/NotificationResponse' type: array unreadCount: type: integer unresolvedCount: type: integer required: - notifications - unreadCount - unresolvedCount type: object ListProjectsResponse: properties: projects: items: $ref: '#/components/schemas/ProjectSummary' type: array required: - projects type: object ListReviewsResponse: properties: reviewerHandleId: type: string reviews: items: $ref: '#/components/schemas/PRReviewState' type: array required: - reviewerHandleId - reviews type: object ListSessionPRsResponse: properties: prs: items: $ref: '#/components/schemas/SessionPRSummary' type: array sessionId: type: string required: - sessionId - prs type: object ListSessionsResponse: properties: sessions: items: $ref: '#/components/schemas/ControllersSessionView' type: array required: - sessions type: object ListShellTerminalsResponse: properties: shellTerminals: items: $ref: '#/components/schemas/ShellTerminalResponse' type: array required: - shellTerminals type: object ListWorkspaceFilesResponse: properties: compareBaseRef: type: string compareBaseSha: type: string compareMode: enum: - base - head_fallback type: string files: items: $ref: '#/components/schemas/WorkspaceFileSummary' type: array sessionId: type: string truncated: type: boolean required: - sessionId - files - truncated type: object MarkAllNotificationsReadRequest: properties: ids: description: Acknowledge exactly these notifications. Omit to acknowledge every unread notification; paginating clients should send the ids they actually rendered so later pages stay unread. items: type: string type: array type: object MarkAllNotificationsReadResponse: properties: notifications: description: Deprecated compatibility field. Always empty so mark-all responses stay bounded. items: $ref: '#/components/schemas/NotificationResponse' type: array updatedCount: description: Number of notifications changed from unread to read. format: int64 type: integer required: - notifications - updatedCount type: object MarkNotificationReadRequest: properties: status: description: V1 supports only marking an unread notification read. enum: - read type: string required: - status type: object MergePRResponse: properties: method: type: string ok: type: boolean prNumber: type: integer required: - ok - prNumber - method type: object MobileStatusResponse: properties: enabled: type: boolean host: type: string password: type: string port: type: integer warning: type: string required: - enabled - host - port - password - warning type: object NotificationEnvelope: properties: notification: $ref: '#/components/schemas/NotificationResponse' required: - notification type: object NotificationResponse: properties: body: type: string createdAt: format: date-time type: string id: type: string prUrl: type: string projectId: type: string resolvedAt: format: date-time type: - "null" - string sessionId: type: string status: description: Seen state. unread means the user has not opened the notification panel since it arrived. enum: - unread - read type: string target: $ref: '#/components/schemas/NotificationTarget' title: type: string type: enum: - needs_input - ready_to_merge - pr_merged - pr_closed_unmerged type: string required: - id - sessionId - projectId - prUrl - type - title - body - status - createdAt - target type: object NotificationTarget: properties: kind: enum: - session - pr type: string prUrl: type: string sessionId: type: string required: - kind - sessionId type: object OpenShellTerminalRequest: properties: projectId: description: Project whose root the shell starts in. Omitted opens the shell in the daemon data dir. type: string sessionId: description: Agent session the shell is scoped to, so it appears only in that session's tab strip. Omitted makes it a standalone shell. type: string type: object OrchestratorResponse: properties: id: type: string projectId: type: string projectName: type: string required: - id - projectId type: object PRReviewState: properties: latestRun: $ref: '#/components/schemas/ReviewRun' prNumber: type: integer prUrl: type: string previousRun: $ref: '#/components/schemas/ReviewRun' status: enum: - needs_review - running - up_to_date - changes_requested - ineligible type: string targetSha: type: string title: type: string required: - prUrl - prNumber - title - targetSha - status type: object PreviewServerStatusResponse: properties: configuration: type: string error: type: string logs: items: type: string type: array port: type: integer sessionId: type: string startedAt: format: date-time type: string state: enum: - stopped - starting - ready - stopping - failed type: string targetKind: enum: - app - api type: string url: type: string required: - sessionId - state - logs type: object ProbeAgentResponse: properties: agent: $ref: '#/components/schemas/AgentInfo' installed: type: boolean supported: type: boolean required: - agent - supported - installed type: object Project: properties: agent: type: string config: $ref: '#/components/schemas/ProjectConfig' defaultBranch: type: string id: type: string kind: enum: - single_repo - workspace - scratch type: string name: type: string path: type: string repo: type: string workspaceRepos: items: $ref: '#/components/schemas/WorkspaceRepo' type: array required: - id - name - kind - path - repo - defaultBranch type: object ProjectConfig: properties: agentConfig: $ref: '#/components/schemas/AgentConfig' agentRules: type: string agentRulesFile: type: string containerReap: $ref: '#/components/schemas/ContainerReapConfig' defaultBranch: type: string env: additionalProperties: type: string type: object orchestrator: $ref: '#/components/schemas/RoleOverride' orchestratorRules: type: string postCreate: items: type: string type: array reviewers: items: $ref: '#/components/schemas/DomainReviewerConfig' type: array sessionPrefix: type: string symlinks: items: type: string type: array trackerIntake: $ref: '#/components/schemas/TrackerIntakeConfig' worker: $ref: '#/components/schemas/RoleOverride' type: object ProjectGetResponse: properties: project: $ref: '#/components/schemas/ProjectOrDegraded' status: enum: - ok - degraded type: string required: - status - project type: object ProjectOrDegraded: oneOf: - $ref: '#/components/schemas/Project' - $ref: '#/components/schemas/DegradedProject' type: object ProjectResponse: properties: project: $ref: '#/components/schemas/Project' required: - project type: object ProjectSummary: properties: id: type: string kind: enum: - single_repo - workspace - scratch type: string name: type: string orchestratorAgent: type: string path: type: string resolveError: type: string sessionPrefix: type: string required: - id - name - path - kind - sessionPrefix type: object PushDeviceEnvelope: properties: device: $ref: '#/components/schemas/PushDeviceResponse' required: - device type: object PushDeviceResponse: properties: createdAt: format: date-time type: string deviceName: type: string lastSeenAt: format: date-time type: string platform: type: string token: type: string required: - token - createdAt - lastSeenAt type: object RegisterPushDeviceRequest: properties: deviceName: description: Human-friendly device label. type: string platform: description: Device platform. enum: - ios - android type: string token: description: Expo push token, e.g. ExponentPushToken[...]. type: string required: - token type: object RemoveProjectResult: properties: projectId: type: string removedStorageDir: type: boolean required: - projectId - removedStorageDir type: object RenameSessionRequest: properties: displayName: minLength: 1 type: string required: - displayName type: object RenameSessionResponse: properties: displayName: type: string ok: type: boolean sessionId: type: string required: - ok - sessionId - displayName type: object ResolveCommentsResponse: properties: ok: type: boolean resolved: type: integer required: - ok - resolved type: object RestoreSessionResponse: properties: ok: type: boolean restoreMode: enum: - native - saved_prompt - fresh type: string session: $ref: '#/components/schemas/ControllersSessionView' sessionId: type: string required: - ok - sessionId - restoreMode - session type: object ResumeAgentResponse: properties: ok: type: boolean resumeMode: enum: - native - saved_prompt - fresh type: string session: $ref: '#/components/schemas/ControllersSessionView' sessionId: type: string required: - ok - sessionId - resumeMode - session type: object ReviewRun: properties: batchId: type: string body: type: string createdAt: format: date-time type: string deliveredAt: format: date-time type: - "null" - string githubReviewId: type: string harness: type: string id: type: string prUrl: type: string reviewId: type: string sessionId: type: string status: type: string targetSha: type: string verdict: type: string required: - id - reviewId - sessionId - batchId - harness - prUrl - targetSha - status - verdict - body - githubReviewId - createdAt type: object ReviewRunResponse: properties: review: $ref: '#/components/schemas/ReviewRun' reviewerHandleId: type: string reviews: items: $ref: '#/components/schemas/ReviewRun' type: array required: - review - reviews - reviewerHandleId type: object RoleOverride: properties: agent: type: string agentConfig: $ref: '#/components/schemas/AgentConfig' type: object RollbackSessionResponse: properties: deleted: type: boolean killed: type: boolean ok: type: boolean sessionId: type: string required: - ok - sessionId type: object SendSessionMessageRequest: properties: message: maxLength: 4096 minLength: 1 type: string required: - message type: object SendSessionMessageResponse: properties: message: type: string ok: type: boolean sessionId: type: string required: - ok - sessionId - message type: object SessionPRCISummary: properties: failingChecks: items: $ref: '#/components/schemas/SessionPRFailingCheck' type: array state: enum: - unknown - pending - passing - failing type: string required: - state - failingChecks type: object SessionPRConflictFile: properties: path: type: string url: type: string required: - path type: object SessionPRFacts: properties: ci: enum: - unknown - pending - passing - failing type: string mergeability: enum: - unknown - mergeable - conflicting - blocked - unstable type: string number: type: integer review: enum: - none - approved - changes_requested - review_required type: string reviewComments: type: boolean state: enum: - draft - open - merged - closed type: string updatedAt: format: date-time type: string url: type: string required: - url - number - state - ci - review - mergeability - reviewComments - updatedAt type: object SessionPRFailingCheck: properties: conclusion: type: string name: type: string status: enum: - failed - cancelled type: string url: type: string required: - name - status - conclusion type: object SessionPRMergeabilitySummary: properties: conflictFiles: items: $ref: '#/components/schemas/SessionPRConflictFile' type: array prUrl: type: string reasons: items: type: string type: array state: enum: - unknown - mergeable - conflicting - blocked - unstable type: string required: - state - reasons - prUrl type: object SessionPRReviewCommentLink: properties: file: type: string line: type: integer url: type: string type: object SessionPRReviewEntry: properties: body: type: string isBot: type: boolean reviewUrl: type: string reviewerId: type: string submittedAt: format: date-time type: string verdict: enum: - none - approved - changes_requested - review_required type: string required: - reviewerId - verdict - submittedAt type: object SessionPRReviewSummary: properties: decision: enum: - none - approved - changes_requested - review_required type: string hasUnresolvedHumanComments: type: boolean reviews: items: $ref: '#/components/schemas/SessionPRReviewEntry' type: array unresolvedBy: items: $ref: '#/components/schemas/SessionPRUnresolvedReviewer' type: array required: - decision - hasUnresolvedHumanComments - unresolvedBy type: object SessionPRSummary: properties: additions: type: integer author: type: string changedFiles: type: integer ci: $ref: '#/components/schemas/SessionPRCISummary' ciObservedAt: format: date-time type: string createdAt: format: date-time type: - "null" - string deletions: type: integer headSha: type: string htmlUrl: type: string mergeability: $ref: '#/components/schemas/SessionPRMergeabilitySummary' number: type: integer observedAt: format: date-time type: string provider: enum: - github type: string repo: type: string review: $ref: '#/components/schemas/SessionPRReviewSummary' reviewObservedAt: format: date-time type: string sourceBranch: type: string state: enum: - draft - open - merged - closed type: string stateChangedAt: format: date-time type: - "null" - string targetBranch: type: string title: type: string updatedAt: format: date-time type: string url: type: string required: - url - number - title - state - provider - repo - author - sourceBranch - targetBranch - headSha - additions - deletions - changedFiles - ci - review - mergeability - updatedAt type: object SessionPRUnresolvedReviewer: properties: count: type: integer isBot: type: boolean links: items: $ref: '#/components/schemas/SessionPRReviewCommentLink' type: array reviewUrl: type: string reviewerId: type: string required: - reviewerId - count - links type: object SessionPreviewResponse: properties: entry: type: string previewUrl: type: string sessionId: type: string required: - sessionId type: object SessionResponse: properties: session: $ref: '#/components/schemas/ControllersSessionView' required: - session type: object SetActivityRequest: properties: agentSessionId: description: Native agent session identifier used to resume its transcript. type: string event: description: AO hook sub-command that produced this state (e.g. post-tool-use). type: string launchId: description: AO process generation that produced the signal. type: string state: description: Agent activity state reported by an agent hook. Optional for metadata-only hooks. enum: - active - idle - waiting_input - blocked - exited type: string toolName: description: Native tool name, for tool-use hook events. type: string toolUseId: description: Native tool-use id, for tool-use hook events. type: string type: object SetActivityResponse: properties: ok: type: boolean sessionId: type: string state: type: string required: - ok - sessionId - state type: object SetProjectConfigInput: properties: config: $ref: '#/components/schemas/ProjectConfig' required: - config type: object SetSessionMergePolicyRequest: properties: terminateOnPrMerge: type: boolean required: - terminateOnPrMerge type: object SetSessionMergePolicyResponse: properties: ok: type: boolean session: $ref: '#/components/schemas/ControllersSessionView' sessionId: type: string terminateOnPrMerge: type: boolean required: - ok - sessionId - terminateOnPrMerge - session type: object SetSessionPreviewRequest: properties: url: description: Preview target URL. When empty, the daemon autodetects a static entry point in the session workspace. type: string type: object ShellTerminalEnvelope: properties: shellTerminal: $ref: '#/components/schemas/ShellTerminalResponse' required: - shellTerminal type: object ShellTerminalResponse: properties: createdAt: format: date-time type: string handleId: type: string projectId: type: string sessionId: type: string title: type: string workingDir: type: string required: - handleId - workingDir - title - createdAt type: object SpawnOrchestratorRequest: properties: clean: type: boolean projectId: type: string required: - projectId type: object SpawnOrchestratorResponse: properties: orchestrator: $ref: '#/components/schemas/OrchestratorResponse' required: - orchestrator type: object SpawnSessionRequest: properties: attachments: items: $ref: '#/components/schemas/ControllersSpawnAttachmentInput' type: array branch: type: string displayName: maxLength: 20 type: string harness: enum: - claude-code - codex - aider - opencode - grok - droid - amp - agy - crush - cursor - qwen - copilot - goose - auggie - continue - devin - cline - kimi - kiro - kilocode - vibe - pi - autohand - fake type: string issueId: type: string kind: enum: - worker - orchestrator type: string projectId: type: string prompt: maxLength: 4096 type: string required: - projectId type: object SpawnSessionResponse: properties: promptBytes: type: integer session: $ref: '#/components/schemas/ControllersSessionView' systemPromptBytes: type: integer required: - session - promptBytes - systemPromptBytes type: object StartPreviewServerRequest: properties: configuration: description: Named preview configuration. Optional when exactly one configuration exists. type: string type: object SubmitReviewInput: properties: body: description: Review body recorded by AO. Required for changes_requested. type: string githubReviewId: description: Id of the GitHub PR review the reviewer posted, if any. type: string reviews: description: Batched review results recorded by one reviewer CLI command. items: $ref: '#/components/schemas/SubmitReviewItem' type: array runId: description: Review run id being completed. type: string verdict: description: 'Review verdict: approved or changes_requested.' type: string type: object SubmitReviewItem: properties: body: description: Review body recorded by AO. Required for changes_requested. type: string githubReviewId: description: Id of the GitHub PR review the reviewer posted, if any. type: string runId: description: Review run id being completed. type: string verdict: description: 'Review verdict: approved or changes_requested.' type: string required: - runId - verdict type: object TrackerIntakeConfig: properties: assignee: type: string enabled: type: boolean provider: enum: - github type: string repo: type: string type: object TriggerReviewResponse: properties: created: description: True when a new review pass was started; false when an existing run for the same commit was reused. type: boolean reviewerHandleId: type: string reviews: items: $ref: '#/components/schemas/PRReviewState' type: array required: - reviewerHandleId - reviews - created type: object UnregisterPushDeviceResponse: properties: deleted: type: boolean token: type: string required: - token - deleted type: object UpdateProjectSettingsInput: properties: config: $ref: '#/components/schemas/ProjectConfig' displayName: maxLength: 20 minLength: 1 type: string required: - displayName - config type: object UpdateShellTerminalRequest: properties: title: description: New tab title for the shell terminal. Trimmed; must be non-empty. type: string required: - title type: object WorkspaceFileResponse: properties: additions: type: integer binary: type: boolean compareBaseRef: type: string compareBaseSha: type: string compareMode: enum: - base - head_fallback type: string content: type: string contentTruncated: type: boolean deleted: type: boolean deletions: type: integer diff: type: string diffTruncated: type: boolean path: type: string previousPath: type: string sessionId: type: string size: format: int64 type: integer status: enum: - unmodified - modified - added - deleted - renamed type: string required: - sessionId - path - status - additions - deletions - size - binary - deleted - content - contentTruncated - diff - diffTruncated type: object WorkspaceFileSummary: properties: additions: type: integer binary: type: boolean deletions: type: integer path: type: string previousPath: type: string size: format: int64 type: integer status: enum: - unmodified - modified - added - deleted - renamed type: string required: - path - status - additions - deletions - size - binary type: object WorkspaceRepo: properties: name: type: string relativePath: type: string repo: type: string required: - name - relativePath - repo type: object tags: - description: Supported and locally runnable agent adapters name: agents - description: Project registry, configuration, and lifecycle administration name: projects - description: Agent session lifecycle and messaging name: sessions - description: Pull-request actions (SCM lane) name: prs - description: Code-review runs and findings name: reviews - description: Durable dashboard notifications name: notifications - description: Mobile push-device registration for OS push notifications name: push - description: Server-sent CDC event stream with durable replay name: events - description: Legacy AO project import (availability probe and run) name: import - description: Developer-only maintenance operations name: dev - description: Connect Mobile LAN bridge control (loopback/desktop only) name: mobile - description: Target-isolated desktop browser runtime (loopback only) name: browser