From b0017bf1b96ef14fc1ecf91c0b9c4b18e2dfea71 Mon Sep 17 00:00:00 2001 From: James Long Date: Wed, 25 Mar 2026 10:47:40 -0400 Subject: feat(core): initial implementation of syncing (#17814) --- packages/sdk/js/src/v2/gen/sdk.gen.ts | 20 + packages/sdk/js/src/v2/gen/types.gen.ts | 1401 ++++++------ packages/sdk/openapi.json | 3593 +++++++++++++++++-------------- 3 files changed, 2755 insertions(+), 2259 deletions(-) (limited to 'packages/sdk') diff --git a/packages/sdk/js/src/v2/gen/sdk.gen.ts b/packages/sdk/js/src/v2/gen/sdk.gen.ts index 7a4f4e40c..410906844 100644 --- a/packages/sdk/js/src/v2/gen/sdk.gen.ts +++ b/packages/sdk/js/src/v2/gen/sdk.gen.ts @@ -46,6 +46,7 @@ import type { GlobalDisposeResponses, GlobalEventResponses, GlobalHealthResponses, + GlobalSyncEventSubscribeResponses, GlobalUpgradeErrors, GlobalUpgradeResponses, InstanceDisposeResponses, @@ -230,6 +231,20 @@ class HeyApiRegistry { } } +export class SyncEvent extends HeyApiClient { + /** + * Subscribe to global sync events + * + * Get global sync events + */ + public subscribe(options?: Options) { + return (options?.client ?? this.client).sse.get({ + url: "/global/sync-event", + ...options, + }) + } +} + export class Config extends HeyApiClient { /** * Get global configuration @@ -329,6 +344,11 @@ export class Global extends HeyApiClient { }) } + private _syncEvent?: SyncEvent + get syncEvent(): SyncEvent { + return (this._syncEvent ??= new SyncEvent({ client: this.client })) + } + private _config?: Config get config(): Config { return (this._config ??= new Config({ client: this.client })) diff --git a/packages/sdk/js/src/v2/gen/types.gen.ts b/packages/sdk/js/src/v2/gen/types.gen.ts index 86a0c7e42..43ce02921 100644 --- a/packages/sdk/js/src/v2/gen/types.gen.ts +++ b/packages/sdk/js/src/v2/gen/types.gen.ts @@ -83,715 +83,816 @@ export type EventLspUpdated = { } } -export type EventFileEdited = { - type: "file.edited" +export type EventMessagePartDelta = { + type: "message.part.delta" properties: { - file: string + sessionID: string + messageID: string + partID: string + field: string + delta: string } } -export type OutputFormatText = { - type: "text" -} - -export type JsonSchema = { - [key: string]: unknown -} - -export type OutputFormatJsonSchema = { - type: "json_schema" - schema: JsonSchema - retryCount?: number -} - -export type OutputFormat = OutputFormatText | OutputFormatJsonSchema - -export type FileDiff = { - file: string - before: string - after: string - additions: number - deletions: number - status?: "added" | "deleted" | "modified" -} - -export type UserMessage = { +export type PermissionRequest = { id: string sessionID: string - role: "user" - time: { - created: number - } - format?: OutputFormat - summary?: { - title?: string - body?: string - diffs: Array - } - agent: string - model: { - providerID: string - modelID: string + permission: string + patterns: Array + metadata: { + [key: string]: unknown } - system?: string - tools?: { - [key: string]: boolean + always: Array + tool?: { + messageID: string + callID: string } - variant?: string } -export type ProviderAuthError = { - name: "ProviderAuthError" - data: { - providerID: string - message: string - } +export type EventPermissionAsked = { + type: "permission.asked" + properties: PermissionRequest } -export type UnknownError = { - name: "UnknownError" - data: { - message: string +export type EventPermissionReplied = { + type: "permission.replied" + properties: { + sessionID: string + requestID: string + reply: "once" | "always" | "reject" } } -export type MessageOutputLengthError = { - name: "MessageOutputLengthError" - data: { - [key: string]: unknown - } -} +export type SessionStatus = + | { + type: "idle" + } + | { + type: "retry" + attempt: number + message: string + next: number + } + | { + type: "busy" + } -export type MessageAbortedError = { - name: "MessageAbortedError" - data: { - message: string +export type EventSessionStatus = { + type: "session.status" + properties: { + sessionID: string + status: SessionStatus } } -export type StructuredOutputError = { - name: "StructuredOutputError" - data: { - message: string - retries: number +export type EventSessionIdle = { + type: "session.idle" + properties: { + sessionID: string } } -export type ContextOverflowError = { - name: "ContextOverflowError" - data: { - message: string - responseBody?: string - } +export type QuestionOption = { + /** + * Display text (1-5 words, concise) + */ + label: string + /** + * Explanation of choice + */ + description: string } -export type ApiError = { - name: "APIError" - data: { - message: string - statusCode?: number - isRetryable: boolean - responseHeaders?: { - [key: string]: string - } - responseBody?: string - metadata?: { - [key: string]: string - } - } +export type QuestionInfo = { + /** + * Complete question + */ + question: string + /** + * Very short label (max 30 chars) + */ + header: string + /** + * Available choices + */ + options: Array + /** + * Allow selecting multiple choices + */ + multiple?: boolean + /** + * Allow typing a custom answer (default: true) + */ + custom?: boolean } -export type AssistantMessage = { +export type QuestionRequest = { id: string sessionID: string - role: "assistant" - time: { - created: number - completed?: number - } - error?: - | ProviderAuthError - | UnknownError - | MessageOutputLengthError - | MessageAbortedError - | StructuredOutputError - | ContextOverflowError - | ApiError - parentID: string - modelID: string - providerID: string - mode: string - agent: string - path: { - cwd: string - root: string - } - summary?: boolean - cost: number - tokens: { - total?: number - input: number - output: number - reasoning: number - cache: { - read: number - write: number - } + /** + * Questions to ask + */ + questions: Array + tool?: { + messageID: string + callID: string } - structured?: unknown - variant?: string - finish?: string } -export type Message = UserMessage | AssistantMessage +export type EventQuestionAsked = { + type: "question.asked" + properties: QuestionRequest +} -export type EventMessageUpdated = { - type: "message.updated" +export type QuestionAnswer = Array + +export type EventQuestionReplied = { + type: "question.replied" properties: { - info: Message + sessionID: string + requestID: string + answers: Array } } -export type EventMessageRemoved = { - type: "message.removed" +export type EventQuestionRejected = { + type: "question.rejected" properties: { sessionID: string - messageID: string + requestID: string } } -export type TextPart = { - id: string - sessionID: string - messageID: string - type: "text" - text: string - synthetic?: boolean - ignored?: boolean - time?: { - start: number - end?: number - } - metadata?: { - [key: string]: unknown +export type EventSessionCompacted = { + type: "session.compacted" + properties: { + sessionID: string } } -export type SubtaskPart = { - id: string - sessionID: string - messageID: string - type: "subtask" - prompt: string - description: string - agent: string - model?: { - providerID: string - modelID: string +export type EventFileEdited = { + type: "file.edited" + properties: { + file: string } - command?: string } -export type ReasoningPart = { - id: string - sessionID: string - messageID: string - type: "reasoning" - text: string - metadata?: { - [key: string]: unknown - } - time: { - start: number - end?: number +export type EventFileWatcherUpdated = { + type: "file.watcher.updated" + properties: { + file: string + event: "add" | "change" | "unlink" } } -export type FilePartSourceText = { - value: string - start: number - end: number +export type Todo = { + /** + * Brief description of the task + */ + content: string + /** + * Current status of the task: pending, in_progress, completed, cancelled + */ + status: string + /** + * Priority level of the task: high, medium, low + */ + priority: string } -export type FileSource = { - text: FilePartSourceText - type: "file" - path: string +export type EventTodoUpdated = { + type: "todo.updated" + properties: { + sessionID: string + todos: Array + } } -export type Range = { - start: { - line: number - character: number - } - end: { - line: number - character: number +export type EventTuiPromptAppend = { + type: "tui.prompt.append" + properties: { + text: string } } -export type SymbolSource = { - text: FilePartSourceText - type: "symbol" - path: string - range: Range - name: string - kind: number +export type EventTuiCommandExecute = { + type: "tui.command.execute" + properties: { + command: + | "session.list" + | "session.new" + | "session.share" + | "session.interrupt" + | "session.compact" + | "session.page.up" + | "session.page.down" + | "session.line.up" + | "session.line.down" + | "session.half.page.up" + | "session.half.page.down" + | "session.first" + | "session.last" + | "prompt.clear" + | "prompt.submit" + | "agent.cycle" + | string + } } -export type ResourceSource = { - text: FilePartSourceText - type: "resource" - clientName: string - uri: string +export type EventTuiToastShow = { + type: "tui.toast.show" + properties: { + title?: string + message: string + variant: "info" | "success" | "warning" | "error" + /** + * Duration in milliseconds + */ + duration?: number + } } -export type FilePartSource = FileSource | SymbolSource | ResourceSource - -export type FilePart = { - id: string - sessionID: string - messageID: string - type: "file" - mime: string - filename?: string - url: string - source?: FilePartSource +export type EventTuiSessionSelect = { + type: "tui.session.select" + properties: { + /** + * Session ID to navigate to + */ + sessionID: string + } } -export type ToolStatePending = { - status: "pending" - input: { - [key: string]: unknown +export type EventMcpToolsChanged = { + type: "mcp.tools.changed" + properties: { + server: string } - raw: string } -export type ToolStateRunning = { - status: "running" - input: { - [key: string]: unknown - } - title?: string - metadata?: { - [key: string]: unknown - } - time: { - start: number +export type EventMcpBrowserOpenFailed = { + type: "mcp.browser.open.failed" + properties: { + mcpName: string + url: string } } -export type ToolStateCompleted = { - status: "completed" - input: { - [key: string]: unknown +export type EventCommandExecuted = { + type: "command.executed" + properties: { + name: string + sessionID: string + arguments: string + messageID: string } - output: string - title: string - metadata: { - [key: string]: unknown +} + +export type FileDiff = { + file: string + before: string + after: string + additions: number + deletions: number + status?: "added" | "deleted" | "modified" +} + +export type EventSessionDiff = { + type: "session.diff" + properties: { + sessionID: string + diff: Array } - time: { - start: number - end: number - compacted?: number +} + +export type ProviderAuthError = { + name: "ProviderAuthError" + data: { + providerID: string + message: string } - attachments?: Array } -export type ToolStateError = { - status: "error" - input: { - [key: string]: unknown +export type UnknownError = { + name: "UnknownError" + data: { + message: string } - error: string - metadata?: { +} + +export type MessageOutputLengthError = { + name: "MessageOutputLengthError" + data: { [key: string]: unknown } - time: { - start: number - end: number - } } -export type ToolState = ToolStatePending | ToolStateRunning | ToolStateCompleted | ToolStateError +export type MessageAbortedError = { + name: "MessageAbortedError" + data: { + message: string + } +} -export type ToolPart = { - id: string - sessionID: string - messageID: string - type: "tool" - callID: string - tool: string - state: ToolState - metadata?: { - [key: string]: unknown +export type StructuredOutputError = { + name: "StructuredOutputError" + data: { + message: string + retries: number } } -export type StepStartPart = { - id: string - sessionID: string - messageID: string - type: "step-start" - snapshot?: string +export type ContextOverflowError = { + name: "ContextOverflowError" + data: { + message: string + responseBody?: string + } } -export type StepFinishPart = { - id: string - sessionID: string - messageID: string - type: "step-finish" - reason: string - snapshot?: string - cost: number - tokens: { - total?: number - input: number - output: number - reasoning: number - cache: { - read: number - write: number +export type ApiError = { + name: "APIError" + data: { + message: string + statusCode?: number + isRetryable: boolean + responseHeaders?: { + [key: string]: string + } + responseBody?: string + metadata?: { + [key: string]: string } } } -export type SnapshotPart = { - id: string - sessionID: string - messageID: string - type: "snapshot" - snapshot: string +export type EventSessionError = { + type: "session.error" + properties: { + sessionID?: string + error?: + | ProviderAuthError + | UnknownError + | MessageOutputLengthError + | MessageAbortedError + | StructuredOutputError + | ContextOverflowError + | ApiError + } } -export type PatchPart = { - id: string - sessionID: string - messageID: string - type: "patch" - hash: string - files: Array +export type EventVcsBranchUpdated = { + type: "vcs.branch.updated" + properties: { + branch?: string + } } -export type AgentPart = { - id: string - sessionID: string - messageID: string - type: "agent" - name: string - source?: { - value: string - start: number - end: number +export type EventWorkspaceReady = { + type: "workspace.ready" + properties: { + name: string } } -export type RetryPart = { - id: string - sessionID: string - messageID: string - type: "retry" - attempt: number - error: ApiError - time: { - created: number +export type EventWorkspaceFailed = { + type: "workspace.failed" + properties: { + message: string } } -export type CompactionPart = { +export type Pty = { id: string - sessionID: string - messageID: string - type: "compaction" - auto: boolean - overflow?: boolean + title: string + command: string + args: Array + cwd: string + status: "running" | "exited" + pid: number } -export type Part = - | TextPart - | SubtaskPart - | ReasoningPart - | FilePart - | ToolPart - | StepStartPart - | StepFinishPart - | SnapshotPart - | PatchPart - | AgentPart - | RetryPart - | CompactionPart - -export type EventMessagePartUpdated = { - type: "message.part.updated" +export type EventPtyCreated = { + type: "pty.created" properties: { - part: Part + info: Pty } } -export type EventMessagePartDelta = { - type: "message.part.delta" +export type EventPtyUpdated = { + type: "pty.updated" properties: { - sessionID: string - messageID: string - partID: string - field: string - delta: string + info: Pty } } -export type EventMessagePartRemoved = { - type: "message.part.removed" +export type EventPtyExited = { + type: "pty.exited" properties: { - sessionID: string - messageID: string - partID: string + id: string + exitCode: number } } -export type PermissionRequest = { - id: string - sessionID: string - permission: string - patterns: Array - metadata: { - [key: string]: unknown - } - always: Array - tool?: { - messageID: string - callID: string +export type EventPtyDeleted = { + type: "pty.deleted" + properties: { + id: string } } -export type EventPermissionAsked = { - type: "permission.asked" - properties: PermissionRequest -} - -export type EventPermissionReplied = { - type: "permission.replied" +export type EventWorktreeReady = { + type: "worktree.ready" properties: { - sessionID: string - requestID: string - reply: "once" | "always" | "reject" + name: string + branch: string } } -export type SessionStatus = - | { - type: "idle" - } - | { - type: "retry" - attempt: number - message: string - next: number - } - | { - type: "busy" - } - -export type EventSessionStatus = { - type: "session.status" +export type EventWorktreeFailed = { + type: "worktree.failed" properties: { - sessionID: string - status: SessionStatus + message: string } } -export type EventSessionIdle = { - type: "session.idle" - properties: { - sessionID: string - } +export type OutputFormatText = { + type: "text" } -export type QuestionOption = { - /** - * Display text (1-5 words, concise) - */ - label: string - /** - * Explanation of choice - */ - description: string +export type JsonSchema = { + [key: string]: unknown } -export type QuestionInfo = { - /** - * Complete question - */ - question: string - /** - * Very short label (max 30 chars) - */ - header: string - /** - * Available choices - */ - options: Array - /** - * Allow selecting multiple choices - */ - multiple?: boolean - /** - * Allow typing a custom answer (default: true) - */ - custom?: boolean +export type OutputFormatJsonSchema = { + type: "json_schema" + schema: JsonSchema + retryCount?: number } -export type QuestionRequest = { +export type OutputFormat = OutputFormatText | OutputFormatJsonSchema + +export type UserMessage = { id: string sessionID: string - /** - * Questions to ask - */ - questions: Array - tool?: { - messageID: string - callID: string + role: "user" + time: { + created: number } -} - -export type EventQuestionAsked = { - type: "question.asked" - properties: QuestionRequest -} - -export type QuestionAnswer = Array - -export type EventQuestionReplied = { - type: "question.replied" - properties: { - sessionID: string - requestID: string - answers: Array + format?: OutputFormat + summary?: { + title?: string + body?: string + diffs: Array + } + agent: string + model: { + providerID: string + modelID: string + } + system?: string + tools?: { + [key: string]: boolean } + variant?: string } -export type EventQuestionRejected = { - type: "question.rejected" +export type AssistantMessage = { + id: string + sessionID: string + role: "assistant" + time: { + created: number + completed?: number + } + error?: + | ProviderAuthError + | UnknownError + | MessageOutputLengthError + | MessageAbortedError + | StructuredOutputError + | ContextOverflowError + | ApiError + parentID: string + modelID: string + providerID: string + mode: string + agent: string + path: { + cwd: string + root: string + } + summary?: boolean + cost: number + tokens: { + total?: number + input: number + output: number + reasoning: number + cache: { + read: number + write: number + } + } + structured?: unknown + variant?: string + finish?: string +} + +export type Message = UserMessage | AssistantMessage + +export type EventMessageUpdated = { + type: "message.updated" properties: { sessionID: string - requestID: string + info: Message } } -export type EventSessionCompacted = { - type: "session.compacted" +export type EventMessageRemoved = { + type: "message.removed" properties: { sessionID: string + messageID: string } } -export type EventFileWatcherUpdated = { - type: "file.watcher.updated" - properties: { - file: string - event: "add" | "change" | "unlink" +export type TextPart = { + id: string + sessionID: string + messageID: string + type: "text" + text: string + synthetic?: boolean + ignored?: boolean + time?: { + start: number + end?: number + } + metadata?: { + [key: string]: unknown } } -export type Todo = { - /** - * Brief description of the task - */ - content: string - /** - * Current status of the task: pending, in_progress, completed, cancelled - */ - status: string - /** - * Priority level of the task: high, medium, low - */ - priority: string +export type SubtaskPart = { + id: string + sessionID: string + messageID: string + type: "subtask" + prompt: string + description: string + agent: string + model?: { + providerID: string + modelID: string + } + command?: string } -export type EventTodoUpdated = { - type: "todo.updated" - properties: { - sessionID: string - todos: Array +export type ReasoningPart = { + id: string + sessionID: string + messageID: string + type: "reasoning" + text: string + metadata?: { + [key: string]: unknown + } + time: { + start: number + end?: number } } -export type EventTuiPromptAppend = { - type: "tui.prompt.append" - properties: { - text: string +export type FilePartSourceText = { + value: string + start: number + end: number +} + +export type FileSource = { + text: FilePartSourceText + type: "file" + path: string +} + +export type Range = { + start: { + line: number + character: number + } + end: { + line: number + character: number } } -export type EventTuiCommandExecute = { - type: "tui.command.execute" - properties: { - command: - | "session.list" - | "session.new" - | "session.share" - | "session.interrupt" - | "session.compact" - | "session.page.up" - | "session.page.down" - | "session.line.up" - | "session.line.down" - | "session.half.page.up" - | "session.half.page.down" - | "session.first" - | "session.last" - | "prompt.clear" - | "prompt.submit" - | "agent.cycle" - | string +export type SymbolSource = { + text: FilePartSourceText + type: "symbol" + path: string + range: Range + name: string + kind: number +} + +export type ResourceSource = { + text: FilePartSourceText + type: "resource" + clientName: string + uri: string +} + +export type FilePartSource = FileSource | SymbolSource | ResourceSource + +export type FilePart = { + id: string + sessionID: string + messageID: string + type: "file" + mime: string + filename?: string + url: string + source?: FilePartSource +} + +export type ToolStatePending = { + status: "pending" + input: { + [key: string]: unknown + } + raw: string +} + +export type ToolStateRunning = { + status: "running" + input: { + [key: string]: unknown + } + title?: string + metadata?: { + [key: string]: unknown + } + time: { + start: number + } +} + +export type ToolStateCompleted = { + status: "completed" + input: { + [key: string]: unknown + } + output: string + title: string + metadata: { + [key: string]: unknown } + time: { + start: number + end: number + compacted?: number + } + attachments?: Array +} + +export type ToolStateError = { + status: "error" + input: { + [key: string]: unknown + } + error: string + metadata?: { + [key: string]: unknown + } + time: { + start: number + end: number + } +} + +export type ToolState = ToolStatePending | ToolStateRunning | ToolStateCompleted | ToolStateError + +export type ToolPart = { + id: string + sessionID: string + messageID: string + type: "tool" + callID: string + tool: string + state: ToolState + metadata?: { + [key: string]: unknown + } +} + +export type StepStartPart = { + id: string + sessionID: string + messageID: string + type: "step-start" + snapshot?: string +} + +export type StepFinishPart = { + id: string + sessionID: string + messageID: string + type: "step-finish" + reason: string + snapshot?: string + cost: number + tokens: { + total?: number + input: number + output: number + reasoning: number + cache: { + read: number + write: number + } + } +} + +export type SnapshotPart = { + id: string + sessionID: string + messageID: string + type: "snapshot" + snapshot: string +} + +export type PatchPart = { + id: string + sessionID: string + messageID: string + type: "patch" + hash: string + files: Array } -export type EventTuiToastShow = { - type: "tui.toast.show" - properties: { - title?: string - message: string - variant: "info" | "success" | "warning" | "error" - /** - * Duration in milliseconds - */ - duration?: number +export type AgentPart = { + id: string + sessionID: string + messageID: string + type: "agent" + name: string + source?: { + value: string + start: number + end: number } } -export type EventTuiSessionSelect = { - type: "tui.session.select" - properties: { - /** - * Session ID to navigate to - */ - sessionID: string +export type RetryPart = { + id: string + sessionID: string + messageID: string + type: "retry" + attempt: number + error: ApiError + time: { + created: number } } -export type EventMcpToolsChanged = { - type: "mcp.tools.changed" - properties: { - server: string - } +export type CompactionPart = { + id: string + sessionID: string + messageID: string + type: "compaction" + auto: boolean + overflow?: boolean } -export type EventMcpBrowserOpenFailed = { - type: "mcp.browser.open.failed" +export type Part = + | TextPart + | SubtaskPart + | ReasoningPart + | FilePart + | ToolPart + | StepStartPart + | StepFinishPart + | SnapshotPart + | PatchPart + | AgentPart + | RetryPart + | CompactionPart + +export type EventMessagePartUpdated = { + type: "message.part.updated" properties: { - mcpName: string - url: string + sessionID: string + part: Part + time: number } } -export type EventCommandExecuted = { - type: "command.executed" +export type EventMessagePartRemoved = { + type: "message.part.removed" properties: { - name: string sessionID: string - arguments: string messageID: string + partID: string } } @@ -841,6 +942,7 @@ export type Session = { export type EventSessionCreated = { type: "session.created" properties: { + sessionID: string info: Session } } @@ -848,112 +950,16 @@ export type EventSessionCreated = { export type EventSessionUpdated = { type: "session.updated" properties: { + sessionID: string info: Session } } export type EventSessionDeleted = { type: "session.deleted" - properties: { - info: Session - } -} - -export type EventSessionDiff = { - type: "session.diff" properties: { sessionID: string - diff: Array - } -} - -export type EventSessionError = { - type: "session.error" - properties: { - sessionID?: string - error?: - | ProviderAuthError - | UnknownError - | MessageOutputLengthError - | MessageAbortedError - | StructuredOutputError - | ContextOverflowError - | ApiError - } -} - -export type EventVcsBranchUpdated = { - type: "vcs.branch.updated" - properties: { - branch?: string - } -} - -export type EventWorkspaceReady = { - type: "workspace.ready" - properties: { - name: string - } -} - -export type EventWorkspaceFailed = { - type: "workspace.failed" - properties: { - message: string - } -} - -export type Pty = { - id: string - title: string - command: string - args: Array - cwd: string - status: "running" | "exited" - pid: number -} - -export type EventPtyCreated = { - type: "pty.created" - properties: { - info: Pty - } -} - -export type EventPtyUpdated = { - type: "pty.updated" - properties: { - info: Pty - } -} - -export type EventPtyExited = { - type: "pty.exited" - properties: { - id: string - exitCode: number - } -} - -export type EventPtyDeleted = { - type: "pty.deleted" - properties: { - id: string - } -} - -export type EventWorktreeReady = { - type: "worktree.ready" - properties: { - name: string - branch: string - } -} - -export type EventWorktreeFailed = { - type: "worktree.failed" - properties: { - message: string + info: Session } } @@ -966,12 +972,7 @@ export type Event = | EventGlobalDisposed | EventLspClientDiagnostics | EventLspUpdated - | EventFileEdited - | EventMessageUpdated - | EventMessageRemoved - | EventMessagePartUpdated | EventMessagePartDelta - | EventMessagePartRemoved | EventPermissionAsked | EventPermissionReplied | EventSessionStatus @@ -980,6 +981,7 @@ export type Event = | EventQuestionReplied | EventQuestionRejected | EventSessionCompacted + | EventFileEdited | EventFileWatcherUpdated | EventTodoUpdated | EventTuiPromptAppend @@ -989,9 +991,6 @@ export type Event = | EventMcpToolsChanged | EventMcpBrowserOpenFailed | EventCommandExecuted - | EventSessionCreated - | EventSessionUpdated - | EventSessionDeleted | EventSessionDiff | EventSessionError | EventVcsBranchUpdated @@ -1003,12 +1002,119 @@ export type Event = | EventPtyDeleted | EventWorktreeReady | EventWorktreeFailed + | EventMessageUpdated + | EventMessageRemoved + | EventMessagePartUpdated + | EventMessagePartRemoved + | EventSessionCreated + | EventSessionUpdated + | EventSessionDeleted export type GlobalEvent = { directory: string payload: Event } +export type SyncEventMessageUpdated = { + type: "message.updated.1" + aggregate: "sessionID" + data: { + sessionID: string + info: Message + } +} + +export type SyncEventMessageRemoved = { + type: "message.removed.1" + aggregate: "sessionID" + data: { + sessionID: string + messageID: string + } +} + +export type SyncEventMessagePartUpdated = { + type: "message.part.updated.1" + aggregate: "sessionID" + data: { + sessionID: string + part: Part + time: number + } +} + +export type SyncEventMessagePartRemoved = { + type: "message.part.removed.1" + aggregate: "sessionID" + data: { + sessionID: string + messageID: string + partID: string + } +} + +export type SyncEventSessionCreated = { + type: "session.created.1" + aggregate: "sessionID" + data: { + sessionID: string + info: Session + } +} + +export type SyncEventSessionUpdated = { + type: "session.updated.1" + aggregate: "sessionID" + data: { + sessionID: string + info: { + id?: string + slug?: string + projectID?: string + workspaceID?: string + directory?: string + parentID?: string + summary?: { + additions: number + deletions: number + files: number + diffs?: Array + } + share?: { + url?: string + } + title?: string + version?: string + time?: { + created?: number + updated?: number + compacting?: number + archived?: number + } + permission?: PermissionRuleset + revert?: { + messageID: string + partID?: string + snapshot?: string + diff?: string + } + } + } +} + +export type SyncEventSessionDeleted = { + type: "session.deleted.1" + aggregate: "sessionID" + data: { + sessionID: string + info: Session + } +} + +export type SyncEvent = { + payload: SyncEvent +} + /** * Log level */ @@ -1973,6 +2079,23 @@ export type GlobalEventResponses = { export type GlobalEventResponse = GlobalEventResponses[keyof GlobalEventResponses] +export type GlobalSyncEventSubscribeData = { + body?: never + path?: never + query?: never + url: "/global/sync-event" +} + +export type GlobalSyncEventSubscribeResponses = { + /** + * Event stream + */ + 200: SyncEvent +} + +export type GlobalSyncEventSubscribeResponse = + GlobalSyncEventSubscribeResponses[keyof GlobalSyncEventSubscribeResponses] + export type GlobalConfigGetData = { body?: never path?: never diff --git a/packages/sdk/openapi.json b/packages/sdk/openapi.json index a66ef6364..053fc5b94 100644 --- a/packages/sdk/openapi.json +++ b/packages/sdk/openapi.json @@ -66,6 +66,31 @@ ] } }, + "/global/sync-event": { + "get": { + "operationId": "global.sync-event.subscribe", + "summary": "Subscribe to global sync events", + "description": "Get global sync events", + "responses": { + "200": { + "description": "Event stream", + "content": { + "text/event-stream": { + "schema": { + "$ref": "#/components/schemas/SyncEvent" + } + } + } + } + }, + "x-codeSamples": [ + { + "lang": "js", + "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.global.sync-event.subscribe({\n ...\n})" + } + ] + } + }, "/global/config": { "get": { "operationId": "global.config.get", @@ -7212,1678 +7237,1418 @@ }, "required": ["type", "properties"] }, - "Event.file.edited": { + "Event.message.part.delta": { "type": "object", "properties": { "type": { "type": "string", - "const": "file.edited" + "const": "message.part.delta" }, "properties": { "type": "object", "properties": { - "file": { + "sessionID": { + "type": "string", + "pattern": "^ses.*" + }, + "messageID": { + "type": "string", + "pattern": "^msg.*" + }, + "partID": { + "type": "string", + "pattern": "^prt.*" + }, + "field": { + "type": "string" + }, + "delta": { "type": "string" } }, - "required": ["file"] + "required": ["sessionID", "messageID", "partID", "field", "delta"] } }, "required": ["type", "properties"] }, - "OutputFormatText": { - "type": "object", - "properties": { - "type": { - "type": "string", - "const": "text" - } - }, - "required": ["type"] - }, - "JSONSchema": { - "type": "object", - "propertyNames": { - "type": "string" - }, - "additionalProperties": {} - }, - "OutputFormatJsonSchema": { + "PermissionRequest": { "type": "object", "properties": { - "type": { + "id": { "type": "string", - "const": "json_schema" - }, - "schema": { - "$ref": "#/components/schemas/JSONSchema" - }, - "retryCount": { - "default": 2, - "type": "integer", - "minimum": 0, - "maximum": 9007199254740991 - } - }, - "required": ["type", "schema"] - }, - "OutputFormat": { - "anyOf": [ - { - "$ref": "#/components/schemas/OutputFormatText" + "pattern": "^per.*" }, - { - "$ref": "#/components/schemas/OutputFormatJsonSchema" - } - ] - }, - "FileDiff": { - "type": "object", - "properties": { - "file": { - "type": "string" + "sessionID": { + "type": "string", + "pattern": "^ses.*" }, - "before": { + "permission": { "type": "string" }, - "after": { - "type": "string" + "patterns": { + "type": "array", + "items": { + "type": "string" + } }, - "additions": { - "type": "number" + "metadata": { + "type": "object", + "propertyNames": { + "type": "string" + }, + "additionalProperties": {} }, - "deletions": { - "type": "number" + "always": { + "type": "array", + "items": { + "type": "string" + } }, - "status": { - "type": "string", - "enum": ["added", "deleted", "modified"] + "tool": { + "type": "object", + "properties": { + "messageID": { + "type": "string", + "pattern": "^msg.*" + }, + "callID": { + "type": "string" + } + }, + "required": ["messageID", "callID"] } }, - "required": ["file", "before", "after", "additions", "deletions"] + "required": ["id", "sessionID", "permission", "patterns", "metadata", "always"] }, - "UserMessage": { + "Event.permission.asked": { "type": "object", "properties": { - "id": { - "type": "string", - "pattern": "^msg.*" - }, - "sessionID": { + "type": { "type": "string", - "pattern": "^ses.*" + "const": "permission.asked" }, - "role": { + "properties": { + "$ref": "#/components/schemas/PermissionRequest" + } + }, + "required": ["type", "properties"] + }, + "Event.permission.replied": { + "type": "object", + "properties": { + "type": { "type": "string", - "const": "user" + "const": "permission.replied" }, - "time": { + "properties": { "type": "object", "properties": { - "created": { - "type": "number" + "sessionID": { + "type": "string", + "pattern": "^ses.*" + }, + "requestID": { + "type": "string", + "pattern": "^per.*" + }, + "reply": { + "type": "string", + "enum": ["once", "always", "reject"] } }, - "required": ["created"] - }, - "format": { - "$ref": "#/components/schemas/OutputFormat" - }, - "summary": { + "required": ["sessionID", "requestID", "reply"] + } + }, + "required": ["type", "properties"] + }, + "SessionStatus": { + "anyOf": [ + { "type": "object", "properties": { - "title": { - "type": "string" - }, - "body": { - "type": "string" - }, - "diffs": { - "type": "array", - "items": { - "$ref": "#/components/schemas/FileDiff" - } + "type": { + "type": "string", + "const": "idle" } }, - "required": ["diffs"] - }, - "agent": { - "type": "string" + "required": ["type"] }, - "model": { + { "type": "object", "properties": { - "providerID": { - "type": "string" + "type": { + "type": "string", + "const": "retry" }, - "modelID": { + "attempt": { + "type": "number" + }, + "message": { "type": "string" + }, + "next": { + "type": "number" } }, - "required": ["providerID", "modelID"] - }, - "system": { - "type": "string" + "required": ["type", "attempt", "message", "next"] }, - "tools": { + { "type": "object", - "propertyNames": { - "type": "string" + "properties": { + "type": { + "type": "string", + "const": "busy" + } }, - "additionalProperties": { - "type": "boolean" - } - }, - "variant": { - "type": "string" + "required": ["type"] } - }, - "required": ["id", "sessionID", "role", "time", "agent", "model"] + ] }, - "ProviderAuthError": { + "Event.session.status": { "type": "object", "properties": { - "name": { + "type": { "type": "string", - "const": "ProviderAuthError" + "const": "session.status" }, - "data": { + "properties": { "type": "object", "properties": { - "providerID": { - "type": "string" + "sessionID": { + "type": "string", + "pattern": "^ses.*" }, - "message": { - "type": "string" + "status": { + "$ref": "#/components/schemas/SessionStatus" } }, - "required": ["providerID", "message"] + "required": ["sessionID", "status"] } }, - "required": ["name", "data"] + "required": ["type", "properties"] }, - "UnknownError": { + "Event.session.idle": { "type": "object", "properties": { - "name": { + "type": { "type": "string", - "const": "UnknownError" + "const": "session.idle" }, - "data": { + "properties": { "type": "object", "properties": { - "message": { - "type": "string" + "sessionID": { + "type": "string", + "pattern": "^ses.*" } }, - "required": ["message"] + "required": ["sessionID"] } }, - "required": ["name", "data"] + "required": ["type", "properties"] }, - "MessageOutputLengthError": { + "QuestionOption": { "type": "object", "properties": { - "name": { - "type": "string", - "const": "MessageOutputLengthError" + "label": { + "description": "Display text (1-5 words, concise)", + "type": "string" }, - "data": { - "type": "object", - "properties": {} + "description": { + "description": "Explanation of choice", + "type": "string" } }, - "required": ["name", "data"] + "required": ["label", "description"] }, - "MessageAbortedError": { + "QuestionInfo": { "type": "object", "properties": { - "name": { + "question": { + "description": "Complete question", + "type": "string" + }, + "header": { + "description": "Very short label (max 30 chars)", + "type": "string" + }, + "options": { + "description": "Available choices", + "type": "array", + "items": { + "$ref": "#/components/schemas/QuestionOption" + } + }, + "multiple": { + "description": "Allow selecting multiple choices", + "type": "boolean" + }, + "custom": { + "description": "Allow typing a custom answer (default: true)", + "type": "boolean" + } + }, + "required": ["question", "header", "options"] + }, + "QuestionRequest": { + "type": "object", + "properties": { + "id": { "type": "string", - "const": "MessageAbortedError" + "pattern": "^que.*" }, - "data": { + "sessionID": { + "type": "string", + "pattern": "^ses.*" + }, + "questions": { + "description": "Questions to ask", + "type": "array", + "items": { + "$ref": "#/components/schemas/QuestionInfo" + } + }, + "tool": { "type": "object", "properties": { - "message": { + "messageID": { + "type": "string", + "pattern": "^msg.*" + }, + "callID": { "type": "string" } }, - "required": ["message"] + "required": ["messageID", "callID"] } }, - "required": ["name", "data"] + "required": ["id", "sessionID", "questions"] }, - "StructuredOutputError": { + "Event.question.asked": { "type": "object", "properties": { - "name": { + "type": { "type": "string", - "const": "StructuredOutputError" + "const": "question.asked" }, - "data": { + "properties": { + "$ref": "#/components/schemas/QuestionRequest" + } + }, + "required": ["type", "properties"] + }, + "QuestionAnswer": { + "type": "array", + "items": { + "type": "string" + } + }, + "Event.question.replied": { + "type": "object", + "properties": { + "type": { + "type": "string", + "const": "question.replied" + }, + "properties": { "type": "object", "properties": { - "message": { - "type": "string" + "sessionID": { + "type": "string", + "pattern": "^ses.*" }, - "retries": { - "type": "number" + "requestID": { + "type": "string", + "pattern": "^que.*" + }, + "answers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/QuestionAnswer" + } } }, - "required": ["message", "retries"] + "required": ["sessionID", "requestID", "answers"] } }, - "required": ["name", "data"] + "required": ["type", "properties"] }, - "ContextOverflowError": { + "Event.question.rejected": { "type": "object", "properties": { - "name": { + "type": { "type": "string", - "const": "ContextOverflowError" + "const": "question.rejected" }, - "data": { + "properties": { "type": "object", "properties": { - "message": { - "type": "string" + "sessionID": { + "type": "string", + "pattern": "^ses.*" }, - "responseBody": { - "type": "string" + "requestID": { + "type": "string", + "pattern": "^que.*" } }, - "required": ["message"] + "required": ["sessionID", "requestID"] } }, - "required": ["name", "data"] + "required": ["type", "properties"] }, - "APIError": { + "Event.session.compacted": { "type": "object", "properties": { - "name": { + "type": { "type": "string", - "const": "APIError" + "const": "session.compacted" }, - "data": { + "properties": { "type": "object", "properties": { - "message": { - "type": "string" - }, - "statusCode": { - "type": "number" - }, - "isRetryable": { - "type": "boolean" - }, - "responseHeaders": { - "type": "object", - "propertyNames": { - "type": "string" - }, - "additionalProperties": { - "type": "string" - } - }, - "responseBody": { - "type": "string" - }, - "metadata": { - "type": "object", - "propertyNames": { - "type": "string" - }, - "additionalProperties": { - "type": "string" - } + "sessionID": { + "type": "string", + "pattern": "^ses.*" } }, - "required": ["message", "isRetryable"] + "required": ["sessionID"] } }, - "required": ["name", "data"] + "required": ["type", "properties"] }, - "AssistantMessage": { + "Event.file.edited": { "type": "object", "properties": { - "id": { - "type": "string", - "pattern": "^msg.*" - }, - "sessionID": { - "type": "string", - "pattern": "^ses.*" - }, - "role": { + "type": { "type": "string", - "const": "assistant" + "const": "file.edited" }, - "time": { + "properties": { "type": "object", "properties": { - "created": { - "type": "number" - }, - "completed": { - "type": "number" + "file": { + "type": "string" } }, - "required": ["created"] + "required": ["file"] + } + }, + "required": ["type", "properties"] + }, + "Event.file.watcher.updated": { + "type": "object", + "properties": { + "type": { + "type": "string", + "const": "file.watcher.updated" }, - "error": { - "anyOf": [ - { - "$ref": "#/components/schemas/ProviderAuthError" - }, - { - "$ref": "#/components/schemas/UnknownError" - }, - { - "$ref": "#/components/schemas/MessageOutputLengthError" - }, - { - "$ref": "#/components/schemas/MessageAbortedError" - }, - { - "$ref": "#/components/schemas/StructuredOutputError" - }, - { - "$ref": "#/components/schemas/ContextOverflowError" - }, - { - "$ref": "#/components/schemas/APIError" - } - ] - }, - "parentID": { - "type": "string", - "pattern": "^msg.*" - }, - "modelID": { - "type": "string" - }, - "providerID": { - "type": "string" - }, - "mode": { - "type": "string" - }, - "agent": { - "type": "string" - }, - "path": { + "properties": { "type": "object", "properties": { - "cwd": { - "type": "string" - }, - "root": { + "file": { "type": "string" - } - }, - "required": ["cwd", "root"] - }, - "summary": { - "type": "boolean" - }, - "cost": { - "type": "number" - }, - "tokens": { - "type": "object", - "properties": { - "total": { - "type": "number" - }, - "input": { - "type": "number" - }, - "output": { - "type": "number" - }, - "reasoning": { - "type": "number" }, - "cache": { - "type": "object", - "properties": { - "read": { - "type": "number" + "event": { + "anyOf": [ + { + "type": "string", + "const": "add" }, - "write": { - "type": "number" + { + "type": "string", + "const": "change" + }, + { + "type": "string", + "const": "unlink" } - }, - "required": ["read", "write"] + ] } }, - "required": ["input", "output", "reasoning", "cache"] + "required": ["file", "event"] + } + }, + "required": ["type", "properties"] + }, + "Todo": { + "type": "object", + "properties": { + "content": { + "description": "Brief description of the task", + "type": "string" }, - "structured": {}, - "variant": { + "status": { + "description": "Current status of the task: pending, in_progress, completed, cancelled", "type": "string" }, - "finish": { + "priority": { + "description": "Priority level of the task: high, medium, low", "type": "string" } }, - "required": [ - "id", - "sessionID", - "role", - "time", - "parentID", - "modelID", - "providerID", - "mode", - "agent", - "path", - "cost", - "tokens" - ] - }, - "Message": { - "anyOf": [ - { - "$ref": "#/components/schemas/UserMessage" - }, - { - "$ref": "#/components/schemas/AssistantMessage" - } - ] + "required": ["content", "status", "priority"] }, - "Event.message.updated": { + "Event.todo.updated": { "type": "object", "properties": { "type": { "type": "string", - "const": "message.updated" + "const": "todo.updated" }, "properties": { "type": "object", "properties": { - "info": { - "$ref": "#/components/schemas/Message" + "sessionID": { + "type": "string", + "pattern": "^ses.*" + }, + "todos": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Todo" + } } }, - "required": ["info"] + "required": ["sessionID", "todos"] } }, "required": ["type", "properties"] }, - "Event.message.removed": { + "Event.tui.prompt.append": { "type": "object", "properties": { "type": { "type": "string", - "const": "message.removed" + "const": "tui.prompt.append" }, "properties": { "type": "object", "properties": { - "sessionID": { - "type": "string", - "pattern": "^ses.*" - }, - "messageID": { - "type": "string", - "pattern": "^msg.*" + "text": { + "type": "string" } }, - "required": ["sessionID", "messageID"] + "required": ["text"] } }, "required": ["type", "properties"] }, - "TextPart": { + "Event.tui.command.execute": { "type": "object", "properties": { - "id": { - "type": "string", - "pattern": "^prt.*" - }, - "sessionID": { - "type": "string", - "pattern": "^ses.*" - }, - "messageID": { - "type": "string", - "pattern": "^msg.*" - }, "type": { "type": "string", - "const": "text" - }, - "text": { - "type": "string" - }, - "synthetic": { - "type": "boolean" - }, - "ignored": { - "type": "boolean" + "const": "tui.command.execute" }, - "time": { + "properties": { "type": "object", "properties": { - "start": { - "type": "number" - }, - "end": { - "type": "number" + "command": { + "anyOf": [ + { + "type": "string", + "enum": [ + "session.list", + "session.new", + "session.share", + "session.interrupt", + "session.compact", + "session.page.up", + "session.page.down", + "session.line.up", + "session.line.down", + "session.half.page.up", + "session.half.page.down", + "session.first", + "session.last", + "prompt.clear", + "prompt.submit", + "agent.cycle" + ] + }, + { + "type": "string" + } + ] } }, - "required": ["start"] - }, - "metadata": { - "type": "object", - "propertyNames": { - "type": "string" - }, - "additionalProperties": {} + "required": ["command"] } }, - "required": ["id", "sessionID", "messageID", "type", "text"] + "required": ["type", "properties"] }, - "SubtaskPart": { + "Event.tui.toast.show": { "type": "object", "properties": { - "id": { - "type": "string", - "pattern": "^prt.*" - }, - "sessionID": { - "type": "string", - "pattern": "^ses.*" - }, - "messageID": { - "type": "string", - "pattern": "^msg.*" - }, "type": { "type": "string", - "const": "subtask" - }, - "prompt": { - "type": "string" - }, - "description": { - "type": "string" + "const": "tui.toast.show" }, - "agent": { - "type": "string" - }, - "model": { + "properties": { "type": "object", "properties": { - "providerID": { + "title": { "type": "string" }, - "modelID": { + "message": { "type": "string" + }, + "variant": { + "type": "string", + "enum": ["info", "success", "warning", "error"] + }, + "duration": { + "description": "Duration in milliseconds", + "default": 5000, + "type": "number" } }, - "required": ["providerID", "modelID"] - }, - "command": { - "type": "string" + "required": ["message", "variant"] } }, - "required": ["id", "sessionID", "messageID", "type", "prompt", "description", "agent"] + "required": ["type", "properties"] }, - "ReasoningPart": { + "Event.tui.session.select": { "type": "object", "properties": { - "id": { - "type": "string", - "pattern": "^prt.*" - }, - "sessionID": { - "type": "string", - "pattern": "^ses.*" - }, - "messageID": { - "type": "string", - "pattern": "^msg.*" - }, "type": { "type": "string", - "const": "reasoning" - }, - "text": { - "type": "string" - }, - "metadata": { - "type": "object", - "propertyNames": { - "type": "string" - }, - "additionalProperties": {} + "const": "tui.session.select" }, - "time": { + "properties": { "type": "object", "properties": { - "start": { - "type": "number" - }, - "end": { - "type": "number" + "sessionID": { + "description": "Session ID to navigate to", + "type": "string", + "pattern": "^ses.*" } }, - "required": ["start"] + "required": ["sessionID"] } }, - "required": ["id", "sessionID", "messageID", "type", "text", "time"] + "required": ["type", "properties"] }, - "FilePartSourceText": { + "Event.mcp.tools.changed": { "type": "object", "properties": { - "value": { - "type": "string" - }, - "start": { - "type": "integer", - "minimum": -9007199254740991, - "maximum": 9007199254740991 + "type": { + "type": "string", + "const": "mcp.tools.changed" }, - "end": { - "type": "integer", - "minimum": -9007199254740991, - "maximum": 9007199254740991 + "properties": { + "type": "object", + "properties": { + "server": { + "type": "string" + } + }, + "required": ["server"] } }, - "required": ["value", "start", "end"] + "required": ["type", "properties"] }, - "FileSource": { + "Event.mcp.browser.open.failed": { "type": "object", "properties": { - "text": { - "$ref": "#/components/schemas/FilePartSourceText" - }, "type": { "type": "string", - "const": "file" + "const": "mcp.browser.open.failed" }, - "path": { - "type": "string" - } - }, - "required": ["text", "type", "path"] - }, - "Range": { - "type": "object", - "properties": { - "start": { + "properties": { "type": "object", "properties": { - "line": { - "type": "number" + "mcpName": { + "type": "string" }, - "character": { - "type": "number" + "url": { + "type": "string" } }, - "required": ["line", "character"] + "required": ["mcpName", "url"] + } + }, + "required": ["type", "properties"] + }, + "Event.command.executed": { + "type": "object", + "properties": { + "type": { + "type": "string", + "const": "command.executed" }, - "end": { + "properties": { "type": "object", "properties": { - "line": { - "type": "number" + "name": { + "type": "string" }, - "character": { - "type": "number" + "sessionID": { + "type": "string", + "pattern": "^ses.*" + }, + "arguments": { + "type": "string" + }, + "messageID": { + "type": "string", + "pattern": "^msg.*" } }, - "required": ["line", "character"] + "required": ["name", "sessionID", "arguments", "messageID"] } }, - "required": ["start", "end"] + "required": ["type", "properties"] }, - "SymbolSource": { + "FileDiff": { "type": "object", "properties": { - "text": { - "$ref": "#/components/schemas/FilePartSourceText" + "file": { + "type": "string" }, - "type": { - "type": "string", - "const": "symbol" + "before": { + "type": "string" }, - "path": { + "after": { "type": "string" }, - "range": { - "$ref": "#/components/schemas/Range" + "additions": { + "type": "number" }, - "name": { - "type": "string" + "deletions": { + "type": "number" }, - "kind": { - "type": "integer", - "minimum": -9007199254740991, - "maximum": 9007199254740991 + "status": { + "type": "string", + "enum": ["added", "deleted", "modified"] } }, - "required": ["text", "type", "path", "range", "name", "kind"] + "required": ["file", "before", "after", "additions", "deletions"] }, - "ResourceSource": { + "Event.session.diff": { "type": "object", "properties": { - "text": { - "$ref": "#/components/schemas/FilePartSourceText" - }, "type": { "type": "string", - "const": "resource" - }, - "clientName": { - "type": "string" + "const": "session.diff" }, - "uri": { - "type": "string" + "properties": { + "type": "object", + "properties": { + "sessionID": { + "type": "string", + "pattern": "^ses.*" + }, + "diff": { + "type": "array", + "items": { + "$ref": "#/components/schemas/FileDiff" + } + } + }, + "required": ["sessionID", "diff"] } }, - "required": ["text", "type", "clientName", "uri"] + "required": ["type", "properties"] }, - "FilePartSource": { - "anyOf": [ - { - "$ref": "#/components/schemas/FileSource" - }, - { - "$ref": "#/components/schemas/SymbolSource" + "ProviderAuthError": { + "type": "object", + "properties": { + "name": { + "type": "string", + "const": "ProviderAuthError" }, - { - "$ref": "#/components/schemas/ResourceSource" + "data": { + "type": "object", + "properties": { + "providerID": { + "type": "string" + }, + "message": { + "type": "string" + } + }, + "required": ["providerID", "message"] } - ] + }, + "required": ["name", "data"] }, - "FilePart": { + "UnknownError": { "type": "object", "properties": { - "id": { - "type": "string", - "pattern": "^prt.*" - }, - "sessionID": { - "type": "string", - "pattern": "^ses.*" - }, - "messageID": { + "name": { "type": "string", - "pattern": "^msg.*" + "const": "UnknownError" }, - "type": { - "type": "string", - "const": "file" - }, - "mime": { - "type": "string" - }, - "filename": { - "type": "string" - }, - "url": { - "type": "string" - }, - "source": { - "$ref": "#/components/schemas/FilePartSource" + "data": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + }, + "required": ["message"] } }, - "required": ["id", "sessionID", "messageID", "type", "mime", "url"] + "required": ["name", "data"] }, - "ToolStatePending": { + "MessageOutputLengthError": { "type": "object", "properties": { - "status": { + "name": { "type": "string", - "const": "pending" + "const": "MessageOutputLengthError" }, - "input": { + "data": { "type": "object", - "propertyNames": { - "type": "string" - }, - "additionalProperties": {} - }, - "raw": { - "type": "string" + "properties": {} } }, - "required": ["status", "input", "raw"] + "required": ["name", "data"] }, - "ToolStateRunning": { + "MessageAbortedError": { "type": "object", "properties": { - "status": { + "name": { "type": "string", - "const": "running" - }, - "input": { - "type": "object", - "propertyNames": { - "type": "string" - }, - "additionalProperties": {} - }, - "title": { - "type": "string" - }, - "metadata": { - "type": "object", - "propertyNames": { - "type": "string" - }, - "additionalProperties": {} + "const": "MessageAbortedError" }, - "time": { + "data": { "type": "object", "properties": { - "start": { - "type": "number" + "message": { + "type": "string" } }, - "required": ["start"] + "required": ["message"] } }, - "required": ["status", "input", "time"] + "required": ["name", "data"] }, - "ToolStateCompleted": { + "StructuredOutputError": { "type": "object", "properties": { - "status": { + "name": { "type": "string", - "const": "completed" - }, - "input": { - "type": "object", - "propertyNames": { - "type": "string" - }, - "additionalProperties": {} - }, - "output": { - "type": "string" - }, - "title": { - "type": "string" - }, - "metadata": { - "type": "object", - "propertyNames": { - "type": "string" - }, - "additionalProperties": {} + "const": "StructuredOutputError" }, - "time": { + "data": { "type": "object", "properties": { - "start": { - "type": "number" - }, - "end": { - "type": "number" + "message": { + "type": "string" }, - "compacted": { + "retries": { "type": "number" } }, - "required": ["start", "end"] - }, - "attachments": { - "type": "array", - "items": { - "$ref": "#/components/schemas/FilePart" - } + "required": ["message", "retries"] } }, - "required": ["status", "input", "output", "title", "metadata", "time"] + "required": ["name", "data"] }, - "ToolStateError": { + "ContextOverflowError": { "type": "object", "properties": { - "status": { + "name": { "type": "string", - "const": "error" - }, - "input": { - "type": "object", - "propertyNames": { - "type": "string" - }, - "additionalProperties": {} - }, - "error": { - "type": "string" - }, - "metadata": { - "type": "object", - "propertyNames": { - "type": "string" - }, - "additionalProperties": {} + "const": "ContextOverflowError" }, - "time": { + "data": { "type": "object", "properties": { - "start": { - "type": "number" + "message": { + "type": "string" }, - "end": { - "type": "number" + "responseBody": { + "type": "string" } }, - "required": ["start", "end"] + "required": ["message"] } }, - "required": ["status", "input", "error", "time"] - }, - "ToolState": { - "anyOf": [ - { - "$ref": "#/components/schemas/ToolStatePending" - }, - { - "$ref": "#/components/schemas/ToolStateRunning" - }, - { - "$ref": "#/components/schemas/ToolStateCompleted" - }, - { - "$ref": "#/components/schemas/ToolStateError" - } - ] + "required": ["name", "data"] }, - "ToolPart": { + "APIError": { "type": "object", "properties": { - "id": { - "type": "string", - "pattern": "^prt.*" - }, - "sessionID": { - "type": "string", - "pattern": "^ses.*" - }, - "messageID": { - "type": "string", - "pattern": "^msg.*" - }, - "type": { + "name": { "type": "string", - "const": "tool" - }, - "callID": { - "type": "string" - }, - "tool": { - "type": "string" - }, - "state": { - "$ref": "#/components/schemas/ToolState" + "const": "APIError" }, - "metadata": { + "data": { "type": "object", - "propertyNames": { - "type": "string" + "properties": { + "message": { + "type": "string" + }, + "statusCode": { + "type": "number" + }, + "isRetryable": { + "type": "boolean" + }, + "responseHeaders": { + "type": "object", + "propertyNames": { + "type": "string" + }, + "additionalProperties": { + "type": "string" + } + }, + "responseBody": { + "type": "string" + }, + "metadata": { + "type": "object", + "propertyNames": { + "type": "string" + }, + "additionalProperties": { + "type": "string" + } + } }, - "additionalProperties": {} + "required": ["message", "isRetryable"] } }, - "required": ["id", "sessionID", "messageID", "type", "callID", "tool", "state"] + "required": ["name", "data"] }, - "StepStartPart": { + "Event.session.error": { "type": "object", "properties": { - "id": { - "type": "string", - "pattern": "^prt.*" - }, - "sessionID": { - "type": "string", - "pattern": "^ses.*" - }, - "messageID": { - "type": "string", - "pattern": "^msg.*" - }, "type": { "type": "string", - "const": "step-start" + "const": "session.error" }, - "snapshot": { - "type": "string" + "properties": { + "type": "object", + "properties": { + "sessionID": { + "type": "string", + "pattern": "^ses.*" + }, + "error": { + "anyOf": [ + { + "$ref": "#/components/schemas/ProviderAuthError" + }, + { + "$ref": "#/components/schemas/UnknownError" + }, + { + "$ref": "#/components/schemas/MessageOutputLengthError" + }, + { + "$ref": "#/components/schemas/MessageAbortedError" + }, + { + "$ref": "#/components/schemas/StructuredOutputError" + }, + { + "$ref": "#/components/schemas/ContextOverflowError" + }, + { + "$ref": "#/components/schemas/APIError" + } + ] + } + } } }, - "required": ["id", "sessionID", "messageID", "type"] + "required": ["type", "properties"] }, - "StepFinishPart": { + "Event.vcs.branch.updated": { "type": "object", "properties": { - "id": { - "type": "string", - "pattern": "^prt.*" - }, - "sessionID": { - "type": "string", - "pattern": "^ses.*" - }, - "messageID": { + "type": { "type": "string", - "pattern": "^msg.*" + "const": "vcs.branch.updated" }, + "properties": { + "type": "object", + "properties": { + "branch": { + "type": "string" + } + } + } + }, + "required": ["type", "properties"] + }, + "Event.workspace.ready": { + "type": "object", + "properties": { "type": { "type": "string", - "const": "step-finish" - }, - "reason": { - "type": "string" - }, - "snapshot": { - "type": "string" - }, - "cost": { - "type": "number" + "const": "workspace.ready" }, - "tokens": { + "properties": { "type": "object", "properties": { - "total": { - "type": "number" - }, - "input": { - "type": "number" - }, - "output": { - "type": "number" - }, - "reasoning": { - "type": "number" - }, - "cache": { - "type": "object", - "properties": { - "read": { - "type": "number" - }, - "write": { - "type": "number" - } - }, - "required": ["read", "write"] + "name": { + "type": "string" } }, - "required": ["input", "output", "reasoning", "cache"] + "required": ["name"] } }, - "required": ["id", "sessionID", "messageID", "type", "reason", "cost", "tokens"] + "required": ["type", "properties"] }, - "SnapshotPart": { + "Event.workspace.failed": { "type": "object", "properties": { - "id": { - "type": "string", - "pattern": "^prt.*" - }, - "sessionID": { - "type": "string", - "pattern": "^ses.*" - }, - "messageID": { - "type": "string", - "pattern": "^msg.*" - }, "type": { "type": "string", - "const": "snapshot" + "const": "workspace.failed" }, - "snapshot": { - "type": "string" + "properties": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + }, + "required": ["message"] } }, - "required": ["id", "sessionID", "messageID", "type", "snapshot"] + "required": ["type", "properties"] }, - "PatchPart": { + "Pty": { "type": "object", "properties": { "id": { "type": "string", - "pattern": "^prt.*" - }, - "sessionID": { - "type": "string", - "pattern": "^ses.*" - }, - "messageID": { - "type": "string", - "pattern": "^msg.*" + "pattern": "^pty.*" }, - "type": { - "type": "string", - "const": "patch" + "title": { + "type": "string" }, - "hash": { + "command": { "type": "string" }, - "files": { + "args": { "type": "array", "items": { "type": "string" } + }, + "cwd": { + "type": "string" + }, + "status": { + "type": "string", + "enum": ["running", "exited"] + }, + "pid": { + "type": "number" } }, - "required": ["id", "sessionID", "messageID", "type", "hash", "files"] + "required": ["id", "title", "command", "args", "cwd", "status", "pid"] }, - "AgentPart": { + "Event.pty.created": { "type": "object", "properties": { - "id": { - "type": "string", - "pattern": "^prt.*" - }, - "sessionID": { - "type": "string", - "pattern": "^ses.*" - }, - "messageID": { - "type": "string", - "pattern": "^msg.*" - }, "type": { "type": "string", - "const": "agent" - }, - "name": { - "type": "string" + "const": "pty.created" }, - "source": { + "properties": { "type": "object", "properties": { - "value": { - "type": "string" - }, - "start": { - "type": "integer", - "minimum": -9007199254740991, - "maximum": 9007199254740991 - }, - "end": { - "type": "integer", - "minimum": -9007199254740991, - "maximum": 9007199254740991 + "info": { + "$ref": "#/components/schemas/Pty" } }, - "required": ["value", "start", "end"] + "required": ["info"] } }, - "required": ["id", "sessionID", "messageID", "type", "name"] + "required": ["type", "properties"] }, - "RetryPart": { + "Event.pty.updated": { "type": "object", "properties": { - "id": { - "type": "string", - "pattern": "^prt.*" - }, - "sessionID": { - "type": "string", - "pattern": "^ses.*" - }, - "messageID": { - "type": "string", - "pattern": "^msg.*" - }, "type": { "type": "string", - "const": "retry" - }, - "attempt": { - "type": "number" - }, - "error": { - "$ref": "#/components/schemas/APIError" + "const": "pty.updated" }, - "time": { + "properties": { "type": "object", "properties": { - "created": { - "type": "number" + "info": { + "$ref": "#/components/schemas/Pty" } }, - "required": ["created"] + "required": ["info"] } }, - "required": ["id", "sessionID", "messageID", "type", "attempt", "error", "time"] + "required": ["type", "properties"] }, - "CompactionPart": { + "Event.pty.exited": { "type": "object", "properties": { - "id": { - "type": "string", - "pattern": "^prt.*" - }, - "sessionID": { - "type": "string", - "pattern": "^ses.*" - }, - "messageID": { - "type": "string", - "pattern": "^msg.*" - }, "type": { "type": "string", - "const": "compaction" - }, - "auto": { - "type": "boolean" - }, - "overflow": { - "type": "boolean" - } - }, - "required": ["id", "sessionID", "messageID", "type", "auto"] - }, - "Part": { - "anyOf": [ - { - "$ref": "#/components/schemas/TextPart" - }, - { - "$ref": "#/components/schemas/SubtaskPart" - }, - { - "$ref": "#/components/schemas/ReasoningPart" - }, - { - "$ref": "#/components/schemas/FilePart" - }, - { - "$ref": "#/components/schemas/ToolPart" - }, - { - "$ref": "#/components/schemas/StepStartPart" - }, - { - "$ref": "#/components/schemas/StepFinishPart" - }, - { - "$ref": "#/components/schemas/SnapshotPart" - }, - { - "$ref": "#/components/schemas/PatchPart" - }, - { - "$ref": "#/components/schemas/AgentPart" - }, - { - "$ref": "#/components/schemas/RetryPart" - }, - { - "$ref": "#/components/schemas/CompactionPart" - } - ] - }, - "Event.message.part.updated": { - "type": "object", - "properties": { - "type": { - "type": "string", - "const": "message.part.updated" + "const": "pty.exited" }, "properties": { "type": "object", "properties": { - "part": { - "$ref": "#/components/schemas/Part" + "id": { + "type": "string", + "pattern": "^pty.*" + }, + "exitCode": { + "type": "number" } }, - "required": ["part"] + "required": ["id", "exitCode"] } }, "required": ["type", "properties"] }, - "Event.message.part.delta": { + "Event.pty.deleted": { "type": "object", "properties": { "type": { "type": "string", - "const": "message.part.delta" + "const": "pty.deleted" }, "properties": { "type": "object", "properties": { - "sessionID": { - "type": "string", - "pattern": "^ses.*" - }, - "messageID": { - "type": "string", - "pattern": "^msg.*" - }, - "partID": { + "id": { "type": "string", - "pattern": "^prt.*" - }, - "field": { - "type": "string" - }, - "delta": { - "type": "string" + "pattern": "^pty.*" } }, - "required": ["sessionID", "messageID", "partID", "field", "delta"] + "required": ["id"] } }, "required": ["type", "properties"] }, - "Event.message.part.removed": { + "Event.worktree.ready": { "type": "object", "properties": { "type": { "type": "string", - "const": "message.part.removed" + "const": "worktree.ready" }, "properties": { "type": "object", "properties": { - "sessionID": { - "type": "string", - "pattern": "^ses.*" - }, - "messageID": { - "type": "string", - "pattern": "^msg.*" + "name": { + "type": "string" }, - "partID": { - "type": "string", - "pattern": "^prt.*" + "branch": { + "type": "string" } }, - "required": ["sessionID", "messageID", "partID"] + "required": ["name", "branch"] } }, "required": ["type", "properties"] }, - "PermissionRequest": { + "Event.worktree.failed": { "type": "object", "properties": { - "id": { - "type": "string", - "pattern": "^per.*" - }, - "sessionID": { + "type": { "type": "string", - "pattern": "^ses.*" - }, - "permission": { - "type": "string" - }, - "patterns": { - "type": "array", - "items": { - "type": "string" - } - }, - "metadata": { - "type": "object", - "propertyNames": { - "type": "string" - }, - "additionalProperties": {} - }, - "always": { - "type": "array", - "items": { - "type": "string" - } + "const": "worktree.failed" }, - "tool": { + "properties": { "type": "object", "properties": { - "messageID": { - "type": "string", - "pattern": "^msg.*" - }, - "callID": { + "message": { "type": "string" } }, - "required": ["messageID", "callID"] + "required": ["message"] } }, - "required": ["id", "sessionID", "permission", "patterns", "metadata", "always"] + "required": ["type", "properties"] }, - "Event.permission.asked": { + "OutputFormatText": { "type": "object", "properties": { "type": { "type": "string", - "const": "permission.asked" - }, - "properties": { - "$ref": "#/components/schemas/PermissionRequest" + "const": "text" } }, - "required": ["type", "properties"] + "required": ["type"] }, - "Event.permission.replied": { + "JSONSchema": { + "type": "object", + "propertyNames": { + "type": "string" + }, + "additionalProperties": {} + }, + "OutputFormatJsonSchema": { "type": "object", "properties": { "type": { "type": "string", - "const": "permission.replied" + "const": "json_schema" }, - "properties": { - "type": "object", - "properties": { - "sessionID": { - "type": "string", - "pattern": "^ses.*" - }, - "requestID": { - "type": "string", - "pattern": "^per.*" - }, - "reply": { - "type": "string", - "enum": ["once", "always", "reject"] - } - }, - "required": ["sessionID", "requestID", "reply"] + "schema": { + "$ref": "#/components/schemas/JSONSchema" + }, + "retryCount": { + "default": 2, + "type": "integer", + "minimum": 0, + "maximum": 9007199254740991 } }, - "required": ["type", "properties"] + "required": ["type", "schema"] }, - "SessionStatus": { + "OutputFormat": { "anyOf": [ { + "$ref": "#/components/schemas/OutputFormatText" + }, + { + "$ref": "#/components/schemas/OutputFormatJsonSchema" + } + ] + }, + "UserMessage": { + "type": "object", + "properties": { + "id": { + "type": "string", + "pattern": "^msg.*" + }, + "sessionID": { + "type": "string", + "pattern": "^ses.*" + }, + "role": { + "type": "string", + "const": "user" + }, + "time": { "type": "object", "properties": { - "type": { - "type": "string", - "const": "idle" + "created": { + "type": "number" } }, - "required": ["type"] + "required": ["created"] }, - { + "format": { + "$ref": "#/components/schemas/OutputFormat" + }, + "summary": { "type": "object", "properties": { - "type": { - "type": "string", - "const": "retry" - }, - "attempt": { - "type": "number" + "title": { + "type": "string" }, - "message": { + "body": { "type": "string" }, - "next": { - "type": "number" + "diffs": { + "type": "array", + "items": { + "$ref": "#/components/schemas/FileDiff" + } } }, - "required": ["type", "attempt", "message", "next"] + "required": ["diffs"] }, - { + "agent": { + "type": "string" + }, + "model": { "type": "object", "properties": { - "type": { - "type": "string", - "const": "busy" + "providerID": { + "type": "string" + }, + "modelID": { + "type": "string" } }, - "required": ["type"] - } - ] - }, - "Event.session.status": { - "type": "object", - "properties": { - "type": { - "type": "string", - "const": "session.status" + "required": ["providerID", "modelID"] }, - "properties": { + "system": { + "type": "string" + }, + "tools": { "type": "object", - "properties": { - "sessionID": { - "type": "string", - "pattern": "^ses.*" - }, - "status": { - "$ref": "#/components/schemas/SessionStatus" - } + "propertyNames": { + "type": "string" }, - "required": ["sessionID", "status"] + "additionalProperties": { + "type": "boolean" + } + }, + "variant": { + "type": "string" } }, - "required": ["type", "properties"] + "required": ["id", "sessionID", "role", "time", "agent", "model"] }, - "Event.session.idle": { + "AssistantMessage": { "type": "object", "properties": { - "type": { + "id": { "type": "string", - "const": "session.idle" + "pattern": "^msg.*" }, - "properties": { + "sessionID": { + "type": "string", + "pattern": "^ses.*" + }, + "role": { + "type": "string", + "const": "assistant" + }, + "time": { "type": "object", "properties": { - "sessionID": { - "type": "string", - "pattern": "^ses.*" + "created": { + "type": "number" + }, + "completed": { + "type": "number" } }, - "required": ["sessionID"] - } - }, - "required": ["type", "properties"] - }, - "QuestionOption": { - "type": "object", - "properties": { - "label": { - "description": "Display text (1-5 words, concise)", - "type": "string" + "required": ["created"] }, - "description": { - "description": "Explanation of choice", + "error": { + "anyOf": [ + { + "$ref": "#/components/schemas/ProviderAuthError" + }, + { + "$ref": "#/components/schemas/UnknownError" + }, + { + "$ref": "#/components/schemas/MessageOutputLengthError" + }, + { + "$ref": "#/components/schemas/MessageAbortedError" + }, + { + "$ref": "#/components/schemas/StructuredOutputError" + }, + { + "$ref": "#/components/schemas/ContextOverflowError" + }, + { + "$ref": "#/components/schemas/APIError" + } + ] + }, + "parentID": { + "type": "string", + "pattern": "^msg.*" + }, + "modelID": { "type": "string" - } - }, - "required": ["label", "description"] - }, - "QuestionInfo": { - "type": "object", - "properties": { - "question": { - "description": "Complete question", + }, + "providerID": { "type": "string" }, - "header": { - "description": "Very short label (max 30 chars)", + "mode": { "type": "string" }, - "options": { - "description": "Available choices", - "type": "array", - "items": { - "$ref": "#/components/schemas/QuestionOption" - } + "agent": { + "type": "string" }, - "multiple": { - "description": "Allow selecting multiple choices", - "type": "boolean" + "path": { + "type": "object", + "properties": { + "cwd": { + "type": "string" + }, + "root": { + "type": "string" + } + }, + "required": ["cwd", "root"] }, - "custom": { - "description": "Allow typing a custom answer (default: true)", + "summary": { "type": "boolean" - } - }, - "required": ["question", "header", "options"] - }, - "QuestionRequest": { - "type": "object", - "properties": { - "id": { - "type": "string", - "pattern": "^que.*" - }, - "sessionID": { - "type": "string", - "pattern": "^ses.*" }, - "questions": { - "description": "Questions to ask", - "type": "array", - "items": { - "$ref": "#/components/schemas/QuestionInfo" - } + "cost": { + "type": "number" }, - "tool": { + "tokens": { "type": "object", "properties": { - "messageID": { - "type": "string", - "pattern": "^msg.*" + "total": { + "type": "number" }, - "callID": { - "type": "string" + "input": { + "type": "number" + }, + "output": { + "type": "number" + }, + "reasoning": { + "type": "number" + }, + "cache": { + "type": "object", + "properties": { + "read": { + "type": "number" + }, + "write": { + "type": "number" + } + }, + "required": ["read", "write"] } }, - "required": ["messageID", "callID"] + "required": ["input", "output", "reasoning", "cache"] + }, + "structured": {}, + "variant": { + "type": "string" + }, + "finish": { + "type": "string" } }, - "required": ["id", "sessionID", "questions"] + "required": [ + "id", + "sessionID", + "role", + "time", + "parentID", + "modelID", + "providerID", + "mode", + "agent", + "path", + "cost", + "tokens" + ] }, - "Event.question.asked": { - "type": "object", - "properties": { - "type": { - "type": "string", - "const": "question.asked" + "Message": { + "anyOf": [ + { + "$ref": "#/components/schemas/UserMessage" }, - "properties": { - "$ref": "#/components/schemas/QuestionRequest" + { + "$ref": "#/components/schemas/AssistantMessage" } - }, - "required": ["type", "properties"] - }, - "QuestionAnswer": { - "type": "array", - "items": { - "type": "string" - } + ] }, - "Event.question.replied": { + "Event.message.updated": { "type": "object", "properties": { "type": { "type": "string", - "const": "question.replied" + "const": "message.updated" }, "properties": { "type": "object", @@ -8892,28 +8657,21 @@ "type": "string", "pattern": "^ses.*" }, - "requestID": { - "type": "string", - "pattern": "^que.*" - }, - "answers": { - "type": "array", - "items": { - "$ref": "#/components/schemas/QuestionAnswer" - } + "info": { + "$ref": "#/components/schemas/Message" } }, - "required": ["sessionID", "requestID", "answers"] + "required": ["sessionID", "info"] } }, "required": ["type", "properties"] }, - "Event.question.rejected": { + "Event.message.removed": { "type": "object", "properties": { "type": { "type": "string", - "const": "question.rejected" + "const": "message.removed" }, "properties": { "type": "object", @@ -8922,763 +8680,1053 @@ "type": "string", "pattern": "^ses.*" }, - "requestID": { + "messageID": { "type": "string", - "pattern": "^que.*" + "pattern": "^msg.*" } }, - "required": ["sessionID", "requestID"] + "required": ["sessionID", "messageID"] } }, "required": ["type", "properties"] }, - "Event.session.compacted": { + "TextPart": { "type": "object", "properties": { + "id": { + "type": "string", + "pattern": "^prt.*" + }, + "sessionID": { + "type": "string", + "pattern": "^ses.*" + }, + "messageID": { + "type": "string", + "pattern": "^msg.*" + }, "type": { "type": "string", - "const": "session.compacted" + "const": "text" }, - "properties": { + "text": { + "type": "string" + }, + "synthetic": { + "type": "boolean" + }, + "ignored": { + "type": "boolean" + }, + "time": { "type": "object", "properties": { - "sessionID": { - "type": "string", - "pattern": "^ses.*" + "start": { + "type": "number" + }, + "end": { + "type": "number" } }, - "required": ["sessionID"] + "required": ["start"] + }, + "metadata": { + "type": "object", + "propertyNames": { + "type": "string" + }, + "additionalProperties": {} } }, - "required": ["type", "properties"] + "required": ["id", "sessionID", "messageID", "type", "text"] }, - "Event.file.watcher.updated": { + "SubtaskPart": { "type": "object", "properties": { + "id": { + "type": "string", + "pattern": "^prt.*" + }, + "sessionID": { + "type": "string", + "pattern": "^ses.*" + }, + "messageID": { + "type": "string", + "pattern": "^msg.*" + }, "type": { "type": "string", - "const": "file.watcher.updated" + "const": "subtask" }, - "properties": { + "prompt": { + "type": "string" + }, + "description": { + "type": "string" + }, + "agent": { + "type": "string" + }, + "model": { "type": "object", "properties": { - "file": { + "providerID": { "type": "string" }, - "event": { - "anyOf": [ - { - "type": "string", - "const": "add" - }, - { - "type": "string", - "const": "change" - }, - { - "type": "string", - "const": "unlink" - } - ] + "modelID": { + "type": "string" } }, - "required": ["file", "event"] - } - }, - "required": ["type", "properties"] - }, - "Todo": { - "type": "object", - "properties": { - "content": { - "description": "Brief description of the task", - "type": "string" - }, - "status": { - "description": "Current status of the task: pending, in_progress, completed, cancelled", - "type": "string" + "required": ["providerID", "modelID"] }, - "priority": { - "description": "Priority level of the task: high, medium, low", + "command": { "type": "string" } }, - "required": ["content", "status", "priority"] + "required": ["id", "sessionID", "messageID", "type", "prompt", "description", "agent"] }, - "Event.todo.updated": { + "ReasoningPart": { "type": "object", "properties": { + "id": { + "type": "string", + "pattern": "^prt.*" + }, + "sessionID": { + "type": "string", + "pattern": "^ses.*" + }, + "messageID": { + "type": "string", + "pattern": "^msg.*" + }, "type": { "type": "string", - "const": "todo.updated" + "const": "reasoning" }, - "properties": { + "text": { + "type": "string" + }, + "metadata": { + "type": "object", + "propertyNames": { + "type": "string" + }, + "additionalProperties": {} + }, + "time": { "type": "object", "properties": { - "sessionID": { - "type": "string", - "pattern": "^ses.*" + "start": { + "type": "number" }, - "todos": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Todo" - } + "end": { + "type": "number" } }, - "required": ["sessionID", "todos"] + "required": ["start"] } }, - "required": ["type", "properties"] + "required": ["id", "sessionID", "messageID", "type", "text", "time"] }, - "Event.tui.prompt.append": { + "FilePartSourceText": { + "type": "object", + "properties": { + "value": { + "type": "string" + }, + "start": { + "type": "integer", + "minimum": -9007199254740991, + "maximum": 9007199254740991 + }, + "end": { + "type": "integer", + "minimum": -9007199254740991, + "maximum": 9007199254740991 + } + }, + "required": ["value", "start", "end"] + }, + "FileSource": { "type": "object", "properties": { + "text": { + "$ref": "#/components/schemas/FilePartSourceText" + }, "type": { "type": "string", - "const": "tui.prompt.append" + "const": "file" }, - "properties": { + "path": { + "type": "string" + } + }, + "required": ["text", "type", "path"] + }, + "Range": { + "type": "object", + "properties": { + "start": { "type": "object", "properties": { - "text": { - "type": "string" + "line": { + "type": "number" + }, + "character": { + "type": "number" } }, - "required": ["text"] + "required": ["line", "character"] + }, + "end": { + "type": "object", + "properties": { + "line": { + "type": "number" + }, + "character": { + "type": "number" + } + }, + "required": ["line", "character"] } }, - "required": ["type", "properties"] + "required": ["start", "end"] }, - "Event.tui.command.execute": { + "SymbolSource": { "type": "object", "properties": { + "text": { + "$ref": "#/components/schemas/FilePartSourceText" + }, "type": { "type": "string", - "const": "tui.command.execute" + "const": "symbol" }, - "properties": { - "type": "object", - "properties": { - "command": { - "anyOf": [ - { - "type": "string", - "enum": [ - "session.list", - "session.new", - "session.share", - "session.interrupt", - "session.compact", - "session.page.up", - "session.page.down", - "session.line.up", - "session.line.down", - "session.half.page.up", - "session.half.page.down", - "session.first", - "session.last", - "prompt.clear", - "prompt.submit", - "agent.cycle" - ] - }, - { - "type": "string" - } - ] - } - }, - "required": ["command"] + "path": { + "type": "string" + }, + "range": { + "$ref": "#/components/schemas/Range" + }, + "name": { + "type": "string" + }, + "kind": { + "type": "integer", + "minimum": -9007199254740991, + "maximum": 9007199254740991 } }, - "required": ["type", "properties"] + "required": ["text", "type", "path", "range", "name", "kind"] }, - "Event.tui.toast.show": { + "ResourceSource": { "type": "object", "properties": { + "text": { + "$ref": "#/components/schemas/FilePartSourceText" + }, "type": { "type": "string", - "const": "tui.toast.show" + "const": "resource" }, - "properties": { - "type": "object", - "properties": { - "title": { - "type": "string" - }, - "message": { - "type": "string" - }, - "variant": { - "type": "string", - "enum": ["info", "success", "warning", "error"] - }, - "duration": { - "description": "Duration in milliseconds", - "default": 5000, - "type": "number" - } - }, - "required": ["message", "variant"] + "clientName": { + "type": "string" + }, + "uri": { + "type": "string" } }, - "required": ["type", "properties"] + "required": ["text", "type", "clientName", "uri"] }, - "Event.tui.session.select": { + "FilePartSource": { + "anyOf": [ + { + "$ref": "#/components/schemas/FileSource" + }, + { + "$ref": "#/components/schemas/SymbolSource" + }, + { + "$ref": "#/components/schemas/ResourceSource" + } + ] + }, + "FilePart": { "type": "object", "properties": { + "id": { + "type": "string", + "pattern": "^prt.*" + }, + "sessionID": { + "type": "string", + "pattern": "^ses.*" + }, + "messageID": { + "type": "string", + "pattern": "^msg.*" + }, "type": { "type": "string", - "const": "tui.session.select" + "const": "file" }, - "properties": { - "type": "object", - "properties": { - "sessionID": { - "description": "Session ID to navigate to", - "type": "string", - "pattern": "^ses.*" - } - }, - "required": ["sessionID"] + "mime": { + "type": "string" + }, + "filename": { + "type": "string" + }, + "url": { + "type": "string" + }, + "source": { + "$ref": "#/components/schemas/FilePartSource" } }, - "required": ["type", "properties"] + "required": ["id", "sessionID", "messageID", "type", "mime", "url"] }, - "Event.mcp.tools.changed": { + "ToolStatePending": { "type": "object", "properties": { - "type": { + "status": { "type": "string", - "const": "mcp.tools.changed" + "const": "pending" }, - "properties": { + "input": { "type": "object", - "properties": { - "server": { - "type": "string" - } + "propertyNames": { + "type": "string" }, - "required": ["server"] + "additionalProperties": {} + }, + "raw": { + "type": "string" } }, - "required": ["type", "properties"] + "required": ["status", "input", "raw"] }, - "Event.mcp.browser.open.failed": { + "ToolStateRunning": { "type": "object", "properties": { - "type": { + "status": { "type": "string", - "const": "mcp.browser.open.failed" + "const": "running" }, - "properties": { + "input": { + "type": "object", + "propertyNames": { + "type": "string" + }, + "additionalProperties": {} + }, + "title": { + "type": "string" + }, + "metadata": { + "type": "object", + "propertyNames": { + "type": "string" + }, + "additionalProperties": {} + }, + "time": { "type": "object", "properties": { - "mcpName": { - "type": "string" - }, - "url": { - "type": "string" + "start": { + "type": "number" } }, - "required": ["mcpName", "url"] + "required": ["start"] } }, - "required": ["type", "properties"] + "required": ["status", "input", "time"] }, - "Event.command.executed": { + "ToolStateCompleted": { "type": "object", "properties": { - "type": { + "status": { "type": "string", - "const": "command.executed" + "const": "completed" }, - "properties": { + "input": { + "type": "object", + "propertyNames": { + "type": "string" + }, + "additionalProperties": {} + }, + "output": { + "type": "string" + }, + "title": { + "type": "string" + }, + "metadata": { + "type": "object", + "propertyNames": { + "type": "string" + }, + "additionalProperties": {} + }, + "time": { "type": "object", "properties": { - "name": { - "type": "string" - }, - "sessionID": { - "type": "string", - "pattern": "^ses.*" + "start": { + "type": "number" }, - "arguments": { - "type": "string" + "end": { + "type": "number" }, - "messageID": { - "type": "string", - "pattern": "^msg.*" + "compacted": { + "type": "number" } }, - "required": ["name", "sessionID", "arguments", "messageID"] + "required": ["start", "end"] + }, + "attachments": { + "type": "array", + "items": { + "$ref": "#/components/schemas/FilePart" + } } }, - "required": ["type", "properties"] - }, - "PermissionAction": { - "type": "string", - "enum": ["allow", "deny", "ask"] + "required": ["status", "input", "output", "title", "metadata", "time"] }, - "PermissionRule": { + "ToolStateError": { "type": "object", "properties": { - "permission": { - "type": "string" + "status": { + "type": "string", + "const": "error" }, - "pattern": { + "input": { + "type": "object", + "propertyNames": { + "type": "string" + }, + "additionalProperties": {} + }, + "error": { "type": "string" }, - "action": { - "$ref": "#/components/schemas/PermissionAction" + "metadata": { + "type": "object", + "propertyNames": { + "type": "string" + }, + "additionalProperties": {} + }, + "time": { + "type": "object", + "properties": { + "start": { + "type": "number" + }, + "end": { + "type": "number" + } + }, + "required": ["start", "end"] } }, - "required": ["permission", "pattern", "action"] + "required": ["status", "input", "error", "time"] }, - "PermissionRuleset": { - "type": "array", - "items": { - "$ref": "#/components/schemas/PermissionRule" - } + "ToolState": { + "anyOf": [ + { + "$ref": "#/components/schemas/ToolStatePending" + }, + { + "$ref": "#/components/schemas/ToolStateRunning" + }, + { + "$ref": "#/components/schemas/ToolStateCompleted" + }, + { + "$ref": "#/components/schemas/ToolStateError" + } + ] }, - "Session": { + "ToolPart": { "type": "object", "properties": { "id": { + "type": "string", + "pattern": "^prt.*" + }, + "sessionID": { "type": "string", "pattern": "^ses.*" }, - "slug": { + "messageID": { + "type": "string", + "pattern": "^msg.*" + }, + "type": { + "type": "string", + "const": "tool" + }, + "callID": { "type": "string" }, - "projectID": { + "tool": { "type": "string" }, - "workspaceID": { + "state": { + "$ref": "#/components/schemas/ToolState" + }, + "metadata": { + "type": "object", + "propertyNames": { + "type": "string" + }, + "additionalProperties": {} + } + }, + "required": ["id", "sessionID", "messageID", "type", "callID", "tool", "state"] + }, + "StepStartPart": { + "type": "object", + "properties": { + "id": { "type": "string", - "pattern": "^wrk.*" + "pattern": "^prt.*" }, - "directory": { + "sessionID": { + "type": "string", + "pattern": "^ses.*" + }, + "messageID": { + "type": "string", + "pattern": "^msg.*" + }, + "type": { + "type": "string", + "const": "step-start" + }, + "snapshot": { "type": "string" + } + }, + "required": ["id", "sessionID", "messageID", "type"] + }, + "StepFinishPart": { + "type": "object", + "properties": { + "id": { + "type": "string", + "pattern": "^prt.*" }, - "parentID": { + "sessionID": { "type": "string", "pattern": "^ses.*" }, - "summary": { - "type": "object", - "properties": { - "additions": { - "type": "number" - }, - "deletions": { - "type": "number" - }, - "files": { - "type": "number" - }, - "diffs": { - "type": "array", - "items": { - "$ref": "#/components/schemas/FileDiff" - } - } - }, - "required": ["additions", "deletions", "files"] + "messageID": { + "type": "string", + "pattern": "^msg.*" }, - "share": { - "type": "object", - "properties": { - "url": { - "type": "string" - } - }, - "required": ["url"] + "type": { + "type": "string", + "const": "step-finish" }, - "title": { + "reason": { "type": "string" }, - "version": { + "snapshot": { "type": "string" }, - "time": { + "cost": { + "type": "number" + }, + "tokens": { "type": "object", "properties": { - "created": { + "total": { "type": "number" }, - "updated": { + "input": { "type": "number" }, - "compacting": { + "output": { "type": "number" }, - "archived": { + "reasoning": { "type": "number" - } - }, - "required": ["created", "updated"] - }, - "permission": { - "$ref": "#/components/schemas/PermissionRuleset" - }, - "revert": { - "type": "object", - "properties": { - "messageID": { - "type": "string", - "pattern": "^msg.*" - }, - "partID": { - "type": "string", - "pattern": "^prt.*" - }, - "snapshot": { - "type": "string" }, - "diff": { - "type": "string" + "cache": { + "type": "object", + "properties": { + "read": { + "type": "number" + }, + "write": { + "type": "number" + } + }, + "required": ["read", "write"] } }, - "required": ["messageID"] + "required": ["input", "output", "reasoning", "cache"] } }, - "required": ["id", "slug", "projectID", "directory", "title", "version", "time"] + "required": ["id", "sessionID", "messageID", "type", "reason", "cost", "tokens"] }, - "Event.session.created": { + "SnapshotPart": { "type": "object", "properties": { + "id": { + "type": "string", + "pattern": "^prt.*" + }, + "sessionID": { + "type": "string", + "pattern": "^ses.*" + }, + "messageID": { + "type": "string", + "pattern": "^msg.*" + }, "type": { "type": "string", - "const": "session.created" + "const": "snapshot" }, - "properties": { - "type": "object", - "properties": { - "info": { - "$ref": "#/components/schemas/Session" - } - }, - "required": ["info"] + "snapshot": { + "type": "string" } }, - "required": ["type", "properties"] + "required": ["id", "sessionID", "messageID", "type", "snapshot"] }, - "Event.session.updated": { + "PatchPart": { "type": "object", "properties": { + "id": { + "type": "string", + "pattern": "^prt.*" + }, + "sessionID": { + "type": "string", + "pattern": "^ses.*" + }, + "messageID": { + "type": "string", + "pattern": "^msg.*" + }, "type": { "type": "string", - "const": "session.updated" + "const": "patch" }, - "properties": { - "type": "object", - "properties": { - "info": { - "$ref": "#/components/schemas/Session" - } - }, - "required": ["info"] + "hash": { + "type": "string" + }, + "files": { + "type": "array", + "items": { + "type": "string" + } } }, - "required": ["type", "properties"] + "required": ["id", "sessionID", "messageID", "type", "hash", "files"] }, - "Event.session.deleted": { + "AgentPart": { "type": "object", "properties": { + "id": { + "type": "string", + "pattern": "^prt.*" + }, + "sessionID": { + "type": "string", + "pattern": "^ses.*" + }, + "messageID": { + "type": "string", + "pattern": "^msg.*" + }, "type": { "type": "string", - "const": "session.deleted" + "const": "agent" }, - "properties": { + "name": { + "type": "string" + }, + "source": { "type": "object", "properties": { - "info": { - "$ref": "#/components/schemas/Session" + "value": { + "type": "string" + }, + "start": { + "type": "integer", + "minimum": -9007199254740991, + "maximum": 9007199254740991 + }, + "end": { + "type": "integer", + "minimum": -9007199254740991, + "maximum": 9007199254740991 } }, - "required": ["info"] + "required": ["value", "start", "end"] } }, - "required": ["type", "properties"] + "required": ["id", "sessionID", "messageID", "type", "name"] }, - "Event.session.diff": { + "RetryPart": { "type": "object", "properties": { + "id": { + "type": "string", + "pattern": "^prt.*" + }, + "sessionID": { + "type": "string", + "pattern": "^ses.*" + }, + "messageID": { + "type": "string", + "pattern": "^msg.*" + }, "type": { "type": "string", - "const": "session.diff" + "const": "retry" }, - "properties": { + "attempt": { + "type": "number" + }, + "error": { + "$ref": "#/components/schemas/APIError" + }, + "time": { "type": "object", "properties": { - "sessionID": { - "type": "string", - "pattern": "^ses.*" - }, - "diff": { - "type": "array", - "items": { - "$ref": "#/components/schemas/FileDiff" - } + "created": { + "type": "number" } }, - "required": ["sessionID", "diff"] + "required": ["created"] } }, - "required": ["type", "properties"] + "required": ["id", "sessionID", "messageID", "type", "attempt", "error", "time"] }, - "Event.session.error": { + "CompactionPart": { "type": "object", "properties": { + "id": { + "type": "string", + "pattern": "^prt.*" + }, + "sessionID": { + "type": "string", + "pattern": "^ses.*" + }, + "messageID": { + "type": "string", + "pattern": "^msg.*" + }, "type": { "type": "string", - "const": "session.error" + "const": "compaction" }, - "properties": { - "type": "object", - "properties": { - "sessionID": { - "type": "string", - "pattern": "^ses.*" - }, - "error": { - "anyOf": [ - { - "$ref": "#/components/schemas/ProviderAuthError" - }, - { - "$ref": "#/components/schemas/UnknownError" - }, - { - "$ref": "#/components/schemas/MessageOutputLengthError" - }, - { - "$ref": "#/components/schemas/MessageAbortedError" - }, - { - "$ref": "#/components/schemas/StructuredOutputError" - }, - { - "$ref": "#/components/schemas/ContextOverflowError" - }, - { - "$ref": "#/components/schemas/APIError" - } - ] - } - } + "auto": { + "type": "boolean" + }, + "overflow": { + "type": "boolean" } }, - "required": ["type", "properties"] + "required": ["id", "sessionID", "messageID", "type", "auto"] }, - "Event.vcs.branch.updated": { + "Part": { + "anyOf": [ + { + "$ref": "#/components/schemas/TextPart" + }, + { + "$ref": "#/components/schemas/SubtaskPart" + }, + { + "$ref": "#/components/schemas/ReasoningPart" + }, + { + "$ref": "#/components/schemas/FilePart" + }, + { + "$ref": "#/components/schemas/ToolPart" + }, + { + "$ref": "#/components/schemas/StepStartPart" + }, + { + "$ref": "#/components/schemas/StepFinishPart" + }, + { + "$ref": "#/components/schemas/SnapshotPart" + }, + { + "$ref": "#/components/schemas/PatchPart" + }, + { + "$ref": "#/components/schemas/AgentPart" + }, + { + "$ref": "#/components/schemas/RetryPart" + }, + { + "$ref": "#/components/schemas/CompactionPart" + } + ] + }, + "Event.message.part.updated": { "type": "object", "properties": { "type": { "type": "string", - "const": "vcs.branch.updated" + "const": "message.part.updated" }, "properties": { "type": "object", "properties": { - "branch": { - "type": "string" + "sessionID": { + "type": "string", + "pattern": "^ses.*" + }, + "part": { + "$ref": "#/components/schemas/Part" + }, + "time": { + "type": "number" } - } + }, + "required": ["sessionID", "part", "time"] } }, "required": ["type", "properties"] }, - "Event.workspace.ready": { + "Event.message.part.removed": { "type": "object", "properties": { "type": { "type": "string", - "const": "workspace.ready" + "const": "message.part.removed" }, "properties": { "type": "object", "properties": { - "name": { - "type": "string" + "sessionID": { + "type": "string", + "pattern": "^ses.*" + }, + "messageID": { + "type": "string", + "pattern": "^msg.*" + }, + "partID": { + "type": "string", + "pattern": "^prt.*" } }, - "required": ["name"] + "required": ["sessionID", "messageID", "partID"] } }, "required": ["type", "properties"] }, - "Event.workspace.failed": { + "PermissionAction": { + "type": "string", + "enum": ["allow", "deny", "ask"] + }, + "PermissionRule": { "type": "object", "properties": { - "type": { - "type": "string", - "const": "workspace.failed" + "permission": { + "type": "string" }, - "properties": { - "type": "object", - "properties": { - "message": { - "type": "string" - } - }, - "required": ["message"] + "pattern": { + "type": "string" + }, + "action": { + "$ref": "#/components/schemas/PermissionAction" } }, - "required": ["type", "properties"] + "required": ["permission", "pattern", "action"] }, - "Pty": { + "PermissionRuleset": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PermissionRule" + } + }, + "Session": { "type": "object", "properties": { "id": { "type": "string", - "pattern": "^pty.*" + "pattern": "^ses.*" }, - "title": { + "slug": { "type": "string" }, - "command": { + "projectID": { "type": "string" }, - "args": { - "type": "array", - "items": { - "type": "string" - } - }, - "cwd": { + "workspaceID": { + "type": "string", + "pattern": "^wrk.*" + }, + "directory": { "type": "string" }, - "status": { + "parentID": { "type": "string", - "enum": ["running", "exited"] + "pattern": "^ses.*" }, - "pid": { - "type": "number" - } - }, - "required": ["id", "title", "command", "args", "cwd", "status", "pid"] - }, - "Event.pty.created": { - "type": "object", - "properties": { - "type": { - "type": "string", - "const": "pty.created" + "summary": { + "type": "object", + "properties": { + "additions": { + "type": "number" + }, + "deletions": { + "type": "number" + }, + "files": { + "type": "number" + }, + "diffs": { + "type": "array", + "items": { + "$ref": "#/components/schemas/FileDiff" + } + } + }, + "required": ["additions", "deletions", "files"] }, - "properties": { + "share": { "type": "object", "properties": { - "info": { - "$ref": "#/components/schemas/Pty" + "url": { + "type": "string" } }, - "required": ["info"] - } - }, - "required": ["type", "properties"] - }, - "Event.pty.updated": { - "type": "object", - "properties": { - "type": { - "type": "string", - "const": "pty.updated" + "required": ["url"] }, - "properties": { + "title": { + "type": "string" + }, + "version": { + "type": "string" + }, + "time": { "type": "object", "properties": { - "info": { - "$ref": "#/components/schemas/Pty" + "created": { + "type": "number" + }, + "updated": { + "type": "number" + }, + "compacting": { + "type": "number" + }, + "archived": { + "type": "number" } }, - "required": ["info"] - } - }, - "required": ["type", "properties"] - }, - "Event.pty.exited": { - "type": "object", - "properties": { - "type": { - "type": "string", - "const": "pty.exited" + "required": ["created", "updated"] }, - "properties": { + "permission": { + "$ref": "#/components/schemas/PermissionRuleset" + }, + "revert": { "type": "object", "properties": { - "id": { + "messageID": { "type": "string", - "pattern": "^pty.*" + "pattern": "^msg.*" }, - "exitCode": { - "type": "number" + "partID": { + "type": "string", + "pattern": "^prt.*" + }, + "snapshot": { + "type": "string" + }, + "diff": { + "type": "string" } }, - "required": ["id", "exitCode"] + "required": ["messageID"] } }, - "required": ["type", "properties"] + "required": ["id", "slug", "projectID", "directory", "title", "version", "time"] }, - "Event.pty.deleted": { + "Event.session.created": { "type": "object", "properties": { "type": { "type": "string", - "const": "pty.deleted" + "const": "session.created" }, "properties": { "type": "object", "properties": { - "id": { + "sessionID": { "type": "string", - "pattern": "^pty.*" + "pattern": "^ses.*" + }, + "info": { + "$ref": "#/components/schemas/Session" } }, - "required": ["id"] + "required": ["sessionID", "info"] } }, "required": ["type", "properties"] }, - "Event.worktree.ready": { + "Event.session.updated": { "type": "object", "properties": { "type": { "type": "string", - "const": "worktree.ready" + "const": "session.updated" }, "properties": { "type": "object", "properties": { - "name": { - "type": "string" + "sessionID": { + "type": "string", + "pattern": "^ses.*" }, - "branch": { - "type": "string" + "info": { + "$ref": "#/components/schemas/Session" } }, - "required": ["name", "branch"] + "required": ["sessionID", "info"] } }, "required": ["type", "properties"] }, - "Event.worktree.failed": { + "Event.session.deleted": { "type": "object", "properties": { "type": { "type": "string", - "const": "worktree.failed" + "const": "session.deleted" }, "properties": { "type": "object", "properties": { - "message": { - "type": "string" + "sessionID": { + "type": "string", + "pattern": "^ses.*" + }, + "info": { + "$ref": "#/components/schemas/Session" } }, - "required": ["message"] + "required": ["sessionID", "info"] } }, "required": ["type", "properties"] @@ -9709,24 +9757,9 @@ { "$ref": "#/components/schemas/Event.lsp.updated" }, - { - "$ref": "#/components/schemas/Event.file.edited" - }, - { - "$ref": "#/components/schemas/Event.message.updated" - }, - { - "$ref": "#/components/schemas/Event.message.removed" - }, - { - "$ref": "#/components/schemas/Event.message.part.updated" - }, { "$ref": "#/components/schemas/Event.message.part.delta" }, - { - "$ref": "#/components/schemas/Event.message.part.removed" - }, { "$ref": "#/components/schemas/Event.permission.asked" }, @@ -9751,6 +9784,9 @@ { "$ref": "#/components/schemas/Event.session.compacted" }, + { + "$ref": "#/components/schemas/Event.file.edited" + }, { "$ref": "#/components/schemas/Event.file.watcher.updated" }, @@ -9778,15 +9814,6 @@ { "$ref": "#/components/schemas/Event.command.executed" }, - { - "$ref": "#/components/schemas/Event.session.created" - }, - { - "$ref": "#/components/schemas/Event.session.updated" - }, - { - "$ref": "#/components/schemas/Event.session.deleted" - }, { "$ref": "#/components/schemas/Event.session.diff" }, @@ -9819,6 +9846,27 @@ }, { "$ref": "#/components/schemas/Event.worktree.failed" + }, + { + "$ref": "#/components/schemas/Event.message.updated" + }, + { + "$ref": "#/components/schemas/Event.message.removed" + }, + { + "$ref": "#/components/schemas/Event.message.part.updated" + }, + { + "$ref": "#/components/schemas/Event.message.part.removed" + }, + { + "$ref": "#/components/schemas/Event.session.created" + }, + { + "$ref": "#/components/schemas/Event.session.updated" + }, + { + "$ref": "#/components/schemas/Event.session.deleted" } ] }, @@ -9834,6 +9882,311 @@ }, "required": ["directory", "payload"] }, + "SyncEvent.message.updated": { + "type": "object", + "properties": { + "type": { + "type": "string", + "const": "message.updated.1" + }, + "aggregate": { + "type": "string", + "const": "sessionID" + }, + "data": { + "type": "object", + "properties": { + "sessionID": { + "type": "string", + "pattern": "^ses.*" + }, + "info": { + "$ref": "#/components/schemas/Message" + } + }, + "required": ["sessionID", "info"] + } + }, + "required": ["type", "aggregate", "data"] + }, + "SyncEvent.message.removed": { + "type": "object", + "properties": { + "type": { + "type": "string", + "const": "message.removed.1" + }, + "aggregate": { + "type": "string", + "const": "sessionID" + }, + "data": { + "type": "object", + "properties": { + "sessionID": { + "type": "string", + "pattern": "^ses.*" + }, + "messageID": { + "type": "string", + "pattern": "^msg.*" + } + }, + "required": ["sessionID", "messageID"] + } + }, + "required": ["type", "aggregate", "data"] + }, + "SyncEvent.message.part.updated": { + "type": "object", + "properties": { + "type": { + "type": "string", + "const": "message.part.updated.1" + }, + "aggregate": { + "type": "string", + "const": "sessionID" + }, + "data": { + "type": "object", + "properties": { + "sessionID": { + "type": "string", + "pattern": "^ses.*" + }, + "part": { + "$ref": "#/components/schemas/Part" + }, + "time": { + "type": "number" + } + }, + "required": ["sessionID", "part", "time"] + } + }, + "required": ["type", "aggregate", "data"] + }, + "SyncEvent.message.part.removed": { + "type": "object", + "properties": { + "type": { + "type": "string", + "const": "message.part.removed.1" + }, + "aggregate": { + "type": "string", + "const": "sessionID" + }, + "data": { + "type": "object", + "properties": { + "sessionID": { + "type": "string", + "pattern": "^ses.*" + }, + "messageID": { + "type": "string", + "pattern": "^msg.*" + }, + "partID": { + "type": "string", + "pattern": "^prt.*" + } + }, + "required": ["sessionID", "messageID", "partID"] + } + }, + "required": ["type", "aggregate", "data"] + }, + "SyncEvent.session.created": { + "type": "object", + "properties": { + "type": { + "type": "string", + "const": "session.created.1" + }, + "aggregate": { + "type": "string", + "const": "sessionID" + }, + "data": { + "type": "object", + "properties": { + "sessionID": { + "type": "string", + "pattern": "^ses.*" + }, + "info": { + "$ref": "#/components/schemas/Session" + } + }, + "required": ["sessionID", "info"] + } + }, + "required": ["type", "aggregate", "data"] + }, + "SyncEvent.session.updated": { + "type": "object", + "properties": { + "type": { + "type": "string", + "const": "session.updated.1" + }, + "aggregate": { + "type": "string", + "const": "sessionID" + }, + "data": { + "type": "object", + "properties": { + "sessionID": { + "type": "string", + "pattern": "^ses.*" + }, + "info": { + "type": "object", + "properties": { + "id": { + "type": "string", + "pattern": "^ses.*" + }, + "slug": { + "type": "string" + }, + "projectID": { + "type": "string" + }, + "workspaceID": { + "type": "string", + "pattern": "^wrk.*" + }, + "directory": { + "type": "string" + }, + "parentID": { + "type": "string", + "pattern": "^ses.*" + }, + "summary": { + "type": "object", + "properties": { + "additions": { + "type": "number" + }, + "deletions": { + "type": "number" + }, + "files": { + "type": "number" + }, + "diffs": { + "type": "array", + "items": { + "$ref": "#/components/schemas/FileDiff" + } + } + }, + "required": ["additions", "deletions", "files"] + }, + "share": { + "type": "object", + "properties": { + "url": { + "type": "string" + } + } + }, + "title": { + "type": "string" + }, + "version": { + "type": "string" + }, + "time": { + "type": "object", + "properties": { + "created": { + "type": "number" + }, + "updated": { + "type": "number" + }, + "compacting": { + "type": "number" + }, + "archived": { + "type": "number" + } + } + }, + "permission": { + "$ref": "#/components/schemas/PermissionRuleset" + }, + "revert": { + "type": "object", + "properties": { + "messageID": { + "type": "string", + "pattern": "^msg.*" + }, + "partID": { + "type": "string", + "pattern": "^prt.*" + }, + "snapshot": { + "type": "string" + }, + "diff": { + "type": "string" + } + }, + "required": ["messageID"] + } + } + } + }, + "required": ["sessionID", "info"] + } + }, + "required": ["type", "aggregate", "data"] + }, + "SyncEvent.session.deleted": { + "type": "object", + "properties": { + "type": { + "type": "string", + "const": "session.deleted.1" + }, + "aggregate": { + "type": "string", + "const": "sessionID" + }, + "data": { + "type": "object", + "properties": { + "sessionID": { + "type": "string", + "pattern": "^ses.*" + }, + "info": { + "$ref": "#/components/schemas/Session" + } + }, + "required": ["sessionID", "info"] + } + }, + "required": ["type", "aggregate", "data"] + }, + "SyncEvent": { + "type": "object", + "properties": { + "payload": { + "$ref": "#/components/schemas/SyncEvent" + } + }, + "required": ["payload"] + }, "LogLevel": { "description": "Log level", "type": "string", -- cgit v1.2.3