summaryrefslogtreecommitdiffhomepage
path: root/packages/sdk
diff options
context:
space:
mode:
authorJames Long <[email protected]>2026-03-25 10:47:40 -0400
committerGitHub <[email protected]>2026-03-25 10:47:40 -0400
commitb0017bf1b96ef14fc1ecf91c0b9c4b18e2dfea71 (patch)
tree9995f618fae9c35c7308934fe8e5260c6c8fe2aa /packages/sdk
parent0c0c6f3bdb75663837555b07110d7a1b313daeac (diff)
downloadopencode-b0017bf1b96ef14fc1ecf91c0b9c4b18e2dfea71.tar.gz
opencode-b0017bf1b96ef14fc1ecf91c0b9c4b18e2dfea71.zip
feat(core): initial implementation of syncing (#17814)
Diffstat (limited to 'packages/sdk')
-rw-r--r--packages/sdk/js/src/v2/gen/sdk.gen.ts20
-rw-r--r--packages/sdk/js/src/v2/gen/types.gen.ts911
-rw-r--r--packages/sdk/openapi.json2391
3 files changed, 1909 insertions, 1413 deletions
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<T> {
}
}
+export class SyncEvent extends HeyApiClient {
+ /**
+ * Subscribe to global sync events
+ *
+ * Get global sync events
+ */
+ public subscribe<ThrowOnError extends boolean = false>(options?: Options<never, ThrowOnError>) {
+ return (options?.client ?? this.client).sse.get<GlobalSyncEventSubscribeResponses, unknown, ThrowOnError>({
+ 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,6 +83,153 @@ export type EventLspUpdated = {
}
}
+export type EventMessagePartDelta = {
+ type: "message.part.delta"
+ properties: {
+ sessionID: string
+ messageID: string
+ partID: string
+ field: string
+ delta: string
+ }
+}
+
+export type PermissionRequest = {
+ id: string
+ sessionID: string
+ permission: string
+ patterns: Array<string>
+ metadata: {
+ [key: string]: unknown
+ }
+ always: Array<string>
+ tool?: {
+ messageID: string
+ callID: string
+ }
+}
+
+export type EventPermissionAsked = {
+ type: "permission.asked"
+ properties: PermissionRequest
+}
+
+export type EventPermissionReplied = {
+ type: "permission.replied"
+ properties: {
+ sessionID: string
+ requestID: string
+ reply: "once" | "always" | "reject"
+ }
+}
+
+export type SessionStatus =
+ | {
+ type: "idle"
+ }
+ | {
+ type: "retry"
+ attempt: number
+ message: string
+ next: number
+ }
+ | {
+ type: "busy"
+ }
+
+export type EventSessionStatus = {
+ type: "session.status"
+ properties: {
+ sessionID: string
+ status: SessionStatus
+ }
+}
+
+export type EventSessionIdle = {
+ type: "session.idle"
+ properties: {
+ sessionID: string
+ }
+}
+
+export type QuestionOption = {
+ /**
+ * Display text (1-5 words, concise)
+ */
+ label: string
+ /**
+ * Explanation of choice
+ */
+ description: string
+}
+
+export type QuestionInfo = {
+ /**
+ * Complete question
+ */
+ question: string
+ /**
+ * Very short label (max 30 chars)
+ */
+ header: string
+ /**
+ * Available choices
+ */
+ options: Array<QuestionOption>
+ /**
+ * Allow selecting multiple choices
+ */
+ multiple?: boolean
+ /**
+ * Allow typing a custom answer (default: true)
+ */
+ custom?: boolean
+}
+
+export type QuestionRequest = {
+ id: string
+ sessionID: string
+ /**
+ * Questions to ask
+ */
+ questions: Array<QuestionInfo>
+ tool?: {
+ messageID: string
+ callID: string
+ }
+}
+
+export type EventQuestionAsked = {
+ type: "question.asked"
+ properties: QuestionRequest
+}
+
+export type QuestionAnswer = Array<string>
+
+export type EventQuestionReplied = {
+ type: "question.replied"
+ properties: {
+ sessionID: string
+ requestID: string
+ answers: Array<QuestionAnswer>
+ }
+}
+
+export type EventQuestionRejected = {
+ type: "question.rejected"
+ properties: {
+ sessionID: string
+ requestID: string
+ }
+}
+
+export type EventSessionCompacted = {
+ type: "session.compacted"
+ properties: {
+ sessionID: string
+ }
+}
+
export type EventFileEdited = {
type: "file.edited"
properties: {
@@ -90,21 +237,115 @@ export type EventFileEdited = {
}
}
-export type OutputFormatText = {
- type: "text"
+export type EventFileWatcherUpdated = {
+ type: "file.watcher.updated"
+ properties: {
+ file: string
+ event: "add" | "change" | "unlink"
+ }
}
-export type JsonSchema = {
- [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 OutputFormatJsonSchema = {
- type: "json_schema"
- schema: JsonSchema
- retryCount?: number
+export type EventTodoUpdated = {
+ type: "todo.updated"
+ properties: {
+ sessionID: string
+ todos: Array<Todo>
+ }
}
-export type OutputFormat = OutputFormatText | OutputFormatJsonSchema
+export type EventTuiPromptAppend = {
+ type: "tui.prompt.append"
+ properties: {
+ text: string
+ }
+}
+
+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 EventTuiToastShow = {
+ type: "tui.toast.show"
+ properties: {
+ title?: string
+ message: string
+ variant: "info" | "success" | "warning" | "error"
+ /**
+ * Duration in milliseconds
+ */
+ duration?: number
+ }
+}
+
+export type EventTuiSessionSelect = {
+ type: "tui.session.select"
+ properties: {
+ /**
+ * Session ID to navigate to
+ */
+ sessionID: string
+ }
+}
+
+export type EventMcpToolsChanged = {
+ type: "mcp.tools.changed"
+ properties: {
+ server: string
+ }
+}
+
+export type EventMcpBrowserOpenFailed = {
+ type: "mcp.browser.open.failed"
+ properties: {
+ mcpName: string
+ url: string
+ }
+}
+
+export type EventCommandExecuted = {
+ type: "command.executed"
+ properties: {
+ name: string
+ sessionID: string
+ arguments: string
+ messageID: string
+ }
+}
export type FileDiff = {
file: string
@@ -115,29 +356,12 @@ export type FileDiff = {
status?: "added" | "deleted" | "modified"
}
-export type UserMessage = {
- id: string
- sessionID: string
- role: "user"
- time: {
- created: number
- }
- format?: OutputFormat
- summary?: {
- title?: string
- body?: string
- diffs: Array<FileDiff>
- }
- agent: string
- model: {
- providerID: string
- modelID: string
- }
- system?: string
- tools?: {
- [key: string]: boolean
+export type EventSessionDiff = {
+ type: "session.diff"
+ properties: {
+ sessionID: string
+ diff: Array<FileDiff>
}
- variant?: string
}
export type ProviderAuthError = {
@@ -201,6 +425,137 @@ export type ApiError = {
}
}
+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<string>
+ 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
+ }
+}
+
+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 UserMessage = {
+ id: string
+ sessionID: string
+ role: "user"
+ time: {
+ created: number
+ }
+ format?: OutputFormat
+ summary?: {
+ title?: string
+ body?: string
+ diffs: Array<FileDiff>
+ }
+ agent: string
+ model: {
+ providerID: string
+ modelID: string
+ }
+ system?: string
+ tools?: {
+ [key: string]: boolean
+ }
+ variant?: string
+}
+
export type AssistantMessage = {
id: string
sessionID: string
@@ -248,6 +603,7 @@ export type Message = UserMessage | AssistantMessage
export type EventMessageUpdated = {
type: "message.updated"
properties: {
+ sessionID: string
info: Message
}
}
@@ -525,18 +881,9 @@ export type Part =
export type EventMessagePartUpdated = {
type: "message.part.updated"
properties: {
- part: Part
- }
-}
-
-export type EventMessagePartDelta = {
- type: "message.part.delta"
- properties: {
sessionID: string
- messageID: string
- partID: string
- field: string
- delta: string
+ part: Part
+ time: number
}
}
@@ -549,252 +896,6 @@ export type EventMessagePartRemoved = {
}
}
-export type PermissionRequest = {
- id: string
- sessionID: string
- permission: string
- patterns: Array<string>
- metadata: {
- [key: string]: unknown
- }
- always: Array<string>
- tool?: {
- messageID: string
- callID: string
- }
-}
-
-export type EventPermissionAsked = {
- type: "permission.asked"
- properties: PermissionRequest
-}
-
-export type EventPermissionReplied = {
- type: "permission.replied"
- properties: {
- sessionID: string
- requestID: string
- reply: "once" | "always" | "reject"
- }
-}
-
-export type SessionStatus =
- | {
- type: "idle"
- }
- | {
- type: "retry"
- attempt: number
- message: string
- next: number
- }
- | {
- type: "busy"
- }
-
-export type EventSessionStatus = {
- type: "session.status"
- properties: {
- sessionID: string
- status: SessionStatus
- }
-}
-
-export type EventSessionIdle = {
- type: "session.idle"
- properties: {
- sessionID: string
- }
-}
-
-export type QuestionOption = {
- /**
- * Display text (1-5 words, concise)
- */
- label: string
- /**
- * Explanation of choice
- */
- description: string
-}
-
-export type QuestionInfo = {
- /**
- * Complete question
- */
- question: string
- /**
- * Very short label (max 30 chars)
- */
- header: string
- /**
- * Available choices
- */
- options: Array<QuestionOption>
- /**
- * Allow selecting multiple choices
- */
- multiple?: boolean
- /**
- * Allow typing a custom answer (default: true)
- */
- custom?: boolean
-}
-
-export type QuestionRequest = {
- id: string
- sessionID: string
- /**
- * Questions to ask
- */
- questions: Array<QuestionInfo>
- tool?: {
- messageID: string
- callID: string
- }
-}
-
-export type EventQuestionAsked = {
- type: "question.asked"
- properties: QuestionRequest
-}
-
-export type QuestionAnswer = Array<string>
-
-export type EventQuestionReplied = {
- type: "question.replied"
- properties: {
- sessionID: string
- requestID: string
- answers: Array<QuestionAnswer>
- }
-}
-
-export type EventQuestionRejected = {
- type: "question.rejected"
- properties: {
- sessionID: string
- requestID: string
- }
-}
-
-export type EventSessionCompacted = {
- type: "session.compacted"
- properties: {
- sessionID: string
- }
-}
-
-export type EventFileWatcherUpdated = {
- type: "file.watcher.updated"
- properties: {
- file: string
- event: "add" | "change" | "unlink"
- }
-}
-
-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 EventTodoUpdated = {
- type: "todo.updated"
- properties: {
- sessionID: string
- todos: Array<Todo>
- }
-}
-
-export type EventTuiPromptAppend = {
- type: "tui.prompt.append"
- properties: {
- text: string
- }
-}
-
-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 EventTuiToastShow = {
- type: "tui.toast.show"
- properties: {
- title?: string
- message: string
- variant: "info" | "success" | "warning" | "error"
- /**
- * Duration in milliseconds
- */
- duration?: number
- }
-}
-
-export type EventTuiSessionSelect = {
- type: "tui.session.select"
- properties: {
- /**
- * Session ID to navigate to
- */
- sessionID: string
- }
-}
-
-export type EventMcpToolsChanged = {
- type: "mcp.tools.changed"
- properties: {
- server: string
- }
-}
-
-export type EventMcpBrowserOpenFailed = {
- type: "mcp.browser.open.failed"
- properties: {
- mcpName: string
- url: string
- }
-}
-
-export type EventCommandExecuted = {
- type: "command.executed"
- properties: {
- name: string
- sessionID: string
- arguments: string
- messageID: string
- }
-}
-
export type PermissionAction = "allow" | "deny" | "ask"
export type PermissionRule = {
@@ -841,6 +942,7 @@ export type Session = {
export type EventSessionCreated = {
type: "session.created"
properties: {
+ sessionID: string
info: Session
}
}
@@ -848,6 +950,7 @@ export type EventSessionCreated = {
export type EventSessionUpdated = {
type: "session.updated"
properties: {
+ sessionID: string
info: Session
}
}
@@ -855,105 +958,8 @@ export type EventSessionUpdated = {
export type EventSessionDeleted = {
type: "session.deleted"
properties: {
- info: Session
- }
-}
-
-export type EventSessionDiff = {
- type: "session.diff"
- properties: {
sessionID: string
- diff: Array<FileDiff>
- }
-}
-
-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<string>
- 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<FileDiff>
+ }
+ 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,173 +7237,720 @@
},
"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": {
+ "PermissionRequest": {
"type": "object",
"properties": {
- "type": {
+ "id": {
"type": "string",
- "const": "text"
+ "pattern": "^per.*"
+ },
+ "sessionID": {
+ "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"
+ }
+ },
+ "tool": {
+ "type": "object",
+ "properties": {
+ "messageID": {
+ "type": "string",
+ "pattern": "^msg.*"
+ },
+ "callID": {
+ "type": "string"
+ }
+ },
+ "required": ["messageID", "callID"]
}
},
- "required": ["type"]
+ "required": ["id", "sessionID", "permission", "patterns", "metadata", "always"]
},
- "JSONSchema": {
+ "Event.permission.asked": {
"type": "object",
- "propertyNames": {
- "type": "string"
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "permission.asked"
+ },
+ "properties": {
+ "$ref": "#/components/schemas/PermissionRequest"
+ }
},
- "additionalProperties": {}
+ "required": ["type", "properties"]
},
- "OutputFormatJsonSchema": {
+ "Event.permission.replied": {
"type": "object",
"properties": {
"type": {
"type": "string",
- "const": "json_schema"
- },
- "schema": {
- "$ref": "#/components/schemas/JSONSchema"
+ "const": "permission.replied"
},
- "retryCount": {
- "default": 2,
- "type": "integer",
- "minimum": 0,
- "maximum": 9007199254740991
+ "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"]
}
},
- "required": ["type", "schema"]
+ "required": ["type", "properties"]
},
- "OutputFormat": {
+ "SessionStatus": {
"anyOf": [
{
- "$ref": "#/components/schemas/OutputFormatText"
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "idle"
+ }
+ },
+ "required": ["type"]
},
{
- "$ref": "#/components/schemas/OutputFormatJsonSchema"
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "retry"
+ },
+ "attempt": {
+ "type": "number"
+ },
+ "message": {
+ "type": "string"
+ },
+ "next": {
+ "type": "number"
+ }
+ },
+ "required": ["type", "attempt", "message", "next"]
+ },
+ {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "busy"
+ }
+ },
+ "required": ["type"]
}
]
},
- "FileDiff": {
+ "Event.session.status": {
"type": "object",
"properties": {
- "file": {
+ "type": {
+ "type": "string",
+ "const": "session.status"
+ },
+ "properties": {
+ "type": "object",
+ "properties": {
+ "sessionID": {
+ "type": "string",
+ "pattern": "^ses.*"
+ },
+ "status": {
+ "$ref": "#/components/schemas/SessionStatus"
+ }
+ },
+ "required": ["sessionID", "status"]
+ }
+ },
+ "required": ["type", "properties"]
+ },
+ "Event.session.idle": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "session.idle"
+ },
+ "properties": {
+ "type": "object",
+ "properties": {
+ "sessionID": {
+ "type": "string",
+ "pattern": "^ses.*"
+ }
+ },
+ "required": ["sessionID"]
+ }
+ },
+ "required": ["type", "properties"]
+ },
+ "QuestionOption": {
+ "type": "object",
+ "properties": {
+ "label": {
+ "description": "Display text (1-5 words, concise)",
"type": "string"
},
- "before": {
+ "description": {
+ "description": "Explanation of choice",
+ "type": "string"
+ }
+ },
+ "required": ["label", "description"]
+ },
+ "QuestionInfo": {
+ "type": "object",
+ "properties": {
+ "question": {
+ "description": "Complete question",
"type": "string"
},
- "after": {
+ "header": {
+ "description": "Very short label (max 30 chars)",
"type": "string"
},
- "additions": {
- "type": "number"
+ "options": {
+ "description": "Available choices",
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/QuestionOption"
+ }
},
- "deletions": {
- "type": "number"
+ "multiple": {
+ "description": "Allow selecting multiple choices",
+ "type": "boolean"
},
- "status": {
- "type": "string",
- "enum": ["added", "deleted", "modified"]
+ "custom": {
+ "description": "Allow typing a custom answer (default: true)",
+ "type": "boolean"
}
},
- "required": ["file", "before", "after", "additions", "deletions"]
+ "required": ["question", "header", "options"]
},
- "UserMessage": {
+ "QuestionRequest": {
"type": "object",
"properties": {
"id": {
"type": "string",
- "pattern": "^msg.*"
+ "pattern": "^que.*"
},
"sessionID": {
"type": "string",
"pattern": "^ses.*"
},
- "role": {
+ "questions": {
+ "description": "Questions to ask",
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/QuestionInfo"
+ }
+ },
+ "tool": {
+ "type": "object",
+ "properties": {
+ "messageID": {
+ "type": "string",
+ "pattern": "^msg.*"
+ },
+ "callID": {
+ "type": "string"
+ }
+ },
+ "required": ["messageID", "callID"]
+ }
+ },
+ "required": ["id", "sessionID", "questions"]
+ },
+ "Event.question.asked": {
+ "type": "object",
+ "properties": {
+ "type": {
"type": "string",
- "const": "user"
+ "const": "question.asked"
},
- "time": {
+ "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": {
- "created": {
- "type": "number"
+ "sessionID": {
+ "type": "string",
+ "pattern": "^ses.*"
+ },
+ "requestID": {
+ "type": "string",
+ "pattern": "^que.*"
+ },
+ "answers": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/QuestionAnswer"
+ }
}
},
- "required": ["created"]
+ "required": ["sessionID", "requestID", "answers"]
+ }
+ },
+ "required": ["type", "properties"]
+ },
+ "Event.question.rejected": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "question.rejected"
},
- "format": {
- "$ref": "#/components/schemas/OutputFormat"
+ "properties": {
+ "type": "object",
+ "properties": {
+ "sessionID": {
+ "type": "string",
+ "pattern": "^ses.*"
+ },
+ "requestID": {
+ "type": "string",
+ "pattern": "^que.*"
+ }
+ },
+ "required": ["sessionID", "requestID"]
+ }
+ },
+ "required": ["type", "properties"]
+ },
+ "Event.session.compacted": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "session.compacted"
},
- "summary": {
+ "properties": {
"type": "object",
"properties": {
- "title": {
+ "sessionID": {
+ "type": "string",
+ "pattern": "^ses.*"
+ }
+ },
+ "required": ["sessionID"]
+ }
+ },
+ "required": ["type", "properties"]
+ },
+ "Event.file.edited": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "file.edited"
+ },
+ "properties": {
+ "type": "object",
+ "properties": {
+ "file": {
"type": "string"
- },
- "body": {
+ }
+ },
+ "required": ["file"]
+ }
+ },
+ "required": ["type", "properties"]
+ },
+ "Event.file.watcher.updated": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "file.watcher.updated"
+ },
+ "properties": {
+ "type": "object",
+ "properties": {
+ "file": {
"type": "string"
},
- "diffs": {
+ "event": {
+ "anyOf": [
+ {
+ "type": "string",
+ "const": "add"
+ },
+ {
+ "type": "string",
+ "const": "change"
+ },
+ {
+ "type": "string",
+ "const": "unlink"
+ }
+ ]
+ }
+ },
+ "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"
+ },
+ "priority": {
+ "description": "Priority level of the task: high, medium, low",
+ "type": "string"
+ }
+ },
+ "required": ["content", "status", "priority"]
+ },
+ "Event.todo.updated": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "todo.updated"
+ },
+ "properties": {
+ "type": "object",
+ "properties": {
+ "sessionID": {
+ "type": "string",
+ "pattern": "^ses.*"
+ },
+ "todos": {
"type": "array",
"items": {
- "$ref": "#/components/schemas/FileDiff"
+ "$ref": "#/components/schemas/Todo"
}
}
},
- "required": ["diffs"]
+ "required": ["sessionID", "todos"]
+ }
+ },
+ "required": ["type", "properties"]
+ },
+ "Event.tui.prompt.append": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "tui.prompt.append"
},
- "agent": {
- "type": "string"
+ "properties": {
+ "type": "object",
+ "properties": {
+ "text": {
+ "type": "string"
+ }
+ },
+ "required": ["text"]
+ }
+ },
+ "required": ["type", "properties"]
+ },
+ "Event.tui.command.execute": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "tui.command.execute"
},
- "model": {
+ "properties": {
"type": "object",
"properties": {
- "providerID": {
+ "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"]
+ }
+ },
+ "required": ["type", "properties"]
+ },
+ "Event.tui.toast.show": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "tui.toast.show"
+ },
+ "properties": {
+ "type": "object",
+ "properties": {
+ "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"]
+ "required": ["message", "variant"]
+ }
+ },
+ "required": ["type", "properties"]
+ },
+ "Event.tui.session.select": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "tui.session.select"
},
- "system": {
- "type": "string"
+ "properties": {
+ "type": "object",
+ "properties": {
+ "sessionID": {
+ "description": "Session ID to navigate to",
+ "type": "string",
+ "pattern": "^ses.*"
+ }
+ },
+ "required": ["sessionID"]
+ }
+ },
+ "required": ["type", "properties"]
+ },
+ "Event.mcp.tools.changed": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "mcp.tools.changed"
},
- "tools": {
+ "properties": {
"type": "object",
- "propertyNames": {
- "type": "string"
+ "properties": {
+ "server": {
+ "type": "string"
+ }
},
- "additionalProperties": {
- "type": "boolean"
- }
+ "required": ["server"]
+ }
+ },
+ "required": ["type", "properties"]
+ },
+ "Event.mcp.browser.open.failed": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "mcp.browser.open.failed"
},
- "variant": {
+ "properties": {
+ "type": "object",
+ "properties": {
+ "mcpName": {
+ "type": "string"
+ },
+ "url": {
+ "type": "string"
+ }
+ },
+ "required": ["mcpName", "url"]
+ }
+ },
+ "required": ["type", "properties"]
+ },
+ "Event.command.executed": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "command.executed"
+ },
+ "properties": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "sessionID": {
+ "type": "string",
+ "pattern": "^ses.*"
+ },
+ "arguments": {
+ "type": "string"
+ },
+ "messageID": {
+ "type": "string",
+ "pattern": "^msg.*"
+ }
+ },
+ "required": ["name", "sessionID", "arguments", "messageID"]
+ }
+ },
+ "required": ["type", "properties"]
+ },
+ "FileDiff": {
+ "type": "object",
+ "properties": {
+ "file": {
+ "type": "string"
+ },
+ "before": {
+ "type": "string"
+ },
+ "after": {
"type": "string"
+ },
+ "additions": {
+ "type": "number"
+ },
+ "deletions": {
+ "type": "number"
+ },
+ "status": {
+ "type": "string",
+ "enum": ["added", "deleted", "modified"]
}
},
- "required": ["id", "sessionID", "role", "time", "agent", "model"]
+ "required": ["file", "before", "after", "additions", "deletions"]
+ },
+ "Event.session.diff": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "session.diff"
+ },
+ "properties": {
+ "type": "object",
+ "properties": {
+ "sessionID": {
+ "type": "string",
+ "pattern": "^ses.*"
+ },
+ "diff": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/FileDiff"
+ }
+ }
+ },
+ "required": ["sessionID", "diff"]
+ }
+ },
+ "required": ["type", "properties"]
},
"ProviderAuthError": {
"type": "object",
@@ -7544,6 +8116,384 @@
},
"required": ["name", "data"]
},
+ "Event.session.error": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "session.error"
+ },
+ "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": ["type", "properties"]
+ },
+ "Event.vcs.branch.updated": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "vcs.branch.updated"
+ },
+ "properties": {
+ "type": "object",
+ "properties": {
+ "branch": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "required": ["type", "properties"]
+ },
+ "Event.workspace.ready": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "workspace.ready"
+ },
+ "properties": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string"
+ }
+ },
+ "required": ["name"]
+ }
+ },
+ "required": ["type", "properties"]
+ },
+ "Event.workspace.failed": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "workspace.failed"
+ },
+ "properties": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": ["message"]
+ }
+ },
+ "required": ["type", "properties"]
+ },
+ "Pty": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "string",
+ "pattern": "^pty.*"
+ },
+ "title": {
+ "type": "string"
+ },
+ "command": {
+ "type": "string"
+ },
+ "args": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "cwd": {
+ "type": "string"
+ },
+ "status": {
+ "type": "string",
+ "enum": ["running", "exited"]
+ },
+ "pid": {
+ "type": "number"
+ }
+ },
+ "required": ["id", "title", "command", "args", "cwd", "status", "pid"]
+ },
+ "Event.pty.created": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "pty.created"
+ },
+ "properties": {
+ "type": "object",
+ "properties": {
+ "info": {
+ "$ref": "#/components/schemas/Pty"
+ }
+ },
+ "required": ["info"]
+ }
+ },
+ "required": ["type", "properties"]
+ },
+ "Event.pty.updated": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "pty.updated"
+ },
+ "properties": {
+ "type": "object",
+ "properties": {
+ "info": {
+ "$ref": "#/components/schemas/Pty"
+ }
+ },
+ "required": ["info"]
+ }
+ },
+ "required": ["type", "properties"]
+ },
+ "Event.pty.exited": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "pty.exited"
+ },
+ "properties": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "string",
+ "pattern": "^pty.*"
+ },
+ "exitCode": {
+ "type": "number"
+ }
+ },
+ "required": ["id", "exitCode"]
+ }
+ },
+ "required": ["type", "properties"]
+ },
+ "Event.pty.deleted": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "pty.deleted"
+ },
+ "properties": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "string",
+ "pattern": "^pty.*"
+ }
+ },
+ "required": ["id"]
+ }
+ },
+ "required": ["type", "properties"]
+ },
+ "Event.worktree.ready": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "worktree.ready"
+ },
+ "properties": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "branch": {
+ "type": "string"
+ }
+ },
+ "required": ["name", "branch"]
+ }
+ },
+ "required": ["type", "properties"]
+ },
+ "Event.worktree.failed": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "worktree.failed"
+ },
+ "properties": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": ["message"]
+ }
+ },
+ "required": ["type", "properties"]
+ },
+ "OutputFormatText": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "text"
+ }
+ },
+ "required": ["type"]
+ },
+ "JSONSchema": {
+ "type": "object",
+ "propertyNames": {
+ "type": "string"
+ },
+ "additionalProperties": {}
+ },
+ "OutputFormatJsonSchema": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "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"
+ },
+ {
+ "$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": {
+ "created": {
+ "type": "number"
+ }
+ },
+ "required": ["created"]
+ },
+ "format": {
+ "$ref": "#/components/schemas/OutputFormat"
+ },
+ "summary": {
+ "type": "object",
+ "properties": {
+ "title": {
+ "type": "string"
+ },
+ "body": {
+ "type": "string"
+ },
+ "diffs": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/FileDiff"
+ }
+ }
+ },
+ "required": ["diffs"]
+ },
+ "agent": {
+ "type": "string"
+ },
+ "model": {
+ "type": "object",
+ "properties": {
+ "providerID": {
+ "type": "string"
+ },
+ "modelID": {
+ "type": "string"
+ }
+ },
+ "required": ["providerID", "modelID"]
+ },
+ "system": {
+ "type": "string"
+ },
+ "tools": {
+ "type": "object",
+ "propertyNames": {
+ "type": "string"
+ },
+ "additionalProperties": {
+ "type": "boolean"
+ }
+ },
+ "variant": {
+ "type": "string"
+ }
+ },
+ "required": ["id", "sessionID", "role", "time", "agent", "model"]
+ },
"AssistantMessage": {
"type": "object",
"properties": {
@@ -7703,11 +8653,15 @@
"properties": {
"type": "object",
"properties": {
+ "sessionID": {
+ "type": "string",
+ "pattern": "^ses.*"
+ },
"info": {
"$ref": "#/components/schemas/Message"
}
},
- "required": ["info"]
+ "required": ["sessionID", "info"]
}
},
"required": ["type", "properties"]
@@ -8535,45 +9489,18 @@
"properties": {
"type": "object",
"properties": {
- "part": {
- "$ref": "#/components/schemas/Part"
- }
- },
- "required": ["part"]
- }
- },
- "required": ["type", "properties"]
- },
- "Event.message.part.delta": {
- "type": "object",
- "properties": {
- "type": {
- "type": "string",
- "const": "message.part.delta"
- },
- "properties": {
- "type": "object",
- "properties": {
"sessionID": {
"type": "string",
"pattern": "^ses.*"
},
- "messageID": {
- "type": "string",
- "pattern": "^msg.*"
- },
- "partID": {
- "type": "string",
- "pattern": "^prt.*"
- },
- "field": {
- "type": "string"
+ "part": {
+ "$ref": "#/components/schemas/Part"
},
- "delta": {
- "type": "string"
+ "time": {
+ "type": "number"
}
},
- "required": ["sessionID", "messageID", "partID", "field", "delta"]
+ "required": ["sessionID", "part", "time"]
}
},
"required": ["type", "properties"]
@@ -8606,617 +9533,6 @@
},
"required": ["type", "properties"]
},
- "PermissionRequest": {
- "type": "object",
- "properties": {
- "id": {
- "type": "string",
- "pattern": "^per.*"
- },
- "sessionID": {
- "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"
- }
- },
- "tool": {
- "type": "object",
- "properties": {
- "messageID": {
- "type": "string",
- "pattern": "^msg.*"
- },
- "callID": {
- "type": "string"
- }
- },
- "required": ["messageID", "callID"]
- }
- },
- "required": ["id", "sessionID", "permission", "patterns", "metadata", "always"]
- },
- "Event.permission.asked": {
- "type": "object",
- "properties": {
- "type": {
- "type": "string",
- "const": "permission.asked"
- },
- "properties": {
- "$ref": "#/components/schemas/PermissionRequest"
- }
- },
- "required": ["type", "properties"]
- },
- "Event.permission.replied": {
- "type": "object",
- "properties": {
- "type": {
- "type": "string",
- "const": "permission.replied"
- },
- "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"]
- }
- },
- "required": ["type", "properties"]
- },
- "SessionStatus": {
- "anyOf": [
- {
- "type": "object",
- "properties": {
- "type": {
- "type": "string",
- "const": "idle"
- }
- },
- "required": ["type"]
- },
- {
- "type": "object",
- "properties": {
- "type": {
- "type": "string",
- "const": "retry"
- },
- "attempt": {
- "type": "number"
- },
- "message": {
- "type": "string"
- },
- "next": {
- "type": "number"
- }
- },
- "required": ["type", "attempt", "message", "next"]
- },
- {
- "type": "object",
- "properties": {
- "type": {
- "type": "string",
- "const": "busy"
- }
- },
- "required": ["type"]
- }
- ]
- },
- "Event.session.status": {
- "type": "object",
- "properties": {
- "type": {
- "type": "string",
- "const": "session.status"
- },
- "properties": {
- "type": "object",
- "properties": {
- "sessionID": {
- "type": "string",
- "pattern": "^ses.*"
- },
- "status": {
- "$ref": "#/components/schemas/SessionStatus"
- }
- },
- "required": ["sessionID", "status"]
- }
- },
- "required": ["type", "properties"]
- },
- "Event.session.idle": {
- "type": "object",
- "properties": {
- "type": {
- "type": "string",
- "const": "session.idle"
- },
- "properties": {
- "type": "object",
- "properties": {
- "sessionID": {
- "type": "string",
- "pattern": "^ses.*"
- }
- },
- "required": ["sessionID"]
- }
- },
- "required": ["type", "properties"]
- },
- "QuestionOption": {
- "type": "object",
- "properties": {
- "label": {
- "description": "Display text (1-5 words, concise)",
- "type": "string"
- },
- "description": {
- "description": "Explanation of choice",
- "type": "string"
- }
- },
- "required": ["label", "description"]
- },
- "QuestionInfo": {
- "type": "object",
- "properties": {
- "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",
- "pattern": "^que.*"
- },
- "sessionID": {
- "type": "string",
- "pattern": "^ses.*"
- },
- "questions": {
- "description": "Questions to ask",
- "type": "array",
- "items": {
- "$ref": "#/components/schemas/QuestionInfo"
- }
- },
- "tool": {
- "type": "object",
- "properties": {
- "messageID": {
- "type": "string",
- "pattern": "^msg.*"
- },
- "callID": {
- "type": "string"
- }
- },
- "required": ["messageID", "callID"]
- }
- },
- "required": ["id", "sessionID", "questions"]
- },
- "Event.question.asked": {
- "type": "object",
- "properties": {
- "type": {
- "type": "string",
- "const": "question.asked"
- },
- "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": {
- "sessionID": {
- "type": "string",
- "pattern": "^ses.*"
- },
- "requestID": {
- "type": "string",
- "pattern": "^que.*"
- },
- "answers": {
- "type": "array",
- "items": {
- "$ref": "#/components/schemas/QuestionAnswer"
- }
- }
- },
- "required": ["sessionID", "requestID", "answers"]
- }
- },
- "required": ["type", "properties"]
- },
- "Event.question.rejected": {
- "type": "object",
- "properties": {
- "type": {
- "type": "string",
- "const": "question.rejected"
- },
- "properties": {
- "type": "object",
- "properties": {
- "sessionID": {
- "type": "string",
- "pattern": "^ses.*"
- },
- "requestID": {
- "type": "string",
- "pattern": "^que.*"
- }
- },
- "required": ["sessionID", "requestID"]
- }
- },
- "required": ["type", "properties"]
- },
- "Event.session.compacted": {
- "type": "object",
- "properties": {
- "type": {
- "type": "string",
- "const": "session.compacted"
- },
- "properties": {
- "type": "object",
- "properties": {
- "sessionID": {
- "type": "string",
- "pattern": "^ses.*"
- }
- },
- "required": ["sessionID"]
- }
- },
- "required": ["type", "properties"]
- },
- "Event.file.watcher.updated": {
- "type": "object",
- "properties": {
- "type": {
- "type": "string",
- "const": "file.watcher.updated"
- },
- "properties": {
- "type": "object",
- "properties": {
- "file": {
- "type": "string"
- },
- "event": {
- "anyOf": [
- {
- "type": "string",
- "const": "add"
- },
- {
- "type": "string",
- "const": "change"
- },
- {
- "type": "string",
- "const": "unlink"
- }
- ]
- }
- },
- "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"
- },
- "priority": {
- "description": "Priority level of the task: high, medium, low",
- "type": "string"
- }
- },
- "required": ["content", "status", "priority"]
- },
- "Event.todo.updated": {
- "type": "object",
- "properties": {
- "type": {
- "type": "string",
- "const": "todo.updated"
- },
- "properties": {
- "type": "object",
- "properties": {
- "sessionID": {
- "type": "string",
- "pattern": "^ses.*"
- },
- "todos": {
- "type": "array",
- "items": {
- "$ref": "#/components/schemas/Todo"
- }
- }
- },
- "required": ["sessionID", "todos"]
- }
- },
- "required": ["type", "properties"]
- },
- "Event.tui.prompt.append": {
- "type": "object",
- "properties": {
- "type": {
- "type": "string",
- "const": "tui.prompt.append"
- },
- "properties": {
- "type": "object",
- "properties": {
- "text": {
- "type": "string"
- }
- },
- "required": ["text"]
- }
- },
- "required": ["type", "properties"]
- },
- "Event.tui.command.execute": {
- "type": "object",
- "properties": {
- "type": {
- "type": "string",
- "const": "tui.command.execute"
- },
- "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"]
- }
- },
- "required": ["type", "properties"]
- },
- "Event.tui.toast.show": {
- "type": "object",
- "properties": {
- "type": {
- "type": "string",
- "const": "tui.toast.show"
- },
- "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"]
- }
- },
- "required": ["type", "properties"]
- },
- "Event.tui.session.select": {
- "type": "object",
- "properties": {
- "type": {
- "type": "string",
- "const": "tui.session.select"
- },
- "properties": {
- "type": "object",
- "properties": {
- "sessionID": {
- "description": "Session ID to navigate to",
- "type": "string",
- "pattern": "^ses.*"
- }
- },
- "required": ["sessionID"]
- }
- },
- "required": ["type", "properties"]
- },
- "Event.mcp.tools.changed": {
- "type": "object",
- "properties": {
- "type": {
- "type": "string",
- "const": "mcp.tools.changed"
- },
- "properties": {
- "type": "object",
- "properties": {
- "server": {
- "type": "string"
- }
- },
- "required": ["server"]
- }
- },
- "required": ["type", "properties"]
- },
- "Event.mcp.browser.open.failed": {
- "type": "object",
- "properties": {
- "type": {
- "type": "string",
- "const": "mcp.browser.open.failed"
- },
- "properties": {
- "type": "object",
- "properties": {
- "mcpName": {
- "type": "string"
- },
- "url": {
- "type": "string"
- }
- },
- "required": ["mcpName", "url"]
- }
- },
- "required": ["type", "properties"]
- },
- "Event.command.executed": {
- "type": "object",
- "properties": {
- "type": {
- "type": "string",
- "const": "command.executed"
- },
- "properties": {
- "type": "object",
- "properties": {
- "name": {
- "type": "string"
- },
- "sessionID": {
- "type": "string",
- "pattern": "^ses.*"
- },
- "arguments": {
- "type": "string"
- },
- "messageID": {
- "type": "string",
- "pattern": "^msg.*"
- }
- },
- "required": ["name", "sessionID", "arguments", "messageID"]
- }
- },
- "required": ["type", "properties"]
- },
"PermissionAction": {
"type": "string",
"enum": ["allow", "deny", "ask"]
@@ -9356,11 +9672,15 @@
"properties": {
"type": "object",
"properties": {
+ "sessionID": {
+ "type": "string",
+ "pattern": "^ses.*"
+ },
"info": {
"$ref": "#/components/schemas/Session"
}
},
- "required": ["info"]
+ "required": ["sessionID", "info"]
}
},
"required": ["type", "properties"]
@@ -9375,66 +9695,25 @@
"properties": {
"type": "object",
"properties": {
- "info": {
- "$ref": "#/components/schemas/Session"
- }
- },
- "required": ["info"]
- }
- },
- "required": ["type", "properties"]
- },
- "Event.session.deleted": {
- "type": "object",
- "properties": {
- "type": {
- "type": "string",
- "const": "session.deleted"
- },
- "properties": {
- "type": "object",
- "properties": {
- "info": {
- "$ref": "#/components/schemas/Session"
- }
- },
- "required": ["info"]
- }
- },
- "required": ["type", "properties"]
- },
- "Event.session.diff": {
- "type": "object",
- "properties": {
- "type": {
- "type": "string",
- "const": "session.diff"
- },
- "properties": {
- "type": "object",
- "properties": {
"sessionID": {
"type": "string",
"pattern": "^ses.*"
},
- "diff": {
- "type": "array",
- "items": {
- "$ref": "#/components/schemas/FileDiff"
- }
+ "info": {
+ "$ref": "#/components/schemas/Session"
}
},
- "required": ["sessionID", "diff"]
+ "required": ["sessionID", "info"]
}
},
"required": ["type", "properties"]
},
- "Event.session.error": {
+ "Event.session.deleted": {
"type": "object",
"properties": {
"type": {
"type": "string",
- "const": "session.error"
+ "const": "session.deleted"
},
"properties": {
"type": "object",
@@ -9443,242 +9722,11 @@
"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": ["type", "properties"]
- },
- "Event.vcs.branch.updated": {
- "type": "object",
- "properties": {
- "type": {
- "type": "string",
- "const": "vcs.branch.updated"
- },
- "properties": {
- "type": "object",
- "properties": {
- "branch": {
- "type": "string"
- }
- }
- }
- },
- "required": ["type", "properties"]
- },
- "Event.workspace.ready": {
- "type": "object",
- "properties": {
- "type": {
- "type": "string",
- "const": "workspace.ready"
- },
- "properties": {
- "type": "object",
- "properties": {
- "name": {
- "type": "string"
- }
- },
- "required": ["name"]
- }
- },
- "required": ["type", "properties"]
- },
- "Event.workspace.failed": {
- "type": "object",
- "properties": {
- "type": {
- "type": "string",
- "const": "workspace.failed"
- },
- "properties": {
- "type": "object",
- "properties": {
- "message": {
- "type": "string"
- }
- },
- "required": ["message"]
- }
- },
- "required": ["type", "properties"]
- },
- "Pty": {
- "type": "object",
- "properties": {
- "id": {
- "type": "string",
- "pattern": "^pty.*"
- },
- "title": {
- "type": "string"
- },
- "command": {
- "type": "string"
- },
- "args": {
- "type": "array",
- "items": {
- "type": "string"
- }
- },
- "cwd": {
- "type": "string"
- },
- "status": {
- "type": "string",
- "enum": ["running", "exited"]
- },
- "pid": {
- "type": "number"
- }
- },
- "required": ["id", "title", "command", "args", "cwd", "status", "pid"]
- },
- "Event.pty.created": {
- "type": "object",
- "properties": {
- "type": {
- "type": "string",
- "const": "pty.created"
- },
- "properties": {
- "type": "object",
- "properties": {
- "info": {
- "$ref": "#/components/schemas/Pty"
- }
- },
- "required": ["info"]
- }
- },
- "required": ["type", "properties"]
- },
- "Event.pty.updated": {
- "type": "object",
- "properties": {
- "type": {
- "type": "string",
- "const": "pty.updated"
- },
- "properties": {
- "type": "object",
- "properties": {
"info": {
- "$ref": "#/components/schemas/Pty"
- }
- },
- "required": ["info"]
- }
- },
- "required": ["type", "properties"]
- },
- "Event.pty.exited": {
- "type": "object",
- "properties": {
- "type": {
- "type": "string",
- "const": "pty.exited"
- },
- "properties": {
- "type": "object",
- "properties": {
- "id": {
- "type": "string",
- "pattern": "^pty.*"
- },
- "exitCode": {
- "type": "number"
- }
- },
- "required": ["id", "exitCode"]
- }
- },
- "required": ["type", "properties"]
- },
- "Event.pty.deleted": {
- "type": "object",
- "properties": {
- "type": {
- "type": "string",
- "const": "pty.deleted"
- },
- "properties": {
- "type": "object",
- "properties": {
- "id": {
- "type": "string",
- "pattern": "^pty.*"
- }
- },
- "required": ["id"]
- }
- },
- "required": ["type", "properties"]
- },
- "Event.worktree.ready": {
- "type": "object",
- "properties": {
- "type": {
- "type": "string",
- "const": "worktree.ready"
- },
- "properties": {
- "type": "object",
- "properties": {
- "name": {
- "type": "string"
- },
- "branch": {
- "type": "string"
- }
- },
- "required": ["name", "branch"]
- }
- },
- "required": ["type", "properties"]
- },
- "Event.worktree.failed": {
- "type": "object",
- "properties": {
- "type": {
- "type": "string",
- "const": "worktree.failed"
- },
- "properties": {
- "type": "object",
- "properties": {
- "message": {
- "type": "string"
+ "$ref": "#/components/schemas/Session"
}
},
- "required": ["message"]
+ "required": ["sessionID", "info"]
}
},
"required": ["type", "properties"]
@@ -9710,24 +9758,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"
},
{
@@ -9752,6 +9785,9 @@
"$ref": "#/components/schemas/Event.session.compacted"
},
{
+ "$ref": "#/components/schemas/Event.file.edited"
+ },
+ {
"$ref": "#/components/schemas/Event.file.watcher.updated"
},
{
@@ -9779,15 +9815,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",