{ "openapi": "3.0.3", "info": { "title": "Discobot Server API", "version": "0.0.0", "description": "Authoritative contract for the Discobot server HTTP API. This schema is\ngenerated from the existing server route table and public Go DTOs, and is\nintended to become the source for generated server/client code.\n" }, "servers": [ { "url": "/" } ], "security": [ { "cookieAuth": [] }, { "bearerAuth": [] } ], "tags": [ { "name": "Health", "description": "Health checks, server configuration, diagnostic information, and route metadata." }, { "name": "Auth", "description": "Browser authentication session endpoints for login, logout, callback handling, and current-user discovery." }, { "name": "Preferences", "description": "Per-user preference storage and retrieval." }, { "name": "Projects", "description": "Project lifecycle and project-scoped helper endpoints." }, { "name": "Members", "description": "Project membership and invitation management." }, { "name": "Events", "description": "Project event streams over Server-Sent Events and WebSocket transports." }, { "name": "Models", "description": "Model catalog endpoints available within a project." }, { "name": "Workspaces", "description": "Workspace lifecycle and sandbox provider status for workspaces." }, { "name": "Git", "description": "Git repository inspection and mutation operations for workspaces." }, { "name": "Sessions", "description": "Agent session lifecycle, commands, and session-level state." }, { "name": "Threads", "description": "Session thread lifecycle, prompt queues, and usage metadata." }, { "name": "Chat", "description": "Chat submission, streaming, cancellation, and interactive question endpoints." }, { "name": "Files", "description": "Session and artifact file browsing, reading, writing, searching, and diff endpoints." }, { "name": "Terminal", "description": "Interactive terminal WebSocket and terminal status endpoints." }, { "name": "Hooks", "description": "Session hook status, state, output, download, and rerun endpoints." }, { "name": "Services", "description": "Session service listing, control, localhost binding, and output streaming." }, { "name": "Credentials", "description": "Project credential configuration, assignment, validation, and OAuth/device-code flows." }, { "name": "Sandbox Providers", "description": "Project sandbox provider type, instance, resource, and inspection endpoints." }, { "name": "Resources", "description": "Project-level runtime resources, cache volumes, and inspection metadata." } ], "paths": { "/health": { "get": { "tags": [ "Health" ], "summary": "Health check", "security": [], "responses": { "200": { "description": "Server is healthy", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HealthResponse" } } } } }, "description": "Health check. Returns the requested resource or collection for the authenticated caller.", "operationId": "getHealth" } }, "/api/status": { "get": { "tags": [ "Health" ], "summary": "Get system status", "responses": { "200": { "description": "System status", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SystemStatusResponse" } } } }, "default": { "$ref": "#/components/responses/Error" } }, "description": "Get system status. Returns the requested resource or collection for the authenticated caller.", "operationId": "getStatus" } }, "/api/server-config": { "get": { "tags": [ "Health" ], "summary": "Get public server configuration", "responses": { "200": { "description": "Server configuration", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ServerConfig" } } } } }, "description": "Get public server configuration. Returns the requested resource or collection for the authenticated caller.", "operationId": "getServerConfig" } }, "/api/support-info": { "get": { "tags": [ "Health" ], "summary": "Get diagnostic support information", "responses": { "200": { "description": "Support information", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SupportInfoResponse" } } } }, "default": { "$ref": "#/components/responses/Error" } }, "description": "Get diagnostic support information. Returns the requested resource or collection for the authenticated caller.", "operationId": "getSupportInfo" } }, "/api/routes": { "get": { "tags": [ "Health" ], "summary": "List registered API routes", "responses": { "200": { "description": "Route metadata", "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/RouteInfo" }, "description": "Response payload encoded as application/json." } } } } }, "description": "List registered API routes. Returns the requested resource or collection for the authenticated caller.", "operationId": "listRoutes" } }, "/auth/login": { "get": { "tags": [ "Auth" ], "summary": "Start OIDC login", "security": [], "responses": { "302": { "description": "Redirect to identity provider" }, "default": { "$ref": "#/components/responses/Error" } }, "description": "Start OIDC login. Returns the requested resource or collection for the authenticated caller.", "operationId": "getAuthLogin" } }, "/auth/callback": { "get": { "tags": [ "Auth" ], "summary": "OIDC callback", "security": [], "parameters": [ { "name": "code", "in": "query", "required": false, "schema": { "type": "string" }, "description": "Authorization code returned by the OAuth provider." }, { "name": "state", "in": "query", "required": false, "schema": { "type": "string" }, "description": "Opaque state value used to correlate an OAuth callback." } ], "responses": { "302": { "description": "Redirect after callback" }, "default": { "$ref": "#/components/responses/Error" } }, "description": "OIDC callback. Returns the requested resource or collection for the authenticated caller.", "operationId": "getAuthCallback" } }, "/auth/logout": { "post": { "tags": [ "Auth" ], "summary": "Logout", "security": [], "responses": { "200": { "description": "Logout result", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MessageResponse" } } } } }, "description": "Logout. Accepts a JSON request body when defined and returns the resulting resource or action status.", "operationId": "postAuthLogout" } }, "/auth/me": { "get": { "tags": [ "Auth" ], "summary": "Get current user", "security": [], "responses": { "200": { "description": "Current user", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/AuthMeResponse" } } } } }, "description": "Get current user. Returns the requested resource or collection for the authenticated caller.", "operationId": "getAuthMe" } }, "/api/preferences/": { "get": { "tags": [ "Preferences" ], "summary": "List user preferences", "responses": { "200": { "description": "Preferences", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/PreferencesResponse" } } } } }, "description": "List user preferences. Returns the requested resource or collection for the authenticated caller.", "operationId": "listPreferences" }, "put": { "tags": [ "Preferences" ], "summary": "Replace multiple user preferences", "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SetPreferencesRequest" } } }, "description": "JSON payload for replace multiple user preferences." }, "responses": { "200": { "description": "Preferences", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/PreferencesResponse" } } } }, "default": { "$ref": "#/components/responses/Error" } }, "description": "Replace multiple user preferences. Replaces the target resource or assignment with the supplied JSON representation.", "operationId": "updatePreferences" } }, "/api/preferences/{key}": { "parameters": [ { "$ref": "#/components/parameters/PreferenceKey" } ], "get": { "tags": [ "Preferences" ], "summary": "Get a user preference", "responses": { "200": { "description": "Preference value", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/PreferenceResponse" } } } }, "default": { "$ref": "#/components/responses/Error" } }, "description": "Get a user preference. Returns the requested resource or collection for the authenticated caller.", "operationId": "getPreferencesByKey" }, "put": { "tags": [ "Preferences" ], "summary": "Set a user preference", "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SetPreferenceRequest" } } }, "description": "JSON payload for set a user preference." }, "responses": { "200": { "description": "Preference value", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/PreferenceResponse" } } } }, "default": { "$ref": "#/components/responses/Error" } }, "description": "Set a user preference. Replaces the target resource or assignment with the supplied JSON representation.", "operationId": "updatePreferencesByKey" }, "delete": { "tags": [ "Preferences" ], "summary": "Delete a user preference", "responses": { "200": { "description": "Deleted preference", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MessageResponse" } } } }, "default": { "$ref": "#/components/responses/Error" } }, "description": "Delete a user preference. Deletes or detaches the target resource and returns the action status.", "operationId": "deletePreferencesByKey" } }, "/api/projects": { "get": { "tags": [ "Projects" ], "summary": "List projects", "responses": { "200": { "description": "Projects", "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/Project" }, "description": "Response payload encoded as application/json." } } } } }, "description": "List projects. Returns the requested resource or collection for the authenticated caller.", "operationId": "listProjects" }, "post": { "tags": [ "Projects" ], "summary": "Create a project", "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateProjectRequest" } } }, "description": "JSON payload for create a project." }, "responses": { "200": { "description": "Created project", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Project" } } } }, "default": { "$ref": "#/components/responses/Error" } }, "description": "Create a project. Accepts a JSON request body when defined and returns the resulting resource or action status.", "operationId": "createProject" } }, "/api/projects/{projectId}/": { "parameters": [ { "$ref": "#/components/parameters/ProjectID" } ], "get": { "tags": [ "Projects" ], "summary": "Get a project", "responses": { "200": { "description": "Project", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Project" } } } }, "default": { "$ref": "#/components/responses/Error" } }, "description": "Get a project. Returns the requested resource or collection for the authenticated caller.", "operationId": "getProjectsByProjectId" }, "put": { "tags": [ "Projects" ], "summary": "Update a project", "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateProjectRequest" } } }, "description": "JSON payload for update a project." }, "responses": { "200": { "description": "Project", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Project" } } } }, "default": { "$ref": "#/components/responses/Error" } }, "description": "Update a project. Replaces the target resource or assignment with the supplied JSON representation.", "operationId": "updateProjectsByProjectId" }, "delete": { "tags": [ "Projects" ], "summary": "Delete a project", "responses": { "200": { "description": "Project deleted", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MessageResponse" } } } }, "default": { "$ref": "#/components/responses/Error" } }, "description": "Delete a project. Deletes or detaches the target resource and returns the action status.", "operationId": "deleteProjectsByProjectId" } }, "/api/projects/{projectId}/events": { "get": { "tags": [ "Events" ], "summary": "Subscribe to project Server-Sent Events", "parameters": [ { "$ref": "#/components/parameters/ProjectID" }, { "name": "since", "in": "query", "required": false, "schema": { "type": "string", "format": "date-time" }, "description": "Only include events after this timestamp when supported." }, { "name": "after", "in": "query", "required": false, "schema": { "type": "string" }, "description": "Event cursor used to resume after a previously observed event." } ], "responses": { "200": { "description": "SSE stream", "content": { "text/event-stream": { "schema": { "type": "string", "description": "Response payload encoded as text/event-stream." } } } } }, "description": "Subscribe to project Server-Sent Events. Returns a streaming response for incremental updates.", "operationId": "watchProjectsByProjectIdEvents" } }, "/api/projects/{projectId}/ws": { "get": { "tags": [ "Events" ], "summary": "Multiplexed project WebSocket", "parameters": [ { "$ref": "#/components/parameters/ProjectID" } ], "responses": { "101": { "description": "WebSocket upgrade" } }, "description": "Multiplexed project WebSocket. Upgrades the HTTP request to a WebSocket connection for real-time communication.", "operationId": "connectProjectsByProjectId", "x-discobot-websocket": { "requests": [ { "$ref": "#/components/schemas/ProjectStreamRequest" } ], "messages": [ { "x-discobot-discriminator": { "type": "subscribed" }, "allOf": [ { "$ref": "#/components/schemas/ProjectStreamSubscribedEvent" } ] }, { "x-discobot-discriminator": { "type": "unsubscribed" }, "allOf": [ { "$ref": "#/components/schemas/ProjectStreamUnsubscribedEvent" } ] }, { "x-discobot-discriminator": { "type": "complete" }, "allOf": [ { "$ref": "#/components/schemas/ProjectStreamCompleteEvent" } ] }, { "x-discobot-discriminator": { "type": "error" }, "allOf": [ { "$ref": "#/components/schemas/ProjectStreamErrorEvent" } ] }, { "x-discobot-discriminator": { "type": "event" }, "allOf": [ { "$ref": "#/components/schemas/ProjectEventsStreamMessage" } ] }, { "x-discobot-discriminator": { "type": "event" }, "allOf": [ { "$ref": "#/components/schemas/ChatStreamMessage" } ] }, { "x-discobot-discriminator": { "type": "event" }, "allOf": [ { "$ref": "#/components/schemas/ServiceOutputEvent" } ] }, { "x-discobot-discriminator": { "type": "event", "stream": "session" }, "allOf": [ { "$ref": "#/components/schemas/SessionStreamMessage" } ] } ] } } }, "/api/projects/{projectId}/models": { "get": { "tags": [ "Models" ], "summary": "List models available to a project", "parameters": [ { "$ref": "#/components/parameters/ProjectID" } ], "responses": { "200": { "description": "Models", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ModelsResponse" } } } }, "default": { "$ref": "#/components/responses/Error" } }, "description": "List models available to a project. Returns the requested resource or collection for the authenticated caller.", "operationId": "getProjectsByProjectIdModels" } }, "/api/projects/{projectId}/members": { "get": { "tags": [ "Members" ], "summary": "List project members", "parameters": [ { "$ref": "#/components/parameters/ProjectID" } ], "responses": { "200": { "description": "Members", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ProjectMembersResponse" } } } } }, "description": "List project members. Returns the requested resource or collection for the authenticated caller.", "operationId": "getProjectsByProjectIdMembers" } }, "/api/projects/{projectId}/members/{userId}": { "delete": { "tags": [ "Members" ], "summary": "Remove a project member", "parameters": [ { "$ref": "#/components/parameters/ProjectID" }, { "$ref": "#/components/parameters/UserID" } ], "responses": { "200": { "description": "Member removed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MessageResponse" } } } } }, "description": "Remove a project member. Deletes or detaches the target resource and returns the action status.", "operationId": "deleteProjectsByProjectIdMembersByUserId" } }, "/api/projects/{projectId}/invitations": { "post": { "tags": [ "Members" ], "summary": "Create a project invitation", "parameters": [ { "$ref": "#/components/parameters/ProjectID" } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateInvitationRequest" } } }, "description": "JSON payload for create a project invitation." }, "responses": { "200": { "description": "Invitation", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Invitation" } } } } }, "description": "Create a project invitation. Accepts a JSON request body when defined and returns the resulting resource or action status.", "operationId": "createProjectsByProjectIdInvitation" } }, "/api/projects/{projectId}/invitations/{token}/accept": { "post": { "tags": [ "Members" ], "summary": "Accept a project invitation", "parameters": [ { "$ref": "#/components/parameters/ProjectID" }, { "$ref": "#/components/parameters/InvitationToken" } ], "responses": { "200": { "description": "Accepted invitation", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MessageResponse" } } } } }, "description": "Accept a project invitation. Accepts a JSON request body when defined and returns the resulting resource or action status.", "operationId": "postProjectsByProjectIdInvitationsByTokenAccept" } }, "/api/projects/{projectId}/resources": { "get": { "tags": [ "Resources" ], "summary": "Get project provider VM resources", "parameters": [ { "$ref": "#/components/parameters/ProjectID" } ], "responses": { "200": { "description": "Resources", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ProviderResources" } } } } }, "description": "Get project provider VM resources. Returns the requested resource or collection for the authenticated caller.", "operationId": "getProjectsByProjectIdResources" }, "post": { "tags": [ "Resources" ], "summary": "Update project provider VM resources", "parameters": [ { "$ref": "#/components/parameters/ProjectID" } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ProviderResources" } } }, "description": "JSON payload for update project provider vm resources." }, "responses": { "200": { "description": "Resources", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ProviderResources" } } } } }, "description": "Update project provider VM resources. Accepts a JSON request body when defined and returns the resulting resource or action status.", "operationId": "createProjectsByProjectIdResource" } }, "/api/projects/{projectId}/inspection": { "get": { "tags": [ "Resources" ], "summary": "Get project inspection container information", "parameters": [ { "$ref": "#/components/parameters/ProjectID" } ], "responses": { "200": { "description": "Inspection", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/InspectionInfo" } } } } }, "description": "Get project inspection container information. Returns the requested resource or collection for the authenticated caller.", "operationId": "getProjectsByProjectIdInspection" } }, "/api/projects/{projectId}/inspection/terminal/ws": { "get": { "tags": [ "Terminal" ], "summary": "Project inspection terminal WebSocket", "parameters": [ { "$ref": "#/components/parameters/ProjectID" } ], "responses": { "101": { "description": "WebSocket upgrade" } }, "description": "Project inspection terminal WebSocket. Upgrades the HTTP request to a WebSocket connection for real-time communication.", "operationId": "connectProjectsByProjectIdInspectionTerminal" } }, "/api/projects/{projectId}/suggestions": { "get": { "tags": [ "Projects" ], "summary": "Get autocomplete suggestions", "parameters": [ { "$ref": "#/components/parameters/ProjectID" }, { "name": "q", "in": "query", "required": false, "schema": { "type": "string" }, "description": "Search or autocomplete query string." }, { "name": "type", "in": "query", "required": false, "schema": { "type": "string" }, "description": "Suggestion category filter." } ], "responses": { "200": { "description": "Suggestions", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SuggestionsResponse" } } } } }, "description": "Get autocomplete suggestions. Returns the requested resource or collection for the authenticated caller.", "operationId": "getProjectsByProjectIdSuggestions" } }, "/api/projects/{projectId}/auth-providers": { "get": { "tags": [ "Credentials" ], "summary": "Get auth providers", "parameters": [ { "$ref": "#/components/parameters/ProjectID" } ], "responses": { "200": { "description": "Auth providers", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/AuthProvidersResponse" } } } } }, "description": "Get auth providers. Returns the requested resource or collection for the authenticated caller.", "operationId": "getProjectsByProjectIdAuthProviders" } }, "/api/projects/{projectId}/cache": { "get": { "tags": [ "Resources" ], "summary": "List project cache volumes", "parameters": [ { "$ref": "#/components/parameters/ProjectID" } ], "responses": { "200": { "description": "Cache volumes", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CacheVolumesResponse" } } } } }, "description": "List project cache volumes. Returns the requested resource or collection for the authenticated caller.", "operationId": "getProjectsByProjectIdCache" }, "delete": { "tags": [ "Resources" ], "summary": "Delete project cache volumes", "parameters": [ { "$ref": "#/components/parameters/ProjectID" } ], "responses": { "200": { "description": "Cache cleared", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MessageResponse" } } } } }, "description": "Delete project cache volumes. Deletes or detaches the target resource and returns the action status.", "operationId": "deleteProjectsByProjectIdCache" } }, "/api/projects/{projectId}/workspaces/providers": { "get": { "tags": [ "Workspaces" ], "summary": "List sandbox providers with status", "parameters": [ { "$ref": "#/components/parameters/ProjectID" } ], "responses": { "200": { "description": "Providers", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SandboxProviderStatusesResponse" } } } } }, "description": "List sandbox providers with status. Returns the requested resource or collection for the authenticated caller.", "operationId": "getProjectsByProjectIdWorkspacesProviders" } }, "/api/projects/{projectId}/workspaces/providers/{provider}": { "get": { "tags": [ "Workspaces" ], "summary": "Get sandbox provider status", "parameters": [ { "$ref": "#/components/parameters/ProjectID" }, { "$ref": "#/components/parameters/Provider" } ], "responses": { "200": { "description": "Provider status", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SandboxProviderStatus" } } } } }, "description": "Get sandbox provider status. Returns the requested resource or collection for the authenticated caller.", "operationId": "getProjectsByProjectIdWorkspacesProvidersByProvider" } }, "/api/projects/{projectId}/workspaces/": { "get": { "tags": [ "Workspaces" ], "summary": "List workspaces", "parameters": [ { "$ref": "#/components/parameters/ProjectID" } ], "responses": { "200": { "description": "Workspaces", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/WorkspacesResponse" } } } } }, "description": "List workspaces. Returns the requested resource or collection for the authenticated caller.", "operationId": "getProjectsByProjectIdWorkspaces" }, "post": { "tags": [ "Workspaces" ], "summary": "Create a workspace", "parameters": [ { "$ref": "#/components/parameters/ProjectID" } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateWorkspaceRequest" } } }, "description": "JSON payload for create a workspace." }, "responses": { "201": { "description": "Workspace", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Workspace" } } } } }, "description": "Create a workspace. Accepts a JSON request body when defined and returns the resulting resource or action status.", "operationId": "createProjectsByProjectIdWorkspace" } }, "/api/projects/{projectId}/workspaces/validate": { "post": { "tags": [ "Workspaces" ], "summary": "Validate workspace input", "parameters": [ { "$ref": "#/components/parameters/ProjectID" } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ValidateWorkspaceRequest" } } }, "description": "JSON payload for validate workspace input." }, "responses": { "200": { "description": "Validation result", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ValidateWorkspaceResponse" } } } } }, "description": "Validate workspace input. Accepts a JSON request body when defined and returns the resulting resource or action status.", "operationId": "postProjectsByProjectIdWorkspacesValidate" } }, "/api/projects/{projectId}/workspaces/{workspaceId}": { "parameters": [ { "$ref": "#/components/parameters/ProjectID" }, { "$ref": "#/components/parameters/WorkspaceID" } ], "get": { "tags": [ "Workspaces" ], "summary": "Get a workspace", "responses": { "200": { "description": "Workspace", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Workspace" } } } } }, "description": "Get a workspace. Returns the requested resource or collection for the authenticated caller.", "operationId": "getProjectsByProjectIdWorkspacesByWorkspaceId" }, "put": { "tags": [ "Workspaces" ], "summary": "Update a workspace", "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateWorkspaceRequest" } } }, "description": "JSON payload for update a workspace." }, "responses": { "200": { "description": "Workspace", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Workspace" } } } } }, "description": "Update a workspace. Replaces the target resource or assignment with the supplied JSON representation.", "operationId": "updateProjectsByProjectIdWorkspacesByWorkspaceId" }, "delete": { "tags": [ "Workspaces" ], "summary": "Delete a workspace", "parameters": [ { "name": "deleteFiles", "in": "query", "required": false, "schema": { "type": "boolean" }, "description": "When true, also remove files associated with the workspace." } ], "responses": { "200": { "description": "Workspace deleted", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MessageResponse" } } } } }, "description": "Delete a workspace. Deletes or detaches the target resource and returns the action status.", "operationId": "deleteProjectsByProjectIdWorkspacesByWorkspaceId" } }, "/api/projects/{projectId}/workspaces/{workspaceId}/git/status": { "get": { "tags": [ "Git" ], "summary": "Get git status", "parameters": [ { "$ref": "#/components/parameters/ProjectID" }, { "$ref": "#/components/parameters/WorkspaceID" } ], "responses": { "200": { "description": "Git status", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GitStatus" } } } } }, "description": "Get git status. Returns the requested resource or collection for the authenticated caller.", "operationId": "getProjectsByProjectIdWorkspacesByWorkspaceIdGitStatus" } }, "/api/projects/{projectId}/workspaces/{workspaceId}/git/fetch": { "post": { "tags": [ "Git" ], "summary": "Fetch workspace remote", "parameters": [ { "$ref": "#/components/parameters/ProjectID" }, { "$ref": "#/components/parameters/WorkspaceID" } ], "responses": { "200": { "description": "Fetch result", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MessageResponse" } } } } }, "description": "Fetch workspace remote. Accepts a JSON request body when defined and returns the resulting resource or action status.", "operationId": "postProjectsByProjectIdWorkspacesByWorkspaceIdGitFetch" } }, "/api/projects/{projectId}/workspaces/{workspaceId}/git/checkout": { "post": { "tags": [ "Git" ], "summary": "Checkout a branch or ref", "parameters": [ { "$ref": "#/components/parameters/ProjectID" }, { "$ref": "#/components/parameters/WorkspaceID" } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GitCheckoutRequest" } } }, "description": "JSON payload for checkout a branch or ref." }, "responses": { "200": { "description": "Checkout result", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MessageResponse" } } } } }, "description": "Checkout a branch or ref. Accepts a JSON request body when defined and returns the resulting resource or action status.", "operationId": "postProjectsByProjectIdWorkspacesByWorkspaceIdGitCheckout" } }, "/api/projects/{projectId}/workspaces/{workspaceId}/git/branches": { "get": { "tags": [ "Git" ], "summary": "List branches", "parameters": [ { "$ref": "#/components/parameters/ProjectID" }, { "$ref": "#/components/parameters/WorkspaceID" } ], "responses": { "200": { "description": "Branches", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GitBranchesResponse" } } } } }, "description": "List branches. Returns the requested resource or collection for the authenticated caller.", "operationId": "getProjectsByProjectIdWorkspacesByWorkspaceIdGitBranches" } }, "/api/projects/{projectId}/workspaces/{workspaceId}/git/diff": { "get": { "tags": [ "Git" ], "summary": "Get workspace diff", "parameters": [ { "$ref": "#/components/parameters/ProjectID" }, { "$ref": "#/components/parameters/WorkspaceID" }, { "name": "base", "in": "query", "schema": { "type": "string" }, "description": "Base revision or ref for a diff." }, { "name": "head", "in": "query", "schema": { "type": "string" }, "description": "Head revision or ref for a diff." }, { "name": "staged", "in": "query", "schema": { "type": "boolean" }, "description": "When true, return staged changes." }, { "name": "path", "in": "query", "schema": { "type": "array", "items": { "type": "string" } }, "style": "form", "explode": true, "description": "Limit the diff to one or more paths." } ], "responses": { "200": { "description": "Diff", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DiffResponse" } } } } }, "description": "Get workspace diff. Returns the requested resource or collection for the authenticated caller.", "operationId": "getProjectsByProjectIdWorkspacesByWorkspaceIdGitDiff" } }, "/api/projects/{projectId}/workspaces/{workspaceId}/git/files": { "get": { "tags": [ "Git" ], "summary": "Get workspace file tree", "parameters": [ { "$ref": "#/components/parameters/ProjectID" }, { "$ref": "#/components/parameters/WorkspaceID" }, { "name": "ref", "in": "query", "schema": { "type": "string" }, "description": "Git revision or ref to read from." } ], "responses": { "200": { "description": "File tree", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/FileTreeResponse" } } } } }, "description": "Get workspace file tree. Returns the requested resource or collection for the authenticated caller.", "operationId": "getProjectsByProjectIdWorkspacesByWorkspaceIdGitFiles" } }, "/api/projects/{projectId}/workspaces/{workspaceId}/git/file": { "get": { "tags": [ "Git" ], "summary": "Get workspace file content", "parameters": [ { "$ref": "#/components/parameters/ProjectID" }, { "$ref": "#/components/parameters/WorkspaceID" }, { "name": "path", "in": "query", "required": true, "schema": { "type": "string" }, "description": "File or directory path relative to the workspace or session root." }, { "name": "ref", "in": "query", "schema": { "type": "string" }, "description": "Git revision or ref to read from." } ], "responses": { "200": { "description": "File content", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/FileContentResponse" } } } } }, "description": "Get workspace file content. Returns the requested resource or collection for the authenticated caller.", "operationId": "getProjectsByProjectIdWorkspacesByWorkspaceIdGitFile" }, "post": { "tags": [ "Git" ], "summary": "Write workspace file", "parameters": [ { "$ref": "#/components/parameters/ProjectID" }, { "$ref": "#/components/parameters/WorkspaceID" } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/WriteFileRequest" } } }, "description": "JSON payload for write workspace file." }, "responses": { "200": { "description": "File written", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MessageResponse" } } } } }, "description": "Write workspace file. Accepts a JSON request body when defined and returns the resulting resource or action status.", "operationId": "postProjectsByProjectIdWorkspacesByWorkspaceIdGitFile" } }, "/api/projects/{projectId}/workspaces/{workspaceId}/git/stage": { "post": { "tags": [ "Git" ], "summary": "Stage workspace files", "parameters": [ { "$ref": "#/components/parameters/ProjectID" }, { "$ref": "#/components/parameters/WorkspaceID" } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GitStageRequest" } } }, "description": "JSON payload for stage workspace files." }, "responses": { "200": { "description": "Stage result", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MessageResponse" } } } } }, "description": "Stage workspace files. Accepts a JSON request body when defined and returns the resulting resource or action status.", "operationId": "postProjectsByProjectIdWorkspacesByWorkspaceIdGitStage" } }, "/api/projects/{projectId}/workspaces/{workspaceId}/git/commit": { "post": { "tags": [ "Git" ], "summary": "Commit workspace changes", "parameters": [ { "$ref": "#/components/parameters/ProjectID" }, { "$ref": "#/components/parameters/WorkspaceID" } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GitCommitRequest" } } }, "description": "JSON payload for commit workspace changes." }, "responses": { "201": { "description": "Commit", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GitCommitResponse" } } } } }, "description": "Commit workspace changes. Accepts a JSON request body when defined and returns the resulting resource or action status.", "operationId": "postProjectsByProjectIdWorkspacesByWorkspaceIdGitCommit" } }, "/api/projects/{projectId}/workspaces/{workspaceId}/git/log": { "get": { "tags": [ "Git" ], "summary": "Get workspace commit log", "parameters": [ { "$ref": "#/components/parameters/ProjectID" }, { "$ref": "#/components/parameters/WorkspaceID" }, { "name": "limit", "in": "query", "schema": { "type": "integer" }, "description": "Maximum number of items to return." } ], "responses": { "200": { "description": "Commit log", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GitLogResponse" } } } } }, "description": "Get workspace commit log. Returns the requested resource or collection for the authenticated caller.", "operationId": "getProjectsByProjectIdWorkspacesByWorkspaceIdGitLog" } }, "/api/projects/{projectId}/sessions/": { "get": { "tags": [ "Sessions" ], "summary": "List sessions", "parameters": [ { "$ref": "#/components/parameters/ProjectID" } ], "responses": { "200": { "description": "Sessions", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SessionsResponse" } } } } }, "description": "List sessions. Returns the requested resource or collection for the authenticated caller.", "operationId": "getProjectsByProjectIdSessions" }, "post": { "tags": [ "Sessions" ], "summary": "Create a session without a chat message", "parameters": [ { "$ref": "#/components/parameters/ProjectID" } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateSessionRequest" } } }, "description": "JSON payload for create a session without a chat message." }, "responses": { "200": { "description": "Session", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Session" } } } } }, "description": "Create a session without a chat message. Accepts a JSON request body when defined and returns the resulting resource or action status.", "operationId": "createProjectsByProjectIdSession" } }, "/api/projects/{projectId}/sessions/{sessionId}/": { "parameters": [ { "$ref": "#/components/parameters/ProjectID" }, { "$ref": "#/components/parameters/SessionID" } ], "get": { "tags": [ "Sessions" ], "summary": "Get a session", "responses": { "200": { "description": "Session", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Session" } } } } }, "description": "Get a session. Returns the requested resource or collection for the authenticated caller.", "operationId": "getProjectsByProjectIdSessionsBySessionId" }, "put": { "tags": [ "Sessions" ], "summary": "Update a session", "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateSessionRequest" } } }, "description": "JSON payload for update a session." }, "responses": { "200": { "description": "Session", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Session" } } } } }, "description": "Update a session. Replaces the target resource or assignment with the supplied JSON representation.", "operationId": "updateProjectsByProjectIdSessionsBySessionId" }, "patch": { "tags": [ "Sessions" ], "summary": "Patch a session", "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateSessionRequest" } } }, "description": "JSON payload for patch a session." }, "responses": { "200": { "description": "Session", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Session" } } } } }, "description": "Patch a session. Applies a partial update to the target resource.", "operationId": "patchProjectsByProjectIdSessionsBySessionId" }, "delete": { "tags": [ "Sessions" ], "summary": "Delete a session", "responses": { "200": { "description": "Session deleted", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MessageResponse" } } } } }, "description": "Delete a session. Deletes or detaches the target resource and returns the action status.", "operationId": "deleteProjectsByProjectIdSessionsBySessionId" } }, "/api/projects/{projectId}/sessions/{sessionId}/stop": { "post": { "tags": [ "Sessions" ], "summary": "Stop a session sandbox", "parameters": [ { "$ref": "#/components/parameters/ProjectID" }, { "$ref": "#/components/parameters/SessionID" } ], "responses": { "200": { "description": "Stop result", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MessageResponse" } } } } }, "description": "Stop a session sandbox. Accepts a JSON request body when defined and returns the resulting resource or action status.", "operationId": "postProjectsByProjectIdSessionsBySessionIdStop" } }, "/api/projects/{projectId}/sessions/{sessionId}/threads": { "get": { "tags": [ "Threads" ], "summary": "List session threads", "parameters": [ { "$ref": "#/components/parameters/ProjectID" }, { "$ref": "#/components/parameters/SessionID" } ], "responses": { "200": { "description": "Threads", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ThreadsResponse" } } } } }, "description": "List session threads. Returns the requested resource or collection for the authenticated caller.", "operationId": "getProjectsByProjectIdSessionsBySessionIdThreads" }, "post": { "tags": [ "Threads" ], "summary": "Create a session thread", "parameters": [ { "$ref": "#/components/parameters/ProjectID" }, { "$ref": "#/components/parameters/SessionID" } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateThreadRequest" } } }, "description": "JSON payload for create a session thread." }, "responses": { "200": { "description": "Thread", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Thread" } } } } }, "description": "Create a session thread. Accepts a JSON request body when defined and returns the resulting resource or action status.", "operationId": "createProjectsByProjectIdSessionsBySessionIdThread" } }, "/api/projects/{projectId}/sessions/{sessionId}/threads/{threadId}": { "parameters": [ { "$ref": "#/components/parameters/ProjectID" }, { "$ref": "#/components/parameters/SessionID" }, { "$ref": "#/components/parameters/ThreadID" } ], "get": { "tags": [ "Threads" ], "summary": "Get a thread", "responses": { "200": { "description": "Thread", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Thread" } } } } }, "description": "Get a thread. Returns the requested resource or collection for the authenticated caller.", "operationId": "getProjectsByProjectIdSessionsBySessionIdThreadsByThreadId" }, "put": { "tags": [ "Threads" ], "summary": "Update a thread", "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateThreadRequest" } } }, "description": "JSON payload for update a thread." }, "responses": { "200": { "description": "Thread", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Thread" } } } } }, "description": "Update a thread. Replaces the target resource or assignment with the supplied JSON representation.", "operationId": "updateProjectsByProjectIdSessionsBySessionIdThreadsByThreadId" }, "patch": { "tags": [ "Threads" ], "summary": "Patch a thread", "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateThreadRequest" } } }, "description": "JSON payload for patch a thread." }, "responses": { "200": { "description": "Thread", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Thread" } } } } }, "description": "Patch a thread. Applies a partial update to the target resource.", "operationId": "patchProjectsByProjectIdSessionsBySessionIdThreadsByThreadId" }, "delete": { "tags": [ "Threads" ], "summary": "Delete a thread", "responses": { "200": { "description": "Thread deleted", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MessageResponse" } } } } }, "description": "Delete a thread. Deletes or detaches the target resource and returns the action status.", "operationId": "deleteProjectsByProjectIdSessionsBySessionIdThreadsByThreadId" } }, "/api/projects/{projectId}/sessions/{sessionId}/threads/{threadId}/chat": { "post": { "tags": [ "Chat" ], "summary": "Start chat for a session thread", "parameters": [ { "$ref": "#/components/parameters/ProjectID" }, { "$ref": "#/components/parameters/SessionID" }, { "$ref": "#/components/parameters/ThreadID" } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ChatRequest" } } }, "description": "JSON payload for start chat for a session thread." }, "responses": { "200": { "description": "Chat response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ChatResponse" } } } } }, "description": "Start chat for a session thread. Accepts a JSON request body when defined and returns the resulting resource or action status.", "operationId": "postProjectsByProjectIdSessionsBySessionIdThreadsByThreadIdChat" } }, "/api/projects/{projectId}/sessions/{sessionId}/threads/{threadId}/stream": { "get": { "tags": [ "Chat" ], "summary": "Resume a chat stream", "parameters": [ { "$ref": "#/components/parameters/ProjectID" }, { "$ref": "#/components/parameters/SessionID" }, { "$ref": "#/components/parameters/ThreadID" }, { "name": "replay", "in": "query", "schema": { "type": "boolean" }, "description": "When true, replay available stream history before live updates." } ], "responses": { "200": { "description": "Chat SSE stream", "content": { "text/event-stream": { "schema": { "type": "string", "description": "Response payload encoded as text/event-stream." } } } } }, "description": "Resume a chat stream. Returns a streaming response for incremental updates.", "operationId": "streamProjectsByProjectIdSessionsBySessionIdThreadsByThreadId" } }, "/api/projects/{projectId}/sessions/{sessionId}/threads/{threadId}/cancel": { "post": { "tags": [ "Chat" ], "summary": "Cancel chat completion", "parameters": [ { "$ref": "#/components/parameters/ProjectID" }, { "$ref": "#/components/parameters/SessionID" }, { "$ref": "#/components/parameters/ThreadID" } ], "responses": { "200": { "description": "Cancel result", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MessageResponse" } } } } }, "description": "Cancel chat completion. Accepts a JSON request body when defined and returns the resulting resource or action status.", "operationId": "postProjectsByProjectIdSessionsBySessionIdThreadsByThreadIdCancel" } }, "/api/projects/{projectId}/sessions/{sessionId}/threads/{threadId}/token-usage": { "get": { "tags": [ "Threads" ], "summary": "Get thread token usage", "parameters": [ { "$ref": "#/components/parameters/ProjectID" }, { "$ref": "#/components/parameters/SessionID" }, { "$ref": "#/components/parameters/ThreadID" } ], "responses": { "200": { "description": "Token usage", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TokenUsageResponse" } } } } }, "description": "Get thread token usage. Returns the requested resource or collection for the authenticated caller.", "operationId": "getProjectsByProjectIdSessionsBySessionIdThreadsByThreadIdTokenUsage" } }, "/api/projects/{projectId}/sessions/{sessionId}/threads/{threadId}/queue/{queueId}": { "patch": { "tags": [ "Threads" ], "summary": "Update queued prompt", "parameters": [ { "$ref": "#/components/parameters/ProjectID" }, { "$ref": "#/components/parameters/SessionID" }, { "$ref": "#/components/parameters/ThreadID" }, { "$ref": "#/components/parameters/QueueID" } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateQueuedPromptRequest" } } }, "description": "JSON payload for update queued prompt." }, "responses": { "200": { "description": "Queue item", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/QueuedPrompt" } } } } }, "description": "Update queued prompt. Applies a partial update to the target resource.", "operationId": "patchProjectsByProjectIdSessionsBySessionIdThreadsByThreadIdQueueByQueueId" }, "delete": { "tags": [ "Threads" ], "summary": "Delete queued prompt", "parameters": [ { "$ref": "#/components/parameters/ProjectID" }, { "$ref": "#/components/parameters/SessionID" }, { "$ref": "#/components/parameters/ThreadID" }, { "$ref": "#/components/parameters/QueueID" } ], "responses": { "200": { "description": "Queue item deleted", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MessageResponse" } } } } }, "description": "Delete queued prompt. Deletes or detaches the target resource and returns the action status.", "operationId": "deleteProjectsByProjectIdSessionsBySessionIdThreadsByThreadIdQueueByQueueId" } }, "/api/projects/{projectId}/sessions/{sessionId}/threads/{threadId}/question": { "get": { "tags": [ "Chat" ], "summary": "Get current pending question", "parameters": [ { "$ref": "#/components/parameters/ProjectID" }, { "$ref": "#/components/parameters/SessionID" }, { "$ref": "#/components/parameters/ThreadID" } ], "responses": { "200": { "description": "Question", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/AskUserQuestion" } } } } }, "description": "Get current pending question. Returns the requested resource or collection for the authenticated caller.", "operationId": "getProjectsByProjectIdSessionsBySessionIdThreadsByThreadIdQuestion" } }, "/api/projects/{projectId}/sessions/{sessionId}/threads/{threadId}/question/{questionId}": { "get": { "tags": [ "Chat" ], "summary": "Get pending question", "parameters": [ { "$ref": "#/components/parameters/ProjectID" }, { "$ref": "#/components/parameters/SessionID" }, { "$ref": "#/components/parameters/ThreadID" }, { "$ref": "#/components/parameters/QuestionID" } ], "responses": { "200": { "description": "Question", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/AskUserQuestion" } } } } }, "description": "Get pending question. Returns the requested resource or collection for the authenticated caller.", "operationId": "getProjectsByProjectIdSessionsBySessionIdThreadsByThreadIdQuestionByQuestionId" } }, "/api/projects/{projectId}/sessions/{sessionId}/threads/{threadId}/question/{questionId}/commit-preview": { "get": { "tags": [ "Chat" ], "summary": "Get request_commit_pull preview", "parameters": [ { "$ref": "#/components/parameters/ProjectID" }, { "$ref": "#/components/parameters/SessionID" }, { "$ref": "#/components/parameters/ThreadID" }, { "$ref": "#/components/parameters/QuestionID" } ], "responses": { "200": { "description": "Commit preview", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CommitPreview" } } } } }, "description": "Get request_commit_pull preview. Returns the requested resource or collection for the authenticated caller.", "operationId": "getProjectsByProjectIdSessionsBySessionIdThreadsByThreadIdQuestionByQuestionIdCommitPreview" } }, "/api/projects/{projectId}/sessions/{sessionId}/threads/{threadId}/answer/{questionId}": { "post": { "tags": [ "Chat" ], "summary": "Answer a pending question", "parameters": [ { "$ref": "#/components/parameters/ProjectID" }, { "$ref": "#/components/parameters/SessionID" }, { "$ref": "#/components/parameters/ThreadID" }, { "$ref": "#/components/parameters/QuestionID" } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/AnswerQuestionRequest" } } }, "description": "JSON payload for answer a pending question." }, "responses": { "200": { "description": "Answer accepted", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MessageResponse" } } } } }, "description": "Answer a pending question. Accepts a JSON request body when defined and returns the resulting resource or action status.", "operationId": "postProjectsByProjectIdSessionsBySessionIdThreadsByThreadIdAnswerByQuestionId" } }, "/api/projects/{projectId}/sessions/{sessionId}/files": { "get": { "tags": [ "Files" ], "summary": "List session files", "parameters": [ { "$ref": "#/components/parameters/ProjectID" }, { "$ref": "#/components/parameters/SessionID" }, { "name": "path", "in": "query", "schema": { "type": "string", "default": "." }, "description": "File or directory path relative to the workspace or session root." }, { "name": "hidden", "in": "query", "schema": { "type": "boolean" }, "description": "When true, include hidden files in the listing." } ], "responses": { "200": { "description": "Files", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/FileListResponse" } } } } }, "description": "List session files. Returns the requested resource or collection for the authenticated caller.", "operationId": "getProjectsByProjectIdSessionsBySessionIdFiles" } }, "/api/projects/{projectId}/sessions/{sessionId}/files/search": { "get": { "tags": [ "Files" ], "summary": "Search session files", "parameters": [ { "$ref": "#/components/parameters/ProjectID" }, { "$ref": "#/components/parameters/SessionID" }, { "name": "q", "in": "query", "schema": { "type": "string" }, "description": "Search or autocomplete query string." }, { "name": "limit", "in": "query", "schema": { "type": "integer", "default": 50, "maximum": 200 }, "description": "Maximum number of items to return." } ], "responses": { "200": { "description": "Search results", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/FileSearchResponse" } } } } }, "description": "Search session files. Returns the requested resource or collection for the authenticated caller.", "operationId": "getProjectsByProjectIdSessionsBySessionIdFilesSearch" } }, "/api/projects/{projectId}/sessions/{sessionId}/files/read": { "get": { "tags": [ "Files" ], "summary": "Read a session file", "parameters": [ { "$ref": "#/components/parameters/ProjectID" }, { "$ref": "#/components/parameters/SessionID" }, { "name": "path", "in": "query", "required": true, "schema": { "type": "string" }, "description": "File or directory path relative to the workspace or session root." }, { "name": "fromBase", "in": "query", "schema": { "type": "boolean" }, "description": "When true, read the file from the base workspace state." } ], "responses": { "200": { "description": "File content", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/FileContentResponse" } } } } }, "description": "Read a session file. Returns the requested resource or collection for the authenticated caller.", "operationId": "getProjectsByProjectIdSessionsBySessionIdFilesRead" } }, "/api/projects/{projectId}/sessions/{sessionId}/files/write": { "put": { "tags": [ "Files" ], "summary": "Write a session file", "parameters": [ { "$ref": "#/components/parameters/ProjectID" }, { "$ref": "#/components/parameters/SessionID" } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/WriteFileRequest" } } }, "description": "JSON payload for write a session file." }, "responses": { "200": { "description": "File written", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MessageResponse" } } } } }, "description": "Write a session file. Replaces the target resource or assignment with the supplied JSON representation.", "operationId": "updateProjectsByProjectIdSessionsBySessionIdFilesWrite" } }, "/api/projects/{projectId}/sessions/{sessionId}/files/delete": { "post": { "tags": [ "Files" ], "summary": "Delete a session file or directory", "parameters": [ { "$ref": "#/components/parameters/ProjectID" }, { "$ref": "#/components/parameters/SessionID" } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DeleteFileRequest" } } }, "description": "JSON payload for delete a session file or directory." }, "responses": { "200": { "description": "File deleted", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MessageResponse" } } } } }, "description": "Delete a session file or directory. Accepts a JSON request body when defined and returns the resulting resource or action status.", "operationId": "postProjectsByProjectIdSessionsBySessionIdFilesDelete" } }, "/api/projects/{projectId}/sessions/{sessionId}/files/rename": { "post": { "tags": [ "Files" ], "summary": "Rename or move a session file or directory", "parameters": [ { "$ref": "#/components/parameters/ProjectID" }, { "$ref": "#/components/parameters/SessionID" } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/RenameFileRequest" } } }, "description": "JSON payload for rename or move a session file or directory." }, "responses": { "200": { "description": "File renamed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MessageResponse" } } } } }, "description": "Rename or move a session file or directory. Accepts a JSON request body when defined and returns the resulting resource or action status.", "operationId": "postProjectsByProjectIdSessionsBySessionIdFilesRename" } }, "/api/projects/{projectId}/sessions/{sessionId}/threads/{threadId}/artifacts/read": { "get": { "tags": [ "Files" ], "summary": "Read a thread artifact by URI", "parameters": [ { "$ref": "#/components/parameters/ProjectID" }, { "$ref": "#/components/parameters/SessionID" }, { "$ref": "#/components/parameters/ThreadID" }, { "name": "uri", "in": "query", "required": true, "schema": { "type": "string" }, "description": "Artifact URI to read." } ], "responses": { "200": { "description": "Artifact bytes" } }, "description": "Read a thread artifact by URI. Returns the requested resource or collection for the authenticated caller.", "operationId": "getProjectsByProjectIdSessionsBySessionIdThreadsByThreadIdArtifactsRead" } }, "/api/projects/{projectId}/sessions/{sessionId}/diff": { "get": { "tags": [ "Files" ], "summary": "Get session diff", "parameters": [ { "$ref": "#/components/parameters/ProjectID" }, { "$ref": "#/components/parameters/SessionID" }, { "name": "path", "in": "query", "schema": { "type": "string" }, "description": "File or directory path relative to the workspace or session root." }, { "name": "format", "in": "query", "schema": { "type": "string" }, "description": "Requested diff output format." }, { "name": "target", "in": "query", "schema": { "type": "string" }, "description": "Target revision, ref, or comparison endpoint for a diff." } ], "responses": { "200": { "description": "Diff", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DiffResponse" } } } } }, "description": "Get session diff. Returns the requested resource or collection for the authenticated caller.", "operationId": "getProjectsByProjectIdSessionsBySessionIdDiff" } }, "/api/projects/{projectId}/sessions/{sessionId}/commands": { "get": { "tags": [ "Sessions" ], "summary": "List slash commands", "parameters": [ { "$ref": "#/components/parameters/ProjectID" }, { "$ref": "#/components/parameters/SessionID" } ], "responses": { "200": { "description": "Commands", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CommandsResponse" } } } } }, "description": "List slash commands. Returns the requested resource or collection for the authenticated caller.", "operationId": "getProjectsByProjectIdSessionsBySessionIdCommands" } }, "/api/projects/{projectId}/sessions/{sessionId}/credentials": { "get": { "tags": [ "Credentials" ], "summary": "List session credential assignments", "parameters": [ { "$ref": "#/components/parameters/ProjectID" }, { "$ref": "#/components/parameters/SessionID" } ], "responses": { "200": { "description": "Assignments", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SessionCredentialAssignmentsResponse" } } } } }, "description": "List session credential assignments. Returns the requested resource or collection for the authenticated caller.", "operationId": "getProjectsByProjectIdSessionsBySessionIdCredentials" }, "put": { "tags": [ "Credentials" ], "summary": "Replace session credential assignments", "parameters": [ { "$ref": "#/components/parameters/ProjectID" }, { "$ref": "#/components/parameters/SessionID" } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SetSessionCredentialAssignmentsRequest" } } }, "description": "JSON payload for replace session credential assignments." }, "responses": { "200": { "description": "Assignments", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SessionCredentialAssignmentsResponse" } } } } }, "description": "Replace session credential assignments. Replaces the target resource or assignment with the supplied JSON representation.", "operationId": "updateProjectsByProjectIdSessionsBySessionIdCredentials" } }, "/api/projects/{projectId}/sessions/{sessionId}/terminal/ws": { "get": { "tags": [ "Terminal" ], "summary": "Session terminal WebSocket", "parameters": [ { "$ref": "#/components/parameters/ProjectID" }, { "$ref": "#/components/parameters/SessionID" }, { "name": "rows", "in": "query", "schema": { "type": "integer" }, "description": "Initial terminal row count." }, { "name": "cols", "in": "query", "schema": { "type": "integer" }, "description": "Initial terminal column count." } ], "responses": { "101": { "description": "WebSocket upgrade" } }, "description": "Session terminal WebSocket. Upgrades the HTTP request to a WebSocket connection for real-time communication.", "operationId": "connectProjectsByProjectIdSessionsBySessionIdTerminal" } }, "/api/projects/{projectId}/sessions/{sessionId}/terminal/history": { "get": { "tags": [ "Terminal" ], "summary": "Get terminal history", "parameters": [ { "$ref": "#/components/parameters/ProjectID" }, { "$ref": "#/components/parameters/SessionID" } ], "responses": { "200": { "description": "Terminal history", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TerminalHistoryResponse" } } } } }, "description": "Get terminal history. Returns the requested resource or collection for the authenticated caller.", "operationId": "getProjectsByProjectIdSessionsBySessionIdTerminalHistory" } }, "/api/projects/{projectId}/sessions/{sessionId}/terminal/status": { "get": { "tags": [ "Terminal" ], "summary": "Get terminal status", "parameters": [ { "$ref": "#/components/parameters/ProjectID" }, { "$ref": "#/components/parameters/SessionID" } ], "responses": { "200": { "description": "Terminal status", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TerminalStatusResponse" } } } } }, "description": "Get terminal status. Returns the requested resource or collection for the authenticated caller.", "operationId": "getProjectsByProjectIdSessionsBySessionIdTerminalStatus" } }, "/api/projects/{projectId}/sessions/{sessionId}/hooks/status": { "get": { "tags": [ "Hooks" ], "summary": "Get hook evaluation status", "parameters": [ { "$ref": "#/components/parameters/ProjectID" }, { "$ref": "#/components/parameters/SessionID" } ], "responses": { "200": { "description": "Hook status", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HooksStatusResponse" } } } } }, "description": "Get hook evaluation status. Returns the requested resource or collection for the authenticated caller.", "operationId": "getProjectsByProjectIdSessionsBySessionIdHooksStatus" } }, "/api/projects/{projectId}/sessions/{sessionId}/hooks/state": { "get": { "tags": [ "Hooks" ], "summary": "Get hook state and logs", "parameters": [ { "$ref": "#/components/parameters/ProjectID" }, { "$ref": "#/components/parameters/SessionID" } ], "responses": { "200": { "description": "Hook state", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HooksStateResponse" } } } } }, "description": "Get hook state and logs. Returns the requested resource or collection for the authenticated caller.", "operationId": "getProjectsByProjectIdSessionsBySessionIdHooksState" } }, "/api/projects/{projectId}/sessions/{sessionId}/hooks/{hookId}/output": { "get": { "tags": [ "Hooks" ], "summary": "Get hook output log", "parameters": [ { "$ref": "#/components/parameters/ProjectID" }, { "$ref": "#/components/parameters/SessionID" }, { "$ref": "#/components/parameters/HookID" } ], "responses": { "200": { "description": "Hook output", "content": { "text/plain": { "schema": { "type": "string", "description": "Response payload encoded as text/plain." } } } } }, "description": "Get hook output log. Returns a streaming response for incremental updates.", "operationId": "getProjectsByProjectIdSessionsBySessionIdHooksByHookIdOutput" } }, "/api/projects/{projectId}/sessions/{sessionId}/hooks/{hookId}/output/download": { "get": { "tags": [ "Hooks" ], "summary": "Download hook output log", "parameters": [ { "$ref": "#/components/parameters/ProjectID" }, { "$ref": "#/components/parameters/SessionID" }, { "$ref": "#/components/parameters/HookID" } ], "responses": { "200": { "description": "Hook output file" } }, "description": "Download hook output log. Returns a streaming response for incremental updates.", "operationId": "getProjectsByProjectIdSessionsBySessionIdHooksByHookIdOutputDownload" } }, "/api/projects/{projectId}/sessions/{sessionId}/hooks/{hookId}/rerun": { "post": { "tags": [ "Hooks" ], "summary": "Rerun a hook", "parameters": [ { "$ref": "#/components/parameters/ProjectID" }, { "$ref": "#/components/parameters/SessionID" }, { "$ref": "#/components/parameters/HookID" } ], "responses": { "200": { "description": "Rerun result", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MessageResponse" } } } } }, "description": "Rerun a hook. Accepts a JSON request body when defined and returns the resulting resource or action status.", "operationId": "postProjectsByProjectIdSessionsBySessionIdHooksByHookIdRerun" } }, "/api/projects/{projectId}/sessions/{sessionId}/services": { "get": { "tags": [ "Services" ], "summary": "List services", "parameters": [ { "$ref": "#/components/parameters/ProjectID" }, { "$ref": "#/components/parameters/SessionID" } ], "responses": { "200": { "description": "Services", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ServicesResponse" } } } } }, "description": "List services. Returns the requested resource or collection for the authenticated caller.", "operationId": "getProjectsByProjectIdSessionsBySessionIdServices" } }, "/api/projects/{projectId}/sessions/{sessionId}/services/{serviceId}/start": { "post": { "tags": [ "Services" ], "summary": "Start service", "parameters": [ { "$ref": "#/components/parameters/ProjectID" }, { "$ref": "#/components/parameters/SessionID" }, { "$ref": "#/components/parameters/ServiceID" } ], "responses": { "200": { "description": "Service started", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ServiceActionResponse" } } } } }, "description": "Start service. Accepts a JSON request body when defined and returns the resulting resource or action status.", "operationId": "postProjectsByProjectIdSessionsBySessionIdServicesByServiceIdStart" } }, "/api/projects/{projectId}/sessions/{sessionId}/services/{serviceId}/stop": { "post": { "tags": [ "Services" ], "summary": "Stop service", "parameters": [ { "$ref": "#/components/parameters/ProjectID" }, { "$ref": "#/components/parameters/SessionID" }, { "$ref": "#/components/parameters/ServiceID" } ], "responses": { "200": { "description": "Service stopped", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ServiceActionResponse" } } } } }, "description": "Stop service. Accepts a JSON request body when defined and returns the resulting resource or action status.", "operationId": "postProjectsByProjectIdSessionsBySessionIdServicesByServiceIdStop" } }, "/api/projects/{projectId}/sessions/{sessionId}/services/{serviceId}/localhost": { "post": { "tags": [ "Services" ], "summary": "Bind service to localhost", "parameters": [ { "$ref": "#/components/parameters/ProjectID" }, { "$ref": "#/components/parameters/SessionID" }, { "$ref": "#/components/parameters/ServiceID" } ], "responses": { "200": { "description": "Localhost binding", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LocalhostBinding" } } } } }, "description": "Bind service to localhost. Accepts a JSON request body when defined and returns the resulting resource or action status.", "operationId": "postProjectsByProjectIdSessionsBySessionIdServicesByServiceIdLocalhost" }, "delete": { "tags": [ "Services" ], "summary": "Unbind service from localhost", "parameters": [ { "$ref": "#/components/parameters/ProjectID" }, { "$ref": "#/components/parameters/SessionID" }, { "$ref": "#/components/parameters/ServiceID" } ], "responses": { "200": { "description": "Service unbound", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MessageResponse" } } } } }, "description": "Unbind service from localhost. Deletes or detaches the target resource and returns the action status.", "operationId": "deleteProjectsByProjectIdSessionsBySessionIdServicesByServiceIdLocalhost" } }, "/api/projects/{projectId}/sessions/{sessionId}/services/{serviceId}/output": { "get": { "tags": [ "Services" ], "summary": "Stream service output", "parameters": [ { "$ref": "#/components/parameters/ProjectID" }, { "$ref": "#/components/parameters/SessionID" }, { "$ref": "#/components/parameters/ServiceID" } ], "responses": { "200": { "description": "Service output SSE stream", "content": { "text/event-stream": { "schema": { "type": "string", "description": "Response payload encoded as text/event-stream." } } } } }, "description": "Stream service output. Returns a streaming response for incremental updates.", "operationId": "getProjectsByProjectIdSessionsBySessionIdServicesByServiceIdOutput" } }, "/api/projects/{projectId}/sandbox-provider-types/": { "get": { "tags": [ "Sandbox Providers" ], "summary": "List sandbox provider types", "parameters": [ { "$ref": "#/components/parameters/ProjectID" } ], "responses": { "200": { "description": "Provider types", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SandboxProviderTypesResponse" } } } } }, "description": "List sandbox provider types. Returns the requested resource or collection for the authenticated caller.", "operationId": "getProjectsByProjectIdSandboxProviderTypes" } }, "/api/projects/{projectId}/sandbox-providers/": { "get": { "tags": [ "Sandbox Providers" ], "summary": "List sandbox provider instances", "parameters": [ { "$ref": "#/components/parameters/ProjectID" } ], "responses": { "200": { "description": "Providers", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SandboxProvidersResponse" } } } } }, "description": "List sandbox provider instances. Returns the requested resource or collection for the authenticated caller.", "operationId": "getProjectsByProjectIdSandboxProviders" }, "post": { "tags": [ "Sandbox Providers" ], "summary": "Create sandbox provider instance", "parameters": [ { "$ref": "#/components/parameters/ProjectID" } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateSandboxProviderRequest" } } }, "description": "JSON payload for create sandbox provider instance." }, "responses": { "200": { "description": "Provider", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SandboxProvider" } } } } }, "description": "Create sandbox provider instance. Accepts a JSON request body when defined and returns the resulting resource or action status.", "operationId": "createProjectsByProjectIdSandboxProvider" } }, "/api/projects/{projectId}/sandbox-providers/default": { "patch": { "tags": [ "Sandbox Providers" ], "summary": "Update project default sandbox provider", "parameters": [ { "$ref": "#/components/parameters/ProjectID" } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateDefaultSandboxProviderRequest" } } }, "description": "JSON payload for update project default sandbox provider." }, "responses": { "200": { "description": "Project", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Project" } } } } }, "description": "Update project default sandbox provider. Applies a partial update to the target resource.", "operationId": "patchProjectsByProjectIdSandboxProvidersDefault" } }, "/api/projects/{projectId}/sandbox-providers/{providerId}": { "patch": { "tags": [ "Sandbox Providers" ], "summary": "Update sandbox provider instance", "parameters": [ { "$ref": "#/components/parameters/ProjectID" }, { "$ref": "#/components/parameters/ProviderID" } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateSandboxProviderRequest" } } }, "description": "JSON payload for update sandbox provider instance." }, "responses": { "200": { "description": "Provider", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SandboxProvider" } } } } }, "description": "Update sandbox provider instance. Applies a partial update to the target resource.", "operationId": "patchProjectsByProjectIdSandboxProvidersByProviderId" }, "delete": { "tags": [ "Sandbox Providers" ], "summary": "Delete sandbox provider instance", "parameters": [ { "$ref": "#/components/parameters/ProjectID" }, { "$ref": "#/components/parameters/ProviderID" } ], "responses": { "200": { "description": "Provider deleted", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MessageResponse" } } } } }, "description": "Delete sandbox provider instance. Deletes or detaches the target resource and returns the action status.", "operationId": "deleteProjectsByProjectIdSandboxProvidersByProviderId" } }, "/api/projects/{projectId}/sandbox-providers/{providerId}/resources": { "get": { "tags": [ "Sandbox Providers" ], "summary": "Get sandbox provider resources", "parameters": [ { "$ref": "#/components/parameters/ProjectID" }, { "$ref": "#/components/parameters/ProviderID" } ], "responses": { "200": { "description": "Resources", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ProviderResources" } } } } }, "description": "Get sandbox provider resources. Returns the requested resource or collection for the authenticated caller.", "operationId": "getProjectsByProjectIdSandboxProvidersByProviderIdResources" }, "patch": { "tags": [ "Sandbox Providers" ], "summary": "Update sandbox provider resources", "parameters": [ { "$ref": "#/components/parameters/ProjectID" }, { "$ref": "#/components/parameters/ProviderID" } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ProviderResources" } } }, "description": "JSON payload for update sandbox provider resources." }, "responses": { "200": { "description": "Resources", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ProviderResources" } } } } }, "description": "Update sandbox provider resources. Applies a partial update to the target resource.", "operationId": "patchProjectsByProjectIdSandboxProvidersByProviderIdResources" } }, "/api/projects/{projectId}/sandbox-providers/{providerId}/inspection": { "get": { "tags": [ "Sandbox Providers" ], "summary": "Get sandbox provider inspection container information", "parameters": [ { "$ref": "#/components/parameters/ProjectID" }, { "$ref": "#/components/parameters/ProviderID" } ], "responses": { "200": { "description": "Inspection", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/InspectionInfo" } } } } }, "description": "Get sandbox provider inspection container information. Returns the requested resource or collection for the authenticated caller.", "operationId": "getProjectsByProjectIdSandboxProvidersByProviderIdInspection" } }, "/api/projects/{projectId}/sandbox-providers/{providerId}/inspection/terminal/ws": { "get": { "tags": [ "Sandbox Providers" ], "summary": "Sandbox provider inspection terminal WebSocket", "parameters": [ { "$ref": "#/components/parameters/ProjectID" }, { "$ref": "#/components/parameters/ProviderID" }, { "name": "rows", "in": "query", "schema": { "type": "integer" }, "description": "Initial terminal row count." }, { "name": "cols", "in": "query", "schema": { "type": "integer" }, "description": "Initial terminal column count." } ], "responses": { "101": { "description": "WebSocket upgrade" } }, "description": "Sandbox provider inspection terminal WebSocket. Upgrades the HTTP request to a WebSocket connection for real-time communication.", "operationId": "connectProjectsByProjectIdSandboxProvidersByProviderIdInspectionTerminal" } }, "/api/projects/{projectId}/credentials/types": { "get": { "tags": [ "Credentials" ], "summary": "List credential types", "parameters": [ { "$ref": "#/components/parameters/ProjectID" } ], "responses": { "200": { "description": "Credential types", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CredentialTypesResponse" } } } } }, "description": "List credential types. Returns the requested resource or collection for the authenticated caller.", "operationId": "getProjectsByProjectIdCredentialsTypes" } }, "/api/projects/{projectId}/credentials/": { "get": { "tags": [ "Credentials" ], "summary": "List credentials", "parameters": [ { "$ref": "#/components/parameters/ProjectID" } ], "responses": { "200": { "description": "Credentials", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CredentialsResponse" } } } } }, "description": "List credentials. Returns the requested resource or collection for the authenticated caller.", "operationId": "getProjectsByProjectIdCredentials" }, "post": { "tags": [ "Credentials" ], "summary": "Create credential", "parameters": [ { "$ref": "#/components/parameters/ProjectID" } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateCredentialRequest" } } }, "description": "JSON payload for create credential." }, "responses": { "200": { "description": "Credential", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Credential" } } } } }, "description": "Create credential. Accepts a JSON request body when defined and returns the resulting resource or action status.", "operationId": "createProjectsByProjectIdCredential" } }, "/api/projects/{projectId}/credentials/validate": { "get": { "tags": [ "Credentials" ], "summary": "Validate project credentials", "parameters": [ { "$ref": "#/components/parameters/ProjectID" } ], "responses": { "200": { "description": "Validation results", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CredentialsValidationResponse" } } } } }, "description": "Validate project credentials. Returns the requested resource or collection for the authenticated caller.", "operationId": "getProjectsByProjectIdCredentialsValidate" } }, "/api/projects/{projectId}/credentials/{provider}": { "get": { "tags": [ "Credentials" ], "summary": "Get credential by provider or ID", "parameters": [ { "$ref": "#/components/parameters/ProjectID" }, { "$ref": "#/components/parameters/Provider" } ], "responses": { "200": { "description": "Credential", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Credential" } } } } }, "description": "Get credential by provider or ID. Returns the requested resource or collection for the authenticated caller.", "operationId": "getProjectsByProjectIdCredentialsByProvider" }, "delete": { "tags": [ "Credentials" ], "summary": "Delete credential by provider or ID", "parameters": [ { "$ref": "#/components/parameters/ProjectID" }, { "$ref": "#/components/parameters/Provider" } ], "responses": { "200": { "description": "Credential deleted", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MessageResponse" } } } } }, "description": "Delete credential by provider or ID. Deletes or detaches the target resource and returns the action status.", "operationId": "deleteProjectsByProjectIdCredentialsByProvider" } }, "/api/projects/{projectId}/credentials/{provider}/validate": { "get": { "tags": [ "Credentials" ], "summary": "Validate credential by provider or ID", "parameters": [ { "$ref": "#/components/parameters/ProjectID" }, { "$ref": "#/components/parameters/Provider" } ], "responses": { "200": { "description": "Validation result", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CredentialValidationResult" } } } } }, "description": "Validate credential by provider or ID. Returns the requested resource or collection for the authenticated caller.", "operationId": "getProjectsByProjectIdCredentialsByProviderValidate" } }, "/api/projects/{projectId}/credentials/{provider}/refresh": { "post": { "tags": [ "Credentials" ], "summary": "Refresh OAuth tokens", "parameters": [ { "$ref": "#/components/parameters/ProjectID" }, { "$ref": "#/components/parameters/Provider" } ], "responses": { "200": { "description": "Refreshed credential", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Credential" } } } } }, "description": "Refresh OAuth tokens. Accepts a JSON request body when defined and returns the resulting resource or action status.", "operationId": "postProjectsByProjectIdCredentialsByProviderRefresh" } }, "/api/projects/{projectId}/credentials/anthropic/authorize": { "post": { "tags": [ "Credentials" ], "summary": "Start Anthropic OAuth", "parameters": [ { "$ref": "#/components/parameters/ProjectID" } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/OAuthAuthorizeRequest" } } }, "description": "JSON payload for start anthropic oauth." }, "responses": { "200": { "description": "Authorization URL", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/OAuthAuthorizeResponse" } } } } }, "description": "Start Anthropic OAuth. Accepts a JSON request body when defined and returns the resulting resource or action status.", "operationId": "postProjectsByProjectIdCredentialsAnthropicAuthorize" } }, "/api/projects/{projectId}/credentials/anthropic/exchange": { "post": { "tags": [ "Credentials" ], "summary": "Exchange Anthropic OAuth code", "parameters": [ { "$ref": "#/components/parameters/ProjectID" } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/AnthropicExchangeRequest" } } }, "description": "JSON payload for exchange anthropic oauth code." }, "responses": { "200": { "description": "Credential", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Credential" } } } } }, "description": "Exchange Anthropic OAuth code. Accepts a JSON request body when defined and returns the resulting resource or action status.", "operationId": "postProjectsByProjectIdCredentialsAnthropicExchange" } }, "/api/projects/{projectId}/credentials/github-copilot/device-code": { "post": { "tags": [ "Credentials" ], "summary": "Start GitHub Copilot device code flow", "parameters": [ { "$ref": "#/components/parameters/ProjectID" } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GitHubCopilotDeviceCodeRequest" } } }, "description": "JSON payload for start github copilot device code flow." }, "responses": { "200": { "description": "Device code", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GitHubCopilotDeviceCodeResponse" } } } } }, "description": "Start GitHub Copilot device code flow. Accepts a JSON request body when defined and returns the resulting resource or action status.", "operationId": "postProjectsByProjectIdCredentialsGithubCopilotDeviceCode" } }, "/api/projects/{projectId}/credentials/github-copilot/poll": { "post": { "tags": [ "Credentials" ], "summary": "Poll GitHub Copilot device flow", "parameters": [ { "$ref": "#/components/parameters/ProjectID" } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GitHubCopilotPollRequest" } } }, "description": "JSON payload for poll github copilot device flow." }, "responses": { "200": { "description": "Poll result", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GitHubCopilotPollResponse" } } } } }, "description": "Poll GitHub Copilot device flow. Accepts a JSON request body when defined and returns the resulting resource or action status.", "operationId": "postProjectsByProjectIdCredentialsGithubCopilotPoll" } }, "/api/projects/{projectId}/credentials/github-git/authorize": { "post": { "tags": [ "Credentials" ], "summary": "Start GitHub authorization-code OAuth", "parameters": [ { "$ref": "#/components/parameters/ProjectID" } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GitHubAuthorizeRequest" } } }, "description": "JSON payload for start github authorization-code oauth." }, "responses": { "200": { "description": "Authorization URL", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GitHubAuthorizeResponse" } } } } }, "description": "Start GitHub authorization-code OAuth. Accepts a JSON request body when defined and returns the resulting resource or action status.", "operationId": "postProjectsByProjectIdCredentialsGithubGitAuthorize" } }, "/api/projects/{projectId}/credentials/github-git/exchange": { "post": { "tags": [ "Credentials" ], "summary": "Exchange GitHub OAuth code", "parameters": [ { "$ref": "#/components/parameters/ProjectID" } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GitHubExchangeRequest" } } }, "description": "JSON payload for exchange github oauth code." }, "responses": { "200": { "description": "Exchange result", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GitHubExchangeResponse" } } } } }, "description": "Exchange GitHub OAuth code. Accepts a JSON request body when defined and returns the resulting resource or action status.", "operationId": "postProjectsByProjectIdCredentialsGithubGitExchange" } }, "/api/projects/{projectId}/credentials/github-git/device-code": { "post": { "tags": [ "Credentials" ], "summary": "Start GitHub device code flow", "parameters": [ { "$ref": "#/components/parameters/ProjectID" } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GitHubDeviceCodeRequest" } } }, "description": "JSON payload for start github device code flow." }, "responses": { "200": { "description": "Device code", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GitHubCopilotDeviceCodeResponse" } } } } }, "description": "Start GitHub device code flow. Accepts a JSON request body when defined and returns the resulting resource or action status.", "operationId": "postProjectsByProjectIdCredentialsGithubGitDeviceCode" } }, "/api/projects/{projectId}/credentials/github-git/poll": { "post": { "tags": [ "Credentials" ], "summary": "Poll GitHub device flow", "parameters": [ { "$ref": "#/components/parameters/ProjectID" } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GitHubPollRequest" } } }, "description": "JSON payload for poll github device flow." }, "responses": { "200": { "description": "Poll result", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GitHubExchangeResponse" } } } } }, "description": "Poll GitHub device flow. Accepts a JSON request body when defined and returns the resulting resource or action status.", "operationId": "postProjectsByProjectIdCredentialsGithubGitPoll" } }, "/api/projects/{projectId}/credentials/github-git/callback-status": { "post": { "tags": [ "Credentials" ], "summary": "Check GitHub callback status", "parameters": [ { "$ref": "#/components/parameters/ProjectID" } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GitHubCallbackStatusRequest" } } }, "description": "JSON payload for check github callback status." }, "responses": { "200": { "description": "Callback status", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GitHubExchangeResponse" } } } } }, "description": "Check GitHub callback status. Accepts a JSON request body when defined and returns the resulting resource or action status.", "operationId": "createProjectsByProjectIdCredentialsGithubGitCallbackStatus" } }, "/api/projects/{projectId}/credentials/codex/authorize": { "post": { "tags": [ "Credentials" ], "summary": "Start Codex authorization-code OAuth", "parameters": [ { "$ref": "#/components/parameters/ProjectID" } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CodexAuthorizeRequest" } } }, "description": "JSON payload for start codex authorization-code oauth." }, "responses": { "200": { "description": "Authorization URL", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CodexAuthorizeResponse" } } } } }, "description": "Start Codex authorization-code OAuth. Accepts a JSON request body when defined and returns the resulting resource or action status.", "operationId": "postProjectsByProjectIdCredentialsCodexAuthorize" } }, "/api/projects/{projectId}/credentials/codex/exchange": { "post": { "tags": [ "Credentials" ], "summary": "Exchange Codex OAuth code", "parameters": [ { "$ref": "#/components/parameters/ProjectID" } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CodexExchangeRequest" } } }, "description": "JSON payload for exchange codex oauth code." }, "responses": { "200": { "description": "Exchange result", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CodexExchangeResponse" } } } } }, "description": "Exchange Codex OAuth code. Accepts a JSON request body when defined and returns the resulting resource or action status.", "operationId": "postProjectsByProjectIdCredentialsCodexExchange" } }, "/api/projects/{projectId}/credentials/codex/device-code": { "post": { "tags": [ "Credentials" ], "summary": "Start Codex device code flow", "parameters": [ { "$ref": "#/components/parameters/ProjectID" } ], "responses": { "200": { "description": "Device code", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CodexDeviceCodeResponse" } } } } }, "description": "Start Codex device code flow. Accepts a JSON request body when defined and returns the resulting resource or action status.", "operationId": "postProjectsByProjectIdCredentialsCodexDeviceCode" } }, "/api/projects/{projectId}/credentials/codex/poll": { "post": { "tags": [ "Credentials" ], "summary": "Poll Codex device flow", "parameters": [ { "$ref": "#/components/parameters/ProjectID" } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CodexPollRequest" } } }, "description": "JSON payload for poll codex device flow." }, "responses": { "200": { "description": "Poll result", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CodexExchangeResponse" } } } } }, "description": "Poll Codex device flow. Accepts a JSON request body when defined and returns the resulting resource or action status.", "operationId": "postProjectsByProjectIdCredentialsCodexPoll" } }, "/api/projects/{projectId}/credentials/codex/callback-status": { "post": { "tags": [ "Credentials" ], "summary": "Check Codex callback status", "parameters": [ { "$ref": "#/components/parameters/ProjectID" } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CodexCallbackStatusRequest" } } }, "description": "JSON payload for check codex callback status." }, "responses": { "200": { "description": "Callback status", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CodexExchangeResponse" } } } } }, "description": "Check Codex callback status. Accepts a JSON request body when defined and returns the resulting resource or action status.", "operationId": "createProjectsByProjectIdCredentialsCodexCallbackStatus" } }, "/api/projects/{projectId}/credentials/mcp": { "post": { "tags": [ "Credentials" ], "summary": "Store MCP OAuth token from an agent container", "parameters": [ { "$ref": "#/components/parameters/ProjectID" } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MCPTokenRequest" } } }, "description": "JSON payload for store mcp oauth token from an agent container." }, "responses": { "200": { "description": "Token stored", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Credential" } } } } }, "description": "Store MCP OAuth token from an agent container. Accepts a JSON request body when defined and returns the resulting resource or action status.", "operationId": "postProjectsByProjectIdCredentialsMcp" } }, "/api/projects/{projectId}/sessions/{sessionId}/workspace-change-commits": { "get": { "tags": [ "Hooks" ], "summary": "List session workspace change commits", "description": "List Discobot workspace change commits for a session sandbox.", "operationId": "listSessionWorkspaceChangeCommits", "parameters": [ { "$ref": "#/components/parameters/ProjectID" }, { "$ref": "#/components/parameters/SessionID" } ], "responses": { "200": { "description": "Workspace change commits", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/WorkspaceChangeCommitsResponse" } } } } } } }, "/api/projects/{projectId}/sessions/{sessionId}/ports": { "get": { "tags": [ "Ports" ], "summary": "List ports", "description": "List TCP listening ports in a session sandbox. Returns the requested resource or collection for the authenticated caller.", "operationId": "getProjectsByProjectIdSessionsBySessionIdPorts", "parameters": [ { "name": "projectId", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "sessionId", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "Ports", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ListPortsResponse" } } } } } } } }, "components": { "securitySchemes": { "cookieAuth": { "type": "apiKey", "in": "cookie", "name": "discobot_session" }, "bearerAuth": { "type": "http", "scheme": "bearer" } }, "responses": { "Error": { "description": "Error response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } }, "parameters": { "ProjectID": { "name": "projectId", "in": "path", "required": true, "schema": { "type": "string" }, "example": "local", "description": "Project identifier used to scope the request." }, "WorkspaceID": { "name": "workspaceId", "in": "path", "required": true, "schema": { "type": "string" }, "description": "Workspace identifier within the project." }, "SessionID": { "name": "sessionId", "in": "path", "required": true, "schema": { "type": "string" }, "example": "abc123", "description": "Session identifier within the project." }, "ThreadID": { "name": "threadId", "in": "path", "required": true, "schema": { "type": "string" }, "example": "thread-1", "description": "Thread identifier within the session." }, "UserID": { "name": "userId", "in": "path", "required": true, "schema": { "type": "string" }, "description": "User identifier for a project member." }, "Provider": { "name": "provider", "in": "path", "required": true, "schema": { "type": "string" }, "example": "anthropic", "description": "Credential provider name or credential identifier, depending on the endpoint." }, "ProviderID": { "name": "providerId", "in": "path", "required": true, "schema": { "type": "string" }, "description": "Sandbox provider instance identifier." }, "PreferenceKey": { "name": "key", "in": "path", "required": true, "schema": { "type": "string" }, "example": "theme", "description": "Preference key to read, set, or delete." }, "InvitationToken": { "name": "token", "in": "path", "required": true, "schema": { "type": "string" }, "description": "Invitation token issued for a project invitation." }, "QueueID": { "name": "queueId", "in": "path", "required": true, "schema": { "type": "string" }, "description": "Queued prompt identifier within the thread prompt queue." }, "QuestionID": { "name": "questionId", "in": "path", "required": true, "schema": { "type": "string" }, "description": "Pending interactive question identifier." }, "HookID": { "name": "hookId", "in": "path", "required": true, "schema": { "type": "string" }, "description": "Hook identifier within the session." }, "ServiceID": { "name": "serviceId", "in": "path", "required": true, "schema": { "type": "string" }, "description": "Service identifier within the session." } }, "schemas": { "AnyObject": { "type": "object", "additionalProperties": true, "description": "Arbitrary JSON object used when a response shape is intentionally open-ended." }, "ErrorResponse": { "type": "object", "required": [ "error" ], "properties": { "error": { "type": "string", "description": "Error message when the operation failed." } }, "description": "Standard JSON error envelope returned by failed API operations." }, "MessageResponse": { "type": "object", "additionalProperties": true, "properties": { "message": { "type": "string", "description": "Human-readable status or error message." }, "status": { "type": "string", "description": "Current status value." }, "success": { "type": "boolean", "description": "Whether the requested action succeeded." } }, "description": "Generic action result message used by endpoints that do not return a dedicated resource." }, "HealthResponse": { "type": "object", "required": [ "status" ], "properties": { "status": { "type": "string", "example": "ok", "description": "Current status value." } }, "description": "Liveness response returned by the health endpoint." }, "ServerConfig": { "type": "object", "required": [ "ssh_port", "http_port", "public_base_url" ], "properties": { "ssh_port": { "type": "integer", "description": "ssh port value for the server Config object." }, "http_port": { "type": "integer", "description": "http port value for the server Config object." }, "https_port": { "type": "integer", "description": "https port value for the server Config object." }, "https_tls_mode": { "type": "string", "description": "https tls mode value for the server Config object." }, "public_base_url": { "type": "string", "description": "public base url value for the server Config object." } }, "description": "Public server configuration values needed by clients." }, "Project": { "type": "object", "required": [ "id", "name", "slug", "created_at", "updated_at" ], "properties": { "id": { "type": "string", "description": "Stable identifier for the object." }, "name": { "type": "string", "description": "Human-readable name." }, "slug": { "type": "string", "description": "slug value for the project object." }, "defaultSandboxProviderId": { "type": "string", "description": "default Sandbox Provider Id value for the project object." }, "vz_memory_mb": { "type": "integer", "nullable": true, "description": "vz memory mb value for the project object." }, "vz_data_disk_gb": { "type": "integer", "nullable": true, "description": "vz data disk gb value for the project object." }, "created_at": { "type": "string", "format": "date-time", "description": "Time when the object was created." }, "updated_at": { "type": "string", "format": "date-time", "description": "Time when the object was last updated." } }, "description": "Project record and its default sandbox resource settings." }, "CreateProjectRequest": { "type": "object", "required": [ "name" ], "properties": { "name": { "type": "string", "description": "Human-readable name." } }, "description": "create Project Request payload accepted by the API." }, "UpdateProjectRequest": { "type": "object", "required": [ "name" ], "properties": { "name": { "type": "string", "description": "Human-readable name." } }, "description": "update Project Request payload accepted by the API." }, "Workspace": { "type": "object", "required": [ "id", "projectId", "path", "sourceType", "autoGenerated", "status", "createdAt", "updatedAt" ], "properties": { "id": { "type": "string", "description": "Stable identifier for the object." }, "projectId": { "type": "string", "description": "Project identifier that owns or scopes this object." }, "path": { "type": "string", "description": "File system path or repository-relative path." }, "displayName": { "type": "string", "nullable": true, "description": "Optional display name shown to users." }, "sourceType": { "type": "string", "description": "source Type value for the workspace object." }, "autoGenerated": { "type": "boolean", "description": "auto Generated value for the workspace object." }, "status": { "type": "string", "description": "Current status value." }, "errorMessage": { "type": "string", "nullable": true, "description": "Detailed error message, when present." }, "createdAt": { "type": "string", "format": "date-time", "description": "Time when the object was created." }, "updatedAt": { "type": "string", "format": "date-time", "description": "Time when the object was last updated." } }, "description": "Workspace record that links a project to a source checkout or directory." }, "WorkspacesResponse": { "type": "object", "required": [ "workspaces" ], "properties": { "workspaces": { "type": "array", "items": { "$ref": "#/components/schemas/Workspace" }, "description": "Collection of workspace values." } }, "description": "workspaces Response payload returned by the API." }, "CreateWorkspaceRequest": { "type": "object", "required": [ "path" ], "properties": { "path": { "type": "string", "description": "File system path or repository-relative path." }, "sourceType": { "type": "string", "description": "Workspace source type. Defaults to local when omitted." }, "displayName": { "type": "string", "description": "Optional display name shown to users." } }, "description": "create Workspace Request payload accepted by the API." }, "ValidateWorkspaceRequest": { "type": "object", "required": [ "path", "sourceType" ], "properties": { "path": { "type": "string", "description": "File system path or repository-relative path." }, "sourceType": { "type": "string", "description": "source Type value for the validate Workspace Request object." } }, "description": "validate Workspace Request payload accepted by the API." }, "ValidateWorkspaceResponse": { "type": "object", "required": [ "path", "sourceType", "valid", "classification", "suggestions" ], "properties": { "path": { "type": "string", "description": "File system path or repository-relative path." }, "sourceType": { "type": "string", "description": "source Type value for the validate Workspace Response object." }, "valid": { "type": "boolean", "description": "Whether the value passed validation." }, "classification": { "type": "string", "description": "Classification assigned during validation or suggestion lookup." }, "error": { "type": "string", "description": "Error message when the operation failed." }, "suggestions": { "type": "array", "items": { "$ref": "#/components/schemas/Suggestion" }, "description": "Suggested values returned by validation or autocomplete." }, "authProvider": { "type": "string", "description": "auth Provider value for the validate Workspace Response object." }, "authRequired": { "type": "boolean", "description": "auth Required value for the validate Workspace Response object." }, "authMessage": { "type": "string", "description": "auth Message value for the validate Workspace Response object." } }, "description": "validate Workspace Response payload returned by the API." }, "UpdateWorkspaceRequest": { "type": "object", "properties": { "path": { "type": "string", "description": "File system path or repository-relative path." }, "displayName": { "type": "string", "nullable": true, "description": "Optional display name shown to users." } }, "description": "update Workspace Request payload accepted by the API." }, "Session": { "type": "object", "required": [ "id", "projectId", "workspaceId", "name", "sandboxStatus", "commitStatus", "createdAt", "updatedAt" ], "properties": { "id": { "type": "string", "description": "Stable identifier for the object." }, "projectId": { "type": "string", "description": "Project identifier that owns or scopes this object." }, "workspaceId": { "type": "string", "description": "Workspace identifier associated with this object." }, "providerId": { "type": "string", "description": "Sandbox provider identifier." }, "name": { "type": "string", "description": "Human-readable name." }, "displayName": { "type": "string", "nullable": true, "description": "Optional display name shown to users." }, "description": { "type": "string", "nullable": true, "description": "Optional human-readable description." }, "sandboxStatus": { "type": "string", "description": "Collection of sandbox statu values." }, "sandboxStatusMessage": { "type": "string", "nullable": true, "description": "sandbox Status Message value for the session object." }, "threadStatus": { "description": "Collection of thread statu values.", "allOf": [ { "$ref": "#/components/schemas/SessionThreadStatus" } ] }, "commitStatus": { "type": "string", "description": "Collection of commit statu values." }, "commitOperation": { "type": "string", "nullable": true, "description": "commit Operation value for the session object." }, "commitError": { "type": "string", "nullable": true, "description": "commit Error value for the session object." }, "targetRef": { "type": "string", "nullable": true, "description": "target Ref value for the session object." }, "appliedCommit": { "type": "string", "nullable": true, "description": "applied Commit value for the session object." }, "errorMessage": { "type": "string", "nullable": true, "description": "Detailed error message, when present." }, "workspacePath": { "type": "string", "nullable": true, "description": "workspace Path value for the session object." }, "createdAt": { "type": "string", "format": "date-time", "description": "Time when the object was created." }, "updatedAt": { "type": "string", "format": "date-time", "description": "Time when the object was last updated." } }, "description": "Agent session record and its sandbox, thread, commit, and workspace state." }, "SessionThreadStatus": { "type": "object", "required": [ "status" ], "properties": { "status": { "type": "string", "description": "Current status value." }, "reason": { "type": "string", "description": "reason value for the session Thread Status object." }, "needsAttentionCount": { "type": "integer", "description": "needs Attention Count value for the session Thread Status object." }, "runningCount": { "type": "integer", "description": "running Count value for the session Thread Status object." }, "queuedCount": { "type": "integer", "description": "queued Count value for the session Thread Status object." }, "unknownCount": { "type": "integer", "description": "unknown Count value for the session Thread Status object." }, "threadId": { "type": "string", "description": "Thread identifier associated with this object." }, "updatedAt": { "type": "string", "description": "Time when the object was last updated." } }, "description": "session Thread Status API object." }, "SessionsResponse": { "type": "object", "required": [ "sessions" ], "properties": { "sessions": { "type": "array", "items": { "$ref": "#/components/schemas/Session" }, "description": "Collection of session values." } }, "description": "sessions Response payload returned by the API." }, "CreateSessionRequest": { "type": "object", "required": [ "id" ], "properties": { "id": { "type": "string", "description": "Stable identifier for the object." }, "workspaceId": { "type": "string", "description": "Workspace identifier associated with this object." }, "providerId": { "type": "string", "description": "Sandbox provider identifier." } }, "description": "create Session Request payload accepted by the API." }, "UpdateSessionRequest": { "type": "object", "properties": { "name": { "type": "string", "nullable": true, "description": "Human-readable name." }, "displayName": { "type": "string", "nullable": true, "description": "Optional display name shown to users." }, "description": { "type": "string", "nullable": true, "description": "Optional human-readable description." } }, "description": "update Session Request payload accepted by the API." }, "ModelInfo": { "type": "object", "required": [ "id", "name", "provider" ], "properties": { "id": { "type": "string", "description": "Stable identifier for the object." }, "name": { "type": "string", "description": "Human-readable name." }, "provider": { "type": "string", "description": "Provider name or key." }, "description": { "type": "string", "description": "Optional human-readable description." }, "reasoning": { "type": "boolean", "description": "reasoning value for the model Info object." }, "reasoningLevels": { "type": "array", "items": { "type": "string", "description": "Array item value for `reasoningLevels`." }, "description": "Collection of reasoning level values." }, "defaultReasoning": { "type": "string", "description": "default Reasoning value for the model Info object." }, "serviceTiers": { "type": "array", "items": { "type": "string", "description": "Array item value for `serviceTiers`." }, "description": "Collection of service tier values." } }, "description": "model Info metadata returned by diagnostic endpoints." }, "ModelsResponse": { "type": "object", "required": [ "models" ], "properties": { "models": { "type": "array", "items": { "$ref": "#/components/schemas/ModelInfo" }, "description": "Collection of model values." } }, "description": "models Response payload returned by the API." }, "Thread": { "type": "object", "required": [ "id", "name" ], "properties": { "id": { "type": "string", "description": "Stable identifier for the object." }, "name": { "type": "string", "description": "Human-readable name." }, "lastMessage": { "type": "string", "description": "last Message value for the thread object." }, "errorMessage": { "type": "string", "description": "Detailed error message, when present." }, "model": { "type": "string", "description": "model value for the thread object." }, "reasoning": { "type": "string", "description": "reasoning value for the thread object." }, "serviceTier": { "type": "string", "description": "service Tier value for the thread object." }, "phase": { "type": "string", "description": "Session lifecycle phase; \"review\" when ready for review." }, "state": { "type": "string", "description": "OAuth state correlation value." }, "pendingQuestion": { "type": "boolean", "description": "pending Question value for the thread object." }, "activeCommand": { "type": "string", "description": "active Command value for the thread object." }, "pending": { "type": "boolean", "description": "pending value for the thread object." }, "promptQueue": { "type": "array", "items": { "$ref": "#/components/schemas/QueuedPrompt" }, "description": "Collection of prompt queue values." }, "activityStatus": { "description": "Collection of activity statu values.", "allOf": [ { "$ref": "#/components/schemas/ThreadActivity" } ] }, "metadata": { "description": "metadata value for the thread object." } }, "description": "Conversation thread metadata and current execution state." }, "QueuedPrompt": { "type": "object", "required": [ "id", "prompt" ], "properties": { "id": { "type": "string", "description": "Stable identifier for the object." }, "createdAt": { "type": "string", "format": "date-time", "description": "Time when the object was created." }, "runAfter": { "type": "string", "format": "date-time", "description": "run After value for the queued Prompt object." }, "prompt": { "type": "string", "description": "prompt value for the queued Prompt object." } }, "description": "queued Prompt API object." }, "ThreadActivity": { "type": "object", "required": [ "status" ], "properties": { "status": { "type": "string", "description": "Current status value." }, "reason": { "type": "string", "description": "reason value for the thread Activity object." }, "completionId": { "type": "string", "nullable": true, "description": "completion Id value for the thread Activity object." }, "queueCount": { "type": "integer", "description": "queue Count value for the thread Activity object." }, "nextRunAfter": { "type": "string", "format": "date-time", "nullable": true, "description": "next Run After value for the thread Activity object." }, "message": { "type": "string", "description": "Human-readable status or error message." } }, "description": "thread Activity API object." }, "ThreadsResponse": { "type": "object", "required": [ "threads" ], "properties": { "threads": { "type": "array", "items": { "$ref": "#/components/schemas/Thread" }, "description": "Collection of thread values." } }, "description": "threads Response payload returned by the API." }, "CreateThreadRequest": { "type": "object", "required": [ "id" ], "properties": { "id": { "type": "string", "description": "Stable identifier for the object." }, "name": { "type": "string", "description": "Human-readable name." }, "phase": { "type": "string", "description": "Session lifecycle phase; \"review\" when ready for review." } }, "description": "create Thread Request payload accepted by the API." }, "UpdateThreadRequest": { "type": "object", "properties": { "name": { "type": "string", "description": "Human-readable name." }, "phase": { "type": "string", "description": "Session lifecycle phase; \"review\" when ready for review." } }, "description": "update Thread Request payload accepted by the API." }, "ChatRequest": { "type": "object", "properties": { "messages": { "type": "array", "items": { "$ref": "#/components/schemas/Message" }, "description": "Discobot UIMessage values accepted by the sandbox agent API.", "x-go-type-skip-optional-pointer": true }, "trigger": { "type": "string", "description": "trigger value for the chat Request object.", "x-go-type-skip-optional-pointer": true }, "workspaceId": { "type": "string", "description": "Workspace identifier associated with this object.", "x-go-type-skip-optional-pointer": true, "x-go-name": "WorkspaceID" }, "providerId": { "type": "string", "description": "Sandbox provider identifier.", "x-go-type-skip-optional-pointer": true, "x-go-name": "ProviderID" }, "model": { "type": "string", "description": "model value for the chat Request object.", "x-go-type-skip-optional-pointer": true }, "reasoning": { "type": "string", "description": "reasoning value for the chat Request object.", "x-go-type-skip-optional-pointer": true }, "serviceTier": { "type": "string", "description": "service Tier value for the chat Request object.", "x-go-type-skip-optional-pointer": true }, "runAfter": { "type": "string", "description": "run After value for the chat Request object.", "x-go-type-skip-optional-pointer": true } }, "description": "Request to submit or queue chat messages for a session thread." }, "ChatResponse": { "type": "object", "required": [ "workspaceId", "sessionId", "threadId" ], "properties": { "workspaceId": { "type": "string", "description": "Workspace identifier associated with this object." }, "sessionId": { "type": "string", "description": "Session identifier associated with this object." }, "threadId": { "type": "string", "description": "Thread identifier associated with this object." }, "submissionId": { "type": "string", "description": "submission Id value for the chat Response object." }, "messageId": { "type": "string", "description": "message Id value for the chat Response object." }, "completionId": { "type": "string", "description": "completion Id value for the chat Response object." }, "status": { "type": "string", "description": "Current status value." }, "queuedPromptId": { "type": "string", "description": "queued Prompt Id value for the chat Response object." } }, "description": "Identifiers and status returned after a chat submission is accepted." }, "Suggestion": { "type": "object", "required": [ "value", "type", "valid" ], "properties": { "value": { "type": "string", "description": "value value for the suggestion object." }, "type": { "type": "string", "description": "type value for the suggestion object." }, "valid": { "type": "boolean", "description": "Whether the value passed validation." }, "classification": { "type": "string", "description": "Classification assigned during validation or suggestion lookup." } }, "description": "suggestion API object." }, "SuggestionsResponse": { "type": "object", "required": [ "suggestions" ], "properties": { "suggestions": { "type": "array", "items": { "$ref": "#/components/schemas/Suggestion" }, "description": "Suggested values returned by validation or autocomplete." } }, "description": "suggestions Response payload returned by the API." }, "StatusMessage": { "type": "object", "required": [ "id", "level", "title", "message" ], "properties": { "id": { "type": "string", "description": "Stable identifier for the object." }, "level": { "type": "string", "enum": [ "warn", "error" ], "description": "level value for the status Message object." }, "title": { "type": "string", "description": "title value for the status Message object." }, "message": { "type": "string", "description": "Human-readable status or error message." } }, "description": "status Message API object." }, "StartupTask": { "type": "object", "required": [ "id", "name", "state" ], "properties": { "id": { "type": "string", "description": "Stable identifier for the object." }, "name": { "type": "string", "description": "Human-readable name." }, "state": { "type": "string", "description": "OAuth state correlation value." }, "progress": { "type": "integer", "nullable": true, "description": "Collection of progres values." }, "currentOperation": { "type": "string", "description": "current Operation value for the startup Task object." }, "bytesDownloaded": { "type": "integer", "format": "int64", "nullable": true, "description": "bytes Downloaded value for the startup Task object." }, "totalBytes": { "type": "integer", "format": "int64", "nullable": true, "description": "Collection of total byte values." }, "error": { "type": "string", "description": "Error message when the operation failed." }, "startedAt": { "type": "string", "format": "date-time", "nullable": true, "description": "started At value for the startup Task object." }, "completedAt": { "type": "string", "format": "date-time", "nullable": true, "description": "completed At value for the startup Task object." } }, "description": "startup Task API object." }, "SystemStatusResponse": { "type": "object", "required": [ "ok", "messages" ], "properties": { "ok": { "type": "boolean", "description": "ok value for the system Status Response object." }, "messages": { "type": "array", "items": { "$ref": "#/components/schemas/StatusMessage" }, "description": "Collection of message values." }, "startupTasks": { "type": "array", "items": { "$ref": "#/components/schemas/StartupTask" }, "description": "Collection of startup task values." } }, "description": "system Status Response payload returned by the API." }, "SupportInfoResponse": { "type": "object", "required": [ "version", "runtime", "config", "server_log", "log_path", "log_exists", "system_info" ], "properties": { "version": { "type": "string", "description": "version value for the support Info Response object." }, "runtime": { "description": "runtime value for the support Info Response object.", "allOf": [ { "$ref": "#/components/schemas/RuntimeInfo" } ] }, "config": { "description": "config value for the support Info Response object.", "allOf": [ { "$ref": "#/components/schemas/ConfigInfo" } ] }, "server_log": { "type": "string", "description": "server log value for the support Info Response object." }, "log_path": { "type": "string", "description": "log path value for the support Info Response object." }, "log_exists": { "type": "boolean", "description": "Collection of log exist values." }, "system_info": { "description": "system info value for the support Info Response object.", "allOf": [ { "$ref": "#/components/schemas/SystemStatusResponse" } ] } }, "description": "support Info Response payload returned by the API." }, "RuntimeInfo": { "type": "object", "required": [ "os", "arch", "go_version", "num_cpu", "num_goroutine" ], "properties": { "os": { "type": "string", "description": "Collection of o values." }, "arch": { "type": "string", "description": "arch value for the runtime Info object." }, "go_version": { "type": "string", "description": "go version value for the runtime Info object." }, "num_cpu": { "type": "integer", "description": "num cpu value for the runtime Info object." }, "num_goroutine": { "type": "integer", "description": "num goroutine value for the runtime Info object." } }, "description": "runtime Info metadata returned by diagnostic endpoints." }, "ConfigInfo": { "type": "object", "required": [ "port", "database_driver", "auth_enabled", "workspace_dir", "sandbox_image", "desktop_mode", "ssh_enabled", "ssh_port", "dispatcher_enabled", "available_providers" ], "properties": { "port": { "type": "integer", "description": "port value for the config Info object." }, "https_port": { "type": "integer", "description": "https port value for the config Info object." }, "https_tls_mode": { "type": "string", "description": "https tls mode value for the config Info object." }, "database_driver": { "type": "string", "description": "database driver value for the config Info object." }, "auth_enabled": { "type": "boolean", "description": "auth enabled value for the config Info object." }, "workspace_dir": { "type": "string", "description": "workspace dir value for the config Info object." }, "sandbox_image": { "type": "string", "description": "sandbox image value for the config Info object." }, "sandbox_image_remote": { "type": "string", "description": "sandbox image remote value for the config Info object." }, "desktop_mode": { "type": "boolean", "description": "desktop mode value for the config Info object." }, "desktop_runtime": { "type": "string", "description": "desktop runtime value for the config Info object." }, "ssh_enabled": { "type": "boolean", "description": "ssh enabled value for the config Info object." }, "ssh_port": { "type": "integer", "description": "ssh port value for the config Info object." }, "dispatcher_enabled": { "type": "boolean", "description": "dispatcher enabled value for the config Info object." }, "available_providers": { "type": "array", "items": { "type": "string", "description": "Array item value for `available_providers`." }, "description": "Collection of available provider values." }, "vz": { "description": "vz value for the config Info object.", "allOf": [ { "$ref": "#/components/schemas/VZInfo" } ] } }, "description": "config Info metadata returned by diagnostic endpoints." }, "VZInfo": { "type": "object", "required": [ "image_ref", "data_dir", "cpu_count", "memory_mb", "data_disk_gb" ], "properties": { "image_ref": { "type": "string", "description": "image ref value for the vZInfo object." }, "data_dir": { "type": "string", "description": "data dir value for the vZInfo object." }, "cpu_count": { "type": "integer", "description": "cpu count value for the vZInfo object." }, "memory_mb": { "type": "integer", "description": "memory mb value for the vZInfo object." }, "data_disk_gb": { "type": "integer", "description": "data disk gb value for the vZInfo object." }, "disk_usage": { "description": "disk usage value for the vZInfo object.", "allOf": [ { "$ref": "#/components/schemas/DiskUsageInfo" } ] }, "data_disks": { "type": "array", "items": { "$ref": "#/components/schemas/DataDiskFileInfo" }, "description": "Collection of data disk values." }, "kernel_path": { "type": "string", "description": "kernel path value for the vZInfo object." }, "initrd_path": { "type": "string", "description": "initrd path value for the vZInfo object." }, "base_disk_path": { "type": "string", "description": "base disk path value for the vZInfo object." } }, "description": "vZInfo metadata returned by diagnostic endpoints." }, "DiskUsageInfo": { "type": "object", "required": [ "total_bytes", "used_bytes", "available_bytes", "used_percent" ], "properties": { "total_bytes": { "type": "integer", "format": "uint64", "description": "Collection of total byte values." }, "used_bytes": { "type": "integer", "format": "uint64", "description": "Collection of used byte values." }, "available_bytes": { "type": "integer", "format": "uint64", "description": "Collection of available byte values." }, "used_percent": { "type": "number", "format": "double", "description": "used percent value for the disk Usage Info object." } }, "description": "disk Usage Info metadata returned by diagnostic endpoints." }, "DataDiskFileInfo": { "type": "object", "required": [ "path", "apparent_bytes", "actual_bytes" ], "properties": { "path": { "type": "string", "description": "File system path or repository-relative path." }, "apparent_bytes": { "type": "integer", "format": "uint64", "description": "Collection of apparent byte values." }, "actual_bytes": { "type": "integer", "format": "uint64", "description": "Collection of actual byte values." } }, "description": "data Disk File Info metadata returned by diagnostic endpoints." }, "RouteInfo": { "type": "object", "required": [ "method", "path", "group", "description" ], "properties": { "method": { "type": "string", "description": "method value for the route Info object." }, "path": { "type": "string", "description": "File system path or repository-relative path." }, "group": { "type": "string", "description": "group value for the route Info object." }, "description": { "type": "string", "description": "Optional human-readable description." }, "params": { "type": "array", "items": { "$ref": "#/components/schemas/RouteParam" }, "description": "Collection of param values." }, "body": { "description": "body value for the route Info object." } }, "description": "route Info metadata returned by diagnostic endpoints." }, "RouteParam": { "type": "object", "additionalProperties": true, "description": "route Param API object." }, "CredentialVisibility": { "type": "object", "required": [ "tools", "console", "services", "hooks" ], "properties": { "tools": { "type": "boolean", "description": "Collection of tool values." }, "console": { "type": "boolean", "description": "console value for the credential Visibility object." }, "services": { "type": "boolean", "description": "Collection of service values." }, "hooks": { "type": "boolean", "description": "Collection of hook values." } }, "description": "credential Visibility API object." }, "CredentialEnvVar": { "type": "object", "required": [ "key", "value" ], "properties": { "key": { "type": "string", "description": "key value for the credential Env Var object." }, "value": { "type": "string", "description": "value value for the credential Env Var object." }, "originalKey": { "type": "string", "description": "original Key value for the credential Env Var object." } }, "description": "credential Env Var API object." }, "CreateCredentialRequest": { "type": "object", "required": [ "name", "authType" ], "properties": { "provider": { "type": "string", "description": "Provider name or key." }, "credentialId": { "type": "string", "description": "Credential identifier." }, "name": { "type": "string", "description": "Human-readable name." }, "description": { "type": "string", "description": "Optional human-readable description." }, "authType": { "type": "string", "description": "auth Type value for the create Credential Request object." }, "apiKey": { "type": "string", "description": "api Key value for the create Credential Request object." }, "envVars": { "type": "array", "items": { "$ref": "#/components/schemas/CredentialEnvVar" }, "description": "Collection of env var values." }, "agentVisible": { "type": "boolean", "nullable": true, "description": "agent Visible value for the create Credential Request object." }, "visibility": { "description": "visibility value for the create Credential Request object.", "allOf": [ { "$ref": "#/components/schemas/CredentialVisibility" } ] }, "inactive": { "type": "boolean", "nullable": true, "description": "inactive value for the create Credential Request object." } }, "description": "create Credential Request payload accepted by the API." }, "Credential": { "type": "object", "additionalProperties": true, "properties": { "id": { "type": "string", "description": "Stable identifier for the object." }, "provider": { "type": "string", "description": "Provider name or key." }, "name": { "type": "string", "description": "Human-readable name." }, "description": { "type": "string", "description": "Optional human-readable description." }, "authType": { "type": "string", "description": "auth Type value for the credential object." }, "configured": { "type": "boolean", "description": "configured value for the credential object." }, "agentVisible": { "type": "boolean", "description": "agent Visible value for the credential object." }, "visibility": { "description": "visibility value for the credential object.", "allOf": [ { "$ref": "#/components/schemas/CredentialVisibility" } ] }, "inactive": { "type": "boolean", "description": "inactive value for the credential object." } }, "description": "Credential metadata returned without secret material." }, "CredentialsResponse": { "type": "object", "required": [ "credentials" ], "properties": { "credentials": { "type": "array", "items": { "$ref": "#/components/schemas/Credential" }, "description": "Collection of credential values." } }, "description": "credentials Response payload returned by the API." }, "CredentialType": { "type": "object", "additionalProperties": true, "properties": { "provider": { "type": "string", "description": "Provider name or key." }, "name": { "type": "string", "description": "Human-readable name." }, "authTypes": { "type": "array", "items": { "type": "string", "description": "Array item value for `authTypes`." }, "description": "Collection of auth type values." } }, "description": "credential Type API object." }, "CredentialTypesResponse": { "type": "object", "required": [ "types" ], "properties": { "types": { "type": "array", "items": { "$ref": "#/components/schemas/CredentialType" }, "description": "Collection of type values." } }, "description": "credential Types Response payload returned by the API." }, "CredentialValidationResult": { "type": "object", "required": [ "valid" ], "additionalProperties": true, "properties": { "valid": { "type": "boolean", "description": "Whether the value passed validation." }, "error": { "type": "string", "description": "Error message when the operation failed." }, "provider": { "type": "string", "description": "Provider name or key." } }, "description": "credential Validation Result API object." }, "CredentialsValidationResponse": { "type": "object", "additionalProperties": true, "properties": { "results": { "type": "array", "items": { "$ref": "#/components/schemas/CredentialValidationResult" }, "description": "Collection of result values." } }, "description": "credentials Validation Response payload returned by the API." }, "AnthropicExchangeRequest": { "type": "object", "required": [ "code", "verifier" ], "properties": { "code": { "type": "string", "description": "OAuth authorization code." }, "verifier": { "type": "string", "description": "PKCE verifier used by OAuth code exchange." } }, "description": "anthropic Exchange Request payload accepted by the API." }, "OAuthAuthorizeRequest": { "type": "object", "properties": { "redirectUri": { "type": "string", "description": "OAuth redirect URI." } }, "description": "oAuth Authorize Request payload accepted by the API." }, "OAuthAuthorizeResponse": { "type": "object", "additionalProperties": true, "properties": { "url": { "type": "string", "description": "URL for a browser or API client to use." }, "verifier": { "type": "string", "description": "PKCE verifier used by OAuth code exchange." }, "state": { "type": "string", "description": "OAuth state correlation value." }, "redirectUri": { "type": "string", "description": "OAuth redirect URI." } }, "description": "oAuth Authorize Response payload returned by the API." }, "GitHubCopilotDeviceCodeRequest": { "type": "object", "properties": { "deploymentType": { "type": "string", "description": "deployment Type value for the git Hub Copilot Device Code Request object." }, "enterpriseUrl": { "type": "string", "description": "enterprise Url value for the git Hub Copilot Device Code Request object." } }, "description": "git Hub Copilot Device Code Request payload accepted by the API." }, "GitHubCopilotPollRequest": { "type": "object", "required": [ "deviceCode", "domain" ], "properties": { "deviceCode": { "type": "string", "description": "device Code value for the git Hub Copilot Poll Request object." }, "domain": { "type": "string", "description": "domain value for the git Hub Copilot Poll Request object." } }, "description": "git Hub Copilot Poll Request payload accepted by the API." }, "GitHubCopilotDeviceCodeResponse": { "type": "object", "required": [ "deviceCode", "userCode", "verificationUri", "expiresIn", "interval", "domain" ], "properties": { "deviceCode": { "type": "string", "description": "device Code value for the git Hub Copilot Device Code Response object." }, "userCode": { "type": "string", "description": "user Code value for the git Hub Copilot Device Code Response object." }, "verificationUri": { "type": "string", "description": "verification Uri value for the git Hub Copilot Device Code Response object." }, "expiresIn": { "type": "integer", "description": "expires In value for the git Hub Copilot Device Code Response object." }, "interval": { "type": "integer", "description": "interval value for the git Hub Copilot Device Code Response object." }, "domain": { "type": "string", "description": "domain value for the git Hub Copilot Device Code Response object." } }, "description": "git Hub Copilot Device Code Response payload returned by the API." }, "GitHubCopilotPollResponse": { "type": "object", "required": [ "status" ], "properties": { "status": { "type": "string", "description": "Current status value." }, "error": { "type": "string", "description": "Error message when the operation failed." } }, "description": "git Hub Copilot Poll Response payload returned by the API." }, "GitHubDeviceCodeRequest": { "type": "object", "properties": { "enterpriseUrl": { "type": "string", "description": "enterprise Url value for the git Hub Device Code Request object." }, "scopes": { "type": "array", "items": { "type": "string", "description": "Array item value for `scopes`." }, "description": "Collection of scope values." } }, "description": "git Hub Device Code Request payload accepted by the API." }, "GitHubAuthorizeRequest": { "type": "object", "properties": { "enterpriseUrl": { "type": "string", "description": "enterprise Url value for the git Hub Authorize Request object." }, "redirectUri": { "type": "string", "description": "OAuth redirect URI." }, "scopes": { "type": "array", "items": { "type": "string", "description": "Array item value for `scopes`." }, "description": "Collection of scope values." }, "credentialId": { "type": "string", "description": "Credential identifier." }, "name": { "type": "string", "description": "Human-readable name." }, "description": { "type": "string", "description": "Optional human-readable description." }, "visibility": { "description": "visibility value for the git Hub Authorize Request object.", "allOf": [ { "$ref": "#/components/schemas/CredentialVisibility" } ] }, "inactive": { "type": "boolean", "nullable": true, "description": "inactive value for the git Hub Authorize Request object." } }, "description": "git Hub Authorize Request payload accepted by the API." }, "GitHubAuthorizeResponse": { "type": "object", "required": [ "url", "verifier", "state", "redirectUri", "callbackListening" ], "properties": { "url": { "type": "string", "description": "URL for a browser or API client to use." }, "verifier": { "type": "string", "description": "PKCE verifier used by OAuth code exchange." }, "state": { "type": "string", "description": "OAuth state correlation value." }, "redirectUri": { "type": "string", "description": "OAuth redirect URI." }, "callbackListening": { "type": "boolean", "description": "callback Listening value for the git Hub Authorize Response object." } }, "description": "git Hub Authorize Response payload returned by the API." }, "GitHubPollRequest": { "type": "object", "required": [ "deviceCode", "domain" ], "properties": { "deviceCode": { "type": "string", "description": "device Code value for the git Hub Poll Request object." }, "domain": { "type": "string", "description": "domain value for the git Hub Poll Request object." }, "credentialId": { "type": "string", "description": "Credential identifier." }, "name": { "type": "string", "description": "Human-readable name." }, "description": { "type": "string", "description": "Optional human-readable description." }, "visibility": { "description": "visibility value for the git Hub Poll Request object.", "allOf": [ { "$ref": "#/components/schemas/CredentialVisibility" } ] }, "inactive": { "type": "boolean", "nullable": true, "description": "inactive value for the git Hub Poll Request object." } }, "description": "git Hub Poll Request payload accepted by the API." }, "GitHubExchangeRequest": { "type": "object", "required": [ "code", "verifier" ], "properties": { "code": { "type": "string", "description": "OAuth authorization code." }, "redirectUri": { "type": "string", "description": "OAuth redirect URI." }, "verifier": { "type": "string", "description": "PKCE verifier used by OAuth code exchange." }, "enterpriseUrl": { "type": "string", "description": "enterprise Url value for the git Hub Exchange Request object." }, "credentialId": { "type": "string", "description": "Credential identifier." }, "name": { "type": "string", "description": "Human-readable name." }, "description": { "type": "string", "description": "Optional human-readable description." }, "visibility": { "description": "visibility value for the git Hub Exchange Request object.", "allOf": [ { "$ref": "#/components/schemas/CredentialVisibility" } ] }, "inactive": { "type": "boolean", "nullable": true, "description": "inactive value for the git Hub Exchange Request object." } }, "description": "git Hub Exchange Request payload accepted by the API." }, "GitHubExchangeResponse": { "type": "object", "required": [ "success" ], "properties": { "success": { "type": "boolean", "description": "Whether the requested action succeeded." }, "error": { "type": "string", "description": "Error message when the operation failed." } }, "description": "git Hub Exchange Response payload returned by the API." }, "GitHubCallbackStatusRequest": { "type": "object", "required": [ "state" ], "properties": { "state": { "type": "string", "description": "OAuth state correlation value." } }, "description": "git Hub Callback Status Request payload accepted by the API." }, "CodexDeviceCodeResponse": { "type": "object", "required": [ "deviceAuthId", "userCode", "verificationUri", "interval" ], "properties": { "deviceAuthId": { "type": "string", "description": "device Auth Id value for the codex Device Code Response object." }, "userCode": { "type": "string", "description": "user Code value for the codex Device Code Response object." }, "verificationUri": { "type": "string", "description": "verification Uri value for the codex Device Code Response object." }, "interval": { "type": "integer", "description": "interval value for the codex Device Code Response object." } }, "description": "codex Device Code Response payload returned by the API." }, "CodexAuthorizeRequest": { "type": "object", "required": [ "redirectUri" ], "properties": { "redirectUri": { "type": "string", "description": "OAuth redirect URI." } }, "description": "codex Authorize Request payload accepted by the API." }, "CodexAuthorizeResponse": { "type": "object", "required": [ "url", "verifier", "state", "redirectUri", "callbackListening" ], "properties": { "url": { "type": "string", "description": "URL for a browser or API client to use." }, "verifier": { "type": "string", "description": "PKCE verifier used by OAuth code exchange." }, "state": { "type": "string", "description": "OAuth state correlation value." }, "redirectUri": { "type": "string", "description": "OAuth redirect URI." }, "callbackListening": { "type": "boolean", "description": "callback Listening value for the codex Authorize Response object." } }, "description": "codex Authorize Response payload returned by the API." }, "CodexExchangeRequest": { "type": "object", "required": [ "code", "redirectUri", "verifier" ], "properties": { "code": { "type": "string", "description": "OAuth authorization code." }, "redirectUri": { "type": "string", "description": "OAuth redirect URI." }, "verifier": { "type": "string", "description": "PKCE verifier used by OAuth code exchange." } }, "description": "codex Exchange Request payload accepted by the API." }, "CodexExchangeResponse": { "type": "object", "required": [ "success" ], "properties": { "success": { "type": "boolean", "description": "Whether the requested action succeeded." }, "error": { "type": "string", "description": "Error message when the operation failed." } }, "description": "codex Exchange Response payload returned by the API." }, "CodexPollRequest": { "type": "object", "required": [ "deviceAuthId", "userCode" ], "properties": { "deviceAuthId": { "type": "string", "description": "device Auth Id value for the codex Poll Request object." }, "userCode": { "type": "string", "description": "user Code value for the codex Poll Request object." } }, "description": "codex Poll Request payload accepted by the API." }, "CodexCallbackStatusRequest": { "type": "object", "required": [ "state" ], "properties": { "state": { "type": "string", "description": "OAuth state correlation value." } }, "description": "codex Callback Status Request payload accepted by the API." }, "MCPTokenRequest": { "type": "object", "required": [ "url", "accessToken" ], "properties": { "url": { "type": "string", "description": "URL for a browser or API client to use." }, "accessToken": { "type": "string", "description": "access Token value for the mCPToken Request object." }, "refreshToken": { "type": "string", "description": "refresh Token value for the mCPToken Request object." }, "expiresAt": { "type": "integer", "format": "int64", "description": "expires At value for the mCPToken Request object." } }, "description": "mCPToken Request payload accepted by the API." }, "PreferenceResponse": { "type": "object", "required": [ "key", "value" ], "properties": { "key": { "type": "string", "description": "key value for the preference Response object." }, "value": { "type": "string", "description": "value value for the preference Response object." }, "updatedAt": { "type": "string", "description": "Time when the preference was last updated." } }, "description": "preference Response payload returned by the API." }, "PreferencesResponse": { "type": "object", "required": [ "preferences" ], "properties": { "preferences": { "type": "array", "items": { "$ref": "#/components/schemas/PreferenceResponse" }, "description": "Collection of preference values." } }, "description": "preferences Response payload returned by the API." }, "SetPreferenceRequest": { "type": "object", "required": [ "value" ], "properties": { "value": { "type": "string", "description": "value value for the set Preference Request object." } }, "description": "set Preference Request payload accepted by the API." }, "SetPreferencesRequest": { "type": "object", "required": [ "preferences" ], "properties": { "preferences": { "type": "object", "additionalProperties": { "type": "string", "description": "Map value for `preferences`." }, "description": "Collection of preference values." } }, "description": "set Preferences Request payload accepted by the API." }, "AuthMeResponse": { "type": "object", "additionalProperties": true, "properties": { "authenticated": { "type": "boolean", "description": "authenticated value for the auth Me Response object." }, "user": { "description": "user value for the auth Me Response object.", "allOf": [ { "$ref": "#/components/schemas/User" } ] } }, "description": "auth Me Response payload returned by the API." }, "User": { "type": "object", "additionalProperties": true, "properties": { "id": { "type": "string", "description": "Stable identifier for the object." }, "email": { "type": "string", "description": "Email address associated with a user or invitation." }, "name": { "type": "string", "description": "Human-readable name." } }, "description": "user API object." }, "ProjectMember": { "type": "object", "additionalProperties": true, "properties": { "userId": { "type": "string", "description": "user Id value for the project Member object." }, "role": { "type": "string", "description": "Project role assigned to a member or invitation." }, "email": { "type": "string", "description": "Email address associated with a user or invitation." }, "name": { "type": "string", "description": "Human-readable name." } }, "description": "project Member API object." }, "ProjectMembersResponse": { "type": "object", "required": [ "members" ], "properties": { "members": { "type": "array", "items": { "$ref": "#/components/schemas/ProjectMember" }, "description": "Collection of member values." } }, "description": "project Members Response payload returned by the API." }, "CreateInvitationRequest": { "type": "object", "required": [ "email", "role" ], "properties": { "email": { "type": "string", "description": "Email address associated with a user or invitation." }, "role": { "type": "string", "description": "Project role assigned to a member or invitation." } }, "description": "create Invitation Request payload accepted by the API." }, "Invitation": { "type": "object", "additionalProperties": true, "properties": { "token": { "type": "string", "description": "Opaque invitation or authentication token." }, "email": { "type": "string", "description": "Email address associated with a user or invitation." }, "role": { "type": "string", "description": "Project role assigned to a member or invitation." } }, "description": "invitation API object." }, "ProviderResources": { "type": "object", "additionalProperties": true, "properties": { "memoryMB": { "type": "integer", "description": "Memory allocation in megabytes." }, "dataDiskGB": { "type": "integer", "description": "Data disk allocation in gigabytes." } }, "description": "Sandbox provider CPU-independent resource limits used for VM-backed providers." }, "InspectionInfo": { "type": "object", "additionalProperties": true, "description": "Open-ended inspection container metadata for a project or sandbox provider." }, "CacheVolumesResponse": { "type": "object", "additionalProperties": true, "description": "cache Volumes Response payload returned by the API." }, "SandboxProviderStatus": { "type": "object", "additionalProperties": true, "properties": { "id": { "type": "string", "description": "Stable identifier for the object." }, "name": { "type": "string", "description": "Human-readable name." }, "available": { "type": "boolean", "description": "available value for the sandbox Provider Status object." }, "status": { "type": "string", "description": "Current status value." } }, "description": "sandbox Provider Status API object." }, "SandboxProviderStatusesResponse": { "type": "object", "required": [ "providers" ], "properties": { "providers": { "type": "array", "items": { "$ref": "#/components/schemas/SandboxProviderStatus" }, "description": "Collection of provider values." } }, "description": "sandbox Provider Statuses Response payload returned by the API." }, "SandboxProviderType": { "type": "object", "additionalProperties": true, "properties": { "type": { "type": "string", "description": "type value for the sandbox Provider Type object." }, "name": { "type": "string", "description": "Human-readable name." } }, "description": "sandbox Provider Type API object." }, "SandboxProviderTypesResponse": { "type": "object", "required": [ "types" ], "properties": { "types": { "type": "array", "items": { "$ref": "#/components/schemas/SandboxProviderType" }, "description": "Collection of type values." } }, "description": "sandbox Provider Types Response payload returned by the API." }, "SandboxProvider": { "type": "object", "additionalProperties": true, "properties": { "id": { "type": "string", "description": "Stable identifier for the object." }, "type": { "type": "string", "description": "type value for the sandbox Provider object." }, "name": { "type": "string", "description": "Human-readable name." }, "config": { "type": "object", "additionalProperties": true, "description": "config value for the sandbox Provider object." } }, "description": "sandbox Provider API object." }, "SandboxProvidersResponse": { "type": "object", "required": [ "providers" ], "properties": { "providers": { "type": "array", "items": { "$ref": "#/components/schemas/SandboxProvider" }, "description": "Collection of provider values." } }, "description": "sandbox Providers Response payload returned by the API." }, "CreateSandboxProviderRequest": { "type": "object", "required": [ "type", "name" ], "properties": { "type": { "type": "string", "description": "type value for the create Sandbox Provider Request object." }, "name": { "type": "string", "description": "Human-readable name." }, "config": { "type": "object", "additionalProperties": true, "description": "config value for the create Sandbox Provider Request object." } }, "description": "create Sandbox Provider Request payload accepted by the API." }, "UpdateSandboxProviderRequest": { "type": "object", "properties": { "name": { "type": "string", "description": "Human-readable name." }, "config": { "type": "object", "additionalProperties": true, "description": "config value for the update Sandbox Provider Request object." } }, "description": "update Sandbox Provider Request payload accepted by the API." }, "UpdateDefaultSandboxProviderRequest": { "type": "object", "required": [ "providerId" ], "properties": { "providerId": { "type": "string", "description": "Sandbox provider identifier." } }, "description": "update Default Sandbox Provider Request payload accepted by the API." }, "AuthProvidersResponse": { "type": "object", "additionalProperties": true, "description": "auth Providers Response payload returned by the API." }, "GitStatus": { "type": "object", "additionalProperties": true, "description": "git Status API object." }, "GitCheckoutRequest": { "type": "object", "required": [ "ref" ], "properties": { "ref": { "type": "string", "description": "ref value for the git Checkout Request object." } }, "description": "git Checkout Request payload accepted by the API." }, "GitBranchesResponse": { "type": "object", "additionalProperties": true, "properties": { "branches": { "type": "array", "items": { "type": "string", "description": "Array item value for `branches`." }, "description": "Collection of branche values." } }, "description": "git Branches Response payload returned by the API." }, "DiffResponse": { "type": "object", "additionalProperties": true, "description": "diff Response payload returned by the API." }, "FileTreeResponse": { "type": "object", "additionalProperties": true, "description": "file Tree Response payload returned by the API." }, "FileContentResponse": { "type": "object", "additionalProperties": true, "properties": { "path": { "type": "string", "description": "File system path or repository-relative path." }, "content": { "type": "string", "description": "Text content for a file or payload." }, "encoding": { "type": "string", "description": "encoding value for the file Content Response object." } }, "description": "file Content Response payload returned by the API." }, "WriteFileRequest": { "type": "object", "required": [ "path", "content" ], "properties": { "path": { "type": "string", "description": "File system path or repository-relative path." }, "content": { "type": "string", "description": "Text content for a file or payload." } }, "description": "write File Request payload accepted by the API." }, "GitStageRequest": { "type": "object", "properties": { "paths": { "type": "array", "items": { "type": "string", "description": "Array item value for `paths`." }, "description": "Collection of path values. When omitted or empty, all files are staged." } }, "description": "git Stage Request payload accepted by the API." }, "GitCommitRequest": { "type": "object", "required": [ "message" ], "properties": { "message": { "type": "string", "description": "Human-readable status or error message." } }, "description": "git Commit Request payload accepted by the API." }, "GitCommitResponse": { "type": "object", "additionalProperties": true, "properties": { "commit": { "type": "string", "description": "commit value for the git Commit Response object." }, "message": { "type": "string", "description": "Human-readable status or error message." } }, "description": "git Commit Response payload returned by the API." }, "GitLogResponse": { "type": "object", "additionalProperties": true, "description": "git Log Response payload returned by the API." }, "FileListResponse": { "type": "object", "additionalProperties": true, "description": "file List Response payload returned by the API." }, "FileSearchResponse": { "type": "object", "additionalProperties": true, "properties": { "results": { "type": "array", "items": { "$ref": "#/components/schemas/Suggestion" }, "description": "Collection of result values." } }, "description": "file Search Response payload returned by the API." }, "DeleteFileRequest": { "type": "object", "required": [ "path" ], "properties": { "path": { "type": "string", "description": "File system path or repository-relative path." } }, "description": "delete File Request payload accepted by the API." }, "RenameFileRequest": { "type": "object", "required": [ "oldPath", "newPath" ], "properties": { "oldPath": { "type": "string", "description": "old Path value for the rename File Request object." }, "newPath": { "type": "string", "description": "new Path value for the rename File Request object." } }, "description": "rename File Request payload accepted by the API." }, "CommandsResponse": { "type": "object", "additionalProperties": true, "description": "commands Response payload returned by the API." }, "TokenUsageResponse": { "type": "object", "additionalProperties": true, "description": "token Usage Response payload returned by the API." }, "UpdateQueuedPromptRequest": { "type": "object", "properties": { "runAfter": { "type": "string", "format": "date-time", "nullable": true, "description": "run After value for the update Queued Prompt Request object." } }, "description": "update Queued Prompt Request payload accepted by the API." }, "AskUserQuestion": { "type": "object", "additionalProperties": true, "description": "ask User Question API object." }, "AnswerQuestionRequest": { "type": "object", "additionalProperties": true, "properties": { "answers": { "type": "object", "additionalProperties": true, "description": "Collection of answer values." } }, "description": "answer Question Request payload accepted by the API." }, "CommitPreview": { "type": "object", "additionalProperties": true, "description": "commit Preview API object." }, "SessionCredentialAssignment": { "type": "object", "required": [ "credentialId" ], "properties": { "credentialId": { "type": "string", "description": "Credential identifier." }, "agentVisible": { "type": "boolean", "description": "agent Visible value for the session Credential Assignment object." }, "visibility": { "description": "visibility value for the session Credential Assignment object.", "allOf": [ { "$ref": "#/components/schemas/CredentialVisibility" } ] } }, "description": "session Credential Assignment API object." }, "SessionCredentialAssignmentsResponse": { "type": "object", "required": [ "credentials" ], "properties": { "credentials": { "type": "array", "items": { "$ref": "#/components/schemas/SessionCredentialAssignment" }, "description": "Collection of credential values." } }, "description": "session Credential Assignments Response payload returned by the API." }, "SetSessionCredentialAssignmentsRequest": { "type": "object", "required": [ "credentials" ], "properties": { "credentials": { "type": "array", "items": { "$ref": "#/components/schemas/SessionCredentialAssignment" }, "description": "Collection of credential values." } }, "description": "set Session Credential Assignments Request payload accepted by the API." }, "TerminalMessage": { "type": "object", "required": [ "type" ], "properties": { "type": { "type": "string", "description": "type value for the terminal Message object." }, "data": { "description": "data value for the terminal Message object." } }, "description": "terminal Message API object." }, "ResizeData": { "type": "object", "required": [ "rows", "cols" ], "properties": { "rows": { "type": "integer", "description": "Collection of row values." }, "cols": { "type": "integer", "description": "Collection of col values." } }, "description": "resize Data API object." }, "TerminalHistoryResponse": { "type": "object", "additionalProperties": true, "properties": { "output": { "type": "string", "description": "output value for the terminal History Response object." } }, "description": "terminal History Response payload returned by the API." }, "TerminalStatusResponse": { "type": "object", "additionalProperties": true, "properties": { "running": { "type": "boolean", "description": "running value for the terminal Status Response object." } }, "description": "terminal Status Response payload returned by the API." }, "HooksStatusResponse": { "type": "object", "additionalProperties": true, "description": "hooks Status Response payload returned by the API." }, "HooksStateResponse": { "type": "object", "additionalProperties": true, "description": "hooks State Response payload returned by the API." }, "Service": { "type": "object", "additionalProperties": true, "properties": { "id": { "type": "string", "description": "Stable identifier for the object." }, "name": { "type": "string", "description": "Human-readable name." }, "status": { "type": "string", "description": "Current status value." }, "url": { "type": "string", "description": "URL for a browser or API client to use." }, "localhost": { "type": "string", "description": "localhost value for the service object." } }, "description": "service API object." }, "ServicesResponse": { "type": "object", "required": [ "services" ], "properties": { "services": { "type": "array", "items": { "$ref": "#/components/schemas/Service" }, "description": "Collection of service values." } }, "description": "services Response payload returned by the API." }, "ServiceActionResponse": { "type": "object", "additionalProperties": true, "description": "service Action Response payload returned by the API." }, "LocalhostBinding": { "type": "object", "additionalProperties": true, "properties": { "url": { "type": "string", "description": "URL for a browser or API client to use." }, "port": { "type": "integer", "description": "port value for the localhost Binding object." } }, "description": "localhost Binding API object." }, "ProjectStreamType": { "type": "string", "description": "Multiplexed project websocket sub-stream identifier.", "enum": [ "chat", "service", "session", "project-events" ] }, "ChatStreamEventName": { "type": "string", "description": "Chat stream event name.", "enum": [ "history-start", "history-message", "history-end", "chunk", "ping" ] }, "ProjectEventName": { "type": "string", "description": "Project-events stream event name.", "enum": [ "connected", "session_updated", "thread_updated", "workspace_updated", "startup_task_updated", "history-start", "history-end" ] }, "ProjectEventsSubscriptionOptions": { "description": "Project-events stream subscription options.", "type": "object", "properties": {} }, "ChatStreamSubscriptionOptions": { "description": "Chat stream subscription options.", "type": "object", "properties": { "sessionId": { "type": "string", "x-go-type-skip-optional-pointer": true }, "threadId": { "type": "string", "x-go-type-skip-optional-pointer": true } }, "required": [ "sessionId", "threadId" ] }, "ServiceStreamSubscriptionOptions": { "description": "Service output stream subscription options.", "type": "object", "properties": { "sessionId": { "type": "string" }, "serviceId": { "type": "string" } }, "required": [ "sessionId", "serviceId" ] }, "ProjectStreamOptions": { "description": "Set of project websocket streams to subscribe or unsubscribe.", "type": "object", "properties": { "projectEvents": { "$ref": "#/components/schemas/ProjectEventsSubscriptionOptions" }, "chat": { "$ref": "#/components/schemas/ChatStreamSubscriptionOptions" }, "session": { "$ref": "#/components/schemas/SessionStreamSubscriptionOptions" }, "service": { "$ref": "#/components/schemas/ServiceStreamSubscriptionOptions" } } }, "ProjectStreamRequest": { "description": "Client-to-server project websocket control message.", "type": "object", "properties": { "type": { "type": "string", "enum": [ "subscribe", "unsubscribe" ], "x-go-type-skip-optional-pointer": true }, "stream": { "x-go-type-skip-optional-pointer": true, "allOf": [ { "$ref": "#/components/schemas/ProjectStreamType" } ] }, "sessionId": { "type": "string", "x-go-type-skip-optional-pointer": true }, "threadId": { "type": "string", "x-go-type-skip-optional-pointer": true }, "serviceId": { "type": "string", "x-go-type-skip-optional-pointer": true } }, "required": [ "type", "stream" ] }, "ProjectStreamSubscribedEvent": { "description": "Server acknowledgement that a sub-stream was subscribed.", "type": "object", "properties": { "stream": { "x-go-type-skip-optional-pointer": true, "allOf": [ { "$ref": "#/components/schemas/ProjectStreamType" } ] }, "sessionId": { "type": "string", "x-go-type-skip-optional-pointer": true }, "threadId": { "type": "string", "x-go-type-skip-optional-pointer": true }, "serviceId": { "type": "string", "x-go-type-skip-optional-pointer": true }, "type": { "type": "string", "enum": [ "subscribed" ], "x-go-type-skip-optional-pointer": true } }, "required": [ "type", "stream" ], "x-discobot-discriminator": { "type": "subscribed" } }, "ProjectStreamUnsubscribedEvent": { "description": "Server acknowledgement that a sub-stream was unsubscribed.", "type": "object", "properties": { "stream": { "x-go-type-skip-optional-pointer": true, "allOf": [ { "$ref": "#/components/schemas/ProjectStreamType" } ] }, "sessionId": { "type": "string", "x-go-type-skip-optional-pointer": true }, "threadId": { "type": "string", "x-go-type-skip-optional-pointer": true }, "serviceId": { "type": "string", "x-go-type-skip-optional-pointer": true }, "type": { "type": "string", "enum": [ "unsubscribed" ], "x-go-type-skip-optional-pointer": true } }, "required": [ "type", "stream" ], "x-discobot-discriminator": { "type": "unsubscribed" } }, "ProjectStreamCompleteEvent": { "description": "Server notification that a sub-stream completed.", "type": "object", "properties": { "stream": { "x-go-type-skip-optional-pointer": true, "allOf": [ { "$ref": "#/components/schemas/ProjectStreamType" } ] }, "sessionId": { "type": "string", "x-go-type-skip-optional-pointer": true }, "threadId": { "type": "string", "x-go-type-skip-optional-pointer": true }, "serviceId": { "type": "string", "x-go-type-skip-optional-pointer": true }, "type": { "type": "string", "enum": [ "complete" ], "x-go-type-skip-optional-pointer": true } }, "required": [ "type", "stream" ], "x-discobot-discriminator": { "type": "complete" } }, "ProjectStreamErrorEvent": { "description": "Project websocket error event.", "type": "object", "properties": { "stream": { "x-go-type-skip-optional-pointer": true, "allOf": [ { "$ref": "#/components/schemas/ProjectStreamType" } ] }, "sessionId": { "type": "string", "x-go-type-skip-optional-pointer": true }, "threadId": { "type": "string", "x-go-type-skip-optional-pointer": true }, "serviceId": { "type": "string", "x-go-type-skip-optional-pointer": true }, "error": { "type": "string", "x-go-type-skip-optional-pointer": true }, "type": { "type": "string", "enum": [ "error" ], "x-go-type-skip-optional-pointer": true } }, "required": [ "type", "error" ], "x-discobot-discriminator": { "type": "error" } }, "ProjectEventsStreamMessage": { "description": "Project-events websocket stream message envelope.", "type": "object", "properties": { "stream": { "allOf": [ { "$ref": "#/components/schemas/ProjectStreamType" } ], "enum": [ "project-events" ], "x-go-type-skip-optional-pointer": true }, "event": { "x-go-type-skip-optional-pointer": true, "allOf": [ { "$ref": "#/components/schemas/ProjectEventName" } ] }, "data": { "description": "Structured project event payload. Synthetic events use their payload directly; persisted events use the project event envelope.", "oneOf": [ { "$ref": "#/components/schemas/ProjectConnectedEvent" }, { "$ref": "#/components/schemas/SessionUpdatedEvent" }, { "$ref": "#/components/schemas/ThreadUpdatedEvent" }, { "$ref": "#/components/schemas/WorkspaceUpdatedEvent" }, { "$ref": "#/components/schemas/StartupTaskUpdatedEvent" }, { "$ref": "#/components/schemas/UnknownProjectEvent" } ], "x-go-type": "json.RawMessage", "x-go-type-skip-optional-pointer": true }, "id": { "type": "string", "x-go-type-skip-optional-pointer": true }, "type": { "type": "string", "enum": [ "event" ], "x-go-type-skip-optional-pointer": true } }, "required": [ "type", "stream", "event" ], "x-discobot-discriminator": { "type": "event" } }, "ChatStreamMessage": { "description": "Chat websocket stream message envelope.", "type": "object", "properties": { "stream": { "allOf": [ { "$ref": "#/components/schemas/ProjectStreamType" } ], "enum": [ "chat" ], "x-go-type-skip-optional-pointer": true }, "sessionId": { "type": "string", "x-go-type-skip-optional-pointer": true }, "threadId": { "type": "string", "x-go-type-skip-optional-pointer": true }, "event": { "x-go-type-skip-optional-pointer": true, "allOf": [ { "$ref": "#/components/schemas/ChatStreamEventName" } ] }, "data": { "type": "string", "x-go-type-skip-optional-pointer": true }, "id": { "type": "string", "x-go-type-skip-optional-pointer": true }, "type": { "type": "string", "enum": [ "event" ], "x-go-type-skip-optional-pointer": true } }, "required": [ "type", "stream", "sessionId", "threadId", "event" ], "x-discobot-discriminator": { "type": "event" } }, "ChatStreamEvent": { "description": "Decoded chat stream event delivered by the client package.", "type": "object", "properties": { "sessionId": { "type": "string", "x-go-type-skip-optional-pointer": true }, "threadId": { "type": "string", "x-go-type-skip-optional-pointer": true }, "event": { "x-go-type-skip-optional-pointer": true, "allOf": [ { "$ref": "#/components/schemas/ChatStreamEventName" } ] }, "data": { "description": "history-message carries Message; chunk carries MessageChunk; history-start/history-end/ping omit data.", "oneOf": [ { "$ref": "#/components/schemas/Message" }, { "$ref": "#/components/schemas/MessageChunk" } ], "x-go-type": "any", "x-go-type-skip-optional-pointer": true }, "id": { "type": "string", "x-go-type-skip-optional-pointer": true } }, "required": [ "sessionId", "threadId", "event" ] }, "ServiceOutputEvent": { "description": "Service output stream event.", "type": "object", "properties": { "stream": { "allOf": [ { "$ref": "#/components/schemas/ProjectStreamType" } ], "enum": [ "service" ], "x-go-type-skip-optional-pointer": true }, "sessionId": { "type": "string", "x-go-type-skip-optional-pointer": true }, "serviceId": { "type": "string", "x-go-type-skip-optional-pointer": true }, "data": { "type": "string", "x-go-type-skip-optional-pointer": true }, "id": { "type": "string", "x-go-type-skip-optional-pointer": true }, "type": { "type": "string", "enum": [ "event" ], "x-go-type-skip-optional-pointer": true } }, "required": [ "type", "stream", "sessionId", "serviceId" ], "x-discobot-discriminator": { "type": "event" } }, "ProjectStreamMessage": { "description": "Server-to-client project websocket message.", "oneOf": [ { "$ref": "#/components/schemas/ProjectStreamSubscribedEvent" }, { "$ref": "#/components/schemas/ProjectStreamUnsubscribedEvent" }, { "$ref": "#/components/schemas/ProjectStreamCompleteEvent" }, { "$ref": "#/components/schemas/ProjectStreamErrorEvent" }, { "$ref": "#/components/schemas/ProjectEventsStreamMessage" }, { "$ref": "#/components/schemas/ChatStreamMessage" }, { "$ref": "#/components/schemas/SessionStreamMessage" }, { "$ref": "#/components/schemas/ServiceOutputEvent" } ], "x-go-type": "any" }, "ProjectEventBase": { "description": "Metadata shared by persisted project events.", "type": "object", "properties": { "id": { "type": "string" }, "seq": { "type": "integer", "format": "int64" }, "type": { "$ref": "#/components/schemas/ProjectEventName" }, "timestamp": { "type": "string", "format": "date-time" } }, "required": [ "id", "seq", "type", "timestamp" ] }, "ProjectConnectedEvent": { "description": "Synthetic event emitted immediately after project-events subscription.", "type": "object", "properties": { "projectId": { "type": "string" } }, "required": [ "projectId" ] }, "SessionUpdatedEvent": { "description": "Decoded session_updated project event.", "type": "object", "properties": { "id": { "type": "string" }, "seq": { "type": "integer", "format": "int64" }, "type": { "allOf": [ { "$ref": "#/components/schemas/ProjectEventName" } ], "enum": [ "session_updated" ], "x-go-type-skip-optional-pointer": true }, "timestamp": { "type": "string", "format": "date-time" }, "data": { "$ref": "#/components/schemas/Session" } }, "required": [ "id", "seq", "type", "timestamp", "data" ] }, "ThreadUpdatedData": { "description": "Payload for thread_updated project events.", "type": "object", "properties": { "sessionId": { "type": "string", "x-go-type-skip-optional-pointer": true }, "threadId": { "type": "string", "x-go-type-skip-optional-pointer": true }, "name": { "type": "string", "x-go-type-skip-optional-pointer": true } }, "required": [ "sessionId" ] }, "ThreadUpdatedEvent": { "description": "Decoded thread_updated project event.", "type": "object", "properties": { "id": { "type": "string" }, "seq": { "type": "integer", "format": "int64" }, "type": { "allOf": [ { "$ref": "#/components/schemas/ProjectEventName" } ], "enum": [ "thread_updated" ], "x-go-type-skip-optional-pointer": true }, "timestamp": { "type": "string", "format": "date-time" }, "data": { "$ref": "#/components/schemas/ThreadUpdatedData" } }, "required": [ "id", "seq", "type", "timestamp", "data" ] }, "WorkspaceUpdatedEvent": { "description": "Decoded workspace_updated project event.", "type": "object", "properties": { "id": { "type": "string" }, "seq": { "type": "integer", "format": "int64" }, "type": { "allOf": [ { "$ref": "#/components/schemas/ProjectEventName" } ], "enum": [ "workspace_updated" ], "x-go-type-skip-optional-pointer": true }, "timestamp": { "type": "string", "format": "date-time" }, "data": { "$ref": "#/components/schemas/Workspace" } }, "required": [ "id", "seq", "type", "timestamp", "data" ] }, "StartupTaskUpdatedEvent": { "description": "Decoded startup_task_updated project event.", "type": "object", "properties": { "id": { "type": "string" }, "seq": { "type": "integer", "format": "int64" }, "type": { "allOf": [ { "$ref": "#/components/schemas/ProjectEventName" } ], "enum": [ "startup_task_updated" ], "x-go-type-skip-optional-pointer": true }, "timestamp": { "type": "string", "format": "date-time" }, "data": { "$ref": "#/components/schemas/StartupTask" } }, "required": [ "id", "seq", "type", "timestamp", "data" ] }, "UnknownProjectEvent": { "description": "Decoded project event unknown to this client version.", "type": "object", "properties": { "id": { "type": "string" }, "seq": { "type": "integer", "format": "int64" }, "type": { "$ref": "#/components/schemas/ProjectEventName" }, "timestamp": { "type": "string", "format": "date-time" }, "data": {} }, "required": [ "id", "seq", "type", "timestamp", "data" ] }, "Message": { "description": "Discobot UIMessage JSON wire format. Authoritative Go type: agent-go/message.UIMessage.", "type": "object", "required": [ "id", "role", "parts" ], "properties": { "id": { "type": "string" }, "role": { "type": "string", "enum": [ "system", "user", "assistant", "tool" ] }, "parts": { "type": "array", "items": { "$ref": "#/components/schemas/MessagePart" } }, "metadata": { "type": "object", "additionalProperties": true }, "replacesMessageId": { "type": "string", "description": "ID of the prior message this message replaces." }, "replacedByMessageId": { "type": "string", "description": "ID of the replacement message that supersedes this message." }, "synthetic": { "type": "boolean", "description": "Whether this message was generated internally rather than directly by the user or assistant." } }, "x-go-type": "message.UIMessage", "x-go-type-import": { "path": "github.com/obot-platform/discobot/agent-go/message", "name": "message" } }, "MessagePart": { "description": "Discriminated UIMessage part. Authoritative variants live in agent-go/message.", "oneOf": [ { "$ref": "#/components/schemas/TextMessagePart" }, { "$ref": "#/components/schemas/ReasoningMessagePart" }, { "$ref": "#/components/schemas/FileMessagePart" }, { "$ref": "#/components/schemas/SourceURLMessagePart" }, { "$ref": "#/components/schemas/SourceDocumentMessagePart" }, { "$ref": "#/components/schemas/StepStartMessagePart" }, { "$ref": "#/components/schemas/DynamicToolMessagePart" }, { "$ref": "#/components/schemas/DataMessagePart" } ], "discriminator": { "propertyName": "type" }, "x-go-type": "message.UIPart", "x-go-type-import": { "path": "github.com/obot-platform/discobot/agent-go/message", "name": "message" } }, "TextMessagePart": { "type": "object", "description": "Text UIMessage part.", "properties": { "type": { "type": "string", "enum": [ "text" ] }, "text": { "type": "string" }, "state": { "type": "string" }, "providerMetadata": { "type": "object", "additionalProperties": true } }, "required": [ "type", "text" ] }, "ReasoningMessagePart": { "type": "object", "description": "Reasoning UIMessage part.", "properties": { "type": { "type": "string", "enum": [ "reasoning" ] }, "text": { "type": "string" }, "state": { "type": "string" }, "providerMetadata": { "type": "object", "additionalProperties": true } }, "required": [ "type", "text" ] }, "FileMessagePart": { "type": "object", "description": "File UIMessage part.", "properties": { "type": { "type": "string", "enum": [ "file" ] }, "url": { "type": "string" }, "mediaType": { "type": "string" }, "filename": { "type": "string" }, "providerMetadata": { "type": "object", "additionalProperties": true } }, "required": [ "type", "url", "mediaType" ] }, "SourceURLMessagePart": { "type": "object", "description": "URL source UIMessage part.", "properties": { "type": { "type": "string", "enum": [ "source-url" ] }, "sourceId": { "type": "string" }, "url": { "type": "string" }, "title": { "type": "string" }, "providerMetadata": { "type": "object", "additionalProperties": true } }, "required": [ "type", "sourceId", "url" ] }, "SourceDocumentMessagePart": { "type": "object", "description": "Document source UIMessage part.", "properties": { "type": { "type": "string", "enum": [ "source-document" ] }, "sourceId": { "type": "string" }, "mediaType": { "type": "string" }, "title": { "type": "string" }, "filename": { "type": "string" }, "providerMetadata": { "type": "object", "additionalProperties": true } }, "required": [ "type", "sourceId", "mediaType", "title" ] }, "StepStartMessagePart": { "type": "object", "description": "Step boundary UIMessage part.", "properties": { "type": { "type": "string", "enum": [ "step-start" ] } }, "required": [ "type" ] }, "DataMessagePart": { "type": "object", "description": "Custom data UIMessage part with type data-*.", "properties": { "type": { "type": "string", "pattern": "^data-" }, "id": { "type": "string" }, "data": {} }, "required": [ "type" ] }, "DynamicToolMessagePart": { "type": "object", "description": "Dynamic tool UIMessage part.", "properties": { "type": { "type": "string", "enum": [ "dynamic-tool" ] }, "toolName": { "type": "string" }, "toolCallId": { "type": "string" }, "state": { "type": "string" }, "title": { "type": "string" }, "providerExecuted": { "type": "boolean" }, "input": {}, "output": {}, "errorText": { "type": "string" }, "approval": { "$ref": "#/components/schemas/ToolApproval" }, "preliminary": { "type": "boolean" }, "callProviderMetadata": { "type": "object", "additionalProperties": true } }, "required": [ "type", "toolName", "toolCallId", "state" ] }, "ToolApproval": { "type": "object", "description": "Tool approval request/response metadata.", "properties": { "id": { "type": "string" }, "approved": { "type": "boolean" }, "reason": { "type": "string" } }, "required": [ "id" ] }, "WorkspaceFileEntry": { "description": "Workspace file-system entry from the session file watcher.", "type": "object", "required": [ "path", "isDir", "size", "mode", "modTime" ], "properties": { "path": { "type": "string" }, "isDir": { "type": "boolean" }, "size": { "type": "integer", "format": "int64" }, "mode": { "type": "integer" }, "modTime": { "type": "string", "format": "date-time" } } }, "WorkspaceFileChange": { "description": "One authoritative workspace file-system change.", "type": "object", "required": [ "kind", "path" ], "properties": { "kind": { "type": "string", "enum": [ "created", "modified", "deleted" ] }, "path": { "type": "string" }, "entry": { "$ref": "#/components/schemas/WorkspaceFileEntry" } } }, "WorkspaceFileError": { "description": "Workspace file watcher error details.", "type": "object", "required": [ "message" ], "properties": { "message": { "type": "string" } } }, "WorkspaceFilesEventData": { "description": "Payload for data-workspace-files chat stream chunks.", "type": "object", "required": [ "root", "changes" ], "properties": { "root": { "type": "string" }, "changes": { "type": "array", "items": { "$ref": "#/components/schemas/WorkspaceFileChange" } }, "resync": { "type": "boolean" }, "snapshot": { "type": "array", "items": { "$ref": "#/components/schemas/WorkspaceFileEntry" } }, "error": { "$ref": "#/components/schemas/WorkspaceFileError" } } }, "WorkspaceFilesChunk": { "description": "Out-of-band chat stream chunk carrying workspace file watcher events.", "type": "object", "required": [ "type", "data" ], "properties": { "type": { "type": "string", "enum": [ "data-workspace-files" ] }, "id": { "type": "string" }, "data": { "$ref": "#/components/schemas/WorkspaceFilesEventData" }, "transient": { "type": "boolean" } }, "additionalProperties": false }, "MessageChunk": { "description": "Discobot stream chunk. Authoritative Go type and discriminator handling: agent-go/message.MessageChunk.", "type": "object", "required": [ "type" ], "properties": { "type": { "type": "string" } }, "discriminator": { "propertyName": "type" }, "additionalProperties": true, "x-go-type": "message.MessageChunk", "x-go-type-import": { "path": "github.com/obot-platform/discobot/agent-go/message", "name": "message" } }, "WorkspaceChangeCommit": { "type": "object", "required": [ "createdAt", "hash", "diffstat" ], "properties": { "createdAt": { "type": "string", "format": "date-time" }, "hash": { "type": "string" }, "diffstat": { "$ref": "#/components/schemas/WorkspaceChangeCommitDiffStat" } } }, "WorkspaceChangeCommitsResponse": { "type": "object", "required": [ "commits" ], "properties": { "commits": { "type": "array", "items": { "$ref": "#/components/schemas/WorkspaceChangeCommit" } } } }, "WorkspaceChangeCommitDiffStat": { "type": "object", "required": [ "filesChanged", "additions", "deletions" ], "properties": { "filesChanged": { "type": "integer", "format": "int32" }, "additions": { "type": "integer", "format": "int32" }, "deletions": { "type": "integer", "format": "int32" } } }, "PortEntry": { "type": "object", "additionalProperties": false, "required": [ "localAddress", "port", "protocol", "pid" ], "properties": { "localAddress": { "type": "string" }, "port": { "type": "integer" }, "process": { "type": "string" }, "pid": { "type": "integer" }, "fd": { "type": "integer" }, "protocol": { "type": "string", "enum": [ "http", "https", "unknown" ], "description": "Detected application protocol for the listening port." } }, "description": "TCP listening socket visible to the sandbox agent user." }, "ListPortsResponse": { "type": "object", "additionalProperties": false, "required": [ "ports" ], "properties": { "ports": { "type": "array", "items": { "$ref": "#/components/schemas/PortEntry" } } }, "description": "Ports Response payload returned by the API." }, "SessionStreamSubscriptionOptions": { "description": "Session state stream subscription options. Subscribes to the session stream forwarded from the sandbox agent through the project websocket.", "type": "object", "properties": { "sessionId": { "type": "string", "description": "Session identifier to watch." } }, "required": [ "sessionId" ] }, "SessionStreamEventName": { "type": "string", "description": "Session stream event name forwarded over the project websocket. History framing brackets an atomic snapshot replay; subsequent events are live deltas/snapshots.", "enum": [ "history-start", "history-end", "session_updated", "threads_updated", "files_updated", "commands_updated", "hooks_updated", "services_updated", "diff_status_updated", "diff_updated" ] }, "SessionStreamMessage": { "description": "Session websocket stream message envelope. Delivered when subscribed to stream=session on the project websocket.", "type": "object", "properties": { "stream": { "type": "string", "enum": [ "session" ], "x-go-type-skip-optional-pointer": true }, "sessionId": { "type": "string", "x-go-type-skip-optional-pointer": true }, "event": { "x-go-type-skip-optional-pointer": true, "allOf": [ { "$ref": "#/components/schemas/SessionStreamEventName" } ] }, "data": { "description": "Structured payload for the session stream event. history-start and history-end omit data; resource events use the corresponding session resource response.", "oneOf": [ { "$ref": "#/components/schemas/Session" }, { "$ref": "#/components/schemas/ThreadsResponse" }, { "$ref": "#/components/schemas/FileListResponse" }, { "$ref": "#/components/schemas/CommandsResponse" }, { "$ref": "#/components/schemas/HooksStateResponse" }, { "$ref": "#/components/schemas/ServicesResponse" }, { "$ref": "#/components/schemas/DiffResponse" } ], "x-go-type": "json.RawMessage", "x-go-type-skip-optional-pointer": true }, "id": { "type": "string", "x-go-type-skip-optional-pointer": true }, "type": { "type": "string", "enum": [ "event" ], "x-go-type-skip-optional-pointer": true } }, "required": [ "type", "stream", "sessionId", "event" ], "x-discobot-discriminator": { "type": "event" } } } } }