diff --git a/bun.lock b/bun.lock index 1599ffa964..8feff3ae8c 100644 --- a/bun.lock +++ b/bun.lock @@ -324,7 +324,7 @@ "name": "@opencode-ai/sdk", "version": "1.0.134", "devDependencies": { - "@hey-api/openapi-ts": "https://pkg.pr.new/hey-api/openapi-ts/@hey-api/openapi-ts@3047", + "@hey-api/openapi-ts": "0.88.1", "@tsconfig/node22": "catalog:", "@types/node": "catalog:", "@typescript/native-preview": "catalog:", @@ -851,11 +851,11 @@ "@happy-dom/global-registrator": ["@happy-dom/global-registrator@20.0.11", "", { "dependencies": { "@types/node": "^20.0.0", "happy-dom": "^20.0.11" } }, "sha512-GqNqiShBT/lzkHTMC/slKBrvN0DsD4Di8ssBk4aDaVgEn+2WMzE6DXxq701ndSXj7/0cJ8mNT71pM7Bnrr6JRw=="], - "@hey-api/codegen-core": ["@hey-api/codegen-core@https://pkg.pr.new/hey-api/openapi-ts/@hey-api/codegen-core@55ef27994740ba0af0bc8db17b3e71bfb5c11714", { "peerDependencies": { "typescript": ">=5.5.3" } }], + "@hey-api/codegen-core": ["@hey-api/codegen-core@0.3.3", "", { "peerDependencies": { "typescript": ">=5.5.3" } }, "sha512-vArVDtrvdzFewu1hnjUm4jX1NBITlSCeO81EdWq676MxQbyxsGcDPAgohaSA+Wvr4HjPSvsg2/1s2zYxUtXebg=="], "@hey-api/json-schema-ref-parser": ["@hey-api/json-schema-ref-parser@1.2.2", "", { "dependencies": { "@jsdevtools/ono": "^7.1.3", "@types/json-schema": "^7.0.15", "js-yaml": "^4.1.1", "lodash": "^4.17.21" } }, "sha512-oS+5yAdwnK20lSeFO1d53Ku+yaGCsY8PcrmSq2GtSs3bsBfRnHAbpPKSVzQcaxAOrzj5NB+f34WhZglVrNayBA=="], - "@hey-api/openapi-ts": ["@hey-api/openapi-ts@https://pkg.pr.new/hey-api/openapi-ts/@hey-api/openapi-ts@3047", { "dependencies": { "@hey-api/codegen-core": "https://pkg.pr.new/hey-api/openapi-ts/@hey-api/codegen-core@55ef27994740ba0af0bc8db17b3e71bfb5c11714", "@hey-api/json-schema-ref-parser": "1.2.2", "ansi-colors": "4.1.3", "c12": "3.3.2", "color-support": "1.1.3", "commander": "14.0.2", "open": "11.0.0", "semver": "7.7.2" }, "peerDependencies": { "typescript": ">=5.5.3" }, "bin": { "openapi-ts": "./bin/run.js" } }], + "@hey-api/openapi-ts": ["@hey-api/openapi-ts@0.88.1", "", { "dependencies": { "@hey-api/codegen-core": "^0.3.3", "@hey-api/json-schema-ref-parser": "1.2.2", "ansi-colors": "4.1.3", "c12": "3.3.2", "color-support": "1.1.3", "commander": "14.0.2", "open": "11.0.0", "semver": "7.7.2" }, "peerDependencies": { "typescript": ">=5.5.3" }, "bin": { "openapi-ts": "bin/run.js" } }, "sha512-x/nDTupOnV9VuSeNIiJpgIpc915GHduhyseJeMTnI0JMsXaObmpa0rgPr3ASVEYMLgpvqozIEG1RTOOnal6zLQ=="], "@hono/standard-validator": ["@hono/standard-validator@0.1.5", "", { "peerDependencies": { "@standard-schema/spec": "1.0.0", "hono": ">=3.9.0" } }, "sha512-EIyZPPwkyLn6XKwFj5NBEWHXhXbgmnVh2ceIFo5GO7gKI9WmzTjPDKnppQB0KrqKeAkq3kpoW4SIbu5X1dgx3w=="], diff --git a/packages/desktop/src/components/prompt-input.tsx b/packages/desktop/src/components/prompt-input.tsx index a311ae7638..dd1e00c6f5 100644 --- a/packages/desktop/src/components/prompt-input.tsx +++ b/packages/desktop/src/components/prompt-input.tsx @@ -235,9 +235,7 @@ export const PromptInput: Component = (props) => { const abort = () => sdk.client.session.abort({ - path: { - id: session.id!, - }, + sessionID: session.id!, }) const handleKeyDown = (event: KeyboardEvent) => { @@ -329,21 +327,19 @@ export const PromptInput: Component = (props) => { session.prompt.set([{ type: "text", content: "", start: 0, end: 0 }], 0) sdk.client.session.prompt({ - path: { id: existing.id }, - body: { - agent: local.agent.current()!.name, - model: { - modelID: local.model.current()!.id, - providerID: local.model.current()!.provider.id, - }, - parts: [ - { - type: "text", - text, - }, - ...attachmentParts, - ], + sessionID: existing.id, + agent: local.agent.current()!.name, + model: { + modelID: local.model.current()!.id, + providerID: local.model.current()!.provider.id, }, + parts: [ + { + type: "text", + text, + }, + ...attachmentParts, + ], }) } diff --git a/packages/desktop/src/components/terminal.tsx b/packages/desktop/src/components/terminal.tsx index b312c35894..15302f1521 100644 --- a/packages/desktop/src/components/terminal.tsx +++ b/packages/desktop/src/components/terminal.tsx @@ -74,12 +74,10 @@ export const Terminal = (props: TerminalProps) => { term.onResize(async (size) => { if (ws && ws.readyState === WebSocket.OPEN) { await sdk.client.pty.update({ - path: { id: local.pty.id }, - body: { - size: { - cols: size.cols, - rows: size.rows, - }, + ptyID: local.pty.id, + size: { + cols: size.cols, + rows: size.rows, }, }) } @@ -100,12 +98,10 @@ export const Terminal = (props: TerminalProps) => { ws.addEventListener("open", () => { console.log("WebSocket connected") sdk.client.pty.update({ - path: { id: local.pty.id }, - body: { - size: { - cols: term.cols, - rows: term.rows, - }, + ptyID: local.pty.id, + size: { + cols: term.cols, + rows: term.rows, }, }) }) diff --git a/packages/desktop/src/context/global-sdk.tsx b/packages/desktop/src/context/global-sdk.tsx index b9c72afcba..85b9e7584d 100644 --- a/packages/desktop/src/context/global-sdk.tsx +++ b/packages/desktop/src/context/global-sdk.tsx @@ -1,4 +1,4 @@ -import { createOpencodeClient, type Event } from "@opencode-ai/sdk/client" +import { createOpencodeClient, type Event } from "@opencode-ai/sdk/v2/client" import { createSimpleContext } from "@opencode-ai/ui/context" import { createGlobalEmitter } from "@solid-primitives/event-bus" import { onCleanup } from "solid-js" diff --git a/packages/desktop/src/context/global-sync.tsx b/packages/desktop/src/context/global-sync.tsx index a8a6b9937d..9f795cded9 100644 --- a/packages/desktop/src/context/global-sync.tsx +++ b/packages/desktop/src/context/global-sync.tsx @@ -12,7 +12,7 @@ import type { FileDiff, Todo, SessionStatus, -} from "@opencode-ai/sdk" +} from "@opencode-ai/sdk/v2" import { createStore, produce, reconcile } from "solid-js/store" import { Binary } from "@opencode-ai/util/binary" import { createSimpleContext } from "@opencode-ai/ui/context" diff --git a/packages/desktop/src/context/local.tsx b/packages/desktop/src/context/local.tsx index 68da03438b..de4202d9a0 100644 --- a/packages/desktop/src/context/local.tsx +++ b/packages/desktop/src/context/local.tsx @@ -1,7 +1,7 @@ import { createStore, produce, reconcile } from "solid-js/store" import { batch, createEffect, createMemo } from "solid-js" import { uniqueBy } from "remeda" -import type { FileContent, FileNode, Model, Provider, File as FileStatus } from "@opencode-ai/sdk" +import type { FileContent, FileNode, Model, Provider, File as FileStatus } from "@opencode-ai/sdk/v2" import { createSimpleContext } from "@opencode-ai/ui/context" import { useSDK } from "./sdk" import { useSync } from "./sync" @@ -257,7 +257,7 @@ export const { use: useLocal, provider: LocalProvider } = createSimpleContext({ const load = async (path: string) => { const relativePath = relative(path) - sdk.client.file.read({ query: { path: relativePath } }).then((x) => { + sdk.client.file.read({ path: relativePath }).then((x) => { setStore( "node", relativePath, @@ -305,7 +305,7 @@ export const { use: useLocal, provider: LocalProvider } = createSimpleContext({ } const list = async (path: string) => { - return sdk.client.file.list({ query: { path: path + "/" } }).then((x) => { + return sdk.client.file.list({ path: path + "/" }).then((x) => { setStore( "node", produce((draft) => { @@ -318,10 +318,9 @@ export const { use: useLocal, provider: LocalProvider } = createSimpleContext({ }) } - const searchFiles = (query: string) => - sdk.client.find.files({ query: { query, dirs: "false" } }).then((x) => x.data!) + const searchFiles = (query: string) => sdk.client.find.files({ query, dirs: "false" }).then((x) => x.data!) const searchFilesAndDirectories = (query: string) => - sdk.client.find.files({ query: { query, dirs: "true" } }).then((x) => x.data!) + sdk.client.find.files({ query, dirs: "true" }).then((x) => x.data!) sdk.event.listen((e) => { const event = e.details diff --git a/packages/desktop/src/context/sdk.tsx b/packages/desktop/src/context/sdk.tsx index 144202ee20..764b01f8aa 100644 --- a/packages/desktop/src/context/sdk.tsx +++ b/packages/desktop/src/context/sdk.tsx @@ -1,4 +1,4 @@ -import { createOpencodeClient, type Event } from "@opencode-ai/sdk/client" +import { createOpencodeClient, type Event } from "@opencode-ai/sdk/v2/client" import { createSimpleContext } from "@opencode-ai/ui/context" import { createGlobalEmitter } from "@solid-primitives/event-bus" import { onCleanup } from "solid-js" diff --git a/packages/desktop/src/context/session.tsx b/packages/desktop/src/context/session.tsx index b5972f3e30..5c0bad98a3 100644 --- a/packages/desktop/src/context/session.tsx +++ b/packages/desktop/src/context/session.tsx @@ -5,7 +5,7 @@ import { useSync } from "./sync" import { makePersisted } from "@solid-primitives/storage" import { TextSelection } from "./local" import { pipe, sumBy } from "remeda" -import { AssistantMessage, UserMessage } from "@opencode-ai/sdk" +import { AssistantMessage, UserMessage } from "@opencode-ai/sdk/v2" import { useParams } from "@solidjs/router" import { base64Encode } from "@/utils" import { useSDK } from "./sdk" @@ -198,7 +198,7 @@ export const { use: useSession, provider: SessionProvider } = createSimpleContex all: createMemo(() => Object.values(store.terminals.all)), active: createMemo(() => store.terminals.active), new() { - sdk.client.pty.create({ body: { title: `Terminal ${store.terminals.all.length + 1}` } }).then((pty) => { + sdk.client.pty.create({ title: `Terminal ${store.terminals.all.length + 1}` }).then((pty) => { const id = pty.data?.id if (!id) return setStore("terminals", "all", [ @@ -214,8 +214,9 @@ export const { use: useSession, provider: SessionProvider } = createSimpleContex update(pty: Partial & { id: string }) { setStore("terminals", "all", (x) => x.map((x) => (x.id === pty.id ? { ...x, ...pty } : x))) sdk.client.pty.update({ - path: { id: pty.id }, - body: { title: pty.title, size: pty.cols && pty.rows ? { rows: pty.rows, cols: pty.cols } : undefined }, + ptyID: pty.id, + title: pty.title, + size: pty.cols && pty.rows ? { rows: pty.rows, cols: pty.cols } : undefined, }) }, async clone(id: string) { @@ -223,9 +224,7 @@ export const { use: useSession, provider: SessionProvider } = createSimpleContex const pty = store.terminals.all[index] if (!pty) return const clone = await sdk.client.pty.create({ - body: { - title: pty.title, - }, + title: pty.title, }) if (!clone.data) return setStore("terminals", "all", index, { @@ -252,7 +251,7 @@ export const { use: useSession, provider: SessionProvider } = createSimpleContex setStore("terminals", "active", previous) } }) - await sdk.client.pty.remove({ path: { id } }) + await sdk.client.pty.remove({ ptyID: id }) }, move(id: string, to: number) { const index = store.terminals.all.findIndex((f) => f.id === id) diff --git a/packages/desktop/src/context/sync.tsx b/packages/desktop/src/context/sync.tsx index 3eb921a31d..d8d7c7b955 100644 --- a/packages/desktop/src/context/sync.tsx +++ b/packages/desktop/src/context/sync.tsx @@ -28,7 +28,7 @@ export const { use: useSync, provider: SyncProvider } = createSimpleContext({ status: () => sdk.client.session.status().then((x) => setStore("session_status", x.data!)), config: () => sdk.client.config.get().then((x) => setStore("config", x.data!)), changes: () => sdk.client.file.status().then((x) => setStore("changes", x.data!)), - node: () => sdk.client.file.list({ query: { path: "/" } }).then((x) => setStore("node", x.data!)), + node: () => sdk.client.file.list({ path: "/" }).then((x) => setStore("node", x.data!)), } Promise.all(Object.values(load).map((p) => p())).then(() => setStore("ready", true)) @@ -49,10 +49,10 @@ export const { use: useSync, provider: SyncProvider } = createSimpleContext({ }, async sync(sessionID: string, _isRetry = false) { const [session, messages, todo, diff] = await Promise.all([ - sdk.client.session.get({ path: { id: sessionID }, throwOnError: true }), - sdk.client.session.messages({ path: { id: sessionID }, query: { limit: 100 } }), - sdk.client.session.todo({ path: { id: sessionID } }), - sdk.client.session.diff({ path: { id: sessionID } }), + sdk.client.session.get({ sessionID }, { throwOnError: true }), + sdk.client.session.messages({ sessionID, limit: 100 }), + sdk.client.session.todo({ sessionID }), + sdk.client.session.diff({ sessionID }), ]) setStore( produce((draft) => { diff --git a/packages/desktop/src/pages/layout.tsx b/packages/desktop/src/pages/layout.tsx index 29083cf6c8..94ff4dd04f 100644 --- a/packages/desktop/src/pages/layout.tsx +++ b/packages/desktop/src/pages/layout.tsx @@ -13,7 +13,7 @@ import { Collapsible } from "@opencode-ai/ui/collapsible" import { DiffChanges } from "@opencode-ai/ui/diff-changes" import { getFilename } from "@opencode-ai/util/path" import { Select } from "@opencode-ai/ui/select" -import { Session } from "@opencode-ai/sdk/client" +import { Session } from "@opencode-ai/sdk/v2/client" export default function Layout(props: ParentProps) { const navigate = useNavigate() diff --git a/packages/sdk/js/package.json b/packages/sdk/js/package.json index aabb52194a..ab9a18b0be 100644 --- a/packages/sdk/js/package.json +++ b/packages/sdk/js/package.json @@ -19,7 +19,7 @@ "dist" ], "devDependencies": { - "@hey-api/openapi-ts": "https://pkg.pr.new/hey-api/openapi-ts/@hey-api/openapi-ts@3047", + "@hey-api/openapi-ts": "0.88.1", "@tsconfig/node22": "catalog:", "@types/node": "catalog:", "typescript": "catalog:", diff --git a/packages/sdk/js/script/build.ts b/packages/sdk/js/script/build.ts index 302c5523d9..7a63716918 100755 --- a/packages/sdk/js/script/build.ts +++ b/packages/sdk/js/script/build.ts @@ -10,8 +10,6 @@ import { createClient } from "@hey-api/openapi-ts" await $`bun dev generate > ${dir}/openapi.json`.cwd(path.resolve(dir, "../../opencode")) -await $`rm -rf src/gen` - await createClient({ input: "./openapi.json", output: { @@ -40,5 +38,6 @@ await createClient({ }) await $`bun prettier --write src/gen` +await $`bun prettier --write src/v2` await $`rm -rf dist` await $`bun tsc` diff --git a/packages/sdk/js/src/v2/gen/client.gen.ts b/packages/sdk/js/src/v2/gen/client.gen.ts index 9aa0dded65..0c110eca39 100644 --- a/packages/sdk/js/src/v2/gen/client.gen.ts +++ b/packages/sdk/js/src/v2/gen/client.gen.ts @@ -1,7 +1,7 @@ // This file is auto-generated by @hey-api/openapi-ts -import { type ClientOptions, type Config, createClient, createConfig } from './client/index.js'; -import type { ClientOptions as ClientOptions2 } from './types.gen.js'; +import { type ClientOptions, type Config, createClient, createConfig } from "./client/index.js" +import type { ClientOptions as ClientOptions2 } from "./types.gen.js" /** * The `createClientConfig()` function will be called on client initialization @@ -11,6 +11,8 @@ import type { ClientOptions as ClientOptions2 } from './types.gen.js'; * `setConfig()`. This is useful for example if you're using Next.js * to ensure your client always has the correct values. */ -export type CreateClientConfig = (override?: Config) => Config & T>; +export type CreateClientConfig = ( + override?: Config, +) => Config & T> -export const client = createClient(createConfig({ baseUrl: 'http://localhost:4096' })); +export const client = createClient(createConfig({ baseUrl: "http://localhost:4096" })) diff --git a/packages/sdk/js/src/v2/gen/client/client.gen.ts b/packages/sdk/js/src/v2/gen/client/client.gen.ts index 0e4f3174bd..47f1403429 100644 --- a/packages/sdk/js/src/v2/gen/client/client.gen.ts +++ b/packages/sdk/js/src/v2/gen/client/client.gen.ts @@ -1,14 +1,9 @@ // This file is auto-generated by @hey-api/openapi-ts -import { createSseClient } from '../core/serverSentEvents.gen.js'; -import type { HttpMethod } from '../core/types.gen.js'; -import { getValidRequestBody } from '../core/utils.gen.js'; -import type { - Client, - Config, - RequestOptions, - ResolvedRequestOptions, -} from './types.gen.js'; +import { createSseClient } from "../core/serverSentEvents.gen.js" +import type { HttpMethod } from "../core/types.gen.js" +import { getValidRequestBody } from "../core/utils.gen.js" +import type { Client, Config, RequestOptions, ResolvedRequestOptions } from "./types.gen.js" import { buildUrl, createConfig, @@ -17,29 +12,24 @@ import { mergeConfigs, mergeHeaders, setAuthParams, -} from './utils.gen.js'; +} from "./utils.gen.js" -type ReqInit = Omit & { - body?: any; - headers: ReturnType; -}; +type ReqInit = Omit & { + body?: any + headers: ReturnType +} export const createClient = (config: Config = {}): Client => { - let _config = mergeConfigs(createConfig(), config); + let _config = mergeConfigs(createConfig(), config) - const getConfig = (): Config => ({ ..._config }); + const getConfig = (): Config => ({ ..._config }) const setConfig = (config: Config): Config => { - _config = mergeConfigs(_config, config); - return getConfig(); - }; + _config = mergeConfigs(_config, config) + return getConfig() + } - const interceptors = createInterceptors< - Request, - Response, - unknown, - ResolvedRequestOptions - >(); + const interceptors = createInterceptors() const beforeRequest = async (options: RequestOptions) => { const opts = { @@ -48,254 +38,241 @@ export const createClient = (config: Config = {}): Client => { fetch: options.fetch ?? _config.fetch ?? globalThis.fetch, headers: mergeHeaders(_config.headers, options.headers), serializedBody: undefined, - }; + } if (opts.security) { await setAuthParams({ ...opts, security: opts.security, - }); + }) } if (opts.requestValidator) { - await opts.requestValidator(opts); + await opts.requestValidator(opts) } if (opts.body !== undefined && opts.bodySerializer) { - opts.serializedBody = opts.bodySerializer(opts.body); + opts.serializedBody = opts.bodySerializer(opts.body) } // remove Content-Type header if body is empty to avoid sending invalid requests - if (opts.body === undefined || opts.serializedBody === '') { - opts.headers.delete('Content-Type'); + if (opts.body === undefined || opts.serializedBody === "") { + opts.headers.delete("Content-Type") } - const url = buildUrl(opts); + const url = buildUrl(opts) - return { opts, url }; - }; + return { opts, url } + } - const request: Client['request'] = async (options) => { + const request: Client["request"] = async (options) => { // @ts-expect-error - const { opts, url } = await beforeRequest(options); + const { opts, url } = await beforeRequest(options) const requestInit: ReqInit = { - redirect: 'follow', + redirect: "follow", ...opts, body: getValidRequestBody(opts), - }; + } - let request = new Request(url, requestInit); + let request = new Request(url, requestInit) for (const fn of interceptors.request.fns) { if (fn) { - request = await fn(request, opts); + request = await fn(request, opts) } } // fetch must be assigned here, otherwise it would throw the error: // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation - const _fetch = opts.fetch!; - let response: Response; + const _fetch = opts.fetch! + let response: Response try { - response = await _fetch(request); + response = await _fetch(request) } catch (error) { // Handle fetch exceptions (AbortError, network errors, etc.) - let finalError = error; + let finalError = error for (const fn of interceptors.error.fns) { if (fn) { - finalError = (await fn( - error, - undefined as any, - request, - opts, - )) as unknown; + finalError = (await fn(error, undefined as any, request, opts)) as unknown } } - finalError = finalError || ({} as unknown); + finalError = finalError || ({} as unknown) if (opts.throwOnError) { - throw finalError; + throw finalError } // Return error response - return opts.responseStyle === 'data' + return opts.responseStyle === "data" ? undefined : { error: finalError, request, response: undefined as any, - }; + } } for (const fn of interceptors.response.fns) { if (fn) { - response = await fn(response, request, opts); + response = await fn(response, request, opts) } } const result = { request, response, - }; + } if (response.ok) { const parseAs = - (opts.parseAs === 'auto' - ? getParseAs(response.headers.get('Content-Type')) - : opts.parseAs) ?? 'json'; + (opts.parseAs === "auto" ? getParseAs(response.headers.get("Content-Type")) : opts.parseAs) ?? "json" - if ( - response.status === 204 || - response.headers.get('Content-Length') === '0' - ) { - let emptyData: any; + if (response.status === 204 || response.headers.get("Content-Length") === "0") { + let emptyData: any switch (parseAs) { - case 'arrayBuffer': - case 'blob': - case 'text': - emptyData = await response[parseAs](); - break; - case 'formData': - emptyData = new FormData(); - break; - case 'stream': - emptyData = response.body; - break; - case 'json': + case "arrayBuffer": + case "blob": + case "text": + emptyData = await response[parseAs]() + break + case "formData": + emptyData = new FormData() + break + case "stream": + emptyData = response.body + break + case "json": default: - emptyData = {}; - break; + emptyData = {} + break } - return opts.responseStyle === 'data' + return opts.responseStyle === "data" ? emptyData : { data: emptyData, ...result, - }; + } } - let data: any; + let data: any switch (parseAs) { - case 'arrayBuffer': - case 'blob': - case 'formData': - case 'json': - case 'text': - data = await response[parseAs](); - break; - case 'stream': - return opts.responseStyle === 'data' + case "arrayBuffer": + case "blob": + case "formData": + case "json": + case "text": + data = await response[parseAs]() + break + case "stream": + return opts.responseStyle === "data" ? response.body : { data: response.body, ...result, - }; + } } - if (parseAs === 'json') { + if (parseAs === "json") { if (opts.responseValidator) { - await opts.responseValidator(data); + await opts.responseValidator(data) } if (opts.responseTransformer) { - data = await opts.responseTransformer(data); + data = await opts.responseTransformer(data) } } - return opts.responseStyle === 'data' + return opts.responseStyle === "data" ? data : { data, ...result, - }; + } } - const textError = await response.text(); - let jsonError: unknown; + const textError = await response.text() + let jsonError: unknown try { - jsonError = JSON.parse(textError); + jsonError = JSON.parse(textError) } catch { // noop } - const error = jsonError ?? textError; - let finalError = error; + const error = jsonError ?? textError + let finalError = error for (const fn of interceptors.error.fns) { if (fn) { - finalError = (await fn(error, response, request, opts)) as string; + finalError = (await fn(error, response, request, opts)) as string } } - finalError = finalError || ({} as string); + finalError = finalError || ({} as string) if (opts.throwOnError) { - throw finalError; + throw finalError } // TODO: we probably want to return error and improve types - return opts.responseStyle === 'data' + return opts.responseStyle === "data" ? undefined : { error: finalError, ...result, - }; - }; + } + } - const makeMethodFn = - (method: Uppercase) => (options: RequestOptions) => - request({ ...options, method }); + const makeMethodFn = (method: Uppercase) => (options: RequestOptions) => request({ ...options, method }) - const makeSseFn = - (method: Uppercase) => async (options: RequestOptions) => { - const { opts, url } = await beforeRequest(options); - return createSseClient({ - ...opts, - body: opts.body as BodyInit | null | undefined, - headers: opts.headers as unknown as Record, - method, - onRequest: async (url, init) => { - let request = new Request(url, init); - for (const fn of interceptors.request.fns) { - if (fn) { - request = await fn(request, opts); - } + const makeSseFn = (method: Uppercase) => async (options: RequestOptions) => { + const { opts, url } = await beforeRequest(options) + return createSseClient({ + ...opts, + body: opts.body as BodyInit | null | undefined, + headers: opts.headers as unknown as Record, + method, + onRequest: async (url, init) => { + let request = new Request(url, init) + for (const fn of interceptors.request.fns) { + if (fn) { + request = await fn(request, opts) } - return request; - }, - url, - }); - }; + } + return request + }, + url, + }) + } return { buildUrl, - connect: makeMethodFn('CONNECT'), - delete: makeMethodFn('DELETE'), - get: makeMethodFn('GET'), + connect: makeMethodFn("CONNECT"), + delete: makeMethodFn("DELETE"), + get: makeMethodFn("GET"), getConfig, - head: makeMethodFn('HEAD'), + head: makeMethodFn("HEAD"), interceptors, - options: makeMethodFn('OPTIONS'), - patch: makeMethodFn('PATCH'), - post: makeMethodFn('POST'), - put: makeMethodFn('PUT'), + options: makeMethodFn("OPTIONS"), + patch: makeMethodFn("PATCH"), + post: makeMethodFn("POST"), + put: makeMethodFn("PUT"), request, setConfig, sse: { - connect: makeSseFn('CONNECT'), - delete: makeSseFn('DELETE'), - get: makeSseFn('GET'), - head: makeSseFn('HEAD'), - options: makeSseFn('OPTIONS'), - patch: makeSseFn('PATCH'), - post: makeSseFn('POST'), - put: makeSseFn('PUT'), - trace: makeSseFn('TRACE'), + connect: makeSseFn("CONNECT"), + delete: makeSseFn("DELETE"), + get: makeSseFn("GET"), + head: makeSseFn("HEAD"), + options: makeSseFn("OPTIONS"), + patch: makeSseFn("PATCH"), + post: makeSseFn("POST"), + put: makeSseFn("PUT"), + trace: makeSseFn("TRACE"), }, - trace: makeMethodFn('TRACE'), - } as Client; -}; + trace: makeMethodFn("TRACE"), + } as Client +} diff --git a/packages/sdk/js/src/v2/gen/client/index.ts b/packages/sdk/js/src/v2/gen/client/index.ts index 50acaa57b7..0af63f3300 100644 --- a/packages/sdk/js/src/v2/gen/client/index.ts +++ b/packages/sdk/js/src/v2/gen/client/index.ts @@ -1,15 +1,15 @@ // This file is auto-generated by @hey-api/openapi-ts -export type { Auth } from '../core/auth.gen.js'; -export type { QuerySerializerOptions } from '../core/bodySerializer.gen.js'; +export type { Auth } from "../core/auth.gen.js" +export type { QuerySerializerOptions } from "../core/bodySerializer.gen.js" export { formDataBodySerializer, jsonBodySerializer, urlSearchParamsBodySerializer, -} from '../core/bodySerializer.gen.js'; -export { buildClientParams } from '../core/params.gen.js'; -export { serializeQueryKeyValue } from '../core/queryKeySerializer.gen.js'; -export { createClient } from './client.gen.js'; +} from "../core/bodySerializer.gen.js" +export { buildClientParams } from "../core/params.gen.js" +export { serializeQueryKeyValue } from "../core/queryKeySerializer.gen.js" +export { createClient } from "./client.gen.js" export type { Client, ClientOptions, @@ -21,5 +21,5 @@ export type { ResolvedRequestOptions, ResponseStyle, TDataShape, -} from './types.gen.js'; -export { createConfig, mergeHeaders } from './utils.gen.js'; +} from "./types.gen.js" +export { createConfig, mergeHeaders } from "./utils.gen.js" diff --git a/packages/sdk/js/src/v2/gen/client/types.gen.ts b/packages/sdk/js/src/v2/gen/client/types.gen.ts index 21c8ee1fba..e053aa4066 100644 --- a/packages/sdk/js/src/v2/gen/client/types.gen.ts +++ b/packages/sdk/js/src/v2/gen/client/types.gen.ts @@ -1,39 +1,33 @@ // This file is auto-generated by @hey-api/openapi-ts -import type { Auth } from '../core/auth.gen.js'; -import type { - ServerSentEventsOptions, - ServerSentEventsResult, -} from '../core/serverSentEvents.gen.js'; -import type { - Client as CoreClient, - Config as CoreConfig, -} from '../core/types.gen.js'; -import type { Middleware } from './utils.gen.js'; +import type { Auth } from "../core/auth.gen.js" +import type { ServerSentEventsOptions, ServerSentEventsResult } from "../core/serverSentEvents.gen.js" +import type { Client as CoreClient, Config as CoreConfig } from "../core/types.gen.js" +import type { Middleware } from "./utils.gen.js" -export type ResponseStyle = 'data' | 'fields'; +export type ResponseStyle = "data" | "fields" export interface Config - extends Omit, + extends Omit, CoreConfig { /** * Base URL for all requests made by this client. */ - baseUrl?: T['baseUrl']; + baseUrl?: T["baseUrl"] /** * Fetch API implementation. You can use this option to provide a custom * fetch instance. * * @default globalThis.fetch */ - fetch?: typeof fetch; + fetch?: typeof fetch /** * Please don't use the Fetch client for Next.js applications. The `next` * options won't have any effect. * * Install {@link https://www.npmjs.com/package/@hey-api/client-next `@hey-api/client-next`} instead. */ - next?: never; + next?: never /** * Return the response data parsed in a specified format. By default, `auto` * will infer the appropriate method from the `Content-Type` response header. @@ -42,170 +36,140 @@ export interface Config * * @default 'auto' */ - parseAs?: - | 'arrayBuffer' - | 'auto' - | 'blob' - | 'formData' - | 'json' - | 'stream' - | 'text'; + parseAs?: "arrayBuffer" | "auto" | "blob" | "formData" | "json" | "stream" | "text" /** * Should we return only data or multiple fields (data, error, response, etc.)? * * @default 'fields' */ - responseStyle?: ResponseStyle; + responseStyle?: ResponseStyle /** * Throw an error instead of returning it in the response? * * @default false */ - throwOnError?: T['throwOnError']; + throwOnError?: T["throwOnError"] } export interface RequestOptions< TData = unknown, - TResponseStyle extends ResponseStyle = 'fields', + TResponseStyle extends ResponseStyle = "fields", ThrowOnError extends boolean = boolean, Url extends string = string, > extends Config<{ - responseStyle: TResponseStyle; - throwOnError: ThrowOnError; + responseStyle: TResponseStyle + throwOnError: ThrowOnError }>, Pick< ServerSentEventsOptions, - | 'onSseError' - | 'onSseEvent' - | 'sseDefaultRetryDelay' - | 'sseMaxRetryAttempts' - | 'sseMaxRetryDelay' + "onSseError" | "onSseEvent" | "sseDefaultRetryDelay" | "sseMaxRetryAttempts" | "sseMaxRetryDelay" > { /** * Any body that you want to add to your request. * * {@link https://developer.mozilla.org/docs/Web/API/fetch#body} */ - body?: unknown; - path?: Record; - query?: Record; + body?: unknown + path?: Record + query?: Record /** * Security mechanism(s) to use for the request. */ - security?: ReadonlyArray; - url: Url; + security?: ReadonlyArray + url: Url } export interface ResolvedRequestOptions< - TResponseStyle extends ResponseStyle = 'fields', + TResponseStyle extends ResponseStyle = "fields", ThrowOnError extends boolean = boolean, Url extends string = string, > extends RequestOptions { - serializedBody?: string; + serializedBody?: string } export type RequestResult< TData = unknown, TError = unknown, ThrowOnError extends boolean = boolean, - TResponseStyle extends ResponseStyle = 'fields', + TResponseStyle extends ResponseStyle = "fields", > = ThrowOnError extends true ? Promise< - TResponseStyle extends 'data' + TResponseStyle extends "data" ? TData extends Record ? TData[keyof TData] : TData : { - data: TData extends Record - ? TData[keyof TData] - : TData; - request: Request; - response: Response; + data: TData extends Record ? TData[keyof TData] : TData + request: Request + response: Response } > : Promise< - TResponseStyle extends 'data' - ? - | (TData extends Record - ? TData[keyof TData] - : TData) - | undefined + TResponseStyle extends "data" + ? (TData extends Record ? TData[keyof TData] : TData) | undefined : ( | { - data: TData extends Record - ? TData[keyof TData] - : TData; - error: undefined; + data: TData extends Record ? TData[keyof TData] : TData + error: undefined } | { - data: undefined; - error: TError extends Record - ? TError[keyof TError] - : TError; + data: undefined + error: TError extends Record ? TError[keyof TError] : TError } ) & { - request: Request; - response: Response; + request: Request + response: Response } - >; + > export interface ClientOptions { - baseUrl?: string; - responseStyle?: ResponseStyle; - throwOnError?: boolean; + baseUrl?: string + responseStyle?: ResponseStyle + throwOnError?: boolean } type MethodFn = < TData = unknown, TError = unknown, ThrowOnError extends boolean = false, - TResponseStyle extends ResponseStyle = 'fields', + TResponseStyle extends ResponseStyle = "fields", >( - options: Omit, 'method'>, -) => RequestResult; + options: Omit, "method">, +) => RequestResult type SseFn = < TData = unknown, TError = unknown, ThrowOnError extends boolean = false, - TResponseStyle extends ResponseStyle = 'fields', + TResponseStyle extends ResponseStyle = "fields", >( - options: Omit, 'method'>, -) => Promise>; + options: Omit, "method">, +) => Promise> type RequestFn = < TData = unknown, TError = unknown, ThrowOnError extends boolean = false, - TResponseStyle extends ResponseStyle = 'fields', + TResponseStyle extends ResponseStyle = "fields", >( - options: Omit, 'method'> & - Pick< - Required>, - 'method' - >, -) => RequestResult; + options: Omit, "method"> & + Pick>, "method">, +) => RequestResult type BuildUrlFn = < TData extends { - body?: unknown; - path?: Record; - query?: Record; - url: string; + body?: unknown + path?: Record + query?: Record + url: string }, >( options: TData & Options, -) => string; +) => string -export type Client = CoreClient< - RequestFn, - Config, - MethodFn, - BuildUrlFn, - SseFn -> & { - interceptors: Middleware; -}; +export type Client = CoreClient & { + interceptors: Middleware +} /** * The `createClientConfig()` function will be called on client initialization @@ -217,25 +181,22 @@ export type Client = CoreClient< */ export type CreateClientConfig = ( override?: Config, -) => Config & T>; +) => Config & T> export interface TDataShape { - body?: unknown; - headers?: unknown; - path?: unknown; - query?: unknown; - url: string; + body?: unknown + headers?: unknown + path?: unknown + query?: unknown + url: string } -type OmitKeys = Pick>; +type OmitKeys = Pick> export type Options< TData extends TDataShape = TDataShape, ThrowOnError extends boolean = boolean, TResponse = unknown, - TResponseStyle extends ResponseStyle = 'fields', -> = OmitKeys< - RequestOptions, - 'body' | 'path' | 'query' | 'url' -> & - ([TData] extends [never] ? unknown : Omit); + TResponseStyle extends ResponseStyle = "fields", +> = OmitKeys, "body" | "path" | "query" | "url"> & + ([TData] extends [never] ? unknown : Omit) diff --git a/packages/sdk/js/src/v2/gen/client/utils.gen.ts b/packages/sdk/js/src/v2/gen/client/utils.gen.ts index f163053b0a..3b1dfb7871 100644 --- a/packages/sdk/js/src/v2/gen/client/utils.gen.ts +++ b/packages/sdk/js/src/v2/gen/client/utils.gen.ts @@ -1,332 +1,289 @@ // This file is auto-generated by @hey-api/openapi-ts -import { getAuthToken } from '../core/auth.gen.js'; -import type { QuerySerializerOptions } from '../core/bodySerializer.gen.js'; -import { jsonBodySerializer } from '../core/bodySerializer.gen.js'; -import { - serializeArrayParam, - serializeObjectParam, - serializePrimitiveParam, -} from '../core/pathSerializer.gen.js'; -import { getUrl } from '../core/utils.gen.js'; -import type { Client, ClientOptions, Config, RequestOptions } from './types.gen.js'; +import { getAuthToken } from "../core/auth.gen.js" +import type { QuerySerializerOptions } from "../core/bodySerializer.gen.js" +import { jsonBodySerializer } from "../core/bodySerializer.gen.js" +import { serializeArrayParam, serializeObjectParam, serializePrimitiveParam } from "../core/pathSerializer.gen.js" +import { getUrl } from "../core/utils.gen.js" +import type { Client, ClientOptions, Config, RequestOptions } from "./types.gen.js" -export const createQuerySerializer = ({ - parameters = {}, - ...args -}: QuerySerializerOptions = {}) => { +export const createQuerySerializer = ({ parameters = {}, ...args }: QuerySerializerOptions = {}) => { const querySerializer = (queryParams: T) => { - const search: string[] = []; - if (queryParams && typeof queryParams === 'object') { + const search: string[] = [] + if (queryParams && typeof queryParams === "object") { for (const name in queryParams) { - const value = queryParams[name]; + const value = queryParams[name] if (value === undefined || value === null) { - continue; + continue } - const options = parameters[name] || args; + const options = parameters[name] || args if (Array.isArray(value)) { const serializedArray = serializeArrayParam({ allowReserved: options.allowReserved, explode: true, name, - style: 'form', + style: "form", value, ...options.array, - }); - if (serializedArray) search.push(serializedArray); - } else if (typeof value === 'object') { + }) + if (serializedArray) search.push(serializedArray) + } else if (typeof value === "object") { const serializedObject = serializeObjectParam({ allowReserved: options.allowReserved, explode: true, name, - style: 'deepObject', + style: "deepObject", value: value as Record, ...options.object, - }); - if (serializedObject) search.push(serializedObject); + }) + if (serializedObject) search.push(serializedObject) } else { const serializedPrimitive = serializePrimitiveParam({ allowReserved: options.allowReserved, name, value: value as string, - }); - if (serializedPrimitive) search.push(serializedPrimitive); + }) + if (serializedPrimitive) search.push(serializedPrimitive) } } } - return search.join('&'); - }; - return querySerializer; -}; + return search.join("&") + } + return querySerializer +} /** * Infers parseAs value from provided Content-Type header. */ -export const getParseAs = ( - contentType: string | null, -): Exclude => { +export const getParseAs = (contentType: string | null): Exclude => { if (!contentType) { // If no Content-Type header is provided, the best we can do is return the raw response body, // which is effectively the same as the 'stream' option. - return 'stream'; + return "stream" } - const cleanContent = contentType.split(';')[0]?.trim(); + const cleanContent = contentType.split(";")[0]?.trim() if (!cleanContent) { - return; + return } - if ( - cleanContent.startsWith('application/json') || - cleanContent.endsWith('+json') - ) { - return 'json'; + if (cleanContent.startsWith("application/json") || cleanContent.endsWith("+json")) { + return "json" } - if (cleanContent === 'multipart/form-data') { - return 'formData'; + if (cleanContent === "multipart/form-data") { + return "formData" } - if ( - ['application/', 'audio/', 'image/', 'video/'].some((type) => - cleanContent.startsWith(type), - ) - ) { - return 'blob'; + if (["application/", "audio/", "image/", "video/"].some((type) => cleanContent.startsWith(type))) { + return "blob" } - if (cleanContent.startsWith('text/')) { - return 'text'; + if (cleanContent.startsWith("text/")) { + return "text" } - return; -}; + return +} const checkForExistence = ( - options: Pick & { - headers: Headers; + options: Pick & { + headers: Headers }, name?: string, ): boolean => { if (!name) { - return false; + return false } - if ( - options.headers.has(name) || - options.query?.[name] || - options.headers.get('Cookie')?.includes(`${name}=`) - ) { - return true; + if (options.headers.has(name) || options.query?.[name] || options.headers.get("Cookie")?.includes(`${name}=`)) { + return true } - return false; -}; + return false +} export const setAuthParams = async ({ security, ...options -}: Pick, 'security'> & - Pick & { - headers: Headers; +}: Pick, "security"> & + Pick & { + headers: Headers }) => { for (const auth of security) { if (checkForExistence(options, auth.name)) { - continue; + continue } - const token = await getAuthToken(auth, options.auth); + const token = await getAuthToken(auth, options.auth) if (!token) { - continue; + continue } - const name = auth.name ?? 'Authorization'; + const name = auth.name ?? "Authorization" switch (auth.in) { - case 'query': + case "query": if (!options.query) { - options.query = {}; + options.query = {} } - options.query[name] = token; - break; - case 'cookie': - options.headers.append('Cookie', `${name}=${token}`); - break; - case 'header': + options.query[name] = token + break + case "cookie": + options.headers.append("Cookie", `${name}=${token}`) + break + case "header": default: - options.headers.set(name, token); - break; + options.headers.set(name, token) + break } } -}; +} -export const buildUrl: Client['buildUrl'] = (options) => +export const buildUrl: Client["buildUrl"] = (options) => getUrl({ baseUrl: options.baseUrl as string, path: options.path, query: options.query, querySerializer: - typeof options.querySerializer === 'function' + typeof options.querySerializer === "function" ? options.querySerializer : createQuerySerializer(options.querySerializer), url: options.url, - }); + }) export const mergeConfigs = (a: Config, b: Config): Config => { - const config = { ...a, ...b }; - if (config.baseUrl?.endsWith('/')) { - config.baseUrl = config.baseUrl.substring(0, config.baseUrl.length - 1); + const config = { ...a, ...b } + if (config.baseUrl?.endsWith("/")) { + config.baseUrl = config.baseUrl.substring(0, config.baseUrl.length - 1) } - config.headers = mergeHeaders(a.headers, b.headers); - return config; -}; + config.headers = mergeHeaders(a.headers, b.headers) + return config +} const headersEntries = (headers: Headers): Array<[string, string]> => { - const entries: Array<[string, string]> = []; + const entries: Array<[string, string]> = [] headers.forEach((value, key) => { - entries.push([key, value]); - }); - return entries; -}; + entries.push([key, value]) + }) + return entries +} -export const mergeHeaders = ( - ...headers: Array['headers'] | undefined> -): Headers => { - const mergedHeaders = new Headers(); +export const mergeHeaders = (...headers: Array["headers"] | undefined>): Headers => { + const mergedHeaders = new Headers() for (const header of headers) { if (!header) { - continue; + continue } - const iterator = - header instanceof Headers - ? headersEntries(header) - : Object.entries(header); + const iterator = header instanceof Headers ? headersEntries(header) : Object.entries(header) for (const [key, value] of iterator) { if (value === null) { - mergedHeaders.delete(key); + mergedHeaders.delete(key) } else if (Array.isArray(value)) { for (const v of value) { - mergedHeaders.append(key, v as string); + mergedHeaders.append(key, v as string) } } else if (value !== undefined) { // assume object headers are meant to be JSON stringified, i.e. their // content value in OpenAPI specification is 'application/json' - mergedHeaders.set( - key, - typeof value === 'object' ? JSON.stringify(value) : (value as string), - ); + mergedHeaders.set(key, typeof value === "object" ? JSON.stringify(value) : (value as string)) } } } - return mergedHeaders; -}; + return mergedHeaders +} type ErrInterceptor = ( error: Err, response: Res, request: Req, options: Options, -) => Err | Promise; +) => Err | Promise -type ReqInterceptor = ( - request: Req, - options: Options, -) => Req | Promise; +type ReqInterceptor = (request: Req, options: Options) => Req | Promise -type ResInterceptor = ( - response: Res, - request: Req, - options: Options, -) => Res | Promise; +type ResInterceptor = (response: Res, request: Req, options: Options) => Res | Promise class Interceptors { - fns: Array = []; + fns: Array = [] clear(): void { - this.fns = []; + this.fns = [] } eject(id: number | Interceptor): void { - const index = this.getInterceptorIndex(id); + const index = this.getInterceptorIndex(id) if (this.fns[index]) { - this.fns[index] = null; + this.fns[index] = null } } exists(id: number | Interceptor): boolean { - const index = this.getInterceptorIndex(id); - return Boolean(this.fns[index]); + const index = this.getInterceptorIndex(id) + return Boolean(this.fns[index]) } getInterceptorIndex(id: number | Interceptor): number { - if (typeof id === 'number') { - return this.fns[id] ? id : -1; + if (typeof id === "number") { + return this.fns[id] ? id : -1 } - return this.fns.indexOf(id); + return this.fns.indexOf(id) } - update( - id: number | Interceptor, - fn: Interceptor, - ): number | Interceptor | false { - const index = this.getInterceptorIndex(id); + update(id: number | Interceptor, fn: Interceptor): number | Interceptor | false { + const index = this.getInterceptorIndex(id) if (this.fns[index]) { - this.fns[index] = fn; - return id; + this.fns[index] = fn + return id } - return false; + return false } use(fn: Interceptor): number { - this.fns.push(fn); - return this.fns.length - 1; + this.fns.push(fn) + return this.fns.length - 1 } } export interface Middleware { - error: Interceptors>; - request: Interceptors>; - response: Interceptors>; + error: Interceptors> + request: Interceptors> + response: Interceptors> } -export const createInterceptors = (): Middleware< - Req, - Res, - Err, - Options -> => ({ +export const createInterceptors = (): Middleware => ({ error: new Interceptors>(), request: new Interceptors>(), response: new Interceptors>(), -}); +}) const defaultQuerySerializer = createQuerySerializer({ allowReserved: false, array: { explode: true, - style: 'form', + style: "form", }, object: { explode: true, - style: 'deepObject', + style: "deepObject", }, -}); +}) const defaultHeaders = { - 'Content-Type': 'application/json', -}; + "Content-Type": "application/json", +} export const createConfig = ( override: Config & T> = {}, ): Config & T> => ({ ...jsonBodySerializer, headers: defaultHeaders, - parseAs: 'auto', + parseAs: "auto", querySerializer: defaultQuerySerializer, ...override, -}); +}) diff --git a/packages/sdk/js/src/v2/gen/core/auth.gen.ts b/packages/sdk/js/src/v2/gen/core/auth.gen.ts index f8a73266f9..bc7b230f44 100644 --- a/packages/sdk/js/src/v2/gen/core/auth.gen.ts +++ b/packages/sdk/js/src/v2/gen/core/auth.gen.ts @@ -1,6 +1,6 @@ // This file is auto-generated by @hey-api/openapi-ts -export type AuthToken = string | undefined; +export type AuthToken = string | undefined export interface Auth { /** @@ -8,35 +8,34 @@ export interface Auth { * * @default 'header' */ - in?: 'header' | 'query' | 'cookie'; + in?: "header" | "query" | "cookie" /** * Header or query parameter name. * * @default 'Authorization' */ - name?: string; - scheme?: 'basic' | 'bearer'; - type: 'apiKey' | 'http'; + name?: string + scheme?: "basic" | "bearer" + type: "apiKey" | "http" } export const getAuthToken = async ( auth: Auth, callback: ((auth: Auth) => Promise | AuthToken) | AuthToken, ): Promise => { - const token = - typeof callback === 'function' ? await callback(auth) : callback; + const token = typeof callback === "function" ? await callback(auth) : callback if (!token) { - return; + return } - if (auth.scheme === 'bearer') { - return `Bearer ${token}`; + if (auth.scheme === "bearer") { + return `Bearer ${token}` } - if (auth.scheme === 'basic') { - return `Basic ${btoa(token)}`; + if (auth.scheme === "basic") { + return `Basic ${btoa(token)}` } - return token; -}; + return token +} diff --git a/packages/sdk/js/src/v2/gen/core/bodySerializer.gen.ts b/packages/sdk/js/src/v2/gen/core/bodySerializer.gen.ts index 886b401aef..9678fb08ec 100644 --- a/packages/sdk/js/src/v2/gen/core/bodySerializer.gen.ts +++ b/packages/sdk/js/src/v2/gen/core/bodySerializer.gen.ts @@ -1,100 +1,82 @@ // This file is auto-generated by @hey-api/openapi-ts -import type { - ArrayStyle, - ObjectStyle, - SerializerOptions, -} from './pathSerializer.gen.js'; +import type { ArrayStyle, ObjectStyle, SerializerOptions } from "./pathSerializer.gen.js" -export type QuerySerializer = (query: Record) => string; +export type QuerySerializer = (query: Record) => string -export type BodySerializer = (body: any) => any; +export type BodySerializer = (body: any) => any type QuerySerializerOptionsObject = { - allowReserved?: boolean; - array?: Partial>; - object?: Partial>; -}; + allowReserved?: boolean + array?: Partial> + object?: Partial> +} export type QuerySerializerOptions = QuerySerializerOptionsObject & { /** * Per-parameter serialization overrides. When provided, these settings * override the global array/object settings for specific parameter names. */ - parameters?: Record; -}; + parameters?: Record +} -const serializeFormDataPair = ( - data: FormData, - key: string, - value: unknown, -): void => { - if (typeof value === 'string' || value instanceof Blob) { - data.append(key, value); +const serializeFormDataPair = (data: FormData, key: string, value: unknown): void => { + if (typeof value === "string" || value instanceof Blob) { + data.append(key, value) } else if (value instanceof Date) { - data.append(key, value.toISOString()); + data.append(key, value.toISOString()) } else { - data.append(key, JSON.stringify(value)); + data.append(key, JSON.stringify(value)) } -}; +} -const serializeUrlSearchParamsPair = ( - data: URLSearchParams, - key: string, - value: unknown, -): void => { - if (typeof value === 'string') { - data.append(key, value); +const serializeUrlSearchParamsPair = (data: URLSearchParams, key: string, value: unknown): void => { + if (typeof value === "string") { + data.append(key, value) } else { - data.append(key, JSON.stringify(value)); + data.append(key, JSON.stringify(value)) } -}; +} export const formDataBodySerializer = { - bodySerializer: | Array>>( - body: T, - ): FormData => { - const data = new FormData(); + bodySerializer: | Array>>(body: T): FormData => { + const data = new FormData() Object.entries(body).forEach(([key, value]) => { if (value === undefined || value === null) { - return; + return } if (Array.isArray(value)) { - value.forEach((v) => serializeFormDataPair(data, key, v)); + value.forEach((v) => serializeFormDataPair(data, key, v)) } else { - serializeFormDataPair(data, key, value); + serializeFormDataPair(data, key, value) } - }); + }) - return data; + return data }, -}; +} export const jsonBodySerializer = { bodySerializer: (body: T): string => - JSON.stringify(body, (_key, value) => - typeof value === 'bigint' ? value.toString() : value, - ), -}; + JSON.stringify(body, (_key, value) => (typeof value === "bigint" ? value.toString() : value)), +} export const urlSearchParamsBodySerializer = { - bodySerializer: | Array>>( - body: T, - ): string => { - const data = new URLSearchParams(); + bodySerializer: | Array>>(body: T): string => { + const data = new URLSearchParams() Object.entries(body).forEach(([key, value]) => { if (value === undefined || value === null) { - return; + return } if (Array.isArray(value)) { - value.forEach((v) => serializeUrlSearchParamsPair(data, key, v)); + value.forEach((v) => serializeUrlSearchParamsPair(data, key, v)) } else { - serializeUrlSearchParamsPair(data, key, value); + serializeUrlSearchParamsPair(data, key, value) } - }); + }) - return data.toString(); + return data.toString() }, -}; +} diff --git a/packages/sdk/js/src/v2/gen/core/params.gen.ts b/packages/sdk/js/src/v2/gen/core/params.gen.ts index 602715c46c..6e9d0b9add 100644 --- a/packages/sdk/js/src/v2/gen/core/params.gen.ts +++ b/packages/sdk/js/src/v2/gen/core/params.gen.ts @@ -1,167 +1,160 @@ // This file is auto-generated by @hey-api/openapi-ts -type Slot = 'body' | 'headers' | 'path' | 'query'; +type Slot = "body" | "headers" | "path" | "query" export type Field = | { - in: Exclude; + in: Exclude /** * Field name. This is the name we want the user to see and use. */ - key: string; + key: string /** * Field mapped name. This is the name we want to use in the request. * If omitted, we use the same value as `key`. */ - map?: string; + map?: string } | { - in: Extract; + in: Extract /** * Key isn't required for bodies. */ - key?: string; - map?: string; + key?: string + map?: string } | { /** * Field name. This is the name we want the user to see and use. */ - key: string; + key: string /** * Field mapped name. This is the name we want to use in the request. * If `in` is omitted, `map` aliases `key` to the transport layer. */ - map: Slot; - }; + map: Slot + } export interface Fields { - allowExtra?: Partial>; - args?: ReadonlyArray; + allowExtra?: Partial> + args?: ReadonlyArray } -export type FieldsConfig = ReadonlyArray; +export type FieldsConfig = ReadonlyArray const extraPrefixesMap: Record = { - $body_: 'body', - $headers_: 'headers', - $path_: 'path', - $query_: 'query', -}; -const extraPrefixes = Object.entries(extraPrefixesMap); + $body_: "body", + $headers_: "headers", + $path_: "path", + $query_: "query", +} +const extraPrefixes = Object.entries(extraPrefixesMap) type KeyMap = Map< string, | { - in: Slot; - map?: string; + in: Slot + map?: string } | { - in?: never; - map: Slot; + in?: never + map: Slot } ->; +> const buildKeyMap = (fields: FieldsConfig, map?: KeyMap): KeyMap => { if (!map) { - map = new Map(); + map = new Map() } for (const config of fields) { - if ('in' in config) { + if ("in" in config) { if (config.key) { map.set(config.key, { in: config.in, map: config.map, - }); + }) } - } else if ('key' in config) { + } else if ("key" in config) { map.set(config.key, { map: config.map, - }); + }) } else if (config.args) { - buildKeyMap(config.args, map); + buildKeyMap(config.args, map) } } - return map; -}; + return map +} interface Params { - body: unknown; - headers: Record; - path: Record; - query: Record; + body: unknown + headers: Record + path: Record + query: Record } const stripEmptySlots = (params: Params) => { for (const [slot, value] of Object.entries(params)) { - if (value && typeof value === 'object' && !Object.keys(value).length) { - delete params[slot as Slot]; + if (value && typeof value === "object" && !Object.keys(value).length) { + delete params[slot as Slot] } } -}; +} -export const buildClientParams = ( - args: ReadonlyArray, - fields: FieldsConfig, -) => { +export const buildClientParams = (args: ReadonlyArray, fields: FieldsConfig) => { const params: Params = { body: {}, headers: {}, path: {}, query: {}, - }; + } - const map = buildKeyMap(fields); + const map = buildKeyMap(fields) - let config: FieldsConfig[number] | undefined; + let config: FieldsConfig[number] | undefined for (const [index, arg] of args.entries()) { if (fields[index]) { - config = fields[index]; + config = fields[index] } if (!config) { - continue; + continue } - if ('in' in config) { + if ("in" in config) { if (config.key) { - const field = map.get(config.key)!; - const name = field.map || config.key; + const field = map.get(config.key)! + const name = field.map || config.key if (field.in) { - (params[field.in] as Record)[name] = arg; + ;(params[field.in] as Record)[name] = arg } } else { - params.body = arg; + params.body = arg } } else { for (const [key, value] of Object.entries(arg ?? {})) { - const field = map.get(key); + const field = map.get(key) if (field) { if (field.in) { - const name = field.map || key; - (params[field.in] as Record)[name] = value; + const name = field.map || key + ;(params[field.in] as Record)[name] = value } else { - params[field.map] = value; + params[field.map] = value } } else { - const extra = extraPrefixes.find(([prefix]) => - key.startsWith(prefix), - ); + const extra = extraPrefixes.find(([prefix]) => key.startsWith(prefix)) if (extra) { - const [prefix, slot] = extra; - (params[slot] as Record)[ - key.slice(prefix.length) - ] = value; - } else if ('allowExtra' in config && config.allowExtra) { + const [prefix, slot] = extra + ;(params[slot] as Record)[key.slice(prefix.length)] = value + } else if ("allowExtra" in config && config.allowExtra) { for (const [slot, allowed] of Object.entries(config.allowExtra)) { if (allowed) { - (params[slot as Slot] as Record)[key] = value; - break; + ;(params[slot as Slot] as Record)[key] = value + break } } } @@ -170,7 +163,7 @@ export const buildClientParams = ( } } - stripEmptySlots(params); + stripEmptySlots(params) - return params; -}; + return params +} diff --git a/packages/sdk/js/src/v2/gen/core/pathSerializer.gen.ts b/packages/sdk/js/src/v2/gen/core/pathSerializer.gen.ts index 8d99931047..96be3bc5a3 100644 --- a/packages/sdk/js/src/v2/gen/core/pathSerializer.gen.ts +++ b/packages/sdk/js/src/v2/gen/core/pathSerializer.gen.ts @@ -1,70 +1,68 @@ // This file is auto-generated by @hey-api/openapi-ts -interface SerializeOptions - extends SerializePrimitiveOptions, - SerializerOptions {} +interface SerializeOptions extends SerializePrimitiveOptions, SerializerOptions {} interface SerializePrimitiveOptions { - allowReserved?: boolean; - name: string; + allowReserved?: boolean + name: string } export interface SerializerOptions { /** * @default true */ - explode: boolean; - style: T; + explode: boolean + style: T } -export type ArrayStyle = 'form' | 'spaceDelimited' | 'pipeDelimited'; -export type ArraySeparatorStyle = ArrayStyle | MatrixStyle; -type MatrixStyle = 'label' | 'matrix' | 'simple'; -export type ObjectStyle = 'form' | 'deepObject'; -type ObjectSeparatorStyle = ObjectStyle | MatrixStyle; +export type ArrayStyle = "form" | "spaceDelimited" | "pipeDelimited" +export type ArraySeparatorStyle = ArrayStyle | MatrixStyle +type MatrixStyle = "label" | "matrix" | "simple" +export type ObjectStyle = "form" | "deepObject" +type ObjectSeparatorStyle = ObjectStyle | MatrixStyle interface SerializePrimitiveParam extends SerializePrimitiveOptions { - value: string; + value: string } export const separatorArrayExplode = (style: ArraySeparatorStyle) => { switch (style) { - case 'label': - return '.'; - case 'matrix': - return ';'; - case 'simple': - return ','; + case "label": + return "." + case "matrix": + return ";" + case "simple": + return "," default: - return '&'; + return "&" } -}; +} export const separatorArrayNoExplode = (style: ArraySeparatorStyle) => { switch (style) { - case 'form': - return ','; - case 'pipeDelimited': - return '|'; - case 'spaceDelimited': - return '%20'; + case "form": + return "," + case "pipeDelimited": + return "|" + case "spaceDelimited": + return "%20" default: - return ','; + return "," } -}; +} export const separatorObjectExplode = (style: ObjectSeparatorStyle) => { switch (style) { - case 'label': - return '.'; - case 'matrix': - return ';'; - case 'simple': - return ','; + case "label": + return "." + case "matrix": + return ";" + case "simple": + return "," default: - return '&'; + return "&" } -}; +} export const serializeArrayParam = ({ allowReserved, @@ -73,60 +71,54 @@ export const serializeArrayParam = ({ style, value, }: SerializeOptions & { - value: unknown[]; + value: unknown[] }) => { if (!explode) { - const joinedValues = ( - allowReserved ? value : value.map((v) => encodeURIComponent(v as string)) - ).join(separatorArrayNoExplode(style)); + const joinedValues = (allowReserved ? value : value.map((v) => encodeURIComponent(v as string))).join( + separatorArrayNoExplode(style), + ) switch (style) { - case 'label': - return `.${joinedValues}`; - case 'matrix': - return `;${name}=${joinedValues}`; - case 'simple': - return joinedValues; + case "label": + return `.${joinedValues}` + case "matrix": + return `;${name}=${joinedValues}` + case "simple": + return joinedValues default: - return `${name}=${joinedValues}`; + return `${name}=${joinedValues}` } } - const separator = separatorArrayExplode(style); + const separator = separatorArrayExplode(style) const joinedValues = value .map((v) => { - if (style === 'label' || style === 'simple') { - return allowReserved ? v : encodeURIComponent(v as string); + if (style === "label" || style === "simple") { + return allowReserved ? v : encodeURIComponent(v as string) } return serializePrimitiveParam({ allowReserved, name, value: v as string, - }); + }) }) - .join(separator); - return style === 'label' || style === 'matrix' - ? separator + joinedValues - : joinedValues; -}; + .join(separator) + return style === "label" || style === "matrix" ? separator + joinedValues : joinedValues +} -export const serializePrimitiveParam = ({ - allowReserved, - name, - value, -}: SerializePrimitiveParam) => { +export const serializePrimitiveParam = ({ allowReserved, name, value }: SerializePrimitiveParam) => { if (value === undefined || value === null) { - return ''; + return "" } - if (typeof value === 'object') { + if (typeof value === "object") { throw new Error( - 'Deeply-nested arrays/objects aren’t supported. Provide your own `querySerializer()` to handle these.', - ); + "Deeply-nested arrays/objects aren’t supported. Provide your own `querySerializer()` to handle these.", + ) } - return `${name}=${allowReserved ? value : encodeURIComponent(value)}`; -}; + return `${name}=${allowReserved ? value : encodeURIComponent(value)}` +} export const serializeObjectParam = ({ allowReserved, @@ -136,46 +128,40 @@ export const serializeObjectParam = ({ value, valueOnly, }: SerializeOptions & { - value: Record | Date; - valueOnly?: boolean; + value: Record | Date + valueOnly?: boolean }) => { if (value instanceof Date) { - return valueOnly ? value.toISOString() : `${name}=${value.toISOString()}`; + return valueOnly ? value.toISOString() : `${name}=${value.toISOString()}` } - if (style !== 'deepObject' && !explode) { - let values: string[] = []; + if (style !== "deepObject" && !explode) { + let values: string[] = [] Object.entries(value).forEach(([key, v]) => { - values = [ - ...values, - key, - allowReserved ? (v as string) : encodeURIComponent(v as string), - ]; - }); - const joinedValues = values.join(','); + values = [...values, key, allowReserved ? (v as string) : encodeURIComponent(v as string)] + }) + const joinedValues = values.join(",") switch (style) { - case 'form': - return `${name}=${joinedValues}`; - case 'label': - return `.${joinedValues}`; - case 'matrix': - return `;${name}=${joinedValues}`; + case "form": + return `${name}=${joinedValues}` + case "label": + return `.${joinedValues}` + case "matrix": + return `;${name}=${joinedValues}` default: - return joinedValues; + return joinedValues } } - const separator = separatorObjectExplode(style); + const separator = separatorObjectExplode(style) const joinedValues = Object.entries(value) .map(([key, v]) => serializePrimitiveParam({ allowReserved, - name: style === 'deepObject' ? `${name}[${key}]` : key, + name: style === "deepObject" ? `${name}[${key}]` : key, value: v as string, }), ) - .join(separator); - return style === 'label' || style === 'matrix' - ? separator + joinedValues - : joinedValues; -}; + .join(separator) + return style === "label" || style === "matrix" ? separator + joinedValues : joinedValues +} diff --git a/packages/sdk/js/src/v2/gen/core/queryKeySerializer.gen.ts b/packages/sdk/js/src/v2/gen/core/queryKeySerializer.gen.ts index d3bb68396e..320204aef1 100644 --- a/packages/sdk/js/src/v2/gen/core/queryKeySerializer.gen.ts +++ b/packages/sdk/js/src/v2/gen/core/queryKeySerializer.gen.ts @@ -3,134 +3,109 @@ /** * JSON-friendly union that mirrors what Pinia Colada can hash. */ -export type JsonValue = - | null - | string - | number - | boolean - | JsonValue[] - | { [key: string]: JsonValue }; +export type JsonValue = null | string | number | boolean | JsonValue[] | { [key: string]: JsonValue } /** * Replacer that converts non-JSON values (bigint, Date, etc.) to safe substitutes. */ export const queryKeyJsonReplacer = (_key: string, value: unknown) => { - if ( - value === undefined || - typeof value === 'function' || - typeof value === 'symbol' - ) { - return undefined; + if (value === undefined || typeof value === "function" || typeof value === "symbol") { + return undefined } - if (typeof value === 'bigint') { - return value.toString(); + if (typeof value === "bigint") { + return value.toString() } if (value instanceof Date) { - return value.toISOString(); + return value.toISOString() } - return value; -}; + return value +} /** * Safely stringifies a value and parses it back into a JsonValue. */ export const stringifyToJsonValue = (input: unknown): JsonValue | undefined => { try { - const json = JSON.stringify(input, queryKeyJsonReplacer); + const json = JSON.stringify(input, queryKeyJsonReplacer) if (json === undefined) { - return undefined; + return undefined } - return JSON.parse(json) as JsonValue; + return JSON.parse(json) as JsonValue } catch { - return undefined; + return undefined } -}; +} /** * Detects plain objects (including objects with a null prototype). */ const isPlainObject = (value: unknown): value is Record => { - if (value === null || typeof value !== 'object') { - return false; + if (value === null || typeof value !== "object") { + return false } - const prototype = Object.getPrototypeOf(value as object); - return prototype === Object.prototype || prototype === null; -}; + const prototype = Object.getPrototypeOf(value as object) + return prototype === Object.prototype || prototype === null +} /** * Turns URLSearchParams into a sorted JSON object for deterministic keys. */ const serializeSearchParams = (params: URLSearchParams): JsonValue => { - const entries = Array.from(params.entries()).sort(([a], [b]) => - a.localeCompare(b), - ); - const result: Record = {}; + const entries = Array.from(params.entries()).sort(([a], [b]) => a.localeCompare(b)) + const result: Record = {} for (const [key, value] of entries) { - const existing = result[key]; + const existing = result[key] if (existing === undefined) { - result[key] = value; - continue; + result[key] = value + continue } if (Array.isArray(existing)) { - (existing as string[]).push(value); + ;(existing as string[]).push(value) } else { - result[key] = [existing, value]; + result[key] = [existing, value] } } - return result; -}; + return result +} /** * Normalizes any accepted value into a JSON-friendly shape for query keys. */ -export const serializeQueryKeyValue = ( - value: unknown, -): JsonValue | undefined => { +export const serializeQueryKeyValue = (value: unknown): JsonValue | undefined => { if (value === null) { - return null; + return null } - if ( - typeof value === 'string' || - typeof value === 'number' || - typeof value === 'boolean' - ) { - return value; + if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") { + return value } - if ( - value === undefined || - typeof value === 'function' || - typeof value === 'symbol' - ) { - return undefined; + if (value === undefined || typeof value === "function" || typeof value === "symbol") { + return undefined } - if (typeof value === 'bigint') { - return value.toString(); + if (typeof value === "bigint") { + return value.toString() } if (value instanceof Date) { - return value.toISOString(); + return value.toISOString() } if (Array.isArray(value)) { - return stringifyToJsonValue(value); + return stringifyToJsonValue(value) } - if ( - typeof URLSearchParams !== 'undefined' && - value instanceof URLSearchParams - ) { - return serializeSearchParams(value); + if (typeof URLSearchParams !== "undefined" && value instanceof URLSearchParams) { + return serializeSearchParams(value) } if (isPlainObject(value)) { - return stringifyToJsonValue(value); + return stringifyToJsonValue(value) } - return undefined; -}; + return undefined +} diff --git a/packages/sdk/js/src/v2/gen/core/serverSentEvents.gen.ts b/packages/sdk/js/src/v2/gen/core/serverSentEvents.gen.ts index d73aa0f30c..09ef3fb393 100644 --- a/packages/sdk/js/src/v2/gen/core/serverSentEvents.gen.ts +++ b/packages/sdk/js/src/v2/gen/core/serverSentEvents.gen.ts @@ -1,23 +1,20 @@ // This file is auto-generated by @hey-api/openapi-ts -import type { Config } from './types.gen.js'; +import type { Config } from "./types.gen.js" -export type ServerSentEventsOptions = Omit< - RequestInit, - 'method' -> & - Pick & { +export type ServerSentEventsOptions = Omit & + Pick & { /** * Fetch API implementation. You can use this option to provide a custom * fetch instance. * * @default globalThis.fetch */ - fetch?: typeof fetch; + fetch?: typeof fetch /** * Implementing clients can call request interceptors inside this hook. */ - onRequest?: (url: string, init: RequestInit) => Promise; + onRequest?: (url: string, init: RequestInit) => Promise /** * Callback invoked when a network or parsing error occurs during streaming. * @@ -25,7 +22,7 @@ export type ServerSentEventsOptions = Omit< * * @param error The error that occurred. */ - onSseError?: (error: unknown) => void; + onSseError?: (error: unknown) => void /** * Callback invoked when an event is streamed from the server. * @@ -34,8 +31,8 @@ export type ServerSentEventsOptions = Omit< * @param event Event streamed from the server. * @returns Nothing (void). */ - onSseEvent?: (event: StreamEvent) => void; - serializedBody?: RequestInit['body']; + onSseEvent?: (event: StreamEvent) => void + serializedBody?: RequestInit["body"] /** * Default retry delay in milliseconds. * @@ -43,11 +40,11 @@ export type ServerSentEventsOptions = Omit< * * @default 3000 */ - sseDefaultRetryDelay?: number; + sseDefaultRetryDelay?: number /** * Maximum number of retry attempts before giving up. */ - sseMaxRetryAttempts?: number; + sseMaxRetryAttempts?: number /** * Maximum retry delay in milliseconds. * @@ -57,34 +54,26 @@ export type ServerSentEventsOptions = Omit< * * @default 30000 */ - sseMaxRetryDelay?: number; + sseMaxRetryDelay?: number /** * Optional sleep function for retry backoff. * * Defaults to using `setTimeout`. */ - sseSleepFn?: (ms: number) => Promise; - url: string; - }; + sseSleepFn?: (ms: number) => Promise + url: string + } export interface StreamEvent { - data: TData; - event?: string; - id?: string; - retry?: number; + data: TData + event?: string + id?: string + retry?: number } -export type ServerSentEventsResult< - TData = unknown, - TReturn = void, - TNext = unknown, -> = { - stream: AsyncGenerator< - TData extends Record ? TData[keyof TData] : TData, - TReturn, - TNext - >; -}; +export type ServerSentEventsResult = { + stream: AsyncGenerator ? TData[keyof TData] : TData, TReturn, TNext> +} export const createSseClient = ({ onRequest, @@ -99,123 +88,113 @@ export const createSseClient = ({ url, ...options }: ServerSentEventsOptions): ServerSentEventsResult => { - let lastEventId: string | undefined; + let lastEventId: string | undefined - const sleep = - sseSleepFn ?? - ((ms: number) => new Promise((resolve) => setTimeout(resolve, ms))); + const sleep = sseSleepFn ?? ((ms: number) => new Promise((resolve) => setTimeout(resolve, ms))) const createStream = async function* () { - let retryDelay: number = sseDefaultRetryDelay ?? 3000; - let attempt = 0; - const signal = options.signal ?? new AbortController().signal; + let retryDelay: number = sseDefaultRetryDelay ?? 3000 + let attempt = 0 + const signal = options.signal ?? new AbortController().signal while (true) { - if (signal.aborted) break; + if (signal.aborted) break - attempt++; + attempt++ const headers = options.headers instanceof Headers ? options.headers - : new Headers(options.headers as Record | undefined); + : new Headers(options.headers as Record | undefined) if (lastEventId !== undefined) { - headers.set('Last-Event-ID', lastEventId); + headers.set("Last-Event-ID", lastEventId) } try { const requestInit: RequestInit = { - redirect: 'follow', + redirect: "follow", ...options, body: options.serializedBody, headers, signal, - }; - let request = new Request(url, requestInit); + } + let request = new Request(url, requestInit) if (onRequest) { - request = await onRequest(url, requestInit); + request = await onRequest(url, requestInit) } // fetch must be assigned here, otherwise it would throw the error: // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation - const _fetch = options.fetch ?? globalThis.fetch; - const response = await _fetch(request); + const _fetch = options.fetch ?? globalThis.fetch + const response = await _fetch(request) - if (!response.ok) - throw new Error( - `SSE failed: ${response.status} ${response.statusText}`, - ); + if (!response.ok) throw new Error(`SSE failed: ${response.status} ${response.statusText}`) - if (!response.body) throw new Error('No body in SSE response'); + if (!response.body) throw new Error("No body in SSE response") - const reader = response.body - .pipeThrough(new TextDecoderStream()) - .getReader(); + const reader = response.body.pipeThrough(new TextDecoderStream()).getReader() - let buffer = ''; + let buffer = "" const abortHandler = () => { try { - reader.cancel(); + reader.cancel() } catch { // noop } - }; + } - signal.addEventListener('abort', abortHandler); + signal.addEventListener("abort", abortHandler) try { while (true) { - const { done, value } = await reader.read(); - if (done) break; - buffer += value; + const { done, value } = await reader.read() + if (done) break + buffer += value - const chunks = buffer.split('\n\n'); - buffer = chunks.pop() ?? ''; + const chunks = buffer.split("\n\n") + buffer = chunks.pop() ?? "" for (const chunk of chunks) { - const lines = chunk.split('\n'); - const dataLines: Array = []; - let eventName: string | undefined; + const lines = chunk.split("\n") + const dataLines: Array = [] + let eventName: string | undefined for (const line of lines) { - if (line.startsWith('data:')) { - dataLines.push(line.replace(/^data:\s*/, '')); - } else if (line.startsWith('event:')) { - eventName = line.replace(/^event:\s*/, ''); - } else if (line.startsWith('id:')) { - lastEventId = line.replace(/^id:\s*/, ''); - } else if (line.startsWith('retry:')) { - const parsed = Number.parseInt( - line.replace(/^retry:\s*/, ''), - 10, - ); + if (line.startsWith("data:")) { + dataLines.push(line.replace(/^data:\s*/, "")) + } else if (line.startsWith("event:")) { + eventName = line.replace(/^event:\s*/, "") + } else if (line.startsWith("id:")) { + lastEventId = line.replace(/^id:\s*/, "") + } else if (line.startsWith("retry:")) { + const parsed = Number.parseInt(line.replace(/^retry:\s*/, ""), 10) if (!Number.isNaN(parsed)) { - retryDelay = parsed; + retryDelay = parsed } } } - let data: unknown; - let parsedJson = false; + let data: unknown + let parsedJson = false if (dataLines.length) { - const rawData = dataLines.join('\n'); + const rawData = dataLines.join("\n") try { - data = JSON.parse(rawData); - parsedJson = true; + data = JSON.parse(rawData) + parsedJson = true } catch { - data = rawData; + data = rawData } } if (parsedJson) { if (responseValidator) { - await responseValidator(data); + await responseValidator(data) } if (responseTransformer) { - data = await responseTransformer(data); + data = await responseTransformer(data) } } @@ -224,41 +203,35 @@ export const createSseClient = ({ event: eventName, id: lastEventId, retry: retryDelay, - }); + }) if (dataLines.length) { - yield data as any; + yield data as any } } } } finally { - signal.removeEventListener('abort', abortHandler); - reader.releaseLock(); + signal.removeEventListener("abort", abortHandler) + reader.releaseLock() } - break; // exit loop on normal completion + break // exit loop on normal completion } catch (error) { // connection failed or aborted; retry after delay - onSseError?.(error); + onSseError?.(error) - if ( - sseMaxRetryAttempts !== undefined && - attempt >= sseMaxRetryAttempts - ) { - break; // stop after firing error + if (sseMaxRetryAttempts !== undefined && attempt >= sseMaxRetryAttempts) { + break // stop after firing error } // exponential backoff: double retry each attempt, cap at 30s - const backoff = Math.min( - retryDelay * 2 ** (attempt - 1), - sseMaxRetryDelay ?? 30000, - ); - await sleep(backoff); + const backoff = Math.min(retryDelay * 2 ** (attempt - 1), sseMaxRetryDelay ?? 30000) + await sleep(backoff) } } - }; + } - const stream = createStream(); + const stream = createStream() - return { stream }; -}; + return { stream } +} diff --git a/packages/sdk/js/src/v2/gen/core/types.gen.ts b/packages/sdk/js/src/v2/gen/core/types.gen.ts index cc8a9e60fa..bfa77b8acd 100644 --- a/packages/sdk/js/src/v2/gen/core/types.gen.ts +++ b/packages/sdk/js/src/v2/gen/core/types.gen.ts @@ -1,54 +1,33 @@ // This file is auto-generated by @hey-api/openapi-ts -import type { Auth, AuthToken } from './auth.gen.js'; -import type { - BodySerializer, - QuerySerializer, - QuerySerializerOptions, -} from './bodySerializer.gen.js'; +import type { Auth, AuthToken } from "./auth.gen.js" +import type { BodySerializer, QuerySerializer, QuerySerializerOptions } from "./bodySerializer.gen.js" -export type HttpMethod = - | 'connect' - | 'delete' - | 'get' - | 'head' - | 'options' - | 'patch' - | 'post' - | 'put' - | 'trace'; +export type HttpMethod = "connect" | "delete" | "get" | "head" | "options" | "patch" | "post" | "put" | "trace" -export type Client< - RequestFn = never, - Config = unknown, - MethodFn = never, - BuildUrlFn = never, - SseFn = never, -> = { +export type Client = { /** * Returns the final request URL. */ - buildUrl: BuildUrlFn; - getConfig: () => Config; - request: RequestFn; - setConfig: (config: Config) => Config; + buildUrl: BuildUrlFn + getConfig: () => Config + request: RequestFn + setConfig: (config: Config) => Config } & { - [K in HttpMethod]: MethodFn; -} & ([SseFn] extends [never] - ? { sse?: never } - : { sse: { [K in HttpMethod]: SseFn } }); + [K in HttpMethod]: MethodFn +} & ([SseFn] extends [never] ? { sse?: never } : { sse: { [K in HttpMethod]: SseFn } }) export interface Config { /** * Auth token or a function returning auth token. The resolved value will be * added to the request payload as defined by its `security` array. */ - auth?: ((auth: Auth) => Promise | AuthToken) | AuthToken; + auth?: ((auth: Auth) => Promise | AuthToken) | AuthToken /** * A function for serializing request body parameter. By default, * {@link JSON.stringify()} will be used. */ - bodySerializer?: BodySerializer | null; + bodySerializer?: BodySerializer | null /** * An object containing any HTTP headers that you want to pre-populate your * `Headers` object with. @@ -56,23 +35,14 @@ export interface Config { * {@link https://developer.mozilla.org/docs/Web/API/Headers/Headers#init See more} */ headers?: - | RequestInit['headers'] - | Record< - string, - | string - | number - | boolean - | (string | number | boolean)[] - | null - | undefined - | unknown - >; + | RequestInit["headers"] + | Record /** * The request method. * * {@link https://developer.mozilla.org/docs/Web/API/fetch#method See more} */ - method?: Uppercase; + method?: Uppercase /** * A function for serializing request query parameters. By default, arrays * will be exploded in form style, objects will be exploded in deepObject @@ -83,24 +53,24 @@ export interface Config { * * {@link https://swagger.io/docs/specification/serialization/#query View examples} */ - querySerializer?: QuerySerializer | QuerySerializerOptions; + querySerializer?: QuerySerializer | QuerySerializerOptions /** * A function validating request data. This is useful if you want to ensure * the request conforms to the desired shape, so it can be safely sent to * the server. */ - requestValidator?: (data: unknown) => Promise; + requestValidator?: (data: unknown) => Promise /** * A function transforming response data before it's returned. This is useful * for post-processing data, e.g. converting ISO strings into Date objects. */ - responseTransformer?: (data: unknown) => Promise; + responseTransformer?: (data: unknown) => Promise /** * A function validating response data. This is useful if you want to ensure * the response conforms to the desired shape, so it can be safely passed to * the transformers and returned to the user. */ - responseValidator?: (data: unknown) => Promise; + responseValidator?: (data: unknown) => Promise } type IsExactlyNeverOrNeverUndefined = [T] extends [never] @@ -109,10 +79,8 @@ type IsExactlyNeverOrNeverUndefined = [T] extends [never] ? [undefined] extends [T] ? false : true - : false; + : false export type OmitNever> = { - [K in keyof T as IsExactlyNeverOrNeverUndefined extends true - ? never - : K]: T[K]; -}; + [K in keyof T as IsExactlyNeverOrNeverUndefined extends true ? never : K]: T[K] +} diff --git a/packages/sdk/js/src/v2/gen/core/utils.gen.ts b/packages/sdk/js/src/v2/gen/core/utils.gen.ts index 3029f7b3cc..8a45f72698 100644 --- a/packages/sdk/js/src/v2/gen/core/utils.gen.ts +++ b/packages/sdk/js/src/v2/gen/core/utils.gen.ts @@ -1,57 +1,54 @@ // This file is auto-generated by @hey-api/openapi-ts -import type { BodySerializer, QuerySerializer } from './bodySerializer.gen.js'; +import type { BodySerializer, QuerySerializer } from "./bodySerializer.gen.js" import { type ArraySeparatorStyle, serializeArrayParam, serializeObjectParam, serializePrimitiveParam, -} from './pathSerializer.gen.js'; +} from "./pathSerializer.gen.js" export interface PathSerializer { - path: Record; - url: string; + path: Record + url: string } -export const PATH_PARAM_RE = /\{[^{}]+\}/g; +export const PATH_PARAM_RE = /\{[^{}]+\}/g export const defaultPathSerializer = ({ path, url: _url }: PathSerializer) => { - let url = _url; - const matches = _url.match(PATH_PARAM_RE); + let url = _url + const matches = _url.match(PATH_PARAM_RE) if (matches) { for (const match of matches) { - let explode = false; - let name = match.substring(1, match.length - 1); - let style: ArraySeparatorStyle = 'simple'; + let explode = false + let name = match.substring(1, match.length - 1) + let style: ArraySeparatorStyle = "simple" - if (name.endsWith('*')) { - explode = true; - name = name.substring(0, name.length - 1); + if (name.endsWith("*")) { + explode = true + name = name.substring(0, name.length - 1) } - if (name.startsWith('.')) { - name = name.substring(1); - style = 'label'; - } else if (name.startsWith(';')) { - name = name.substring(1); - style = 'matrix'; + if (name.startsWith(".")) { + name = name.substring(1) + style = "label" + } else if (name.startsWith(";")) { + name = name.substring(1) + style = "matrix" } - const value = path[name]; + const value = path[name] if (value === undefined || value === null) { - continue; + continue } if (Array.isArray(value)) { - url = url.replace( - match, - serializeArrayParam({ explode, name, style, value }), - ); - continue; + url = url.replace(match, serializeArrayParam({ explode, name, style, value })) + continue } - if (typeof value === 'object') { + if (typeof value === "object") { url = url.replace( match, serializeObjectParam({ @@ -61,29 +58,27 @@ export const defaultPathSerializer = ({ path, url: _url }: PathSerializer) => { value: value as Record, valueOnly: true, }), - ); - continue; + ) + continue } - if (style === 'matrix') { + if (style === "matrix") { url = url.replace( match, `;${serializePrimitiveParam({ name, value: value as string, })}`, - ); - continue; + ) + continue } - const replaceValue = encodeURIComponent( - style === 'label' ? `.${value as string}` : (value as string), - ); - url = url.replace(match, replaceValue); + const replaceValue = encodeURIComponent(style === "label" ? `.${value as string}` : (value as string)) + url = url.replace(match, replaceValue) } } - return url; -}; + return url +} export const getUrl = ({ baseUrl, @@ -92,52 +87,51 @@ export const getUrl = ({ querySerializer, url: _url, }: { - baseUrl?: string; - path?: Record; - query?: Record; - querySerializer: QuerySerializer; - url: string; + baseUrl?: string + path?: Record + query?: Record + querySerializer: QuerySerializer + url: string }) => { - const pathUrl = _url.startsWith('/') ? _url : `/${_url}`; - let url = (baseUrl ?? '') + pathUrl; + const pathUrl = _url.startsWith("/") ? _url : `/${_url}` + let url = (baseUrl ?? "") + pathUrl if (path) { - url = defaultPathSerializer({ path, url }); + url = defaultPathSerializer({ path, url }) } - let search = query ? querySerializer(query) : ''; - if (search.startsWith('?')) { - search = search.substring(1); + let search = query ? querySerializer(query) : "" + if (search.startsWith("?")) { + search = search.substring(1) } if (search) { - url += `?${search}`; + url += `?${search}` } - return url; -}; + return url +} export function getValidRequestBody(options: { - body?: unknown; - bodySerializer?: BodySerializer | null; - serializedBody?: unknown; + body?: unknown + bodySerializer?: BodySerializer | null + serializedBody?: unknown }) { - const hasBody = options.body !== undefined; - const isSerializedBody = hasBody && options.bodySerializer; + const hasBody = options.body !== undefined + const isSerializedBody = hasBody && options.bodySerializer if (isSerializedBody) { - if ('serializedBody' in options) { - const hasSerializedBody = - options.serializedBody !== undefined && options.serializedBody !== ''; + if ("serializedBody" in options) { + const hasSerializedBody = options.serializedBody !== undefined && options.serializedBody !== "" - return hasSerializedBody ? options.serializedBody : null; + return hasSerializedBody ? options.serializedBody : null } // not all clients implement a serializedBody property (i.e. client-axios) - return options.body !== '' ? options.body : null; + return options.body !== "" ? options.body : null } // plain/text body if (hasBody) { - return options.body; + return options.body } // no body was provided - return undefined; + return undefined } diff --git a/packages/sdk/js/src/v2/gen/sdk.gen.ts b/packages/sdk/js/src/v2/gen/sdk.gen.ts index 997f990b54..caf6c9d00b 100644 --- a/packages/sdk/js/src/v2/gen/sdk.gen.ts +++ b/packages/sdk/js/src/v2/gen/sdk.gen.ts @@ -1,1592 +1,2343 @@ // This file is auto-generated by @hey-api/openapi-ts -import { client } from './client.gen.js'; -import { buildClientParams, type Client, type Options as Options2, type TDataShape } from './client/index.js'; -import type { AgentPartInput, AppAgentsResponses, AppLogErrors, AppLogResponses, Auth as Auth2, AuthSetErrors, AuthSetResponses, CommandListResponses, Config as Config2, ConfigGetResponses, ConfigProvidersResponses, ConfigUpdateErrors, ConfigUpdateResponses, EventSubscribeResponses, EventTuiCommandExecute, EventTuiPromptAppend, EventTuiToastShow, FileListResponses, FilePartInput, FileReadResponses, FileStatusResponses, FindFilesResponses, FindSymbolsResponses, FindTextResponses, FormatterStatusResponses, GlobalEventResponses, InstanceDisposeResponses, LspStatusResponses, McpAddErrors, McpAddResponses, McpAuthAuthenticateErrors, McpAuthAuthenticateResponses, McpAuthCallbackErrors, McpAuthCallbackResponses, McpAuthRemoveErrors, McpAuthRemoveResponses, McpAuthStartErrors, McpAuthStartResponses, McpLocalConfig, McpRemoteConfig, McpStatusResponses, PathGetResponses, PermissionRespondErrors, PermissionRespondResponses, ProjectCurrentResponses, ProjectListResponses, ProviderAuthResponses, ProviderListResponses, ProviderOauthAuthorizeErrors, ProviderOauthAuthorizeResponses, ProviderOauthCallbackErrors, ProviderOauthCallbackResponses, PtyConnectErrors, PtyConnectResponses, PtyCreateErrors, PtyCreateResponses, PtyGetErrors, PtyGetResponses, PtyListResponses, PtyRemoveErrors, PtyRemoveResponses, PtyUpdateErrors, PtyUpdateResponses, SessionAbortErrors, SessionAbortResponses, SessionChildrenErrors, SessionChildrenResponses, SessionCommandErrors, SessionCommandResponses, SessionCreateErrors, SessionCreateResponses, SessionDeleteErrors, SessionDeleteResponses, SessionDiffErrors, SessionDiffResponses, SessionForkResponses, SessionGetErrors, SessionGetResponses, SessionInitErrors, SessionInitResponses, SessionListResponses, SessionMessageErrors, SessionMessageResponses, SessionMessagesErrors, SessionMessagesResponses, SessionPromptAsyncErrors, SessionPromptAsyncResponses, SessionPromptErrors, SessionPromptResponses, SessionRevertErrors, SessionRevertResponses, SessionShareErrors, SessionShareResponses, SessionShellErrors, SessionShellResponses, SessionStatusErrors, SessionStatusResponses, SessionSummarizeErrors, SessionSummarizeResponses, SessionTodoErrors, SessionTodoResponses, SessionUnrevertErrors, SessionUnrevertResponses, SessionUnshareErrors, SessionUnshareResponses, SessionUpdateErrors, SessionUpdateResponses, SubtaskPartInput, TextPartInput, ToolIdsErrors, ToolIdsResponses, ToolListErrors, ToolListResponses, TuiAppendPromptErrors, TuiAppendPromptResponses, TuiClearPromptResponses, TuiControlNextResponses, TuiControlResponseResponses, TuiExecuteCommandErrors, TuiExecuteCommandResponses, TuiOpenHelpResponses, TuiOpenModelsResponses, TuiOpenSessionsResponses, TuiOpenThemesResponses, TuiPublishErrors, TuiPublishResponses, TuiShowToastResponses, TuiSubmitPromptResponses, VcsGetResponses } from './types.gen.js'; +import { client } from "./client.gen.js" +import { buildClientParams, type Client, type Options as Options2, type TDataShape } from "./client/index.js" +import type { + AgentPartInput, + AppAgentsResponses, + AppLogErrors, + AppLogResponses, + Auth as Auth2, + AuthSetErrors, + AuthSetResponses, + CommandListResponses, + Config as Config2, + ConfigGetResponses, + ConfigProvidersResponses, + ConfigUpdateErrors, + ConfigUpdateResponses, + EventSubscribeResponses, + EventTuiCommandExecute, + EventTuiPromptAppend, + EventTuiToastShow, + FileListResponses, + FilePartInput, + FileReadResponses, + FileStatusResponses, + FindFilesResponses, + FindSymbolsResponses, + FindTextResponses, + FormatterStatusResponses, + GlobalEventResponses, + InstanceDisposeResponses, + LspStatusResponses, + McpAddErrors, + McpAddResponses, + McpAuthAuthenticateErrors, + McpAuthAuthenticateResponses, + McpAuthCallbackErrors, + McpAuthCallbackResponses, + McpAuthRemoveErrors, + McpAuthRemoveResponses, + McpAuthStartErrors, + McpAuthStartResponses, + McpLocalConfig, + McpRemoteConfig, + McpStatusResponses, + PathGetResponses, + PermissionRespondErrors, + PermissionRespondResponses, + ProjectCurrentResponses, + ProjectListResponses, + ProviderAuthResponses, + ProviderListResponses, + ProviderOauthAuthorizeErrors, + ProviderOauthAuthorizeResponses, + ProviderOauthCallbackErrors, + ProviderOauthCallbackResponses, + PtyConnectErrors, + PtyConnectResponses, + PtyCreateErrors, + PtyCreateResponses, + PtyGetErrors, + PtyGetResponses, + PtyListResponses, + PtyRemoveErrors, + PtyRemoveResponses, + PtyUpdateErrors, + PtyUpdateResponses, + SessionAbortErrors, + SessionAbortResponses, + SessionChildrenErrors, + SessionChildrenResponses, + SessionCommandErrors, + SessionCommandResponses, + SessionCreateErrors, + SessionCreateResponses, + SessionDeleteErrors, + SessionDeleteResponses, + SessionDiffErrors, + SessionDiffResponses, + SessionForkResponses, + SessionGetErrors, + SessionGetResponses, + SessionInitErrors, + SessionInitResponses, + SessionListResponses, + SessionMessageErrors, + SessionMessageResponses, + SessionMessagesErrors, + SessionMessagesResponses, + SessionPromptAsyncErrors, + SessionPromptAsyncResponses, + SessionPromptErrors, + SessionPromptResponses, + SessionRevertErrors, + SessionRevertResponses, + SessionShareErrors, + SessionShareResponses, + SessionShellErrors, + SessionShellResponses, + SessionStatusErrors, + SessionStatusResponses, + SessionSummarizeErrors, + SessionSummarizeResponses, + SessionTodoErrors, + SessionTodoResponses, + SessionUnrevertErrors, + SessionUnrevertResponses, + SessionUnshareErrors, + SessionUnshareResponses, + SessionUpdateErrors, + SessionUpdateResponses, + SubtaskPartInput, + TextPartInput, + ToolIdsErrors, + ToolIdsResponses, + ToolListErrors, + ToolListResponses, + TuiAppendPromptErrors, + TuiAppendPromptResponses, + TuiClearPromptResponses, + TuiControlNextResponses, + TuiControlResponseResponses, + TuiExecuteCommandErrors, + TuiExecuteCommandResponses, + TuiOpenHelpResponses, + TuiOpenModelsResponses, + TuiOpenSessionsResponses, + TuiOpenThemesResponses, + TuiPublishErrors, + TuiPublishResponses, + TuiShowToastResponses, + TuiSubmitPromptResponses, + VcsGetResponses, +} from "./types.gen.js" -export type Options = Options2 & { - /** - * You can provide a client instance returned by `createClient()` instead of - * individual options. This might be also useful if you want to implement a - * custom client. - */ - client?: Client; - /** - * You can pass arbitrary values through the `meta` object. This can be - * used to access values that aren't defined as part of the SDK function. - */ - meta?: Record; -}; +export type Options = Options2< + TData, + ThrowOnError +> & { + /** + * You can provide a client instance returned by `createClient()` instead of + * individual options. This might be also useful if you want to implement a + * custom client. + */ + client?: Client + /** + * You can pass arbitrary values through the `meta` object. This can be + * used to access values that aren't defined as part of the SDK function. + */ + meta?: Record +} class HeyApiClient { - protected client: Client; - - constructor(args?: { - client?: Client; - }) { - this.client = args?.client ?? client; - } + protected client: Client + + constructor(args?: { client?: Client }) { + this.client = args?.client ?? client + } } class HeyApiRegistry { - private readonly defaultKey = 'default'; - - private readonly instances: Map = new Map(); - - get(key?: string): T { - const instance = this.instances.get(key ?? this.defaultKey); - if (!instance) { - throw new Error(`No SDK client found. Create one with "new OpencodeClient()" to fix this error.`); - } - return instance; - } - - set(value: T, key?: string): void { - this.instances.set(key ?? this.defaultKey, value); + private readonly defaultKey = "default" + + private readonly instances: Map = new Map() + + get(key?: string): T { + const instance = this.instances.get(key ?? this.defaultKey) + if (!instance) { + throw new Error(`No SDK client found. Create one with "new OpencodeClient()" to fix this error.`) } + return instance + } + + set(value: T, key?: string): void { + this.instances.set(key ?? this.defaultKey, value) + } } export class Global extends HeyApiClient { - /** - * Get events - */ - public event(options?: Options) { - return (options?.client ?? this.client).sse.get({ url: '/global/event', ...options }); - } + /** + * Get events + */ + public event(options?: Options) { + return (options?.client ?? this.client).sse.get({ + url: "/global/event", + ...options, + }) + } } export class Project extends HeyApiClient { - /** - * List all projects - */ - public list(parameters?: { - directory?: string; - }, options?: Options) { - const params = buildClientParams([parameters], [{ args: [{ in: 'query', key: 'directory' }] }]); - return (options?.client ?? this.client).get({ - url: '/project', - ...options, - ...params - }); - } - - /** - * Get the current project - */ - public current(parameters?: { - directory?: string; - }, options?: Options) { - const params = buildClientParams([parameters], [{ args: [{ in: 'query', key: 'directory' }] }]); - return (options?.client ?? this.client).get({ - url: '/project/current', - ...options, - ...params - }); - } + /** + * List all projects + */ + public list( + parameters?: { + directory?: string + }, + options?: Options, + ) { + const params = buildClientParams([parameters], [{ args: [{ in: "query", key: "directory" }] }]) + return (options?.client ?? this.client).get({ + url: "/project", + ...options, + ...params, + }) + } + + /** + * Get the current project + */ + public current( + parameters?: { + directory?: string + }, + options?: Options, + ) { + const params = buildClientParams([parameters], [{ args: [{ in: "query", key: "directory" }] }]) + return (options?.client ?? this.client).get({ + url: "/project/current", + ...options, + ...params, + }) + } } export class Pty extends HeyApiClient { - /** - * List all PTY sessions - */ - public list(parameters?: { - directory?: string; - }, options?: Options) { - const params = buildClientParams([parameters], [{ args: [{ in: 'query', key: 'directory' }] }]); - return (options?.client ?? this.client).get({ - url: '/pty', - ...options, - ...params - }); - } - - /** - * Create a new PTY session - */ - public create(parameters?: { - directory?: string; - command?: string; - args?: Array; - cwd?: string; - title?: string; - env?: { - [key: string]: string; - }; - }, options?: Options) { - const params = buildClientParams([parameters], [{ args: [ - { in: 'query', key: 'directory' }, - { 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({ - url: '/pty', - ...options, - ...params, - headers: { - 'Content-Type': 'application/json', - ...options?.headers, - ...params.headers - } - }); - } - - /** - * Remove a PTY session - */ - public remove(parameters: { - ptyID: string; - directory?: string; - }, options?: Options) { - const params = buildClientParams([parameters], [{ args: [{ in: 'path', key: 'ptyID' }, { in: 'query', key: 'directory' }] }]); - return (options?.client ?? this.client).delete({ - url: '/pty/{ptyID}', - ...options, - ...params - }); - } - - /** - * Get PTY session info - */ - public get(parameters: { - ptyID: string; - directory?: string; - }, options?: Options) { - const params = buildClientParams([parameters], [{ args: [{ in: 'path', key: 'ptyID' }, { in: 'query', key: 'directory' }] }]); - return (options?.client ?? this.client).get({ - url: '/pty/{ptyID}', - ...options, - ...params - }); - } - - /** - * Update PTY session - */ - public update(parameters: { - ptyID: string; - directory?: string; - title?: string; - size?: { - rows: number; - cols: number; - }; - }, options?: Options) { - const params = buildClientParams([parameters], [{ args: [ - { in: 'path', key: 'ptyID' }, - { in: 'query', key: 'directory' }, - { in: 'body', key: 'title' }, - { in: 'body', key: 'size' } - ] }]); - return (options?.client ?? this.client).put({ - url: '/pty/{ptyID}', - ...options, - ...params, - headers: { - 'Content-Type': 'application/json', - ...options?.headers, - ...params.headers - } - }); - } - - /** - * Connect to a PTY session - */ - public connect(parameters: { - ptyID: string; - directory?: string; - }, options?: Options) { - const params = buildClientParams([parameters], [{ args: [{ in: 'path', key: 'ptyID' }, { in: 'query', key: 'directory' }] }]); - return (options?.client ?? this.client).get({ - url: '/pty/{ptyID}/connect', - ...options, - ...params - }); - } + /** + * List all PTY sessions + */ + public list( + parameters?: { + directory?: string + }, + options?: Options, + ) { + const params = buildClientParams([parameters], [{ args: [{ in: "query", key: "directory" }] }]) + return (options?.client ?? this.client).get({ + url: "/pty", + ...options, + ...params, + }) + } + + /** + * Create a new PTY session + */ + public create( + parameters?: { + directory?: string + command?: string + args?: Array + cwd?: string + title?: string + env?: { + [key: string]: string + } + }, + options?: Options, + ) { + const params = buildClientParams( + [parameters], + [ + { + args: [ + { in: "query", key: "directory" }, + { 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({ + url: "/pty", + ...options, + ...params, + headers: { + "Content-Type": "application/json", + ...options?.headers, + ...params.headers, + }, + }) + } + + /** + * Remove a PTY session + */ + public remove( + parameters: { + ptyID: string + directory?: string + }, + options?: Options, + ) { + const params = buildClientParams( + [parameters], + [ + { + args: [ + { in: "path", key: "ptyID" }, + { in: "query", key: "directory" }, + ], + }, + ], + ) + return (options?.client ?? this.client).delete({ + url: "/pty/{ptyID}", + ...options, + ...params, + }) + } + + /** + * Get PTY session info + */ + public get( + parameters: { + ptyID: string + directory?: string + }, + options?: Options, + ) { + const params = buildClientParams( + [parameters], + [ + { + args: [ + { in: "path", key: "ptyID" }, + { in: "query", key: "directory" }, + ], + }, + ], + ) + return (options?.client ?? this.client).get({ + url: "/pty/{ptyID}", + ...options, + ...params, + }) + } + + /** + * Update PTY session + */ + public update( + parameters: { + ptyID: string + directory?: string + title?: string + size?: { + rows: number + cols: number + } + }, + options?: Options, + ) { + const params = buildClientParams( + [parameters], + [ + { + args: [ + { in: "path", key: "ptyID" }, + { in: "query", key: "directory" }, + { in: "body", key: "title" }, + { in: "body", key: "size" }, + ], + }, + ], + ) + return (options?.client ?? this.client).put({ + url: "/pty/{ptyID}", + ...options, + ...params, + headers: { + "Content-Type": "application/json", + ...options?.headers, + ...params.headers, + }, + }) + } + + /** + * Connect to a PTY session + */ + public connect( + parameters: { + ptyID: string + directory?: string + }, + options?: Options, + ) { + const params = buildClientParams( + [parameters], + [ + { + args: [ + { in: "path", key: "ptyID" }, + { in: "query", key: "directory" }, + ], + }, + ], + ) + return (options?.client ?? this.client).get({ + url: "/pty/{ptyID}/connect", + ...options, + ...params, + }) + } } export class Config extends HeyApiClient { - /** - * Get config info - */ - public get(parameters?: { - directory?: string; - }, options?: Options) { - const params = buildClientParams([parameters], [{ args: [{ in: 'query', key: 'directory' }] }]); - return (options?.client ?? this.client).get({ - url: '/config', - ...options, - ...params - }); - } - - /** - * Update config - */ - public update(parameters?: { - directory?: string; - config?: Config2; - }, options?: Options) { - const params = buildClientParams([parameters], [{ args: [{ in: 'query', key: 'directory' }, { key: 'config', map: 'body' }] }]); - return (options?.client ?? this.client).patch({ - url: '/config', - ...options, - ...params, - headers: { - 'Content-Type': 'application/json', - ...options?.headers, - ...params.headers - } - }); - } - - /** - * List all providers - */ - public providers(parameters?: { - directory?: string; - }, options?: Options) { - const params = buildClientParams([parameters], [{ args: [{ in: 'query', key: 'directory' }] }]); - return (options?.client ?? this.client).get({ - url: '/config/providers', - ...options, - ...params - }); - } + /** + * Get config info + */ + public get( + parameters?: { + directory?: string + }, + options?: Options, + ) { + const params = buildClientParams([parameters], [{ args: [{ in: "query", key: "directory" }] }]) + return (options?.client ?? this.client).get({ + url: "/config", + ...options, + ...params, + }) + } + + /** + * Update config + */ + public update( + parameters?: { + directory?: string + config?: Config2 + }, + options?: Options, + ) { + const params = buildClientParams( + [parameters], + [ + { + args: [ + { in: "query", key: "directory" }, + { key: "config", map: "body" }, + ], + }, + ], + ) + return (options?.client ?? this.client).patch({ + url: "/config", + ...options, + ...params, + headers: { + "Content-Type": "application/json", + ...options?.headers, + ...params.headers, + }, + }) + } + + /** + * List all providers + */ + public providers( + parameters?: { + directory?: string + }, + options?: Options, + ) { + const params = buildClientParams([parameters], [{ args: [{ in: "query", key: "directory" }] }]) + return (options?.client ?? this.client).get({ + url: "/config/providers", + ...options, + ...params, + }) + } } export class Tool extends HeyApiClient { - /** - * List all tool IDs (including built-in and dynamically registered) - */ - public ids(parameters?: { - directory?: string; - }, options?: Options) { - const params = buildClientParams([parameters], [{ args: [{ in: 'query', key: 'directory' }] }]); - return (options?.client ?? this.client).get({ - url: '/experimental/tool/ids', - ...options, - ...params - }); - } - - /** - * List tools with JSON schema parameters for a provider/model - */ - public list(parameters: { - directory?: string; - provider: string; - model: string; - }, options?: Options) { - const params = buildClientParams([parameters], [{ args: [ - { in: 'query', key: 'directory' }, - { in: 'query', key: 'provider' }, - { in: 'query', key: 'model' } - ] }]); - return (options?.client ?? this.client).get({ - url: '/experimental/tool', - ...options, - ...params - }); - } + /** + * List all tool IDs (including built-in and dynamically registered) + */ + public ids( + parameters?: { + directory?: string + }, + options?: Options, + ) { + const params = buildClientParams([parameters], [{ args: [{ in: "query", key: "directory" }] }]) + return (options?.client ?? this.client).get({ + url: "/experimental/tool/ids", + ...options, + ...params, + }) + } + + /** + * List tools with JSON schema parameters for a provider/model + */ + public list( + parameters: { + directory?: string + provider: string + model: string + }, + options?: Options, + ) { + const params = buildClientParams( + [parameters], + [ + { + args: [ + { in: "query", key: "directory" }, + { in: "query", key: "provider" }, + { in: "query", key: "model" }, + ], + }, + ], + ) + return (options?.client ?? this.client).get({ + url: "/experimental/tool", + ...options, + ...params, + }) + } } export class Instance extends HeyApiClient { - /** - * Dispose the current instance - */ - public dispose(parameters?: { - directory?: string; - }, options?: Options) { - const params = buildClientParams([parameters], [{ args: [{ in: 'query', key: 'directory' }] }]); - return (options?.client ?? this.client).post({ - url: '/instance/dispose', - ...options, - ...params - }); - } + /** + * Dispose the current instance + */ + public dispose( + parameters?: { + directory?: string + }, + options?: Options, + ) { + const params = buildClientParams([parameters], [{ args: [{ in: "query", key: "directory" }] }]) + return (options?.client ?? this.client).post({ + url: "/instance/dispose", + ...options, + ...params, + }) + } } export class Path extends HeyApiClient { - /** - * Get the current path - */ - public get(parameters?: { - directory?: string; - }, options?: Options) { - const params = buildClientParams([parameters], [{ args: [{ in: 'query', key: 'directory' }] }]); - return (options?.client ?? this.client).get({ - url: '/path', - ...options, - ...params - }); - } + /** + * Get the current path + */ + public get( + parameters?: { + directory?: string + }, + options?: Options, + ) { + const params = buildClientParams([parameters], [{ args: [{ in: "query", key: "directory" }] }]) + return (options?.client ?? this.client).get({ + url: "/path", + ...options, + ...params, + }) + } } export class Vcs extends HeyApiClient { - /** - * Get VCS info for the current instance - */ - public get(parameters?: { - directory?: string; - }, options?: Options) { - const params = buildClientParams([parameters], [{ args: [{ in: 'query', key: 'directory' }] }]); - return (options?.client ?? this.client).get({ - url: '/vcs', - ...options, - ...params - }); - } + /** + * Get VCS info for the current instance + */ + public get( + parameters?: { + directory?: string + }, + options?: Options, + ) { + const params = buildClientParams([parameters], [{ args: [{ in: "query", key: "directory" }] }]) + return (options?.client ?? this.client).get({ + url: "/vcs", + ...options, + ...params, + }) + } } export class Session extends HeyApiClient { - /** - * List all sessions - */ - public list(parameters?: { - directory?: string; - }, options?: Options) { - const params = buildClientParams([parameters], [{ args: [{ in: 'query', key: 'directory' }] }]); - return (options?.client ?? this.client).get({ - url: '/session', - ...options, - ...params - }); - } - - /** - * Create a new session - */ - public create(parameters?: { - directory?: string; - parentID?: string; - title?: string; - }, options?: Options) { - const params = buildClientParams([parameters], [{ args: [ - { in: 'query', key: 'directory' }, - { in: 'body', key: 'parentID' }, - { in: 'body', key: 'title' } - ] }]); - return (options?.client ?? this.client).post({ - url: '/session', - ...options, - ...params, - headers: { - 'Content-Type': 'application/json', - ...options?.headers, - ...params.headers - } - }); - } - - /** - * Get session status - */ - public status(parameters?: { - directory?: string; - }, options?: Options) { - const params = buildClientParams([parameters], [{ args: [{ in: 'query', key: 'directory' }] }]); - return (options?.client ?? this.client).get({ - url: '/session/status', - ...options, - ...params - }); - } - - /** - * Delete a session and all its data - */ - public delete(parameters: { - sessionID: string; - directory?: string; - }, options?: Options) { - const params = buildClientParams([parameters], [{ args: [{ in: 'path', key: 'sessionID' }, { in: 'query', key: 'directory' }] }]); - return (options?.client ?? this.client).delete({ - url: '/session/{sessionID}', - ...options, - ...params - }); - } - - /** - * Get session - */ - public get(parameters: { - sessionID: string; - directory?: string; - }, options?: Options) { - const params = buildClientParams([parameters], [{ args: [{ in: 'path', key: 'sessionID' }, { in: 'query', key: 'directory' }] }]); - return (options?.client ?? this.client).get({ - url: '/session/{sessionID}', - ...options, - ...params - }); - } - - /** - * Update session properties - */ - public update(parameters: { - sessionID: string; - directory?: string; - title?: string; - }, options?: Options) { - const params = buildClientParams([parameters], [{ args: [ - { in: 'path', key: 'sessionID' }, - { in: 'query', key: 'directory' }, - { in: 'body', key: 'title' } - ] }]); - return (options?.client ?? this.client).patch({ - url: '/session/{sessionID}', - ...options, - ...params, - headers: { - 'Content-Type': 'application/json', - ...options?.headers, - ...params.headers - } - }); - } - - /** - * Get a session's children - */ - public children(parameters: { - sessionID: string; - directory?: string; - }, options?: Options) { - const params = buildClientParams([parameters], [{ args: [{ in: 'path', key: 'sessionID' }, { in: 'query', key: 'directory' }] }]); - return (options?.client ?? this.client).get({ - url: '/session/{sessionID}/children', - ...options, - ...params - }); - } - - /** - * Get the todo list for a session - */ - public todo(parameters: { - sessionID: string; - directory?: string; - }, options?: Options) { - const params = buildClientParams([parameters], [{ args: [{ in: 'path', key: 'sessionID' }, { in: 'query', key: 'directory' }] }]); - return (options?.client ?? this.client).get({ - url: '/session/{sessionID}/todo', - ...options, - ...params - }); - } - - /** - * Analyze the app and create an AGENTS.md file - */ - public init(parameters: { - sessionID: string; - directory?: string; - modelID?: string; - providerID?: string; - messageID?: string; - }, options?: Options) { - const params = buildClientParams([parameters], [{ args: [ - { in: 'path', key: 'sessionID' }, - { in: 'query', key: 'directory' }, - { in: 'body', key: 'modelID' }, - { in: 'body', key: 'providerID' }, - { in: 'body', key: 'messageID' } - ] }]); - return (options?.client ?? this.client).post({ - url: '/session/{sessionID}/init', - ...options, - ...params, - headers: { - 'Content-Type': 'application/json', - ...options?.headers, - ...params.headers - } - }); - } - - /** - * Fork an existing session at a specific message - */ - public fork(parameters: { - sessionID: string; - directory?: string; - messageID?: string; - }, options?: Options) { - const params = buildClientParams([parameters], [{ args: [ - { in: 'path', key: 'sessionID' }, - { in: 'query', key: 'directory' }, - { in: 'body', key: 'messageID' } - ] }]); - return (options?.client ?? this.client).post({ - url: '/session/{sessionID}/fork', - ...options, - ...params, - headers: { - 'Content-Type': 'application/json', - ...options?.headers, - ...params.headers - } - }); - } - - /** - * Abort a session - */ - public abort(parameters: { - sessionID: string; - directory?: string; - }, options?: Options) { - const params = buildClientParams([parameters], [{ args: [{ in: 'path', key: 'sessionID' }, { in: 'query', key: 'directory' }] }]); - return (options?.client ?? this.client).post({ - url: '/session/{sessionID}/abort', - ...options, - ...params - }); - } - - /** - * Unshare the session - */ - public unshare(parameters: { - sessionID: string; - directory?: string; - }, options?: Options) { - const params = buildClientParams([parameters], [{ args: [{ in: 'path', key: 'sessionID' }, { in: 'query', key: 'directory' }] }]); - return (options?.client ?? this.client).delete({ - url: '/session/{sessionID}/share', - ...options, - ...params - }); - } - - /** - * Share a session - */ - public share(parameters: { - sessionID: string; - directory?: string; - }, options?: Options) { - const params = buildClientParams([parameters], [{ args: [{ in: 'path', key: 'sessionID' }, { in: 'query', key: 'directory' }] }]); - return (options?.client ?? this.client).post({ - url: '/session/{sessionID}/share', - ...options, - ...params - }); - } - - /** - * Get the diff for this session - */ - public diff(parameters: { - sessionID: string; - directory?: string; - messageID?: string; - }, options?: Options) { - const params = buildClientParams([parameters], [{ args: [ - { in: 'path', key: 'sessionID' }, - { in: 'query', key: 'directory' }, - { in: 'query', key: 'messageID' } - ] }]); - return (options?.client ?? this.client).get({ - url: '/session/{sessionID}/diff', - ...options, - ...params - }); - } - - /** - * Summarize the session - */ - public summarize(parameters: { - sessionID: string; - directory?: string; - providerID?: string; - modelID?: string; - }, options?: Options) { - const params = buildClientParams([parameters], [{ args: [ - { in: 'path', key: 'sessionID' }, - { in: 'query', key: 'directory' }, - { in: 'body', key: 'providerID' }, - { in: 'body', key: 'modelID' } - ] }]); - return (options?.client ?? this.client).post({ - url: '/session/{sessionID}/summarize', - ...options, - ...params, - headers: { - 'Content-Type': 'application/json', - ...options?.headers, - ...params.headers - } - }); - } - - /** - * List messages for a session - */ - public messages(parameters: { - sessionID: string; - directory?: string; - limit?: number; - }, options?: Options) { - const params = buildClientParams([parameters], [{ args: [ - { in: 'path', key: 'sessionID' }, - { in: 'query', key: 'directory' }, - { in: 'query', key: 'limit' } - ] }]); - return (options?.client ?? this.client).get({ - url: '/session/{sessionID}/message', - ...options, - ...params - }); - } - - /** - * Create and send a new message to a session - */ - public prompt(parameters: { - sessionID: string; - directory?: string; - messageID?: string; - model?: { - providerID: string; - modelID: string; - }; - agent?: string; - noReply?: boolean; - system?: string; - tools?: { - [key: string]: boolean; - }; - parts?: Array; - }, options?: Options) { - const params = buildClientParams([parameters], [{ args: [ - { in: 'path', key: 'sessionID' }, - { in: 'query', key: 'directory' }, - { in: 'body', key: 'messageID' }, - { in: 'body', key: 'model' }, - { in: 'body', key: 'agent' }, - { in: 'body', key: 'noReply' }, - { in: 'body', key: 'system' }, - { in: 'body', key: 'tools' }, - { in: 'body', key: 'parts' } - ] }]); - return (options?.client ?? this.client).post({ - url: '/session/{sessionID}/message', - ...options, - ...params, - headers: { - 'Content-Type': 'application/json', - ...options?.headers, - ...params.headers - } - }); - } - - /** - * Get a message from a session - */ - public message(parameters: { - sessionID: string; - messageID: string; - directory?: string; - }, options?: Options) { - const params = buildClientParams([parameters], [{ args: [ - { in: 'path', key: 'sessionID' }, - { in: 'path', key: 'messageID' }, - { in: 'query', key: 'directory' } - ] }]); - return (options?.client ?? this.client).get({ - url: '/session/{sessionID}/message/{messageID}', - ...options, - ...params - }); - } - - /** - * Create and send a new message to a session, start if needed and return immediately - */ - public promptAsync(parameters: { - sessionID: string; - directory?: string; - messageID?: string; - model?: { - providerID: string; - modelID: string; - }; - agent?: string; - noReply?: boolean; - system?: string; - tools?: { - [key: string]: boolean; - }; - parts?: Array; - }, options?: Options) { - const params = buildClientParams([parameters], [{ args: [ - { in: 'path', key: 'sessionID' }, - { in: 'query', key: 'directory' }, - { in: 'body', key: 'messageID' }, - { in: 'body', key: 'model' }, - { in: 'body', key: 'agent' }, - { in: 'body', key: 'noReply' }, - { in: 'body', key: 'system' }, - { in: 'body', key: 'tools' }, - { in: 'body', key: 'parts' } - ] }]); - return (options?.client ?? this.client).post({ - url: '/session/{sessionID}/prompt_async', - ...options, - ...params, - headers: { - 'Content-Type': 'application/json', - ...options?.headers, - ...params.headers - } - }); - } - - /** - * Send a new command to a session - */ - public command(parameters: { - sessionID: string; - directory?: string; - messageID?: string; - agent?: string; - model?: string; - arguments?: string; - command?: string; - }, options?: Options) { - const params = buildClientParams([parameters], [{ args: [ - { in: 'path', key: 'sessionID' }, - { in: 'query', key: 'directory' }, - { in: 'body', key: 'messageID' }, - { in: 'body', key: 'agent' }, - { in: 'body', key: 'model' }, - { in: 'body', key: 'arguments' }, - { in: 'body', key: 'command' } - ] }]); - return (options?.client ?? this.client).post({ - url: '/session/{sessionID}/command', - ...options, - ...params, - headers: { - 'Content-Type': 'application/json', - ...options?.headers, - ...params.headers - } - }); - } - - /** - * Run a shell command - */ - public shell(parameters: { - sessionID: string; - directory?: string; - agent?: string; - model?: { - providerID: string; - modelID: string; - }; - command?: string; - }, options?: Options) { - const params = buildClientParams([parameters], [{ args: [ - { in: 'path', key: 'sessionID' }, - { in: 'query', key: 'directory' }, - { in: 'body', key: 'agent' }, - { in: 'body', key: 'model' }, - { in: 'body', key: 'command' } - ] }]); - return (options?.client ?? this.client).post({ - url: '/session/{sessionID}/shell', - ...options, - ...params, - headers: { - 'Content-Type': 'application/json', - ...options?.headers, - ...params.headers - } - }); - } - - /** - * Revert a message - */ - public revert(parameters: { - sessionID: string; - directory?: string; - messageID?: string; - partID?: string; - }, options?: Options) { - const params = buildClientParams([parameters], [{ args: [ - { in: 'path', key: 'sessionID' }, - { in: 'query', key: 'directory' }, - { in: 'body', key: 'messageID' }, - { in: 'body', key: 'partID' } - ] }]); - return (options?.client ?? this.client).post({ - url: '/session/{sessionID}/revert', - ...options, - ...params, - headers: { - 'Content-Type': 'application/json', - ...options?.headers, - ...params.headers - } - }); - } - - /** - * Restore all reverted messages - */ - public unrevert(parameters: { - sessionID: string; - directory?: string; - }, options?: Options) { - const params = buildClientParams([parameters], [{ args: [{ in: 'path', key: 'sessionID' }, { in: 'query', key: 'directory' }] }]); - return (options?.client ?? this.client).post({ - url: '/session/{sessionID}/unrevert', - ...options, - ...params - }); - } + /** + * List all sessions + */ + public list( + parameters?: { + directory?: string + }, + options?: Options, + ) { + const params = buildClientParams([parameters], [{ args: [{ in: "query", key: "directory" }] }]) + return (options?.client ?? this.client).get({ + url: "/session", + ...options, + ...params, + }) + } + + /** + * Create a new session + */ + public create( + parameters?: { + directory?: string + parentID?: string + title?: string + }, + options?: Options, + ) { + const params = buildClientParams( + [parameters], + [ + { + args: [ + { in: "query", key: "directory" }, + { in: "body", key: "parentID" }, + { in: "body", key: "title" }, + ], + }, + ], + ) + return (options?.client ?? this.client).post({ + url: "/session", + ...options, + ...params, + headers: { + "Content-Type": "application/json", + ...options?.headers, + ...params.headers, + }, + }) + } + + /** + * Get session status + */ + public status( + parameters?: { + directory?: string + }, + options?: Options, + ) { + const params = buildClientParams([parameters], [{ args: [{ in: "query", key: "directory" }] }]) + return (options?.client ?? this.client).get({ + url: "/session/status", + ...options, + ...params, + }) + } + + /** + * Delete a session and all its data + */ + public delete( + parameters: { + sessionID: string + directory?: string + }, + options?: Options, + ) { + const params = buildClientParams( + [parameters], + [ + { + args: [ + { in: "path", key: "sessionID" }, + { in: "query", key: "directory" }, + ], + }, + ], + ) + return (options?.client ?? this.client).delete({ + url: "/session/{sessionID}", + ...options, + ...params, + }) + } + + /** + * Get session + */ + public get( + parameters: { + sessionID: string + directory?: string + }, + options?: Options, + ) { + const params = buildClientParams( + [parameters], + [ + { + args: [ + { in: "path", key: "sessionID" }, + { in: "query", key: "directory" }, + ], + }, + ], + ) + return (options?.client ?? this.client).get({ + url: "/session/{sessionID}", + ...options, + ...params, + }) + } + + /** + * Update session properties + */ + public update( + parameters: { + sessionID: string + directory?: string + title?: string + }, + options?: Options, + ) { + const params = buildClientParams( + [parameters], + [ + { + args: [ + { in: "path", key: "sessionID" }, + { in: "query", key: "directory" }, + { in: "body", key: "title" }, + ], + }, + ], + ) + return (options?.client ?? this.client).patch({ + url: "/session/{sessionID}", + ...options, + ...params, + headers: { + "Content-Type": "application/json", + ...options?.headers, + ...params.headers, + }, + }) + } + + /** + * Get a session's children + */ + public children( + parameters: { + sessionID: string + directory?: string + }, + options?: Options, + ) { + const params = buildClientParams( + [parameters], + [ + { + args: [ + { in: "path", key: "sessionID" }, + { in: "query", key: "directory" }, + ], + }, + ], + ) + return (options?.client ?? this.client).get({ + url: "/session/{sessionID}/children", + ...options, + ...params, + }) + } + + /** + * Get the todo list for a session + */ + public todo( + parameters: { + sessionID: string + directory?: string + }, + options?: Options, + ) { + const params = buildClientParams( + [parameters], + [ + { + args: [ + { in: "path", key: "sessionID" }, + { in: "query", key: "directory" }, + ], + }, + ], + ) + return (options?.client ?? this.client).get({ + url: "/session/{sessionID}/todo", + ...options, + ...params, + }) + } + + /** + * Analyze the app and create an AGENTS.md file + */ + public init( + parameters: { + sessionID: string + directory?: string + modelID?: string + providerID?: string + messageID?: string + }, + options?: Options, + ) { + const params = buildClientParams( + [parameters], + [ + { + args: [ + { in: "path", key: "sessionID" }, + { in: "query", key: "directory" }, + { in: "body", key: "modelID" }, + { in: "body", key: "providerID" }, + { in: "body", key: "messageID" }, + ], + }, + ], + ) + return (options?.client ?? this.client).post({ + url: "/session/{sessionID}/init", + ...options, + ...params, + headers: { + "Content-Type": "application/json", + ...options?.headers, + ...params.headers, + }, + }) + } + + /** + * Fork an existing session at a specific message + */ + public fork( + parameters: { + sessionID: string + directory?: string + messageID?: string + }, + options?: Options, + ) { + const params = buildClientParams( + [parameters], + [ + { + args: [ + { in: "path", key: "sessionID" }, + { in: "query", key: "directory" }, + { in: "body", key: "messageID" }, + ], + }, + ], + ) + return (options?.client ?? this.client).post({ + url: "/session/{sessionID}/fork", + ...options, + ...params, + headers: { + "Content-Type": "application/json", + ...options?.headers, + ...params.headers, + }, + }) + } + + /** + * Abort a session + */ + public abort( + parameters: { + sessionID: string + directory?: string + }, + options?: Options, + ) { + const params = buildClientParams( + [parameters], + [ + { + args: [ + { in: "path", key: "sessionID" }, + { in: "query", key: "directory" }, + ], + }, + ], + ) + return (options?.client ?? this.client).post({ + url: "/session/{sessionID}/abort", + ...options, + ...params, + }) + } + + /** + * Unshare the session + */ + public unshare( + parameters: { + sessionID: string + directory?: string + }, + options?: Options, + ) { + const params = buildClientParams( + [parameters], + [ + { + args: [ + { in: "path", key: "sessionID" }, + { in: "query", key: "directory" }, + ], + }, + ], + ) + return (options?.client ?? this.client).delete({ + url: "/session/{sessionID}/share", + ...options, + ...params, + }) + } + + /** + * Share a session + */ + public share( + parameters: { + sessionID: string + directory?: string + }, + options?: Options, + ) { + const params = buildClientParams( + [parameters], + [ + { + args: [ + { in: "path", key: "sessionID" }, + { in: "query", key: "directory" }, + ], + }, + ], + ) + return (options?.client ?? this.client).post({ + url: "/session/{sessionID}/share", + ...options, + ...params, + }) + } + + /** + * Get the diff for this session + */ + public diff( + parameters: { + sessionID: string + directory?: string + messageID?: string + }, + options?: Options, + ) { + const params = buildClientParams( + [parameters], + [ + { + args: [ + { in: "path", key: "sessionID" }, + { in: "query", key: "directory" }, + { in: "query", key: "messageID" }, + ], + }, + ], + ) + return (options?.client ?? this.client).get({ + url: "/session/{sessionID}/diff", + ...options, + ...params, + }) + } + + /** + * Summarize the session + */ + public summarize( + parameters: { + sessionID: string + directory?: string + providerID?: string + modelID?: string + }, + options?: Options, + ) { + const params = buildClientParams( + [parameters], + [ + { + args: [ + { in: "path", key: "sessionID" }, + { in: "query", key: "directory" }, + { in: "body", key: "providerID" }, + { in: "body", key: "modelID" }, + ], + }, + ], + ) + return (options?.client ?? this.client).post({ + url: "/session/{sessionID}/summarize", + ...options, + ...params, + headers: { + "Content-Type": "application/json", + ...options?.headers, + ...params.headers, + }, + }) + } + + /** + * List messages for a session + */ + public messages( + parameters: { + sessionID: string + directory?: string + limit?: number + }, + options?: Options, + ) { + const params = buildClientParams( + [parameters], + [ + { + args: [ + { in: "path", key: "sessionID" }, + { in: "query", key: "directory" }, + { in: "query", key: "limit" }, + ], + }, + ], + ) + return (options?.client ?? this.client).get({ + url: "/session/{sessionID}/message", + ...options, + ...params, + }) + } + + /** + * Create and send a new message to a session + */ + public prompt( + parameters: { + sessionID: string + directory?: string + messageID?: string + model?: { + providerID: string + modelID: string + } + agent?: string + noReply?: boolean + system?: string + tools?: { + [key: string]: boolean + } + parts?: Array + }, + options?: Options, + ) { + const params = buildClientParams( + [parameters], + [ + { + args: [ + { in: "path", key: "sessionID" }, + { in: "query", key: "directory" }, + { in: "body", key: "messageID" }, + { in: "body", key: "model" }, + { in: "body", key: "agent" }, + { in: "body", key: "noReply" }, + { in: "body", key: "system" }, + { in: "body", key: "tools" }, + { in: "body", key: "parts" }, + ], + }, + ], + ) + return (options?.client ?? this.client).post({ + url: "/session/{sessionID}/message", + ...options, + ...params, + headers: { + "Content-Type": "application/json", + ...options?.headers, + ...params.headers, + }, + }) + } + + /** + * Get a message from a session + */ + public message( + parameters: { + sessionID: string + messageID: string + directory?: string + }, + options?: Options, + ) { + const params = buildClientParams( + [parameters], + [ + { + args: [ + { in: "path", key: "sessionID" }, + { in: "path", key: "messageID" }, + { in: "query", key: "directory" }, + ], + }, + ], + ) + return (options?.client ?? this.client).get({ + url: "/session/{sessionID}/message/{messageID}", + ...options, + ...params, + }) + } + + /** + * Create and send a new message to a session, start if needed and return immediately + */ + public promptAsync( + parameters: { + sessionID: string + directory?: string + messageID?: string + model?: { + providerID: string + modelID: string + } + agent?: string + noReply?: boolean + system?: string + tools?: { + [key: string]: boolean + } + parts?: Array + }, + options?: Options, + ) { + const params = buildClientParams( + [parameters], + [ + { + args: [ + { in: "path", key: "sessionID" }, + { in: "query", key: "directory" }, + { in: "body", key: "messageID" }, + { in: "body", key: "model" }, + { in: "body", key: "agent" }, + { in: "body", key: "noReply" }, + { in: "body", key: "system" }, + { in: "body", key: "tools" }, + { in: "body", key: "parts" }, + ], + }, + ], + ) + return (options?.client ?? this.client).post({ + url: "/session/{sessionID}/prompt_async", + ...options, + ...params, + headers: { + "Content-Type": "application/json", + ...options?.headers, + ...params.headers, + }, + }) + } + + /** + * Send a new command to a session + */ + public command( + parameters: { + sessionID: string + directory?: string + messageID?: string + agent?: string + model?: string + arguments?: string + command?: string + }, + options?: Options, + ) { + const params = buildClientParams( + [parameters], + [ + { + args: [ + { in: "path", key: "sessionID" }, + { in: "query", key: "directory" }, + { in: "body", key: "messageID" }, + { in: "body", key: "agent" }, + { in: "body", key: "model" }, + { in: "body", key: "arguments" }, + { in: "body", key: "command" }, + ], + }, + ], + ) + return (options?.client ?? this.client).post({ + url: "/session/{sessionID}/command", + ...options, + ...params, + headers: { + "Content-Type": "application/json", + ...options?.headers, + ...params.headers, + }, + }) + } + + /** + * Run a shell command + */ + public shell( + parameters: { + sessionID: string + directory?: string + agent?: string + model?: { + providerID: string + modelID: string + } + command?: string + }, + options?: Options, + ) { + const params = buildClientParams( + [parameters], + [ + { + args: [ + { in: "path", key: "sessionID" }, + { in: "query", key: "directory" }, + { in: "body", key: "agent" }, + { in: "body", key: "model" }, + { in: "body", key: "command" }, + ], + }, + ], + ) + return (options?.client ?? this.client).post({ + url: "/session/{sessionID}/shell", + ...options, + ...params, + headers: { + "Content-Type": "application/json", + ...options?.headers, + ...params.headers, + }, + }) + } + + /** + * Revert a message + */ + public revert( + parameters: { + sessionID: string + directory?: string + messageID?: string + partID?: string + }, + options?: Options, + ) { + const params = buildClientParams( + [parameters], + [ + { + args: [ + { in: "path", key: "sessionID" }, + { in: "query", key: "directory" }, + { in: "body", key: "messageID" }, + { in: "body", key: "partID" }, + ], + }, + ], + ) + return (options?.client ?? this.client).post({ + url: "/session/{sessionID}/revert", + ...options, + ...params, + headers: { + "Content-Type": "application/json", + ...options?.headers, + ...params.headers, + }, + }) + } + + /** + * Restore all reverted messages + */ + public unrevert( + parameters: { + sessionID: string + directory?: string + }, + options?: Options, + ) { + const params = buildClientParams( + [parameters], + [ + { + args: [ + { in: "path", key: "sessionID" }, + { in: "query", key: "directory" }, + ], + }, + ], + ) + return (options?.client ?? this.client).post({ + url: "/session/{sessionID}/unrevert", + ...options, + ...params, + }) + } } export class Permission extends HeyApiClient { - /** - * Respond to a permission request - */ - public respond(parameters: { - sessionID: string; - permissionID: string; - directory?: string; - response?: 'once' | 'always' | 'reject'; - }, options?: Options) { - const params = buildClientParams([parameters], [{ args: [ - { in: 'path', key: 'sessionID' }, - { in: 'path', key: 'permissionID' }, - { in: 'query', key: 'directory' }, - { in: 'body', key: 'response' } - ] }]); - return (options?.client ?? this.client).post({ - url: '/session/{sessionID}/permissions/{permissionID}', - ...options, - ...params, - headers: { - 'Content-Type': 'application/json', - ...options?.headers, - ...params.headers - } - }); - } + /** + * Respond to a permission request + */ + public respond( + parameters: { + sessionID: string + permissionID: string + directory?: string + response?: "once" | "always" | "reject" + }, + options?: Options, + ) { + const params = buildClientParams( + [parameters], + [ + { + args: [ + { in: "path", key: "sessionID" }, + { in: "path", key: "permissionID" }, + { in: "query", key: "directory" }, + { in: "body", key: "response" }, + ], + }, + ], + ) + return (options?.client ?? this.client).post({ + url: "/session/{sessionID}/permissions/{permissionID}", + ...options, + ...params, + headers: { + "Content-Type": "application/json", + ...options?.headers, + ...params.headers, + }, + }) + } } export class Command extends HeyApiClient { - /** - * List all commands - */ - public list(parameters?: { - directory?: string; - }, options?: Options) { - const params = buildClientParams([parameters], [{ args: [{ in: 'query', key: 'directory' }] }]); - return (options?.client ?? this.client).get({ - url: '/command', - ...options, - ...params - }); - } + /** + * List all commands + */ + public list( + parameters?: { + directory?: string + }, + options?: Options, + ) { + const params = buildClientParams([parameters], [{ args: [{ in: "query", key: "directory" }] }]) + return (options?.client ?? this.client).get({ + url: "/command", + ...options, + ...params, + }) + } } export class Oauth extends HeyApiClient { - /** - * Authorize a provider using OAuth - */ - public authorize(parameters: { - providerID: string; - directory?: string; - method?: number; - }, options?: Options) { - const params = buildClientParams([parameters], [{ args: [ - { in: 'path', key: 'providerID' }, - { in: 'query', key: 'directory' }, - { in: 'body', key: 'method' } - ] }]); - return (options?.client ?? this.client).post({ - url: '/provider/{providerID}/oauth/authorize', - ...options, - ...params, - headers: { - 'Content-Type': 'application/json', - ...options?.headers, - ...params.headers - } - }); - } - - /** - * Handle OAuth callback for a provider - */ - public callback(parameters: { - providerID: string; - directory?: string; - method?: number; - code?: string; - }, options?: Options) { - const params = buildClientParams([parameters], [{ args: [ - { in: 'path', key: 'providerID' }, - { in: 'query', key: 'directory' }, - { in: 'body', key: 'method' }, - { in: 'body', key: 'code' } - ] }]); - return (options?.client ?? this.client).post({ - url: '/provider/{providerID}/oauth/callback', - ...options, - ...params, - headers: { - 'Content-Type': 'application/json', - ...options?.headers, - ...params.headers - } - }); - } + /** + * Authorize a provider using OAuth + */ + public authorize( + parameters: { + providerID: string + directory?: string + method?: number + }, + options?: Options, + ) { + const params = buildClientParams( + [parameters], + [ + { + args: [ + { in: "path", key: "providerID" }, + { in: "query", key: "directory" }, + { in: "body", key: "method" }, + ], + }, + ], + ) + return (options?.client ?? this.client).post< + ProviderOauthAuthorizeResponses, + ProviderOauthAuthorizeErrors, + ThrowOnError + >({ + url: "/provider/{providerID}/oauth/authorize", + ...options, + ...params, + headers: { + "Content-Type": "application/json", + ...options?.headers, + ...params.headers, + }, + }) + } + + /** + * Handle OAuth callback for a provider + */ + public callback( + parameters: { + providerID: string + directory?: string + method?: number + code?: string + }, + options?: Options, + ) { + const params = buildClientParams( + [parameters], + [ + { + args: [ + { in: "path", key: "providerID" }, + { in: "query", key: "directory" }, + { in: "body", key: "method" }, + { in: "body", key: "code" }, + ], + }, + ], + ) + return (options?.client ?? this.client).post< + ProviderOauthCallbackResponses, + ProviderOauthCallbackErrors, + ThrowOnError + >({ + url: "/provider/{providerID}/oauth/callback", + ...options, + ...params, + headers: { + "Content-Type": "application/json", + ...options?.headers, + ...params.headers, + }, + }) + } } export class Provider extends HeyApiClient { - /** - * List all providers - */ - public list(parameters?: { - directory?: string; - }, options?: Options) { - const params = buildClientParams([parameters], [{ args: [{ in: 'query', key: 'directory' }] }]); - return (options?.client ?? this.client).get({ - url: '/provider', - ...options, - ...params - }); - } - - /** - * Get provider authentication methods - */ - public auth(parameters?: { - directory?: string; - }, options?: Options) { - const params = buildClientParams([parameters], [{ args: [{ in: 'query', key: 'directory' }] }]); - return (options?.client ?? this.client).get({ - url: '/provider/auth', - ...options, - ...params - }); - } - - oauth = new Oauth({ client: this.client }); + /** + * List all providers + */ + public list( + parameters?: { + directory?: string + }, + options?: Options, + ) { + const params = buildClientParams([parameters], [{ args: [{ in: "query", key: "directory" }] }]) + return (options?.client ?? this.client).get({ + url: "/provider", + ...options, + ...params, + }) + } + + /** + * Get provider authentication methods + */ + public auth( + parameters?: { + directory?: string + }, + options?: Options, + ) { + const params = buildClientParams([parameters], [{ args: [{ in: "query", key: "directory" }] }]) + return (options?.client ?? this.client).get({ + url: "/provider/auth", + ...options, + ...params, + }) + } + + oauth = new Oauth({ client: this.client }) } export class Find extends HeyApiClient { - /** - * Find text in files - */ - public text(parameters: { - directory?: string; - pattern: string; - }, options?: Options) { - const params = buildClientParams([parameters], [{ args: [{ in: 'query', key: 'directory' }, { in: 'query', key: 'pattern' }] }]); - return (options?.client ?? this.client).get({ - url: '/find', - ...options, - ...params - }); - } - - /** - * Find files - */ - public files(parameters: { - directory?: string; - query: string; - dirs?: 'true' | 'false'; - }, options?: Options) { - const params = buildClientParams([parameters], [{ args: [ - { in: 'query', key: 'directory' }, - { in: 'query', key: 'query' }, - { in: 'query', key: 'dirs' } - ] }]); - return (options?.client ?? this.client).get({ - url: '/find/file', - ...options, - ...params - }); - } - - /** - * Find workspace symbols - */ - public symbols(parameters: { - directory?: string; - query: string; - }, options?: Options) { - const params = buildClientParams([parameters], [{ args: [{ in: 'query', key: 'directory' }, { in: 'query', key: 'query' }] }]); - return (options?.client ?? this.client).get({ - url: '/find/symbol', - ...options, - ...params - }); - } + /** + * Find text in files + */ + public text( + parameters: { + directory?: string + pattern: string + }, + options?: Options, + ) { + const params = buildClientParams( + [parameters], + [ + { + args: [ + { in: "query", key: "directory" }, + { in: "query", key: "pattern" }, + ], + }, + ], + ) + return (options?.client ?? this.client).get({ + url: "/find", + ...options, + ...params, + }) + } + + /** + * Find files + */ + public files( + parameters: { + directory?: string + query: string + dirs?: "true" | "false" + }, + options?: Options, + ) { + const params = buildClientParams( + [parameters], + [ + { + args: [ + { in: "query", key: "directory" }, + { in: "query", key: "query" }, + { in: "query", key: "dirs" }, + ], + }, + ], + ) + return (options?.client ?? this.client).get({ + url: "/find/file", + ...options, + ...params, + }) + } + + /** + * Find workspace symbols + */ + public symbols( + parameters: { + directory?: string + query: string + }, + options?: Options, + ) { + const params = buildClientParams( + [parameters], + [ + { + args: [ + { in: "query", key: "directory" }, + { in: "query", key: "query" }, + ], + }, + ], + ) + return (options?.client ?? this.client).get({ + url: "/find/symbol", + ...options, + ...params, + }) + } } export class File extends HeyApiClient { - /** - * List files and directories - */ - public list(parameters: { - directory?: string; - path: string; - }, options?: Options) { - const params = buildClientParams([parameters], [{ args: [{ in: 'query', key: 'directory' }, { in: 'query', key: 'path' }] }]); - return (options?.client ?? this.client).get({ - url: '/file', - ...options, - ...params - }); - } - - /** - * Read a file - */ - public read(parameters: { - directory?: string; - path: string; - }, options?: Options) { - const params = buildClientParams([parameters], [{ args: [{ in: 'query', key: 'directory' }, { in: 'query', key: 'path' }] }]); - return (options?.client ?? this.client).get({ - url: '/file/content', - ...options, - ...params - }); - } - - /** - * Get file status - */ - public status(parameters?: { - directory?: string; - }, options?: Options) { - const params = buildClientParams([parameters], [{ args: [{ in: 'query', key: 'directory' }] }]); - return (options?.client ?? this.client).get({ - url: '/file/status', - ...options, - ...params - }); - } + /** + * List files and directories + */ + public list( + parameters: { + directory?: string + path: string + }, + options?: Options, + ) { + const params = buildClientParams( + [parameters], + [ + { + args: [ + { in: "query", key: "directory" }, + { in: "query", key: "path" }, + ], + }, + ], + ) + return (options?.client ?? this.client).get({ + url: "/file", + ...options, + ...params, + }) + } + + /** + * Read a file + */ + public read( + parameters: { + directory?: string + path: string + }, + options?: Options, + ) { + const params = buildClientParams( + [parameters], + [ + { + args: [ + { in: "query", key: "directory" }, + { in: "query", key: "path" }, + ], + }, + ], + ) + return (options?.client ?? this.client).get({ + url: "/file/content", + ...options, + ...params, + }) + } + + /** + * Get file status + */ + public status( + parameters?: { + directory?: string + }, + options?: Options, + ) { + const params = buildClientParams([parameters], [{ args: [{ in: "query", key: "directory" }] }]) + return (options?.client ?? this.client).get({ + url: "/file/status", + ...options, + ...params, + }) + } } export class App extends HeyApiClient { - /** - * Write a log entry to the server logs - */ - public log(parameters?: { - directory?: string; - service?: string; - level?: 'debug' | 'info' | 'error' | 'warn'; - message?: string; - extra?: { - [key: string]: unknown; - }; - }, options?: Options) { - const params = buildClientParams([parameters], [{ args: [ - { in: 'query', key: 'directory' }, - { in: 'body', key: 'service' }, - { in: 'body', key: 'level' }, - { in: 'body', key: 'message' }, - { in: 'body', key: 'extra' } - ] }]); - return (options?.client ?? this.client).post({ - url: '/log', - ...options, - ...params, - headers: { - 'Content-Type': 'application/json', - ...options?.headers, - ...params.headers - } - }); - } - - /** - * List all agents - */ - public agents(parameters?: { - directory?: string; - }, options?: Options) { - const params = buildClientParams([parameters], [{ args: [{ in: 'query', key: 'directory' }] }]); - return (options?.client ?? this.client).get({ - url: '/agent', - ...options, - ...params - }); - } + /** + * Write a log entry to the server logs + */ + public log( + parameters?: { + directory?: string + service?: string + level?: "debug" | "info" | "error" | "warn" + message?: string + extra?: { + [key: string]: unknown + } + }, + options?: Options, + ) { + const params = buildClientParams( + [parameters], + [ + { + args: [ + { in: "query", key: "directory" }, + { in: "body", key: "service" }, + { in: "body", key: "level" }, + { in: "body", key: "message" }, + { in: "body", key: "extra" }, + ], + }, + ], + ) + return (options?.client ?? this.client).post({ + url: "/log", + ...options, + ...params, + headers: { + "Content-Type": "application/json", + ...options?.headers, + ...params.headers, + }, + }) + } + + /** + * List all agents + */ + public agents( + parameters?: { + directory?: string + }, + options?: Options, + ) { + const params = buildClientParams([parameters], [{ args: [{ in: "query", key: "directory" }] }]) + return (options?.client ?? this.client).get({ + url: "/agent", + ...options, + ...params, + }) + } } export class Auth extends HeyApiClient { - /** - * Remove OAuth credentials for an MCP server - */ - public remove(parameters: { - name: string; - directory?: string; - }, options?: Options) { - const params = buildClientParams([parameters], [{ args: [{ in: 'path', key: 'name' }, { in: 'query', key: 'directory' }] }]); - return (options?.client ?? this.client).delete({ - url: '/mcp/{name}/auth', - ...options, - ...params - }); - } - - /** - * Start OAuth authentication flow for an MCP server - */ - public start(parameters: { - name: string; - directory?: string; - }, options?: Options) { - const params = buildClientParams([parameters], [{ args: [{ in: 'path', key: 'name' }, { in: 'query', key: 'directory' }] }]); - return (options?.client ?? this.client).post({ - url: '/mcp/{name}/auth', - ...options, - ...params - }); - } - - /** - * Complete OAuth authentication with authorization code - */ - public callback(parameters: { - name: string; - directory?: string; - code?: string; - }, options?: Options) { - const params = buildClientParams([parameters], [{ args: [ - { in: 'path', key: 'name' }, - { in: 'query', key: 'directory' }, - { in: 'body', key: 'code' } - ] }]); - return (options?.client ?? this.client).post({ - url: '/mcp/{name}/auth/callback', - ...options, - ...params, - headers: { - 'Content-Type': 'application/json', - ...options?.headers, - ...params.headers - } - }); - } - - /** - * Start OAuth flow and wait for callback (opens browser) - */ - public authenticate(parameters: { - name: string; - directory?: string; - }, options?: Options) { - const params = buildClientParams([parameters], [{ args: [{ in: 'path', key: 'name' }, { in: 'query', key: 'directory' }] }]); - return (options?.client ?? this.client).post({ - url: '/mcp/{name}/auth/authenticate', - ...options, - ...params - }); - } - - /** - * Set authentication credentials - */ - public set(parameters: { - providerID: string; - directory?: string; - auth?: Auth2; - }, options?: Options) { - const params = buildClientParams([parameters], [{ args: [ - { in: 'path', key: 'providerID' }, - { in: 'query', key: 'directory' }, - { key: 'auth', map: 'body' } - ] }]); - return (options?.client ?? this.client).put({ - url: '/auth/{providerID}', - ...options, - ...params, - headers: { - 'Content-Type': 'application/json', - ...options?.headers, - ...params.headers - } - }); - } + /** + * Remove OAuth credentials for an MCP server + */ + public remove( + parameters: { + name: string + directory?: string + }, + options?: Options, + ) { + const params = buildClientParams( + [parameters], + [ + { + args: [ + { in: "path", key: "name" }, + { in: "query", key: "directory" }, + ], + }, + ], + ) + return (options?.client ?? this.client).delete({ + url: "/mcp/{name}/auth", + ...options, + ...params, + }) + } + + /** + * Start OAuth authentication flow for an MCP server + */ + public start( + parameters: { + name: string + directory?: string + }, + options?: Options, + ) { + const params = buildClientParams( + [parameters], + [ + { + args: [ + { in: "path", key: "name" }, + { in: "query", key: "directory" }, + ], + }, + ], + ) + return (options?.client ?? this.client).post({ + url: "/mcp/{name}/auth", + ...options, + ...params, + }) + } + + /** + * Complete OAuth authentication with authorization code + */ + public callback( + parameters: { + name: string + directory?: string + code?: string + }, + options?: Options, + ) { + const params = buildClientParams( + [parameters], + [ + { + args: [ + { in: "path", key: "name" }, + { in: "query", key: "directory" }, + { in: "body", key: "code" }, + ], + }, + ], + ) + return (options?.client ?? this.client).post({ + url: "/mcp/{name}/auth/callback", + ...options, + ...params, + headers: { + "Content-Type": "application/json", + ...options?.headers, + ...params.headers, + }, + }) + } + + /** + * Start OAuth flow and wait for callback (opens browser) + */ + public authenticate( + parameters: { + name: string + directory?: string + }, + options?: Options, + ) { + const params = buildClientParams( + [parameters], + [ + { + args: [ + { in: "path", key: "name" }, + { in: "query", key: "directory" }, + ], + }, + ], + ) + return (options?.client ?? this.client).post( + { + url: "/mcp/{name}/auth/authenticate", + ...options, + ...params, + }, + ) + } + + /** + * Set authentication credentials + */ + public set( + parameters: { + providerID: string + directory?: string + auth?: Auth2 + }, + options?: Options, + ) { + const params = buildClientParams( + [parameters], + [ + { + args: [ + { in: "path", key: "providerID" }, + { in: "query", key: "directory" }, + { key: "auth", map: "body" }, + ], + }, + ], + ) + return (options?.client ?? this.client).put({ + url: "/auth/{providerID}", + ...options, + ...params, + headers: { + "Content-Type": "application/json", + ...options?.headers, + ...params.headers, + }, + }) + } } export class Mcp extends HeyApiClient { - /** - * Get MCP server status - */ - public status(parameters?: { - directory?: string; - }, options?: Options) { - const params = buildClientParams([parameters], [{ args: [{ in: 'query', key: 'directory' }] }]); - return (options?.client ?? this.client).get({ - url: '/mcp', - ...options, - ...params - }); - } - - /** - * Add MCP server dynamically - */ - public add(parameters?: { - directory?: string; - name?: string; - config?: McpLocalConfig | McpRemoteConfig; - }, options?: Options) { - const params = buildClientParams([parameters], [{ args: [ - { in: 'query', key: 'directory' }, - { in: 'body', key: 'name' }, - { in: 'body', key: 'config' } - ] }]); - return (options?.client ?? this.client).post({ - url: '/mcp', - ...options, - ...params, - headers: { - 'Content-Type': 'application/json', - ...options?.headers, - ...params.headers - } - }); - } - - auth = new Auth({ client: this.client }); + /** + * Get MCP server status + */ + public status( + parameters?: { + directory?: string + }, + options?: Options, + ) { + const params = buildClientParams([parameters], [{ args: [{ in: "query", key: "directory" }] }]) + return (options?.client ?? this.client).get({ + url: "/mcp", + ...options, + ...params, + }) + } + + /** + * Add MCP server dynamically + */ + public add( + parameters?: { + directory?: string + name?: string + config?: McpLocalConfig | McpRemoteConfig + }, + options?: Options, + ) { + const params = buildClientParams( + [parameters], + [ + { + args: [ + { in: "query", key: "directory" }, + { in: "body", key: "name" }, + { in: "body", key: "config" }, + ], + }, + ], + ) + return (options?.client ?? this.client).post({ + url: "/mcp", + ...options, + ...params, + headers: { + "Content-Type": "application/json", + ...options?.headers, + ...params.headers, + }, + }) + } + + auth = new Auth({ client: this.client }) } export class Lsp extends HeyApiClient { - /** - * Get LSP server status - */ - public status(parameters?: { - directory?: string; - }, options?: Options) { - const params = buildClientParams([parameters], [{ args: [{ in: 'query', key: 'directory' }] }]); - return (options?.client ?? this.client).get({ - url: '/lsp', - ...options, - ...params - }); - } + /** + * Get LSP server status + */ + public status( + parameters?: { + directory?: string + }, + options?: Options, + ) { + const params = buildClientParams([parameters], [{ args: [{ in: "query", key: "directory" }] }]) + return (options?.client ?? this.client).get({ + url: "/lsp", + ...options, + ...params, + }) + } } export class Formatter extends HeyApiClient { - /** - * Get formatter status - */ - public status(parameters?: { - directory?: string; - }, options?: Options) { - const params = buildClientParams([parameters], [{ args: [{ in: 'query', key: 'directory' }] }]); - return (options?.client ?? this.client).get({ - url: '/formatter', - ...options, - ...params - }); - } + /** + * Get formatter status + */ + public status( + parameters?: { + directory?: string + }, + options?: Options, + ) { + const params = buildClientParams([parameters], [{ args: [{ in: "query", key: "directory" }] }]) + return (options?.client ?? this.client).get({ + url: "/formatter", + ...options, + ...params, + }) + } } export class Control extends HeyApiClient { - /** - * Get the next TUI request from the queue - */ - public next(parameters?: { - directory?: string; - }, options?: Options) { - const params = buildClientParams([parameters], [{ args: [{ in: 'query', key: 'directory' }] }]); - return (options?.client ?? this.client).get({ - url: '/tui/control/next', - ...options, - ...params - }); - } - - /** - * Submit a response to the TUI request queue - */ - public response(parameters?: { - directory?: string; - body?: unknown; - }, options?: Options) { - const params = buildClientParams([parameters], [{ args: [{ in: 'query', key: 'directory' }, { in: 'body' }] }]); - return (options?.client ?? this.client).post({ - url: '/tui/control/response', - ...options, - ...params, - headers: { - 'Content-Type': 'application/json', - ...options?.headers, - ...params.headers - } - }); - } + /** + * Get the next TUI request from the queue + */ + public next( + parameters?: { + directory?: string + }, + options?: Options, + ) { + const params = buildClientParams([parameters], [{ args: [{ in: "query", key: "directory" }] }]) + return (options?.client ?? this.client).get({ + url: "/tui/control/next", + ...options, + ...params, + }) + } + + /** + * Submit a response to the TUI request queue + */ + public response( + parameters?: { + directory?: string + body?: unknown + }, + options?: Options, + ) { + const params = buildClientParams([parameters], [{ args: [{ in: "query", key: "directory" }, { in: "body" }] }]) + return (options?.client ?? this.client).post({ + url: "/tui/control/response", + ...options, + ...params, + headers: { + "Content-Type": "application/json", + ...options?.headers, + ...params.headers, + }, + }) + } } export class Tui extends HeyApiClient { - /** - * Append prompt to the TUI - */ - public appendPrompt(parameters?: { - directory?: string; - text?: string; - }, options?: Options) { - const params = buildClientParams([parameters], [{ args: [{ in: 'query', key: 'directory' }, { in: 'body', key: 'text' }] }]); - return (options?.client ?? this.client).post({ - url: '/tui/append-prompt', - ...options, - ...params, - headers: { - 'Content-Type': 'application/json', - ...options?.headers, - ...params.headers - } - }); - } - - /** - * Open the help dialog - */ - public openHelp(parameters?: { - directory?: string; - }, options?: Options) { - const params = buildClientParams([parameters], [{ args: [{ in: 'query', key: 'directory' }] }]); - return (options?.client ?? this.client).post({ - url: '/tui/open-help', - ...options, - ...params - }); - } - - /** - * Open the session dialog - */ - public openSessions(parameters?: { - directory?: string; - }, options?: Options) { - const params = buildClientParams([parameters], [{ args: [{ in: 'query', key: 'directory' }] }]); - return (options?.client ?? this.client).post({ - url: '/tui/open-sessions', - ...options, - ...params - }); - } - - /** - * Open the theme dialog - */ - public openThemes(parameters?: { - directory?: string; - }, options?: Options) { - const params = buildClientParams([parameters], [{ args: [{ in: 'query', key: 'directory' }] }]); - return (options?.client ?? this.client).post({ - url: '/tui/open-themes', - ...options, - ...params - }); - } - - /** - * Open the model dialog - */ - public openModels(parameters?: { - directory?: string; - }, options?: Options) { - const params = buildClientParams([parameters], [{ args: [{ in: 'query', key: 'directory' }] }]); - return (options?.client ?? this.client).post({ - url: '/tui/open-models', - ...options, - ...params - }); - } - - /** - * Submit the prompt - */ - public submitPrompt(parameters?: { - directory?: string; - }, options?: Options) { - const params = buildClientParams([parameters], [{ args: [{ in: 'query', key: 'directory' }] }]); - return (options?.client ?? this.client).post({ - url: '/tui/submit-prompt', - ...options, - ...params - }); - } - - /** - * Clear the prompt - */ - public clearPrompt(parameters?: { - directory?: string; - }, options?: Options) { - const params = buildClientParams([parameters], [{ args: [{ in: 'query', key: 'directory' }] }]); - return (options?.client ?? this.client).post({ - url: '/tui/clear-prompt', - ...options, - ...params - }); - } - - /** - * Execute a TUI command (e.g. agent_cycle) - */ - public executeCommand(parameters?: { - directory?: string; - command?: string; - }, options?: Options) { - const params = buildClientParams([parameters], [{ args: [{ in: 'query', key: 'directory' }, { in: 'body', key: 'command' }] }]); - return (options?.client ?? this.client).post({ - url: '/tui/execute-command', - ...options, - ...params, - headers: { - 'Content-Type': 'application/json', - ...options?.headers, - ...params.headers - } - }); - } - - /** - * Show a toast notification in the TUI - */ - public showToast(parameters?: { - directory?: string; - title?: string; - message?: string; - variant?: 'info' | 'success' | 'warning' | 'error'; - duration?: number; - }, options?: Options) { - const params = buildClientParams([parameters], [{ args: [ - { in: 'query', key: 'directory' }, - { in: 'body', key: 'title' }, - { in: 'body', key: 'message' }, - { in: 'body', key: 'variant' }, - { in: 'body', key: 'duration' } - ] }]); - return (options?.client ?? this.client).post({ - url: '/tui/show-toast', - ...options, - ...params, - headers: { - 'Content-Type': 'application/json', - ...options?.headers, - ...params.headers - } - }); - } - - /** - * Publish a TUI event - */ - public publish(parameters?: { - directory?: string; - body?: EventTuiPromptAppend | EventTuiCommandExecute | EventTuiToastShow; - }, options?: Options) { - const params = buildClientParams([parameters], [{ args: [{ in: 'query', key: 'directory' }, { in: 'body' }] }]); - return (options?.client ?? this.client).post({ - url: '/tui/publish', - ...options, - ...params, - headers: { - 'Content-Type': 'application/json', - ...options?.headers, - ...params.headers - } - }); - } - - control = new Control({ client: this.client }); + /** + * Append prompt to the TUI + */ + public appendPrompt( + parameters?: { + directory?: string + text?: string + }, + options?: Options, + ) { + const params = buildClientParams( + [parameters], + [ + { + args: [ + { in: "query", key: "directory" }, + { in: "body", key: "text" }, + ], + }, + ], + ) + return (options?.client ?? this.client).post({ + url: "/tui/append-prompt", + ...options, + ...params, + headers: { + "Content-Type": "application/json", + ...options?.headers, + ...params.headers, + }, + }) + } + + /** + * Open the help dialog + */ + public openHelp( + parameters?: { + directory?: string + }, + options?: Options, + ) { + const params = buildClientParams([parameters], [{ args: [{ in: "query", key: "directory" }] }]) + return (options?.client ?? this.client).post({ + url: "/tui/open-help", + ...options, + ...params, + }) + } + + /** + * Open the session dialog + */ + public openSessions( + parameters?: { + directory?: string + }, + options?: Options, + ) { + const params = buildClientParams([parameters], [{ args: [{ in: "query", key: "directory" }] }]) + return (options?.client ?? this.client).post({ + url: "/tui/open-sessions", + ...options, + ...params, + }) + } + + /** + * Open the theme dialog + */ + public openThemes( + parameters?: { + directory?: string + }, + options?: Options, + ) { + const params = buildClientParams([parameters], [{ args: [{ in: "query", key: "directory" }] }]) + return (options?.client ?? this.client).post({ + url: "/tui/open-themes", + ...options, + ...params, + }) + } + + /** + * Open the model dialog + */ + public openModels( + parameters?: { + directory?: string + }, + options?: Options, + ) { + const params = buildClientParams([parameters], [{ args: [{ in: "query", key: "directory" }] }]) + return (options?.client ?? this.client).post({ + url: "/tui/open-models", + ...options, + ...params, + }) + } + + /** + * Submit the prompt + */ + public submitPrompt( + parameters?: { + directory?: string + }, + options?: Options, + ) { + const params = buildClientParams([parameters], [{ args: [{ in: "query", key: "directory" }] }]) + return (options?.client ?? this.client).post({ + url: "/tui/submit-prompt", + ...options, + ...params, + }) + } + + /** + * Clear the prompt + */ + public clearPrompt( + parameters?: { + directory?: string + }, + options?: Options, + ) { + const params = buildClientParams([parameters], [{ args: [{ in: "query", key: "directory" }] }]) + return (options?.client ?? this.client).post({ + url: "/tui/clear-prompt", + ...options, + ...params, + }) + } + + /** + * Execute a TUI command (e.g. agent_cycle) + */ + public executeCommand( + parameters?: { + directory?: string + command?: string + }, + options?: Options, + ) { + const params = buildClientParams( + [parameters], + [ + { + args: [ + { in: "query", key: "directory" }, + { in: "body", key: "command" }, + ], + }, + ], + ) + return (options?.client ?? this.client).post({ + url: "/tui/execute-command", + ...options, + ...params, + headers: { + "Content-Type": "application/json", + ...options?.headers, + ...params.headers, + }, + }) + } + + /** + * Show a toast notification in the TUI + */ + public showToast( + parameters?: { + directory?: string + title?: string + message?: string + variant?: "info" | "success" | "warning" | "error" + duration?: number + }, + options?: Options, + ) { + const params = buildClientParams( + [parameters], + [ + { + args: [ + { in: "query", key: "directory" }, + { in: "body", key: "title" }, + { in: "body", key: "message" }, + { in: "body", key: "variant" }, + { in: "body", key: "duration" }, + ], + }, + ], + ) + return (options?.client ?? this.client).post({ + url: "/tui/show-toast", + ...options, + ...params, + headers: { + "Content-Type": "application/json", + ...options?.headers, + ...params.headers, + }, + }) + } + + /** + * Publish a TUI event + */ + public publish( + parameters?: { + directory?: string + body?: EventTuiPromptAppend | EventTuiCommandExecute | EventTuiToastShow + }, + options?: Options, + ) { + const params = buildClientParams([parameters], [{ args: [{ in: "query", key: "directory" }, { in: "body" }] }]) + return (options?.client ?? this.client).post({ + url: "/tui/publish", + ...options, + ...params, + headers: { + "Content-Type": "application/json", + ...options?.headers, + ...params.headers, + }, + }) + } + + control = new Control({ client: this.client }) } export class Event extends HeyApiClient { - /** - * Get events - */ - public subscribe(parameters?: { - directory?: string; - }, options?: Options) { - const params = buildClientParams([parameters], [{ args: [{ in: 'query', key: 'directory' }] }]); - return (options?.client ?? this.client).sse.get({ - url: '/event', - ...options, - ...params - }); - } + /** + * Get events + */ + public subscribe( + parameters?: { + directory?: string + }, + options?: Options, + ) { + const params = buildClientParams([parameters], [{ args: [{ in: "query", key: "directory" }] }]) + return (options?.client ?? this.client).sse.get({ + url: "/event", + ...options, + ...params, + }) + } } export class OpencodeClient extends HeyApiClient { - public static readonly __registry = new HeyApiRegistry(); - - constructor(args?: { - client?: Client; - key?: string; - }) { - super(args); - OpencodeClient.__registry.set(this, args?.key); - } - - global = new Global({ client: this.client }); - - project = new Project({ client: this.client }); - - pty = new Pty({ client: this.client }); - - config = new Config({ client: this.client }); - - tool = new Tool({ client: this.client }); - - instance = new Instance({ client: this.client }); - - path = new Path({ client: this.client }); - - vcs = new Vcs({ client: this.client }); - - session = new Session({ client: this.client }); - - permission = new Permission({ client: this.client }); - - command = new Command({ client: this.client }); - - provider = new Provider({ client: this.client }); - - find = new Find({ client: this.client }); - - file = new File({ client: this.client }); - - app = new App({ client: this.client }); - - mcp = new Mcp({ client: this.client }); - - lsp = new Lsp({ client: this.client }); - - formatter = new Formatter({ client: this.client }); - - tui = new Tui({ client: this.client }); - - auth = new Auth({ client: this.client }); - - event = new Event({ client: this.client }); + public static readonly __registry = new HeyApiRegistry() + + constructor(args?: { client?: Client; key?: string }) { + super(args) + OpencodeClient.__registry.set(this, args?.key) + } + + global = new Global({ client: this.client }) + + project = new Project({ client: this.client }) + + pty = new Pty({ client: this.client }) + + config = new Config({ client: this.client }) + + tool = new Tool({ client: this.client }) + + instance = new Instance({ client: this.client }) + + path = new Path({ client: this.client }) + + vcs = new Vcs({ client: this.client }) + + session = new Session({ client: this.client }) + + permission = new Permission({ client: this.client }) + + command = new Command({ client: this.client }) + + provider = new Provider({ client: this.client }) + + find = new Find({ client: this.client }) + + file = new File({ client: this.client }) + + app = new App({ client: this.client }) + + mcp = new Mcp({ client: this.client }) + + lsp = new Lsp({ client: this.client }) + + formatter = new Formatter({ client: this.client }) + + tui = new Tui({ client: this.client }) + + auth = new Auth({ client: this.client }) + + event = new Event({ 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 3f04c96a19..8bbfa40a32 100644 --- a/packages/sdk/js/src/v2/gen/types.gen.ts +++ b/packages/sdk/js/src/v2/gen/types.gen.ts @@ -1,3748 +1,3845 @@ // This file is auto-generated by @hey-api/openapi-ts export type ClientOptions = { - baseUrl: `${string}://${string}` | (string & {}); -}; + baseUrl: `${string}://${string}` | (string & {}) +} export type EventServerInstanceDisposed = { - type: 'server.instance.disposed'; - properties: { - directory: string; - }; -}; + type: "server.instance.disposed" + properties: { + directory: string + } +} export type EventInstallationUpdated = { - type: 'installation.updated'; - properties: { - version: string; - }; -}; + type: "installation.updated" + properties: { + version: string + } +} export type EventInstallationUpdateAvailable = { - type: 'installation.update-available'; - properties: { - version: string; - }; -}; + type: "installation.update-available" + properties: { + version: string + } +} export type EventLspClientDiagnostics = { - type: 'lsp.client.diagnostics'; - properties: { - serverID: string; - path: string; - }; -}; + type: "lsp.client.diagnostics" + properties: { + serverID: string + path: string + } +} export type EventLspUpdated = { - type: 'lsp.updated'; - properties: { - [key: string]: unknown; - }; -}; + type: "lsp.updated" + properties: { + [key: string]: unknown + } +} export type FileDiff = { - file: string; - before: string; - after: string; - additions: number; - deletions: number; -}; + file: string + before: string + after: string + additions: number + deletions: number +} export type UserMessage = { - id: string; - sessionID: string; - role: 'user'; - time: { - created: number; - }; - summary?: { - title?: string; - body?: string; - diffs: Array; - }; - agent: string; - model: { - providerID: string; - modelID: string; - }; - system?: string; - tools?: { - [key: string]: boolean; - }; -}; + id: string + sessionID: string + role: "user" + time: { + created: number + } + summary?: { + title?: string + body?: string + diffs: Array + } + agent: string + model: { + providerID: string + modelID: string + } + system?: string + tools?: { + [key: string]: boolean + } +} export type ProviderAuthError = { - name: 'ProviderAuthError'; - data: { - providerID: string; - message: string; - }; -}; + name: "ProviderAuthError" + data: { + providerID: string + message: string + } +} export type UnknownError = { - name: 'UnknownError'; - data: { - message: string; - }; -}; + name: "UnknownError" + data: { + message: string + } +} export type MessageOutputLengthError = { - name: 'MessageOutputLengthError'; - data: { - [key: string]: unknown; - }; -}; + name: "MessageOutputLengthError" + data: { + [key: string]: unknown + } +} export type MessageAbortedError = { - name: 'MessageAbortedError'; - data: { - message: string; - }; -}; + name: "MessageAbortedError" + data: { + message: string + } +} export type ApiError = { - name: 'APIError'; - data: { - message: string; - statusCode?: number; - isRetryable: boolean; - responseHeaders?: { - [key: string]: string; - }; - responseBody?: string; - }; -}; + name: "APIError" + data: { + message: string + statusCode?: number + isRetryable: boolean + responseHeaders?: { + [key: string]: string + } + responseBody?: string + } +} export type AssistantMessage = { - id: string; - sessionID: string; - role: 'assistant'; - time: { - created: number; - completed?: number; - }; - error?: ProviderAuthError | UnknownError | MessageOutputLengthError | MessageAbortedError | ApiError; - parentID: string; - modelID: string; - providerID: string; - mode: string; - path: { - cwd: string; - root: string; - }; - summary?: boolean; - cost: number; - tokens: { - input: number; - output: number; - reasoning: number; - cache: { - read: number; - write: number; - }; - }; - finish?: string; -}; + id: string + sessionID: string + role: "assistant" + time: { + created: number + completed?: number + } + error?: ProviderAuthError | UnknownError | MessageOutputLengthError | MessageAbortedError | ApiError + parentID: string + modelID: string + providerID: string + mode: string + path: { + cwd: string + root: string + } + summary?: boolean + cost: number + tokens: { + input: number + output: number + reasoning: number + cache: { + read: number + write: number + } + } + finish?: string +} -export type Message = UserMessage | AssistantMessage; +export type Message = UserMessage | AssistantMessage export type EventMessageUpdated = { - type: 'message.updated'; - properties: { - info: Message; - }; -}; + type: "message.updated" + properties: { + info: Message + } +} export type EventMessageRemoved = { - type: 'message.removed'; - properties: { - sessionID: string; - messageID: string; - }; -}; + type: "message.removed" + properties: { + sessionID: string + messageID: string + } +} export type TextPart = { - id: string; - sessionID: string; - messageID: string; - type: 'text'; - text: string; - synthetic?: boolean; - ignored?: boolean; - time?: { - start: number; - end?: number; - }; - metadata?: { - [key: string]: unknown; - }; -}; + id: string + sessionID: string + messageID: string + type: "text" + text: string + synthetic?: boolean + ignored?: boolean + time?: { + start: number + end?: number + } + metadata?: { + [key: string]: unknown + } +} export type ReasoningPart = { - id: string; - sessionID: string; - messageID: string; - type: 'reasoning'; - text: string; - metadata?: { - [key: string]: unknown; - }; - time: { - start: number; - end?: number; - }; -}; + id: string + sessionID: string + messageID: string + type: "reasoning" + text: string + metadata?: { + [key: string]: unknown + } + time: { + start: number + end?: number + } +} export type FilePartSourceText = { - value: string; - start: number; - end: number; -}; + value: string + start: number + end: number +} export type FileSource = { - text: FilePartSourceText; - type: 'file'; - path: string; -}; + text: FilePartSourceText + type: "file" + path: string +} export type Range = { - start: { - line: number; - character: number; - }; - end: { - line: number; - character: number; - }; -}; + start: { + line: number + character: number + } + end: { + line: number + character: number + } +} export type SymbolSource = { - text: FilePartSourceText; - type: 'symbol'; - path: string; - range: Range; - name: string; - kind: number; -}; + text: FilePartSourceText + type: "symbol" + path: string + range: Range + name: string + kind: number +} -export type FilePartSource = FileSource | SymbolSource; +export type FilePartSource = FileSource | SymbolSource export type FilePart = { - id: string; - sessionID: string; - messageID: string; - type: 'file'; - mime: string; - filename?: string; - url: string; - source?: FilePartSource; -}; + id: string + sessionID: string + messageID: string + type: "file" + mime: string + filename?: string + url: string + source?: FilePartSource +} export type ToolStatePending = { - status: 'pending'; - input: { - [key: string]: unknown; - }; - raw: string; -}; + status: "pending" + input: { + [key: string]: unknown + } + raw: string +} export type ToolStateRunning = { - status: 'running'; - input: { - [key: string]: unknown; - }; - title?: string; - metadata?: { - [key: string]: unknown; - }; - time: { - start: number; - }; -}; + status: "running" + input: { + [key: string]: unknown + } + title?: string + metadata?: { + [key: string]: unknown + } + time: { + start: number + } +} export type ToolStateCompleted = { - status: 'completed'; - input: { - [key: string]: unknown; - }; - output: string; - title: string; - metadata: { - [key: string]: unknown; - }; - time: { - start: number; - end: number; - compacted?: number; - }; - attachments?: Array; -}; + status: "completed" + input: { + [key: string]: unknown + } + output: string + title: string + metadata: { + [key: string]: unknown + } + time: { + start: number + end: number + compacted?: number + } + attachments?: Array +} export type ToolStateError = { - status: 'error'; - input: { - [key: string]: unknown; - }; - error: string; - metadata?: { - [key: string]: unknown; - }; - time: { - start: number; - end: number; - }; -}; + status: "error" + input: { + [key: string]: unknown + } + error: string + metadata?: { + [key: string]: unknown + } + time: { + start: number + end: number + } +} -export type ToolState = ToolStatePending | ToolStateRunning | ToolStateCompleted | ToolStateError; +export type ToolState = ToolStatePending | ToolStateRunning | ToolStateCompleted | ToolStateError export type ToolPart = { - id: string; - sessionID: string; - messageID: string; - type: 'tool'; - callID: string; - tool: string; - state: ToolState; - metadata?: { - [key: string]: unknown; - }; -}; + id: string + sessionID: string + messageID: string + type: "tool" + callID: string + tool: string + state: ToolState + metadata?: { + [key: string]: unknown + } +} export type StepStartPart = { - id: string; - sessionID: string; - messageID: string; - type: 'step-start'; - snapshot?: string; -}; + id: string + sessionID: string + messageID: string + type: "step-start" + snapshot?: string +} export type StepFinishPart = { - id: string; - sessionID: string; - messageID: string; - type: 'step-finish'; - reason: string; - snapshot?: string; - cost: number; - tokens: { - input: number; - output: number; - reasoning: number; - cache: { - read: number; - write: number; - }; - }; -}; + id: string + sessionID: string + messageID: string + type: "step-finish" + reason: string + snapshot?: string + cost: number + tokens: { + input: number + output: number + reasoning: number + cache: { + read: number + write: number + } + } +} export type SnapshotPart = { - id: string; - sessionID: string; - messageID: string; - type: 'snapshot'; - snapshot: string; -}; + id: string + sessionID: string + messageID: string + type: "snapshot" + snapshot: string +} export type PatchPart = { - id: string; - sessionID: string; - messageID: string; - type: 'patch'; - hash: string; - files: Array; -}; + id: string + sessionID: string + messageID: string + type: "patch" + hash: string + files: Array +} export type AgentPart = { - id: string; - sessionID: string; - messageID: string; - type: 'agent'; - name: string; - source?: { - value: string; - start: number; - end: number; - }; -}; + id: string + sessionID: string + messageID: string + type: "agent" + name: string + source?: { + value: string + start: number + end: number + } +} export type RetryPart = { - id: string; - sessionID: string; - messageID: string; - type: 'retry'; - attempt: number; - error: ApiError; - time: { - created: number; - }; -}; + id: string + sessionID: string + messageID: string + type: "retry" + attempt: number + error: ApiError + time: { + created: number + } +} export type CompactionPart = { - id: string; - sessionID: string; - messageID: string; - type: 'compaction'; - auto: boolean; -}; + id: string + sessionID: string + messageID: string + type: "compaction" + auto: boolean +} -export type Part = TextPart | { - id: string; - sessionID: string; - messageID: string; - type: 'subtask'; - prompt: string; - description: string; - agent: string; -} | ReasoningPart | FilePart | ToolPart | StepStartPart | StepFinishPart | SnapshotPart | PatchPart | AgentPart | RetryPart | CompactionPart; +export type Part = + | TextPart + | { + id: string + sessionID: string + messageID: string + type: "subtask" + prompt: string + description: string + agent: string + } + | ReasoningPart + | FilePart + | ToolPart + | StepStartPart + | StepFinishPart + | SnapshotPart + | PatchPart + | AgentPart + | RetryPart + | CompactionPart export type EventMessagePartUpdated = { - type: 'message.part.updated'; - properties: { - part: Part; - delta?: string; - }; -}; + type: "message.part.updated" + properties: { + part: Part + delta?: string + } +} export type EventMessagePartRemoved = { - type: 'message.part.removed'; - properties: { - sessionID: string; - messageID: string; - partID: string; - }; -}; + type: "message.part.removed" + properties: { + sessionID: string + messageID: string + partID: string + } +} export type Permission = { - id: string; - type: string; - pattern?: string | Array; - sessionID: string; - messageID: string; - callID?: string; - title: string; - metadata: { - [key: string]: unknown; - }; - time: { - created: number; - }; -}; + id: string + type: string + pattern?: string | Array + sessionID: string + messageID: string + callID?: string + title: string + metadata: { + [key: string]: unknown + } + time: { + created: number + } +} export type EventPermissionUpdated = { - type: 'permission.updated'; - properties: Permission; -}; + type: "permission.updated" + properties: Permission +} export type EventPermissionReplied = { - type: 'permission.replied'; - properties: { - sessionID: string; - permissionID: string; - response: string; - }; -}; + type: "permission.replied" + properties: { + sessionID: string + permissionID: string + response: string + } +} -export type SessionStatus = { - type: 'idle'; -} | { - type: 'retry'; - attempt: number; - message: string; - next: number; -} | { - type: 'busy'; -}; +export type SessionStatus = + | { + type: "idle" + } + | { + type: "retry" + attempt: number + message: string + next: number + } + | { + type: "busy" + } export type EventSessionStatus = { - type: 'session.status'; - properties: { - sessionID: string; - status: SessionStatus; - }; -}; + type: "session.status" + properties: { + sessionID: string + status: SessionStatus + } +} export type EventSessionIdle = { - type: 'session.idle'; - properties: { - sessionID: string; - }; -}; + type: "session.idle" + properties: { + sessionID: string + } +} export type EventSessionCompacted = { - type: 'session.compacted'; - properties: { - sessionID: string; - }; -}; + type: "session.compacted" + properties: { + sessionID: string + } +} export type EventFileEdited = { - type: 'file.edited'; - properties: { - file: string; - }; -}; + type: "file.edited" + properties: { + file: string + } +} export type Todo = { - /** - * Brief description of the task - */ - content: string; - /** - * Current status of the task: pending, in_progress, completed, cancelled - */ - status: string; - /** - * Priority level of the task: high, medium, low - */ - priority: string; - /** - * Unique identifier for the todo item - */ - id: string; -}; + /** + * Brief description of the task + */ + content: string + /** + * Current status of the task: pending, in_progress, completed, cancelled + */ + status: string + /** + * Priority level of the task: high, medium, low + */ + priority: string + /** + * Unique identifier for the todo item + */ + id: string +} export type EventTodoUpdated = { - type: 'todo.updated'; - properties: { - sessionID: string; - todos: Array; - }; -}; + type: "todo.updated" + properties: { + sessionID: string + todos: Array + } +} export type EventCommandExecuted = { - type: 'command.executed'; - properties: { - name: string; - sessionID: string; - arguments: string; - messageID: string; - }; -}; + type: "command.executed" + properties: { + name: string + sessionID: string + arguments: string + messageID: string + } +} export type Session = { - id: string; - projectID: string; - directory: string; - parentID?: string; - summary?: { - additions: number; - deletions: number; - files: number; - diffs?: Array; - }; - share?: { - url: string; - }; - title: string; - version: string; - time: { - created: number; - updated: number; - compacting?: number; - }; - revert?: { - messageID: string; - partID?: string; - snapshot?: string; - diff?: string; - }; -}; + id: string + projectID: string + directory: string + parentID?: string + summary?: { + additions: number + deletions: number + files: number + diffs?: Array + } + share?: { + url: string + } + title: string + version: string + time: { + created: number + updated: number + compacting?: number + } + revert?: { + messageID: string + partID?: string + snapshot?: string + diff?: string + } +} export type EventSessionCreated = { - type: 'session.created'; - properties: { - info: Session; - }; -}; + type: "session.created" + properties: { + info: Session + } +} export type EventSessionUpdated = { - type: 'session.updated'; - properties: { - info: Session; - }; -}; + type: "session.updated" + properties: { + info: Session + } +} export type EventSessionDeleted = { - type: 'session.deleted'; - properties: { - info: Session; - }; -}; + type: "session.deleted" + properties: { + info: Session + } +} export type EventSessionDiff = { - type: 'session.diff'; - properties: { - sessionID: string; - diff: Array; - }; -}; + type: "session.diff" + properties: { + sessionID: string + diff: Array + } +} export type EventSessionError = { - type: 'session.error'; - properties: { - sessionID?: string; - error?: ProviderAuthError | UnknownError | MessageOutputLengthError | MessageAbortedError | ApiError; - }; -}; + type: "session.error" + properties: { + sessionID?: string + error?: ProviderAuthError | UnknownError | MessageOutputLengthError | MessageAbortedError | ApiError + } +} export type EventFileWatcherUpdated = { - type: 'file.watcher.updated'; - properties: { - file: string; - event: 'add' | 'change' | 'unlink'; - }; -}; + type: "file.watcher.updated" + properties: { + file: string + event: "add" | "change" | "unlink" + } +} export type EventVcsBranchUpdated = { - type: 'vcs.branch.updated'; - properties: { - branch?: string; - }; -}; + type: "vcs.branch.updated" + properties: { + branch?: string + } +} export type EventTuiPromptAppend = { - type: 'tui.prompt.append'; - properties: { - text: string; - }; -}; + type: "tui.prompt.append" + properties: { + text: string + } +} export type EventTuiCommandExecute = { - type: 'tui.command.execute'; - properties: { - command: 'session.list' | 'session.new' | 'session.share' | 'session.interrupt' | 'session.compact' | 'session.page.up' | 'session.page.down' | 'session.half.page.up' | 'session.half.page.down' | 'session.first' | 'session.last' | 'prompt.clear' | 'prompt.submit' | 'agent.cycle' | string; - }; -}; + type: "tui.command.execute" + properties: { + command: + | "session.list" + | "session.new" + | "session.share" + | "session.interrupt" + | "session.compact" + | "session.page.up" + | "session.page.down" + | "session.half.page.up" + | "session.half.page.down" + | "session.first" + | "session.last" + | "prompt.clear" + | "prompt.submit" + | "agent.cycle" + | string + } +} export type EventTuiToastShow = { - type: 'tui.toast.show'; - properties: { - title?: string; - message: string; - variant: 'info' | 'success' | 'warning' | 'error'; - /** - * Duration in milliseconds - */ - duration?: number; - }; -}; + type: "tui.toast.show" + properties: { + title?: string + message: string + variant: "info" | "success" | "warning" | "error" + /** + * Duration in milliseconds + */ + duration?: number + } +} export type Pty = { - id: string; - title: string; - command: string; - args: Array; - cwd: string; - status: 'running' | 'exited'; - pid: number; -}; + id: string + title: string + command: string + args: Array + cwd: string + status: "running" | "exited" + pid: number +} export type EventPtyCreated = { - type: 'pty.created'; - properties: { - info: Pty; - }; -}; + type: "pty.created" + properties: { + info: Pty + } +} export type EventPtyUpdated = { - type: 'pty.updated'; - properties: { - info: Pty; - }; -}; + type: "pty.updated" + properties: { + info: Pty + } +} export type EventPtyExited = { - type: 'pty.exited'; - properties: { - id: string; - exitCode: number; - }; -}; + type: "pty.exited" + properties: { + id: string + exitCode: number + } +} export type EventPtyDeleted = { - type: 'pty.deleted'; - properties: { - id: string; - }; -}; + type: "pty.deleted" + properties: { + id: string + } +} export type EventServerConnected = { - type: 'server.connected'; - properties: { - [key: string]: unknown; - }; -}; + type: "server.connected" + properties: { + [key: string]: unknown + } +} -export type Event = EventServerInstanceDisposed | EventInstallationUpdated | EventInstallationUpdateAvailable | EventLspClientDiagnostics | EventLspUpdated | EventMessageUpdated | EventMessageRemoved | EventMessagePartUpdated | EventMessagePartRemoved | EventPermissionUpdated | EventPermissionReplied | EventSessionStatus | EventSessionIdle | EventSessionCompacted | EventFileEdited | EventTodoUpdated | EventCommandExecuted | EventSessionCreated | EventSessionUpdated | EventSessionDeleted | EventSessionDiff | EventSessionError | EventFileWatcherUpdated | EventVcsBranchUpdated | EventTuiPromptAppend | EventTuiCommandExecute | EventTuiToastShow | EventPtyCreated | EventPtyUpdated | EventPtyExited | EventPtyDeleted | EventServerConnected; +export type Event = + | EventServerInstanceDisposed + | EventInstallationUpdated + | EventInstallationUpdateAvailable + | EventLspClientDiagnostics + | EventLspUpdated + | EventMessageUpdated + | EventMessageRemoved + | EventMessagePartUpdated + | EventMessagePartRemoved + | EventPermissionUpdated + | EventPermissionReplied + | EventSessionStatus + | EventSessionIdle + | EventSessionCompacted + | EventFileEdited + | EventTodoUpdated + | EventCommandExecuted + | EventSessionCreated + | EventSessionUpdated + | EventSessionDeleted + | EventSessionDiff + | EventSessionError + | EventFileWatcherUpdated + | EventVcsBranchUpdated + | EventTuiPromptAppend + | EventTuiCommandExecute + | EventTuiToastShow + | EventPtyCreated + | EventPtyUpdated + | EventPtyExited + | EventPtyDeleted + | EventServerConnected export type GlobalEvent = { - directory: string; - payload: Event; -}; + directory: string + payload: Event +} export type Project = { - id: string; - worktree: string; - vcsDir?: string; - vcs?: 'git'; - time: { - created: number; - initialized?: number; - }; -}; + id: string + worktree: string + vcsDir?: string + vcs?: "git" + time: { + created: number + initialized?: number + } +} export type BadRequestError = { - data: unknown; - errors: Array<{ - [key: string]: unknown; - }>; - success: false; -}; + data: unknown + errors: Array<{ + [key: string]: unknown + }> + success: false +} export type NotFoundError = { - name: 'NotFoundError'; - data: { - message: string; - }; -}; + name: "NotFoundError" + data: { + message: string + } +} /** * Custom keybind configurations */ export type KeybindsConfig = { - /** - * Leader key for keybind combinations - */ - leader?: string; - /** - * Exit the application - */ - app_exit?: string; - /** - * Open external editor - */ - editor_open?: string; - /** - * List available themes - */ - theme_list?: string; - /** - * Toggle sidebar - */ - sidebar_toggle?: string; - /** - * Toggle session scrollbar - */ - scrollbar_toggle?: string; - /** - * Toggle username visibility - */ - username_toggle?: string; - /** - * View status - */ - status_view?: string; - /** - * Export session to editor - */ - session_export?: string; - /** - * Create a new session - */ - session_new?: string; - /** - * List all sessions - */ - session_list?: string; - /** - * Show session timeline - */ - session_timeline?: string; - /** - * Share current session - */ - session_share?: string; - /** - * Unshare current session - */ - session_unshare?: string; - /** - * Interrupt current session - */ - session_interrupt?: string; - /** - * Compact the session - */ - session_compact?: string; - /** - * Scroll messages up by one page - */ - messages_page_up?: string; - /** - * Scroll messages down by one page - */ - messages_page_down?: string; - /** - * Scroll messages up by half page - */ - messages_half_page_up?: string; - /** - * Scroll messages down by half page - */ - messages_half_page_down?: string; - /** - * Navigate to first message - */ - messages_first?: string; - /** - * Navigate to last message - */ - messages_last?: string; - /** - * Navigate to last user message - */ - messages_last_user?: string; - /** - * Copy message - */ - messages_copy?: string; - /** - * Undo message - */ - messages_undo?: string; - /** - * Redo message - */ - messages_redo?: string; - /** - * Toggle code block concealment in messages - */ - messages_toggle_conceal?: string; - /** - * Toggle tool details visibility - */ - tool_details?: string; - /** - * List available models - */ - model_list?: string; - /** - * Next recently used model - */ - model_cycle_recent?: string; - /** - * Previous recently used model - */ - model_cycle_recent_reverse?: string; - /** - * List available commands - */ - command_list?: string; - /** - * List agents - */ - agent_list?: string; - /** - * Next agent - */ - agent_cycle?: string; - /** - * Previous agent - */ - agent_cycle_reverse?: string; - /** - * Clear input field - */ - input_clear?: string; - /** - * Forward delete - */ - input_forward_delete?: string; - /** - * Paste from clipboard - */ - input_paste?: string; - /** - * Submit input - */ - input_submit?: string; - /** - * Insert newline in input - */ - input_newline?: string; - /** - * Previous history item - */ - history_previous?: string; - /** - * Next history item - */ - history_next?: string; - /** - * Next child session - */ - session_child_cycle?: string; - /** - * Previous child session - */ - session_child_cycle_reverse?: string; - /** - * Suspend terminal - */ - terminal_suspend?: string; -}; + /** + * Leader key for keybind combinations + */ + leader?: string + /** + * Exit the application + */ + app_exit?: string + /** + * Open external editor + */ + editor_open?: string + /** + * List available themes + */ + theme_list?: string + /** + * Toggle sidebar + */ + sidebar_toggle?: string + /** + * Toggle session scrollbar + */ + scrollbar_toggle?: string + /** + * Toggle username visibility + */ + username_toggle?: string + /** + * View status + */ + status_view?: string + /** + * Export session to editor + */ + session_export?: string + /** + * Create a new session + */ + session_new?: string + /** + * List all sessions + */ + session_list?: string + /** + * Show session timeline + */ + session_timeline?: string + /** + * Share current session + */ + session_share?: string + /** + * Unshare current session + */ + session_unshare?: string + /** + * Interrupt current session + */ + session_interrupt?: string + /** + * Compact the session + */ + session_compact?: string + /** + * Scroll messages up by one page + */ + messages_page_up?: string + /** + * Scroll messages down by one page + */ + messages_page_down?: string + /** + * Scroll messages up by half page + */ + messages_half_page_up?: string + /** + * Scroll messages down by half page + */ + messages_half_page_down?: string + /** + * Navigate to first message + */ + messages_first?: string + /** + * Navigate to last message + */ + messages_last?: string + /** + * Navigate to last user message + */ + messages_last_user?: string + /** + * Copy message + */ + messages_copy?: string + /** + * Undo message + */ + messages_undo?: string + /** + * Redo message + */ + messages_redo?: string + /** + * Toggle code block concealment in messages + */ + messages_toggle_conceal?: string + /** + * Toggle tool details visibility + */ + tool_details?: string + /** + * List available models + */ + model_list?: string + /** + * Next recently used model + */ + model_cycle_recent?: string + /** + * Previous recently used model + */ + model_cycle_recent_reverse?: string + /** + * List available commands + */ + command_list?: string + /** + * List agents + */ + agent_list?: string + /** + * Next agent + */ + agent_cycle?: string + /** + * Previous agent + */ + agent_cycle_reverse?: string + /** + * Clear input field + */ + input_clear?: string + /** + * Forward delete + */ + input_forward_delete?: string + /** + * Paste from clipboard + */ + input_paste?: string + /** + * Submit input + */ + input_submit?: string + /** + * Insert newline in input + */ + input_newline?: string + /** + * Previous history item + */ + history_previous?: string + /** + * Next history item + */ + history_next?: string + /** + * Next child session + */ + session_child_cycle?: string + /** + * Previous child session + */ + session_child_cycle_reverse?: string + /** + * Suspend terminal + */ + terminal_suspend?: string +} export type AgentConfig = { - model?: string; - temperature?: number; - top_p?: number; - prompt?: string; - tools?: { - [key: string]: boolean; - }; - disable?: boolean; - /** - * Description of when to use the agent - */ - description?: string; - mode?: 'subagent' | 'primary' | 'all'; - /** - * Hex color code for the agent (e.g., #FF5733) - */ - color?: string; - /** - * Maximum number of agentic iterations before forcing text-only response - */ - maxSteps?: number; - permission?: { - edit?: 'ask' | 'allow' | 'deny'; - bash?: 'ask' | 'allow' | 'deny' | { - [key: string]: 'ask' | 'allow' | 'deny'; - }; - webfetch?: 'ask' | 'allow' | 'deny'; - doom_loop?: 'ask' | 'allow' | 'deny'; - external_directory?: 'ask' | 'allow' | 'deny'; - }; - [key: string]: unknown | string | number | { - [key: string]: boolean; - } | boolean | 'subagent' | 'primary' | 'all' | string | number | { - edit?: 'ask' | 'allow' | 'deny'; - bash?: 'ask' | 'allow' | 'deny' | { - [key: string]: 'ask' | 'allow' | 'deny'; - }; - webfetch?: 'ask' | 'allow' | 'deny'; - doom_loop?: 'ask' | 'allow' | 'deny'; - external_directory?: 'ask' | 'allow' | 'deny'; - } | undefined; -}; + model?: string + temperature?: number + top_p?: number + prompt?: string + tools?: { + [key: string]: boolean + } + disable?: boolean + /** + * Description of when to use the agent + */ + description?: string + mode?: "subagent" | "primary" | "all" + /** + * Hex color code for the agent (e.g., #FF5733) + */ + color?: string + /** + * Maximum number of agentic iterations before forcing text-only response + */ + maxSteps?: number + permission?: { + edit?: "ask" | "allow" | "deny" + bash?: + | "ask" + | "allow" + | "deny" + | { + [key: string]: "ask" | "allow" | "deny" + } + webfetch?: "ask" | "allow" | "deny" + doom_loop?: "ask" | "allow" | "deny" + external_directory?: "ask" | "allow" | "deny" + } + [key: string]: + | unknown + | string + | number + | { + [key: string]: boolean + } + | boolean + | "subagent" + | "primary" + | "all" + | string + | number + | { + edit?: "ask" | "allow" | "deny" + bash?: + | "ask" + | "allow" + | "deny" + | { + [key: string]: "ask" | "allow" | "deny" + } + webfetch?: "ask" | "allow" | "deny" + doom_loop?: "ask" | "allow" | "deny" + external_directory?: "ask" | "allow" | "deny" + } + | undefined +} export type ProviderConfig = { - api?: string; - name?: string; - env?: Array; - id?: string; - npm?: string; - models?: { - [key: string]: { - id?: string; - name?: string; - release_date?: string; - attachment?: boolean; - reasoning?: boolean; - temperature?: boolean; - tool_call?: boolean; - cost?: { - input: number; - output: number; - cache_read?: number; - cache_write?: number; - context_over_200k?: { - input: number; - output: number; - cache_read?: number; - cache_write?: number; - }; - }; - limit?: { - context: number; - output: number; - }; - modalities?: { - input: Array<'text' | 'audio' | 'image' | 'video' | 'pdf'>; - output: Array<'text' | 'audio' | 'image' | 'video' | 'pdf'>; - }; - experimental?: boolean; - status?: 'alpha' | 'beta' | 'deprecated'; - options?: { - [key: string]: unknown; - }; - headers?: { - [key: string]: string; - }; - provider?: { - npm: string; - }; - }; - }; - whitelist?: Array; - blacklist?: Array; - 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; - [key: string]: unknown | string | boolean | number | false | undefined; - }; -}; + api?: string + name?: string + env?: Array + id?: string + npm?: string + models?: { + [key: string]: { + id?: string + name?: string + release_date?: string + attachment?: boolean + reasoning?: boolean + temperature?: boolean + tool_call?: boolean + cost?: { + input: number + output: number + cache_read?: number + cache_write?: number + context_over_200k?: { + input: number + output: number + cache_read?: number + cache_write?: number + } + } + limit?: { + context: number + output: number + } + modalities?: { + input: Array<"text" | "audio" | "image" | "video" | "pdf"> + output: Array<"text" | "audio" | "image" | "video" | "pdf"> + } + experimental?: boolean + status?: "alpha" | "beta" | "deprecated" + options?: { + [key: string]: unknown + } + headers?: { + [key: string]: string + } + provider?: { + npm: string + } + } + } + whitelist?: Array + blacklist?: Array + 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 + [key: string]: unknown | string | boolean | number | false | undefined + } +} export type McpLocalConfig = { - /** - * Type of MCP server connection - */ - type: 'local'; - /** - * Command and arguments to run the MCP server - */ - command: Array; - /** - * 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 fetching tools from the MCP server. Defaults to 5000 (5 seconds) if not specified. - */ - timeout?: number; -}; + /** + * Type of MCP server connection + */ + type: "local" + /** + * Command and arguments to run the MCP server + */ + command: Array + /** + * 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 fetching tools from the MCP server. 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 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 +} export type McpRemoteConfig = { - /** - * Type of MCP server connection - */ - type: 'remote'; - /** - * 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; - }; - /** - * OAuth authentication configuration for the MCP server. Set to false to disable OAuth auto-detection. - */ - oauth?: McpOAuthConfig | false; - /** - * Timeout in ms for fetching tools from the MCP server. Defaults to 5000 (5 seconds) if not specified. - */ - timeout?: number; -}; + /** + * Type of MCP server connection + */ + type: "remote" + /** + * 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 + } + /** + * OAuth authentication configuration for the MCP server. Set to false to disable OAuth auto-detection. + */ + oauth?: McpOAuthConfig | false + /** + * Timeout in ms for fetching tools from the MCP server. Defaults to 5000 (5 seconds) if not specified. + */ + timeout?: number +} /** * @deprecated Always uses stretch layout. */ -export type LayoutConfig = 'auto' | 'stretch'; +export type LayoutConfig = "auto" | "stretch" export type Config = { + /** + * JSON schema reference for configuration validation + */ + $schema?: string + /** + * Theme name to use for the interface + */ + theme?: string + keybinds?: KeybindsConfig + /** + * TUI specific settings + */ + tui?: { /** - * JSON schema reference for configuration validation + * TUI scroll speed */ - $schema?: string; + scroll_speed?: number /** - * Theme name to use for the interface + * Scroll acceleration settings */ - theme?: string; - keybinds?: KeybindsConfig; + scroll_acceleration?: { + /** + * Enable scroll acceleration + */ + enabled: boolean + } /** - * TUI specific settings + * Control diff rendering style: 'auto' adapts to terminal width, 'stacked' always shows single column */ - tui?: { - /** - * TUI scroll speed - */ - scroll_speed?: number; - /** - * Scroll acceleration settings - */ - scroll_acceleration?: { - /** - * Enable scroll acceleration - */ - enabled: boolean; - }; - /** - * Control diff rendering style: 'auto' adapts to terminal width, 'stacked' always shows single column - */ - diff_style?: 'auto' | 'stacked'; - }; - /** - * Command configuration, see https://opencode.ai/docs/commands - */ - command?: { + diff_style?: "auto" | "stacked" + } + /** + * Command configuration, see https://opencode.ai/docs/commands + */ + command?: { + [key: string]: { + template: string + description?: string + agent?: string + model?: string + subtask?: boolean + } + } + watcher?: { + ignore?: Array + } + plugin?: Array + snapshot?: boolean + /** + * 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 + /** + * When set, ONLY these providers will be enabled. All other providers will be ignored + */ + enabled_providers?: Array + /** + * 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 + /** + * 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/agent + */ + agent?: { + plan?: AgentConfig + build?: AgentConfig + general?: AgentConfig + explore?: 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 | McpRemoteConfig + } + formatter?: + | false + | { [key: string]: { - template: string; - description?: string; - agent?: string; - model?: string; - subtask?: boolean; - }; - }; - watcher?: { - ignore?: Array; - }; - plugin?: Array; - snapshot?: boolean; + disabled?: boolean + command?: Array + environment?: { + [key: string]: string + } + extensions?: Array + } + } + lsp?: + | false + | { + [key: string]: + | { + disabled: true + } + | { + command: Array + extensions?: Array + disabled?: boolean + env?: { + [key: string]: string + } + initialization?: { + [key: string]: unknown + } + } + } + /** + * Additional instruction files or patterns to include + */ + instructions?: Array + layout?: LayoutConfig + permission?: { + edit?: "ask" | "allow" | "deny" + bash?: + | "ask" + | "allow" + | "deny" + | { + [key: string]: "ask" | "allow" | "deny" + } + webfetch?: "ask" | "allow" | "deny" + doom_loop?: "ask" | "allow" | "deny" + external_directory?: "ask" | "allow" | "deny" + } + tools?: { + [key: string]: boolean + } + enterprise?: { /** - * Control sharing behavior:'manual' allows manual sharing via commands, 'auto' enables automatic sharing, 'disabled' disables all sharing + * Enterprise URL */ - share?: 'manual' | 'auto' | 'disabled'; + url?: string + } + experimental?: { + hook?: { + file_edited?: { + [key: string]: Array<{ + command: Array + environment?: { + [key: string]: string + } + }> + } + session_completed?: Array<{ + command: Array + environment?: { + [key: string]: string + } + }> + } /** - * @deprecated Use 'share' field instead. Share newly created sessions automatically + * Number of retries for chat completions on failure */ - autoshare?: boolean; + chatMaxRetries?: number + disable_paste_summary?: boolean /** - * Automatically update to the latest version. Set to true to auto-update, false to disable, or 'notify' to show update notifications + * Enable the batch tool */ - autoupdate?: boolean | 'notify'; + batch_tool?: boolean /** - * Disable providers that are loaded automatically + * Enable OpenTelemetry spans for AI SDK calls (using the 'experimental_telemetry' flag) */ - disabled_providers?: Array; + openTelemetry?: boolean /** - * When set, ONLY these providers will be enabled. All other providers will be ignored + * Tools that should only be available to primary agents. */ - enabled_providers?: Array; - /** - * 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; - /** - * 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/agent - */ - agent?: { - plan?: AgentConfig; - build?: AgentConfig; - general?: AgentConfig; - explore?: 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 | McpRemoteConfig; - }; - formatter?: false | { - [key: string]: { - disabled?: boolean; - command?: Array; - environment?: { - [key: string]: string; - }; - extensions?: Array; - }; - }; - lsp?: false | { - [key: string]: { - disabled: true; - } | { - command: Array; - extensions?: Array; - disabled?: boolean; - env?: { - [key: string]: string; - }; - initialization?: { - [key: string]: unknown; - }; - }; - }; - /** - * Additional instruction files or patterns to include - */ - instructions?: Array; - layout?: LayoutConfig; - permission?: { - edit?: 'ask' | 'allow' | 'deny'; - bash?: 'ask' | 'allow' | 'deny' | { - [key: string]: 'ask' | 'allow' | 'deny'; - }; - webfetch?: 'ask' | 'allow' | 'deny'; - doom_loop?: 'ask' | 'allow' | 'deny'; - external_directory?: 'ask' | 'allow' | 'deny'; - }; - tools?: { - [key: string]: boolean; - }; - enterprise?: { - /** - * Enterprise URL - */ - url?: string; - }; - experimental?: { - hook?: { - file_edited?: { - [key: string]: Array<{ - command: Array; - environment?: { - [key: string]: string; - }; - }>; - }; - session_completed?: Array<{ - command: Array; - environment?: { - [key: string]: string; - }; - }>; - }; - /** - * Number of retries for chat completions on failure - */ - chatMaxRetries?: number; - 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; - }; -}; + primary_tools?: Array + } +} -export type ToolIds = Array; +export type ToolIds = Array export type ToolListItem = { - id: string; - description: string; - parameters: unknown; -}; + id: string + description: string + parameters: unknown +} -export type ToolList = Array; +export type ToolList = Array export type Path = { - state: string; - config: string; - worktree: string; - directory: string; -}; + state: string + config: string + worktree: string + directory: string +} export type VcsInfo = { - branch: string; -}; + branch: string +} export type TextPartInput = { - id?: string; - type: 'text'; - text: string; - synthetic?: boolean; - ignored?: boolean; - time?: { - start: number; - end?: number; - }; - metadata?: { - [key: string]: unknown; - }; -}; + 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; -}; + 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; - }; -}; + 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; -}; + id?: string + type: "subtask" + prompt: string + description: string + agent: string +} export type Command = { - name: string; - description?: string; - agent?: string; - model?: string; - template: string; - subtask?: boolean; -}; + name: string + description?: string + agent?: string + model?: string + template: string + subtask?: boolean +} export type Model = { - id: string; - providerID: string; - api: { - id: string; - url: string; - npm: string; - }; - name: string; - capabilities: { - temperature: boolean; - reasoning: boolean; - attachment: boolean; - toolcall: boolean; - input: { - text: boolean; - audio: boolean; - image: boolean; - video: boolean; - pdf: boolean; - }; - output: { - text: boolean; - audio: boolean; - image: boolean; - video: boolean; - pdf: boolean; - }; - }; - cost: { - input: number; - output: number; - cache: { - read: number; - write: number; - }; - experimentalOver200K?: { - input: number; - output: number; - cache: { - read: number; - write: number; - }; - }; - }; - limit: { - context: number; - output: number; - }; - status: 'alpha' | 'beta' | 'deprecated' | 'active'; - options: { - [key: string]: unknown; - }; - headers: { - [key: string]: string; - }; -}; + id: string + providerID: string + api: { + id: string + url: string + npm: string + } + name: string + capabilities: { + temperature: boolean + reasoning: boolean + attachment: boolean + toolcall: boolean + input: { + text: boolean + audio: boolean + image: boolean + video: boolean + pdf: boolean + } + output: { + text: boolean + audio: boolean + image: boolean + video: boolean + pdf: boolean + } + } + cost: { + input: number + output: number + cache: { + read: number + write: number + } + experimentalOver200K?: { + input: number + output: number + cache: { + read: number + write: number + } + } + } + limit: { + context: number + output: number + } + status: "alpha" | "beta" | "deprecated" | "active" + options: { + [key: string]: unknown + } + headers: { + [key: string]: string + } +} export type Provider = { - id: string; - name: string; - source: 'env' | 'config' | 'custom' | 'api'; - env: Array; - key?: string; - options: { - [key: string]: unknown; - }; - models: { - [key: string]: Model; - }; -}; + id: string + name: string + source: "env" | "config" | "custom" | "api" + env: Array + key?: string + options: { + [key: string]: unknown + } + models: { + [key: string]: Model + } +} export type ProviderAuthMethod = { - type: 'oauth' | 'api'; - label: string; -}; + type: "oauth" | "api" + label: string +} export type ProviderAuthAuthorization = { - url: string; - method: 'auto' | 'code'; - instructions: string; -}; + url: string + method: "auto" | "code" + instructions: string +} export type Symbol = { - name: string; - kind: number; - location: { - uri: string; - range: Range; - }; -}; + name: string + kind: number + location: { + uri: string + range: Range + } +} export type FileNode = { - name: string; - path: string; - absolute: string; - type: 'file' | 'directory'; - ignored: boolean; -}; + name: string + path: string + absolute: string + type: "file" | "directory" + ignored: boolean +} export type FileContent = { - type: 'text'; - content: string; - diff?: string; - patch?: { - oldFileName: string; - newFileName: string; - oldHeader?: string; - newHeader?: string; - hunks: Array<{ - oldStart: number; - oldLines: number; - newStart: number; - newLines: number; - lines: Array; - }>; - index?: string; - }; - encoding?: 'base64'; - mimeType?: string; -}; + type: "text" + content: string + diff?: string + patch?: { + oldFileName: string + newFileName: string + oldHeader?: string + newHeader?: string + hunks: Array<{ + oldStart: number + oldLines: number + newStart: number + newLines: number + lines: Array + }> + index?: string + } + encoding?: "base64" + mimeType?: string +} export type File = { - path: string; - added: number; - removed: number; - status: 'added' | 'deleted' | 'modified'; -}; + path: string + added: number + removed: number + status: "added" | "deleted" | "modified" +} export type Agent = { - name: string; - description?: string; - mode: 'subagent' | 'primary' | 'all'; - builtIn: boolean; - topP?: number; - temperature?: number; - color?: string; - permission: { - edit: 'ask' | 'allow' | 'deny'; - bash: { - [key: string]: 'ask' | 'allow' | 'deny'; - }; - webfetch?: 'ask' | 'allow' | 'deny'; - doom_loop?: 'ask' | 'allow' | 'deny'; - external_directory?: 'ask' | 'allow' | 'deny'; - }; - model?: { - modelID: string; - providerID: string; - }; - prompt?: string; - tools: { - [key: string]: boolean; - }; - options: { - [key: string]: unknown; - }; - maxSteps?: number; -}; + name: string + description?: string + mode: "subagent" | "primary" | "all" + builtIn: boolean + topP?: number + temperature?: number + color?: string + permission: { + edit: "ask" | "allow" | "deny" + bash: { + [key: string]: "ask" | "allow" | "deny" + } + webfetch?: "ask" | "allow" | "deny" + doom_loop?: "ask" | "allow" | "deny" + external_directory?: "ask" | "allow" | "deny" + } + model?: { + modelID: string + providerID: string + } + prompt?: string + tools: { + [key: string]: boolean + } + options: { + [key: string]: unknown + } + maxSteps?: number +} export type McpStatusConnected = { - status: 'connected'; -}; + status: "connected" +} export type McpStatusDisabled = { - status: 'disabled'; -}; + status: "disabled" +} export type McpStatusFailed = { - status: 'failed'; - error: string; -}; + status: "failed" + error: string +} export type McpStatusNeedsAuth = { - status: 'needs_auth'; -}; + status: "needs_auth" +} export type McpStatusNeedsClientRegistration = { - status: 'needs_client_registration'; - error: string; -}; + status: "needs_client_registration" + error: string +} -export type McpStatus = McpStatusConnected | McpStatusDisabled | McpStatusFailed | McpStatusNeedsAuth | McpStatusNeedsClientRegistration; +export type McpStatus = + | McpStatusConnected + | McpStatusDisabled + | McpStatusFailed + | McpStatusNeedsAuth + | McpStatusNeedsClientRegistration export type LspStatus = { - id: string; - name: string; - root: string; - status: 'connected' | 'error'; -}; + id: string + name: string + root: string + status: "connected" | "error" +} export type FormatterStatus = { - name: string; - extensions: Array; - enabled: boolean; -}; + name: string + extensions: Array + enabled: boolean +} export type OAuth = { - type: 'oauth'; - refresh: string; - access: string; - expires: number; - enterpriseUrl?: string; -}; + type: "oauth" + refresh: string + access: string + expires: number + enterpriseUrl?: string +} export type ApiAuth = { - type: 'api'; - key: string; -}; + type: "api" + key: string +} export type WellKnownAuth = { - type: 'wellknown'; - key: string; - token: string; -}; + type: "wellknown" + key: string + token: string +} -export type Auth = OAuth | ApiAuth | WellKnownAuth; +export type Auth = OAuth | ApiAuth | WellKnownAuth export type GlobalEventData = { - body?: never; - path?: never; - query?: never; - url: '/global/event'; -}; + body?: never + path?: never + query?: never + url: "/global/event" +} export type GlobalEventResponses = { - /** - * Event stream - */ - 200: GlobalEvent; -}; + /** + * Event stream + */ + 200: GlobalEvent +} -export type GlobalEventResponse = GlobalEventResponses[keyof GlobalEventResponses]; +export type GlobalEventResponse = GlobalEventResponses[keyof GlobalEventResponses] export type ProjectListData = { - body?: never; - path?: never; - query?: { - directory?: string; - }; - url: '/project'; -}; + body?: never + path?: never + query?: { + directory?: string + } + url: "/project" +} export type ProjectListResponses = { - /** - * List of projects - */ - 200: Array; -}; + /** + * List of projects + */ + 200: Array +} -export type ProjectListResponse = ProjectListResponses[keyof ProjectListResponses]; +export type ProjectListResponse = ProjectListResponses[keyof ProjectListResponses] export type ProjectCurrentData = { - body?: never; - path?: never; - query?: { - directory?: string; - }; - url: '/project/current'; -}; + body?: never + path?: never + query?: { + directory?: string + } + url: "/project/current" +} export type ProjectCurrentResponses = { - /** - * Current project - */ - 200: Project; -}; + /** + * Current project + */ + 200: Project +} -export type ProjectCurrentResponse = ProjectCurrentResponses[keyof ProjectCurrentResponses]; +export type ProjectCurrentResponse = ProjectCurrentResponses[keyof ProjectCurrentResponses] export type PtyListData = { - body?: never; - path?: never; - query?: { - directory?: string; - }; - url: '/pty'; -}; + body?: never + path?: never + query?: { + directory?: string + } + url: "/pty" +} export type PtyListResponses = { - /** - * List of sessions - */ - 200: Array; -}; + /** + * List of sessions + */ + 200: Array +} -export type PtyListResponse = PtyListResponses[keyof PtyListResponses]; +export type PtyListResponse = PtyListResponses[keyof PtyListResponses] export type PtyCreateData = { - body?: { - command?: string; - args?: Array; - cwd?: string; - title?: string; - env?: { - [key: string]: string; - }; - }; - path?: never; - query?: { - directory?: string; - }; - url: '/pty'; -}; + body?: { + command?: string + args?: Array + cwd?: string + title?: string + env?: { + [key: string]: string + } + } + path?: never + query?: { + directory?: string + } + url: "/pty" +} export type PtyCreateErrors = { - /** - * Bad request - */ - 400: BadRequestError; -}; + /** + * Bad request + */ + 400: BadRequestError +} -export type PtyCreateError = PtyCreateErrors[keyof PtyCreateErrors]; +export type PtyCreateError = PtyCreateErrors[keyof PtyCreateErrors] export type PtyCreateResponses = { - /** - * Created session - */ - 200: Pty; -}; + /** + * Created session + */ + 200: Pty +} -export type PtyCreateResponse = PtyCreateResponses[keyof PtyCreateResponses]; +export type PtyCreateResponse = PtyCreateResponses[keyof PtyCreateResponses] export type PtyRemoveData = { - body?: never; - path: { - ptyID: string; - }; - query?: { - directory?: string; - }; - url: '/pty/{ptyID}'; -}; + body?: never + path: { + ptyID: string + } + query?: { + directory?: string + } + url: "/pty/{ptyID}" +} export type PtyRemoveErrors = { - /** - * Not found - */ - 404: NotFoundError; -}; + /** + * Not found + */ + 404: NotFoundError +} -export type PtyRemoveError = PtyRemoveErrors[keyof PtyRemoveErrors]; +export type PtyRemoveError = PtyRemoveErrors[keyof PtyRemoveErrors] export type PtyRemoveResponses = { - /** - * Session removed - */ - 200: boolean; -}; + /** + * Session removed + */ + 200: boolean +} -export type PtyRemoveResponse = PtyRemoveResponses[keyof PtyRemoveResponses]; +export type PtyRemoveResponse = PtyRemoveResponses[keyof PtyRemoveResponses] export type PtyGetData = { - body?: never; - path: { - ptyID: string; - }; - query?: { - directory?: string; - }; - url: '/pty/{ptyID}'; -}; + body?: never + path: { + ptyID: string + } + query?: { + directory?: string + } + url: "/pty/{ptyID}" +} export type PtyGetErrors = { - /** - * Not found - */ - 404: NotFoundError; -}; + /** + * Not found + */ + 404: NotFoundError +} -export type PtyGetError = PtyGetErrors[keyof PtyGetErrors]; +export type PtyGetError = PtyGetErrors[keyof PtyGetErrors] export type PtyGetResponses = { - /** - * Session info - */ - 200: Pty; -}; + /** + * Session info + */ + 200: Pty +} -export type PtyGetResponse = PtyGetResponses[keyof PtyGetResponses]; +export type PtyGetResponse = PtyGetResponses[keyof PtyGetResponses] export type PtyUpdateData = { - body?: { - title?: string; - size?: { - rows: number; - cols: number; - }; - }; - path: { - ptyID: string; - }; - query?: { - directory?: string; - }; - url: '/pty/{ptyID}'; -}; + body?: { + title?: string + size?: { + rows: number + cols: number + } + } + path: { + ptyID: string + } + query?: { + directory?: string + } + url: "/pty/{ptyID}" +} export type PtyUpdateErrors = { - /** - * Bad request - */ - 400: BadRequestError; -}; + /** + * Bad request + */ + 400: BadRequestError +} -export type PtyUpdateError = PtyUpdateErrors[keyof PtyUpdateErrors]; +export type PtyUpdateError = PtyUpdateErrors[keyof PtyUpdateErrors] export type PtyUpdateResponses = { - /** - * Updated session - */ - 200: Pty; -}; + /** + * Updated session + */ + 200: Pty +} -export type PtyUpdateResponse = PtyUpdateResponses[keyof PtyUpdateResponses]; +export type PtyUpdateResponse = PtyUpdateResponses[keyof PtyUpdateResponses] export type PtyConnectData = { - body?: never; - path: { - ptyID: string; - }; - query?: { - directory?: string; - }; - url: '/pty/{ptyID}/connect'; -}; + body?: never + path: { + ptyID: string + } + query?: { + directory?: string + } + url: "/pty/{ptyID}/connect" +} export type PtyConnectErrors = { - /** - * Not found - */ - 404: NotFoundError; -}; + /** + * Not found + */ + 404: NotFoundError +} -export type PtyConnectError = PtyConnectErrors[keyof PtyConnectErrors]; +export type PtyConnectError = PtyConnectErrors[keyof PtyConnectErrors] export type PtyConnectResponses = { - /** - * Connected session - */ - 200: boolean; -}; + /** + * Connected session + */ + 200: boolean +} -export type PtyConnectResponse = PtyConnectResponses[keyof PtyConnectResponses]; +export type PtyConnectResponse = PtyConnectResponses[keyof PtyConnectResponses] export type ConfigGetData = { - body?: never; - path?: never; - query?: { - directory?: string; - }; - url: '/config'; -}; + body?: never + path?: never + query?: { + directory?: string + } + url: "/config" +} export type ConfigGetResponses = { - /** - * Get config info - */ - 200: Config; -}; + /** + * Get config info + */ + 200: Config +} -export type ConfigGetResponse = ConfigGetResponses[keyof ConfigGetResponses]; +export type ConfigGetResponse = ConfigGetResponses[keyof ConfigGetResponses] export type ConfigUpdateData = { - body?: Config; - path?: never; - query?: { - directory?: string; - }; - url: '/config'; -}; + body?: Config + path?: never + query?: { + directory?: string + } + url: "/config" +} export type ConfigUpdateErrors = { - /** - * Bad request - */ - 400: BadRequestError; -}; + /** + * Bad request + */ + 400: BadRequestError +} -export type ConfigUpdateError = ConfigUpdateErrors[keyof ConfigUpdateErrors]; +export type ConfigUpdateError = ConfigUpdateErrors[keyof ConfigUpdateErrors] export type ConfigUpdateResponses = { - /** - * Successfully updated config - */ - 200: Config; -}; + /** + * Successfully updated config + */ + 200: Config +} -export type ConfigUpdateResponse = ConfigUpdateResponses[keyof ConfigUpdateResponses]; +export type ConfigUpdateResponse = ConfigUpdateResponses[keyof ConfigUpdateResponses] export type ToolIdsData = { - body?: never; - path?: never; - query?: { - directory?: string; - }; - url: '/experimental/tool/ids'; -}; + body?: never + path?: never + query?: { + directory?: string + } + url: "/experimental/tool/ids" +} export type ToolIdsErrors = { - /** - * Bad request - */ - 400: BadRequestError; -}; + /** + * Bad request + */ + 400: BadRequestError +} -export type ToolIdsError = ToolIdsErrors[keyof ToolIdsErrors]; +export type ToolIdsError = ToolIdsErrors[keyof ToolIdsErrors] export type ToolIdsResponses = { - /** - * Tool IDs - */ - 200: ToolIds; -}; + /** + * Tool IDs + */ + 200: ToolIds +} -export type ToolIdsResponse = ToolIdsResponses[keyof ToolIdsResponses]; +export type ToolIdsResponse = ToolIdsResponses[keyof ToolIdsResponses] export type ToolListData = { - body?: never; - path?: never; - query: { - directory?: string; - provider: string; - model: string; - }; - url: '/experimental/tool'; -}; + body?: never + path?: never + query: { + directory?: string + provider: string + model: string + } + url: "/experimental/tool" +} export type ToolListErrors = { - /** - * Bad request - */ - 400: BadRequestError; -}; + /** + * Bad request + */ + 400: BadRequestError +} -export type ToolListError = ToolListErrors[keyof ToolListErrors]; +export type ToolListError = ToolListErrors[keyof ToolListErrors] export type ToolListResponses = { - /** - * Tools - */ - 200: ToolList; -}; + /** + * Tools + */ + 200: ToolList +} -export type ToolListResponse = ToolListResponses[keyof ToolListResponses]; +export type ToolListResponse = ToolListResponses[keyof ToolListResponses] export type InstanceDisposeData = { - body?: never; - path?: never; - query?: { - directory?: string; - }; - url: '/instance/dispose'; -}; + body?: never + path?: never + query?: { + directory?: string + } + url: "/instance/dispose" +} export type InstanceDisposeResponses = { - /** - * Instance disposed - */ - 200: boolean; -}; + /** + * Instance disposed + */ + 200: boolean +} -export type InstanceDisposeResponse = InstanceDisposeResponses[keyof InstanceDisposeResponses]; +export type InstanceDisposeResponse = InstanceDisposeResponses[keyof InstanceDisposeResponses] export type PathGetData = { - body?: never; - path?: never; - query?: { - directory?: string; - }; - url: '/path'; -}; + body?: never + path?: never + query?: { + directory?: string + } + url: "/path" +} export type PathGetResponses = { - /** - * Path - */ - 200: Path; -}; + /** + * Path + */ + 200: Path +} -export type PathGetResponse = PathGetResponses[keyof PathGetResponses]; +export type PathGetResponse = PathGetResponses[keyof PathGetResponses] export type VcsGetData = { - body?: never; - path?: never; - query?: { - directory?: string; - }; - url: '/vcs'; -}; + body?: never + path?: never + query?: { + directory?: string + } + url: "/vcs" +} export type VcsGetResponses = { - /** - * VCS info - */ - 200: VcsInfo; -}; + /** + * VCS info + */ + 200: VcsInfo +} -export type VcsGetResponse = VcsGetResponses[keyof VcsGetResponses]; +export type VcsGetResponse = VcsGetResponses[keyof VcsGetResponses] export type SessionListData = { - body?: never; - path?: never; - query?: { - directory?: string; - }; - url: '/session'; -}; + body?: never + path?: never + query?: { + directory?: string + } + url: "/session" +} export type SessionListResponses = { - /** - * List of sessions - */ - 200: Array; -}; + /** + * List of sessions + */ + 200: Array +} -export type SessionListResponse = SessionListResponses[keyof SessionListResponses]; +export type SessionListResponse = SessionListResponses[keyof SessionListResponses] export type SessionCreateData = { - body?: { - parentID?: string; - title?: string; - }; - path?: never; - query?: { - directory?: string; - }; - url: '/session'; -}; + body?: { + parentID?: string + title?: string + } + path?: never + query?: { + directory?: string + } + url: "/session" +} export type SessionCreateErrors = { - /** - * Bad request - */ - 400: BadRequestError; -}; + /** + * Bad request + */ + 400: BadRequestError +} -export type SessionCreateError = SessionCreateErrors[keyof SessionCreateErrors]; +export type SessionCreateError = SessionCreateErrors[keyof SessionCreateErrors] export type SessionCreateResponses = { - /** - * Successfully created session - */ - 200: Session; -}; + /** + * Successfully created session + */ + 200: Session +} -export type SessionCreateResponse = SessionCreateResponses[keyof SessionCreateResponses]; +export type SessionCreateResponse = SessionCreateResponses[keyof SessionCreateResponses] export type SessionStatusData = { - body?: never; - path?: never; - query?: { - directory?: string; - }; - url: '/session/status'; -}; + body?: never + path?: never + query?: { + directory?: string + } + url: "/session/status" +} export type SessionStatusErrors = { - /** - * Bad request - */ - 400: BadRequestError; -}; + /** + * Bad request + */ + 400: BadRequestError +} -export type SessionStatusError = SessionStatusErrors[keyof SessionStatusErrors]; +export type SessionStatusError = SessionStatusErrors[keyof SessionStatusErrors] export type SessionStatusResponses = { - /** - * Get session status - */ - 200: { - [key: string]: SessionStatus; - }; -}; + /** + * Get session status + */ + 200: { + [key: string]: SessionStatus + } +} -export type SessionStatusResponse = SessionStatusResponses[keyof SessionStatusResponses]; +export type SessionStatusResponse = SessionStatusResponses[keyof SessionStatusResponses] export type SessionDeleteData = { - body?: never; - path: { - sessionID: string; - }; - query?: { - directory?: string; - }; - url: '/session/{sessionID}'; -}; + body?: never + path: { + sessionID: string + } + query?: { + directory?: string + } + url: "/session/{sessionID}" +} export type SessionDeleteErrors = { - /** - * Bad request - */ - 400: BadRequestError; - /** - * Not found - */ - 404: NotFoundError; -}; + /** + * Bad request + */ + 400: BadRequestError + /** + * Not found + */ + 404: NotFoundError +} -export type SessionDeleteError = SessionDeleteErrors[keyof SessionDeleteErrors]; +export type SessionDeleteError = SessionDeleteErrors[keyof SessionDeleteErrors] export type SessionDeleteResponses = { - /** - * Successfully deleted session - */ - 200: boolean; -}; + /** + * Successfully deleted session + */ + 200: boolean +} -export type SessionDeleteResponse = SessionDeleteResponses[keyof SessionDeleteResponses]; +export type SessionDeleteResponse = SessionDeleteResponses[keyof SessionDeleteResponses] export type SessionGetData = { - body?: never; - path: { - sessionID: string; - }; - query?: { - directory?: string; - }; - url: '/session/{sessionID}'; -}; + body?: never + path: { + sessionID: string + } + query?: { + directory?: string + } + url: "/session/{sessionID}" +} export type SessionGetErrors = { - /** - * Bad request - */ - 400: BadRequestError; - /** - * Not found - */ - 404: NotFoundError; -}; + /** + * Bad request + */ + 400: BadRequestError + /** + * Not found + */ + 404: NotFoundError +} -export type SessionGetError = SessionGetErrors[keyof SessionGetErrors]; +export type SessionGetError = SessionGetErrors[keyof SessionGetErrors] export type SessionGetResponses = { - /** - * Get session - */ - 200: Session; -}; + /** + * Get session + */ + 200: Session +} -export type SessionGetResponse = SessionGetResponses[keyof SessionGetResponses]; +export type SessionGetResponse = SessionGetResponses[keyof SessionGetResponses] export type SessionUpdateData = { - body?: { - title?: string; - }; - path: { - sessionID: string; - }; - query?: { - directory?: string; - }; - url: '/session/{sessionID}'; -}; + body?: { + title?: string + } + path: { + sessionID: string + } + query?: { + directory?: string + } + url: "/session/{sessionID}" +} export type SessionUpdateErrors = { - /** - * Bad request - */ - 400: BadRequestError; - /** - * Not found - */ - 404: NotFoundError; -}; + /** + * Bad request + */ + 400: BadRequestError + /** + * Not found + */ + 404: NotFoundError +} -export type SessionUpdateError = SessionUpdateErrors[keyof SessionUpdateErrors]; +export type SessionUpdateError = SessionUpdateErrors[keyof SessionUpdateErrors] export type SessionUpdateResponses = { - /** - * Successfully updated session - */ - 200: Session; -}; + /** + * Successfully updated session + */ + 200: Session +} -export type SessionUpdateResponse = SessionUpdateResponses[keyof SessionUpdateResponses]; +export type SessionUpdateResponse = SessionUpdateResponses[keyof SessionUpdateResponses] export type SessionChildrenData = { - body?: never; - path: { - sessionID: string; - }; - query?: { - directory?: string; - }; - url: '/session/{sessionID}/children'; -}; + body?: never + path: { + sessionID: string + } + query?: { + directory?: string + } + url: "/session/{sessionID}/children" +} export type SessionChildrenErrors = { - /** - * Bad request - */ - 400: BadRequestError; - /** - * Not found - */ - 404: NotFoundError; -}; + /** + * Bad request + */ + 400: BadRequestError + /** + * Not found + */ + 404: NotFoundError +} -export type SessionChildrenError = SessionChildrenErrors[keyof SessionChildrenErrors]; +export type SessionChildrenError = SessionChildrenErrors[keyof SessionChildrenErrors] export type SessionChildrenResponses = { - /** - * List of children - */ - 200: Array; -}; + /** + * List of children + */ + 200: Array +} -export type SessionChildrenResponse = SessionChildrenResponses[keyof SessionChildrenResponses]; +export type SessionChildrenResponse = SessionChildrenResponses[keyof SessionChildrenResponses] export type SessionTodoData = { - body?: never; - path: { - /** - * Session ID - */ - sessionID: string; - }; - query?: { - directory?: string; - }; - url: '/session/{sessionID}/todo'; -}; + body?: never + path: { + /** + * Session ID + */ + sessionID: string + } + query?: { + directory?: string + } + url: "/session/{sessionID}/todo" +} export type SessionTodoErrors = { - /** - * Bad request - */ - 400: BadRequestError; - /** - * Not found - */ - 404: NotFoundError; -}; + /** + * Bad request + */ + 400: BadRequestError + /** + * Not found + */ + 404: NotFoundError +} -export type SessionTodoError = SessionTodoErrors[keyof SessionTodoErrors]; +export type SessionTodoError = SessionTodoErrors[keyof SessionTodoErrors] export type SessionTodoResponses = { - /** - * Todo list - */ - 200: Array; -}; + /** + * Todo list + */ + 200: Array +} -export type SessionTodoResponse = SessionTodoResponses[keyof SessionTodoResponses]; +export type SessionTodoResponse = SessionTodoResponses[keyof SessionTodoResponses] export type SessionInitData = { - body?: { - modelID: string; - providerID: string; - messageID: string; - }; - path: { - /** - * Session ID - */ - sessionID: string; - }; - query?: { - directory?: string; - }; - url: '/session/{sessionID}/init'; -}; + body?: { + modelID: string + providerID: string + messageID: string + } + path: { + /** + * Session ID + */ + sessionID: string + } + query?: { + directory?: string + } + url: "/session/{sessionID}/init" +} export type SessionInitErrors = { - /** - * Bad request - */ - 400: BadRequestError; - /** - * Not found - */ - 404: NotFoundError; -}; + /** + * Bad request + */ + 400: BadRequestError + /** + * Not found + */ + 404: NotFoundError +} -export type SessionInitError = SessionInitErrors[keyof SessionInitErrors]; +export type SessionInitError = SessionInitErrors[keyof SessionInitErrors] export type SessionInitResponses = { - /** - * 200 - */ - 200: boolean; -}; + /** + * 200 + */ + 200: boolean +} -export type SessionInitResponse = SessionInitResponses[keyof SessionInitResponses]; +export type SessionInitResponse = SessionInitResponses[keyof SessionInitResponses] export type SessionForkData = { - body?: { - messageID?: string; - }; - path: { - sessionID: string; - }; - query?: { - directory?: string; - }; - url: '/session/{sessionID}/fork'; -}; + body?: { + messageID?: string + } + path: { + sessionID: string + } + query?: { + directory?: string + } + url: "/session/{sessionID}/fork" +} export type SessionForkResponses = { - /** - * 200 - */ - 200: Session; -}; + /** + * 200 + */ + 200: Session +} -export type SessionForkResponse = SessionForkResponses[keyof SessionForkResponses]; +export type SessionForkResponse = SessionForkResponses[keyof SessionForkResponses] export type SessionAbortData = { - body?: never; - path: { - sessionID: string; - }; - query?: { - directory?: string; - }; - url: '/session/{sessionID}/abort'; -}; + body?: never + path: { + sessionID: string + } + query?: { + directory?: string + } + url: "/session/{sessionID}/abort" +} export type SessionAbortErrors = { - /** - * Bad request - */ - 400: BadRequestError; - /** - * Not found - */ - 404: NotFoundError; -}; + /** + * Bad request + */ + 400: BadRequestError + /** + * Not found + */ + 404: NotFoundError +} -export type SessionAbortError = SessionAbortErrors[keyof SessionAbortErrors]; +export type SessionAbortError = SessionAbortErrors[keyof SessionAbortErrors] export type SessionAbortResponses = { - /** - * Aborted session - */ - 200: boolean; -}; + /** + * Aborted session + */ + 200: boolean +} -export type SessionAbortResponse = SessionAbortResponses[keyof SessionAbortResponses]; +export type SessionAbortResponse = SessionAbortResponses[keyof SessionAbortResponses] export type SessionUnshareData = { - body?: never; - path: { - sessionID: string; - }; - query?: { - directory?: string; - }; - url: '/session/{sessionID}/share'; -}; + body?: never + path: { + sessionID: string + } + query?: { + directory?: string + } + url: "/session/{sessionID}/share" +} export type SessionUnshareErrors = { - /** - * Bad request - */ - 400: BadRequestError; - /** - * Not found - */ - 404: NotFoundError; -}; + /** + * Bad request + */ + 400: BadRequestError + /** + * Not found + */ + 404: NotFoundError +} -export type SessionUnshareError = SessionUnshareErrors[keyof SessionUnshareErrors]; +export type SessionUnshareError = SessionUnshareErrors[keyof SessionUnshareErrors] export type SessionUnshareResponses = { - /** - * Successfully unshared session - */ - 200: Session; -}; + /** + * Successfully unshared session + */ + 200: Session +} -export type SessionUnshareResponse = SessionUnshareResponses[keyof SessionUnshareResponses]; +export type SessionUnshareResponse = SessionUnshareResponses[keyof SessionUnshareResponses] export type SessionShareData = { - body?: never; - path: { - sessionID: string; - }; - query?: { - directory?: string; - }; - url: '/session/{sessionID}/share'; -}; + body?: never + path: { + sessionID: string + } + query?: { + directory?: string + } + url: "/session/{sessionID}/share" +} export type SessionShareErrors = { - /** - * Bad request - */ - 400: BadRequestError; - /** - * Not found - */ - 404: NotFoundError; -}; + /** + * Bad request + */ + 400: BadRequestError + /** + * Not found + */ + 404: NotFoundError +} -export type SessionShareError = SessionShareErrors[keyof SessionShareErrors]; +export type SessionShareError = SessionShareErrors[keyof SessionShareErrors] export type SessionShareResponses = { - /** - * Successfully shared session - */ - 200: Session; -}; + /** + * Successfully shared session + */ + 200: Session +} -export type SessionShareResponse = SessionShareResponses[keyof SessionShareResponses]; +export type SessionShareResponse = SessionShareResponses[keyof SessionShareResponses] export type SessionDiffData = { - body?: never; - path: { - /** - * Session ID - */ - sessionID: string; - }; - query?: { - directory?: string; - messageID?: string; - }; - url: '/session/{sessionID}/diff'; -}; + body?: never + path: { + /** + * Session ID + */ + sessionID: string + } + query?: { + directory?: string + messageID?: string + } + url: "/session/{sessionID}/diff" +} export type SessionDiffErrors = { - /** - * Bad request - */ - 400: BadRequestError; - /** - * Not found - */ - 404: NotFoundError; -}; + /** + * Bad request + */ + 400: BadRequestError + /** + * Not found + */ + 404: NotFoundError +} -export type SessionDiffError = SessionDiffErrors[keyof SessionDiffErrors]; +export type SessionDiffError = SessionDiffErrors[keyof SessionDiffErrors] export type SessionDiffResponses = { - /** - * List of diffs - */ - 200: Array; -}; + /** + * List of diffs + */ + 200: Array +} -export type SessionDiffResponse = SessionDiffResponses[keyof SessionDiffResponses]; +export type SessionDiffResponse = SessionDiffResponses[keyof SessionDiffResponses] export type SessionSummarizeData = { - body?: { - providerID: string; - modelID: string; - }; - path: { - /** - * Session ID - */ - sessionID: string; - }; - query?: { - directory?: string; - }; - url: '/session/{sessionID}/summarize'; -}; + body?: { + providerID: string + modelID: string + } + path: { + /** + * Session ID + */ + sessionID: string + } + query?: { + directory?: string + } + url: "/session/{sessionID}/summarize" +} export type SessionSummarizeErrors = { - /** - * Bad request - */ - 400: BadRequestError; - /** - * Not found - */ - 404: NotFoundError; -}; + /** + * Bad request + */ + 400: BadRequestError + /** + * Not found + */ + 404: NotFoundError +} -export type SessionSummarizeError = SessionSummarizeErrors[keyof SessionSummarizeErrors]; +export type SessionSummarizeError = SessionSummarizeErrors[keyof SessionSummarizeErrors] export type SessionSummarizeResponses = { - /** - * Summarized session - */ - 200: boolean; -}; + /** + * Summarized session + */ + 200: boolean +} -export type SessionSummarizeResponse = SessionSummarizeResponses[keyof SessionSummarizeResponses]; +export type SessionSummarizeResponse = SessionSummarizeResponses[keyof SessionSummarizeResponses] export type SessionMessagesData = { - body?: never; - path: { - /** - * Session ID - */ - sessionID: string; - }; - query?: { - directory?: string; - limit?: number; - }; - url: '/session/{sessionID}/message'; -}; + body?: never + path: { + /** + * Session ID + */ + sessionID: string + } + query?: { + directory?: string + limit?: number + } + url: "/session/{sessionID}/message" +} export type SessionMessagesErrors = { - /** - * Bad request - */ - 400: BadRequestError; - /** - * Not found - */ - 404: NotFoundError; -}; + /** + * Bad request + */ + 400: BadRequestError + /** + * Not found + */ + 404: NotFoundError +} -export type SessionMessagesError = SessionMessagesErrors[keyof SessionMessagesErrors]; +export type SessionMessagesError = SessionMessagesErrors[keyof SessionMessagesErrors] export type SessionMessagesResponses = { - /** - * List of messages - */ - 200: Array<{ - info: Message; - parts: Array; - }>; -}; + /** + * List of messages + */ + 200: Array<{ + info: Message + parts: Array + }> +} -export type SessionMessagesResponse = SessionMessagesResponses[keyof SessionMessagesResponses]; +export type SessionMessagesResponse = SessionMessagesResponses[keyof SessionMessagesResponses] export type SessionPromptData = { - body?: { - messageID?: string; - model?: { - providerID: string; - modelID: string; - }; - agent?: string; - noReply?: boolean; - system?: string; - tools?: { - [key: string]: boolean; - }; - parts: Array; - }; - path: { - /** - * Session ID - */ - sessionID: string; - }; - query?: { - directory?: string; - }; - url: '/session/{sessionID}/message'; -}; + body?: { + messageID?: string + model?: { + providerID: string + modelID: string + } + agent?: string + noReply?: boolean + system?: string + tools?: { + [key: string]: boolean + } + parts: Array + } + path: { + /** + * Session ID + */ + sessionID: string + } + query?: { + directory?: string + } + url: "/session/{sessionID}/message" +} export type SessionPromptErrors = { - /** - * Bad request - */ - 400: BadRequestError; - /** - * Not found - */ - 404: NotFoundError; -}; + /** + * Bad request + */ + 400: BadRequestError + /** + * Not found + */ + 404: NotFoundError +} -export type SessionPromptError = SessionPromptErrors[keyof SessionPromptErrors]; +export type SessionPromptError = SessionPromptErrors[keyof SessionPromptErrors] export type SessionPromptResponses = { - /** - * Created message - */ - 200: { - info: AssistantMessage; - parts: Array; - }; -}; + /** + * Created message + */ + 200: { + info: AssistantMessage + parts: Array + } +} -export type SessionPromptResponse = SessionPromptResponses[keyof SessionPromptResponses]; +export type SessionPromptResponse = SessionPromptResponses[keyof SessionPromptResponses] export type SessionMessageData = { - body?: never; - path: { - /** - * Session ID - */ - sessionID: string; - /** - * Message ID - */ - messageID: string; - }; - query?: { - directory?: string; - }; - url: '/session/{sessionID}/message/{messageID}'; -}; + body?: never + path: { + /** + * Session ID + */ + sessionID: string + /** + * Message ID + */ + messageID: string + } + query?: { + directory?: string + } + url: "/session/{sessionID}/message/{messageID}" +} export type SessionMessageErrors = { - /** - * Bad request - */ - 400: BadRequestError; - /** - * Not found - */ - 404: NotFoundError; -}; + /** + * Bad request + */ + 400: BadRequestError + /** + * Not found + */ + 404: NotFoundError +} -export type SessionMessageError = SessionMessageErrors[keyof SessionMessageErrors]; +export type SessionMessageError = SessionMessageErrors[keyof SessionMessageErrors] export type SessionMessageResponses = { - /** - * Message - */ - 200: { - info: Message; - parts: Array; - }; -}; + /** + * Message + */ + 200: { + info: Message + parts: Array + } +} -export type SessionMessageResponse = SessionMessageResponses[keyof SessionMessageResponses]; +export type SessionMessageResponse = SessionMessageResponses[keyof SessionMessageResponses] export type SessionPromptAsyncData = { - body?: { - messageID?: string; - model?: { - providerID: string; - modelID: string; - }; - agent?: string; - noReply?: boolean; - system?: string; - tools?: { - [key: string]: boolean; - }; - parts: Array; - }; - path: { - /** - * Session ID - */ - sessionID: string; - }; - query?: { - directory?: string; - }; - url: '/session/{sessionID}/prompt_async'; -}; + body?: { + messageID?: string + model?: { + providerID: string + modelID: string + } + agent?: string + noReply?: boolean + system?: string + tools?: { + [key: string]: boolean + } + parts: Array + } + path: { + /** + * Session ID + */ + sessionID: string + } + query?: { + directory?: string + } + url: "/session/{sessionID}/prompt_async" +} export type SessionPromptAsyncErrors = { - /** - * Bad request - */ - 400: BadRequestError; - /** - * Not found - */ - 404: NotFoundError; -}; + /** + * Bad request + */ + 400: BadRequestError + /** + * Not found + */ + 404: NotFoundError +} -export type SessionPromptAsyncError = SessionPromptAsyncErrors[keyof SessionPromptAsyncErrors]; +export type SessionPromptAsyncError = SessionPromptAsyncErrors[keyof SessionPromptAsyncErrors] export type SessionPromptAsyncResponses = { - /** - * Prompt accepted - */ - 204: void; -}; + /** + * Prompt accepted + */ + 204: void +} -export type SessionPromptAsyncResponse = SessionPromptAsyncResponses[keyof SessionPromptAsyncResponses]; +export type SessionPromptAsyncResponse = SessionPromptAsyncResponses[keyof SessionPromptAsyncResponses] export type SessionCommandData = { - body?: { - messageID?: string; - agent?: string; - model?: string; - arguments: string; - command: string; - }; - path: { - /** - * Session ID - */ - sessionID: string; - }; - query?: { - directory?: string; - }; - url: '/session/{sessionID}/command'; -}; + body?: { + messageID?: string + agent?: string + model?: string + arguments: string + command: string + } + path: { + /** + * Session ID + */ + sessionID: string + } + query?: { + directory?: string + } + url: "/session/{sessionID}/command" +} export type SessionCommandErrors = { - /** - * Bad request - */ - 400: BadRequestError; - /** - * Not found - */ - 404: NotFoundError; -}; + /** + * Bad request + */ + 400: BadRequestError + /** + * Not found + */ + 404: NotFoundError +} -export type SessionCommandError = SessionCommandErrors[keyof SessionCommandErrors]; +export type SessionCommandError = SessionCommandErrors[keyof SessionCommandErrors] export type SessionCommandResponses = { - /** - * Created message - */ - 200: { - info: AssistantMessage; - parts: Array; - }; -}; + /** + * Created message + */ + 200: { + info: AssistantMessage + parts: Array + } +} -export type SessionCommandResponse = SessionCommandResponses[keyof SessionCommandResponses]; +export type SessionCommandResponse = SessionCommandResponses[keyof SessionCommandResponses] export type SessionShellData = { - body?: { - agent: string; - model?: { - providerID: string; - modelID: string; - }; - command: string; - }; - path: { - /** - * Session ID - */ - sessionID: string; - }; - query?: { - directory?: string; - }; - url: '/session/{sessionID}/shell'; -}; + body?: { + agent: string + model?: { + providerID: string + modelID: string + } + command: string + } + path: { + /** + * Session ID + */ + sessionID: string + } + query?: { + directory?: string + } + url: "/session/{sessionID}/shell" +} export type SessionShellErrors = { - /** - * Bad request - */ - 400: BadRequestError; - /** - * Not found - */ - 404: NotFoundError; -}; + /** + * Bad request + */ + 400: BadRequestError + /** + * Not found + */ + 404: NotFoundError +} -export type SessionShellError = SessionShellErrors[keyof SessionShellErrors]; +export type SessionShellError = SessionShellErrors[keyof SessionShellErrors] export type SessionShellResponses = { - /** - * Created message - */ - 200: AssistantMessage; -}; + /** + * Created message + */ + 200: AssistantMessage +} -export type SessionShellResponse = SessionShellResponses[keyof SessionShellResponses]; +export type SessionShellResponse = SessionShellResponses[keyof SessionShellResponses] export type SessionRevertData = { - body?: { - messageID: string; - partID?: string; - }; - path: { - sessionID: string; - }; - query?: { - directory?: string; - }; - url: '/session/{sessionID}/revert'; -}; + body?: { + messageID: string + partID?: string + } + path: { + sessionID: string + } + query?: { + directory?: string + } + url: "/session/{sessionID}/revert" +} export type SessionRevertErrors = { - /** - * Bad request - */ - 400: BadRequestError; - /** - * Not found - */ - 404: NotFoundError; -}; + /** + * Bad request + */ + 400: BadRequestError + /** + * Not found + */ + 404: NotFoundError +} -export type SessionRevertError = SessionRevertErrors[keyof SessionRevertErrors]; +export type SessionRevertError = SessionRevertErrors[keyof SessionRevertErrors] export type SessionRevertResponses = { - /** - * Updated session - */ - 200: Session; -}; + /** + * Updated session + */ + 200: Session +} -export type SessionRevertResponse = SessionRevertResponses[keyof SessionRevertResponses]; +export type SessionRevertResponse = SessionRevertResponses[keyof SessionRevertResponses] export type SessionUnrevertData = { - body?: never; - path: { - sessionID: string; - }; - query?: { - directory?: string; - }; - url: '/session/{sessionID}/unrevert'; -}; + body?: never + path: { + sessionID: string + } + query?: { + directory?: string + } + url: "/session/{sessionID}/unrevert" +} export type SessionUnrevertErrors = { - /** - * Bad request - */ - 400: BadRequestError; - /** - * Not found - */ - 404: NotFoundError; -}; + /** + * Bad request + */ + 400: BadRequestError + /** + * Not found + */ + 404: NotFoundError +} -export type SessionUnrevertError = SessionUnrevertErrors[keyof SessionUnrevertErrors]; +export type SessionUnrevertError = SessionUnrevertErrors[keyof SessionUnrevertErrors] export type SessionUnrevertResponses = { - /** - * Updated session - */ - 200: Session; -}; + /** + * Updated session + */ + 200: Session +} -export type SessionUnrevertResponse = SessionUnrevertResponses[keyof SessionUnrevertResponses]; +export type SessionUnrevertResponse = SessionUnrevertResponses[keyof SessionUnrevertResponses] export type PermissionRespondData = { - body?: { - response: 'once' | 'always' | 'reject'; - }; - path: { - sessionID: string; - permissionID: string; - }; - query?: { - directory?: string; - }; - url: '/session/{sessionID}/permissions/{permissionID}'; -}; + body?: { + response: "once" | "always" | "reject" + } + path: { + sessionID: string + permissionID: string + } + query?: { + directory?: string + } + url: "/session/{sessionID}/permissions/{permissionID}" +} export type PermissionRespondErrors = { - /** - * Bad request - */ - 400: BadRequestError; - /** - * Not found - */ - 404: NotFoundError; -}; + /** + * Bad request + */ + 400: BadRequestError + /** + * Not found + */ + 404: NotFoundError +} -export type PermissionRespondError = PermissionRespondErrors[keyof PermissionRespondErrors]; +export type PermissionRespondError = PermissionRespondErrors[keyof PermissionRespondErrors] export type PermissionRespondResponses = { - /** - * Permission processed successfully - */ - 200: boolean; -}; + /** + * Permission processed successfully + */ + 200: boolean +} -export type PermissionRespondResponse = PermissionRespondResponses[keyof PermissionRespondResponses]; +export type PermissionRespondResponse = PermissionRespondResponses[keyof PermissionRespondResponses] export type CommandListData = { - body?: never; - path?: never; - query?: { - directory?: string; - }; - url: '/command'; -}; + body?: never + path?: never + query?: { + directory?: string + } + url: "/command" +} export type CommandListResponses = { - /** - * List of commands - */ - 200: Array; -}; + /** + * List of commands + */ + 200: Array +} -export type CommandListResponse = CommandListResponses[keyof CommandListResponses]; +export type CommandListResponse = CommandListResponses[keyof CommandListResponses] export type ConfigProvidersData = { - body?: never; - path?: never; - query?: { - directory?: string; - }; - url: '/config/providers'; -}; + body?: never + path?: never + query?: { + directory?: string + } + url: "/config/providers" +} export type ConfigProvidersResponses = { - /** - * List of providers - */ - 200: { - providers: Array; - default: { - [key: string]: string; - }; - }; -}; + /** + * List of providers + */ + 200: { + providers: Array + default: { + [key: string]: string + } + } +} -export type ConfigProvidersResponse = ConfigProvidersResponses[keyof ConfigProvidersResponses]; +export type ConfigProvidersResponse = ConfigProvidersResponses[keyof ConfigProvidersResponses] export type ProviderListData = { - body?: never; - path?: never; - query?: { - directory?: string; - }; - url: '/provider'; -}; + body?: never + path?: never + query?: { + directory?: string + } + url: "/provider" +} export type ProviderListResponses = { - /** - * List of providers - */ - 200: { - all: Array<{ - api?: string; - name: string; - env: Array; - id: string; - npm?: string; - models: { - [key: string]: { - id: string; - name: string; - release_date: string; - attachment: boolean; - reasoning: boolean; - temperature: boolean; - tool_call: boolean; - cost?: { - input: number; - output: number; - cache_read?: number; - cache_write?: number; - context_over_200k?: { - input: number; - output: number; - cache_read?: number; - cache_write?: number; - }; - }; - limit: { - context: number; - output: number; - }; - modalities?: { - input: Array<'text' | 'audio' | 'image' | 'video' | 'pdf'>; - output: Array<'text' | 'audio' | 'image' | 'video' | 'pdf'>; - }; - experimental?: boolean; - status?: 'alpha' | 'beta' | 'deprecated'; - options: { - [key: string]: unknown; - }; - headers?: { - [key: string]: string; - }; - provider?: { - npm: string; - }; - }; - }; - }>; - default: { - [key: string]: string; - }; - connected: Array; - }; -}; + /** + * List of providers + */ + 200: { + all: Array<{ + api?: string + name: string + env: Array + id: string + npm?: string + models: { + [key: string]: { + id: string + name: string + release_date: string + attachment: boolean + reasoning: boolean + temperature: boolean + tool_call: boolean + cost?: { + input: number + output: number + cache_read?: number + cache_write?: number + context_over_200k?: { + input: number + output: number + cache_read?: number + cache_write?: number + } + } + limit: { + context: number + output: number + } + modalities?: { + input: Array<"text" | "audio" | "image" | "video" | "pdf"> + output: Array<"text" | "audio" | "image" | "video" | "pdf"> + } + experimental?: boolean + status?: "alpha" | "beta" | "deprecated" + options: { + [key: string]: unknown + } + headers?: { + [key: string]: string + } + provider?: { + npm: string + } + } + } + }> + default: { + [key: string]: string + } + connected: Array + } +} -export type ProviderListResponse = ProviderListResponses[keyof ProviderListResponses]; +export type ProviderListResponse = ProviderListResponses[keyof ProviderListResponses] export type ProviderAuthData = { - body?: never; - path?: never; - query?: { - directory?: string; - }; - url: '/provider/auth'; -}; + body?: never + path?: never + query?: { + directory?: string + } + url: "/provider/auth" +} export type ProviderAuthResponses = { - /** - * Provider auth methods - */ - 200: { - [key: string]: Array; - }; -}; + /** + * Provider auth methods + */ + 200: { + [key: string]: Array + } +} -export type ProviderAuthResponse = ProviderAuthResponses[keyof ProviderAuthResponses]; +export type ProviderAuthResponse = ProviderAuthResponses[keyof ProviderAuthResponses] export type ProviderOauthAuthorizeData = { - body?: { - /** - * Auth method index - */ - method: number; - }; - path: { - /** - * Provider ID - */ - providerID: string; - }; - query?: { - directory?: string; - }; - url: '/provider/{providerID}/oauth/authorize'; -}; + body?: { + /** + * Auth method index + */ + method: number + } + path: { + /** + * Provider ID + */ + providerID: string + } + query?: { + directory?: string + } + url: "/provider/{providerID}/oauth/authorize" +} export type ProviderOauthAuthorizeErrors = { - /** - * Bad request - */ - 400: BadRequestError; -}; + /** + * Bad request + */ + 400: BadRequestError +} -export type ProviderOauthAuthorizeError = ProviderOauthAuthorizeErrors[keyof ProviderOauthAuthorizeErrors]; +export type ProviderOauthAuthorizeError = ProviderOauthAuthorizeErrors[keyof ProviderOauthAuthorizeErrors] export type ProviderOauthAuthorizeResponses = { - /** - * Authorization URL and method - */ - 200: ProviderAuthAuthorization; -}; + /** + * Authorization URL and method + */ + 200: ProviderAuthAuthorization +} -export type ProviderOauthAuthorizeResponse = ProviderOauthAuthorizeResponses[keyof ProviderOauthAuthorizeResponses]; +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; - }; - url: '/provider/{providerID}/oauth/callback'; -}; + body?: { + /** + * Auth method index + */ + method: number + /** + * OAuth authorization code + */ + code?: string + } + path: { + /** + * Provider ID + */ + providerID: string + } + query?: { + directory?: string + } + url: "/provider/{providerID}/oauth/callback" +} export type ProviderOauthCallbackErrors = { - /** - * Bad request - */ - 400: BadRequestError; -}; + /** + * Bad request + */ + 400: BadRequestError +} -export type ProviderOauthCallbackError = ProviderOauthCallbackErrors[keyof ProviderOauthCallbackErrors]; +export type ProviderOauthCallbackError = ProviderOauthCallbackErrors[keyof ProviderOauthCallbackErrors] export type ProviderOauthCallbackResponses = { - /** - * OAuth callback processed successfully - */ - 200: boolean; -}; + /** + * OAuth callback processed successfully + */ + 200: boolean +} -export type ProviderOauthCallbackResponse = ProviderOauthCallbackResponses[keyof ProviderOauthCallbackResponses]; +export type ProviderOauthCallbackResponse = ProviderOauthCallbackResponses[keyof ProviderOauthCallbackResponses] export type FindTextData = { - body?: never; - path?: never; - query: { - directory?: string; - pattern: string; - }; - url: '/find'; -}; + body?: never + path?: never + query: { + directory?: 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; - }>; - }>; -}; + /** + * 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 FindTextResponse = FindTextResponses[keyof FindTextResponses] export type FindFilesData = { - body?: never; - path?: never; - query: { - directory?: string; - query: string; - dirs?: 'true' | 'false'; - }; - url: '/find/file'; -}; + body?: never + path?: never + query: { + directory?: string + query: string + dirs?: "true" | "false" + } + url: "/find/file" +} export type FindFilesResponses = { - /** - * File paths - */ - 200: Array; -}; + /** + * File paths + */ + 200: Array +} -export type FindFilesResponse = FindFilesResponses[keyof FindFilesResponses]; +export type FindFilesResponse = FindFilesResponses[keyof FindFilesResponses] export type FindSymbolsData = { - body?: never; - path?: never; - query: { - directory?: string; - query: string; - }; - url: '/find/symbol'; -}; + body?: never + path?: never + query: { + directory?: string + query: string + } + url: "/find/symbol" +} export type FindSymbolsResponses = { - /** - * Symbols - */ - 200: Array; -}; + /** + * Symbols + */ + 200: Array +} -export type FindSymbolsResponse = FindSymbolsResponses[keyof FindSymbolsResponses]; +export type FindSymbolsResponse = FindSymbolsResponses[keyof FindSymbolsResponses] export type FileListData = { - body?: never; - path?: never; - query: { - directory?: string; - path: string; - }; - url: '/file'; -}; + body?: never + path?: never + query: { + directory?: string + path: string + } + url: "/file" +} export type FileListResponses = { - /** - * Files and directories - */ - 200: Array; -}; + /** + * Files and directories + */ + 200: Array +} -export type FileListResponse = FileListResponses[keyof FileListResponses]; +export type FileListResponse = FileListResponses[keyof FileListResponses] export type FileReadData = { - body?: never; - path?: never; - query: { - directory?: string; - path: string; - }; - url: '/file/content'; -}; + body?: never + path?: never + query: { + directory?: string + path: string + } + url: "/file/content" +} export type FileReadResponses = { - /** - * File content - */ - 200: FileContent; -}; + /** + * File content + */ + 200: FileContent +} -export type FileReadResponse = FileReadResponses[keyof FileReadResponses]; +export type FileReadResponse = FileReadResponses[keyof FileReadResponses] export type FileStatusData = { - body?: never; - path?: never; - query?: { - directory?: string; - }; - url: '/file/status'; -}; + body?: never + path?: never + query?: { + directory?: string + } + url: "/file/status" +} export type FileStatusResponses = { - /** - * File status - */ - 200: Array; -}; + /** + * File status + */ + 200: Array +} -export type FileStatusResponse = FileStatusResponses[keyof FileStatusResponses]; +export type FileStatusResponse = FileStatusResponses[keyof FileStatusResponses] 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; - }; - }; - path?: never; - query?: { - directory?: string; - }; - url: '/log'; -}; + 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 + } + } + path?: never + query?: { + directory?: string + } + url: "/log" +} export type AppLogErrors = { - /** - * Bad request - */ - 400: BadRequestError; -}; + /** + * Bad request + */ + 400: BadRequestError +} -export type AppLogError = AppLogErrors[keyof AppLogErrors]; +export type AppLogError = AppLogErrors[keyof AppLogErrors] export type AppLogResponses = { - /** - * Log entry written successfully - */ - 200: boolean; -}; + /** + * Log entry written successfully + */ + 200: boolean +} -export type AppLogResponse = AppLogResponses[keyof AppLogResponses]; +export type AppLogResponse = AppLogResponses[keyof AppLogResponses] export type AppAgentsData = { - body?: never; - path?: never; - query?: { - directory?: string; - }; - url: '/agent'; -}; + body?: never + path?: never + query?: { + directory?: string + } + url: "/agent" +} export type AppAgentsResponses = { - /** - * List of agents - */ - 200: Array; -}; + /** + * List of agents + */ + 200: Array +} -export type AppAgentsResponse = AppAgentsResponses[keyof AppAgentsResponses]; +export type AppAgentsResponse = AppAgentsResponses[keyof AppAgentsResponses] export type McpStatusData = { - body?: never; - path?: never; - query?: { - directory?: string; - }; - url: '/mcp'; -}; + body?: never + path?: never + query?: { + directory?: string + } + url: "/mcp" +} export type McpStatusResponses = { - /** - * MCP server status - */ - 200: { - [key: string]: McpStatus; - }; -}; + /** + * MCP server status + */ + 200: { + [key: string]: McpStatus + } +} -export type McpStatusResponse = McpStatusResponses[keyof McpStatusResponses]; +export type McpStatusResponse = McpStatusResponses[keyof McpStatusResponses] export type McpAddData = { - body?: { - name: string; - config: McpLocalConfig | McpRemoteConfig; - }; - path?: never; - query?: { - directory?: string; - }; - url: '/mcp'; -}; + body?: { + name: string + config: McpLocalConfig | McpRemoteConfig + } + path?: never + query?: { + directory?: string + } + url: "/mcp" +} export type McpAddErrors = { - /** - * Bad request - */ - 400: BadRequestError; -}; + /** + * Bad request + */ + 400: BadRequestError +} -export type McpAddError = McpAddErrors[keyof McpAddErrors]; +export type McpAddError = McpAddErrors[keyof McpAddErrors] export type McpAddResponses = { - /** - * MCP server added successfully - */ - 200: { - [key: string]: McpStatus; - }; -}; + /** + * MCP server added successfully + */ + 200: { + [key: string]: McpStatus + } +} -export type McpAddResponse = McpAddResponses[keyof McpAddResponses]; +export type McpAddResponse = McpAddResponses[keyof McpAddResponses] export type McpAuthRemoveData = { - body?: never; - path: { - name: string; - }; - query?: { - directory?: string; - }; - url: '/mcp/{name}/auth'; -}; + body?: never + path: { + name: string + } + query?: { + directory?: string + } + url: "/mcp/{name}/auth" +} export type McpAuthRemoveErrors = { - /** - * Not found - */ - 404: NotFoundError; -}; + /** + * Not found + */ + 404: NotFoundError +} -export type McpAuthRemoveError = McpAuthRemoveErrors[keyof McpAuthRemoveErrors]; +export type McpAuthRemoveError = McpAuthRemoveErrors[keyof McpAuthRemoveErrors] export type McpAuthRemoveResponses = { - /** - * OAuth credentials removed - */ - 200: { - success: true; - }; -}; + /** + * OAuth credentials removed + */ + 200: { + success: true + } +} -export type McpAuthRemoveResponse = McpAuthRemoveResponses[keyof McpAuthRemoveResponses]; +export type McpAuthRemoveResponse = McpAuthRemoveResponses[keyof McpAuthRemoveResponses] export type McpAuthStartData = { - body?: never; - path: { - name: string; - }; - query?: { - directory?: string; - }; - url: '/mcp/{name}/auth'; -}; + body?: never + path: { + name: string + } + query?: { + directory?: string + } + url: "/mcp/{name}/auth" +} export type McpAuthStartErrors = { - /** - * Bad request - */ - 400: BadRequestError; - /** - * Not found - */ - 404: NotFoundError; -}; + /** + * Bad request + */ + 400: BadRequestError + /** + * Not found + */ + 404: NotFoundError +} -export type McpAuthStartError = McpAuthStartErrors[keyof McpAuthStartErrors]; +export type McpAuthStartError = McpAuthStartErrors[keyof McpAuthStartErrors] export type McpAuthStartResponses = { + /** + * OAuth flow started + */ + 200: { /** - * OAuth flow started + * URL to open in browser for authorization */ - 200: { - /** - * URL to open in browser for authorization - */ - authorizationUrl: string; - }; -}; + authorizationUrl: string + } +} -export type McpAuthStartResponse = McpAuthStartResponses[keyof McpAuthStartResponses]; +export type McpAuthStartResponse = McpAuthStartResponses[keyof McpAuthStartResponses] export type McpAuthCallbackData = { - body?: { - /** - * Authorization code from OAuth callback - */ - code: string; - }; - path: { - name: string; - }; - query?: { - directory?: string; - }; - url: '/mcp/{name}/auth/callback'; -}; + body?: { + /** + * Authorization code from OAuth callback + */ + code: string + } + path: { + name: string + } + query?: { + directory?: string + } + url: "/mcp/{name}/auth/callback" +} export type McpAuthCallbackErrors = { - /** - * Bad request - */ - 400: BadRequestError; - /** - * Not found - */ - 404: NotFoundError; -}; + /** + * Bad request + */ + 400: BadRequestError + /** + * Not found + */ + 404: NotFoundError +} -export type McpAuthCallbackError = McpAuthCallbackErrors[keyof McpAuthCallbackErrors]; +export type McpAuthCallbackError = McpAuthCallbackErrors[keyof McpAuthCallbackErrors] export type McpAuthCallbackResponses = { - /** - * OAuth authentication completed - */ - 200: McpStatus; -}; + /** + * OAuth authentication completed + */ + 200: McpStatus +} -export type McpAuthCallbackResponse = McpAuthCallbackResponses[keyof McpAuthCallbackResponses]; +export type McpAuthCallbackResponse = McpAuthCallbackResponses[keyof McpAuthCallbackResponses] export type McpAuthAuthenticateData = { - body?: never; - path: { - name: string; - }; - query?: { - directory?: string; - }; - url: '/mcp/{name}/auth/authenticate'; -}; + body?: never + path: { + name: string + } + query?: { + directory?: string + } + url: "/mcp/{name}/auth/authenticate" +} export type McpAuthAuthenticateErrors = { - /** - * Bad request - */ - 400: BadRequestError; - /** - * Not found - */ - 404: NotFoundError; -}; + /** + * Bad request + */ + 400: BadRequestError + /** + * Not found + */ + 404: NotFoundError +} -export type McpAuthAuthenticateError = McpAuthAuthenticateErrors[keyof McpAuthAuthenticateErrors]; +export type McpAuthAuthenticateError = McpAuthAuthenticateErrors[keyof McpAuthAuthenticateErrors] export type McpAuthAuthenticateResponses = { - /** - * OAuth authentication completed - */ - 200: McpStatus; -}; + /** + * OAuth authentication completed + */ + 200: McpStatus +} -export type McpAuthAuthenticateResponse = McpAuthAuthenticateResponses[keyof McpAuthAuthenticateResponses]; +export type McpAuthAuthenticateResponse = McpAuthAuthenticateResponses[keyof McpAuthAuthenticateResponses] export type LspStatusData = { - body?: never; - path?: never; - query?: { - directory?: string; - }; - url: '/lsp'; -}; + body?: never + path?: never + query?: { + directory?: string + } + url: "/lsp" +} export type LspStatusResponses = { - /** - * LSP server status - */ - 200: Array; -}; + /** + * LSP server status + */ + 200: Array +} -export type LspStatusResponse = LspStatusResponses[keyof LspStatusResponses]; +export type LspStatusResponse = LspStatusResponses[keyof LspStatusResponses] export type FormatterStatusData = { - body?: never; - path?: never; - query?: { - directory?: string; - }; - url: '/formatter'; -}; + body?: never + path?: never + query?: { + directory?: string + } + url: "/formatter" +} export type FormatterStatusResponses = { - /** - * Formatter status - */ - 200: Array; -}; + /** + * Formatter status + */ + 200: Array +} -export type FormatterStatusResponse = FormatterStatusResponses[keyof FormatterStatusResponses]; +export type FormatterStatusResponse = FormatterStatusResponses[keyof FormatterStatusResponses] export type TuiAppendPromptData = { - body?: { - text: string; - }; - path?: never; - query?: { - directory?: string; - }; - url: '/tui/append-prompt'; -}; + body?: { + text: string + } + path?: never + query?: { + directory?: string + } + url: "/tui/append-prompt" +} export type TuiAppendPromptErrors = { - /** - * Bad request - */ - 400: BadRequestError; -}; + /** + * Bad request + */ + 400: BadRequestError +} -export type TuiAppendPromptError = TuiAppendPromptErrors[keyof TuiAppendPromptErrors]; +export type TuiAppendPromptError = TuiAppendPromptErrors[keyof TuiAppendPromptErrors] export type TuiAppendPromptResponses = { - /** - * Prompt processed successfully - */ - 200: boolean; -}; + /** + * Prompt processed successfully + */ + 200: boolean +} -export type TuiAppendPromptResponse = TuiAppendPromptResponses[keyof TuiAppendPromptResponses]; +export type TuiAppendPromptResponse = TuiAppendPromptResponses[keyof TuiAppendPromptResponses] export type TuiOpenHelpData = { - body?: never; - path?: never; - query?: { - directory?: string; - }; - url: '/tui/open-help'; -}; + body?: never + path?: never + query?: { + directory?: string + } + url: "/tui/open-help" +} export type TuiOpenHelpResponses = { - /** - * Help dialog opened successfully - */ - 200: boolean; -}; + /** + * Help dialog opened successfully + */ + 200: boolean +} -export type TuiOpenHelpResponse = TuiOpenHelpResponses[keyof TuiOpenHelpResponses]; +export type TuiOpenHelpResponse = TuiOpenHelpResponses[keyof TuiOpenHelpResponses] export type TuiOpenSessionsData = { - body?: never; - path?: never; - query?: { - directory?: string; - }; - url: '/tui/open-sessions'; -}; + body?: never + path?: never + query?: { + directory?: string + } + url: "/tui/open-sessions" +} export type TuiOpenSessionsResponses = { - /** - * Session dialog opened successfully - */ - 200: boolean; -}; + /** + * Session dialog opened successfully + */ + 200: boolean +} -export type TuiOpenSessionsResponse = TuiOpenSessionsResponses[keyof TuiOpenSessionsResponses]; +export type TuiOpenSessionsResponse = TuiOpenSessionsResponses[keyof TuiOpenSessionsResponses] export type TuiOpenThemesData = { - body?: never; - path?: never; - query?: { - directory?: string; - }; - url: '/tui/open-themes'; -}; + body?: never + path?: never + query?: { + directory?: string + } + url: "/tui/open-themes" +} export type TuiOpenThemesResponses = { - /** - * Theme dialog opened successfully - */ - 200: boolean; -}; + /** + * Theme dialog opened successfully + */ + 200: boolean +} -export type TuiOpenThemesResponse = TuiOpenThemesResponses[keyof TuiOpenThemesResponses]; +export type TuiOpenThemesResponse = TuiOpenThemesResponses[keyof TuiOpenThemesResponses] export type TuiOpenModelsData = { - body?: never; - path?: never; - query?: { - directory?: string; - }; - url: '/tui/open-models'; -}; + body?: never + path?: never + query?: { + directory?: string + } + url: "/tui/open-models" +} export type TuiOpenModelsResponses = { - /** - * Model dialog opened successfully - */ - 200: boolean; -}; + /** + * Model dialog opened successfully + */ + 200: boolean +} -export type TuiOpenModelsResponse = TuiOpenModelsResponses[keyof TuiOpenModelsResponses]; +export type TuiOpenModelsResponse = TuiOpenModelsResponses[keyof TuiOpenModelsResponses] export type TuiSubmitPromptData = { - body?: never; - path?: never; - query?: { - directory?: string; - }; - url: '/tui/submit-prompt'; -}; + body?: never + path?: never + query?: { + directory?: string + } + url: "/tui/submit-prompt" +} export type TuiSubmitPromptResponses = { - /** - * Prompt submitted successfully - */ - 200: boolean; -}; + /** + * Prompt submitted successfully + */ + 200: boolean +} -export type TuiSubmitPromptResponse = TuiSubmitPromptResponses[keyof TuiSubmitPromptResponses]; +export type TuiSubmitPromptResponse = TuiSubmitPromptResponses[keyof TuiSubmitPromptResponses] export type TuiClearPromptData = { - body?: never; - path?: never; - query?: { - directory?: string; - }; - url: '/tui/clear-prompt'; -}; + body?: never + path?: never + query?: { + directory?: string + } + url: "/tui/clear-prompt" +} export type TuiClearPromptResponses = { - /** - * Prompt cleared successfully - */ - 200: boolean; -}; + /** + * Prompt cleared successfully + */ + 200: boolean +} -export type TuiClearPromptResponse = TuiClearPromptResponses[keyof TuiClearPromptResponses]; +export type TuiClearPromptResponse = TuiClearPromptResponses[keyof TuiClearPromptResponses] export type TuiExecuteCommandData = { - body?: { - command: string; - }; - path?: never; - query?: { - directory?: string; - }; - url: '/tui/execute-command'; -}; + body?: { + command: string + } + path?: never + query?: { + directory?: string + } + url: "/tui/execute-command" +} export type TuiExecuteCommandErrors = { - /** - * Bad request - */ - 400: BadRequestError; -}; + /** + * Bad request + */ + 400: BadRequestError +} -export type TuiExecuteCommandError = TuiExecuteCommandErrors[keyof TuiExecuteCommandErrors]; +export type TuiExecuteCommandError = TuiExecuteCommandErrors[keyof TuiExecuteCommandErrors] export type TuiExecuteCommandResponses = { - /** - * Command executed successfully - */ - 200: boolean; -}; + /** + * Command executed successfully + */ + 200: boolean +} -export type TuiExecuteCommandResponse = TuiExecuteCommandResponses[keyof TuiExecuteCommandResponses]; +export type TuiExecuteCommandResponse = TuiExecuteCommandResponses[keyof TuiExecuteCommandResponses] export type TuiShowToastData = { - body?: { - title?: string; - message: string; - variant: 'info' | 'success' | 'warning' | 'error'; - /** - * Duration in milliseconds - */ - duration?: number; - }; - path?: never; - query?: { - directory?: string; - }; - url: '/tui/show-toast'; -}; + body?: { + title?: string + message: string + variant: "info" | "success" | "warning" | "error" + /** + * Duration in milliseconds + */ + duration?: number + } + path?: never + query?: { + directory?: string + } + url: "/tui/show-toast" +} export type TuiShowToastResponses = { - /** - * Toast notification shown successfully - */ - 200: boolean; -}; + /** + * Toast notification shown successfully + */ + 200: boolean +} -export type TuiShowToastResponse = TuiShowToastResponses[keyof TuiShowToastResponses]; +export type TuiShowToastResponse = TuiShowToastResponses[keyof TuiShowToastResponses] export type TuiPublishData = { - body?: EventTuiPromptAppend | EventTuiCommandExecute | EventTuiToastShow; - path?: never; - query?: { - directory?: string; - }; - url: '/tui/publish'; -}; + body?: EventTuiPromptAppend | EventTuiCommandExecute | EventTuiToastShow + path?: never + query?: { + directory?: string + } + url: "/tui/publish" +} export type TuiPublishErrors = { - /** - * Bad request - */ - 400: BadRequestError; -}; + /** + * Bad request + */ + 400: BadRequestError +} -export type TuiPublishError = TuiPublishErrors[keyof TuiPublishErrors]; +export type TuiPublishError = TuiPublishErrors[keyof TuiPublishErrors] export type TuiPublishResponses = { - /** - * Event published successfully - */ - 200: boolean; -}; + /** + * Event published successfully + */ + 200: boolean +} -export type TuiPublishResponse = TuiPublishResponses[keyof TuiPublishResponses]; +export type TuiPublishResponse = TuiPublishResponses[keyof TuiPublishResponses] export type TuiControlNextData = { - body?: never; - path?: never; - query?: { - directory?: string; - }; - url: '/tui/control/next'; -}; + body?: never + path?: never + query?: { + directory?: string + } + url: "/tui/control/next" +} export type TuiControlNextResponses = { - /** - * Next TUI request - */ - 200: { - path: string; - body: unknown; - }; -}; + /** + * Next TUI request + */ + 200: { + path: string + body: unknown + } +} -export type TuiControlNextResponse = TuiControlNextResponses[keyof TuiControlNextResponses]; +export type TuiControlNextResponse = TuiControlNextResponses[keyof TuiControlNextResponses] export type TuiControlResponseData = { - body?: unknown; - path?: never; - query?: { - directory?: string; - }; - url: '/tui/control/response'; -}; + body?: unknown + path?: never + query?: { + directory?: string + } + url: "/tui/control/response" +} export type TuiControlResponseResponses = { - /** - * Response submitted successfully - */ - 200: boolean; -}; + /** + * Response submitted successfully + */ + 200: boolean +} -export type TuiControlResponseResponse = TuiControlResponseResponses[keyof TuiControlResponseResponses]; +export type TuiControlResponseResponse = TuiControlResponseResponses[keyof TuiControlResponseResponses] export type AuthSetData = { - body?: Auth; - path: { - providerID: string; - }; - query?: { - directory?: string; - }; - url: '/auth/{providerID}'; -}; + body?: Auth + path: { + providerID: string + } + query?: { + directory?: string + } + url: "/auth/{providerID}" +} export type AuthSetErrors = { - /** - * Bad request - */ - 400: BadRequestError; -}; + /** + * Bad request + */ + 400: BadRequestError +} -export type AuthSetError = AuthSetErrors[keyof AuthSetErrors]; +export type AuthSetError = AuthSetErrors[keyof AuthSetErrors] export type AuthSetResponses = { - /** - * Successfully set authentication credentials - */ - 200: boolean; -}; + /** + * Successfully set authentication credentials + */ + 200: boolean +} -export type AuthSetResponse = AuthSetResponses[keyof AuthSetResponses]; +export type AuthSetResponse = AuthSetResponses[keyof AuthSetResponses] export type EventSubscribeData = { - body?: never; - path?: never; - query?: { - directory?: string; - }; - url: '/event'; -}; + body?: never + path?: never + query?: { + directory?: string + } + url: "/event" +} export type EventSubscribeResponses = { - /** - * Event stream - */ - 200: Event; -}; + /** + * Event stream + */ + 200: Event +} -export type EventSubscribeResponse = EventSubscribeResponses[keyof EventSubscribeResponses]; +export type EventSubscribeResponse = EventSubscribeResponses[keyof EventSubscribeResponses]