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}/models: get: operationId: getAgentModels parameters: - description: Agent adapter identifier. in: path name: agent required: true schema: description: Agent adapter identifier. type: string - description: Optional project identifier used as the model-catalog cache scope. in: query name: projectId schema: description: Optional project identifier used as the model-catalog cache scope. type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/AgentModelsResponse' 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: Return the cached model picker for one agent, discovering it on first use tags: - agents /api/v1/agents/{agent}/models/refresh: post: operationId: refreshAgentModels parameters: - description: Agent adapter identifier. in: path name: agent required: true schema: description: Agent adapter identifier. type: string - description: Optional project identifier used as the model-catalog cache scope. in: query name: projectId schema: description: Optional project identifier used as the model-catalog cache scope. type: string - description: When true, compare executable and config metadata before running discovery. in: query name: revalidate schema: description: When true, compare executable and config metadata before running discovery. type: boolean responses: "200": content: application/json: schema: $ref: '#/components/schemas/AgentModelsResponse' 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: Refresh and cache the model picker for one agent 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/orchestrators/delegate: post: operationId: delegateTask requestBody: content: application/json: schema: $ref: '#/components/schemas/DelegateTaskRequest' required: true responses: "202": content: application/json: schema: $ref: '#/components/schemas/DelegateTaskResponse' description: Accepted "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 "501": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Not Implemented summary: Start a worker task and ask the orchestrator to title it 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 requestBody: content: application/json: schema: $ref: '#/components/schemas/MergePRRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/MergePRResponse' 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 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/reviews/{reviewSessionID}/activity: post: operationId: setReviewActivity parameters: - description: Reviewer session identifier, currently the per-harness review row id. in: path name: reviewSessionID required: true schema: description: Reviewer session identifier, currently the per-harness review row id. type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/SetReviewActivityRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/SetReviewActivityResponse' 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 a reviewer-owned hook signal tags: - reviews /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}/attachments: post: operationId: stageSessionAttachments 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/StageSessionAttachmentsRequest' required: true responses: "201": content: application/json: schema: $ref: '#/components/schemas/StageSessionAttachmentsResponse' 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: Write images into a running session's worktree and return their paths tags: - sessions /api/v1/sessions/{sessionId}/conversation: get: operationId: getSessionConversation 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: Read items older than this conversation sequence. Omit for the newest page. in: query name: beforeSequence schema: description: Read items older than this conversation sequence. Omit for the newest page. minimum: 1 type: - "null" - integer - description: Maximum combined messages and activities to return. Defaults to 200. in: query name: limit schema: description: Maximum combined messages and activities to return. Defaults to 200. maximum: 500 minimum: 1 type: - "null" - integer responses: "200": content: application/json: schema: $ref: '#/components/schemas/ConversationSnapshotResponse' 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: Read a chat session's durable conversation tags: - conversations /api/v1/sessions/{sessionId}/conversation/approvals/{requestId}/resolve: post: operationId: resolveSessionConversationApproval 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: Provider approval request identifier. Zero is a legitimate value. in: path name: requestId required: true schema: description: Provider approval request identifier. Zero is a legitimate value. type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/ResolveConversationApprovalRequest' required: true 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 "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: Answer a pending approval in a chat session tags: - conversations /api/v1/sessions/{sessionId}/conversation/compact: post: operationId: compactSessionConversation 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: "202": content: application/json: schema: $ref: '#/components/schemas/CompactConversationResponse' description: Accepted "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: Summarize earlier history to reclaim context in a chat session tags: - conversations /api/v1/sessions/{sessionId}/conversation/config-options: get: operationId: listSessionConversationConfigOptions 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/ConversationConfigOptionsResponse' 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: List the live session controls the provider advertises tags: - conversations /api/v1/sessions/{sessionId}/conversation/config-options/{configId}: patch: operationId: setSessionConversationConfigOption 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: Provider session configuration option identifier. in: path name: configId required: true schema: description: Provider session configuration option identifier. type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/SetConversationConfigOptionRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/ConversationConfigOptionsResponse' 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 "501": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Not Implemented summary: Choose one provider-advertised session configuration value tags: - conversations /api/v1/sessions/{sessionId}/conversation/inputs/{requestId}/resolve: post: operationId: resolveSessionConversationInput 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: Provider approval request identifier. Zero is a legitimate value. in: path name: requestId required: true schema: description: Provider approval request identifier. Zero is a legitimate value. type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/ResolveConversationInputRequest' required: true 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 "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: Answer a structured input request in a chat session tags: - conversations /api/v1/sessions/{sessionId}/conversation/interrupt: post: operationId: interruptSessionConversationTurn 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: "204": description: No Content "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: Cancel the in-flight turn in a chat session tags: - conversations /api/v1/sessions/{sessionId}/conversation/mcp/reload: post: operationId: reloadSessionConversationMcpServers 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/ReloadConversationMCPServersResponse' 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: Restart the tool servers a chat session can reach tags: - conversations /api/v1/sessions/{sessionId}/conversation/messages: post: operationId: sendSessionConversationMessage 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/SendConversationMessageRequest' required: true responses: "202": content: application/json: schema: $ref: '#/components/schemas/SendConversationMessageResponse' description: Accepted "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 "501": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Not Implemented summary: Send a message to a chat session's agent tags: - conversations /api/v1/sessions/{sessionId}/conversation/models: get: operationId: listSessionConversationModels 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/ConversationModelsResponse' 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: List the models the provider offers for a chat session tags: - conversations /api/v1/sessions/{sessionId}/conversation/settings: patch: operationId: setSessionConversationTurnSettings 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/ConversationTurnSettingsPayload' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/ConversationTurnSettingsPayload' 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 "501": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Not Implemented summary: Choose the model, reasoning effort and approval mode for the next turn tags: - conversations /api/v1/sessions/{sessionId}/conversation/skills: get: operationId: listSessionConversationSkills 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/ConversationSkillsResponse' 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: List the named skills the provider offers for a chat session tags: - conversations /api/v1/sessions/{sessionId}/conversation/steer: post: operationId: steerSessionConversationTurn 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/SteerConversationRequest' required: true responses: "202": content: application/json: schema: $ref: '#/components/schemas/SteerConversationResponse' description: Accepted "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 "501": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Not Implemented summary: Send guidance into the in-flight turn of a chat session tags: - conversations /api/v1/sessions/{sessionId}/conversation/title: put: operationId: setSessionConversationTitle 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/SetConversationTitleRequest' required: true responses: "202": content: application/json: schema: $ref: '#/components/schemas/SetConversationTitleResponse' description: Accepted "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 "501": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Not Implemented summary: Name the provider's conversation thread tags: - conversations /api/v1/sessions/{sessionId}/conversation/turns/{turnId}/rollback: post: operationId: rollbackSessionConversation 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: AO conversation turn identifier, from the snapshot's turns array. in: path name: turnId required: true schema: description: AO conversation turn identifier, from the snapshot's turns array. type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/RollbackConversationResponse' 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: Discard a turn and everything after it from the agent's memory tags: - conversations /api/v1/sessions/{sessionId}/interface-transition: delete: operationId: cancelSessionInterfaceTransition 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: "202": content: application/json: schema: $ref: '#/components/schemas/CancelSessionInterfaceTransitionResponse' description: Accepted "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: Cancel an interface handoff before its source controller stops tags: - sessions get: operationId: getSessionInterfaceTransition 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/SessionInterfaceTransitionStatusResponse' 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: Inspect TUI and Chat interface handoff support and progress tags: - sessions post: operationId: startSessionInterfaceTransition 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/StartSessionInterfaceTransitionRequest' required: true responses: "202": content: application/json: schema: $ref: '#/components/schemas/StartSessionInterfaceTransitionResponse' description: Accepted "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 "501": content: application/json: schema: $ref: '#/components/schemas/APIError' description: Not Implemented summary: Switch a live session between its TUI and Chat controllers 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}/pin: delete: operationId: unpinSession 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: Unpin a session tags: - sessions post: operationId: pinSession 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: Pin a 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}/reviewer: put: operationId: setSessionReviewer 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/SetSessionReviewerRequest' 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 "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 summary: Set the reviewer harness for a 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/kill: post: operationId: killReviewSession 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/KillReviewResponse' 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: Kill a worker's reviewer terminal session tags: - reviews /api/v1/sessions/{sessionId}/reviews/restore: post: operationId: restoreReviewSession 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/RestoreReviewResponse' 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: Restore a worker's reviewer terminal session 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/switch: post: operationId: switchReviewSession 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/SetSessionReviewerRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/ListReviewsResponse' 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: Switch a worker's reviewer harness 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 requestBody: content: application/json: schema: $ref: '#/components/schemas/TriggerReviewRequest' 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/settings: get: operationId: getSettings responses: "200": content: application/json: schema: $ref: '#/components/schemas/SettingsResponse' 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: Read the daemon-owned user preferences tags: - settings /api/v1/settings/session-interface: patch: operationId: updateSessionInterface requestBody: content: application/json: schema: $ref: '#/components/schemas/UpdateSessionInterfaceRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/SettingsResponse' 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: Choose the default interface for new sessions tags: - settings /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 /api/v1/usage/sessions: get: operationId: listCompactSessionUsage parameters: - description: Optional project id filter for dashboard cards. in: query name: projectId schema: description: Optional project id filter for dashboard cards. type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/ListCompactSessionUsageResponse' 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 compact token usage for session cards tags: - usage /api/v1/usage/sessions/{sessionId}: get: operationId: getSessionUsage 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/SessionUsageResponse' 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: Get detailed token usage for one session tags: - usage 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: mode: type: string 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 AgentModelInfo: properties: id: type: string isDefault: type: boolean label: type: string provider: type: string required: - id - label type: object AgentModelsResponse: properties: agentId: type: string allowCustom: type: boolean binaryVersion: type: string fetchedAt: format: date-time type: string models: items: $ref: '#/components/schemas/AgentModelInfo' type: array refreshRecommended: type: boolean selectionMode: enum: - catalog - text - mode type: string source: type: string stale: type: boolean validatedAt: format: date-time type: string warning: type: string required: - agentId - selectionMode - models - allowCustom - source - fetchedAt - stale 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 CancelSessionInterfaceTransitionResponse: properties: ok: type: boolean sessionId: type: string required: - ok - sessionId 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 CompactConversationResponse: properties: tokensAfter: format: int64 type: integer tokensBefore: format: int64 type: integer type: object CompactSessionUsageResponse: properties: incomplete: type: boolean sessionId: type: string totalTokens: format: int64 minimum: 0 type: integer required: - sessionId - totalTokens - incomplete 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 isPinned: type: boolean isTerminated: type: boolean issueId: type: string kind: type: string mode: enum: - chat - tui type: string pinnedAt: format: date-time type: - "null" - string previewRevision: format: int64 type: integer previewUrl: type: string projectId: type: string prs: items: $ref: '#/components/schemas/SessionPRFacts' type: array reviewerHarness: enum: - claude-code - codex - copilot - cursor - kilocode - opencode - kiro - pi - qwen - agy - continue - goose - vibe - devin - droid - kimi - muse - amp - aider - grok - crush - auggie - cline - autohand type: string 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 - mode - activity - isTerminated - terminateOnPrMerge - createdAt - updatedAt - isPinned - status - prs type: object ControllersSpawnAttachmentInput: properties: data: type: string mimeType: type: string required: - data type: object ConversationAccountPayload: properties: authMode: type: string planLabel: type: string reauthReason: type: string reauthRequiredAt: type: - "null" - string type: object ConversationActivityResponse: properties: activityKind: enum: - command - file_change - plan - reasoning - approval - usage - error - system - mcp_tool - auto_review - user_input type: string createdAt: type: string detail: additionalProperties: {} type: object id: type: string kind: enum: - activity type: string providerItemId: type: string requestId: type: string revision: format: int64 type: integer sequence: format: int64 type: integer status: enum: - running - completed - failed - cancelled - pending - resolved type: string summary: type: string turnId: type: string required: - kind - id - sequence - revision - activityKind - status - summary - createdAt type: object ConversationConfigChoiceResponse: properties: description: type: string group: type: string groupName: type: string name: type: string value: type: string required: - value - name type: object ConversationConfigOptionResponse: properties: category: type: string choices: items: $ref: '#/components/schemas/ConversationConfigChoiceResponse' type: array currentBoolean: type: - "null" - boolean currentValue: type: string description: type: string id: type: string name: type: string type: enum: - select - boolean type: string required: - id - name - type type: object ConversationConfigOptionsResponse: properties: options: items: $ref: '#/components/schemas/ConversationConfigOptionResponse' type: array required: - options type: object ConversationDiffFileResponse: properties: additions: type: integer deletions: type: integer oldPath: type: string path: type: string rolledBack: type: boolean status: enum: - added - modified - deleted - renamed type: string required: - path - additions - deletions - status type: object ConversationImageContentRequest: properties: data: type: string mimeType: type: string required: - mimeType - data type: object ConversationMCPServerPayload: properties: error: type: string failureReason: type: string name: type: string status: type: string required: - name - status type: object ConversationMessageResponse: properties: createdAt: type: string id: type: string kind: enum: - message type: string origin: enum: - human - automation - daemon - provider type: string revision: format: int64 type: integer role: enum: - user - assistant type: string sequence: format: int64 type: integer streaming: type: boolean text: type: string turnId: type: string required: - kind - id - sequence - revision - role - origin - text - streaming - createdAt type: object ConversationModelReroutePayload: properties: at: type: string fromModel: type: string providerTurnId: type: string reason: type: string toModel: type: string required: - toModel - at type: object ConversationModelResponse: properties: default: type: boolean defaultEffort: type: string description: type: string displayName: type: string efforts: items: type: string type: array id: type: string required: - id - displayName - default type: object ConversationModelsResponse: properties: models: items: $ref: '#/components/schemas/ConversationModelResponse' type: array selected: $ref: '#/components/schemas/ConversationTurnSettingsPayload' required: - models - selected type: object ConversationPlanResponse: properties: explanation: type: string steps: items: $ref: '#/components/schemas/ConversationPlanStepResponse' type: array required: - steps type: object ConversationPlanStepResponse: properties: status: enum: - pending - in_progress - completed type: string text: type: string required: - text - status type: object ConversationRateLimitsPayload: properties: planLabel: type: string primaryResetsInSeconds: format: int64 type: integer primaryUsedPercent: format: double type: number secondaryResetsInSeconds: format: int64 type: integer secondaryUsedPercent: format: double type: number title: type: string required: - primaryUsedPercent - secondaryUsedPercent type: object ConversationResourceContentRequest: properties: mimeType: type: string name: type: string text: type: - "null" - string uri: type: string required: - uri - name type: object ConversationSkillResponse: properties: description: type: string displayName: type: string inputHint: type: string name: type: string source: type: string required: - name - displayName type: object ConversationSkillsResponse: properties: skills: items: $ref: '#/components/schemas/ConversationSkillResponse' type: array required: - skills type: object ConversationSnapshotResponse: properties: account: $ref: '#/components/schemas/ConversationAccountPayload' activities: items: $ref: '#/components/schemas/ConversationActivityResponse' type: array capabilities: items: type: string type: array compactedAt: type: - "null" - string controller: enum: - connecting - ready - busy - recovering - stopped type: string conversationId: type: string harness: type: string hasMoreBefore: type: boolean latestSequence: format: int64 type: integer mcpServers: items: $ref: '#/components/schemas/ConversationMCPServerPayload' type: array messages: items: $ref: '#/components/schemas/ConversationMessageResponse' type: array mode: enum: - chat - tui type: string modelReroute: $ref: '#/components/schemas/ConversationModelReroutePayload' oldestSequence: format: int64 type: integer rateLimits: $ref: '#/components/schemas/ConversationRateLimitsPayload' sessionId: type: string settings: $ref: '#/components/schemas/ConversationTurnSettingsPayload' threadState: $ref: '#/components/schemas/ConversationThreadStatePayload' title: type: string turns: items: $ref: '#/components/schemas/ConversationTurnResponse' type: array usage: $ref: '#/components/schemas/ConversationUsagePayload' required: - conversationId - sessionId - mode - controller - latestSequence - hasMoreBefore - turns - messages - activities - settings type: object ConversationThreadStatePayload: properties: archivedAt: type: - "null" - string closedAt: type: - "null" - string status: enum: - active - idle - not_loaded - system_error - closed type: string waitingOn: items: type: string type: array type: object ConversationTurnDiffResponse: properties: files: items: $ref: '#/components/schemas/ConversationDiffFileResponse' type: array truncated: type: boolean required: - files type: object ConversationTurnResponse: properties: completedAt: type: - "null" - string diff: $ref: '#/components/schemas/ConversationTurnDiffResponse' errorMessage: type: string id: type: string plan: $ref: '#/components/schemas/ConversationPlanResponse' providerTurnId: type: string requestedAt: type: string rolledBack: type: boolean startedAt: type: - "null" - string state: enum: - queued - running - completed - interrupted - failed type: string required: - id - state - requestedAt type: object ConversationTurnSettingsPayload: properties: approvalMode: enum: - default - accept-edits - auto - bypass-permissions type: string model: type: string reasoningEffort: type: string type: object ConversationUsagePayload: properties: cachedTokens: format: int64 type: integer contextUsed: format: int64 type: integer contextWindow: format: int64 type: integer cost: type: - "null" - number currency: type: string inputTokens: format: int64 type: integer outputTokens: format: int64 type: integer totalTokens: format: int64 type: integer required: - contextUsed - contextWindow - inputTokens - outputTokens - cachedTokens - totalTokens 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 DelegateTaskRequest: properties: agent: enum: - claude-code - codex - aider - opencode - grok - droid - amp - agy - crush - cursor - qwen - copilot - goose - auggie - continue - devin - cline - kimi - muse - kiro - kilocode - vibe - pi - autohand - fake type: string attachments: items: $ref: '#/components/schemas/ControllersSpawnAttachmentInput' type: array brief: maxLength: 4096 type: string mode: enum: - tui - chat type: string model: maxLength: 256 type: string projectId: type: string required: - projectId - brief type: object DelegateTaskResponse: properties: ok: type: boolean orchestratorId: type: string workerId: type: string required: - ok - workerId 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 KillReviewResponse: properties: reviewerHandleId: type: string reviewerHarness: type: string reviews: items: $ref: '#/components/schemas/PRReviewState' type: array runs: items: $ref: '#/components/schemas/ReviewRun' type: array required: - reviewerHandleId - reviews - runs 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 ListCompactSessionUsageResponse: properties: sessions: items: $ref: '#/components/schemas/CompactSessionUsageResponse' type: array required: - sessions 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 reviewerHarness: type: string reviews: items: $ref: '#/components/schemas/PRReviewState' type: array runs: items: $ref: '#/components/schemas/ReviewRun' type: array required: - reviewerHandleId - reviews - runs 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 MergePRRequest: properties: expectedHeadSha: minLength: 40 type: string prUrl: minLength: 1 type: string required: - prUrl - expectedHeadSha 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 ReloadConversationMCPServersResponse: properties: servers: items: $ref: '#/components/schemas/ConversationMCPServerPayload' type: array required: - servers 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 ResolveConversationApprovalRequest: properties: decisionId: type: string required: - decisionId type: object ResolveConversationInputRequest: properties: action: enum: - accept - decline - cancel type: string content: additionalProperties: {} type: object required: - action type: object RestoreReviewResponse: properties: reviewerHandleId: type: string reviewerHarness: type: string reviews: items: $ref: '#/components/schemas/PRReviewState' type: array runs: items: $ref: '#/components/schemas/ReviewRun' type: array required: - reviewerHandleId - reviews - runs 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 RollbackConversationResponse: properties: turnsDiscarded: type: integer required: - turnsDiscarded type: object RollbackSessionResponse: properties: deleted: type: boolean killed: type: boolean ok: type: boolean sessionId: type: string required: - ok - sessionId type: object SendConversationMessageRequest: properties: attachments: items: $ref: '#/components/schemas/ConversationImageContentRequest' type: array clientMessageId: type: string resources: items: $ref: '#/components/schemas/ConversationResourceContentRequest' type: array text: type: string required: - text type: object SendConversationMessageResponse: properties: duplicate: type: boolean providerTurnId: type: string state: enum: - queued - running - completed - interrupted - failed type: string turnId: type: string required: - duplicate 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 SessionInterfaceTransition: properties: completedAt: format: date-time type: - "null" - string createdAt: format: date-time type: string errorCode: type: string errorDetail: type: string id: type: string phase: enum: - requested - preflighting - draining - source_stopping - source_stopped - target_starting - activating - completed - failed - cancelled - recovery_required type: string policy: enum: - drain - interrupt type: string sessionId: type: string sourceMode: enum: - chat - tui type: string targetMode: enum: - chat - tui type: string updatedAt: format: date-time type: string required: - id - sessionId - sourceMode - targetMode - policy - phase - createdAt - updatedAt type: object SessionInterfaceTransitionStatusResponse: properties: reason: type: string reasonCode: type: string supported: type: boolean targetMode: enum: - chat - tui type: string transition: $ref: '#/components/schemas/SessionInterfaceTransition' required: - supported - targetMode 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 SessionUsageResponse: properties: harnesses: items: $ref: '#/components/schemas/UsageHarnessResponse' type: array incomplete: type: boolean sessionId: type: string totals: $ref: '#/components/schemas/UsageTotalsResponse' required: - sessionId - incomplete - totals - harnesses 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 usage: $ref: '#/components/schemas/UsageHookMetadata' description: Provider transcript metadata used by the local usage pipeline. type: object SetActivityResponse: properties: ok: type: boolean sessionId: type: string state: type: string required: - ok - sessionId - state type: object SetConversationConfigOptionRequest: properties: enabled: type: - "null" - boolean value: type: string type: object SetConversationTitleRequest: properties: title: type: string required: - title type: object SetConversationTitleResponse: properties: title: type: string required: - title type: object SetProjectConfigInput: properties: config: $ref: '#/components/schemas/ProjectConfig' required: - config type: object SetReviewActivityRequest: properties: agentSessionId: description: Native reviewer session identifier used to resume its transcript. type: string event: description: AO hook sub-command that produced this signal. type: string launchId: description: AO process generation that produced the signal. type: string state: description: Reviewer activity state reported by a hook. Accepted for forward compatibility, not used for session display state. enum: - active - idle - waiting_input - blocked - exited type: string type: object SetReviewActivityResponse: properties: ok: type: boolean reviewSessionId: type: string required: - ok - reviewSessionId 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 SetSessionReviewerRequest: properties: harness: enum: - claude-code - codex - copilot - cursor - kilocode - opencode - kiro - pi - qwen - agy - continue - goose - vibe - devin - droid - kimi - muse - amp - aider - grok - crush - auggie - cline - autohand type: string type: object SettingsResponse: properties: chatHarnesses: items: type: string type: array defaultSessionMode: enum: - chat - tui type: string required: - defaultSessionMode - chatHarnesses 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 mode: enum: - chat - tui type: string 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 - muse - kiro - kilocode - vibe - pi - autohand type: string issueId: type: string kind: enum: - worker - orchestrator type: string mode: enum: - chat - tui 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 StageSessionAttachmentsRequest: properties: attachments: items: $ref: '#/components/schemas/ControllersSpawnAttachmentInput' type: array required: - attachments type: object StageSessionAttachmentsResponse: properties: paths: items: type: string type: array sessionId: type: string required: - sessionId - paths type: object StartPreviewServerRequest: properties: configuration: description: Named preview configuration. Optional when exactly one configuration exists. type: string type: object StartSessionInterfaceTransitionRequest: properties: policy: enum: - drain - interrupt type: string targetMode: enum: - chat - tui type: string required: - targetMode - policy type: object StartSessionInterfaceTransitionResponse: properties: ok: type: boolean sessionId: type: string transition: $ref: '#/components/schemas/SessionInterfaceTransition' required: - ok - sessionId - transition type: object SteerConversationRequest: properties: clientMessageId: type: string text: type: string required: - text type: object SteerConversationResponse: properties: activityId: type: string providerTurnId: type: string required: - providerTurnId 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 TriggerReviewRequest: properties: harness: enum: - claude-code - codex - copilot - cursor - kilocode - opencode - kiro - pi - qwen - agy - continue - goose - vibe - devin - droid - kimi - muse - amp - aider - grok - crush - auggie - cline - autohand 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 runs: items: $ref: '#/components/schemas/ReviewRun' type: array required: - reviewerHandleId - reviews - runs - 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 UpdateSessionInterfaceRequest: properties: defaultSessionMode: enum: - chat - tui type: string required: - defaultSessionMode type: object UpdateShellTerminalRequest: properties: title: description: New tab title for the shell terminal. Trimmed; must be non-empty. type: string required: - title type: object UsageHarnessResponse: properties: harness: type: string models: items: $ref: '#/components/schemas/UsageModelResponse' type: array totals: $ref: '#/components/schemas/UsageTotalsResponse' required: - harness - totals - models type: object UsageHookMetadata: properties: harness: enum: - claude-code - codex type: string modelId: type: string subagentId: type: string subagentTranscriptPath: type: string transcriptPath: type: string required: - harness type: object UsageModelResponse: properties: modelId: type: string totals: $ref: '#/components/schemas/UsageTotalsResponse' required: - modelId - totals type: object UsageTotalsResponse: properties: cacheReadTokens: type: - "null" - integer cacheWriteTokens: type: - "null" - integer inputTokens: type: - "null" - integer outputTokens: type: - "null" - integer reasoningTokens: type: - "null" - integer uncachedInputTokens: type: - "null" - integer required: - inputTokens - uncachedInputTokens - cacheReadTokens - cacheWriteTokens - outputTokens - reasoningTokens 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: Token usage telemetry for AO sessions name: usage - 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