Files
agent-radar 2ed3415fb7
Publish Claude Code Binaries / Stage and publish binaries (push) Canceled after 0s
Publish Tutti App Runtime / Build darwin-arm64 (push) Canceled after 0s
Publish Tutti App Runtime / Build darwin-amd64 (push) Canceled after 0s
Publish Tutti App Runtime / Build linux-amd64 (push) Canceled after 0s
Publish Tutti App Runtime / Build windows-amd64 (push) Canceled after 0s
Sync Tutti Agent Skills / sync (push) Canceled after 0s
Windows Agent Adapters / Test Windows agent adapters (push) Canceled after 0s
Windows Daemon Adapters / Test Windows daemon adapters (push) Canceled after 0s
Publish Tutti App Runtime / Publish runtime catalog (push) Canceled after 0s
源码快照 @ 2026-09-01 (source-only, 剔除非源码素材)
2026-09-01 20:17:27 +08:00

18231 lines
549 KiB
YAML

openapi: 3.0.3
info:
title: tuttid API
version: 0.1.0
description: Versioned local daemon API for tutti desktop, CLI, and approved local integrations.
x-tutti-openapi-fragments:
- packages/workspace/issue-manager/openapi/issue-manager.v1.yaml
- packages/connector/contracts/openapi/connector-market.v1.yaml
- services/tuttid/api/openapi/mobile-remote-access.v1.yaml
servers:
- url: http://127.0.0.1:4545
security:
- bearerAuth: []
tags:
- name: workspace-agent
description: Workspace-scoped selectable Agent directory
- name: runtime
- name: account
- name: user-presence
description: Process-local room interest and account user presence projection
- name: analytics
- name: cli
description: Public local capability protocol for the bundled CLI and future approved local integrations. Command metadata is machine-readable protocol data; command execution remains authorized by the daemon bearer token and filtered by daemon-owned context.
- name: preferences
- name: workspace
- name: terminal
- name: agent-session
- name: agent-target
- name: workspace-workflow
- name: agent-context
- name: app-center
- name: app-factory
- name: user-project
- name: agent-quick-prompt
- name: global-agent-activity
description: Authenticated cross-room Agent Activity read model
paths:
/v1/health:
get:
operationId: getHealth
tags:
- runtime
summary: Get daemon health status
responses:
"200":
description: Daemon health status
content:
application/json:
schema:
$ref: "#/components/schemas/HealthStatusResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
/v1/track:
post:
operationId: trackEvents
tags:
- analytics
summary: Accept analytics events from approved local clients
description: Accepts renderer-originated analytics events. Delivery to the analytics backend is handled asynchronously by tuttid.
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/TrackEventsRequest"
responses:
"202":
description: Analytics events accepted for asynchronous delivery
"400":
$ref: "#/components/responses/InvalidRequestError"
"401":
$ref: "#/components/responses/UnauthorizedError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/account/login/start:
post:
operationId: startAccountLogin
tags:
- account
summary: Start desktop account login
responses:
"200":
description: Login attempt started
content:
application/json:
schema:
$ref: "#/components/schemas/AccountLoginStartResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/account/login/status:
get:
operationId: getAccountLoginStatus
tags:
- account
summary: Get desktop account login status
parameters:
- name: attempt_id
in: query
required: true
schema:
type: string
minLength: 1
responses:
"200":
description: Login attempt status
content:
application/json:
schema:
$ref: "#/components/schemas/AccountLoginStatusResponse"
"400":
$ref: "#/components/responses/InvalidRequestError"
"401":
$ref: "#/components/responses/UnauthorizedError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/account/user_info:
get:
operationId: getAccountUserInfo
tags:
- account
summary: Get current desktop account user
responses:
"200":
description: Current account user, if signed in
content:
application/json:
schema:
$ref: "#/components/schemas/AccountUserInfoResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/account/product_summary:
get:
operationId: getAccountProductSummary
tags:
- account
summary: Get current account membership and credits summary
description: Returns desktop-safe account product state. tuttid reads the local account session and calls supported Tutti web APIs with the session cookie; session credentials are never returned to the renderer.
responses:
"200":
description: Current account product summary, if signed in
content:
application/json:
schema:
$ref: "#/components/schemas/AccountProductSummaryResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/account/registration_credits_reward/dismiss:
post:
operationId: dismissAccountRegistrationCreditsReward
tags:
- account
summary: Mark the current registration credits reward toast as shown
description: Marks a desktop-safe registration credits reward event as shown after the renderer has displayed or dismissed the toast. tuttid keeps session credentials local and never returns them to the renderer.
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/DismissAccountRegistrationCreditsRewardRequest"
responses:
"204":
description: Registration credits reward marked as shown
"400":
$ref: "#/components/responses/InvalidRequestError"
"401":
$ref: "#/components/responses/UnauthorizedError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/account/logout:
post:
operationId: logoutAccount
tags:
- account
summary: Sign out current desktop account
responses:
"204":
description: Account signed out
"401":
$ref: "#/components/responses/UnauthorizedError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/global-agent-activity/filter-options:
get:
operationId: getGlobalAgentActivityFilterOptions
tags:
- global-agent-activity
summary: List global Agent Activity filter options
description: Returns rooms owned by the signed-in user plus session owner, Agent, and activity-time options. Account credentials remain daemon-owned.
responses:
"200":
description: Global Agent Activity filter options
content:
application/json:
schema:
$ref: "#/components/schemas/GlobalAgentActivityFilterOptionsResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/global-agent-activity/sessions:
get:
operationId: listGlobalAgentActivitySessions
tags:
- global-agent-activity
summary: List filtered global Agent Activity sessions
description: At least one room, session owner, Agent, or activity-time filter is required. Results are bounded by the control plane and expose truncation instead of pagination.
parameters:
- name: roomIds
in: query
required: false
schema:
type: array
items:
type: string
minLength: 1
style: form
explode: true
- name: sessionOwnerUserIds
in: query
required: false
schema:
type: array
items:
type: string
minLength: 1
style: form
explode: true
- name: agentKeys
in: query
required: false
schema:
type: array
items:
type: string
minLength: 1
style: form
explode: true
- name: activityFromUnixMs
in: query
required: false
schema:
type: integer
format: int64
minimum: 0
- name: activityToUnixMs
in: query
required: false
schema:
type: integer
format: int64
minimum: 0
responses:
"200":
description: Filtered global Agent Activity sessions
content:
application/json:
schema:
$ref: "#/components/schemas/GlobalAgentActivitySessionListResponse"
"400":
$ref: "#/components/responses/InvalidRequestError"
"401":
$ref: "#/components/responses/UnauthorizedError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/account/user-presence/current-room:
put:
operationId: putAccountUserPresenceCurrentRoom
tags:
- user-presence
summary: Visit or refresh the currently displayed room presence projection
description: >-
Moves the room to the head of the daemon process-local ten-room LRU,
atomically replaces its eligible member source, waits for the exact
WebSocket subscription ACK, and then obtains an authoritative presence
snapshot. The LRU and presence cache are never persisted.
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/AccountUserPresenceCurrentRoomRequest"
responses:
"200":
description: Current room presence projection
content:
application/json:
schema:
$ref: "#/components/schemas/AccountUserPresenceRoomResponse"
"400":
$ref: "#/components/responses/InvalidRequestError"
"401":
$ref: "#/components/responses/UnauthorizedError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/account/user-presence/rooms/{roomID}:
get:
operationId: getAccountUserPresenceRoom
tags:
- user-presence
summary: Read the cached presence projection for one recently visited room
parameters:
- name: roomID
in: path
required: true
schema:
type: string
minLength: 1
responses:
"200":
description: Cached room presence projection, or an empty projection when the room is not in the LRU
content:
application/json:
schema:
$ref: "#/components/schemas/AccountUserPresenceRoomResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/account/user-presence/foreground:
put:
operationId: putAccountUserPresenceForeground
tags:
- user-presence
summary: Update whether foreground snapshot reconciliation is active
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/AccountUserPresenceForegroundRequest"
responses:
"204":
description: Foreground state accepted
"400":
$ref: "#/components/responses/InvalidRequestError"
"401":
$ref: "#/components/responses/UnauthorizedError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/cli/capabilities:
get:
operationId: listCliCapabilities
tags:
- cli
summary: List CLI capabilities visible in the current context
description: Returns daemon-owned command metadata that clients can use to route user commands without duplicating business rules or workspace resolution.
parameters:
- name: workspaceID
in: query
required: false
schema:
type: string
description: Optional workspace context. When omitted, the daemon uses the startup workspace.
- name: agentSessionID
in: query
required: false
schema:
type: string
description: Optional canonical Agent Session identity. When present, discovery is constrained by that Session's persisted command capability projection.
- name: includeHidden
in: query
required: false
schema:
type: boolean
default: false
description: Include capabilities hidden from ordinary CLI command discovery by provider availability filters and command visibility. Intended for metadata consumers, not ordinary user command routing.
- name: includeIntegration
in: query
required: false
schema:
type: boolean
default: false
description: Include integration-only commands while preserving provider availability filters. Intended for app-runtime integrations.
responses:
"200":
description: Visible CLI capabilities
content:
application/json:
schema:
$ref: "#/components/schemas/CliCapabilitiesResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/cli/commands/{commandID}/invoke:
post:
operationId: invokeCliCommand
tags:
- cli
summary: Invoke one registered CLI command
description: Invokes a daemon-owned capability by stable command id. The daemon validates context, resolves workspace state, applies edition filtering, and returns presentation-neutral command output.
parameters:
- $ref: "#/components/parameters/CliCommandID"
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/CliInvokeRequest"
responses:
"200":
description: CLI command result
content:
application/json:
schema:
$ref: "#/components/schemas/CliInvokeResponse"
"400":
$ref: "#/components/responses/InvalidRequestError"
"401":
$ref: "#/components/responses/UnauthorizedError"
"404":
$ref: "#/components/responses/InvalidRequestError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/agent-context/workspace-app-mentions:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
get:
operationId: listWorkspaceAppMentionCandidates
tags:
- agent-context
summary: List workspace app mention candidates for agent context pickers
description: >
Returns daemon-owned application mention candidates for Agent GUI and
rich-text context pickers. Real workspace apps are filtered by App Center
installation and enabled state. CLI capabilities only enrich search
metadata; this endpoint does not run command-routing availability
filters or agent provider auth checks.
responses:
"200":
description: Workspace app mention candidates
content:
application/json:
schema:
$ref: "#/components/schemas/WorkspaceAppMentionCandidatesResponse"
"400":
$ref: "#/components/responses/InvalidRequestError"
"401":
$ref: "#/components/responses/UnauthorizedError"
"404":
$ref: "#/components/responses/WorkspaceNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/preferences/desktop:
get:
operationId: getDesktopPreferences
tags:
- preferences
summary: Get persisted desktop preferences
responses:
"200":
description: Desktop preferences state
content:
application/json:
schema:
$ref: "#/components/schemas/DesktopPreferencesStateResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/PreferencesOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
put:
operationId: putDesktopPreferences
tags:
- preferences
summary: Persist desktop preferences
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/PutDesktopPreferencesRequest"
responses:
"200":
description: Desktop preferences persisted
content:
application/json:
schema:
$ref: "#/components/schemas/DesktopPreferencesStateResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/PreferencesOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/desktop-update-admission:
get:
operationId: getDesktopUpdateAdmissionSnapshot
tags:
- desktop-update-admission
summary: Read the daemon-owned desktop update admission snapshot
responses:
"200":
description: Current desktop update admission snapshot
content:
application/json:
schema:
$ref: "#/components/schemas/DesktopUpdateAdmissionSnapshot"
"401":
$ref: "#/components/responses/UnauthorizedError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/desktop-update-admission/startup:
get:
operationId: getDesktopUpdateAdmissionStartup
tags:
- desktop-update-admission
summary: Wait for the daemon-initiated startup admission check
responses:
"200":
description: Completed startup admission snapshot
content:
application/json:
schema:
$ref: "#/components/schemas/DesktopUpdateAdmissionSnapshot"
"401":
$ref: "#/components/responses/UnauthorizedError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/desktop-update-admission/refresh:
post:
operationId: refreshDesktopUpdateAdmission
tags:
- desktop-update-admission
summary: Ask the daemon to refresh admission for a lifecycle trigger
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/DesktopUpdateAdmissionRefreshRequest"
responses:
"200":
description: Desktop update admission refresh result
content:
application/json:
schema:
$ref: "#/components/schemas/DesktopUpdateAdmissionRefreshResult"
"400":
$ref: "#/components/responses/InvalidRequestError"
"401":
$ref: "#/components/responses/UnauthorizedError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/agent-maintenance/deleted-conversations/purge:
post:
operationId: purgeDeletedAgentConversations
tags:
- agent-maintenance
summary: Permanently purge all soft-deleted Agent conversations
responses:
"200":
description: Purge completed
content:
application/json:
schema:
$ref: "#/components/schemas/DeletedAgentConversationPurgeResult"
"401":
$ref: "#/components/responses/UnauthorizedError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/agent-quick-prompts:
get:
operationId: listAgentQuickPrompts
tags:
- agent-quick-prompt
summary: List device-local Agent quick prompts
responses:
"200":
description: Agent quick prompt list
content:
application/json:
schema:
$ref: "#/components/schemas/AgentQuickPromptListResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/AgentQuickPromptOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
post:
operationId: createAgentQuickPrompt
tags:
- agent-quick-prompt
summary: Create a device-local Agent quick prompt
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/CreateAgentQuickPromptRequest"
responses:
"201":
description: Agent quick prompt created
content:
application/json:
schema:
$ref: "#/components/schemas/AgentQuickPromptResponse"
"400":
$ref: "#/components/responses/InvalidRequestError"
"401":
$ref: "#/components/responses/UnauthorizedError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"409":
$ref: "#/components/responses/AgentQuickPromptConflictError"
"502":
$ref: "#/components/responses/AgentQuickPromptOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/agent-quick-prompts/move:
post:
operationId: moveAgentQuickPrompt
tags:
- agent-quick-prompt
summary: Move a device-local Agent quick prompt before an anchor or to the end
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/MoveAgentQuickPromptRequest"
responses:
"200":
description: Authoritative Agent quick prompt order
content:
application/json:
schema:
$ref: "#/components/schemas/AgentQuickPromptListResponse"
"400":
$ref: "#/components/responses/InvalidRequestError"
"401":
$ref: "#/components/responses/UnauthorizedError"
"404":
$ref: "#/components/responses/AgentQuickPromptNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"409":
$ref: "#/components/responses/AgentQuickPromptConflictError"
"502":
$ref: "#/components/responses/AgentQuickPromptOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/agent-quick-prompts/{promptId}:
parameters:
- name: promptId
in: path
required: true
schema:
type: string
minLength: 1
put:
operationId: updateAgentQuickPrompt
tags:
- agent-quick-prompt
summary: Update a device-local Agent quick prompt
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/UpdateAgentQuickPromptRequest"
responses:
"200":
description: Agent quick prompt updated
content:
application/json:
schema:
$ref: "#/components/schemas/AgentQuickPromptResponse"
"400":
$ref: "#/components/responses/InvalidRequestError"
"401":
$ref: "#/components/responses/UnauthorizedError"
"404":
$ref: "#/components/responses/AgentQuickPromptNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"409":
$ref: "#/components/responses/AgentQuickPromptConflictError"
"502":
$ref: "#/components/responses/AgentQuickPromptOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
delete:
operationId: deleteAgentQuickPrompt
tags:
- agent-quick-prompt
summary: Delete a device-local Agent quick prompt
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/DeleteAgentQuickPromptRequest"
responses:
"204":
description: Agent quick prompt deleted
"400":
$ref: "#/components/responses/InvalidRequestError"
"401":
$ref: "#/components/responses/UnauthorizedError"
"404":
$ref: "#/components/responses/AgentQuickPromptNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"409":
$ref: "#/components/responses/AgentQuickPromptConflictError"
"502":
$ref: "#/components/responses/AgentQuickPromptOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/user-projects:
get:
operationId: listUserProjects
tags:
- user-project
summary: List user project directories in durable order
responses:
"200":
description: User project list
content:
application/json:
schema:
$ref: "#/components/schemas/UserProjectListResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/PreferencesOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
post:
operationId: useUserProject
tags:
- user-project
summary: Record a user project directory usage
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/UseUserProjectRequest"
responses:
"201":
description: User project usage recorded
content:
application/json:
schema:
$ref: "#/components/schemas/UserProjectResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/PreferencesOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
delete:
operationId: deleteUserProject
tags:
- user-project
summary: Remove a user project directory from the ordered project list
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/DeleteUserProjectRequest"
responses:
"204":
description: User project removed
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/PreferencesOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/user-projects/check:
post:
operationId: checkUserProjectPath
tags:
- user-project
summary: Check a user project directory path without recording usage
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/CheckUserProjectPathRequest"
responses:
"200":
description: User project path status
content:
application/json:
schema:
$ref: "#/components/schemas/UserProjectPathCheckResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/PreferencesOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/user-projects/move:
post:
operationId: moveUserProject
tags:
- user-project
summary: Move a user project within its pinned or unpinned partition
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/MoveUserProjectRequest"
responses:
"200":
description: Complete ordered user project list
content:
application/json:
schema:
$ref: "#/components/schemas/UserProjectListResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/PreferencesOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/user-projects/pin:
post:
operationId: pinUserProject
tags:
- user-project
summary: Pin or unpin a user project
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/PinUserProjectRequest"
responses:
"200":
description: Complete ordered user project list
content:
application/json:
schema:
$ref: "#/components/schemas/UserProjectListResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/PreferencesOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/events/ws:
get:
operationId: attachEventStream
tags:
- event-stream
summary: Attach a WebSocket stream to daemon business events
responses:
"200":
description: Event stream upgrade endpoint
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/agent-targets:
get:
operationId: listAgentTargets
tags:
- agent-target
summary: List daemon-owned Agent Targets
description: Returns durable Agent Target records. The launch ref is a controlled union and not a free-form configuration blob.
responses:
"200":
description: Agent Targets
content:
application/json:
schema:
$ref: "#/components/schemas/ListAgentTargetsResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/PreferencesOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/agent-targets/{agentTargetID}/enabled:
patch:
operationId: setSystemAgentTargetEnabled
tags:
- agent-target
summary: Enable or disable one daemon-owned system Agent Target
description: Desktop control-plane operation that changes only the enabled field of an existing system Agent Target. It is not exposed as a Workspace App CLI capability.
parameters:
- name: agentTargetID
in: path
required: true
schema:
type: string
minLength: 1
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/SetSystemAgentTargetEnabledRequest"
responses:
"200":
description: Updated system Agent Target
content:
application/json:
schema:
$ref: "#/components/schemas/AgentTarget"
"400":
$ref: "#/components/responses/InvalidRequestError"
"401":
$ref: "#/components/responses/UnauthorizedError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/PreferencesOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/agent-targets/{agentTargetID}/account-usage:
post:
operationId: probeAgentTargetAccountUsage
tags:
- agent-target
summary: Probe provider-owned account usage for one Agent Target
description: >
Executes only a versioned account-usage capability declared by the
exact verified Agent Extension installation. The daemon validates the
companion executable under the Target-scoped managed runtime and
returns a provider-neutral result containing stable error codes only.
Account-usage availability never changes Agent runtime readiness.
parameters:
- name: agentTargetID
in: path
required: true
schema:
type: string
minLength: 1
responses:
"200":
description: Provider-owned account usage result
content:
application/json:
schema:
$ref: "#/components/schemas/AgentTargetAccountUsageProbeResult"
"400":
$ref: "#/components/responses/InvalidRequestError"
"401":
$ref: "#/components/responses/UnauthorizedError"
"404":
$ref: "#/components/responses/AgentTargetNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/agent-targets/{agentTargetID}/setup:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
- name: agentTargetID
in: path
required: true
schema:
type: string
minLength: 1
get:
operationId: getAgentTargetSetup
tags:
- agent-target
summary: Resolve Agent Target setup state
description: >
Prefers a compatible local runtime. Otherwise returns a daemon-derived
installation plan and any durable install action for the fixed Target.
The managed runtime is installed under the user's stable ~/.local data
root and is reused across workspaces. Clients cannot submit runner args,
package identity, executable paths, or installation roots.
responses:
"200":
description: Target setup state
content:
application/json:
schema:
$ref: "#/components/schemas/AgentTargetSetupSnapshot"
"400":
$ref: "#/components/responses/InvalidRequestError"
"401":
$ref: "#/components/responses/UnauthorizedError"
"404":
$ref: "#/components/responses/WorkspaceNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/agent-targets/{agentTargetID}/setup/install:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
- name: agentTargetID
in: path
required: true
schema:
type: string
minLength: 1
post:
operationId: installAgentTargetRuntime
tags:
- agent-target
summary: Start an Agent Target runtime installation
description: >
Recomputes the trusted installation plan, verifies its digest, then
starts or returns the durable idempotent action identified by
clientActionId. The daemon owns all executable arguments and paths.
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/InstallAgentTargetRuntimeRequest"
responses:
"200":
description: Current Target setup state
content:
application/json:
schema:
$ref: "#/components/schemas/AgentTargetSetupSnapshot"
"400":
$ref: "#/components/responses/InvalidRequestError"
"401":
$ref: "#/components/responses/UnauthorizedError"
"404":
$ref: "#/components/responses/WorkspaceNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/agent-targets/{agentTargetID}/setup/authenticate:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
- name: agentTargetID
in: path
required: true
schema:
type: string
minLength: 1
post:
operationId: authenticateAgentTargetRuntime
tags:
- agent-target
summary: Authenticate an Agent Target runtime
description: >
Validates methodId against auth methods returned by a fresh ACP
initialize, calls ACP authenticate, then requires session/new to
succeed before reporting ready. The durable action is idempotent by
clientActionId and never stores credentials.
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/AuthenticateAgentTargetRuntimeRequest"
responses:
"200":
description: Current Target setup state
content:
application/json:
schema:
$ref: "#/components/schemas/AgentTargetSetupSnapshot"
"400":
$ref: "#/components/responses/InvalidRequestError"
"401":
$ref: "#/components/responses/UnauthorizedError"
"404":
$ref: "#/components/responses/WorkspaceNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces:
get:
operationId: listWorkspaces
tags:
- workspace
summary: List registered workspaces
responses:
"200":
description: Workspace catalog
content:
application/json:
schema:
$ref: "#/components/schemas/ListWorkspacesResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
post:
operationId: createWorkspace
tags:
- workspace
summary: Create a workspace record
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/CreateWorkspaceRequest"
responses:
"201":
description: Workspace created
content:
application/json:
schema:
$ref: "#/components/schemas/WorkspaceResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/startup:
get:
operationId: getStartupWorkspace
tags:
- workspace
summary: Resolve the workspace that should open on startup
responses:
"200":
description: Startup workspace selection
content:
application/json:
schema:
$ref: "#/components/schemas/StartupWorkspaceResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
get:
operationId: getWorkspace
tags:
- workspace
summary: Get one workspace by id
responses:
"200":
description: Workspace details
content:
application/json:
schema:
$ref: "#/components/schemas/WorkspaceResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/WorkspaceNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
patch:
operationId: updateWorkspace
tags:
- workspace
summary: Update one workspace
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/UpdateWorkspaceRequest"
responses:
"200":
description: Workspace updated
content:
application/json:
schema:
$ref: "#/components/schemas/WorkspaceResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/WorkspaceNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
delete:
operationId: deleteWorkspace
tags:
- workspace
summary: Delete one workspace
responses:
"200":
description: Workspace deleted
content:
application/json:
schema:
$ref: "#/components/schemas/DeleteWorkspaceResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/WorkspaceNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/workbench:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
get:
operationId: getWorkspaceWorkbench
tags:
- workspace
summary: Get one workspace workbench snapshot
responses:
"200":
description: Workspace workbench snapshot
content:
application/json:
schema:
$ref: "#/components/schemas/WorkspaceWorkbenchResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/WorkspaceNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
put:
operationId: putWorkspaceWorkbench
tags:
- workspace
summary: Persist one workspace workbench snapshot
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/PutWorkspaceWorkbenchRequest"
responses:
"200":
description: Workspace workbench snapshot persisted
content:
application/json:
schema:
$ref: "#/components/schemas/WorkspaceWorkbenchResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/WorkspaceNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/model-plans:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
get:
operationId: listModelPlans
tags:
- model-plan
summary: List workspace model access plans
description: Returns every named model access plan for the workspace. Credentials never appear in responses; only hasApiKey is exposed.
responses:
"200":
description: Model access plans
content:
application/json:
schema:
$ref: "#/components/schemas/ListModelPlansResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
post:
operationId: createModelPlan
tags:
- model-plan
summary: Create one named model access plan
description: Creates a plan for one access scheme (official subscription, coding plan, relay, or custom compatible endpoint). Multiple named plans may share one protocol. New plans start undetected.
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/PutModelPlanRequest"
responses:
"200":
description: Created model access plan
content:
application/json:
schema:
$ref: "#/components/schemas/ModelPlan"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/model-plans/detect:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
post:
operationId: detectModelPlan
tags:
- model-plan
summary: Run the staged connection detection for a plan or draft
description: Runs the network, auth, model discovery, and minimal real inference stages in order and reports one structured result per stage. With planId the outcome persists onto the stored plan; omitted fields fall back to stored values. Without planId the request verifies an unsaved draft.
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/DetectModelPlanRequest"
responses:
"200":
description: Staged detection outcome
content:
application/json:
schema:
$ref: "#/components/schemas/DetectModelPlanResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/ModelPlanNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/model-plans/{modelPlanID}:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
- $ref: "#/components/parameters/ModelPlanID"
get:
operationId: getModelPlan
tags:
- model-plan
summary: Get one model access plan
responses:
"200":
description: Model access plan
content:
application/json:
schema:
$ref: "#/components/schemas/ModelPlan"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/ModelPlanNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
put:
operationId: updateModelPlan
tags:
- model-plan
summary: Update one model access plan
description: Replaces the mutable plan fields. Omitting apiKey keeps the stored credential. Changing the credential, base URL, or protocol resets detection state. Changes affect only calls that have not started yet.
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/PutModelPlanRequest"
responses:
"200":
description: Updated model access plan
content:
application/json:
schema:
$ref: "#/components/schemas/ModelPlan"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/ModelPlanNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
delete:
operationId: deleteModelPlan
tags:
- model-plan
summary: Delete one model access plan
description: Deletion is blocked with a 409 while any agent target still references the plan. Callers rebind or clear those bindings first; the references endpoint lists them.
responses:
"200":
description: Model access plan deleted
content:
application/json:
schema:
$ref: "#/components/schemas/DeleteModelPlanResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/ModelPlanNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"409":
$ref: "#/components/responses/ModelPlanReferencedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/model-plans/{modelPlanID}/duplicate:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
- $ref: "#/components/parameters/ModelPlanID"
post:
operationId: duplicateModelPlan
tags:
- model-plan
summary: Duplicate one model access plan
description: Clones the plan, including its credential, into a new disabled plan that must be re-detected before use.
requestBody:
required: false
content:
application/json:
schema:
$ref: "#/components/schemas/DuplicateModelPlanRequest"
responses:
"200":
description: Duplicated model access plan
content:
application/json:
schema:
$ref: "#/components/schemas/ModelPlan"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/ModelPlanNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/model-plans/{modelPlanID}/enabled:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
- $ref: "#/components/parameters/ModelPlanID"
patch:
operationId: setModelPlanEnabled
tags:
- model-plan
summary: Enable or disable one model access plan
description: Disabling a plan blocks new calls through it without deleting the configuration. Running calls are never interrupted.
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/SetModelPlanEnabledRequest"
responses:
"200":
description: Updated model access plan
content:
application/json:
schema:
$ref: "#/components/schemas/ModelPlan"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/ModelPlanNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/model-plans/{modelPlanID}/references:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
- $ref: "#/components/parameters/ModelPlanID"
get:
operationId: listModelPlanReferences
tags:
- model-plan
summary: List consumers that reference one model access plan
description: Returns the agent targets that currently reference the plan so change and delete impact can be shown before committing.
responses:
"200":
description: Plan references
content:
application/json:
schema:
$ref: "#/components/schemas/ModelPlanReferencesResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/ModelPlanNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/collaboration-runs:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
get:
operationId: listCollaborationRuns
tags:
- collaboration-run
summary: List workspace collaboration runs
description: Returns collaboration runs (model consults, forks, delegations, handoffs) newest first. Credentials never appear on run records.
parameters:
- name: sourceSessionId
in: query
required: false
description: Narrow to runs started from one source agent session.
schema:
type: string
minLength: 1
- name: limit
in: query
required: false
schema:
type: integer
minimum: 1
maximum: 500
responses:
"200":
description: Collaboration runs
content:
application/json:
schema:
$ref: "#/components/schemas/ListCollaborationRunsResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
post:
operationId: createCollaborationRun
tags:
- collaboration-run
summary: Start or record one collaboration run
description: Mode consult executes a daemon-side advisory completion against a workspace model access plan synchronously and returns the completed or failed run; the advisor never executes tools and task ownership never changes. Modes fork, delegate, and handoff record a run for a target session the GUI already created through the session-create path.
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/CreateCollaborationRunRequest"
responses:
"200":
description: Collaboration run
content:
application/json:
schema:
$ref: "#/components/schemas/CollaborationRun"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/WorkspaceNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/collaboration-runs/{collaborationRunID}/adoption:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
- $ref: "#/components/parameters/CollaborationRunID"
post:
operationId: setCollaborationRunAdoption
tags:
- collaboration-run
summary: Record whether a collaboration run outcome was adopted
description: Consult and delegate outcomes track adoption (pending, adopted, rejected). Fork and handoff runs are not adoptable.
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/SetCollaborationRunAdoptionRequest"
responses:
"200":
description: Updated collaboration run
content:
application/json:
schema:
$ref: "#/components/schemas/CollaborationRun"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/WorkspaceNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/collaboration-runs/{collaborationRunID}/cancel:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
- $ref: "#/components/parameters/CollaborationRunID"
post:
operationId: cancelCollaborationRun
tags:
- collaboration-run
summary: Cancel a running consult
description: Marks a still-running consult canceled and aborts its in-flight completion call. Settled runs are returned unchanged.
responses:
"200":
description: Collaboration run after the cancel request
content:
application/json:
schema:
$ref: "#/components/schemas/CollaborationRun"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/WorkspaceNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/agent-model-bindings:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
get:
operationId: listAgentModelBindings
tags:
- model-plan
summary: List per-workspace agent target model bindings
description: Returns the default model plan and default model bound to each agent target in the workspace. Targets without a binding keep their provider-native model source.
responses:
"200":
description: Agent model bindings
content:
application/json:
schema:
$ref: "#/components/schemas/ListAgentModelBindingsResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/agent-model-bindings/{agentTargetID}:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
- name: agentTargetID
in: path
required: true
schema:
type: string
minLength: 1
put:
operationId: setAgentModelBinding
tags:
- model-plan
summary: Set or clear one agent target model binding
description: Binds the agent target to a default model plan and model for the workspace. An all-empty body clears the binding. Changes affect only sessions that have not started; running sessions keep their recorded configuration.
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/SetAgentModelBindingRequest"
responses:
"200":
description: Updated agent model binding
content:
application/json:
schema:
$ref: "#/components/schemas/AgentModelBinding"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/AgentTargetNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/model-policies:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
get:
operationId: listModelPolicies
deprecated: true
tags:
- model-plan
summary: List legacy role-based model policies
description: Compatibility-only. New workflows use WorkspaceAgent for runtime model configuration and AutomationRule for optional collaboration actions.
responses:
"200":
description: Model usage policies
content:
application/json:
schema:
$ref: "#/components/schemas/ListModelPoliciesResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
post:
operationId: createModelPolicy
deprecated: true
tags:
- model-plan
summary: Create one legacy role-based model policy
description: Compatibility-only. The production daemon does not execute this policy's role map or fixed review runner; create a WorkspaceAgent and AutomationRule for new workflows.
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/PutModelPolicyRequest"
responses:
"200":
description: Created model usage policy
content:
application/json:
schema:
$ref: "#/components/schemas/ModelUsagePolicy"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/model-policies/{modelPolicyID}:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
- $ref: "#/components/parameters/ModelPolicyID"
get:
operationId: getModelPolicy
deprecated: true
tags:
- model-plan
summary: Get one legacy role-based model policy
description: Compatibility-only. The policy is retained for persisted data and acceptance records.
responses:
"200":
description: Model usage policy
content:
application/json:
schema:
$ref: "#/components/schemas/ModelUsagePolicy"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/WorkspaceNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
put:
operationId: updateModelPolicy
deprecated: true
tags:
- model-plan
summary: Update one legacy role-based model policy
description: Compatibility-only. Changes do not drive the production Agent runtime or AutomationRule engine.
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/PutModelPolicyRequest"
responses:
"200":
description: Updated model usage policy
content:
application/json:
schema:
$ref: "#/components/schemas/ModelUsagePolicy"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/WorkspaceNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
delete:
operationId: deleteModelPolicy
deprecated: true
tags:
- model-plan
summary: Delete one legacy role-based model policy
description: Deletion is blocked with a 409 while any agent binding still references the policy. Callers rebind or clear those bindings first.
responses:
"200":
description: Model usage policy deleted
content:
application/json:
schema:
$ref: "#/components/schemas/DeleteModelPolicyResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/WorkspaceNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"409":
$ref: "#/components/responses/ModelPolicyReferencedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/agent-sessions/{agentSessionID}/model-policy-override:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
- $ref: "#/components/parameters/AgentSessionID"
get:
operationId: getAgentSessionModelPolicyOverride
deprecated: true
tags:
- model-plan
summary: Get the legacy session model-policy override
description: Compatibility-only. Use the AutomationRule session override for new workflows.
responses:
"200":
description: Session policy override; absent override returns disabled=false with no policy id
content:
application/json:
schema:
$ref: "#/components/schemas/AgentSessionModelPolicyOverride"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
put:
operationId: setAgentSessionModelPolicyOverride
deprecated: true
tags:
- model-plan
summary: Set the legacy session model-policy override
description: Compatibility-only. The legacy review runner is not wired in production; use the AutomationRule session override to select or disable future actions.
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/SetAgentSessionModelPolicyOverrideRequest"
responses:
"200":
description: Updated session policy override
content:
application/json:
schema:
$ref: "#/components/schemas/AgentSessionModelPolicyOverride"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/WorkspaceNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/agent-sessions/{agentSessionID}/acceptance:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
- $ref: "#/components/parameters/AgentSessionID"
get:
operationId: getAgentSessionAcceptance
tags:
- model-plan
summary: Get the session acceptance ladder state
description: States distinguish agent_claimed, auto_checked, and user_accepted. Only user_accepted may close work; automated review can reach auto_checked at most.
responses:
"200":
description: Session acceptance state; sessions never claimed complete return no state
content:
application/json:
schema:
$ref: "#/components/schemas/AgentSessionAcceptanceResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
post:
operationId: acceptAgentSessionWork
tags:
- model-plan
summary: Record explicit user acceptance for the session's claimed work
responses:
"200":
description: Acceptance recorded as user_accepted
content:
application/json:
schema:
$ref: "#/components/schemas/AgentSessionAcceptanceResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/workflows:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
get:
operationId: listWorkspaceWorkflows
tags:
- workspace-workflow
summary: List Tutti-owned workflows for a source Agent session
parameters:
- name: sourceSessionId
in: query
required: true
schema:
type: string
minLength: 1
- name: checkpointStatus
in: query
required: false
schema:
type: string
enum:
- pending
x-enum-varnames:
- ListWorkspaceWorkflowsParamsCheckpointStatusPending
description: When omitted, returns every workflow for the source session. Pass pending to return only workflows with a pending checkpoint.
responses:
"200":
description: Matching authoritative workflow snapshots
content:
application/json:
schema:
$ref: "#/components/schemas/WorkspaceWorkflowListResponse"
"400":
$ref: "#/components/responses/InvalidRequestError"
"401":
$ref: "#/components/responses/UnauthorizedError"
"404":
$ref: "#/components/responses/WorkspaceNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/workflows/{workflowID}:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
- name: workflowID
in: path
required: true
schema:
type: string
format: uuid
get:
operationId: getWorkspaceWorkflow
tags:
- workspace-workflow
summary: Get one authoritative Tutti-owned workflow snapshot
responses:
"200":
description: Authoritative workflow snapshot
content:
application/json:
schema:
$ref: "#/components/schemas/WorkspaceWorkflowSnapshot"
"400":
$ref: "#/components/responses/InvalidRequestError"
"401":
$ref: "#/components/responses/UnauthorizedError"
"404":
$ref: "#/components/responses/WorkspaceNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/workflows/{workflowID}/checkpoints/{checkpointID}/decision:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
- name: workflowID
in: path
required: true
schema:
type: string
format: uuid
- name: checkpointID
in: path
required: true
schema:
type: string
format: uuid
post:
operationId: decideWorkspaceWorkflowCheckpoint
tags:
- workspace-workflow
summary: Decide one Tutti-owned workflow checkpoint
description: This user-facing API is the only decision boundary; Agent CLI capabilities cannot self-approve a checkpoint.
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/DecideWorkspaceWorkflowCheckpointRequest"
responses:
"200":
description: Updated authoritative workflow snapshot
content:
application/json:
schema:
$ref: "#/components/schemas/WorkspaceWorkflowSnapshot"
"400":
$ref: "#/components/responses/InvalidRequestError"
"401":
$ref: "#/components/responses/UnauthorizedError"
"404":
$ref: "#/components/responses/WorkspaceNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"409":
description: Checkpoint was already decided differently or is no longer current
content:
application/json:
schema:
$ref: "#/components/schemas/ApiErrorResponse"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/apps:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
get:
operationId: listWorkspaceApps
tags:
- app-center
summary: List app catalog and installation state for one workspace
responses:
"200":
description: Workspace apps
content:
application/json:
schema:
$ref: "#/components/schemas/WorkspaceAppListResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/WorkspaceNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/apps/catalog/refresh:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
post:
operationId: refreshWorkspaceAppCatalog
tags:
- app-center
summary: Refresh the remote app catalog for one workspace
responses:
"200":
description: Workspace apps after the refresh request was accepted
content:
application/json:
schema:
$ref: "#/components/schemas/WorkspaceAppListResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/WorkspaceNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/apps/import:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
post:
operationId: importWorkspaceApp
tags:
- app-center
summary: Import one workspace app package archive
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/ImportWorkspaceAppRequest"
responses:
"200":
description: Workspace app package imported
content:
application/json:
schema:
$ref: "#/components/schemas/WorkspaceAppResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/WorkspaceNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/apps/load-local:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
post:
operationId: loadLocalWorkspaceApp
tags:
- app-center
summary: Load one unpacked local workspace app directory
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/LoadLocalWorkspaceAppRequest"
responses:
"200":
description: Local workspace app loaded and installed
content:
application/json:
schema:
$ref: "#/components/schemas/WorkspaceAppResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/WorkspaceNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/apps/start-enabled:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
post:
operationId: startEnabledWorkspaceApps
tags:
- app-center
summary: Start enabled installed apps for one workspace
responses:
"200":
description: Enabled workspace apps start attempted
content:
application/json:
schema:
$ref: "#/components/schemas/WorkspaceAppListResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/WorkspaceNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/apps/stop-all:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
post:
operationId: stopAllWorkspaceApps
tags:
- app-center
summary: Stop all running apps for one workspace
responses:
"200":
description: Workspace apps stopped
content:
application/json:
schema:
$ref: "#/components/schemas/WorkspaceAppListResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/WorkspaceNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/apps/{appID}/install:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
- $ref: "#/components/parameters/WorkspaceAppID"
post:
operationId: installWorkspaceApp
tags:
- app-center
summary: Install one app in a workspace
requestBody:
required: false
content:
application/json:
schema:
$ref: "#/components/schemas/InstallWorkspaceAppRequest"
responses:
"200":
description: Workspace app installed
content:
application/json:
schema:
$ref: "#/components/schemas/WorkspaceAppResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/WorkspaceAppNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/apps/{appID}/reload-local:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
- $ref: "#/components/parameters/WorkspaceAppID"
post:
operationId: reloadLocalWorkspaceApp
tags:
- app-center
summary: Reload one unpacked local workspace app directory
requestBody:
required: false
content:
application/json:
schema:
$ref: "#/components/schemas/ReloadLocalWorkspaceAppRequest"
responses:
"200":
description: Local workspace app reloaded
content:
application/json:
schema:
$ref: "#/components/schemas/WorkspaceAppResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/WorkspaceAppNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/apps/{appID}/preferences/agent:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
- $ref: "#/components/parameters/WorkspaceAppID"
get:
operationId: getWorkspaceAppAgentPreferences
deprecated: true
tags:
- app-center
summary: Get workspace-app agent preference projection
description: >
Read-only subset of desktop agent preferences for one workspace app
runtime. Intended for workspace app server tokens; exposes default
provider selection and developer-gated provider visibility only. Deprecated
for Agent integrations: use the current agent catalog (`tutti --json agent list`) through
`@tutti-os/agent-acp-kit/tutti`. Removal is gated by the production-usage
telemetry and release criteria in
`docs/conventions/deprecated-workspace-app-agent-apis.md`.
responses:
"200":
description: Workspace app agent preferences
content:
application/json:
schema:
$ref: "#/components/schemas/WorkspaceAppAgentPreferencesResponse"
"400":
$ref: "#/components/responses/InvalidRequestError"
"401":
$ref: "#/components/responses/UnauthorizedError"
"404":
$ref: "#/components/responses/WorkspaceAppNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/PreferencesOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/apps/{appID}/agent-providers/status:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
- $ref: "#/components/parameters/WorkspaceAppID"
get:
operationId: getWorkspaceAppAgentProviderStatuses
deprecated: true
tags:
- app-center
summary: Get agent provider availability for one workspace app
description: >
Workspace-app scoped alias of `GET /v1/agent-providers/status` for app
server tokens. When `providers` is omitted, returns provider statuses
for enabled daemon-owned Agent Targets visible to Agent GUI. When
`providers` is supplied, it narrows that Agent Target set and cannot
expose providers outside it. Deprecated for Agent integrations: use
the current agent catalog (`tutti --json agent list`) through
`@tutti-os/agent-acp-kit/tutti`.
Removal is gated by the production-usage telemetry and release criteria
in `docs/conventions/deprecated-workspace-app-agent-apis.md`.
parameters:
- name: providers
in: query
required: false
style: form
explode: true
schema:
type: array
items:
$ref: "#/components/schemas/WorkspaceAgentProvider"
- name: includeNetwork
in: query
required: false
schema:
type: boolean
- name: refresh
in: query
required: false
description: Bypass the daemon provider-readiness cache.
schema:
type: boolean
responses:
"200":
description: Agent provider status snapshot
content:
application/json:
schema:
$ref: "#/components/schemas/AgentProviderStatusListResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/WorkspaceAppNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/apps/{appID}/agent-providers/{provider}/composer-options:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
- $ref: "#/components/parameters/WorkspaceAppID"
- name: provider
in: path
required: true
schema:
$ref: "#/components/schemas/WorkspaceAgentProvider"
post:
operationId: getWorkspaceAppAgentProviderComposerOptions
deprecated: true
tags:
- app-center
summary: Get agent provider composer options for one workspace app
description: >
Workspace-app scoped alias of
`POST /v1/agent-providers/{provider}/composer-options` for app server
tokens. Deprecated for Agent integrations: use
`tutti --json agent composer-options --agent-id <agentId>` through
`@tutti-os/agent-acp-kit/tutti`. Removal is gated by the production-usage
telemetry and release criteria in
`docs/conventions/deprecated-workspace-app-agent-apis.md`.
requestBody:
required: false
content:
application/json:
schema:
$ref: "#/components/schemas/GetAgentProviderComposerOptionsRequest"
responses:
"200":
description: Agent provider composer options
content:
application/json:
schema:
$ref: "#/components/schemas/AgentProviderComposerOptionsResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/WorkspaceAppNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/apps/{appID}/references/list:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
- $ref: "#/components/parameters/WorkspaceAppID"
post:
operationId: listWorkspaceAppReferences
tags:
- app-center
summary: List file references exposed by one running workspace app
description: >
Proxies a reference list request to a running workspace app and returns
daemon-resolved file references. Workspace app runtimes return scoped
locations to the daemon; this public daemon API returns absolute file
paths that desktop clients can use as ordinary file links.
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/AppReferenceListRequest"
responses:
"200":
description: Workspace app reference list
content:
application/json:
schema:
$ref: "#/components/schemas/AppReferenceListResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/WorkspaceAppNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/apps/{appID}/references/search:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
- $ref: "#/components/parameters/WorkspaceAppID"
post:
operationId: searchWorkspaceAppReferences
tags:
- app-center
summary: Search file references exposed by one running workspace app
description: >
Proxies a recursive reference search request to a running workspace app
and returns daemon-resolved file references ordered by relevance. Unlike
the list filterText, search spans the whole app reference tree and never
returns groups. Workspace app runtimes return scoped locations to the
daemon; this public daemon API returns absolute file paths that desktop
clients can use as ordinary file links.
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/AppReferenceSearchRequest"
responses:
"200":
description: Workspace app reference search results
content:
application/json:
schema:
$ref: "#/components/schemas/AppReferenceSearchResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/WorkspaceAppNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/apps/{appID}/uploads:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
- $ref: "#/components/parameters/WorkspaceAppID"
post:
operationId: prepareWorkspaceAppUpload
tags:
- app-center
summary: Prepare one managed file upload for a workspace app
description: >
Creates an in-memory upload session scoped to one installed workspace
app. The response only identifies the daemon upload session; desktop
hosts construct the direct content upload URL and keep storage-provider
details out of the app-facing browser bridge.
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/PrepareWorkspaceAppUploadRequest"
responses:
"201":
description: Workspace app upload session prepared
content:
application/json:
schema:
$ref: "#/components/schemas/PrepareWorkspaceAppUploadResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/WorkspaceAppNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/apps/{appID}/uploads/{uploadID}/content:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
- $ref: "#/components/parameters/WorkspaceAppID"
- name: uploadID
in: path
required: true
schema:
type: string
minLength: 1
put:
operationId: putWorkspaceAppUploadContent
tags:
- app-center
summary: Stream upload bytes into one workspace app upload session
requestBody:
required: true
content:
application/octet-stream:
schema:
type: string
format: binary
responses:
"204":
description: Workspace app upload content accepted
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/WorkspaceAppNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/apps/{appID}/uploads/{uploadID}:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
- $ref: "#/components/parameters/WorkspaceAppID"
- name: uploadID
in: path
required: true
schema:
type: string
minLength: 1
delete:
operationId: cancelWorkspaceAppUpload
tags:
- app-center
summary: Cancel one managed file upload session for a workspace app
description: >
Drops the in-memory upload session and removes the temporary upload
file when the upload has not been completed. Completed durable files are
not deleted by this operation.
responses:
"204":
description: Workspace app upload session canceled
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/WorkspaceAppNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/apps/{appID}/uploads/{uploadID}/complete:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
- $ref: "#/components/parameters/WorkspaceAppID"
- name: uploadID
in: path
required: true
schema:
type: string
minLength: 1
post:
operationId: completeWorkspaceAppUpload
tags:
- app-center
summary: Complete one managed file upload for a workspace app
responses:
"200":
description: Workspace app upload completed
content:
application/json:
schema:
$ref: "#/components/schemas/CompleteWorkspaceAppUploadResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/WorkspaceAppNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/apps/{appID}/export:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
- $ref: "#/components/parameters/WorkspaceAppID"
post:
operationId: exportWorkspaceApp
tags:
- app-center
summary: Export one workspace app package archive
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/ExportWorkspaceAppRequest"
responses:
"200":
description: Workspace app package exported
content:
application/json:
schema:
$ref: "#/components/schemas/ExportWorkspaceAppResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/WorkspaceAppNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/apps/{appID}/icon:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
- $ref: "#/components/parameters/WorkspaceAppID"
post:
operationId: replaceWorkspaceAppIcon
tags:
- app-center
summary: Replace the icon for one generated workspace app
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/ReplaceWorkspaceAppIconRequest"
responses:
"200":
description: Workspace app icon replaced
content:
application/json:
schema:
$ref: "#/components/schemas/WorkspaceAppResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/WorkspaceAppNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/apps/{appID}/uninstall:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
- $ref: "#/components/parameters/WorkspaceAppID"
post:
operationId: uninstallWorkspaceApp
tags:
- app-center
summary: Uninstall one installed app from a workspace
responses:
"200":
description: Workspace app uninstalled
content:
application/json:
schema:
$ref: "#/components/schemas/WorkspaceAppResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/WorkspaceAppNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/apps/{appID}:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
- $ref: "#/components/parameters/WorkspaceAppID"
delete:
operationId: deleteWorkspaceApp
tags:
- app-center
summary: Delete one local workspace app package
responses:
"200":
description: Local workspace app package deleted
content:
application/json:
schema:
$ref: "#/components/schemas/DeleteWorkspaceAppResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/WorkspaceAppNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/apps/{appID}/launch:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
- $ref: "#/components/parameters/WorkspaceAppID"
post:
operationId: launchWorkspaceApp
tags:
- app-center
summary: Launch one installed workspace app
responses:
"200":
description: Workspace app launch prepared
content:
application/json:
schema:
$ref: "#/components/schemas/WorkspaceAppResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/WorkspaceAppNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/apps/{appID}/retry:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
- $ref: "#/components/parameters/WorkspaceAppID"
post:
operationId: retryWorkspaceApp
tags:
- app-center
summary: Retry one failed installed workspace app
responses:
"200":
description: Workspace app failure retried
content:
application/json:
schema:
$ref: "#/components/schemas/WorkspaceAppResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/WorkspaceAppNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/apps/{appID}/rollback:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
- $ref: "#/components/parameters/WorkspaceAppID"
post:
operationId: rollbackWorkspaceApp
tags:
- app-center
summary: Roll back one workspace app to a previous package version
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/RollbackWorkspaceAppRequest"
responses:
"200":
description: Workspace app rolled back
content:
application/json:
schema:
$ref: "#/components/schemas/WorkspaceAppResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/WorkspaceAppNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/app-factory/jobs:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
get:
operationId: listWorkspaceAppFactoryJobs
tags:
- app-factory
summary: List App Factory jobs for one workspace
responses:
"200":
description: App Factory jobs
content:
application/json:
schema:
$ref: "#/components/schemas/WorkspaceAppFactoryJobListResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/WorkspaceNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
post:
operationId: createWorkspaceAppFactoryJob
tags:
- app-factory
summary: Create an App Factory job
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/CreateWorkspaceAppFactoryJobRequest"
responses:
"201":
description: App Factory job created
content:
application/json:
schema:
$ref: "#/components/schemas/WorkspaceAppFactoryJobResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/WorkspaceNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/app-factory/agent-targets/{agentTargetID}/composer-options:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
- name: agentTargetID
in: path
required: true
schema:
type: string
minLength: 1
post:
operationId: getWorkspaceAppFactoryAgentTargetComposerOptions
tags:
- app-factory
summary: Get App Factory agent target composer options
description: >
Resolves provider composer options for App Factory using daemon-owned
workspace and factory draft context. Clients provide workspace and
agent target selection, while tuttid owns the working directory used
for provider discovery.
requestBody:
required: false
content:
application/json:
schema:
$ref: "#/components/schemas/GetWorkspaceAppFactoryAgentTargetComposerOptionsRequest"
responses:
"200":
description: App Factory agent target composer options
content:
application/json:
schema:
$ref: "#/components/schemas/AgentProviderComposerOptionsResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/WorkspaceNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/app-factory/jobs/{jobID}:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
- $ref: "#/components/parameters/WorkspaceAppFactoryJobID"
get:
operationId: getWorkspaceAppFactoryJob
tags:
- app-factory
summary: Get one App Factory job
responses:
"200":
description: App Factory job
content:
application/json:
schema:
$ref: "#/components/schemas/WorkspaceAppFactoryJobResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/WorkspaceAppNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
delete:
operationId: deleteWorkspaceAppFactoryJob
tags:
- app-factory
summary: Delete one App Factory job
responses:
"200":
description: App Factory job deleted
content:
application/json:
schema:
$ref: "#/components/schemas/WorkspaceAppFactoryJobListResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/WorkspaceAppNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/app-factory/jobs/{jobID}/cancel:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
- $ref: "#/components/parameters/WorkspaceAppFactoryJobID"
post:
operationId: cancelWorkspaceAppFactoryJob
tags:
- app-factory
summary: Cancel one App Factory job
responses:
"200":
description: App Factory job canceled
content:
application/json:
schema:
$ref: "#/components/schemas/WorkspaceAppFactoryJobResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/WorkspaceAppNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/app-factory/jobs/{jobID}/retry-validation:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
- $ref: "#/components/parameters/WorkspaceAppFactoryJobID"
post:
operationId: retryWorkspaceAppFactoryJobValidation
tags:
- app-factory
summary: Retry validation for one App Factory draft
responses:
"200":
description: App Factory job validation retried
content:
application/json:
schema:
$ref: "#/components/schemas/WorkspaceAppFactoryJobResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/WorkspaceAppNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/app-factory/jobs/{jobID}/fix:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
- $ref: "#/components/parameters/WorkspaceAppFactoryJobID"
post:
operationId: fixWorkspaceAppFactoryJob
tags:
- app-factory
summary: Ask AI to fix one App Factory draft
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/FixWorkspaceAppFactoryJobRequest"
responses:
"200":
description: App Factory job fix requested
content:
application/json:
schema:
$ref: "#/components/schemas/WorkspaceAppFactoryJobResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/WorkspaceAppNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/app-factory/jobs/{jobID}/prepare-modification:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
- $ref: "#/components/parameters/WorkspaceAppFactoryJobID"
post:
operationId: prepareWorkspaceAppFactoryJobModification
tags:
- app-factory
summary: Prepare one published App Factory job for modification
responses:
"200":
description: App Factory draft prepared for modification
content:
application/json:
schema:
$ref: "#/components/schemas/WorkspaceAppFactoryJobResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/WorkspaceAppNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/app-factory/jobs/{jobID}/publish:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
- $ref: "#/components/parameters/WorkspaceAppFactoryJobID"
post:
operationId: publishWorkspaceAppFactoryJob
tags:
- app-factory
summary: Publish one validated App Factory draft
responses:
"200":
description: App Factory job published
content:
application/json:
schema:
$ref: "#/components/schemas/PublishWorkspaceAppFactoryJobResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/WorkspaceAppNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/agent-session-recordings:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
get:
operationId: listAgentSessionRecordings
tags:
- agent-session
summary: List developer Agent Session recordings for one workspace
responses:
"200":
description: Agent Session recordings ordered by latest update
content:
application/json:
schema:
$ref: "#/components/schemas/AgentSessionRecordingListResponse"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
post:
operationId: startAgentSessionRecording
tags:
- agent-session
summary: Start one developer Agent Session recording
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/StartAgentSessionRecordingRequest"
responses:
"201":
description: Agent Session recording prepared or recording
content:
application/json:
schema:
$ref: "#/components/schemas/AgentSessionRecording"
"400":
$ref: "#/components/responses/InvalidRequestError"
"409":
description: Another recording is active
content:
application/json:
schema:
$ref: "#/components/schemas/ApiErrorResponse"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/agent-session-recordings/{recordingID}:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
- name: recordingID
in: path
required: true
schema:
type: string
format: uuid
get:
operationId: getAgentSessionRecording
tags:
- agent-session
summary: Get one developer Agent Session recording
responses:
"200":
description: Agent Session recording
content:
application/json:
schema:
$ref: "#/components/schemas/AgentSessionRecording"
"404":
description: Recording not found
content:
application/json:
schema:
$ref: "#/components/schemas/ApiErrorResponse"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
patch:
operationId: renameAgentSessionRecording
tags:
- agent-session
summary: Rename one developer Agent Session recording and its Cassette
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/RenameAgentSessionRecordingRequest"
responses:
"200":
description: Agent Session recording renamed
content:
application/json:
schema:
$ref: "#/components/schemas/AgentSessionRecording"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
description: Recording not found
content:
application/json:
schema:
$ref: "#/components/schemas/ApiErrorResponse"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
delete:
operationId: deleteAgentSessionRecording
tags:
- agent-session
summary: Delete one inactive developer Agent Session recording and its Cassette
responses:
"204":
description: Agent Session recording deleted
"404":
description: Recording not found
content:
application/json:
schema:
$ref: "#/components/schemas/ApiErrorResponse"
"409":
description: Active recording cannot be deleted
content:
application/json:
schema:
$ref: "#/components/schemas/ApiErrorResponse"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/agent-session-recordings/{recordingID}/complete:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
- name: recordingID
in: path
required: true
schema:
type: string
format: uuid
post:
operationId: completeAgentSessionRecording
tags:
- agent-session
summary: Complete one active developer Agent Session recording
responses:
"200":
description: Agent Session recording completed
content:
application/json:
schema:
$ref: "#/components/schemas/AgentSessionRecording"
"404":
description: Recording not found
content:
application/json:
schema:
$ref: "#/components/schemas/ApiErrorResponse"
"409":
description: Recording cannot complete in its current state
content:
application/json:
schema:
$ref: "#/components/schemas/ApiErrorResponse"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/agent-session-recordings/{recordingID}/activity-events:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
- name: recordingID
in: path
required: true
schema:
type: string
format: uuid
post:
operationId: appendAgentSessionRecordingActivityEvents
tags:
- agent-session
summary: Append an ordered batch of renderer Agent Activity events
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/AppendAgentSessionRecordingActivityEventsRequest"
responses:
"200":
description: Activity events persisted through the returned Cassette sequence
content:
application/json:
schema:
$ref: "#/components/schemas/AppendAgentSessionRecordingActivityEventsResponse"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
description: Recording not found
content:
application/json:
schema:
$ref: "#/components/schemas/ApiErrorResponse"
"409":
description: Recording cannot accept Activity events in its current state
content:
application/json:
schema:
$ref: "#/components/schemas/ApiErrorResponse"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/agent-session-recordings/{recordingID}/cancel:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
- name: recordingID
in: path
required: true
schema:
type: string
format: uuid
post:
operationId: cancelAgentSessionRecording
tags:
- agent-session
summary: Cancel one active developer Agent Session recording
responses:
"200":
description: Agent Session recording canceled
content:
application/json:
schema:
$ref: "#/components/schemas/AgentSessionRecording"
"404":
description: Recording not found
content:
application/json:
schema:
$ref: "#/components/schemas/ApiErrorResponse"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/agent-session-cassettes:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
get:
operationId: listAgentSessionCassettes
tags:
- agent-session
summary: List immutable Agent Session Cassettes for one workspace
responses:
"200":
description: Cassettes ordered by creation time
content:
application/json:
schema:
$ref: "#/components/schemas/AgentSessionCassetteListResponse"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/agent-session-cassettes/import:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
post:
operationId: importAgentSessionCassettes
tags:
- agent-session
summary: Import one or more portable Agent Session Cassette directories
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/ImportAgentSessionCassettesRequest"
responses:
"200":
description: Per-Cassette import results, including partial success
content:
application/json:
schema:
$ref: "#/components/schemas/ImportAgentSessionCassettesResponse"
"400":
$ref: "#/components/responses/InvalidRequestError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/agent-session-replay-workspaces:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
post:
operationId: prepareAgentSessionReplayWorkspace
tags:
- agent-session
summary: Validate a fixed batch of distinct replay Cassettes
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/PrepareAgentSessionReplayWorkspaceRequest"
responses:
"201":
description: Portable Cassette launch handoffs
content:
application/json:
schema:
$ref: "#/components/schemas/AgentSessionReplayWorkspaceLaunch"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
description: Cassette not found
content:
application/json:
schema:
$ref: "#/components/schemas/ApiErrorResponse"
"409":
description: Cassette is corrupt or duplicated in this workspace
content:
application/json:
schema:
$ref: "#/components/schemas/ApiErrorResponse"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/agent-session-replay/cassettes/{cassetteID}/transport/verify:
parameters:
- name: cassetteID
in: path
required: true
schema:
type: string
format: uuid
post:
operationId: verifyAgentSessionReplayTransport
tags:
- agent-session
summary: Verify that the isolated replay transport consumed its complete Cassette
responses:
"204":
description: Replay transport consumed every recorded connection and frame
"409":
description: Replay transport mismatch or incomplete consumption
content:
application/json:
schema:
$ref: "#/components/schemas/ApiErrorResponse"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/agent-session-replay/cassettes/{cassetteID}/transport/playback:
parameters:
- name: cassetteID
in: path
required: true
schema:
type: string
format: uuid
get:
operationId: getAgentSessionReplayTransportPlayback
tags:
- agent-session
summary: Read playback timing for the isolated replay transport
responses:
"200":
description: Current replay playback timing
content:
application/json:
schema:
$ref: "#/components/schemas/AgentSessionReplayTransportPlayback"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
post:
operationId: updateAgentSessionReplayTransportPlayback
tags:
- agent-session
summary: Update playback timing for the isolated replay transport
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/UpdateAgentSessionReplayTransportPlaybackRequest"
responses:
"200":
description: Updated replay playback timing
content:
application/json:
schema:
$ref: "#/components/schemas/AgentSessionReplayTransportPlayback"
"400":
$ref: "#/components/responses/InvalidRequestError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/agent-session-replay/cassettes/{cassetteID}/checkpoints/{checkpointIndex}/verify:
parameters:
- name: cassetteID
in: path
required: true
schema:
type: string
format: uuid
- name: checkpointIndex
in: path
required: true
schema:
type: integer
minimum: 0
post:
operationId: verifyAgentSessionReplayCheckpoint
tags:
- agent-session
summary: Verify one Replay Checkpoint trigger and canonical readiness
responses:
"200":
description: Current semantic checkpoint verification state
content:
application/json:
schema:
$ref: "#/components/schemas/AgentSessionReplayCheckpointVerification"
"409":
description: Checkpoint identity, trigger, or observation mismatch
content:
application/json:
schema:
$ref: "#/components/schemas/ApiErrorResponse"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/agent-sessions:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
get:
operationId: listWorkspaceAgentSessions
tags:
- agent-session
summary: List agent sessions for one workspace
parameters:
- name: agentTargetId
in: query
required: false
schema:
type: string
minLength: 1
- name: searchQuery
in: query
required: false
description: Case-insensitive, whitespace-tokenized search over the session title only.
schema:
type: string
- name: cursor
in: query
required: false
schema:
type: string
minLength: 1
- name: limit
in: query
required: false
schema:
type: integer
minimum: 1
maximum: 100
responses:
"200":
description: Workspace agent sessions
content:
application/json:
schema:
$ref: "#/components/schemas/WorkspaceAgentSessionListResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/WorkspaceNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
delete:
operationId: clearWorkspaceAgentSessions
tags:
- agent-session
summary: Hard-delete all agent sessions for one workspace
responses:
"200":
description: Workspace agent sessions cleared
content:
application/json:
schema:
$ref: "#/components/schemas/ClearWorkspaceAgentSessionsResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/WorkspaceNotFoundError"
"409":
$ref: "#/components/responses/TuttiExecutionActiveError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
post:
operationId: createWorkspaceAgentSession
tags:
- agent-session
summary: Create an agent session for one workspace
parameters:
- $ref: "#/components/parameters/AgentCommandOrigin"
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/CreateWorkspaceAgentSessionRequest"
responses:
"201":
description: Workspace agent session created
content:
application/json:
schema:
$ref: "#/components/schemas/WorkspaceAgentSessionResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/WorkspaceNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/agent-sessions/batch:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
delete:
operationId: deleteWorkspaceAgentSessionsBatch
tags:
- agent-session
summary: Delete an exact snapshot of agent sessions for one workspace
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/DeleteWorkspaceAgentSessionsBatchRequest"
responses:
"200":
description: Workspace agent sessions deleted
content:
application/json:
schema:
$ref: "#/components/schemas/DeleteWorkspaceAgentSessionsBatchResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/WorkspaceNotFoundError"
"409":
$ref: "#/components/responses/TuttiExecutionActiveError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/deleted-agent-sessions:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
get:
operationId: listWorkspaceDeletedAgentSessions
tags:
- agent-session
summary: List topmost soft-deleted agent session components for one workspace
parameters:
- name: searchQuery
in: query
required: false
description: Case-insensitive search over the original session title only.
schema:
type: string
- name: railSectionKey
in: query
required: false
description: Select sessions by their exact persisted rail section key. Mutually exclusive with the deprecated project filters; omit every section filter to list all locations.
schema:
type: string
minLength: 1
- name: projectScope
in: query
required: false
deprecated: true
description: Deprecated explicit conversations-section selector. It is resolved to the fixed conversations rail section key and is mutually exclusive with railSectionKey and projectPath.
schema:
type: string
enum:
- unscoped
- name: projectPath
in: query
required: false
deprecated: true
description: Deprecated explicit project selector. The path is resolved to its canonical rail section key before querying and is mutually exclusive with railSectionKey and projectScope.
schema:
type: string
minLength: 1
- name: cursor
in: query
required: false
description: Opaque cursor returned by the previous page.
schema:
type: string
minLength: 1
- name: limit
in: query
required: false
schema:
type: integer
minimum: 1
maximum: 100
responses:
"200":
description: Topmost soft-deleted agent session components in the workspace
content:
application/json:
schema:
$ref: "#/components/schemas/WorkspaceDeletedAgentSessionListResponse"
"400":
$ref: "#/components/responses/InvalidRequestError"
"401":
$ref: "#/components/responses/UnauthorizedError"
"404":
$ref: "#/components/responses/WorkspaceNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
delete:
operationId: purgeWorkspaceDeletedAgentSessions
tags:
- agent-session
summary: Permanently purge all soft-deleted agent sessions in one workspace
responses:
"200":
description: Workspace soft-deleted agent sessions permanently purged
content:
application/json:
schema:
$ref: "#/components/schemas/DeletedAgentConversationPurgeResult"
"400":
$ref: "#/components/responses/InvalidRequestError"
"401":
$ref: "#/components/responses/UnauthorizedError"
"404":
$ref: "#/components/responses/WorkspaceNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/deleted-agent-sessions/{agentSessionID}:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
- $ref: "#/components/parameters/AgentSessionID"
delete:
operationId: purgeWorkspaceDeletedAgentSession
tags:
- agent-session
summary: Permanently purge one topmost soft-deleted agent session component
responses:
"200":
description: Soft-deleted agent session tree permanently purged
content:
application/json:
schema:
$ref: "#/components/schemas/DeletedAgentConversationPurgeResult"
"400":
$ref: "#/components/responses/InvalidRequestError"
"401":
$ref: "#/components/responses/UnauthorizedError"
"404":
$ref: "#/components/responses/WorkspaceNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/deleted-agent-sessions/{agentSessionID}/restore:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
- $ref: "#/components/parameters/AgentSessionID"
post:
operationId: restoreWorkspaceDeletedAgentSession
tags:
- agent-session
summary: Restore one topmost soft-deleted agent session component
responses:
"200":
description: Soft-deleted agent session tree restored
content:
application/json:
schema:
$ref: "#/components/schemas/RestoreWorkspaceDeletedAgentSessionResponse"
"400":
$ref: "#/components/responses/InvalidRequestError"
"401":
$ref: "#/components/responses/UnauthorizedError"
"404":
$ref: "#/components/responses/WorkspaceNotFoundError"
"409":
description: The deleted session is unavailable for restoration
content:
application/json:
schema:
$ref: "#/components/schemas/ApiErrorResponse"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/agent-session-sections:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
get:
operationId: listWorkspaceAgentSessionSections
tags:
- agent-session
summary: List agent session rail sections for one workspace
parameters:
- name: limitPerSection
in: query
required: false
schema:
type: integer
minimum: 1
maximum: 100
- name: agentTargetId
in: query
required: false
description: Optional agent target filter applied before section pagination and hasMore calculation.
schema:
type: string
minLength: 1
responses:
"200":
description: Workspace agent session sections
content:
application/json:
schema:
$ref: "#/components/schemas/WorkspaceAgentSessionSectionsResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/WorkspaceNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/agent-session-sections/page:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
get:
operationId: listWorkspaceAgentSessionSectionPage
tags:
- agent-session
summary: List one agent session rail section page for one workspace
parameters:
- name: sectionKey
in: query
required: true
schema:
type: string
minLength: 1
- name: cursor
in: query
required: false
description: Cursor for the next older page, encoded as conversationSortTimeUnixMs|agentSessionId.
schema:
type: string
minLength: 1
- name: limit
in: query
required: false
schema:
type: integer
minimum: 1
maximum: 100
- name: agentTargetId
in: query
required: false
description: Optional agent target filter applied before section pagination and hasMore calculation.
schema:
type: string
minLength: 1
responses:
"200":
description: Workspace agent session section page
content:
application/json:
schema:
$ref: "#/components/schemas/WorkspaceAgentSessionSectionPageResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/WorkspaceNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/agent-session-sections/deletion-candidates:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
get:
operationId: listWorkspaceAgentSessionSectionDeletionCandidates
tags:
- agent-session
summary: List the exact agent session deletion candidates in one rail section
parameters:
- name: sectionKey
in: query
required: true
schema:
type: string
minLength: 1
- name: agentTargetId
in: query
required: false
description: Optional agent target filter applied before selecting candidates.
schema:
type: string
minLength: 1
- name: excludePinned
in: query
required: false
description: Exclude pinned sessions from the deletion candidate snapshot.
schema:
type: boolean
default: false
responses:
"200":
description: Workspace agent session section deletion candidates
content:
application/json:
schema:
$ref: "#/components/schemas/WorkspaceAgentSessionSectionDeletionCandidatesResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/WorkspaceNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/agent-sessions/external-imports/scan:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
post:
operationId: scanWorkspaceExternalAgentSessionImports
tags:
- agent-session
summary: Scan local agent history or a supported provider export that can be imported into one workspace
requestBody:
required: false
content:
application/json:
schema:
$ref: "#/components/schemas/ExternalAgentImportScanRequest"
responses:
"200":
description: External agent session import scan result
content:
application/json:
schema:
$ref: "#/components/schemas/ExternalAgentImportScanResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/WorkspaceNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/agent-sessions/external-imports/import:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
post:
operationId: importWorkspaceExternalAgentSessions
tags:
- agent-session
summary: Import selected local agent history or provider-export conversations into one workspace
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/ImportExternalAgentSessionsRequest"
responses:
"200":
description: External agent session import result
content:
application/json:
schema:
$ref: "#/components/schemas/ExternalAgentImportResultResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/WorkspaceNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/agent-providers/{provider}/composer-options:
parameters:
- name: provider
in: path
required: true
schema:
$ref: "#/components/schemas/WorkspaceAgentProvider"
post:
operationId: getAgentProviderComposerOptions
tags:
- agent-session
summary: Get provider composer options with Claude Code live discovery
requestBody:
required: false
content:
application/json:
schema:
$ref: "#/components/schemas/GetAgentProviderComposerOptionsRequest"
responses:
"200":
description: Agent provider composer options with Claude Code live discovery when needed
content:
application/json:
schema:
$ref: "#/components/schemas/AgentProviderComposerOptionsResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/agent-providers/{provider}/runtime-candidates:
parameters:
- name: provider
in: path
required: true
schema:
$ref: "#/components/schemas/WorkspaceAgentProvider"
get:
operationId: getAgentProviderRuntimeCandidates
tags:
- agent-session
summary: Discover and validate local runtime candidates for an agent provider
responses:
"200":
description: Current runtime candidates and selection policy
content:
application/json:
schema:
$ref: "#/components/schemas/AgentProviderRuntimeCatalogResponse"
"400":
$ref: "#/components/responses/InvalidRequestError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/agent-providers/{provider}/runtime-selection:
parameters:
- name: provider
in: path
required: true
schema:
$ref: "#/components/schemas/WorkspaceAgentProvider"
put:
operationId: setAgentProviderRuntimeSelection
tags:
- agent-session
summary: Select one currently discovered runtime candidate
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/SetAgentProviderRuntimeSelectionRequest"
responses:
"200":
description: Updated runtime candidate catalog and selection policy
content:
application/json:
schema:
$ref: "#/components/schemas/AgentProviderRuntimeCatalogResponse"
"400":
$ref: "#/components/responses/InvalidRequestError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/agent-providers/{provider}/probe:
parameters:
- name: provider
in: path
required: true
schema:
$ref: "#/components/schemas/WorkspaceAgentProvider"
post:
operationId: probeAgentProvider
tags:
- agent-session
summary: Probe whether tuttid can start a local agent provider runtime command
responses:
"200":
description: Agent provider runtime command probe result
content:
application/json:
schema:
$ref: "#/components/schemas/AgentProviderProbeResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/agent-providers/{provider}/actions/{actionID}/run:
parameters:
- name: provider
in: path
required: true
schema:
$ref: "#/components/schemas/WorkspaceAgentProvider"
- name: actionID
in: path
required: true
schema:
$ref: "#/components/schemas/AgentProviderActionID"
post:
operationId: runAgentProviderAction
tags:
- agent-session
summary: Run a local agent provider action owned by tuttid
responses:
"200":
description: Agent provider action run result
content:
application/json:
schema:
$ref: "#/components/schemas/AgentProviderActionRunResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/agent-providers/status:
get:
operationId: getAgentProviderStatuses
tags:
- agent-session
summary: Get local agent provider availability and action status
parameters:
- name: providers
in: query
required: false
style: form
explode: true
schema:
type: array
items:
$ref: "#/components/schemas/WorkspaceAgentProvider"
- name: includeNetwork
in: query
required: false
description: >-
Opt into the network connectivity probe (registry / provider API /
proxy reachability). Off by default so the common detection path
stays local and never blocks on the network; only the agent-env
wizard's network diagnostic sets this.
schema:
type: boolean
- name: includeUpdates
in: query
required: false
description: >-
Opt into cached remote update discovery for provider CLIs. Off by
default so ordinary readiness and status requests stay purely
local. Discovery failures are reported on each provider's update
status and do not fail the status request.
schema:
type: boolean
- name: refresh
in: query
required: false
description: >-
Bypass only the daemon's local provider-readiness cache. This does
not opt into or refresh remote update discovery.
schema:
type: boolean
- name: refreshUpdates
in: query
required: false
description: >-
Bypass only the provider update-metadata cache when includeUpdates
is true. This does not bypass local readiness or network-diagnostic
caches and does not opt into discovery by itself.
schema:
type: boolean
responses:
"200":
description: Agent provider status snapshot
content:
application/json:
schema:
$ref: "#/components/schemas/AgentProviderStatusListResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/agent-sessions/{agentSessionID}:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
- $ref: "#/components/parameters/AgentSessionID"
get:
operationId: getWorkspaceAgentSession
tags:
- agent-session
summary: Get one workspace agent session
parameters:
- name: projection
in: query
required: false
description: Selects the detail projection. messageHydration preserves the session hierarchy and message cursors used by reconciliation discovery without resolving provider-backed lifecycle capabilities.
schema:
$ref: "#/components/schemas/WorkspaceAgentSessionDetailProjection"
default: full
responses:
"200":
description: Workspace agent session
content:
application/json:
schema:
$ref: "#/components/schemas/WorkspaceAgentSessionDetailResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/WorkspaceNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
delete:
operationId: deleteWorkspaceAgentSession
tags:
- agent-session
summary: Delete one workspace agent session
responses:
"200":
description: Workspace agent session deleted
content:
application/json:
schema:
$ref: "#/components/schemas/DeleteWorkspaceAgentSessionResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/WorkspaceNotFoundError"
"409":
$ref: "#/components/responses/TuttiExecutionActiveError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/tutti-executions/{issueID}/cancel-execution:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
- name: issueID
in: path
required: true
schema:
type: string
minLength: 1
post:
operationId: cancelTuttiModeExecution
tags:
- workspace-workflow
summary: Stop one active Tutti execution without archiving it
responses:
"200":
description: Tutti execution stopped
content:
application/json:
schema:
$ref: "#/components/schemas/CancelIssueManagerExecutionResponse"
"400":
$ref: "#/components/responses/InvalidRequestError"
"401":
$ref: "#/components/responses/UnauthorizedError"
"404":
$ref: "#/components/responses/WorkspaceIssueResourceNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/tutti-executions/{issueID}/archive:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
- name: issueID
in: path
required: true
schema:
type: string
minLength: 1
post:
operationId: archiveTuttiModeExecution
tags:
- workspace-workflow
summary: Stop and durably archive one Tutti execution
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/ArchiveTuttiModeExecutionRequest"
responses:
"200":
description: Current durable archive operation
content:
application/json:
schema:
$ref: "#/components/schemas/TuttiModeArchiveOperation"
"400":
$ref: "#/components/responses/InvalidRequestError"
"401":
$ref: "#/components/responses/UnauthorizedError"
"404":
$ref: "#/components/responses/WorkspaceIssueResourceNotFoundError"
"409":
$ref: "#/components/responses/TuttiModeArchiveConflictError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
get:
operationId: getTuttiModeArchiveOperation
tags:
- workspace-workflow
summary: Get the current archive operation for one Tutti execution
parameters:
- name: operationId
in: query
required: true
schema:
type: string
minLength: 1
responses:
"200":
description: Current durable archive operation
content:
application/json:
schema:
$ref: "#/components/schemas/TuttiModeArchiveOperation"
"400":
$ref: "#/components/responses/InvalidRequestError"
"401":
$ref: "#/components/responses/UnauthorizedError"
"404":
$ref: "#/components/responses/WorkspaceIssueResourceNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/agent-sessions/{agentSessionID}/fork:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
- $ref: "#/components/parameters/AgentSessionID"
post:
operationId: forkWorkspaceAgentSession
tags:
- agent-session
summary: Fork one workspace agent session at an exact canonical boundary
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/ForkWorkspaceAgentSessionRequest"
responses:
"200":
description: Terminal workspace agent session fork operation
content:
application/json:
schema:
$ref: "#/components/schemas/WorkspaceAgentSessionForkOperationResponse"
"202":
description: Accepted workspace agent session fork operation
content:
application/json:
schema:
$ref: "#/components/schemas/WorkspaceAgentSessionForkOperationResponse"
"400":
$ref: "#/components/responses/InvalidRequestError"
"401":
$ref: "#/components/responses/UnauthorizedError"
"404":
$ref: "#/components/responses/WorkspaceNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"409":
description: The source session or requested fork boundary is not forkable. Boundary validation failures keep reason `agent_session_fork_conflict` and include the stable rejection code in `error.params.forkBoundaryReason`.
content:
application/json:
schema:
$ref: "#/components/schemas/ApiErrorResponse"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/agent-session-fork-operations/{operationID}:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
- $ref: "#/components/parameters/SessionForkOperationID"
get:
operationId: getWorkspaceAgentSessionForkOperation
tags:
- agent-session
summary: Get one durable workspace agent session fork operation
responses:
"200":
description: Workspace agent session fork operation
content:
application/json:
schema:
$ref: "#/components/schemas/WorkspaceAgentSessionForkOperationResponse"
"400":
$ref: "#/components/responses/InvalidRequestError"
"401":
$ref: "#/components/responses/UnauthorizedError"
"404":
description: Agent session fork operation was not found
content:
application/json:
schema:
$ref: "#/components/schemas/ApiErrorResponse"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/agent-session-fork-operations/{operationID}/acknowledge:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
- $ref: "#/components/parameters/SessionForkOperationID"
post:
operationId: acknowledgeWorkspaceAgentSessionForkOperation
tags:
- agent-session
summary: Acknowledge that a client observed one durable session fork operation
description: >
Records an explicit client-observed acknowledgement. Reading the
operation does not implicitly acknowledge it.
responses:
"200":
description: Acknowledged workspace agent session fork operation
content:
application/json:
schema:
$ref: "#/components/schemas/WorkspaceAgentSessionForkOperationResponse"
"400":
$ref: "#/components/responses/InvalidRequestError"
"401":
$ref: "#/components/responses/UnauthorizedError"
"404":
description: Agent session fork operation was not found
content:
application/json:
schema:
$ref: "#/components/schemas/ApiErrorResponse"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"409":
description: Agent session fork operation cannot be acknowledged
content:
application/json:
schema:
$ref: "#/components/schemas/ApiErrorResponse"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/agent-sessions/{agentSessionID}/tutti-mode-activation:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
- $ref: "#/components/parameters/AgentSessionID"
get:
operationId: getWorkspaceAgentSessionTuttiModeActivation
tags:
- agent-session
summary: Get the independent Tutti mode activation for one agent session
responses:
"200":
description: Tutti mode activation projection
content:
application/json:
schema:
$ref: "#/components/schemas/TuttiModeActivationResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/WorkspaceNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
put:
operationId: updateWorkspaceAgentSessionTuttiModeActivation
tags:
- agent-session
summary: Update the independent Tutti mode activation for one agent session
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/UpdateTuttiModeActivationRequest"
responses:
"200":
description: Updated Tutti mode activation projection
content:
application/json:
schema:
$ref: "#/components/schemas/UpdateTuttiModeActivationResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/WorkspaceNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"409":
description: Tutti mode activation revision conflict
content:
application/json:
schema:
$ref: "#/components/schemas/ApiErrorResponse"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/agent-session-sections/pinned-page:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
get:
operationId: listWorkspaceAgentPinnedSessionPage
tags:
- agent-session
summary: List pinned agent session page for one workspace
parameters:
- name: cursor
in: query
required: false
description: Cursor for the next older pinned page, encoded as pinnedAtUnixMs|agentSessionId.
schema:
type: string
minLength: 1
- name: limit
in: query
required: false
schema:
type: integer
minimum: 1
maximum: 100
- name: agentTargetId
in: query
required: false
description: Optional agent target filter applied before pinned pagination and hasMore calculation.
schema:
type: string
minLength: 1
responses:
"200":
description: Workspace pinned agent session page
content:
application/json:
schema:
$ref: "#/components/schemas/WorkspaceAgentSessionPageResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/WorkspaceNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/agent-generated-files:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
get:
operationId: listWorkspaceAgentGeneratedFiles
tags:
- agent-session
summary: List files generated by workspace agent sessions
parameters:
- in: query
name: query
required: false
schema:
type: string
- in: query
name: sectionKey
required: true
description: Persisted conversation-rail section key used to scope generated files. The pinned aggregate key is not accepted.
schema:
type: string
minLength: 1
- in: query
name: agentTargetIds
required: false
description: Optional agent target filters applied before generated-file limiting.
style: form
explode: true
schema:
type: array
maxItems: 100
items:
type: string
minLength: 1
- in: query
name: cursor
required: false
description: Opaque cursor for the next page within the bounded recent generated-file result.
schema:
type: string
minLength: 1
maxLength: 32
- in: query
name: limit
required: false
schema:
type: integer
minimum: 1
maximum: 100
responses:
"200":
description: Workspace agent generated files
content:
application/json:
schema:
$ref: "#/components/schemas/WorkspaceAgentGeneratedFileListResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/WorkspaceNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/agent-sessions/{agentSessionID}/messages:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
- $ref: "#/components/parameters/AgentSessionID"
get:
operationId: listWorkspaceAgentSessionMessages
tags:
- agent-session
summary: List persisted messages for one workspace agent session
parameters:
- in: query
name: afterVersion
required: false
schema:
$ref: "#/components/schemas/WorkspaceAgentMessageCursor"
- in: query
name: beforeVersion
required: false
schema:
$ref: "#/components/schemas/WorkspaceAgentMessageCursor"
- in: query
name: order
required: false
schema:
type: string
enum:
- asc
- desc
default: asc
- in: query
name: limit
required: false
schema:
type: integer
minimum: 1
responses:
"200":
description: Workspace agent session messages
content:
application/json:
schema:
$ref: "#/components/schemas/WorkspaceAgentSessionMessagesResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/WorkspaceNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/agent-sessions/{agentSessionID}/attachments/{attachmentID}:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
- $ref: "#/components/parameters/AgentSessionID"
- $ref: "#/components/parameters/AgentSessionAttachmentID"
get:
operationId: readWorkspaceAgentSessionAttachment
tags:
- agent-session
summary: Read one workspace agent session attachment
responses:
"200":
description: Workspace agent session attachment
content:
application/json:
schema:
$ref: "#/components/schemas/WorkspaceAgentSessionAttachmentResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/WorkspaceNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/git-branches:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
get:
operationId: listWorkspaceGitBranches
tags:
- agent-session
summary: List git branches for a workspace working directory
parameters:
- in: query
name: workingDirectory
required: true
schema:
type: string
minLength: 1
responses:
"200":
description: Git branches for the working directory
content:
application/json:
schema:
$ref: "#/components/schemas/WorkspaceAgentSessionGitBranchesResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/WorkspaceNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/git-patch-support:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
get:
operationId: resolveWorkspaceGitPatchSupport
tags:
- agent-session
summary: Resolve whether git patch operations are available for a workspace working directory
parameters:
- in: query
name: cwd
required: true
schema:
type: string
minLength: 1
responses:
"200":
description: Git patch support status for the working directory
content:
application/json:
schema:
$ref: "#/components/schemas/WorkspaceGitPatchSupportResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/WorkspaceNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/agent-session-worktree-support:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
get:
operationId: resolveWorkspaceAgentSessionWorktreeSupport
tags:
- agent-session
summary: Resolve whether a local Agent Session can launch in an isolated git worktree
parameters:
- in: query
name: agentTargetId
required: true
schema:
type: string
minLength: 1
- in: query
name: cwd
required: true
schema:
type: string
minLength: 1
responses:
"200":
description: Worktree launch support status for the working directory
content:
application/json:
schema:
$ref: "#/components/schemas/WorkspaceAgentSessionWorktreeSupportResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/WorkspaceNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/managed-worktrees:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
get:
operationId: listWorkspaceManagedWorktrees
tags:
- workspace
summary: List explicitly managed Git worktrees for a workspace
responses:
"200":
description: Managed worktrees
content:
application/json:
schema:
$ref: "#/components/schemas/WorkspaceManagedWorktreeListResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/managed-worktrees/{worktreeID}:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
- in: path
name: worktreeID
required: true
schema:
type: string
minLength: 1
delete:
operationId: deleteWorkspaceManagedWorktree
tags:
- workspace
summary: Explicitly delete one clean managed Git worktree
responses:
"200":
description: Managed worktree deletion result
content:
application/json:
schema:
$ref: "#/components/schemas/DeleteWorkspaceManagedWorktreeResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
description: Managed worktree was not found in this workspace
content:
application/json:
schema:
$ref: "#/components/schemas/ApiErrorResponse"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"409":
description: Managed worktree is dirty, ahead of its base, or changed during deletion
content:
application/json:
schema:
$ref: "#/components/schemas/ApiErrorResponse"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/git-patch:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
post:
operationId: applyWorkspaceGitPatch
tags:
- agent-session
summary: Apply or reverse-apply a git patch in a workspace working directory
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/WorkspaceGitPatchRequest"
responses:
"200":
description: Git patch apply result
content:
application/json:
schema:
$ref: "#/components/schemas/WorkspaceGitPatchResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/WorkspaceNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/agent-sessions/{agentSessionID}/git-branches:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
- $ref: "#/components/parameters/AgentSessionID"
get:
operationId: listWorkspaceAgentSessionGitBranches
tags:
- agent-session
summary: List git branches for the agent session working directory
responses:
"200":
description: Git branches for the agent session working directory
content:
application/json:
schema:
$ref: "#/components/schemas/WorkspaceAgentSessionGitBranchesResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/WorkspaceNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/agent-sessions/{agentSessionID}/turns/{turnID}/cancel:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
- $ref: "#/components/parameters/AgentSessionID"
- $ref: "#/components/parameters/AgentTurnID"
post:
operationId: cancelWorkspaceAgentTurn
tags:
- agent-session
summary: Cancel one workspace agent turn
parameters:
- $ref: "#/components/parameters/AgentCommandOrigin"
description: >-
Idempotent turn-scoped cancellation (protocol v2). Canceling a turn
that is already settled or unknown is a no-op success, not an error;
the race between a user stop request and natural turn settlement is
harmless at the protocol level.
responses:
"200":
description: Workspace agent turn cancel result
content:
application/json:
schema:
$ref: "#/components/schemas/WorkspaceAgentTurnCancelResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/WorkspaceNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/agent-sessions/{agentSessionID}/turns/{turnID}/edit-retry:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
- $ref: "#/components/parameters/AgentSessionID"
- $ref: "#/components/parameters/AgentTurnID"
post:
operationId: editRetryWorkspaceAgentTurn
tags:
- agent-session
summary: Edit and retry the latest completed user turn
description: >-
Starts or resumes one idempotent durable edit-retry operation. The
operation retracts exactly one latest completed user turn from the
effective provider history and submits its edited replacement while
preserving non-text input. A completed operation returns 200; a
durable operation that still needs confirmation or explicit recovery
returns 202.
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/EditRetryWorkspaceAgentTurnRequest"
responses:
"200":
description: Edit-retry operation completed
content:
application/json:
schema:
$ref: "#/components/schemas/WorkspaceAgentEditRetryResponse"
"202":
description: Edit-retry operation is durably pending confirmation or recovery
content:
application/json:
schema:
$ref: "#/components/schemas/WorkspaceAgentEditRetryResponse"
"400":
$ref: "#/components/responses/InvalidRequestError"
"401":
$ref: "#/components/responses/UnauthorizedError"
"404":
$ref: "#/components/responses/WorkspaceNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"409":
description: The turn, history revision, or operation identity conflicts with current canonical state
content:
application/json:
schema:
$ref: "#/components/schemas/ApiErrorResponse"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/agent-sessions/{agentSessionID}/edit-retry-operations/{operationID}/recover:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
- $ref: "#/components/parameters/AgentSessionID"
- name: operationID
in: path
required: true
schema:
type: string
minLength: 1
post:
operationId: recoverWorkspaceAgentEditRetry
tags:
- agent-session
summary: Reconcile or safely retry one durable edit-retry operation
description: >-
Reconcile is provider-read-only. retry_replacement is accepted only
after Host proves from authoritative provider history that the prior
replacement was not dispatched.
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/RecoverWorkspaceAgentEditRetryRequest"
responses:
"200":
description: Edit-retry recovery completed
content:
application/json:
schema:
$ref: "#/components/schemas/WorkspaceAgentEditRetryResponse"
"202":
description: Edit-retry operation remains durably pending confirmation or recovery
content:
application/json:
schema:
$ref: "#/components/schemas/WorkspaceAgentEditRetryResponse"
"400":
$ref: "#/components/responses/InvalidRequestError"
"401":
$ref: "#/components/responses/UnauthorizedError"
"404":
$ref: "#/components/responses/WorkspaceNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"409":
description: The operation identity or requested recovery action conflicts with current canonical state
content:
application/json:
schema:
$ref: "#/components/schemas/ApiErrorResponse"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/agent-sessions/{agentSessionID}/side-capabilities:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
- $ref: "#/components/parameters/AgentSessionID"
get:
operationId: resolveWorkspaceAgentSideCapabilities
tags:
- agent-session
summary: Resolve transient Side support for a live agent session
responses:
"200":
description: Side capabilities for the live source session
content:
application/json:
schema:
$ref: "#/components/schemas/WorkspaceAgentSideCapabilitiesResponse"
"400":
$ref: "#/components/responses/InvalidRequestError"
"401":
$ref: "#/components/responses/UnauthorizedError"
"404":
$ref: "#/components/responses/WorkspaceNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"409":
description: The source session is not eligible for Side
content:
application/json:
schema:
$ref: "#/components/schemas/ApiErrorResponse"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/agent-sessions/{agentSessionID}/side-conversations:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
- $ref: "#/components/parameters/AgentSessionID"
post:
operationId: openWorkspaceAgentSideConversation
tags:
- agent-session
summary: Open one runtime-only Side conversation from a live source session
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/OpenWorkspaceAgentSideConversationRequest"
responses:
"200":
description: Opened or reconciled transient Side conversation
content:
application/json:
schema:
$ref: "#/components/schemas/WorkspaceAgentSideConversationResponse"
"400":
$ref: "#/components/responses/InvalidRequestError"
"401":
$ref: "#/components/responses/UnauthorizedError"
"404":
$ref: "#/components/responses/WorkspaceNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"409":
description: Side identity conflicts, is opening, or the source is ineligible
content:
application/json:
schema:
$ref: "#/components/schemas/ApiErrorResponse"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/agent-side-conversations/{sideAgentSessionID}:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
- in: path
name: sideAgentSessionID
required: true
schema:
type: string
minLength: 1
delete:
operationId: closeWorkspaceAgentSideConversation
tags:
- agent-session
summary: Close and release one runtime-only Side conversation
responses:
"204":
description: Side conversation closed or already absent
"400":
$ref: "#/components/responses/InvalidRequestError"
"401":
$ref: "#/components/responses/UnauthorizedError"
"404":
$ref: "#/components/responses/WorkspaceNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/agent-side-conversations/{sideAgentSessionID}/turns:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
- in: path
name: sideAgentSessionID
required: true
schema:
type: string
minLength: 1
post:
operationId: sendWorkspaceAgentSideConversationInput
tags:
- agent-session
summary: Send one input to a runtime-only Side conversation
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/SendWorkspaceAgentSideConversationInputRequest"
responses:
"200":
description: Accepted transient Side turn
content:
application/json:
schema:
$ref: "#/components/schemas/WorkspaceAgentSideTurnResponse"
"400":
$ref: "#/components/responses/InvalidRequestError"
"401":
$ref: "#/components/responses/UnauthorizedError"
"404":
$ref: "#/components/responses/WorkspaceNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"409":
description: The Side conversation has expired or cannot accept input
content:
application/json:
schema:
$ref: "#/components/schemas/ApiErrorResponse"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/agent-side-conversations/{sideAgentSessionID}/turns/{turnID}/cancel:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
- in: path
name: sideAgentSessionID
required: true
schema:
type: string
minLength: 1
- $ref: "#/components/parameters/AgentTurnID"
post:
operationId: cancelWorkspaceAgentSideConversationTurn
tags:
- agent-session
summary: Cancel the exact active turn in a runtime-only Side conversation
responses:
"200":
description: Side turn cancel result
content:
application/json:
schema:
$ref: "#/components/schemas/WorkspaceAgentSideTurnCancelResponse"
"400":
$ref: "#/components/responses/InvalidRequestError"
"401":
$ref: "#/components/responses/UnauthorizedError"
"404":
$ref: "#/components/responses/WorkspaceNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"409":
description: The Side conversation has expired
content:
application/json:
schema:
$ref: "#/components/schemas/ApiErrorResponse"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/agent-side-conversations/{sideAgentSessionID}/turns/{turnID}/interactive/{requestID}:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
- in: path
name: sideAgentSessionID
required: true
schema:
type: string
minLength: 1
- $ref: "#/components/parameters/AgentTurnID"
- $ref: "#/components/parameters/AgentPermissionRequestID"
post:
operationId: submitWorkspaceAgentSideConversationInteractive
tags:
- agent-session
summary: Respond to one live interactive request in a Side conversation
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/SubmitWorkspaceAgentSideConversationInteractiveRequest"
responses:
"200":
description: Side interactive response disposition
content:
application/json:
schema:
$ref: "#/components/schemas/WorkspaceAgentSideInteractiveResponse"
"400":
$ref: "#/components/responses/InvalidRequestError"
"401":
$ref: "#/components/responses/UnauthorizedError"
"404":
$ref: "#/components/responses/WorkspaceNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"409":
description: The Side conversation or interaction is no longer live
content:
application/json:
schema:
$ref: "#/components/schemas/ApiErrorResponse"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/agent-sessions/{agentSessionID}/turns/{turnID}/plan-decisions/{requestID}:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
- $ref: "#/components/parameters/AgentSessionID"
- $ref: "#/components/parameters/AgentTurnID"
- $ref: "#/components/parameters/AgentPermissionRequestID"
post:
operationId: submitWorkspaceAgentPlanDecision
tags:
- agent-session
summary: Submit one durable workspace agent plan decision
parameters:
- $ref: "#/components/parameters/AgentCommandOrigin"
description: >-
Prepares and advances an idempotent daemon-owned plan decision saga.
The workspace, session, turn, request, and idempotency key form the
strict operation scope. A retry with the same identity and payload
returns the existing operation; a mismatched payload is rejected.
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/SubmitWorkspaceAgentPlanDecisionRequest"
responses:
"200":
description: Durable plan decision operation state
content:
application/json:
schema:
$ref: "#/components/schemas/WorkspaceAgentPlanDecisionResponse"
"400":
$ref: "#/components/responses/InvalidRequestError"
"401":
$ref: "#/components/responses/UnauthorizedError"
"404":
$ref: "#/components/responses/WorkspaceNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"409":
description: The idempotency identity conflicts or the scoped plan turn is not currently decidable
content:
application/json:
schema:
$ref: "#/components/schemas/ApiErrorResponse"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/agent-sessions/{agentSessionID}/goal:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
- $ref: "#/components/parameters/AgentSessionID"
get:
operationId: getWorkspaceAgentSessionGoal
tags:
- agent-session
summary: Get the durable desired and observed goal state
responses:
"200":
description: Workspace agent session goal state
content:
application/json:
schema:
$ref: "#/components/schemas/WorkspaceAgentSessionGoalStateResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"404":
$ref: "#/components/responses/WorkspaceNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
post:
operationId: goalControlWorkspaceAgentSession
tags:
- agent-session
summary: Perform a goal control action on one workspace agent session
parameters:
- $ref: "#/components/parameters/AgentCommandOrigin"
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/WorkspaceAgentSessionGoalControlRequest"
responses:
"200":
description: Workspace agent session goal updated
content:
application/json:
schema:
$ref: "#/components/schemas/WorkspaceAgentSessionGoalControlResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/WorkspaceNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/agent-sessions/{agentSessionID}/goal/reconcile:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
- $ref: "#/components/parameters/AgentSessionID"
post:
operationId: reconcileWorkspaceAgentSessionGoal
tags:
- agent-session
summary: Reconcile the durable goal projection with provider evidence
responses:
"200":
description: Reconciled workspace agent session goal state
content:
application/json:
schema:
$ref: "#/components/schemas/WorkspaceAgentSessionGoalStateResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"404":
$ref: "#/components/responses/WorkspaceNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/agent-sessions/{agentSessionID}/input:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
- $ref: "#/components/parameters/AgentSessionID"
post:
operationId: sendWorkspaceAgentSessionInput
tags:
- agent-session
summary: Send user input to one workspace agent session
parameters:
- $ref: "#/components/parameters/AgentCommandOrigin"
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/SendWorkspaceAgentSessionInputRequest"
responses:
"200":
description: Workspace agent session input accepted
content:
application/json:
schema:
$ref: "#/components/schemas/SendWorkspaceAgentSessionInputResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/WorkspaceNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/agent-sessions/{agentSessionID}/settings:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
- $ref: "#/components/parameters/AgentSessionID"
post:
operationId: updateWorkspaceAgentSessionSettings
tags:
- agent-session
summary: Update one workspace agent session settings
parameters:
- $ref: "#/components/parameters/AgentCommandOrigin"
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/AgentSessionComposerSettings"
responses:
"200":
description: Workspace agent session settings updated
content:
application/json:
schema:
$ref: "#/components/schemas/WorkspaceAgentSessionResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/WorkspaceNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/agent-sessions/{agentSessionID}/title:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
- $ref: "#/components/parameters/AgentSessionID"
post:
operationId: updateWorkspaceAgentSessionTitle
tags:
- agent-session
summary: Update one workspace agent session title
description: >-
Titles longer than 120 Unicode characters return `invalid_request` with
reason `workspace_agent_session_title_too_long` and
`params.maxCharacters` set to 120.
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/UpdateWorkspaceAgentSessionTitleRequest"
responses:
"200":
description: Workspace agent session title updated
content:
application/json:
schema:
$ref: "#/components/schemas/WorkspaceAgentSessionResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/WorkspaceNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/agent-sessions/{agentSessionID}/visibility:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
- $ref: "#/components/parameters/AgentSessionID"
post:
operationId: updateWorkspaceAgentSessionVisibility
tags:
- agent-session
summary: Update one workspace agent session visibility
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/UpdateWorkspaceAgentSessionVisibilityRequest"
responses:
"200":
description: Workspace agent session visibility updated
content:
application/json:
schema:
$ref: "#/components/schemas/WorkspaceAgentSessionResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/WorkspaceNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/agent-sessions/{agentSessionID}/pin:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
- $ref: "#/components/parameters/AgentSessionID"
post:
operationId: updateWorkspaceAgentSessionPin
tags:
- agent-session
summary: Update one workspace agent session pinned state
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/UpdateWorkspaceAgentSessionPinRequest"
responses:
"200":
description: Workspace agent session pinned state updated
content:
application/json:
schema:
$ref: "#/components/schemas/WorkspaceAgentSessionResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/WorkspaceNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/agent-sessions/{agentSessionID}/interactives/{requestID}/response:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
- $ref: "#/components/parameters/AgentSessionID"
- $ref: "#/components/parameters/AgentPermissionRequestID"
post:
operationId: submitWorkspaceAgentInteractive
tags:
- agent-session
summary: Submit one workspace agent interactive response
parameters:
- $ref: "#/components/parameters/AgentCommandOrigin"
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/SubmitWorkspaceAgentInteractiveRequest"
responses:
"200":
description: Workspace agent interactive response accepted
content:
application/json:
schema:
$ref: "#/components/schemas/WorkspaceAgentSessionResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/WorkspaceNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"409":
$ref: "#/components/responses/AgentInteractiveConflictError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/terminals:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
get:
operationId: listWorkspaceTerminals
tags:
- terminal
summary: List live terminal sessions for one workspace
responses:
"200":
description: Workspace terminal sessions
content:
application/json:
schema:
$ref: "#/components/schemas/WorkspaceTerminalListResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/WorkspaceNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
post:
operationId: createWorkspaceTerminal
tags:
- terminal
summary: Create a local terminal session for one workspace
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/CreateWorkspaceTerminalRequest"
responses:
"201":
description: Workspace terminal session created
content:
application/json:
schema:
$ref: "#/components/schemas/WorkspaceTerminalResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/WorkspaceNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/terminals/{terminalID}:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
- $ref: "#/components/parameters/TerminalID"
get:
operationId: getWorkspaceTerminal
tags:
- terminal
summary: Get one workspace terminal session
responses:
"200":
description: Workspace terminal session
content:
application/json:
schema:
$ref: "#/components/schemas/WorkspaceTerminalResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/WorkspaceTerminalNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
delete:
operationId: terminateWorkspaceTerminal
tags:
- terminal
summary: Terminate one workspace terminal session
responses:
"200":
description: Workspace terminal session terminated
content:
application/json:
schema:
$ref: "#/components/schemas/WorkspaceTerminalResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/WorkspaceTerminalNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/terminals/{terminalID}/close-guard:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
- $ref: "#/components/parameters/TerminalID"
post:
operationId: checkWorkspaceTerminalCloseGuard
tags:
- terminal
summary: Check whether terminating a terminal session requires confirmation
responses:
"200":
description: Workspace terminal close guard state
content:
application/json:
schema:
$ref: "#/components/schemas/WorkspaceTerminalCloseGuardResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/WorkspaceTerminalNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/terminals/{terminalID}/resize:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
- $ref: "#/components/parameters/TerminalID"
post:
operationId: resizeWorkspaceTerminal
tags:
- terminal
summary: Resize one workspace terminal session
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/ResizeWorkspaceTerminalRequest"
responses:
"200":
description: Workspace terminal resized
content:
application/json:
schema:
$ref: "#/components/schemas/WorkspaceTerminalResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/WorkspaceTerminalNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/terminals/{terminalID}/snapshot:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
- $ref: "#/components/parameters/TerminalID"
get:
operationId: getWorkspaceTerminalSnapshot
tags:
- terminal
summary: Get replay snapshot for one workspace terminal session
responses:
"200":
description: Workspace terminal snapshot
content:
application/json:
schema:
$ref: "#/components/schemas/WorkspaceTerminalSnapshotResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/WorkspaceTerminalNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/terminals/{terminalID}/ws:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
- $ref: "#/components/parameters/TerminalID"
- $ref: "#/components/parameters/TerminalAfterSeq"
get:
operationId: attachWorkspaceTerminal
tags:
- terminal
summary: Attach a WebSocket stream to one workspace terminal session
responses:
"200":
description: Terminal stream upgrade endpoint
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/WorkspaceTerminalNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/files/directory:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
get:
operationId: listWorkspaceFileDirectory
tags:
- workspace
summary: List direct children for one workspace directory
parameters:
- $ref: "#/components/parameters/WorkspaceFilePath"
- $ref: "#/components/parameters/WorkspaceFileIncludeHidden"
responses:
"200":
description: Workspace directory listing
content:
application/json:
schema:
$ref: "#/components/schemas/WorkspaceFileDirectoryResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/WorkspaceFileNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
put:
operationId: createWorkspaceFileDirectory
tags:
- workspace
summary: Create one workspace directory
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/CreateWorkspaceFileDirectoryRequest"
responses:
"200":
description: Workspace directory created
content:
application/json:
schema:
$ref: "#/components/schemas/WorkspaceFileEntryResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/WorkspaceFileNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/issues/{issueID}/tutti-mode-review/self:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
- $ref: "#/components/parameters/IssueID"
post:
operationId: switchTuttiModeGoalReviewToSelf
tags:
- workspace
summary: Switch a failed independent Tutti Mode Goal Review to self review
description: >-
Performs the explicit audited fallback for one failed independent
reviewer operation. The authenticated local actor is resolved by the
daemon and cannot be supplied in the request body.
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/SwitchTuttiModeGoalReviewToSelfRequest"
responses:
"200":
description: Goal Review switched to self review, or an idempotent replay
content:
application/json:
schema:
$ref: "#/components/schemas/SwitchTuttiModeGoalReviewToSelfResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/TuttiModeGoalReviewNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"409":
$ref: "#/components/responses/TuttiModeGoalReviewConflictError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/files/recent:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
get:
operationId: listWorkspaceRecentFiles
tags:
- workspace
summary: List the workspace's recently accessed entries, most-recent first
parameters:
- $ref: "#/components/parameters/WorkspaceFileRecentLimit"
responses:
"200":
description: Workspace recent files listing
content:
application/json:
schema:
$ref: "#/components/schemas/WorkspaceFileDirectoryResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/WorkspaceFileNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/files/tree-snapshot:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
get:
operationId: getWorkspaceFileTreeSnapshot
tags:
- workspace
summary: Get one workspace directory tree snapshot with budgeted prefetch
parameters:
- $ref: "#/components/parameters/WorkspaceFilePath"
- $ref: "#/components/parameters/WorkspaceFileIncludeHidden"
- $ref: "#/components/parameters/WorkspaceFilePrefetchDepth"
- $ref: "#/components/parameters/WorkspaceFilePrefetchBudgetMs"
responses:
"200":
description: Workspace directory tree snapshot
content:
application/json:
schema:
$ref: "#/components/schemas/WorkspaceFileTreeSnapshotResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/WorkspaceFileNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/files/search:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
get:
operationId: searchWorkspaceFiles
tags:
- workspace
summary: Search workspace files by logical path
parameters:
- $ref: "#/components/parameters/WorkspaceFileSearchQuery"
- $ref: "#/components/parameters/WorkspaceFileSearchWithin"
- $ref: "#/components/parameters/WorkspaceFileSearchLimit"
- $ref: "#/components/parameters/WorkspaceFileSearchKinds"
- $ref: "#/components/parameters/WorkspaceFileSearchFilters"
- $ref: "#/components/parameters/WorkspaceFileIncludeHidden"
responses:
"200":
description: Workspace file search results
content:
application/json:
schema:
$ref: "#/components/schemas/WorkspaceFileSearchResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/WorkspaceNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/files/file:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
put:
operationId: createWorkspaceFile
tags:
- workspace
summary: Create one workspace file
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/CreateWorkspaceFileRequest"
responses:
"200":
description: Workspace file created
content:
application/json:
schema:
$ref: "#/components/schemas/WorkspaceFileEntryResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/WorkspaceFileNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/files/file/preview:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
get:
operationId: readWorkspaceFilePreview
tags:
- workspace
summary: Read bytes for one workspace file preview
parameters:
- $ref: "#/components/parameters/WorkspaceFilePath"
responses:
"200":
description: Workspace file preview bytes
content:
application/json:
schema:
$ref: "#/components/schemas/WorkspaceFilePreviewResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/WorkspaceFileNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/files/file/text:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
put:
operationId: writeWorkspaceFileText
tags:
- workspace
summary: Write UTF-8 text content to one workspace file
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/WriteWorkspaceFileTextRequest"
responses:
"200":
description: Workspace file written
content:
application/json:
schema:
$ref: "#/components/schemas/WorkspaceFileEntryResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/WorkspaceFileNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/files/entry:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
delete:
operationId: deleteWorkspaceFileEntry
tags:
- workspace
summary: Delete one workspace file entry
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/DeleteWorkspaceFileEntryRequest"
responses:
"200":
description: Workspace file entry deleted
content:
application/json:
schema:
$ref: "#/components/schemas/DeleteWorkspaceFileEntryResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/WorkspaceFileNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/files/entry/move:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
post:
operationId: moveWorkspaceFileEntry
tags:
- workspace
summary: Move one workspace file entry into one directory
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/MoveWorkspaceFileEntryRequest"
responses:
"200":
description: Workspace file entry moved
content:
application/json:
schema:
$ref: "#/components/schemas/WorkspaceFileEntryResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/WorkspaceFileNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/files/entry/rename:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
post:
operationId: renameWorkspaceFileEntry
tags:
- workspace
summary: Rename one workspace file entry in place
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/RenameWorkspaceFileEntryRequest"
responses:
"200":
description: Workspace file entry renamed
content:
application/json:
schema:
$ref: "#/components/schemas/WorkspaceFileEntryResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/WorkspaceFileNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/files/entry/copy:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
post:
operationId: copyWorkspaceFileEntry
tags:
- workspace
summary: Duplicate one workspace file entry in its parent directory
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/CopyWorkspaceFileEntryRequest"
responses:
"200":
description: Workspace file entry copied
content:
application/json:
schema:
$ref: "#/components/schemas/WorkspaceFileEntryResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/WorkspaceFileNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/files/upload:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
post:
operationId: uploadWorkspaceFiles
tags:
- workspace
summary: Upload local files into one workspace directory
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/UploadWorkspaceFilesRequest"
responses:
"200":
description: Workspace files uploaded
content:
application/json:
schema:
$ref: "#/components/schemas/UploadWorkspaceFilesResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/WorkspaceFileNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/files/upload/preflight:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
post:
operationId: preflightUploadWorkspaceFiles
tags:
- workspace
summary: Detect conflicting local file uploads into one workspace directory
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/PreflightUploadWorkspaceFilesRequest"
responses:
"200":
description: Workspace upload conflicts detected
content:
application/json:
schema:
$ref: "#/components/schemas/PreflightUploadWorkspaceFilesResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/WorkspaceFileNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/open:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
post:
operationId: openWorkspace
tags:
- workspace
summary: Open one workspace
responses:
"200":
description: Workspace open request accepted
content:
application/json:
schema:
$ref: "#/components/schemas/WorkspaceResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/WorkspaceNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/agents:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
get:
operationId: listWorkspaceAgents
tags:
- workspace-agent
summary: List the configured Agent options for one workspace
description: Returns explicit workspace Agent configurations. Each Agent maps one harness target to an optional model access plan and carries its own description, instructions, and call conditions.
responses:
"200":
description: Workspace Agent configurations
content:
application/json:
schema:
$ref: "#/components/schemas/ListWorkspaceAgentsResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
post:
operationId: createWorkspaceAgent
tags:
- workspace-agent
summary: Create one selectable workspace Agent
description: Creates an explicit Agent option from a harness target plus an optional model access plan. It does not generate a Harness by ModelPlan Cartesian product.
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/PutWorkspaceAgentRequest"
responses:
"201":
description: Created workspace Agent
content:
application/json:
schema:
$ref: "#/components/schemas/WorkspaceAgent"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/WorkspaceNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/agents/{workspaceAgentID}:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
- $ref: "#/components/parameters/WorkspaceAgentID"
get:
operationId: getWorkspaceAgent
tags:
- workspace-agent
summary: Get one workspace Agent configuration
responses:
"200":
description: Workspace Agent configuration
content:
application/json:
schema:
$ref: "#/components/schemas/WorkspaceAgent"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/WorkspaceNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
put:
operationId: updateWorkspaceAgent
tags:
- workspace-agent
summary: Replace one workspace Agent configuration
description: Replaces mutable fields and increments the Agent revision. Omitted or null modelPlanId/defaultModel clear those fields. Existing sessions continue using their recorded runtime configuration.
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/PutWorkspaceAgentRequest"
responses:
"200":
description: Updated workspace Agent
content:
application/json:
schema:
$ref: "#/components/schemas/WorkspaceAgent"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/WorkspaceNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
delete:
operationId: deleteWorkspaceAgent
tags:
- workspace-agent
summary: Delete one workspace Agent configuration
description: Deletes only the named workspace Agent. Its Harness target and ModelPlan remain unchanged.
responses:
"200":
description: Workspace Agent deleted
content:
application/json:
schema:
$ref: "#/components/schemas/DeleteWorkspaceAgentResponse"
"401":
$ref: "#/components/responses/UnauthorizedError"
"400":
$ref: "#/components/responses/InvalidRequestError"
"404":
$ref: "#/components/responses/WorkspaceNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/automation-rules:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
get:
operationId: listAutomationRules
tags:
- automation-rule
summary: List workspace automation rules
description: Returns action-centric rules that react to Agent session lifecycle events. Rules target either a ModelPlan for a tool-free consult or a WorkspaceAgent for fork, delegate, and handoff actions.
responses:
"200":
description: Workspace automation rules
content:
application/json:
schema:
$ref: "#/components/schemas/ListAutomationRulesResponse"
"400":
$ref: "#/components/responses/InvalidRequestError"
"401":
$ref: "#/components/responses/UnauthorizedError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
post:
operationId: createAutomationRule
tags:
- automation-rule
summary: Create a workspace automation rule
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/PutAutomationRuleRequest"
responses:
"201":
description: Created automation rule
content:
application/json:
schema:
$ref: "#/components/schemas/AutomationRule"
"400":
$ref: "#/components/responses/InvalidRequestError"
"401":
$ref: "#/components/responses/UnauthorizedError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/automation-rules/{automationRuleID}:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
- $ref: "#/components/parameters/AutomationRuleID"
get:
operationId: getAutomationRule
tags:
- automation-rule
summary: Get a workspace automation rule
responses:
"200":
description: Workspace automation rule
content:
application/json:
schema:
$ref: "#/components/schemas/AutomationRule"
"400":
$ref: "#/components/responses/InvalidRequestError"
"401":
$ref: "#/components/responses/UnauthorizedError"
"404":
$ref: "#/components/responses/WorkspaceNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
put:
operationId: updateAutomationRule
tags:
- automation-rule
summary: Replace a workspace automation rule
description: Replaces mutable rule fields. Changes apply only to future trigger evaluations; already-started actions keep their recorded configuration.
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/PutAutomationRuleRequest"
responses:
"200":
description: Updated automation rule
content:
application/json:
schema:
$ref: "#/components/schemas/AutomationRule"
"400":
$ref: "#/components/responses/InvalidRequestError"
"401":
$ref: "#/components/responses/UnauthorizedError"
"404":
$ref: "#/components/responses/WorkspaceNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
delete:
operationId: deleteAutomationRule
tags:
- automation-rule
summary: Delete a workspace automation rule
responses:
"200":
description: Automation rule deleted
content:
application/json:
schema:
$ref: "#/components/schemas/DeleteAutomationRuleResponse"
"400":
$ref: "#/components/responses/InvalidRequestError"
"401":
$ref: "#/components/responses/UnauthorizedError"
"404":
$ref: "#/components/responses/WorkspaceNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
/v1/workspaces/{workspaceID}/agent-sessions/{agentSessionID}/automation-rule-override:
parameters:
- $ref: "#/components/parameters/WorkspaceID"
- $ref: "#/components/parameters/AgentSessionID"
get:
operationId: getAgentSessionAutomationRuleOverride
tags:
- automation-rule
summary: Get the session-level automation rule override
description: An absent override returns disabled=false and an empty rule id list.
responses:
"200":
description: Session automation rule override
content:
application/json:
schema:
$ref: "#/components/schemas/AgentSessionAutomationRuleOverride"
"400":
$ref: "#/components/responses/InvalidRequestError"
"401":
$ref: "#/components/responses/UnauthorizedError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
put:
operationId: setAgentSessionAutomationRuleOverride
tags:
- automation-rule
summary: Disable or select automation rules for one session
description: Disabled stops every future rule evaluation for this session. A non-empty ruleIds list replaces the workspace rule set for this session; an empty list uses all enabled workspace rules. Already-started actions are unchanged.
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/SetAgentSessionAutomationRuleOverrideRequest"
responses:
"200":
description: Updated session automation rule override
content:
application/json:
schema:
$ref: "#/components/schemas/AgentSessionAutomationRuleOverride"
"400":
$ref: "#/components/responses/InvalidRequestError"
"401":
$ref: "#/components/responses/UnauthorizedError"
"404":
$ref: "#/components/responses/WorkspaceNotFoundError"
"405":
$ref: "#/components/responses/MethodNotAllowedError"
"502":
$ref: "#/components/responses/WorkspaceOperationError"
"503":
$ref: "#/components/responses/ServiceUnavailableError"
components:
securitySchemes:
bearerAuth:
type: http
scheme: bearer
parameters:
AgentCommandOrigin:
name: X-Tutti-Agent-Command-Origin
in: header
required: false
description: >-
Typed caller provenance for Agent command recording. Renderer Engine
commands use renderer-engine; absent provenance identifies direct API
and CLI commands.
schema:
type: string
enum:
- renderer-engine
CliCommandID:
name: commandID
in: path
required: true
schema:
type: string
minLength: 1
WorkspaceID:
name: workspaceID
in: path
required: true
schema:
type: string
minLength: 1
SessionForkOperationID:
name: operationID
in: path
required: true
schema:
type: string
minLength: 1
IssueID:
name: issueID
in: path
required: true
schema:
type: string
minLength: 1
WorkspaceAppID:
name: appID
in: path
required: true
schema:
type: string
minLength: 1
WorkspaceAppFactoryJobID:
name: jobID
in: path
required: true
schema:
type: string
minLength: 1
ModelPlanID:
name: modelPlanID
in: path
required: true
schema:
type: string
minLength: 1
WorkspaceAgentID:
name: workspaceAgentID
in: path
required: true
schema:
type: string
minLength: 1
ModelPolicyID:
name: modelPolicyID
in: path
required: true
schema:
type: string
minLength: 1
CollaborationRunID:
name: collaborationRunID
in: path
required: true
schema:
type: string
minLength: 1
WorkspaceFilePath:
name: path
in: query
description: Omit to resolve the current workspace file root.
required: false
schema:
type: string
minLength: 1
WorkspaceFileIncludeHidden:
name: includeHidden
in: query
required: false
schema:
type: boolean
default: false
WorkspaceFilePrefetchDepth:
name: prefetchDepth
in: query
required: false
schema:
type: integer
minimum: 1
maximum: 8
default: 4
WorkspaceFilePrefetchBudgetMs:
name: prefetchBudgetMs
in: query
required: false
schema:
type: integer
minimum: 1
maximum: 5000
default: 500
WorkspaceFileSearchQuery:
name: query
in: query
required: true
schema:
type: string
WorkspaceFileSearchWithin:
name: within
in: query
required: false
description: >-
可选:把搜索限定在工作区根下的某子路径(对应左栏选中的「位置」,如
文稿/下载/桌面)。相对工作区根的逻辑路径;缺省/空 = 跨整根搜索。
schema:
type: string
minLength: 1
WorkspaceFileSearchLimit:
name: limit
in: query
required: false
schema:
type: integer
minimum: 1
maximum: 200
default: 30
WorkspaceFileRecentLimit:
name: limit
in: query
required: false
schema:
type: integer
minimum: 1
maximum: 100
default: 30
WorkspaceFileSearchKinds:
name: includeKinds
in: query
required: false
style: form
explode: true
schema:
type: array
items:
$ref: "#/components/schemas/WorkspaceFileFilterKind"
WorkspaceFileSearchFilters:
name: filters
in: query
required: false
style: form
explode: true
description: >-
已选「文件类型筛选分类」id(全局统一口径:image/video/document/
webpage/other)。筛选与搜索是同一能力:query 可空、filters
非空时即按类型 list-all。空/缺省 = 不按类型过滤。
schema:
type: array
items:
type: string
TerminalID:
name: terminalID
in: path
required: true
schema:
type: string
minLength: 1
AgentSessionID:
name: agentSessionID
in: path
required: true
schema:
type: string
minLength: 1
AgentSessionAttachmentID:
name: attachmentID
in: path
required: true
schema:
type: string
minLength: 1
AgentPermissionRequestID:
name: requestID
in: path
required: true
schema:
type: string
minLength: 1
AgentTurnID:
name: turnID
in: path
required: true
schema:
type: string
minLength: 1
TerminalAfterSeq:
name: afterSeq
in: query
required: false
schema:
type: integer
format: int64
minimum: 0
AutomationRuleID:
name: automationRuleID
in: path
required: true
schema:
type: string
minLength: 1
responses:
UnauthorizedError:
description: Bearer token is missing or invalid
content:
application/json:
schema:
$ref: "#/components/schemas/ApiErrorResponse"
examples:
unauthorized:
value:
error:
code: unauthorized
reason: missing_or_invalid_token
developerMessage: daemon request is not authorized
InvalidRequestError:
description: Request payload or parameters are invalid
content:
application/json:
schema:
$ref: "#/components/schemas/ApiErrorResponse"
examples:
invalidRequest:
value:
error:
code: invalid_request
reason: missing_workspace_id
developerMessage: workspace id is required
TuttiExecutionActiveError:
description: One or more source sessions own a nonterminal Tutti execution
content:
application/json:
schema:
$ref: "#/components/schemas/ApiErrorResponse"
examples:
protectedSource:
value:
error:
code: tutti_execution_active
reason: tutti_execution_active
params:
workspaceId: workspace-1
protectedIssues:
- issueId: issue-1
executionId: execution-1
sourceSessionId: session-1
status: running
MethodNotAllowedError:
description: HTTP method is not supported on this route
content:
application/json:
schema:
$ref: "#/components/schemas/ApiErrorResponse"
examples:
methodNotAllowed:
value:
error:
code: method_not_allowed
reason: method_not_allowed
developerMessage: method not allowed
ServiceUnavailableError:
description: Required daemon service dependency is unavailable
content:
application/json:
schema:
$ref: "#/components/schemas/ApiErrorResponse"
examples:
serviceUnavailable:
value:
error:
code: service_unavailable
reason: workspace_service_unavailable
developerMessage: workspace service is unavailable
WorkspaceNotFoundError:
description: Workspace id was not found
content:
application/json:
schema:
$ref: "#/components/schemas/ApiErrorResponse"
examples:
workspaceNotFound:
value:
error:
code: workspace_not_found
reason: workspace_not_found
developerMessage: workspace not found
WorkspaceFileNotFoundError:
description: Workspace file entry was not found
content:
application/json:
schema:
$ref: "#/components/schemas/ApiErrorResponse"
examples:
workspaceFileNotFound:
value:
error:
code: workspace_file_not_found
reason: workspace_file_not_found
developerMessage: workspace file entry not found
WorkspaceTerminalNotFoundError:
description: Workspace terminal session was not found
content:
application/json:
schema:
$ref: "#/components/schemas/ApiErrorResponse"
examples:
workspaceTerminalNotFound:
value:
error:
code: workspace_terminal_not_found
reason: workspace_terminal_not_found
developerMessage: workspace terminal session not found
WorkspaceAppNotFoundError:
description: Workspace app was not found
content:
application/json:
schema:
$ref: "#/components/schemas/ApiErrorResponse"
examples:
workspaceAppNotFound:
value:
error:
code: workspace_app_not_found
reason: workspace_app_not_found
developerMessage: workspace app not found
WorkspaceOperationError:
description: Workspace operation failed in an upstream adapter or command
content:
application/json:
schema:
$ref: "#/components/schemas/ApiErrorResponse"
examples:
workspaceOperationFailed:
value:
error:
code: workspace_operation_failed
reason: workspace_operation_failed
developerMessage: workspace operation failed
agentConfigDependencyUnavailable:
value:
error:
code: workspace_operation_failed
reason: agent.config_dependency_unavailable
params:
provider: codex
configKey: model_instructions_file
dependencyPath: instructions.md
failureKind: missing
retryable: false
developerMessage: codex configuration dependency model_instructions_file is unavailable
AgentInteractiveConflictError:
description: Interactive response no longer matches a pending canonical request
content:
application/json:
schema:
$ref: "#/components/schemas/ApiErrorResponse"
examples:
staleInteractiveResponse:
value:
error:
code: workspace_operation_failed
reason: agent_interactive_request_stale
developerMessage: interactive request is no longer live
AgentTargetNotFoundError:
description: Agent target was not found
content:
application/json:
schema:
$ref: "#/components/schemas/ApiErrorResponse"
examples:
agentTargetNotFound:
value:
error:
code: agent_target_not_found
reason: agent_target_not_found
developerMessage: agent target not found
ModelPlanNotFoundError:
description: Model access plan was not found
content:
application/json:
schema:
$ref: "#/components/schemas/ApiErrorResponse"
examples:
modelPlanNotFound:
value:
error:
code: model_plan_not_found
reason: model_plan_not_found
developerMessage: model plan not found
ModelPlanReferencedError:
description: Model plan is still referenced by agent targets
content:
application/json:
schema:
$ref: "#/components/schemas/ApiErrorResponse"
examples:
modelPlanReferenced:
value:
error:
code: model_plan_referenced
reason: model_plan_referenced
developerMessage: model plan is still referenced; rebind or disable consumers first
ModelPolicyReferencedError:
description: Model usage policy is still referenced by agent bindings
content:
application/json:
schema:
$ref: "#/components/schemas/ApiErrorResponse"
examples:
modelPolicyReferenced:
value:
error:
code: model_policy_referenced
reason: model_policy_referenced
developerMessage: model usage policy is still referenced; rebind or clear the referencing bindings first
PreferencesOperationError:
description: Desktop preferences operation failed in an upstream adapter or command
content:
application/json:
schema:
$ref: "#/components/schemas/ApiErrorResponse"
examples:
preferencesOperationFailed:
value:
error:
code: preferences_operation_failed
reason: preferences_operation_failed
developerMessage: desktop preferences operation failed
AgentQuickPromptNotFoundError:
description: Agent quick prompt was not found
content:
application/json:
schema:
$ref: "#/components/schemas/ApiErrorResponse"
AgentQuickPromptConflictError:
description: Agent quick prompt limit, expected version, or ordering anchor conflicts with current state
content:
application/json:
schema:
$ref: "#/components/schemas/ApiErrorResponse"
AgentQuickPromptOperationError:
description: Agent quick prompt persistence operation failed
content:
application/json:
schema:
$ref: "#/components/schemas/ApiErrorResponse"
TuttiModeGoalReviewNotFoundError:
description: Tutti Mode execution or Goal Review was not found
content:
application/json:
schema:
$ref: "#/components/schemas/ApiErrorResponse"
examples:
goalReviewNotFound:
value:
error:
code: tutti_mode_goal_review_not_found
reason: tutti_goal_review_not_found
TuttiModeGoalReviewConflictError:
description: Goal Review fallback conflicts with current durable state or request history
content:
application/json:
schema:
$ref: "#/components/schemas/ApiErrorResponse"
examples:
goalReviewConflict:
value:
error:
code: tutti_mode_goal_review_conflict
reason: tutti_goal_review_conflict
TuttiModeArchiveConflictError:
description: Archive request id conflicts with a different durable archive request
content:
application/json:
schema:
$ref: "#/components/schemas/ApiErrorResponse"
examples:
archiveRequestConflict:
value:
error:
code: tutti_mode_archive_conflict
reason: tutti_archive_request_conflict
schemas:
AccountUserPresenceCurrentRoomRequest:
type: object
required:
- roomId
- members
properties:
roomId:
type: string
minLength: 1
members:
type: array
maxItems: 100
items:
$ref: "#/components/schemas/AccountUserPresenceRoomMember"
AccountUserPresenceRoomMember:
type: object
required:
- userId
- membershipActive
- accountPresenceCapable
properties:
userId:
type: string
minLength: 1
maxLength: 256
membershipActive:
type: boolean
description: True only for a currently joined, non-deleted membership.
accountPresenceCapable:
type: boolean
description: False for system identities without Account Device Presence semantics.
AccountUserPresenceForegroundRequest:
type: object
required:
- foreground
properties:
foreground:
type: boolean
AccountUserPresenceRoomResponse:
type: object
required:
- roomId
- members
properties:
roomId:
type: string
members:
type: array
items:
$ref: "#/components/schemas/AccountUserPresenceUser"
AccountUserPresenceUser:
type: object
required:
- userId
- status
- availability
- authoritative
- authorityGeneration
- presenceRevision
properties:
userId:
type: string
status:
type: string
enum:
- ONLINE
- OFFLINE
availability:
type: string
enum:
- NOT_WATCHED
- SUBSCRIBING
- SYNCING
- READY
- STALE
- UNKNOWN
- DEGRADED
authoritative:
type: boolean
authorityGeneration:
type: string
presenceRevision:
type: string
pattern: "^[0-9]*$"
observedAt:
type: string
format: date-time
nullable: true
SwitchTuttiModeGoalReviewToSelfRequest:
type: object
additionalProperties: false
required:
- checkpointId
- expectedGraphRevision
- requestId
- reason
properties:
checkpointId:
type: string
minLength: 1
expectedGraphRevision:
type: integer
format: int64
minimum: 1
requestId:
type: string
minLength: 1
reason:
type: string
minLength: 1
SwitchTuttiModeGoalReviewToSelfResponse:
type: object
additionalProperties: false
required:
- executionId
- reviewId
- reviewMode
- replayed
properties:
executionId:
type: string
minLength: 1
reviewId:
type: string
minLength: 1
reviewMode:
type: string
enum:
- self
replayed:
type: boolean
HealthStatusResponse:
type: object
additionalProperties: false
required:
- service
- status
properties:
service:
type: string
status:
type: string
enum:
- ok
TrackEventsRequest:
type: object
additionalProperties: false
required:
- events
properties:
events:
type: array
minItems: 1
maxItems: 100
items:
$ref: "#/components/schemas/TrackEvent"
TrackEvent:
type: object
additionalProperties: false
required:
- name
- client_ts
properties:
name:
type: string
minLength: 1
maxLength: 128
pattern: "^[a-z][a-z0-9_]*(?:\\.[a-z][a-z0-9_]*)+$"
client_ts:
type: integer
format: int64
minimum: 1
params:
type: object
additionalProperties: true
AccountUserInfo:
type: object
additionalProperties: false
required:
- user_id
properties:
user_id:
type: string
minLength: 1
name:
type: string
nullable: true
email:
type: string
nullable: true
avatar:
type: string
nullable: true
AccountUserInfoResponse:
type: object
additionalProperties: false
required:
- user
properties:
user:
allOf:
- $ref: "#/components/schemas/AccountUserInfo"
nullable: true
GlobalAgentActivityRoom:
type: object
additionalProperties: false
required:
- roomId
- name
- avatarUri
properties:
roomId:
type: string
minLength: 1
name:
type: string
avatarUri:
type: string
GlobalAgentActivitySessionOwner:
type: object
additionalProperties: false
required:
- userId
- displayName
- avatarUrl
- avatarFallbackUrl
- avatarClientTransform
properties:
userId:
type: string
minLength: 1
displayName:
type: string
avatarUrl:
type: string
avatarFallbackUrl:
type: string
avatarClientTransform:
type: boolean
GlobalAgentActivityAgent:
type: object
additionalProperties: false
required:
- agentKey
- agentTargetId
- provider
- name
- iconKey
properties:
agentKey:
type: string
minLength: 1
agentTargetId:
type: string
provider:
type: string
name:
type: string
iconKey:
type: string
GlobalAgentActivityTimeBounds:
type: object
additionalProperties: false
required:
- minActivityAtUnixMs
- maxActivityAtUnixMs
- serverNowUnixMs
properties:
minActivityAtUnixMs:
type: integer
format: int64
maxActivityAtUnixMs:
type: integer
format: int64
serverNowUnixMs:
type: integer
format: int64
GlobalAgentActivityFilterOptionsResponse:
type: object
additionalProperties: false
required:
- rooms
- sessionOwners
- agents
- timeBounds
properties:
rooms:
type: array
items:
$ref: "#/components/schemas/GlobalAgentActivityRoom"
sessionOwners:
type: array
items:
$ref: "#/components/schemas/GlobalAgentActivitySessionOwner"
agents:
type: array
items:
$ref: "#/components/schemas/GlobalAgentActivityAgent"
timeBounds:
$ref: "#/components/schemas/GlobalAgentActivityTimeBounds"
GlobalAgentActivitySession:
type: object
additionalProperties: false
required:
- room
- workspaceId
- agentSessionId
- sessionOwner
- agent
- status
- title
- summary
- latestUserPrompt
- needsAttention
- activityAtUnixMs
- latestMessageAtUnixMs
- startedAtUnixMs
- endedAtUnixMs
- latestTurnId
properties:
room:
$ref: "#/components/schemas/GlobalAgentActivityRoom"
workspaceId:
type: string
minLength: 1
agentSessionId:
type: string
minLength: 1
sessionOwner:
$ref: "#/components/schemas/GlobalAgentActivitySessionOwner"
agent:
$ref: "#/components/schemas/GlobalAgentActivityAgent"
status:
type: string
title:
type: string
summary:
type: string
latestUserPrompt:
type: string
needsAttention:
type: boolean
activityAtUnixMs:
type: integer
format: int64
latestMessageAtUnixMs:
type: integer
format: int64
startedAtUnixMs:
type: integer
format: int64
endedAtUnixMs:
type: integer
format: int64
latestTurnId:
type: string
GlobalAgentActivitySessionListResponse:
type: object
additionalProperties: false
required:
- items
- truncated
properties:
items:
type: array
items:
$ref: "#/components/schemas/GlobalAgentActivitySession"
truncated:
type: boolean
AccountMembershipSummary:
type: object
additionalProperties: false
required:
- tier_key
- display_name
properties:
tier_key:
type: string
minLength: 1
display_name:
type: string
minLength: 1
billing_period:
type: string
nullable: true
status:
type: string
nullable: true
access_status:
type: string
nullable: true
current_period_end:
type: string
nullable: true
cancel_at_period_end:
type: boolean
nullable: true
AccountMembershipAccessState:
type: string
enum:
- free
- active
- inactive
- unknown
AccountCreditsSummary:
type: object
additionalProperties: false
required:
- available_credits
properties:
available_credits:
type: string
nullable: true
expiring_credits_within_24h:
type: string
nullable: true
next_expire_at:
type: string
nullable: true
refreshed_at:
type: string
nullable: true
AccountProductSummaryLinks:
type: object
additionalProperties: false
required:
- plan_url
- usage_url
- settings_url
properties:
plan_url:
type: string
minLength: 1
usage_url:
type: string
minLength: 1
settings_url:
type: string
minLength: 1
AccountProductSummaryPartialError:
type: object
additionalProperties: false
required:
- scope
- code
properties:
scope:
type: string
enum:
- membership
- credits
- links
- unknown
code:
type: string
message:
type: string
nullable: true
AccountRegistrationCreditsReward:
type: object
additionalProperties: false
required:
- id
- grant_no
- credits
- created_at
properties:
id:
type: string
minLength: 1
grant_no:
type: string
minLength: 1
credits:
type: integer
format: int64
minimum: 1
created_at:
type: string
minLength: 1
AccountProductSummaryResponse:
type: object
additionalProperties: false
required:
- user
- membership
- membership_access
- credits
- links
properties:
user:
allOf:
- $ref: "#/components/schemas/AccountUserInfo"
nullable: true
membership:
allOf:
- $ref: "#/components/schemas/AccountMembershipSummary"
nullable: true
membership_access:
$ref: "#/components/schemas/AccountMembershipAccessState"
credits:
allOf:
- $ref: "#/components/schemas/AccountCreditsSummary"
nullable: true
partial_error:
allOf:
- $ref: "#/components/schemas/AccountProductSummaryPartialError"
nullable: true
registration_credits_reward:
allOf:
- $ref: "#/components/schemas/AccountRegistrationCreditsReward"
nullable: true
links:
$ref: "#/components/schemas/AccountProductSummaryLinks"
DismissAccountRegistrationCreditsRewardRequest:
type: object
additionalProperties: false
required:
- reward_id
properties:
reward_id:
type: string
minLength: 1
AccountLoginStartResponse:
type: object
additionalProperties: false
required:
- attempt_id
- login_url
- expires_at
properties:
attempt_id:
type: string
minLength: 1
login_url:
type: string
minLength: 1
expires_at:
type: integer
format: int64
AccountLoginStatusValue:
type: string
enum:
- pending
- completed
- failed
- expired
AccountLoginStatusResponse:
type: object
additionalProperties: false
required:
- attempt_id
- status
- expires_at
properties:
attempt_id:
type: string
minLength: 1
status:
$ref: "#/components/schemas/AccountLoginStatusValue"
expires_at:
type: integer
format: int64
error:
type: string
nullable: true
user:
allOf:
- $ref: "#/components/schemas/AccountUserInfo"
nullable: true
CliOutputMode:
type: string
enum:
- table
- json
- plain
- markdown
CliTableColumn:
type: object
description: Machine-readable table column metadata for clients that render command output.
additionalProperties: false
required:
- key
- label
properties:
key:
type: string
minLength: 1
label:
type: string
description: Human-readable fallback label supplied by the protocol for terminal rendering.
minLength: 1
CliTableOutput:
type: object
additionalProperties: false
required:
- columns
properties:
columns:
type: array
items:
$ref: "#/components/schemas/CliTableColumn"
CliCapabilityOutput:
type: object
additionalProperties: false
required:
- defaultMode
- json
properties:
defaultMode:
$ref: "#/components/schemas/CliOutputMode"
json:
type: boolean
table:
allOf:
- $ref: "#/components/schemas/CliTableOutput"
nullable: true
CliCommandExecutionMode:
type: string
enum:
- wait
CliCommandExecution:
type: object
description: Optional client-side execution behavior declared by a command. Wait commands remain active while handlers return a pending continuation.
additionalProperties: false
required:
- mode
properties:
mode:
$ref: "#/components/schemas/CliCommandExecutionMode"
CliCapabilitySourceKind:
type: string
enum:
- builtin
- app
CliCapabilitySource:
type: object
additionalProperties: false
required:
- kind
properties:
kind:
$ref: "#/components/schemas/CliCapabilitySourceKind"
appId:
type: string
nullable: true
appName:
type: string
nullable: true
iconUrl:
type: string
description: App manifest icon data URL for app-sourced commands.
nullable: true
cliDescription:
type: string
description: CLI scope description for app-sourced commands.
nullable: true
appDescription:
type: string
description: App manifest description for app-sourced commands.
nullable: true
documentationFile:
type: string
description: Package-local command documentation file declared by the app CLI manifest.
nullable: true
documentationPath:
type: string
description: Absolute command documentation path resolved from the installed app package.
nullable: true
CliCapabilityVisibility:
type: string
enum:
- public
- integration
CliCapability:
type: object
description: Stable command metadata exposed by the local CLI capability protocol.
additionalProperties: false
required:
- id
- path
- summary
- output
- source
properties:
id:
type: string
description: Stable command identifier used by invoke routes.
minLength: 1
path:
type: array
description: Terminal command path segments, excluding the tutti binary name.
minItems: 1
items:
type: string
minLength: 1
summary:
type: string
description: Short human-readable summary for help surfaces.
minLength: 1
description:
type: string
description: Optional longer human-readable command description.
nullable: true
visibility:
$ref: "#/components/schemas/CliCapabilityVisibility"
description: Command discovery visibility. Public commands are user-facing; integration commands are app-runtime plumbing and should not be exposed as ordinary user or Agent actions.
inputSchema:
type: object
description: Optional JSON Schema fragment describing accepted command input.
additionalProperties: true
nullable: true
output:
$ref: "#/components/schemas/CliCapabilityOutput"
execution:
allOf:
- $ref: "#/components/schemas/CliCommandExecution"
nullable: true
handlerTimeoutMs:
type: integer
description: Per-invocation App handler timeout used by clients to budget the daemon request.
minimum: 1000
maximum: 600000
nullable: true
source:
$ref: "#/components/schemas/CliCapabilitySource"
CliCapabilitiesResponse:
type: object
additionalProperties: false
required:
- commands
properties:
commands:
type: array
items:
$ref: "#/components/schemas/CliCapability"
CliInvokeContext:
type: object
description: Client-supplied invocation context. These fields are hints for routing and audit only; authorization and workspace validation remain daemon-owned.
additionalProperties: false
required:
- source
properties:
source:
type: string
description: Client source label such as cli. This is not an authorization boundary.
minLength: 1
appId:
type: string
description: Calling workspace app id hint. Managed-model commands validate it against their grant binding.
nullable: true
workspaceID:
type: string
nullable: true
parentCommandId:
type: string
nullable: true
agentSessionId:
type: string
description: Caller agent session id hint. This is not an authorization boundary.
nullable: true
agentCwd:
type: string
description: Host-injected caller Agent working directory inherited by nested Agent starts that omit an explicit cwd. This is not an authorization boundary.
nullable: true
agentRailPlacementJSON:
type: string
description: Host-injected versioned RailPlacement JSON inherited together with agentCwd. The Agent command provider validates this value before use.
nullable: true
CliInvokeRequest:
type: object
additionalProperties: false
properties:
input:
type: object
additionalProperties: true
nullable: true
outputMode:
allOf:
- $ref: "#/components/schemas/CliOutputMode"
nullable: true
context:
allOf:
- $ref: "#/components/schemas/CliInvokeContext"
nullable: true
CliCommandOutput:
type: object
additionalProperties: false
required:
- kind
properties:
kind:
$ref: "#/components/schemas/CliOutputMode"
columns:
type: array
items:
$ref: "#/components/schemas/CliTableColumn"
rows:
type: array
items:
type: object
additionalProperties: true
value:
type: object
additionalProperties: true
nullable: true
text:
type: string
nullable: true
warnings:
type: array
items:
$ref: "#/components/schemas/CliCommandWarning"
continuation:
allOf:
- $ref: "#/components/schemas/CliCommandContinuation"
nullable: true
CliCommandContinuationState:
type: string
enum:
- pending
CliCommandContinuation:
type: object
description: Internal continuation signal consumed by the CLI for wait commands and not rendered as a terminal result.
additionalProperties: false
required:
- state
- retryAfterMs
properties:
state:
$ref: "#/components/schemas/CliCommandContinuationState"
retryAfterMs:
type: integer
description: Delay before the CLI invokes the same command again.
minimum: 250
maximum: 60000
CliCommandWarning:
type: object
additionalProperties: false
required:
- code
- message
properties:
code:
type: string
message:
type: string
CliInvokeResponse:
type: object
additionalProperties: false
required:
- ok
properties:
ok:
type: boolean
output:
allOf:
- $ref: "#/components/schemas/CliCommandOutput"
nullable: true
WorkspaceAppMentionCandidateSource:
type: string
enum:
- workspace_app
- cli_app
WorkspaceAppMentionCliMetadata:
type: object
additionalProperties: false
required:
- commandCount
- commandDescriptions
- commandPaths
- commandSummaries
- scopes
properties:
commandCount:
type: integer
minimum: 0
commandDescriptions:
type: array
items:
type: string
commandPaths:
type: array
items:
type: string
commandSummaries:
type: array
items:
type: string
scopes:
type: array
items:
type: string
WorkspaceAppMentionCandidate:
type: object
additionalProperties: false
required:
- appId
- displayName
- description
- iconUrl
- availableIconUrl
- installed
- enabled
- source
- localizations
- references
- cli
properties:
appId:
type: string
minLength: 1
displayName:
type: string
minLength: 1
description:
type: string
iconUrl:
type: string
nullable: true
availableIconUrl:
type: string
nullable: true
installed:
type: boolean
enabled:
type: boolean
source:
$ref: "#/components/schemas/WorkspaceAppMentionCandidateSource"
localizations:
type: array
items:
$ref: "#/components/schemas/WorkspaceAppLocalization"
references:
$ref: "#/components/schemas/WorkspaceAppReferencesState"
cli:
$ref: "#/components/schemas/WorkspaceAppMentionCliMetadata"
WorkspaceAppMentionCandidatesResponse:
type: object
additionalProperties: false
required:
- workspaceId
- apps
properties:
workspaceId:
type: string
minLength: 1
apps:
type: array
items:
$ref: "#/components/schemas/WorkspaceAppMentionCandidate"
ApiErrorDetails:
type: object
additionalProperties: false
required:
- code
properties:
code:
type: string
enum:
- invalid_request
- method_not_allowed
- unauthorized
- service_unavailable
- workspace_not_found
- workspace_file_not_found
- workspace_issue_resource_exists
- workspace_terminal_not_found
- workspace_app_not_found
- workspace_issue_resource_not_found
- workspace_operation_failed
- preferences_operation_failed
- agent_quick_prompt_not_found
- agent_quick_prompt_conflict
- agent_quick_prompt_operation_failed
- agent_session_cassette_not_found
- agent_session_replay_workspace_conflict
- agent_session_fork_operation_not_found
- agent_target_not_found
- model_plan_not_found
- model_plan_referenced
- model_policy_referenced
- workspace_agent_not_found
- collaboration_run_not_found
- automation_rule_not_found
- tutti_mode_goal_review_not_found
- tutti_mode_goal_review_conflict
- tutti_mode_goal_review_operation_failed
- tutti_mode_goal_review_service_unavailable
- tutti_mode_archive_conflict
- tutti_execution_active
reason:
type: string
params:
type: object
additionalProperties: true
retryable:
type: boolean
developerMessage:
type: string
correlationId:
type: string
ApiErrorResponse:
type: object
additionalProperties: false
required:
- error
properties:
error:
$ref: "#/components/schemas/ApiErrorDetails"
WorkspaceSummary:
type: object
additionalProperties: false
required:
- id
- name
- lastOpenedAt
properties:
id:
type: string
name:
type: string
lastOpenedAt:
type: string
format: date-time
nullable: true
DesktopLocale:
type: string
enum:
- en
- zh-CN
DesktopThemeSource:
type: string
enum:
- system
- dark
- light
x-enum-varnames:
- DesktopThemeSourceSystem
- DesktopThemeSourceDark
- DesktopThemeSourceLight
DesktopSleepPreventionMode:
type: string
enum:
- never
- whileAgentRunning
- always
DesktopUpdatePolicy:
type: string
enum:
- off
- prompt
- auto
DesktopUpdateChannel:
type: string
enum:
- stable
- rc
DesktopDockPlacement:
type: string
enum:
- bottom
- left
DesktopDockIconStyle:
type: string
enum:
- default
- flat
DesktopBrowserUseConnectionMode:
type: string
enum:
- isolated
- autoConnect
DesktopAppCatalogChannel:
type: string
enum:
- production
- staging
DeletedAgentConversationRetentionDays:
type: integer
enum:
- 15
- 30
DeletedAgentConversationPurgeResult:
type: object
additionalProperties: false
required:
- removedSessions
- removedMessages
- payloadBytes
properties:
removedSessions:
type: integer
minimum: 0
removedMessages:
type: integer
minimum: 0
payloadBytes:
type: integer
format: int64
minimum: 0
WorkspaceDeletedAgentSessionUnavailableReason:
type: string
enum:
- legacyDataUnavailable
- incompleteSessionTree
WorkspaceDeletedAgentSession:
type: object
additionalProperties: false
required:
- agentSessionId
- title
- railSectionKey
- projectPath
- updatedAtUnixMs
- deletedAtUnixMs
- restorable
- unavailableReason
properties:
agentSessionId:
type: string
minLength: 1
description: Identity of the topmost Session in this deleted component. It may be a canonical root or a child whose parent is not deleted.
title:
type: string
description: Original canonical title. Empty titles remain empty.
railSectionKey:
type: string
minLength: 1
description: Immutable persisted rail section identity used for classification.
projectPath:
type: string
nullable: true
description: Persisted project path retained as presentation metadata. Classification is determined only by railSectionKey.
updatedAtUnixMs:
type: integer
format: int64
minimum: 0
description: Last session update before deletion. This value is not the deletion time.
deletedAtUnixMs:
type: integer
format: int64
minimum: 0
description: Tombstone time used by the retention policy.
restorable:
type: boolean
unavailableReason:
allOf:
- $ref: "#/components/schemas/WorkspaceDeletedAgentSessionUnavailableReason"
nullable: true
description: Null when the complete deleted Session component can be restored.
WorkspaceDeletedAgentSessionProjectOption:
type: object
additionalProperties: false
required:
- railSectionKey
- projectPath
- projectLabel
- projectAvailable
properties:
railSectionKey:
type: string
minLength: 1
description: Exact persisted rail section identity represented by this option.
projectPath:
type: string
nullable: true
description: Persisted project path retained as presentation metadata; it is not the option identity.
projectLabel:
type: string
minLength: 1
projectAvailable:
type: boolean
description: Whether the original project is still registered in the current project catalog.
WorkspaceDeletedAgentSessionListResponse:
type: object
additionalProperties: false
required:
- workspaceId
- sessions
- projectOptions
- hasMore
- totalCount
- workspaceTotalCount
properties:
workspaceId:
type: string
minLength: 1
sessions:
type: array
items:
$ref: "#/components/schemas/WorkspaceDeletedAgentSession"
projectOptions:
type: array
description: Distinct original tombstone projects for the workspace, independent of search, project filter, cursor, and limit.
items:
$ref: "#/components/schemas/WorkspaceDeletedAgentSessionProjectOption"
hasMore:
type: boolean
nextCursor:
type: string
minLength: 1
description: Opaque cursor for the next older matching page.
totalCount:
type: integer
minimum: 0
description: Total matching topmost soft-deleted Session components before cursor pagination.
workspaceTotalCount:
type: integer
minimum: 0
description: Total topmost soft-deleted Session components in this workspace before search, project filtering, and cursor pagination.
RestoreWorkspaceDeletedAgentSessionResponse:
type: object
additionalProperties: false
required:
- agentSessionId
- restored
properties:
agentSessionId:
type: string
minLength: 1
restored:
type: boolean
DesktopPreferences:
type: object
additionalProperties: false
required:
- agentCliUpdateCheckEnabled
- agentComposerDefaultsByProvider
- agentGuiConversationRailCollapsedByProvider
- agentConversationDetailMode
- agentDockLayout
- appCatalogChannel
- defaultAgentProvider
- dockIconStyle
- dockPlacement
- deletedAgentConversationRetentionDays
- fileDefaultOpenersByExtension
- featureFlags
- workbenchShortcuts
- locale
- minimizeAnimation
- sleepPreventionMode
- showAppDeveloperSources
- themeSource
- updateChannel
- updatePolicy
properties:
agentCliUpdateCheckEnabled:
type: boolean
default: true
description: Whether tuttid may periodically discover newer managed agent CLI releases on this device. This never authorizes automatic installation.
agentComposerDefaultsByProvider:
$ref: "#/components/schemas/DesktopAgentComposerDefaultsByProvider"
agentComposerDefaultsByAgentTarget:
$ref: "#/components/schemas/DesktopAgentComposerDefaultsByAgentTarget"
agentGuiConversationRailCollapsedByProvider:
$ref: "#/components/schemas/DesktopAgentGuiConversationRailCollapsedByProvider"
agentSessionLaunchModesByWorkspace:
$ref: "#/components/schemas/DesktopAgentSessionLaunchModesByWorkspace"
description: Daemon-owned remembered Agent Session launch modes. Full desktop preference updates preserve this map; mutate one workspace/project entry through the dedicated event-stream patch intent.
agentConversationDetailMode:
$ref: "#/components/schemas/DesktopAgentConversationDetailMode"
agentDockLayout:
$ref: "#/components/schemas/DesktopAgentDockLayout"
appCatalogChannel:
$ref: "#/components/schemas/DesktopAppCatalogChannel"
browserUseConnectionMode:
$ref: "#/components/schemas/DesktopBrowserUseConnectionMode"
defaultAgentProvider:
$ref: "#/components/schemas/DesktopDefaultAgentProvider"
dockIconStyle:
$ref: "#/components/schemas/DesktopDockIconStyle"
dockPlacement:
$ref: "#/components/schemas/DesktopDockPlacement"
deletedAgentConversationRetentionDays:
$ref: "#/components/schemas/DeletedAgentConversationRetentionDays"
fileDefaultOpenersByExtension:
$ref: "#/components/schemas/DesktopFileDefaultOpenersByExtension"
featureFlags:
$ref: "#/components/schemas/DesktopFeatureFlags"
workbenchShortcuts:
$ref: "#/components/schemas/DesktopWorkbenchShortcuts"
locale:
$ref: "#/components/schemas/DesktopLocale"
minimizeAnimation:
$ref: "#/components/schemas/DesktopMinimizeAnimation"
sleepPreventionMode:
$ref: "#/components/schemas/DesktopSleepPreventionMode"
showAppDeveloperSources:
type: boolean
themeSource:
$ref: "#/components/schemas/DesktopThemeSource"
updateChannel:
$ref: "#/components/schemas/DesktopUpdateChannel"
updatePolicy:
$ref: "#/components/schemas/DesktopUpdatePolicy"
workbenchWindowSnapping:
$ref: "#/components/schemas/DesktopWorkbenchWindowSnapping"
DesktopFeatureFlags:
type: object
additionalProperties:
type: boolean
DesktopWorkbenchShortcuts:
type: object
additionalProperties: false
required:
- newAgentConversation
- newSameTypeWindow
properties:
newAgentConversation:
type: string
nullable: true
maxLength: 80
description: Keyboard shortcut binding for opening an AgentGUI new conversation, or null when unbound.
newSameTypeWindow:
type: string
nullable: true
maxLength: 80
description: Keyboard shortcut binding for opening a new window of the active workbench node type, or null when unbound.
captureScreenshot:
type: string
nullable: true
maxLength: 80
description: Keyboard shortcut binding for the global screenshot capture, or null/absent when the built-in CommandOrControl+Shift+S default applies. Unlike the other bindings, null does not mean unbound.
DesktopWorkbenchWindowSnapping:
type: object
additionalProperties: false
required:
- enabled
- shortcutPreset
properties:
enabled:
type: boolean
shortcutPreset:
$ref: "#/components/schemas/DesktopWorkbenchWindowSnappingShortcutPreset"
DesktopWorkbenchWindowSnappingShortcutPreset:
type: string
enum:
- commandArrows
- commandShiftArrows
DesktopAgentComposerDefaults:
type: object
additionalProperties: false
properties:
codexSaverMode:
type: boolean
description: Enables the Codex-specific saver subagent mode
rtkSaverMode:
type: boolean
description: Enables provider-neutral RTK saver mode
model:
type: string
permissionModeId:
type: string
reasoningEffort:
type: string
speed:
type: string
DesktopAgentConversationDetailMode:
type: string
enum:
- coding
- general
DesktopDefaultAgentProvider:
type: string
enum:
- tutti-agent
- claude-code
- codex
- cursor
- opencode
x-enum-varnames:
- DesktopDefaultAgentProviderTuttiAgent
- DesktopDefaultAgentProviderClaudeCode
- DesktopDefaultAgentProviderCodex
- DesktopDefaultAgentProviderCursor
- DesktopDefaultAgentProviderOpencode
DesktopAgentDockLayout:
type: string
enum:
- legacySplit
- unified
DesktopAgentComposerDefaultsByProvider:
type: object
additionalProperties: false
properties:
claude-code:
$ref: "#/components/schemas/DesktopAgentComposerDefaults"
codex:
$ref: "#/components/schemas/DesktopAgentComposerDefaults"
tutti-agent:
$ref: "#/components/schemas/DesktopAgentComposerDefaults"
cursor:
$ref: "#/components/schemas/DesktopAgentComposerDefaults"
nexight:
$ref: "#/components/schemas/DesktopAgentComposerDefaults"
openclaw:
$ref: "#/components/schemas/DesktopAgentComposerDefaults"
opencode:
$ref: "#/components/schemas/DesktopAgentComposerDefaults"
DesktopAgentComposerDefaultsByAgentTarget:
type: object
additionalProperties:
$ref: "#/components/schemas/DesktopAgentComposerDefaults"
DesktopAgentGuiConversationRailCollapsedByProvider:
type: object
additionalProperties: false
properties:
claude-code:
type: boolean
codex:
type: boolean
tutti-agent:
type: boolean
cursor:
type: boolean
nexight:
type: boolean
openclaw:
type: boolean
opencode:
type: boolean
DesktopAgentSessionLaunchMode:
type: string
enum:
- local
- worktree
DesktopAgentSessionLaunchModesByProject:
type: object
additionalProperties:
$ref: "#/components/schemas/DesktopAgentSessionLaunchMode"
DesktopAgentSessionLaunchModesByWorkspace:
type: object
additionalProperties:
$ref: "#/components/schemas/DesktopAgentSessionLaunchModesByProject"
DesktopFileDefaultOpener:
type: string
enum:
- appBrowser
- defaultBrowser
- fileViewer
- system
DesktopFileDefaultOpenersByExtension:
type: object
additionalProperties:
$ref: "#/components/schemas/DesktopFileDefaultOpener"
DesktopMinimizeAnimation:
type: string
enum:
- scale
- genie
- off
DesktopPreferencesStateResponse:
type: object
additionalProperties: false
required:
- initialized
- preferences
properties:
initialized:
type: boolean
preferences:
$ref: "#/components/schemas/DesktopPreferences"
WorkspaceAppAgentPreferencesResponse:
type: object
additionalProperties: false
required:
- defaultAgentProvider
properties:
defaultAgentProvider:
$ref: "#/components/schemas/DesktopDefaultAgentProvider"
PutDesktopPreferencesRequest:
type: object
additionalProperties: false
required:
- preferences
properties:
writeMode:
$ref: "#/components/schemas/DesktopPreferencesWriteMode"
preferences:
$ref: "#/components/schemas/DesktopPreferences"
DesktopPreferencesWriteMode:
type: string
description: >-
replace performs the normal full preference update, and omitting
writeMode is equivalent to replace. initializeIfAbsent atomically
creates the preference row only when it does not exist after applying
the daemon-owned Agent workspace-mode default to the supplied
preferences. If the row already exists, it returns the authoritative
stored preferences unchanged.
default: replace
enum:
- replace
- initializeIfAbsent
x-enum-varnames:
- DesktopPreferencesWriteModeReplace
- DesktopPreferencesWriteModeInitializeIfAbsent
DesktopUpdateAdmissionProduct:
type: string
enum:
- tsh-desktop
- tutti-desktop
x-enum-varnames:
- DesktopUpdateAdmissionProductTshDesktop
- DesktopUpdateAdmissionProductTuttiDesktop
DesktopUpdateAdmissionPlatform:
type: string
enum:
- macos
- windows
- linux
x-enum-varnames:
- DesktopUpdateAdmissionPlatformMacos
- DesktopUpdateAdmissionPlatformWindows
- DesktopUpdateAdmissionPlatformLinux
DesktopUpdateAdmissionArchitecture:
type: string
enum:
- arm64
- x64
x-enum-varnames:
- DesktopUpdateAdmissionArchitectureArm64
- DesktopUpdateAdmissionArchitectureX64
DesktopUpdateAdmissionIdentity:
type: object
additionalProperties: false
required:
- product
- platform
- architecture
- currentVersion
properties:
product:
$ref: "#/components/schemas/DesktopUpdateAdmissionProduct"
platform:
$ref: "#/components/schemas/DesktopUpdateAdmissionPlatform"
architecture:
$ref: "#/components/schemas/DesktopUpdateAdmissionArchitecture"
currentVersion:
type: string
minLength: 1
DesktopUpdateAdmissionPolicyResponse:
type: object
additionalProperties: false
required:
- channel
- decision
- reason
- policyRevision
properties:
channel:
type: string
enum:
- stable
- rc
- unmanaged
x-enum-varnames:
- DesktopUpdateAdmissionPolicyResponseChannelStable
- DesktopUpdateAdmissionPolicyResponseChannelRc
- DesktopUpdateAdmissionPolicyResponseChannelUnmanaged
minimumVersion:
type: string
minLength: 1
decision:
type: string
enum:
- allowed
- upgradeRequired
- notApplicable
x-enum-varnames:
- DesktopUpdateAdmissionPolicyResponseDecisionAllowed
- DesktopUpdateAdmissionPolicyResponseDecisionUpgradeRequired
- DesktopUpdateAdmissionPolicyResponseDecisionNotApplicable
reason:
type: string
enum:
- belowMinimum
- meetsMinimum
- minimumNotConfigured
- unmanagedPrerelease
- unsupportedRelease
x-enum-varnames:
- DesktopUpdateAdmissionPolicyResponseReasonBelowMinimum
- DesktopUpdateAdmissionPolicyResponseReasonMeetsMinimum
- DesktopUpdateAdmissionPolicyResponseReasonMinimumNotConfigured
- DesktopUpdateAdmissionPolicyResponseReasonUnmanagedPrerelease
- DesktopUpdateAdmissionPolicyResponseReasonUnsupportedRelease
policyRevision:
type: string
minLength: 1
DesktopUpdateAdmissionPolicyFailure:
type: object
additionalProperties: false
required:
- kind
properties:
kind:
type: string
enum:
- timeout
- transport
- invalidResponse
x-enum-varnames:
- DesktopUpdateAdmissionPolicyFailureKindTimeout
- DesktopUpdateAdmissionPolicyFailureKindTransport
- DesktopUpdateAdmissionPolicyFailureKindInvalidResponse
DesktopUpdateAdmissionPolicySnapshot:
type: object
additionalProperties: false
required:
- status
properties:
status:
type: string
enum:
- checking
- resolved
- failedOpen
- skipped
x-enum-varnames:
- DesktopUpdateAdmissionPolicySnapshotStatusChecking
- DesktopUpdateAdmissionPolicySnapshotStatusResolved
- DesktopUpdateAdmissionPolicySnapshotStatusFailedOpen
- DesktopUpdateAdmissionPolicySnapshotStatusSkipped
response:
$ref: "#/components/schemas/DesktopUpdateAdmissionPolicyResponse"
failure:
$ref: "#/components/schemas/DesktopUpdateAdmissionPolicyFailure"
reason:
type: string
enum:
- checksDisabled
x-enum-varnames:
- DesktopUpdateAdmissionPolicySnapshotReasonChecksDisabled
DesktopUpdateAdmissionFeatureAvailability:
type: object
additionalProperties: false
required:
- keys
- source
- policyRevision
- fetchedAt
properties:
keys:
type: array
maxItems: 256
items:
type: string
source:
type: string
enum:
- remote
- cache
- empty
x-enum-varnames:
- DesktopUpdateAdmissionFeatureAvailabilitySourceRemote
- DesktopUpdateAdmissionFeatureAvailabilitySourceCache
- DesktopUpdateAdmissionFeatureAvailabilitySourceEmpty
policyRevision:
type: string
nullable: true
fetchedAt:
type: string
format: date-time
nullable: true
DesktopUpdateAdmissionSnapshot:
type: object
additionalProperties: false
required:
- identity
- policy
- featureAvailability
- lastAttemptAt
- nextForegroundCheckAt
properties:
identity:
$ref: "#/components/schemas/DesktopUpdateAdmissionIdentity"
policy:
$ref: "#/components/schemas/DesktopUpdateAdmissionPolicySnapshot"
featureAvailability:
$ref: "#/components/schemas/DesktopUpdateAdmissionFeatureAvailability"
lastAttemptAt:
type: string
format: date-time
nullable: true
nextForegroundCheckAt:
type: string
format: date-time
nullable: true
DesktopUpdateAdmissionRefreshTrigger:
type: string
enum:
- foreground
- retry
x-enum-varnames:
- DesktopUpdateAdmissionRefreshTriggerForeground
- DesktopUpdateAdmissionRefreshTriggerRetry
DesktopUpdateAdmissionRefreshRequest:
type: object
additionalProperties: false
required:
- trigger
properties:
trigger:
$ref: "#/components/schemas/DesktopUpdateAdmissionRefreshTrigger"
DesktopUpdateAdmissionRefreshResult:
type: object
additionalProperties: false
required:
- performed
- snapshot
properties:
performed:
type: boolean
skipReason:
type: string
enum:
- checksDisabled
- throttled
- requestInFlight
x-enum-varnames:
- DesktopUpdateAdmissionRefreshResultSkipReasonChecksDisabled
- DesktopUpdateAdmissionRefreshResultSkipReasonThrottled
- DesktopUpdateAdmissionRefreshResultSkipReasonRequestInFlight
snapshot:
$ref: "#/components/schemas/DesktopUpdateAdmissionSnapshot"
AgentTargetProvider:
type: string
minLength: 1
maxLength: 128
pattern: "^[a-z][a-z0-9._:-]*$"
AgentTargetSource:
type: string
enum:
- system
- user
AgentTargetLaunchRef:
oneOf:
- $ref: "#/components/schemas/AgentTargetBuiltinLocalLaunchRef"
- $ref: "#/components/schemas/AgentTargetExtensionLaunchRef"
discriminator:
propertyName: type
mapping:
builtin_local: "#/components/schemas/AgentTargetBuiltinLocalLaunchRef"
agent_extension: "#/components/schemas/AgentTargetExtensionLaunchRef"
AgentTargetBuiltinLocalLaunchRef:
type: object
additionalProperties: false
required:
- type
- provider
properties:
type:
type: string
enum:
- builtin_local
x-enum-varnames:
- AgentTargetBuiltinLocalLaunchRefTypeBuiltinLocal
provider:
$ref: "#/components/schemas/AgentTargetProvider"
AgentTargetExtensionLaunchRef:
type: object
additionalProperties: false
required:
- type
- extensionInstallationId
properties:
type:
type: string
enum:
- agent_extension
x-enum-varnames:
- AgentTargetExtensionLaunchRefTypeAgentExtension
extensionInstallationId:
type: string
minLength: 1
AgentTarget:
type: object
additionalProperties: false
required:
- id
- provider
- launchRef
- name
- enabled
- source
- sortOrder
- createdAtUnixMs
- updatedAtUnixMs
properties:
id:
type: string
maxLength: 128
pattern: "^[a-z0-9][a-z0-9._:-]{0,127}$"
provider:
$ref: "#/components/schemas/AgentTargetProvider"
launchRef:
$ref: "#/components/schemas/AgentTargetLaunchRef"
name:
type: string
iconKey:
type: string
nullable: true
iconUrl:
type: string
nullable: true
maskIconUrl:
type: string
nullable: true
heroImageUrl:
type: string
nullable: true
availability:
allOf:
- $ref: "#/components/schemas/AgentProviderAvailability"
nullable: true
enabled:
type: boolean
source:
$ref: "#/components/schemas/AgentTargetSource"
sortOrder:
type: integer
createdAtUnixMs:
type: integer
format: int64
updatedAtUnixMs:
type: integer
format: int64
ListAgentTargetsResponse:
type: object
additionalProperties: false
required:
- targets
properties:
targets:
type: array
items:
$ref: "#/components/schemas/AgentTarget"
AgentTargetAccountUsageProbeResult:
oneOf:
- $ref: "#/components/schemas/AgentTargetAccountUsageAvailableResult"
- $ref: "#/components/schemas/AgentTargetAccountUsageUnsupportedResult"
- $ref: "#/components/schemas/AgentTargetAccountUsageErrorResult"
discriminator:
propertyName: outcome
mapping:
available: "#/components/schemas/AgentTargetAccountUsageAvailableResult"
unsupported: "#/components/schemas/AgentTargetAccountUsageUnsupportedResult"
error: "#/components/schemas/AgentTargetAccountUsageErrorResult"
AgentTargetAccountUsageAvailableResult:
type: object
additionalProperties: false
required:
- schemaVersion
- agentTargetId
- provider
- outcome
- capturedAtUnixMs
- billingMode
- quotaState
- quotas
properties:
schemaVersion:
type: string
enum:
- tutti.agent.account-usage.v2
agentTargetId:
type: string
minLength: 1
provider:
$ref: "#/components/schemas/AgentTargetProvider"
outcome:
type: string
enum:
- available
capturedAtUnixMs:
type: integer
format: int64
minimum: 0
billingMode:
$ref: "#/components/schemas/AgentTargetAccountUsageBillingMode"
quotaState:
$ref: "#/components/schemas/AgentTargetAccountUsageQuotaState"
quotas:
type: array
maxItems: 64
items:
$ref: "#/components/schemas/AgentTargetAccountUsageQuota"
AgentTargetAccountUsageUnsupportedResult:
type: object
additionalProperties: false
required:
- schemaVersion
- agentTargetId
- provider
- outcome
- capturedAtUnixMs
properties:
schemaVersion:
type: string
enum:
- tutti.agent.account-usage.v2
agentTargetId:
type: string
minLength: 1
provider:
$ref: "#/components/schemas/AgentTargetProvider"
outcome:
type: string
enum:
- unsupported
capturedAtUnixMs:
type: integer
format: int64
minimum: 0
AgentTargetAccountUsageErrorResult:
type: object
additionalProperties: false
required:
- schemaVersion
- agentTargetId
- provider
- outcome
- capturedAtUnixMs
- errorCode
properties:
schemaVersion:
type: string
enum:
- tutti.agent.account-usage.v2
agentTargetId:
type: string
minLength: 1
provider:
$ref: "#/components/schemas/AgentTargetProvider"
outcome:
type: string
enum:
- error
capturedAtUnixMs:
type: integer
format: int64
minimum: 0
errorCode:
$ref: "#/components/schemas/AgentTargetAccountUsageErrorCode"
AgentTargetAccountUsageBillingMode:
type: string
enum:
- subscription
- api
- coding_plan
- provider_account
AgentTargetAccountUsageQuotaState:
type: string
enum:
- complete
- unavailable
- not_applicable
AgentTargetAccountUsageErrorCode:
type: string
enum:
- auth_required
- config_invalid
- execution_failed
- no_data
- parse_failed
- rate_limited
- runtime_unavailable
- session_expired
- timeout
AgentTargetAccountUsageQuotaType:
type: string
enum:
- session
- daily
- weekly
- monthly
- model
- credits
- cost
AgentTargetAccountUsageQuota:
type: object
additionalProperties: false
required:
- quotaType
- percentRemaining
properties:
quotaType:
$ref: "#/components/schemas/AgentTargetAccountUsageQuotaType"
percentRemaining:
type: number
minimum: 0
maximum: 100
amountRemaining:
type: number
format: double
minimum: 0
amountLimit:
type: number
format: double
minimum: 0
amountUnit:
type: string
enum:
- credits
resetsAtUnixMs:
type: integer
format: int64
minimum: 0
modelName:
type: string
minLength: 1
maxLength: 128
SetSystemAgentTargetEnabledRequest:
type: object
additionalProperties: false
required:
- enabled
properties:
enabled:
type: boolean
x-go-type: "*bool"
AgentTargetInstallPlan:
type: object
additionalProperties: false
required:
- agentTargetId
- extensionInstallationId
- agentKey
- extensionVersion
- runtimeKind
- platform
- runner
- packageName
- packageVersion
- installRoot
- installCommand
- executable
- launchArgs
- planDigest
properties:
agentTargetId:
type: string
minLength: 1
extensionInstallationId:
type: string
minLength: 1
agentKey:
type: string
minLength: 1
extensionVersion:
type: string
minLength: 1
runtimeKind:
type: string
minLength: 1
platform:
type: string
minLength: 1
runner:
type: string
enum:
- npm
- pnpm
- uv
- binary
packageName:
type: string
minLength: 1
packageVersion:
type: string
minLength: 1
installRoot:
type: string
minLength: 1
installCommand:
type: array
minItems: 1
items:
type: string
minLength: 1
executable:
type: string
minLength: 1
launchArgs:
type: array
items:
type: string
planDigest:
type: string
pattern: "^[a-f0-9]{64}$"
AgentTargetSetupStatus:
type: string
enum:
- ready
- auth_required
- not_installed
- installing
- authenticating
- failed
AgentTargetRuntimeSource:
type: string
enum:
- local
- managed
x-enum-varnames:
- AgentTargetRuntimeSourceLocal
- AgentTargetRuntimeSourceManaged
AgentTargetSetupActionKind:
type: string
enum:
- install
- authenticate
x-enum-varnames:
- AgentTargetSetupActionKindInstall
- AgentTargetSetupActionKindAuthenticate
AgentTargetSetupActionStatus:
type: string
enum:
- queued
- running
- succeeded
- failed
- interrupted
AgentTargetSetupActionPhase:
type: string
enum:
- preparing
- installing
- verifying
- probing
- activating
- authenticating
- complete
AgentTargetSetupAction:
type: object
additionalProperties: false
required:
- actionId
- clientActionId
- kind
- status
- phase
- createdAtUnixMs
- updatedAtUnixMs
properties:
actionId:
type: string
minLength: 1
clientActionId:
type: string
minLength: 1
kind:
$ref: "#/components/schemas/AgentTargetSetupActionKind"
status:
$ref: "#/components/schemas/AgentTargetSetupActionStatus"
phase:
$ref: "#/components/schemas/AgentTargetSetupActionPhase"
errorCode:
type: string
nullable: true
errorMessage:
type: string
nullable: true
createdAtUnixMs:
type: integer
format: int64
updatedAtUnixMs:
type: integer
format: int64
AgentTargetAuthenticatedAccount:
type: object
additionalProperties: false
required:
- id
- displayName
- authMethodId
properties:
id:
type: string
minLength: 1
displayName:
type: string
minLength: 1
authMethodId:
type: string
minLength: 1
organization:
type: string
nullable: true
AgentTargetSetupSnapshot:
type: object
additionalProperties: false
required:
- workspaceId
- agentTargetId
- status
- runtimeSource
- runtimeVersion
- reason
- authMethods
- account
- plan
- action
properties:
workspaceId:
type: string
minLength: 1
agentTargetId:
type: string
minLength: 1
status:
$ref: "#/components/schemas/AgentTargetSetupStatus"
runtimeSource:
allOf:
- $ref: "#/components/schemas/AgentTargetRuntimeSource"
nullable: true
runtimeVersion:
type: string
nullable: true
reason:
type: string
nullable: true
authMethods:
type: array
items:
$ref: "#/components/schemas/AgentTargetAuthMethod"
account:
allOf:
- $ref: "#/components/schemas/AgentTargetAuthenticatedAccount"
nullable: true
plan:
allOf:
- $ref: "#/components/schemas/AgentTargetInstallPlan"
nullable: true
action:
allOf:
- $ref: "#/components/schemas/AgentTargetSetupAction"
nullable: true
AgentTargetAuthMethod:
type: object
additionalProperties: false
required:
- id
- name
properties:
id:
type: string
minLength: 1
name:
type: string
minLength: 1
description:
type: string
nullable: true
type:
type: string
nullable: true
description: Provider-declared method kind (for example "terminal").
terminalCommand:
type: string
nullable: true
description: Ready-to-run interactive sign-in launch command for terminal-type methods.
terminalStartupAction:
allOf:
- $ref: "#/components/schemas/AgentTargetTerminalStartupAction"
nullable: true
description: Optional typed terminal action submitted after the interactive runtime reaches its declared ready marker.
AgentTargetTerminalStartupAction:
type: object
additionalProperties: false
required:
- type
- commandName
- readyText
properties:
type:
type: string
enum:
- slash_command
x-enum-varnames:
- AgentTargetTerminalStartupActionTypeSlashCommand
commandName:
type: string
minLength: 1
maxLength: 64
pattern: "^[a-z0-9][a-z0-9._:-]{0,63}$"
readyText:
type: string
minLength: 1
maxLength: 256
InstallAgentTargetRuntimeRequest:
type: object
additionalProperties: false
required:
- planDigest
- clientActionId
properties:
planDigest:
type: string
pattern: "^[a-f0-9]{64}$"
clientActionId:
type: string
minLength: 1
maxLength: 128
AuthenticateAgentTargetRuntimeRequest:
type: object
additionalProperties: false
required:
- methodId
- clientActionId
properties:
methodId:
type: string
minLength: 1
maxLength: 128
clientActionId:
type: string
minLength: 1
maxLength: 128
ListWorkspacesResponse:
type: object
additionalProperties: false
required:
- workspaces
- totalCount
properties:
workspaces:
type: array
items:
$ref: "#/components/schemas/WorkspaceSummary"
totalCount:
type: integer
minimum: 0
StartupWorkspaceResponse:
type: object
additionalProperties: false
required:
- workspace
properties:
workspace:
allOf:
- $ref: "#/components/schemas/WorkspaceSummary"
nullable: true
WorkspaceResponse:
type: object
additionalProperties: false
required:
- workspace
properties:
workspace:
$ref: "#/components/schemas/WorkspaceSummary"
DeleteWorkspaceResponse:
type: object
additionalProperties: false
required:
- workspaceId
properties:
workspaceId:
type: string
AutomationRuleTargetKind:
type: string
description: Every rule targets a launchable Agent. The legacy model kind retired with the consult action and no longer appears.
enum:
- agent
AutomationRuleTarget:
type: object
additionalProperties: false
required:
- kind
- requiredCapabilities
properties:
kind:
$ref: "#/components/schemas/AutomationRuleTargetKind"
workspaceAgentId:
type: string
nullable: true
description: Target Agent that receives the automated follow-up session. Accepts a WorkspaceAgent id or a built-in Harness AgentTarget id; the Agent must be enabled and launchable.
modelPlanId:
type: string
nullable: true
description: Retired consult-era field; always empty. Launches inherit the target Agent's model configuration.
model:
type: string
nullable: true
description: Retired consult-era field; always empty.
requiredCapabilities:
type: array
description: Retired consult-era field; always empty.
items:
type: string
minLength: 1
AutomationRulePermissions:
type: object
additionalProperties: false
required:
- allowedTools
description: Authority narrowing applied to the automatically launched target session. The option catalogs follow the selected target Agent's capability directory.
properties:
permissionModeId:
type: string
nullable: true
allowedTools:
type: array
items:
type: string
minLength: 1
AutomationRuleBudget:
type: object
additionalProperties: false
required:
- maxRunsPerSession
- maxTotalTokensPerSession
description: Independent per-source-session limit. Zero uses the daemon safety default and never means unlimited.
properties:
maxRunsPerSession:
type: integer
minimum: 0
maxTotalTokensPerSession:
type: integer
format: int64
minimum: 0
AutomationRuleTrigger:
type: string
description: Lifecycle outcome that evaluates the rule. A failed-turn rule can delegate to a stronger WorkspaceAgent as a bounded escalation attempt; automated outcomes never final-accept the source task.
enum:
- on_task_complete
- on_task_failed
AutomationRule:
type: object
additionalProperties: false
description: One workspace automation rule. A triggered rule launches a new target-Agent session whose first message carries the rule prompt, a source-session mention, and a short event note.
required:
- id
- workspaceId
- name
- enabled
- trigger
- target
- permissions
- budget
- prompt
- createdAt
- updatedAt
properties:
id:
type: string
minLength: 1
workspaceId:
type: string
minLength: 1
name:
type: string
minLength: 1
enabled:
type: boolean
trigger:
$ref: "#/components/schemas/AutomationRuleTrigger"
sourceWorkspaceAgentId:
type: string
nullable: true
description: Optional source-session Agent filter. Empty means all non-automation-origin sessions.
target:
$ref: "#/components/schemas/AutomationRuleTarget"
permissions:
$ref: "#/components/schemas/AutomationRulePermissions"
budget:
$ref: "#/components/schemas/AutomationRuleBudget"
prompt:
type: string
createdAt:
type: string
format: date-time
updatedAt:
type: string
format: date-time
ListAutomationRulesResponse:
type: object
additionalProperties: false
required:
- rules
properties:
rules:
type: array
items:
$ref: "#/components/schemas/AutomationRule"
PutAutomationRuleRequest:
type: object
additionalProperties: false
required:
- name
- enabled
- trigger
- target
- permissions
- budget
- prompt
properties:
name:
type: string
minLength: 1
maxLength: 120
enabled:
type: boolean
trigger:
$ref: "#/components/schemas/AutomationRuleTrigger"
sourceWorkspaceAgentId:
type: string
nullable: true
target:
$ref: "#/components/schemas/AutomationRuleTarget"
permissions:
$ref: "#/components/schemas/AutomationRulePermissions"
budget:
$ref: "#/components/schemas/AutomationRuleBudget"
prompt:
type: string
maxLength: 100000
DeleteAutomationRuleResponse:
type: object
additionalProperties: false
required:
- automationRuleId
properties:
automationRuleId:
type: string
AgentSessionAutomationRuleOverride:
type: object
additionalProperties: false
required:
- workspaceId
- agentSessionId
- disabled
- ruleIds
properties:
workspaceId:
type: string
minLength: 1
agentSessionId:
type: string
minLength: 1
disabled:
type: boolean
ruleIds:
type: array
items:
type: string
minLength: 1
updatedAt:
type: string
format: date-time
nullable: true
SetAgentSessionAutomationRuleOverrideRequest:
type: object
additionalProperties: false
required:
- disabled
- ruleIds
properties:
disabled:
type: boolean
ruleIds:
type: array
items:
type: string
minLength: 1
ModelPlanProtocol:
type: string
description: Wire protocol family used to call the plan's models.
enum:
- openai
- anthropic
ModelPlanTemplateKind:
type: string
description: Access-scheme template the plan was created from. Presentation and guidance hint; runtime behavior derives from protocol.
enum:
- official_subscription
- coding_plan
- domestic
- relay
- custom
ModelPlanStatus:
type: string
description: Derived plan lifecycle status. A plan is ready when its latest connection detection passed.
enum:
- disabled
- undetected
- detection_failed
- ready
ModelPlanDetectionStage:
type: string
enum:
- network
- auth
- model_discovery
- inference
ModelPlanStageStatus:
type: string
enum:
- passed
- failed
- skipped
ModelPlanStageResult:
type: object
additionalProperties: false
required:
- stage
- status
properties:
stage:
$ref: "#/components/schemas/ModelPlanDetectionStage"
status:
$ref: "#/components/schemas/ModelPlanStageStatus"
latencyMs:
type: integer
format: int64
nullable: true
failureReason:
type: string
nullable: true
description: Machine-readable failure code such as connection_failed, unauthorized, model_catalog_unavailable, model_rejected, inference_failed.
remedy:
type: string
nullable: true
description: Machine-readable remedy code such as check_network_or_base_url, check_api_key, add_models_manually, check_model_id, select_model. UI layers localize.
detail:
type: string
nullable: true
checkedAt:
type: string
format: date-time
nullable: true
ModelPlanDetection:
type: object
additionalProperties: false
required:
- stages
properties:
stages:
type: array
items:
$ref: "#/components/schemas/ModelPlanStageResult"
checkedAt:
type: string
format: date-time
nullable: true
model:
type: string
nullable: true
description: Model id exercised by the inference stage.
ModelPlanModel:
type: object
additionalProperties: false
required:
- id
- name
properties:
id:
type: string
name:
type: string
capabilities:
type: array
nullable: true
items:
type: string
ModelPlan:
type: object
additionalProperties: false
description: Workspace-level model access plan. Credentials are stored daemon-side only; hasApiKey is the only credential signal in responses.
required:
- id
- workspaceId
- revision
- name
- templateKind
- protocol
- hasApiKey
- models
- enabled
- status
- detection
- createdAt
- updatedAt
properties:
id:
type: string
workspaceId:
type: string
revision:
type: integer
format: int64
minimum: 0
name:
type: string
templateKind:
$ref: "#/components/schemas/ModelPlanTemplateKind"
protocol:
$ref: "#/components/schemas/ModelPlanProtocol"
hasApiKey:
type: boolean
baseUrl:
type: string
nullable: true
models:
type: array
items:
$ref: "#/components/schemas/ModelPlanModel"
defaultModel:
type: string
nullable: true
enabled:
type: boolean
status:
$ref: "#/components/schemas/ModelPlanStatus"
detection:
$ref: "#/components/schemas/ModelPlanDetection"
createdAt:
type: string
format: date-time
updatedAt:
type: string
format: date-time
ListModelPlansResponse:
type: object
additionalProperties: false
required:
- plans
properties:
plans:
type: array
items:
$ref: "#/components/schemas/ModelPlan"
PutModelPlanRequest:
type: object
additionalProperties: false
required:
- name
- protocol
properties:
name:
type: string
minLength: 1
templateKind:
allOf:
- $ref: "#/components/schemas/ModelPlanTemplateKind"
nullable: true
protocol:
$ref: "#/components/schemas/ModelPlanProtocol"
apiKey:
type: string
nullable: true
description: Omitted or null keeps the stored credential on update; a value replaces it. Never echoed back.
baseUrl:
type: string
nullable: true
models:
type: array
nullable: true
items:
$ref: "#/components/schemas/ModelPlanModel"
defaultModel:
type: string
nullable: true
enabled:
type: boolean
nullable: true
DuplicateModelPlanRequest:
type: object
additionalProperties: false
properties:
name:
type: string
nullable: true
SetModelPlanEnabledRequest:
type: object
additionalProperties: false
required:
- enabled
properties:
enabled:
type: boolean
x-go-type: "*bool"
DetectModelPlanRequest:
type: object
additionalProperties: false
properties:
planId:
type: string
nullable: true
description: When set, omitted fields fall back to the stored plan and the outcome persists onto it.
templateKind:
allOf:
- $ref: "#/components/schemas/ModelPlanTemplateKind"
nullable: true
description: Required for unsaved drafts whose detection path depends on the access scheme, such as an official provider subscription.
protocol:
allOf:
- $ref: "#/components/schemas/ModelPlanProtocol"
nullable: true
baseUrl:
type: string
nullable: true
apiKey:
type: string
nullable: true
models:
type: array
nullable: true
items:
$ref: "#/components/schemas/ModelPlanModel"
model:
type: string
nullable: true
description: Model id for the inference stage; defaults to the plan default model, then the first known model.
DetectModelPlanResponse:
type: object
additionalProperties: false
required:
- detection
- discoveredModels
properties:
detection:
$ref: "#/components/schemas/ModelPlanDetection"
discoveredModels:
type: array
items:
$ref: "#/components/schemas/ModelPlanModel"
ModelPlanReference:
type: object
additionalProperties: false
required:
- kind
- id
properties:
kind:
type: string
enum:
- agent_target
- model_policy
- workspace_agent
id:
type: string
name:
type: string
nullable: true
role:
type: string
nullable: true
description: How the consumer uses the plan. Agent target bindings report "default"; model usage policies report the bound role (execution, planning, or review).
ModelPlanReferencesResponse:
type: object
additionalProperties: false
required:
- references
properties:
references:
type: array
items:
$ref: "#/components/schemas/ModelPlanReference"
DeleteModelPlanResponse:
type: object
additionalProperties: false
required:
- modelPlanId
properties:
modelPlanId:
type: string
PlanModelRef:
type: object
additionalProperties: false
properties:
modelPlanId:
type: string
nullable: true
model:
type: string
nullable: true
ModelPolicyReviewRule:
type: object
additionalProperties: false
required:
- enabled
properties:
enabled:
type: boolean
trigger:
type: string
enum:
- on_task_complete
nullable: true
maxRunsPerSession:
type: integer
nullable: true
maxTotalTokensPerSession:
type: integer
format: int64
nullable: true
ModelUsagePolicy:
type: object
additionalProperties: false
required:
- id
- workspaceId
- name
- reviewRule
- createdAt
- updatedAt
properties:
id:
type: string
workspaceId:
type: string
name:
type: string
execution:
allOf:
- $ref: "#/components/schemas/PlanModelRef"
nullable: true
planning:
allOf:
- $ref: "#/components/schemas/PlanModelRef"
nullable: true
review:
allOf:
- $ref: "#/components/schemas/PlanModelRef"
nullable: true
reviewRule:
$ref: "#/components/schemas/ModelPolicyReviewRule"
createdAt:
type: string
format: date-time
updatedAt:
type: string
format: date-time
ListModelPoliciesResponse:
type: object
additionalProperties: false
required:
- policies
properties:
policies:
type: array
items:
$ref: "#/components/schemas/ModelUsagePolicy"
PutModelPolicyRequest:
type: object
additionalProperties: false
required:
- name
properties:
name:
type: string
minLength: 1
execution:
allOf:
- $ref: "#/components/schemas/PlanModelRef"
nullable: true
planning:
allOf:
- $ref: "#/components/schemas/PlanModelRef"
nullable: true
review:
allOf:
- $ref: "#/components/schemas/PlanModelRef"
nullable: true
reviewRule:
allOf:
- $ref: "#/components/schemas/ModelPolicyReviewRule"
nullable: true
DeleteModelPolicyResponse:
type: object
additionalProperties: false
required:
- modelPolicyId
properties:
modelPolicyId:
type: string
AgentSessionModelPolicyOverride:
type: object
additionalProperties: false
required:
- workspaceId
- agentSessionId
- disabled
properties:
workspaceId:
type: string
agentSessionId:
type: string
disabled:
type: boolean
modelPolicyId:
type: string
nullable: true
updatedAt:
type: string
format: date-time
nullable: true
SetAgentSessionModelPolicyOverrideRequest:
type: object
additionalProperties: false
required:
- disabled
properties:
disabled:
type: boolean
modelPolicyId:
type: string
nullable: true
AgentSessionAcceptance:
type: object
additionalProperties: false
required:
- workspaceId
- agentSessionId
- state
properties:
workspaceId:
type: string
agentSessionId:
type: string
state:
type: string
enum:
- agent_claimed
- auto_checked
- user_accepted
reviewRunId:
type: string
nullable: true
updatedAt:
type: string
format: date-time
nullable: true
AgentSessionAcceptanceResponse:
type: object
additionalProperties: false
properties:
acceptance:
allOf:
- $ref: "#/components/schemas/AgentSessionAcceptance"
nullable: true
CollaborationRunMode:
type: string
description: Collaboration kind. consult is a daemon-side advisory completion (advice only, no tools, ownership never changes); fork, delegate, and handoff link to a target session created through the session-create path.
enum:
- consult
- fork
- delegate
- handoff
CollaborationRunTriggerSource:
type: string
enum:
- user
- agent
- policy
CollaborationRunStatus:
type: string
enum:
- running
- completed
- failed
- canceled
CollaborationRunAdoption:
type: string
description: Whether the run outcome was taken up by the source task. Fork and handoff runs report not_applicable.
enum:
- pending
- adopted
- rejected
- not_applicable
CollaborationRunUsage:
type: object
additionalProperties: false
required:
- inputTokens
- outputTokens
properties:
inputTokens:
type: integer
format: int64
outputTokens:
type: integer
format: int64
CollaborationRun:
type: object
additionalProperties: false
description: One recorded collaboration run with full accounting. Credentials never appear on run records; consults resolve the plan credential at call time only.
required:
- id
- workspaceId
- mode
- triggerSource
- status
- adoption
- usage
- durationMs
- createdAt
- updatedAt
properties:
id:
type: string
workspaceId:
type: string
mode:
$ref: "#/components/schemas/CollaborationRunMode"
triggerSource:
$ref: "#/components/schemas/CollaborationRunTriggerSource"
triggerReason:
type: string
nullable: true
sourceSessionId:
type: string
nullable: true
targetSessionId:
type: string
nullable: true
targetAgentTargetId:
type: string
nullable: true
modelPlanId:
type: string
nullable: true
model:
type: string
nullable: true
contextScope:
type: string
nullable: true
description: How much source context was carried over, for example none, summary, or full.
prompt:
type: string
nullable: true
description: Stored consult input (context plus question).
resultText:
type: string
nullable: true
description: Consult output text.
failureReason:
type: string
nullable: true
description: Machine-readable failure code such as unauthorized, model_rejected, or canceled.
status:
$ref: "#/components/schemas/CollaborationRunStatus"
adoption:
$ref: "#/components/schemas/CollaborationRunAdoption"
usage:
$ref: "#/components/schemas/CollaborationRunUsage"
startedAt:
type: string
format: date-time
nullable: true
completedAt:
type: string
format: date-time
nullable: true
durationMs:
type: integer
format: int64
createdAt:
type: string
format: date-time
updatedAt:
type: string
format: date-time
ListCollaborationRunsResponse:
type: object
additionalProperties: false
required:
- runs
properties:
runs:
type: array
items:
$ref: "#/components/schemas/CollaborationRun"
CreateCollaborationRunRequest:
type: object
additionalProperties: false
required:
- mode
- triggerSource
properties:
mode:
$ref: "#/components/schemas/CollaborationRunMode"
sourceSessionId:
type: string
nullable: true
description: Required for consult runs; consults are capped per source session.
targetSessionId:
type: string
nullable: true
targetAgentTargetId:
type: string
nullable: true
modelPlanId:
type: string
nullable: true
description: Required for consult runs; the plan must exist and be enabled.
model:
type: string
nullable: true
description: Defaults to the plan default model for consult runs.
question:
type: string
nullable: true
description: Consult question; required for consult runs.
contextText:
type: string
nullable: true
description: Optional prepared context prepended to the consult question.
contextScope:
type: string
nullable: true
triggerSource:
$ref: "#/components/schemas/CollaborationRunTriggerSource"
triggerReason:
type: string
nullable: true
maxTokens:
type: integer
nullable: true
description: Consult completion output token cap.
SetCollaborationRunAdoptionRequest:
type: object
additionalProperties: false
required:
- adoption
properties:
adoption:
$ref: "#/components/schemas/CollaborationRunAdoption"
AgentModelBinding:
type: object
additionalProperties: false
description: Per-workspace default model configuration for one agent target. Empty modelPlanId means the target keeps its provider-native model source.
required:
- workspaceId
- agentTargetId
properties:
workspaceId:
type: string
agentTargetId:
type: string
modelPlanId:
type: string
nullable: true
defaultModel:
type: string
nullable: true
modelPolicyId:
type: string
nullable: true
updatedAt:
type: string
format: date-time
nullable: true
ListAgentModelBindingsResponse:
type: object
additionalProperties: false
required:
- bindings
properties:
bindings:
type: array
items:
$ref: "#/components/schemas/AgentModelBinding"
SetAgentModelBindingRequest:
type: object
additionalProperties: false
properties:
modelPlanId:
type: string
nullable: true
defaultModel:
type: string
nullable: true
description: Must belong to the referenced plan's model list when a plan is set.
modelPolicyId:
type: string
nullable: true
WorkspaceAppInstallUserPhase:
type: string
enum:
- downloading
- installing
- starting
x-enum-varnames:
- WorkspaceAppInstallUserPhaseDownloading
- WorkspaceAppInstallUserPhaseInstalling
- WorkspaceAppInstallUserPhaseStarting
WorkspaceAppInstallProgress:
type: object
additionalProperties: false
required:
- userPhase
- overallPercent
- downloadedBytes
- totalBytes
- indeterminate
properties:
userPhase:
$ref: "#/components/schemas/WorkspaceAppInstallUserPhase"
overallPercent:
type: number
minimum: 0
maximum: 100
downloadedBytes:
type: integer
format: int64
nullable: true
totalBytes:
type: integer
format: int64
nullable: true
indeterminate:
type: boolean
WorkspaceAppRuntimeStatus:
type: string
enum:
- idle
- preparing
- starting
- running
- installed_pending_restart
- failed
- stopping
x-enum-varnames:
- WorkspaceAppRuntimeStatusIdle
- WorkspaceAppRuntimeStatusPreparing
- WorkspaceAppRuntimeStatusStarting
- WorkspaceAppRuntimeStatusRunning
- WorkspaceAppRuntimeStatusInstalledPendingRestart
- WorkspaceAppRuntimeStatusFailed
- WorkspaceAppRuntimeStatusStopping
WorkspaceAppSource:
type: string
enum:
- builtin
- generated
- imported
- local-dev
x-enum-varnames:
- WorkspaceAppSourceBuiltin
- WorkspaceAppSourceGenerated
- WorkspaceAppSourceImported
- WorkspaceAppSourceLocalDev
WorkspaceAppCatalogLoadStatus:
type: string
enum:
- disabled
- loading
- ready
- failed
x-enum-varnames:
- WorkspaceAppCatalogLoadStatusDisabled
- WorkspaceAppCatalogLoadStatusLoading
- WorkspaceAppCatalogLoadStatusReady
- WorkspaceAppCatalogLoadStatusFailed
WorkspaceAppCatalogLoadState:
type: object
additionalProperties: false
required:
- status
- lastError
- updatedAtUnixMs
properties:
status:
$ref: "#/components/schemas/WorkspaceAppCatalogLoadStatus"
lastError:
type: string
nullable: true
updatedAtUnixMs:
type: integer
format: int64
nullable: true
WorkspaceAppCliStatus:
type: string
enum:
- none
- pending
- active
- warning
- error
WorkspaceAppCliIssue:
type: object
additionalProperties: false
required:
- code
- message
properties:
code:
type: string
minLength: 1
message:
type: string
minLength: 1
path:
type: string
nullable: true
WorkspaceAppCliState:
type: object
additionalProperties: false
required:
- status
- active
- issues
properties:
status:
$ref: "#/components/schemas/WorkspaceAppCliStatus"
scope:
type: string
nullable: true
active:
type: boolean
issues:
type: array
items:
$ref: "#/components/schemas/WorkspaceAppCliIssue"
WorkspaceAppReferencesState:
type: object
additionalProperties: false
required:
- listSupported
- searchSupported
properties:
listSupported:
type: boolean
searchSupported:
type: boolean
AppReferenceKind:
type: string
enum:
- file
x-enum-varnames:
- AppReferenceKindFile
AppReferenceListRequest:
type: object
additionalProperties: false
properties:
parentGroupId:
type: string
nullable: true
maxLength: 2048
filterText:
type: string
nullable: true
maxLength: 200
limit:
type: integer
minimum: 1
maximum: 200
cursor:
type: string
nullable: true
maxLength: 2048
kinds:
type: array
items:
$ref: "#/components/schemas/AppReferenceKind"
timeRange:
$ref: "#/components/schemas/AppReferenceListTimeRange"
AppReferenceListTimeRange:
type: object
additionalProperties: false
description: >
Inclusive timestamp range for references. For file references, runtimes
should filter by the file mtimeMs when available.
properties:
fromMs:
type: integer
format: int64
minimum: 0
toMs:
type: integer
format: int64
minimum: 0
InstallWorkspaceAppRequest:
type: object
additionalProperties: false
properties:
restartRunning:
type: boolean
description: Restart the app runtime after installing if it is already running.
AppReferenceListResponse:
type: object
additionalProperties: false
required:
- workspaceId
- appId
- items
- nextCursor
properties:
workspaceId:
type: string
minLength: 1
appId:
type: string
minLength: 1
items:
type: array
items:
$ref: "#/components/schemas/AppReferenceListItem"
nextCursor:
type: string
nullable: true
maxLength: 2048
AppReferenceSearchRequest:
type: object
additionalProperties: false
required:
- query
properties:
query:
type: string
maxLength: 200
limit:
type: integer
minimum: 1
maximum: 200
cursor:
type: string
nullable: true
maxLength: 2048
kinds:
type: array
items:
$ref: "#/components/schemas/AppReferenceKind"
filters:
type: array
description: >-
已选「文件类型筛选分类」id(全局统一口径)。筛选与搜索是同一能力:query
可空、filters 非空时即按类型查。空/缺省 = 不按类型过滤。
items:
type: string
timeRange:
$ref: "#/components/schemas/AppReferenceListTimeRange"
AppReferenceSearchResponse:
type: object
additionalProperties: false
required:
- workspaceId
- appId
- items
- nextCursor
properties:
workspaceId:
type: string
minLength: 1
appId:
type: string
minLength: 1
items:
type: array
description: >
Flat, relevance-ordered list of file references. Search never
returns group items.
items:
$ref: "#/components/schemas/AppReferenceListReferenceItem"
nextCursor:
type: string
nullable: true
maxLength: 2048
AppReferenceListItem:
oneOf:
- $ref: "#/components/schemas/AppReferenceGroup"
- $ref: "#/components/schemas/AppReferenceListReferenceItem"
discriminator:
propertyName: type
mapping:
group: "#/components/schemas/AppReferenceGroup"
reference: "#/components/schemas/AppReferenceListReferenceItem"
AppReferenceGroup:
type: object
additionalProperties: false
required:
- type
- id
- displayName
- referenceCount
properties:
type:
type: string
enum:
- group
x-enum-varnames:
- AppReferenceGroupTypeGroup
id:
type: string
minLength: 1
maxLength: 2048
displayName:
type: string
minLength: 1
maxLength: 160
description:
type: string
nullable: true
maxLength: 500
referenceCount:
type: integer
minimum: 0
AppReferenceListReferenceItem:
type: object
additionalProperties: false
required:
- type
- reference
properties:
type:
type: string
enum:
- reference
x-enum-varnames:
- AppReferenceListReferenceItemTypeReference
reference:
$ref: "#/components/schemas/AppReference"
AppReference:
oneOf:
- $ref: "#/components/schemas/AppFileReference"
discriminator:
propertyName: kind
mapping:
file: "#/components/schemas/AppFileReference"
AppFileReference:
type: object
additionalProperties: false
required:
- kind
- displayName
- description
- path
- sizeBytes
- mtimeMs
- mimeType
- score
properties:
kind:
type: string
enum:
- file
x-enum-varnames:
- AppFileReferenceKindFile
displayName:
type: string
nullable: true
minLength: 1
maxLength: 160
description:
type: string
nullable: true
maxLength: 500
path:
type: string
minLength: 1
description: >
Absolute filesystem path resolved by tuttid from the app runtime
reference location. Workspace app runtimes do not provide this
public API field directly.
sizeBytes:
type: integer
format: int64
nullable: true
minimum: 0
mtimeMs:
type: integer
format: int64
nullable: true
minimum: 0
mimeType:
type: string
nullable: true
maxLength: 128
score:
type: number
nullable: true
minimum: 0
maximum: 1
parentGroupLabel:
type: string
nullable: true
maxLength: 160
description: >
Optional label of the group/project this file belongs to, surfaced
as the result's context subtitle in cross-source search. Apps should
set it on search results so users can tell which project a file is
in; when omitted, Tutti falls back to the app display name.
WorkspaceAppLocalization:
type: object
additionalProperties: false
required:
- locale
- displayName
- description
- tags
properties:
locale:
type: string
minLength: 1
displayName:
type: string
nullable: true
description:
type: string
nullable: true
tags:
type: array
items:
type: string
WorkspaceApp:
type: object
additionalProperties: false
required:
- appId
- displayName
- version
- description
- authors
- createdAtUnixMs
- iconUrl
- availableVersion
- availableIconUrl
- updateAvailable
- installed
- enabled
- status
- stateRevision
- launchUrl
- port
- failureReason
- lastError
- startedAtUnixMs
- updatedAtUnixMs
- source
- exportable
- tags
- localizations
- minimizeBehavior
- windowMinWidth
- windowMinHeight
- cli
- references
properties:
appId:
type: string
minLength: 1
displayName:
type: string
minLength: 1
version:
type: string
minLength: 1
description:
type: string
authors:
type: array
items:
$ref: "#/components/schemas/WorkspaceAppAuthor"
repository:
$ref: "#/components/schemas/WorkspaceAppRepository"
nullable: true
createdAtUnixMs:
type: integer
format: int64
minimum: 1
installProgress:
$ref: "#/components/schemas/WorkspaceAppInstallProgress"
nullable: true
iconUrl:
type: string
nullable: true
availableVersion:
type: string
nullable: true
availableIconUrl:
type: string
nullable: true
updateAvailable:
type: boolean
installed:
type: boolean
enabled:
type: boolean
status:
$ref: "#/components/schemas/WorkspaceAppRuntimeStatus"
stateRevision:
type: integer
format: int64
minimum: 0
launchUrl:
type: string
nullable: true
port:
type: integer
nullable: true
minimum: 1
maximum: 65535
failureReason:
type: string
nullable: true
failurePhase:
type: string
nullable: true
enum:
- downloading
- installing
- starting
- runtime
lastError:
type: string
nullable: true
startedAtUnixMs:
type: integer
format: int64
nullable: true
updatedAtUnixMs:
type: integer
format: int64
nullable: true
source:
$ref: "#/components/schemas/WorkspaceAppSource"
localPackageDir:
type: string
nullable: true
description: Absolute package directory for unpacked local development apps.
exportable:
type: boolean
tags:
type: array
items:
type: string
localizations:
type: array
items:
$ref: "#/components/schemas/WorkspaceAppLocalization"
minimizeBehavior:
$ref: "#/components/schemas/WorkspaceAppMinimizeBehavior"
windowMinWidth:
type: integer
nullable: true
minimum: 280
maximum: 1600
windowMinHeight:
type: integer
nullable: true
minimum: 160
maximum: 1200
cli:
$ref: "#/components/schemas/WorkspaceAppCliState"
references:
$ref: "#/components/schemas/WorkspaceAppReferencesState"
WorkspaceAppMinimizeBehavior:
type: string
enum:
- hibernate
- keep-mounted
WorkspaceAppAuthor:
type: object
additionalProperties: false
required:
- name
properties:
name:
type: string
minLength: 1
url:
type: string
nullable: true
avatarUrl:
type: string
nullable: true
WorkspaceAppRepository:
type: object
additionalProperties: false
required:
- type
- url
properties:
type:
type: string
enum:
- github
url:
type: string
minLength: 1
WorkspaceAppUploadPurpose:
type: string
enum:
- app-asset
PrepareWorkspaceAppUploadRequest:
type: object
additionalProperties: false
required:
- purpose
- name
- mimeType
- sizeBytes
properties:
purpose:
$ref: "#/components/schemas/WorkspaceAppUploadPurpose"
name:
type: string
minLength: 1
mimeType:
type: string
minLength: 1
sizeBytes:
type: integer
format: int64
minimum: 0
PrepareWorkspaceAppUploadResponse:
type: object
additionalProperties: false
required:
- uploadId
- expiresAt
properties:
uploadId:
type: string
minLength: 1
expiresAt:
type: string
format: date-time
CompleteWorkspaceAppUploadResponse:
type: object
additionalProperties: false
required:
- file
properties:
file:
$ref: "#/components/schemas/WorkspaceAppUploadedFile"
WorkspaceAppUploadedFile:
type: object
additionalProperties: false
required:
- path
- name
- mimeType
- sizeBytes
- sha256
properties:
path:
type: string
minLength: 1
name:
type: string
minLength: 1
mimeType:
type: string
minLength: 1
sizeBytes:
type: integer
format: int64
minimum: 0
sha256:
type: string
minLength: 64
maxLength: 64
RollbackWorkspaceAppRequest:
type: object
additionalProperties: false
required:
- version
properties:
version:
type: string
minLength: 1
ImportWorkspaceAppRequest:
type: object
additionalProperties: false
required:
- archivePath
properties:
archivePath:
type: string
minLength: 1
LoadLocalWorkspaceAppRequest:
type: object
additionalProperties: false
required:
- sourceDir
properties:
sourceDir:
type: string
minLength: 1
restartRunning:
type: boolean
description: Restart the app runtime if it is already running.
ReloadLocalWorkspaceAppRequest:
type: object
additionalProperties: false
properties:
restartRunning:
type: boolean
description: Restart the app runtime if it is already running.
ExportWorkspaceAppRequest:
type: object
additionalProperties: false
required:
- destinationPath
properties:
destinationPath:
type: string
minLength: 1
version:
type: string
ReplaceWorkspaceAppIconRequest:
type: object
additionalProperties: false
required:
- sourcePath
properties:
sourcePath:
type: string
minLength: 1
ExportWorkspaceAppResponse:
type: object
additionalProperties: false
required:
- workspaceId
- appId
- version
- archivePath
- artifactSha256
- artifactSizeBytes
properties:
workspaceId:
type: string
minLength: 1
appId:
type: string
minLength: 1
version:
type: string
minLength: 1
archivePath:
type: string
minLength: 1
artifactSha256:
type: string
minLength: 64
maxLength: 64
artifactSizeBytes:
type: integer
format: int64
minimum: 0
DeleteWorkspaceAppResponse:
type: object
additionalProperties: false
required:
- workspaceId
- appId
- deleted
properties:
workspaceId:
type: string
minLength: 1
appId:
type: string
minLength: 1
deleted:
type: boolean
WorkspaceAppFactoryJobStatus:
type: string
enum:
- queued
- generating
- preparing
- validating
- ready
- published
- failed
- canceled
x-enum-varnames:
- WorkspaceAppFactoryJobStatusQueued
- WorkspaceAppFactoryJobStatusGenerating
- WorkspaceAppFactoryJobStatusPreparing
- WorkspaceAppFactoryJobStatusValidating
- WorkspaceAppFactoryJobStatusReady
- WorkspaceAppFactoryJobStatusPublished
- WorkspaceAppFactoryJobStatusFailed
- WorkspaceAppFactoryJobStatusCanceled
WorkspaceAppFactoryJob:
type: object
additionalProperties: false
required:
- jobId
- workspaceId
- status
- prompt
- appId
- displayName
- description
- agentTargetId
- provider
- model
- reasoningEffort
- agentSessionId
- validationResult
- failureReason
- publishedVersion
- createdAtUnixMs
- updatedAtUnixMs
properties:
jobId:
type: string
minLength: 1
workspaceId:
type: string
minLength: 1
status:
$ref: "#/components/schemas/WorkspaceAppFactoryJobStatus"
prompt:
type: string
appId:
type: string
nullable: true
displayName:
type: string
minLength: 1
description:
type: string
nullable: true
agentTargetId:
type: string
nullable: true
provider:
type: string
nullable: true
model:
type: string
nullable: true
reasoningEffort:
type: string
nullable: true
agentSessionId:
type: string
nullable: true
validationResult:
type: object
nullable: true
additionalProperties: true
failureReason:
type: string
nullable: true
publishedVersion:
type: string
nullable: true
createdAtUnixMs:
type: integer
format: int64
updatedAtUnixMs:
type: integer
format: int64
CreateWorkspaceAppFactoryJobRequest:
type: object
additionalProperties: false
required:
- agentTargetId
- clientSubmitId
- displayName
- prompt
properties:
prompt:
type: string
minLength: 1
displayName:
type: string
minLength: 1
description:
type: string
agentTargetId:
type: string
minLength: 1
clientSubmitId:
type: string
minLength: 1
provider:
type: string
deprecated: true
model:
type: string
permissionModeId:
type: string
reasoningEffort:
type: string
FixWorkspaceAppFactoryJobRequest:
type: object
additionalProperties: false
required:
- prompt
properties:
prompt:
type: string
minLength: 1
WorkspaceAppFactoryJobListResponse:
type: object
additionalProperties: false
required:
- workspaceId
- jobs
properties:
workspaceId:
type: string
minLength: 1
jobs:
type: array
items:
$ref: "#/components/schemas/WorkspaceAppFactoryJob"
WorkspaceAppFactoryJobResponse:
type: object
additionalProperties: false
required:
- workspaceId
- job
properties:
workspaceId:
type: string
minLength: 1
job:
$ref: "#/components/schemas/WorkspaceAppFactoryJob"
PublishWorkspaceAppFactoryJobResponse:
type: object
additionalProperties: false
required:
- workspaceId
- job
- app
properties:
workspaceId:
type: string
minLength: 1
job:
$ref: "#/components/schemas/WorkspaceAppFactoryJob"
app:
$ref: "#/components/schemas/WorkspaceApp"
WorkspaceAppListResponse:
type: object
additionalProperties: false
required:
- workspaceId
- catalogStatus
- apps
properties:
workspaceId:
type: string
minLength: 1
catalogStatus:
$ref: "#/components/schemas/WorkspaceAppCatalogLoadState"
apps:
type: array
items:
$ref: "#/components/schemas/WorkspaceApp"
WorkspaceAppResponse:
type: object
additionalProperties: false
required:
- workspaceId
- app
properties:
workspaceId:
type: string
minLength: 1
app:
$ref: "#/components/schemas/WorkspaceApp"
WorkspaceTerminalRuntimeKind:
type: string
enum:
- local
- vm
- remote
WorkspaceTerminalStatus:
type: string
enum:
- created
- starting
- running
- detached
- exited
- failed
x-enum-varnames:
- WorkspaceTerminalStatusCreated
- WorkspaceTerminalStatusStarting
- WorkspaceTerminalStatusRunning
- WorkspaceTerminalStatusDetached
- WorkspaceTerminalStatusExited
- WorkspaceTerminalStatusFailed
WorkspaceTerminalCloseGuardReason:
type: string
enum:
- foreground-process
- not-running
- running
- unknown
WorkspaceTerminalSession:
type: object
additionalProperties: false
required:
- id
- workspaceId
- title
- cwd
- profileId
- runtimeKind
- status
- cols
- rows
- createdAt
- updatedAt
- endedAt
- lastError
properties:
id:
type: string
minLength: 1
workspaceId:
type: string
minLength: 1
title:
type: string
cwd:
type: string
nullable: true
profileId:
type: string
nullable: true
runtimeKind:
$ref: "#/components/schemas/WorkspaceTerminalRuntimeKind"
status:
$ref: "#/components/schemas/WorkspaceTerminalStatus"
cols:
type: integer
minimum: 1
rows:
type: integer
minimum: 1
createdAt:
type: string
format: date-time
updatedAt:
type: string
format: date-time
nullable: true
endedAt:
type: string
format: date-time
nullable: true
lastError:
type: string
nullable: true
WorkspaceTerminalResponse:
type: object
additionalProperties: false
required:
- terminal
properties:
terminal:
$ref: "#/components/schemas/WorkspaceTerminalSession"
WorkspaceTerminalListResponse:
type: object
additionalProperties: false
required:
- workspaceId
- terminals
properties:
workspaceId:
type: string
minLength: 1
terminals:
type: array
items:
$ref: "#/components/schemas/WorkspaceTerminalSession"
CreateWorkspaceTerminalRequest:
type: object
additionalProperties: false
properties:
cwd:
type: string
nullable: true
profileId:
type: string
nullable: true
initialInput:
type: string
nullable: true
cols:
type: integer
minimum: 1
rows:
type: integer
minimum: 1
ResizeWorkspaceTerminalRequest:
type: object
additionalProperties: false
required:
- cols
- rows
properties:
cols:
type: integer
minimum: 1
rows:
type: integer
minimum: 1
WorkspaceTerminalSnapshot:
type: object
additionalProperties: false
required:
- data
properties:
data:
type: string
fromSeq:
type: integer
format: int64
minimum: 0
toSeq:
type: integer
format: int64
minimum: 0
truncated:
type: boolean
updatedAt:
type: integer
format: int64
minimum: 0
WorkspaceTerminalSnapshotResponse:
type: object
additionalProperties: false
required:
- snapshot
properties:
snapshot:
$ref: "#/components/schemas/WorkspaceTerminalSnapshot"
WorkspaceTerminalCloseGuard:
type: object
additionalProperties: false
required:
- status
- reason
- requiresConfirmation
properties:
status:
$ref: "#/components/schemas/WorkspaceTerminalStatus"
reason:
$ref: "#/components/schemas/WorkspaceTerminalCloseGuardReason"
requiresConfirmation:
type: boolean
leaderCommand:
type: string
nullable: true
WorkspaceTerminalCloseGuardResponse:
type: object
additionalProperties: false
required:
- guard
properties:
guard:
$ref: "#/components/schemas/WorkspaceTerminalCloseGuard"
DeleteWorkspaceAgentResponse:
type: object
additionalProperties: false
required:
- workspaceAgentId
properties:
workspaceAgentId:
type: string
ListWorkspaceAgentsResponse:
type: object
additionalProperties: false
required:
- agents
properties:
agents:
type: array
items:
$ref: "#/components/schemas/WorkspaceAgent"
PutWorkspaceAgentRequest:
type: object
additionalProperties: false
required:
- name
- description
- harnessAgentTargetId
- instructions
- callConditions
- skills
- tools
properties:
name:
type: string
minLength: 1
maxLength: 120
description:
description: Short human-readable description shown with the Agent in directories and cards.
type: string
maxLength: 1000
harnessAgentTargetId:
type: string
minLength: 1
modelPlanId:
type: string
nullable: true
defaultModel:
type: string
nullable: true
modelFallbacks:
type: array
description: Ordered fallback Plan/model references. Omit or pass an empty array to disable failover.
items:
$ref: "#/components/schemas/WorkspaceAgentModelRef"
instructions:
type: string
maxLength: 100000
callConditions:
type: array
items:
type: string
minLength: 1
capabilitiesExplicit:
type: boolean
description: >-
When true, Skills and tools are an explicit allowlist, including
the ability to select none. Omit on update to preserve the stored
mode; new Agents default to automatic compatible capabilities.
skills:
type: array
items:
type: string
minLength: 1
tools:
type: array
items:
type: string
minLength: 1
WorkspaceAgent:
type: object
additionalProperties: false
description: A selectable, workspace-scoped Agent made from one Harness target plus an optional model access plan and Agent-specific behavior configuration.
required:
- id
- agentTargetId
- workspaceId
- name
- description
- harness
- modelFallbacks
- instructions
- callConditions
- capabilitiesExplicit
- skills
- tools
- source
- revision
- createdAt
- updatedAt
properties:
id:
type: string
minLength: 1
description: Opaque Agent option id. New ids use the workspace-agent prefix and may be passed to workspace Agent session APIs.
agentTargetId:
type: string
minLength: 1
description: Compatibility alias of id for AgentGUI and session creation surfaces.
workspaceId:
type: string
minLength: 1
name:
type: string
minLength: 1
description:
description: Short human-readable description shown with the Agent in directories and cards.
type: string
harness:
$ref: "#/components/schemas/WorkspaceAgentHarness"
modelPlanId:
type: string
nullable: true
defaultModel:
type: string
nullable: true
modelFallbacks:
type: array
description: Dormant contract field without an editor surface. Ordered, explicit fallback chain used only when starting a new session and the primary Plan/model is not usable. Credentials remain daemon-owned.
items:
$ref: "#/components/schemas/WorkspaceAgentModelRef"
instructions:
type: string
callConditions:
type: array
description: Explicit, user-editable conditions that explain when another Agent or user should invoke this Agent.
items:
type: string
minLength: 1
capabilitiesExplicit:
type: boolean
description: >-
Dormant contract field without an editor surface. False keeps
Skills and tools synchronized with all capabilities compatible
with the selected Harness. True makes the Skills and tools arrays
an explicit allowlist; empty arrays then mean none.
skills:
type: array
items:
type: string
minLength: 1
tools:
type: array
items:
type: string
minLength: 1
source:
$ref: "#/components/schemas/WorkspaceAgentSource"
revision:
type: integer
format: int64
minimum: 1
createdAt:
type: string
format: date-time
updatedAt:
type: string
format: date-time
WorkspaceAgentHarness:
type: object
additionalProperties: false
required:
- agentTargetId
- available
properties:
agentTargetId:
type: string
minLength: 1
available:
type: boolean
description: False when the referenced Harness target no longer exists. The Agent remains listable so it can be repaired or deleted.
provider:
allOf:
- $ref: "#/components/schemas/AgentTargetProvider"
nullable: true
name:
type: string
nullable: true
iconKey:
type: string
nullable: true
enabled:
type: boolean
nullable: true
WorkspaceAgentModelRef:
type: object
additionalProperties: false
required:
- modelPlanId
properties:
modelPlanId:
type: string
minLength: 1
model:
type: string
nullable: true
WorkspaceAgentSource:
type: string
description: Origin of the workspace Agent configuration. legacy_binding rows were migrated from the former fixed-target binding model.
enum:
- user
- legacy_binding
WorkspaceAgentProvider:
type: string
minLength: 1
maxLength: 128
pattern: "^[a-z][a-z0-9._:-]*$"
AgentSessionComposerSettings:
type: object
additionalProperties: false
properties:
codexSaverMode:
type: boolean
nullable: true
description: Enables the Codex-specific saver subagent mode
rtkSaverMode:
type: boolean
nullable: true
description: Enables provider-neutral RTK saver mode
model:
type: string
nullable: true
permissionModeId:
type: string
nullable: true
planMode:
type: boolean
nullable: true
browserUse:
type: boolean
nullable: true
reasoningEffort:
type: string
nullable: true
speed:
type: string
nullable: true
PermissionModeSemantic:
type: string
enum:
- ask-before-write
- accept-edits
- locked-down
- auto
- full-access
- unconfigurable
PermissionModeOption:
type: object
additionalProperties: false
required:
- id
- label
- semantic
properties:
id:
type: string
minLength: 1
label:
type: string
minLength: 1
description:
type: string
semantic:
$ref: "#/components/schemas/PermissionModeSemantic"
PermissionConfig:
type: object
additionalProperties: false
required:
- configurable
- modes
properties:
configurable:
type: boolean
defaultValue:
type: string
modes:
type: array
items:
$ref: "#/components/schemas/PermissionModeOption"
AgentProviderComposerConfigOptionValue:
type: object
additionalProperties: false
required:
- id
- label
- value
properties:
id:
type: string
minLength: 1
value:
type: string
minLength: 1
label:
type: string
minLength: 1
description:
type: string
consumptionMultiplier:
type: string
description: >-
Provider-reported credit consumption multiplier without the
display suffix. Runtime adapters normalize provider wire data into
this typed field; clients must not infer it from description.
supportsImageInput:
type: boolean
requested:
type: boolean
description: >-
True when the entry mirrors the requested/current selection
instead of the provider catalog (warm-catalog append of the
requested model, selected-model bootstrap echo). Clients keep
such entries selectable but must not treat them as proof the
provider can run the model; create validation runs against the
raw catalog only.
AgentProviderComposerConfig:
type: object
additionalProperties: false
required:
- configurable
- options
properties:
configurable:
type: boolean
currentValue:
type: string
effectiveValue:
type: string
description: >-
Provider-resolved runtime value. This may differ from currentValue
when the current selection inherits a provider default.
defaultValue:
type: string
options:
type: array
items:
$ref: "#/components/schemas/AgentProviderComposerConfigOptionValue"
GetAgentProviderComposerOptionsRequest:
type: object
additionalProperties: false
properties:
agentSessionId:
type: string
description: >-
Active Agent session whose isolated provider home contributes
session-created Skills to the composer catalog.
section:
type: string
enum:
- full
- core
- capabilities
- connectors
default: full
description: >-
Selects the independently loadable composer section. Core contains
model, reasoning, speed, permission, and runtime settings;
capabilities contains skills and capability catalog data;
connectors contains only the local Connector Market projection.
Full is retained for callers that need the combined legacy response.
waitForFreshModelCatalog:
type: boolean
description: >-
Waits for an authoritative model catalog when the cached result is
stale. Use only for an explicit model-picker request; ordinary
composer loads should render the last successful catalog first.
agentTargetId:
type: string
description:
Agent target whose provider and runtime context the composer options
resolve against. Optional; when omitted the provider path parameter
is used directly.
cwd:
type: string
workspaceId:
type: string
description: Workspace used for Claude Code live model discovery.
locale:
$ref: "#/components/schemas/DesktopLocale"
settings:
$ref: "#/components/schemas/AgentSessionComposerSettings"
GetWorkspaceAppFactoryAgentTargetComposerOptionsRequest:
type: object
additionalProperties: false
properties:
section:
type: string
enum:
- full
- core
- capabilities
- connectors
default: full
description: Independently loadable composer section.
locale:
$ref: "#/components/schemas/DesktopLocale"
settings:
$ref: "#/components/schemas/AgentSessionComposerSettings"
AgentProviderComposerOptionsResponse:
type: object
additionalProperties: false
required:
- provider
- modelConfig
- permissionConfig
- reasoningConfig
- reasoningOptionsByModel
- effectiveSettings
- runtimeContext
- commands
- skills
- capabilityCatalog
- behavior
properties:
codexSaverModeSupported:
type: boolean
description: Whether this resolved provider target supports the Codex-specific saver subagent mode
rtkSaverModeSupported:
type: boolean
description: Whether this resolved provider target supports provider-neutral, session-scoped RTK saver mode
provider:
$ref: "#/components/schemas/WorkspaceAgentProvider"
modelConfig:
$ref: "#/components/schemas/AgentProviderComposerConfig"
permissionConfig:
$ref: "#/components/schemas/PermissionConfig"
reasoningConfig:
$ref: "#/components/schemas/AgentProviderComposerConfig"
reasoningOptionsByModel:
$ref: "#/components/schemas/AgentProviderComposerReasoningOptionsByModel"
speedConfig:
$ref: "#/components/schemas/AgentProviderComposerConfig"
effectiveSettings:
$ref: "#/components/schemas/AgentSessionComposerSettings"
runtimeContext:
type: object
additionalProperties: true
description: >-
Opaque provider runtime metadata retained for legacy and diagnostic
consumers. Typed composer fields are authoritative; new composer
capabilities must not be added to this object.
commands:
type: array
description: Commands advertised by the resolved runtime session.
items:
$ref: "#/components/schemas/AgentProviderComposerCommandOption"
capabilities:
$ref: "#/components/schemas/WorkspaceAgentCapabilities"
description: >-
Typed provider capabilities available before a session exists.
Once a session is active, WorkspaceAgentSession.capabilities is
authoritative. Older daemons may omit this field during a rolling
desktop upgrade.
skills:
type: array
items:
$ref: "#/components/schemas/AgentProviderSkillOption"
capabilityCatalog:
type: array
items:
$ref: "#/components/schemas/AgentProviderCapabilityOption"
behavior:
$ref: "#/components/schemas/AgentProviderComposerBehavior"
slashCommandPolicy:
$ref: "#/components/schemas/AgentSlashCommandPolicy"
AgentProviderComposerCommandOption:
type: object
additionalProperties: false
required:
- name
properties:
name:
type: string
description:
type: string
inputHint:
type: string
AgentProviderComposerReasoningOptionsByModel:
type: object
additionalProperties:
$ref: "#/components/schemas/AgentProviderComposerReasoningProfile"
AgentProviderComposerReasoningProfile:
type: object
additionalProperties: false
required:
- options
properties:
defaultValue:
type: string
nullable: true
options:
type: array
items:
$ref: "#/components/schemas/AgentProviderComposerConfigOptionValue"
AgentProviderComposerBehavior:
type: object
additionalProperties: false
required:
- collapseModelOptionsToLatest
- modelOptionsAuthoritative
- refreshModelOptionsAfterSettings
- prewarmDraftSession
- planModeExclusiveWithPermissionMode
properties:
collapseModelOptionsToLatest:
type: boolean
modelOptionsAuthoritative:
type: boolean
refreshModelOptionsAfterSettings:
type: boolean
prewarmDraftSession:
type: boolean
planModeExclusiveWithPermissionMode:
type: boolean
AgentSlashCommandEffect:
type: string
enum:
- submitImmediate
- showReviewPicker
- activateGoalMode
- togglePlanMode
- showStatus
- toggleSpeed
AgentSlashCommandEffectDescriptor:
type: object
additionalProperties: false
required:
- command
- effect
properties:
command:
type: string
effect:
$ref: "#/components/schemas/AgentSlashCommandEffect"
AgentSlashCommandPolicy:
type: object
additionalProperties: false
required:
- fallbackCommands
- commandEffects
properties:
fallbackCommands:
type: array
items:
type: string
commandEffects:
type: array
items:
$ref: "#/components/schemas/AgentSlashCommandEffectDescriptor"
commandCatalogAuthoritative:
type: boolean
AgentProviderSkillOption:
type: object
additionalProperties: false
required:
- name
- trigger
- sourceKind
properties:
name:
type: string
trigger:
type: string
sourceKind:
type: string
enum:
- project
- personal
- bundled
- plugin
- system
- tutti-injected
description:
type: string
pluginName:
type: string
path:
type: string
AgentProviderCapabilityOption:
type: object
additionalProperties: false
required:
- id
- kind
- name
- label
- status
- invocation
properties:
id:
type: string
minLength: 1
kind:
type: string
enum:
- skill
- plugin
- connector
- mcpServer
- mcpTool
name:
type: string
minLength: 1
label:
type: string
minLength: 1
description:
type: string
iconUrl:
type: string
installedAtUnixMs:
type: integer
format: int64
minimum: 1
status:
type: string
enum:
- available
- disabled
- authRequired
- setupRequired
- unsupported
source:
type: string
pluginName:
type: string
serverName:
type: string
toolName:
type: string
trigger:
type: string
path:
type: string
invocation:
type: string
enum:
- promptItem
- textTrigger
- none
AgentProviderAvailabilityStatus:
type: string
enum:
- ready
- not_installed
- auth_required
- unsupported
- unknown
AgentProviderAuthStatus:
type: string
enum:
- authenticated
- configured
- required
- unknown
AgentProviderActionKind:
type: string
enum:
- daemon_action
- terminal_command
- refresh
AgentProviderActionID:
type: string
enum:
- install
- update
- login
- refresh
AgentProviderUpdateCapability:
type: string
enum:
- supported
- unsupported
AgentProviderUpdateSource:
type: string
enum:
- npm
AgentProviderProbeStatus:
type: string
enum:
- ready
- failed
- skipped
AgentProviderActionRunStatus:
type: string
enum:
- completed
- failed
AgentProviderActiveActionPhase:
type: string
enum:
- detect
- install
- update
- repair
- verify
- done
- error
AgentProviderActiveActionStepStatus:
type: string
enum:
- pending
- running
- ok
- error
- skipped
AgentProviderActiveActionStep:
type: object
additionalProperties: false
required:
- id
- label
- status
- detail
properties:
id:
type: string
label:
type: string
nullable: true
status:
$ref: "#/components/schemas/AgentProviderActiveActionStepStatus"
detail:
type: string
nullable: true
AgentProviderActiveActionError:
type: object
additionalProperties: false
required:
- code
- message
properties:
code:
type: string
nullable: true
message:
type: string
nullable: true
AgentProviderActiveAction:
type: object
additionalProperties: false
required:
- phase
- steps
- registry
- log
- error
properties:
phase:
$ref: "#/components/schemas/AgentProviderActiveActionPhase"
steps:
type: array
items:
$ref: "#/components/schemas/AgentProviderActiveActionStep"
registry:
type: string
nullable: true
log:
type: array
items:
type: string
error:
allOf:
- $ref: "#/components/schemas/AgentProviderActiveActionError"
nullable: true
AgentProviderProbeResponse:
type: object
additionalProperties: false
required:
- provider
- status
- checkedAt
- command
properties:
provider:
$ref: "#/components/schemas/WorkspaceAgentProvider"
status:
$ref: "#/components/schemas/AgentProviderProbeStatus"
checkedAt:
type: string
format: date-time
reasonCode:
type: string
nullable: true
message:
type: string
nullable: true
binaryPath:
type: string
nullable: true
command:
type: array
items:
type: string
AgentProviderActionRunResponse:
type: object
additionalProperties: false
required:
- provider
- actionID
- status
- completedAt
properties:
provider:
$ref: "#/components/schemas/WorkspaceAgentProvider"
actionID:
$ref: "#/components/schemas/AgentProviderActionID"
status:
$ref: "#/components/schemas/AgentProviderActionRunStatus"
completedAt:
type: string
format: date-time
reasonCode:
type: string
nullable: true
message:
type: string
nullable: true
command:
type: string
nullable: true
exitCode:
type: integer
nullable: true
stdout:
type: string
nullable: true
stderr:
type: string
nullable: true
probe:
allOf:
- $ref: "#/components/schemas/AgentProviderProbeResponse"
nullable: true
AgentProviderTerminalCommand:
type: object
additionalProperties: false
required:
- input
properties:
input:
type: string
minLength: 1
cwd:
type: string
nullable: true
AgentProviderAction:
type: object
additionalProperties: false
required:
- id
- kind
properties:
id:
$ref: "#/components/schemas/AgentProviderActionID"
kind:
$ref: "#/components/schemas/AgentProviderActionKind"
command:
allOf:
- $ref: "#/components/schemas/AgentProviderTerminalCommand"
nullable: true
AgentProviderAvailability:
type: object
additionalProperties: false
required:
- status
properties:
status:
$ref: "#/components/schemas/AgentProviderAvailabilityStatus"
reasonCode:
type: string
nullable: true
checkedAt:
type: string
format: date-time
nullable: true
AgentProviderCliStatus:
type: object
additionalProperties: false
required:
- installed
properties:
installed:
type: boolean
binaryPath:
type: string
nullable: true
version:
type: string
nullable: true
minVersion:
type: string
nullable: true
description: >-
The lowest CLI version this provider supports, when it enforces a
floor. Lets the UI show "current X, requires >= Y" without
duplicating the backend's version gate.
AgentProviderAdapterStatus:
type: object
additionalProperties: false
required:
- installed
- command
properties:
installed:
type: boolean
binaryPath:
type: string
nullable: true
command:
type: array
items:
type: string
version:
type: string
nullable: true
description: >-
The installed ACP adapter package version, when resolvable. Lets the
UI and telemetry show the actual adapter version (not just a path).
requiredVersion:
type: string
nullable: true
description: >-
The minimum adapter package version this provider accepts. With
version, lets the UI show "current X, requires >= Y" for an adapter
version mismatch and makes the drift visible in telemetry.
AgentProviderAuthInfo:
type: object
additionalProperties: false
required:
- status
properties:
status:
$ref: "#/components/schemas/AgentProviderAuthStatus"
accountLabel:
type: string
nullable: true
authMethod:
type: string
nullable: true
description: The authentication method reported by the provider CLI (e.g. oauth, apiKey).
AgentProviderUpdateStatus:
type: object
additionalProperties: false
required:
- capability
- source
- currentVersion
- latestVersion
- updateAvailable
- unsupportedReason
- lastCheckedAt
- reasonCode
properties:
capability:
$ref: "#/components/schemas/AgentProviderUpdateCapability"
source:
allOf:
- $ref: "#/components/schemas/AgentProviderUpdateSource"
nullable: true
currentVersion:
type: string
nullable: true
latestVersion:
type: string
nullable: true
updateAvailable:
type: boolean
nullable: true
description: >-
Null when discovery has not run, failed, or the current/latest
versions cannot be compared safely.
unsupportedReason:
type: string
nullable: true
description: Stable reason why this provider cannot be updated by tuttid.
lastCheckedAt:
type: string
format: date-time
nullable: true
reasonCode:
type: string
nullable: true
description: Non-fatal discovery or version-comparison result code.
AgentProviderStatus:
type: object
additionalProperties: false
required:
- provider
- availability
- cli
- adapter
- auth
- update
- actions
properties:
provider:
$ref: "#/components/schemas/WorkspaceAgentProvider"
availability:
$ref: "#/components/schemas/AgentProviderAvailability"
cli:
$ref: "#/components/schemas/AgentProviderCliStatus"
adapter:
$ref: "#/components/schemas/AgentProviderAdapterStatus"
auth:
$ref: "#/components/schemas/AgentProviderAuthInfo"
update:
$ref: "#/components/schemas/AgentProviderUpdateStatus"
actions:
type: array
items:
$ref: "#/components/schemas/AgentProviderAction"
network:
allOf:
- $ref: "#/components/schemas/AgentProviderNetworkStatus"
nullable: true
activeAction:
allOf:
- $ref: "#/components/schemas/AgentProviderActiveAction"
nullable: true
AgentProviderNetworkStatus:
type: object
additionalProperties: false
required:
- registry
properties:
registry:
$ref: "#/components/schemas/AgentProviderNetworkEndpoint"
providerApi:
allOf:
- $ref: "#/components/schemas/AgentProviderNetworkEndpoint"
nullable: true
proxy:
allOf:
- $ref: "#/components/schemas/AgentProviderNetworkProxy"
nullable: true
AgentProviderNetworkProxy:
type: object
additionalProperties: false
required:
- configured
- reachable
properties:
configured:
type: boolean
url:
type: string
nullable: true
reachable:
type: boolean
reasonCode:
type: string
nullable: true
AgentProviderNetworkEndpoint:
type: object
additionalProperties: false
required:
- reachable
properties:
reachable:
type: boolean
endpoint:
type: string
nullable: true
reasonCode:
type: string
nullable: true
AgentProviderStatusListResponse:
type: object
additionalProperties: false
required:
- capturedAt
- defaultProvider
- providers
properties:
capturedAt:
type: string
format: date-time
defaultProvider:
$ref: "#/components/schemas/WorkspaceAgentProvider"
providers:
type: array
items:
$ref: "#/components/schemas/AgentProviderStatus"
AgentProviderRuntimeCandidateState:
type: string
enum:
- ready
- unsupported
- failed
x-enum-varnames:
- AgentProviderRuntimeCandidateStateReady
- AgentProviderRuntimeCandidateStateUnsupported
- AgentProviderRuntimeCandidateStateFailed
AgentProviderRuntimeSelectionState:
type: string
enum:
- unavailable
- implicit_unique
- selection_required
- selected
- stale
x-enum-varnames:
- AgentProviderRuntimeSelectionStateUnavailable
- AgentProviderRuntimeSelectionStateImplicitUnique
- AgentProviderRuntimeSelectionStateSelectionRequired
- AgentProviderRuntimeSelectionStateSelected
- AgentProviderRuntimeSelectionStateStale
AgentProviderRuntimeCandidate:
type: object
additionalProperties: false
required:
- id
- launcherPath
- packageRoot
- sources
- version
- state
- reasonCode
- appServerReady
- packageLayoutOk
properties:
id:
type: string
minLength: 1
description: Opaque identifier valid only for the enclosing catalog revision
launcherPath:
type: string
minLength: 1
packageRoot:
type: string
nullable: true
sources:
type: array
items:
type: string
enum:
- path
- bun_global
- pnpm_global
- npm_global
- homebrew
x-enum-varnames:
- AgentProviderRuntimeCandidateSourcePath
- AgentProviderRuntimeCandidateSourceBunGlobal
- AgentProviderRuntimeCandidateSourcePnpmGlobal
- AgentProviderRuntimeCandidateSourceNpmGlobal
- AgentProviderRuntimeCandidateSourceHomebrew
version:
type: string
nullable: true
state:
$ref: "#/components/schemas/AgentProviderRuntimeCandidateState"
reasonCode:
type: string
nullable: true
appServerReady:
type: boolean
packageLayoutOk:
type: boolean
AgentProviderRuntimeSelection:
type: object
additionalProperties: false
required:
- state
- candidateId
- launcherPath
- updatedAt
properties:
state:
$ref: "#/components/schemas/AgentProviderRuntimeSelectionState"
candidateId:
type: string
nullable: true
launcherPath:
type: string
nullable: true
updatedAt:
type: string
format: date-time
nullable: true
AgentProviderRuntimeCatalogResponse:
type: object
additionalProperties: false
required:
- capturedAt
- provider
- revision
- selection
- candidates
properties:
capturedAt:
type: string
format: date-time
provider:
$ref: "#/components/schemas/WorkspaceAgentProvider"
revision:
type: string
minLength: 1
selection:
$ref: "#/components/schemas/AgentProviderRuntimeSelection"
candidates:
type: array
items:
$ref: "#/components/schemas/AgentProviderRuntimeCandidate"
SetAgentProviderRuntimeSelectionRequest:
type: object
additionalProperties: false
required:
- candidateId
- revision
properties:
candidateId:
type: string
minLength: 1
description: Opaque identifier from the current runtime candidate catalog
revision:
type: string
minLength: 1
description: Must match the catalog revision that supplied candidateId
TuttiModeActivationStatus:
type: string
enum:
- active
- inactive
TuttiModeActivationSource:
type: string
description: User-visible interaction that created this activation revision.
enum:
- slash_command
- badge_remove
x-enum-varnames:
- TuttiModeActivationSourceSlashCommand
- TuttiModeActivationSourceBadgeRemove
TuttiModeActivationRevision:
type: object
additionalProperties: false
required:
- id
- activationId
- revision
- status
- source
- orchestrationIntensity
- createdAtUnixMs
properties:
id:
type: string
format: uuid
activationId:
type: string
format: uuid
revision:
type: integer
format: int64
minimum: 1
status:
$ref: "#/components/schemas/TuttiModeActivationStatus"
source:
$ref: "#/components/schemas/TuttiModeActivationSource"
effect:
type: integer
nullable: true
minimum: 0
maximum: 100
description: >-
Session-scoped outcome-quality preference captured with this
activation revision. Higher values favor stronger models and
stronger task verification.
speed:
type: integer
nullable: true
minimum: 0
maximum: 100
description: >-
Session-scoped completion-speed preference captured with this
activation revision. Higher values favor faster suitable models.
orchestrationIntensity:
type: integer
minimum: 0
maximum: 100
deprecated: true
description: Legacy single-axis alias of effect. New clients use effect and speed.
createdAtUnixMs:
type: integer
format: int64
minimum: 0
TuttiModeActivation:
type: object
additionalProperties: false
required:
- id
- workspaceId
- agentSessionId
- status
- currentRevision
- createdAtUnixMs
- updatedAtUnixMs
properties:
id:
type: string
format: uuid
workspaceId:
type: string
minLength: 1
agentSessionId:
type: string
minLength: 1
status:
$ref: "#/components/schemas/TuttiModeActivationStatus"
currentRevision:
$ref: "#/components/schemas/TuttiModeActivationRevision"
createdAtUnixMs:
type: integer
format: int64
minimum: 0
updatedAtUnixMs:
type: integer
format: int64
minimum: 0
TuttiModeActivationIntent:
type: object
additionalProperties: false
required:
- status
- source
properties:
status:
$ref: "#/components/schemas/TuttiModeActivationStatus"
source:
$ref: "#/components/schemas/TuttiModeActivationSource"
effect:
type: integer
nullable: true
minimum: 0
maximum: 100
description: >-
Optional outcome-quality preference carried with the initial
activation. Omitted uses the daemon default.
speed:
type: integer
nullable: true
minimum: 0
maximum: 100
description: >-
Optional completion-speed preference carried with the initial
activation. Omitted uses the daemon default.
orchestrationIntensity:
type: integer
nullable: true
minimum: 0
maximum: 100
deprecated: true
description: >-
Legacy single-axis alias of effect. Ignored when effect is present.
TuttiModeActivationResponse:
type: object
additionalProperties: false
required:
- activation
properties:
activation:
allOf:
- $ref: "#/components/schemas/TuttiModeActivation"
nullable: true
description: Null until the session has its first Tutti mode activation revision.
UpdateTuttiModeActivationRequest:
type: object
additionalProperties: false
required:
- status
- source
properties:
status:
$ref: "#/components/schemas/TuttiModeActivationStatus"
source:
$ref: "#/components/schemas/TuttiModeActivationSource"
effect:
type: integer
nullable: true
minimum: 0
maximum: 100
description: >-
Optional outcome-quality preference persisted with the appended
activation revision. Omitted keeps the current value, or the
daemon default for the first revision.
speed:
type: integer
nullable: true
minimum: 0
maximum: 100
description: >-
Optional completion-speed preference persisted with the appended
activation revision. Omitted keeps the current value, or the
daemon default for the first revision.
orchestrationIntensity:
type: integer
nullable: true
minimum: 0
maximum: 100
deprecated: true
description: >-
Legacy single-axis alias of effect. Ignored when effect is present.
expectedRevision:
type: integer
format: int64
nullable: true
minimum: 0
description: Optional optimistic-concurrency guard. Zero means no activation revision exists yet.
UpdateTuttiModeActivationResponse:
type: object
additionalProperties: false
required:
- activation
- changed
properties:
activation:
allOf:
- $ref: "#/components/schemas/TuttiModeActivation"
nullable: true
changed:
type: boolean
description: False for an idempotent update that did not create a new revision.
WorkspaceAgentSessionKind:
type: string
description: >-
Root sessions are user-visible conversations. Child sessions are
provider-native agents reached through their immutable parent fields.
enum:
- root
- child
WorkspaceAgentMessageCursor:
type: integer
format: int64
minimum: 0
maximum: 9007199254740991
description: >-
Per-session durable message change cursor. The upper bound preserves
exact integer representation in JavaScript clients.
WorkspaceAgentSessionDetailProjection:
type: string
enum:
- full
- messageHydration
description: >-
Projection applied to a Session detail response. messageHydration
preserves hierarchy and message cursors but leaves provider-backed
lifecycle capabilities unresolved.
WorkspaceAgentSessionLifecycleCapabilities:
type: object
additionalProperties: false
required:
- fork
- forkThroughTurn
properties:
fork:
type: boolean
description: Whether this exact session can fork its latest settled state.
forkThroughTurn:
type: boolean
description: Whether this exact session can fork through a provider-bound canonical Turn.
WorkspaceAgentSessionForkThroughTurnPoint:
type: object
additionalProperties: false
required:
- type
- turnId
properties:
type:
type: string
enum:
- throughTurn
turnId:
type: string
minLength: 1
description: Exact canonical Turn id included as the final Turn in the fork.
WorkspaceAgentSessionForkPoint:
oneOf:
- $ref: "#/components/schemas/WorkspaceAgentSessionForkThroughTurnPoint"
discriminator:
propertyName: type
mapping:
throughTurn: "#/components/schemas/WorkspaceAgentSessionForkThroughTurnPoint"
WorkspaceAgentSessionForkLineage:
type: object
additionalProperties: false
required:
- sourceAgentSessionId
- sourceTurnId
- targetTurnId
- operationId
- forkedAtUnixMs
properties:
sourceAgentSessionId:
type: string
minLength: 1
sourceTurnId:
type: string
minLength: 1
description: Inclusive canonical Turn boundary in the source Session.
targetTurnId:
type: string
minLength: 1
description: Canonical Turn id of that inclusive boundary in the forked Session.
operationId:
type: string
minLength: 1
forkedAtUnixMs:
type: integer
format: int64
minimum: 1
WorkspaceAgentSessionForkOperationStatus:
type: string
enum:
- accepted
- committed
- failed
- unknown
description: >-
Public durable operation state. accepted collapses the internal
prepared, dispatching, and provider-accepted phases.
WorkspaceAgentSessionForkOperationPhase:
type: string
enum:
- frozen
- dispatching
- materializing
- committed
- failed
- deliveryUnknown
description: Durable execution phase for progress and recovery diagnostics.
WorkspaceAgentSessionForkOperation:
type: object
additionalProperties: false
required:
- operationId
- requestId
- sourceAgentSessionId
- targetAgentSessionId
- point
- status
- phase
- session
- lineage
- error
properties:
operationId:
type: string
minLength: 1
requestId:
type: string
minLength: 1
sourceAgentSessionId:
type: string
minLength: 1
targetAgentSessionId:
type: string
minLength: 1
point:
$ref: "#/components/schemas/WorkspaceAgentSessionForkPoint"
status:
$ref: "#/components/schemas/WorkspaceAgentSessionForkOperationStatus"
phase:
$ref: "#/components/schemas/WorkspaceAgentSessionForkOperationPhase"
session:
allOf:
- $ref: "#/components/schemas/WorkspaceAgentSession"
nullable: true
description: Complete target Session projection when status is committed.
lineage:
allOf:
- $ref: "#/components/schemas/WorkspaceAgentSessionForkLineage"
nullable: true
description: Durable lineage when status is committed.
error:
type: string
nullable: true
description: Durable failure diagnostic for failed or unknown outcomes.
WorkspaceAgentSessionForkOperationResponse:
type: object
additionalProperties: false
required:
- operation
properties:
operation:
$ref: "#/components/schemas/WorkspaceAgentSessionForkOperation"
ForkWorkspaceAgentSessionRequest:
type: object
additionalProperties: false
required:
- targetAgentSessionId
- requestId
- point
properties:
targetAgentSessionId:
type: string
format: uuid
description: Caller-stable identity reserved for the forked canonical session.
requestId:
type: string
minLength: 1
description: Caller-stable idempotency key for safe retries.
point:
$ref: "#/components/schemas/WorkspaceAgentSessionForkPoint"
WorkspaceAgentSession:
type: object
additionalProperties: false
required:
- id
- kind
- rootAgentSessionId
- rootTurnId
- parentAgentSessionId
- parentTurnId
- parentToolCallId
- agentTargetId
- provider
- providerSessionId
- messageVersion
- cwd
- railSectionKey
- visible
- settings
- permissionConfig
- resumable
- pinnedAtUnixMs
- title
- createdAtUnixMs
- updatedAtUnixMs
- endedAtUnixMs
- latestTurnInteractions
- activeTurnId
- activeTurn
- latestTurn
- pendingInteractions
- capabilities
- lifecycleCapabilities
- forkedFrom
- usage
- goal
- goalSyncState
- tuttiModeActivation
- imported
properties:
id:
type: string
minLength: 1
kind:
$ref: "#/components/schemas/WorkspaceAgentSessionKind"
rootAgentSessionId:
type: string
nullable: true
minLength: 1
description: >-
Root session that owns this child session. Null when kind is root.
rootTurnId:
type: string
nullable: true
minLength: 1
description: >-
Root turn under which this child session was created. Null when
kind is root.
parentAgentSessionId:
type: string
nullable: true
minLength: 1
description: >-
Direct parent session that created this child session. Null when
kind is root.
parentTurnId:
type: string
nullable: true
minLength: 1
description: >-
Exact turn in the direct parent session that created this child
session. Null when kind is root.
parentToolCallId:
type: string
nullable: true
minLength: 1
description: >-
Delegation tool call in the parent turn that created this child
session. Null when kind is root.
agentTargetId:
type: string
nullable: true
description: Agent target that authorized this session launch. Historical or imported provider-only sessions may omit it.
provider:
$ref: "#/components/schemas/WorkspaceAgentProvider"
providerSessionId:
type: string
nullable: true
messageVersion:
allOf:
- $ref: "#/components/schemas/WorkspaceAgentMessageCursor"
description: >-
Latest accepted per-session message change cursor. This is a
high-water mark, not a count of materialized message rows.
cwd:
type: string
nullable: true
isolation:
allOf:
- $ref: "#/components/schemas/WorkspaceAgentSessionIsolation"
nullable: true
description: Durable launch isolation metadata. Null for sessions launched in the selected checkout.
railSectionKey:
type: string
minLength: 1
description: >-
Persisted conversation-rail membership key. Clients must use this
exact key for section placement and must not infer membership from
cwd or project paths.
activeTurnId:
type: string
nullable: true
description: >-
Protocol v2. The only turn reference kept on the session; null
when no turn is in flight.
activeTurn:
allOf:
- $ref: "#/components/schemas/WorkspaceAgentTurn"
nullable: true
description: >-
Protocol v2. Embedded snapshot of the active turn; null when no
turn is in flight.
latestTurn:
allOf:
- $ref: "#/components/schemas/WorkspaceAgentTurn"
nullable: true
description: >-
Protocol v2. Read-only embedded projection of the most recently
updated turn for this session, including settled turns. This is
an independent turn entity projection and is not session-owned
persistent state or a session reference.
latestTurnInteractions:
type: array
description: >-
Protocol v2. Read-only independent Interaction entity projections
for latestTurn, including pending, answered, and superseded
terminal states. These entities are not session-owned persistent
state.
items:
$ref: "#/components/schemas/WorkspaceAgentInteraction"
pendingInteractions:
type: array
description: >-
Protocol v2. Pending interactions (approvals, questions, plan
confirmations) for the active turn. Pending means present in this
collection with status pending; there is no tri-state null
protocol.
items:
$ref: "#/components/schemas/WorkspaceAgentInteraction"
capabilities:
allOf:
- $ref: "#/components/schemas/WorkspaceAgentCapabilities"
nullable: true
description: >-
Protocol v2. Authoritative session capability snapshot. Null means
no authoritative session snapshot is available, either because the
runtime has not reported one yet or because legacy persisted data is
ambiguous. A non-null object is complete, so false means explicitly
unsupported. Only while this field is null may clients fall back to
the authoritative provider composer descriptor; they must never
infer capabilities from provider identity.
lifecycleCapabilities:
$ref: "#/components/schemas/WorkspaceAgentSessionLifecycleCapabilities"
description: >-
Exact-session lifecycle capabilities. Clients must use these flags
for Session actions and must not infer support from provider identity.
forkedFrom:
allOf:
- $ref: "#/components/schemas/WorkspaceAgentSessionForkLineage"
nullable: true
description: >-
Durable provenance for a user-initiated root Session fork. Null for
ordinary root Sessions and provider-native child Sessions.
usage:
allOf:
- $ref: "#/components/schemas/WorkspaceAgentUsage"
nullable: true
description: >-
Protocol v2. Typed context-window and quota usage projected from
provider runtime state.
goal:
allOf:
- $ref: "#/components/schemas/WorkspaceAgentSessionGoal"
nullable: true
description: Protocol v2. Explicit field extracted from runtimeContext.
goalSyncState:
allOf:
- $ref: "#/components/schemas/WorkspaceAgentSessionGoalSyncState"
nullable: true
description: >-
Narrow Host-owned evidence for the durable Goal operation. Null
means no Goal state exists for this Session; clients must not infer
pending execution from the visible Goal alone.
tuttiModeActivation:
allOf:
- $ref: "#/components/schemas/TuttiModeActivation"
nullable: true
description: >-
Independent, session-scoped Tutti mode activation projection. Null
until the first activation revision exists; capability references
are audit records and never determine this state.
imported:
type: boolean
description: >-
Protocol v2. True when the session was imported from external
provider history. Explicit field extracted from runtimeContext.
visible:
type: boolean
settings:
$ref: "#/components/schemas/AgentSessionComposerSettings"
permissionConfig:
$ref: "#/components/schemas/PermissionConfig"
resumable:
type: boolean
pinnedAtUnixMs:
type: integer
format: int64
nullable: true
minimum: 0
title:
type: string
nullable: true
createdAtUnixMs:
type: integer
format: int64
minimum: 0
description: Protocol v2. Unix milliseconds replacement for createdAt.
updatedAtUnixMs:
type: integer
format: int64
minimum: 0
description: Protocol v2. Unix milliseconds replacement for updatedAt.
endedAtUnixMs:
type: integer
format: int64
nullable: true
minimum: 0
description: Protocol v2. Unix milliseconds replacement for endedAt.
WorkspaceAgentSessionResponse:
type: object
additionalProperties: false
required:
- session
properties:
session:
$ref: "#/components/schemas/WorkspaceAgentSession"
WorkspaceAgentSessionDetailResponse:
type: object
additionalProperties: false
required:
- session
- childSessions
- turns
- projection
- lifecycleCapabilitiesProjected
- editRetry
properties:
projection:
$ref: "#/components/schemas/WorkspaceAgentSessionDetailProjection"
lifecycleCapabilitiesProjected:
type: boolean
description: >-
Whether provider-backed lifecycle capability projection ran for
session and childSessions. A full projection reports true even
when a provider probe fails closed, because false then means the
action is unavailable for this response. When false, projection
was intentionally skipped and capability values must not be
applied as authoritative.
session:
$ref: "#/components/schemas/WorkspaceAgentSession"
editRetry:
$ref: "#/components/schemas/WorkspaceAgentEditRetryAvailability"
childSessions:
type: array
description: >-
Flat collection of every nested child session below session.
Clients reconstruct the tree from the immutable parent fields.
items:
$ref: "#/components/schemas/WorkspaceAgentSession"
turns:
type: array
description: >-
Ordered durable turns owned by session. This detail-only collection
is the canonical source for turn-scoped history such as file changes;
clients must not reconstruct it from provider tool payloads.
items:
$ref: "#/components/schemas/WorkspaceAgentTurn"
WorkspaceAgentEditRetryAvailability:
type: object
additionalProperties: false
required:
- supported
- eligible
- historyRevision
- recoveryState
- availableActions
properties:
supported:
type: boolean
eligible:
type: boolean
turnId:
type: string
minLength: 1
historyRevision:
type: integer
format: int64
minimum: 0
recoveryState:
type: string
enum:
- prepared
- rolling_back
- resend_pending
- recovery_required
- completed
operationId:
type: string
minLength: 1
availableActions:
type: array
uniqueItems: true
items:
$ref: "#/components/schemas/WorkspaceAgentEditRetryRecoveryAction"
reasonCode:
$ref: "#/components/schemas/WorkspaceAgentEditRetryReasonCode"
WorkspaceAgentEditRetryRecoveryAction:
type: string
enum:
- reconcile
- retry_replacement
x-enum-varnames:
- WorkspaceAgentEditRetryRecoveryActionReconcile
- WorkspaceAgentEditRetryRecoveryActionRetryReplacement
WorkspaceAgentEditRetryReasonCode:
type: string
enum:
- provider_unsupported
- turn_not_found
- turn_not_latest
- turn_not_settled
- history_revision_conflict
- operation_conflict
- recovery_required
- provider_outcome_unknown
- replacement_not_proven_absent
EditRetryWorkspaceAgentTurnRequest:
type: object
additionalProperties: false
required:
- editedText
- clientOperationId
- expectedHistoryRevision
properties:
editedText:
type: string
minLength: 1
clientOperationId:
type: string
minLength: 1
expectedHistoryRevision:
type: integer
format: int64
minimum: 0
RecoverWorkspaceAgentEditRetryRequest:
type: object
additionalProperties: false
required:
- action
properties:
action:
$ref: "#/components/schemas/WorkspaceAgentEditRetryRecoveryAction"
WorkspaceAgentEditRetryResponse:
type: object
additionalProperties: false
required:
- operationId
- state
- retractedTurnId
- historyRevision
properties:
operationId:
type: string
minLength: 1
state:
type: string
enum:
- prepared
- rolling_back
- resend_pending
- recovery_required
- completed
retractedTurnId:
type: string
minLength: 1
replacementTurnId:
type: string
minLength: 1
historyRevision:
type: integer
format: int64
minimum: 0
reasonCode:
$ref: "#/components/schemas/WorkspaceAgentEditRetryReasonCode"
SendWorkspaceAgentSessionInputResponse:
oneOf:
- $ref: "#/components/schemas/SendWorkspaceAgentSessionInputTurnResponse"
- $ref: "#/components/schemas/SendWorkspaceAgentSessionInputGoalControlResponse"
discriminator:
propertyName: kind
mapping:
turn: "#/components/schemas/SendWorkspaceAgentSessionInputTurnResponse"
goalControl: "#/components/schemas/SendWorkspaceAgentSessionInputGoalControlResponse"
SendWorkspaceAgentSessionInputTurnResponse:
type: object
additionalProperties: false
required:
- session
- kind
- turnId
- turn
properties:
session:
$ref: "#/components/schemas/WorkspaceAgentSession"
kind:
type: string
enum:
- turn
x-enum-varnames:
- SendWorkspaceAgentSessionInputTurnResponseKindTurn
turnId:
type: string
minLength: 1
turn:
$ref: "#/components/schemas/WorkspaceAgentTurn"
description: >-
Protocol v2. Durable snapshot of the exact turn accepted by this
submission; optimistic client intents reconcile against its turnId.
SendWorkspaceAgentSessionInputGoalControlResponse:
type: object
additionalProperties: false
required:
- session
- goal
- kind
properties:
session:
$ref: "#/components/schemas/WorkspaceAgentSession"
kind:
type: string
enum:
- goalControl
x-enum-varnames:
- SendWorkspaceAgentSessionInputGoalControlResponseKindGoalControl
operationId:
type: string
nullable: true
description: Durable GoalControlOperation identity when kind is goalControl.
goal:
allOf:
- $ref: "#/components/schemas/WorkspaceAgentSessionGoal"
nullable: true
goalState:
allOf:
- $ref: "#/components/schemas/WorkspaceAgentSessionGoalState"
nullable: true
WorkspaceAgentTurnPhase:
type: string
description: >-
Protocol v2 closed turn phase vocabulary. submitted -> running ->
waiting (interactions) -> settling -> settled.
enum:
- submitted
- running
- waiting
- settling
- settled
WorkspaceAgentTurnOutcome:
type: string
description: >-
Protocol v2 closed turn outcome vocabulary; only present once the
turn is settled. interrupted marks turns reconciled at daemon
startup after the provider process disappeared.
enum:
- completed
- failed
- canceled
- interrupted
WorkspaceAgentTurnError:
type: object
description: Protocol v2 turn-scoped error; never pollutes session state.
additionalProperties: false
required:
- message
properties:
message:
type: string
minLength: 1
code:
type: string
detail:
type: string
maxLength: 240
WorkspaceAgentCapabilityReference:
type: object
description: >-
A structured user-submission reference to a daemon-owned capability.
This is provenance for UI and durable workflow linkage; it is not
injected into provider prompt text and does not gate CLI availability.
additionalProperties: false
required:
- capability
- source
properties:
capability:
type: string
enum:
- tutti
source:
type: string
enum:
- slash_command
x-enum-varnames:
- WorkspaceAgentCapabilityReferenceSourceSlashCommand
WorkspaceAgentCompletedCommand:
type: object
description: >-
Protocol v2 closed-enum replacement for AgentActivityCompletedCommand.
additionalProperties: false
required:
- kind
- status
properties:
kind:
type: string
enum:
- compact
- review
- undo
- goal
status:
type: string
enum:
- completed
- failed
- canceled
WorkspaceAgentTurn:
type: object
description: >-
Protocol v2 turn entity. One user-submission-driven execution:
submit, run, wait, settle. Owns phase, outcome, error, and file
changes; the session only keeps an activeTurnId reference.
additionalProperties: false
required:
- turnId
- agentSessionId
- providerForkBindingAvailable
- providerForkBindingState
- phase
- origin
- outcome
- error
- fileChanges
- completedCommand
- startedAtUnixMs
- settledAtUnixMs
- updatedAtUnixMs
properties:
turnId:
type: string
minLength: 1
agentSessionId:
type: string
minLength: 1
providerForkBindingAvailable:
type: boolean
description: >-
Whether this canonical Turn currently has a durably persisted
provider Turn binding. This remains false while a settled
historical Turn is waiting for an on-demand recovery attempt.
providerForkBindingState:
type: string
description: >-
Canonical provider binding state for Fork projection. bound means
the durable provider Turn identity is ready; recovery_required
means a settled historical Turn must complete the Host's
fail-closed evidence recovery before Fork can be offered;
unavailable means the Turn cannot be used as a Fork boundary.
enum:
- bound
- recovery_required
- unavailable
phase:
$ref: "#/components/schemas/WorkspaceAgentTurnPhase"
origin:
type: string
description: Durable business provenance; steer is input on an existing turn and is never an origin.
enum:
- user_prompt
- goal_arm
- goal_continuation
- provider_initiated
- legacy_unknown
sourceGoalOperationId:
type: string
nullable: true
minLength: 1
sourceGoalRevision:
type: integer
format: int64
nullable: true
minimum: 0
sourceGoalRepairEpoch:
type: integer
format: int64
nullable: true
minimum: 0
outcome:
allOf:
- $ref: "#/components/schemas/WorkspaceAgentTurnOutcome"
nullable: true
error:
allOf:
- $ref: "#/components/schemas/WorkspaceAgentTurnError"
nullable: true
fileChanges:
type: object
additionalProperties: true
nullable: true
completedCommand:
allOf:
- $ref: "#/components/schemas/WorkspaceAgentCompletedCommand"
nullable: true
capabilityRefs:
type: array
uniqueItems: true
items:
$ref: "#/components/schemas/WorkspaceAgentCapabilityReference"
startedAtUnixMs:
type: integer
format: int64
minimum: 0
settledAtUnixMs:
type: integer
format: int64
nullable: true
minimum: 0
updatedAtUnixMs:
type: integer
format: int64
minimum: 0
WorkspaceAgentInteractionKind:
type: string
enum:
- approval
- question
- plan
WorkspaceAgentInteractionStatus:
type: string
enum:
- pending
- answered
- superseded
WorkspaceAgentInteraction:
type: object
description: >-
Protocol v2 interaction entity. An agent-initiated approval,
question, or plan confirmation raised during a turn. Pending means
present in a collection with status pending; replaces the tri-state
null pendingInteractive protocol.
additionalProperties: false
required:
- requestId
- agentSessionId
- turnId
- kind
- status
- toolName
- input
- output
- metadata
- createdAtUnixMs
- updatedAtUnixMs
properties:
requestId:
type: string
minLength: 1
agentSessionId:
type: string
minLength: 1
turnId:
type: string
minLength: 1
kind:
$ref: "#/components/schemas/WorkspaceAgentInteractionKind"
status:
$ref: "#/components/schemas/WorkspaceAgentInteractionStatus"
toolName:
type: string
nullable: true
input:
type: object
additionalProperties: true
nullable: true
output:
type: object
additionalProperties: true
nullable: true
metadata:
type: object
additionalProperties: true
nullable: true
createdAtUnixMs:
type: integer
format: int64
minimum: 0
updatedAtUnixMs:
type: integer
format: int64
minimum: 0
WorkspaceAgentCapabilities:
type: object
description: >-
Protocol v2 daemon-issued capability descriptor. Clients branch on
these booleans instead of provider identity. Field names mirror the
canonical capability vocabulary owned by
packages/agent/store-sqlite/canonical/provider.go.
additionalProperties: false
required:
- imageInput
- modelImageInputRequired
- modelSwitch
- modelPlanBinding
- skills
- compact
- tokenUsage
- rateLimits
- planMode
- interrupt
- activeTurnGuidance
- browserUse
- computerUse
- goalPause
- planImplementation
- permissionModeChangeDuringTurn
- permissionModeChangeDeferred
- review
- resumeRunningTurn
properties:
imageInput:
type: boolean
modelImageInputRequired:
type: boolean
modelSwitch:
type: boolean
description: >-
The provider can apply a model change to the next call in the
current session.
modelPlanBinding:
type: boolean
description: >-
The provider runtime accepts a session-scoped model access plan
endpoint and credential.
skills:
type: boolean
compact:
type: boolean
tokenUsage:
type: boolean
rateLimits:
type: boolean
planMode:
type: boolean
interrupt:
type: boolean
activeTurnGuidance:
type: boolean
description: >-
The provider can accept a user prompt as guidance for the currently
running turn without canceling it or creating a normal next turn.
browserUse:
type: boolean
computerUse:
type: boolean
goalPause:
type: boolean
planImplementation:
type: boolean
permissionModeChangeDuringTurn:
type: boolean
permissionModeChangeDeferred:
type: boolean
review:
type: boolean
resumeRunningTurn:
type: boolean
WorkspaceAgentUsageContextWindow:
type: object
additionalProperties: false
required:
- usedTokens
- totalTokens
properties:
usedTokens:
type: integer
format: int64
minimum: 0
totalTokens:
type: integer
format: int64
minimum: 1
WorkspaceAgentUsageQuota:
type: object
additionalProperties: false
required:
- quotaType
- percentRemaining
- resetsAtUnixMs
properties:
quotaType:
type: string
minLength: 1
percentRemaining:
type: number
format: double
minimum: 0
maximum: 100
resetsAtUnixMs:
type: integer
format: int64
nullable: true
minimum: 0
WorkspaceAgentUsage:
type: object
additionalProperties: false
required:
- contextWindow
- quotas
properties:
contextWindow:
allOf:
- $ref: "#/components/schemas/WorkspaceAgentUsageContextWindow"
nullable: true
quotas:
type: array
items:
$ref: "#/components/schemas/WorkspaceAgentUsageQuota"
WorkspaceAgentSessionGoal:
type: object
description: Protocol v2 explicit field extracted from runtimeContext.
additionalProperties: false
required:
- objective
- status
properties:
objective:
type: string
status:
type: string
enum:
- active
- paused
- blocked
- usageLimited
- budgetLimited
- complete
reason:
type: string
startedAtUnixMs:
type: integer
format: int64
minimum: 0
iterations:
type: integer
minimum: 0
durationMs:
type: integer
format: int64
minimum: 0
tokens:
type: integer
format: int64
minimum: 0
WorkspaceAgentTurnCancelResult:
type: object
additionalProperties: false
required:
- canceled
- reason
properties:
canceled:
type: boolean
reason:
type: string
description: >-
turn_canceled reports an active turn was stopped. cancel_requested
reports accepted cancellation whose exact provider delivery still
needs canonical reconciliation. already_settled and not_found are
idempotent no-op successes, not errors.
enum:
- turn_canceled
- cancel_requested
- already_settled
- not_found
WorkspaceAgentTurnCancelResponse:
type: object
additionalProperties: false
required:
- cancel
properties:
cancel:
$ref: "#/components/schemas/WorkspaceAgentTurnCancelResult"
turn:
$ref: "#/components/schemas/WorkspaceAgentTurn"
nullable: true
AgentActivityMessageSemantics:
type: object
additionalProperties: false
properties:
userVisibleAssistantResponse:
type: boolean
turnSettling:
type: boolean
noticeCommand:
type: string
noticeCommandStatus:
type: string
WorkspaceAgentSessionMessage:
type: object
additionalProperties: false
required:
- agentSessionId
- messageId
- sequence
- turnId
- role
- kind
- occurredAtUnixMs
- version
properties:
agentSessionId:
type: string
minLength: 1
messageId:
type: string
minLength: 1
sequence:
type: integer
format: int64
minimum: 1
maximum: 9007199254740991
description: >-
Stable message presentation order assigned when the durable message
row is first created. Updating the same message does not change this
value; version remains the mutable snapshot change cursor.
turnId:
type: string
nullable: true
description: >-
A non-empty turnId attaches a Turn-scoped message to a real
persisted Turn. Null is valid only when kind is session_audit;
empty strings are forbidden. Legacy stored turnless rows are read
as compatibility data and are never assigned a guessed Turn.
role:
type: string
minLength: 1
kind:
type: string
minLength: 1
description: >-
session_audit is the only session-scoped kind; every other kind is
Turn-scoped and requires a non-null turnId.
status:
type: string
semantics:
$ref: "#/components/schemas/AgentActivityMessageSemantics"
payload:
type: object
additionalProperties: true
occurredAtUnixMs:
type: integer
format: int64
minimum: 1
startedAtUnixMs:
type: integer
format: int64
completedAtUnixMs:
type: integer
format: int64
createdAtUnixMs:
type: integer
format: int64
updatedAtUnixMs:
type: integer
format: int64
version:
$ref: "#/components/schemas/WorkspaceAgentMessageCursor"
WorkspaceAgentSessionMessagesResponse:
type: object
additionalProperties: false
required:
- agentSessionId
- messages
- latestVersion
- hasMore
properties:
agentSessionId:
type: string
minLength: 1
messages:
type: array
items:
$ref: "#/components/schemas/WorkspaceAgentSessionMessage"
latestVersion:
$ref: "#/components/schemas/WorkspaceAgentMessageCursor"
hasMore:
type: boolean
WorkspaceAgentGeneratedFileEntry:
type: object
additionalProperties: false
required:
- path
- label
properties:
path:
type: string
minLength: 1
label:
type: string
minLength: 1
WorkspaceAgentGeneratedFileListResponse:
type: object
additionalProperties: false
required:
- workspaceId
- entries
- hasMore
properties:
workspaceId:
type: string
minLength: 1
entries:
type: array
items:
$ref: "#/components/schemas/WorkspaceAgentGeneratedFileEntry"
hasMore:
type: boolean
nextCursor:
type: string
minLength: 1
WorkspaceAgentSessionListResponse:
type: object
additionalProperties: false
required:
- workspaceId
- sessions
- hasMore
properties:
workspaceId:
type: string
minLength: 1
sessions:
type: array
items:
$ref: "#/components/schemas/WorkspaceAgentSession"
hasMore:
type: boolean
nextCursor:
type: string
minLength: 1
description: Cursor for the next older matching session page, encoded as conversationSortTimeUnixMs|agentSessionId.
WorkspaceAgentSessionPage:
type: object
additionalProperties: false
required:
- sessions
- hasMore
- totalCount
properties:
sessions:
type: array
items:
$ref: "#/components/schemas/WorkspaceAgentSession"
hasMore:
type: boolean
totalCount:
type: integer
minimum: 0
description: Total visible sessions in this page scope before cursor pagination.
nextCursor:
type: string
description: Cursor for the next older page, encoded as pinnedAtUnixMs|agentSessionId for pinned pages.
minLength: 1
WorkspaceAgentSessionSectionKind:
type: string
enum:
- conversations
- project
WorkspaceAgentSessionSection:
type: object
additionalProperties: false
required:
- kind
- sectionKey
- sessions
- hasMore
- totalCount
properties:
kind:
$ref: "#/components/schemas/WorkspaceAgentSessionSectionKind"
sectionKey:
type: string
minLength: 1
userProject:
$ref: "#/components/schemas/UserProject"
sessions:
type: array
items:
$ref: "#/components/schemas/WorkspaceAgentSession"
hasMore:
type: boolean
totalCount:
type: integer
minimum: 0
description: Total visible sessions in this section before cursor pagination.
nextCursor:
type: string
description: Cursor for the next older page, encoded as conversationSortTimeUnixMs|agentSessionId.
minLength: 1
WorkspaceAgentSessionSectionsResponse:
type: object
additionalProperties: false
required:
- workspaceId
- pinned
- sections
properties:
workspaceId:
type: string
minLength: 1
pinned:
$ref: "#/components/schemas/WorkspaceAgentSessionPage"
sections:
type: array
items:
$ref: "#/components/schemas/WorkspaceAgentSessionSection"
WorkspaceAgentSessionSectionPageResponse:
type: object
additionalProperties: false
required:
- workspaceId
- section
properties:
workspaceId:
type: string
minLength: 1
section:
$ref: "#/components/schemas/WorkspaceAgentSessionSection"
WorkspaceAgentSessionPageResponse:
type: object
additionalProperties: false
required:
- workspaceId
- page
properties:
workspaceId:
type: string
minLength: 1
page:
$ref: "#/components/schemas/WorkspaceAgentSessionPage"
ExternalAgentImportArchiveKind:
type: string
description: >-
Selects which provider data-export archive format to parse. Omit for
backward compatibility with clients that only send archivePath; the
daemon then defaults to the Claude data-export format.
enum:
- claude
- chatgpt
ExternalAgentImportScanRequest:
type: object
additionalProperties: false
properties:
archivePath:
type: string
minLength: 1
description: >-
Absolute path to a supported provider data-export ZIP archive.
When supplied, scan the archive instead of local CLI history.
archiveKind:
$ref: "#/components/schemas/ExternalAgentImportArchiveKind"
providers:
type: array
items:
$ref: "#/components/schemas/WorkspaceAgentProvider"
days:
type: integer
description: >-
Limit the scan to conversations updated within the last N days.
Omit or 0 for the default 30-day window; a negative value scans all
available history.
ExternalAgentImportProvider:
type: object
additionalProperties: false
required:
- provider
- root
- available
- sessionCount
- messageCount
properties:
provider:
$ref: "#/components/schemas/WorkspaceAgentProvider"
root:
type: string
available:
type: boolean
sessionCount:
type: integer
minimum: 0
messageCount:
type: integer
minimum: 0
error:
type: string
nullable: true
ExternalAgentImportProject:
type: object
additionalProperties: false
required:
- path
- label
- providers
- sessionCount
- messageCount
properties:
path:
type: string
minLength: 1
label:
type: string
minLength: 1
providers:
type: array
items:
$ref: "#/components/schemas/WorkspaceAgentProvider"
sessionCount:
type: integer
minimum: 0
messageCount:
type: integer
minimum: 0
lastUpdatedAtUnixMs:
type: integer
format: int64
nullable: true
minimum: 0
ExternalAgentImportSession:
type: object
additionalProperties: false
required:
- id
- projectPath
- provider
- title
- messageCount
properties:
id:
type: string
minLength: 1
projectPath:
type: string
minLength: 1
provider:
$ref: "#/components/schemas/WorkspaceAgentProvider"
sourcePath:
type: string
minLength: 1
nullable: true
title:
type: string
minLength: 1
messageCount:
type: integer
minimum: 0
lastUpdatedAtUnixMs:
type: integer
format: int64
nullable: true
minimum: 0
ExternalAgentImportError:
type: object
additionalProperties: false
required:
- message
properties:
provider:
$ref: "#/components/schemas/WorkspaceAgentProvider"
sourcePath:
type: string
nullable: true
message:
type: string
minLength: 1
ExternalAgentImportScanResponse:
type: object
additionalProperties: false
required:
- providers
- projects
- sessions
- scannedSessions
- scannedMessages
- skippedSessions
- errors
properties:
providers:
type: array
items:
$ref: "#/components/schemas/ExternalAgentImportProvider"
projects:
type: array
items:
$ref: "#/components/schemas/ExternalAgentImportProject"
sessions:
type: array
items:
$ref: "#/components/schemas/ExternalAgentImportSession"
scannedSessions:
type: integer
minimum: 0
scannedMessages:
type: integer
minimum: 0
skippedSessions:
type: integer
minimum: 0
errors:
type: array
items:
$ref: "#/components/schemas/ExternalAgentImportError"
ExternalAgentImportProjectSelection:
type: object
additionalProperties: false
required:
- path
properties:
path:
type: string
minLength: 1
providers:
type: array
items:
$ref: "#/components/schemas/WorkspaceAgentProvider"
sessionIds:
type: array
items:
type: string
minLength: 1
ImportExternalAgentSessionsRequest:
type: object
additionalProperties: false
required:
- projects
properties:
archivePath:
type: string
minLength: 1
description: >-
Absolute path to the same provider data-export ZIP archive used
for the preceding scan. The daemon revalidates and rereads the
archive before importing the selected conversations.
archiveKind:
$ref: "#/components/schemas/ExternalAgentImportArchiveKind"
projects:
type: array
minItems: 1
items:
$ref: "#/components/schemas/ExternalAgentImportProjectSelection"
registerUserProjects:
type: boolean
default: true
importSessions:
type: boolean
default: true
ExternalAgentImportResultResponse:
type: object
additionalProperties: false
required:
- importedProjects
- importedSessions
- importedMessages
- skippedSessions
- errors
properties:
importedProjects:
type: integer
minimum: 0
importedSessions:
type: integer
minimum: 0
importedMessages:
type: integer
minimum: 0
skippedSessions:
type: integer
minimum: 0
errors:
type: array
items:
$ref: "#/components/schemas/ExternalAgentImportError"
ArchiveTuttiModeExecutionRequest:
type: object
additionalProperties: false
required:
- requestId
- reason
properties:
requestId:
type: string
minLength: 1
reason:
type: string
minLength: 1
TuttiModeArchiveOperation:
type: object
additionalProperties: false
required:
- workspaceId
- executionId
- issueId
- operationId
- requestId
- status
- requestedBy
- reason
- attemptCount
- lastError
- createdAtUnixMs
- updatedAtUnixMs
- completedAtUnixMs
properties:
workspaceId:
type: string
minLength: 1
executionId:
type: string
minLength: 1
issueId:
type: string
minLength: 1
operationId:
type: string
minLength: 1
requestId:
type: string
minLength: 1
status:
type: string
enum:
- requested
- canceling_runs
- archiving
- completed
- failed
requestedBy:
type: string
minLength: 1
reason:
type: string
minLength: 1
attemptCount:
type: integer
minimum: 0
lastError:
type: string
createdAtUnixMs:
type: integer
format: int64
minimum: 0
updatedAtUnixMs:
type: integer
format: int64
minimum: 0
completedAtUnixMs:
type: integer
format: int64
minimum: 0
DeleteWorkspaceAgentSessionResponse:
type: object
additionalProperties: false
required:
- removed
- cleanupFailed
properties:
removed:
type: boolean
cleanupFailed:
type: boolean
WorkspaceAgentSessionSectionDeletionCandidatesResponse:
type: object
additionalProperties: false
required:
- workspaceId
- sectionKey
- excludePinned
- sessionIds
properties:
workspaceId:
type: string
minLength: 1
sectionKey:
type: string
minLength: 1
agentTargetId:
type: string
minLength: 1
excludePinned:
type: boolean
sessionIds:
type: array
uniqueItems: true
items:
type: string
minLength: 1
DeleteWorkspaceAgentSessionsBatchRequest:
type: object
additionalProperties: false
required:
- sessionIds
properties:
sessionIds:
type: array
minItems: 1
uniqueItems: true
items:
type: string
minLength: 1
DeleteWorkspaceAgentSessionsBatchResponse:
type: object
additionalProperties: false
required:
- removedMessages
- removedSessions
- removedSessionIds
- cleanupFailedSessionIds
properties:
removedMessages:
type: integer
minimum: 0
removedSessions:
type: integer
minimum: 0
removedSessionIds:
type: array
items:
type: string
minLength: 1
cleanupFailedSessionIds:
type: array
items:
type: string
minLength: 1
ClearWorkspaceAgentSessionsResponse:
type: object
additionalProperties: false
required:
- removedMessages
- removedSessions
- cleanupFailedSessionIds
properties:
removedMessages:
type: integer
minimum: 0
removedSessions:
type: integer
minimum: 0
cleanupFailedSessionIds:
type: array
items:
type: string
minLength: 1
UpdateWorkspaceAgentSessionPinRequest:
type: object
additionalProperties: false
required:
- pinned
properties:
pinned:
type: boolean
UpdateWorkspaceAgentSessionTitleRequest:
type: object
additionalProperties: false
required:
- title
properties:
title:
type: string
minLength: 1
maxLength: 120
UpdateWorkspaceAgentSessionVisibilityRequest:
type: object
additionalProperties: false
required:
- visible
properties:
visible:
type: boolean
WorkspaceAgentSessionGoalControlRequest:
type: object
additionalProperties: false
required:
- action
properties:
action:
type: string
enum:
- pause
- resume
- clear
- set
x-enum-varnames:
- WorkspaceAgentSessionGoalControlRequestActionPause
- WorkspaceAgentSessionGoalControlRequestActionResume
- WorkspaceAgentSessionGoalControlRequestActionClear
- WorkspaceAgentSessionGoalControlRequestActionSet
clientSubmitId:
type: string
minLength: 1
description: Caller-stable idempotency identity for this Goal Control mutation.
objective:
type: string
WorkspaceAgentSessionGoalControlResponse:
type: object
additionalProperties: false
required:
- session
- goal
properties:
session:
$ref: "#/components/schemas/WorkspaceAgentSession"
goal:
allOf:
- $ref: "#/components/schemas/WorkspaceAgentSessionGoal"
nullable: true
operationId:
type: string
nullable: true
description: Durable GoalControlOperation identity; null only for compatibility runtimes without a goal store.
state:
allOf:
- $ref: "#/components/schemas/WorkspaceAgentSessionGoalState"
nullable: true
WorkspaceAgentSessionGoalSyncState:
type: object
additionalProperties: false
required:
- revision
- syncStatus
- pendingOperationId
- executionPending
properties:
revision:
type: integer
format: int64
minimum: 0
syncStatus:
type: string
enum:
- pending
- applying
- synced
- diverged
- unknown
- failed
pendingOperationId:
type: string
nullable: true
executionPending:
type: boolean
description: >-
Host-owned proof that an accepted initial Goal is expected to
begin autonomous execution and has not produced its first exact
Goal Turn yet.
WorkspaceAgentSessionGoalState:
type: object
additionalProperties: false
required:
- revision
- tombstoned
- syncStatus
- lastEvidence
- updatedAtUnixMs
properties:
desired:
allOf:
- $ref: "#/components/schemas/WorkspaceAgentSessionGoal"
nullable: true
observed:
allOf:
- $ref: "#/components/schemas/WorkspaceAgentSessionGoal"
nullable: true
revision:
type: integer
format: int64
minimum: 0
tombstoned:
type: boolean
syncStatus:
type: string
enum:
- pending
- applying
- synced
- diverged
- unknown
- failed
pendingOperationId:
type: string
nullable: true
lastEvidence:
type: object
additionalProperties: true
lastError:
type: string
observedAtUnixMs:
type: integer
format: int64
nullable: true
updatedAtUnixMs:
type: integer
format: int64
minimum: 0
WorkspaceAgentSessionGoalStateResponse:
type: object
additionalProperties: false
required:
- session
- state
properties:
session:
$ref: "#/components/schemas/WorkspaceAgentSession"
state:
$ref: "#/components/schemas/WorkspaceAgentSessionGoalState"
WorkspaceAgentInitialGoalControl:
type: object
additionalProperties: false
required:
- action
properties:
action:
type: string
enum:
- pause
- resume
- clear
- set
x-enum-varnames:
- WorkspaceAgentInitialGoalControlActionPause
- WorkspaceAgentInitialGoalControlActionResume
- WorkspaceAgentInitialGoalControlActionClear
- WorkspaceAgentInitialGoalControlActionSet
objective:
type: string
minLength: 1
CreateWorkspaceAgentSessionRequest:
type: object
additionalProperties: false
required:
- agentSessionId
- agentTargetId
- initialContent
- clientSubmitId
properties:
codexSaverMode:
type: boolean
nullable: true
description: Enables the Codex-specific saver subagent mode for this Agent Session
rtkSaverMode:
type: boolean
nullable: true
description: Enables provider-neutral, session-scoped RTK executable and RTK.md injection for this Agent Session without changing the selected model
agentSessionId:
type: string
format: uuid
minLength: 1
agentTargetId:
type: string
minLength: 1
description: Required target-first session launch authority. The daemon derives provider and providerTargetRef from the stored agent target launchRef and rejects mismatched provider values.
clientSubmitId:
type: string
minLength: 1
recordingId:
type: string
format: uuid
nullable: true
description: Developer create-session scenario waiting for this root Session.
submitDiagnostics:
$ref: "#/components/schemas/AgentSubmitDiagnostics"
initialContent:
type: array
items:
$ref: "#/components/schemas/AgentPromptContentBlock"
initialGoalControl:
allOf:
- $ref: "#/components/schemas/WorkspaceAgentInitialGoalControl"
nullable: true
description: Optional typed Goal Control applied after the Session is created without opening an initial Turn. Must not be combined with non-empty initialContent.
initialDisplayPrompt:
type: string
nullable: true
description: Optional display-only text for the first turn (e.g. a folder bundle shown as one chip while initialContent carries the expanded files).
title:
type: string
nullable: true
cwd:
type: string
nullable: true
isolation:
allOf:
- $ref: "#/components/schemas/WorkspaceAgentSessionIsolationMode"
nullable: true
description: Optional create-only isolation mode. Omit or set null to launch in the selected checkout.
permissionModeId:
type: string
nullable: true
model:
type: string
nullable: true
modelExplicit:
type: boolean
nullable: true
description: True only when model came from an explicit caller selection; false identifies an inherited or remembered fallback preference.
reasoningEffort:
type: string
nullable: true
reasoningEffortExplicit:
type: boolean
nullable: true
description: True only when reasoning effort came from an explicit caller selection; false identifies a model-dependent inherited value.
noProject:
type: boolean
nullable: true
description: Classifies a session that is intentionally not attached to a workspace project.
railPlacement:
$ref: "#/components/schemas/WorkspaceAgentRailPlacement"
speed:
type: string
nullable: true
planMode:
type: boolean
nullable: true
browserUse:
type: boolean
nullable: true
capabilityRefs:
type: array
uniqueItems: true
items:
$ref: "#/components/schemas/WorkspaceAgentCapabilityReference"
description: Structured capability references attached to the initial submission. They are persisted on the turn but never converted into provider prompt text.
initialTuttiModeActivation:
allOf:
- $ref: "#/components/schemas/TuttiModeActivationIntent"
nullable: true
description: Optional independent Tutti mode activation intent applied before the first turn starts.
visible:
type: boolean
nullable: true
StartAgentSessionRecordingRequest:
type: object
additionalProperties: false
required:
- agentTargetId
- replayPrerequisites
properties:
agentTargetId:
type: string
minLength: 1
agentSessionId:
type: string
minLength: 1
nullable: true
description: Existing Session selecting continue-session mode. Omit for create-session mode.
replayPrerequisites:
$ref: "#/components/schemas/AgentSessionReplayPrerequisites"
AgentSessionReplayComposerDefaults:
type: object
additionalProperties: false
required:
- model
- permissionModeId
- reasoningEffort
- speed
properties:
model:
type: string
minLength: 1
permissionModeId:
type: string
minLength: 1
reasoningEffort:
type: string
minLength: 1
speed:
type: string
minLength: 1
AgentSessionReplayPrerequisites:
type: object
additionalProperties: false
required:
- composerDefaults
properties:
composerDefaults:
$ref: "#/components/schemas/AgentSessionReplayComposerDefaults"
RenameAgentSessionRecordingRequest:
type: object
additionalProperties: false
required:
- name
properties:
name:
type: string
minLength: 1
maxLength: 120
AgentSessionRecordingActivityEventInput:
type: object
additionalProperties: false
required:
- eventId
- kind
- type
- occurredAtUnixMs
properties:
eventId:
type: string
minLength: 1
kind:
type: string
enum:
- intent
- effect
- direct-stimulus
type:
type: string
minLength: 1
correlationId:
type: string
minLength: 1
nullable: true
causedByEventId:
type: string
minLength: 1
nullable: true
agentSessionId:
type: string
minLength: 1
nullable: true
payload:
type: object
additionalProperties: true
occurredAtUnixMs:
type: integer
format: int64
minimum: 0
AppendAgentSessionRecordingActivityEventsRequest:
type: object
additionalProperties: false
required:
- events
properties:
events:
type: array
minItems: 1
maxItems: 256
items:
$ref: "#/components/schemas/AgentSessionRecordingActivityEventInput"
AppendAgentSessionRecordingActivityEventsResponse:
type: object
additionalProperties: false
required:
- acceptedThroughSequence
properties:
acceptedThroughSequence:
type: integer
format: int64
minimum: 0
AgentSessionRecording:
type: object
additionalProperties: false
required:
- id
- name
- workspaceId
- agentTargetId
- mode
- status
- directory
- createdAtUnixMs
- updatedAtUnixMs
properties:
id:
type: string
format: uuid
name:
type: string
minLength: 1
maxLength: 120
description: Mutable name stored in the portable Cassette manifest after completion.
cassetteId:
type: string
format: uuid
nullable: true
description: Immutable Cassette produced by a completed Recording.
workspaceId:
type: string
minLength: 1
agentTargetId:
type: string
minLength: 1
mode:
type: string
enum:
- create-session
- continue-session
rootAgentSessionId:
type: string
minLength: 1
nullable: true
status:
type: string
enum:
- preparing
- ready
- recording
- finalizing
- complete
- failed
- canceled
- incomplete
directory:
type: string
minLength: 1
errorCode:
type: string
nullable: true
errorMessage:
type: string
nullable: true
createdAtUnixMs:
type: integer
format: int64
minimum: 0
updatedAtUnixMs:
type: integer
format: int64
minimum: 0
AgentSessionRecordingListResponse:
type: object
additionalProperties: false
required:
- recordings
properties:
recordings:
type: array
items:
$ref: "#/components/schemas/AgentSessionRecording"
ImportAgentSessionCassettesRequest:
type: object
additionalProperties: false
required:
- sourceDirectories
properties:
sourceDirectories:
type: array
minItems: 1
maxItems: 100
uniqueItems: true
items:
type: string
minLength: 1
description: Absolute local directories containing portable cassette.json manifests.
ImportAgentSessionCassettesResponse:
type: object
additionalProperties: false
required:
- failures
- recordings
properties:
failures:
type: array
items:
$ref: "#/components/schemas/AgentSessionCassetteImportFailure"
recordings:
type: array
items:
$ref: "#/components/schemas/AgentSessionRecording"
AgentSessionCassetteImportFailure:
type: object
additionalProperties: false
required:
- code
- sourceDirectory
properties:
code:
type: string
enum:
- conflict
- invalid
- failed
sourceDirectory:
type: string
minLength: 1
AgentSessionReplayCassetteLaunch:
type: object
additionalProperties: false
required:
- cassetteId
- cassetteDirectory
- rootAgentSessionId
properties:
cassetteId:
type: string
format: uuid
cassetteDirectory:
type: string
minLength: 1
rootAgentSessionId:
type: string
minLength: 1
PrepareAgentSessionReplayWorkspaceRequest:
type: object
additionalProperties: false
required:
- cassetteIds
properties:
cassetteIds:
type: array
minItems: 1
uniqueItems: true
items:
type: string
format: uuid
AgentSessionReplayWorkspaceLaunch:
type: object
additionalProperties: false
required:
- launches
properties:
launches:
type: array
minItems: 1
items:
$ref: "#/components/schemas/AgentSessionReplayCassetteLaunch"
AgentSessionCassette:
type: object
additionalProperties: false
required:
- id
- name
- sourceRecordingId
- agentTargetId
- rootAgentSessionId
- mode
- totalBytes
- createdAtUnixMs
properties:
id:
type: string
format: uuid
name:
type: string
minLength: 1
maxLength: 120
sourceRecordingId:
type: string
format: uuid
agentTargetId:
type: string
minLength: 1
rootAgentSessionId:
type: string
minLength: 1
mode:
type: string
enum:
- create-session
- continue-session
totalBytes:
type: integer
format: int64
minimum: 0
createdAtUnixMs:
type: integer
format: int64
minimum: 0
AgentSessionCassetteListResponse:
type: object
additionalProperties: false
required:
- cassettes
properties:
cassettes:
type: array
items:
$ref: "#/components/schemas/AgentSessionCassette"
AgentSessionReplayTransportPlayback:
type: object
additionalProperties: false
required:
- drained
- paused
- playbackElapsedMs
- speed
- timingMode
- providerConnections
properties:
drained:
type: boolean
paused:
type: boolean
playbackElapsedMs:
type: number
format: double
minimum: 0
speed:
type: number
format: double
enum:
- 0.25
- 0.5
- 1
- 2
- 4
timingMode:
type: string
enum:
- realtime
- fast-forward
providerConnections:
type: array
items:
$ref: "#/components/schemas/AgentSessionReplayProviderCursor"
AgentSessionReplayProviderCursor:
type: object
additionalProperties: false
required:
- connectionId
- chunkSeq
- unitIndex
properties:
connectionId:
type: string
minLength: 1
chunkSeq:
type: integer
format: int64
minimum: 0
unitIndex:
type: integer
format: int64
minimum: 0
AgentSessionReplayCheckpointVerification:
type: object
additionalProperties: false
required:
- checkpointIndex
- triggerMatched
- readinessSatisfied
- canonicalSessionUpdatedAtUnixMs
- canonicalMessageVersion
properties:
checkpointIndex:
type: integer
minimum: 0
triggerMatched:
type: boolean
readinessSatisfied:
type: boolean
canonicalSessionUpdatedAtUnixMs:
type: integer
format: int64
minimum: 0
canonicalMessageVersion:
type: integer
format: int64
minimum: 0
UpdateAgentSessionReplayTransportPlaybackRequest:
type: object
additionalProperties: false
required:
- command
properties:
command:
type: string
enum:
- set-speed
- pause
- resume
- set-timing-mode
- set-provider-cursor
- clear-provider-cursor
x-enum-varnames:
- UpdateAgentSessionReplayTransportPlaybackRequestCommandSetSpeed
- UpdateAgentSessionReplayTransportPlaybackRequestCommandPause
- UpdateAgentSessionReplayTransportPlaybackRequestCommandResume
- UpdateAgentSessionReplayTransportPlaybackRequestCommandSetTimingMode
- UpdateAgentSessionReplayTransportPlaybackRequestCommandSetProviderCursor
- UpdateAgentSessionReplayTransportPlaybackRequestCommandClearProviderCursor
speed:
type: number
format: double
enum:
- 0.25
- 0.5
- 1
- 2
- 4
timingMode:
type: string
enum:
- realtime
- fast-forward
providerConnections:
type: array
items:
$ref: "#/components/schemas/AgentSessionReplayProviderCursor"
WorkspaceAgentRailPlacement:
type: object
additionalProperties: false
required:
- version
- kind
- sectionKey
properties:
version:
type: integer
enum:
- 1
kind:
type: string
enum:
- conversations
- project
projectPath:
type: string
minLength: 1
sectionKey:
type: string
minLength: 1
WorkspaceAgentSideCapabilities:
type: object
additionalProperties: false
required:
- supported
- activeSourceTurn
- ephemeral
- hideInheritedTurns
- modelBoundaryInjected
properties:
supported:
type: boolean
activeSourceTurn:
type: boolean
ephemeral:
type: boolean
hideInheritedTurns:
type: boolean
modelBoundaryInjected:
type: boolean
WorkspaceAgentSideCapabilitiesResponse:
type: object
additionalProperties: false
required:
- capabilities
properties:
capabilities:
$ref: "#/components/schemas/WorkspaceAgentSideCapabilities"
OpenWorkspaceAgentSideConversationRequest:
type: object
additionalProperties: false
required:
- sideAgentSessionId
- requestId
properties:
sideAgentSessionId:
type: string
minLength: 1
requestId:
type: string
minLength: 1
WorkspaceAgentSideConversation:
type: object
additionalProperties: false
required:
- workspaceId
- sourceAgentSessionId
- sideAgentSessionId
- provider
- status
- capabilities
properties:
workspaceId:
type: string
minLength: 1
sourceAgentSessionId:
type: string
minLength: 1
sideAgentSessionId:
type: string
minLength: 1
provider:
type: string
minLength: 1
status:
type: string
minLength: 1
capabilities:
$ref: "#/components/schemas/WorkspaceAgentSideCapabilities"
WorkspaceAgentSideConversationResponse:
type: object
additionalProperties: false
required:
- side
properties:
side:
$ref: "#/components/schemas/WorkspaceAgentSideConversation"
SendWorkspaceAgentSideConversationInputRequest:
type: object
additionalProperties: false
required:
- turnId
- clientSubmitId
- content
properties:
turnId:
type: string
minLength: 1
clientSubmitId:
type: string
minLength: 1
content:
type: array
minItems: 1
items:
$ref: "#/components/schemas/AgentPromptContentBlock"
displayPrompt:
type: string
nullable: true
WorkspaceAgentSideTurnResponse:
type: object
additionalProperties: false
required:
- sideAgentSessionId
- turnId
- accepted
- status
properties:
sideAgentSessionId:
type: string
minLength: 1
turnId:
type: string
minLength: 1
accepted:
type: boolean
status:
type: string
minLength: 1
WorkspaceAgentSideTurnCancelResponse:
type: object
additionalProperties: false
required:
- canceled
- targetAbsent
properties:
canceled:
type: boolean
targetAbsent:
type: boolean
SubmitWorkspaceAgentSideConversationInteractiveRequest:
type: object
additionalProperties: false
properties:
action:
type: string
optionId:
type: string
payload:
type: object
additionalProperties: true
WorkspaceAgentSideInteractiveResponse:
type: object
additionalProperties: false
required:
- disposition
properties:
disposition:
type: string
minLength: 1
SendWorkspaceAgentSessionInputRequest:
type: object
additionalProperties: false
required:
- content
- clientSubmitId
properties:
content:
type: array
minItems: 1
items:
$ref: "#/components/schemas/AgentPromptContentBlock"
clientSubmitId:
type: string
minLength: 1
submitDiagnostics:
$ref: "#/components/schemas/AgentSubmitDiagnostics"
displayPrompt:
type: string
nullable: true
description: Optional display-only text shown in the conversation (e.g. a folder bundle rendered as one chip while content carries the expanded files).
capabilityRefs:
type: array
uniqueItems: true
items:
$ref: "#/components/schemas/WorkspaceAgentCapabilityReference"
description: Structured capability references attached to this submission. They are persisted on the turn but never converted into provider prompt text.
guidance:
type: boolean
description: When true, send this input as guidance to the exact active turn identified by turnId instead of starting a new turn.
turnId:
type: string
minLength: 1
description: Exact canonical active Turn targeted by guidance. Required when guidance is true; ignored for normal new-turn submits.
AgentSubmitDiagnostics:
type: object
additionalProperties: false
properties:
submittedAtUnixMs:
type: integer
format: int64
minimum: 0
blockCount:
type: integer
minimum: 0
hasImage:
type: boolean
promptLength:
type: integer
minimum: 0
queued:
type: boolean
source:
type: string
uiMode:
type: string
enum:
- os
- agent
AgentPromptContentBlock:
type: object
additionalProperties: false
required:
- type
properties:
type:
type: string
enum:
- text
- image
- skill
- mention
- connector
text:
type: string
mimeType:
type: string
enum:
- image/png
- image/jpeg
- image/webp
data:
type: string
description: Base64-encoded image bytes. Mutually exclusive with url.
url:
type: string
format: uri
pattern: '^https://[^@/?#\s]+([/?#]|$)'
description: HTTPS image URL fetched directly by a capable provider. Mutually exclusive with data.
attachmentId:
type: string
name:
type: string
path:
type: string
connectorKey:
type: string
minLength: 1
pattern: "^[a-z][a-z0-9._-]{0,127}$"
description: Stable key of an installed local connector selected for this prompt.
WorkspaceAgentSessionAttachmentResponse:
type: object
additionalProperties: false
required:
- attachmentId
- mimeType
- data
properties:
attachmentId:
type: string
minLength: 1
mimeType:
type: string
enum:
- image/png
- image/jpeg
- image/webp
name:
type: string
data:
type: string
WorkspaceAgentSessionGitBranchesResponse:
type: object
additionalProperties: false
required:
- branches
properties:
branches:
type: array
items:
type: string
currentBranch:
type: string
WorkspaceGitPatchTarget:
type: string
enum:
- unstaged
- staged
- staged-and-unstaged
WorkspaceGitPatchRequest:
type: object
additionalProperties: false
required:
- cwd
- diff
properties:
cwd:
type: string
minLength: 1
diff:
type: string
minLength: 1
revert:
type: boolean
atomic:
type: boolean
target:
$ref: "#/components/schemas/WorkspaceGitPatchTarget"
allowBinary:
type: boolean
WorkspaceGitPatchStatus:
type: string
enum:
- success
- partial-success
- error
WorkspaceGitPatchErrorCode:
type: string
enum:
- not-git-repo
- invalid-patch
- patch-does-not-apply
WorkspaceGitPatchSupportResponse:
type: object
additionalProperties: false
required:
- supported
properties:
supported:
type: boolean
root:
type: string
errorCode:
$ref: "#/components/schemas/WorkspaceGitPatchErrorCode"
WorkspaceAgentSessionIsolationMode:
type: string
enum:
- worktree
WorkspaceAgentSessionIsolation:
type: object
additionalProperties: false
required:
- mode
- worktreePath
- branch
- baseCommit
properties:
worktreeId:
type: string
minLength: 1
description: Independent managed worktree resource identity. Legacy sessions may omit it.
mode:
$ref: "#/components/schemas/WorkspaceAgentSessionIsolationMode"
worktreePath:
type: string
minLength: 1
branch:
type: string
minLength: 1
baseCommit:
type: string
minLength: 1
WorkspaceAgentSessionWorktreeSupportErrorCode:
type: string
enum:
- agent-target-unsupported
- git-unavailable
- not-git-repo
- unsupported-repo-layout
WorkspaceAgentSessionWorktreeSupportResponse:
type: object
additionalProperties: false
required:
- supported
properties:
supported:
type: boolean
root:
type: string
errorCode:
$ref: "#/components/schemas/WorkspaceAgentSessionWorktreeSupportErrorCode"
WorkspaceManagedWorktree:
type: object
additionalProperties: false
required:
- worktreeId
- workspaceId
- repoRoot
- worktreePath
- branch
- baseCommit
properties:
worktreeId:
type: string
minLength: 1
workspaceId:
type: string
minLength: 1
repoRoot:
type: string
minLength: 1
worktreePath:
type: string
minLength: 1
branch:
type: string
minLength: 1
baseCommit:
type: string
minLength: 1
relativeCwd:
type: string
WorkspaceManagedWorktreeListResponse:
type: object
additionalProperties: false
required:
- worktrees
properties:
worktrees:
type: array
items:
$ref: "#/components/schemas/WorkspaceManagedWorktree"
DeleteWorkspaceManagedWorktreeResponse:
type: object
additionalProperties: false
required:
- deleted
properties:
deleted:
type: boolean
WorkspaceGitPatchExecOutput:
type: object
additionalProperties: false
required:
- command
- stdout
- stderr
properties:
command:
type: string
stdout:
type: string
stderr:
type: string
WorkspaceGitPatchResponse:
type: object
additionalProperties: false
required:
- status
- appliedPaths
- skippedPaths
- conflictedPaths
properties:
status:
$ref: "#/components/schemas/WorkspaceGitPatchStatus"
appliedPaths:
type: array
items:
type: string
skippedPaths:
type: array
items:
type: string
conflictedPaths:
type: array
items:
type: string
errorCode:
$ref: "#/components/schemas/WorkspaceGitPatchErrorCode"
execOutput:
$ref: "#/components/schemas/WorkspaceGitPatchExecOutput"
AgentQuickPrompt:
type: object
additionalProperties: false
required:
- id
- title
- content
- version
- createdAtUnixMs
- updatedAtUnixMs
properties:
id:
type: string
minLength: 1
title:
type: string
minLength: 1
maxLength: 80
content:
type: string
minLength: 1
version:
type: integer
format: int64
minimum: 1
createdAtUnixMs:
type: integer
format: int64
minimum: 0
updatedAtUnixMs:
type: integer
format: int64
minimum: 0
AgentQuickPromptListResponse:
type: object
additionalProperties: false
required:
- prompts
properties:
prompts:
type: array
maxItems: 100
items:
$ref: "#/components/schemas/AgentQuickPrompt"
AgentQuickPromptResponse:
type: object
additionalProperties: false
required:
- prompt
properties:
prompt:
$ref: "#/components/schemas/AgentQuickPrompt"
CreateAgentQuickPromptRequest:
type: object
additionalProperties: false
required:
- title
- content
properties:
title:
type: string
minLength: 1
maxLength: 80
content:
type: string
minLength: 1
UpdateAgentQuickPromptRequest:
type: object
additionalProperties: false
required:
- title
- content
- expectedVersion
properties:
title:
type: string
minLength: 1
maxLength: 80
content:
type: string
minLength: 1
expectedVersion:
type: integer
format: int64
minimum: 1
DeleteAgentQuickPromptRequest:
type: object
additionalProperties: false
required:
- expectedVersion
properties:
expectedVersion:
type: integer
format: int64
minimum: 1
MoveAgentQuickPromptRequest:
type: object
additionalProperties: false
required:
- promptId
- beforePromptId
- expectedVersion
properties:
promptId:
type: string
minLength: 1
beforePromptId:
type: string
nullable: true
minLength: 1
expectedVersion:
type: integer
format: int64
minimum: 1
UserProject:
type: object
additionalProperties: false
required:
- id
- path
- label
- sectionKey
- createdAtUnixMs
- updatedAtUnixMs
- lastUsedAtUnixMs
- pinnedAtUnixMs
properties:
id:
type: string
minLength: 1
path:
type: string
minLength: 1
label:
type: string
minLength: 1
sectionKey:
type: string
minLength: 1
createdAtUnixMs:
type: integer
format: int64
minimum: 0
updatedAtUnixMs:
type: integer
format: int64
minimum: 0
lastUsedAtUnixMs:
type: integer
format: int64
minimum: 0
pinnedAtUnixMs:
type: integer
format: int64
minimum: 0
UserProjectListResponse:
type: object
additionalProperties: false
required:
- projects
properties:
projects:
type: array
items:
$ref: "#/components/schemas/UserProject"
UserProjectResponse:
type: object
additionalProperties: false
required:
- project
properties:
project:
$ref: "#/components/schemas/UserProject"
UseUserProjectRequest:
type: object
additionalProperties: false
required:
- path
properties:
path:
type: string
minLength: 1
DeleteUserProjectRequest:
type: object
additionalProperties: false
required:
- path
properties:
path:
type: string
minLength: 1
MoveUserProjectRequest:
type: object
additionalProperties: false
required:
- projectId
- beforeProjectId
properties:
projectId:
type: string
minLength: 1
beforeProjectId:
type: string
nullable: true
minLength: 1
PinUserProjectRequest:
type: object
additionalProperties: false
required:
- projectId
- pinned
properties:
projectId:
type: string
minLength: 1
pinned:
type: boolean
CheckUserProjectPathRequest:
type: object
additionalProperties: false
required:
- path
properties:
path:
type: string
minLength: 1
UserProjectPathCheckResponse:
type: object
additionalProperties: false
required:
- exists
- isDirectory
- path
properties:
exists:
type: boolean
isDirectory:
type: boolean
path:
type: string
minLength: 1
SubmitWorkspaceAgentInteractiveRequest:
type: object
additionalProperties: false
required:
- turnId
properties:
turnId:
type: string
minLength: 1
action:
type: string
nullable: true
optionId:
type: string
nullable: true
payload:
type: object
nullable: true
additionalProperties: true
SubmitWorkspaceAgentPlanDecisionRequest:
type: object
additionalProperties: false
required:
- promptKind
- action
- idempotencyKey
properties:
promptKind:
type: string
enum:
- plan-implementation
action:
type: string
enum:
- implement
idempotencyKey:
type: string
minLength: 1
WorkspaceAgentPlanDecisionOperation:
type: object
additionalProperties: false
required:
- operationId
- workspaceId
- agentSessionId
- turnId
- requestId
- idempotencyKey
- status
properties:
operationId:
type: string
minLength: 1
workspaceId:
type: string
minLength: 1
agentSessionId:
type: string
minLength: 1
turnId:
type: string
minLength: 1
requestId:
type: string
minLength: 1
idempotencyKey:
type: string
minLength: 1
status:
type: string
enum:
- prepared
- leased
- completed
- failed
result:
type: string
nullable: true
error:
type: string
nullable: true
WorkspaceAgentPlanDecisionResponse:
type: object
additionalProperties: false
required:
- operation
properties:
operation:
$ref: "#/components/schemas/WorkspaceAgentPlanDecisionOperation"
WorkspaceAgentSessionEventEnvelope:
type: object
additionalProperties: false
required:
- seq
- agentSessionId
- type
- occurredAt
- payload
properties:
seq:
type: integer
format: int64
minimum: 0
agentSessionId:
type: string
minLength: 1
agentTargetId:
type: string
nullable: true
type:
type: string
minLength: 1
occurredAt:
type: string
format: date-time
payload:
type: object
additionalProperties: true
WorkspaceFileEntryKind:
type: string
enum:
- file
- directory
- unknown
WorkspaceFileFilterKind:
type: string
enum:
- file
- directory
x-enum-varnames:
- WorkspaceFileFilterKindFile
- WorkspaceFileFilterKindDirectory
WorkspaceFileEntry:
type: object
additionalProperties: false
required:
- path
- name
- kind
- hasChildren
- sizeBytes
- mtimeMs
- createdTimeMs
- lastOpenedMs
properties:
path:
type: string
minLength: 1
name:
type: string
kind:
$ref: "#/components/schemas/WorkspaceFileEntryKind"
hasChildren:
type: boolean
sizeBytes:
type: integer
format: int64
minimum: 0
nullable: true
mtimeMs:
type: integer
format: int64
minimum: 0
nullable: true
createdTimeMs:
type: integer
format: int64
minimum: 0
nullable: true
lastOpenedMs:
type: integer
format: int64
minimum: 0
nullable: true
WorkspaceFileEntryResponse:
type: object
additionalProperties: false
required:
- workspaceId
- root
- entry
properties:
workspaceId:
type: string
root:
type: string
minLength: 1
entry:
$ref: "#/components/schemas/WorkspaceFileEntry"
WorkspaceFilePreviewResponse:
type: object
additionalProperties: false
required:
- workspaceId
- root
- path
- name
- bytesBase64
- sizeBytes
properties:
workspaceId:
type: string
root:
type: string
minLength: 1
path:
type: string
minLength: 1
name:
type: string
bytesBase64:
type: string
sizeBytes:
type: integer
format: int64
minimum: 0
WorkspaceFileDirectoryResponse:
type: object
additionalProperties: false
required:
- workspaceId
- root
- directoryPath
- entries
properties:
workspaceId:
type: string
root:
type: string
minLength: 1
directoryPath:
type: string
minLength: 1
entries:
type: array
items:
$ref: "#/components/schemas/WorkspaceFileEntry"
WorkspaceFileTreePrefetchState:
type: string
enum:
- loaded
- partial
- not_loaded
- unavailable
WorkspaceFileTreePrefetchReason:
type: string
enum:
- budget_exhausted
- depth_limit_reached
- unreadable
WorkspaceFileTreeEntry:
type: object
additionalProperties: false
required:
- path
- name
- kind
- hasChildren
- sizeBytes
- mtimeMs
- createdTimeMs
- lastOpenedMs
properties:
path:
type: string
minLength: 1
name:
type: string
kind:
$ref: "#/components/schemas/WorkspaceFileEntryKind"
hasChildren:
type: boolean
sizeBytes:
type: integer
format: int64
minimum: 0
nullable: true
mtimeMs:
type: integer
format: int64
minimum: 0
nullable: true
createdTimeMs:
type: integer
format: int64
minimum: 0
nullable: true
lastOpenedMs:
type: integer
format: int64
minimum: 0
nullable: true
prefetchState:
allOf:
- $ref: "#/components/schemas/WorkspaceFileTreePrefetchState"
nullable: true
prefetchReason:
allOf:
- $ref: "#/components/schemas/WorkspaceFileTreePrefetchReason"
nullable: true
prefetchedDirectory:
allOf:
- $ref: "#/components/schemas/WorkspaceFileTreeDirectory"
nullable: true
WorkspaceFileTreeDirectory:
type: object
additionalProperties: false
required:
- directoryPath
- entries
- prefetchState
properties:
directoryPath:
type: string
minLength: 1
entries:
type: array
items:
$ref: "#/components/schemas/WorkspaceFileTreeEntry"
prefetchState:
$ref: "#/components/schemas/WorkspaceFileTreePrefetchState"
prefetchReason:
allOf:
- $ref: "#/components/schemas/WorkspaceFileTreePrefetchReason"
nullable: true
WorkspaceFileTreeSnapshotResponse:
type: object
additionalProperties: false
required:
- workspaceId
- root
- directory
- prefetchBudgetMs
- prefetchDepth
- budgetExceeded
properties:
workspaceId:
type: string
root:
type: string
minLength: 1
directory:
$ref: "#/components/schemas/WorkspaceFileTreeDirectory"
prefetchBudgetMs:
type: integer
format: int64
minimum: 1
prefetchDepth:
type: integer
minimum: 1
budgetExceeded:
type: boolean
WorkspaceFileSearchEntry:
type: object
additionalProperties: false
required:
- path
- name
- kind
- directoryPath
- matchTarget
- matchIndices
- score
properties:
path:
type: string
minLength: 1
name:
type: string
kind:
$ref: "#/components/schemas/WorkspaceFileEntryKind"
directoryPath:
type: string
minLength: 1
matchTarget:
$ref: "#/components/schemas/WorkspaceFileSearchMatchTarget"
matchIndices:
type: array
items:
type: integer
minimum: 0
score:
type: integer
minimum: 0
WorkspaceFileSearchMatchTarget:
type: string
enum:
- basename
- path
x-enum-varnames:
- WorkspaceFileSearchMatchTargetBasename
- WorkspaceFileSearchMatchTargetPath
WorkspaceFileSearchResponse:
type: object
additionalProperties: false
required:
- workspaceId
- root
- entries
properties:
workspaceId:
type: string
root:
type: string
minLength: 1
entries:
type: array
items:
$ref: "#/components/schemas/WorkspaceFileSearchEntry"
CreateWorkspaceFileRequest:
type: object
additionalProperties: false
required:
- path
properties:
path:
type: string
minLength: 1
WriteWorkspaceFileTextRequest:
type: object
additionalProperties: false
required:
- path
- content
properties:
path:
type: string
minLength: 1
content:
type: string
CreateWorkspaceFileDirectoryRequest:
type: object
additionalProperties: false
required:
- path
properties:
path:
type: string
minLength: 1
DeleteWorkspaceFileEntryRequest:
type: object
additionalProperties: false
required:
- path
properties:
path:
type: string
minLength: 1
kind:
allOf:
- $ref: "#/components/schemas/WorkspaceFileFilterKind"
nullable: true
DeleteWorkspaceFileEntryResponse:
type: object
additionalProperties: false
required:
- workspaceId
- path
properties:
workspaceId:
type: string
path:
type: string
minLength: 1
MoveWorkspaceFileEntryRequest:
type: object
additionalProperties: false
required:
- path
- targetDirectoryPath
properties:
path:
type: string
minLength: 1
targetDirectoryPath:
type: string
minLength: 1
RenameWorkspaceFileEntryRequest:
type: object
additionalProperties: false
required:
- path
- newName
properties:
path:
type: string
minLength: 1
newName:
type: string
minLength: 1
CopyWorkspaceFileEntryRequest:
type: object
additionalProperties: false
required:
- path
properties:
path:
type: string
minLength: 1
UploadWorkspaceFilesRequest:
type: object
additionalProperties: false
required:
- sourcePaths
- targetDirectoryPath
properties:
sourcePaths:
type: array
minItems: 1
items:
type: string
minLength: 1
targetDirectoryPath:
type: string
minLength: 1
overwrite:
type: boolean
PreflightUploadWorkspaceFilesRequest:
type: object
additionalProperties: false
required:
- sourcePaths
- targetDirectoryPath
properties:
sourcePaths:
type: array
minItems: 1
items:
type: string
minLength: 1
targetDirectoryPath:
type: string
minLength: 1
WorkspaceFileUploadConflict:
type: object
additionalProperties: false
required:
- kind
- name
- sourcePath
- destinationPath
- destinationKind
properties:
kind:
$ref: "#/components/schemas/WorkspaceFileUploadConflictKind"
name:
type: string
minLength: 1
sourcePath:
type: string
minLength: 1
destinationPath:
type: string
minLength: 1
destinationKind:
$ref: "#/components/schemas/WorkspaceFileEntryKind"
WorkspaceFileUploadConflictKind:
type: string
enum:
- replaceable
- type_mismatch
UploadWorkspaceFilesResponse:
type: object
additionalProperties: false
required:
- workspaceId
- root
- targetDirectoryPath
- entries
properties:
workspaceId:
type: string
root:
type: string
minLength: 1
targetDirectoryPath:
type: string
minLength: 1
entries:
type: array
items:
$ref: "#/components/schemas/WorkspaceFileEntry"
PreflightUploadWorkspaceFilesResponse:
type: object
additionalProperties: false
required:
- workspaceId
- root
- targetDirectoryPath
- conflicts
properties:
workspaceId:
type: string
root:
type: string
minLength: 1
targetDirectoryPath:
type: string
minLength: 1
conflicts:
type: array
items:
$ref: "#/components/schemas/WorkspaceFileUploadConflict"
WorkbenchLayoutPreset:
type: object
additionalProperties: false
required:
- kind
properties:
kind:
enum:
- balanced
- row
- column
type: string
WorkbenchNormalizedFrame:
type: object
additionalProperties: false
required:
- x
- y
- width
- height
properties:
x:
type: number
minimum: 0
maximum: 1
y:
type: number
minimum: 0
maximum: 1
width:
type: number
minimum: 0
exclusiveMinimum: true
maximum: 1
height:
type: number
minimum: 0
exclusiveMinimum: true
maximum: 1
WorkbenchLockedLayout:
type: object
additionalProperties: false
required:
- preset
- nodeIDs
properties:
preset:
$ref: "#/components/schemas/WorkbenchLayoutPreset"
nodeIDs:
type: array
minItems: 2
uniqueItems: true
items:
type: string
minLength: 1
maxLength: 160
normalizedFrames:
type: object
propertyNames:
type: string
minLength: 1
maxLength: 160
additionalProperties:
$ref: "#/components/schemas/WorkbenchNormalizedFrame"
WorkbenchSize:
type: object
additionalProperties: false
required:
- width
- height
properties:
width:
type: number
minimum: 0
exclusiveMinimum: true
height:
type: number
minimum: 0
exclusiveMinimum: true
WorkbenchSafeArea:
type: object
additionalProperties: false
required:
- top
- right
- bottom
- left
properties:
top:
type: number
minimum: 0
right:
type: number
minimum: 0
bottom:
type: number
minimum: 0
left:
type: number
minimum: 0
WorkbenchLayoutConstraints:
type: object
additionalProperties: false
required:
- minWidth
- minHeight
- surfacePadding
- safeArea
properties:
minWidth:
type: number
minimum: 0
minHeight:
type: number
minimum: 0
surfacePadding:
type: number
minimum: 0
safeArea:
$ref: "#/components/schemas/WorkbenchSafeArea"
WorkbenchLayoutBasis:
type: object
additionalProperties: false
required:
- surfaceSize
- layoutConstraints
properties:
surfaceSize:
$ref: "#/components/schemas/WorkbenchSize"
layoutConstraints:
$ref: "#/components/schemas/WorkbenchLayoutConstraints"
WorkbenchFrame:
type: object
additionalProperties: false
required:
- x
- y
- width
- height
properties:
x:
type: number
y:
type: number
width:
type: number
minimum: 160
height:
type: number
minimum: 120
WorkbenchSnapshotNode:
type: object
additionalProperties: false
required:
- id
- kind
- title
- frame
properties:
id:
type: string
minLength: 1
maxLength: 160
kind:
type: string
minLength: 1
maxLength: 120
title:
type: string
maxLength: 240
frame:
$ref: "#/components/schemas/WorkbenchFrame"
displayMode:
enum:
- floating
- fullscreen
type: string
restoreFrame:
allOf:
- $ref: "#/components/schemas/WorkbenchFrame"
nullable: true
isMinimized:
type: boolean
minimizedAtUnixMs:
type: integer
nullable: true
minimum: 0
data:
nullable: true
adapterState:
type: object
additionalProperties: true
WorkbenchSnapshotSpace:
type: object
additionalProperties: false
required:
- id
- name
- nodeIds
properties:
id:
type: string
minLength: 1
name:
type: string
nodeIds:
type: array
items:
type: string
minLength: 1
frame:
allOf:
- $ref: "#/components/schemas/WorkbenchFrame"
nullable: true
data:
nullable: true
WorkbenchSnapshot:
type: object
additionalProperties: false
required:
- schemaVersion
- nodes
properties:
schemaVersion:
type: integer
enum:
- 1
nodes:
type: array
maxItems: 128
items:
$ref: "#/components/schemas/WorkbenchSnapshotNode"
nodeStack:
type: array
items:
type: string
minLength: 1
activeNodeId:
type: string
nullable: true
spaces:
type: array
items:
$ref: "#/components/schemas/WorkbenchSnapshotSpace"
activeSpaceId:
type: string
nullable: true
layoutBasis:
$ref: "#/components/schemas/WorkbenchLayoutBasis"
lockedLayout:
$ref: "#/components/schemas/WorkbenchLockedLayout"
metadata:
type: object
additionalProperties: true
WorkspaceWorkbenchResponse:
type: object
additionalProperties: false
required:
- snapshot
properties:
snapshot:
$ref: "#/components/schemas/WorkbenchSnapshot"
PutWorkspaceWorkbenchRequest:
type: object
additionalProperties: false
required:
- snapshot
properties:
snapshot:
$ref: "#/components/schemas/WorkbenchSnapshot"
WorkspaceWorkflowStatus:
type: string
enum:
- pending_review
- in_progress
- accepted
- rejected
- completed
- failed
- canceled
x-enum-varnames:
- WorkspaceWorkflowStatusPendingReview
- WorkspaceWorkflowStatusInProgress
- WorkspaceWorkflowStatusAccepted
- WorkspaceWorkflowStatusRejected
- WorkspaceWorkflowStatusCompleted
- WorkspaceWorkflowStatusFailed
- WorkspaceWorkflowStatusCanceled
WorkspaceWorkflow:
type: object
additionalProperties: false
required:
- id
- workspaceId
- type
- owner
- triggerKind
- sourceSessionId
- sourceTurnId
- sourceToolCallId
- status
- currentRevisionId
- createdAtUnixMs
- updatedAtUnixMs
properties:
id:
type: string
format: uuid
workspaceId:
type: string
minLength: 1
type:
type: string
enum:
- tutti_mode_plan
owner:
type: string
enum:
- tutti
triggerKind:
type: string
enum:
- agent_cli
sourceSessionId:
type: string
minLength: 1
sourceTurnId:
type: string
nullable: true
sourceToolCallId:
type: string
nullable: true
status:
$ref: "#/components/schemas/WorkspaceWorkflowStatus"
currentRevisionId:
type: string
format: uuid
createdAtUnixMs:
type: integer
format: int64
minimum: 0
updatedAtUnixMs:
type: integer
format: int64
minimum: 0
TuttiModePlanExecution:
type: object
additionalProperties: false
required:
- mode
- reasoningIntensity
- orchestrationIntensity
properties:
mode:
type: string
enum:
- sequential
- parallel
reasoningIntensity:
type: integer
minimum: 0
maximum: 100
orchestrationIntensity:
type: integer
minimum: 0
maximum: 100
description: >-
Issue-owned decomposition, dependency, review, and retry strength.
This legacy v1 field keeps its original meaning and is not the
Tutti Mode speed preference.
effect:
type: integer
nullable: true
minimum: 0
maximum: 100
description: >-
Optional Tutti Mode outcome-quality preference snapshot. Omitted
documents use orchestrationIntensity as the legacy single-axis
effect and use the balanced default for speed.
speed:
type: integer
nullable: true
minimum: 0
maximum: 100
description: >-
Optional Tutti Mode completion-speed preference snapshot. Omitted
documents use the balanced default.
TuttiModePlanBudget:
type: object
additionalProperties: false
required:
- mode
- tokenLimit
- quotaWaterlinePercent
properties:
mode:
type: string
enum:
- auto
- fixed
tokenLimit:
type: integer
format: int64
minimum: 0
quotaWaterlinePercent:
type: number
format: double
minimum: 0
maximum: 100
TuttiModePlanTask:
type: object
additionalProperties: false
required:
- id
- title
- content
- priority
- agentTargetId
- modelPlanId
- model
- permissionModeId
- reasoningEffort
- executionDirectory
- dependsOn
- parallelizable
- autoAccept
properties:
id:
type: string
minLength: 1
title:
type: string
minLength: 1
content:
type: string
priority:
type: string
enum:
- high
- medium
- low
agentTargetId:
type: string
nullable: true
modelPlanId:
type: string
nullable: true
model:
type: string
nullable: true
permissionModeId:
type: string
nullable: true
description: Task-level permission mode applied when the materialized Issue task launches.
reasoningEffort:
type: string
nullable: true
description: Task-level reasoning effort applied when the materialized Issue task launches.
executionDirectory:
type: string
nullable: true
dependsOn:
type: array
uniqueItems: true
items:
type: string
minLength: 1
parallelizable:
type: boolean
description: >-
Opts this task out of the sequential default so it may run
alongside other ready tasks. Persisted onto the materialized
Issue task.
autoAccept:
type: boolean
description: >-
Bypasses the human acceptance gate: a successful completion is
accepted automatically and dispatch advances. Persisted onto the
materialized Issue task.
TuttiModePlanDocument:
type: object
additionalProperties: false
required:
- schema
- phase
- title
- topicId
- markdownBody
- execution
- budget
- tasks
properties:
schema:
type: string
enum:
- tutti-mode-plan/v1
phase:
type: string
enum:
- configuration
- task_graph
title:
type: string
minLength: 1
topicId:
type: string
minLength: 1
markdownBody:
type: string
minLength: 1
execution:
$ref: "#/components/schemas/TuttiModePlanExecution"
budget:
$ref: "#/components/schemas/TuttiModePlanBudget"
tasks:
type: array
items:
$ref: "#/components/schemas/TuttiModePlanTask"
WorkspaceWorkflowPlanRevision:
type: object
additionalProperties: false
required:
- id
- workflowId
- sequence
- schemaVersion
- documentPath
- sha256
- producedByTurnId
- createdAtUnixMs
- document
properties:
id:
type: string
format: uuid
workflowId:
type: string
format: uuid
sequence:
type: integer
minimum: 1
schemaVersion:
type: string
enum:
- tutti-mode-plan/v1
documentPath:
type: string
minLength: 1
sha256:
type: string
pattern: "^[0-9a-f]{64}$"
producedByTurnId:
type: string
nullable: true
createdAtUnixMs:
type: integer
format: int64
minimum: 0
document:
$ref: "#/components/schemas/TuttiModePlanDocument"
WorkspaceWorkflowCheckpoint:
type: object
additionalProperties: false
required:
- id
- workflowId
- kind
- revisionId
- status
- decidedBy
- decisionReason
- createdAtUnixMs
- updatedAtUnixMs
- decidedAtUnixMs
properties:
id:
type: string
format: uuid
workflowId:
type: string
format: uuid
kind:
type: string
enum:
- configuration_review
- task_review
revisionId:
type: string
format: uuid
status:
type: string
enum:
- pending
- accepted
- rejected
- superseded
- canceled
decidedBy:
type: string
nullable: true
decisionReason:
type: string
nullable: true
createdAtUnixMs:
type: integer
format: int64
minimum: 0
updatedAtUnixMs:
type: integer
format: int64
minimum: 0
decidedAtUnixMs:
type: integer
format: int64
minimum: 0
nullable: true
WorkspaceWorkflowTurnLink:
type: object
additionalProperties: false
required:
- workflowId
- turnId
- relation
- createdAtUnixMs
properties:
workflowId:
type: string
format: uuid
turnId:
type: string
minLength: 1
relation:
type: string
enum:
- source
- decomposition
- revision
- feedback
createdAtUnixMs:
type: integer
format: int64
minimum: 0
WorkspaceWorkflowOperation:
type: object
additionalProperties: false
required:
- id
- workflowId
- kind
- status
- revisionId
- issueId
- errorCode
- errorMessage
- createdAtUnixMs
- updatedAtUnixMs
- startedAtUnixMs
- completedAtUnixMs
properties:
id:
type: string
format: uuid
workflowId:
type: string
format: uuid
kind:
type: string
enum:
- generate_task_graph
- create_revision
- create_issue
- start_issue
status:
type: string
enum:
- pending
- running
- succeeded
- failed
- canceled
revisionId:
type: string
format: uuid
nullable: true
issueId:
type: string
nullable: true
errorCode:
type: string
nullable: true
errorMessage:
type: string
nullable: true
createdAtUnixMs:
type: integer
format: int64
minimum: 0
updatedAtUnixMs:
type: integer
format: int64
minimum: 0
startedAtUnixMs:
type: integer
format: int64
minimum: 0
nullable: true
completedAtUnixMs:
type: integer
format: int64
minimum: 0
nullable: true
WorkspaceWorkflowSnapshot:
type: object
additionalProperties: false
required:
- workflow
- revisions
- checkpoints
- turnLinks
- operations
- actionableItems
properties:
workflow:
$ref: "#/components/schemas/WorkspaceWorkflow"
revisions:
type: array
items:
$ref: "#/components/schemas/WorkspaceWorkflowPlanRevision"
checkpoints:
type: array
items:
$ref: "#/components/schemas/WorkspaceWorkflowCheckpoint"
turnLinks:
type: array
items:
$ref: "#/components/schemas/WorkspaceWorkflowTurnLink"
operations:
type: array
items:
$ref: "#/components/schemas/WorkspaceWorkflowOperation"
actionableItems:
type: array
description: Read-only projection of the accepted current task graph; never an independent mutable record.
items:
$ref: "#/components/schemas/WorkspaceWorkflowActionableItem"
WorkspaceWorkflowActionableItem:
type: object
additionalProperties: false
required:
- id
- sourceWorkflowId
- sourceRevisionId
- ordinal
- topicId
- execution
- budget
- task
properties:
id:
type: string
minLength: 1
sourceWorkflowId:
type: string
format: uuid
sourceRevisionId:
type: string
format: uuid
ordinal:
type: integer
minimum: 1
topicId:
type: string
minLength: 1
execution:
$ref: "#/components/schemas/TuttiModePlanExecution"
budget:
$ref: "#/components/schemas/TuttiModePlanBudget"
task:
$ref: "#/components/schemas/TuttiModePlanTask"
WorkspaceWorkflowListResponse:
type: object
additionalProperties: false
required:
- workflows
properties:
workflows:
type: array
items:
$ref: "#/components/schemas/WorkspaceWorkflowSnapshot"
WorkspaceWorkflowTaskAssignment:
type: object
additionalProperties: false
description: >-
User-owned per-task assignment override recorded with an accepted task
review decision. Null fields keep the plan document value; empty
strings clear it.
required:
- taskId
properties:
taskId:
type: string
minLength: 1
agentTargetId:
type: string
nullable: true
modelPlanId:
type: string
nullable: true
model:
type: string
nullable: true
permissionModeId:
type: string
nullable: true
reasoningEffort:
type: string
nullable: true
parallelizable:
type: boolean
nullable: true
description: Overrides the plan document's per-task parallel opt-in; null keeps it.
autoAccept:
type: boolean
nullable: true
description: Overrides the plan document's per-task acceptance bypass; null keeps it.
DecideWorkspaceWorkflowCheckpointRequest:
type: object
additionalProperties: false
required:
- decision
- decidedBy
properties:
decision:
type: string
enum:
- accepted
- rejected
- canceled
decidedBy:
type: string
minLength: 1
reason:
type: string
nullable: true
taskAssignments:
type: array
nullable: true
description: >-
Optional per-task assignment overrides. Only valid when accepting
a task review checkpoint; recorded durably with the decision and
merged into the materialized Issue tasks.
items:
$ref: "#/components/schemas/WorkspaceWorkflowTaskAssignment"
CreateWorkspaceRequest:
type: object
additionalProperties: false
required:
- name
properties:
name:
type: string
minLength: 1
UpdateWorkspaceRequest:
type: object
additionalProperties: false
required:
- name
properties:
name:
type: string
minLength: 1