diff options
| author | Dax <[email protected]> | 2026-05-02 22:09:48 -0400 |
|---|---|---|
| committer | GitHub <[email protected]> | 2026-05-02 22:09:48 -0400 |
| commit | a3bc5d35b0f8f542d4531193b8816bc8b55363e3 (patch) | |
| tree | 8a305b985e2fc0a1e05060760fd67d890dace443 /packages/sdk/js/src | |
| parent | 1409a0715cd9f0bd92b9c1b736055791f336324c (diff) | |
| download | opencode-a3bc5d35b0f8f542d4531193b8816bc8b55363e3.tar.gz opencode-a3bc5d35b0f8f542d4531193b8816bc8b55363e3.zip | |
Refactor v2 session events as schemas (#24512)
Diffstat (limited to 'packages/sdk/js/src')
| -rw-r--r-- | packages/sdk/js/src/v2/gen/sdk.gen.ts | 2763 | ||||
| -rw-r--r-- | packages/sdk/js/src/v2/gen/types.gen.ts | 5209 |
2 files changed, 4643 insertions, 3329 deletions
diff --git a/packages/sdk/js/src/v2/gen/sdk.gen.ts b/packages/sdk/js/src/v2/gen/sdk.gen.ts index 67261d749..74c584462 100644 --- a/packages/sdk/js/src/v2/gen/sdk.gen.ts +++ b/packages/sdk/js/src/v2/gen/sdk.gen.ts @@ -20,10 +20,10 @@ import type { ConfigUpdateErrors, ConfigUpdateResponses, EventSubscribeResponses, - EventTuiCommandExecute, - EventTuiPromptAppend, - EventTuiSessionSelect, - EventTuiToastShow, + EventTuiCommandExecute2, + EventTuiPromptAppend2, + EventTuiSessionSelect2, + EventTuiToastShow2, ExperimentalConsoleGetResponses, ExperimentalConsoleListOrgsResponses, ExperimentalConsoleSwitchOrgResponses, @@ -90,6 +90,7 @@ import type { ProjectListResponses, ProjectUpdateErrors, ProjectUpdateResponses, + Prompt, ProviderAuthResponses, ProviderListResponses, ProviderOauthAuthorizeErrors, @@ -126,6 +127,7 @@ import type { SessionDeleteMessageErrors, SessionDeleteMessageResponses, SessionDeleteResponses, + SessionDelivery, SessionDiffResponses, SessionForkResponses, SessionGetErrors, @@ -187,6 +189,14 @@ import type { TuiSelectSessionResponses, TuiShowToastResponses, TuiSubmitPromptResponses, + V2SessionCompactResponses, + V2SessionContextResponses, + V2SessionListErrors, + V2SessionListResponses, + V2SessionMessagesErrors, + V2SessionMessagesResponses, + V2SessionPromptResponses, + V2SessionWaitResponses, VcsDiffResponses, VcsGetResponses, WorktreeCreateErrors, @@ -244,6 +254,169 @@ class HeyApiRegistry<T> { } } +export class Auth extends HeyApiClient { + /** + * Remove auth credentials + * + * Remove authentication credentials + */ + public remove<ThrowOnError extends boolean = false>( + parameters: { + providerID: string + }, + options?: Options<never, ThrowOnError>, + ) { + const params = buildClientParams([parameters], [{ args: [{ in: "path", key: "providerID" }] }]) + return (options?.client ?? this.client).delete<AuthRemoveResponses, AuthRemoveErrors, ThrowOnError>({ + url: "/auth/{providerID}", + ...options, + ...params, + }) + } + + /** + * Set auth credentials + * + * Set authentication credentials + */ + public set<ThrowOnError extends boolean = false>( + parameters: { + providerID: string + auth?: Auth3 + }, + options?: Options<never, ThrowOnError>, + ) { + const params = buildClientParams( + [parameters], + [ + { + args: [ + { in: "path", key: "providerID" }, + { key: "auth", map: "body" }, + ], + }, + ], + ) + return (options?.client ?? this.client).put<AuthSetResponses, AuthSetErrors, ThrowOnError>({ + url: "/auth/{providerID}", + ...options, + ...params, + headers: { + "Content-Type": "application/json", + ...options?.headers, + ...params.headers, + }, + }) + } +} + +export class App extends HeyApiClient { + /** + * Write log + * + * Write a log entry to the server logs with specified level and metadata. + */ + public log<ThrowOnError extends boolean = false>( + parameters?: { + directory?: string + workspace?: string + service?: string + level?: "debug" | "info" | "error" | "warn" + message?: string + extra?: { + [key: string]: unknown + } + }, + options?: Options<never, ThrowOnError>, + ) { + const params = buildClientParams( + [parameters], + [ + { + args: [ + { in: "query", key: "directory" }, + { in: "query", key: "workspace" }, + { in: "body", key: "service" }, + { in: "body", key: "level" }, + { in: "body", key: "message" }, + { in: "body", key: "extra" }, + ], + }, + ], + ) + return (options?.client ?? this.client).post<AppLogResponses, AppLogErrors, ThrowOnError>({ + url: "/log", + ...options, + ...params, + headers: { + "Content-Type": "application/json", + ...options?.headers, + ...params.headers, + }, + }) + } + + /** + * List agents + * + * Get a list of all available AI agents in the OpenCode system. + */ + public agents<ThrowOnError extends boolean = false>( + parameters?: { + directory?: string + workspace?: string + }, + options?: Options<never, ThrowOnError>, + ) { + const params = buildClientParams( + [parameters], + [ + { + args: [ + { in: "query", key: "directory" }, + { in: "query", key: "workspace" }, + ], + }, + ], + ) + return (options?.client ?? this.client).get<AppAgentsResponses, unknown, ThrowOnError>({ + url: "/agent", + ...options, + ...params, + }) + } + + /** + * List skills + * + * Get a list of all available skills in the OpenCode system. + */ + public skills<ThrowOnError extends boolean = false>( + parameters?: { + directory?: string + workspace?: string + }, + options?: Options<never, ThrowOnError>, + ) { + const params = buildClientParams( + [parameters], + [ + { + args: [ + { in: "query", key: "directory" }, + { in: "query", key: "workspace" }, + ], + }, + ], + ) + return (options?.client ?? this.client).get<AppSkillsResponses, unknown, ThrowOnError>({ + url: "/skill", + ...options, + ...params, + }) + } +} + export class Config extends HeyApiClient { /** * Get global configuration @@ -349,35 +522,48 @@ export class Global extends HeyApiClient { } } -export class Auth extends HeyApiClient { +export class Event extends HeyApiClient { /** - * Remove auth credentials + * Subscribe to events * - * Remove authentication credentials + * Get events */ - public remove<ThrowOnError extends boolean = false>( - parameters: { - providerID: string + public subscribe<ThrowOnError extends boolean = false>( + parameters?: { + directory?: string + workspace?: string }, options?: Options<never, ThrowOnError>, ) { - const params = buildClientParams([parameters], [{ args: [{ in: "path", key: "providerID" }] }]) - return (options?.client ?? this.client).delete<AuthRemoveResponses, AuthRemoveErrors, ThrowOnError>({ - url: "/auth/{providerID}", + const params = buildClientParams( + [parameters], + [ + { + args: [ + { in: "query", key: "directory" }, + { in: "query", key: "workspace" }, + ], + }, + ], + ) + return (options?.client ?? this.client).sse.get<EventSubscribeResponses, unknown, ThrowOnError>({ + url: "/event", ...options, ...params, }) } +} +export class Config2 extends HeyApiClient { /** - * Set auth credentials + * Get configuration * - * Set authentication credentials + * Retrieve the current OpenCode configuration settings and preferences. */ - public set<ThrowOnError extends boolean = false>( - parameters: { - providerID: string - auth?: Auth3 + public get<ThrowOnError extends boolean = false>( + parameters?: { + directory?: string + workspace?: string }, options?: Options<never, ThrowOnError>, ) { @@ -386,14 +572,46 @@ export class Auth extends HeyApiClient { [ { args: [ - { in: "path", key: "providerID" }, - { key: "auth", map: "body" }, + { in: "query", key: "directory" }, + { in: "query", key: "workspace" }, ], }, ], ) - return (options?.client ?? this.client).put<AuthSetResponses, AuthSetErrors, ThrowOnError>({ - url: "/auth/{providerID}", + return (options?.client ?? this.client).get<ConfigGetResponses, unknown, ThrowOnError>({ + url: "/config", + ...options, + ...params, + }) + } + + /** + * Update configuration + * + * Update OpenCode configuration settings and preferences. + */ + public update<ThrowOnError extends boolean = false>( + parameters?: { + directory?: string + workspace?: string + config?: Config3 + }, + options?: Options<never, ThrowOnError>, + ) { + const params = buildClientParams( + [parameters], + [ + { + args: [ + { in: "query", key: "directory" }, + { in: "query", key: "workspace" }, + { key: "config", map: "body" }, + ], + }, + ], + ) + return (options?.client ?? this.client).patch<ConfigUpdateResponses, ConfigUpdateErrors, ThrowOnError>({ + url: "/config", ...options, ...params, headers: { @@ -403,24 +621,48 @@ export class Auth extends HeyApiClient { }, }) } + + /** + * List config providers + * + * Get a list of all configured AI providers and their default models. + */ + public providers<ThrowOnError extends boolean = false>( + parameters?: { + directory?: string + workspace?: string + }, + options?: Options<never, ThrowOnError>, + ) { + const params = buildClientParams( + [parameters], + [ + { + args: [ + { in: "query", key: "directory" }, + { in: "query", key: "workspace" }, + ], + }, + ], + ) + return (options?.client ?? this.client).get<ConfigProvidersResponses, unknown, ThrowOnError>({ + url: "/config/providers", + ...options, + ...params, + }) + } } -export class App extends HeyApiClient { +export class Console extends HeyApiClient { /** - * Write log + * Get active Console provider metadata * - * Write a log entry to the server logs with specified level and metadata. + * Get the active Console org name and the set of provider IDs managed by that Console org. */ - public log<ThrowOnError extends boolean = false>( + public get<ThrowOnError extends boolean = false>( parameters?: { directory?: string workspace?: string - service?: string - level?: "debug" | "info" | "error" | "warn" - message?: string - extra?: { - [key: string]: unknown - } }, options?: Options<never, ThrowOnError>, ) { @@ -431,16 +673,76 @@ export class App extends HeyApiClient { args: [ { in: "query", key: "directory" }, { in: "query", key: "workspace" }, - { in: "body", key: "service" }, - { in: "body", key: "level" }, - { in: "body", key: "message" }, - { in: "body", key: "extra" }, ], }, ], ) - return (options?.client ?? this.client).post<AppLogResponses, AppLogErrors, ThrowOnError>({ - url: "/log", + return (options?.client ?? this.client).get<ExperimentalConsoleGetResponses, unknown, ThrowOnError>({ + url: "/experimental/console", + ...options, + ...params, + }) + } + + /** + * List switchable Console orgs + * + * Get the available Console orgs across logged-in accounts, including the current active org. + */ + public listOrgs<ThrowOnError extends boolean = false>( + parameters?: { + directory?: string + workspace?: string + }, + options?: Options<never, ThrowOnError>, + ) { + const params = buildClientParams( + [parameters], + [ + { + args: [ + { in: "query", key: "directory" }, + { in: "query", key: "workspace" }, + ], + }, + ], + ) + return (options?.client ?? this.client).get<ExperimentalConsoleListOrgsResponses, unknown, ThrowOnError>({ + url: "/experimental/console/orgs", + ...options, + ...params, + }) + } + + /** + * Switch active Console org + * + * Persist a new active Console account/org selection for the current local OpenCode state. + */ + public switchOrg<ThrowOnError extends boolean = false>( + parameters?: { + directory?: string + workspace?: string + accountID?: string + orgID?: string + }, + options?: Options<never, ThrowOnError>, + ) { + const params = buildClientParams( + [parameters], + [ + { + args: [ + { in: "query", key: "directory" }, + { in: "query", key: "workspace" }, + { in: "body", key: "accountID" }, + { in: "body", key: "orgID" }, + ], + }, + ], + ) + return (options?.client ?? this.client).post<ExperimentalConsoleSwitchOrgResponses, unknown, ThrowOnError>({ + url: "/experimental/console/switch", ...options, ...params, headers: { @@ -450,16 +752,24 @@ export class App extends HeyApiClient { }, }) } +} +export class Session extends HeyApiClient { /** - * List agents + * List sessions * - * Get a list of all available AI agents in the OpenCode system. + * Get a list of all OpenCode sessions across projects, sorted by most recently updated. Archived sessions are excluded by default. */ - public agents<ThrowOnError extends boolean = false>( + public list<ThrowOnError extends boolean = false>( parameters?: { directory?: string workspace?: string + roots?: boolean | "true" | "false" + start?: number + cursor?: number + search?: string + limit?: number + archived?: boolean | "true" | "false" }, options?: Options<never, ThrowOnError>, ) { @@ -470,23 +780,31 @@ export class App extends HeyApiClient { args: [ { in: "query", key: "directory" }, { in: "query", key: "workspace" }, + { in: "query", key: "roots" }, + { in: "query", key: "start" }, + { in: "query", key: "cursor" }, + { in: "query", key: "search" }, + { in: "query", key: "limit" }, + { in: "query", key: "archived" }, ], }, ], ) - return (options?.client ?? this.client).get<AppAgentsResponses, unknown, ThrowOnError>({ - url: "/agent", + return (options?.client ?? this.client).get<ExperimentalSessionListResponses, unknown, ThrowOnError>({ + url: "/experimental/session", ...options, ...params, }) } +} +export class Resource extends HeyApiClient { /** - * List skills + * Get MCP resources * - * Get a list of all available skills in the OpenCode system. + * Get all available MCP resources from connected servers. Optionally filter by name. */ - public skills<ThrowOnError extends boolean = false>( + public list<ThrowOnError extends boolean = false>( parameters?: { directory?: string workspace?: string @@ -504,8 +822,8 @@ export class App extends HeyApiClient { }, ], ) - return (options?.client ?? this.client).get<AppSkillsResponses, unknown, ThrowOnError>({ - url: "/skill", + return (options?.client ?? this.client).get<ExperimentalResourceListResponses, unknown, ThrowOnError>({ + url: "/experimental/resource", ...options, ...params, }) @@ -737,16 +1055,40 @@ export class Workspace extends HeyApiClient { } } -export class Console extends HeyApiClient { +export class Experimental extends HeyApiClient { + private _console?: Console + get console(): Console { + return (this._console ??= new Console({ client: this.client })) + } + + private _session?: Session + get session(): Session { + return (this._session ??= new Session({ client: this.client })) + } + + private _resource?: Resource + get resource(): Resource { + return (this._resource ??= new Resource({ client: this.client })) + } + + private _workspace?: Workspace + get workspace(): Workspace { + return (this._workspace ??= new Workspace({ client: this.client })) + } +} + +export class Tool extends HeyApiClient { /** - * Get active Console provider metadata + * List tools * - * Get the active Console org name and the set of provider IDs managed by that Console org. + * Get a list of available tools with their JSON schema parameters for a specific provider and model combination. */ - public get<ThrowOnError extends boolean = false>( - parameters?: { + public list<ThrowOnError extends boolean = false>( + parameters: { directory?: string workspace?: string + provider: string + model: string }, options?: Options<never, ThrowOnError>, ) { @@ -757,23 +1099,25 @@ export class Console extends HeyApiClient { args: [ { in: "query", key: "directory" }, { in: "query", key: "workspace" }, + { in: "query", key: "provider" }, + { in: "query", key: "model" }, ], }, ], ) - return (options?.client ?? this.client).get<ExperimentalConsoleGetResponses, unknown, ThrowOnError>({ - url: "/experimental/console", + return (options?.client ?? this.client).get<ToolListResponses, ToolListErrors, ThrowOnError>({ + url: "/experimental/tool", ...options, ...params, }) } /** - * List switchable Console orgs + * List tool IDs * - * Get the available Console orgs across logged-in accounts, including the current active org. + * Get a list of all available tool IDs, including both built-in tools and dynamically registered tools. */ - public listOrgs<ThrowOnError extends boolean = false>( + public ids<ThrowOnError extends boolean = false>( parameters?: { directory?: string workspace?: string @@ -791,24 +1135,25 @@ export class Console extends HeyApiClient { }, ], ) - return (options?.client ?? this.client).get<ExperimentalConsoleListOrgsResponses, unknown, ThrowOnError>({ - url: "/experimental/console/orgs", + return (options?.client ?? this.client).get<ToolIdsResponses, ToolIdsErrors, ThrowOnError>({ + url: "/experimental/tool/ids", ...options, ...params, }) } +} +export class Worktree extends HeyApiClient { /** - * Switch active Console org + * Remove worktree * - * Persist a new active Console account/org selection for the current local OpenCode state. + * Remove a git worktree and delete its branch. */ - public switchOrg<ThrowOnError extends boolean = false>( + public remove<ThrowOnError extends boolean = false>( parameters?: { directory?: string workspace?: string - accountID?: string - orgID?: string + worktreeRemoveInput?: WorktreeRemoveInput }, options?: Options<never, ThrowOnError>, ) { @@ -819,14 +1164,13 @@ export class Console extends HeyApiClient { args: [ { in: "query", key: "directory" }, { in: "query", key: "workspace" }, - { in: "body", key: "accountID" }, - { in: "body", key: "orgID" }, + { key: "worktreeRemoveInput", map: "body" }, ], }, ], ) - return (options?.client ?? this.client).post<ExperimentalConsoleSwitchOrgResponses, unknown, ThrowOnError>({ - url: "/experimental/console/switch", + return (options?.client ?? this.client).delete<WorktreeRemoveResponses, WorktreeRemoveErrors, ThrowOnError>({ + url: "/experimental/worktree", ...options, ...params, headers: { @@ -836,24 +1180,16 @@ export class Console extends HeyApiClient { }, }) } -} -export class Session extends HeyApiClient { /** - * List sessions + * List worktrees * - * Get a list of all OpenCode sessions across projects, sorted by most recently updated. Archived sessions are excluded by default. + * List all sandbox worktrees for the current project. */ public list<ThrowOnError extends boolean = false>( parameters?: { directory?: string workspace?: string - roots?: boolean | "true" | "false" - start?: number - cursor?: number - search?: string - limit?: number - archived?: boolean | "true" | "false" }, options?: Options<never, ThrowOnError>, ) { @@ -864,34 +1200,27 @@ export class Session extends HeyApiClient { args: [ { in: "query", key: "directory" }, { in: "query", key: "workspace" }, - { in: "query", key: "roots" }, - { in: "query", key: "start" }, - { in: "query", key: "cursor" }, - { in: "query", key: "search" }, - { in: "query", key: "limit" }, - { in: "query", key: "archived" }, ], }, ], ) - return (options?.client ?? this.client).get<ExperimentalSessionListResponses, unknown, ThrowOnError>({ - url: "/experimental/session", + return (options?.client ?? this.client).get<WorktreeListResponses, unknown, ThrowOnError>({ + url: "/experimental/worktree", ...options, ...params, }) } -} -export class Resource extends HeyApiClient { /** - * Get MCP resources + * Create worktree * - * Get all available MCP resources from connected servers. Optionally filter by name. + * Create a new git worktree for the current project and run any configured startup scripts. */ - public list<ThrowOnError extends boolean = false>( + public create<ThrowOnError extends boolean = false>( parameters?: { directory?: string workspace?: string + worktreeCreateInput?: WorktreeCreateInput }, options?: Options<never, ThrowOnError>, ) { @@ -902,50 +1231,33 @@ export class Resource extends HeyApiClient { args: [ { in: "query", key: "directory" }, { in: "query", key: "workspace" }, + { key: "worktreeCreateInput", map: "body" }, ], }, ], ) - return (options?.client ?? this.client).get<ExperimentalResourceListResponses, unknown, ThrowOnError>({ - url: "/experimental/resource", + return (options?.client ?? this.client).post<WorktreeCreateResponses, WorktreeCreateErrors, ThrowOnError>({ + url: "/experimental/worktree", ...options, ...params, + headers: { + "Content-Type": "application/json", + ...options?.headers, + ...params.headers, + }, }) } -} - -export class Experimental extends HeyApiClient { - private _workspace?: Workspace - get workspace(): Workspace { - return (this._workspace ??= new Workspace({ client: this.client })) - } - - private _console?: Console - get console(): Console { - return (this._console ??= new Console({ client: this.client })) - } - - private _session?: Session - get session(): Session { - return (this._session ??= new Session({ client: this.client })) - } - private _resource?: Resource - get resource(): Resource { - return (this._resource ??= new Resource({ client: this.client })) - } -} - -export class Project extends HeyApiClient { /** - * List all projects + * Reset worktree * - * Get a list of projects that have been opened with OpenCode. + * Reset a worktree branch to the primary default branch. */ - public list<ThrowOnError extends boolean = false>( + public reset<ThrowOnError extends boolean = false>( parameters?: { directory?: string workspace?: string + worktreeResetInput?: WorktreeResetInput }, options?: Options<never, ThrowOnError>, ) { @@ -956,26 +1268,35 @@ export class Project extends HeyApiClient { args: [ { in: "query", key: "directory" }, { in: "query", key: "workspace" }, + { key: "worktreeResetInput", map: "body" }, ], }, ], ) - return (options?.client ?? this.client).get<ProjectListResponses, unknown, ThrowOnError>({ - url: "/project", + return (options?.client ?? this.client).post<WorktreeResetResponses, WorktreeResetErrors, ThrowOnError>({ + url: "/experimental/worktree/reset", ...options, ...params, + headers: { + "Content-Type": "application/json", + ...options?.headers, + ...params.headers, + }, }) } +} +export class Find extends HeyApiClient { /** - * Get current project + * Find text * - * Retrieve the currently active project that OpenCode is working with. + * Search for text patterns across files in the project using ripgrep. */ - public current<ThrowOnError extends boolean = false>( - parameters?: { + public text<ThrowOnError extends boolean = false>( + parameters: { directory?: string workspace?: string + pattern: string }, options?: Options<never, ThrowOnError>, ) { @@ -986,26 +1307,31 @@ export class Project extends HeyApiClient { args: [ { in: "query", key: "directory" }, { in: "query", key: "workspace" }, + { in: "query", key: "pattern" }, ], }, ], ) - return (options?.client ?? this.client).get<ProjectCurrentResponses, unknown, ThrowOnError>({ - url: "/project/current", + return (options?.client ?? this.client).get<FindTextResponses, unknown, ThrowOnError>({ + url: "/find", ...options, ...params, }) } /** - * Initialize git repository + * Find files * - * Create a git repository for the current project and return the refreshed project info. + * Search for files or directories by name or pattern in the project directory. */ - public initGit<ThrowOnError extends boolean = false>( - parameters?: { + public files<ThrowOnError extends boolean = false>( + parameters: { directory?: string workspace?: string + query: string + dirs?: "true" | "false" + type?: "file" | "directory" + limit?: number }, options?: Options<never, ThrowOnError>, ) { @@ -1016,39 +1342,31 @@ export class Project extends HeyApiClient { args: [ { in: "query", key: "directory" }, { in: "query", key: "workspace" }, + { in: "query", key: "query" }, + { in: "query", key: "dirs" }, + { in: "query", key: "type" }, + { in: "query", key: "limit" }, ], }, ], ) - return (options?.client ?? this.client).post<ProjectInitGitResponses, unknown, ThrowOnError>({ - url: "/project/git/init", + return (options?.client ?? this.client).get<FindFilesResponses, unknown, ThrowOnError>({ + url: "/find/file", ...options, ...params, }) } /** - * Update project + * Find symbols * - * Update project properties such as name, icon, and commands. + * Search for workspace symbols like functions, classes, and variables using LSP. */ - public update<ThrowOnError extends boolean = false>( + public symbols<ThrowOnError extends boolean = false>( parameters: { - projectID: string directory?: string workspace?: string - name?: string - icon?: { - url?: string - override?: string - color?: string - } - commands?: { - /** - * Startup script to run when creating a new workspace (worktree) - */ - start?: string - } + query: string }, options?: Options<never, ThrowOnError>, ) { @@ -1057,39 +1375,32 @@ export class Project extends HeyApiClient { [ { args: [ - { in: "path", key: "projectID" }, { in: "query", key: "directory" }, { in: "query", key: "workspace" }, - { in: "body", key: "name" }, - { in: "body", key: "icon" }, - { in: "body", key: "commands" }, + { in: "query", key: "query" }, ], }, ], ) - return (options?.client ?? this.client).patch<ProjectUpdateResponses, ProjectUpdateErrors, ThrowOnError>({ - url: "/project/{projectID}", + return (options?.client ?? this.client).get<FindSymbolsResponses, unknown, ThrowOnError>({ + url: "/find/symbol", ...options, ...params, - headers: { - "Content-Type": "application/json", - ...options?.headers, - ...params.headers, - }, }) } } -export class Pty extends HeyApiClient { +export class File extends HeyApiClient { /** - * List available shells + * List files * - * Get a list of available shells on the system. + * List files and directories in a specified path. */ - public shells<ThrowOnError extends boolean = false>( - parameters?: { + public list<ThrowOnError extends boolean = false>( + parameters: { directory?: string workspace?: string + path: string }, options?: Options<never, ThrowOnError>, ) { @@ -1100,26 +1411,28 @@ export class Pty extends HeyApiClient { args: [ { in: "query", key: "directory" }, { in: "query", key: "workspace" }, + { in: "query", key: "path" }, ], }, ], ) - return (options?.client ?? this.client).get<PtyShellsResponses, unknown, ThrowOnError>({ - url: "/pty/shells", + return (options?.client ?? this.client).get<FileListResponses, unknown, ThrowOnError>({ + url: "/file", ...options, ...params, }) } /** - * List PTY sessions + * Read file * - * Get a list of all active pseudo-terminal (PTY) sessions managed by OpenCode. + * Read the content of a specified file. */ - public list<ThrowOnError extends boolean = false>( - parameters?: { + public read<ThrowOnError extends boolean = false>( + parameters: { directory?: string workspace?: string + path: string }, options?: Options<never, ThrowOnError>, ) { @@ -1130,33 +1443,27 @@ export class Pty extends HeyApiClient { args: [ { in: "query", key: "directory" }, { in: "query", key: "workspace" }, + { in: "query", key: "path" }, ], }, ], ) - return (options?.client ?? this.client).get<PtyListResponses, unknown, ThrowOnError>({ - url: "/pty", + return (options?.client ?? this.client).get<FileReadResponses, unknown, ThrowOnError>({ + url: "/file/content", ...options, ...params, }) } /** - * Create PTY session + * Get file status * - * Create a new pseudo-terminal (PTY) session for running shell commands and processes. + * Get the git status of all files in the project. */ - public create<ThrowOnError extends boolean = false>( + public status<ThrowOnError extends boolean = false>( parameters?: { directory?: string workspace?: string - command?: string - args?: Array<string> - cwd?: string - title?: string - env?: { - [key: string]: string - } }, options?: Options<never, ThrowOnError>, ) { @@ -1167,35 +1474,26 @@ export class Pty extends HeyApiClient { args: [ { in: "query", key: "directory" }, { in: "query", key: "workspace" }, - { in: "body", key: "command" }, - { in: "body", key: "args" }, - { in: "body", key: "cwd" }, - { in: "body", key: "title" }, - { in: "body", key: "env" }, ], }, ], ) - return (options?.client ?? this.client).post<PtyCreateResponses, PtyCreateErrors, ThrowOnError>({ - url: "/pty", + return (options?.client ?? this.client).get<FileStatusResponses, unknown, ThrowOnError>({ + url: "/file/status", ...options, ...params, - headers: { - "Content-Type": "application/json", - ...options?.headers, - ...params.headers, - }, }) } +} +export class Instance extends HeyApiClient { /** - * Remove PTY session + * Dispose instance * - * Remove and terminate a specific pseudo-terminal (PTY) session. + * Clean up and dispose the current OpenCode instance, releasing all resources. */ - public remove<ThrowOnError extends boolean = false>( - parameters: { - ptyID: string + public dispose<ThrowOnError extends boolean = false>( + parameters?: { directory?: string workspace?: string }, @@ -1206,28 +1504,28 @@ export class Pty extends HeyApiClient { [ { args: [ - { in: "path", key: "ptyID" }, { in: "query", key: "directory" }, { in: "query", key: "workspace" }, ], }, ], ) - return (options?.client ?? this.client).delete<PtyRemoveResponses, PtyRemoveErrors, ThrowOnError>({ - url: "/pty/{ptyID}", + return (options?.client ?? this.client).post<InstanceDisposeResponses, unknown, ThrowOnError>({ + url: "/instance/dispose", ...options, ...params, }) } +} +export class Path extends HeyApiClient { /** - * Get PTY session + * Get paths * - * Retrieve detailed information about a specific pseudo-terminal (PTY) session. + * Retrieve the current working directory and related path information for the OpenCode instance. */ public get<ThrowOnError extends boolean = false>( - parameters: { - ptyID: string + parameters?: { directory?: string workspace?: string }, @@ -1238,35 +1536,30 @@ export class Pty extends HeyApiClient { [ { args: [ - { in: "path", key: "ptyID" }, { in: "query", key: "directory" }, { in: "query", key: "workspace" }, ], }, ], ) - return (options?.client ?? this.client).get<PtyGetResponses, PtyGetErrors, ThrowOnError>({ - url: "/pty/{ptyID}", + return (options?.client ?? this.client).get<PathGetResponses, unknown, ThrowOnError>({ + url: "/path", ...options, ...params, }) } +} +export class Vcs extends HeyApiClient { /** - * Update PTY session + * Get VCS info * - * Update properties of an existing pseudo-terminal (PTY) session. + * Retrieve version control system (VCS) information for the current project, such as git branch. */ - public update<ThrowOnError extends boolean = false>( - parameters: { - ptyID: string + public get<ThrowOnError extends boolean = false>( + parameters?: { directory?: string workspace?: string - title?: string - size?: { - rows: number - cols: number - } }, options?: Options<never, ThrowOnError>, ) { @@ -1275,37 +1568,29 @@ export class Pty extends HeyApiClient { [ { args: [ - { in: "path", key: "ptyID" }, { in: "query", key: "directory" }, { in: "query", key: "workspace" }, - { in: "body", key: "title" }, - { in: "body", key: "size" }, ], }, ], ) - return (options?.client ?? this.client).put<PtyUpdateResponses, PtyUpdateErrors, ThrowOnError>({ - url: "/pty/{ptyID}", + return (options?.client ?? this.client).get<VcsGetResponses, unknown, ThrowOnError>({ + url: "/vcs", ...options, ...params, - headers: { - "Content-Type": "application/json", - ...options?.headers, - ...params.headers, - }, }) } /** - * Connect to PTY session + * Get VCS diff * - * Establish a WebSocket connection to interact with a pseudo-terminal (PTY) session in real-time. + * Retrieve the current git diff for the working tree or against the default branch. */ - public connect<ThrowOnError extends boolean = false>( + public diff<ThrowOnError extends boolean = false>( parameters: { - ptyID: string directory?: string workspace?: string + mode: "git" | "branch" }, options?: Options<never, ThrowOnError>, ) { @@ -1314,28 +1599,28 @@ export class Pty extends HeyApiClient { [ { args: [ - { in: "path", key: "ptyID" }, { in: "query", key: "directory" }, { in: "query", key: "workspace" }, + { in: "query", key: "mode" }, ], }, ], ) - return (options?.client ?? this.client).get<PtyConnectResponses, PtyConnectErrors, ThrowOnError>({ - url: "/pty/{ptyID}/connect", + return (options?.client ?? this.client).get<VcsDiffResponses, unknown, ThrowOnError>({ + url: "/vcs/diff", ...options, ...params, }) } } -export class Config2 extends HeyApiClient { +export class Command extends HeyApiClient { /** - * Get configuration + * List commands * - * Retrieve the current OpenCode configuration settings and preferences. + * Get a list of all available commands in the OpenCode system. */ - public get<ThrowOnError extends boolean = false>( + public list<ThrowOnError extends boolean = false>( parameters?: { directory?: string workspace?: string @@ -1353,23 +1638,24 @@ export class Config2 extends HeyApiClient { }, ], ) - return (options?.client ?? this.client).get<ConfigGetResponses, unknown, ThrowOnError>({ - url: "/config", + return (options?.client ?? this.client).get<CommandListResponses, unknown, ThrowOnError>({ + url: "/command", ...options, ...params, }) } +} +export class Lsp extends HeyApiClient { /** - * Update configuration + * Get LSP status * - * Update OpenCode configuration settings and preferences. + * Get LSP server status */ - public update<ThrowOnError extends boolean = false>( + public status<ThrowOnError extends boolean = false>( parameters?: { directory?: string workspace?: string - config?: Config3 }, options?: Options<never, ThrowOnError>, ) { @@ -1380,29 +1666,25 @@ export class Config2 extends HeyApiClient { args: [ { in: "query", key: "directory" }, { in: "query", key: "workspace" }, - { key: "config", map: "body" }, ], }, ], ) - return (options?.client ?? this.client).patch<ConfigUpdateResponses, ConfigUpdateErrors, ThrowOnError>({ - url: "/config", + return (options?.client ?? this.client).get<LspStatusResponses, unknown, ThrowOnError>({ + url: "/lsp", ...options, ...params, - headers: { - "Content-Type": "application/json", - ...options?.headers, - ...params.headers, - }, }) } +} +export class Formatter extends HeyApiClient { /** - * List config providers + * Get formatter status * - * Get a list of all configured AI providers and their default models. + * Get formatter status */ - public providers<ThrowOnError extends boolean = false>( + public status<ThrowOnError extends boolean = false>( parameters?: { directory?: string workspace?: string @@ -1420,22 +1702,23 @@ export class Config2 extends HeyApiClient { }, ], ) - return (options?.client ?? this.client).get<ConfigProvidersResponses, unknown, ThrowOnError>({ - url: "/config/providers", + return (options?.client ?? this.client).get<FormatterStatusResponses, unknown, ThrowOnError>({ + url: "/formatter", ...options, ...params, }) } } -export class Tool extends HeyApiClient { +export class Auth2 extends HeyApiClient { /** - * List tool IDs + * Remove MCP OAuth * - * Get a list of all available tool IDs, including both built-in tools and dynamically registered tools. + * Remove OAuth credentials for an MCP server. */ - public ids<ThrowOnError extends boolean = false>( - parameters?: { + public remove<ThrowOnError extends boolean = false>( + parameters: { + name: string directory?: string workspace?: string }, @@ -1446,30 +1729,30 @@ export class Tool extends HeyApiClient { [ { args: [ + { in: "path", key: "name" }, { in: "query", key: "directory" }, { in: "query", key: "workspace" }, ], }, ], ) - return (options?.client ?? this.client).get<ToolIdsResponses, ToolIdsErrors, ThrowOnError>({ - url: "/experimental/tool/ids", + return (options?.client ?? this.client).delete<McpAuthRemoveResponses, McpAuthRemoveErrors, ThrowOnError>({ + url: "/mcp/{name}/auth", ...options, ...params, }) } /** - * List tools + * Start MCP OAuth * - * Get a list of available tools with their JSON schema parameters for a specific provider and model combination. + * Start OAuth authentication flow for a Model Context Protocol (MCP) server. */ - public list<ThrowOnError extends boolean = false>( + public start<ThrowOnError extends boolean = false>( parameters: { + name: string directory?: string workspace?: string - provider: string - model: string }, options?: Options<never, ThrowOnError>, ) { @@ -1478,33 +1761,31 @@ export class Tool extends HeyApiClient { [ { args: [ + { in: "path", key: "name" }, { in: "query", key: "directory" }, { in: "query", key: "workspace" }, - { in: "query", key: "provider" }, - { in: "query", key: "model" }, ], }, ], ) - return (options?.client ?? this.client).get<ToolListResponses, ToolListErrors, ThrowOnError>({ - url: "/experimental/tool", + return (options?.client ?? this.client).post<McpAuthStartResponses, McpAuthStartErrors, ThrowOnError>({ + url: "/mcp/{name}/auth", ...options, ...params, }) } -} -export class Worktree extends HeyApiClient { /** - * Remove worktree + * Complete MCP OAuth * - * Remove a git worktree and delete its branch. + * Complete OAuth authentication for a Model Context Protocol (MCP) server using the authorization code. */ - public remove<ThrowOnError extends boolean = false>( - parameters?: { + public callback<ThrowOnError extends boolean = false>( + parameters: { + name: string directory?: string workspace?: string - worktreeRemoveInput?: WorktreeRemoveInput + code?: string }, options?: Options<never, ThrowOnError>, ) { @@ -1513,15 +1794,16 @@ export class Worktree extends HeyApiClient { [ { args: [ + { in: "path", key: "name" }, { in: "query", key: "directory" }, { in: "query", key: "workspace" }, - { key: "worktreeRemoveInput", map: "body" }, + { in: "body", key: "code" }, ], }, ], ) - return (options?.client ?? this.client).delete<WorktreeRemoveResponses, WorktreeRemoveErrors, ThrowOnError>({ - url: "/experimental/worktree", + return (options?.client ?? this.client).post<McpAuthCallbackResponses, McpAuthCallbackErrors, ThrowOnError>({ + url: "/mcp/{name}/auth/callback", ...options, ...params, headers: { @@ -1533,11 +1815,47 @@ export class Worktree extends HeyApiClient { } /** - * List worktrees + * Authenticate MCP OAuth * - * List all sandbox worktrees for the current project. + * Start OAuth flow and wait for callback (opens browser). */ - public list<ThrowOnError extends boolean = false>( + public authenticate<ThrowOnError extends boolean = false>( + parameters: { + name: string + directory?: string + workspace?: string + }, + options?: Options<never, ThrowOnError>, + ) { + const params = buildClientParams( + [parameters], + [ + { + args: [ + { in: "path", key: "name" }, + { in: "query", key: "directory" }, + { in: "query", key: "workspace" }, + ], + }, + ], + ) + return (options?.client ?? this.client).post<McpAuthAuthenticateResponses, McpAuthAuthenticateErrors, ThrowOnError>( + { + url: "/mcp/{name}/auth/authenticate", + ...options, + ...params, + }, + ) + } +} + +export class Mcp extends HeyApiClient { + /** + * Get MCP status + * + * Get the status of all Model Context Protocol (MCP) servers. + */ + public status<ThrowOnError extends boolean = false>( parameters?: { directory?: string workspace?: string @@ -1555,23 +1873,24 @@ export class Worktree extends HeyApiClient { }, ], ) - return (options?.client ?? this.client).get<WorktreeListResponses, unknown, ThrowOnError>({ - url: "/experimental/worktree", + return (options?.client ?? this.client).get<McpStatusResponses, unknown, ThrowOnError>({ + url: "/mcp", ...options, ...params, }) } /** - * Create worktree + * Add MCP server * - * Create a new git worktree for the current project and run any configured startup scripts. + * Dynamically add a new Model Context Protocol (MCP) server to the system. */ - public create<ThrowOnError extends boolean = false>( + public add<ThrowOnError extends boolean = false>( parameters?: { directory?: string workspace?: string - worktreeCreateInput?: WorktreeCreateInput + name?: string + config?: McpLocalConfig | McpRemoteConfig }, options?: Options<never, ThrowOnError>, ) { @@ -1582,13 +1901,14 @@ export class Worktree extends HeyApiClient { args: [ { in: "query", key: "directory" }, { in: "query", key: "workspace" }, - { key: "worktreeCreateInput", map: "body" }, + { in: "body", key: "name" }, + { in: "body", key: "config" }, ], }, ], ) - return (options?.client ?? this.client).post<WorktreeCreateResponses, WorktreeCreateErrors, ThrowOnError>({ - url: "/experimental/worktree", + return (options?.client ?? this.client).post<McpAddResponses, McpAddErrors, ThrowOnError>({ + url: "/mcp", ...options, ...params, headers: { @@ -1600,15 +1920,13 @@ export class Worktree extends HeyApiClient { } /** - * Reset worktree - * - * Reset a worktree branch to the primary default branch. + * Connect an MCP server. */ - public reset<ThrowOnError extends boolean = false>( - parameters?: { + public connect<ThrowOnError extends boolean = false>( + parameters: { + name: string directory?: string workspace?: string - worktreeResetInput?: WorktreeResetInput }, options?: Options<never, ThrowOnError>, ) { @@ -1617,42 +1935,66 @@ export class Worktree extends HeyApiClient { [ { args: [ + { in: "path", key: "name" }, { in: "query", key: "directory" }, { in: "query", key: "workspace" }, - { key: "worktreeResetInput", map: "body" }, ], }, ], ) - return (options?.client ?? this.client).post<WorktreeResetResponses, WorktreeResetErrors, ThrowOnError>({ - url: "/experimental/worktree/reset", + return (options?.client ?? this.client).post<McpConnectResponses, unknown, ThrowOnError>({ + url: "/mcp/{name}/connect", + ...options, + ...params, + }) + } + + /** + * Disconnect an MCP server. + */ + public disconnect<ThrowOnError extends boolean = false>( + parameters: { + name: string + directory?: string + workspace?: string + }, + options?: Options<never, ThrowOnError>, + ) { + const params = buildClientParams( + [parameters], + [ + { + args: [ + { in: "path", key: "name" }, + { in: "query", key: "directory" }, + { in: "query", key: "workspace" }, + ], + }, + ], + ) + return (options?.client ?? this.client).post<McpDisconnectResponses, unknown, ThrowOnError>({ + url: "/mcp/{name}/disconnect", ...options, ...params, - headers: { - "Content-Type": "application/json", - ...options?.headers, - ...params.headers, - }, }) } + + private _auth?: Auth2 + get auth(): Auth2 { + return (this._auth ??= new Auth2({ client: this.client })) + } } -export class Session2 extends HeyApiClient { +export class Project extends HeyApiClient { /** - * List sessions + * List all projects * - * Get a list of all OpenCode sessions, sorted by most recently updated. + * Get a list of projects that have been opened with OpenCode. */ public list<ThrowOnError extends boolean = false>( parameters?: { directory?: string workspace?: string - scope?: "project" - path?: string - roots?: boolean | "true" | "false" - start?: number - search?: string - limit?: number }, options?: Options<never, ThrowOnError>, ) { @@ -1663,36 +2005,26 @@ export class Session2 extends HeyApiClient { args: [ { in: "query", key: "directory" }, { in: "query", key: "workspace" }, - { in: "query", key: "scope" }, - { in: "query", key: "path" }, - { in: "query", key: "roots" }, - { in: "query", key: "start" }, - { in: "query", key: "search" }, - { in: "query", key: "limit" }, ], }, ], ) - return (options?.client ?? this.client).get<SessionListResponses, unknown, ThrowOnError>({ - url: "/session", + return (options?.client ?? this.client).get<ProjectListResponses, unknown, ThrowOnError>({ + url: "/project", ...options, ...params, }) } /** - * Create session + * Get current project * - * Create a new OpenCode session for interacting with AI assistants and managing conversations. + * Retrieve the currently active project that OpenCode is working with. */ - public create<ThrowOnError extends boolean = false>( + public current<ThrowOnError extends boolean = false>( parameters?: { directory?: string workspace?: string - parentID?: string - title?: string - permission?: PermissionRuleset - workspaceID?: string }, options?: Options<never, ThrowOnError>, ) { @@ -1703,32 +2035,23 @@ export class Session2 extends HeyApiClient { args: [ { in: "query", key: "directory" }, { in: "query", key: "workspace" }, - { in: "body", key: "parentID" }, - { in: "body", key: "title" }, - { in: "body", key: "permission" }, - { in: "body", key: "workspaceID" }, ], }, ], ) - return (options?.client ?? this.client).post<SessionCreateResponses, SessionCreateErrors, ThrowOnError>({ - url: "/session", + return (options?.client ?? this.client).get<ProjectCurrentResponses, unknown, ThrowOnError>({ + url: "/project/current", ...options, ...params, - headers: { - "Content-Type": "application/json", - ...options?.headers, - ...params.headers, - }, }) } /** - * Get session status + * Initialize git repository * - * Retrieve the current status of all sessions, including active, idle, and completed states. + * Create a git repository for the current project and return the refreshed project info. */ - public status<ThrowOnError extends boolean = false>( + public initGit<ThrowOnError extends boolean = false>( parameters?: { directory?: string workspace?: string @@ -1746,23 +2069,35 @@ export class Session2 extends HeyApiClient { }, ], ) - return (options?.client ?? this.client).get<SessionStatusResponses, SessionStatusErrors, ThrowOnError>({ - url: "/session/status", + return (options?.client ?? this.client).post<ProjectInitGitResponses, unknown, ThrowOnError>({ + url: "/project/git/init", ...options, ...params, }) } /** - * Delete session + * Update project * - * Delete a session and permanently remove all associated data, including messages and history. + * Update project properties such as name, icon, and commands. */ - public delete<ThrowOnError extends boolean = false>( + public update<ThrowOnError extends boolean = false>( parameters: { - sessionID: string + projectID: string directory?: string workspace?: string + name?: string + icon?: { + url?: string + override?: string + color?: string + } + commands?: { + /** + * Startup script to run when creating a new workspace (worktree) + */ + start?: string + } }, options?: Options<never, ThrowOnError>, ) { @@ -1771,28 +2106,37 @@ export class Session2 extends HeyApiClient { [ { args: [ - { in: "path", key: "sessionID" }, + { in: "path", key: "projectID" }, { in: "query", key: "directory" }, { in: "query", key: "workspace" }, + { in: "body", key: "name" }, + { in: "body", key: "icon" }, + { in: "body", key: "commands" }, ], }, ], ) - return (options?.client ?? this.client).delete<SessionDeleteResponses, SessionDeleteErrors, ThrowOnError>({ - url: "/session/{sessionID}", + return (options?.client ?? this.client).patch<ProjectUpdateResponses, ProjectUpdateErrors, ThrowOnError>({ + url: "/project/{projectID}", ...options, ...params, + headers: { + "Content-Type": "application/json", + ...options?.headers, + ...params.headers, + }, }) } +} +export class Pty extends HeyApiClient { /** - * Get session + * List available shells * - * Retrieve detailed information about a specific OpenCode session. + * Get a list of available shells on the system. */ - public get<ThrowOnError extends boolean = false>( - parameters: { - sessionID: string + public shells<ThrowOnError extends boolean = false>( + parameters?: { directory?: string workspace?: string }, @@ -1803,34 +2147,64 @@ export class Session2 extends HeyApiClient { [ { args: [ - { in: "path", key: "sessionID" }, { in: "query", key: "directory" }, { in: "query", key: "workspace" }, ], }, ], ) - return (options?.client ?? this.client).get<SessionGetResponses, SessionGetErrors, ThrowOnError>({ - url: "/session/{sessionID}", + return (options?.client ?? this.client).get<PtyShellsResponses, unknown, ThrowOnError>({ + url: "/pty/shells", ...options, ...params, }) } /** - * Update session + * List PTY sessions * - * Update properties of an existing session, such as title or other metadata. + * Get a list of all active pseudo-terminal (PTY) sessions managed by OpenCode. */ - public update<ThrowOnError extends boolean = false>( - parameters: { - sessionID: string + public list<ThrowOnError extends boolean = false>( + parameters?: { directory?: string workspace?: string + }, + options?: Options<never, ThrowOnError>, + ) { + const params = buildClientParams( + [parameters], + [ + { + args: [ + { in: "query", key: "directory" }, + { in: "query", key: "workspace" }, + ], + }, + ], + ) + return (options?.client ?? this.client).get<PtyListResponses, unknown, ThrowOnError>({ + url: "/pty", + ...options, + ...params, + }) + } + + /** + * Create PTY session + * + * Create a new pseudo-terminal (PTY) session for running shell commands and processes. + */ + public create<ThrowOnError extends boolean = false>( + parameters?: { + directory?: string + workspace?: string + command?: string + args?: Array<string> + cwd?: string title?: string - permission?: PermissionRuleset - time?: { - archived?: number + env?: { + [key: string]: string } }, options?: Options<never, ThrowOnError>, @@ -1840,18 +2214,19 @@ export class Session2 extends HeyApiClient { [ { args: [ - { in: "path", key: "sessionID" }, { in: "query", key: "directory" }, { in: "query", key: "workspace" }, + { in: "body", key: "command" }, + { in: "body", key: "args" }, + { in: "body", key: "cwd" }, { in: "body", key: "title" }, - { in: "body", key: "permission" }, - { in: "body", key: "time" }, + { in: "body", key: "env" }, ], }, ], ) - return (options?.client ?? this.client).patch<SessionUpdateResponses, SessionUpdateErrors, ThrowOnError>({ - url: "/session/{sessionID}", + return (options?.client ?? this.client).post<PtyCreateResponses, PtyCreateErrors, ThrowOnError>({ + url: "/pty", ...options, ...params, headers: { @@ -1863,13 +2238,13 @@ export class Session2 extends HeyApiClient { } /** - * Get session children + * Remove PTY session * - * Retrieve all child sessions that were forked from the specified parent session. + * Remove and terminate a specific pseudo-terminal (PTY) session. */ - public children<ThrowOnError extends boolean = false>( + public remove<ThrowOnError extends boolean = false>( parameters: { - sessionID: string + ptyID: string directory?: string workspace?: string }, @@ -1880,28 +2255,28 @@ export class Session2 extends HeyApiClient { [ { args: [ - { in: "path", key: "sessionID" }, + { in: "path", key: "ptyID" }, { in: "query", key: "directory" }, { in: "query", key: "workspace" }, ], }, ], ) - return (options?.client ?? this.client).get<SessionChildrenResponses, SessionChildrenErrors, ThrowOnError>({ - url: "/session/{sessionID}/children", + return (options?.client ?? this.client).delete<PtyRemoveResponses, PtyRemoveErrors, ThrowOnError>({ + url: "/pty/{ptyID}", ...options, ...params, }) } /** - * Get session todos + * Get PTY session * - * Retrieve the todo list associated with a specific session, showing tasks and action items. + * Retrieve detailed information about a specific pseudo-terminal (PTY) session. */ - public todo<ThrowOnError extends boolean = false>( + public get<ThrowOnError extends boolean = false>( parameters: { - sessionID: string + ptyID: string directory?: string workspace?: string }, @@ -1912,33 +2287,35 @@ export class Session2 extends HeyApiClient { [ { args: [ - { in: "path", key: "sessionID" }, + { in: "path", key: "ptyID" }, { in: "query", key: "directory" }, { in: "query", key: "workspace" }, ], }, ], ) - return (options?.client ?? this.client).get<SessionTodoResponses, SessionTodoErrors, ThrowOnError>({ - url: "/session/{sessionID}/todo", + return (options?.client ?? this.client).get<PtyGetResponses, PtyGetErrors, ThrowOnError>({ + url: "/pty/{ptyID}", ...options, ...params, }) } /** - * Initialize session + * Update PTY session * - * Analyze the current application and create an AGENTS.md file with project-specific agent configurations. + * Update properties of an existing pseudo-terminal (PTY) session. */ - public init<ThrowOnError extends boolean = false>( + public update<ThrowOnError extends boolean = false>( parameters: { - sessionID: string + ptyID: string directory?: string workspace?: string - modelID?: string - providerID?: string - messageID?: string + title?: string + size?: { + rows: number + cols: number + } }, options?: Options<never, ThrowOnError>, ) { @@ -1947,18 +2324,17 @@ export class Session2 extends HeyApiClient { [ { args: [ - { in: "path", key: "sessionID" }, + { in: "path", key: "ptyID" }, { in: "query", key: "directory" }, { in: "query", key: "workspace" }, - { in: "body", key: "modelID" }, - { in: "body", key: "providerID" }, - { in: "body", key: "messageID" }, + { in: "body", key: "title" }, + { in: "body", key: "size" }, ], }, ], ) - return (options?.client ?? this.client).post<SessionInitResponses, SessionInitErrors, ThrowOnError>({ - url: "/session/{sessionID}/init", + return (options?.client ?? this.client).put<PtyUpdateResponses, PtyUpdateErrors, ThrowOnError>({ + url: "/pty/{ptyID}", ...options, ...params, headers: { @@ -1970,16 +2346,15 @@ export class Session2 extends HeyApiClient { } /** - * Fork session + * Connect to PTY session * - * Create a new session by forking an existing session at a specific message point. + * Establish a WebSocket connection to interact with a pseudo-terminal (PTY) session in real-time. */ - public fork<ThrowOnError extends boolean = false>( + public connect<ThrowOnError extends boolean = false>( parameters: { - sessionID: string + ptyID: string directory?: string workspace?: string - messageID?: string }, options?: Options<never, ThrowOnError>, ) { @@ -1988,34 +2363,29 @@ export class Session2 extends HeyApiClient { [ { args: [ - { in: "path", key: "sessionID" }, + { in: "path", key: "ptyID" }, { in: "query", key: "directory" }, { in: "query", key: "workspace" }, - { in: "body", key: "messageID" }, ], }, ], ) - return (options?.client ?? this.client).post<SessionForkResponses, unknown, ThrowOnError>({ - url: "/session/{sessionID}/fork", + return (options?.client ?? this.client).get<PtyConnectResponses, PtyConnectErrors, ThrowOnError>({ + url: "/pty/{ptyID}/connect", ...options, ...params, - headers: { - "Content-Type": "application/json", - ...options?.headers, - ...params.headers, - }, }) } +} +export class Question extends HeyApiClient { /** - * Abort session + * List pending questions * - * Abort an active session and stop any ongoing AI processing or command execution. + * Get all pending question requests across all sessions. */ - public abort<ThrowOnError extends boolean = false>( - parameters: { - sessionID: string + public list<ThrowOnError extends boolean = false>( + parameters?: { directory?: string workspace?: string }, @@ -2026,30 +2396,30 @@ export class Session2 extends HeyApiClient { [ { args: [ - { in: "path", key: "sessionID" }, { in: "query", key: "directory" }, { in: "query", key: "workspace" }, ], }, ], ) - return (options?.client ?? this.client).post<SessionAbortResponses, SessionAbortErrors, ThrowOnError>({ - url: "/session/{sessionID}/abort", + return (options?.client ?? this.client).get<QuestionListResponses, unknown, ThrowOnError>({ + url: "/question", ...options, ...params, }) } /** - * Unshare session + * Reply to question request * - * Remove the shareable link for a session, making it private again. + * Provide answers to a question request from the AI assistant. */ - public unshare<ThrowOnError extends boolean = false>( + public reply<ThrowOnError extends boolean = false>( parameters: { - sessionID: string + requestID: string directory?: string workspace?: string + answers?: Array<QuestionAnswer> }, options?: Options<never, ThrowOnError>, ) { @@ -2058,28 +2428,34 @@ export class Session2 extends HeyApiClient { [ { args: [ - { in: "path", key: "sessionID" }, + { in: "path", key: "requestID" }, { in: "query", key: "directory" }, { in: "query", key: "workspace" }, + { in: "body", key: "answers" }, ], }, ], ) - return (options?.client ?? this.client).delete<SessionUnshareResponses, SessionUnshareErrors, ThrowOnError>({ - url: "/session/{sessionID}/share", + return (options?.client ?? this.client).post<QuestionReplyResponses, QuestionReplyErrors, ThrowOnError>({ + url: "/question/{requestID}/reply", ...options, ...params, + headers: { + "Content-Type": "application/json", + ...options?.headers, + ...params.headers, + }, }) } /** - * Share session + * Reject question request * - * Create a shareable link for a session, allowing others to view the conversation. + * Reject a question request from the AI assistant. */ - public share<ThrowOnError extends boolean = false>( + public reject<ThrowOnError extends boolean = false>( parameters: { - sessionID: string + requestID: string directory?: string workspace?: string }, @@ -2090,31 +2466,31 @@ export class Session2 extends HeyApiClient { [ { args: [ - { in: "path", key: "sessionID" }, + { in: "path", key: "requestID" }, { in: "query", key: "directory" }, { in: "query", key: "workspace" }, ], }, ], ) - return (options?.client ?? this.client).post<SessionShareResponses, SessionShareErrors, ThrowOnError>({ - url: "/session/{sessionID}/share", + return (options?.client ?? this.client).post<QuestionRejectResponses, QuestionRejectErrors, ThrowOnError>({ + url: "/question/{requestID}/reject", ...options, ...params, }) } +} +export class Permission extends HeyApiClient { /** - * Get message diff + * List pending permissions * - * Get the file changes (diff) that resulted from a specific user message in the session. + * Get all pending permission requests across all sessions. */ - public diff<ThrowOnError extends boolean = false>( - parameters: { - sessionID: string + public list<ThrowOnError extends boolean = false>( + parameters?: { directory?: string workspace?: string - messageID?: string }, options?: Options<never, ThrowOnError>, ) { @@ -2123,34 +2499,31 @@ export class Session2 extends HeyApiClient { [ { args: [ - { in: "path", key: "sessionID" }, { in: "query", key: "directory" }, { in: "query", key: "workspace" }, - { in: "query", key: "messageID" }, ], }, ], ) - return (options?.client ?? this.client).get<SessionDiffResponses, unknown, ThrowOnError>({ - url: "/session/{sessionID}/diff", + return (options?.client ?? this.client).get<PermissionListResponses, unknown, ThrowOnError>({ + url: "/permission", ...options, ...params, }) } /** - * Summarize session + * Respond to permission request * - * Generate a concise summary of the session using AI compaction to preserve key information. + * Approve or deny a permission request from the AI assistant. */ - public summarize<ThrowOnError extends boolean = false>( + public reply<ThrowOnError extends boolean = false>( parameters: { - sessionID: string + requestID: string directory?: string workspace?: string - providerID?: string - modelID?: string - auto?: boolean + reply?: "once" | "always" | "reject" + message?: string }, options?: Options<never, ThrowOnError>, ) { @@ -2159,18 +2532,17 @@ export class Session2 extends HeyApiClient { [ { args: [ - { in: "path", key: "sessionID" }, + { in: "path", key: "requestID" }, { in: "query", key: "directory" }, { in: "query", key: "workspace" }, - { in: "body", key: "providerID" }, - { in: "body", key: "modelID" }, - { in: "body", key: "auto" }, + { in: "body", key: "reply" }, + { in: "body", key: "message" }, ], }, ], ) - return (options?.client ?? this.client).post<SessionSummarizeResponses, SessionSummarizeErrors, ThrowOnError>({ - url: "/session/{sessionID}/summarize", + return (options?.client ?? this.client).post<PermissionReplyResponses, PermissionReplyErrors, ThrowOnError>({ + url: "/permission/{requestID}/reply", ...options, ...params, headers: { @@ -2182,17 +2554,19 @@ export class Session2 extends HeyApiClient { } /** - * Get session messages + * Respond to permission * - * Retrieve all messages in a session, including user prompts and AI responses. + * Approve or deny a permission request from the AI assistant. + * + * @deprecated */ - public messages<ThrowOnError extends boolean = false>( + public respond<ThrowOnError extends boolean = false>( parameters: { sessionID: string + permissionID: string directory?: string workspace?: string - limit?: number - before?: string + response?: "once" | "always" | "reject" }, options?: Options<never, ThrowOnError>, ) { @@ -2202,45 +2576,42 @@ export class Session2 extends HeyApiClient { { args: [ { in: "path", key: "sessionID" }, + { in: "path", key: "permissionID" }, { in: "query", key: "directory" }, { in: "query", key: "workspace" }, - { in: "query", key: "limit" }, - { in: "query", key: "before" }, + { in: "body", key: "response" }, ], }, ], ) - return (options?.client ?? this.client).get<SessionMessagesResponses, SessionMessagesErrors, ThrowOnError>({ - url: "/session/{sessionID}/message", + return (options?.client ?? this.client).post<PermissionRespondResponses, PermissionRespondErrors, ThrowOnError>({ + url: "/session/{sessionID}/permissions/{permissionID}", ...options, ...params, + headers: { + "Content-Type": "application/json", + ...options?.headers, + ...params.headers, + }, }) } +} +export class Oauth extends HeyApiClient { /** - * Send message + * Start OAuth authorization * - * Create and send a new message to a session, streaming the AI response. + * Start the OAuth authorization flow for a provider. */ - public prompt<ThrowOnError extends boolean = false>( + public authorize<ThrowOnError extends boolean = false>( parameters: { - sessionID: string + providerID: string directory?: string workspace?: string - messageID?: string - model?: { - providerID: string - modelID: string - } - agent?: string - noReply?: boolean - tools?: { - [key: string]: boolean + method?: number + inputs?: { + [key: string]: string } - format?: OutputFormat - system?: string - variant?: string - parts?: Array<TextPartInput | FilePartInput | AgentPartInput | SubtaskPartInput> }, options?: Options<never, ThrowOnError>, ) { @@ -2249,24 +2620,21 @@ export class Session2 extends HeyApiClient { [ { args: [ - { in: "path", key: "sessionID" }, + { in: "path", key: "providerID" }, { in: "query", key: "directory" }, { in: "query", key: "workspace" }, - { in: "body", key: "messageID" }, - { in: "body", key: "model" }, - { in: "body", key: "agent" }, - { in: "body", key: "noReply" }, - { in: "body", key: "tools" }, - { in: "body", key: "format" }, - { in: "body", key: "system" }, - { in: "body", key: "variant" }, - { in: "body", key: "parts" }, + { in: "body", key: "method" }, + { in: "body", key: "inputs" }, ], }, ], ) - return (options?.client ?? this.client).post<SessionPromptResponses, SessionPromptErrors, ThrowOnError>({ - url: "/session/{sessionID}/message", + return (options?.client ?? this.client).post< + ProviderOauthAuthorizeResponses, + ProviderOauthAuthorizeErrors, + ThrowOnError + >({ + url: "/provider/{providerID}/oauth/authorize", ...options, ...params, headers: { @@ -2278,16 +2646,17 @@ export class Session2 extends HeyApiClient { } /** - * Delete message + * Handle OAuth callback * - * Permanently delete a specific message (and all of its parts) from a session. This does not revert any file changes that may have been made while processing the message. + * Handle the OAuth callback from a provider after user authorization. */ - public deleteMessage<ThrowOnError extends boolean = false>( + public callback<ThrowOnError extends boolean = false>( parameters: { - sessionID: string - messageID: string + providerID: string directory?: string workspace?: string + method?: number + code?: string }, options?: Options<never, ThrowOnError>, ) { @@ -2296,34 +2665,40 @@ export class Session2 extends HeyApiClient { [ { args: [ - { in: "path", key: "sessionID" }, - { in: "path", key: "messageID" }, + { in: "path", key: "providerID" }, { in: "query", key: "directory" }, { in: "query", key: "workspace" }, + { in: "body", key: "method" }, + { in: "body", key: "code" }, ], }, ], ) - return (options?.client ?? this.client).delete< - SessionDeleteMessageResponses, - SessionDeleteMessageErrors, + return (options?.client ?? this.client).post< + ProviderOauthCallbackResponses, + ProviderOauthCallbackErrors, ThrowOnError >({ - url: "/session/{sessionID}/message/{messageID}", + url: "/provider/{providerID}/oauth/callback", ...options, ...params, + headers: { + "Content-Type": "application/json", + ...options?.headers, + ...params.headers, + }, }) } +} +export class Provider extends HeyApiClient { /** - * Get message + * List providers * - * Retrieve a specific message from a session by its message ID. + * Get a list of all available AI providers, including both available and connected ones. */ - public message<ThrowOnError extends boolean = false>( - parameters: { - sessionID: string - messageID: string + public list<ThrowOnError extends boolean = false>( + parameters?: { directory?: string workspace?: string }, @@ -2334,45 +2709,28 @@ export class Session2 extends HeyApiClient { [ { args: [ - { in: "path", key: "sessionID" }, - { in: "path", key: "messageID" }, { in: "query", key: "directory" }, { in: "query", key: "workspace" }, ], }, ], ) - return (options?.client ?? this.client).get<SessionMessageResponses, SessionMessageErrors, ThrowOnError>({ - url: "/session/{sessionID}/message/{messageID}", + return (options?.client ?? this.client).get<ProviderListResponses, unknown, ThrowOnError>({ + url: "/provider", ...options, ...params, }) } /** - * Send async message + * Get provider auth methods * - * Create and send a new message to a session asynchronously, starting the session if needed and returning immediately. + * Retrieve available authentication methods for all AI providers. */ - public promptAsync<ThrowOnError extends boolean = false>( - parameters: { - sessionID: string + public auth<ThrowOnError extends boolean = false>( + parameters?: { directory?: string workspace?: string - messageID?: string - model?: { - providerID: string - modelID: string - } - agent?: string - noReply?: boolean - tools?: { - [key: string]: boolean - } - format?: OutputFormat - system?: string - variant?: string - parts?: Array<TextPartInput | FilePartInput | AgentPartInput | SubtaskPartInput> }, options?: Options<never, ThrowOnError>, ) { @@ -2381,58 +2739,41 @@ export class Session2 extends HeyApiClient { [ { args: [ - { in: "path", key: "sessionID" }, { in: "query", key: "directory" }, { in: "query", key: "workspace" }, - { in: "body", key: "messageID" }, - { in: "body", key: "model" }, - { in: "body", key: "agent" }, - { in: "body", key: "noReply" }, - { in: "body", key: "tools" }, - { in: "body", key: "format" }, - { in: "body", key: "system" }, - { in: "body", key: "variant" }, - { in: "body", key: "parts" }, ], }, ], ) - return (options?.client ?? this.client).post<SessionPromptAsyncResponses, SessionPromptAsyncErrors, ThrowOnError>({ - url: "/session/{sessionID}/prompt_async", + return (options?.client ?? this.client).get<ProviderAuthResponses, unknown, ThrowOnError>({ + url: "/provider/auth", ...options, ...params, - headers: { - "Content-Type": "application/json", - ...options?.headers, - ...params.headers, - }, }) } + private _oauth?: Oauth + get oauth(): Oauth { + return (this._oauth ??= new Oauth({ client: this.client })) + } +} + +export class Session2 extends HeyApiClient { /** - * Send command + * List sessions * - * Send a new command to a session for execution by the AI assistant. + * Get a list of all OpenCode sessions, sorted by most recently updated. */ - public command<ThrowOnError extends boolean = false>( - parameters: { - sessionID: string + public list<ThrowOnError extends boolean = false>( + parameters?: { directory?: string workspace?: string - messageID?: string - agent?: string - model?: string - arguments?: string - command?: string - variant?: string - parts?: Array<{ - id?: string - type: "file" - mime: string - filename?: string - url: string - source?: FilePartSource - }> + scope?: "project" + path?: string + roots?: boolean | "true" | "false" + start?: number + search?: string + limit?: number }, options?: Options<never, ThrowOnError>, ) { @@ -2441,49 +2782,44 @@ export class Session2 extends HeyApiClient { [ { args: [ - { in: "path", key: "sessionID" }, { in: "query", key: "directory" }, { in: "query", key: "workspace" }, - { in: "body", key: "messageID" }, - { in: "body", key: "agent" }, - { in: "body", key: "model" }, - { in: "body", key: "arguments" }, - { in: "body", key: "command" }, - { in: "body", key: "variant" }, - { in: "body", key: "parts" }, + { in: "query", key: "scope" }, + { in: "query", key: "path" }, + { in: "query", key: "roots" }, + { in: "query", key: "start" }, + { in: "query", key: "search" }, + { in: "query", key: "limit" }, ], }, ], ) - return (options?.client ?? this.client).post<SessionCommandResponses, SessionCommandErrors, ThrowOnError>({ - url: "/session/{sessionID}/command", + return (options?.client ?? this.client).get<SessionListResponses, unknown, ThrowOnError>({ + url: "/session", ...options, ...params, - headers: { - "Content-Type": "application/json", - ...options?.headers, - ...params.headers, - }, }) } /** - * Run shell command + * Create session * - * Execute a shell command within the session context and return the AI's response. + * Create a new OpenCode session for interacting with AI assistants and managing conversations. */ - public shell<ThrowOnError extends boolean = false>( - parameters: { - sessionID: string + public create<ThrowOnError extends boolean = false>( + parameters?: { directory?: string workspace?: string - messageID?: string + parentID?: string + title?: string agent?: string model?: { + id: string providerID: string - modelID: string + variant?: string } - command?: string + permission?: PermissionRuleset + workspaceID?: string }, options?: Options<never, ThrowOnError>, ) { @@ -2492,19 +2828,20 @@ export class Session2 extends HeyApiClient { [ { args: [ - { in: "path", key: "sessionID" }, { in: "query", key: "directory" }, { in: "query", key: "workspace" }, - { in: "body", key: "messageID" }, + { in: "body", key: "parentID" }, + { in: "body", key: "title" }, { in: "body", key: "agent" }, { in: "body", key: "model" }, - { in: "body", key: "command" }, + { in: "body", key: "permission" }, + { in: "body", key: "workspaceID" }, ], }, ], ) - return (options?.client ?? this.client).post<SessionShellResponses, SessionShellErrors, ThrowOnError>({ - url: "/session/{sessionID}/shell", + return (options?.client ?? this.client).post<SessionCreateResponses, SessionCreateErrors, ThrowOnError>({ + url: "/session", ...options, ...params, headers: { @@ -2516,17 +2853,14 @@ export class Session2 extends HeyApiClient { } /** - * Revert message + * Get session status * - * Revert a specific message in a session, undoing its effects and restoring the previous state. + * Retrieve the current status of all sessions, including active, idle, and completed states. */ - public revert<ThrowOnError extends boolean = false>( - parameters: { - sessionID: string + public status<ThrowOnError extends boolean = false>( + parameters?: { directory?: string workspace?: string - messageID?: string - partID?: string }, options?: Options<never, ThrowOnError>, ) { @@ -2535,33 +2869,25 @@ export class Session2 extends HeyApiClient { [ { args: [ - { in: "path", key: "sessionID" }, { in: "query", key: "directory" }, { in: "query", key: "workspace" }, - { in: "body", key: "messageID" }, - { in: "body", key: "partID" }, ], }, ], ) - return (options?.client ?? this.client).post<SessionRevertResponses, SessionRevertErrors, ThrowOnError>({ - url: "/session/{sessionID}/revert", + return (options?.client ?? this.client).get<SessionStatusResponses, SessionStatusErrors, ThrowOnError>({ + url: "/session/status", ...options, ...params, - headers: { - "Content-Type": "application/json", - ...options?.headers, - ...params.headers, - }, }) } /** - * Restore reverted messages + * Delete session * - * Restore all previously reverted messages in a session. + * Delete a session and permanently remove all associated data, including messages and history. */ - public unrevert<ThrowOnError extends boolean = false>( + public delete<ThrowOnError extends boolean = false>( parameters: { sessionID: string directory?: string @@ -2581,23 +2907,21 @@ export class Session2 extends HeyApiClient { }, ], ) - return (options?.client ?? this.client).post<SessionUnrevertResponses, SessionUnrevertErrors, ThrowOnError>({ - url: "/session/{sessionID}/unrevert", + return (options?.client ?? this.client).delete<SessionDeleteResponses, SessionDeleteErrors, ThrowOnError>({ + url: "/session/{sessionID}", ...options, ...params, }) } -} -export class Part extends HeyApiClient { /** - * Delete a part from a message + * Get session + * + * Retrieve detailed information about a specific OpenCode session. */ - public delete<ThrowOnError extends boolean = false>( + public get<ThrowOnError extends boolean = false>( parameters: { sessionID: string - messageID: string - partID: string directory?: string workspace?: string }, @@ -2609,32 +2933,34 @@ export class Part extends HeyApiClient { { args: [ { in: "path", key: "sessionID" }, - { in: "path", key: "messageID" }, - { in: "path", key: "partID" }, { in: "query", key: "directory" }, { in: "query", key: "workspace" }, ], }, ], ) - return (options?.client ?? this.client).delete<PartDeleteResponses, PartDeleteErrors, ThrowOnError>({ - url: "/session/{sessionID}/message/{messageID}/part/{partID}", + return (options?.client ?? this.client).get<SessionGetResponses, SessionGetErrors, ThrowOnError>({ + url: "/session/{sessionID}", ...options, ...params, }) } /** - * Update a part in a message + * Update session + * + * Update properties of an existing session, such as title or other metadata. */ public update<ThrowOnError extends boolean = false>( parameters: { sessionID: string - messageID: string - partID: string directory?: string workspace?: string - part?: Part2 + title?: string + permission?: PermissionRuleset + time?: { + archived?: number + } }, options?: Options<never, ThrowOnError>, ) { @@ -2644,17 +2970,17 @@ export class Part extends HeyApiClient { { args: [ { in: "path", key: "sessionID" }, - { in: "path", key: "messageID" }, - { in: "path", key: "partID" }, { in: "query", key: "directory" }, { in: "query", key: "workspace" }, - { key: "part", map: "body" }, + { in: "body", key: "title" }, + { in: "body", key: "permission" }, + { in: "body", key: "time" }, ], }, ], ) - return (options?.client ?? this.client).patch<PartUpdateResponses, PartUpdateErrors, ThrowOnError>({ - url: "/session/{sessionID}/message/{messageID}/part/{partID}", + return (options?.client ?? this.client).patch<SessionUpdateResponses, SessionUpdateErrors, ThrowOnError>({ + url: "/session/{sessionID}", ...options, ...params, headers: { @@ -2664,23 +2990,17 @@ export class Part extends HeyApiClient { }, }) } -} -export class Permission extends HeyApiClient { /** - * Respond to permission - * - * Approve or deny a permission request from the AI assistant. + * Get session children * - * @deprecated + * Retrieve all child sessions that were forked from the specified parent session. */ - public respond<ThrowOnError extends boolean = false>( + public children<ThrowOnError extends boolean = false>( parameters: { sessionID: string - permissionID: string directory?: string workspace?: string - response?: "once" | "always" | "reject" }, options?: Options<never, ThrowOnError>, ) { @@ -2690,38 +3010,29 @@ export class Permission extends HeyApiClient { { args: [ { in: "path", key: "sessionID" }, - { in: "path", key: "permissionID" }, { in: "query", key: "directory" }, { in: "query", key: "workspace" }, - { in: "body", key: "response" }, ], }, ], ) - return (options?.client ?? this.client).post<PermissionRespondResponses, PermissionRespondErrors, ThrowOnError>({ - url: "/session/{sessionID}/permissions/{permissionID}", + return (options?.client ?? this.client).get<SessionChildrenResponses, SessionChildrenErrors, ThrowOnError>({ + url: "/session/{sessionID}/children", ...options, ...params, - headers: { - "Content-Type": "application/json", - ...options?.headers, - ...params.headers, - }, }) } /** - * Respond to permission request + * Get session todos * - * Approve or deny a permission request from the AI assistant. + * Retrieve the todo list associated with a specific session, showing tasks and action items. */ - public reply<ThrowOnError extends boolean = false>( + public todo<ThrowOnError extends boolean = false>( parameters: { - requestID: string + sessionID: string directory?: string workspace?: string - reply?: "once" | "always" | "reject" - message?: string }, options?: Options<never, ThrowOnError>, ) { @@ -2730,36 +3041,31 @@ export class Permission extends HeyApiClient { [ { args: [ - { in: "path", key: "requestID" }, + { in: "path", key: "sessionID" }, { in: "query", key: "directory" }, { in: "query", key: "workspace" }, - { in: "body", key: "reply" }, - { in: "body", key: "message" }, ], }, ], ) - return (options?.client ?? this.client).post<PermissionReplyResponses, PermissionReplyErrors, ThrowOnError>({ - url: "/permission/{requestID}/reply", + return (options?.client ?? this.client).get<SessionTodoResponses, SessionTodoErrors, ThrowOnError>({ + url: "/session/{sessionID}/todo", ...options, ...params, - headers: { - "Content-Type": "application/json", - ...options?.headers, - ...params.headers, - }, }) } /** - * List pending permissions + * Get message diff * - * Get all pending permission requests across all sessions. + * Get the file changes (diff) that resulted from a specific user message in the session. */ - public list<ThrowOnError extends boolean = false>( - parameters?: { + public diff<ThrowOnError extends boolean = false>( + parameters: { + sessionID: string directory?: string workspace?: string + messageID?: string }, options?: Options<never, ThrowOnError>, ) { @@ -2768,30 +3074,33 @@ export class Permission extends HeyApiClient { [ { args: [ + { in: "path", key: "sessionID" }, { in: "query", key: "directory" }, { in: "query", key: "workspace" }, + { in: "query", key: "messageID" }, ], }, ], ) - return (options?.client ?? this.client).get<PermissionListResponses, unknown, ThrowOnError>({ - url: "/permission", + return (options?.client ?? this.client).get<SessionDiffResponses, unknown, ThrowOnError>({ + url: "/session/{sessionID}/diff", ...options, ...params, }) } -} -export class Question extends HeyApiClient { /** - * List pending questions + * Get session messages * - * Get all pending question requests across all sessions. + * Retrieve all messages in a session, including user prompts and AI responses. */ - public list<ThrowOnError extends boolean = false>( - parameters?: { + public messages<ThrowOnError extends boolean = false>( + parameters: { + sessionID: string directory?: string workspace?: string + limit?: number + before?: string }, options?: Options<never, ThrowOnError>, ) { @@ -2800,30 +3109,46 @@ export class Question extends HeyApiClient { [ { args: [ + { in: "path", key: "sessionID" }, { in: "query", key: "directory" }, { in: "query", key: "workspace" }, + { in: "query", key: "limit" }, + { in: "query", key: "before" }, ], }, ], ) - return (options?.client ?? this.client).get<QuestionListResponses, unknown, ThrowOnError>({ - url: "/question", + return (options?.client ?? this.client).get<SessionMessagesResponses, SessionMessagesErrors, ThrowOnError>({ + url: "/session/{sessionID}/message", ...options, ...params, }) } /** - * Reply to question request + * Send message * - * Provide answers to a question request from the AI assistant. + * Create and send a new message to a session, streaming the AI response. */ - public reply<ThrowOnError extends boolean = false>( + public prompt<ThrowOnError extends boolean = false>( parameters: { - requestID: string + sessionID: string directory?: string workspace?: string - answers?: Array<QuestionAnswer> + messageID?: string + model?: { + providerID: string + modelID: string + } + agent?: string + noReply?: boolean + tools?: { + [key: string]: boolean + } + format?: OutputFormat + system?: string + variant?: string + parts?: Array<TextPartInput | FilePartInput | AgentPartInput | SubtaskPartInput> }, options?: Options<never, ThrowOnError>, ) { @@ -2832,16 +3157,24 @@ export class Question extends HeyApiClient { [ { args: [ - { in: "path", key: "requestID" }, + { in: "path", key: "sessionID" }, { in: "query", key: "directory" }, { in: "query", key: "workspace" }, - { in: "body", key: "answers" }, + { in: "body", key: "messageID" }, + { in: "body", key: "model" }, + { in: "body", key: "agent" }, + { in: "body", key: "noReply" }, + { in: "body", key: "tools" }, + { in: "body", key: "format" }, + { in: "body", key: "system" }, + { in: "body", key: "variant" }, + { in: "body", key: "parts" }, ], }, ], ) - return (options?.client ?? this.client).post<QuestionReplyResponses, QuestionReplyErrors, ThrowOnError>({ - url: "/question/{requestID}/reply", + return (options?.client ?? this.client).post<SessionPromptResponses, SessionPromptErrors, ThrowOnError>({ + url: "/session/{sessionID}/message", ...options, ...params, headers: { @@ -2853,13 +3186,14 @@ export class Question extends HeyApiClient { } /** - * Reject question request + * Delete message * - * Reject a question request from the AI assistant. + * Permanently delete a specific message and all of its parts from a session without reverting file changes. */ - public reject<ThrowOnError extends boolean = false>( + public deleteMessage<ThrowOnError extends boolean = false>( parameters: { - requestID: string + sessionID: string + messageID: string directory?: string workspace?: string }, @@ -2870,36 +3204,36 @@ export class Question extends HeyApiClient { [ { args: [ - { in: "path", key: "requestID" }, + { in: "path", key: "sessionID" }, + { in: "path", key: "messageID" }, { in: "query", key: "directory" }, { in: "query", key: "workspace" }, ], }, ], ) - return (options?.client ?? this.client).post<QuestionRejectResponses, QuestionRejectErrors, ThrowOnError>({ - url: "/question/{requestID}/reject", + return (options?.client ?? this.client).delete< + SessionDeleteMessageResponses, + SessionDeleteMessageErrors, + ThrowOnError + >({ + url: "/session/{sessionID}/message/{messageID}", ...options, ...params, }) } -} -export class Oauth extends HeyApiClient { /** - * OAuth authorize + * Get message * - * Initiate OAuth authorization for a specific AI provider to get an authorization URL. + * Retrieve a specific message from a session by its message ID. */ - public authorize<ThrowOnError extends boolean = false>( + public message<ThrowOnError extends boolean = false>( parameters: { - providerID: string + sessionID: string + messageID: string directory?: string workspace?: string - method?: number - inputs?: { - [key: string]: string - } }, options?: Options<never, ThrowOnError>, ) { @@ -2908,43 +3242,32 @@ export class Oauth extends HeyApiClient { [ { args: [ - { in: "path", key: "providerID" }, + { in: "path", key: "sessionID" }, + { in: "path", key: "messageID" }, { in: "query", key: "directory" }, { in: "query", key: "workspace" }, - { in: "body", key: "method" }, - { in: "body", key: "inputs" }, ], }, ], ) - return (options?.client ?? this.client).post< - ProviderOauthAuthorizeResponses, - ProviderOauthAuthorizeErrors, - ThrowOnError - >({ - url: "/provider/{providerID}/oauth/authorize", + return (options?.client ?? this.client).get<SessionMessageResponses, SessionMessageErrors, ThrowOnError>({ + url: "/session/{sessionID}/message/{messageID}", ...options, ...params, - headers: { - "Content-Type": "application/json", - ...options?.headers, - ...params.headers, - }, }) } /** - * OAuth callback + * Fork session * - * Handle the OAuth callback from a provider after user authorization. + * Create a new session by forking an existing session at a specific message point. */ - public callback<ThrowOnError extends boolean = false>( + public fork<ThrowOnError extends boolean = false>( parameters: { - providerID: string + sessionID: string directory?: string workspace?: string - method?: number - code?: string + messageID?: string }, options?: Options<never, ThrowOnError>, ) { @@ -2953,21 +3276,16 @@ export class Oauth extends HeyApiClient { [ { args: [ - { in: "path", key: "providerID" }, + { in: "path", key: "sessionID" }, { in: "query", key: "directory" }, { in: "query", key: "workspace" }, - { in: "body", key: "method" }, - { in: "body", key: "code" }, + { in: "body", key: "messageID" }, ], }, ], ) - return (options?.client ?? this.client).post< - ProviderOauthCallbackResponses, - ProviderOauthCallbackErrors, - ThrowOnError - >({ - url: "/provider/{providerID}/oauth/callback", + return (options?.client ?? this.client).post<SessionForkResponses, unknown, ThrowOnError>({ + url: "/session/{sessionID}/fork", ...options, ...params, headers: { @@ -2977,16 +3295,15 @@ export class Oauth extends HeyApiClient { }, }) } -} -export class Provider extends HeyApiClient { /** - * List providers + * Abort session * - * Get a list of all available AI providers, including both available and connected ones. + * Abort an active session and stop any ongoing AI processing or command execution. */ - public list<ThrowOnError extends boolean = false>( - parameters?: { + public abort<ThrowOnError extends boolean = false>( + parameters: { + sessionID: string directory?: string workspace?: string }, @@ -2997,28 +3314,33 @@ export class Provider extends HeyApiClient { [ { args: [ + { in: "path", key: "sessionID" }, { in: "query", key: "directory" }, { in: "query", key: "workspace" }, ], }, ], ) - return (options?.client ?? this.client).get<ProviderListResponses, unknown, ThrowOnError>({ - url: "/provider", + return (options?.client ?? this.client).post<SessionAbortResponses, SessionAbortErrors, ThrowOnError>({ + url: "/session/{sessionID}/abort", ...options, ...params, }) } /** - * Get provider auth methods + * Initialize session * - * Retrieve available authentication methods for all AI providers. + * Analyze the current application and create an AGENTS.md file with project-specific agent configurations. */ - public auth<ThrowOnError extends boolean = false>( - parameters?: { + public init<ThrowOnError extends boolean = false>( + parameters: { + sessionID: string directory?: string workspace?: string + modelID?: string + providerID?: string + messageID?: string }, options?: Options<never, ThrowOnError>, ) { @@ -3027,38 +3349,38 @@ export class Provider extends HeyApiClient { [ { args: [ + { in: "path", key: "sessionID" }, { in: "query", key: "directory" }, { in: "query", key: "workspace" }, + { in: "body", key: "modelID" }, + { in: "body", key: "providerID" }, + { in: "body", key: "messageID" }, ], }, ], ) - return (options?.client ?? this.client).get<ProviderAuthResponses, unknown, ThrowOnError>({ - url: "/provider/auth", + return (options?.client ?? this.client).post<SessionInitResponses, SessionInitErrors, ThrowOnError>({ + url: "/session/{sessionID}/init", ...options, ...params, + headers: { + "Content-Type": "application/json", + ...options?.headers, + ...params.headers, + }, }) } - private _oauth?: Oauth - get oauth(): Oauth { - return (this._oauth ??= new Oauth({ client: this.client })) - } -} - -export class History extends HeyApiClient { /** - * List sync events + * Unshare session * - * List sync events for all aggregates. Keys are aggregate IDs the client already knows about, values are the last known sequence ID. Events with seq > value are returned for those aggregates. Aggregates not listed in the input get their full history. + * Remove the shareable link for a session, making it private again. */ - public list<ThrowOnError extends boolean = false>( - parameters?: { + public unshare<ThrowOnError extends boolean = false>( + parameters: { + sessionID: string directory?: string workspace?: string - body?: { - [key: string]: number - } }, options?: Options<never, ThrowOnError>, ) { @@ -3067,34 +3389,28 @@ export class History extends HeyApiClient { [ { args: [ + { in: "path", key: "sessionID" }, { in: "query", key: "directory" }, { in: "query", key: "workspace" }, - { key: "body", map: "body" }, ], }, ], ) - return (options?.client ?? this.client).post<SyncHistoryListResponses, SyncHistoryListErrors, ThrowOnError>({ - url: "/sync/history", + return (options?.client ?? this.client).delete<SessionUnshareResponses, SessionUnshareErrors, ThrowOnError>({ + url: "/session/{sessionID}/share", ...options, ...params, - headers: { - "Content-Type": "application/json", - ...options?.headers, - ...params.headers, - }, }) } -} -export class Sync extends HeyApiClient { /** - * Start workspace sync + * Share session * - * Start sync loops for workspaces in the current project that have active sessions. + * Create a shareable link for a session, allowing others to view the conversation. */ - public start<ThrowOnError extends boolean = false>( - parameters?: { + public share<ThrowOnError extends boolean = false>( + parameters: { + sessionID: string directory?: string workspace?: string }, @@ -3105,38 +3421,33 @@ export class Sync extends HeyApiClient { [ { args: [ + { in: "path", key: "sessionID" }, { in: "query", key: "directory" }, { in: "query", key: "workspace" }, ], }, ], ) - return (options?.client ?? this.client).post<SyncStartResponses, unknown, ThrowOnError>({ - url: "/sync/start", + return (options?.client ?? this.client).post<SessionShareResponses, SessionShareErrors, ThrowOnError>({ + url: "/session/{sessionID}/share", ...options, ...params, }) } /** - * Replay sync events + * Summarize session * - * Validate and replay a complete sync event history. + * Generate a concise summary of the session using AI compaction to preserve key information. */ - public replay<ThrowOnError extends boolean = false>( - parameters?: { - query_directory?: string + public summarize<ThrowOnError extends boolean = false>( + parameters: { + sessionID: string + directory?: string workspace?: string - body_directory?: string - events?: Array<{ - id: string - aggregateID: string - seq: number - type: string - data: { - [key: string]: unknown - } - }> + providerID?: string + modelID?: string + auto?: boolean }, options?: Options<never, ThrowOnError>, ) { @@ -3145,24 +3456,18 @@ export class Sync extends HeyApiClient { [ { args: [ - { - in: "query", - key: "query_directory", - map: "directory", - }, + { in: "path", key: "sessionID" }, + { in: "query", key: "directory" }, { in: "query", key: "workspace" }, - { - in: "body", - key: "body_directory", - map: "directory", - }, - { in: "body", key: "events" }, + { in: "body", key: "providerID" }, + { in: "body", key: "modelID" }, + { in: "body", key: "auto" }, ], }, ], ) - return (options?.client ?? this.client).post<SyncReplayResponses, SyncReplayErrors, ThrowOnError>({ - url: "/sync/replay", + return (options?.client ?? this.client).post<SessionSummarizeResponses, SessionSummarizeErrors, ThrowOnError>({ + url: "/session/{sessionID}/summarize", ...options, ...params, headers: { @@ -3173,23 +3478,30 @@ export class Sync extends HeyApiClient { }) } - private _history?: History - get history(): History { - return (this._history ??= new History({ client: this.client })) - } -} - -export class Find extends HeyApiClient { /** - * Find text + * Send async message * - * Search for text patterns across files in the project using ripgrep. + * Create and send a new message to a session asynchronously, starting the session if needed and returning immediately. */ - public text<ThrowOnError extends boolean = false>( + public promptAsync<ThrowOnError extends boolean = false>( parameters: { + sessionID: string directory?: string workspace?: string - pattern: string + messageID?: string + model?: { + providerID: string + modelID: string + } + agent?: string + noReply?: boolean + tools?: { + [key: string]: boolean + } + format?: OutputFormat + system?: string + variant?: string + parts?: Array<TextPartInput | FilePartInput | AgentPartInput | SubtaskPartInput> }, options?: Options<never, ThrowOnError>, ) { @@ -3198,33 +3510,58 @@ export class Find extends HeyApiClient { [ { args: [ + { in: "path", key: "sessionID" }, { in: "query", key: "directory" }, { in: "query", key: "workspace" }, - { in: "query", key: "pattern" }, + { in: "body", key: "messageID" }, + { in: "body", key: "model" }, + { in: "body", key: "agent" }, + { in: "body", key: "noReply" }, + { in: "body", key: "tools" }, + { in: "body", key: "format" }, + { in: "body", key: "system" }, + { in: "body", key: "variant" }, + { in: "body", key: "parts" }, ], }, ], ) - return (options?.client ?? this.client).get<FindTextResponses, unknown, ThrowOnError>({ - url: "/find", + return (options?.client ?? this.client).post<SessionPromptAsyncResponses, SessionPromptAsyncErrors, ThrowOnError>({ + url: "/session/{sessionID}/prompt_async", ...options, ...params, + headers: { + "Content-Type": "application/json", + ...options?.headers, + ...params.headers, + }, }) } /** - * Find files + * Send command * - * Search for files or directories by name or pattern in the project directory. + * Send a new command to a session for execution by the AI assistant. */ - public files<ThrowOnError extends boolean = false>( + public command<ThrowOnError extends boolean = false>( parameters: { + sessionID: string directory?: string workspace?: string - query: string - dirs?: "true" | "false" - type?: "file" | "directory" - limit?: number + messageID?: string + agent?: string + model?: string + arguments?: string + command?: string + variant?: string + parts?: Array<{ + id?: string + type: "file" + mime: string + filename?: string + url: string + source?: FilePartSource + }> }, options?: Options<never, ThrowOnError>, ) { @@ -3233,33 +3570,49 @@ export class Find extends HeyApiClient { [ { args: [ + { in: "path", key: "sessionID" }, { in: "query", key: "directory" }, { in: "query", key: "workspace" }, - { in: "query", key: "query" }, - { in: "query", key: "dirs" }, - { in: "query", key: "type" }, - { in: "query", key: "limit" }, + { in: "body", key: "messageID" }, + { in: "body", key: "agent" }, + { in: "body", key: "model" }, + { in: "body", key: "arguments" }, + { in: "body", key: "command" }, + { in: "body", key: "variant" }, + { in: "body", key: "parts" }, ], }, ], ) - return (options?.client ?? this.client).get<FindFilesResponses, unknown, ThrowOnError>({ - url: "/find/file", + return (options?.client ?? this.client).post<SessionCommandResponses, SessionCommandErrors, ThrowOnError>({ + url: "/session/{sessionID}/command", ...options, ...params, + headers: { + "Content-Type": "application/json", + ...options?.headers, + ...params.headers, + }, }) } /** - * Find symbols + * Run shell command * - * Search for workspace symbols like functions, classes, and variables using LSP. + * Execute a shell command within the session context and return the AI's response. */ - public symbols<ThrowOnError extends boolean = false>( + public shell<ThrowOnError extends boolean = false>( parameters: { + sessionID: string directory?: string workspace?: string - query: string + messageID?: string + agent?: string + model?: { + providerID: string + modelID: string + } + command?: string }, options?: Options<never, ThrowOnError>, ) { @@ -3268,32 +3621,41 @@ export class Find extends HeyApiClient { [ { args: [ + { in: "path", key: "sessionID" }, { in: "query", key: "directory" }, { in: "query", key: "workspace" }, - { in: "query", key: "query" }, + { in: "body", key: "messageID" }, + { in: "body", key: "agent" }, + { in: "body", key: "model" }, + { in: "body", key: "command" }, ], }, ], ) - return (options?.client ?? this.client).get<FindSymbolsResponses, unknown, ThrowOnError>({ - url: "/find/symbol", + return (options?.client ?? this.client).post<SessionShellResponses, SessionShellErrors, ThrowOnError>({ + url: "/session/{sessionID}/shell", ...options, ...params, + headers: { + "Content-Type": "application/json", + ...options?.headers, + ...params.headers, + }, }) } -} -export class File extends HeyApiClient { /** - * List files + * Revert message * - * List files and directories in a specified path. + * Revert a specific message in a session, undoing its effects and restoring the previous state. */ - public list<ThrowOnError extends boolean = false>( + public revert<ThrowOnError extends boolean = false>( parameters: { + sessionID: string directory?: string workspace?: string - path: string + messageID?: string + partID?: string }, options?: Options<never, ThrowOnError>, ) { @@ -3302,30 +3664,37 @@ export class File extends HeyApiClient { [ { args: [ + { in: "path", key: "sessionID" }, { in: "query", key: "directory" }, { in: "query", key: "workspace" }, - { in: "query", key: "path" }, + { in: "body", key: "messageID" }, + { in: "body", key: "partID" }, ], }, ], ) - return (options?.client ?? this.client).get<FileListResponses, unknown, ThrowOnError>({ - url: "/file", + return (options?.client ?? this.client).post<SessionRevertResponses, SessionRevertErrors, ThrowOnError>({ + url: "/session/{sessionID}/revert", ...options, ...params, + headers: { + "Content-Type": "application/json", + ...options?.headers, + ...params.headers, + }, }) } /** - * Read file + * Restore reverted messages * - * Read the content of a specified file. + * Restore all previously reverted messages in a session. */ - public read<ThrowOnError extends boolean = false>( + public unrevert<ThrowOnError extends boolean = false>( parameters: { + sessionID: string directory?: string workspace?: string - path: string }, options?: Options<never, ThrowOnError>, ) { @@ -3334,27 +3703,30 @@ export class File extends HeyApiClient { [ { args: [ + { in: "path", key: "sessionID" }, { in: "query", key: "directory" }, { in: "query", key: "workspace" }, - { in: "query", key: "path" }, ], }, ], ) - return (options?.client ?? this.client).get<FileReadResponses, unknown, ThrowOnError>({ - url: "/file/content", + return (options?.client ?? this.client).post<SessionUnrevertResponses, SessionUnrevertErrors, ThrowOnError>({ + url: "/session/{sessionID}/unrevert", ...options, ...params, }) } +} +export class Part extends HeyApiClient { /** - * Get file status - * - * Get the git status of all files in the project. + * Delete a part from a message. */ - public status<ThrowOnError extends boolean = false>( - parameters?: { + public delete<ThrowOnError extends boolean = false>( + parameters: { + sessionID: string + messageID: string + partID: string directory?: string workspace?: string }, @@ -3365,30 +3737,33 @@ export class File extends HeyApiClient { [ { args: [ + { in: "path", key: "sessionID" }, + { in: "path", key: "messageID" }, + { in: "path", key: "partID" }, { in: "query", key: "directory" }, { in: "query", key: "workspace" }, ], }, ], ) - return (options?.client ?? this.client).get<FileStatusResponses, unknown, ThrowOnError>({ - url: "/file/status", + return (options?.client ?? this.client).delete<PartDeleteResponses, PartDeleteErrors, ThrowOnError>({ + url: "/session/{sessionID}/message/{messageID}/part/{partID}", ...options, ...params, }) } -} -export class Event extends HeyApiClient { /** - * Subscribe to events - * - * Get events + * Update a part in a message. */ - public subscribe<ThrowOnError extends boolean = false>( - parameters?: { + public update<ThrowOnError extends boolean = false>( + parameters: { + sessionID: string + messageID: string + partID: string directory?: string workspace?: string + part?: Part2 }, options?: Options<never, ThrowOnError>, ) { @@ -3397,31 +3772,42 @@ export class Event extends HeyApiClient { [ { args: [ + { in: "path", key: "sessionID" }, + { in: "path", key: "messageID" }, + { in: "path", key: "partID" }, { in: "query", key: "directory" }, { in: "query", key: "workspace" }, + { key: "part", map: "body" }, ], }, ], ) - return (options?.client ?? this.client).sse.get<EventSubscribeResponses, unknown, ThrowOnError>({ - url: "/event", + return (options?.client ?? this.client).patch<PartUpdateResponses, PartUpdateErrors, ThrowOnError>({ + url: "/session/{sessionID}/message/{messageID}/part/{partID}", ...options, ...params, + headers: { + "Content-Type": "application/json", + ...options?.headers, + ...params.headers, + }, }) } } -export class Auth2 extends HeyApiClient { +export class History extends HeyApiClient { /** - * Remove MCP OAuth + * List sync events * - * Remove OAuth credentials for an MCP server + * List sync events for all aggregates. Keys are aggregate IDs the client already knows about, values are the last known sequence ID. Events with seq > value are returned for those aggregates. Aggregates not listed in the input get their full history. */ - public remove<ThrowOnError extends boolean = false>( - parameters: { - name: string + public list<ThrowOnError extends boolean = false>( + parameters?: { directory?: string workspace?: string + body?: { + [key: string]: number + } }, options?: Options<never, ThrowOnError>, ) { @@ -3430,28 +3816,34 @@ export class Auth2 extends HeyApiClient { [ { args: [ - { in: "path", key: "name" }, { in: "query", key: "directory" }, { in: "query", key: "workspace" }, + { key: "body", map: "body" }, ], }, ], ) - return (options?.client ?? this.client).delete<McpAuthRemoveResponses, McpAuthRemoveErrors, ThrowOnError>({ - url: "/mcp/{name}/auth", + return (options?.client ?? this.client).post<SyncHistoryListResponses, SyncHistoryListErrors, ThrowOnError>({ + url: "/sync/history", ...options, ...params, + headers: { + "Content-Type": "application/json", + ...options?.headers, + ...params.headers, + }, }) } +} +export class Sync extends HeyApiClient { /** - * Start MCP OAuth + * Start workspace sync * - * Start OAuth authentication flow for a Model Context Protocol (MCP) server. + * Start sync loops for workspaces in the current project that have active sessions. */ public start<ThrowOnError extends boolean = false>( - parameters: { - name: string + parameters?: { directory?: string workspace?: string }, @@ -3462,31 +3854,38 @@ export class Auth2 extends HeyApiClient { [ { args: [ - { in: "path", key: "name" }, { in: "query", key: "directory" }, { in: "query", key: "workspace" }, ], }, ], ) - return (options?.client ?? this.client).post<McpAuthStartResponses, McpAuthStartErrors, ThrowOnError>({ - url: "/mcp/{name}/auth", + return (options?.client ?? this.client).post<SyncStartResponses, unknown, ThrowOnError>({ + url: "/sync/start", ...options, ...params, }) } /** - * Complete MCP OAuth + * Replay sync events * - * Complete OAuth authentication for a Model Context Protocol (MCP) server using the authorization code. + * Validate and replay a complete sync event history. */ - public callback<ThrowOnError extends boolean = false>( - parameters: { - name: string - directory?: string + public replay<ThrowOnError extends boolean = false>( + parameters?: { + query_directory?: string workspace?: string - code?: string + body_directory?: string + events?: Array<{ + id: string + aggregateID: string + seq: number + type: string + data: { + [key: string]: unknown + } + }> }, options?: Options<never, ThrowOnError>, ) { @@ -3495,16 +3894,24 @@ export class Auth2 extends HeyApiClient { [ { args: [ - { in: "path", key: "name" }, - { in: "query", key: "directory" }, + { + in: "query", + key: "query_directory", + map: "directory", + }, { in: "query", key: "workspace" }, - { in: "body", key: "code" }, + { + in: "body", + key: "body_directory", + map: "directory", + }, + { in: "body", key: "events" }, ], }, ], ) - return (options?.client ?? this.client).post<McpAuthCallbackResponses, McpAuthCallbackErrors, ThrowOnError>({ - url: "/mcp/{name}/auth/callback", + return (options?.client ?? this.client).post<SyncReplayResponses, SyncReplayErrors, ThrowOnError>({ + url: "/sync/replay", ...options, ...params, headers: { @@ -3515,16 +3922,55 @@ export class Auth2 extends HeyApiClient { }) } + private _history?: History + get history(): History { + return (this._history ??= new History({ client: this.client })) + } +} + +export class Session3 extends HeyApiClient { /** - * Authenticate MCP OAuth + * List v2 sessions * - * Start OAuth flow and wait for callback (opens browser) + * Retrieve sessions in the requested order. Items keep that order across pages; use cursor.next or cursor.previous to move through the ordered list. */ - public authenticate<ThrowOnError extends boolean = false>( + public list<ThrowOnError extends boolean = false>( + parameters?: { + directory?: string + workspace?: string + }, + options?: Options<never, ThrowOnError>, + ) { + const params = buildClientParams( + [parameters], + [ + { + args: [ + { in: "query", key: "directory" }, + { in: "query", key: "workspace" }, + ], + }, + ], + ) + return (options?.client ?? this.client).get<V2SessionListResponses, V2SessionListErrors, ThrowOnError>({ + url: "/api/session", + ...options, + ...params, + }) + } + + /** + * Send v2 message + * + * Create a v2 session message and queue it for the agent loop. + */ + public prompt<ThrowOnError extends boolean = false>( parameters: { - name: string + sessionID: string directory?: string workspace?: string + prompt?: Prompt + delivery?: SessionDelivery }, options?: Options<never, ThrowOnError>, ) { @@ -3533,31 +3979,35 @@ export class Auth2 extends HeyApiClient { [ { args: [ - { in: "path", key: "name" }, + { in: "path", key: "sessionID" }, { in: "query", key: "directory" }, { in: "query", key: "workspace" }, + { in: "body", key: "prompt" }, + { in: "body", key: "delivery" }, ], }, ], ) - return (options?.client ?? this.client).post<McpAuthAuthenticateResponses, McpAuthAuthenticateErrors, ThrowOnError>( - { - url: "/mcp/{name}/auth/authenticate", - ...options, - ...params, + return (options?.client ?? this.client).post<V2SessionPromptResponses, unknown, ThrowOnError>({ + url: "/api/session/{sessionID}/prompt", + ...options, + ...params, + headers: { + "Content-Type": "application/json", + ...options?.headers, + ...params.headers, }, - ) + }) } -} -export class Mcp extends HeyApiClient { /** - * Get MCP status + * Compact v2 session * - * Get the status of all Model Context Protocol (MCP) servers. + * Compact a v2 session conversation. */ - public status<ThrowOnError extends boolean = false>( - parameters?: { + public compact<ThrowOnError extends boolean = false>( + parameters: { + sessionID: string directory?: string workspace?: string }, @@ -3568,30 +4018,30 @@ export class Mcp extends HeyApiClient { [ { args: [ + { in: "path", key: "sessionID" }, { in: "query", key: "directory" }, { in: "query", key: "workspace" }, ], }, ], ) - return (options?.client ?? this.client).get<McpStatusResponses, unknown, ThrowOnError>({ - url: "/mcp", + return (options?.client ?? this.client).post<V2SessionCompactResponses, unknown, ThrowOnError>({ + url: "/api/session/{sessionID}/compact", ...options, ...params, }) } /** - * Add MCP server + * Wait for v2 session * - * Dynamically add a new Model Context Protocol (MCP) server to the system. + * Wait for a v2 session agent loop to become idle. */ - public add<ThrowOnError extends boolean = false>( - parameters?: { + public wait<ThrowOnError extends boolean = false>( + parameters: { + sessionID: string directory?: string workspace?: string - name?: string - config?: McpLocalConfig | McpRemoteConfig }, options?: Options<never, ThrowOnError>, ) { @@ -3600,32 +4050,28 @@ export class Mcp extends HeyApiClient { [ { args: [ + { in: "path", key: "sessionID" }, { in: "query", key: "directory" }, { in: "query", key: "workspace" }, - { in: "body", key: "name" }, - { in: "body", key: "config" }, ], }, ], ) - return (options?.client ?? this.client).post<McpAddResponses, McpAddErrors, ThrowOnError>({ - url: "/mcp", + return (options?.client ?? this.client).post<V2SessionWaitResponses, unknown, ThrowOnError>({ + url: "/api/session/{sessionID}/wait", ...options, ...params, - headers: { - "Content-Type": "application/json", - ...options?.headers, - ...params.headers, - }, }) } /** - * Connect an MCP server + * Get v2 session context + * + * Retrieve the active context messages for a v2 session (all messages after the last compaction). */ - public connect<ThrowOnError extends boolean = false>( + public context<ThrowOnError extends boolean = false>( parameters: { - name: string + sessionID: string directory?: string workspace?: string }, @@ -3636,26 +4082,28 @@ export class Mcp extends HeyApiClient { [ { args: [ - { in: "path", key: "name" }, + { in: "path", key: "sessionID" }, { in: "query", key: "directory" }, { in: "query", key: "workspace" }, ], }, ], ) - return (options?.client ?? this.client).post<McpConnectResponses, unknown, ThrowOnError>({ - url: "/mcp/{name}/connect", + return (options?.client ?? this.client).get<V2SessionContextResponses, unknown, ThrowOnError>({ + url: "/api/session/{sessionID}/context", ...options, ...params, }) } /** - * Disconnect an MCP server + * Get v2 session messages + * + * Retrieve projected v2 messages for a session. Items keep the requested order across pages; use cursor.next or cursor.previous to move through the ordered timeline. */ - public disconnect<ThrowOnError extends boolean = false>( + public messages<ThrowOnError extends boolean = false>( parameters: { - name: string + sessionID: string directory?: string workspace?: string }, @@ -3666,23 +4114,25 @@ export class Mcp extends HeyApiClient { [ { args: [ - { in: "path", key: "name" }, + { in: "path", key: "sessionID" }, { in: "query", key: "directory" }, { in: "query", key: "workspace" }, ], }, ], ) - return (options?.client ?? this.client).post<McpDisconnectResponses, unknown, ThrowOnError>({ - url: "/mcp/{name}/disconnect", + return (options?.client ?? this.client).get<V2SessionMessagesResponses, V2SessionMessagesErrors, ThrowOnError>({ + url: "/api/session/{sessionID}/message", ...options, ...params, }) } +} - private _auth?: Auth2 - get auth(): Auth2 { - return (this._auth ??= new Auth2({ client: this.client })) +export class V2 extends HeyApiClient { + private _session?: Session3 + get session(): Session3 { + return (this._session ??= new Session3({ client: this.client })) } } @@ -3690,7 +4140,7 @@ export class Control extends HeyApiClient { /** * Get next TUI request * - * Retrieve the next TUI (Terminal User Interface) request from the queue for processing. + * Retrieve the next TUI request from the queue for processing. */ public next<ThrowOnError extends boolean = false>( parameters?: { @@ -3759,7 +4209,7 @@ export class Tui extends HeyApiClient { /** * Append TUI prompt * - * Append prompt to the TUI + * Append prompt to the TUI. */ public appendPrompt<ThrowOnError extends boolean = false>( parameters?: { @@ -3826,7 +4276,7 @@ export class Tui extends HeyApiClient { /** * Open sessions dialog * - * Open the session dialog + * Open the session dialog. */ public openSessions<ThrowOnError extends boolean = false>( parameters?: { @@ -3856,7 +4306,7 @@ export class Tui extends HeyApiClient { /** * Open themes dialog * - * Open the theme dialog + * Open the theme dialog. */ public openThemes<ThrowOnError extends boolean = false>( parameters?: { @@ -3886,7 +4336,7 @@ export class Tui extends HeyApiClient { /** * Open models dialog * - * Open the model dialog + * Open the model dialog. */ public openModels<ThrowOnError extends boolean = false>( parameters?: { @@ -3916,7 +4366,7 @@ export class Tui extends HeyApiClient { /** * Submit TUI prompt * - * Submit the prompt + * Submit the prompt. */ public submitPrompt<ThrowOnError extends boolean = false>( parameters?: { @@ -3946,7 +4396,7 @@ export class Tui extends HeyApiClient { /** * Clear TUI prompt * - * Clear the prompt + * Clear the prompt. */ public clearPrompt<ThrowOnError extends boolean = false>( parameters?: { @@ -3976,7 +4426,7 @@ export class Tui extends HeyApiClient { /** * Execute TUI command * - * Execute a TUI command (e.g. agent_cycle) + * Execute a TUI command. */ public executeCommand<ThrowOnError extends boolean = false>( parameters?: { @@ -4013,7 +4463,7 @@ export class Tui extends HeyApiClient { /** * Show TUI toast * - * Show a toast notification in the TUI + * Show a toast notification in the TUI. */ public showToast<ThrowOnError extends boolean = false>( parameters?: { @@ -4056,13 +4506,13 @@ export class Tui extends HeyApiClient { /** * Publish TUI event * - * Publish a TUI event + * Publish a TUI event. */ public publish<ThrowOnError extends boolean = false>( parameters?: { directory?: string workspace?: string - body?: EventTuiPromptAppend | EventTuiCommandExecute | EventTuiToastShow | EventTuiSessionSelect + body?: EventTuiPromptAppend2 | EventTuiCommandExecute2 | EventTuiToastShow2 | EventTuiSessionSelect2 }, options?: Options<never, ThrowOnError>, ) { @@ -4133,230 +4583,6 @@ export class Tui extends HeyApiClient { } } -export class Instance extends HeyApiClient { - /** - * Dispose instance - * - * Clean up and dispose the current OpenCode instance, releasing all resources. - */ - public dispose<ThrowOnError extends boolean = false>( - parameters?: { - directory?: string - workspace?: string - }, - options?: Options<never, ThrowOnError>, - ) { - const params = buildClientParams( - [parameters], - [ - { - args: [ - { in: "query", key: "directory" }, - { in: "query", key: "workspace" }, - ], - }, - ], - ) - return (options?.client ?? this.client).post<InstanceDisposeResponses, unknown, ThrowOnError>({ - url: "/instance/dispose", - ...options, - ...params, - }) - } -} - -export class Path extends HeyApiClient { - /** - * Get paths - * - * Retrieve the current working directory and related path information for the OpenCode instance. - */ - public get<ThrowOnError extends boolean = false>( - parameters?: { - directory?: string - workspace?: string - }, - options?: Options<never, ThrowOnError>, - ) { - const params = buildClientParams( - [parameters], - [ - { - args: [ - { in: "query", key: "directory" }, - { in: "query", key: "workspace" }, - ], - }, - ], - ) - return (options?.client ?? this.client).get<PathGetResponses, unknown, ThrowOnError>({ - url: "/path", - ...options, - ...params, - }) - } -} - -export class Vcs extends HeyApiClient { - /** - * Get VCS info - * - * Retrieve version control system (VCS) information for the current project, such as git branch. - */ - public get<ThrowOnError extends boolean = false>( - parameters?: { - directory?: string - workspace?: string - }, - options?: Options<never, ThrowOnError>, - ) { - const params = buildClientParams( - [parameters], - [ - { - args: [ - { in: "query", key: "directory" }, - { in: "query", key: "workspace" }, - ], - }, - ], - ) - return (options?.client ?? this.client).get<VcsGetResponses, unknown, ThrowOnError>({ - url: "/vcs", - ...options, - ...params, - }) - } - - /** - * Get VCS diff - * - * Retrieve the current git diff for the working tree or against the default branch. - */ - public diff<ThrowOnError extends boolean = false>( - parameters: { - directory?: string - workspace?: string - mode: "git" | "branch" - }, - options?: Options<never, ThrowOnError>, - ) { - const params = buildClientParams( - [parameters], - [ - { - args: [ - { in: "query", key: "directory" }, - { in: "query", key: "workspace" }, - { in: "query", key: "mode" }, - ], - }, - ], - ) - return (options?.client ?? this.client).get<VcsDiffResponses, unknown, ThrowOnError>({ - url: "/vcs/diff", - ...options, - ...params, - }) - } -} - -export class Command extends HeyApiClient { - /** - * List commands - * - * Get a list of all available commands in the OpenCode system. - */ - public list<ThrowOnError extends boolean = false>( - parameters?: { - directory?: string - workspace?: string - }, - options?: Options<never, ThrowOnError>, - ) { - const params = buildClientParams( - [parameters], - [ - { - args: [ - { in: "query", key: "directory" }, - { in: "query", key: "workspace" }, - ], - }, - ], - ) - return (options?.client ?? this.client).get<CommandListResponses, unknown, ThrowOnError>({ - url: "/command", - ...options, - ...params, - }) - } -} - -export class Lsp extends HeyApiClient { - /** - * Get LSP status - * - * Get LSP server status - */ - public status<ThrowOnError extends boolean = false>( - parameters?: { - directory?: string - workspace?: string - }, - options?: Options<never, ThrowOnError>, - ) { - const params = buildClientParams( - [parameters], - [ - { - args: [ - { in: "query", key: "directory" }, - { in: "query", key: "workspace" }, - ], - }, - ], - ) - return (options?.client ?? this.client).get<LspStatusResponses, unknown, ThrowOnError>({ - url: "/lsp", - ...options, - ...params, - }) - } -} - -export class Formatter extends HeyApiClient { - /** - * Get formatter status - * - * Get formatter status - */ - public status<ThrowOnError extends boolean = false>( - parameters?: { - directory?: string - workspace?: string - }, - options?: Options<never, ThrowOnError>, - ) { - const params = buildClientParams( - [parameters], - [ - { - args: [ - { in: "query", key: "directory" }, - { in: "query", key: "workspace" }, - ], - }, - ], - ) - return (options?.client ?? this.client).get<FormatterStatusResponses, unknown, ThrowOnError>({ - url: "/formatter", - ...options, - ...params, - }) - } -} - export class OpencodeClient extends HeyApiClient { public static readonly __registry = new HeyApiRegistry<OpencodeClient>() @@ -4365,11 +4591,6 @@ export class OpencodeClient extends HeyApiClient { OpencodeClient.__registry.set(this, args?.key) } - private _global?: Global - get global(): Global { - return (this._global ??= new Global({ client: this.client })) - } - private _auth?: Auth get auth(): Auth { return (this._auth ??= new Auth({ client: this.client })) @@ -4380,19 +4601,14 @@ export class OpencodeClient extends HeyApiClient { return (this._app ??= new App({ client: this.client })) } - private _experimental?: Experimental - get experimental(): Experimental { - return (this._experimental ??= new Experimental({ client: this.client })) - } - - private _project?: Project - get project(): Project { - return (this._project ??= new Project({ client: this.client })) + private _global?: Global + get global(): Global { + return (this._global ??= new Global({ client: this.client })) } - private _pty?: Pty - get pty(): Pty { - return (this._pty ??= new Pty({ client: this.client })) + private _event?: Event + get event(): Event { + return (this._event ??= new Event({ client: this.client })) } private _config?: Config2 @@ -4400,6 +4616,11 @@ export class OpencodeClient extends HeyApiClient { return (this._config ??= new Config2({ client: this.client })) } + private _experimental?: Experimental + get experimental(): Experimental { + return (this._experimental ??= new Experimental({ client: this.client })) + } + private _tool?: Tool get tool(): Tool { return (this._tool ??= new Tool({ client: this.client })) @@ -4410,36 +4631,6 @@ export class OpencodeClient extends HeyApiClient { return (this._worktree ??= new Worktree({ client: this.client })) } - private _session?: Session2 - get session(): Session2 { - return (this._session ??= new Session2({ client: this.client })) - } - - private _part?: Part - get part(): Part { - return (this._part ??= new Part({ client: this.client })) - } - - private _permission?: Permission - get permission(): Permission { - return (this._permission ??= new Permission({ client: this.client })) - } - - private _question?: Question - get question(): Question { - return (this._question ??= new Question({ client: this.client })) - } - - private _provider?: Provider - get provider(): Provider { - return (this._provider ??= new Provider({ client: this.client })) - } - - private _sync?: Sync - get sync(): Sync { - return (this._sync ??= new Sync({ client: this.client })) - } - private _find?: Find get find(): Find { return (this._find ??= new Find({ client: this.client })) @@ -4450,21 +4641,6 @@ export class OpencodeClient extends HeyApiClient { return (this._file ??= new File({ client: this.client })) } - private _event?: Event - get event(): Event { - return (this._event ??= new Event({ client: this.client })) - } - - private _mcp?: Mcp - get mcp(): Mcp { - return (this._mcp ??= new Mcp({ client: this.client })) - } - - private _tui?: Tui - get tui(): Tui { - return (this._tui ??= new Tui({ client: this.client })) - } - private _instance?: Instance get instance(): Instance { return (this._instance ??= new Instance({ client: this.client })) @@ -4494,4 +4670,59 @@ export class OpencodeClient extends HeyApiClient { get formatter(): Formatter { return (this._formatter ??= new Formatter({ client: this.client })) } + + private _mcp?: Mcp + get mcp(): Mcp { + return (this._mcp ??= new Mcp({ client: this.client })) + } + + private _project?: Project + get project(): Project { + return (this._project ??= new Project({ client: this.client })) + } + + private _pty?: Pty + get pty(): Pty { + return (this._pty ??= new Pty({ client: this.client })) + } + + private _question?: Question + get question(): Question { + return (this._question ??= new Question({ client: this.client })) + } + + private _permission?: Permission + get permission(): Permission { + return (this._permission ??= new Permission({ client: this.client })) + } + + private _provider?: Provider + get provider(): Provider { + return (this._provider ??= new Provider({ client: this.client })) + } + + private _session?: Session2 + get session(): Session2 { + return (this._session ??= new Session2({ client: this.client })) + } + + private _part?: Part + get part(): Part { + return (this._part ??= new Part({ client: this.client })) + } + + private _sync?: Sync + get sync(): Sync { + return (this._sync ??= new Sync({ client: this.client })) + } + + private _v2?: V2 + get v2(): V2 { + return (this._v2 ??= new V2({ client: this.client })) + } + + private _tui?: Tui + get tui(): Tui { + return (this._tui ??= new Tui({ 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 31bd40ab4..caa3d4c76 100644 --- a/packages/sdk/js/src/v2/gen/types.gen.ts +++ b/packages/sdk/js/src/v2/gen/types.gen.ts @@ -4,53 +4,104 @@ export type ClientOptions = { baseUrl: `${string}://${string}` | (string & {}) } -export type EventServerInstanceDisposed = { - type: "server.instance.disposed" - properties: { - directory: string - } -} - -export type EventFileEdited = { - type: "file.edited" - properties: { - file: string - } -} +export type Event = + | EventServerInstanceDisposed + | EventFileEdited + | EventFileWatcherUpdated + | EventLspClientDiagnostics + | EventLspUpdated + | EventMessagePartDelta + | EventPermissionAsked + | EventPermissionReplied + | EventSessionDiff + | EventSessionError + | EventInstallationUpdated + | EventInstallationUpdateAvailable + | EventQuestionAsked + | EventQuestionReplied + | EventQuestionRejected + | EventTodoUpdated + | EventSessionStatus + | EventSessionIdle + | EventSessionCompacted + | EventTuiPromptAppend + | EventTuiCommandExecute + | EventTuiToastShow1 + | EventTuiSessionSelect + | EventMcpToolsChanged + | EventMcpBrowserOpenFailed + | EventCommandExecuted + | EventProjectUpdated + | EventVcsBranchUpdated + | EventWorkspaceReady + | EventWorkspaceFailed + | EventWorkspaceRestore + | EventWorkspaceStatus + | EventWorktreeReady + | EventWorktreeFailed + | EventPtyCreated + | EventPtyUpdated + | EventPtyExited + | EventPtyDeleted + | EventMessageUpdated + | EventMessageRemoved + | EventMessagePartUpdated + | EventMessagePartRemoved + | EventSessionCreated + | EventSessionUpdated + | EventSessionDeleted + | EventSessionNextAgentSwitched + | EventSessionNextModelSwitched + | EventSessionNextPrompted + | EventSessionNextSynthetic + | EventSessionNextShellStarted + | EventSessionNextShellEnded + | EventSessionNextStepStarted + | EventSessionNextStepEnded + | EventSessionNextTextStarted + | EventSessionNextTextDelta + | EventSessionNextTextEnded + | EventSessionNextReasoningStarted + | EventSessionNextReasoningDelta + | EventSessionNextReasoningEnded + | EventSessionNextToolInputStarted + | EventSessionNextToolInputDelta + | EventSessionNextToolInputEnded + | EventSessionNextToolCalled + | EventSessionNextToolProgress + | EventSessionNextToolSuccess + | EventSessionNextToolError + | EventSessionNextRetried + | EventSessionNextCompactionStarted + | EventSessionNextCompactionDelta + | EventSessionNextCompactionEnded + | EventServerConnected + | EventGlobalDisposed -export type EventFileWatcherUpdated = { - type: "file.watcher.updated" - properties: { - file: string - event: "add" | "change" | "unlink" - } +export type OAuth = { + type: "oauth" + refresh: string + access: string + expires: number + accountId?: string + enterpriseUrl?: string } -export type EventLspClientDiagnostics = { - type: "lsp.client.diagnostics" - properties: { - serverID: string - path: string +export type ApiAuth = { + type: "api" + key: string + metadata?: { + [key: string]: string } } -export type EventLspUpdated = { - type: "lsp.updated" - properties: { - [key: string]: unknown - } +export type WellKnownAuth = { + type: "wellknown" + key: string + token: string } -export type EventMessagePartDelta = { - type: "message.part.delta" - properties: { - sessionID: string - messageID: string - partID: string - field: string - delta: string - } -} +export type Auth = OAuth | ApiAuth | WellKnownAuth export type PermissionRequest = { id: string @@ -67,20 +118,6 @@ export type PermissionRequest = { } } -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 SnapshotFileDiff = { file: string patch: string @@ -89,14 +126,6 @@ export type SnapshotFileDiff = { status?: "added" | "deleted" | "modified" } -export type EventSessionDiff = { - type: "session.diff" - properties: { - sessionID: string - diff: Array<SnapshotFileDiff> - } -} - export type ProviderAuthError = { name: "ProviderAuthError" data: { @@ -158,35 +187,6 @@ export type ApiError = { } } -export type EventSessionError = { - type: "session.error" - properties: { - sessionID?: string - error?: - | ProviderAuthError - | UnknownError - | MessageOutputLengthError - | MessageAbortedError - | StructuredOutputError - | ContextOverflowError - | ApiError - } -} - -export type EventInstallationUpdated = { - type: "installation.updated" - properties: { - version: string - } -} - -export type EventInstallationUpdateAvailable = { - type: "installation.update-available" - properties: { - version: string - } -} - export type QuestionOption = { /** * Display text (1-5 words, concise) @@ -211,13 +211,7 @@ export type QuestionInfo = { * Available choices */ options: Array<QuestionOption> - /** - * Allow selecting multiple choices - */ multiple?: boolean - /** - * Allow typing a custom answer (default: true) - */ custom?: boolean } @@ -236,11 +230,6 @@ export type QuestionRequest = { tool?: QuestionTool } -export type EventQuestionAsked = { - type: "question.asked" - properties: QuestionRequest -} - export type QuestionAnswer = Array<string> export type QuestionReplied = { @@ -249,21 +238,11 @@ export type QuestionReplied = { answers: Array<QuestionAnswer> } -export type EventQuestionReplied = { - type: "question.replied" - properties: QuestionReplied -} - export type QuestionRejected = { sessionID: string requestID: string } -export type EventQuestionRejected = { - type: "question.rejected" - properties: QuestionRejected -} - export type Todo = { /** * Brief description of the task @@ -279,14 +258,6 @@ export type Todo = { priority: string } -export type EventTodoUpdated = { - type: "todo.updated" - properties: { - sessionID: string - todos: Array<Todo> - } -} - export type SessionStatus = | { type: "idle" @@ -301,29 +272,8 @@ export type SessionStatus = type: "busy" } -export type EventSessionStatus = { - type: "session.status" - properties: { - sessionID: string - status: SessionStatus - } -} - -export type EventSessionIdle = { - type: "session.idle" - properties: { - sessionID: string - } -} - -export type EventSessionCompacted = { - type: "session.compacted" - properties: { - sessionID: string - } -} - export type EventTuiPromptAppend = { + id: string type: "tui.prompt.append" properties: { text: string @@ -331,6 +281,7 @@ export type EventTuiPromptAppend = { } export type EventTuiCommandExecute = { + id: string type: "tui.command.execute" properties: { command: @@ -355,19 +306,18 @@ export type EventTuiCommandExecute = { } export type EventTuiToastShow = { + id: string type: "tui.toast.show" properties: { title?: string message: string variant: "info" | "success" | "warning" | "error" - /** - * Duration in milliseconds - */ duration?: number } } export type EventTuiSessionSelect = { + id: string type: "tui.session.select" properties: { /** @@ -377,31 +327,6 @@ export type EventTuiSessionSelect = { } } -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 Project = { id: string worktree: string @@ -426,65 +351,6 @@ export type Project = { sandboxes: Array<string> } -export type EventProjectUpdated = { - type: "project.updated" - properties: Project -} - -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 EventWorkspaceRestore = { - type: "workspace.restore" - properties: { - workspaceID: string - sessionID: string - total: number - step: number - } -} - -export type EventWorkspaceStatus = { - type: "workspace.status" - properties: { - workspaceID: string - status: "connected" | "connecting" | "disconnected" | "error" - } -} - -export type EventWorktreeReady = { - type: "worktree.ready" - properties: { - name: string - branch: string - } -} - -export type EventWorktreeFailed = { - type: "worktree.failed" - properties: { - message: string - } -} - export type Pty = { id: string title: string @@ -495,35 +361,6 @@ export type Pty = { 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 OutputFormatText = { type: "text" } @@ -609,22 +446,6 @@ export type AssistantMessage = { export type Message = UserMessage | AssistantMessage -export type EventMessageUpdated = { - type: "message.updated" - properties: { - sessionID: string - info: Message - } -} - -export type EventMessageRemoved = { - type: "message.removed" - properties: { - sessionID: string - messageID: string - } -} - export type TextPart = { id: string sessionID: string @@ -888,24 +709,6 @@ export type Part = | RetryPart | CompactionPart -export type EventMessagePartUpdated = { - type: "message.part.updated" - properties: { - sessionID: string - part: Part - time: number - } -} - -export type EventMessagePartRemoved = { - type: "message.part.removed" - properties: { - sessionID: string - messageID: string - partID: string - } -} - export type PermissionAction = "allow" | "deny" | "ask" export type PermissionRule = { @@ -934,6 +737,12 @@ export type Session = { url: string } title: string + agent?: string + model?: { + id: string + providerID: string + variant?: string + } version: string time: { created: number @@ -950,160 +759,10 @@ export type Session = { } } -export type EventSessionCreated = { - type: "session.created" - properties: { - sessionID: string - info: Session - } -} - -export type EventSessionUpdated = { - type: "session.updated" - properties: { - sessionID: string - info: Session - } -} - -export type EventSessionDeleted = { - type: "session.deleted" - properties: { - sessionID: string - info: Session - } -} - -export type EventServerConnected = { - type: "server.connected" - properties: { - [key: string]: unknown - } -} - -export type EventGlobalDisposed = { - type: "global.disposed" - properties: { - [key: string]: unknown - } -} - -export type SyncEventMessageUpdated = { - type: "sync" - name: "message.updated.1" - id: string - seq: number - aggregateID: "sessionID" - data: { - sessionID: string - info: Message - } -} - -export type SyncEventMessageRemoved = { - type: "sync" - name: "message.removed.1" - id: string - seq: number - aggregateID: "sessionID" - data: { - sessionID: string - messageID: string - } -} - -export type SyncEventMessagePartUpdated = { - type: "sync" - name: "message.part.updated.1" - id: string - seq: number - aggregateID: "sessionID" - data: { - sessionID: string - part: Part - time: number - } -} - -export type SyncEventMessagePartRemoved = { - type: "sync" - name: "message.part.removed.1" - id: string - seq: number - aggregateID: "sessionID" - data: { - sessionID: string - messageID: string - partID: string - } -} - -export type SyncEventSessionCreated = { - type: "sync" - name: "session.created.1" - id: string - seq: number - aggregateID: "sessionID" - data: { - sessionID: string - info: Session - } -} - -export type SyncEventSessionUpdated = { - type: "sync" - name: "session.updated.1" - id: string - seq: number - aggregateID: "sessionID" - data: { - sessionID: string - info: { - id?: string | null - slug?: string | null - projectID?: string | null - workspaceID?: string | null - directory?: string | null - path?: string | null - parentID?: string | null - summary?: { - additions: number - deletions: number - files: number - diffs?: Array<SnapshotFileDiff> - } | null - share?: { - url?: string | null - } - title?: string | null - version?: string | null - time?: { - created?: number | null - updated?: number | null - compacting?: number | null - archived?: number | null - } - permission?: PermissionRuleset | null - revert?: { - messageID: string - partID?: string - snapshot?: string - diff?: string - } | null - } - } -} - -export type SyncEventSessionDeleted = { - type: "sync" - name: "session.deleted.1" - id: string - seq: number - aggregateID: "sessionID" - data: { - sessionID: string - info: Session - } +export type Prompt = { + text: string + files?: Array<PromptFileAttachment> + agents?: Array<PromptAgentAttachment> } export type GlobalEvent = { @@ -1156,6 +815,31 @@ export type GlobalEvent = { | EventSessionCreated | EventSessionUpdated | EventSessionDeleted + | EventSessionNextAgentSwitched + | EventSessionNextModelSwitched + | EventSessionNextPrompted + | EventSessionNextSynthetic + | EventSessionNextShellStarted + | EventSessionNextShellEnded + | EventSessionNextStepStarted + | EventSessionNextStepEnded + | EventSessionNextTextStarted + | EventSessionNextTextDelta + | EventSessionNextTextEnded + | EventSessionNextReasoningStarted + | EventSessionNextReasoningDelta + | EventSessionNextReasoningEnded + | EventSessionNextToolInputStarted + | EventSessionNextToolInputDelta + | EventSessionNextToolInputEnded + | EventSessionNextToolCalled + | EventSessionNextToolProgress + | EventSessionNextToolSuccess + | EventSessionNextToolError + | EventSessionNextRetried + | EventSessionNextCompactionStarted + | EventSessionNextCompactionDelta + | EventSessionNextCompactionEnded | EventServerConnected | EventGlobalDisposed | SyncEventMessageUpdated @@ -1165,6 +849,31 @@ export type GlobalEvent = { | SyncEventSessionCreated | SyncEventSessionUpdated | SyncEventSessionDeleted + | SyncEventSessionNextAgentSwitched + | SyncEventSessionNextModelSwitched + | SyncEventSessionNextPrompted + | SyncEventSessionNextSynthetic + | SyncEventSessionNextShellStarted + | SyncEventSessionNextShellEnded + | SyncEventSessionNextStepStarted + | SyncEventSessionNextStepEnded + | SyncEventSessionNextTextStarted + | SyncEventSessionNextTextDelta + | SyncEventSessionNextTextEnded + | SyncEventSessionNextReasoningStarted + | SyncEventSessionNextReasoningDelta + | SyncEventSessionNextReasoningEnded + | SyncEventSessionNextToolInputStarted + | SyncEventSessionNextToolInputDelta + | SyncEventSessionNextToolInputEnded + | SyncEventSessionNextToolCalled + | SyncEventSessionNextToolProgress + | SyncEventSessionNextToolSuccess + | SyncEventSessionNextToolError + | SyncEventSessionNextRetried + | SyncEventSessionNextCompactionStarted + | SyncEventSessionNextCompactionDelta + | SyncEventSessionNextCompactionEnded } /** @@ -1176,25 +885,10 @@ export type LogLevel = "DEBUG" | "INFO" | "WARN" | "ERROR" * Server configuration for opencode serve and web commands */ export type ServerConfig = { - /** - * Port to listen on - */ port?: number - /** - * Hostname to listen on - */ hostname?: string - /** - * Enable mDNS service discovery - */ mdns?: boolean - /** - * Custom domain name for mDNS service (default: opencode.local) - */ mdnsDomain?: string - /** - * Additional domains to allow for CORS - */ cors?: Array<string> } @@ -1229,28 +923,16 @@ export type PermissionConfig = export type AgentConfig = { model?: string - /** - * Default model variant for this agent (applies only when using the agent's configured model). - */ variant?: string temperature?: number top_p?: number prompt?: string - /** - * @deprecated Use 'permission' field instead - */ tools?: { [key: string]: boolean } disable?: boolean - /** - * Description of when to use the agent - */ description?: string mode?: "subagent" | "primary" | "all" - /** - * Hide this subagent from the @ autocomplete menu (default: false, only applies to mode: subagent) - */ hidden?: boolean options?: { [key: string]: unknown @@ -1259,13 +941,7 @@ export type AgentConfig = { * Hex color code (e.g., #FF5733) or theme color (e.g., primary) */ color?: string | "primary" | "secondary" | "accent" | "success" | "warning" | "error" | "info" - /** - * Maximum number of agentic iterations before forcing text-only response - */ steps?: number - /** - * @deprecated Use 'steps' field instead. - */ maxSteps?: number permission?: PermissionConfig [key: string]: @@ -1306,21 +982,12 @@ export type ProviderConfig = { options?: { apiKey?: string baseURL?: string - /** - * GitHub Enterprise URL for copilot authentication - */ enterpriseUrl?: string - /** - * Enable promptCacheKey for this provider (default false) - */ setCacheKey?: boolean /** * Timeout in milliseconds for requests to this provider. Default is 300000 (5 minutes). Set to false to disable timeout. */ timeout?: number | false - /** - * Timeout in milliseconds between streamed SSE chunks for this provider. If no chunk arrives within this window, the request is aborted. - */ chunkTimeout?: number [key: string]: unknown | string | boolean | number | false | number | undefined } @@ -1377,9 +1044,6 @@ export type ProviderConfig = { */ variants?: { [key: string]: { - /** - * Disable this variant for the model - */ disabled?: boolean [key: string]: unknown | boolean | undefined } @@ -1397,38 +1061,17 @@ export type McpLocalConfig = { * Command and arguments to run the MCP server */ command: Array<string> - /** - * Environment variables to set when running the MCP server - */ environment?: { [key: string]: string } - /** - * Enable or disable the MCP server on startup - */ enabled?: boolean - /** - * Timeout in ms for MCP server requests. Defaults to 5000 (5 seconds) if not specified. - */ timeout?: number } export type McpOAuthConfig = { - /** - * OAuth client ID. If not provided, dynamic client registration (RFC 7591) will be attempted. - */ clientId?: string - /** - * OAuth client secret (if required by the authorization server) - */ clientSecret?: string - /** - * OAuth scopes to request during authorization - */ scope?: string - /** - * OAuth redirect URI (default: http://127.0.0.1:19876/mcp/oauth/callback). - */ redirectUri?: string } @@ -1441,13 +1084,7 @@ export type McpRemoteConfig = { * URL of the remote MCP server */ url: string - /** - * Enable or disable the MCP server on startup - */ enabled?: boolean - /** - * Headers to send with the request - */ headers?: { [key: string]: string } @@ -1455,9 +1092,6 @@ export type McpRemoteConfig = { * OAuth authentication configuration for the MCP server. Set to false to disable OAuth auto-detection. */ oauth?: McpOAuthConfig | false - /** - * Timeout in ms for MCP server requests. Defaults to 5000 (5 seconds) if not specified. - */ timeout?: number } @@ -1467,19 +1101,10 @@ export type McpRemoteConfig = { export type LayoutConfig = "auto" | "stretch" export type Config = { - /** - * JSON schema reference for configuration validation - */ $schema?: string - /** - * Default shell to use for terminal and bash tool - */ shell?: string logLevel?: LogLevel server?: ServerConfig - /** - * Command configuration, see https://opencode.ai/docs/commands - */ command?: { [key: string]: { template: string @@ -1489,25 +1114,13 @@ export type Config = { subtask?: boolean } } - /** - * Additional skill folder paths - */ skills?: { - /** - * Additional paths to skill folders - */ paths?: Array<string> - /** - * URLs to fetch skills from (e.g., https://example.com/.well-known/skills/) - */ urls?: Array<string> } watcher?: { ignore?: Array<string> } - /** - * Enable or disable snapshot tracking. When false, filesystem snapshots are not recorded and undoing or reverting will not undo/redo file changes. Defaults to true. - */ snapshot?: boolean plugin?: Array< | string @@ -1518,53 +1131,23 @@ export type Config = { }, ] > - /** - * Control sharing behavior:'manual' allows manual sharing via commands, 'auto' enables automatic sharing, 'disabled' disables all sharing - */ share?: "manual" | "auto" | "disabled" - /** - * @deprecated Use 'share' field instead. Share newly created sessions automatically - */ autoshare?: boolean /** * Automatically update to the latest version. Set to true to auto-update, false to disable, or 'notify' to show update notifications */ autoupdate?: boolean | "notify" - /** - * Disable providers that are loaded automatically - */ disabled_providers?: Array<string> - /** - * When set, ONLY these providers will be enabled. All other providers will be ignored - */ enabled_providers?: Array<string> - /** - * Model to use in the format of provider/model, eg anthropic/claude-2 - */ model?: string - /** - * Small model to use for tasks like title generation in the format of provider/model - */ small_model?: string - /** - * Default agent to use when none is specified. Must be a primary agent. Falls back to 'build' if not set or if the specified agent is invalid. - */ default_agent?: string - /** - * Custom username to display in conversations instead of system username - */ username?: string - /** - * @deprecated Use `agent` field instead. - */ mode?: { build?: AgentConfig plan?: AgentConfig [key: string]: AgentConfig | undefined } - /** - * Agent configuration, see https://opencode.ai/docs/agents - */ agent?: { plan?: AgentConfig build?: AgentConfig @@ -1575,15 +1158,9 @@ export type Config = { compaction?: AgentConfig [key: string]: AgentConfig | undefined } - /** - * Custom provider configurations and model overrides - */ provider?: { [key: string]: ProviderConfig } - /** - * MCP (Model Context Protocol) server configurations - */ mcp?: { [key: string]: | McpLocalConfig @@ -1629,9 +1206,6 @@ export type Config = { } } } - /** - * Additional instruction files or patterns to include - */ instructions?: Array<string> layout?: LayoutConfig permission?: PermissionConfig @@ -1639,121 +1213,29 @@ export type Config = { [key: string]: boolean } enterprise?: { - /** - * Enterprise URL - */ url?: string } - /** - * Thresholds for truncating tool output. When output exceeds either limit, the full text is written to the truncation directory and a preview is returned. - */ tool_output?: { - /** - * Maximum lines of tool output before it is truncated and saved to disk (default: 2000) - */ max_lines?: number - /** - * Maximum bytes of tool output before it is truncated and saved to disk (default: 51200) - */ max_bytes?: number } compaction?: { - /** - * Enable automatic compaction when context is full (default: true) - */ auto?: boolean - /** - * Enable pruning of old tool outputs (default: true) - */ prune?: boolean - /** - * Number of recent user turns, including their following assistant/tool responses, to keep verbatim during compaction (default: 2) - */ tail_turns?: number - /** - * Maximum number of tokens from recent turns to preserve verbatim after compaction - */ preserve_recent_tokens?: number - /** - * Token buffer for compaction. Leaves enough window to avoid overflow during compaction. - */ reserved?: number } experimental?: { disable_paste_summary?: boolean - /** - * Enable the batch tool - */ batch_tool?: boolean - /** - * Enable OpenTelemetry spans for AI SDK calls (using the 'experimental_telemetry' flag) - */ openTelemetry?: boolean - /** - * Tools that should only be available to primary agents. - */ primary_tools?: Array<string> - /** - * Continue the agent loop when a tool call is denied - */ continue_loop_on_deny?: boolean - /** - * Timeout in milliseconds for model context protocol (MCP) requests - */ mcp_timeout?: number } } -export type BadRequestError = { - data: unknown - errors: Array<{ - [key: string]: unknown - }> - success: false -} - -export type OAuth = { - type: "oauth" - refresh: string - access: string - expires: number - accountId?: string - enterpriseUrl?: string -} - -export type ApiAuth = { - type: "api" - key: string - metadata?: { - [key: string]: string - } -} - -export type WellKnownAuth = { - type: "wellknown" - key: string - token: string -} - -export type Auth = OAuth | ApiAuth | WellKnownAuth - -export type Workspace = { - id: string - type: string - name: string - branch: string | null - directory: string | null - extra: unknown | null - projectID: string -} - -export type NotFoundError = { - name: "NotFoundError" - data: { - message: string - } -} - export type Model = { id: string providerID: string @@ -1845,8 +1327,6 @@ export type ConsoleState = { switchableOrgCount: number } -export type ToolIds = Array<string> - export type ToolListItem = { id: string description: string @@ -1855,11 +1335,7 @@ export type ToolListItem = { export type ToolList = Array<ToolListItem> -export type Worktree = { - name: string - branch: string - directory: string -} +export type ToolIds = Array<string> export type WorktreeCreateInput = { name?: string @@ -1869,6 +1345,12 @@ export type WorktreeCreateInput = { startCommand?: string } +export type Worktree = { + name: string + branch: string + directory: string +} + export type WorktreeRemoveInput = { directory: string } @@ -1901,6 +1383,12 @@ export type GlobalSession = { url: string } title: string + agent?: string + model?: { + id: string + providerID: string + variant?: string + } version: string time: { created: number @@ -1926,93 +1414,6 @@ export type McpResource = { client: string } -export type TextPartInput = { - id?: string - type: "text" - text: string - synthetic?: boolean - ignored?: boolean - time?: { - start: number - end?: number - } - metadata?: { - [key: string]: unknown - } -} - -export type FilePartInput = { - id?: string - type: "file" - mime: string - filename?: string - url: string - source?: FilePartSource -} - -export type AgentPartInput = { - id?: string - type: "agent" - name: string - source?: { - value: string - start: number - end: number - } -} - -export type SubtaskPartInput = { - id?: string - type: "subtask" - prompt: string - description: string - agent: string - model?: { - providerID: string - modelID: string - } - command?: string -} - -export type ProviderAuthMethod = { - type: "oauth" | "api" - label: string - prompts?: Array< - | { - type: "text" - key: string - message: string - placeholder?: string - when?: { - key: string - op: "eq" | "neq" - value: string - } - } - | { - type: "select" - key: string - message: string - options: Array<{ - label: string - value: string - hint?: string - }> - when?: { - key: string - op: "eq" | "neq" - value: string - } - } - > -} - -export type ProviderAuthAuthorization = { - url: string - method: "auto" | "code" - instructions: string -} - export type Symbol = { name: string kind: number @@ -2059,88 +1460,6 @@ export type File = { status: "added" | "deleted" | "modified" } -export type Event = - | EventServerInstanceDisposed - | EventFileEdited - | EventFileWatcherUpdated - | EventLspClientDiagnostics - | EventLspUpdated - | EventMessagePartDelta - | EventPermissionAsked - | EventPermissionReplied - | EventSessionDiff - | EventSessionError - | EventInstallationUpdated - | EventInstallationUpdateAvailable - | EventQuestionAsked - | EventQuestionReplied - | EventQuestionRejected - | EventTodoUpdated - | EventSessionStatus - | EventSessionIdle - | EventSessionCompacted - | EventTuiPromptAppend - | EventTuiCommandExecute - | EventTuiToastShow - | EventTuiSessionSelect - | EventMcpToolsChanged - | EventMcpBrowserOpenFailed - | EventCommandExecuted - | EventProjectUpdated - | EventVcsBranchUpdated - | EventWorkspaceReady - | EventWorkspaceFailed - | EventWorkspaceRestore - | EventWorkspaceStatus - | EventWorktreeReady - | EventWorktreeFailed - | EventPtyCreated - | EventPtyUpdated - | EventPtyExited - | EventPtyDeleted - | EventMessageUpdated - | EventMessageRemoved - | EventMessagePartUpdated - | EventMessagePartRemoved - | EventSessionCreated - | EventSessionUpdated - | EventSessionDeleted - | EventServerConnected - | EventGlobalDisposed - -export type McpStatusConnected = { - status: "connected" -} - -export type McpStatusDisabled = { - status: "disabled" -} - -export type McpStatusFailed = { - status: "failed" - error: string -} - -export type McpStatusNeedsAuth = { - status: "needs_auth" -} - -export type McpStatusNeedsClientRegistration = { - status: "needs_client_registration" - error: string -} - -export type McpStatus = - | McpStatusConnected - | McpStatusDisabled - | McpStatusFailed - | McpStatusNeedsAuth - | McpStatusNeedsClientRegistration - -export type McpUnsupportedOAuthError = { - error: string -} - export type Path = { home: string state: string @@ -2208,6 +1527,1791 @@ export type FormatterStatus = { enabled: boolean } +export type McpStatusConnected = { + status: "connected" +} + +export type McpStatusDisabled = { + status: "disabled" +} + +export type McpStatusFailed = { + status: "failed" + error: string +} + +export type McpStatusNeedsAuth = { + status: "needs_auth" +} + +export type McpStatusNeedsClientRegistration = { + status: "needs_client_registration" + error: string +} + +export type McpStatus = + | McpStatusConnected + | McpStatusDisabled + | McpStatusFailed + | McpStatusNeedsAuth + | McpStatusNeedsClientRegistration + +export type McpUnsupportedOAuthError = { + error: string +} + +export type ProviderAuthMethod = { + type: "oauth" | "api" + label: string + prompts?: Array< + | { + type: "text" + key: string + message: string + placeholder?: string + when?: { + key: string + op: "eq" | "neq" + value: string + } + } + | { + type: "select" + key: string + message: string + options: Array<{ + label: string + value: string + hint?: string + }> + when?: { + key: string + op: "eq" | "neq" + value: string + } + } + > +} + +export type ProviderAuthAuthorization = { + url: string + method: "auto" | "code" + instructions: string +} + +export type TextPartInput = { + id?: string + type: "text" + text: string + synthetic?: boolean + ignored?: boolean + time?: { + start: number + end?: number + } + metadata?: { + [key: string]: unknown + } +} + +export type FilePartInput = { + id?: string + type: "file" + mime: string + filename?: string + url: string + source?: FilePartSource +} + +export type AgentPartInput = { + id?: string + type: "agent" + name: string + source?: { + value: string + start: number + end: number + } +} + +export type SubtaskPartInput = { + id?: string + type: "subtask" + prompt: string + description: string + agent: string + model?: { + providerID: string + modelID: string + } + command?: string +} + +export type V2SessionsResponse = { + items: Array<SessionInfo> + cursor: { + previous?: string + next?: string + } +} + +export type V2SessionMessagesResponse = { + items: Array<SessionMessage> + cursor: { + previous?: string + next?: string + } +} + +export type EventTuiPromptAppend2 = { + type: "tui.prompt.append" + properties: { + text: string + } +} + +export type EventTuiCommandExecute2 = { + 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 EventTuiToastShow2 = { + type: "tui.toast.show" + properties: { + title?: string + message: string + variant: "info" | "success" | "warning" | "error" + duration?: number + } +} + +export type EventTuiSessionSelect2 = { + type: "tui.session.select" + properties: { + /** + * Session ID to navigate to + */ + sessionID: string + } +} + +export type Workspace = { + id: string + type: string + name: string + branch: string | null + directory: string | null + extra: unknown | null + projectID: string +} + +export type SyncEventMessageUpdated = { + type: "sync" + name: "message.updated.1" + id: string + seq: number + aggregateID: "sessionID" + data: { + sessionID: string + info: Message + } +} + +export type SyncEventMessageRemoved = { + type: "sync" + name: "message.removed.1" + id: string + seq: number + aggregateID: "sessionID" + data: { + sessionID: string + messageID: string + } +} + +export type SyncEventMessagePartUpdated = { + type: "sync" + name: "message.part.updated.1" + id: string + seq: number + aggregateID: "sessionID" + data: { + sessionID: string + part: Part + time: number + } +} + +export type SyncEventMessagePartRemoved = { + type: "sync" + name: "message.part.removed.1" + id: string + seq: number + aggregateID: "sessionID" + data: { + sessionID: string + messageID: string + partID: string + } +} + +export type SyncEventSessionCreated = { + type: "sync" + name: "session.created.1" + id: string + seq: number + aggregateID: "sessionID" + data: { + sessionID: string + info: Session + } +} + +export type SyncEventSessionUpdated = { + type: "sync" + name: "session.updated.1" + id: string + seq: number + aggregateID: "sessionID" + data: { + sessionID: string + info: { + id?: string | null + slug?: string | null + projectID?: string | null + workspaceID?: string | null + directory?: string | null + path?: string | null + parentID?: string | null + summary?: { + additions: number + deletions: number + files: number + diffs?: Array<SnapshotFileDiff> + } | null + share?: { + url?: string | null + } + title?: string | null + agent?: string | null + model?: { + id: string + providerID: string + variant?: string + } | null + version?: string | null + time?: { + created?: number | null + updated?: number | null + compacting?: number | null + archived?: number | null + } + permission?: PermissionRuleset | null + revert?: { + messageID: string + partID?: string + snapshot?: string + diff?: string + } | null + } + } +} + +export type SyncEventSessionDeleted = { + type: "sync" + name: "session.deleted.1" + id: string + seq: number + aggregateID: "sessionID" + data: { + sessionID: string + info: Session + } +} + +export type SyncEventSessionNextAgentSwitched = { + type: "sync" + name: "session.next.agent.switched.1" + id: string + seq: number + aggregateID: "sessionID" + data: { + timestamp: number + sessionID: string + agent: string + } +} + +export type SyncEventSessionNextModelSwitched = { + type: "sync" + name: "session.next.model.switched.1" + id: string + seq: number + aggregateID: "sessionID" + data: { + timestamp: number + sessionID: string + id: string + providerID: string + variant?: string + } +} + +export type SyncEventSessionNextPrompted = { + type: "sync" + name: "session.next.prompted.1" + id: string + seq: number + aggregateID: "sessionID" + data: { + timestamp: number + sessionID: string + prompt: Prompt + } +} + +export type SyncEventSessionNextSynthetic = { + type: "sync" + name: "session.next.synthetic.1" + id: string + seq: number + aggregateID: "sessionID" + data: { + timestamp: number + sessionID: string + text: string + } +} + +export type SyncEventSessionNextShellStarted = { + type: "sync" + name: "session.next.shell.started.1" + id: string + seq: number + aggregateID: "sessionID" + data: { + timestamp: number + sessionID: string + callID: string + command: string + } +} + +export type SyncEventSessionNextShellEnded = { + type: "sync" + name: "session.next.shell.ended.1" + id: string + seq: number + aggregateID: "sessionID" + data: { + timestamp: number + sessionID: string + callID: string + output: string + } +} + +export type SyncEventSessionNextStepStarted = { + type: "sync" + name: "session.next.step.started.1" + id: string + seq: number + aggregateID: "sessionID" + data: { + timestamp: number + sessionID: string + agent: string + model: { + id: string + providerID: string + variant?: string + } + snapshot?: string + } +} + +export type SyncEventSessionNextStepEnded = { + type: "sync" + name: "session.next.step.ended.1" + id: string + seq: number + aggregateID: "sessionID" + data: { + timestamp: number + sessionID: string + finish: string + cost: number + tokens: { + input: number + output: number + reasoning: number + cache: { + read: number + write: number + } + } + snapshot?: string + } +} + +export type SyncEventSessionNextTextStarted = { + type: "sync" + name: "session.next.text.started.1" + id: string + seq: number + aggregateID: "sessionID" + data: { + timestamp: number + sessionID: string + } +} + +export type SyncEventSessionNextTextDelta = { + type: "sync" + name: "session.next.text.delta.1" + id: string + seq: number + aggregateID: "sessionID" + data: { + timestamp: number + sessionID: string + delta: string + } +} + +export type SyncEventSessionNextTextEnded = { + type: "sync" + name: "session.next.text.ended.1" + id: string + seq: number + aggregateID: "sessionID" + data: { + timestamp: number + sessionID: string + text: string + } +} + +export type SyncEventSessionNextReasoningStarted = { + type: "sync" + name: "session.next.reasoning.started.1" + id: string + seq: number + aggregateID: "sessionID" + data: { + timestamp: number + sessionID: string + reasoningID: string + } +} + +export type SyncEventSessionNextReasoningDelta = { + type: "sync" + name: "session.next.reasoning.delta.1" + id: string + seq: number + aggregateID: "sessionID" + data: { + timestamp: number + sessionID: string + reasoningID: string + delta: string + } +} + +export type SyncEventSessionNextReasoningEnded = { + type: "sync" + name: "session.next.reasoning.ended.1" + id: string + seq: number + aggregateID: "sessionID" + data: { + timestamp: number + sessionID: string + reasoningID: string + text: string + } +} + +export type SyncEventSessionNextToolInputStarted = { + type: "sync" + name: "session.next.tool.input.started.1" + id: string + seq: number + aggregateID: "sessionID" + data: { + timestamp: number + sessionID: string + callID: string + name: string + } +} + +export type SyncEventSessionNextToolInputDelta = { + type: "sync" + name: "session.next.tool.input.delta.1" + id: string + seq: number + aggregateID: "sessionID" + data: { + timestamp: number + sessionID: string + callID: string + delta: string + } +} + +export type SyncEventSessionNextToolInputEnded = { + type: "sync" + name: "session.next.tool.input.ended.1" + id: string + seq: number + aggregateID: "sessionID" + data: { + timestamp: number + sessionID: string + callID: string + text: string + } +} + +export type SyncEventSessionNextToolCalled = { + type: "sync" + name: "session.next.tool.called.1" + id: string + seq: number + aggregateID: "sessionID" + data: { + timestamp: number + sessionID: string + callID: string + tool: string + input: { + [key: string]: unknown + } + provider: { + executed: boolean + metadata?: { + [key: string]: unknown + } + } + } +} + +export type SyncEventSessionNextToolProgress = { + type: "sync" + name: "session.next.tool.progress.1" + id: string + seq: number + aggregateID: "sessionID" + data: { + timestamp: number + sessionID: string + callID: string + structured: { + [key: string]: unknown + } + content: Array<ToolTextContent | ToolFileContent> + } +} + +export type SyncEventSessionNextToolSuccess = { + type: "sync" + name: "session.next.tool.success.1" + id: string + seq: number + aggregateID: "sessionID" + data: { + timestamp: number + sessionID: string + callID: string + structured: { + [key: string]: unknown + } + content: Array<ToolTextContent | ToolFileContent> + provider: { + executed: boolean + metadata?: { + [key: string]: unknown + } + } + } +} + +export type SyncEventSessionNextToolError = { + type: "sync" + name: "session.next.tool.error.1" + id: string + seq: number + aggregateID: "sessionID" + data: { + timestamp: number + sessionID: string + callID: string + error: { + type: string + message: string + } + provider: { + executed: boolean + metadata?: { + [key: string]: unknown + } + } + } +} + +export type SyncEventSessionNextRetried = { + type: "sync" + name: "session.next.retried.1" + id: string + seq: number + aggregateID: "sessionID" + data: { + timestamp: number + sessionID: string + attempt: number + error: SessionNextRetryError + } +} + +export type SyncEventSessionNextCompactionStarted = { + type: "sync" + name: "session.next.compaction.started.1" + id: string + seq: number + aggregateID: "sessionID" + data: { + timestamp: number + sessionID: string + reason: "auto" | "manual" + } +} + +export type SyncEventSessionNextCompactionDelta = { + type: "sync" + name: "session.next.compaction.delta.1" + id: string + seq: number + aggregateID: "sessionID" + data: { + timestamp: number + sessionID: string + text: string + } +} + +export type SyncEventSessionNextCompactionEnded = { + type: "sync" + name: "session.next.compaction.ended.1" + id: string + seq: number + aggregateID: "sessionID" + data: { + timestamp: number + sessionID: string + text: string + include?: string + } +} + +export type EventServerInstanceDisposed = { + id: string + type: "server.instance.disposed" + properties: { + directory: string + } +} + +export type EventFileEdited = { + id: string + type: "file.edited" + properties: { + file: string + } +} + +export type EventFileWatcherUpdated = { + id: string + type: "file.watcher.updated" + properties: { + file: string + event: "add" | "change" | "unlink" + } +} + +export type EventLspClientDiagnostics = { + id: string + type: "lsp.client.diagnostics" + properties: { + serverID: string + path: string + } +} + +export type EventLspUpdated = { + id: string + type: "lsp.updated" + properties: { + [key: string]: unknown + } +} + +export type EventMessagePartDelta = { + id: string + type: "message.part.delta" + properties: { + sessionID: string + messageID: string + partID: string + field: string + delta: string + } +} + +export type EventPermissionAsked = { + id: string + type: "permission.asked" + properties: PermissionRequest +} + +export type EventPermissionReplied = { + id: string + type: "permission.replied" + properties: { + sessionID: string + requestID: string + reply: "once" | "always" | "reject" + } +} + +export type EventSessionDiff = { + id: string + type: "session.diff" + properties: { + sessionID: string + diff: Array<SnapshotFileDiff> + } +} + +export type EventSessionError = { + id: string + type: "session.error" + properties: { + sessionID?: string + error?: + | ProviderAuthError + | UnknownError + | MessageOutputLengthError + | MessageAbortedError + | StructuredOutputError + | ContextOverflowError + | ApiError + } +} + +export type EventInstallationUpdated = { + id: string + type: "installation.updated" + properties: { + version: string + } +} + +export type EventInstallationUpdateAvailable = { + id: string + type: "installation.update-available" + properties: { + version: string + } +} + +export type EventQuestionAsked = { + id: string + type: "question.asked" + properties: QuestionRequest +} + +export type EventQuestionReplied = { + id: string + type: "question.replied" + properties: QuestionReplied +} + +export type EventQuestionRejected = { + id: string + type: "question.rejected" + properties: QuestionRejected +} + +export type EventTodoUpdated = { + id: string + type: "todo.updated" + properties: { + sessionID: string + todos: Array<Todo> + } +} + +export type EventSessionStatus = { + id: string + type: "session.status" + properties: { + sessionID: string + status: SessionStatus + } +} + +export type EventSessionIdle = { + id: string + type: "session.idle" + properties: { + sessionID: string + } +} + +export type EventSessionCompacted = { + id: string + type: "session.compacted" + properties: { + sessionID: string + } +} + +export type EventMcpToolsChanged = { + id: string + type: "mcp.tools.changed" + properties: { + server: string + } +} + +export type EventMcpBrowserOpenFailed = { + id: string + type: "mcp.browser.open.failed" + properties: { + mcpName: string + url: string + } +} + +export type EventCommandExecuted = { + id: string + type: "command.executed" + properties: { + name: string + sessionID: string + arguments: string + messageID: string + } +} + +export type EventProjectUpdated = { + id: string + type: "project.updated" + properties: Project +} + +export type EventVcsBranchUpdated = { + id: string + type: "vcs.branch.updated" + properties: { + branch?: string + } +} + +export type EventWorkspaceReady = { + id: string + type: "workspace.ready" + properties: { + name: string + } +} + +export type EventWorkspaceFailed = { + id: string + type: "workspace.failed" + properties: { + message: string + } +} + +export type EventWorkspaceRestore = { + id: string + type: "workspace.restore" + properties: { + workspaceID: string + sessionID: string + total: number + step: number + } +} + +export type EventWorkspaceStatus = { + id: string + type: "workspace.status" + properties: { + workspaceID: string + status: "connected" | "connecting" | "disconnected" | "error" + } +} + +export type EventWorktreeReady = { + id: string + type: "worktree.ready" + properties: { + name: string + branch: string + } +} + +export type EventWorktreeFailed = { + id: string + type: "worktree.failed" + properties: { + message: string + } +} + +export type EventPtyCreated = { + id: string + type: "pty.created" + properties: { + info: Pty + } +} + +export type EventPtyUpdated = { + id: string + type: "pty.updated" + properties: { + info: Pty + } +} + +export type EventPtyExited = { + id: string + type: "pty.exited" + properties: { + id: string + exitCode: number + } +} + +export type EventPtyDeleted = { + id: string + type: "pty.deleted" + properties: { + id: string + } +} + +export type EventMessageUpdated = { + id: string + type: "message.updated" + properties: { + sessionID: string + info: Message + } +} + +export type EventMessageRemoved = { + id: string + type: "message.removed" + properties: { + sessionID: string + messageID: string + } +} + +export type EventMessagePartUpdated = { + id: string + type: "message.part.updated" + properties: { + sessionID: string + part: Part + time: number + } +} + +export type EventMessagePartRemoved = { + id: string + type: "message.part.removed" + properties: { + sessionID: string + messageID: string + partID: string + } +} + +export type EventSessionCreated = { + id: string + type: "session.created" + properties: { + sessionID: string + info: Session + } +} + +export type EventSessionUpdated = { + id: string + type: "session.updated" + properties: { + sessionID: string + info: Session + } +} + +export type EventSessionDeleted = { + id: string + type: "session.deleted" + properties: { + sessionID: string + info: Session + } +} + +export type EventSessionNextAgentSwitched = { + id: string + type: "session.next.agent.switched" + properties: { + timestamp: number + sessionID: string + agent: string + } +} + +export type EventSessionNextModelSwitched = { + id: string + type: "session.next.model.switched" + properties: { + timestamp: number + sessionID: string + id: string + providerID: string + variant?: string + } +} + +export type PromptSource = { + start: number + end: number + text: string +} + +export type PromptFileAttachment = { + uri: string + mime: string + name?: string + description?: string + source?: PromptSource +} + +export type PromptAgentAttachment = { + name: string + source?: PromptSource +} + +export type EventSessionNextPrompted = { + id: string + type: "session.next.prompted" + properties: { + timestamp: number + sessionID: string + prompt: Prompt + } +} + +export type EventSessionNextSynthetic = { + id: string + type: "session.next.synthetic" + properties: { + timestamp: number + sessionID: string + text: string + } +} + +export type EventSessionNextShellStarted = { + id: string + type: "session.next.shell.started" + properties: { + timestamp: number + sessionID: string + callID: string + command: string + } +} + +export type EventSessionNextShellEnded = { + id: string + type: "session.next.shell.ended" + properties: { + timestamp: number + sessionID: string + callID: string + output: string + } +} + +export type EventSessionNextStepStarted = { + id: string + type: "session.next.step.started" + properties: { + timestamp: number + sessionID: string + agent: string + model: { + id: string + providerID: string + variant?: string + } + snapshot?: string + } +} + +export type EventSessionNextStepEnded = { + id: string + type: "session.next.step.ended" + properties: { + timestamp: number + sessionID: string + finish: string + cost: number + tokens: { + input: number + output: number + reasoning: number + cache: { + read: number + write: number + } + } + snapshot?: string + } +} + +export type EventSessionNextTextStarted = { + id: string + type: "session.next.text.started" + properties: { + timestamp: number + sessionID: string + } +} + +export type EventSessionNextTextDelta = { + id: string + type: "session.next.text.delta" + properties: { + timestamp: number + sessionID: string + delta: string + } +} + +export type EventSessionNextTextEnded = { + id: string + type: "session.next.text.ended" + properties: { + timestamp: number + sessionID: string + text: string + } +} + +export type EventSessionNextReasoningStarted = { + id: string + type: "session.next.reasoning.started" + properties: { + timestamp: number + sessionID: string + reasoningID: string + } +} + +export type EventSessionNextReasoningDelta = { + id: string + type: "session.next.reasoning.delta" + properties: { + timestamp: number + sessionID: string + reasoningID: string + delta: string + } +} + +export type EventSessionNextReasoningEnded = { + id: string + type: "session.next.reasoning.ended" + properties: { + timestamp: number + sessionID: string + reasoningID: string + text: string + } +} + +export type EventSessionNextToolInputStarted = { + id: string + type: "session.next.tool.input.started" + properties: { + timestamp: number + sessionID: string + callID: string + name: string + } +} + +export type EventSessionNextToolInputDelta = { + id: string + type: "session.next.tool.input.delta" + properties: { + timestamp: number + sessionID: string + callID: string + delta: string + } +} + +export type EventSessionNextToolInputEnded = { + id: string + type: "session.next.tool.input.ended" + properties: { + timestamp: number + sessionID: string + callID: string + text: string + } +} + +export type EventSessionNextToolCalled = { + id: string + type: "session.next.tool.called" + properties: { + timestamp: number + sessionID: string + callID: string + tool: string + input: { + [key: string]: unknown + } + provider: { + executed: boolean + metadata?: { + [key: string]: unknown + } + } + } +} + +export type ToolTextContent = { + type: "text" + text: string +} + +export type ToolFileContent = { + type: "file" + uri: string + mime: string + name?: string +} + +export type EventSessionNextToolProgress = { + id: string + type: "session.next.tool.progress" + properties: { + timestamp: number + sessionID: string + callID: string + structured: { + [key: string]: unknown + } + content: Array<ToolTextContent | ToolFileContent> + } +} + +export type EventSessionNextToolSuccess = { + id: string + type: "session.next.tool.success" + properties: { + timestamp: number + sessionID: string + callID: string + structured: { + [key: string]: unknown + } + content: Array<ToolTextContent | ToolFileContent> + provider: { + executed: boolean + metadata?: { + [key: string]: unknown + } + } + } +} + +export type EventSessionNextToolError = { + id: string + type: "session.next.tool.error" + properties: { + timestamp: number + sessionID: string + callID: string + error: { + type: string + message: string + } + provider: { + executed: boolean + metadata?: { + [key: string]: unknown + } + } + } +} + +export type SessionNextRetryError = { + message: string + statusCode?: number + isRetryable: boolean + responseHeaders?: { + [key: string]: string + } + responseBody?: string + metadata?: { + [key: string]: string + } +} + +export type EventSessionNextRetried = { + id: string + type: "session.next.retried" + properties: { + timestamp: number + sessionID: string + attempt: number + error: SessionNextRetryError + } +} + +export type EventSessionNextCompactionStarted = { + id: string + type: "session.next.compaction.started" + properties: { + timestamp: number + sessionID: string + reason: "auto" | "manual" + } +} + +export type EventSessionNextCompactionDelta = { + id: string + type: "session.next.compaction.delta" + properties: { + timestamp: number + sessionID: string + text: string + } +} + +export type EventSessionNextCompactionEnded = { + id: string + type: "session.next.compaction.ended" + properties: { + timestamp: number + sessionID: string + text: string + include?: string + } +} + +export type EventServerConnected = { + id: string + type: "server.connected" + properties: { + [key: string]: unknown + } +} + +export type EventGlobalDisposed = { + id: string + type: "global.disposed" + properties: { + [key: string]: unknown + } +} + +export type SessionInfo = { + id: string + parentID?: string + projectID: string + workspaceID?: string + path?: string + agent?: string + model?: { + id: string + providerID: string + variant?: string + } + time: { + created: number + updated: number + archived?: number + } + title: string +} + +export type SessionDelivery = "immediate" | "deferred" + +export type SessionMessageAgentSwitched = { + id: string + metadata?: { + [key: string]: unknown + } + time: { + created: number + } + type: "agent-switched" + agent: string +} + +export type SessionMessageModelSwitched = { + id: string + metadata?: { + [key: string]: unknown + } + time: { + created: number + } + type: "model-switched" + model: { + id: string + providerID: string + variant?: string + } +} + +export type SessionMessageUser = { + id: string + metadata?: { + [key: string]: unknown + } + time: { + created: number + } + text: string + files?: Array<PromptFileAttachment> + agents?: Array<PromptAgentAttachment> + type: "user" +} + +export type SessionMessageSynthetic = { + id: string + metadata?: { + [key: string]: unknown + } + time: { + created: number + } + sessionID: string + text: string + type: "synthetic" +} + +export type SessionMessageShell = { + id: string + metadata?: { + [key: string]: unknown + } + time: { + created: number + completed?: number + } + type: "shell" + callID: string + command: string + output: string +} + +export type SessionMessageAssistantText = { + type: "text" + text: string +} + +export type SessionMessageAssistantReasoning = { + type: "reasoning" + id: string + text: string +} + +export type SessionMessageToolStatePending = { + status: "pending" + input: string +} + +export type SessionMessageToolStateRunning = { + status: "running" + input: { + [key: string]: unknown + } + structured: { + [key: string]: unknown + } + content: Array<ToolTextContent | ToolFileContent> +} + +export type SessionMessageToolStateCompleted = { + status: "completed" + input: { + [key: string]: unknown + } + attachments?: Array<PromptFileAttachment> + content: Array<ToolTextContent | ToolFileContent> + structured: { + [key: string]: unknown + } +} + +export type SessionMessageToolStateError = { + status: "error" + input: { + [key: string]: unknown + } + content: Array<ToolTextContent | ToolFileContent> + structured: { + [key: string]: unknown + } + error: { + type: string + message: string + } +} + +export type SessionMessageAssistantTool = { + type: "tool" + id: string + name: string + provider?: { + executed: boolean + metadata?: { + [key: string]: unknown + } + } + state: + | SessionMessageToolStatePending + | SessionMessageToolStateRunning + | SessionMessageToolStateCompleted + | SessionMessageToolStateError + time: { + created: number + ran?: number + completed?: number + pruned?: number + } +} + +export type SessionMessageAssistant = { + id: string + metadata?: { + [key: string]: unknown + } + time: { + created: number + completed?: number + } + type: "assistant" + agent: string + model: { + id: string + providerID: string + variant?: string + } + content: Array<SessionMessageAssistantText | SessionMessageAssistantReasoning | SessionMessageAssistantTool> + snapshot?: { + start?: string + end?: string + } + finish?: string + cost?: number + tokens?: { + input: number + output: number + reasoning: number + cache: { + read: number + write: number + } + } + error?: string +} + +export type SessionMessageCompaction = { + type: "compaction" + reason: "auto" | "manual" + summary: string + include?: string + id: string + metadata?: { + [key: string]: unknown + } + time: { + created: number + } +} + +export type SessionMessage = + | SessionMessageAgentSwitched + | SessionMessageModelSwitched + | SessionMessageUser + | SessionMessageSynthetic + | SessionMessageShell + | SessionMessageAssistant + | SessionMessageCompaction + +export type EventTuiToastShow1 = { + id: string + type: "tui.toast.show" + properties: { + title?: string + message: string + variant: "info" | "success" | "warning" | "error" + duration?: number + } +} + +export type BadRequestError = { + data: unknown + errors: Array<{ + [key: string]: unknown + }> + success: false +} + +export type NotFoundError = { + name: "NotFoundError" + data: { + message: string + } +} + +export type AuthRemoveData = { + body?: never + path: { + providerID: string + } + query?: never + url: "/auth/{providerID}" +} + +export type AuthRemoveErrors = { + /** + * Bad request + */ + 400: BadRequestError +} + +export type AuthRemoveError = AuthRemoveErrors[keyof AuthRemoveErrors] + +export type AuthRemoveResponses = { + /** + * Successfully removed authentication credentials + */ + 200: boolean +} + +export type AuthRemoveResponse = AuthRemoveResponses[keyof AuthRemoveResponses] + +export type AuthSetData = { + body?: Auth + path: { + providerID: string + } + query?: never + url: "/auth/{providerID}" +} + +export type AuthSetErrors = { + /** + * Bad request + */ + 400: BadRequestError +} + +export type AuthSetError = AuthSetErrors[keyof AuthSetErrors] + +export type AuthSetResponses = { + /** + * Successfully set authentication credentials + */ + 200: boolean +} + +export type AuthSetResponse = AuthSetResponses[keyof AuthSetResponses] + +export type AppLogData = { + body?: { + /** + * Service name for the log entry + */ + service: string + /** + * Log level + */ + level: "debug" | "info" | "error" | "warn" + /** + * Log message + */ + message: string + extra?: { + [key: string]: unknown + } + } + path?: never + query?: { + directory?: string + workspace?: string + } + url: "/log" +} + +export type AppLogErrors = { + /** + * Bad request + */ + 400: BadRequestError +} + +export type AppLogError = AppLogErrors[keyof AppLogErrors] + +export type AppLogResponses = { + /** + * Log entry written successfully + */ + 200: boolean +} + +export type AppLogResponse = AppLogResponses[keyof AppLogResponses] + export type GlobalHealthData = { body?: never path?: never @@ -2335,276 +3439,924 @@ export type GlobalUpgradeResponses = { export type GlobalUpgradeResponse = GlobalUpgradeResponses[keyof GlobalUpgradeResponses] -export type AuthRemoveData = { +export type EventSubscribeData = { body?: never - path: { - providerID: string + path?: never + query?: { + directory?: string + workspace?: string } - query?: never - url: "/auth/{providerID}" + url: "/event" } -export type AuthRemoveErrors = { +export type EventSubscribeResponses = { + /** + * Event stream + */ + 200: Event +} + +export type EventSubscribeResponse = EventSubscribeResponses[keyof EventSubscribeResponses] + +export type ConfigGetData = { + body?: never + path?: never + query?: { + directory?: string + workspace?: string + } + url: "/config" +} + +export type ConfigGetResponses = { + /** + * Get config info + */ + 200: Config +} + +export type ConfigGetResponse = ConfigGetResponses[keyof ConfigGetResponses] + +export type ConfigUpdateData = { + body?: Config + path?: never + query?: { + directory?: string + workspace?: string + } + url: "/config" +} + +export type ConfigUpdateErrors = { /** * Bad request */ 400: BadRequestError } -export type AuthRemoveError = AuthRemoveErrors[keyof AuthRemoveErrors] +export type ConfigUpdateError = ConfigUpdateErrors[keyof ConfigUpdateErrors] -export type AuthRemoveResponses = { +export type ConfigUpdateResponses = { /** - * Successfully removed authentication credentials + * Successfully updated config + */ + 200: Config +} + +export type ConfigUpdateResponse = ConfigUpdateResponses[keyof ConfigUpdateResponses] + +export type ConfigProvidersData = { + body?: never + path?: never + query?: { + directory?: string + workspace?: string + } + url: "/config/providers" +} + +export type ConfigProvidersResponses = { + /** + * List of providers + */ + 200: { + providers: Array<Provider> + default: { + [key: string]: string + } + } +} + +export type ConfigProvidersResponse = ConfigProvidersResponses[keyof ConfigProvidersResponses] + +export type ExperimentalConsoleGetData = { + body?: never + path?: never + query?: { + directory?: string + workspace?: string + } + url: "/experimental/console" +} + +export type ExperimentalConsoleGetResponses = { + /** + * Active Console provider metadata + */ + 200: ConsoleState +} + +export type ExperimentalConsoleGetResponse = ExperimentalConsoleGetResponses[keyof ExperimentalConsoleGetResponses] + +export type ExperimentalConsoleListOrgsData = { + body?: never + path?: never + query?: { + directory?: string + workspace?: string + } + url: "/experimental/console/orgs" +} + +export type ExperimentalConsoleListOrgsResponses = { + /** + * Switchable Console orgs + */ + 200: { + orgs: Array<{ + accountID: string + accountEmail: string + accountUrl: string + orgID: string + orgName: string + active: boolean + }> + } +} + +export type ExperimentalConsoleListOrgsResponse = + ExperimentalConsoleListOrgsResponses[keyof ExperimentalConsoleListOrgsResponses] + +export type ExperimentalConsoleSwitchOrgData = { + body?: { + accountID: string + orgID: string + } + path?: never + query?: { + directory?: string + workspace?: string + } + url: "/experimental/console/switch" +} + +export type ExperimentalConsoleSwitchOrgResponses = { + /** + * Switch success */ 200: boolean } -export type AuthRemoveResponse = AuthRemoveResponses[keyof AuthRemoveResponses] +export type ExperimentalConsoleSwitchOrgResponse = + ExperimentalConsoleSwitchOrgResponses[keyof ExperimentalConsoleSwitchOrgResponses] -export type AuthSetData = { - body?: Auth - path: { - providerID: string +export type ToolListData = { + body?: never + path?: never + query: { + directory?: string + workspace?: string + provider: string + model: string } - query?: never - url: "/auth/{providerID}" + url: "/experimental/tool" } -export type AuthSetErrors = { +export type ToolListErrors = { /** * Bad request */ 400: BadRequestError } -export type AuthSetError = AuthSetErrors[keyof AuthSetErrors] +export type ToolListError = ToolListErrors[keyof ToolListErrors] -export type AuthSetResponses = { +export type ToolListResponses = { /** - * Successfully set authentication credentials + * Tools + */ + 200: ToolList +} + +export type ToolListResponse = ToolListResponses[keyof ToolListResponses] + +export type ToolIdsData = { + body?: never + path?: never + query?: { + directory?: string + workspace?: string + } + url: "/experimental/tool/ids" +} + +export type ToolIdsErrors = { + /** + * Bad request + */ + 400: BadRequestError +} + +export type ToolIdsError = ToolIdsErrors[keyof ToolIdsErrors] + +export type ToolIdsResponses = { + /** + * Tool IDs + */ + 200: ToolIds +} + +export type ToolIdsResponse = ToolIdsResponses[keyof ToolIdsResponses] + +export type WorktreeRemoveData = { + body?: WorktreeRemoveInput + path?: never + query?: { + directory?: string + workspace?: string + } + url: "/experimental/worktree" +} + +export type WorktreeRemoveErrors = { + /** + * Bad request + */ + 400: BadRequestError +} + +export type WorktreeRemoveError = WorktreeRemoveErrors[keyof WorktreeRemoveErrors] + +export type WorktreeRemoveResponses = { + /** + * Worktree removed */ 200: boolean } -export type AuthSetResponse = AuthSetResponses[keyof AuthSetResponses] +export type WorktreeRemoveResponse = WorktreeRemoveResponses[keyof WorktreeRemoveResponses] -export type AppLogData = { - body?: { - /** - * Service name for the log entry - */ - service: string - /** - * Log level - */ - level: "debug" | "info" | "error" | "warn" - /** - * Log message - */ - message: string - /** - * Additional metadata for the log entry - */ - extra?: { - [key: string]: unknown - } +export type WorktreeListData = { + body?: never + path?: never + query?: { + directory?: string + workspace?: string } + url: "/experimental/worktree" +} + +export type WorktreeListResponses = { + /** + * List of worktree directories + */ + 200: Array<string> +} + +export type WorktreeListResponse = WorktreeListResponses[keyof WorktreeListResponses] + +export type WorktreeCreateData = { + body?: WorktreeCreateInput path?: never query?: { directory?: string workspace?: string } - url: "/log" + url: "/experimental/worktree" } -export type AppLogErrors = { +export type WorktreeCreateErrors = { /** * Bad request */ 400: BadRequestError } -export type AppLogError = AppLogErrors[keyof AppLogErrors] +export type WorktreeCreateError = WorktreeCreateErrors[keyof WorktreeCreateErrors] -export type AppLogResponses = { +export type WorktreeCreateResponses = { /** - * Log entry written successfully + * Worktree created + */ + 200: Worktree +} + +export type WorktreeCreateResponse = WorktreeCreateResponses[keyof WorktreeCreateResponses] + +export type WorktreeResetData = { + body?: WorktreeResetInput + path?: never + query?: { + directory?: string + workspace?: string + } + url: "/experimental/worktree/reset" +} + +export type WorktreeResetErrors = { + /** + * Bad request + */ + 400: BadRequestError +} + +export type WorktreeResetError = WorktreeResetErrors[keyof WorktreeResetErrors] + +export type WorktreeResetResponses = { + /** + * Worktree reset */ 200: boolean } -export type AppLogResponse = AppLogResponses[keyof AppLogResponses] +export type WorktreeResetResponse = WorktreeResetResponses[keyof WorktreeResetResponses] -export type ExperimentalWorkspaceAdapterListData = { +export type ExperimentalSessionListData = { + body?: never + path?: never + query?: { + directory?: string + workspace?: string + roots?: boolean | "true" | "false" + start?: number + cursor?: number + search?: string + limit?: number + archived?: boolean | "true" | "false" + } + url: "/experimental/session" +} + +export type ExperimentalSessionListResponses = { + /** + * List of sessions + */ + 200: Array<GlobalSession> +} + +export type ExperimentalSessionListResponse = ExperimentalSessionListResponses[keyof ExperimentalSessionListResponses] + +export type ExperimentalResourceListData = { body?: never path?: never query?: { directory?: string workspace?: string } - url: "/experimental/workspace/adapter" + url: "/experimental/resource" } -export type ExperimentalWorkspaceAdapterListResponses = { +export type ExperimentalResourceListResponses = { /** - * Workspace adapters + * MCP resources + */ + 200: { + [key: string]: McpResource + } +} + +export type ExperimentalResourceListResponse = + ExperimentalResourceListResponses[keyof ExperimentalResourceListResponses] + +export type FindTextData = { + body?: never + path?: never + query: { + directory?: string + workspace?: string + pattern: string + } + url: "/find" +} + +export type FindTextResponses = { + /** + * Matches + */ + 200: Array<{ + path: { + text: string + } + lines: { + text: string + } + line_number: number + absolute_offset: number + submatches: Array<{ + match: { + text: string + } + start: number + end: number + }> + }> +} + +export type FindTextResponse = FindTextResponses[keyof FindTextResponses] + +export type FindFilesData = { + body?: never + path?: never + query: { + directory?: string + workspace?: string + query: string + dirs?: "true" | "false" + type?: "file" | "directory" + limit?: number + } + url: "/find/file" +} + +export type FindFilesResponses = { + /** + * File paths + */ + 200: Array<string> +} + +export type FindFilesResponse = FindFilesResponses[keyof FindFilesResponses] + +export type FindSymbolsData = { + body?: never + path?: never + query: { + directory?: string + workspace?: string + query: string + } + url: "/find/symbol" +} + +export type FindSymbolsResponses = { + /** + * Symbols + */ + 200: Array<Symbol> +} + +export type FindSymbolsResponse = FindSymbolsResponses[keyof FindSymbolsResponses] + +export type FileListData = { + body?: never + path?: never + query: { + directory?: string + workspace?: string + path: string + } + url: "/file" +} + +export type FileListResponses = { + /** + * Files and directories + */ + 200: Array<FileNode> +} + +export type FileListResponse = FileListResponses[keyof FileListResponses] + +export type FileReadData = { + body?: never + path?: never + query: { + directory?: string + workspace?: string + path: string + } + url: "/file/content" +} + +export type FileReadResponses = { + /** + * File content + */ + 200: FileContent +} + +export type FileReadResponse = FileReadResponses[keyof FileReadResponses] + +export type FileStatusData = { + body?: never + path?: never + query?: { + directory?: string + workspace?: string + } + url: "/file/status" +} + +export type FileStatusResponses = { + /** + * File status + */ + 200: Array<File> +} + +export type FileStatusResponse = FileStatusResponses[keyof FileStatusResponses] + +export type InstanceDisposeData = { + body?: never + path?: never + query?: { + directory?: string + workspace?: string + } + url: "/instance/dispose" +} + +export type InstanceDisposeResponses = { + /** + * Instance disposed + */ + 200: boolean +} + +export type InstanceDisposeResponse = InstanceDisposeResponses[keyof InstanceDisposeResponses] + +export type PathGetData = { + body?: never + path?: never + query?: { + directory?: string + workspace?: string + } + url: "/path" +} + +export type PathGetResponses = { + /** + * Path + */ + 200: Path +} + +export type PathGetResponse = PathGetResponses[keyof PathGetResponses] + +export type VcsGetData = { + body?: never + path?: never + query?: { + directory?: string + workspace?: string + } + url: "/vcs" +} + +export type VcsGetResponses = { + /** + * VCS info + */ + 200: VcsInfo +} + +export type VcsGetResponse = VcsGetResponses[keyof VcsGetResponses] + +export type VcsDiffData = { + body?: never + path?: never + query: { + directory?: string + workspace?: string + mode: "git" | "branch" + } + url: "/vcs/diff" +} + +export type VcsDiffResponses = { + /** + * VCS diff + */ + 200: Array<VcsFileDiff> +} + +export type VcsDiffResponse = VcsDiffResponses[keyof VcsDiffResponses] + +export type CommandListData = { + body?: never + path?: never + query?: { + directory?: string + workspace?: string + } + url: "/command" +} + +export type CommandListResponses = { + /** + * List of commands + */ + 200: Array<Command> +} + +export type CommandListResponse = CommandListResponses[keyof CommandListResponses] + +export type AppAgentsData = { + body?: never + path?: never + query?: { + directory?: string + workspace?: string + } + url: "/agent" +} + +export type AppAgentsResponses = { + /** + * List of agents + */ + 200: Array<Agent> +} + +export type AppAgentsResponse = AppAgentsResponses[keyof AppAgentsResponses] + +export type AppSkillsData = { + body?: never + path?: never + query?: { + directory?: string + workspace?: string + } + url: "/skill" +} + +export type AppSkillsResponses = { + /** + * List of skills */ 200: Array<{ - type: string name: string description: string + location: string + content: string }> } -export type ExperimentalWorkspaceAdapterListResponse = - ExperimentalWorkspaceAdapterListResponses[keyof ExperimentalWorkspaceAdapterListResponses] +export type AppSkillsResponse = AppSkillsResponses[keyof AppSkillsResponses] -export type ExperimentalWorkspaceListData = { +export type LspStatusData = { body?: never path?: never query?: { directory?: string workspace?: string } - url: "/experimental/workspace" + url: "/lsp" } -export type ExperimentalWorkspaceListResponses = { +export type LspStatusResponses = { /** - * Workspaces + * LSP server status */ - 200: Array<Workspace> + 200: Array<LspStatus> } -export type ExperimentalWorkspaceListResponse = - ExperimentalWorkspaceListResponses[keyof ExperimentalWorkspaceListResponses] +export type LspStatusResponse = LspStatusResponses[keyof LspStatusResponses] -export type ExperimentalWorkspaceCreateData = { +export type FormatterStatusData = { + body?: never + path?: never + query?: { + directory?: string + workspace?: string + } + url: "/formatter" +} + +export type FormatterStatusResponses = { + /** + * Formatter status + */ + 200: Array<FormatterStatus> +} + +export type FormatterStatusResponse = FormatterStatusResponses[keyof FormatterStatusResponses] + +export type McpStatusData = { + body?: never + path?: never + query?: { + directory?: string + workspace?: string + } + url: "/mcp" +} + +export type McpStatusResponses = { + /** + * MCP server status + */ + 200: { + [key: string]: McpStatus + } +} + +export type McpStatusResponse = McpStatusResponses[keyof McpStatusResponses] + +export type McpAddData = { body?: { - id?: string - type: string - branch: string | null - extra: unknown | null + name: string + config: McpLocalConfig | McpRemoteConfig } path?: never query?: { directory?: string workspace?: string } - url: "/experimental/workspace" + url: "/mcp" } -export type ExperimentalWorkspaceCreateErrors = { +export type McpAddErrors = { /** * Bad request */ 400: BadRequestError } -export type ExperimentalWorkspaceCreateError = - ExperimentalWorkspaceCreateErrors[keyof ExperimentalWorkspaceCreateErrors] +export type McpAddError = McpAddErrors[keyof McpAddErrors] -export type ExperimentalWorkspaceCreateResponses = { +export type McpAddResponses = { /** - * Workspace created + * MCP server added successfully */ - 200: Workspace + 200: { + [key: string]: McpStatus + } } -export type ExperimentalWorkspaceCreateResponse = - ExperimentalWorkspaceCreateResponses[keyof ExperimentalWorkspaceCreateResponses] +export type McpAddResponse = McpAddResponses[keyof McpAddResponses] -export type ExperimentalWorkspaceStatusData = { +export type McpAuthRemoveData = { body?: never - path?: never + path: { + name: string + } query?: { directory?: string workspace?: string } - url: "/experimental/workspace/status" + url: "/mcp/{name}/auth" } -export type ExperimentalWorkspaceStatusResponses = { +export type McpAuthRemoveErrors = { /** - * Workspace status + * Not found */ - 200: Array<{ - workspaceID: string - status: "connected" | "connecting" | "disconnected" | "error" - }> + 404: NotFoundError } -export type ExperimentalWorkspaceStatusResponse = - ExperimentalWorkspaceStatusResponses[keyof ExperimentalWorkspaceStatusResponses] +export type McpAuthRemoveError = McpAuthRemoveErrors[keyof McpAuthRemoveErrors] -export type ExperimentalWorkspaceRemoveData = { +export type McpAuthRemoveResponses = { + /** + * OAuth credentials removed + */ + 200: { + success: true + } +} + +export type McpAuthRemoveResponse = McpAuthRemoveResponses[keyof McpAuthRemoveResponses] + +export type McpAuthStartData = { body?: never path: { - id: string + name: string } query?: { directory?: string workspace?: string } - url: "/experimental/workspace/{id}" + url: "/mcp/{name}/auth" } -export type ExperimentalWorkspaceRemoveErrors = { +export type McpAuthStartErrors = { /** - * Bad request + * McpUnsupportedOAuthError */ - 400: BadRequestError + 400: McpUnsupportedOAuthError + /** + * Not found + */ + 404: NotFoundError } -export type ExperimentalWorkspaceRemoveError = - ExperimentalWorkspaceRemoveErrors[keyof ExperimentalWorkspaceRemoveErrors] +export type McpAuthStartError = McpAuthStartErrors[keyof McpAuthStartErrors] -export type ExperimentalWorkspaceRemoveResponses = { +export type McpAuthStartResponses = { /** - * Workspace removed + * OAuth flow started */ - 200: Workspace + 200: { + authorizationUrl: string + oauthState: string + } } -export type ExperimentalWorkspaceRemoveResponse = - ExperimentalWorkspaceRemoveResponses[keyof ExperimentalWorkspaceRemoveResponses] +export type McpAuthStartResponse = McpAuthStartResponses[keyof McpAuthStartResponses] -export type ExperimentalWorkspaceSessionRestoreData = { +export type McpAuthCallbackData = { body?: { - sessionID: string + code: string } path: { - id: string + name: string } query?: { directory?: string workspace?: string } - url: "/experimental/workspace/{id}/session-restore" + url: "/mcp/{name}/auth/callback" } -export type ExperimentalWorkspaceSessionRestoreErrors = { +export type McpAuthCallbackErrors = { /** * Bad request */ 400: BadRequestError + /** + * Not found + */ + 404: NotFoundError } -export type ExperimentalWorkspaceSessionRestoreError = - ExperimentalWorkspaceSessionRestoreErrors[keyof ExperimentalWorkspaceSessionRestoreErrors] +export type McpAuthCallbackError = McpAuthCallbackErrors[keyof McpAuthCallbackErrors] -export type ExperimentalWorkspaceSessionRestoreResponses = { +export type McpAuthCallbackResponses = { /** - * Session replay started + * OAuth authentication completed */ - 200: { - total: number + 200: McpStatus +} + +export type McpAuthCallbackResponse = McpAuthCallbackResponses[keyof McpAuthCallbackResponses] + +export type McpAuthAuthenticateData = { + body?: never + path: { + name: string + } + query?: { + directory?: string + workspace?: string } + url: "/mcp/{name}/auth/authenticate" } -export type ExperimentalWorkspaceSessionRestoreResponse = - ExperimentalWorkspaceSessionRestoreResponses[keyof ExperimentalWorkspaceSessionRestoreResponses] +export type McpAuthAuthenticateErrors = { + /** + * McpUnsupportedOAuthError + */ + 400: McpUnsupportedOAuthError + /** + * Not found + */ + 404: NotFoundError +} + +export type McpAuthAuthenticateError = McpAuthAuthenticateErrors[keyof McpAuthAuthenticateErrors] + +export type McpAuthAuthenticateResponses = { + /** + * OAuth authentication completed + */ + 200: McpStatus +} + +export type McpAuthAuthenticateResponse = McpAuthAuthenticateResponses[keyof McpAuthAuthenticateResponses] + +export type McpConnectData = { + body?: never + path: { + name: string + } + query?: { + directory?: string + workspace?: string + } + url: "/mcp/{name}/connect" +} + +export type McpConnectResponses = { + /** + * MCP server connected successfully + */ + 200: boolean +} + +export type McpConnectResponse = McpConnectResponses[keyof McpConnectResponses] + +export type McpDisconnectData = { + body?: never + path: { + name: string + } + query?: { + directory?: string + workspace?: string + } + url: "/mcp/{name}/disconnect" +} + +export type McpDisconnectResponses = { + /** + * MCP server disconnected successfully + */ + 200: boolean +} + +export type McpDisconnectResponse = McpDisconnectResponses[keyof McpDisconnectResponses] export type ProjectListData = { body?: never @@ -2884,439 +4636,285 @@ export type PtyUpdateResponses = { export type PtyUpdateResponse = PtyUpdateResponses[keyof PtyUpdateResponses] -export type PtyConnectData = { - body?: never - path: { - ptyID: string - } - query?: { - directory?: string - workspace?: string - } - url: "/pty/{ptyID}/connect" -} - -export type PtyConnectErrors = { - /** - * Not found - */ - 404: NotFoundError -} - -export type PtyConnectError = PtyConnectErrors[keyof PtyConnectErrors] - -export type PtyConnectResponses = { - /** - * Connected session - */ - 200: boolean -} - -export type PtyConnectResponse = PtyConnectResponses[keyof PtyConnectResponses] - -export type ConfigGetData = { +export type QuestionListData = { body?: never path?: never query?: { directory?: string workspace?: string } - url: "/config" + url: "/question" } -export type ConfigGetResponses = { +export type QuestionListResponses = { /** - * Get config info + * List of pending questions */ - 200: Config + 200: Array<QuestionRequest> } -export type ConfigGetResponse = ConfigGetResponses[keyof ConfigGetResponses] +export type QuestionListResponse = QuestionListResponses[keyof QuestionListResponses] -export type ConfigUpdateData = { - body?: Config - path?: never +export type QuestionReplyData = { + body?: { + /** + * User answers in order of questions (each answer is an array of selected labels) + */ + answers: Array<QuestionAnswer> + } + path: { + requestID: string + } query?: { directory?: string workspace?: string } - url: "/config" + url: "/question/{requestID}/reply" } -export type ConfigUpdateErrors = { +export type QuestionReplyErrors = { /** * Bad request */ 400: BadRequestError -} - -export type ConfigUpdateError = ConfigUpdateErrors[keyof ConfigUpdateErrors] - -export type ConfigUpdateResponses = { /** - * Successfully updated config + * Not found */ - 200: Config + 404: NotFoundError } -export type ConfigUpdateResponse = ConfigUpdateResponses[keyof ConfigUpdateResponses] - -export type ConfigProvidersData = { - body?: never - path?: never - query?: { - directory?: string - workspace?: string - } - url: "/config/providers" -} +export type QuestionReplyError = QuestionReplyErrors[keyof QuestionReplyErrors] -export type ConfigProvidersResponses = { +export type QuestionReplyResponses = { /** - * List of providers + * Question answered successfully */ - 200: { - providers: Array<Provider> - default: { - [key: string]: string - } - } + 200: boolean } -export type ConfigProvidersResponse = ConfigProvidersResponses[keyof ConfigProvidersResponses] +export type QuestionReplyResponse = QuestionReplyResponses[keyof QuestionReplyResponses] -export type ExperimentalConsoleGetData = { +export type QuestionRejectData = { body?: never - path?: never + path: { + requestID: string + } query?: { directory?: string workspace?: string } - url: "/experimental/console" + url: "/question/{requestID}/reject" } -export type ExperimentalConsoleGetResponses = { +export type QuestionRejectErrors = { /** - * Active Console provider metadata + * Bad request */ - 200: ConsoleState -} - -export type ExperimentalConsoleGetResponse = ExperimentalConsoleGetResponses[keyof ExperimentalConsoleGetResponses] - -export type ExperimentalConsoleListOrgsData = { - body?: never - path?: never - query?: { - directory?: string - workspace?: string - } - url: "/experimental/console/orgs" -} - -export type ExperimentalConsoleListOrgsResponses = { + 400: BadRequestError /** - * Switchable Console orgs + * Not found */ - 200: { - orgs: Array<{ - accountID: string - accountEmail: string - accountUrl: string - orgID: string - orgName: string - active: boolean - }> - } + 404: NotFoundError } -export type ExperimentalConsoleListOrgsResponse = - ExperimentalConsoleListOrgsResponses[keyof ExperimentalConsoleListOrgsResponses] - -export type ExperimentalConsoleSwitchOrgData = { - body?: { - accountID: string - orgID: string - } - path?: never - query?: { - directory?: string - workspace?: string - } - url: "/experimental/console/switch" -} +export type QuestionRejectError = QuestionRejectErrors[keyof QuestionRejectErrors] -export type ExperimentalConsoleSwitchOrgResponses = { +export type QuestionRejectResponses = { /** - * Switch success + * Question rejected successfully */ 200: boolean } -export type ExperimentalConsoleSwitchOrgResponse = - ExperimentalConsoleSwitchOrgResponses[keyof ExperimentalConsoleSwitchOrgResponses] +export type QuestionRejectResponse = QuestionRejectResponses[keyof QuestionRejectResponses] -export type ToolIdsData = { +export type PermissionListData = { body?: never path?: never query?: { directory?: string workspace?: string } - url: "/experimental/tool/ids" -} - -export type ToolIdsErrors = { - /** - * Bad request - */ - 400: BadRequestError + url: "/permission" } -export type ToolIdsError = ToolIdsErrors[keyof ToolIdsErrors] - -export type ToolIdsResponses = { +export type PermissionListResponses = { /** - * Tool IDs + * List of pending permissions */ - 200: ToolIds + 200: Array<PermissionRequest> } -export type ToolIdsResponse = ToolIdsResponses[keyof ToolIdsResponses] +export type PermissionListResponse = PermissionListResponses[keyof PermissionListResponses] -export type ToolListData = { - body?: never - path?: never - query: { - directory?: string - workspace?: string - provider: string - model: string +export type PermissionReplyData = { + body?: { + reply: "once" | "always" | "reject" + message?: string + } + path: { + requestID: string } - url: "/experimental/tool" -} - -export type ToolListErrors = { - /** - * Bad request - */ - 400: BadRequestError -} - -export type ToolListError = ToolListErrors[keyof ToolListErrors] - -export type ToolListResponses = { - /** - * Tools - */ - 200: ToolList -} - -export type ToolListResponse = ToolListResponses[keyof ToolListResponses] - -export type WorktreeRemoveData = { - body?: WorktreeRemoveInput - path?: never query?: { directory?: string workspace?: string } - url: "/experimental/worktree" + url: "/permission/{requestID}/reply" } -export type WorktreeRemoveErrors = { +export type PermissionReplyErrors = { /** * Bad request */ 400: BadRequestError + /** + * Not found + */ + 404: NotFoundError } -export type WorktreeRemoveError = WorktreeRemoveErrors[keyof WorktreeRemoveErrors] +export type PermissionReplyError = PermissionReplyErrors[keyof PermissionReplyErrors] -export type WorktreeRemoveResponses = { +export type PermissionReplyResponses = { /** - * Worktree removed + * Permission processed successfully */ 200: boolean } -export type WorktreeRemoveResponse = WorktreeRemoveResponses[keyof WorktreeRemoveResponses] +export type PermissionReplyResponse = PermissionReplyResponses[keyof PermissionReplyResponses] -export type WorktreeListData = { +export type ProviderListData = { body?: never path?: never query?: { directory?: string workspace?: string } - url: "/experimental/worktree" + url: "/provider" } -export type WorktreeListResponses = { +export type ProviderListResponses = { /** - * List of worktree directories + * List of providers */ - 200: Array<string> + 200: { + all: Array<Provider> + default: { + [key: string]: string + } + connected: Array<string> + } } -export type WorktreeListResponse = WorktreeListResponses[keyof WorktreeListResponses] +export type ProviderListResponse = ProviderListResponses[keyof ProviderListResponses] -export type WorktreeCreateData = { - body?: WorktreeCreateInput +export type ProviderAuthData = { + body?: never path?: never query?: { directory?: string workspace?: string } - url: "/experimental/worktree" -} - -export type WorktreeCreateErrors = { - /** - * Bad request - */ - 400: BadRequestError + url: "/provider/auth" } -export type WorktreeCreateError = WorktreeCreateErrors[keyof WorktreeCreateErrors] - -export type WorktreeCreateResponses = { +export type ProviderAuthResponses = { /** - * Worktree created + * Provider auth methods */ - 200: Worktree + 200: { + [key: string]: Array<ProviderAuthMethod> + } } -export type WorktreeCreateResponse = WorktreeCreateResponses[keyof WorktreeCreateResponses] +export type ProviderAuthResponse = ProviderAuthResponses[keyof ProviderAuthResponses] -export type WorktreeResetData = { - body?: WorktreeResetInput - path?: never +export type ProviderOauthAuthorizeData = { + body?: { + /** + * Auth method index + */ + method: number + inputs?: { + [key: string]: string + } + } + path: { + providerID: string + } query?: { directory?: string workspace?: string } - url: "/experimental/worktree/reset" + url: "/provider/{providerID}/oauth/authorize" } -export type WorktreeResetErrors = { +export type ProviderOauthAuthorizeErrors = { /** * Bad request */ 400: BadRequestError } -export type WorktreeResetError = WorktreeResetErrors[keyof WorktreeResetErrors] +export type ProviderOauthAuthorizeError = ProviderOauthAuthorizeErrors[keyof ProviderOauthAuthorizeErrors] -export type WorktreeResetResponses = { +export type ProviderOauthAuthorizeResponses = { /** - * Worktree reset + * Authorization URL and method */ - 200: boolean + 200: ProviderAuthAuthorization } -export type WorktreeResetResponse = WorktreeResetResponses[keyof WorktreeResetResponses] +export type ProviderOauthAuthorizeResponse = ProviderOauthAuthorizeResponses[keyof ProviderOauthAuthorizeResponses] -export type ExperimentalSessionListData = { - body?: never - path?: never - query?: { +export type ProviderOauthCallbackData = { + body?: { /** - * Filter sessions by project directory + * Auth method index */ + method: number + code?: string + } + path: { + providerID: string + } + query?: { directory?: string workspace?: string - /** - * Only return root sessions (no parentID) - */ - roots?: boolean | "true" | "false" - /** - * Filter sessions updated on or after this timestamp (milliseconds since epoch) - */ - start?: number - /** - * Return sessions updated before this timestamp (milliseconds since epoch) - */ - cursor?: number - /** - * Filter sessions by title (case-insensitive) - */ - search?: string - /** - * Maximum number of sessions to return - */ - limit?: number - /** - * Include archived sessions (default false) - */ - archived?: boolean | "true" | "false" } - url: "/experimental/session" + url: "/provider/{providerID}/oauth/callback" } -export type ExperimentalSessionListResponses = { +export type ProviderOauthCallbackErrors = { /** - * List of sessions + * Bad request */ - 200: Array<GlobalSession> + 400: BadRequestError } -export type ExperimentalSessionListResponse = ExperimentalSessionListResponses[keyof ExperimentalSessionListResponses] - -export type ExperimentalResourceListData = { - body?: never - path?: never - query?: { - directory?: string - workspace?: string - } - url: "/experimental/resource" -} +export type ProviderOauthCallbackError = ProviderOauthCallbackErrors[keyof ProviderOauthCallbackErrors] -export type ExperimentalResourceListResponses = { +export type ProviderOauthCallbackResponses = { /** - * MCP resources + * OAuth callback processed successfully */ - 200: { - [key: string]: McpResource - } + 200: boolean } -export type ExperimentalResourceListResponse = - ExperimentalResourceListResponses[keyof ExperimentalResourceListResponses] +export type ProviderOauthCallbackResponse = ProviderOauthCallbackResponses[keyof ProviderOauthCallbackResponses] export type SessionListData = { body?: never path?: never query?: { - /** - * Filter sessions by directory - */ directory?: string workspace?: string - /** - * List all sessions for the current project - */ scope?: "project" - /** - * Filter sessions by project-relative path - */ path?: string - /** - * Only return root sessions (no parentID) - */ roots?: boolean | "true" | "false" - /** - * Filter sessions updated on or after this timestamp (milliseconds since epoch) - */ start?: number - /** - * Filter sessions by title (case-insensitive) - */ search?: string - /** - * Maximum number of sessions to return - */ limit?: number } url: "/session" @@ -3335,6 +4933,12 @@ export type SessionCreateData = { body?: { parentID?: string title?: string + agent?: string + model?: { + id: string + providerID: string + variant?: string + } permission?: PermissionRuleset workspaceID?: string } @@ -3570,68 +5174,29 @@ export type SessionTodoResponses = { export type SessionTodoResponse = SessionTodoResponses[keyof SessionTodoResponses] -export type SessionInitData = { - body?: { - modelID: string - providerID: string - messageID: string - } +export type SessionDiffData = { + body?: never path: { sessionID: string } query?: { directory?: string workspace?: string - } - url: "/session/{sessionID}/init" -} - -export type SessionInitErrors = { - /** - * Bad request - */ - 400: BadRequestError - /** - * Not found - */ - 404: NotFoundError -} - -export type SessionInitError = SessionInitErrors[keyof SessionInitErrors] - -export type SessionInitResponses = { - /** - * 200 - */ - 200: boolean -} - -export type SessionInitResponse = SessionInitResponses[keyof SessionInitResponses] - -export type SessionForkData = { - body?: { messageID?: string } - path: { - sessionID: string - } - query?: { - directory?: string - workspace?: string - } - url: "/session/{sessionID}/fork" + url: "/session/{sessionID}/diff" } -export type SessionForkResponses = { +export type SessionDiffResponses = { /** - * 200 + * Successfully retrieved diff */ - 200: Session + 200: Array<SnapshotFileDiff> } -export type SessionForkResponse = SessionForkResponses[keyof SessionForkResponses] +export type SessionDiffResponse = SessionDiffResponses[keyof SessionDiffResponses] -export type SessionAbortData = { +export type SessionMessagesData = { body?: never path: { sessionID: string @@ -3639,11 +5204,13 @@ export type SessionAbortData = { query?: { directory?: string workspace?: string + limit?: number + before?: string } - url: "/session/{sessionID}/abort" + url: "/session/{sessionID}/message" } -export type SessionAbortErrors = { +export type SessionMessagesErrors = { /** * Bad request */ @@ -3654,19 +5221,37 @@ export type SessionAbortErrors = { 404: NotFoundError } -export type SessionAbortError = SessionAbortErrors[keyof SessionAbortErrors] +export type SessionMessagesError = SessionMessagesErrors[keyof SessionMessagesErrors] -export type SessionAbortResponses = { +export type SessionMessagesResponses = { /** - * Aborted session + * List of messages */ - 200: boolean + 200: Array<{ + info: Message + parts: Array<Part> + }> } -export type SessionAbortResponse = SessionAbortResponses[keyof SessionAbortResponses] +export type SessionMessagesResponse = SessionMessagesResponses[keyof SessionMessagesResponses] -export type SessionUnshareData = { - body?: never +export type SessionPromptData = { + body?: { + messageID?: string + model?: { + providerID: string + modelID: string + } + agent?: string + noReply?: boolean + tools?: { + [key: string]: boolean + } + format?: OutputFormat + system?: string + variant?: string + parts: Array<TextPartInput | FilePartInput | AgentPartInput | SubtaskPartInput> + } path: { sessionID: string } @@ -3674,10 +5259,10 @@ export type SessionUnshareData = { directory?: string workspace?: string } - url: "/session/{sessionID}/share" + url: "/session/{sessionID}/message" } -export type SessionUnshareErrors = { +export type SessionPromptErrors = { /** * Bad request */ @@ -3688,30 +5273,34 @@ export type SessionUnshareErrors = { 404: NotFoundError } -export type SessionUnshareError = SessionUnshareErrors[keyof SessionUnshareErrors] +export type SessionPromptError = SessionPromptErrors[keyof SessionPromptErrors] -export type SessionUnshareResponses = { +export type SessionPromptResponses = { /** - * Successfully unshared session + * Created message */ - 200: Session + 200: { + info: AssistantMessage + parts: Array<Part> + } } -export type SessionUnshareResponse = SessionUnshareResponses[keyof SessionUnshareResponses] +export type SessionPromptResponse = SessionPromptResponses[keyof SessionPromptResponses] -export type SessionShareData = { +export type SessionDeleteMessageData = { body?: never path: { sessionID: string + messageID: string } query?: { directory?: string workspace?: string } - url: "/session/{sessionID}/share" + url: "/session/{sessionID}/message/{messageID}" } -export type SessionShareErrors = { +export type SessionDeleteMessageErrors = { /** * Bad request */ @@ -3722,56 +5311,31 @@ export type SessionShareErrors = { 404: NotFoundError } -export type SessionShareError = SessionShareErrors[keyof SessionShareErrors] +export type SessionDeleteMessageError = SessionDeleteMessageErrors[keyof SessionDeleteMessageErrors] -export type SessionShareResponses = { +export type SessionDeleteMessageResponses = { /** - * Successfully shared session + * Successfully deleted message */ - 200: Session + 200: boolean } -export type SessionShareResponse = SessionShareResponses[keyof SessionShareResponses] +export type SessionDeleteMessageResponse = SessionDeleteMessageResponses[keyof SessionDeleteMessageResponses] -export type SessionDiffData = { +export type SessionMessageData = { body?: never path: { sessionID: string - } - query?: { - directory?: string - workspace?: string - messageID?: string - } - url: "/session/{sessionID}/diff" -} - -export type SessionDiffResponses = { - /** - * Successfully retrieved diff - */ - 200: Array<SnapshotFileDiff> -} - -export type SessionDiffResponse = SessionDiffResponses[keyof SessionDiffResponses] - -export type SessionSummarizeData = { - body?: { - providerID: string - modelID: string - auto?: boolean - } - path: { - sessionID: string + messageID: string } query?: { directory?: string workspace?: string } - url: "/session/{sessionID}/summarize" + url: "/session/{sessionID}/message/{messageID}" } -export type SessionSummarizeErrors = { +export type SessionMessageErrors = { /** * Bad request */ @@ -3782,79 +5346,45 @@ export type SessionSummarizeErrors = { 404: NotFoundError } -export type SessionSummarizeError = SessionSummarizeErrors[keyof SessionSummarizeErrors] +export type SessionMessageError = SessionMessageErrors[keyof SessionMessageErrors] -export type SessionSummarizeResponses = { +export type SessionMessageResponses = { /** - * Summarized session + * Message */ - 200: boolean + 200: { + info: Message + parts: Array<Part> + } } -export type SessionSummarizeResponse = SessionSummarizeResponses[keyof SessionSummarizeResponses] +export type SessionMessageResponse = SessionMessageResponses[keyof SessionMessageResponses] -export type SessionMessagesData = { - body?: never +export type SessionForkData = { + body?: { + messageID?: string + } path: { sessionID: string } query?: { directory?: string workspace?: string - /** - * Maximum number of messages to return - */ - limit?: number - before?: string } - url: "/session/{sessionID}/message" -} - -export type SessionMessagesErrors = { - /** - * Bad request - */ - 400: BadRequestError - /** - * Not found - */ - 404: NotFoundError + url: "/session/{sessionID}/fork" } -export type SessionMessagesError = SessionMessagesErrors[keyof SessionMessagesErrors] - -export type SessionMessagesResponses = { +export type SessionForkResponses = { /** - * List of messages + * 200 */ - 200: Array<{ - info: Message - parts: Array<Part> - }> + 200: Session } -export type SessionMessagesResponse = SessionMessagesResponses[keyof SessionMessagesResponses] +export type SessionForkResponse = SessionForkResponses[keyof SessionForkResponses] -export type SessionPromptData = { - body?: { - messageID?: string - model?: { - providerID: string - modelID: string - } - agent?: string - noReply?: boolean - /** - * @deprecated tools and permissions have been merged, you can set permissions on the session itself now - */ - tools?: { - [key: string]: boolean - } - format?: OutputFormat - system?: string - variant?: string - parts: Array<TextPartInput | FilePartInput | AgentPartInput | SubtaskPartInput> - } +export type SessionAbortData = { + body?: never path: { sessionID: string } @@ -3862,10 +5392,10 @@ export type SessionPromptData = { directory?: string workspace?: string } - url: "/session/{sessionID}/message" + url: "/session/{sessionID}/abort" } -export type SessionPromptErrors = { +export type SessionAbortErrors = { /** * Bad request */ @@ -3876,34 +5406,34 @@ export type SessionPromptErrors = { 404: NotFoundError } -export type SessionPromptError = SessionPromptErrors[keyof SessionPromptErrors] +export type SessionAbortError = SessionAbortErrors[keyof SessionAbortErrors] -export type SessionPromptResponses = { +export type SessionAbortResponses = { /** - * Created message + * Aborted session */ - 200: { - info: AssistantMessage - parts: Array<Part> - } + 200: boolean } -export type SessionPromptResponse = SessionPromptResponses[keyof SessionPromptResponses] +export type SessionAbortResponse = SessionAbortResponses[keyof SessionAbortResponses] -export type SessionDeleteMessageData = { - body?: never +export type SessionInitData = { + body?: { + modelID: string + providerID: string + messageID: string + } path: { sessionID: string - messageID: string } query?: { directory?: string workspace?: string } - url: "/session/{sessionID}/message/{messageID}" + url: "/session/{sessionID}/init" } -export type SessionDeleteMessageErrors = { +export type SessionInitErrors = { /** * Bad request */ @@ -3914,31 +5444,30 @@ export type SessionDeleteMessageErrors = { 404: NotFoundError } -export type SessionDeleteMessageError = SessionDeleteMessageErrors[keyof SessionDeleteMessageErrors] +export type SessionInitError = SessionInitErrors[keyof SessionInitErrors] -export type SessionDeleteMessageResponses = { +export type SessionInitResponses = { /** - * Successfully deleted message + * 200 */ 200: boolean } -export type SessionDeleteMessageResponse = SessionDeleteMessageResponses[keyof SessionDeleteMessageResponses] +export type SessionInitResponse = SessionInitResponses[keyof SessionInitResponses] -export type SessionMessageData = { +export type SessionUnshareData = { body?: never path: { sessionID: string - messageID: string } query?: { directory?: string workspace?: string } - url: "/session/{sessionID}/message/{messageID}" + url: "/session/{sessionID}/share" } -export type SessionMessageErrors = { +export type SessionUnshareErrors = { /** * Bad request */ @@ -3949,35 +5478,30 @@ export type SessionMessageErrors = { 404: NotFoundError } -export type SessionMessageError = SessionMessageErrors[keyof SessionMessageErrors] +export type SessionUnshareError = SessionUnshareErrors[keyof SessionUnshareErrors] -export type SessionMessageResponses = { +export type SessionUnshareResponses = { /** - * Message + * Successfully unshared session */ - 200: { - info: Message - parts: Array<Part> - } + 200: Session } -export type SessionMessageResponse = SessionMessageResponses[keyof SessionMessageResponses] +export type SessionUnshareResponse = SessionUnshareResponses[keyof SessionUnshareResponses] -export type PartDeleteData = { +export type SessionShareData = { body?: never path: { sessionID: string - messageID: string - partID: string } query?: { directory?: string workspace?: string } - url: "/session/{sessionID}/message/{messageID}/part/{partID}" + url: "/session/{sessionID}/share" } -export type PartDeleteErrors = { +export type SessionShareErrors = { /** * Bad request */ @@ -3988,32 +5512,34 @@ export type PartDeleteErrors = { 404: NotFoundError } -export type PartDeleteError = PartDeleteErrors[keyof PartDeleteErrors] +export type SessionShareError = SessionShareErrors[keyof SessionShareErrors] -export type PartDeleteResponses = { +export type SessionShareResponses = { /** - * Successfully deleted part + * Successfully shared session */ - 200: boolean + 200: Session } -export type PartDeleteResponse = PartDeleteResponses[keyof PartDeleteResponses] +export type SessionShareResponse = SessionShareResponses[keyof SessionShareResponses] -export type PartUpdateData = { - body?: Part +export type SessionSummarizeData = { + body?: { + providerID: string + modelID: string + auto?: boolean + } path: { sessionID: string - messageID: string - partID: string } query?: { directory?: string workspace?: string } - url: "/session/{sessionID}/message/{messageID}/part/{partID}" + url: "/session/{sessionID}/summarize" } -export type PartUpdateErrors = { +export type SessionSummarizeErrors = { /** * Bad request */ @@ -4024,16 +5550,16 @@ export type PartUpdateErrors = { 404: NotFoundError } -export type PartUpdateError = PartUpdateErrors[keyof PartUpdateErrors] +export type SessionSummarizeError = SessionSummarizeErrors[keyof SessionSummarizeErrors] -export type PartUpdateResponses = { +export type SessionSummarizeResponses = { /** - * Successfully updated part + * Summarized session */ - 200: Part + 200: boolean } -export type PartUpdateResponse = PartUpdateResponses[keyof PartUpdateResponses] +export type SessionSummarizeResponse = SessionSummarizeResponses[keyof SessionSummarizeResponses] export type SessionPromptAsyncData = { body?: { @@ -4044,9 +5570,6 @@ export type SessionPromptAsyncData = { } agent?: string noReply?: boolean - /** - * @deprecated tools and permissions have been merged, you can set permissions on the session itself now - */ tools?: { [key: string]: boolean } @@ -4292,99 +5815,21 @@ export type PermissionRespondResponses = { export type PermissionRespondResponse = PermissionRespondResponses[keyof PermissionRespondResponses] -export type PermissionReplyData = { - body?: { - reply: "once" | "always" | "reject" - message?: string - } - path: { - requestID: string - } - query?: { - directory?: string - workspace?: string - } - url: "/permission/{requestID}/reply" -} - -export type PermissionReplyErrors = { - /** - * Bad request - */ - 400: BadRequestError - /** - * Not found - */ - 404: NotFoundError -} - -export type PermissionReplyError = PermissionReplyErrors[keyof PermissionReplyErrors] - -export type PermissionReplyResponses = { - /** - * Permission processed successfully - */ - 200: boolean -} - -export type PermissionReplyResponse = PermissionReplyResponses[keyof PermissionReplyResponses] - -export type PermissionListData = { - body?: never - path?: never - query?: { - directory?: string - workspace?: string - } - url: "/permission" -} - -export type PermissionListResponses = { - /** - * List of pending permissions - */ - 200: Array<PermissionRequest> -} - -export type PermissionListResponse = PermissionListResponses[keyof PermissionListResponses] - -export type QuestionListData = { +export type PartDeleteData = { body?: never - path?: never - query?: { - directory?: string - workspace?: string - } - url: "/question" -} - -export type QuestionListResponses = { - /** - * List of pending questions - */ - 200: Array<QuestionRequest> -} - -export type QuestionListResponse = QuestionListResponses[keyof QuestionListResponses] - -export type QuestionReplyData = { - body?: { - /** - * User answers in order of questions (each answer is an array of selected labels) - */ - answers: Array<QuestionAnswer> - } path: { - requestID: string + sessionID: string + messageID: string + partID: string } query?: { directory?: string workspace?: string } - url: "/question/{requestID}/reply" + url: "/session/{sessionID}/message/{messageID}/part/{partID}" } -export type QuestionReplyErrors = { +export type PartDeleteErrors = { /** * Bad request */ @@ -4395,30 +5840,32 @@ export type QuestionReplyErrors = { 404: NotFoundError } -export type QuestionReplyError = QuestionReplyErrors[keyof QuestionReplyErrors] +export type PartDeleteError = PartDeleteErrors[keyof PartDeleteErrors] -export type QuestionReplyResponses = { +export type PartDeleteResponses = { /** - * Question answered successfully + * Successfully deleted part */ 200: boolean } -export type QuestionReplyResponse = QuestionReplyResponses[keyof QuestionReplyResponses] +export type PartDeleteResponse = PartDeleteResponses[keyof PartDeleteResponses] -export type QuestionRejectData = { - body?: never +export type PartUpdateData = { + body?: Part path: { - requestID: string + sessionID: string + messageID: string + partID: string } query?: { directory?: string workspace?: string } - url: "/question/{requestID}/reject" + url: "/session/{sessionID}/message/{messageID}/part/{partID}" } -export type QuestionRejectErrors = { +export type PartUpdateErrors = { /** * Bad request */ @@ -4429,148 +5876,16 @@ export type QuestionRejectErrors = { 404: NotFoundError } -export type QuestionRejectError = QuestionRejectErrors[keyof QuestionRejectErrors] - -export type QuestionRejectResponses = { - /** - * Question rejected successfully - */ - 200: boolean -} - -export type QuestionRejectResponse = QuestionRejectResponses[keyof QuestionRejectResponses] - -export type ProviderListData = { - body?: never - path?: never - query?: { - directory?: string - workspace?: string - } - url: "/provider" -} - -export type ProviderListResponses = { - /** - * List of providers - */ - 200: { - all: Array<Provider> - default: { - [key: string]: string - } - connected: Array<string> - } -} - -export type ProviderListResponse = ProviderListResponses[keyof ProviderListResponses] - -export type ProviderAuthData = { - body?: never - path?: never - query?: { - directory?: string - workspace?: string - } - url: "/provider/auth" -} - -export type ProviderAuthResponses = { - /** - * Provider auth methods - */ - 200: { - [key: string]: Array<ProviderAuthMethod> - } -} - -export type ProviderAuthResponse = ProviderAuthResponses[keyof ProviderAuthResponses] - -export type ProviderOauthAuthorizeData = { - body?: { - /** - * Auth method index - */ - method: number - /** - * Prompt inputs - */ - inputs?: { - [key: string]: string - } - } - path: { - /** - * Provider ID - */ - providerID: string - } - query?: { - directory?: string - workspace?: string - } - url: "/provider/{providerID}/oauth/authorize" -} - -export type ProviderOauthAuthorizeErrors = { - /** - * Bad request - */ - 400: BadRequestError -} - -export type ProviderOauthAuthorizeError = ProviderOauthAuthorizeErrors[keyof ProviderOauthAuthorizeErrors] - -export type ProviderOauthAuthorizeResponses = { - /** - * Authorization URL and method - */ - 200: ProviderAuthAuthorization -} - -export type ProviderOauthAuthorizeResponse = ProviderOauthAuthorizeResponses[keyof ProviderOauthAuthorizeResponses] - -export type ProviderOauthCallbackData = { - body?: { - /** - * Auth method index - */ - method: number - /** - * OAuth authorization code - */ - code?: string - } - path: { - /** - * Provider ID - */ - providerID: string - } - query?: { - directory?: string - workspace?: string - } - url: "/provider/{providerID}/oauth/callback" -} - -export type ProviderOauthCallbackErrors = { - /** - * Bad request - */ - 400: BadRequestError -} - -export type ProviderOauthCallbackError = ProviderOauthCallbackErrors[keyof ProviderOauthCallbackErrors] +export type PartUpdateError = PartUpdateErrors[keyof PartUpdateErrors] -export type ProviderOauthCallbackResponses = { +export type PartUpdateResponses = { /** - * OAuth callback processed successfully + * Successfully updated part */ - 200: boolean + 200: Part } -export type ProviderOauthCallbackResponse = ProviderOauthCallbackResponses[keyof ProviderOauthCallbackResponses] +export type PartUpdateResponse = PartUpdateResponses[keyof PartUpdateResponses] export type SyncStartData = { body?: never @@ -4670,402 +5985,150 @@ export type SyncHistoryListResponses = { export type SyncHistoryListResponse = SyncHistoryListResponses[keyof SyncHistoryListResponses] -export type FindTextData = { - body?: never - path?: never - query: { - directory?: string - workspace?: string - pattern: string - } - url: "/find" -} - -export type FindTextResponses = { - /** - * Matches - */ - 200: Array<{ - path: { - text: string - } - lines: { - text: string - } - line_number: number - absolute_offset: number - submatches: Array<{ - match: { - text: string - } - start: number - end: number - }> - }> -} - -export type FindTextResponse = FindTextResponses[keyof FindTextResponses] - -export type FindFilesData = { - body?: never - path?: never - query: { - directory?: string - workspace?: string - query: string - dirs?: "true" | "false" - type?: "file" | "directory" - limit?: number - } - url: "/find/file" -} - -export type FindFilesResponses = { - /** - * File paths - */ - 200: Array<string> -} - -export type FindFilesResponse = FindFilesResponses[keyof FindFilesResponses] - -export type FindSymbolsData = { - body?: never - path?: never - query: { - directory?: string - workspace?: string - query: string - } - url: "/find/symbol" -} - -export type FindSymbolsResponses = { - /** - * Symbols - */ - 200: Array<Symbol> -} - -export type FindSymbolsResponse = FindSymbolsResponses[keyof FindSymbolsResponses] - -export type FileListData = { - body?: never - path?: never - query: { - directory?: string - workspace?: string - path: string - } - url: "/file" -} - -export type FileListResponses = { - /** - * Files and directories - */ - 200: Array<FileNode> -} - -export type FileListResponse = FileListResponses[keyof FileListResponses] - -export type FileReadData = { - body?: never - path?: never - query: { - directory?: string - workspace?: string - path: string - } - url: "/file/content" -} - -export type FileReadResponses = { - /** - * File content - */ - 200: FileContent -} - -export type FileReadResponse = FileReadResponses[keyof FileReadResponses] - -export type FileStatusData = { - body?: never - path?: never - query?: { - directory?: string - workspace?: string - } - url: "/file/status" -} - -export type FileStatusResponses = { - /** - * File status - */ - 200: Array<File> -} - -export type FileStatusResponse = FileStatusResponses[keyof FileStatusResponses] - -export type EventSubscribeData = { +export type V2SessionListData = { body?: never path?: never query?: { directory?: string workspace?: string } - url: "/event" + url: "/api/session" } -export type EventSubscribeResponses = { - /** - * Event stream - */ - 200: Event -} - -export type EventSubscribeResponse = EventSubscribeResponses[keyof EventSubscribeResponses] - -export type McpStatusData = { - body?: never - path?: never - query?: { - directory?: string - workspace?: string - } - url: "/mcp" -} - -export type McpStatusResponses = { - /** - * MCP server status - */ - 200: { - [key: string]: McpStatus - } -} - -export type McpStatusResponse = McpStatusResponses[keyof McpStatusResponses] - -export type McpAddData = { - body?: { - name: string - config: McpLocalConfig | McpRemoteConfig - } - path?: never - query?: { - directory?: string - workspace?: string - } - url: "/mcp" -} - -export type McpAddErrors = { +export type V2SessionListErrors = { /** * Bad request */ 400: BadRequestError } -export type McpAddError = McpAddErrors[keyof McpAddErrors] +export type V2SessionListError = V2SessionListErrors[keyof V2SessionListErrors] -export type McpAddResponses = { +export type V2SessionListResponses = { /** - * MCP server added successfully + * V2SessionsResponse */ - 200: { - [key: string]: McpStatus - } + 200: V2SessionsResponse } -export type McpAddResponse = McpAddResponses[keyof McpAddResponses] +export type V2SessionListResponse = V2SessionListResponses[keyof V2SessionListResponses] -export type McpAuthRemoveData = { - body?: never +export type V2SessionPromptData = { + body?: { + prompt: Prompt + delivery?: SessionDelivery + } path: { - name: string + sessionID: string } query?: { directory?: string workspace?: string } - url: "/mcp/{name}/auth" -} - -export type McpAuthRemoveErrors = { - /** - * Not found - */ - 404: NotFoundError + url: "/api/session/{sessionID}/prompt" } -export type McpAuthRemoveError = McpAuthRemoveErrors[keyof McpAuthRemoveErrors] - -export type McpAuthRemoveResponses = { +export type V2SessionPromptResponses = { /** - * OAuth credentials removed + * Session.Message */ - 200: { - success: true - } + 200: SessionMessage } -export type McpAuthRemoveResponse = McpAuthRemoveResponses[keyof McpAuthRemoveResponses] +export type V2SessionPromptResponse = V2SessionPromptResponses[keyof V2SessionPromptResponses] -export type McpAuthStartData = { +export type V2SessionCompactData = { body?: never path: { - name: string + sessionID: string } query?: { directory?: string workspace?: string } - url: "/mcp/{name}/auth" + url: "/api/session/{sessionID}/compact" } -export type McpAuthStartErrors = { +export type V2SessionCompactResponses = { /** - * MCP server does not support OAuth + * <No Content> */ - 400: McpUnsupportedOAuthError - /** - * Not found - */ - 404: NotFoundError -} - -export type McpAuthStartError = McpAuthStartErrors[keyof McpAuthStartErrors] - -export type McpAuthStartResponses = { - /** - * OAuth flow started - */ - 200: { - /** - * URL to open in browser for authorization - */ - authorizationUrl: string - } + 204: void } -export type McpAuthStartResponse = McpAuthStartResponses[keyof McpAuthStartResponses] +export type V2SessionCompactResponse = V2SessionCompactResponses[keyof V2SessionCompactResponses] -export type McpAuthCallbackData = { - body?: { - /** - * Authorization code from OAuth callback - */ - code: string - } +export type V2SessionWaitData = { + body?: never path: { - name: string + sessionID: string } query?: { directory?: string workspace?: string } - url: "/mcp/{name}/auth/callback" + url: "/api/session/{sessionID}/wait" } -export type McpAuthCallbackErrors = { +export type V2SessionWaitResponses = { /** - * Bad request + * <No Content> */ - 400: BadRequestError - /** - * Not found - */ - 404: NotFoundError -} - -export type McpAuthCallbackError = McpAuthCallbackErrors[keyof McpAuthCallbackErrors] - -export type McpAuthCallbackResponses = { - /** - * OAuth authentication completed - */ - 200: McpStatus + 204: void } -export type McpAuthCallbackResponse = McpAuthCallbackResponses[keyof McpAuthCallbackResponses] +export type V2SessionWaitResponse = V2SessionWaitResponses[keyof V2SessionWaitResponses] -export type McpAuthAuthenticateData = { +export type V2SessionContextData = { body?: never path: { - name: string + sessionID: string } query?: { directory?: string workspace?: string } - url: "/mcp/{name}/auth/authenticate" + url: "/api/session/{sessionID}/context" } -export type McpAuthAuthenticateErrors = { +export type V2SessionContextResponses = { /** - * MCP server does not support OAuth - */ - 400: McpUnsupportedOAuthError - /** - * Not found + * Success */ - 404: NotFoundError + 200: Array<SessionMessage> } -export type McpAuthAuthenticateError = McpAuthAuthenticateErrors[keyof McpAuthAuthenticateErrors] +export type V2SessionContextResponse = V2SessionContextResponses[keyof V2SessionContextResponses] -export type McpAuthAuthenticateResponses = { - /** - * OAuth authentication completed - */ - 200: McpStatus -} - -export type McpAuthAuthenticateResponse = McpAuthAuthenticateResponses[keyof McpAuthAuthenticateResponses] - -export type McpConnectData = { +export type V2SessionMessagesData = { body?: never path: { - name: string + sessionID: string } query?: { directory?: string workspace?: string } - url: "/mcp/{name}/connect" + url: "/api/session/{sessionID}/message" } -export type McpConnectResponses = { +export type V2SessionMessagesErrors = { /** - * MCP server connected successfully + * Bad request */ - 200: boolean + 400: BadRequestError } -export type McpConnectResponse = McpConnectResponses[keyof McpConnectResponses] +export type V2SessionMessagesError = V2SessionMessagesErrors[keyof V2SessionMessagesErrors] -export type McpDisconnectData = { - body?: never - path: { - name: string - } - query?: { - directory?: string - workspace?: string - } - url: "/mcp/{name}/disconnect" -} - -export type McpDisconnectResponses = { +export type V2SessionMessagesResponses = { /** - * MCP server disconnected successfully + * V2SessionMessagesResponse */ - 200: boolean + 200: V2SessionMessagesResponse } -export type McpDisconnectResponse = McpDisconnectResponses[keyof McpDisconnectResponses] +export type V2SessionMessagesResponse2 = V2SessionMessagesResponses[keyof V2SessionMessagesResponses] export type TuiAppendPromptData = { body?: { @@ -5246,9 +6309,6 @@ export type TuiShowToastData = { title?: string message: string variant: "info" | "success" | "warning" | "error" - /** - * Duration in milliseconds - */ duration?: number } path?: never @@ -5269,7 +6329,7 @@ export type TuiShowToastResponses = { export type TuiShowToastResponse = TuiShowToastResponses[keyof TuiShowToastResponses] export type TuiPublishData = { - body?: EventTuiPromptAppend | EventTuiCommandExecute | EventTuiToastShow | EventTuiSessionSelect + body?: EventTuiPromptAppend2 | EventTuiCommandExecute2 | EventTuiToastShow2 | EventTuiSessionSelect2 path?: never query?: { directory?: string @@ -5374,179 +6434,202 @@ export type TuiControlResponseResponses = { export type TuiControlResponseResponse = TuiControlResponseResponses[keyof TuiControlResponseResponses] -export type InstanceDisposeData = { +export type ExperimentalWorkspaceAdapterListData = { body?: never path?: never query?: { directory?: string workspace?: string } - url: "/instance/dispose" + url: "/experimental/workspace/adapter" } -export type InstanceDisposeResponses = { +export type ExperimentalWorkspaceAdapterListResponses = { /** - * Instance disposed + * Workspace adapters */ - 200: boolean + 200: Array<{ + type: string + name: string + description: string + }> } -export type InstanceDisposeResponse = InstanceDisposeResponses[keyof InstanceDisposeResponses] +export type ExperimentalWorkspaceAdapterListResponse = + ExperimentalWorkspaceAdapterListResponses[keyof ExperimentalWorkspaceAdapterListResponses] -export type PathGetData = { +export type ExperimentalWorkspaceListData = { body?: never path?: never query?: { directory?: string workspace?: string } - url: "/path" + url: "/experimental/workspace" } -export type PathGetResponses = { +export type ExperimentalWorkspaceListResponses = { /** - * Path + * Workspaces */ - 200: Path + 200: Array<Workspace> } -export type PathGetResponse = PathGetResponses[keyof PathGetResponses] +export type ExperimentalWorkspaceListResponse = + ExperimentalWorkspaceListResponses[keyof ExperimentalWorkspaceListResponses] -export type VcsGetData = { - body?: never +export type ExperimentalWorkspaceCreateData = { + body?: { + id?: string + type: string + branch: string | null + extra?: unknown | null + } path?: never query?: { directory?: string workspace?: string } - url: "/vcs" + url: "/experimental/workspace" } -export type VcsGetResponses = { +export type ExperimentalWorkspaceCreateErrors = { /** - * VCS info + * Bad request */ - 200: VcsInfo + 400: BadRequestError } -export type VcsGetResponse = VcsGetResponses[keyof VcsGetResponses] - -export type VcsDiffData = { - body?: never - path?: never - query: { - directory?: string - workspace?: string - mode: "git" | "branch" - } - url: "/vcs/diff" -} +export type ExperimentalWorkspaceCreateError = + ExperimentalWorkspaceCreateErrors[keyof ExperimentalWorkspaceCreateErrors] -export type VcsDiffResponses = { +export type ExperimentalWorkspaceCreateResponses = { /** - * VCS diff + * Workspace created */ - 200: Array<VcsFileDiff> + 200: Workspace } -export type VcsDiffResponse = VcsDiffResponses[keyof VcsDiffResponses] +export type ExperimentalWorkspaceCreateResponse = + ExperimentalWorkspaceCreateResponses[keyof ExperimentalWorkspaceCreateResponses] -export type CommandListData = { +export type ExperimentalWorkspaceStatusData = { body?: never path?: never query?: { directory?: string workspace?: string } - url: "/command" + url: "/experimental/workspace/status" } -export type CommandListResponses = { +export type ExperimentalWorkspaceStatusResponses = { /** - * List of commands + * Workspace status */ - 200: Array<Command> + 200: Array<{ + workspaceID: string + status: "connected" | "connecting" | "disconnected" | "error" + }> } -export type CommandListResponse = CommandListResponses[keyof CommandListResponses] +export type ExperimentalWorkspaceStatusResponse = + ExperimentalWorkspaceStatusResponses[keyof ExperimentalWorkspaceStatusResponses] -export type AppAgentsData = { +export type ExperimentalWorkspaceRemoveData = { body?: never - path?: never + path: { + id: string + } query?: { directory?: string workspace?: string } - url: "/agent" + url: "/experimental/workspace/{id}" } -export type AppAgentsResponses = { +export type ExperimentalWorkspaceRemoveErrors = { /** - * List of agents + * Bad request */ - 200: Array<Agent> + 400: BadRequestError } -export type AppAgentsResponse = AppAgentsResponses[keyof AppAgentsResponses] - -export type AppSkillsData = { - body?: never - path?: never - query?: { - directory?: string - workspace?: string - } - url: "/skill" -} +export type ExperimentalWorkspaceRemoveError = + ExperimentalWorkspaceRemoveErrors[keyof ExperimentalWorkspaceRemoveErrors] -export type AppSkillsResponses = { +export type ExperimentalWorkspaceRemoveResponses = { /** - * List of skills + * Workspace removed */ - 200: Array<{ - name: string - description: string - location: string - content: string - }> + 200: Workspace } -export type AppSkillsResponse = AppSkillsResponses[keyof AppSkillsResponses] +export type ExperimentalWorkspaceRemoveResponse = + ExperimentalWorkspaceRemoveResponses[keyof ExperimentalWorkspaceRemoveResponses] -export type LspStatusData = { - body?: never - path?: never +export type ExperimentalWorkspaceSessionRestoreData = { + body?: { + sessionID: string + } + path: { + id: string + } query?: { directory?: string workspace?: string } - url: "/lsp" + url: "/experimental/workspace/{id}/session-restore" } -export type LspStatusResponses = { +export type ExperimentalWorkspaceSessionRestoreErrors = { /** - * LSP server status + * Bad request */ - 200: Array<LspStatus> + 400: BadRequestError } -export type LspStatusResponse = LspStatusResponses[keyof LspStatusResponses] +export type ExperimentalWorkspaceSessionRestoreError = + ExperimentalWorkspaceSessionRestoreErrors[keyof ExperimentalWorkspaceSessionRestoreErrors] -export type FormatterStatusData = { +export type ExperimentalWorkspaceSessionRestoreResponses = { + /** + * Session replay started + */ + 200: { + total: number + } +} + +export type ExperimentalWorkspaceSessionRestoreResponse = + ExperimentalWorkspaceSessionRestoreResponses[keyof ExperimentalWorkspaceSessionRestoreResponses] + +export type PtyConnectData = { body?: never - path?: never + path: { + ptyID: string + } query?: { directory?: string workspace?: string } - url: "/formatter" + url: "/pty/{ptyID}/connect" } -export type FormatterStatusResponses = { +export type PtyConnectErrors = { /** - * Formatter status + * Not found */ - 200: Array<FormatterStatus> + 404: NotFoundError } -export type FormatterStatusResponse = FormatterStatusResponses[keyof FormatterStatusResponses] +export type PtyConnectError = PtyConnectErrors[keyof PtyConnectErrors] + +export type PtyConnectResponses = { + /** + * Connected session + */ + 200: boolean +} + +export type PtyConnectResponse = PtyConnectResponses[keyof PtyConnectResponses] |
