Dax Raad il y a 4 mois
Parent
commit
c35c15a3ac

+ 3 - 3
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/[email protected]", "", { "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/[email protected]", "", { "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/[email protected]", "", { "peerDependencies": { "@standard-schema/spec": "1.0.0", "hono": ">=3.9.0" } }, "sha512-EIyZPPwkyLn6XKwFj5NBEWHXhXbgmnVh2ceIFo5GO7gKI9WmzTjPDKnppQB0KrqKeAkq3kpoW4SIbu5X1dgx3w=="],
 

+ 13 - 17
packages/desktop/src/components/prompt-input.tsx

@@ -235,9 +235,7 @@ export const PromptInput: Component<PromptInputProps> = (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<PromptInputProps> = (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,
+      ],
     })
   }
 

+ 8 - 12
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,
         },
       })
     })

+ 1 - 1
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"

+ 1 - 1
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"

+ 5 - 6
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

+ 1 - 1
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"

+ 7 - 8
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<LocalPTY> & { 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)

+ 5 - 5
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) => {

+ 1 - 1
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()

+ 1 - 1
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:",

+ 1 - 2
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`

+ 6 - 4
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<T extends ClientOptions = ClientOptions2> = (override?: Config<ClientOptions & T>) => Config<Required<ClientOptions> & T>;
+export type CreateClientConfig<T extends ClientOptions = ClientOptions2> = (
+  override?: Config<ClientOptions & T>,
+) => Config<Required<ClientOptions> & T>
 
-export const client = createClient(createConfig<ClientOptions2>({ baseUrl: 'http://localhost:4096' }));
+export const client = createClient(createConfig<ClientOptions2>({ baseUrl: "http://localhost:4096" }))

+ 127 - 150
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<RequestInit, 'body' | 'headers'> & {
-  body?: any;
-  headers: ReturnType<typeof mergeHeaders>;
-};
+type ReqInit = Omit<RequestInit, "body" | "headers"> & {
+  body?: any
+  headers: ReturnType<typeof mergeHeaders>
+}
 
 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<Request, Response, unknown, ResolvedRequestOptions>()
 
   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';
-
-      if (
-        response.status === 204 ||
-        response.headers.get('Content-Length') === '0'
-      ) {
-        let emptyData: any;
+        (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
         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<HttpMethod>) => (options: RequestOptions) =>
-      request({ ...options, method });
+  const makeMethodFn = (method: Uppercase<HttpMethod>) => (options: RequestOptions) => request({ ...options, method })
 
-  const makeSseFn =
-    (method: Uppercase<HttpMethod>) => 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<string, string>,
-        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<HttpMethod>) => 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<string, string>,
+      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
+}

+ 8 - 8
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"

+ 70 - 109
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';
-
-export type ResponseStyle = 'data' | 'fields';
+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 interface Config<T extends ClientOptions = ClientOptions>
-  extends Omit<RequestInit, 'body' | 'headers' | 'method'>,
+  extends Omit<RequestInit, "body" | "headers" | "method">,
     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<T extends ClientOptions = ClientOptions>
    *
    * @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<TData>,
-      | '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<string, unknown>;
-  query?: Record<string, unknown>;
+  body?: unknown
+  path?: Record<string, unknown>
+  query?: Record<string, unknown>
   /**
    * Security mechanism(s) to use for the request.
    */
-  security?: ReadonlyArray<Auth>;
-  url: Url;
+  security?: ReadonlyArray<Auth>
+  url: Url
 }
 
 export interface ResolvedRequestOptions<
-  TResponseStyle extends ResponseStyle = 'fields',
+  TResponseStyle extends ResponseStyle = "fields",
   ThrowOnError extends boolean = boolean,
   Url extends string = string,
 > extends RequestOptions<unknown, TResponseStyle, ThrowOnError, Url> {
-  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<string, unknown>
           ? TData[keyof TData]
           : TData
         : {
-            data: TData extends Record<string, unknown>
-              ? TData[keyof TData]
-              : TData;
-            request: Request;
-            response: Response;
+            data: TData extends Record<string, unknown> ? TData[keyof TData] : TData
+            request: Request
+            response: Response
           }
     >
   : Promise<
-      TResponseStyle extends 'data'
-        ?
-            | (TData extends Record<string, unknown>
-                ? TData[keyof TData]
-                : TData)
-            | undefined
+      TResponseStyle extends "data"
+        ? (TData extends Record<string, unknown> ? TData[keyof TData] : TData) | undefined
         : (
             | {
-                data: TData extends Record<string, unknown>
-                  ? TData[keyof TData]
-                  : TData;
-                error: undefined;
+                data: TData extends Record<string, unknown> ? TData[keyof TData] : TData
+                error: undefined
               }
             | {
-                data: undefined;
-                error: TError extends Record<string, unknown>
-                  ? TError[keyof TError]
-                  : TError;
+                data: undefined
+                error: TError extends Record<string, unknown> ? 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<RequestOptions<TData, TResponseStyle, ThrowOnError>, 'method'>,
-) => RequestResult<TData, TError, ThrowOnError, TResponseStyle>;
+  options: Omit<RequestOptions<TData, TResponseStyle, ThrowOnError>, "method">,
+) => RequestResult<TData, TError, ThrowOnError, TResponseStyle>
 
 type SseFn = <
   TData = unknown,
   TError = unknown,
   ThrowOnError extends boolean = false,
-  TResponseStyle extends ResponseStyle = 'fields',
+  TResponseStyle extends ResponseStyle = "fields",
 >(
-  options: Omit<RequestOptions<TData, TResponseStyle, ThrowOnError>, 'method'>,
-) => Promise<ServerSentEventsResult<TData, TError>>;
+  options: Omit<RequestOptions<TData, TResponseStyle, ThrowOnError>, "method">,
+) => Promise<ServerSentEventsResult<TData, TError>>
 
 type RequestFn = <
   TData = unknown,
   TError = unknown,
   ThrowOnError extends boolean = false,
-  TResponseStyle extends ResponseStyle = 'fields',
+  TResponseStyle extends ResponseStyle = "fields",
 >(
-  options: Omit<RequestOptions<TData, TResponseStyle, ThrowOnError>, 'method'> &
-    Pick<
-      Required<RequestOptions<TData, TResponseStyle, ThrowOnError>>,
-      'method'
-    >,
-) => RequestResult<TData, TError, ThrowOnError, TResponseStyle>;
+  options: Omit<RequestOptions<TData, TResponseStyle, ThrowOnError>, "method"> &
+    Pick<Required<RequestOptions<TData, TResponseStyle, ThrowOnError>>, "method">,
+) => RequestResult<TData, TError, ThrowOnError, TResponseStyle>
 
 type BuildUrlFn = <
   TData extends {
-    body?: unknown;
-    path?: Record<string, unknown>;
-    query?: Record<string, unknown>;
-    url: string;
+    body?: unknown
+    path?: Record<string, unknown>
+    query?: Record<string, unknown>
+    url: string
   },
 >(
   options: TData & Options<TData>,
-) => string;
-
-export type Client = CoreClient<
-  RequestFn,
-  Config,
-  MethodFn,
-  BuildUrlFn,
-  SseFn
-> & {
-  interceptors: Middleware<Request, Response, unknown, ResolvedRequestOptions>;
-};
+) => string
+
+export type Client = CoreClient<RequestFn, Config, MethodFn, BuildUrlFn, SseFn> & {
+  interceptors: Middleware<Request, Response, unknown, ResolvedRequestOptions>
+}
 
 /**
  * The `createClientConfig()` function will be called on client initialization
@@ -217,25 +181,22 @@ export type Client = CoreClient<
  */
 export type CreateClientConfig<T extends ClientOptions = ClientOptions> = (
   override?: Config<ClientOptions & T>,
-) => Config<Required<ClientOptions> & T>;
+) => Config<Required<ClientOptions> & 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<T, K> = Pick<T, Exclude<keyof T, K>>;
+type OmitKeys<T, K> = Pick<T, Exclude<keyof T, K>>
 
 export type Options<
   TData extends TDataShape = TDataShape,
   ThrowOnError extends boolean = boolean,
   TResponse = unknown,
-  TResponseStyle extends ResponseStyle = 'fields',
-> = OmitKeys<
-  RequestOptions<TResponse, TResponseStyle, ThrowOnError>,
-  'body' | 'path' | 'query' | 'url'
-> &
-  ([TData] extends [never] ? unknown : Omit<TData, 'url'>);
+  TResponseStyle extends ResponseStyle = "fields",
+> = OmitKeys<RequestOptions<TResponse, TResponseStyle, ThrowOnError>, "body" | "path" | "query" | "url"> &
+  ([TData] extends [never] ? unknown : Omit<TData, "url">)

+ 120 - 163
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';
-
-export const createQuerySerializer = <T = unknown>({
-  parameters = {},
-  ...args
-}: QuerySerializerOptions = {}) => {
+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 = <T = unknown>({ 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<string, unknown>,
             ...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<Config['parseAs'], 'auto'> => {
+export const getParseAs = (contentType: string | null): Exclude<Config["parseAs"], "auto"> => {
   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<RequestOptions, 'auth' | 'query'> & {
-    headers: Headers;
+  options: Pick<RequestOptions, "auth" | "query"> & {
+    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<Required<RequestOptions>, 'security'> &
-  Pick<RequestOptions, 'auth' | 'query'> & {
-    headers: Headers;
+}: Pick<Required<RequestOptions>, "security"> &
+  Pick<RequestOptions, "auth" | "query"> & {
+    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;
-};
-
-export const mergeHeaders = (
-  ...headers: Array<Required<Config>['headers'] | undefined>
-): Headers => {
-  const mergedHeaders = new Headers();
+    entries.push([key, value])
+  })
+  return entries
+}
+
+export const mergeHeaders = (...headers: Array<Required<Config>["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<Err, Res, Req, Options> = (
   error: Err,
   response: Res,
   request: Req,
   options: Options,
-) => Err | Promise<Err>;
+) => Err | Promise<Err>
 
-type ReqInterceptor<Req, Options> = (
-  request: Req,
-  options: Options,
-) => Req | Promise<Req>;
+type ReqInterceptor<Req, Options> = (request: Req, options: Options) => Req | Promise<Req>
 
-type ResInterceptor<Res, Req, Options> = (
-  response: Res,
-  request: Req,
-  options: Options,
-) => Res | Promise<Res>;
+type ResInterceptor<Res, Req, Options> = (response: Res, request: Req, options: Options) => Res | Promise<Res>
 
 class Interceptors<Interceptor> {
-  fns: Array<Interceptor | null> = [];
+  fns: Array<Interceptor | null> = []
 
   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<Req, Res, Err, Options> {
-  error: Interceptors<ErrInterceptor<Err, Res, Req, Options>>;
-  request: Interceptors<ReqInterceptor<Req, Options>>;
-  response: Interceptors<ResInterceptor<Res, Req, Options>>;
+  error: Interceptors<ErrInterceptor<Err, Res, Req, Options>>
+  request: Interceptors<ReqInterceptor<Req, Options>>
+  response: Interceptors<ResInterceptor<Res, Req, Options>>
 }
 
-export const createInterceptors = <Req, Res, Err, Options>(): Middleware<
-  Req,
-  Res,
-  Err,
-  Options
-> => ({
+export const createInterceptors = <Req, Res, Err, Options>(): Middleware<Req, Res, Err, Options> => ({
   error: new Interceptors<ErrInterceptor<Err, Res, Req, Options>>(),
   request: new Interceptors<ReqInterceptor<Req, Options>>(),
   response: new Interceptors<ResInterceptor<Res, Req, Options>>(),
-});
+})
 
 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 = <T extends ClientOptions = ClientOptions>(
   override: Config<Omit<ClientOptions, keyof T> & T> = {},
 ): Config<Omit<ClientOptions, keyof T> & T> => ({
   ...jsonBodySerializer,
   headers: defaultHeaders,
-  parseAs: 'auto',
+  parseAs: "auto",
   querySerializer: defaultQuerySerializer,
   ...override,
-});
+})

+ 13 - 14
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) | AuthToken,
 ): Promise<string | undefined> => {
-  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
+}

+ 38 - 56
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, unknown>) => string;
+export type QuerySerializer = (query: Record<string, unknown>) => string
 
-export type BodySerializer = (body: any) => any;
+export type BodySerializer = (body: any) => any
 
 type QuerySerializerOptionsObject = {
-  allowReserved?: boolean;
-  array?: Partial<SerializerOptions<ArrayStyle>>;
-  object?: Partial<SerializerOptions<ObjectStyle>>;
-};
+  allowReserved?: boolean
+  array?: Partial<SerializerOptions<ArrayStyle>>
+  object?: Partial<SerializerOptions<ObjectStyle>>
+}
 
 export type QuerySerializerOptions = QuerySerializerOptionsObject & {
   /**
    * Per-parameter serialization overrides. When provided, these settings
    * override the global array/object settings for specific parameter names.
    */
-  parameters?: Record<string, QuerySerializerOptionsObject>;
-};
+  parameters?: Record<string, QuerySerializerOptionsObject>
+}
 
-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: <T extends Record<string, any> | Array<Record<string, any>>>(
-    body: T,
-  ): FormData => {
-    const data = new FormData();
+  bodySerializer: <T extends Record<string, any> | Array<Record<string, any>>>(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: <T>(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: <T extends Record<string, any> | Array<Record<string, any>>>(
-    body: T,
-  ): string => {
-    const data = new URLSearchParams();
+  bodySerializer: <T extends Record<string, any> | Array<Record<string, any>>>(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()
   },
-};
+}

+ 63 - 70
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<Slot, 'body'>;
+      in: Exclude<Slot, "body">
       /**
        * 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<Slot, 'body'>;
+      in: Extract<Slot, "body">
       /**
        * 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<Record<Slot, boolean>>;
-  args?: ReadonlyArray<Field>;
+  allowExtra?: Partial<Record<Slot, boolean>>
+  args?: ReadonlyArray<Field>
 }
 
-export type FieldsConfig = ReadonlyArray<Field | Fields>;
+export type FieldsConfig = ReadonlyArray<Field | Fields>
 
 const extraPrefixesMap: Record<string, Slot> = {
-  $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<string, unknown>;
-  path: Record<string, unknown>;
-  query: Record<string, unknown>;
+  body: unknown
+  headers: Record<string, unknown>
+  path: Record<string, unknown>
+  query: Record<string, unknown>
 }
 
 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<unknown>,
-  fields: FieldsConfig,
-) => {
+export const buildClientParams = (args: ReadonlyArray<unknown>, 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<string, unknown>)[name] = arg;
+          ;(params[field.in] as Record<string, unknown>)[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<string, unknown>)[name] = value;
+            const name = field.map || key
+            ;(params[field.in] as Record<string, unknown>)[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<string, unknown>)[
-              key.slice(prefix.length)
-            ] = value;
-          } else if ('allowExtra' in config && config.allowExtra) {
+            const [prefix, slot] = extra
+            ;(params[slot] as Record<string, unknown>)[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<string, unknown>)[key] = value;
-                break;
+                ;(params[slot as Slot] as Record<string, unknown>)[key] = value
+                break
               }
             }
           }
@@ -170,7 +163,7 @@ export const buildClientParams = (
     }
   }
 
-  stripEmptySlots(params);
+  stripEmptySlots(params)
 
-  return params;
-};
+  return params
+}

+ 80 - 94
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<T>
-  extends SerializePrimitiveOptions,
-    SerializerOptions<T> {}
+interface SerializeOptions<T> extends SerializePrimitiveOptions, SerializerOptions<T> {}
 
 interface SerializePrimitiveOptions {
-  allowReserved?: boolean;
-  name: string;
+  allowReserved?: boolean
+  name: string
 }
 
 export interface SerializerOptions<T> {
   /**
    * @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<ArraySeparatorStyle> & {
-  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<ObjectSeparatorStyle> & {
-  value: Record<string, unknown> | Date;
-  valueOnly?: boolean;
+  value: Record<string, unknown> | 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
+}

+ 42 - 67
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<string, unknown> => {
-  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<string, JsonValue> = {};
+  const entries = Array.from(params.entries()).sort(([a], [b]) => a.localeCompare(b))
+  const result: Record<string, JsonValue> = {}
 
   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
+}

+ 82 - 109
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<TData = unknown> = Omit<
-  RequestInit,
-  'method'
-> &
-  Pick<Config, 'method' | 'responseTransformer' | 'responseValidator'> & {
+export type ServerSentEventsOptions<TData = unknown> = Omit<RequestInit, "method"> &
+  Pick<Config, "method" | "responseTransformer" | "responseValidator"> & {
     /**
      * 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<Request>;
+    onRequest?: (url: string, init: RequestInit) => Promise<Request>
     /**
      * Callback invoked when a network or parsing error occurs during streaming.
      *
@@ -25,7 +22,7 @@ export type ServerSentEventsOptions<TData = unknown> = 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<TData = unknown> = Omit<
      * @param event Event streamed from the server.
      * @returns Nothing (void).
      */
-    onSseEvent?: (event: StreamEvent<TData>) => void;
-    serializedBody?: RequestInit['body'];
+    onSseEvent?: (event: StreamEvent<TData>) => void
+    serializedBody?: RequestInit["body"]
     /**
      * Default retry delay in milliseconds.
      *
@@ -43,11 +40,11 @@ export type ServerSentEventsOptions<TData = unknown> = 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<TData = unknown> = Omit<
      *
      * @default 30000
      */
-    sseMaxRetryDelay?: number;
+    sseMaxRetryDelay?: number
     /**
      * Optional sleep function for retry backoff.
      *
      * Defaults to using `setTimeout`.
      */
-    sseSleepFn?: (ms: number) => Promise<void>;
-    url: string;
-  };
+    sseSleepFn?: (ms: number) => Promise<void>
+    url: string
+  }
 
 export interface StreamEvent<TData = unknown> {
-  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<string, unknown> ? TData[keyof TData] : TData,
-    TReturn,
-    TNext
-  >;
-};
+export type ServerSentEventsResult<TData = unknown, TReturn = void, TNext = unknown> = {
+  stream: AsyncGenerator<TData extends Record<string, unknown> ? TData[keyof TData] : TData, TReturn, TNext>
+}
 
 export const createSseClient = <TData = unknown>({
   onRequest,
@@ -99,123 +88,113 @@ export const createSseClient = <TData = unknown>({
   url,
   ...options
 }: ServerSentEventsOptions): ServerSentEventsResult<TData> => {
-  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<string, string> | undefined);
+          : new Headers(options.headers as Record<string, string> | 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<string> = [];
-              let eventName: string | undefined;
+              const lines = chunk.split("\n")
+              const dataLines: Array<string> = []
+              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 = <TData = unknown>({
                 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 }
+}

+ 22 - 54
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<RequestFn = never, Config = unknown, MethodFn = never, BuildUrlFn = never, SseFn = never> = {
   /**
    * 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) | AuthToken;
+  auth?: ((auth: Auth) => Promise<AuthToken> | 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<string, string | number | boolean | (string | number | boolean)[] | null | undefined | unknown>
   /**
    * The request method.
    *
    * {@link https://developer.mozilla.org/docs/Web/API/fetch#method See more}
    */
-  method?: Uppercase<HttpMethod>;
+  method?: Uppercase<HttpMethod>
   /**
    * 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<unknown>;
+  requestValidator?: (data: unknown) => Promise<unknown>
   /**
    * 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<unknown>;
+  responseTransformer?: (data: unknown) => Promise<unknown>
   /**
    * 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<unknown>;
+  responseValidator?: (data: unknown) => Promise<unknown>
 }
 
 type IsExactlyNeverOrNeverUndefined<T> = [T] extends [never]
@@ -109,10 +79,8 @@ type IsExactlyNeverOrNeverUndefined<T> = [T] extends [never]
     ? [undefined] extends [T]
       ? false
       : true
-    : false;
+    : false
 
 export type OmitNever<T extends Record<string, unknown>> = {
-  [K in keyof T as IsExactlyNeverOrNeverUndefined<T[K]> extends true
-    ? never
-    : K]: T[K];
-};
+  [K in keyof T as IsExactlyNeverOrNeverUndefined<T[K]> extends true ? never : K]: T[K]
+}

+ 58 - 64
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<string, unknown>;
-  url: string;
+  path: Record<string, unknown>
+  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<string, unknown>,
             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<string, unknown>;
-  query?: Record<string, unknown>;
-  querySerializer: QuerySerializer;
-  url: string;
+  baseUrl?: string
+  path?: Record<string, unknown>
+  query?: Record<string, unknown>
+  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
 }

Fichier diff supprimé car celui-ci est trop grand
+ 0 - 2
packages/sdk/js/src/v2/gen/sdk.gen.ts


+ 3139 - 3042
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<FileDiff>;
-    };
-    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<FileDiff>
+  }
+  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;
-};
-
-export type Message = UserMessage | 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
+}
+
+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<FilePart>;
-};
+  status: "completed"
+  input: {
+    [key: string]: unknown
+  }
+  output: string
+  title: string
+  metadata: {
+    [key: string]: unknown
+  }
+  time: {
+    start: number
+    end: number
+    compacted?: number
+  }
+  attachments?: Array<FilePart>
+}
 
 export type ToolStateError = {
-    status: 'error';
-    input: {
-        [key: string]: unknown;
-    };
-    error: string;
-    metadata?: {
-        [key: string]: unknown;
-    };
-    time: {
-        start: number;
-        end: number;
-    };
-};
-
-export type ToolState = ToolStatePending | ToolStateRunning | ToolStateCompleted | ToolStateError;
+  status: "error"
+  input: {
+    [key: string]: unknown
+  }
+  error: string
+  metadata?: {
+    [key: string]: unknown
+  }
+  time: {
+    start: number
+    end: number
+  }
+}
+
+export type ToolState = ToolStatePending | ToolStateRunning | ToolStateCompleted | ToolStateError
 
 export type ToolPart = {
-    id: string;
-    sessionID: string;
-    messageID: string;
-    type: 'tool';
-    callID: string;
-    tool: string;
-    state: ToolState;
-    metadata?: {
-        [key: string]: unknown;
-    };
-};
+  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<string>;
-};
+  id: string
+  sessionID: string
+  messageID: string
+  type: "patch"
+  hash: string
+  files: Array<string>
+}
 
 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;
-};
-
-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;
+  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 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<string>;
-    sessionID: string;
-    messageID: string;
-    callID?: string;
-    title: string;
-    metadata: {
-        [key: string]: unknown;
-    };
-    time: {
-        created: number;
-    };
-};
+  id: string
+  type: string
+  pattern?: string | Array<string>
+  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;
-    };
-};
-
-export type SessionStatus = {
-    type: 'idle';
-} | {
-    type: 'retry';
-    attempt: number;
-    message: string;
-    next: number;
-} | {
-    type: 'busy';
-};
+  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 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<Todo>;
-    };
-};
+  type: "todo.updated"
+  properties: {
+    sessionID: string
+    todos: Array<Todo>
+  }
+}
 
 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<FileDiff>;
-    };
-    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<FileDiff>
+  }
+  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<FileDiff>;
-    };
-};
+  type: "session.diff"
+  properties: {
+    sessionID: string
+    diff: Array<FileDiff>
+  }
+}
 
 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<string>;
-    cwd: string;
-    status: 'running' | 'exited';
-    pid: number;
-};
+  id: string
+  title: string
+  command: string
+  args: Array<string>
+  cwd: string
+  status: "running" | "exited"
+  pid: number
+}
 
 export type EventPtyCreated = {
-    type: 'pty.created';
-    properties: {
-        info: Pty;
-    };
-};
+  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;
-    };
-};
-
-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;
+  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 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<string>;
-    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<string>;
-    blacklist?: Array<string>;
-    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<string>
+  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<string>
+  blacklist?: Array<string>
+  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<string>;
-    /**
-     * Environment variables to set when running the MCP server
-     */
-    environment?: {
-        [key: string]: string;
-    };
-    /**
-     * Enable or disable the MCP server on startup
-     */
-    enabled?: boolean;
-    /**
-     * Timeout in ms for 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<string>
+  /**
+   * Environment variables to set when running the MCP server
+   */
+  environment?: {
+    [key: string]: string
+  }
+  /**
+   * Enable or disable the MCP server on startup
+   */
+  enabled?: boolean
+  /**
+   * Timeout in ms for 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?: {
-        /**
-         * 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?: {
-        [key: string]: {
-            template: string;
-            description?: string;
-            agent?: string;
-            model?: string;
-            subtask?: boolean;
-        };
-    };
-    watcher?: {
-        ignore?: Array<string>;
-    };
-    plugin?: Array<string>;
-    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<string>;
-    /**
-     * When set, ONLY these providers will be enabled. All other providers will be ignored
-     */
-    enabled_providers?: Array<string>;
-    /**
-     * Model to use in the format of provider/model, eg anthropic/claude-2
-     */
-    model?: string;
-    /**
-     * Small model to use for tasks like title generation in the format of provider/model
-     */
-    small_model?: string;
-    /**
-     * 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 | {
+  /**
+   * JSON schema reference for configuration validation
+   */
+  $schema?: string
+  /**
+   * Theme name to use for the interface
+   */
+  theme?: string
+  keybinds?: KeybindsConfig
+  /**
+   * TUI specific settings
+   */
+  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?: {
+    [key: string]: {
+      template: string
+      description?: string
+      agent?: string
+      model?: string
+      subtask?: boolean
+    }
+  }
+  watcher?: {
+    ignore?: Array<string>
+  }
+  plugin?: Array<string>
+  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<string>
+  /**
+   * When set, ONLY these providers will be enabled. All other providers will be ignored
+   */
+  enabled_providers?: Array<string>
+  /**
+   * Model to use in the format of provider/model, eg anthropic/claude-2
+   */
+  model?: string
+  /**
+   * Small model to use for tasks like title generation in the format of provider/model
+   */
+  small_model?: string
+  /**
+   * 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<string>;
-            environment?: {
-                [key: string]: string;
-            };
-            extensions?: Array<string>;
-        };
-    };
-    lsp?: false | {
-        [key: string]: {
-            disabled: true;
-        } | {
-            command: Array<string>;
-            extensions?: Array<string>;
-            disabled?: boolean;
-            env?: {
-                [key: string]: string;
-            };
-            initialization?: {
-                [key: string]: unknown;
-            };
-        };
-    };
-    /**
-     * Additional instruction files or patterns to include
-     */
-    instructions?: Array<string>;
-    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<string>;
-                    environment?: {
-                        [key: string]: string;
-                    };
-                }>;
-            };
-            session_completed?: Array<{
-                command: Array<string>;
-                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<string>;
-    };
-};
-
-export type ToolIds = Array<string>;
+          disabled?: boolean
+          command?: Array<string>
+          environment?: {
+            [key: string]: string
+          }
+          extensions?: Array<string>
+        }
+      }
+  lsp?:
+    | false
+    | {
+        [key: string]:
+          | {
+              disabled: true
+            }
+          | {
+              command: Array<string>
+              extensions?: Array<string>
+              disabled?: boolean
+              env?: {
+                [key: string]: string
+              }
+              initialization?: {
+                [key: string]: unknown
+              }
+            }
+      }
+  /**
+   * Additional instruction files or patterns to include
+   */
+  instructions?: Array<string>
+  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<string>
+          environment?: {
+            [key: string]: string
+          }
+        }>
+      }
+      session_completed?: Array<{
+        command: Array<string>
+        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<string>
+  }
+}
+
+export type ToolIds = Array<string>
 
 export type ToolListItem = {
-    id: string;
-    description: string;
-    parameters: unknown;
-};
+  id: string
+  description: string
+  parameters: unknown
+}
 
-export type ToolList = Array<ToolListItem>;
+export type ToolList = Array<ToolListItem>
 
 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<string>;
-    key?: string;
-    options: {
-        [key: string]: unknown;
-    };
-    models: {
-        [key: string]: Model;
-    };
-};
+  id: string
+  name: string
+  source: "env" | "config" | "custom" | "api"
+  env: Array<string>
+  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<string>;
-        }>;
-        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<string>
+    }>
+    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<string>;
-    enabled: boolean;
-};
+  name: string
+  extensions: Array<string>
+  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<Project>;
-};
+  /**
+   * List of projects
+   */
+  200: Array<Project>
+}
 
-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<Pty>;
-};
+  /**
+   * List of sessions
+   */
+  200: Array<Pty>
+}
 
-export type PtyListResponse = PtyListResponses[keyof PtyListResponses];
+export type PtyListResponse = PtyListResponses[keyof PtyListResponses]
 
 export type PtyCreateData = {
-    body?: {
-        command?: string;
-        args?: Array<string>;
-        cwd?: string;
-        title?: string;
-        env?: {
-            [key: string]: string;
-        };
-    };
-    path?: never;
-    query?: {
-        directory?: string;
-    };
-    url: '/pty';
-};
+  body?: {
+    command?: string
+    args?: Array<string>
+    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<Session>;
-};
+  /**
+   * List of sessions
+   */
+  200: Array<Session>
+}
 
-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;
-};
-
-export type SessionDeleteError = SessionDeleteErrors[keyof SessionDeleteErrors];
+  /**
+   * Bad request
+   */
+  400: BadRequestError
+  /**
+   * Not found
+   */
+  404: NotFoundError
+}
+
+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;
-};
-
-export type SessionGetError = SessionGetErrors[keyof SessionGetErrors];
+  /**
+   * Bad request
+   */
+  400: BadRequestError
+  /**
+   * Not found
+   */
+  404: NotFoundError
+}
+
+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;
-};
-
-export type SessionUpdateError = SessionUpdateErrors[keyof SessionUpdateErrors];
+  /**
+   * Bad request
+   */
+  400: BadRequestError
+  /**
+   * Not found
+   */
+  404: NotFoundError
+}
+
+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;
-};
-
-export type SessionChildrenError = SessionChildrenErrors[keyof SessionChildrenErrors];
+  /**
+   * Bad request
+   */
+  400: BadRequestError
+  /**
+   * Not found
+   */
+  404: NotFoundError
+}
+
+export type SessionChildrenError = SessionChildrenErrors[keyof SessionChildrenErrors]
 
 export type SessionChildrenResponses = {
-    /**
-     * List of children
-     */
-    200: Array<Session>;
-};
+  /**
+   * List of children
+   */
+  200: Array<Session>
+}
 
-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';
-};
-
-export type SessionTodoErrors = {
+  body?: never
+  path: {
     /**
-     * Bad request
+     * Session ID
      */
-    400: BadRequestError;
-    /**
-     * Not found
-     */
-    404: NotFoundError;
-};
+    sessionID: string
+  }
+  query?: {
+    directory?: string
+  }
+  url: "/session/{sessionID}/todo"
+}
 
-export type SessionTodoError = SessionTodoErrors[keyof SessionTodoErrors];
+export type SessionTodoErrors = {
+  /**
+   * Bad request
+   */
+  400: BadRequestError
+  /**
+   * Not found
+   */
+  404: NotFoundError
+}
+
+export type SessionTodoError = SessionTodoErrors[keyof SessionTodoErrors]
 
 export type SessionTodoResponses = {
-    /**
-     * Todo list
-     */
-    200: Array<Todo>;
-};
+  /**
+   * Todo list
+   */
+  200: Array<Todo>
+}
 
-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;
-};
-
-export type SessionInitError = SessionInitErrors[keyof SessionInitErrors];
+  /**
+   * Bad request
+   */
+  400: BadRequestError
+  /**
+   * Not found
+   */
+  404: NotFoundError
+}
+
+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;
-};
-
-export type SessionAbortError = SessionAbortErrors[keyof SessionAbortErrors];
+  /**
+   * Bad request
+   */
+  400: BadRequestError
+  /**
+   * Not found
+   */
+  404: NotFoundError
+}
+
+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;
-};
-
-export type SessionUnshareError = SessionUnshareErrors[keyof SessionUnshareErrors];
+  /**
+   * Bad request
+   */
+  400: BadRequestError
+  /**
+   * Not found
+   */
+  404: NotFoundError
+}
+
+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;
-};
-
-export type SessionShareError = SessionShareErrors[keyof SessionShareErrors];
+  /**
+   * Bad request
+   */
+  400: BadRequestError
+  /**
+   * Not found
+   */
+  404: NotFoundError
+}
+
+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';
-};
-
-export type SessionDiffErrors = {
-    /**
-     * Bad request
-     */
-    400: BadRequestError;
+  body?: never
+  path: {
     /**
-     * Not found
+     * Session ID
      */
-    404: NotFoundError;
-};
+    sessionID: string
+  }
+  query?: {
+    directory?: string
+    messageID?: string
+  }
+  url: "/session/{sessionID}/diff"
+}
 
-export type SessionDiffError = SessionDiffErrors[keyof SessionDiffErrors];
+export type SessionDiffErrors = {
+  /**
+   * Bad request
+   */
+  400: BadRequestError
+  /**
+   * Not found
+   */
+  404: NotFoundError
+}
+
+export type SessionDiffError = SessionDiffErrors[keyof SessionDiffErrors]
 
 export type SessionDiffResponses = {
-    /**
-     * List of diffs
-     */
-    200: Array<FileDiff>;
-};
+  /**
+   * List of diffs
+   */
+  200: Array<FileDiff>
+}
 
-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;
-};
-
-export type SessionSummarizeError = SessionSummarizeErrors[keyof SessionSummarizeErrors];
+  /**
+   * Bad request
+   */
+  400: BadRequestError
+  /**
+   * Not found
+   */
+  404: NotFoundError
+}
+
+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';
-};
-
-export type SessionMessagesErrors = {
-    /**
-     * Bad request
-     */
-    400: BadRequestError;
+  body?: never
+  path: {
     /**
-     * Not found
+     * Session ID
      */
-    404: NotFoundError;
-};
+    sessionID: string
+  }
+  query?: {
+    directory?: string
+    limit?: number
+  }
+  url: "/session/{sessionID}/message"
+}
 
-export type SessionMessagesError = SessionMessagesErrors[keyof SessionMessagesErrors];
+export type SessionMessagesErrors = {
+  /**
+   * Bad request
+   */
+  400: BadRequestError
+  /**
+   * Not found
+   */
+  404: NotFoundError
+}
+
+export type SessionMessagesError = SessionMessagesErrors[keyof SessionMessagesErrors]
 
 export type SessionMessagesResponses = {
-    /**
-     * List of messages
-     */
-    200: Array<{
-        info: Message;
-        parts: Array<Part>;
-    }>;
-};
+  /**
+   * List of messages
+   */
+  200: Array<{
+    info: Message
+    parts: Array<Part>
+  }>
+}
 
-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<TextPartInput | FilePartInput | AgentPartInput | SubtaskPartInput>;
-    };
-    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<TextPartInput | FilePartInput | AgentPartInput | SubtaskPartInput>
+  }
+  path: {
+    /**
+     * Session ID
+     */
+    sessionID: string
+  }
+  query?: {
+    directory?: string
+  }
+  url: "/session/{sessionID}/message"
+}
 
 export type SessionPromptErrors = {
-    /**
-     * Bad request
-     */
-    400: BadRequestError;
-    /**
-     * Not found
-     */
-    404: NotFoundError;
-};
-
-export type SessionPromptError = SessionPromptErrors[keyof SessionPromptErrors];
+  /**
+   * Bad request
+   */
+  400: BadRequestError
+  /**
+   * Not found
+   */
+  404: NotFoundError
+}
+
+export type SessionPromptError = SessionPromptErrors[keyof SessionPromptErrors]
 
 export type SessionPromptResponses = {
-    /**
-     * Created message
-     */
-    200: {
-        info: AssistantMessage;
-        parts: Array<Part>;
-    };
-};
+  /**
+   * Created message
+   */
+  200: {
+    info: AssistantMessage
+    parts: Array<Part>
+  }
+}
 
-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}';
-};
-
-export type SessionMessageErrors = {
+  body?: never
+  path: {
     /**
-     * Bad request
+     * Session ID
      */
-    400: BadRequestError;
+    sessionID: string
     /**
-     * Not found
+     * Message ID
      */
-    404: NotFoundError;
-};
+    messageID: string
+  }
+  query?: {
+    directory?: string
+  }
+  url: "/session/{sessionID}/message/{messageID}"
+}
 
-export type SessionMessageError = SessionMessageErrors[keyof SessionMessageErrors];
+export type SessionMessageErrors = {
+  /**
+   * Bad request
+   */
+  400: BadRequestError
+  /**
+   * Not found
+   */
+  404: NotFoundError
+}
+
+export type SessionMessageError = SessionMessageErrors[keyof SessionMessageErrors]
 
 export type SessionMessageResponses = {
-    /**
-     * Message
-     */
-    200: {
-        info: Message;
-        parts: Array<Part>;
-    };
-};
+  /**
+   * Message
+   */
+  200: {
+    info: Message
+    parts: Array<Part>
+  }
+}
 
-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<TextPartInput | FilePartInput | AgentPartInput | SubtaskPartInput>;
-    };
-    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<TextPartInput | FilePartInput | AgentPartInput | SubtaskPartInput>
+  }
+  path: {
+    /**
+     * Session ID
+     */
+    sessionID: string
+  }
+  query?: {
+    directory?: string
+  }
+  url: "/session/{sessionID}/prompt_async"
+}
 
 export type SessionPromptAsyncErrors = {
-    /**
-     * Bad request
-     */
-    400: BadRequestError;
-    /**
-     * Not found
-     */
-    404: NotFoundError;
-};
-
-export type SessionPromptAsyncError = SessionPromptAsyncErrors[keyof SessionPromptAsyncErrors];
+  /**
+   * Bad request
+   */
+  400: BadRequestError
+  /**
+   * Not found
+   */
+  404: NotFoundError
+}
+
+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;
-};
-
-export type SessionCommandError = SessionCommandErrors[keyof SessionCommandErrors];
+  /**
+   * Bad request
+   */
+  400: BadRequestError
+  /**
+   * Not found
+   */
+  404: NotFoundError
+}
+
+export type SessionCommandError = SessionCommandErrors[keyof SessionCommandErrors]
 
 export type SessionCommandResponses = {
-    /**
-     * Created message
-     */
-    200: {
-        info: AssistantMessage;
-        parts: Array<Part>;
-    };
-};
+  /**
+   * Created message
+   */
+  200: {
+    info: AssistantMessage
+    parts: Array<Part>
+  }
+}
 
-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;
-};
-
-export type SessionShellError = SessionShellErrors[keyof SessionShellErrors];
+  /**
+   * Bad request
+   */
+  400: BadRequestError
+  /**
+   * Not found
+   */
+  404: NotFoundError
+}
+
+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;
-};
-
-export type SessionRevertError = SessionRevertErrors[keyof SessionRevertErrors];
+  /**
+   * Bad request
+   */
+  400: BadRequestError
+  /**
+   * Not found
+   */
+  404: NotFoundError
+}
+
+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;
-};
-
-export type SessionUnrevertError = SessionUnrevertErrors[keyof SessionUnrevertErrors];
+  /**
+   * Bad request
+   */
+  400: BadRequestError
+  /**
+   * Not found
+   */
+  404: NotFoundError
+}
+
+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;
-};
-
-export type PermissionRespondError = PermissionRespondErrors[keyof PermissionRespondErrors];
+  /**
+   * Bad request
+   */
+  400: BadRequestError
+  /**
+   * Not found
+   */
+  404: NotFoundError
+}
+
+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<Command>;
-};
+  /**
+   * List of commands
+   */
+  200: Array<Command>
+}
 
-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<Provider>;
-        default: {
-            [key: string]: string;
-        };
-    };
-};
-
-export type ConfigProvidersResponse = ConfigProvidersResponses[keyof ConfigProvidersResponses];
+  /**
+   * List of providers
+   */
+  200: {
+    providers: Array<Provider>
+    default: {
+      [key: string]: string
+    }
+  }
+}
+
+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<string>;
-            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<string>;
-    };
-};
-
-export type ProviderListResponse = ProviderListResponses[keyof ProviderListResponses];
+  /**
+   * List of providers
+   */
+  200: {
+    all: Array<{
+      api?: string
+      name: string
+      env: Array<string>
+      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<string>
+  }
+}
+
+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<ProviderAuthMethod>;
-    };
-};
+  /**
+   * Provider auth methods
+   */
+  200: {
+    [key: string]: Array<ProviderAuthMethod>
+  }
+}
 
-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';
-};
-
-export type ProviderOauthAuthorizeErrors = {
+  body?: {
+    /**
+     * Auth method index
+     */
+    method: number
+  }
+  path: {
     /**
-     * Bad request
+     * Provider ID
      */
-    400: BadRequestError;
-};
+    providerID: string
+  }
+  query?: {
+    directory?: string
+  }
+  url: "/provider/{providerID}/oauth/authorize"
+}
+
+export type ProviderOauthAuthorizeErrors = {
+  /**
+   * 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';
-};
-
-export type ProviderOauthCallbackErrors = {
+  body?: {
+    /**
+     * Auth method index
+     */
+    method: number
     /**
-     * Bad request
+     * OAuth authorization code
      */
-    400: BadRequestError;
-};
+    code?: string
+  }
+  path: {
+    /**
+     * Provider ID
+     */
+    providerID: string
+  }
+  query?: {
+    directory?: string
+  }
+  url: "/provider/{providerID}/oauth/callback"
+}
+
+export type ProviderOauthCallbackErrors = {
+  /**
+   * 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;
-        }>;
-    }>;
-};
-
-export type FindTextResponse = FindTextResponses[keyof FindTextResponses];
+  /**
+   * Matches
+   */
+  200: Array<{
+    path: {
+      text: string
+    }
+    lines: {
+      text: string
+    }
+    line_number: number
+    absolute_offset: number
+    submatches: Array<{
+      match: {
+        text: string
+      }
+      start: number
+      end: number
+    }>
+  }>
+}
+
+export type FindTextResponse = FindTextResponses[keyof FindTextResponses]
 
 export type FindFilesData = {
-    body?: never;
-    path?: never;
-    query: {
-        directory?: string;
-        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<string>;
-};
+  /**
+   * File paths
+   */
+  200: Array<string>
+}
 
-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<Symbol>;
-};
+  /**
+   * Symbols
+   */
+  200: Array<Symbol>
+}
 
-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<FileNode>;
-};
+  /**
+   * Files and directories
+   */
+  200: Array<FileNode>
+}
 
-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>;
-};
+  /**
+   * File status
+   */
+  200: Array<File>
+}
 
-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';
-};
-
-export type AppLogErrors = {
+  body?: {
     /**
-     * Bad request
+     * Service name for the log entry
      */
-    400: BadRequestError;
-};
+    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 AppLogError = AppLogErrors[keyof AppLogErrors];
+export type AppLogErrors = {
+  /**
+   * Bad request
+   */
+  400: BadRequestError
+}
+
+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<Agent>;
-};
+  /**
+   * List of agents
+   */
+  200: Array<Agent>
+}
 
-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;
-};
-
-export type McpAuthStartError = McpAuthStartErrors[keyof McpAuthStartErrors];
+  /**
+   * Bad request
+   */
+  400: BadRequestError
+  /**
+   * Not found
+   */
+  404: NotFoundError
+}
+
+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';
-};
-
-export type McpAuthCallbackErrors = {
-    /**
-     * Bad request
-     */
-    400: BadRequestError;
+  body?: {
     /**
-     * Not found
+     * Authorization code from OAuth callback
      */
-    404: NotFoundError;
-};
+    code: string
+  }
+  path: {
+    name: string
+  }
+  query?: {
+    directory?: string
+  }
+  url: "/mcp/{name}/auth/callback"
+}
 
-export type McpAuthCallbackError = McpAuthCallbackErrors[keyof McpAuthCallbackErrors];
+export type McpAuthCallbackErrors = {
+  /**
+   * Bad request
+   */
+  400: BadRequestError
+  /**
+   * Not found
+   */
+  404: NotFoundError
+}
+
+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;
-};
-
-export type McpAuthAuthenticateError = McpAuthAuthenticateErrors[keyof McpAuthAuthenticateErrors];
+  /**
+   * Bad request
+   */
+  400: BadRequestError
+  /**
+   * Not found
+   */
+  404: NotFoundError
+}
+
+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<LspStatus>;
-};
+  /**
+   * LSP server status
+   */
+  200: Array<LspStatus>
+}
 
-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<FormatterStatus>;
-};
+  /**
+   * Formatter status
+   */
+  200: Array<FormatterStatus>
+}
 
-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]

Certains fichiers n'ont pas été affichés car il y a eu trop de fichiers modifiés dans ce diff