From ad8ed9b3670aca8abeb968d1f19fc7468dacea9e Mon Sep 17 00:00:00 2001 From: James Long Date: Thu, 13 Aug 2026 18:06:28 -0400 Subject: [PATCH] refactor(core): replace project copies with worktrees (#42149) --- .../app/src/components/prompt-input/submit.ts | 5 +- .../src/context/global-sync/event-reducer.ts | 6 +- packages/app/src/context/server-session.ts | 6 +- packages/app/src/context/server-sync.tsx | 4 +- packages/client/script/build.ts | 4 +- packages/client/src/effect/api/api.ts | 51 +- .../client/src/effect/generated/client.ts | 57 +- packages/client/src/effect/index.ts | 2 +- .../client/src/promise/generated/client.ts | 69 +- .../client/src/promise/generated/types.ts | 93 +- packages/client/test/promise.test.ts | 55 +- packages/core/schema.json | 232 +- packages/core/src/database/migration.gen.ts | 2 + .../migration/20260812213948_worktree.ts | 35 + packages/core/src/database/schema.gen.ts | 10 + packages/core/src/location-services.ts | 5 +- packages/core/src/project.ts | 51 +- packages/core/src/project/copy-strategies.ts | 35 - packages/core/src/project/copy.ts | 272 - packages/core/src/project/directories.ts | 128 - packages/core/src/project/schema.ts | 9 - packages/core/src/project/sql.ts | 1 + packages/core/src/session/projector.ts | 4 +- packages/core/src/worktree.ts | 353 + packages/core/src/worktree/directory.ts | 16 + packages/core/src/worktree/git.ts | 39 + packages/core/src/worktree/sql.ts | 20 + packages/core/test/database-migration.test.ts | 26 + .../test/effect/layer-node/node-build.test.ts | 1 - packages/core/test/lib/project.ts | 1 - packages/core/test/location.test.ts | 1 - .../core/test/project-directories.test.ts | 69 - packages/core/test/project.test.ts | 3 - packages/core/test/session-create.test.ts | 2 +- packages/core/test/session-move.test.ts | 4 +- packages/core/test/shared-schema.test.ts | 16 +- ...{project-copy.test.ts => worktree.test.ts} | 299 +- packages/protocol/openapi.json | 5861 +++++++++++++---- packages/protocol/src/api.ts | 6 +- packages/protocol/src/client.ts | 2 +- packages/protocol/src/groups/project-copy.ts | 56 - packages/protocol/src/groups/project.ts | 17 +- packages/protocol/src/groups/worktree.ts | 76 + packages/schema/src/durable-event-manifest.ts | 4 +- packages/schema/src/event-manifest.ts | 4 +- packages/schema/src/index.ts | 2 +- packages/schema/src/project-copy.ts | 30 - packages/schema/src/project-directories.ts | 53 - packages/schema/src/project.ts | 11 - packages/schema/src/worktree.ts | 82 + packages/schema/test/contract-hygiene.test.ts | 7 +- packages/schema/test/event-manifest.test.ts | 2 +- packages/sdk-next/src/index.ts | 2 +- .../sdk-next/test/contract-identity.test.ts | 10 +- packages/server/src/handlers.ts | 4 +- packages/server/src/handlers/project-copy.ts | 68 - packages/server/src/handlers/project.ts | 3 - packages/server/src/handlers/worktree.ts | 55 + packages/server/src/routes.ts | 2 + packages/server/test/worktree.test.ts | 71 + .../tui/src/component/dialog-move-session.tsx | 41 +- ...copy-name.tsx => dialog-worktree-name.tsx} | 16 +- packages/tui/src/component/prompt/index.tsx | 2 +- packages/tui/src/component/prompt/move.tsx | 9 +- packages/tui/src/config/keybind.ts | 8 +- packages/tui/src/context/data.tsx | 6 +- packages/tui/test/fixture/tui-client.ts | 8 +- packages/www/openapi.json | 5861 +++++++++++++---- packages/www/public/openapi.json | 5861 +++++++++++++---- 69 files changed, 14955 insertions(+), 5271 deletions(-) create mode 100644 packages/core/src/database/migration/20260812213948_worktree.ts delete mode 100644 packages/core/src/project/copy-strategies.ts delete mode 100644 packages/core/src/project/copy.ts delete mode 100644 packages/core/src/project/directories.ts create mode 100644 packages/core/src/worktree.ts create mode 100644 packages/core/src/worktree/directory.ts create mode 100644 packages/core/src/worktree/git.ts create mode 100644 packages/core/src/worktree/sql.ts delete mode 100644 packages/core/test/project-directories.test.ts rename packages/core/test/{project-copy.test.ts => worktree.test.ts} (52%) delete mode 100644 packages/protocol/src/groups/project-copy.ts create mode 100644 packages/protocol/src/groups/worktree.ts delete mode 100644 packages/schema/src/project-copy.ts delete mode 100644 packages/schema/src/project-directories.ts create mode 100644 packages/schema/src/worktree.ts delete mode 100644 packages/server/src/handlers/project-copy.ts create mode 100644 packages/server/src/handlers/worktree.ts create mode 100644 packages/server/test/worktree.test.ts rename packages/tui/src/component/{dialog-project-copy-name.tsx => dialog-worktree-name.tsx} (83%) diff --git a/packages/app/src/components/prompt-input/submit.ts b/packages/app/src/components/prompt-input/submit.ts index 4a402815675..b6755e6cc88 100644 --- a/packages/app/src/components/prompt-input/submit.ts +++ b/packages/app/src/components/prompt-input/submit.ts @@ -379,11 +379,10 @@ export function createPromptSubmit(input: PromptSubmitInput) { if (isNewSession) { if (worktreeSelection === "create") { const createdWorktree = await sdk() - .api.projectCopy.create({ + .api.worktree.create({ projectID: sync().data.project, - strategy: "git_worktree", + strategy: "git", directory: getDirectory(projectDirectory), - location: { directory: projectDirectory }, }) .catch((err) => { showToast({ diff --git a/packages/app/src/context/global-sync/event-reducer.ts b/packages/app/src/context/global-sync/event-reducer.ts index 98ac96342ca..38c0d7be751 100644 --- a/packages/app/src/context/global-sync/event-reducer.ts +++ b/packages/app/src/context/global-sync/event-reducer.ts @@ -1,5 +1,5 @@ import { Binary } from "@opencode-ai/core/util/binary" -import { ProjectDirectories } from "@opencode-ai/schema/project-directories" +import { Worktree } from "@opencode-ai/schema/worktree" import { produce, reconcile, type SetStoreFunction, type Store } from "solid-js/store" import type { Message, Part, Project, Todo } from "@/types" import type { @@ -187,10 +187,10 @@ export function applyDirectoryEvent(input: { input.setStore("sessionTotal", (value) => Math.max(0, value - 1)) break } - case "project.directory.resolved": { + case "worktree.resolved": { const properties = event.properties as { projectID: string; directory: string; previous: string } input.store.session.forEach((session, index) => { - const adopted = ProjectDirectories.adopt( + const adopted = Worktree.adopt( { projectID: session.projectID, directory: session.location.directory }, properties, ) diff --git a/packages/app/src/context/server-session.ts b/packages/app/src/context/server-session.ts index 1802408631f..3a340276ff9 100644 --- a/packages/app/src/context/server-session.ts +++ b/packages/app/src/context/server-session.ts @@ -1,5 +1,5 @@ import { Binary } from "@opencode-ai/core/util/binary" -import { ProjectDirectories } from "@opencode-ai/schema/project-directories" +import { Worktree } from "@opencode-ai/schema/worktree" import { retry } from "@opencode-ai/core/util/retry" import type { FormInfo, @@ -940,10 +940,10 @@ export function createServerSession( setData("form", event.data.sessionID, (forms) => forms?.filter((form) => form.id !== event.data.id)) return } - if (event.type === "project.directory.resolved") { + if (event.type === "worktree.resolved") { Object.values(data.info).forEach((info) => { if (!info) return - const adopted = ProjectDirectories.adopt( + const adopted = Worktree.adopt( { projectID: info.projectID, directory: info.location.directory }, event.data, ) diff --git a/packages/app/src/context/server-sync.tsx b/packages/app/src/context/server-sync.tsx index 77a57a03381..9fa9e8dcbb7 100644 --- a/packages/app/src/context/server-sync.tsx +++ b/packages/app/src/context/server-sync.tsx @@ -627,7 +627,7 @@ export function createServerSyncContextInner(serverSDK: ServerSDK) { if ( eventType === "config.updated" || eventType === "agent.updated" || - eventType === "project.directories.updated" + eventType === "worktree.updated" ) bootstrap.refetch() if (eventType === "global.disposed") Object.keys(children.children).filter(children.active).forEach(queue.push) @@ -667,7 +667,7 @@ export function createServerSyncContextInner(serverSDK: ServerSDK) { void loadCommands(directory, serverSDK.api.command) .then((commands) => setStore("command", commands)) .catch(() => {}) - if (eventType === "project.directories.updated") void bootstrap.refetch() + if (eventType === "worktree.updated") void bootstrap.refetch() const projected = toDirectoryEvent(event) if (projected) applyDirectoryEvent({ diff --git a/packages/client/script/build.ts b/packages/client/script/build.ts index 005721ec47c..544d5229fa8 100644 --- a/packages/client/script/build.ts +++ b/packages/client/script/build.ts @@ -19,7 +19,7 @@ import { Permission } from "@opencode-ai/schema/permission" import { PermissionSaved } from "@opencode-ai/schema/permission-saved" import { Plugin } from "@opencode-ai/schema/plugin" import { Project } from "@opencode-ai/schema/project" -import { ProjectCopy } from "@opencode-ai/schema/project-copy" +import { Worktree } from "@opencode-ai/schema/worktree" import { AgentAttachment, FileAttachment, Prompt, PromptMention } from "@opencode-ai/schema/prompt" import { PromptInput } from "@opencode-ai/schema/prompt-input" import { Provider } from "@opencode-ai/schema/provider" @@ -60,7 +60,7 @@ const effectTypeReferences = [ ...namespaceTypes("PermissionSaved", "@opencode-ai/schema/permission-saved", PermissionSaved), ...namespaceTypes("Plugin", "@opencode-ai/schema/plugin", Plugin), ...namespaceTypes("Project", "@opencode-ai/schema/project", Project), - ...namespaceTypes("ProjectCopy", "@opencode-ai/schema/project-copy", ProjectCopy), + ...namespaceTypes("Worktree", "@opencode-ai/schema/worktree", Worktree), ...namespaceTypes("PromptInput", "@opencode-ai/schema/prompt-input", PromptInput), ...namespaceTypes("Provider", "@opencode-ai/schema/provider", Provider), ...namespaceTypes("Pty", "@opencode-ai/schema/pty", Pty), diff --git a/packages/client/src/effect/api/api.ts b/packages/client/src/effect/api/api.ts index 879219e8338..d596aad0ec0 100644 --- a/packages/client/src/effect/api/api.ts +++ b/packages/client/src/effect/api/api.ts @@ -34,7 +34,7 @@ import type { OpenCodeEvent } from "@opencode-ai/protocol/groups/event" import type { Pty } from "@opencode-ai/schema/pty" import type { Question } from "@opencode-ai/schema/question" import type { Reference } from "@opencode-ai/schema/reference" -import type { ProjectCopy } from "@opencode-ai/schema/project-copy" +import type { Worktree } from "@opencode-ai/schema/worktree" import type { Vcs } from "@opencode-ai/schema/vcs" import type { FileDiff } from "@opencode-ai/schema/file-diff" import type { WebSearch } from "@opencode-ai/schema/websearch" @@ -1230,17 +1230,9 @@ export type Endpoint13_1Input = { export type Endpoint13_1Output = Project.Current export type ProjectCurrentOperation = (input?: Endpoint13_1Input) => Effect.Effect -export type Endpoint13_2Input = { - readonly projectID: Project.ID - readonly location?: { readonly directory?: string | undefined; readonly workspace?: string | undefined } | undefined -} -export type Endpoint13_2Output = Project.Directories -export type ProjectDirectoriesOperation = (input: Endpoint13_2Input) => Effect.Effect - export interface ProjectApi { readonly list: ProjectListOperation readonly current: ProjectCurrentOperation - readonly directories: ProjectDirectoriesOperation } export type Endpoint14_0Input = { @@ -1550,36 +1542,37 @@ export interface ReferenceApi { readonly list: ReferenceListOperation } -export type Endpoint24_0Input = { - readonly projectID: Project.ID - readonly location?: { readonly directory?: string | undefined; readonly workspace?: string | undefined } | undefined - readonly strategy: ProjectCopy.StrategyID - readonly directory: AbsolutePath - readonly name?: string | undefined -} -export type Endpoint24_0Output = ProjectCopy.Copy -export type ProjectCopyCreateOperation = (input: Endpoint24_0Input) => Effect.Effect +export type Endpoint24_0Input = { readonly projectID: Project.ID } +export type Endpoint24_0Output = Worktree.List +export type WorktreeListOperation = (input: Endpoint24_0Input) => Effect.Effect export type Endpoint24_1Input = { readonly projectID: Project.ID - readonly location?: { readonly directory?: string | undefined; readonly workspace?: string | undefined } | undefined + readonly strategy: Worktree.StrategyID + readonly from?: AbsolutePath | undefined readonly directory: AbsolutePath - readonly force: boolean + readonly name?: string | undefined } -export type Endpoint24_1Output = void -export type ProjectCopyRemoveOperation = (input: Endpoint24_1Input) => Effect.Effect +export type Endpoint24_1Output = Worktree.Info +export type WorktreeCreateOperation = (input: Endpoint24_1Input) => Effect.Effect export type Endpoint24_2Input = { readonly projectID: Project.ID - readonly location?: { readonly directory?: string | undefined; readonly workspace?: string | undefined } | undefined + readonly directory: AbsolutePath + readonly force: boolean } export type Endpoint24_2Output = void -export type ProjectCopyRefreshOperation = (input: Endpoint24_2Input) => Effect.Effect +export type WorktreeRemoveOperation = (input: Endpoint24_2Input) => Effect.Effect -export interface ProjectCopyApi { - readonly create: ProjectCopyCreateOperation - readonly remove: ProjectCopyRemoveOperation - readonly refresh: ProjectCopyRefreshOperation +export type Endpoint24_3Input = { readonly projectID: Project.ID } +export type Endpoint24_3Output = void +export type WorktreeRefreshOperation = (input: Endpoint24_3Input) => Effect.Effect + +export interface WorktreeApi { + readonly list: WorktreeListOperation + readonly create: WorktreeCreateOperation + readonly remove: WorktreeRemoveOperation + readonly refresh: WorktreeRefreshOperation } export type Endpoint25_0Input = { @@ -1692,7 +1685,7 @@ export interface AppApi { readonly shell: ShellApi readonly question: QuestionApi readonly reference: ReferenceApi - readonly projectCopy: ProjectCopyApi + readonly worktree: WorktreeApi readonly vcs: VcsApi readonly debug: DebugApi readonly migration: MigrationApi diff --git a/packages/client/src/effect/generated/client.ts b/packages/client/src/effect/generated/client.ts index a5dcfacf2c1..295e76d4ef5 100644 --- a/packages/client/src/effect/generated/client.ts +++ b/packages/client/src/effect/generated/client.ts @@ -139,8 +139,6 @@ import type { Endpoint13_0Output, Endpoint13_1Input, Endpoint13_1Output, - Endpoint13_2Input, - Endpoint13_2Output, Endpoint14_0Input, Endpoint14_0Output, Endpoint14_1Input, @@ -216,6 +214,8 @@ import type { Endpoint24_1Output, Endpoint24_2Input, Endpoint24_2Output, + Endpoint24_3Input, + Endpoint24_3Output, Endpoint25_0Input, Endpoint25_0Output, Endpoint25_1Input, @@ -876,19 +876,7 @@ const Endpoint13_1 = (raw: RawClient["server.project"]) => (input?: Endpoint13_1 raw["project.current"]({ query: { location: input?.["location"] } }).pipe(Effect.mapError(mapClientError)), ) -const Endpoint13_2 = (raw: RawClient["server.project"]) => (input: Endpoint13_2Input) => - preserveEffect()( - raw["project.directories"]({ - params: { projectID: input["projectID"] }, - query: { location: input["location"] }, - }).pipe(Effect.mapError(mapClientError)), - ) - -const adaptGroup13 = (raw: RawClient["server.project"]) => ({ - list: Endpoint13_0(raw), - current: Endpoint13_1(raw), - directories: Endpoint13_2(raw), -}) +const adaptGroup13 = (raw: RawClient["server.project"]) => ({ list: Endpoint13_0(raw), current: Endpoint13_1(raw) }) const Endpoint14_0 = (raw: RawClient["server.form"]) => (input?: Endpoint14_0Input) => preserveEffect()( @@ -1213,36 +1201,37 @@ const Endpoint23_0 = (raw: RawClient["server.reference"]) => (input?: Endpoint23 const adaptGroup23 = (raw: RawClient["server.reference"]) => ({ list: Endpoint23_0(raw) }) -const Endpoint24_0 = (raw: RawClient["server.projectCopy"]) => (input: Endpoint24_0Input) => +const Endpoint24_0 = (raw: RawClient["server.worktree"]) => (input: Endpoint24_0Input) => preserveEffect()( - raw["projectCopy.create"]({ + raw["worktree.list"]({ params: { projectID: input["projectID"] } }).pipe(Effect.mapError(mapClientError)), + ) + +const Endpoint24_1 = (raw: RawClient["server.worktree"]) => (input: Endpoint24_1Input) => + preserveEffect()( + raw["worktree.create"]({ params: { projectID: input["projectID"] }, - query: { location: input["location"] }, - payload: { strategy: input["strategy"], directory: input["directory"], name: input["name"] }, + payload: { strategy: input["strategy"], from: input["from"], directory: input["directory"], name: input["name"] }, }).pipe(Effect.mapError(mapClientError)), ) -const Endpoint24_1 = (raw: RawClient["server.projectCopy"]) => (input: Endpoint24_1Input) => - preserveEffect()( - raw["projectCopy.remove"]({ +const Endpoint24_2 = (raw: RawClient["server.worktree"]) => (input: Endpoint24_2Input) => + preserveEffect()( + raw["worktree.remove"]({ params: { projectID: input["projectID"] }, - query: { location: input["location"] }, payload: { directory: input["directory"], force: input["force"] }, }).pipe(Effect.mapError(mapClientError)), ) -const Endpoint24_2 = (raw: RawClient["server.projectCopy"]) => (input: Endpoint24_2Input) => - preserveEffect()( - raw["projectCopy.refresh"]({ - params: { projectID: input["projectID"] }, - query: { location: input["location"] }, - }).pipe(Effect.mapError(mapClientError)), +const Endpoint24_3 = (raw: RawClient["server.worktree"]) => (input: Endpoint24_3Input) => + preserveEffect()( + raw["worktree.refresh"]({ params: { projectID: input["projectID"] } }).pipe(Effect.mapError(mapClientError)), ) -const adaptGroup24 = (raw: RawClient["server.projectCopy"]) => ({ - create: Endpoint24_0(raw), - remove: Endpoint24_1(raw), - refresh: Endpoint24_2(raw), +const adaptGroup24 = (raw: RawClient["server.worktree"]) => ({ + list: Endpoint24_0(raw), + create: Endpoint24_1(raw), + remove: Endpoint24_2(raw), + refresh: Endpoint24_3(raw), }) const Endpoint25_0 = (raw: RawClient["server.vcs"]) => (input?: Endpoint25_0Input) => @@ -1335,7 +1324,7 @@ const adaptClient = (raw: RawClient) => ({ shell: adaptGroup21(raw["server.shell"]), question: adaptGroup22(raw["server.question"]), reference: adaptGroup23(raw["server.reference"]), - projectCopy: adaptGroup24(raw["server.projectCopy"]), + worktree: adaptGroup24(raw["server.worktree"]), vcs: adaptGroup25(raw["server.vcs"]), debug: adaptGroup26(raw["server.debug"]), migration: adaptGroup27(raw["server.migration"]), diff --git a/packages/client/src/effect/index.ts b/packages/client/src/effect/index.ts index b632e52655e..9c53d7f2a4d 100644 --- a/packages/client/src/effect/index.ts +++ b/packages/client/src/effect/index.ts @@ -33,7 +33,7 @@ export { Model } from "@opencode-ai/schema/model" export { Permission } from "@opencode-ai/schema/permission" export { PermissionSaved } from "@opencode-ai/schema/permission-saved" export { Project } from "@opencode-ai/schema/project" -export { ProjectCopy } from "@opencode-ai/schema/project-copy" +export { Worktree } from "@opencode-ai/schema/worktree" export { Provider } from "@opencode-ai/schema/provider" export { Pty } from "@opencode-ai/schema/pty" export { Question } from "@opencode-ai/schema/question" diff --git a/packages/client/src/promise/generated/client.ts b/packages/client/src/promise/generated/client.ts index 315e6ca3c3d..55873f70d61 100644 --- a/packages/client/src/promise/generated/client.ts +++ b/packages/client/src/promise/generated/client.ts @@ -133,8 +133,6 @@ import type { ProjectListOutput, ProjectCurrentInput, ProjectCurrentOutput, - ProjectDirectoriesInput, - ProjectDirectoriesOutput, FormRequestListInput, FormRequestListOutput, FormListInput, @@ -206,12 +204,14 @@ import type { QuestionRejectOutput, ReferenceListInput, ReferenceListOutput, - ProjectCopyCreateInput, - ProjectCopyCreateOutput, - ProjectCopyRemoveInput, - ProjectCopyRemoveOutput, - ProjectCopyRefreshInput, - ProjectCopyRefreshOutput, + WorktreeListInput, + WorktreeListOutput, + WorktreeCreateInput, + WorktreeCreateOutput, + WorktreeRemoveInput, + WorktreeRemoveOutput, + WorktreeRefreshInput, + WorktreeRefreshOutput, VcsGetInput, VcsGetOutput, VcsStatusInput, @@ -1255,18 +1255,6 @@ export function make(options: ClientOptions) { }, requestOptions, ), - directories: (input: ProjectDirectoriesInput, requestOptions?: RequestOptions) => - request( - { - method: "GET", - path: `/api/project/${encodeURIComponent(input.projectID)}/directories`, - query: { location: input["location"] }, - successStatus: 200, - declaredStatuses: [401, 400], - empty: false, - }, - requestOptions, - ), }, form: { request: { @@ -1737,26 +1725,40 @@ export function make(options: ClientOptions) { requestOptions, ), }, - projectCopy: { - create: (input: ProjectCopyCreateInput, requestOptions?: RequestOptions) => - request( + worktree: { + list: (input: WorktreeListInput, requestOptions?: RequestOptions) => + request( + { + method: "GET", + path: `/api/experimental/project/${encodeURIComponent(input.projectID)}/worktree`, + successStatus: 200, + declaredStatuses: [401, 400], + empty: false, + }, + requestOptions, + ), + create: (input: WorktreeCreateInput, requestOptions?: RequestOptions) => + request( { method: "POST", - path: `/api/experimental/project/${encodeURIComponent(input.projectID)}/copy`, - query: { location: input["location"] }, - body: { strategy: input["strategy"], directory: input["directory"], name: input["name"] }, + path: `/api/experimental/project/${encodeURIComponent(input.projectID)}/worktree`, + body: { + strategy: input["strategy"], + from: input["from"], + directory: input["directory"], + name: input["name"], + }, successStatus: 200, declaredStatuses: [400, 401], empty: false, }, requestOptions, ), - remove: (input: ProjectCopyRemoveInput, requestOptions?: RequestOptions) => - request( + remove: (input: WorktreeRemoveInput, requestOptions?: RequestOptions) => + request( { method: "DELETE", - path: `/api/experimental/project/${encodeURIComponent(input.projectID)}/copy`, - query: { location: input["location"] }, + path: `/api/experimental/project/${encodeURIComponent(input.projectID)}/worktree`, body: { directory: input["directory"], force: input["force"] }, successStatus: 204, declaredStatuses: [400, 401], @@ -1764,12 +1766,11 @@ export function make(options: ClientOptions) { }, requestOptions, ), - refresh: (input: ProjectCopyRefreshInput, requestOptions?: RequestOptions) => - request( + refresh: (input: WorktreeRefreshInput, requestOptions?: RequestOptions) => + request( { method: "POST", - path: `/api/experimental/project/${encodeURIComponent(input.projectID)}/copy/refresh`, - query: { location: input["location"] }, + path: `/api/experimental/project/${encodeURIComponent(input.projectID)}/worktree/refresh`, successStatus: 204, declaredStatuses: [400, 401], empty: true, diff --git a/packages/client/src/promise/generated/types.ts b/packages/client/src/promise/generated/types.ts index 6ee3b26aca2..8eb68bc84bb 100644 --- a/packages/client/src/promise/generated/types.ts +++ b/packages/client/src/promise/generated/types.ts @@ -291,8 +291,6 @@ export type ProjectTime = { created: number; updated: number; initialized?: numb export type ProjectCurrent = { id: string; directory: string; canonical: string } -export type ProjectDirectory = { directory: string; strategy?: string } - export type FormMetadata = { [x: string]: JsonValue } export type FormValue = string | number | boolean | Array @@ -370,7 +368,9 @@ export type ReferenceGitSource = { hidden?: boolean } -export type ProjectCopyCopy = { directory: string } +export type WorktreeDirectory = { directory: string; strategy?: string } + +export type WorktreeInfo = { directory: string } export type VcsBranch = { current?: string; default?: string } @@ -828,20 +828,20 @@ export type PluginUpdated = { data: {} } -export type ProjectDirectoriesUpdated = { +export type WorktreeUpdated = { id: string created: number metadata?: { [x: string]: any } - type: "project.directories.updated" + type: "worktree.updated" location?: LocationRef data: { projectID: string } } -export type ProjectDirectoryResolved = { +export type WorktreeResolved = { id: string created: number metadata?: { [x: string]: any } - type: "project.directory.resolved" + type: "worktree.resolved" durable: { aggregateID: string; seq: number; version: 1 } location?: LocationRef data: { projectID: string; directory: string; previous: string } @@ -1369,8 +1369,6 @@ export type Project = { sandboxes: Array } -export type ProjectDirectories = Array - export type FormAnswer = { [x: string]: FormValue } export type PermissionRequest = { @@ -1522,6 +1520,8 @@ export type SessionStatus2 = { export type ReferenceSource = ReferenceLocalSource | ReferenceGitSource +export type WorktreeList = Array + export type VcsInfo = { branch: VcsBranch } export type PermissionRuleset = Array @@ -2104,8 +2104,8 @@ export type V2Event = | PermissionReplied | PluginAdded | PluginUpdated - | ProjectDirectoriesUpdated - | ProjectDirectoryResolved + | WorktreeUpdated + | WorktreeResolved | CommandUpdated | ConfigUpdated | SkillUpdated @@ -2306,12 +2306,12 @@ export type QuestionNotFoundError = { export const isQuestionNotFoundError = (value: unknown): value is QuestionNotFoundError => typeof value === "object" && value !== null && "_tag" in value && value["_tag"] === "QuestionNotFoundError" -export type ProjectCopyError = { - readonly name: "ProjectCopyError" +export type WorktreeError = { + readonly name: "WorktreeError" readonly data: { readonly message: string; readonly forceRequired?: boolean | undefined } } -export const isProjectCopyError = (value: unknown): value is ProjectCopyError => - typeof value === "object" && value !== null && "name" in value && value["name"] === "ProjectCopyError" +export const isWorktreeError = (value: unknown): value is WorktreeError => + typeof value === "object" && value !== null && "name" in value && value["name"] === "WorktreeError" export type HealthGetOutput = ServiceHealth @@ -4350,15 +4350,6 @@ export type ProjectCurrentInput = { export type ProjectCurrentOutput = ProjectCurrent -export type ProjectDirectoriesInput = { - readonly projectID: { readonly projectID: string }["projectID"] - readonly location?: { - readonly location?: { readonly directory?: string | undefined; readonly workspace?: string | undefined } | undefined - }["location"] -} - -export type ProjectDirectoriesOutput = ProjectDirectories - export type FormRequestListInput = { readonly location?: { readonly location?: { readonly directory?: string | undefined; readonly workspace?: string | undefined } | undefined @@ -5661,37 +5652,51 @@ export type ReferenceListOutput = { data: Array } -export type ProjectCopyCreateInput = { +export type WorktreeListInput = { readonly projectID: { readonly projectID: string }["projectID"] } + +export type WorktreeListOutput = WorktreeList + +export type WorktreeCreateInput = { readonly projectID: { readonly projectID: string }["projectID"] - readonly location?: { - readonly location?: { readonly directory?: string | undefined; readonly workspace?: string | undefined } | undefined - }["location"] - readonly strategy: { readonly strategy: string; readonly directory: string; readonly name?: string }["strategy"] - readonly directory: { readonly strategy: string; readonly directory: string; readonly name?: string }["directory"] - readonly name?: { readonly strategy: string; readonly directory: string; readonly name?: string }["name"] + readonly strategy: { + readonly strategy: string + readonly from?: string + readonly directory: string + readonly name?: string + }["strategy"] + readonly from?: { + readonly strategy: string + readonly from?: string + readonly directory: string + readonly name?: string + }["from"] + readonly directory: { + readonly strategy: string + readonly from?: string + readonly directory: string + readonly name?: string + }["directory"] + readonly name?: { + readonly strategy: string + readonly from?: string + readonly directory: string + readonly name?: string + }["name"] } -export type ProjectCopyCreateOutput = ProjectCopyCopy +export type WorktreeCreateOutput = WorktreeInfo -export type ProjectCopyRemoveInput = { +export type WorktreeRemoveInput = { readonly projectID: { readonly projectID: string }["projectID"] - readonly location?: { - readonly location?: { readonly directory?: string | undefined; readonly workspace?: string | undefined } | undefined - }["location"] readonly directory: { readonly directory: string; readonly force: boolean }["directory"] readonly force: { readonly directory: string; readonly force: boolean }["force"] } -export type ProjectCopyRemoveOutput = void +export type WorktreeRemoveOutput = void -export type ProjectCopyRefreshInput = { - readonly projectID: { readonly projectID: string }["projectID"] - readonly location?: { - readonly location?: { readonly directory?: string | undefined; readonly workspace?: string | undefined } | undefined - }["location"] -} +export type WorktreeRefreshInput = { readonly projectID: { readonly projectID: string }["projectID"] } -export type ProjectCopyRefreshOutput = void +export type WorktreeRefreshOutput = void export type VcsGetInput = { readonly location?: { diff --git a/packages/client/test/promise.test.ts b/packages/client/test/promise.test.ts index ead7778e5d3..0e6abd9f1bc 100644 --- a/packages/client/test/promise.test.ts +++ b/packages/client/test/promise.test.ts @@ -29,7 +29,7 @@ test("exposes every standard HTTP API group", () => { "shell", "question", "reference", - "projectCopy", + "worktree", "vcs", "debug", "migration", @@ -49,7 +49,8 @@ test("exposes every standard HTTP API group", () => { expect(Object.keys(client.vcs)).toEqual(["get", "status", "diff"]) expect(Object.keys(client.pty)).toEqual(["list", "create", "get", "update", "remove"]) expect(Object.keys(client.shell)).toEqual(["list", "create", "get", "timeout", "output", "remove"]) - expect(Object.keys(client.project)).toEqual(["list", "current", "directories"]) + expect(Object.keys(client.project)).toEqual(["list", "current"]) + expect(Object.keys(client.worktree)).toEqual(["list", "create", "remove", "refresh"]) }) test("config.get returns ordered config entries for a location", async () => { @@ -251,30 +252,48 @@ test("file.read returns binary content from the public HTTP contract", async () ) }) -test("project methods use the public HTTP contract", async () => { - const requests: string[] = [] +test("worktree methods use the global project contract", async () => { + const requests: Request[] = [] const client = OpenCode.make({ baseUrl: "http://localhost:3000", - fetch: async (input) => { - const url = typeof input === "string" ? input : input instanceof URL ? input.href : input.url - requests.push(url) - if (url.includes("/directories")) return Response.json([]) - return Response.json({ id: "proj_test", directory: "/tmp/project" }) + fetch: async (input, init) => { + const request = input instanceof Request ? input : new Request(input, init) + requests.push(request) + if (request.method === "GET") return Response.json([{ directory: "/tmp/project" }]) + if (request.method === "POST" && !request.url.endsWith("/refresh")) + return Response.json({ directory: "/tmp/worktrees/api" }) + return new Response(null, { status: 204 }) }, }) - const current = await client.project.current({ location: { workspace: "wrk_test" } }) - const directories = await client.project.directories({ - projectID: current.id, - location: { directory: current.directory }, + expect(await client.worktree.list({ projectID: "proj_test" })).toEqual([{ directory: "/tmp/project" }]) + expect( + await client.worktree.create({ + projectID: "proj_test", + strategy: "git", + directory: "/tmp/worktrees", + name: "api", + }), + ).toEqual({ directory: "/tmp/worktrees/api" }) + await client.worktree.remove({ + projectID: "proj_test", + directory: "/tmp/worktrees/api", + force: false, }) + await client.worktree.refresh({ projectID: "proj_test" }) - expect(current).toEqual({ id: "proj_test", directory: "/tmp/project" }) - expect(directories).toEqual([]) - expect(requests).toEqual([ - "http://localhost:3000/api/project/current?location%5Bworkspace%5D=wrk_test", - "http://localhost:3000/api/project/proj_test/directories?location%5Bdirectory%5D=%2Ftmp%2Fproject", + expect(requests.map((request) => [request.method, request.url])).toEqual([ + ["GET", "http://localhost:3000/api/experimental/project/proj_test/worktree"], + ["POST", "http://localhost:3000/api/experimental/project/proj_test/worktree"], + ["DELETE", "http://localhost:3000/api/experimental/project/proj_test/worktree"], + ["POST", "http://localhost:3000/api/experimental/project/proj_test/worktree/refresh"], ]) + expect(await requests[1]?.json()).toEqual({ + strategy: "git", + directory: "/tmp/worktrees", + name: "api", + }) + expect(await requests[2]?.json()).toEqual({ directory: "/tmp/worktrees/api", force: false }) }) test("shell list and remove use the public HTTP contract", async () => { diff --git a/packages/core/schema.json b/packages/core/schema.json index 0bfde100e16..cc8f66c5426 100644 --- a/packages/core/schema.json +++ b/packages/core/schema.json @@ -1,8 +1,10 @@ { "version": "7", "dialect": "sqlite", - "id": "5c1aa56b-c3ee-4283-9a84-c0bf626dc604", - "prevIds": ["00924d88-1842-4d71-ac74-5682ddc47e1c"], + "id": "dcde8e6b-4bf4-4f6b-b2be-4030c2c3e936", + "prevIds": [ + "5c1aa56b-c3ee-4283-9a84-c0bf626dc604" + ], "ddl": [ { "name": "account_state", @@ -76,6 +78,10 @@ "name": "workspace", "entityType": "tables" }, + { + "name": "worktree", + "entityType": "tables" + }, { "type": "integer", "notNull": false, @@ -1437,9 +1443,53 @@ "table": "workspace" }, { - "columns": ["active_account_id"], + "type": "text", + "notNull": true, + "autoincrement": false, + "default": null, + "generated": null, + "name": "project_id", + "entityType": "columns", + "table": "worktree" + }, + { + "type": "text", + "notNull": true, + "autoincrement": false, + "default": null, + "generated": null, + "name": "directory", + "entityType": "columns", + "table": "worktree" + }, + { + "type": "text", + "notNull": false, + "autoincrement": false, + "default": null, + "generated": null, + "name": "strategy", + "entityType": "columns", + "table": "worktree" + }, + { + "type": "integer", + "notNull": true, + "autoincrement": false, + "default": null, + "generated": null, + "name": "time_created", + "entityType": "columns", + "table": "worktree" + }, + { + "columns": [ + "active_account_id" + ], "tableTo": "account", - "columnsTo": ["id"], + "columnsTo": [ + "id" + ], "onUpdate": "NO ACTION", "onDelete": "SET NULL", "nameExplicit": false, @@ -1448,9 +1498,13 @@ "table": "account_state" }, { - "columns": ["aggregate_id"], + "columns": [ + "aggregate_id" + ], "tableTo": "event_sequence", - "columnsTo": ["aggregate_id"], + "columnsTo": [ + "aggregate_id" + ], "onUpdate": "NO ACTION", "onDelete": "CASCADE", "nameExplicit": false, @@ -1459,9 +1513,13 @@ "table": "event" }, { - "columns": ["project_id"], + "columns": [ + "project_id" + ], "tableTo": "project", - "columnsTo": ["id"], + "columnsTo": [ + "id" + ], "onUpdate": "NO ACTION", "onDelete": "CASCADE", "nameExplicit": false, @@ -1470,9 +1528,13 @@ "table": "permission" }, { - "columns": ["project_id"], + "columns": [ + "project_id" + ], "tableTo": "project", - "columnsTo": ["id"], + "columnsTo": [ + "id" + ], "onUpdate": "NO ACTION", "onDelete": "CASCADE", "nameExplicit": false, @@ -1481,9 +1543,13 @@ "table": "project_directory" }, { - "columns": ["session_id"], + "columns": [ + "session_id" + ], "tableTo": "session_v2", - "columnsTo": ["id"], + "columnsTo": [ + "id" + ], "onUpdate": "NO ACTION", "onDelete": "CASCADE", "nameExplicit": false, @@ -1492,9 +1558,13 @@ "table": "instruction_entry" }, { - "columns": ["session_id"], + "columns": [ + "session_id" + ], "tableTo": "session_v2", - "columnsTo": ["id"], + "columnsTo": [ + "id" + ], "onUpdate": "NO ACTION", "onDelete": "CASCADE", "nameExplicit": false, @@ -1503,9 +1573,13 @@ "table": "instruction_state" }, { - "columns": ["session_id"], + "columns": [ + "session_id" + ], "tableTo": "session_v2", - "columnsTo": ["id"], + "columnsTo": [ + "id" + ], "onUpdate": "NO ACTION", "onDelete": "CASCADE", "nameExplicit": false, @@ -1514,9 +1588,13 @@ "table": "session_inbox" }, { - "columns": ["session_id"], + "columns": [ + "session_id" + ], "tableTo": "session_v2", - "columnsTo": ["id"], + "columnsTo": [ + "id" + ], "onUpdate": "NO ACTION", "onDelete": "CASCADE", "nameExplicit": false, @@ -1525,9 +1603,13 @@ "table": "session_message" }, { - "columns": ["session_id"], + "columns": [ + "session_id" + ], "tableTo": "session_v2", - "columnsTo": ["id"], + "columnsTo": [ + "id" + ], "onUpdate": "NO ACTION", "onDelete": "CASCADE", "nameExplicit": false, @@ -1536,9 +1618,13 @@ "table": "session_pending" }, { - "columns": ["project_id"], + "columns": [ + "project_id" + ], "tableTo": "project", - "columnsTo": ["id"], + "columnsTo": [ + "id" + ], "onUpdate": "NO ACTION", "onDelete": "CASCADE", "nameExplicit": false, @@ -1547,126 +1633,190 @@ "table": "session_v2" }, { - "columns": ["email", "url"], + "columns": [ + "project_id" + ], + "tableTo": "project", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "nameExplicit": false, + "name": "fk_worktree_project_id_project_id_fk", + "entityType": "fks", + "table": "worktree" + }, + { + "columns": [ + "email", + "url" + ], "nameExplicit": false, "name": "control_account_pk", "entityType": "pks", "table": "control_account" }, { - "columns": ["project_id", "directory"], + "columns": [ + "project_id", + "directory" + ], "nameExplicit": false, "name": "project_directory_pk", "entityType": "pks", "table": "project_directory" }, { - "columns": ["session_id", "key"], + "columns": [ + "session_id", + "key" + ], "nameExplicit": false, "name": "instruction_entry_pk", "entityType": "pks", "table": "instruction_entry" }, { - "columns": ["id"], + "columns": [ + "project_id", + "directory" + ], + "nameExplicit": false, + "name": "worktree_pk", + "entityType": "pks", + "table": "worktree" + }, + { + "columns": [ + "id" + ], "nameExplicit": false, "name": "account_state_pk", "table": "account_state", "entityType": "pks" }, { - "columns": ["id"], + "columns": [ + "id" + ], "nameExplicit": false, "name": "account_pk", "table": "account", "entityType": "pks" }, { - "columns": ["id"], + "columns": [ + "id" + ], "nameExplicit": false, "name": "credential_pk", "table": "credential", "entityType": "pks" }, { - "columns": ["aggregate_id"], + "columns": [ + "aggregate_id" + ], "nameExplicit": false, "name": "event_sequence_pk", "table": "event_sequence", "entityType": "pks" }, { - "columns": ["id"], + "columns": [ + "id" + ], "nameExplicit": false, "name": "event_pk", "table": "event", "entityType": "pks" }, { - "columns": ["key"], + "columns": [ + "key" + ], "nameExplicit": false, "name": "kv_pk", "table": "kv", "entityType": "pks" }, { - "columns": ["id"], + "columns": [ + "id" + ], "nameExplicit": false, "name": "permission_pk", "table": "permission", "entityType": "pks" }, { - "columns": ["id"], + "columns": [ + "id" + ], "nameExplicit": false, "name": "project_pk", "table": "project", "entityType": "pks" }, { - "columns": ["hash"], + "columns": [ + "hash" + ], "nameExplicit": false, "name": "instruction_blob_pk", "table": "instruction_blob", "entityType": "pks" }, { - "columns": ["session_id"], + "columns": [ + "session_id" + ], "nameExplicit": false, "name": "instruction_state_pk", "table": "instruction_state", "entityType": "pks" }, { - "columns": ["id"], + "columns": [ + "id" + ], "nameExplicit": false, "name": "session_inbox_pk", "table": "session_inbox", "entityType": "pks" }, { - "columns": ["id"], + "columns": [ + "id" + ], "nameExplicit": false, "name": "session_message_pk", "table": "session_message", "entityType": "pks" }, { - "columns": ["id"], + "columns": [ + "id" + ], "nameExplicit": false, "name": "session_pending_pk", "table": "session_pending", "entityType": "pks" }, { - "columns": ["id"], + "columns": [ + "id" + ], "nameExplicit": false, "name": "session_v2_pk", "table": "session_v2", "entityType": "pks" }, { - "columns": ["id"], + "columns": [ + "id" + ], "nameExplicit": false, "name": "workspace_pk", "table": "workspace", @@ -1962,4 +2112,4 @@ } ], "renames": [] -} +} \ No newline at end of file diff --git a/packages/core/src/database/migration.gen.ts b/packages/core/src/database/migration.gen.ts index 1fb55eb24c2..809ce551909 100644 --- a/packages/core/src/database/migration.gen.ts +++ b/packages/core/src/database/migration.gen.ts @@ -42,6 +42,7 @@ import m39 from "./migration/20260805200742_import_legacy_credentials.js" import m40 from "./migration/20260808023530_workspace_domain.js" import m41 from "./migration/20260811161259_execution_claim_attempts.js" import m42 from "./migration/20260812181746_session_inbox.js" +import m43 from "./migration/20260812213948_worktree.js" export const migrations = [ m00, @@ -87,4 +88,5 @@ export const migrations = [ m40, m41, m42, + m43, ] satisfies DatabaseMigration.Migration[] diff --git a/packages/core/src/database/migration/20260812213948_worktree.ts b/packages/core/src/database/migration/20260812213948_worktree.ts new file mode 100644 index 00000000000..e279806f475 --- /dev/null +++ b/packages/core/src/database/migration/20260812213948_worktree.ts @@ -0,0 +1,35 @@ +import { Effect } from "effect" +import type { DatabaseMigration } from "../migration.js" + +const migration: DatabaseMigration.Migration = { + id: "20260812213948_worktree", + up(tx) { + return Effect.gen(function* () { + yield* tx.run(` + CREATE TABLE \`worktree\` ( + \`project_id\` text NOT NULL, + \`directory\` text NOT NULL, + \`strategy\` text, + \`time_created\` integer NOT NULL, + CONSTRAINT \`worktree_pk\` PRIMARY KEY(\`project_id\`, \`directory\`), + CONSTRAINT \`fk_worktree_project_id_project_id_fk\` FOREIGN KEY (\`project_id\`) REFERENCES \`project\`(\`id\`) ON DELETE CASCADE + ); + `) + yield* tx.run(` + INSERT INTO \`worktree\` (\`project_id\`, \`directory\`, \`strategy\`, \`time_created\`) + SELECT + \`project_id\`, + \`directory\`, + CASE + WHEN \`strategy\` = 'git_worktree' THEN 'git' + WHEN \`strategy\` IS NOT NULL THEN \`strategy\` + WHEN \`type\` = 'git_worktree' THEN 'git' + END, + \`time_created\` + FROM \`project_directory\`; + `) + }) + }, +} + +export default migration diff --git a/packages/core/src/database/schema.gen.ts b/packages/core/src/database/schema.gen.ts index 13f94e420ea..327758147c0 100644 --- a/packages/core/src/database/schema.gen.ts +++ b/packages/core/src/database/schema.gen.ts @@ -225,6 +225,16 @@ const schema: Omit = { \`last_used_at\` integer NOT NULL ); `) + yield* tx.run(` + CREATE TABLE \`worktree\` ( + \`project_id\` text NOT NULL, + \`directory\` text NOT NULL, + \`strategy\` text, + \`time_created\` integer NOT NULL, + CONSTRAINT \`worktree_pk\` PRIMARY KEY(\`project_id\`, \`directory\`), + CONSTRAINT \`fk_worktree_project_id_project_id_fk\` FOREIGN KEY (\`project_id\`) REFERENCES \`project\`(\`id\`) ON DELETE CASCADE + ); + `) yield* tx.run(`CREATE UNIQUE INDEX \`event_aggregate_seq_idx\` ON \`event\` (\`aggregate_id\`,\`seq\`);`) yield* tx.run(`CREATE INDEX \`event_aggregate_type_seq_idx\` ON \`event\` (\`aggregate_id\`,\`type\`,\`seq\`);`) yield* tx.run( diff --git a/packages/core/src/location-services.ts b/packages/core/src/location-services.ts index e03c235301b..02db84a829f 100644 --- a/packages/core/src/location-services.ts +++ b/packages/core/src/location-services.ts @@ -25,7 +25,7 @@ import { MCP } from "./mcp/index.js" import { Permission } from "./permission.js" import { Plugin } from "./plugin.js" import { PluginSupervisor } from "./plugin/supervisor.js" -import { ProjectCopy } from "./project/copy.js" +import { Worktree } from "./worktree.js" import { Pty } from "./pty.js" import { Question } from "./question.js" import { Shell } from "./shell.js" @@ -66,8 +66,7 @@ const locationServiceNodes = [ AISDK.node, Plugin.node, PluginSupervisor.node, - ProjectCopy.node, - ProjectCopy.refreshNode, + Worktree.refreshNode, FileSystemSearch.node, FileSystem.node, Pty.node, diff --git a/packages/core/src/project.ts b/packages/core/src/project.ts index 755779d11c1..8a9ecd4737e 100644 --- a/packages/core/src/project.ts +++ b/packages/core/src/project.ts @@ -2,20 +2,20 @@ export * as Project from "./project.js" import { Context, Effect, Layer, Schema } from "effect" import { ChildProcess } from "effect/unstable/process" -import { asc, desc } from "drizzle-orm" +import { and, asc, desc, eq } from "drizzle-orm" import path from "path" import { AbsolutePath } from "./schema.js" import { Bus } from "./bus.js" import { Database } from "./database/database.js" -import { Event } from "@opencode-ai/schema/project-directories" +import { Worktree } from "@opencode-ai/schema/worktree" import { FSUtil } from "@opencode-ai/util/fs-util" import { Git } from "./git.js" import { AppProcess } from "@opencode-ai/util/process" import { makeGlobalNode } from "@opencode-ai/util/effect/app-node" import { Hash } from "@opencode-ai/util/hash" -import { ProjectDirectories } from "./project/directories.js" import { ProjectSchema } from "./project/schema.js" import { ProjectTable, upsertProject } from "./project/sql.js" +import { WorktreeTable } from "./worktree/sql.js" export const ID = ProjectSchema.ID export type ID = ProjectSchema.ID @@ -26,18 +26,9 @@ export type Vcs = ProjectSchema.Vcs export const Current = ProjectSchema.Current export type Current = ProjectSchema.Current -export const Directory = ProjectSchema.Directory -export type Directory = ProjectSchema.Directory - export const Info = ProjectSchema.Info export interface Info extends Schema.Schema.Type {} -export const DirectoriesInput = ProjectSchema.DirectoriesInput -export type DirectoriesInput = typeof DirectoriesInput.Type - -export const Directories = ProjectSchema.Directories -export type Directories = typeof Directories.Type - export interface Resolved { readonly previous?: ID readonly id: ID @@ -56,7 +47,6 @@ export const root = Effect.fn("Project.root")(function* (fs: FSUtil.Interface, i export interface Interface { readonly list: () => Effect.Effect> - readonly directories: (input: DirectoriesInput) => Effect.Effect readonly resolve: (input: AbsolutePath) => Effect.Effect } @@ -95,18 +85,19 @@ const layer = Layer.effect( const proc = yield* AppProcess.Service const bus = yield* Bus.Service const db = (yield* Database.Service).db - const projectDirectories = yield* ProjectDirectories.Service const announcing = new Set() const persist = Effect.fnUntraced(function* (project: Resolved) { yield* upsertProject(db, project).pipe(Effect.orDie) if (!project.vcs) return project - const directories: ProjectDirectories.CreateInput[] = [{ projectID: project.id, directory: project.canonical }] + const directories: Array<{ projectID: ID; directory: AbsolutePath; strategy?: string }> = [ + { projectID: project.id, directory: project.canonical }, + ] if (project.directory !== project.canonical) directories.push({ projectID: project.id, directory: project.directory, - strategy: project.vcs.type === "git" ? "git_worktree" : undefined, + strategy: project.vcs.type === "git" ? "git" : undefined, }) // A missing directory row means this directory's resolution is a new durable // fact (copy.ts registers copy directories directly; those never strand @@ -119,11 +110,25 @@ const layer = Layer.effect( if (announcing.has(key)) continue announcing.add(key) yield* Effect.gen(function* () { - if (yield* projectDirectories.get({ projectID: item.projectID, directory: item.directory })) return + const stored = yield* db + .select({ directory: WorktreeTable.directory }) + .from(WorktreeTable) + .where(and(eq(WorktreeTable.project_id, item.projectID), eq(WorktreeTable.directory, item.directory))) + .get() + .pipe(Effect.orDie) + if (stored) return yield* bus.publish( - Event.Resolved, + Worktree.Event.Resolved, { projectID: item.projectID, directory: item.directory, previous: project.previous ?? ID.global }, - { commit: () => Effect.asVoid(projectDirectories.create(item)) }, + { + commit: () => + db + .insert(WorktreeTable) + .values({ project_id: item.projectID, directory: item.directory, strategy: item.strategy }) + .onConflictDoNothing() + .run() + .pipe(Effect.orDie, Effect.asVoid), + }, ) }).pipe(Effect.ensuring(Effect.sync(() => announcing.delete(key)))) } @@ -140,10 +145,6 @@ const layer = Layer.effect( return rows.map(fromRow) }) - const directories = Effect.fn("Project.directories")(function* (input: DirectoriesInput) { - return yield* projectDirectories.list(input.projectID) - }) - const cached = Effect.fnUntraced(function* (dir: string) { return yield* fs.readFileString(path.join(dir, "opencode")).pipe( Effect.map((value) => value.trim()), @@ -257,12 +258,12 @@ const layer = Layer.effect( return yield* persist({ id: ID.global, directory, canonical: directory, vcs: undefined }) }) - return Service.of({ list, directories, resolve }) + return Service.of({ list, resolve }) }), ) export const node = makeGlobalNode({ service: Service, layer: layer, - deps: [Bus.node, Database.node, FSUtil.node, Git.node, AppProcess.node, ProjectDirectories.node], + deps: [Bus.node, Database.node, FSUtil.node, Git.node, AppProcess.node], }) diff --git a/packages/core/src/project/copy-strategies.ts b/packages/core/src/project/copy-strategies.ts deleted file mode 100644 index f205196c548..00000000000 --- a/packages/core/src/project/copy-strategies.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { Effect } from "effect" -import { AbsolutePath } from "../schema.js" -import { Git } from "../git.js" -import { DirectoryUnavailableError, StrategyID, type ListEntry, type Strategy } from "./copy.js" - -export function makeGitWorktreeStrategy(input: { - git: Git.Interface - canonical: (directory: AbsolutePath) => Effect.Effect -}) { - return { - id: StrategyID.make("git_worktree"), - create: Effect.fn("ProjectCopy.GitWorktree.create")(function* (options) { - const repository = yield* input.git.repo.discover(options.sourceDirectory) - if (!repository) return yield* new DirectoryUnavailableError({ directory: options.sourceDirectory }) - yield* input.git.worktree.create({ repository, directory: options.directory }) - return { directory: yield* input.canonical(options.directory) } - }), - remove: Effect.fn("ProjectCopy.GitWorktree.remove")(function* (options) { - const found = yield* input.git.repo.discover(options.directory) - if (!found) return yield* new DirectoryUnavailableError({ directory: options.directory }) - yield* input.git.worktree.remove({ repository: found, directory: options.directory, force: options.force }) - }), - list: Effect.fn("ProjectCopy.GitWorktree.list")(function* (directory) { - const found = yield* input.git.repo.discover(directory) - if (!found) return yield* new DirectoryUnavailableError({ directory }) - const entries = yield* input.git.worktree.list(found) - return yield* Effect.forEach(entries, (entry) => - input.canonical(entry.directory).pipe( - Effect.map((directory) => ({ directory, type: entry.kind === "main" ? "root" : "copy" }) as const), - Effect.catchTag("ProjectCopy.DirectoryUnavailableError", () => Effect.succeed(undefined)), - ), - ).pipe(Effect.map((items) => items.filter((item): item is ListEntry => item !== undefined))) - }), - } satisfies Strategy -} diff --git a/packages/core/src/project/copy.ts b/packages/core/src/project/copy.ts deleted file mode 100644 index de488f3a43e..00000000000 --- a/packages/core/src/project/copy.ts +++ /dev/null @@ -1,272 +0,0 @@ -export * as ProjectCopy from "./copy.js" - -import { Context, Effect, Layer, Schema } from "effect" -import path from "path" -import { AbsolutePath } from "../schema.js" -import { FSUtil } from "@opencode-ai/util/fs-util" -import { Git } from "../git.js" -import { makeLocationNode } from "@opencode-ai/util/effect/app-node" -import { Project } from "../project.js" -import { ProjectDirectories } from "./directories.js" -import { makeGitWorktreeStrategy } from "./copy-strategies.js" -import { Slug } from "../util/slug.js" -import { Bus } from "../bus.js" -import { Database } from "../database/database.js" -import { Location } from "../location.js" -import { Event } from "@opencode-ai/schema/project-directories" -import { ProjectCopy } from "@opencode-ai/schema/project-copy" - -export const StrategyID = ProjectCopy.StrategyID -export type StrategyID = typeof StrategyID.Type - -export const CreateInput = ProjectCopy.CreateInput -export type CreateInput = typeof CreateInput.Type - -export const RemoveInput = ProjectCopy.RemoveInput -export type RemoveInput = typeof RemoveInput.Type - -export const RefreshInput = Schema.Struct({ - projectID: Project.ID, -}).annotate({ identifier: "ProjectCopy.RefreshInput" }) -export type RefreshInput = typeof RefreshInput.Type - -export const RefreshResult = Schema.Struct({ - updated: Schema.Array(AbsolutePath), - removed: Schema.Array(AbsolutePath), -}).annotate({ identifier: "ProjectCopy.RefreshResult" }) -export type RefreshResult = typeof RefreshResult.Type - -export const Copy = ProjectCopy.Copy -export type Copy = typeof Copy.Type - -export const ListEntry = Schema.Struct({ - directory: AbsolutePath, - type: Schema.Literals(["root", "copy"]), -}).annotate({ identifier: "ProjectCopy.ListEntry" }) -export type ListEntry = typeof ListEntry.Type - -export class SourceDirectoryNotFoundError extends Schema.TaggedErrorClass()( - "ProjectCopy.SourceDirectoryNotFoundError", - { directory: AbsolutePath }, -) {} - -export class DestinationExistsError extends Schema.TaggedErrorClass()( - "ProjectCopy.DestinationExistsError", - { directory: AbsolutePath }, -) {} - -export class DirectoryUnavailableError extends Schema.TaggedErrorClass()( - "ProjectCopy.DirectoryUnavailableError", - { directory: AbsolutePath }, -) {} - -export class InvalidDirectoryError extends Schema.TaggedErrorClass()( - "ProjectCopy.InvalidDirectoryError", - { directory: AbsolutePath }, -) {} - -export class StrategyUnavailableError extends Schema.TaggedErrorClass()( - "ProjectCopy.StrategyUnavailableError", - { strategy: StrategyID }, -) {} - -export type Error = - | SourceDirectoryNotFoundError - | DestinationExistsError - | DirectoryUnavailableError - | InvalidDirectoryError - | StrategyUnavailableError - | Git.WorktreeError - -export interface Strategy { - readonly id: StrategyID - readonly create: (input: { - sourceDirectory: AbsolutePath - directory: AbsolutePath - }) => Effect.Effect - readonly remove: (input: { - directory: AbsolutePath - force: boolean - }) => Effect.Effect - readonly list: (directory: AbsolutePath) => Effect.Effect -} - -export { Event } - -export interface Interface { - readonly create: (input: CreateInput) => Effect.Effect - readonly remove: (input: RemoveInput) => Effect.Effect - readonly refresh: (input: RefreshInput) => Effect.Effect -} - -export class Service extends Context.Service()("@opencode/ProjectCopy") {} - -export const refreshAfterBoot = Effect.gen(function* () { - const location = yield* Location.Service - const copies = yield* Service - yield* Effect.gen(function* () { - yield* Effect.logInfo("project copy refresh started", { projectID: location.project.id }) - const result = yield* copies.refresh({ projectID: location.project.id }) - yield* Effect.logInfo("project copy refresh done", { - projectID: location.project.id, - updated: result.updated, - removed: result.removed, - }) - }).pipe( - Effect.catchCause((cause) => Effect.logWarning("project copy refresh failed", { cause })), - Effect.forkScoped, - Effect.asVoid, - ) -}) - -const layer = Layer.effect( - Service, - Effect.gen(function* () { - const fs = yield* FSUtil.Service - const git = yield* Git.Service - const directories = yield* ProjectDirectories.Service - const db = (yield* Database.Service).db - const bus = yield* Bus.Service - - const changed = Effect.fnUntraced(function* (projectID: Project.ID, update: boolean) { - if (update) yield* bus.publish(Event.Updated, { projectID }) - }) - - const canonical = Effect.fnUntraced(function* (input: AbsolutePath) { - const resolved = AbsolutePath.make(yield* fs.resolve(input)) - if (!(yield* fs.isDir(resolved))) return yield* new DirectoryUnavailableError({ directory: input }) - return resolved - }) - - const strategy = makeGitWorktreeStrategy({ git, canonical }) - - const source = Effect.fnUntraced(function* (input: AbsolutePath, projectID: Project.ID) { - const sourceDirectory = yield* canonical(input) - if ((yield* directories.get({ projectID, directory: sourceDirectory })) === undefined) - return yield* new SourceDirectoryNotFoundError({ directory: sourceDirectory }) - return sourceDirectory - }) - - const getStrategy = Effect.fnUntraced(function* (id: StrategyID) { - if (id !== strategy.id) return yield* new StrategyUnavailableError({ strategy: id }) - return strategy - }) - - const create = Effect.fn("ProjectCopy.create")(function* (input: CreateInput) { - const selected = yield* getStrategy(input.strategy) - const sourceDirectory = yield* source(input.sourceDirectory, input.projectID) - yield* fs.makeDirectory(input.directory, { recursive: true }).pipe(Effect.orDie) - const name = input.name ?? Slug.create() - let suffix = 1 - let copyDirectory = AbsolutePath.make(path.join(input.directory, name)) - while (yield* fs.existsSafe(copyDirectory)) { - suffix++ - if (suffix > 10) return yield* new DestinationExistsError({ directory: copyDirectory }) - copyDirectory = AbsolutePath.make(path.join(input.directory, `${name}-${suffix}`)) - } - - const result = yield* selected.create({ - directory: copyDirectory, - sourceDirectory, - }) - yield* changed( - input.projectID, - yield* directories.create({ - projectID: input.projectID, - directory: result.directory, - strategy: input.strategy, - behavior: "replace", - }), - ) - return result - }) - - const remove = Effect.fn("ProjectCopy.remove")(function* (input: RemoveInput) { - const copyDirectory = yield* canonical(input.directory) - const stored = yield* directories.get({ projectID: input.projectID, directory: copyDirectory }) - if (!stored?.strategy) return yield* new InvalidDirectoryError({ directory: copyDirectory }) - const strategy = yield* getStrategy(StrategyID.make(stored.strategy)) - yield* strategy.remove({ - directory: copyDirectory, - force: input.force, - }) - yield* changed( - input.projectID, - yield* directories.remove({ projectID: input.projectID, directory: copyDirectory }), - ) - }) - - const refresh = Effect.fn("ProjectCopy.refresh")(function* (input: RefreshInput) { - const stored = yield* directories.list(input.projectID) - const checked = yield* Effect.forEach( - stored, - (item) => fs.isDir(item.directory).pipe(Effect.map((exists) => ({ ...item, exists }))), - { concurrency: "unbounded" }, - ) - const sourceDirectories = checked - .filter((item) => item.strategy === undefined && item.exists) - .map((item) => item.directory) - const discovered = yield* Effect.forEach( - sourceDirectories, - (sourceDirectory) => - strategy.list(sourceDirectory).pipe( - Effect.catchTag("ProjectCopy.DirectoryUnavailableError", () => Effect.succeed([])), - Effect.map((items) => - items.map((item) => ({ - directory: item.directory, - strategy: item.type === "copy" ? strategy.id : undefined, - })), - ), - ), - { concurrency: "unbounded" }, - ).pipe( - Effect.map((sets) => new Map(sets.flat().map((item) => [item.directory, item] as const)).values().toArray()), - ) - const removed = checked.filter((item) => !item.exists).map((item) => item.directory) - const result = yield* db - .transaction((tx) => - Effect.all({ - updated: Effect.forEach(discovered, (item) => - directories.create( - { - projectID: input.projectID, - directory: item.directory, - strategy: item.strategy, - behavior: "replace", - }, - tx, - ), - ), - removed: Effect.forEach(removed, (directory) => - directories.remove({ projectID: input.projectID, directory }, tx), - ), - }), - ) - .pipe(Effect.orDie) - const changes = { - updated: discovered.filter((_, index) => result.updated[index]).map((item) => item.directory), - removed: removed.filter((_, index) => result.removed[index]), - } - yield* changed(input.projectID, changes.updated.length > 0 || changes.removed.length > 0) - return changes - }) - - return Service.of({ - create, - remove, - refresh, - }) - }), -) - -export const node = makeLocationNode({ - service: Service, - layer: layer, - deps: [FSUtil.node, Git.node, ProjectDirectories.node, Bus.node, Database.node], -}) - -export const refreshNode = makeLocationNode({ - name: "project-copy-refresh", - layer: Layer.effectDiscard(refreshAfterBoot), - deps: [node, Location.node], -}) diff --git a/packages/core/src/project/directories.ts b/packages/core/src/project/directories.ts deleted file mode 100644 index 77f815662aa..00000000000 --- a/packages/core/src/project/directories.ts +++ /dev/null @@ -1,128 +0,0 @@ -export * as ProjectDirectories from "./directories.js" - -import { and, asc, desc, eq, isNotNull, isNull, ne, or } from "drizzle-orm" -import { Context, Effect, Layer, Schema } from "effect" -import { Database } from "../database/database.js" -import { makeGlobalNode } from "@opencode-ai/util/effect/app-node" -import { AbsolutePath } from "../schema.js" -import { ProjectSchema } from "./schema.js" -import { ProjectDirectoryTable } from "./sql.js" -import type { EffectDrizzleSqlite } from "../database/drizzle.js" -import type { Project } from "../project.js" - -export type Directory = Project.Directory - -export const CreateInput = Schema.Struct({ - projectID: ProjectSchema.ID, - directory: AbsolutePath, - strategy: Schema.optional(Schema.String), - behavior: Schema.Literals(["ignore", "replace"]).pipe(Schema.optional), -}) -export type CreateInput = typeof CreateInput.Type - -export const RemoveInput = Schema.Struct({ - projectID: ProjectSchema.ID, - directory: AbsolutePath, -}) -export type RemoveInput = typeof RemoveInput.Type - -type DatabaseClient = EffectDrizzleSqlite.EffectSQLiteDatabase -export type Transaction = Parameters[0]>[0] - -export const ListInput = ProjectSchema.DirectoriesInput -export type ListInput = typeof ListInput.Type - -export const ListOutput = ProjectSchema.Directories -export type ListOutput = typeof ListOutput.Type - -export interface Interface { - readonly list: (projectID: ProjectSchema.ID) => Effect.Effect> - readonly get: (input: { - projectID: ProjectSchema.ID - directory: AbsolutePath - }) => Effect.Effect - readonly create: (input: CreateInput, tx?: Transaction) => Effect.Effect - readonly remove: (input: RemoveInput, tx?: Transaction) => Effect.Effect -} - -export class Service extends Context.Service()("@opencode/ProjectDirectories") {} - -const layer = Layer.effect( - Service, - Effect.gen(function* () { - const db = (yield* Database.Service).db - - const create = Effect.fn("ProjectDirectories.create")(function* (input: CreateInput, tx?: Transaction) { - const insert = (tx ?? db) - .insert(ProjectDirectoryTable) - .values({ project_id: input.projectID, directory: input.directory, strategy: input.strategy }) - const query = - input.behavior === "replace" - ? insert.onConflictDoUpdate({ - target: [ProjectDirectoryTable.project_id, ProjectDirectoryTable.directory], - set: { strategy: input.strategy ?? null }, - setWhere: input.strategy - ? or(isNull(ProjectDirectoryTable.strategy), ne(ProjectDirectoryTable.strategy, input.strategy)) - : isNotNull(ProjectDirectoryTable.strategy), - }) - : insert.onConflictDoNothing() - return ( - (yield* query.returning({ directory: ProjectDirectoryTable.directory }).get().pipe(Effect.orDie)) !== undefined - ) - }) - - const remove = Effect.fn("ProjectDirectories.remove")(function* (input: RemoveInput, tx?: Transaction) { - return ( - (yield* (tx ?? db) - .delete(ProjectDirectoryTable) - .where( - and( - eq(ProjectDirectoryTable.project_id, input.projectID), - eq(ProjectDirectoryTable.directory, input.directory), - ), - ) - .returning({ directory: ProjectDirectoryTable.directory }) - .get() - .pipe(Effect.orDie)) !== undefined - ) - }) - - const list = Effect.fn("ProjectDirectories.list")(function* (projectID: ProjectSchema.ID) { - const rows = yield* db - .select({ directory: ProjectDirectoryTable.directory, strategy: ProjectDirectoryTable.strategy }) - .from(ProjectDirectoryTable) - .where(eq(ProjectDirectoryTable.project_id, projectID)) - .orderBy(desc(ProjectDirectoryTable.time_created), asc(ProjectDirectoryTable.directory)) - .all() - .pipe(Effect.orDie) - return rows.map((row) => ({ directory: row.directory, strategy: row.strategy ?? undefined })) - }) - - const get = Effect.fn("ProjectDirectories.get")(function* (input: { - projectID: ProjectSchema.ID - directory: AbsolutePath - }) { - const row = yield* db - .select({ directory: ProjectDirectoryTable.directory, strategy: ProjectDirectoryTable.strategy }) - .from(ProjectDirectoryTable) - .where( - and( - eq(ProjectDirectoryTable.project_id, input.projectID), - eq(ProjectDirectoryTable.directory, input.directory), - ), - ) - .get() - .pipe(Effect.orDie) - return row ? { directory: row.directory, strategy: row.strategy ?? undefined } : undefined - }) - - return Service.of({ - list, - get, - create, - remove, - }) - }), -) - -export const node = makeGlobalNode({ service: Service, layer: layer, deps: [Database.node] }) diff --git a/packages/core/src/project/schema.ts b/packages/core/src/project/schema.ts index 2eef1ed1f07..4f5fa90fb3e 100644 --- a/packages/core/src/project/schema.ts +++ b/packages/core/src/project/schema.ts @@ -10,18 +10,9 @@ export type ID = typeof ID.Type export const Current = Project.Current export type Current = typeof Current.Type -export const Directory = Project.Directory -export type Directory = typeof Directory.Type - export const Info = Project.Info export interface Info extends Schema.Schema.Type {} -export const DirectoriesInput = Project.DirectoriesInput -export type DirectoriesInput = typeof DirectoriesInput.Type - -export const Directories = Project.Directories -export type Directories = typeof Directories.Type - export const Vcs = Schema.Union([ Schema.Struct({ type: Schema.Literal("git"), diff --git a/packages/core/src/project/sql.ts b/packages/core/src/project/sql.ts index 4506e056236..86ff6416ca0 100644 --- a/packages/core/src/project/sql.ts +++ b/packages/core/src/project/sql.ts @@ -23,6 +23,7 @@ export const ProjectTable = sqliteTable("project", { commands: text({ mode: "json" }).$type<{ start?: string }>(), }) +/** @deprecated Use WorktreeTable from worktree/sql instead. */ export const ProjectDirectoryTable = sqliteTable( "project_directory", { diff --git a/packages/core/src/session/projector.ts b/packages/core/src/session/projector.ts index 05b7f4561b4..e76ffda2037 100644 --- a/packages/core/src/session/projector.ts +++ b/packages/core/src/session/projector.ts @@ -18,7 +18,7 @@ import { SessionInboxTable, SessionMessageTable, SessionTable } from "./sql.js" import { Slug } from "../util/slug.js" import { FSUtil } from "@opencode-ai/util/fs-util" import { Money } from "@opencode-ai/schema/money" -import { Event } from "@opencode-ai/schema/project-directories" +import { Worktree } from "@opencode-ai/schema/worktree" import { Project } from "@opencode-ai/schema/project" import { AbsolutePath, RelativePath } from "../schema.js" import type { SessionSchema } from "./schema.js" @@ -441,7 +441,7 @@ const layer = Layer.effectDiscard( // Sessions whose ownership came from the directory's previous resolution // follow its new identity. Location, transcript, instructions, and recency // are untouched: the session did not move, its directory got identified. - yield* bus.project(Event.Resolved, (event) => + yield* bus.project(Worktree.Event.Resolved, (event) => Effect.gen(function* () { const stale = [event.data.previous, Project.ID.global].filter((id) => id !== event.data.projectID) if (stale.length === 0) return diff --git a/packages/core/src/worktree.ts b/packages/core/src/worktree.ts new file mode 100644 index 00000000000..01aaddf3b73 --- /dev/null +++ b/packages/core/src/worktree.ts @@ -0,0 +1,353 @@ +export * as Worktree from "./worktree.js" + +import { Context, Effect, Layer, Schema } from "effect" +import { and, asc, desc, eq, isNotNull, isNull, ne, or } from "drizzle-orm" +import path from "path" +import { AbsolutePath } from "./schema.js" +import { FSUtil } from "@opencode-ai/util/fs-util" +import { Git } from "./git.js" +import { makeGlobalNode, makeLocationNode } from "@opencode-ai/util/effect/app-node" +import { ProjectSchema } from "./project/schema.js" +import { Slug } from "./util/slug.js" +import { Bus } from "./bus.js" +import { Database } from "./database/database.js" +import { Location } from "./location.js" +import { Worktree } from "@opencode-ai/schema/worktree" +import { WorktreeTable } from "./worktree/sql.js" +import { canonical, DirectoryUnavailableError } from "./worktree/directory.js" +import { WorktreeGit } from "./worktree/git.js" +import type { EffectDrizzleSqlite } from "./database/drizzle.js" +import { ProjectTable } from "./project/sql.js" + +export { DirectoryUnavailableError } from "./worktree/directory.js" + +export const StrategyID = Worktree.StrategyID +export type StrategyID = typeof StrategyID.Type + +export const CreateInput = Worktree.CreateInput +export type CreateInput = typeof CreateInput.Type + +export const RemoveInput = Worktree.RemoveInput +export type RemoveInput = typeof RemoveInput.Type + +export const RefreshInput = Schema.Struct({ + projectID: ProjectSchema.ID, +}).annotate({ identifier: "Worktree.RefreshInput" }) +export type RefreshInput = typeof RefreshInput.Type + +export const RefreshResult = Schema.Struct({ + updated: Schema.Array(AbsolutePath), + removed: Schema.Array(AbsolutePath), +}).annotate({ identifier: "Worktree.RefreshResult" }) +export type RefreshResult = typeof RefreshResult.Type + +export const Info = Worktree.Info +export type Info = typeof Info.Type + +export const ListInput = Worktree.ListInput +export type ListInput = typeof ListInput.Type + +export const List = Worktree.List +export type List = typeof List.Type + +export const ListEntry = Schema.Struct({ + directory: AbsolutePath, + type: Schema.Literals(["root", "worktree"]), +}).annotate({ identifier: "Worktree.ListEntry" }) +export type ListEntry = typeof ListEntry.Type + +export class SourceDirectoryNotFoundError extends Schema.TaggedErrorClass()( + "Worktree.SourceDirectoryNotFoundError", + { projectID: ProjectSchema.ID, directory: Schema.optional(AbsolutePath) }, +) {} + +export class DestinationExistsError extends Schema.TaggedErrorClass()( + "Worktree.DestinationExistsError", + { directory: AbsolutePath }, +) {} + +export class InvalidDirectoryError extends Schema.TaggedErrorClass()( + "Worktree.InvalidDirectoryError", + { directory: AbsolutePath }, +) {} + +export class StrategyUnavailableError extends Schema.TaggedErrorClass()( + "Worktree.StrategyUnavailableError", + { strategy: StrategyID }, +) {} + +export class DuplicateStrategyError extends Schema.TaggedErrorClass()( + "Worktree.DuplicateStrategyError", + { strategy: StrategyID }, +) {} + +export type Error = + | SourceDirectoryNotFoundError + | DestinationExistsError + | DirectoryUnavailableError + | InvalidDirectoryError + | StrategyUnavailableError + | Git.WorktreeError + +export interface Strategy { + readonly id: StrategyID + readonly create: (input: { + sourceDirectory: AbsolutePath + directory: AbsolutePath + }) => Effect.Effect + readonly remove: (input: { + directory: AbsolutePath + force: boolean + }) => Effect.Effect + readonly list: (directory: AbsolutePath) => Effect.Effect +} + +export const Event = Worktree.Event + +interface StoredInput { + readonly projectID: ProjectSchema.ID + readonly directory: AbsolutePath + readonly strategy?: string +} + +type DatabaseClient = EffectDrizzleSqlite.EffectSQLiteDatabase +type Transaction = Parameters[0]>[0] + +export interface Interface { + readonly register: (strategy: Strategy) => Effect.Effect + readonly list: (projectID: ProjectSchema.ID) => Effect.Effect + readonly create: (input: CreateInput) => Effect.Effect + readonly remove: (input: RemoveInput) => Effect.Effect + readonly refresh: (input: RefreshInput) => Effect.Effect +} + +export class Service extends Context.Service()("@opencode/v2/Worktree") {} + +export const refreshAfterBoot = Effect.gen(function* () { + const location = yield* Location.Service + const worktrees = yield* Service + yield* Effect.gen(function* () { + yield* Effect.logInfo("worktree refresh started", { projectID: location.project.id }) + const result = yield* worktrees.refresh({ projectID: location.project.id }) + yield* Effect.logInfo("worktree refresh done", { + projectID: location.project.id, + updated: result.updated, + removed: result.removed, + }) + }).pipe( + Effect.catchCause((cause) => Effect.logWarning("worktree refresh failed", { cause })), + Effect.forkScoped, + Effect.asVoid, + ) +}) + +const layer = Layer.effect( + Service, + Effect.gen(function* () { + const fs = yield* FSUtil.Service + const db = (yield* Database.Service).db + const bus = yield* Bus.Service + + const changed = Effect.fnUntraced(function* (projectID: ProjectSchema.ID, update: boolean) { + if (update) yield* bus.publish(Event.Updated, { projectID }) + }) + + const ops = { + list: Effect.fn("Worktree.list")(function* (projectID: ProjectSchema.ID) { + const rows = yield* db + .select({ directory: WorktreeTable.directory, strategy: WorktreeTable.strategy }) + .from(WorktreeTable) + .where(eq(WorktreeTable.project_id, projectID)) + .orderBy(desc(WorktreeTable.time_created), asc(WorktreeTable.directory)) + .all() + .pipe(Effect.orDie) + return rows.map((row) => ({ directory: row.directory, strategy: row.strategy ?? undefined })) + }), + find: Effect.fnUntraced(function* (projectID: ProjectSchema.ID, directory: AbsolutePath) { + const row = yield* db + .select({ directory: WorktreeTable.directory, strategy: WorktreeTable.strategy }) + .from(WorktreeTable) + .where(and(eq(WorktreeTable.project_id, projectID), eq(WorktreeTable.directory, directory))) + .get() + .pipe(Effect.orDie) + return row ? { directory: row.directory, strategy: row.strategy ?? undefined } : undefined + }), + primary: Effect.fnUntraced(function* (projectID: ProjectSchema.ID) { + return yield* db + .select({ directory: ProjectTable.worktree }) + .from(ProjectTable) + .where(eq(ProjectTable.id, projectID)) + .get() + .pipe(Effect.orDie) + }), + create: Effect.fnUntraced(function* (input: StoredInput, tx?: Transaction) { + return ( + (yield* (tx ?? db) + .insert(WorktreeTable) + .values({ project_id: input.projectID, directory: input.directory, strategy: input.strategy }) + .onConflictDoUpdate({ + target: [WorktreeTable.project_id, WorktreeTable.directory], + set: { strategy: input.strategy ?? null }, + setWhere: input.strategy + ? or(isNull(WorktreeTable.strategy), ne(WorktreeTable.strategy, input.strategy)) + : isNotNull(WorktreeTable.strategy), + }) + .returning({ directory: WorktreeTable.directory }) + .get() + .pipe(Effect.orDie)) !== undefined + ) + }), + remove: Effect.fnUntraced(function* (projectID: ProjectSchema.ID, directory: AbsolutePath, tx?: Transaction) { + return ( + (yield* (tx ?? db) + .delete(WorktreeTable) + .where(and(eq(WorktreeTable.project_id, projectID), eq(WorktreeTable.directory, directory))) + .returning({ directory: WorktreeTable.directory }) + .get() + .pipe(Effect.orDie)) !== undefined + ) + }), + } + + const registry = new Map() + + const register = Effect.fn("Worktree.register")(function* (strategy: Strategy) { + if (registry.has(strategy.id)) return yield* new DuplicateStrategyError({ strategy: strategy.id }) + registry.set(strategy.id, strategy) + }) + + // Register default strategies + const gitStrategy = yield* WorktreeGit.make + yield* register(gitStrategy).pipe(Effect.orDie) + + const strategies = () => Array.from(registry.values()) + + const source = Effect.fnUntraced(function* (input: AbsolutePath | undefined, projectID: ProjectSchema.ID) { + const sourceDirectory = input ?? (yield* ops.primary(projectID))?.directory + if (!sourceDirectory) return yield* new SourceDirectoryNotFoundError({ projectID }) + const resolved = yield* canonical(fs, sourceDirectory) + if ((yield* ops.find(projectID, resolved)) === undefined) + return yield* new SourceDirectoryNotFoundError({ projectID, directory: resolved }) + return resolved + }) + + const getStrategy = Effect.fnUntraced(function* (id: StrategyID) { + const found = registry.get(id) + if (!found) return yield* new StrategyUnavailableError({ strategy: id }) + return found + }) + + const create = Effect.fn("Worktree.create")(function* (input: CreateInput) { + const selected = yield* getStrategy(input.strategy) + const sourceDirectory = yield* source(input.from, input.projectID) + yield* fs.makeDirectory(input.directory, { recursive: true }).pipe(Effect.orDie) + const name = input.name ?? Slug.create() + let suffix = 1 + let worktreeDirectory = AbsolutePath.make(path.join(input.directory, name)) + while (yield* fs.existsSafe(worktreeDirectory)) { + suffix++ + if (suffix > 10) return yield* new DestinationExistsError({ directory: worktreeDirectory }) + worktreeDirectory = AbsolutePath.make(path.join(input.directory, `${name}-${suffix}`)) + } + + const result = yield* selected.create({ + directory: worktreeDirectory, + sourceDirectory, + }) + yield* changed( + input.projectID, + yield* ops.create({ + projectID: input.projectID, + directory: result.directory, + strategy: input.strategy, + }), + ) + return result + }) + + const remove = Effect.fn("Worktree.remove")(function* (input: RemoveInput) { + const worktreeDirectory = yield* canonical(fs, input.directory) + const stored = yield* ops.find(input.projectID, worktreeDirectory) + if (!stored?.strategy) return yield* new InvalidDirectoryError({ directory: worktreeDirectory }) + yield* (yield* getStrategy(StrategyID.make(stored.strategy))).remove({ + directory: worktreeDirectory, + force: input.force, + }) + yield* changed(input.projectID, yield* ops.remove(input.projectID, worktreeDirectory)) + }) + + const refresh = Effect.fn("Worktree.refresh")(function* (input: RefreshInput) { + const stored = yield* ops.list(input.projectID) + const checked = yield* Effect.forEach( + stored, + (item) => fs.isDir(item.directory).pipe(Effect.map((exists) => ({ ...item, exists }))), + { concurrency: "unbounded" }, + ) + const sourceDirectories = checked + .filter((item) => item.strategy === undefined && item.exists) + .map((item) => item.directory) + const discovered = yield* Effect.forEach( + sourceDirectories, + (sourceDirectory) => + Effect.forEach(strategies(), (strategy) => + strategy.list(sourceDirectory).pipe( + Effect.catchTag("Worktree.DirectoryUnavailableError", () => Effect.succeed([])), + Effect.map((items) => + items.map((item) => ({ + directory: item.directory, + strategy: item.type === "worktree" ? strategy.id : undefined, + })), + ), + ), + ), + { concurrency: "unbounded" }, + ).pipe( + Effect.map((sets) => new Map(sets.flat(2).map((item) => [item.directory, item] as const)).values().toArray()), + ) + const removed = checked.filter((item) => !item.exists).map((item) => item.directory) + const result = yield* db + .transaction((tx) => + Effect.all({ + updated: Effect.forEach(discovered, (item) => + ops.create( + { + projectID: input.projectID, + directory: item.directory, + strategy: item.strategy, + }, + tx, + ), + ), + removed: Effect.forEach(removed, (directory) => ops.remove(input.projectID, directory, tx)), + }), + ) + .pipe(Effect.orDie) + const changes = { + updated: discovered.filter((_, index) => result.updated[index]).map((item) => item.directory), + removed: removed.filter((_, index) => result.removed[index]), + } + yield* changed(input.projectID, changes.updated.length > 0 || changes.removed.length > 0) + return changes + }) + + return Service.of({ + register, + list: ops.list, + create, + remove, + refresh, + }) + }), +) + +export const node = makeGlobalNode({ + service: Service, + layer: layer, + deps: [FSUtil.node, Git.node, Bus.node, Database.node], +}) + +export const refreshNode = makeLocationNode({ + name: "worktree-refresh", + layer: Layer.effectDiscard(refreshAfterBoot), + deps: [node, Location.node], +}) diff --git a/packages/core/src/worktree/directory.ts b/packages/core/src/worktree/directory.ts new file mode 100644 index 00000000000..4d240a1c65a --- /dev/null +++ b/packages/core/src/worktree/directory.ts @@ -0,0 +1,16 @@ +export * as WorktreeDirectory from "./directory.js" + +import { Effect, Schema } from "effect" +import { FSUtil } from "@opencode-ai/util/fs-util" +import { AbsolutePath } from "../schema.js" + +export class DirectoryUnavailableError extends Schema.TaggedErrorClass()( + "Worktree.DirectoryUnavailableError", + { directory: AbsolutePath }, +) {} + +export const canonical = Effect.fnUntraced(function* (fs: FSUtil.Interface, input: AbsolutePath) { + const resolved = AbsolutePath.make(yield* fs.resolve(input)) + if (!(yield* fs.isDir(resolved))) return yield* new DirectoryUnavailableError({ directory: input }) + return resolved +}) diff --git a/packages/core/src/worktree/git.ts b/packages/core/src/worktree/git.ts new file mode 100644 index 00000000000..7b6a7557f7a --- /dev/null +++ b/packages/core/src/worktree/git.ts @@ -0,0 +1,39 @@ +export * as WorktreeGit from "./git.js" + +import { Effect } from "effect" +import { Worktree } from "@opencode-ai/schema/worktree" +import { FSUtil } from "@opencode-ai/util/fs-util" +import { Git } from "../git.js" +import { canonical, DirectoryUnavailableError } from "./directory.js" +import type { ListEntry, Strategy } from "../worktree.js" + +export const make = Effect.gen(function* () { + const fs = yield* FSUtil.Service + const git = yield* Git.Service + + return { + id: Worktree.StrategyID.make("git"), + create: Effect.fn("Worktree.Git.create")(function* (input) { + const repository = yield* git.repo.discover(input.sourceDirectory) + if (!repository) return yield* new DirectoryUnavailableError({ directory: input.sourceDirectory }) + yield* git.worktree.create({ repository, directory: input.directory }) + return { directory: yield* canonical(fs, input.directory) } + }), + remove: Effect.fn("Worktree.Git.remove")(function* (input) { + const repository = yield* git.repo.discover(input.directory) + if (!repository) return yield* new DirectoryUnavailableError({ directory: input.directory }) + yield* git.worktree.remove({ repository, directory: input.directory, force: input.force }) + }), + list: Effect.fn("Worktree.Git.list")(function* (directory) { + const repository = yield* git.repo.discover(directory) + if (!repository) return yield* new DirectoryUnavailableError({ directory }) + const entries = yield* git.worktree.list(repository) + return yield* Effect.forEach(entries, (entry) => + canonical(fs, entry.directory).pipe( + Effect.map((directory) => ({ directory, type: entry.kind === "main" ? "root" : "worktree" }) as const), + Effect.catchTag("Worktree.DirectoryUnavailableError", () => Effect.succeed(undefined)), + ), + ).pipe(Effect.map((items) => items.filter((item): item is ListEntry => item !== undefined))) + }), + } satisfies Strategy +}) diff --git a/packages/core/src/worktree/sql.ts b/packages/core/src/worktree/sql.ts new file mode 100644 index 00000000000..86e1904fc2d --- /dev/null +++ b/packages/core/src/worktree/sql.ts @@ -0,0 +1,20 @@ +import { integer, primaryKey, sqliteTable, text } from "drizzle-orm/sqlite-core" +import { absoluteColumn } from "../database/path.js" +import { ProjectSchema } from "../project/schema.js" +import { ProjectTable } from "../project/sql.js" + +export const WorktreeTable = sqliteTable( + "worktree", + { + project_id: text() + .$type() + .notNull() + .references(() => ProjectTable.id, { onDelete: "cascade" }), + directory: absoluteColumn().notNull(), + strategy: text(), + time_created: integer() + .notNull() + .$default(() => Date.now()), + }, + (table) => [primaryKey({ columns: [table.project_id, table.directory] })], +) diff --git a/packages/core/test/database-migration.test.ts b/packages/core/test/database-migration.test.ts index 36dbc1eb52b..f36124bb2be 100644 --- a/packages/core/test/database-migration.test.ts +++ b/packages/core/test/database-migration.test.ts @@ -12,6 +12,7 @@ import { Database } from "@opencode-ai/core/database/database" import { tmpdir } from "./fixture/tmpdir" import type { SqlClient } from "effect/unstable/sql/SqlClient" import legacyCredentialsMigration from "@opencode-ai/core/database/migration/20260805200742_import_legacy_credentials" +import worktreeMigration from "@opencode-ai/core/database/migration/20260812213948_worktree" import { Global } from "@opencode-ai/util/global" const run = ( @@ -127,6 +128,31 @@ describe("DatabaseMigration", () => { ) }) + test("copies project directories into worktrees without removing the old table", async () => { + await run( + Effect.gen(function* () { + const db = yield* makeDb + yield* db.run(sql`CREATE TABLE project (id text PRIMARY KEY)`) + yield* db.run( + sql`CREATE TABLE project_directory (project_id text NOT NULL, directory text NOT NULL, type text, strategy text, time_created integer NOT NULL, PRIMARY KEY (project_id, directory))`, + ) + yield* db.run( + sql`INSERT INTO project_directory (project_id, directory, type, strategy, time_created) VALUES ('project', '/root', 'main', NULL, 1), ('project', '/legacy', 'git_worktree', NULL, 2), ('project', '/strategy', NULL, 'git_worktree', 3), ('project', '/custom', NULL, 'acme/snapshot', 4)`, + ) + + yield* DatabaseMigration.applyOnly(db, [worktreeMigration]) + + expect(yield* db.all(sql`SELECT directory, strategy FROM worktree ORDER BY directory`)).toEqual([ + { directory: "/custom", strategy: "acme/snapshot" }, + { directory: "/legacy", strategy: "git" }, + { directory: "/root", strategy: null }, + { directory: "/strategy", strategy: "git" }, + ]) + expect(yield* db.get(sql`SELECT count(*) AS count FROM project_directory`)).toEqual({ count: 4 }) + }), + ) + }) + test("imports legacy JSON credentials without changing the source file or existing credentials", async () => { await using tmp = await tmpdir() const source = path.join(tmp.path, "auth.json") diff --git a/packages/core/test/effect/layer-node/node-build.test.ts b/packages/core/test/effect/layer-node/node-build.test.ts index 4ce180ba4ae..5edbece2c6e 100644 --- a/packages/core/test/effect/layer-node/node-build.test.ts +++ b/packages/core/test/effect/layer-node/node-build.test.ts @@ -78,7 +78,6 @@ describe("node build", () => { acquisitions++ return Project.Service.of({ list: () => Effect.succeed([]), - directories: () => Effect.succeed([]), resolve: (directory) => Effect.succeed({ id: Project.ID.global, directory, canonical: directory }), }) }), diff --git a/packages/core/test/lib/project.ts b/packages/core/test/lib/project.ts index 0905cd8c094..66fceaf1993 100644 --- a/packages/core/test/lib/project.ts +++ b/packages/core/test/lib/project.ts @@ -6,6 +6,5 @@ export const globalProjectLayer = Layer.succeed( Project.Service.of({ list: () => Effect.succeed([]), resolve: (directory) => Effect.succeed({ id: Project.ID.global, directory, canonical: directory }), - directories: () => Effect.succeed([]), }), ) diff --git a/packages/core/test/location.test.ts b/packages/core/test/location.test.ts index eaec7897c2d..fdda8566fc7 100644 --- a/packages/core/test/location.test.ts +++ b/packages/core/test/location.test.ts @@ -13,7 +13,6 @@ const projectLayer = Layer.succeed( Project.Service, Project.Service.of({ list: () => Effect.succeed([]), - directories: () => Effect.succeed([]), resolve: () => Effect.succeed({ id: Project.ID.make("project"), diff --git a/packages/core/test/project-directories.test.ts b/packages/core/test/project-directories.test.ts deleted file mode 100644 index 9071dcb4ef1..00000000000 --- a/packages/core/test/project-directories.test.ts +++ /dev/null @@ -1,69 +0,0 @@ -import { describe, expect } from "bun:test" -import { Effect, Schema } from "effect" -import { Database } from "@opencode-ai/core/database/database" -import { LayerNode } from "@opencode-ai/util/effect/layer-node" -import { AppNodeBuilder } from "@opencode-ai/core/effect/app-node-builder" -import { Project } from "@opencode-ai/core/project" -import { ProjectDirectories } from "@opencode-ai/core/project/directories" -import { ProjectTable } from "@opencode-ai/core/project/sql" -import { AbsolutePath } from "@opencode-ai/core/schema" -import { testEffect } from "./lib/effect" - -const it = testEffect(AppNodeBuilder.build(LayerNode.group([Database.node, ProjectDirectories.node]))) - -const projectID = Project.ID.make("project-directories") -const directory = AbsolutePath.make("/tmp/project-directories") - -function setup() { - return Database.Service.use(({ db }) => - db - .insert(ProjectTable) - .values({ id: projectID, worktree: directory, sandboxes: [], time_created: 1, time_updated: 1 }) - .onConflictDoNothing() - .run() - .pipe(Effect.orDie), - ) -} - -describe("ProjectDirectories", () => { - it.effect("decodes directory schemas", () => - Effect.sync(() => { - expect(Schema.decodeUnknownSync(ProjectDirectories.ListInput)({ projectID })).toEqual({ projectID }) - expect(Schema.decodeUnknownSync(ProjectDirectories.ListOutput)([{ directory }])).toEqual([{ directory }]) - }), - ) - - it.effect("creates once and ignores conflicts", () => - Effect.gen(function* () { - yield* setup() - const service = yield* ProjectDirectories.Service - - expect(yield* service.create({ projectID, directory })).toBe(true) - expect(yield* service.create({ projectID, directory, strategy: "git_worktree" })).toBe(false) - expect(yield* service.list(projectID)).toEqual([{ directory, strategy: undefined }]) - }), - ) - - it.effect("returns an empty list for missing projects", () => - Effect.gen(function* () { - const service = yield* ProjectDirectories.Service - - expect(yield* service.list(Project.ID.make("missing-project"))).toEqual([]) - }), - ) - - it.effect("replaces the strategy when requested", () => - Effect.gen(function* () { - yield* setup() - const service = yield* ProjectDirectories.Service - yield* service.create({ projectID, directory, strategy: "old/strategy" }) - - expect(yield* service.create({ projectID, directory, strategy: "new/strategy", behavior: "replace" })).toBe(true) - expect(yield* service.create({ projectID, directory, strategy: "new/strategy", behavior: "replace" })).toBe(false) - expect(yield* service.create({ projectID, directory, behavior: "replace" })).toBe(true) - expect(yield* service.create({ projectID, directory, behavior: "replace" })).toBe(false) - expect(yield* service.create({ projectID, directory, strategy: "new/strategy", behavior: "replace" })).toBe(true) - expect(yield* service.list(projectID)).toEqual([{ directory, strategy: "new/strategy" }]) - }), - ) -}) diff --git a/packages/core/test/project.test.ts b/packages/core/test/project.test.ts index da4ddf4fb73..d9eedaf26f6 100644 --- a/packages/core/test/project.test.ts +++ b/packages/core/test/project.test.ts @@ -364,9 +364,6 @@ describe("Project.resolve", () => { sandboxes: [abs("/preserved-sandbox")], time: { created: 1, initialized: 2 }, }) - expect( - (yield* project.directories({ projectID: id })).toSorted((a, b) => a.directory.localeCompare(b.directory)), - ).toEqual([{ directory: yield* real(tmp.path) }, { directory: yield* real(worktree), strategy: "git_worktree" }]) }), ) }) diff --git a/packages/core/test/session-create.test.ts b/packages/core/test/session-create.test.ts index 8342c4f6cf1..8d6bb0d81b7 100644 --- a/packages/core/test/session-create.test.ts +++ b/packages/core/test/session-create.test.ts @@ -137,7 +137,7 @@ describe("Session.create", () => { .where(eq(EventTable.aggregate_id, project.id)) .all() .pipe(Effect.orDie) - expect(announced.map((event) => event.type)).toEqual(["project.directory.resolved.1"]) + expect(announced.map((event) => event.type)).toEqual(["worktree.resolved.1"]) }), ), ) diff --git a/packages/core/test/session-move.test.ts b/packages/core/test/session-move.test.ts index 0240f85ad52..ef1d8d938e8 100644 --- a/packages/core/test/session-move.test.ts +++ b/packages/core/test/session-move.test.ts @@ -1,7 +1,7 @@ import { describe, expect } from "bun:test" import path from "path" import { Effect } from "effect" -import { Event } from "@opencode-ai/schema/project-directories" +import { Worktree } from "@opencode-ai/schema/worktree" import { Bus } from "@opencode-ai/core/bus" import { Database } from "@opencode-ai/core/database/database" import { AppNodeBuilder } from "@opencode-ai/core/effect/app-node-builder" @@ -92,7 +92,7 @@ describe("Session.move", () => { projectID: Project.ID.global, }) // The former directory becomes a project after the session left it. - yield* bus.publish(Event.Resolved, { + yield* bus.publish(Worktree.Event.Resolved, { projectID: Project.ID.make("adopting"), directory: previous, previous: Project.ID.global, diff --git a/packages/core/test/shared-schema.test.ts b/packages/core/test/shared-schema.test.ts index 7b2bda8d5fb..5984fde5524 100644 --- a/packages/core/test/shared-schema.test.ts +++ b/packages/core/test/shared-schema.test.ts @@ -6,7 +6,7 @@ import { Location } from "@opencode-ai/schema/location" import { Model } from "@opencode-ai/schema/model" import { Provider } from "@opencode-ai/schema/provider" import { Project } from "@opencode-ai/schema/project" -import { ProjectDirectories } from "@opencode-ai/schema/project-directories" +import { Worktree } from "@opencode-ai/schema/worktree" import { PermissionV1 } from "@opencode-ai/schema/permission-v1" import { Prompt } from "@opencode-ai/schema/prompt" import { SessionInbox } from "@opencode-ai/schema/session-inbox" @@ -39,7 +39,7 @@ test("Core reuses the canonical shared schemas", async () => { coreModel, corePermission, corePermissionV1, - coreProjectCopy, + coreWorktree, corePty, coreProject, coreProvider, @@ -60,7 +60,7 @@ test("Core reuses the canonical shared schemas", async () => { import("@opencode-ai/core/model"), import("@opencode-ai/core/permission"), import("@opencode-ai/core/v1/permission"), - import("@opencode-ai/core/project/copy"), + import("@opencode-ai/core/worktree"), import("@opencode-ai/core/pty"), import("@opencode-ai/core/project/schema"), import("@opencode-ai/core/provider"), @@ -112,14 +112,16 @@ test("Core reuses the canonical shared schemas", async () => { [corePermission.Rule, Permission.Rule], [corePermission.Ruleset, Permission.Ruleset], [corePermissionV1.Event, PermissionV1.Event], - [coreProjectCopy.Event, ProjectDirectories.Event], + [coreWorktree.CreateInput, Worktree.CreateInput], + [coreWorktree.RemoveInput, Worktree.RemoveInput], + [coreWorktree.Info, Worktree.Info], + [coreWorktree.ListInput, Worktree.ListInput], + [coreWorktree.List, Worktree.List], + [coreWorktree.Event, Worktree.Event], [corePty.Info, Pty.Info], [corePty.Event, Pty.Event], [coreProject.ID, Project.ID], [coreProject.Current, Project.Current], - [coreProject.Directory, Project.Directory], - [coreProject.DirectoriesInput, Project.DirectoriesInput], - [coreProject.Directories, Project.Directories], [coreReference.LocalSource, Reference.LocalSource], [coreReference.GitSource, Reference.GitSource], [coreReference.Source, Reference.Source], diff --git a/packages/core/test/project-copy.test.ts b/packages/core/test/worktree.test.ts similarity index 52% rename from packages/core/test/project-copy.test.ts rename to packages/core/test/worktree.test.ts index 56e764591f9..b98aa3afa97 100644 --- a/packages/core/test/project-copy.test.ts +++ b/packages/core/test/worktree.test.ts @@ -2,7 +2,7 @@ import { describe, expect } from "bun:test" import { $ } from "bun" import fs from "fs/promises" import path from "path" -import { eq } from "drizzle-orm" +import { and, eq, isNull } from "drizzle-orm" import { Effect, Fiber, Stream } from "effect" import { AppNodeBuilder } from "@opencode-ai/core/effect/app-node-builder" import { LayerNode } from "@opencode-ai/util/effect/layer-node" @@ -11,21 +11,23 @@ import { Git } from "@opencode-ai/core/git" import { Database } from "@opencode-ai/core/database/database" import { Bus } from "@opencode-ai/core/bus" import { Project } from "@opencode-ai/core/project" -import { ProjectDirectoryTable, ProjectTable } from "@opencode-ai/core/project/sql" -import { ProjectCopy } from "@opencode-ai/core/project/copy" -import { ProjectDirectories } from "@opencode-ai/core/project/directories" +import { ProjectTable } from "@opencode-ai/core/project/sql" +import { Worktree } from "@opencode-ai/core/worktree" +import { WorktreeDirectory } from "@opencode-ai/core/worktree/directory" +import { WorktreeTable } from "@opencode-ai/core/worktree/sql" import { tmpdir } from "./fixture/tmpdir" import { testEffect } from "./lib/effect" -const it = testEffect( - AppNodeBuilder.build(LayerNode.group([ProjectCopy.node, Database.node, Bus.node, ProjectDirectories.node])), +const it = testEffect(AppNodeBuilder.build(LayerNode.group([Worktree.node, Database.node, Bus.node]))) +const projectIt = testEffect( + AppNodeBuilder.build(LayerNode.group([Project.node, Worktree.node, Database.node, Bus.node])), ) function abs(input: string) { return AbsolutePath.make(input) } -const gitWorktree = ProjectCopy.StrategyID.make("git_worktree") +const gitWorktree = Worktree.StrategyID.make("git") async function initRepo(directory: string) { await $`git init`.cwd(directory).quiet() @@ -44,7 +46,7 @@ function setup() { ) yield* Effect.promise(() => initRepo(root.path)) const sourceDirectory = abs(yield* Effect.promise(() => fs.realpath(root.path))) - const projectID = Project.ID.make("copy-project") + const projectID = Project.ID.make("worktree-project") const { db } = yield* Database.Service yield* db .insert(ProjectTable) @@ -52,7 +54,7 @@ function setup() { .run() .pipe(Effect.orDie) yield* db - .insert(ProjectDirectoryTable) + .insert(WorktreeTable) .values({ project_id: projectID, directory: sourceDirectory }) .run() .pipe(Effect.orDie) @@ -63,9 +65,9 @@ function setup() { function stored(projectID: Project.ID) { return Database.Service.use(({ db }) => db - .select({ directory: ProjectDirectoryTable.directory, strategy: ProjectDirectoryTable.strategy }) - .from(ProjectDirectoryTable) - .where(eq(ProjectDirectoryTable.project_id, projectID)) + .select({ directory: WorktreeTable.directory, strategy: WorktreeTable.strategy }) + .from(WorktreeTable) + .where(eq(WorktreeTable.project_id, projectID)) .all() .pipe( Effect.orDie, @@ -74,92 +76,201 @@ function stored(projectID: Project.ID) { ) } -describe("ProjectCopy", () => { +describe("Worktree", () => { + projectIt.live("tracks canonical and linked worktrees when a project resolves", () => + Effect.gen(function* () { + const root = yield* Effect.acquireRelease( + Effect.promise(() => tmpdir()), + (dir) => Effect.promise(() => dir[Symbol.asyncDispose]()), + ) + yield* Effect.promise(() => initRepo(root.path)) + const linked = `${root.path}-linked` + yield* Effect.addFinalizer(() => + Effect.promise(() => fs.rm(linked, { recursive: true, force: true })).pipe(Effect.ignore), + ) + yield* Effect.promise(() => $`git worktree add ${linked} -b linked-${Date.now()}`.cwd(root.path).quiet()) + const project = yield* Project.Service + + const resolved = yield* project.resolve(abs(linked)) + + expect(yield* stored(resolved.id)).toEqual( + [ + { directory: abs(yield* Effect.promise(() => fs.realpath(root.path))), strategy: null }, + { directory: abs(yield* Effect.promise(() => fs.realpath(linked))), strategy: "git" }, + ].toSorted((a, b) => a.directory.localeCompare(b.directory)), + ) + }), + ) + it.effect("accepts arbitrary non-empty strategy ids", () => Effect.sync(() => { - expect(String(ProjectCopy.StrategyID.make("acme/snapshot"))).toBe("acme/snapshot") - expect(() => ProjectCopy.StrategyID.make(" acme/snapshot ")).toThrow() - expect(() => ProjectCopy.StrategyID.make(" ")).toThrow() + expect(String(Worktree.StrategyID.make("acme/snapshot"))).toBe("acme/snapshot") + expect(() => Worktree.StrategyID.make(" acme/snapshot ")).toThrow() + expect(() => Worktree.StrategyID.make(" ")).toThrow() }), ) it.effect("reports unavailable strategy ids", () => Effect.gen(function* () { const input = yield* setup() - const copy = yield* ProjectCopy.Service - const unavailable = ProjectCopy.StrategyID.make("acme/missing") - const error = yield* copy + const worktree = yield* Worktree.Service + const unavailable = Worktree.StrategyID.make("acme/missing") + const error = yield* worktree .create({ projectID: input.projectID, strategy: unavailable, - sourceDirectory: input.sourceDirectory, + from: input.sourceDirectory, directory: abs(`${input.root.path}-missing-strategy`), - name: "copy", + name: "worktree", }) .pipe(Effect.flip) - expect(error).toBeInstanceOf(ProjectCopy.StrategyUnavailableError) - if (error instanceof ProjectCopy.StrategyUnavailableError) expect(error.strategy).toBe(unavailable) + expect(error).toBeInstanceOf(Worktree.StrategyUnavailableError) + if (error instanceof Worktree.StrategyUnavailableError) expect(error.strategy).toBe(unavailable) + }), + ) + + it.live("requires a tracked project worktree", () => + Effect.gen(function* () { + const input = yield* setup() + yield* input.db + .delete(WorktreeTable) + .where(eq(WorktreeTable.project_id, input.projectID)) + .run() + .pipe(Effect.orDie) + const worktree = yield* Worktree.Service + + const error = yield* worktree + .create({ + projectID: input.projectID, + strategy: gitWorktree, + from: input.sourceDirectory, + directory: abs(`${input.root.path}-missing-source`), + name: "worktree", + }) + .pipe(Effect.flip) + + expect(error).toBeInstanceOf(Worktree.SourceDirectoryNotFoundError) + if (error instanceof Worktree.SourceDirectoryNotFoundError) expect(error.directory).toBe(input.sourceDirectory) }), ) it.live("creates and removes a git worktree directory", () => Effect.gen(function* () { const input = yield* setup() - const copy = yield* ProjectCopy.Service + const worktree = yield* Worktree.Service const bus = yield* Bus.Service const temp = yield* Effect.promise(() => fs.realpath(path.dirname(input.root.path))) - const parent = abs(path.join(temp, path.basename(input.root.path) + "-copy-created")) - const target = abs(path.join(parent, "copy")) + const parent = abs(path.join(temp, path.basename(input.root.path) + "-worktree-created")) + const target = abs(path.join(parent, "worktree")) yield* Effect.addFinalizer(() => Effect.promise(() => fs.rm(parent, { recursive: true, force: true })).pipe(Effect.ignore), ) const fiber = yield* bus - .subscribe(ProjectCopy.Event.Updated) + .subscribe(Worktree.Event.Updated) .pipe(Stream.take(1), Stream.runCollect, Effect.forkScoped) yield* Effect.yieldNow - const created = yield* copy.create({ + const created = yield* worktree.create({ projectID: input.projectID, strategy: gitWorktree, - sourceDirectory: input.sourceDirectory, directory: parent, - name: "copy", + name: "worktree", }) expect(created.directory).toBe(target) expect(yield* stored(input.projectID)).toEqual( [ { directory: input.sourceDirectory, strategy: null }, - { directory: created.directory, strategy: "git_worktree" }, + { directory: created.directory, strategy: "git" }, ].toSorted((a, b) => a.directory.localeCompare(b.directory)), ) expect(Array.from(yield* Fiber.join(fiber))[0]?.data).toEqual({ projectID: input.projectID }) - yield* copy.remove({ projectID: input.projectID, directory: created.directory, force: false }) + yield* worktree.remove({ projectID: input.projectID, directory: created.directory, force: false }) expect(yield* stored(input.projectID)).toEqual([{ directory: input.sourceDirectory, strategy: null }]) expect(yield* Effect.promise(() => Bun.file(target).exists())).toBe(false) }), ) + it.live("rejects a missing source directory", () => + Effect.gen(function* () { + const input = yield* setup() + const worktree = yield* Worktree.Service + const temp = yield* Effect.promise(() => fs.realpath(path.dirname(input.root.path))) + + const error = yield* worktree + .create({ + projectID: input.projectID, + strategy: gitWorktree, + from: abs(path.join(temp, "does-not-exist")), + directory: abs(`${input.root.path}-missing-directory`), + name: "worktree", + }) + .pipe(Effect.flip) + + expect(error).toBeInstanceOf(WorktreeDirectory.DirectoryUnavailableError) + }), + ) + + it.live("creates from another managed worktree", () => + Effect.gen(function* () { + const input = yield* setup() + const worktree = yield* Worktree.Service + const temp = yield* Effect.promise(() => fs.realpath(path.dirname(input.root.path))) + const sourceParent = abs(path.join(temp, path.basename(input.root.path) + "-managed-source")) + const targetParent = abs(path.join(temp, path.basename(input.root.path) + "-managed-target")) + yield* Effect.addFinalizer(() => + Effect.all([ + Effect.promise(() => fs.rm(sourceParent, { recursive: true, force: true })).pipe(Effect.ignore), + Effect.promise(() => fs.rm(targetParent, { recursive: true, force: true })).pipe(Effect.ignore), + ]).pipe(Effect.asVoid), + ) + const source = yield* worktree.create({ + projectID: input.projectID, + strategy: gitWorktree, + from: input.sourceDirectory, + directory: sourceParent, + name: "source", + }) + yield* input.db + .delete(WorktreeTable) + .where(and(eq(WorktreeTable.project_id, input.projectID), isNull(WorktreeTable.strategy))) + .run() + .pipe(Effect.orDie) + + const created = yield* worktree.create({ + projectID: input.projectID, + strategy: gitWorktree, + from: source.directory, + directory: targetParent, + name: "target", + }) + + expect(created.directory).toBe(abs(path.join(targetParent, "target"))) + yield* worktree.remove({ projectID: input.projectID, directory: created.directory, force: false }) + yield* worktree.remove({ projectID: input.projectID, directory: source.directory, force: false }) + }), + ) + it.live("requires force to remove a dirty git worktree", () => Effect.gen(function* () { const input = yield* setup() - const copy = yield* ProjectCopy.Service + const worktree = yield* Worktree.Service const temp = yield* Effect.promise(() => fs.realpath(path.dirname(input.root.path))) - const parent = abs(path.join(temp, path.basename(input.root.path) + "-copy-dirty")) + const parent = abs(path.join(temp, path.basename(input.root.path) + "-worktree-dirty")) yield* Effect.addFinalizer(() => Effect.promise(() => fs.rm(parent, { recursive: true, force: true })).pipe(Effect.ignore), ) - const created = yield* copy.create({ + const created = yield* worktree.create({ projectID: input.projectID, strategy: gitWorktree, - sourceDirectory: input.sourceDirectory, + from: input.sourceDirectory, directory: parent, - name: "copy", + name: "worktree", }) yield* Effect.promise(() => Bun.write(path.join(created.directory, "dirty.txt"), "dirty")) - const error = yield* copy + const error = yield* worktree .remove({ projectID: input.projectID, directory: created.directory, force: false }) .pipe(Effect.flip) @@ -168,115 +279,115 @@ describe("ProjectCopy", () => { expect(error.operation).toBe("remove") expect(error.forceRequired).toBe(true) } - expect(yield* stored(input.projectID)).toContainEqual({ directory: created.directory, strategy: "git_worktree" }) + expect(yield* stored(input.projectID)).toContainEqual({ directory: created.directory, strategy: "git" }) expect(yield* Effect.promise(() => Bun.file(path.join(created.directory, "dirty.txt")).exists())).toBe(true) - yield* copy.remove({ projectID: input.projectID, directory: created.directory, force: true }) + yield* worktree.remove({ projectID: input.projectID, directory: created.directory, force: true }) expect(yield* Effect.promise(() => Bun.file(created.directory).exists())).toBe(false) }), ) - it.live("preserves copies whose stored strategy is unavailable", () => + it.live("preserves worktrees whose stored strategy is unavailable", () => Effect.gen(function* () { const input = yield* setup() - const copy = yield* ProjectCopy.Service - const unavailable = abs(`${input.root.path}-copy-unavailable`) + const worktree = yield* Worktree.Service + const unavailable = abs(`${input.root.path}-worktree-unavailable`) yield* Effect.promise(() => fs.mkdir(unavailable)) yield* Effect.addFinalizer(() => Effect.promise(() => fs.rm(unavailable, { recursive: true, force: true }))) yield* input.db - .insert(ProjectDirectoryTable) + .insert(WorktreeTable) .values({ project_id: input.projectID, directory: unavailable, strategy: "acme/missing" }) .run() .pipe(Effect.orDie) - const error = yield* copy + const error = yield* worktree .remove({ projectID: input.projectID, directory: unavailable, force: false }) .pipe(Effect.flip) - expect(error).toBeInstanceOf(ProjectCopy.StrategyUnavailableError) + expect(error).toBeInstanceOf(Worktree.StrategyUnavailableError) expect(yield* stored(input.projectID)).toContainEqual({ directory: unavailable, strategy: "acme/missing" }) }), ) - it.live("adds a numeric suffix when a copy directory already exists", () => + it.live("adds a numeric suffix when a worktree directory already exists", () => Effect.gen(function* () { const input = yield* setup() - const copy = yield* ProjectCopy.Service + const worktree = yield* Worktree.Service const temp = yield* Effect.promise(() => fs.realpath(path.dirname(input.root.path))) - const parent = abs(path.join(temp, path.basename(input.root.path) + "-copy-suffix")) - const target = abs(path.join(parent, "copy-3")) + const parent = abs(path.join(temp, path.basename(input.root.path) + "-worktree-suffix")) + const target = abs(path.join(parent, "worktree-3")) yield* Effect.addFinalizer(() => Effect.promise(() => fs.rm(parent, { recursive: true, force: true })).pipe(Effect.ignore), ) - yield* Effect.promise(() => fs.mkdir(path.join(parent, "copy"), { recursive: true })) - yield* Effect.promise(() => fs.mkdir(path.join(parent, "copy-2"))) + yield* Effect.promise(() => fs.mkdir(path.join(parent, "worktree"), { recursive: true })) + yield* Effect.promise(() => fs.mkdir(path.join(parent, "worktree-2"))) - const created = yield* copy.create({ + const created = yield* worktree.create({ projectID: input.projectID, strategy: gitWorktree, - sourceDirectory: input.sourceDirectory, + from: input.sourceDirectory, directory: parent, - name: "copy", + name: "worktree", }) expect(created.directory).toBe(target) - expect(yield* Effect.promise(() => fs.stat(path.join(parent, "copy")).then((item) => item.isDirectory()))).toBe( - true, - ) - expect(yield* Effect.promise(() => fs.stat(path.join(parent, "copy-2")).then((item) => item.isDirectory()))).toBe( - true, - ) + expect( + yield* Effect.promise(() => fs.stat(path.join(parent, "worktree")).then((item) => item.isDirectory())), + ).toBe(true) + expect( + yield* Effect.promise(() => fs.stat(path.join(parent, "worktree-2")).then((item) => item.isDirectory())), + ).toBe(true) - yield* copy.remove({ projectID: input.projectID, directory: created.directory, force: false }) + yield* worktree.remove({ projectID: input.projectID, directory: created.directory, force: false }) }), ) - it.live("fails after ten copy directory conflicts", () => + it.live("fails after ten worktree directory conflicts", () => Effect.gen(function* () { const input = yield* setup() - const copy = yield* ProjectCopy.Service + const worktree = yield* Worktree.Service const temp = yield* Effect.promise(() => fs.realpath(path.dirname(input.root.path))) - const parent = abs(path.join(temp, path.basename(input.root.path) + "-copy-conflicts")) + const parent = abs(path.join(temp, path.basename(input.root.path) + "-worktree-conflicts")) yield* Effect.addFinalizer(() => Effect.promise(() => fs.rm(parent, { recursive: true, force: true })).pipe(Effect.ignore), ) yield* Effect.promise(() => Promise.all( Array.from({ length: 10 }, (_, index) => - fs.mkdir(path.join(parent, index === 0 ? "copy" : `copy-${index + 1}`), { recursive: true }), + fs.mkdir(path.join(parent, index === 0 ? "worktree" : `worktree-${index + 1}`), { recursive: true }), ), ), ) - const error = yield* copy + const error = yield* worktree .create({ projectID: input.projectID, strategy: gitWorktree, - sourceDirectory: input.sourceDirectory, + from: input.sourceDirectory, directory: parent, - name: "copy", + name: "worktree", }) .pipe(Effect.flip) - expect(error).toBeInstanceOf(ProjectCopy.DestinationExistsError) - if (error instanceof ProjectCopy.DestinationExistsError) - expect(error.directory).toBe(abs(path.join(parent, "copy-10"))) + expect(error).toBeInstanceOf(Worktree.DestinationExistsError) + if (error instanceof Worktree.DestinationExistsError) + expect(error.directory).toBe(abs(path.join(parent, "worktree-10"))) }), ) it.live("does not publish an event when refresh finds no directory changes", () => Effect.gen(function* () { const input = yield* setup() - const copy = yield* ProjectCopy.Service + const worktree = yield* Worktree.Service const bus = yield* Bus.Service - const event = yield* bus.subscribe(ProjectCopy.Event.Updated).pipe( + const event = yield* bus.subscribe(Worktree.Event.Updated).pipe( Stream.take(1), Stream.runCollect, Effect.forkScoped, Effect.flatMap((fiber) => Effect.gen(function* () { yield* Effect.yieldNow - yield* copy.refresh({ projectID: input.projectID }) + yield* worktree.refresh({ projectID: input.projectID }) return yield* Fiber.join(fiber).pipe(Effect.timeoutOption("50 millis")) }), ), @@ -289,36 +400,36 @@ describe("ProjectCopy", () => { it.live("refresh discovers and prunes an externally managed git worktree", () => Effect.gen(function* () { const input = yield* setup() - const copy = yield* ProjectCopy.Service + const worktree = yield* Worktree.Service const bus = yield* Bus.Service - const target = abs(`${input.root.path}-copy-external`) + const target = abs(`${input.root.path}-worktree-external`) yield* Effect.addFinalizer(() => Effect.promise(() => fs.rm(target, { recursive: true, force: true })).pipe(Effect.ignore), ) yield* Effect.promise(() => $`git worktree add --detach ${target} HEAD`.cwd(input.root.path).quiet()) yield* input.db - .insert(ProjectDirectoryTable) + .insert(WorktreeTable) .values({ project_id: input.projectID, directory: target }) .run() .pipe(Effect.orDie) const fiber = yield* bus - .subscribe(ProjectCopy.Event.Updated) + .subscribe(Worktree.Event.Updated) .pipe(Stream.take(1), Stream.runCollect, Effect.forkScoped) yield* Effect.yieldNow const discovered = abs(yield* Effect.promise(() => fs.realpath(target))) - expect(yield* copy.refresh({ projectID: input.projectID })).toEqual({ updated: [discovered], removed: [] }) + expect(yield* worktree.refresh({ projectID: input.projectID })).toEqual({ updated: [discovered], removed: [] }) expect(yield* stored(input.projectID)).toEqual( [ { directory: input.sourceDirectory, strategy: null }, - { directory: discovered, strategy: "git_worktree" }, + { directory: discovered, strategy: "git" }, ].toSorted((a, b) => a.directory.localeCompare(b.directory)), ) expect(Array.from(yield* Fiber.join(fiber))[0]?.data).toEqual({ projectID: input.projectID }) yield* Effect.promise(() => $`git worktree remove --force ${target}`.cwd(input.root.path).quiet()) - expect(yield* copy.refresh({ projectID: input.projectID })).toEqual({ updated: [], removed: [discovered] }) + expect(yield* worktree.refresh({ projectID: input.projectID })).toEqual({ updated: [], removed: [discovered] }) expect(yield* stored(input.projectID)).toEqual([{ directory: input.sourceDirectory, strategy: null }]) }), ) @@ -326,9 +437,9 @@ describe("ProjectCopy", () => { it.live("refresh ignores stale git worktree registrations", () => Effect.gen(function* () { const input = yield* setup() - const copy = yield* ProjectCopy.Service - const stale = abs(`${input.root.path}-copy-stale`) - const target = abs(`${input.root.path}-copy-after-stale`) + const worktree = yield* Worktree.Service + const stale = abs(`${input.root.path}-worktree-stale`) + const target = abs(`${input.root.path}-worktree-after-stale`) yield* Effect.addFinalizer(() => Effect.promise(() => fs.rm(target, { recursive: true, force: true })).pipe(Effect.ignore), ) @@ -336,13 +447,13 @@ describe("ProjectCopy", () => { yield* Effect.promise(() => fs.rm(stale, { recursive: true, force: true })) yield* Effect.promise(() => $`git worktree add --detach ${target} HEAD`.cwd(input.root.path).quiet()) - yield* copy.refresh({ projectID: input.projectID }) + yield* worktree.refresh({ projectID: input.projectID }) const discovered = abs(yield* Effect.promise(() => fs.realpath(target))) expect(yield* stored(input.projectID)).toEqual( [ { directory: input.sourceDirectory, strategy: null }, - { directory: discovered, strategy: "git_worktree" }, + { directory: discovered, strategy: "git" }, ].toSorted((a, b) => a.directory.localeCompare(b.directory)), ) }), @@ -352,9 +463,9 @@ describe("ProjectCopy", () => { Effect.gen(function* () { const input = yield* setup() yield* Effect.promise(() => fs.rm(path.join(input.sourceDirectory, ".git"), { recursive: true })) - const copy = yield* ProjectCopy.Service + const worktree = yield* Worktree.Service - yield* copy.refresh({ projectID: input.projectID }) + yield* worktree.refresh({ projectID: input.projectID }) expect(yield* stored(input.projectID)).toEqual([{ directory: input.sourceDirectory, strategy: null }]) }), @@ -362,9 +473,9 @@ describe("ProjectCopy", () => { it.live("refresh with no roots is a no-op", () => Effect.gen(function* () { - const copy = yield* ProjectCopy.Service + const worktree = yield* Worktree.Service - expect(yield* copy.refresh({ projectID: Project.ID.make("missing-project") })).toEqual({ + expect(yield* worktree.refresh({ projectID: Project.ID.make("missing-project") })).toEqual({ updated: [], removed: [], }) @@ -376,13 +487,13 @@ describe("ProjectCopy", () => { const input = yield* setup() const missing = abs(`${input.root.path}-missing-checkout`) yield* input.db - .insert(ProjectDirectoryTable) + .insert(WorktreeTable) .values({ project_id: input.projectID, directory: missing }) .run() .pipe(Effect.orDie) - const copy = yield* ProjectCopy.Service + const worktree = yield* Worktree.Service - expect(yield* copy.refresh({ projectID: input.projectID })).toEqual({ updated: [], removed: [missing] }) + expect(yield* worktree.refresh({ projectID: input.projectID })).toEqual({ updated: [], removed: [missing] }) expect(yield* stored(input.projectID)).not.toContainEqual({ directory: missing, strategy: null }) }), diff --git a/packages/protocol/openapi.json b/packages/protocol/openapi.json index af4dde5e2ca..58f106bcf73 100644 --- a/packages/protocol/openapi.json +++ b/packages/protocol/openapi.json @@ -8,7 +8,9 @@ "paths": { "/api/health": { "get": { - "tags": ["health"], + "tags": [ + "health" + ], "operationId": "v2.health.get", "parameters": [], "security": [], @@ -50,7 +52,9 @@ }, "/api/service/stop": { "post": { - "tags": ["health"], + "tags": [ + "health" + ], "operationId": "v2.health.stop", "parameters": [], "security": [], @@ -102,7 +106,9 @@ }, "/api/server": { "get": { - "tags": ["server"], + "tags": [ + "server" + ], "operationId": "v2.server.get", "parameters": [], "security": [], @@ -121,7 +127,9 @@ } } }, - "required": ["urls"], + "required": [ + "urls" + ], "additionalProperties": false } } @@ -154,7 +162,9 @@ }, "/api/location": { "get": { - "tags": ["location"], + "tags": [ + "location" + ], "operationId": "v2.location.get", "parameters": [ { @@ -237,7 +247,9 @@ }, "/api/agent": { "get": { - "tags": ["agent"], + "tags": [ + "agent" + ], "operationId": "v2.agent.list", "parameters": [ { @@ -300,7 +312,10 @@ } } }, - "required": ["location", "data"], + "required": [ + "location", + "data" + ], "additionalProperties": false } } @@ -333,7 +348,9 @@ }, "/api/agent/{agentID}": { "get": { - "tags": ["agent"], + "tags": [ + "agent" + ], "operationId": "v2.agent.get", "parameters": [ { @@ -401,7 +418,10 @@ "$ref": "#/components/schemas/Agent.Info" } }, - "required": ["location", "data"], + "required": [ + "location", + "data" + ], "additionalProperties": false } } @@ -444,7 +464,9 @@ }, "/api/plugin": { "get": { - "tags": ["plugin"], + "tags": [ + "plugin" + ], "operationId": "v2.plugin.list", "parameters": [ { @@ -507,7 +529,10 @@ } } }, - "required": ["location", "data"], + "required": [ + "location", + "data" + ], "additionalProperties": false } } @@ -540,7 +565,9 @@ }, "/api/session": { "get": { - "tags": ["session"], + "tags": [ + "session" + ], "operationId": "v2.session.list", "parameters": [ { @@ -586,7 +613,10 @@ "anyOf": [ { "type": "string", - "enum": ["asc", "desc"] + "enum": [ + "asc", + "desc" + ] }, { "type": "null" @@ -628,7 +658,9 @@ }, { "type": "string", - "enum": ["null"] + "enum": [ + "null" + ] } ], "description": "Filter by parent session. Use null to return only root sessions." @@ -749,7 +781,9 @@ "summary": "List sessions" }, "post": { - "tags": ["session"], + "tags": [ + "session" + ], "operationId": "v2.session.create", "parameters": [], "security": [], @@ -765,7 +799,9 @@ "$ref": "#/components/schemas/Session.Info" } }, - "required": ["data"], + "required": [ + "data" + ], "additionalProperties": false } } @@ -866,7 +902,9 @@ }, "/api/session/import": { "post": { - "tags": ["session"], + "tags": [ + "session" + ], "operationId": "v2.session.import", "parameters": [], "security": [], @@ -882,7 +920,9 @@ "$ref": "#/components/schemas/Session.Info" } }, - "required": ["data"], + "required": [ + "data" + ], "additionalProperties": false } } @@ -947,7 +987,10 @@ ] } }, - "required": ["info", "messages"], + "required": [ + "info", + "messages" + ], "additionalProperties": false } } @@ -958,7 +1001,9 @@ }, "/api/session/{sessionID}/export": { "get": { - "tags": ["session"], + "tags": [ + "session" + ], "operationId": "v2.session.export", "parameters": [ { @@ -981,7 +1026,10 @@ "anyOf": [ { "type": "string", - "enum": ["true", "false"] + "enum": [ + "true", + "false" + ] }, { "type": "null" @@ -1004,7 +1052,9 @@ "$ref": "#/components/schemas/SessionTransfer.Data" } }, - "required": ["data"], + "required": [ + "data" + ], "additionalProperties": false } } @@ -1057,7 +1107,9 @@ }, "/api/session/active": { "get": { - "tags": ["session"], + "tags": [ + "session" + ], "operationId": "v2.session.active", "parameters": [], "security": [], @@ -1078,7 +1130,9 @@ } } }, - "required": ["data"], + "required": [ + "data" + ], "additionalProperties": false } } @@ -1111,7 +1165,9 @@ }, "/api/session/{sessionID}": { "get": { - "tags": ["session"], + "tags": [ + "session" + ], "operationId": "v2.session.get", "parameters": [ { @@ -1141,7 +1197,9 @@ "$ref": "#/components/schemas/Session.Info" } }, - "required": ["data"], + "required": [ + "data" + ], "additionalProperties": false } } @@ -1182,7 +1240,9 @@ "summary": "Get session" }, "delete": { - "tags": ["session"], + "tags": [ + "session" + ], "operationId": "v2.session.remove", "parameters": [ { @@ -1248,7 +1308,9 @@ }, "/api/session/{sessionID}/fork": { "post": { - "tags": ["session"], + "tags": [ + "session" + ], "operationId": "v2.session.fork", "parameters": [ { @@ -1278,7 +1340,9 @@ "$ref": "#/components/schemas/Session.Info" } }, - "required": ["data"], + "required": [ + "data" + ], "additionalProperties": false } } @@ -1344,7 +1408,9 @@ "$ref": "#/components/schemas/Session.ForkRequestBoundary" } }, - "required": ["boundary"], + "required": [ + "boundary" + ], "additionalProperties": false } } @@ -1355,7 +1421,9 @@ }, "/api/session/{sessionID}/agent": { "post": { - "tags": ["session"], + "tags": [ + "session" + ], "operationId": "v2.session.switchAgent", "parameters": [ { @@ -1427,7 +1495,9 @@ "type": "string" } }, - "required": ["agent"], + "required": [ + "agent" + ], "additionalProperties": false } } @@ -1438,7 +1508,9 @@ }, "/api/session/{sessionID}/model": { "post": { - "tags": ["session"], + "tags": [ + "session" + ], "operationId": "v2.session.switchModel", "parameters": [ { @@ -1510,7 +1582,9 @@ "$ref": "#/components/schemas/Model.Ref" } }, - "required": ["model"], + "required": [ + "model" + ], "additionalProperties": false } } @@ -1521,7 +1595,9 @@ }, "/api/session/{sessionID}/rename": { "post": { - "tags": ["session"], + "tags": [ + "session" + ], "operationId": "v2.session.rename", "parameters": [ { @@ -1593,7 +1669,9 @@ "type": "string" } }, - "required": ["title"], + "required": [ + "title" + ], "additionalProperties": false } } @@ -1604,7 +1682,9 @@ }, "/api/session/{sessionID}/move": { "post": { - "tags": ["session"], + "tags": [ + "session" + ], "operationId": "v2.session.move", "parameters": [ { @@ -1694,7 +1774,9 @@ ] } }, - "required": ["directory"], + "required": [ + "directory" + ], "additionalProperties": false } } @@ -1705,7 +1787,9 @@ }, "/api/session/{sessionID}/prompt": { "post": { - "tags": ["session"], + "tags": [ + "session" + ], "operationId": "v2.session.prompt", "parameters": [ { @@ -1735,7 +1819,9 @@ "$ref": "#/components/schemas/Session.Inbox.User" } }, - "required": ["data"], + "required": [ + "data" + ], "additionalProperties": false } } @@ -1864,7 +1950,9 @@ ] } }, - "required": ["text"], + "required": [ + "text" + ], "additionalProperties": false } } @@ -1875,7 +1963,9 @@ }, "/api/session/{sessionID}/command": { "post": { - "tags": ["session"], + "tags": [ + "session" + ], "operationId": "v2.session.command", "parameters": [ { @@ -1905,7 +1995,9 @@ "$ref": "#/components/schemas/Session.Inbox.User" } }, - "required": ["data"], + "required": [ + "data" + ], "additionalProperties": false } } @@ -2074,7 +2166,9 @@ ] } }, - "required": ["command"], + "required": [ + "command" + ], "additionalProperties": false } } @@ -2085,7 +2179,9 @@ }, "/api/session/{sessionID}/skill": { "post": { - "tags": ["session"], + "tags": [ + "session" + ], "operationId": "v2.session.skill", "parameters": [ { @@ -2185,7 +2281,9 @@ ] } }, - "required": ["skill"], + "required": [ + "skill" + ], "additionalProperties": false } } @@ -2196,7 +2294,9 @@ }, "/api/session/{sessionID}/synthetic": { "post": { - "tags": ["session"], + "tags": [ + "session" + ], "operationId": "v2.session.synthetic", "parameters": [ { @@ -2226,7 +2326,9 @@ "$ref": "#/components/schemas/Session.Inbox.Synthetic" } }, - "required": ["data"], + "required": [ + "data" + ], "additionalProperties": false } } @@ -2340,7 +2442,9 @@ ] } }, - "required": ["text"], + "required": [ + "text" + ], "additionalProperties": false } } @@ -2351,7 +2455,9 @@ }, "/api/session/{sessionID}/shell": { "post": { - "tags": ["session"], + "tags": [ + "session" + ], "operationId": "v2.session.shell", "parameters": [ { @@ -2438,7 +2544,9 @@ "type": "string" } }, - "required": ["command"], + "required": [ + "command" + ], "additionalProperties": false } } @@ -2449,7 +2557,9 @@ }, "/api/session/{sessionID}/compact": { "post": { - "tags": ["session"], + "tags": [ + "session" + ], "operationId": "v2.session.compact", "parameters": [ { @@ -2479,7 +2589,9 @@ "$ref": "#/components/schemas/Session.Inbox.Compaction" } }, - "required": ["data"], + "required": [ + "data" + ], "additionalProperties": false } } @@ -2577,7 +2689,9 @@ }, "/api/session/{sessionID}/wait": { "post": { - "tags": ["session"], + "tags": [ + "session" + ], "operationId": "v2.session.wait", "parameters": [ { @@ -2653,7 +2767,9 @@ }, "/api/session/{sessionID}/revert/stage": { "post": { - "tags": ["session"], + "tags": [ + "session" + ], "operationId": "v2.session.revert.stage", "parameters": [ { @@ -2683,7 +2799,9 @@ "$ref": "#/components/schemas/Session.Revert" } }, - "required": ["data"], + "required": [ + "data" + ], "additionalProperties": false } } @@ -2777,7 +2895,9 @@ ] } }, - "required": ["messageID"], + "required": [ + "messageID" + ], "additionalProperties": false } } @@ -2788,7 +2908,9 @@ }, "/api/session/{sessionID}/revert/clear": { "post": { - "tags": ["session"], + "tags": [ + "session" + ], "operationId": "v2.session.revert.clear", "parameters": [ { @@ -2873,7 +2995,9 @@ }, "/api/session/{sessionID}/revert/commit": { "post": { - "tags": ["session"], + "tags": [ + "session" + ], "operationId": "v2.session.revert.commit", "parameters": [ { @@ -2948,7 +3072,9 @@ }, "/api/session/{sessionID}/context": { "get": { - "tags": ["session"], + "tags": [ + "session" + ], "operationId": "v2.session.context", "parameters": [ { @@ -2981,7 +3107,9 @@ } } }, - "required": ["data"], + "required": [ + "data" + ], "additionalProperties": false } } @@ -3034,7 +3162,9 @@ }, "/api/session/{sessionID}/inbox": { "get": { - "tags": ["session"], + "tags": [ + "session" + ], "operationId": "v2.session.inbox.list", "parameters": [ { @@ -3067,7 +3197,9 @@ } } }, - "required": ["data"], + "required": [ + "data" + ], "additionalProperties": false } } @@ -3110,7 +3242,9 @@ }, "/api/session/{sessionID}/inbox/{inboxID}": { "delete": { - "tags": ["session"], + "tags": [ + "session" + ], "operationId": "v2.session.inbox.cancel", "parameters": [ { @@ -3192,7 +3326,9 @@ }, "/api/session/{sessionID}/inbox/{inboxID}/steer": { "post": { - "tags": ["session"], + "tags": [ + "session" + ], "operationId": "v2.session.inbox.steer", "parameters": [ { @@ -3274,7 +3410,9 @@ }, "/api/session/{sessionID}/inbox/{inboxID}/queue": { "post": { - "tags": ["session"], + "tags": [ + "session" + ], "operationId": "v2.session.inbox.queue", "parameters": [ { @@ -3356,7 +3494,9 @@ }, "/api/session/{sessionID}/instructions/entries": { "get": { - "tags": ["session"], + "tags": [ + "session" + ], "operationId": "v2.session.instructions.entry.list", "parameters": [ { @@ -3389,7 +3529,9 @@ } } }, - "required": ["data"], + "required": [ + "data" + ], "additionalProperties": false } } @@ -3439,7 +3581,9 @@ }, "/api/session/{sessionID}/instructions/entries/{key}": { "put": { - "tags": ["session"], + "tags": [ + "session" + ], "operationId": "v2.session.instructions.entry.put", "parameters": [ { @@ -3527,7 +3671,9 @@ "properties": { "value": {} }, - "required": ["value"], + "required": [ + "value" + ], "additionalProperties": false } } @@ -3536,7 +3682,9 @@ } }, "delete": { - "tags": ["session"], + "tags": [ + "session" + ], "operationId": "v2.session.instructions.entry.remove", "parameters": [ { @@ -3610,7 +3758,9 @@ }, "/api/session/{sessionID}/generate": { "post": { - "tags": ["session"], + "tags": [ + "session" + ], "operationId": "v2.session.generate", "parameters": [ { @@ -3699,7 +3849,9 @@ "type": "string" } }, - "required": ["prompt"], + "required": [ + "prompt" + ], "additionalProperties": false } } @@ -3710,7 +3862,9 @@ }, "/api/experimental/session/{sessionID}/log": { "get": { - "tags": ["session"], + "tags": [ + "session" + ], "operationId": "v2.session.log", "parameters": [ { @@ -3748,7 +3902,10 @@ "anyOf": [ { "type": "string", - "enum": ["true", "false"] + "enum": [ + "true", + "false" + ] }, { "type": "null" @@ -3784,7 +3941,11 @@ "$ref": "#/components/schemas/SessionLogItemJsonString" } }, - "required": ["id", "event", "data"], + "required": [ + "id", + "event", + "data" + ], "additionalProperties": false }, "x-effect-stream": { @@ -3798,13 +3959,18 @@ "properties": { "_tag": { "type": "string", - "enum": ["Fail"] + "enum": [ + "Fail" + ] }, "error": { "not": {} } }, - "required": ["_tag", "error"], + "required": [ + "_tag", + "error" + ], "additionalProperties": false }, { @@ -3812,11 +3978,16 @@ "properties": { "_tag": { "type": "string", - "enum": ["Die"] + "enum": [ + "Die" + ] }, "defect": {} }, - "required": ["_tag", "defect"], + "required": [ + "_tag", + "defect" + ], "additionalProperties": false }, { @@ -3824,7 +3995,9 @@ "properties": { "_tag": { "type": "string", - "enum": ["Interrupt"] + "enum": [ + "Interrupt" + ] }, "fiberId": { "anyOf": [ @@ -3837,7 +4010,10 @@ ] } }, - "required": ["_tag", "fiberId"], + "required": [ + "_tag", + "fiberId" + ], "additionalProperties": false } ] @@ -3888,7 +4064,9 @@ }, "/api/session/{sessionID}/interrupt": { "post": { - "tags": ["session"], + "tags": [ + "session" + ], "operationId": "v2.session.interrupt", "parameters": [ { @@ -3911,7 +4089,10 @@ "anyOf": [ { "type": "string", - "enum": ["true", "false"] + "enum": [ + "true", + "false" + ] }, { "type": "null" @@ -3970,7 +4151,9 @@ }, "/api/session/{sessionID}/background": { "post": { - "tags": ["session"], + "tags": [ + "session" + ], "operationId": "v2.session.background", "parameters": [ { @@ -4036,7 +4219,9 @@ }, "/api/session/{sessionID}/message/{messageID}": { "get": { - "tags": ["session"], + "tags": [ + "session" + ], "operationId": "v2.session.message", "parameters": [ { @@ -4079,7 +4264,9 @@ "$ref": "#/components/schemas/Session.Message.Info" } }, - "required": ["data"], + "required": [ + "data" + ], "additionalProperties": false } } @@ -4129,7 +4316,9 @@ }, "/api/session/{sessionID}/message": { "get": { - "tags": ["session"], + "tags": [ + "session" + ], "operationId": "v2.message.list", "parameters": [ { @@ -4168,7 +4357,10 @@ "anyOf": [ { "type": "string", - "enum": ["asc", "desc"] + "enum": [ + "asc", + "desc" + ] }, { "type": "null" @@ -4261,7 +4453,9 @@ }, "/api/model": { "get": { - "tags": ["model"], + "tags": [ + "model" + ], "operationId": "v2.model.list", "parameters": [ { @@ -4324,7 +4518,10 @@ } } }, - "required": ["location", "data"], + "required": [ + "location", + "data" + ], "additionalProperties": false } } @@ -4367,7 +4564,9 @@ }, "/api/model/default": { "get": { - "tags": ["model"], + "tags": [ + "model" + ], "operationId": "v2.model.default", "parameters": [ { @@ -4434,7 +4633,10 @@ ] } }, - "required": ["location", "data"], + "required": [ + "location", + "data" + ], "additionalProperties": false } } @@ -4477,7 +4679,9 @@ }, "/api/generate": { "post": { - "tags": ["generate"], + "tags": [ + "generate" + ], "operationId": "v2.generate.text", "parameters": [ { @@ -4593,7 +4797,9 @@ ] } }, - "required": ["prompt"], + "required": [ + "prompt" + ], "additionalProperties": false } } @@ -4604,7 +4810,9 @@ }, "/api/provider": { "get": { - "tags": ["provider"], + "tags": [ + "provider" + ], "operationId": "v2.provider.list", "parameters": [ { @@ -4667,7 +4875,10 @@ } } }, - "required": ["location", "data"], + "required": [ + "location", + "data" + ], "additionalProperties": false } } @@ -4710,7 +4921,9 @@ }, "/api/provider/{providerID}": { "get": { - "tags": ["provider"], + "tags": [ + "provider" + ], "operationId": "v2.provider.get", "parameters": [ { @@ -4778,7 +4991,10 @@ "$ref": "#/components/schemas/Provider.Info" } }, - "required": ["location", "data"], + "required": [ + "location", + "data" + ], "additionalProperties": false } } @@ -4831,7 +5047,9 @@ }, "/api/integration": { "get": { - "tags": ["integration"], + "tags": [ + "integration" + ], "operationId": "v2.integration.list", "parameters": [ { @@ -4894,7 +5112,10 @@ } } }, - "required": ["location", "data"], + "required": [ + "location", + "data" + ], "additionalProperties": false } } @@ -4927,7 +5148,9 @@ }, "/api/integration/{integrationID}": { "get": { - "tags": ["integration"], + "tags": [ + "integration" + ], "operationId": "v2.integration.get", "parameters": [ { @@ -5002,7 +5225,10 @@ ] } }, - "required": ["location", "data"], + "required": [ + "location", + "data" + ], "additionalProperties": false } } @@ -5035,7 +5261,9 @@ }, "/api/experimental/integration/wellknown": { "post": { - "tags": ["integration"], + "tags": [ + "integration" + ], "operationId": "v2.experimental.integration.wellknown.add", "parameters": [ { @@ -5124,7 +5352,9 @@ "type": "string" } }, - "required": ["url"], + "required": [ + "url" + ], "additionalProperties": false } } @@ -5135,7 +5365,9 @@ }, "/api/integration/{integrationID}/connect/key": { "post": { - "tags": ["integration"], + "tags": [ + "integration" + ], "operationId": "v2.integration.connect.key", "parameters": [ { @@ -5252,7 +5484,9 @@ ] } }, - "required": ["key"], + "required": [ + "key" + ], "additionalProperties": false } } @@ -5263,7 +5497,9 @@ }, "/api/integration/{integrationID}/connect/oauth": { "post": { - "tags": ["integration"], + "tags": [ + "integration" + ], "operationId": "v2.integration.oauth.connect", "parameters": [ { @@ -5331,7 +5567,10 @@ "$ref": "#/components/schemas/Integration.Attempt" } }, - "required": ["location", "data"], + "required": [ + "location", + "data" + ], "additionalProperties": false } } @@ -5397,7 +5636,9 @@ ] } }, - "required": ["methodID"], + "required": [ + "methodID" + ], "additionalProperties": false } } @@ -5408,7 +5649,9 @@ }, "/api/integration/{integrationID}/connect/oauth/{attemptID}": { "get": { - "tags": ["integration"], + "tags": [ + "integration" + ], "operationId": "v2.integration.oauth.status", "parameters": [ { @@ -5484,7 +5727,10 @@ "$ref": "#/components/schemas/Integration.AttemptStatus" } }, - "required": ["location", "data"], + "required": [ + "location", + "data" + ], "additionalProperties": false } } @@ -5515,7 +5761,9 @@ "summary": "Get OAuth attempt status" }, "delete": { - "tags": ["integration"], + "tags": [ + "integration" + ], "operationId": "v2.integration.oauth.cancel", "parameters": [ { @@ -5607,7 +5855,9 @@ }, "/api/integration/{integrationID}/connect/oauth/{attemptID}/complete": { "post": { - "tags": ["integration"], + "tags": [ + "integration" + ], "operationId": "v2.integration.oauth.complete", "parameters": [ { @@ -5729,7 +5979,9 @@ }, "/api/integration/{integrationID}/connect/command": { "post": { - "tags": ["integration"], + "tags": [ + "integration" + ], "operationId": "v2.integration.command.connect", "parameters": [ { @@ -5797,7 +6049,10 @@ "$ref": "#/components/schemas/Integration.CommandAttempt" } }, - "required": ["location", "data"], + "required": [ + "location", + "data" + ], "additionalProperties": false } } @@ -5853,7 +6108,9 @@ ] } }, - "required": ["methodID"], + "required": [ + "methodID" + ], "additionalProperties": false } } @@ -5864,7 +6121,9 @@ }, "/api/integration/{integrationID}/connect/command/{attemptID}": { "get": { - "tags": ["integration"], + "tags": [ + "integration" + ], "operationId": "v2.integration.command.status", "parameters": [ { @@ -5940,7 +6199,10 @@ "$ref": "#/components/schemas/Integration.CommandAttemptStatus" } }, - "required": ["location", "data"], + "required": [ + "location", + "data" + ], "additionalProperties": false } } @@ -5971,7 +6233,9 @@ "summary": "Get command attempt status" }, "delete": { - "tags": ["integration"], + "tags": [ + "integration" + ], "operationId": "v2.integration.command.cancel", "parameters": [ { @@ -6063,7 +6327,9 @@ }, "/api/mcp": { "get": { - "tags": ["mcp"], + "tags": [ + "mcp" + ], "operationId": "v2.mcp.list", "parameters": [ { @@ -6126,7 +6392,10 @@ } } }, - "required": ["location", "data"], + "required": [ + "location", + "data" + ], "additionalProperties": false } } @@ -6159,7 +6428,9 @@ }, "/api/mcp/{server}": { "put": { - "tags": ["mcp"], + "tags": [ + "mcp" + ], "operationId": "v2.mcp.add", "parameters": [ { @@ -6256,7 +6527,9 @@ ] } }, - "required": ["config"], + "required": [ + "config" + ], "additionalProperties": false } } @@ -6265,7 +6538,9 @@ } }, "delete": { - "tags": ["mcp"], + "tags": [ + "mcp" + ], "operationId": "v2.mcp.remove", "parameters": [ { @@ -6359,7 +6634,9 @@ }, "/api/mcp/{server}/connect": { "post": { - "tags": ["mcp"], + "tags": [ + "mcp" + ], "operationId": "v2.mcp.connect", "parameters": [ { @@ -6453,7 +6730,9 @@ }, "/api/mcp/{server}/disconnect": { "post": { - "tags": ["mcp"], + "tags": [ + "mcp" + ], "operationId": "v2.mcp.disconnect", "parameters": [ { @@ -6547,7 +6826,9 @@ }, "/api/mcp/resource": { "get": { - "tags": ["mcp"], + "tags": [ + "mcp" + ], "operationId": "v2.mcp.resource.catalog", "parameters": [ { @@ -6607,7 +6888,10 @@ "$ref": "#/components/schemas/Mcp.ResourceCatalog" } }, - "required": ["location", "data"], + "required": [ + "location", + "data" + ], "additionalProperties": false } } @@ -6640,7 +6924,9 @@ }, "/api/credential/{credentialID}": { "patch": { - "tags": ["credential"], + "tags": [ + "credential" + ], "operationId": "v2.credential.update", "parameters": [ { @@ -6730,7 +7016,9 @@ "type": "string" } }, - "required": ["label"], + "required": [ + "label" + ], "additionalProperties": false } } @@ -6739,7 +7027,9 @@ } }, "delete": { - "tags": ["credential"], + "tags": [ + "credential" + ], "operationId": "v2.credential.remove", "parameters": [ { @@ -6823,7 +7113,9 @@ }, "/api/project": { "get": { - "tags": ["project"], + "tags": [ + "project" + ], "operationId": "v2.project.list", "parameters": [], "security": [], @@ -6868,7 +7160,9 @@ }, "/api/project/current": { "get": { - "tags": ["project"], + "tags": [ + "project" + ], "operationId": "v2.project.current", "parameters": [ { @@ -6949,100 +7243,11 @@ "summary": "Get current project" } }, - "/api/project/{projectID}/directories": { - "get": { - "tags": ["project"], - "operationId": "v2.project.directories", - "parameters": [ - { - "name": "projectID", - "in": "path", - "schema": { - "type": "string" - }, - "required": true - }, - { - "name": "location", - "in": "query", - "schema": { - "anyOf": [ - { - "type": "object", - "properties": { - "directory": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "workspace": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false - }, - { - "type": "null" - } - ] - }, - "required": false, - "style": "deepObject", - "explode": true - } - ], - "security": [], - "responses": { - "200": { - "description": "Project.Directories", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Project.Directories" - } - } - } - }, - "400": { - "description": "InvalidRequestError", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InvalidRequestError" - } - } - } - }, - "401": { - "description": "UnauthorizedError", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UnauthorizedError" - } - } - } - } - }, - "description": "List known local absolute directories for a project.", - "summary": "List project directories" - } - }, "/api/form/request": { "get": { - "tags": ["form"], + "tags": [ + "form" + ], "operationId": "v2.form.request.list", "parameters": [ { @@ -7105,7 +7310,10 @@ } } }, - "required": ["location", "data"], + "required": [ + "location", + "data" + ], "additionalProperties": false } } @@ -7138,7 +7346,9 @@ }, "/api/session/{sessionID}/form": { "get": { - "tags": ["form"], + "tags": [ + "form" + ], "operationId": "v2.session.form.list", "parameters": [ { @@ -7166,7 +7376,9 @@ } } }, - "required": ["data"], + "required": [ + "data" + ], "additionalProperties": false } } @@ -7214,7 +7426,9 @@ "summary": "List session forms" }, "post": { - "tags": ["form"], + "tags": [ + "form" + ], "operationId": "v2.session.form.create", "parameters": [ { @@ -7239,7 +7453,9 @@ "$ref": "#/components/schemas/Form.Info" } }, - "required": ["data"], + "required": [ + "data" + ], "additionalProperties": false } } @@ -7316,7 +7532,9 @@ }, "/api/session/{sessionID}/form/{formID}": { "get": { - "tags": ["form"], + "tags": [ + "form" + ], "operationId": "v2.session.form.get", "parameters": [ { @@ -7354,7 +7572,9 @@ "$ref": "#/components/schemas/Form.Info" } }, - "required": ["data"], + "required": [ + "data" + ], "additionalProperties": false } } @@ -7407,7 +7627,9 @@ }, "/api/session/{sessionID}/form/{formID}/state": { "get": { - "tags": ["form"], + "tags": [ + "form" + ], "operationId": "v2.session.form.state", "parameters": [ { @@ -7445,7 +7667,9 @@ "$ref": "#/components/schemas/Form.State" } }, - "required": ["data"], + "required": [ + "data" + ], "additionalProperties": false } } @@ -7498,7 +7722,9 @@ }, "/api/session/{sessionID}/form/{formID}/reply": { "post": { - "tags": ["form"], + "tags": [ + "form" + ], "operationId": "v2.session.form.reply", "parameters": [ { @@ -7602,7 +7828,9 @@ }, "/api/session/{sessionID}/form/{formID}/cancel": { "post": { - "tags": ["form"], + "tags": [ + "form" + ], "operationId": "v2.session.form.cancel", "parameters": [ { @@ -7689,7 +7917,9 @@ }, "/api/permission/request": { "get": { - "tags": ["permission"], + "tags": [ + "permission" + ], "operationId": "v2.permission.request.list", "parameters": [ { @@ -7752,7 +7982,10 @@ } } }, - "required": ["location", "data"], + "required": [ + "location", + "data" + ], "additionalProperties": false } } @@ -7785,7 +8018,9 @@ }, "/api/permission/saved": { "get": { - "tags": ["permission"], + "tags": [ + "permission" + ], "operationId": "v2.permission.saved.list", "parameters": [ { @@ -7820,7 +8055,9 @@ } } }, - "required": ["data"], + "required": [ + "data" + ], "additionalProperties": false } } @@ -7853,7 +8090,9 @@ }, "/api/permission/saved/{id}": { "delete": { - "tags": ["permission"], + "tags": [ + "permission" + ], "operationId": "v2.permission.saved.remove", "parameters": [ { @@ -7897,7 +8136,9 @@ }, "/api/session/{sessionID}/permission": { "post": { - "tags": ["permission"], + "tags": [ + "permission" + ], "operationId": "v2.session.permission.create", "parameters": [ { @@ -7938,11 +8179,16 @@ "$ref": "#/components/schemas/Permission.Effect" } }, - "required": ["id", "effect"], + "required": [ + "id", + "effect" + ], "additionalProperties": false } }, - "required": ["data"], + "required": [ + "data" + ], "additionalProperties": false } } @@ -8044,7 +8290,10 @@ ] } }, - "required": ["action", "resources"], + "required": [ + "action", + "resources" + ], "additionalProperties": false } } @@ -8053,7 +8302,9 @@ } }, "get": { - "tags": ["permission"], + "tags": [ + "permission" + ], "operationId": "v2.session.permission.list", "parameters": [ { @@ -8086,7 +8337,9 @@ } } }, - "required": ["data"], + "required": [ + "data" + ], "additionalProperties": false } } @@ -8136,7 +8389,9 @@ }, "/api/session/{sessionID}/permission/{requestID}": { "get": { - "tags": ["permission"], + "tags": [ + "permission" + ], "operationId": "v2.session.permission.get", "parameters": [ { @@ -8179,7 +8434,9 @@ "$ref": "#/components/schemas/Permission.Request" } }, - "required": ["data"], + "required": [ + "data" + ], "additionalProperties": false } } @@ -8232,7 +8489,9 @@ }, "/api/session/{sessionID}/permission/{requestID}/reply": { "post": { - "tags": ["permission"], + "tags": [ + "permission" + ], "operationId": "v2.session.permission.reply", "parameters": [ { @@ -8330,7 +8589,9 @@ ] } }, - "required": ["reply"], + "required": [ + "reply" + ], "additionalProperties": false } } @@ -8341,7 +8602,9 @@ }, "/api/fs/read/*": { "get": { - "tags": ["filesystem"], + "tags": [ + "filesystem" + ], "operationId": "v2.fs.read", "parameters": [ { @@ -8425,7 +8688,9 @@ }, "/api/fs/list": { "get": { - "tags": ["filesystem"], + "tags": [ + "filesystem" + ], "operationId": "v2.fs.list", "parameters": [ { @@ -8503,7 +8768,10 @@ } } }, - "required": ["location", "data"], + "required": [ + "location", + "data" + ], "additionalProperties": false } } @@ -8536,7 +8804,9 @@ }, "/api/fs/find": { "get": { - "tags": ["filesystem"], + "tags": [ + "filesystem" + ], "operationId": "v2.fs.find", "parameters": [ { @@ -8592,7 +8862,10 @@ "in": "query", "schema": { "type": "string", - "enum": ["file", "directory"] + "enum": [ + "file", + "directory" + ] }, "required": false }, @@ -8631,7 +8904,10 @@ } } }, - "required": ["location", "data"], + "required": [ + "location", + "data" + ], "additionalProperties": false } } @@ -8664,7 +8940,9 @@ }, "/api/command": { "get": { - "tags": ["command"], + "tags": [ + "command" + ], "operationId": "v2.command.list", "parameters": [ { @@ -8727,7 +9005,10 @@ } } }, - "required": ["location", "data"], + "required": [ + "location", + "data" + ], "additionalProperties": false } } @@ -8760,7 +9041,9 @@ }, "/api/skill": { "get": { - "tags": ["skill"], + "tags": [ + "skill" + ], "operationId": "v2.skill.list", "parameters": [ { @@ -8823,7 +9106,10 @@ } } }, - "required": ["location", "data"], + "required": [ + "location", + "data" + ], "additionalProperties": false } } @@ -8856,7 +9142,9 @@ }, "/api/event": { "get": { - "tags": ["event"], + "tags": [ + "event" + ], "operationId": "v2.event.subscribe", "parameters": [], "security": [], @@ -8885,7 +9173,11 @@ "$ref": "#/components/schemas/V2EventJsonString" } }, - "required": ["id", "event", "data"], + "required": [ + "id", + "event", + "data" + ], "additionalProperties": false }, "x-effect-stream": { @@ -8899,13 +9191,18 @@ "properties": { "_tag": { "type": "string", - "enum": ["Fail"] + "enum": [ + "Fail" + ] }, "error": { "not": {} } }, - "required": ["_tag", "error"], + "required": [ + "_tag", + "error" + ], "additionalProperties": false }, { @@ -8913,11 +9210,16 @@ "properties": { "_tag": { "type": "string", - "enum": ["Die"] + "enum": [ + "Die" + ] }, "defect": {} }, - "required": ["_tag", "defect"], + "required": [ + "_tag", + "defect" + ], "additionalProperties": false }, { @@ -8925,7 +9227,9 @@ "properties": { "_tag": { "type": "string", - "enum": ["Interrupt"] + "enum": [ + "Interrupt" + ] }, "fiberId": { "anyOf": [ @@ -8938,7 +9242,10 @@ ] } }, - "required": ["_tag", "fiberId"], + "required": [ + "_tag", + "fiberId" + ], "additionalProperties": false } ] @@ -8979,7 +9286,9 @@ }, "/api/pty": { "get": { - "tags": ["pty"], + "tags": [ + "pty" + ], "operationId": "v2.pty.list", "parameters": [ { @@ -9042,7 +9351,10 @@ } } }, - "required": ["location", "data"], + "required": [ + "location", + "data" + ], "additionalProperties": false } } @@ -9073,7 +9385,9 @@ "summary": "List PTY sessions" }, "post": { - "tags": ["pty"], + "tags": [ + "pty" + ], "operationId": "v2.pty.create", "parameters": [ { @@ -9133,7 +9447,10 @@ "$ref": "#/components/schemas/Pty" } }, - "required": ["location", "data"], + "required": [ + "location", + "data" + ], "additionalProperties": false } } @@ -9200,7 +9517,9 @@ }, "/api/pty/{ptyID}": { "get": { - "tags": ["pty"], + "tags": [ + "pty" + ], "operationId": "v2.pty.get", "parameters": [ { @@ -9273,7 +9592,10 @@ "$ref": "#/components/schemas/Pty" } }, - "required": ["location", "data"], + "required": [ + "location", + "data" + ], "additionalProperties": false } } @@ -9314,7 +9636,9 @@ "summary": "Get PTY session" }, "put": { - "tags": ["pty"], + "tags": [ + "pty" + ], "operationId": "v2.pty.update", "parameters": [ { @@ -9387,7 +9711,10 @@ "$ref": "#/components/schemas/Pty" } }, - "required": ["location", "data"], + "required": [ + "location", + "data" + ], "additionalProperties": false } } @@ -9455,7 +9782,10 @@ ] } }, - "required": ["rows", "cols"], + "required": [ + "rows", + "cols" + ], "additionalProperties": false } }, @@ -9467,7 +9797,9 @@ } }, "delete": { - "tags": ["pty"], + "tags": [ + "pty" + ], "operationId": "v2.pty.remove", "parameters": [ { @@ -9566,7 +9898,9 @@ }, "/api/pty/{ptyID}/connect-token": { "post": { - "tags": ["pty"], + "tags": [ + "pty" + ], "operationId": "v2.pty.connect.token", "parameters": [ { @@ -9639,7 +9973,10 @@ "$ref": "#/components/schemas/PtyTicket.ConnectToken" } }, - "required": ["location", "data"], + "required": [ + "location", + "data" + ], "additionalProperties": false } } @@ -9692,7 +10029,9 @@ }, "/api/pty/{ptyID}/connect": { "get": { - "tags": ["pty"], + "tags": [ + "pty" + ], "operationId": "v2.pty.connect", "parameters": [ { @@ -9797,7 +10136,9 @@ }, "/api/shell": { "get": { - "tags": ["shell"], + "tags": [ + "shell" + ], "operationId": "v2.shell.list", "parameters": [ { @@ -9860,7 +10201,10 @@ } } }, - "required": ["location", "data"], + "required": [ + "location", + "data" + ], "additionalProperties": false } } @@ -9891,7 +10235,9 @@ "summary": "List running shell commands" }, "post": { - "tags": ["shell"], + "tags": [ + "shell" + ], "operationId": "v2.shell.create", "parameters": [ { @@ -9951,7 +10297,10 @@ "$ref": "#/components/schemas/Shell.Info1" } }, - "required": ["location", "data"], + "required": [ + "location", + "data" + ], "additionalProperties": false } } @@ -10004,7 +10353,10 @@ "type": "object" } }, - "required": ["command", "timeout"], + "required": [ + "command", + "timeout" + ], "additionalProperties": false } } @@ -10015,7 +10367,9 @@ }, "/api/shell/{id}": { "get": { - "tags": ["shell"], + "tags": [ + "shell" + ], "operationId": "v2.shell.get", "parameters": [ { @@ -10088,7 +10442,10 @@ "$ref": "#/components/schemas/Shell.Info1" } }, - "required": ["location", "data"], + "required": [ + "location", + "data" + ], "additionalProperties": false } } @@ -10129,7 +10486,9 @@ "summary": "Get shell command" }, "delete": { - "tags": ["shell"], + "tags": [ + "shell" + ], "operationId": "v2.shell.remove", "parameters": [ { @@ -10228,7 +10587,9 @@ }, "/api/shell/{id}/timeout": { "patch": { - "tags": ["shell"], + "tags": [ + "shell" + ], "operationId": "v2.shell.timeout", "parameters": [ { @@ -10301,7 +10662,10 @@ "$ref": "#/components/schemas/Shell.Info1" } }, - "required": ["location", "data"], + "required": [ + "location", + "data" + ], "additionalProperties": false } } @@ -10355,7 +10719,9 @@ ] } }, - "required": ["timeout"], + "required": [ + "timeout" + ], "additionalProperties": false } } @@ -10366,7 +10732,9 @@ }, "/api/shell/{id}/output": { "get": { - "tags": ["shell"], + "tags": [ + "shell" + ], "operationId": "v2.shell.output", "parameters": [ { @@ -10487,11 +10855,19 @@ "type": "boolean" } }, - "required": ["output", "cursor", "size", "truncated"], + "required": [ + "output", + "cursor", + "size", + "truncated" + ], "additionalProperties": false } }, - "required": ["location", "data"], + "required": [ + "location", + "data" + ], "additionalProperties": false } } @@ -10534,7 +10910,9 @@ }, "/api/question/request": { "get": { - "tags": ["question"], + "tags": [ + "question" + ], "operationId": "v2.question.request.list", "parameters": [ { @@ -10597,7 +10975,10 @@ } } }, - "required": ["location", "data"], + "required": [ + "location", + "data" + ], "additionalProperties": false } } @@ -10630,7 +11011,9 @@ }, "/api/session/{sessionID}/question": { "get": { - "tags": ["question"], + "tags": [ + "question" + ], "operationId": "v2.session.question.list", "parameters": [ { @@ -10663,7 +11046,9 @@ } } }, - "required": ["data"], + "required": [ + "data" + ], "additionalProperties": false } } @@ -10713,7 +11098,9 @@ }, "/api/session/{sessionID}/question/{requestID}/reply": { "post": { - "tags": ["question"], + "tags": [ + "question" + ], "operationId": "v2.session.question.reply", "parameters": [ { @@ -10805,7 +11192,9 @@ }, "/api/session/{sessionID}/question/{requestID}/reject": { "post": { - "tags": ["question"], + "tags": [ + "question" + ], "operationId": "v2.session.question.reject", "parameters": [ { @@ -10887,7 +11276,9 @@ }, "/api/reference": { "get": { - "tags": ["reference"], + "tags": [ + "reference" + ], "operationId": "v2.reference.list", "parameters": [ { @@ -10950,7 +11341,10 @@ } } }, - "required": ["location", "data"], + "required": [ + "location", + "data" + ], "additionalProperties": false } } @@ -10981,10 +11375,12 @@ "summary": "List references" } }, - "/api/experimental/project/{projectID}/copy": { - "post": { - "tags": ["projectCopy"], - "operationId": "v2.projectCopy.create", + "/api/experimental/project/{projectID}/worktree": { + "get": { + "tags": [ + "worktree" + ], + "operationId": "v2.worktree.list", "parameters": [ { "name": "projectID", @@ -10993,68 +11389,79 @@ "type": "string" }, "required": true - }, - { - "name": "location", - "in": "query", - "schema": { - "anyOf": [ - { - "type": "object", - "properties": { - "directory": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "workspace": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false - }, - { - "type": "null" - } - ] - }, - "required": false, - "style": "deepObject", - "explode": true } ], "security": [], "responses": { "200": { - "description": "ProjectCopy.Copy", + "description": "Worktree.List", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectCopy.Copy" + "$ref": "#/components/schemas/Worktree.List" } } } }, "400": { - "description": "ProjectCopyError | InvalidRequestError", + "description": "InvalidRequestError", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InvalidRequestError" + } + } + } + }, + "401": { + "description": "UnauthorizedError", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UnauthorizedError" + } + } + } + } + }, + "description": "List known local worktrees for a project.", + "summary": "List worktrees" + }, + "post": { + "tags": [ + "worktree" + ], + "operationId": "v2.worktree.create", + "parameters": [ + { + "name": "projectID", + "in": "path", + "schema": { + "type": "string" + }, + "required": true + } + ], + "security": [], + "responses": { + "200": { + "description": "Worktree.Info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Worktree.Info" + } + } + } + }, + "400": { + "description": "WorktreeError | InvalidRequestError", "content": { "application/json": { "schema": { "anyOf": [ { - "$ref": "#/components/schemas/ProjectCopyError" + "$ref": "#/components/schemas/WorktreeError" }, { "$ref": "#/components/schemas/InvalidRequestError" @@ -11075,6 +11482,8 @@ } } }, + "description": "Create a worktree for a project.", + "summary": "Create worktree", "requestBody": { "content": { "application/json": { @@ -11084,6 +11493,9 @@ "strategy": { "type": "string" }, + "from": { + "type": "string" + }, "directory": { "type": "string" }, @@ -11091,7 +11503,10 @@ "type": "string" } }, - "required": ["strategy", "directory"], + "required": [ + "strategy", + "directory" + ], "additionalProperties": false } } @@ -11100,8 +11515,10 @@ } }, "delete": { - "tags": ["projectCopy"], - "operationId": "v2.projectCopy.remove", + "tags": [ + "worktree" + ], + "operationId": "v2.worktree.remove", "parameters": [ { "name": "projectID", @@ -11110,46 +11527,6 @@ "type": "string" }, "required": true - }, - { - "name": "location", - "in": "query", - "schema": { - "anyOf": [ - { - "type": "object", - "properties": { - "directory": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "workspace": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false - }, - { - "type": "null" - } - ] - }, - "required": false, - "style": "deepObject", - "explode": true } ], "security": [], @@ -11158,13 +11535,13 @@ "description": "" }, "400": { - "description": "ProjectCopyError | InvalidRequestError", + "description": "WorktreeError | InvalidRequestError", "content": { "application/json": { "schema": { "anyOf": [ { - "$ref": "#/components/schemas/ProjectCopyError" + "$ref": "#/components/schemas/WorktreeError" }, { "$ref": "#/components/schemas/InvalidRequestError" @@ -11185,6 +11562,8 @@ } } }, + "description": "Remove a managed worktree from a project.", + "summary": "Remove worktree", "requestBody": { "content": { "application/json": { @@ -11198,7 +11577,10 @@ "type": "boolean" } }, - "required": ["directory", "force"], + "required": [ + "directory", + "force" + ], "additionalProperties": false } } @@ -11207,10 +11589,12 @@ } } }, - "/api/experimental/project/{projectID}/copy/refresh": { + "/api/experimental/project/{projectID}/worktree/refresh": { "post": { - "tags": ["projectCopy"], - "operationId": "v2.projectCopy.refresh", + "tags": [ + "worktree" + ], + "operationId": "v2.worktree.refresh", "parameters": [ { "name": "projectID", @@ -11219,46 +11603,6 @@ "type": "string" }, "required": true - }, - { - "name": "location", - "in": "query", - "schema": { - "anyOf": [ - { - "type": "object", - "properties": { - "directory": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "workspace": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false - }, - { - "type": "null" - } - ] - }, - "required": false, - "style": "deepObject", - "explode": true } ], "security": [], @@ -11267,13 +11611,13 @@ "description": "" }, "400": { - "description": "ProjectCopyError | InvalidRequestError", + "description": "WorktreeError | InvalidRequestError", "content": { "application/json": { "schema": { "anyOf": [ { - "$ref": "#/components/schemas/ProjectCopyError" + "$ref": "#/components/schemas/WorktreeError" }, { "$ref": "#/components/schemas/InvalidRequestError" @@ -11293,12 +11637,16 @@ } } } - } + }, + "description": "Reconcile stored worktrees with the project repositories.", + "summary": "Refresh worktrees" } }, "/api/vcs": { "get": { - "tags": ["vcs"], + "tags": [ + "vcs" + ], "operationId": "v2.vcs.get", "parameters": [ { @@ -11358,7 +11706,10 @@ "$ref": "#/components/schemas/Vcs.Info" } }, - "required": ["location", "data"], + "required": [ + "location", + "data" + ], "additionalProperties": false } } @@ -11391,7 +11742,9 @@ }, "/api/vcs/status": { "get": { - "tags": ["vcs"], + "tags": [ + "vcs" + ], "operationId": "v2.vcs.status", "parameters": [ { @@ -11454,7 +11807,10 @@ } } }, - "required": ["location", "data"], + "required": [ + "location", + "data" + ], "additionalProperties": false } } @@ -11487,7 +11843,9 @@ }, "/api/vcs/diff": { "get": { - "tags": ["vcs"], + "tags": [ + "vcs" + ], "operationId": "v2.vcs.diff", "parameters": [ { @@ -11573,7 +11931,10 @@ } } }, - "required": ["location", "data"], + "required": [ + "location", + "data" + ], "additionalProperties": false } } @@ -11606,7 +11967,9 @@ }, "/api/debug/location": { "get": { - "tags": ["debug"], + "tags": [ + "debug" + ], "operationId": "v2.debug.location.list", "parameters": [], "security": [], @@ -11649,7 +12012,9 @@ "summary": "List loaded locations" }, "delete": { - "tags": ["debug"], + "tags": [ + "debug" + ], "operationId": "v2.debug.location.evict", "parameters": [ { @@ -11725,7 +12090,9 @@ }, "/api/experimental/migration/v1": { "get": { - "tags": ["migration"], + "tags": [ + "migration" + ], "operationId": "v2.experimental.migration.v1.status", "parameters": [], "security": [], @@ -11741,10 +12108,15 @@ "properties": { "status": { "type": "string", - "enum": ["required", "completed"] + "enum": [ + "required", + "completed" + ] } }, - "required": ["status"], + "required": [ + "status" + ], "additionalProperties": false }, { @@ -11752,7 +12124,9 @@ "properties": { "status": { "type": "string", - "enum": ["running"] + "enum": [ + "running" + ] }, "progress": { "type": "object", @@ -11791,11 +12165,16 @@ ] } }, - "required": ["label"], + "required": [ + "label" + ], "additionalProperties": false } }, - "required": ["status", "progress"], + "required": [ + "status", + "progress" + ], "additionalProperties": false }, { @@ -11803,13 +12182,18 @@ "properties": { "status": { "type": "string", - "enum": ["error"] + "enum": [ + "error" + ] }, "error": { "type": "string" } }, - "required": ["status", "error"], + "required": [ + "status", + "error" + ], "additionalProperties": false } ] @@ -11844,7 +12228,9 @@ }, "/api/websearch/provider": { "get": { - "tags": ["websearch"], + "tags": [ + "websearch" + ], "operationId": "v2.websearch.providers", "parameters": [ { @@ -11907,7 +12293,10 @@ } } }, - "required": ["location", "data"], + "required": [ + "location", + "data" + ], "additionalProperties": false } } @@ -11950,7 +12339,9 @@ }, "/api/websearch": { "post": { - "tags": ["websearch"], + "tags": [ + "websearch" + ], "operationId": "v2.websearch.query", "parameters": [ { @@ -12010,7 +12401,10 @@ "$ref": "#/components/schemas/WebSearch.Response" } }, - "required": ["location", "data"], + "required": [ + "location", + "data" + ], "additionalProperties": false } } @@ -12069,7 +12463,9 @@ "type": "string" } }, - "required": ["query"], + "required": [ + "query" + ], "additionalProperties": false } } @@ -12080,7 +12476,9 @@ }, "/api/config": { "get": { - "tags": ["config"], + "tags": [ + "config" + ], "operationId": "v2.config.get", "parameters": [ { @@ -12172,7 +12570,9 @@ "properties": { "healthy": { "type": "boolean", - "enum": [true] + "enum": [ + true + ] }, "version": { "type": "string" @@ -12186,7 +12586,11 @@ ] } }, - "required": ["healthy", "version", "pid"], + "required": [ + "healthy", + "version", + "pid" + ], "additionalProperties": false }, "UnauthorizedError": { @@ -12194,13 +12598,18 @@ "properties": { "_tag": { "type": "string", - "enum": ["UnauthorizedError"] + "enum": [ + "UnauthorizedError" + ] }, "message": { "type": "string" } }, - "required": ["_tag", "message"], + "required": [ + "_tag", + "message" + ], "additionalProperties": false }, "InvalidRequestError": { @@ -12208,7 +12617,9 @@ "properties": { "_tag": { "type": "string", - "enum": ["InvalidRequestError"] + "enum": [ + "InvalidRequestError" + ] }, "message": { "type": "string" @@ -12234,7 +12645,10 @@ ] } }, - "required": ["_tag", "message"], + "required": [ + "_tag", + "message" + ], "additionalProperties": false }, "ServiceStopRequest": { @@ -12244,7 +12658,9 @@ "type": "string" } }, - "required": ["instanceID"], + "required": [ + "instanceID" + ], "additionalProperties": false }, "ServiceStopResponse": { @@ -12254,7 +12670,9 @@ "type": "boolean" } }, - "required": ["accepted"], + "required": [ + "accepted" + ], "additionalProperties": false }, "Location.Info": { @@ -12284,11 +12702,18 @@ "type": "string" } }, - "required": ["id", "directory", "canonical"], + "required": [ + "id", + "directory", + "canonical" + ], "additionalProperties": false } }, - "required": ["directory", "project"], + "required": [ + "directory", + "project" + ], "additionalProperties": false }, "Model.Ref": { @@ -12304,7 +12729,10 @@ "type": "string" } }, - "required": ["id", "providerID"], + "required": [ + "id", + "providerID" + ], "additionalProperties": false }, "Provider.Settings": { @@ -12326,7 +12754,11 @@ "type": "object" } }, - "required": ["settings", "headers", "body"], + "required": [ + "settings", + "headers", + "body" + ], "additionalProperties": false }, "Agent.Color": { @@ -12334,7 +12766,11 @@ }, "Permission.Effect": { "type": "string", - "enum": ["allow", "deny", "ask"] + "enum": [ + "allow", + "deny", + "ask" + ] }, "Permission.Rule": { "type": "object", @@ -12349,7 +12785,11 @@ "$ref": "#/components/schemas/Permission.Effect" } }, - "required": ["action", "resource", "effect"], + "required": [ + "action", + "resource", + "effect" + ], "additionalProperties": false }, "Permission.Ruleset": { @@ -12381,7 +12821,11 @@ }, "mode": { "type": "string", - "enum": ["subagent", "primary", "all"] + "enum": [ + "subagent", + "primary", + "all" + ] }, "hidden": { "type": "boolean" @@ -12401,7 +12845,14 @@ "$ref": "#/components/schemas/Permission.Ruleset" } }, - "required": ["id", "name", "request", "mode", "hidden", "permissions"], + "required": [ + "id", + "name", + "request", + "mode", + "hidden", + "permissions" + ], "additionalProperties": false }, "AgentNotFoundError": { @@ -12409,7 +12860,9 @@ "properties": { "_tag": { "type": "string", - "enum": ["AgentNotFoundError"] + "enum": [ + "AgentNotFoundError" + ] }, "agentID": { "type": "string" @@ -12418,7 +12871,11 @@ "type": "string" } }, - "required": ["_tag", "agentID", "message"], + "required": [ + "_tag", + "agentID", + "message" + ], "additionalProperties": false }, "Plugin.Info": { @@ -12428,7 +12885,9 @@ "type": "string" } }, - "required": ["id"], + "required": [ + "id" + ], "additionalProperties": false }, "Session.ForkBoundary": { @@ -12438,7 +12897,9 @@ "properties": { "type": { "type": "string", - "enum": ["before"] + "enum": [ + "before" + ] }, "messageID": { "type": "string", @@ -12449,7 +12910,10 @@ ] } }, - "required": ["type", "messageID"], + "required": [ + "type", + "messageID" + ], "additionalProperties": false }, { @@ -12457,7 +12921,9 @@ "properties": { "type": { "type": "string", - "enum": ["through"] + "enum": [ + "through" + ] }, "messageID": { "type": "string", @@ -12468,7 +12934,10 @@ ] } }, - "required": ["type", "messageID"], + "required": [ + "type", + "messageID" + ], "additionalProperties": false } ] @@ -12498,11 +12967,19 @@ "type": "number" } }, - "required": ["read", "write"], + "required": [ + "read", + "write" + ], "additionalProperties": false } }, - "required": ["input", "output", "reasoning", "cache"], + "required": [ + "input", + "output", + "reasoning", + "cache" + ], "additionalProperties": false }, "Location.Ref": { @@ -12520,7 +12997,9 @@ ] } }, - "required": ["directory"], + "required": [ + "directory" + ], "additionalProperties": false }, "FileDiff.Info": { @@ -12550,10 +13029,20 @@ }, "status": { "type": "string", - "enum": ["added", "deleted", "modified"] + "enum": [ + "added", + "deleted", + "modified" + ] } }, - "required": ["file", "patch", "additions", "deletions", "status"], + "required": [ + "file", + "patch", + "additions", + "deletions", + "status" + ], "additionalProperties": false }, "Session.Revert": { @@ -12580,7 +13069,9 @@ } } }, - "required": ["messageID"], + "required": [ + "messageID" + ], "additionalProperties": false }, "Session.Info": { @@ -12617,7 +13108,10 @@ "$ref": "#/components/schemas/Session.ForkBoundary" } }, - "required": ["sessionID", "boundary"], + "required": [ + "sessionID", + "boundary" + ], "additionalProperties": false }, "projectID": { @@ -12648,7 +13142,10 @@ "type": "number" } }, - "required": ["created", "updated"], + "required": [ + "created", + "updated" + ], "additionalProperties": false }, "title": { @@ -12664,7 +13161,14 @@ "$ref": "#/components/schemas/Session.Revert" } }, - "required": ["id", "projectID", "cost", "tokens", "time", "location"], + "required": [ + "id", + "projectID", + "cost", + "tokens", + "time", + "location" + ], "additionalProperties": false }, "SessionsResponse": { @@ -12703,7 +13207,10 @@ "additionalProperties": false } }, - "required": ["data", "cursor"], + "required": [ + "data", + "cursor" + ], "additionalProperties": false }, "InvalidCursorError": { @@ -12711,13 +13218,18 @@ "properties": { "_tag": { "type": "string", - "enum": ["InvalidCursorError"] + "enum": [ + "InvalidCursorError" + ] }, "message": { "type": "string" } }, - "required": ["_tag", "message"], + "required": [ + "_tag", + "message" + ], "additionalProperties": false }, "InvalidRequestError1": { @@ -12725,7 +13237,9 @@ "properties": { "_tag": { "type": "string", - "enum": ["InvalidRequestError"] + "enum": [ + "InvalidRequestError" + ] }, "message": { "type": "string" @@ -12751,7 +13265,10 @@ ] } }, - "required": ["_tag", "message"], + "required": [ + "_tag", + "message" + ], "additionalProperties": false }, "Session.Message.AgentSelected": { @@ -12775,12 +13292,16 @@ "type": "number" } }, - "required": ["created"], + "required": [ + "created" + ], "additionalProperties": false }, "type": { "type": "string", - "enum": ["agent-switched"] + "enum": [ + "agent-switched" + ] }, "agent": { "type": "string" @@ -12789,7 +13310,12 @@ "type": "string" } }, - "required": ["id", "time", "type", "agent"], + "required": [ + "id", + "time", + "type", + "agent" + ], "additionalProperties": false }, "Session.Message.ModelSelected": { @@ -12813,12 +13339,16 @@ "type": "number" } }, - "required": ["created"], + "required": [ + "created" + ], "additionalProperties": false }, "type": { "type": "string", - "enum": ["model-switched"] + "enum": [ + "model-switched" + ] }, "model": { "$ref": "#/components/schemas/Model.Ref" @@ -12827,7 +13357,12 @@ "$ref": "#/components/schemas/Model.Ref" } }, - "required": ["id", "time", "type", "model"], + "required": [ + "id", + "time", + "type", + "model" + ], "additionalProperties": false }, "Session.Message.LocationSwitched": { @@ -12851,12 +13386,16 @@ "type": "number" } }, - "required": ["created"], + "required": [ + "created" + ], "additionalProperties": false }, "type": { "type": "string", - "enum": ["location-switched"] + "enum": [ + "location-switched" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -12880,11 +13419,18 @@ "type": "string" } }, - "required": ["location"], + "required": [ + "location" + ], "additionalProperties": false } }, - "required": ["id", "time", "type", "location"], + "required": [ + "id", + "time", + "type", + "location" + ], "additionalProperties": false }, "Prompt.Base64": { @@ -12902,10 +13448,14 @@ "properties": { "type": { "type": "string", - "enum": ["inline"] + "enum": [ + "inline" + ] } }, - "required": ["type"], + "required": [ + "type" + ], "additionalProperties": false }, { @@ -12913,13 +13463,18 @@ "properties": { "type": { "type": "string", - "enum": ["uri"] + "enum": [ + "uri" + ] }, "uri": { "type": "string" } }, - "required": ["type", "uri"], + "required": [ + "type", + "uri" + ], "additionalProperties": false } ] @@ -12937,7 +13492,11 @@ "type": "string" } }, - "required": ["start", "end", "text"], + "required": [ + "start", + "end", + "text" + ], "additionalProperties": false }, "Prompt.FileAttachment": { @@ -12962,7 +13521,11 @@ "$ref": "#/components/schemas/Prompt.Mention" } }, - "required": ["data", "mime", "source"], + "required": [ + "data", + "mime", + "source" + ], "additionalProperties": false }, "Prompt.AgentAttachment": { @@ -12975,7 +13538,9 @@ "$ref": "#/components/schemas/Prompt.Mention" } }, - "required": ["name"], + "required": [ + "name" + ], "additionalProperties": false }, "Prompt.SkillAttachment": { @@ -12994,7 +13559,11 @@ "$ref": "#/components/schemas/Prompt.Mention" } }, - "required": ["id", "name", "text"], + "required": [ + "id", + "name", + "text" + ], "additionalProperties": false }, "Session.Message.User": { @@ -13018,7 +13587,9 @@ "type": "number" } }, - "required": ["created"], + "required": [ + "created" + ], "additionalProperties": false }, "text": { @@ -13044,10 +13615,17 @@ }, "type": { "type": "string", - "enum": ["user"] + "enum": [ + "user" + ] } }, - "required": ["id", "time", "text", "type"], + "required": [ + "id", + "time", + "text", + "type" + ], "additionalProperties": false }, "Session.Message.Synthetic": { @@ -13071,7 +13649,9 @@ "type": "number" } }, - "required": ["created"], + "required": [ + "created" + ], "additionalProperties": false }, "text": { @@ -13082,10 +13662,17 @@ }, "type": { "type": "string", - "enum": ["synthetic"] + "enum": [ + "synthetic" + ] } }, - "required": ["id", "time", "text", "type"], + "required": [ + "id", + "time", + "text", + "type" + ], "additionalProperties": false }, "Session.Message.System": { @@ -13109,12 +13696,16 @@ "type": "number" } }, - "required": ["created"], + "required": [ + "created" + ], "additionalProperties": false }, "type": { "type": "string", - "enum": ["system"] + "enum": [ + "system" + ] }, "text": { "type": "string" @@ -13123,7 +13714,12 @@ "type": "string" } }, - "required": ["id", "time", "type", "text"], + "required": [ + "id", + "time", + "type", + "text" + ], "additionalProperties": false }, "Session.Message.Skill": { @@ -13147,12 +13743,16 @@ "type": "number" } }, - "required": ["created"], + "required": [ + "created" + ], "additionalProperties": false }, "type": { "type": "string", - "enum": ["skill"] + "enum": [ + "skill" + ] }, "skill": { "type": "string" @@ -13164,7 +13764,14 @@ "type": "string" } }, - "required": ["id", "time", "type", "skill", "name", "text"], + "required": [ + "id", + "time", + "type", + "skill", + "name", + "text" + ], "additionalProperties": false }, "Session.Message.Shell": { @@ -13191,12 +13798,16 @@ "type": "number" } }, - "required": ["created"], + "required": [ + "created" + ], "additionalProperties": false }, "type": { "type": "string", - "enum": ["shell"] + "enum": [ + "shell" + ] }, "shellID": { "type": "string", @@ -13211,7 +13822,12 @@ }, "status": { "type": "string", - "enum": ["running", "exited", "timeout", "killed"] + "enum": [ + "running", + "exited", + "timeout", + "killed" + ] }, "exit": { "anyOf": [ @@ -13222,21 +13838,31 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, { "type": "string", - "enum": ["Infinity", "-Infinity", "NaN"] + "enum": [ + "Infinity", + "-Infinity", + "NaN" + ] } ] }, @@ -13266,11 +13892,23 @@ "type": "boolean" } }, - "required": ["output", "cursor", "size", "truncated"], + "required": [ + "output", + "cursor", + "size", + "truncated" + ], "additionalProperties": false } }, - "required": ["id", "time", "type", "shellID", "command", "status"], + "required": [ + "id", + "time", + "type", + "shellID", + "command", + "status" + ], "additionalProperties": false }, "Session.Message.ProviderState": { @@ -13281,7 +13919,9 @@ "properties": { "type": { "type": "string", - "enum": ["text"] + "enum": [ + "text" + ] }, "text": { "type": "string" @@ -13290,7 +13930,10 @@ "$ref": "#/components/schemas/Session.Message.ProviderState" } }, - "required": ["type", "text"], + "required": [ + "type", + "text" + ], "additionalProperties": false }, "Session.Message.Assistant.Reasoning": { @@ -13298,7 +13941,9 @@ "properties": { "type": { "type": "string", - "enum": ["reasoning"] + "enum": [ + "reasoning" + ] }, "text": { "type": "string" @@ -13316,11 +13961,16 @@ "type": "number" } }, - "required": ["created"], + "required": [ + "created" + ], "additionalProperties": false } }, - "required": ["type", "text"], + "required": [ + "type", + "text" + ], "additionalProperties": false }, "Session.Message.ToolState.Streaming": { @@ -13328,13 +13978,18 @@ "properties": { "status": { "type": "string", - "enum": ["streaming"] + "enum": [ + "streaming" + ] }, "input": { "type": "string" } }, - "required": ["status", "input"], + "required": [ + "status", + "input" + ], "additionalProperties": false }, "Session.Message.ToolState.Running": { @@ -13342,7 +13997,9 @@ "properties": { "status": { "type": "string", - "enum": ["running"] + "enum": [ + "running" + ] }, "input": { "type": "object" @@ -13351,7 +14008,11 @@ "type": "object" } }, - "required": ["status", "input", "metadata"], + "required": [ + "status", + "input", + "metadata" + ], "additionalProperties": false }, "Tool.TextContent": { @@ -13359,13 +14020,18 @@ "properties": { "type": { "type": "string", - "enum": ["text"] + "enum": [ + "text" + ] }, "text": { "type": "string" } }, - "required": ["type", "text"], + "required": [ + "type", + "text" + ], "additionalProperties": false }, "Tool.FileContent": { @@ -13373,7 +14039,9 @@ "properties": { "type": { "type": "string", - "enum": ["file"] + "enum": [ + "file" + ] }, "uri": { "type": "string" @@ -13392,7 +14060,11 @@ ] } }, - "required": ["type", "uri", "mime"], + "required": [ + "type", + "uri", + "mime" + ], "additionalProperties": false }, "Tool.Content": { @@ -13410,7 +14082,9 @@ "properties": { "status": { "type": "string", - "enum": ["completed"] + "enum": [ + "completed" + ] }, "input": { "type": "object" @@ -13431,7 +14105,11 @@ "type": "object" } }, - "required": ["status", "input", "content"], + "required": [ + "status", + "input", + "content" + ], "additionalProperties": false }, "Session.StructuredError": { @@ -13453,7 +14131,10 @@ ] } }, - "required": ["type", "message"], + "required": [ + "type", + "message" + ], "additionalProperties": false }, "Session.Message.ToolState.Error": { @@ -13461,7 +14142,9 @@ "properties": { "status": { "type": "string", - "enum": ["error"] + "enum": [ + "error" + ] }, "input": { "type": "object" @@ -13485,7 +14168,11 @@ "type": "object" } }, - "required": ["status", "input", "error"], + "required": [ + "status", + "input", + "error" + ], "additionalProperties": false }, "Session.Message.Assistant.Tool": { @@ -13493,7 +14180,9 @@ "properties": { "type": { "type": "string", - "enum": ["tool"] + "enum": [ + "tool" + ] }, "id": { "type": "string" @@ -13539,11 +14228,19 @@ "type": "number" } }, - "required": ["created"], + "required": [ + "created" + ], "additionalProperties": false } }, - "required": ["type", "id", "name", "state", "time"], + "required": [ + "type", + "id", + "name", + "state", + "time" + ], "additionalProperties": false }, "Session.Message.Assistant.Retry": { @@ -13564,7 +14261,11 @@ "$ref": "#/components/schemas/Session.StructuredError" } }, - "required": ["attempt", "at", "error"], + "required": [ + "attempt", + "at", + "error" + ], "additionalProperties": false }, "Session.Message.Assistant": { @@ -13591,12 +14292,16 @@ "type": "number" } }, - "required": ["created"], + "required": [ + "created" + ], "additionalProperties": false }, "type": { "type": "string", - "enum": ["assistant"] + "enum": [ + "assistant" + ] }, "agent": { "type": "string" @@ -13640,7 +14345,14 @@ }, "finish": { "type": "string", - "enum": ["stop", "length", "tool-calls", "content-filter", "error", "unknown"] + "enum": [ + "stop", + "length", + "tool-calls", + "content-filter", + "error", + "unknown" + ] }, "cost": { "$ref": "#/components/schemas/Money.USD" @@ -13655,7 +14367,14 @@ "$ref": "#/components/schemas/Session.Message.Assistant.Retry" } }, - "required": ["id", "time", "type", "agent", "model", "content"], + "required": [ + "id", + "time", + "type", + "agent", + "model", + "content" + ], "additionalProperties": false }, "Session.Message.Compaction.Running": { @@ -13663,7 +14382,9 @@ "properties": { "type": { "type": "string", - "enum": ["compaction"] + "enum": [ + "compaction" + ] }, "id": { "type": "string", @@ -13683,16 +14404,23 @@ "type": "number" } }, - "required": ["created"], + "required": [ + "created" + ], "additionalProperties": false }, "status": { "type": "string", - "enum": ["running"] + "enum": [ + "running" + ] }, "reason": { "type": "string", - "enum": ["auto", "manual"] + "enum": [ + "auto", + "manual" + ] }, "summary": { "type": "string" @@ -13701,7 +14429,15 @@ "type": "string" } }, - "required": ["type", "id", "time", "status", "reason", "summary", "recent"], + "required": [ + "type", + "id", + "time", + "status", + "reason", + "summary", + "recent" + ], "additionalProperties": false }, "Session.Message.Compaction.Completed": { @@ -13709,7 +14445,9 @@ "properties": { "type": { "type": "string", - "enum": ["compaction"] + "enum": [ + "compaction" + ] }, "id": { "type": "string", @@ -13729,16 +14467,23 @@ "type": "number" } }, - "required": ["created"], + "required": [ + "created" + ], "additionalProperties": false }, "status": { "type": "string", - "enum": ["completed"] + "enum": [ + "completed" + ] }, "reason": { "type": "string", - "enum": ["auto", "manual"] + "enum": [ + "auto", + "manual" + ] }, "summary": { "type": "string" @@ -13747,7 +14492,15 @@ "type": "string" } }, - "required": ["type", "id", "time", "status", "reason", "summary", "recent"], + "required": [ + "type", + "id", + "time", + "status", + "reason", + "summary", + "recent" + ], "additionalProperties": false }, "Session.Message.Compaction.Failed": { @@ -13755,7 +14508,9 @@ "properties": { "type": { "type": "string", - "enum": ["compaction"] + "enum": [ + "compaction" + ] }, "id": { "type": "string", @@ -13775,22 +14530,36 @@ "type": "number" } }, - "required": ["created"], + "required": [ + "created" + ], "additionalProperties": false }, "status": { "type": "string", - "enum": ["failed"] + "enum": [ + "failed" + ] }, "reason": { "type": "string", - "enum": ["auto", "manual"] + "enum": [ + "auto", + "manual" + ] }, "error": { "$ref": "#/components/schemas/Session.StructuredError" } }, - "required": ["type", "id", "time", "status", "reason", "error"], + "required": [ + "type", + "id", + "time", + "status", + "reason", + "error" + ], "additionalProperties": false }, "Session.Message.Compaction": { @@ -13845,7 +14614,9 @@ "properties": { "_tag": { "type": "string", - "enum": ["ConflictError"] + "enum": [ + "ConflictError" + ] }, "message": { "type": "string" @@ -13861,7 +14632,10 @@ ] } }, - "required": ["_tag", "message"], + "required": [ + "_tag", + "message" + ], "additionalProperties": false }, "SessionTransfer.Data": { @@ -13877,7 +14651,10 @@ } } }, - "required": ["info", "messages"], + "required": [ + "info", + "messages" + ], "additionalProperties": false }, "SessionNotFoundError": { @@ -13885,7 +14662,9 @@ "properties": { "_tag": { "type": "string", - "enum": ["SessionNotFoundError"] + "enum": [ + "SessionNotFoundError" + ] }, "sessionID": { "type": "string" @@ -13894,7 +14673,11 @@ "type": "string" } }, - "required": ["_tag", "sessionID", "message"], + "required": [ + "_tag", + "sessionID", + "message" + ], "additionalProperties": false }, "UnknownError": { @@ -13902,7 +14685,9 @@ "properties": { "_tag": { "type": "string", - "enum": ["UnknownError"] + "enum": [ + "UnknownError" + ] }, "message": { "type": "string" @@ -13918,7 +14703,10 @@ ] } }, - "required": ["_tag", "message"], + "required": [ + "_tag", + "message" + ], "additionalProperties": false }, "SessionActive": { @@ -13926,10 +14714,14 @@ "properties": { "type": { "type": "string", - "enum": ["running"] + "enum": [ + "running" + ] } }, - "required": ["type"], + "required": [ + "type" + ], "additionalProperties": false }, "Session.ForkRequestBoundary": { @@ -13939,7 +14731,9 @@ "properties": { "type": { "type": "string", - "enum": ["before"] + "enum": [ + "before" + ] }, "messageID": { "type": "string", @@ -13950,7 +14744,10 @@ ] } }, - "required": ["type", "messageID"], + "required": [ + "type", + "messageID" + ], "additionalProperties": false }, { @@ -13958,10 +14755,14 @@ "properties": { "type": { "type": "string", - "enum": ["through"] + "enum": [ + "through" + ] } }, - "required": ["type"], + "required": [ + "type" + ], "additionalProperties": false } ] @@ -13971,7 +14772,9 @@ "properties": { "_tag": { "type": "string", - "enum": ["MessageNotFoundError"] + "enum": [ + "MessageNotFoundError" + ] }, "sessionID": { "type": "string" @@ -13983,12 +14786,20 @@ "type": "string" } }, - "required": ["_tag", "sessionID", "messageID", "message"], + "required": [ + "_tag", + "sessionID", + "messageID", + "message" + ], "additionalProperties": false }, "Session.Inbox.Delivery": { "type": "string", - "enum": ["steer", "queue"] + "enum": [ + "steer", + "queue" + ] }, "PromptInput.FileAttachment": { "type": "object", @@ -14006,7 +14817,9 @@ "$ref": "#/components/schemas/Prompt.Mention" } }, - "required": ["uri"], + "required": [ + "uri" + ], "additionalProperties": false }, "PromptInput.SkillAttachment": { @@ -14019,7 +14832,9 @@ "$ref": "#/components/schemas/Prompt.Mention" } }, - "required": ["id"], + "required": [ + "id" + ], "additionalProperties": false }, "Session.Inbox.UserPayload": { @@ -14050,7 +14865,9 @@ "type": "object" } }, - "required": ["text"], + "required": [ + "text" + ], "additionalProperties": false }, "Session.Inbox.User": { @@ -14077,7 +14894,9 @@ }, "type": { "type": "string", - "enum": ["user"] + "enum": [ + "user" + ] }, "payload": { "$ref": "#/components/schemas/Session.Inbox.UserPayload" @@ -14086,7 +14905,14 @@ "$ref": "#/components/schemas/Session.Inbox.Delivery" } }, - "required": ["id", "sessionID", "timeCreated", "type", "payload", "delivery"], + "required": [ + "id", + "sessionID", + "timeCreated", + "type", + "payload", + "delivery" + ], "additionalProperties": false }, "CommandNotFoundError": { @@ -14094,7 +14920,9 @@ "properties": { "_tag": { "type": "string", - "enum": ["CommandNotFoundError"] + "enum": [ + "CommandNotFoundError" + ] }, "command": { "type": "string" @@ -14103,7 +14931,11 @@ "type": "string" } }, - "required": ["_tag", "command", "message"], + "required": [ + "_tag", + "command", + "message" + ], "additionalProperties": false }, "CommandEvaluationError": { @@ -14111,7 +14943,9 @@ "properties": { "_tag": { "type": "string", - "enum": ["CommandEvaluationError"] + "enum": [ + "CommandEvaluationError" + ] }, "command": { "type": "string" @@ -14120,7 +14954,11 @@ "type": "string" } }, - "required": ["_tag", "command", "message"], + "required": [ + "_tag", + "command", + "message" + ], "additionalProperties": false }, "SkillNotFoundError": { @@ -14128,7 +14966,9 @@ "properties": { "_tag": { "type": "string", - "enum": ["SkillNotFoundError"] + "enum": [ + "SkillNotFoundError" + ] }, "skill": { "type": "string" @@ -14137,7 +14977,11 @@ "type": "string" } }, - "required": ["_tag", "skill", "message"], + "required": [ + "_tag", + "skill", + "message" + ], "additionalProperties": false }, "Session.Inbox.SyntheticPayload": { @@ -14153,7 +14997,9 @@ "type": "object" } }, - "required": ["text"], + "required": [ + "text" + ], "additionalProperties": false }, "Session.Inbox.Synthetic": { @@ -14180,7 +15026,9 @@ }, "type": { "type": "string", - "enum": ["synthetic"] + "enum": [ + "synthetic" + ] }, "payload": { "$ref": "#/components/schemas/Session.Inbox.SyntheticPayload" @@ -14189,7 +15037,14 @@ "$ref": "#/components/schemas/Session.Inbox.Delivery" } }, - "required": ["id", "sessionID", "timeCreated", "type", "payload", "delivery"], + "required": [ + "id", + "sessionID", + "timeCreated", + "type", + "payload", + "delivery" + ], "additionalProperties": false }, "Session.Inbox.CompactionPayload": { @@ -14226,7 +15081,9 @@ }, "type": { "type": "string", - "enum": ["compaction"] + "enum": [ + "compaction" + ] }, "payload": { "$ref": "#/components/schemas/Session.Inbox.CompactionPayload" @@ -14235,7 +15092,14 @@ "$ref": "#/components/schemas/Session.Inbox.Delivery" } }, - "required": ["id", "sessionID", "timeCreated", "type", "payload", "delivery"], + "required": [ + "id", + "sessionID", + "timeCreated", + "type", + "payload", + "delivery" + ], "additionalProperties": false }, "ServiceUnavailableError": { @@ -14243,7 +15107,9 @@ "properties": { "_tag": { "type": "string", - "enum": ["ServiceUnavailableError"] + "enum": [ + "ServiceUnavailableError" + ] }, "message": { "type": "string" @@ -14259,7 +15125,10 @@ ] } }, - "required": ["_tag", "message"], + "required": [ + "_tag", + "message" + ], "additionalProperties": false }, "SessionBusyError": { @@ -14267,7 +15136,9 @@ "properties": { "_tag": { "type": "string", - "enum": ["SessionBusyError"] + "enum": [ + "SessionBusyError" + ] }, "sessionID": { "type": "string" @@ -14276,7 +15147,11 @@ "type": "string" } }, - "required": ["_tag", "sessionID", "message"], + "required": [ + "_tag", + "sessionID", + "message" + ], "additionalProperties": false }, "Session.Inbox.MovePayload": { @@ -14292,7 +15167,10 @@ "type": "string" } }, - "required": ["location", "projectID"], + "required": [ + "location", + "projectID" + ], "additionalProperties": false }, "Session.Inbox.Move": { @@ -14319,7 +15197,9 @@ }, "type": { "type": "string", - "enum": ["move"] + "enum": [ + "move" + ] }, "payload": { "$ref": "#/components/schemas/Session.Inbox.MovePayload" @@ -14328,7 +15208,14 @@ "$ref": "#/components/schemas/Session.Inbox.Delivery" } }, - "required": ["id", "sessionID", "timeCreated", "type", "payload", "delivery"], + "required": [ + "id", + "sessionID", + "timeCreated", + "type", + "payload", + "delivery" + ], "additionalProperties": false }, "Session.Inbox.Info": { @@ -14364,7 +15251,10 @@ }, "value": {} }, - "required": ["key", "value"], + "required": [ + "key", + "value" + ], "additionalProperties": false }, "InstructionEntryValueTooLargeError": { @@ -14372,7 +15262,9 @@ "properties": { "_tag": { "type": "string", - "enum": ["InstructionEntryValueTooLargeError"] + "enum": [ + "InstructionEntryValueTooLargeError" + ] }, "actualBytes": { "type": "integer" @@ -14384,7 +15276,12 @@ "type": "string" } }, - "required": ["_tag", "actualBytes", "maxBytes", "message"], + "required": [ + "_tag", + "actualBytes", + "maxBytes", + "message" + ], "additionalProperties": false }, "SessionGenerateResponse": { @@ -14397,11 +15294,15 @@ "type": "string" } }, - "required": ["text"], + "required": [ + "text" + ], "additionalProperties": false } }, - "required": ["data"], + "required": [ + "data" + ], "additionalProperties": false }, "session.created": { @@ -14423,7 +15324,9 @@ }, "type": { "type": "string", - "enum": ["session.created"] + "enum": [ + "session.created" + ] }, "durable": { "type": "object", @@ -14441,10 +15344,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -14494,11 +15403,23 @@ "type": "string" } }, - "required": ["sessionID", "projectID", "location", "slug", "version"], + "required": [ + "sessionID", + "projectID", + "location", + "slug", + "version" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "session.agent.selected": { @@ -14520,7 +15441,9 @@ }, "type": { "type": "string", - "enum": ["session.agent.selected"] + "enum": [ + "session.agent.selected" + ] }, "durable": { "type": "object", @@ -14538,10 +15461,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -14565,11 +15494,20 @@ "type": "string" } }, - "required": ["sessionID", "agent"], + "required": [ + "sessionID", + "agent" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "session.model.selected": { @@ -14591,7 +15529,9 @@ }, "type": { "type": "string", - "enum": ["session.model.selected"] + "enum": [ + "session.model.selected" + ] }, "durable": { "type": "object", @@ -14609,10 +15549,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -14636,11 +15582,20 @@ "$ref": "#/components/schemas/Model.Ref" } }, - "required": ["sessionID", "model"], + "required": [ + "sessionID", + "model" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "session.moved": { @@ -14662,7 +15617,9 @@ }, "type": { "type": "string", - "enum": ["session.moved"] + "enum": [ + "session.moved" + ] }, "durable": { "type": "object", @@ -14680,10 +15637,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -14710,11 +15673,21 @@ "type": "string" } }, - "required": ["sessionID", "location", "projectID"], + "required": [ + "sessionID", + "location", + "projectID" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "session.renamed": { @@ -14736,7 +15709,9 @@ }, "type": { "type": "string", - "enum": ["session.renamed"] + "enum": [ + "session.renamed" + ] }, "durable": { "type": "object", @@ -14754,10 +15729,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -14778,11 +15759,20 @@ "type": "string" } }, - "required": ["sessionID", "title"], + "required": [ + "sessionID", + "title" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "session.deleted": { @@ -14804,7 +15794,9 @@ }, "type": { "type": "string", - "enum": ["session.deleted"] + "enum": [ + "session.deleted" + ] }, "durable": { "type": "object", @@ -14822,10 +15814,16 @@ }, "version": { "type": "number", - "enum": [2] + "enum": [ + 2 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -14843,11 +15841,19 @@ ] } }, - "required": ["sessionID"], + "required": [ + "sessionID" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "session.forked": { @@ -14869,7 +15875,9 @@ }, "type": { "type": "string", - "enum": ["session.forked"] + "enum": [ + "session.forked" + ] }, "durable": { "type": "object", @@ -14887,10 +15895,16 @@ }, "version": { "type": "number", - "enum": [2] + "enum": [ + 2 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -14932,11 +15946,21 @@ } } }, - "required": ["sessionID", "parentID", "boundary"], + "required": [ + "sessionID", + "parentID", + "boundary" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "session.inbox.delivered": { @@ -14958,7 +15982,9 @@ }, "type": { "type": "string", - "enum": ["session.inbox.delivered"] + "enum": [ + "session.inbox.delivered" + ] }, "durable": { "type": "object", @@ -14976,10 +16002,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -15005,11 +16037,20 @@ ] } }, - "required": ["sessionID", "inboxID"], + "required": [ + "sessionID", + "inboxID" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "Session.Inbox.UserPayload1": { @@ -15040,7 +16081,9 @@ "type": "object" } }, - "required": ["text"], + "required": [ + "text" + ], "additionalProperties": false }, "Session.Inbox.SyntheticPayload1": { @@ -15056,7 +16099,9 @@ "type": "object" } }, - "required": ["text"], + "required": [ + "text" + ], "additionalProperties": false }, "Session.Inbox.Item": { @@ -15066,7 +16111,9 @@ "properties": { "type": { "type": "string", - "enum": ["user"] + "enum": [ + "user" + ] }, "payload": { "$ref": "#/components/schemas/Session.Inbox.UserPayload1" @@ -15075,7 +16122,11 @@ "$ref": "#/components/schemas/Session.Inbox.Delivery" } }, - "required": ["type", "payload", "delivery"], + "required": [ + "type", + "payload", + "delivery" + ], "additionalProperties": false }, { @@ -15083,7 +16134,9 @@ "properties": { "type": { "type": "string", - "enum": ["synthetic"] + "enum": [ + "synthetic" + ] }, "payload": { "$ref": "#/components/schemas/Session.Inbox.SyntheticPayload1" @@ -15092,7 +16145,11 @@ "$ref": "#/components/schemas/Session.Inbox.Delivery" } }, - "required": ["type", "payload", "delivery"], + "required": [ + "type", + "payload", + "delivery" + ], "additionalProperties": false }, { @@ -15100,7 +16157,9 @@ "properties": { "type": { "type": "string", - "enum": ["compaction"] + "enum": [ + "compaction" + ] }, "payload": { "$ref": "#/components/schemas/Session.Inbox.CompactionPayload" @@ -15109,7 +16168,11 @@ "$ref": "#/components/schemas/Session.Inbox.Delivery" } }, - "required": ["type", "payload", "delivery"], + "required": [ + "type", + "payload", + "delivery" + ], "additionalProperties": false }, { @@ -15117,7 +16180,9 @@ "properties": { "type": { "type": "string", - "enum": ["move"] + "enum": [ + "move" + ] }, "payload": { "$ref": "#/components/schemas/Session.Inbox.MovePayload" @@ -15126,7 +16191,11 @@ "$ref": "#/components/schemas/Session.Inbox.Delivery" } }, - "required": ["type", "payload", "delivery"], + "required": [ + "type", + "payload", + "delivery" + ], "additionalProperties": false } ] @@ -15150,7 +16219,9 @@ }, "type": { "type": "string", - "enum": ["session.inbox.enqueued"] + "enum": [ + "session.inbox.enqueued" + ] }, "durable": { "type": "object", @@ -15168,10 +16239,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -15200,11 +16277,21 @@ "$ref": "#/components/schemas/Session.Inbox.Item" } }, - "required": ["sessionID", "inboxID", "item"], + "required": [ + "sessionID", + "inboxID", + "item" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "session.inbox.cancelled": { @@ -15226,7 +16313,9 @@ }, "type": { "type": "string", - "enum": ["session.inbox.cancelled"] + "enum": [ + "session.inbox.cancelled" + ] }, "durable": { "type": "object", @@ -15244,10 +16333,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -15273,11 +16368,20 @@ ] } }, - "required": ["sessionID", "inboxID"], + "required": [ + "sessionID", + "inboxID" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "session.inbox.delivery.changed": { @@ -15299,7 +16403,9 @@ }, "type": { "type": "string", - "enum": ["session.inbox.delivery.changed"] + "enum": [ + "session.inbox.delivery.changed" + ] }, "durable": { "type": "object", @@ -15317,10 +16423,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -15349,11 +16461,21 @@ "$ref": "#/components/schemas/Session.Inbox.Delivery" } }, - "required": ["sessionID", "inboxID", "delivery"], + "required": [ + "sessionID", + "inboxID", + "delivery" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "session.execution.started": { @@ -15375,7 +16497,9 @@ }, "type": { "type": "string", - "enum": ["session.execution.started"] + "enum": [ + "session.execution.started" + ] }, "durable": { "type": "object", @@ -15393,10 +16517,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -15414,11 +16544,19 @@ ] } }, - "required": ["sessionID"], + "required": [ + "sessionID" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "session.execution.succeeded": { @@ -15440,7 +16578,9 @@ }, "type": { "type": "string", - "enum": ["session.execution.succeeded"] + "enum": [ + "session.execution.succeeded" + ] }, "durable": { "type": "object", @@ -15458,10 +16598,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -15479,11 +16625,19 @@ ] } }, - "required": ["sessionID"], + "required": [ + "sessionID" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "session.execution.failed": { @@ -15505,7 +16659,9 @@ }, "type": { "type": "string", - "enum": ["session.execution.failed"] + "enum": [ + "session.execution.failed" + ] }, "durable": { "type": "object", @@ -15523,10 +16679,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -15547,11 +16709,20 @@ "$ref": "#/components/schemas/Session.StructuredError" } }, - "required": ["sessionID", "error"], + "required": [ + "sessionID", + "error" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "session.execution.interrupted": { @@ -15573,7 +16744,9 @@ }, "type": { "type": "string", - "enum": ["session.execution.interrupted"] + "enum": [ + "session.execution.interrupted" + ] }, "durable": { "type": "object", @@ -15591,10 +16764,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -15613,14 +16792,27 @@ }, "reason": { "type": "string", - "enum": ["user", "shutdown", "superseded"] + "enum": [ + "user", + "shutdown", + "superseded" + ] } }, - "required": ["sessionID", "reason"], + "required": [ + "sessionID", + "reason" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "session.instructions.updated": { @@ -15642,7 +16834,9 @@ }, "type": { "type": "string", - "enum": ["session.instructions.updated"] + "enum": [ + "session.instructions.updated" + ] }, "durable": { "type": "object", @@ -15660,10 +16854,16 @@ }, "version": { "type": "number", - "enum": [2] + "enum": [ + 2 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -15694,7 +16894,9 @@ }, { "type": "string", - "enum": ["removed"] + "enum": [ + "removed" + ] } ] } @@ -15703,11 +16905,20 @@ "type": "string" } }, - "required": ["sessionID", "delta"], + "required": [ + "sessionID", + "delta" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "session.synthetic": { @@ -15729,7 +16940,9 @@ }, "type": { "type": "string", - "enum": ["session.synthetic"] + "enum": [ + "session.synthetic" + ] }, "durable": { "type": "object", @@ -15747,10 +16960,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -15777,11 +16996,20 @@ "type": "object" } }, - "required": ["sessionID", "text"], + "required": [ + "sessionID", + "text" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "session.skill.activated": { @@ -15803,7 +17031,9 @@ }, "type": { "type": "string", - "enum": ["session.skill.activated"] + "enum": [ + "session.skill.activated" + ] }, "durable": { "type": "object", @@ -15821,10 +17051,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -15851,11 +17087,22 @@ "type": "string" } }, - "required": ["sessionID", "id", "name", "text"], + "required": [ + "sessionID", + "id", + "name", + "text" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "Shell.Info": { @@ -15871,7 +17118,12 @@ }, "status": { "type": "string", - "enum": ["running", "exited", "timeout", "killed"] + "enum": [ + "running", + "exited", + "timeout", + "killed" + ] }, "command": { "type": "string" @@ -15909,11 +17161,22 @@ "type": "number" } }, - "required": ["started"], + "required": [ + "started" + ], "additionalProperties": false } }, - "required": ["id", "status", "command", "cwd", "shell", "file", "metadata", "time"], + "required": [ + "id", + "status", + "command", + "cwd", + "shell", + "file", + "metadata", + "time" + ], "additionalProperties": false }, "session.shell.started": { @@ -15935,7 +17198,9 @@ }, "type": { "type": "string", - "enum": ["session.shell.started"] + "enum": [ + "session.shell.started" + ] }, "durable": { "type": "object", @@ -15953,10 +17218,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -15977,11 +17248,20 @@ "$ref": "#/components/schemas/Shell.Info" } }, - "required": ["sessionID", "shell"], + "required": [ + "sessionID", + "shell" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "session.shell.ended": { @@ -16003,7 +17283,9 @@ }, "type": { "type": "string", - "enum": ["session.shell.ended"] + "enum": [ + "session.shell.ended" + ] }, "durable": { "type": "object", @@ -16021,10 +17303,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -16070,15 +17358,30 @@ "type": "boolean" } }, - "required": ["output", "cursor", "size", "truncated"], + "required": [ + "output", + "cursor", + "size", + "truncated" + ], "additionalProperties": false } }, - "required": ["sessionID", "shell", "output"], + "required": [ + "sessionID", + "shell", + "output" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "session.step.started": { @@ -16100,7 +17403,9 @@ }, "type": { "type": "string", - "enum": ["session.step.started"] + "enum": [ + "session.step.started" + ] }, "durable": { "type": "object", @@ -16118,10 +17423,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -16156,11 +17467,22 @@ "type": "string" } }, - "required": ["sessionID", "assistantMessageID", "agent", "model"], + "required": [ + "sessionID", + "assistantMessageID", + "agent", + "model" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "session.step.ended": { @@ -16182,7 +17504,9 @@ }, "type": { "type": "string", - "enum": ["session.step.ended"] + "enum": [ + "session.step.ended" + ] }, "durable": { "type": "object", @@ -16200,10 +17524,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -16230,7 +17560,14 @@ }, "finish": { "type": "string", - "enum": ["stop", "length", "tool-calls", "content-filter", "error", "unknown"] + "enum": [ + "stop", + "length", + "tool-calls", + "content-filter", + "error", + "unknown" + ] }, "cost": { "$ref": "#/components/schemas/Money.USD" @@ -16248,11 +17585,23 @@ } } }, - "required": ["sessionID", "assistantMessageID", "finish", "cost", "tokens"], + "required": [ + "sessionID", + "assistantMessageID", + "finish", + "cost", + "tokens" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "session.step.failed": { @@ -16274,7 +17623,9 @@ }, "type": { "type": "string", - "enum": ["session.step.failed"] + "enum": [ + "session.step.failed" + ] }, "durable": { "type": "object", @@ -16292,10 +17643,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -16339,11 +17696,21 @@ } } }, - "required": ["sessionID", "assistantMessageID", "error"], + "required": [ + "sessionID", + "assistantMessageID", + "error" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "session.text.started": { @@ -16365,7 +17732,9 @@ }, "type": { "type": "string", - "enum": ["session.text.started"] + "enum": [ + "session.text.started" + ] }, "durable": { "type": "object", @@ -16383,10 +17752,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -16420,11 +17795,21 @@ ] } }, - "required": ["sessionID", "assistantMessageID", "ordinal"], + "required": [ + "sessionID", + "assistantMessageID", + "ordinal" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "Session.Message.ProviderState4": { @@ -16449,7 +17834,9 @@ }, "type": { "type": "string", - "enum": ["session.text.ended"] + "enum": [ + "session.text.ended" + ] }, "durable": { "type": "object", @@ -16467,10 +17854,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -16510,11 +17903,22 @@ "$ref": "#/components/schemas/Session.Message.ProviderState4" } }, - "required": ["sessionID", "assistantMessageID", "ordinal", "text"], + "required": [ + "sessionID", + "assistantMessageID", + "ordinal", + "text" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "Session.Message.ProviderState5": { @@ -16539,7 +17943,9 @@ }, "type": { "type": "string", - "enum": ["session.reasoning.started"] + "enum": [ + "session.reasoning.started" + ] }, "durable": { "type": "object", @@ -16557,10 +17963,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -16597,11 +18009,21 @@ "$ref": "#/components/schemas/Session.Message.ProviderState5" } }, - "required": ["sessionID", "assistantMessageID", "ordinal"], + "required": [ + "sessionID", + "assistantMessageID", + "ordinal" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "Session.Message.ProviderState6": { @@ -16626,7 +18048,9 @@ }, "type": { "type": "string", - "enum": ["session.reasoning.ended"] + "enum": [ + "session.reasoning.ended" + ] }, "durable": { "type": "object", @@ -16644,10 +18068,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -16687,11 +18117,22 @@ "$ref": "#/components/schemas/Session.Message.ProviderState6" } }, - "required": ["sessionID", "assistantMessageID", "ordinal", "text"], + "required": [ + "sessionID", + "assistantMessageID", + "ordinal", + "text" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "session.tool.input.started": { @@ -16713,7 +18154,9 @@ }, "type": { "type": "string", - "enum": ["session.tool.input.started"] + "enum": [ + "session.tool.input.started" + ] }, "durable": { "type": "object", @@ -16731,10 +18174,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -16766,11 +18215,22 @@ "type": "string" } }, - "required": ["sessionID", "assistantMessageID", "id", "name"], + "required": [ + "sessionID", + "assistantMessageID", + "id", + "name" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "session.tool.input.ended": { @@ -16792,7 +18252,9 @@ }, "type": { "type": "string", - "enum": ["session.tool.input.ended"] + "enum": [ + "session.tool.input.ended" + ] }, "durable": { "type": "object", @@ -16810,10 +18272,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -16845,11 +18313,22 @@ "type": "string" } }, - "required": ["sessionID", "assistantMessageID", "id", "text"], + "required": [ + "sessionID", + "assistantMessageID", + "id", + "text" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "Session.Message.ProviderState7": { @@ -16874,7 +18353,9 @@ }, "type": { "type": "string", - "enum": ["session.tool.called"] + "enum": [ + "session.tool.called" + ] }, "durable": { "type": "object", @@ -16892,10 +18373,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -16933,11 +18420,23 @@ "$ref": "#/components/schemas/Session.Message.ProviderState7" } }, - "required": ["sessionID", "assistantMessageID", "id", "input", "executed"], + "required": [ + "sessionID", + "assistantMessageID", + "id", + "input", + "executed" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "Tool.FileContent1": { @@ -16945,7 +18444,9 @@ "properties": { "type": { "type": "string", - "enum": ["file"] + "enum": [ + "file" + ] }, "uri": { "type": "string" @@ -16964,7 +18465,11 @@ ] } }, - "required": ["type", "uri", "mime"], + "required": [ + "type", + "uri", + "mime" + ], "additionalProperties": false }, "Tool.Content1": { @@ -16999,7 +18504,9 @@ }, "type": { "type": "string", - "enum": ["session.tool.success"] + "enum": [ + "session.tool.success" + ] }, "durable": { "type": "object", @@ -17017,10 +18524,16 @@ }, "version": { "type": "number", - "enum": [2] + "enum": [ + 2 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -17070,11 +18583,23 @@ "$ref": "#/components/schemas/Session.Message.ProviderState8" } }, - "required": ["sessionID", "assistantMessageID", "id", "content", "executed"], + "required": [ + "sessionID", + "assistantMessageID", + "id", + "content", + "executed" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "Session.Message.ProviderState9": { @@ -17099,7 +18624,9 @@ }, "type": { "type": "string", - "enum": ["session.tool.failed"] + "enum": [ + "session.tool.failed" + ] }, "durable": { "type": "object", @@ -17117,10 +18644,16 @@ }, "version": { "type": "number", - "enum": [2] + "enum": [ + 2 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -17173,11 +18706,23 @@ "$ref": "#/components/schemas/Session.Message.ProviderState9" } }, - "required": ["sessionID", "assistantMessageID", "id", "error", "executed"], + "required": [ + "sessionID", + "assistantMessageID", + "id", + "error", + "executed" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "session.retry.scheduled": { @@ -17199,7 +18744,9 @@ }, "type": { "type": "string", - "enum": ["session.retry.scheduled"] + "enum": [ + "session.retry.scheduled" + ] }, "durable": { "type": "object", @@ -17217,10 +18764,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -17265,11 +18818,23 @@ "$ref": "#/components/schemas/Session.StructuredError" } }, - "required": ["sessionID", "assistantMessageID", "attempt", "at", "error"], + "required": [ + "sessionID", + "assistantMessageID", + "attempt", + "at", + "error" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "session.compaction.started": { @@ -17291,7 +18856,9 @@ }, "type": { "type": "string", - "enum": ["session.compaction.started"] + "enum": [ + "session.compaction.started" + ] }, "durable": { "type": "object", @@ -17309,10 +18876,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -17331,7 +18904,10 @@ }, "reason": { "type": "string", - "enum": ["auto", "manual"] + "enum": [ + "auto", + "manual" + ] }, "recent": { "type": "string" @@ -17345,11 +18921,21 @@ ] } }, - "required": ["sessionID", "reason", "recent"], + "required": [ + "sessionID", + "reason", + "recent" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "session.compaction.ended": { @@ -17371,7 +18957,9 @@ }, "type": { "type": "string", - "enum": ["session.compaction.ended"] + "enum": [ + "session.compaction.ended" + ] }, "durable": { "type": "object", @@ -17389,10 +18977,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -17411,7 +19005,10 @@ }, "reason": { "type": "string", - "enum": ["auto", "manual"] + "enum": [ + "auto", + "manual" + ] }, "text": { "type": "string" @@ -17420,11 +19017,22 @@ "type": "string" } }, - "required": ["sessionID", "reason", "text", "recent"], + "required": [ + "sessionID", + "reason", + "text", + "recent" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "session.compaction.failed": { @@ -17446,7 +19054,9 @@ }, "type": { "type": "string", - "enum": ["session.compaction.failed"] + "enum": [ + "session.compaction.failed" + ] }, "durable": { "type": "object", @@ -17464,10 +19074,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -17486,7 +19102,10 @@ }, "reason": { "type": "string", - "enum": ["auto", "manual"] + "enum": [ + "auto", + "manual" + ] }, "error": { "$ref": "#/components/schemas/Session.StructuredError" @@ -17500,11 +19119,21 @@ ] } }, - "required": ["sessionID", "reason", "error"], + "required": [ + "sessionID", + "reason", + "error" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "session.revert.staged": { @@ -17526,7 +19155,9 @@ }, "type": { "type": "string", - "enum": ["session.revert.staged"] + "enum": [ + "session.revert.staged" + ] }, "durable": { "type": "object", @@ -17544,10 +19175,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -17568,11 +19205,20 @@ "$ref": "#/components/schemas/Session.Revert" } }, - "required": ["sessionID", "revert"], + "required": [ + "sessionID", + "revert" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "session.revert.cleared": { @@ -17594,7 +19240,9 @@ }, "type": { "type": "string", - "enum": ["session.revert.cleared"] + "enum": [ + "session.revert.cleared" + ] }, "durable": { "type": "object", @@ -17612,10 +19260,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -17633,11 +19287,19 @@ ] } }, - "required": ["sessionID"], + "required": [ + "sessionID" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "session.revert.committed": { @@ -17659,7 +19321,9 @@ }, "type": { "type": "string", - "enum": ["session.revert.committed"] + "enum": [ + "session.revert.committed" + ] }, "durable": { "type": "object", @@ -17677,10 +19341,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -17706,11 +19376,20 @@ ] } }, - "required": ["sessionID", "to"], + "required": [ + "sessionID", + "to" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "session.usage.recorded": { @@ -17732,7 +19411,9 @@ }, "type": { "type": "string", - "enum": ["session.usage.recorded"] + "enum": [ + "session.usage.recorded" + ] }, "durable": { "type": "object", @@ -17750,10 +19431,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -17772,7 +19459,10 @@ }, "source": { "type": "string", - "enum": ["title", "compaction"] + "enum": [ + "title", + "compaction" + ] }, "cost": { "$ref": "#/components/schemas/Money.USD" @@ -17781,11 +19471,22 @@ "$ref": "#/components/schemas/TokenUsage.Info" } }, - "required": ["sessionID", "source", "cost", "tokens"], + "required": [ + "sessionID", + "source", + "cost", + "tokens" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "Session.Event.Durable": { @@ -17917,7 +19618,9 @@ "properties": { "type": { "type": "string", - "enum": ["log.synced"] + "enum": [ + "log.synced" + ] }, "aggregateID": { "type": "string" @@ -17931,7 +19634,10 @@ ] } }, - "required": ["type", "aggregateID"], + "required": [ + "type", + "aggregateID" + ], "additionalProperties": false, "description": "Marker emitted once when a log read reaches its captured watermark. The reader holds every event committed at or below seq." }, @@ -17988,14 +19694,21 @@ "additionalProperties": false } }, - "required": ["data", "cursor"], + "required": [ + "data", + "cursor" + ], "additionalProperties": false }, "Model.ReasoningField": { "anyOf": [ { "type": "string", - "enum": ["reasoning", "reasoning_content", "reasoning_text"] + "enum": [ + "reasoning", + "reasoning_content", + "reasoning_text" + ] }, { "type": "string" @@ -18004,7 +19717,10 @@ }, "Model.MaxTokensField": { "type": "string", - "enum": ["max_completion_tokens", "max_tokens"] + "enum": [ + "max_completion_tokens", + "max_tokens" + ] }, "Model.Compatibility": { "type": "object", @@ -18040,7 +19756,11 @@ } } }, - "required": ["tools", "input", "output"], + "required": [ + "tools", + "input", + "output" + ], "additionalProperties": false }, "Model.Variant": { @@ -18062,7 +19782,9 @@ "type": "object" } }, - "required": ["id"], + "required": [ + "id" + ], "additionalProperties": false }, "Money.USDPerMillionTokens": { @@ -18076,13 +19798,18 @@ "properties": { "type": { "type": "string", - "enum": ["context"] + "enum": [ + "context" + ] }, "size": { "type": "integer" } }, - "required": ["type", "size"], + "required": [ + "type", + "size" + ], "additionalProperties": false }, "input": { @@ -18101,11 +19828,18 @@ "$ref": "#/components/schemas/Money.USDPerMillionTokens" } }, - "required": ["read", "write"], + "required": [ + "read", + "write" + ], "additionalProperties": false } }, - "required": ["input", "output", "cache"], + "required": [ + "input", + "output", + "cache" + ], "additionalProperties": false }, "Model.Info": { @@ -18160,7 +19894,9 @@ "type": "number" } }, - "required": ["released"], + "required": [ + "released" + ], "additionalProperties": false }, "cost": { @@ -18171,7 +19907,12 @@ }, "status": { "type": "string", - "enum": ["alpha", "beta", "deprecated", "active"] + "enum": [ + "alpha", + "beta", + "deprecated", + "active" + ] }, "enabled": { "type": "boolean" @@ -18189,7 +19930,10 @@ "type": "integer" } }, - "required": ["context", "output"], + "required": [ + "context", + "output" + ], "additionalProperties": false } }, @@ -18218,11 +19962,15 @@ "type": "string" } }, - "required": ["text"], + "required": [ + "text" + ], "additionalProperties": false } }, - "required": ["data"], + "required": [ + "data" + ], "additionalProperties": false }, "Provider.Info": { @@ -18256,7 +20004,11 @@ "type": "object" } }, - "required": ["id", "name", "package"], + "required": [ + "id", + "name", + "package" + ], "additionalProperties": false }, "ProviderNotFoundError": { @@ -18264,7 +20016,9 @@ "properties": { "_tag": { "type": "string", - "enum": ["ProviderNotFoundError"] + "enum": [ + "ProviderNotFoundError" + ] }, "providerID": { "type": "string" @@ -18273,7 +20027,11 @@ "type": "string" } }, - "required": ["_tag", "providerID", "message"], + "required": [ + "_tag", + "providerID", + "message" + ], "additionalProperties": false }, "Form.When": { @@ -18284,7 +20042,10 @@ }, "op": { "type": "string", - "enum": ["eq", "neq"] + "enum": [ + "eq", + "neq" + ] }, "value": { "anyOf": [ @@ -18300,21 +20061,31 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, { "type": "string", - "enum": ["Infinity", "-Infinity", "NaN"] + "enum": [ + "Infinity", + "-Infinity", + "NaN" + ] } ] }, @@ -18324,7 +20095,11 @@ ] } }, - "required": ["key", "op", "value"], + "required": [ + "key", + "op", + "value" + ], "additionalProperties": false }, "Form.Option": { @@ -18340,7 +20115,10 @@ "type": "string" } }, - "required": ["value", "label"], + "required": [ + "value", + "label" + ], "additionalProperties": false }, "Form.StringField": { @@ -18366,11 +20144,18 @@ }, "type": { "type": "string", - "enum": ["string"] + "enum": [ + "string" + ] }, "format": { "type": "string", - "enum": ["email", "uri", "date", "date-time"] + "enum": [ + "email", + "uri", + "date", + "date-time" + ] }, "minLength": { "type": "integer", @@ -18407,7 +20192,10 @@ "type": "boolean" } }, - "required": ["key", "type"], + "required": [ + "key", + "type" + ], "additionalProperties": false }, "Form.NumberField": { @@ -18433,7 +20221,9 @@ }, "type": { "type": "string", - "enum": ["number"] + "enum": [ + "number" + ] }, "minimum": { "anyOf": [ @@ -18444,21 +20234,31 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, { "type": "string", - "enum": ["Infinity", "-Infinity", "NaN"] + "enum": [ + "Infinity", + "-Infinity", + "NaN" + ] } ] }, @@ -18471,21 +20271,31 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, { "type": "string", - "enum": ["Infinity", "-Infinity", "NaN"] + "enum": [ + "Infinity", + "-Infinity", + "NaN" + ] } ] }, @@ -18498,26 +20308,39 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, { "type": "string", - "enum": ["Infinity", "-Infinity", "NaN"] + "enum": [ + "Infinity", + "-Infinity", + "NaN" + ] } ] } }, - "required": ["key", "type"], + "required": [ + "key", + "type" + ], "additionalProperties": false }, "Form.IntegerField": { @@ -18543,7 +20366,9 @@ }, "type": { "type": "string", - "enum": ["integer"] + "enum": [ + "integer" + ] }, "minimum": { "anyOf": [ @@ -18554,21 +20379,31 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, { "type": "string", - "enum": ["Infinity", "-Infinity", "NaN"] + "enum": [ + "Infinity", + "-Infinity", + "NaN" + ] } ] }, @@ -18581,21 +20416,31 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, { "type": "string", - "enum": ["Infinity", "-Infinity", "NaN"] + "enum": [ + "Infinity", + "-Infinity", + "NaN" + ] } ] }, @@ -18608,26 +20453,39 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, { "type": "string", - "enum": ["Infinity", "-Infinity", "NaN"] + "enum": [ + "Infinity", + "-Infinity", + "NaN" + ] } ] } }, - "required": ["key", "type"], + "required": [ + "key", + "type" + ], "additionalProperties": false }, "Form.BooleanField": { @@ -18653,13 +20511,18 @@ }, "type": { "type": "string", - "enum": ["boolean"] + "enum": [ + "boolean" + ] }, "default": { "type": "boolean" } }, - "required": ["key", "type"], + "required": [ + "key", + "type" + ], "additionalProperties": false }, "Form.MultiselectField": { @@ -18685,7 +20548,9 @@ }, "type": { "type": "string", - "enum": ["multiselect"] + "enum": [ + "multiselect" + ] }, "options": { "type": "array", @@ -18719,7 +20584,11 @@ } } }, - "required": ["key", "type", "options"], + "required": [ + "key", + "type", + "options" + ], "additionalProperties": false }, "Form.ExternalField": { @@ -18730,7 +20599,9 @@ }, "type": { "type": "string", - "enum": ["external"] + "enum": [ + "external" + ] }, "url": { "type": "string" @@ -18742,7 +20613,11 @@ "type": "string" } }, - "required": ["key", "type", "url"], + "required": [ + "key", + "type", + "url" + ], "additionalProperties": false }, "Form.Field": { @@ -18787,7 +20662,9 @@ }, "type": { "type": "string", - "enum": ["oauth"] + "enum": [ + "oauth" + ] }, "label": { "type": "string" @@ -18796,7 +20673,11 @@ "$ref": "#/components/schemas/Form.Fields" } }, - "required": ["id", "type", "label"], + "required": [ + "id", + "type", + "label" + ], "additionalProperties": false }, "Integration.CommandMethod": { @@ -18807,7 +20688,9 @@ }, "type": { "type": "string", - "enum": ["command"] + "enum": [ + "command" + ] }, "label": { "type": "string" @@ -18819,7 +20702,12 @@ } } }, - "required": ["id", "type", "label", "command"], + "required": [ + "id", + "type", + "label", + "command" + ], "additionalProperties": false }, "Integration.KeyMethod": { @@ -18827,7 +20715,9 @@ "properties": { "type": { "type": "string", - "enum": ["key"] + "enum": [ + "key" + ] }, "label": { "type": "string" @@ -18836,7 +20726,9 @@ "$ref": "#/components/schemas/Form.Fields" } }, - "required": ["type"], + "required": [ + "type" + ], "additionalProperties": false }, "Integration.EnvMethod": { @@ -18844,7 +20736,9 @@ "properties": { "type": { "type": "string", - "enum": ["env"] + "enum": [ + "env" + ] }, "names": { "type": "array", @@ -18853,7 +20747,10 @@ } } }, - "required": ["type", "names"], + "required": [ + "type", + "names" + ], "additionalProperties": false }, "Integration.Method": { @@ -18877,7 +20774,9 @@ "properties": { "type": { "type": "string", - "enum": ["credential"] + "enum": [ + "credential" + ] }, "id": { "type": "string" @@ -18886,7 +20785,11 @@ "type": "string" } }, - "required": ["type", "id", "label"], + "required": [ + "type", + "id", + "label" + ], "additionalProperties": false }, "Connection.EnvInfo": { @@ -18894,13 +20797,18 @@ "properties": { "type": { "type": "string", - "enum": ["env"] + "enum": [ + "env" + ] }, "name": { "type": "string" } }, - "required": ["type", "name"], + "required": [ + "type", + "name" + ], "additionalProperties": false }, "Connection.Info": { @@ -18935,7 +20843,12 @@ } } }, - "required": ["id", "name", "methods", "connections"], + "required": [ + "id", + "name", + "methods", + "connections" + ], "additionalProperties": false }, "Form.Value": { @@ -18952,21 +20865,31 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, { "type": "string", - "enum": ["Infinity", "-Infinity", "NaN"] + "enum": [ + "Infinity", + "-Infinity", + "NaN" + ] } ] }, @@ -19001,7 +20924,10 @@ }, "mode": { "type": "string", - "enum": ["auto", "code"] + "enum": [ + "auto", + "code" + ] }, "time": { "type": "object", @@ -19015,21 +20941,31 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, { "type": "string", - "enum": ["Infinity", "-Infinity", "NaN"] + "enum": [ + "Infinity", + "-Infinity", + "NaN" + ] } ] }, @@ -19042,30 +20978,49 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, { "type": "string", - "enum": ["Infinity", "-Infinity", "NaN"] + "enum": [ + "Infinity", + "-Infinity", + "NaN" + ] } ] } }, - "required": ["created", "expires"], + "required": [ + "created", + "expires" + ], "additionalProperties": false } }, - "required": ["attemptID", "url", "instructions", "mode", "time"], + "required": [ + "attemptID", + "url", + "instructions", + "mode", + "time" + ], "additionalProperties": false }, "Integration.AttemptStatus": { @@ -19075,7 +21030,9 @@ "properties": { "status": { "type": "string", - "enum": ["pending"] + "enum": [ + "pending" + ] }, "time": { "type": "object", @@ -19089,21 +21046,31 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, { "type": "string", - "enum": ["Infinity", "-Infinity", "NaN"] + "enum": [ + "Infinity", + "-Infinity", + "NaN" + ] } ] }, @@ -19116,30 +21083,46 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, { "type": "string", - "enum": ["Infinity", "-Infinity", "NaN"] + "enum": [ + "Infinity", + "-Infinity", + "NaN" + ] } ] } }, - "required": ["created", "expires"], + "required": [ + "created", + "expires" + ], "additionalProperties": false } }, - "required": ["status", "time"], + "required": [ + "status", + "time" + ], "additionalProperties": false }, { @@ -19147,7 +21130,9 @@ "properties": { "status": { "type": "string", - "enum": ["complete"] + "enum": [ + "complete" + ] }, "time": { "type": "object", @@ -19161,21 +21146,31 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, { "type": "string", - "enum": ["Infinity", "-Infinity", "NaN"] + "enum": [ + "Infinity", + "-Infinity", + "NaN" + ] } ] }, @@ -19188,30 +21183,46 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, { "type": "string", - "enum": ["Infinity", "-Infinity", "NaN"] + "enum": [ + "Infinity", + "-Infinity", + "NaN" + ] } ] } }, - "required": ["created", "expires"], + "required": [ + "created", + "expires" + ], "additionalProperties": false } }, - "required": ["status", "time"], + "required": [ + "status", + "time" + ], "additionalProperties": false }, { @@ -19219,7 +21230,9 @@ "properties": { "status": { "type": "string", - "enum": ["failed"] + "enum": [ + "failed" + ] }, "message": { "type": "string" @@ -19236,21 +21249,31 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, { "type": "string", - "enum": ["Infinity", "-Infinity", "NaN"] + "enum": [ + "Infinity", + "-Infinity", + "NaN" + ] } ] }, @@ -19263,30 +21286,47 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, { "type": "string", - "enum": ["Infinity", "-Infinity", "NaN"] + "enum": [ + "Infinity", + "-Infinity", + "NaN" + ] } ] } }, - "required": ["created", "expires"], + "required": [ + "created", + "expires" + ], "additionalProperties": false } }, - "required": ["status", "message", "time"], + "required": [ + "status", + "message", + "time" + ], "additionalProperties": false }, { @@ -19294,7 +21334,9 @@ "properties": { "status": { "type": "string", - "enum": ["expired"] + "enum": [ + "expired" + ] }, "time": { "type": "object", @@ -19308,21 +21350,31 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, { "type": "string", - "enum": ["Infinity", "-Infinity", "NaN"] + "enum": [ + "Infinity", + "-Infinity", + "NaN" + ] } ] }, @@ -19335,30 +21387,46 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, { "type": "string", - "enum": ["Infinity", "-Infinity", "NaN"] + "enum": [ + "Infinity", + "-Infinity", + "NaN" + ] } ] } }, - "required": ["created", "expires"], + "required": [ + "created", + "expires" + ], "additionalProperties": false } }, - "required": ["status", "time"], + "required": [ + "status", + "time" + ], "additionalProperties": false } ] @@ -19381,21 +21449,31 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, { "type": "string", - "enum": ["Infinity", "-Infinity", "NaN"] + "enum": [ + "Infinity", + "-Infinity", + "NaN" + ] } ] }, @@ -19408,30 +21486,46 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, { "type": "string", - "enum": ["Infinity", "-Infinity", "NaN"] + "enum": [ + "Infinity", + "-Infinity", + "NaN" + ] } ] } }, - "required": ["created", "expires"], + "required": [ + "created", + "expires" + ], "additionalProperties": false } }, - "required": ["attemptID", "time"], + "required": [ + "attemptID", + "time" + ], "additionalProperties": false }, "Integration.CommandAttemptStatus": { @@ -19441,7 +21535,9 @@ "properties": { "status": { "type": "string", - "enum": ["pending"] + "enum": [ + "pending" + ] }, "message": { "type": "string" @@ -19458,21 +21554,31 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, { "type": "string", - "enum": ["Infinity", "-Infinity", "NaN"] + "enum": [ + "Infinity", + "-Infinity", + "NaN" + ] } ] }, @@ -19485,30 +21591,46 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, { "type": "string", - "enum": ["Infinity", "-Infinity", "NaN"] + "enum": [ + "Infinity", + "-Infinity", + "NaN" + ] } ] } }, - "required": ["created", "expires"], + "required": [ + "created", + "expires" + ], "additionalProperties": false } }, - "required": ["status", "time"], + "required": [ + "status", + "time" + ], "additionalProperties": false }, { @@ -19516,7 +21638,9 @@ "properties": { "status": { "type": "string", - "enum": ["complete"] + "enum": [ + "complete" + ] }, "time": { "type": "object", @@ -19530,21 +21654,31 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, { "type": "string", - "enum": ["Infinity", "-Infinity", "NaN"] + "enum": [ + "Infinity", + "-Infinity", + "NaN" + ] } ] }, @@ -19557,30 +21691,46 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, { "type": "string", - "enum": ["Infinity", "-Infinity", "NaN"] + "enum": [ + "Infinity", + "-Infinity", + "NaN" + ] } ] } }, - "required": ["created", "expires"], + "required": [ + "created", + "expires" + ], "additionalProperties": false } }, - "required": ["status", "time"], + "required": [ + "status", + "time" + ], "additionalProperties": false }, { @@ -19588,7 +21738,9 @@ "properties": { "status": { "type": "string", - "enum": ["failed"] + "enum": [ + "failed" + ] }, "message": { "type": "string" @@ -19605,21 +21757,31 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, { "type": "string", - "enum": ["Infinity", "-Infinity", "NaN"] + "enum": [ + "Infinity", + "-Infinity", + "NaN" + ] } ] }, @@ -19632,30 +21794,47 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, { "type": "string", - "enum": ["Infinity", "-Infinity", "NaN"] + "enum": [ + "Infinity", + "-Infinity", + "NaN" + ] } ] } }, - "required": ["created", "expires"], + "required": [ + "created", + "expires" + ], "additionalProperties": false } }, - "required": ["status", "message", "time"], + "required": [ + "status", + "message", + "time" + ], "additionalProperties": false }, { @@ -19663,7 +21842,9 @@ "properties": { "status": { "type": "string", - "enum": ["expired"] + "enum": [ + "expired" + ] }, "time": { "type": "object", @@ -19677,21 +21858,31 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, { "type": "string", - "enum": ["Infinity", "-Infinity", "NaN"] + "enum": [ + "Infinity", + "-Infinity", + "NaN" + ] } ] }, @@ -19704,30 +21895,46 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, { "type": "string", - "enum": ["Infinity", "-Infinity", "NaN"] + "enum": [ + "Infinity", + "-Infinity", + "NaN" + ] } ] } }, - "required": ["created", "expires"], + "required": [ + "created", + "expires" + ], "additionalProperties": false } }, - "required": ["status", "time"], + "required": [ + "status", + "time" + ], "additionalProperties": false } ] @@ -19737,10 +21944,14 @@ "properties": { "status": { "type": "string", - "enum": ["connected"] + "enum": [ + "connected" + ] } }, - "required": ["status"], + "required": [ + "status" + ], "additionalProperties": false }, "Mcp.Status.Pending": { @@ -19748,10 +21959,14 @@ "properties": { "status": { "type": "string", - "enum": ["pending"] + "enum": [ + "pending" + ] } }, - "required": ["status"], + "required": [ + "status" + ], "additionalProperties": false }, "Mcp.Status.Disabled": { @@ -19759,10 +21974,14 @@ "properties": { "status": { "type": "string", - "enum": ["disabled"] + "enum": [ + "disabled" + ] } }, - "required": ["status"], + "required": [ + "status" + ], "additionalProperties": false }, "Mcp.Status.Failed": { @@ -19770,13 +21989,18 @@ "properties": { "status": { "type": "string", - "enum": ["failed"] + "enum": [ + "failed" + ] }, "error": { "type": "string" } }, - "required": ["status", "error"], + "required": [ + "status", + "error" + ], "additionalProperties": false }, "Mcp.Status.NeedsAuth": { @@ -19784,10 +22008,14 @@ "properties": { "status": { "type": "string", - "enum": ["needs_auth"] + "enum": [ + "needs_auth" + ] } }, - "required": ["status"], + "required": [ + "status" + ], "additionalProperties": false }, "Mcp.Server": { @@ -19819,7 +22047,10 @@ "type": "string" } }, - "required": ["name", "status"], + "required": [ + "name", + "status" + ], "additionalProperties": false }, "Mcp.LocalConfig": { @@ -19827,7 +22058,9 @@ "properties": { "type": { "type": "string", - "enum": ["local"] + "enum": [ + "local" + ] }, "command": { "type": "array", @@ -19881,7 +22114,10 @@ "additionalProperties": false } }, - "required": ["type", "command"], + "required": [ + "type", + "command" + ], "additionalProperties": false }, "Mcp.OAuthConfig": { @@ -19916,7 +22152,9 @@ "properties": { "type": { "type": "string", - "enum": ["remote"] + "enum": [ + "remote" + ] }, "url": { "type": "string" @@ -19934,7 +22172,9 @@ }, { "type": "boolean", - "enum": [false] + "enum": [ + false + ] } ] }, @@ -19975,7 +22215,10 @@ "additionalProperties": false } }, - "required": ["type", "url"], + "required": [ + "type", + "url" + ], "additionalProperties": false }, "McpServerNotFoundError": { @@ -19983,7 +22226,9 @@ "properties": { "_tag": { "type": "string", - "enum": ["McpServerNotFoundError"] + "enum": [ + "McpServerNotFoundError" + ] }, "server": { "type": "string" @@ -19992,7 +22237,11 @@ "type": "string" } }, - "required": ["_tag", "server", "message"], + "required": [ + "_tag", + "server", + "message" + ], "additionalProperties": false }, "Mcp.Resource": { @@ -20014,7 +22263,11 @@ "type": "string" } }, - "required": ["server", "name", "uri"], + "required": [ + "server", + "name", + "uri" + ], "additionalProperties": false }, "Mcp.ResourceTemplate": { @@ -20036,7 +22289,11 @@ "type": "string" } }, - "required": ["server", "name", "uriTemplate"], + "required": [ + "server", + "name", + "uriTemplate" + ], "additionalProperties": false }, "Mcp.ResourceCatalog": { @@ -20055,12 +22312,18 @@ } } }, - "required": ["resources", "templates"], + "required": [ + "resources", + "templates" + ], "additionalProperties": false }, "Project.Vcs": { "type": "string", - "enum": ["git", "hg"] + "enum": [ + "git", + "hg" + ] }, "Project.Icon": { "type": "object", @@ -20115,7 +22378,10 @@ ] } }, - "required": ["created", "updated"], + "required": [ + "created", + "updated" + ], "additionalProperties": false }, "Project": { @@ -20149,7 +22415,12 @@ } } }, - "required": ["id", "canonical", "time", "sandboxes"], + "required": [ + "id", + "canonical", + "time", + "sandboxes" + ], "additionalProperties": false }, "Project.Current": { @@ -20165,28 +22436,13 @@ "type": "string" } }, - "required": ["id", "directory", "canonical"], + "required": [ + "id", + "directory", + "canonical" + ], "additionalProperties": false }, - "Project.Directory": { - "type": "object", - "properties": { - "directory": { - "type": "string" - }, - "strategy": { - "type": "string" - } - }, - "required": ["directory"], - "additionalProperties": false - }, - "Project.Directories": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Project.Directory" - } - }, "Form.Metadata": { "type": "object" }, @@ -20214,7 +22470,12 @@ "$ref": "#/components/schemas/Form.Fields" } }, - "required": ["id", "sessionID", "title", "fields"], + "required": [ + "id", + "sessionID", + "title", + "fields" + ], "additionalProperties": false }, "Form.CreatePayload": { @@ -20245,7 +22506,10 @@ "$ref": "#/components/schemas/Form.Fields" } }, - "required": ["title", "fields"], + "required": [ + "title", + "fields" + ], "additionalProperties": false }, "FormNotFoundError": { @@ -20253,7 +22517,9 @@ "properties": { "_tag": { "type": "string", - "enum": ["FormNotFoundError"] + "enum": [ + "FormNotFoundError" + ] }, "id": { "type": "string" @@ -20262,7 +22528,11 @@ "type": "string" } }, - "required": ["_tag", "id", "message"], + "required": [ + "_tag", + "id", + "message" + ], "additionalProperties": false }, "Form.State": { @@ -20272,10 +22542,14 @@ "properties": { "status": { "type": "string", - "enum": ["pending"] + "enum": [ + "pending" + ] } }, - "required": ["status"], + "required": [ + "status" + ], "additionalProperties": false }, { @@ -20283,13 +22557,18 @@ "properties": { "status": { "type": "string", - "enum": ["answered"] + "enum": [ + "answered" + ] }, "answer": { "$ref": "#/components/schemas/Form.Answer" } }, - "required": ["status", "answer"], + "required": [ + "status", + "answer" + ], "additionalProperties": false }, { @@ -20297,10 +22576,14 @@ "properties": { "status": { "type": "string", - "enum": ["cancelled"] + "enum": [ + "cancelled" + ] } }, - "required": ["status"], + "required": [ + "status" + ], "additionalProperties": false } ] @@ -20312,7 +22595,9 @@ "$ref": "#/components/schemas/Form.Answer" } }, - "required": ["answer"], + "required": [ + "answer" + ], "additionalProperties": false }, "FormAlreadySettledError": { @@ -20320,7 +22605,9 @@ "properties": { "_tag": { "type": "string", - "enum": ["FormAlreadySettledError"] + "enum": [ + "FormAlreadySettledError" + ] }, "id": { "type": "string" @@ -20329,7 +22616,11 @@ "type": "string" } }, - "required": ["_tag", "id", "message"], + "required": [ + "_tag", + "id", + "message" + ], "additionalProperties": false }, "FormInvalidAnswerError": { @@ -20337,7 +22628,9 @@ "properties": { "_tag": { "type": "string", - "enum": ["FormInvalidAnswerError"] + "enum": [ + "FormInvalidAnswerError" + ] }, "id": { "type": "string" @@ -20346,7 +22639,11 @@ "type": "string" } }, - "required": ["_tag", "id", "message"], + "required": [ + "_tag", + "id", + "message" + ], "additionalProperties": false }, "Permission.Source": { @@ -20356,7 +22653,9 @@ "properties": { "type": { "type": "string", - "enum": ["tool"] + "enum": [ + "tool" + ] }, "messageID": { "type": "string" @@ -20365,7 +22664,11 @@ "type": "string" } }, - "required": ["type", "messageID", "id"], + "required": [ + "type", + "messageID", + "id" + ], "additionalProperties": false } ] @@ -20414,7 +22717,12 @@ "$ref": "#/components/schemas/Permission.Source" } }, - "required": ["id", "sessionID", "action", "resources"], + "required": [ + "id", + "sessionID", + "action", + "resources" + ], "additionalProperties": false }, "PermissionSaved.Info": { @@ -20433,7 +22741,12 @@ "type": "string" } }, - "required": ["id", "projectID", "action", "resource"], + "required": [ + "id", + "projectID", + "action", + "resource" + ], "additionalProperties": false }, "PermissionNotFoundError": { @@ -20441,7 +22754,9 @@ "properties": { "_tag": { "type": "string", - "enum": ["PermissionNotFoundError"] + "enum": [ + "PermissionNotFoundError" + ] }, "requestID": { "type": "string" @@ -20450,12 +22765,20 @@ "type": "string" } }, - "required": ["_tag", "requestID", "message"], + "required": [ + "_tag", + "requestID", + "message" + ], "additionalProperties": false }, "Permission.Reply": { "type": "string", - "enum": ["once", "always", "reject"] + "enum": [ + "once", + "always", + "reject" + ] }, "FileSystem.Entry": { "type": "object", @@ -20465,10 +22788,16 @@ }, "type": { "type": "string", - "enum": ["file", "directory"] + "enum": [ + "file", + "directory" + ] } }, - "required": ["path", "type"], + "required": [ + "path", + "type" + ], "additionalProperties": false }, "Command.Info": { @@ -20493,7 +22822,10 @@ "type": "boolean" } }, - "required": ["name", "template"], + "required": [ + "name", + "template" + ], "additionalProperties": false }, "Skill.Info": { @@ -20521,7 +22853,12 @@ "type": "string" } }, - "required": ["id", "name", "location", "content"], + "required": [ + "id", + "name", + "location", + "content" + ], "additionalProperties": false }, "models-dev.refreshed": { @@ -20543,7 +22880,9 @@ }, "type": { "type": "string", - "enum": ["models-dev.refreshed"] + "enum": [ + "models-dev.refreshed" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -20559,7 +22898,12 @@ ] } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "integration.updated": { @@ -20581,7 +22925,9 @@ }, "type": { "type": "string", - "enum": ["integration.updated"] + "enum": [ + "integration.updated" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -20597,7 +22943,12 @@ ] } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "integration.connection.updated": { @@ -20619,7 +22970,9 @@ }, "type": { "type": "string", - "enum": ["integration.connection.updated"] + "enum": [ + "integration.connection.updated" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -20631,11 +22984,18 @@ "type": "string" } }, - "required": ["integrationID"], + "required": [ + "integrationID" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "catalog.updated": { @@ -20657,7 +23017,9 @@ }, "type": { "type": "string", - "enum": ["catalog.updated"] + "enum": [ + "catalog.updated" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -20673,7 +23035,12 @@ ] } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "agent.updated": { @@ -20695,7 +23062,9 @@ }, "type": { "type": "string", - "enum": ["agent.updated"] + "enum": [ + "agent.updated" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -20711,7 +23080,12 @@ ] } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "session.usage.updated": { @@ -20733,7 +23107,9 @@ }, "type": { "type": "string", - "enum": ["session.usage.updated"] + "enum": [ + "session.usage.updated" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -20756,11 +23132,20 @@ "$ref": "#/components/schemas/TokenUsage.Info" } }, - "required": ["sessionID", "cost", "tokens"], + "required": [ + "sessionID", + "cost", + "tokens" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "session.text.delta": { @@ -20782,7 +23167,9 @@ }, "type": { "type": "string", - "enum": ["session.text.delta"] + "enum": [ + "session.text.delta" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -20818,11 +23205,21 @@ "type": "string" } }, - "required": ["sessionID", "assistantMessageID", "ordinal", "delta"], + "required": [ + "sessionID", + "assistantMessageID", + "ordinal", + "delta" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "session.reasoning.delta": { @@ -20844,7 +23241,9 @@ }, "type": { "type": "string", - "enum": ["session.reasoning.delta"] + "enum": [ + "session.reasoning.delta" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -20880,11 +23279,21 @@ "type": "string" } }, - "required": ["sessionID", "assistantMessageID", "ordinal", "delta"], + "required": [ + "sessionID", + "assistantMessageID", + "ordinal", + "delta" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "session.tool.input.delta": { @@ -20906,7 +23315,9 @@ }, "type": { "type": "string", - "enum": ["session.tool.input.delta"] + "enum": [ + "session.tool.input.delta" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -20937,11 +23348,21 @@ "type": "string" } }, - "required": ["sessionID", "assistantMessageID", "id", "delta"], + "required": [ + "sessionID", + "assistantMessageID", + "id", + "delta" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "session.tool.progress": { @@ -20963,7 +23384,9 @@ }, "type": { "type": "string", - "enum": ["session.tool.progress"] + "enum": [ + "session.tool.progress" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -20994,11 +23417,21 @@ "type": "object" } }, - "required": ["sessionID", "assistantMessageID", "id", "metadata"], + "required": [ + "sessionID", + "assistantMessageID", + "id", + "metadata" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "session.compaction.delta": { @@ -21020,7 +23453,9 @@ }, "type": { "type": "string", - "enum": ["session.compaction.delta"] + "enum": [ + "session.compaction.delta" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -21040,11 +23475,19 @@ "type": "string" } }, - "required": ["sessionID", "text"], + "required": [ + "sessionID", + "text" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "filesystem.changed": { @@ -21066,7 +23509,9 @@ }, "type": { "type": "string", - "enum": ["filesystem.changed"] + "enum": [ + "filesystem.changed" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -21079,14 +23524,26 @@ }, "event": { "type": "string", - "enum": ["add", "change", "unlink"] + "enum": [ + "add", + "change", + "unlink" + ] } }, - "required": ["file", "event"], + "required": [ + "file", + "event" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "reference.updated": { @@ -21108,7 +23565,9 @@ }, "type": { "type": "string", - "enum": ["reference.updated"] + "enum": [ + "reference.updated" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -21124,7 +23583,12 @@ ] } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "permission.asked": { @@ -21146,7 +23610,9 @@ }, "type": { "type": "string", - "enum": ["permission.asked"] + "enum": [ + "permission.asked" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -21195,11 +23661,21 @@ "$ref": "#/components/schemas/Permission.Source" } }, - "required": ["id", "sessionID", "action", "resources"], + "required": [ + "id", + "sessionID", + "action", + "resources" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "permission.replied": { @@ -21221,7 +23697,9 @@ }, "type": { "type": "string", - "enum": ["permission.replied"] + "enum": [ + "permission.replied" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -21249,11 +23727,20 @@ "$ref": "#/components/schemas/Permission.Reply" } }, - "required": ["sessionID", "requestID", "reply"], + "required": [ + "sessionID", + "requestID", + "reply" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "plugin.added": { @@ -21275,7 +23762,9 @@ }, "type": { "type": "string", - "enum": ["plugin.added"] + "enum": [ + "plugin.added" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -21287,11 +23776,18 @@ "type": "string" } }, - "required": ["id"], + "required": [ + "id" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "plugin.updated": { @@ -21313,7 +23809,9 @@ }, "type": { "type": "string", - "enum": ["plugin.updated"] + "enum": [ + "plugin.updated" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -21329,10 +23827,15 @@ ] } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, - "project.directories.updated": { + "worktree.updated": { "type": "object", "properties": { "id": { @@ -21351,7 +23854,9 @@ }, "type": { "type": "string", - "enum": ["project.directories.updated"] + "enum": [ + "worktree.updated" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -21363,14 +23868,21 @@ "type": "string" } }, - "required": ["projectID"], + "required": [ + "projectID" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, - "project.directory.resolved": { + "worktree.resolved": { "type": "object", "properties": { "id": { @@ -21389,7 +23901,9 @@ }, "type": { "type": "string", - "enum": ["project.directory.resolved"] + "enum": [ + "worktree.resolved" + ] }, "durable": { "type": "object", @@ -21407,10 +23921,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -21429,11 +23949,21 @@ "type": "string" } }, - "required": ["projectID", "directory", "previous"], + "required": [ + "projectID", + "directory", + "previous" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "command.updated": { @@ -21455,7 +23985,9 @@ }, "type": { "type": "string", - "enum": ["command.updated"] + "enum": [ + "command.updated" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -21471,7 +24003,12 @@ ] } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "config.updated": { @@ -21493,7 +24030,9 @@ }, "type": { "type": "string", - "enum": ["config.updated"] + "enum": [ + "config.updated" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -21509,7 +24048,12 @@ ] } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "skill.updated": { @@ -21531,7 +24075,9 @@ }, "type": { "type": "string", - "enum": ["skill.updated"] + "enum": [ + "skill.updated" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -21547,7 +24093,12 @@ ] } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "Pty": { @@ -21578,7 +24129,10 @@ }, "status": { "type": "string", - "enum": ["running", "exited"] + "enum": [ + "running", + "exited" + ] }, "pid": { "type": "integer", @@ -21597,7 +24151,15 @@ ] } }, - "required": ["id", "title", "command", "args", "cwd", "status", "pid"], + "required": [ + "id", + "title", + "command", + "args", + "cwd", + "status", + "pid" + ], "additionalProperties": false }, "pty.created": { @@ -21619,7 +24181,9 @@ }, "type": { "type": "string", - "enum": ["pty.created"] + "enum": [ + "pty.created" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -21631,11 +24195,18 @@ "$ref": "#/components/schemas/Pty" } }, - "required": ["info"], + "required": [ + "info" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "pty.updated": { @@ -21657,7 +24228,9 @@ }, "type": { "type": "string", - "enum": ["pty.updated"] + "enum": [ + "pty.updated" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -21669,11 +24242,18 @@ "$ref": "#/components/schemas/Pty" } }, - "required": ["info"], + "required": [ + "info" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "pty.exited": { @@ -21695,7 +24275,9 @@ }, "type": { "type": "string", - "enum": ["pty.exited"] + "enum": [ + "pty.exited" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -21720,11 +24302,19 @@ ] } }, - "required": ["id", "exitCode"], + "required": [ + "id", + "exitCode" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "pty.deleted": { @@ -21746,7 +24336,9 @@ }, "type": { "type": "string", - "enum": ["pty.deleted"] + "enum": [ + "pty.deleted" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -21763,11 +24355,18 @@ ] } }, - "required": ["id"], + "required": [ + "id" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "shell.created": { @@ -21789,7 +24388,9 @@ }, "type": { "type": "string", - "enum": ["shell.created"] + "enum": [ + "shell.created" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -21801,11 +24402,18 @@ "$ref": "#/components/schemas/Shell.Info" } }, - "required": ["info"], + "required": [ + "info" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "shell.exited": { @@ -21827,7 +24435,9 @@ }, "type": { "type": "string", - "enum": ["shell.exited"] + "enum": [ + "shell.exited" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -21848,14 +24458,27 @@ }, "status": { "type": "string", - "enum": ["running", "exited", "timeout", "killed"] + "enum": [ + "running", + "exited", + "timeout", + "killed" + ] } }, - "required": ["id", "status"], + "required": [ + "id", + "status" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "shell.deleted": { @@ -21877,7 +24500,9 @@ }, "type": { "type": "string", - "enum": ["shell.deleted"] + "enum": [ + "shell.deleted" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -21894,11 +24519,18 @@ ] } }, - "required": ["id"], + "required": [ + "id" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "Question.Option": { @@ -21913,7 +24545,10 @@ "description": "Explanation of choice" } }, - "required": ["label", "description"], + "required": [ + "label", + "description" + ], "additionalProperties": false }, "Question.Info": { @@ -21941,7 +24576,11 @@ "type": "boolean" } }, - "required": ["question", "header", "options"], + "required": [ + "question", + "header", + "options" + ], "additionalProperties": false }, "Question.Tool": { @@ -21954,7 +24593,10 @@ "type": "string" } }, - "required": ["messageID", "id"], + "required": [ + "messageID", + "id" + ], "additionalProperties": false }, "question.asked": { @@ -21976,7 +24618,9 @@ }, "type": { "type": "string", - "enum": ["question.asked"] + "enum": [ + "question.asked" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -22011,11 +24655,20 @@ "$ref": "#/components/schemas/Question.Tool" } }, - "required": ["id", "sessionID", "questions"], + "required": [ + "id", + "sessionID", + "questions" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "Question.Answer": { @@ -22043,7 +24696,9 @@ }, "type": { "type": "string", - "enum": ["question.replied"] + "enum": [ + "question.replied" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -22074,11 +24729,20 @@ } } }, - "required": ["sessionID", "requestID", "answers"], + "required": [ + "sessionID", + "requestID", + "answers" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "question.rejected": { @@ -22100,7 +24764,9 @@ }, "type": { "type": "string", - "enum": ["question.rejected"] + "enum": [ + "question.rejected" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -22125,11 +24791,19 @@ ] } }, - "required": ["sessionID", "requestID"], + "required": [ + "sessionID", + "requestID" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "Form.Metadata1": { @@ -22143,7 +24817,10 @@ }, "op": { "type": "string", - "enum": ["eq", "neq"] + "enum": [ + "eq", + "neq" + ] }, "value": { "anyOf": [ @@ -22157,15 +24834,21 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, @@ -22175,7 +24858,11 @@ ] } }, - "required": ["key", "op", "value"], + "required": [ + "key", + "op", + "value" + ], "additionalProperties": false }, "Form.StringField1": { @@ -22201,11 +24888,18 @@ }, "type": { "type": "string", - "enum": ["string"] + "enum": [ + "string" + ] }, "format": { "type": "string", - "enum": ["email", "uri", "date", "date-time"] + "enum": [ + "email", + "uri", + "date", + "date-time" + ] }, "minLength": { "type": "integer", @@ -22242,7 +24936,10 @@ "type": "boolean" } }, - "required": ["key", "type"], + "required": [ + "key", + "type" + ], "additionalProperties": false }, "Form.NumberField1": { @@ -22268,7 +24965,9 @@ }, "type": { "type": "string", - "enum": ["number"] + "enum": [ + "number" + ] }, "minimum": { "anyOf": [ @@ -22277,15 +24976,21 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, @@ -22296,15 +25001,21 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, @@ -22315,20 +25026,29 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] } }, - "required": ["key", "type"], + "required": [ + "key", + "type" + ], "additionalProperties": false }, "Form.IntegerField1": { @@ -22354,7 +25074,9 @@ }, "type": { "type": "string", - "enum": ["integer"] + "enum": [ + "integer" + ] }, "minimum": { "anyOf": [ @@ -22363,15 +25085,21 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, @@ -22382,15 +25110,21 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, @@ -22401,20 +25135,29 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] } }, - "required": ["key", "type"], + "required": [ + "key", + "type" + ], "additionalProperties": false }, "Form.BooleanField1": { @@ -22440,13 +25183,18 @@ }, "type": { "type": "string", - "enum": ["boolean"] + "enum": [ + "boolean" + ] }, "default": { "type": "boolean" } }, - "required": ["key", "type"], + "required": [ + "key", + "type" + ], "additionalProperties": false }, "Form.MultiselectField1": { @@ -22472,7 +25220,9 @@ }, "type": { "type": "string", - "enum": ["multiselect"] + "enum": [ + "multiselect" + ] }, "options": { "type": "array", @@ -22506,7 +25256,11 @@ } } }, - "required": ["key", "type", "options"], + "required": [ + "key", + "type", + "options" + ], "additionalProperties": false }, "Form.Field1": { @@ -22567,7 +25321,12 @@ "$ref": "#/components/schemas/Form.Fields3" } }, - "required": ["id", "sessionID", "title", "fields"], + "required": [ + "id", + "sessionID", + "title", + "fields" + ], "additionalProperties": false }, "form.created": { @@ -22589,7 +25348,9 @@ }, "type": { "type": "string", - "enum": ["form.created"] + "enum": [ + "form.created" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -22601,11 +25362,18 @@ "$ref": "#/components/schemas/Form.Info1" } }, - "required": ["form"], + "required": [ + "form" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "Form.Value1": { @@ -22620,15 +25388,21 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, @@ -22668,7 +25442,9 @@ }, "type": { "type": "string", - "enum": ["form.replied"] + "enum": [ + "form.replied" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -22691,11 +25467,20 @@ "$ref": "#/components/schemas/Form.Answer1" } }, - "required": ["id", "sessionID", "answer"], + "required": [ + "id", + "sessionID", + "answer" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "form.cancelled": { @@ -22717,7 +25502,9 @@ }, "type": { "type": "string", - "enum": ["form.cancelled"] + "enum": [ + "form.cancelled" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -22737,11 +25524,19 @@ "type": "string" } }, - "required": ["id", "sessionID"], + "required": [ + "id", + "sessionID" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "websearch.updated": { @@ -22763,7 +25558,9 @@ }, "type": { "type": "string", - "enum": ["websearch.updated"] + "enum": [ + "websearch.updated" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -22779,7 +25576,12 @@ ] } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "SessionStatus": { @@ -22789,10 +25591,14 @@ "properties": { "type": { "type": "string", - "enum": ["idle"] + "enum": [ + "idle" + ] } }, - "required": ["type"], + "required": [ + "type" + ], "additionalProperties": false }, { @@ -22800,7 +25606,9 @@ "properties": { "type": { "type": "string", - "enum": ["retry"] + "enum": [ + "retry" + ] }, "attempt": { "type": "integer", @@ -22835,7 +25643,13 @@ "type": "string" } }, - "required": ["reason", "provider", "title", "message", "label"], + "required": [ + "reason", + "provider", + "title", + "message", + "label" + ], "additionalProperties": false }, "next": { @@ -22847,7 +25661,12 @@ ] } }, - "required": ["type", "attempt", "message", "next"], + "required": [ + "type", + "attempt", + "message", + "next" + ], "additionalProperties": false }, { @@ -22855,10 +25674,14 @@ "properties": { "type": { "type": "string", - "enum": ["busy"] + "enum": [ + "busy" + ] } }, - "required": ["type"], + "required": [ + "type" + ], "additionalProperties": false } ] @@ -22882,7 +25705,9 @@ }, "type": { "type": "string", - "enum": ["session.status"] + "enum": [ + "session.status" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -22902,11 +25727,19 @@ "$ref": "#/components/schemas/SessionStatus" } }, - "required": ["sessionID", "status"], + "required": [ + "sessionID", + "status" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "session.idle": { @@ -22928,7 +25761,9 @@ }, "type": { "type": "string", - "enum": ["session.idle"] + "enum": [ + "session.idle" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -22945,11 +25780,18 @@ ] } }, - "required": ["sessionID"], + "required": [ + "sessionID" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "tui.prompt.append": { @@ -22971,7 +25813,9 @@ }, "type": { "type": "string", - "enum": ["tui.prompt.append"] + "enum": [ + "tui.prompt.append" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -22983,11 +25827,18 @@ "type": "string" } }, - "required": ["text"], + "required": [ + "text" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "tui.command.execute": { @@ -23009,7 +25860,9 @@ }, "type": { "type": "string", - "enum": ["tui.command.execute"] + "enum": [ + "tui.command.execute" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -23047,11 +25900,18 @@ ] } }, - "required": ["command"], + "required": [ + "command" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "tui.toast.show": { @@ -23073,7 +25933,9 @@ }, "type": { "type": "string", - "enum": ["tui.toast.show"] + "enum": [ + "tui.toast.show" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -23089,7 +25951,12 @@ }, "variant": { "type": "string", - "enum": ["info", "success", "warning", "error"] + "enum": [ + "info", + "success", + "warning", + "error" + ] }, "duration": { "anyOf": [ @@ -23107,11 +25974,19 @@ ] } }, - "required": ["message", "variant"], + "required": [ + "message", + "variant" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "tui.session.select": { @@ -23133,7 +26008,9 @@ }, "type": { "type": "string", - "enum": ["tui.session.select"] + "enum": [ + "tui.session.select" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -23151,11 +26028,18 @@ ] } }, - "required": ["sessionID"], + "required": [ + "sessionID" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "installation.updated": { @@ -23177,7 +26061,9 @@ }, "type": { "type": "string", - "enum": ["installation.updated"] + "enum": [ + "installation.updated" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -23189,11 +26075,18 @@ "type": "string" } }, - "required": ["version"], + "required": [ + "version" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "installation.update-available": { @@ -23215,7 +26108,9 @@ }, "type": { "type": "string", - "enum": ["installation.update-available"] + "enum": [ + "installation.update-available" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -23227,11 +26122,18 @@ "type": "string" } }, - "required": ["version"], + "required": [ + "version" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "vcs.branch.updated": { @@ -23253,7 +26155,9 @@ }, "type": { "type": "string", - "enum": ["vcs.branch.updated"] + "enum": [ + "vcs.branch.updated" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -23268,7 +26172,12 @@ "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "mcp.status.changed": { @@ -23290,7 +26199,9 @@ }, "type": { "type": "string", - "enum": ["mcp.status.changed"] + "enum": [ + "mcp.status.changed" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -23302,11 +26213,18 @@ "type": "string" } }, - "required": ["server"], + "required": [ + "server" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "mcp.resources.changed": { @@ -23328,7 +26246,9 @@ }, "type": { "type": "string", - "enum": ["mcp.resources.changed"] + "enum": [ + "mcp.resources.changed" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -23340,11 +26260,18 @@ "type": "string" } }, - "required": ["server"], + "required": [ + "server" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "V2Event.server.connected": { @@ -23380,7 +26307,9 @@ }, "type": { "type": "string", - "enum": ["server.connected"] + "enum": [ + "server.connected" + ] }, "data": { "anyOf": [ @@ -23393,7 +26322,11 @@ ] } }, - "required": ["id", "type", "data"], + "required": [ + "id", + "type", + "data" + ], "additionalProperties": false }, "V2Event": { @@ -23567,10 +26500,10 @@ "$ref": "#/components/schemas/plugin.updated" }, { - "$ref": "#/components/schemas/project.directories.updated" + "$ref": "#/components/schemas/worktree.updated" }, { - "$ref": "#/components/schemas/project.directory.resolved" + "$ref": "#/components/schemas/worktree.resolved" }, { "$ref": "#/components/schemas/command.updated" @@ -23673,7 +26606,9 @@ "properties": { "_tag": { "type": "string", - "enum": ["PtyNotFoundError"] + "enum": [ + "PtyNotFoundError" + ] }, "ptyID": { "type": "string" @@ -23682,7 +26617,11 @@ "type": "string" } }, - "required": ["_tag", "ptyID", "message"], + "required": [ + "_tag", + "ptyID", + "message" + ], "additionalProperties": false }, "PtyTicket.ConnectToken": { @@ -23700,7 +26639,10 @@ ] } }, - "required": ["ticket", "expires_in"], + "required": [ + "ticket", + "expires_in" + ], "additionalProperties": false }, "ForbiddenError": { @@ -23708,13 +26650,18 @@ "properties": { "_tag": { "type": "string", - "enum": ["ForbiddenError"] + "enum": [ + "ForbiddenError" + ] }, "message": { "type": "string" } }, - "required": ["_tag", "message"], + "required": [ + "_tag", + "message" + ], "additionalProperties": false }, "Shell.Info1": { @@ -23730,7 +26677,12 @@ }, "status": { "type": "string", - "enum": ["running", "exited", "timeout", "killed"] + "enum": [ + "running", + "exited", + "timeout", + "killed" + ] }, "command": { "type": "string" @@ -23768,11 +26720,22 @@ "type": "number" } }, - "required": ["started"], + "required": [ + "started" + ], "additionalProperties": false } }, - "required": ["id", "status", "command", "cwd", "shell", "file", "metadata", "time"], + "required": [ + "id", + "status", + "command", + "cwd", + "shell", + "file", + "metadata", + "time" + ], "additionalProperties": false }, "ShellNotFoundError": { @@ -23780,7 +26743,9 @@ "properties": { "_tag": { "type": "string", - "enum": ["ShellNotFoundError"] + "enum": [ + "ShellNotFoundError" + ] }, "id": { "type": "string" @@ -23789,7 +26754,11 @@ "type": "string" } }, - "required": ["_tag", "id", "message"], + "required": [ + "_tag", + "id", + "message" + ], "additionalProperties": false }, "Question.Request": { @@ -23822,7 +26791,11 @@ "$ref": "#/components/schemas/Question.Tool" } }, - "required": ["id", "sessionID", "questions"], + "required": [ + "id", + "sessionID", + "questions" + ], "additionalProperties": false }, "Question.Reply": { @@ -23836,7 +26809,9 @@ "description": "User answers in order of questions (each answer is an array of selected labels)" } }, - "required": ["answers"], + "required": [ + "answers" + ], "additionalProperties": false }, "QuestionNotFoundError": { @@ -23844,7 +26819,9 @@ "properties": { "_tag": { "type": "string", - "enum": ["QuestionNotFoundError"] + "enum": [ + "QuestionNotFoundError" + ] }, "requestID": { "type": "string" @@ -23853,7 +26830,11 @@ "type": "string" } }, - "required": ["_tag", "requestID", "message"], + "required": [ + "_tag", + "requestID", + "message" + ], "additionalProperties": false }, "Reference.LocalSource": { @@ -23861,7 +26842,9 @@ "properties": { "type": { "type": "string", - "enum": ["local"] + "enum": [ + "local" + ] }, "path": { "type": "string" @@ -23873,7 +26856,10 @@ "type": "boolean" } }, - "required": ["type", "path"], + "required": [ + "type", + "path" + ], "additionalProperties": false }, "Reference.GitSource": { @@ -23881,7 +26867,9 @@ "properties": { "type": { "type": "string", - "enum": ["git"] + "enum": [ + "git" + ] }, "repository": { "type": "string" @@ -23896,7 +26884,10 @@ "type": "boolean" } }, - "required": ["type", "repository"], + "required": [ + "type", + "repository" + ], "additionalProperties": false }, "Reference.Source": { @@ -23928,25 +26919,54 @@ "$ref": "#/components/schemas/Reference.Source" } }, - "required": ["name", "path", "source"], + "required": [ + "name", + "path", + "source" + ], "additionalProperties": false }, - "ProjectCopy.Copy": { + "Worktree.Directory": { + "type": "object", + "properties": { + "directory": { + "type": "string" + }, + "strategy": { + "type": "string" + } + }, + "required": [ + "directory" + ], + "additionalProperties": false + }, + "Worktree.List": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Worktree.Directory" + } + }, + "Worktree.Info": { "type": "object", "properties": { "directory": { "type": "string" } }, - "required": ["directory"], + "required": [ + "directory" + ], "additionalProperties": false }, - "ProjectCopyError": { + "WorktreeError": { "type": "object", "properties": { "name": { "type": "string", - "enum": ["ProjectCopyError"] + "enum": [ + "WorktreeError" + ] }, "data": { "type": "object", @@ -23965,11 +26985,16 @@ ] } }, - "required": ["message"], + "required": [ + "message" + ], "additionalProperties": false } }, - "required": ["name", "data"], + "required": [ + "name", + "data" + ], "additionalProperties": false }, "Vcs.Branch": { @@ -23991,7 +27016,9 @@ "$ref": "#/components/schemas/Vcs.Branch" } }, - "required": ["branch"], + "required": [ + "branch" + ], "additionalProperties": false }, "Vcs.FileStatus": { @@ -24018,15 +27045,27 @@ }, "status": { "type": "string", - "enum": ["added", "deleted", "modified"] + "enum": [ + "added", + "deleted", + "modified" + ] } }, - "required": ["file", "additions", "deletions", "status"], + "required": [ + "file", + "additions", + "deletions", + "status" + ], "additionalProperties": false }, "Vcs.Mode": { "type": "string", - "enum": ["working", "branch"] + "enum": [ + "working", + "branch" + ] }, "WebSearch.Provider": { "type": "object", @@ -24038,7 +27077,10 @@ "type": "string" } }, - "required": ["id", "name"], + "required": [ + "id", + "name" + ], "additionalProperties": false }, "WebSearch.Result": { @@ -24063,7 +27105,10 @@ "additionalProperties": false } }, - "required": ["url", "time"], + "required": [ + "url", + "time" + ], "additionalProperties": false }, "WebSearch.Response": { @@ -24079,7 +27124,10 @@ } } }, - "required": ["providerID", "results"], + "required": [ + "providerID", + "results" + ], "additionalProperties": false }, "Config.Agent": { @@ -24123,7 +27171,10 @@ ] } }, - "required": ["providerID", "model"], + "required": [ + "providerID", + "model" + ], "additionalProperties": false } ] @@ -24151,7 +27202,11 @@ }, "mode": { "type": "string", - "enum": ["subagent", "primary", "all"] + "enum": [ + "subagent", + "primary", + "all" + ] }, "hidden": { "type": "boolean" @@ -24236,7 +27291,9 @@ "type": "object" } }, - "required": ["command"], + "required": [ + "command" + ], "additionalProperties": false }, "Config.Command": { @@ -24289,7 +27346,10 @@ ] } }, - "required": ["providerID", "model"], + "required": [ + "providerID", + "model" + ], "additionalProperties": false } ] @@ -24298,7 +27358,9 @@ "type": "boolean" } }, - "required": ["template"], + "required": [ + "template" + ], "additionalProperties": false }, "Config.Reference.Git": { @@ -24317,7 +27379,9 @@ "type": "boolean" } }, - "required": ["repository"], + "required": [ + "repository" + ], "additionalProperties": false }, "Config.Reference.Local": { @@ -24333,7 +27397,9 @@ "type": "boolean" } }, - "required": ["path"], + "required": [ + "path" + ], "additionalProperties": false }, "Config.Plugin.Entry": { @@ -24346,7 +27412,9 @@ "type": "object" } }, - "required": ["package"], + "required": [ + "package" + ], "additionalProperties": false }, "Config.Warming": { @@ -24372,13 +27440,18 @@ "properties": { "type": { "type": "string", - "enum": ["context"] + "enum": [ + "context" + ] }, "size": { "type": "integer" } }, - "required": ["type", "size"], + "required": [ + "type", + "size" + ], "additionalProperties": false }, "input": { @@ -24400,7 +27473,10 @@ "additionalProperties": false } }, - "required": ["input", "output"], + "required": [ + "input", + "output" + ], "additionalProperties": false }, "Config.Model": { @@ -24457,7 +27533,9 @@ "type": "object" } }, - "required": ["id"], + "required": [ + "id" + ], "additionalProperties": false } }, @@ -24578,7 +27656,10 @@ ] } }, - "required": ["providerID", "model"], + "required": [ + "providerID", + "model" + ], "additionalProperties": false } ] @@ -24593,13 +27674,19 @@ }, { "type": "string", - "enum": ["notify"] + "enum": [ + "notify" + ] } ] }, "share": { "type": "string", - "enum": ["manual", "auto", "disabled"] + "enum": [ + "manual", + "auto", + "disabled" + ] }, "enterprise": { "type": "object", @@ -24664,10 +27751,14 @@ "properties": { "disabled": { "type": "boolean", - "enum": [true] + "enum": [ + true + ] } }, - "required": ["disabled"], + "required": [ + "disabled" + ], "additionalProperties": false }, { @@ -24860,7 +27951,9 @@ "type": "string" } }, - "required": ["provider"], + "required": [ + "provider" + ], "additionalProperties": false }, "plugins": { @@ -24910,17 +28003,26 @@ "properties": { "action": { "type": "string", - "enum": ["provider.use"] + "enum": [ + "provider.use" + ] }, "resource": { "type": "string" }, "effect": { "type": "string", - "enum": ["allow", "deny"] + "enum": [ + "allow", + "deny" + ] } }, - "required": ["action", "resource", "effect"], + "required": [ + "action", + "resource", + "effect" + ], "additionalProperties": false } } @@ -24935,7 +28037,9 @@ "properties": { "type": { "type": "string", - "enum": ["document"] + "enum": [ + "document" + ] }, "path": { "type": "string" @@ -24944,7 +28048,10 @@ "$ref": "#/components/schemas/Config.Info" } }, - "required": ["type", "info"], + "required": [ + "type", + "info" + ], "additionalProperties": false }, "Config.Directory": { @@ -24952,13 +28059,18 @@ "properties": { "type": { "type": "string", - "enum": ["directory"] + "enum": [ + "directory" + ] }, "path": { "type": "string" } }, - "required": ["type", "path"], + "required": [ + "type", + "path" + ], "additionalProperties": false }, "Config.File": { @@ -24966,13 +28078,18 @@ "properties": { "type": { "type": "string", - "enum": ["file"] + "enum": [ + "file" + ] }, "path": { "type": "string" } }, - "required": ["type", "path"], + "required": [ + "type", + "path" + ], "additionalProperties": false }, "Config.AgentsDirectory": { @@ -24980,13 +28097,18 @@ "properties": { "type": { "type": "string", - "enum": ["agents"] + "enum": [ + "agents" + ] }, "path": { "type": "string" } }, - "required": ["type", "path"], + "required": [ + "type", + "path" + ], "additionalProperties": false }, "Config.ClaudeDirectory": { @@ -24994,13 +28116,18 @@ "properties": { "type": { "type": "string", - "enum": ["claude"] + "enum": [ + "claude" + ] }, "path": { "type": "string" } }, - "required": ["type", "path"], + "required": [ + "type", + "path" + ], "additionalProperties": false }, "Config.Entry": { @@ -25076,7 +28203,7 @@ }, { "name": "project", - "description": "Location-scoped project routes." + "description": "Project routes." }, { "name": "form", @@ -25119,8 +28246,8 @@ "description": "Location-scoped project references." }, { - "name": "projectCopy", - "description": "Project copy management routes." + "name": "worktree", + "description": "Project worktree management routes." }, { "name": "vcs", diff --git a/packages/protocol/src/api.ts b/packages/protocol/src/api.ts index 7e9b279527e..3732b839fb4 100644 --- a/packages/protocol/src/api.ts +++ b/packages/protocol/src/api.ts @@ -29,7 +29,7 @@ import { WebSearchGroup } from "./groups/websearch.js" import { McpGroup } from "./groups/mcp.js" import { CredentialGroup } from "./groups/credential.js" import { ProjectGroup } from "./groups/project.js" -import { ProjectCopyGroup } from "./groups/project-copy.js" +import { WorktreeGroup } from "./groups/worktree.js" import { VcsGroup } from "./groups/vcs.js" import { MigrationGroup } from "./groups/migration.js" import { ConfigGroup } from "./groups/config.js" @@ -52,7 +52,6 @@ type LocationGroups = | HttpApiGroup.AddMiddleware | HttpApiGroup.AddMiddleware | HttpApiGroup.AddMiddleware - | HttpApiGroup.AddMiddleware | HttpApiGroup.AddMiddleware | HttpApiGroup.AddMiddleware @@ -89,6 +88,7 @@ type ApiGroups< | typeof ServerGroup | typeof DebugGroup | typeof MigrationGroup + | typeof WorktreeGroup | LocationGroups | FormGroups | SessionGroups @@ -172,7 +172,7 @@ const makeApiFromGroup = < .add(ShellGroup.middleware(locationMiddleware)) .add(makeQuestionGroup(locationMiddleware, sessionLocationMiddleware)) .add(ReferenceGroup.middleware(locationMiddleware)) - .add(ProjectCopyGroup.middleware(locationMiddleware)) + .add(WorktreeGroup) .add(VcsGroup.middleware(locationMiddleware)) .add(DebugGroup) .add(MigrationGroup) diff --git a/packages/protocol/src/client.ts b/packages/protocol/src/client.ts index d84aeeeb4aa..93ba6b386e1 100644 --- a/packages/protocol/src/client.ts +++ b/packages/protocol/src/client.ts @@ -60,7 +60,7 @@ export const groupNames = { "server.question": "question", "server.reference": "reference", "server.project": "project", - "server.projectCopy": "projectCopy", + "server.worktree": "worktree", "server.vcs": "vcs", "server.config": "config", } as const diff --git a/packages/protocol/src/groups/project-copy.ts b/packages/protocol/src/groups/project-copy.ts deleted file mode 100644 index 3ac63a1969c..00000000000 --- a/packages/protocol/src/groups/project-copy.ts +++ /dev/null @@ -1,56 +0,0 @@ -import { ProjectCopy } from "@opencode-ai/schema/project-copy" -import { Project } from "@opencode-ai/schema/project" -import { Schema, Struct } from "effect" -import { HttpApiEndpoint, HttpApiGroup, HttpApiSchema, OpenApi } from "effect/unstable/httpapi" -import { LocationQuery, locationQueryOpenApi } from "./location.js" - -const root = "/api/experimental/project/:projectID/copy" - -export class ProjectCopyError extends Schema.ErrorClass("ProjectCopyError")( - { - name: Schema.Literal("ProjectCopyError"), - data: Schema.Struct({ - message: Schema.String, - forceRequired: Schema.optional(Schema.Boolean), - }), - }, - { httpApiStatus: 400 }, -) {} - -const CreatePayload = Schema.Struct(Struct.omit(ProjectCopy.CreateInput.fields, ["projectID", "sourceDirectory"])) -const RemovePayload = Schema.Struct(Struct.omit(ProjectCopy.RemoveInput.fields, ["projectID"])) - -export const ProjectCopyGroup = HttpApiGroup.make("server.projectCopy") - .add( - HttpApiEndpoint.post("projectCopy.create", root, { - params: { projectID: Project.ID }, - query: LocationQuery, - payload: CreatePayload, - success: ProjectCopy.Copy, - error: ProjectCopyError, - }) - .annotateMerge(locationQueryOpenApi) - .annotateMerge(OpenApi.annotations({ identifier: "v2.projectCopy.create" })), - ) - .add( - HttpApiEndpoint.delete("projectCopy.remove", root, { - params: { projectID: Project.ID }, - query: LocationQuery, - payload: RemovePayload, - success: HttpApiSchema.NoContent, - error: ProjectCopyError, - }) - .annotateMerge(locationQueryOpenApi) - .annotateMerge(OpenApi.annotations({ identifier: "v2.projectCopy.remove" })), - ) - .add( - HttpApiEndpoint.post("projectCopy.refresh", `${root}/refresh`, { - params: { projectID: Project.ID }, - query: LocationQuery, - success: HttpApiSchema.NoContent, - error: ProjectCopyError, - }) - .annotateMerge(locationQueryOpenApi) - .annotateMerge(OpenApi.annotations({ identifier: "v2.projectCopy.refresh" })), - ) - .annotateMerge(OpenApi.annotations({ title: "projectCopy", description: "Project copy management routes." })) diff --git a/packages/protocol/src/groups/project.ts b/packages/protocol/src/groups/project.ts index a62f1d072f7..3e60a437667 100644 --- a/packages/protocol/src/groups/project.ts +++ b/packages/protocol/src/groups/project.ts @@ -31,24 +31,9 @@ export const ProjectGroup = HttpApiGroup.make("server.project") }), ), ) - .add( - HttpApiEndpoint.get("project.directories", `${root}/:projectID/directories`, { - params: { projectID: Project.ID }, - query: LocationQuery, - success: Project.Directories, - }) - .annotateMerge(locationQueryOpenApi) - .annotateMerge( - OpenApi.annotations({ - identifier: "v2.project.directories", - summary: "List project directories", - description: "List known local absolute directories for a project.", - }), - ), - ) .annotateMerge( OpenApi.annotations({ title: "project", - description: "Location-scoped project routes.", + description: "Project routes.", }), ) diff --git a/packages/protocol/src/groups/worktree.ts b/packages/protocol/src/groups/worktree.ts new file mode 100644 index 00000000000..5c7af2dcb5d --- /dev/null +++ b/packages/protocol/src/groups/worktree.ts @@ -0,0 +1,76 @@ +import { Project } from "@opencode-ai/schema/project" +import { Worktree } from "@opencode-ai/schema/worktree" +import { Schema, Struct } from "effect" +import { HttpApiEndpoint, HttpApiGroup, HttpApiSchema, OpenApi } from "effect/unstable/httpapi" + +const root = "/api/experimental/project/:projectID/worktree" + +export class WorktreeError extends Schema.ErrorClass("WorktreeError")( + { + name: Schema.Literal("WorktreeError"), + data: Schema.Struct({ + message: Schema.String, + forceRequired: Schema.optional(Schema.Boolean), + }), + }, + { httpApiStatus: 400 }, +) {} + +const CreatePayload = Schema.Struct(Struct.omit(Worktree.CreateInput.fields, ["projectID"])) +const RemovePayload = Schema.Struct(Struct.omit(Worktree.RemoveInput.fields, ["projectID"])) + +export const WorktreeGroup = HttpApiGroup.make("server.worktree") + .add( + HttpApiEndpoint.get("worktree.list", root, { + params: { projectID: Project.ID }, + success: Worktree.List, + }).annotateMerge( + OpenApi.annotations({ + identifier: "v2.worktree.list", + summary: "List worktrees", + description: "List known local worktrees for a project.", + }), + ), + ) + .add( + HttpApiEndpoint.post("worktree.create", root, { + params: { projectID: Project.ID }, + payload: CreatePayload, + success: Worktree.Info, + error: WorktreeError, + }).annotateMerge( + OpenApi.annotations({ + identifier: "v2.worktree.create", + summary: "Create worktree", + description: "Create a worktree for a project.", + }), + ), + ) + .add( + HttpApiEndpoint.delete("worktree.remove", root, { + params: { projectID: Project.ID }, + payload: RemovePayload, + success: HttpApiSchema.NoContent, + error: WorktreeError, + }).annotateMerge( + OpenApi.annotations({ + identifier: "v2.worktree.remove", + summary: "Remove worktree", + description: "Remove a managed worktree from a project.", + }), + ), + ) + .add( + HttpApiEndpoint.post("worktree.refresh", `${root}/refresh`, { + params: { projectID: Project.ID }, + success: HttpApiSchema.NoContent, + error: WorktreeError, + }).annotateMerge( + OpenApi.annotations({ + identifier: "v2.worktree.refresh", + summary: "Refresh worktrees", + description: "Reconcile stored worktrees with the project repositories.", + }), + ), + ) + .annotateMerge(OpenApi.annotations({ title: "worktree", description: "Project worktree management routes." })) diff --git a/packages/schema/src/durable-event-manifest.ts b/packages/schema/src/durable-event-manifest.ts index c1b56e14652..269190b0c31 100644 --- a/packages/schema/src/durable-event-manifest.ts +++ b/packages/schema/src/durable-event-manifest.ts @@ -1,7 +1,7 @@ export * as DurableEventManifest from "./durable-event-manifest.js" import { Event } from "./event.js" -import { ProjectDirectories } from "./project-directories.js" +import { Worktree } from "./worktree.js" import { SessionEvent } from "./session-event.js" export const SessionDurable = { @@ -9,4 +9,4 @@ export const SessionDurable = { schema: SessionEvent.Durable, } as const -export const Durable = Event.durableMap([...SessionEvent.DurableDefinitions, ProjectDirectories.Event.Resolved]) +export const Durable = Event.durableMap([...SessionEvent.DurableDefinitions, Worktree.Event.Resolved]) diff --git a/packages/schema/src/event-manifest.ts b/packages/schema/src/event-manifest.ts index 1898f50cb78..842e9287d1d 100644 --- a/packages/schema/src/event-manifest.ts +++ b/packages/schema/src/event-manifest.ts @@ -19,7 +19,7 @@ import { ModelsDev } from "./models-dev.js" import { Permission } from "./permission.js" import { Plugin } from "./plugin.js" import { Project } from "./project.js" -import { ProjectDirectories } from "./project-directories.js" +import { Worktree } from "./worktree.js" import { Pty } from "./pty.js" import { Question } from "./question.js" import { Reference } from "./reference.js" @@ -50,7 +50,7 @@ const featureDefinitions = Event.inventory( ...Reference.Event.Definitions, ...Permission.Event.Definitions, ...Plugin.Event.Definitions, - ...ProjectDirectories.Event.Definitions, + ...Worktree.Event.Definitions, ...Command.Event.Definitions, ...Config.Event.Definitions, ...Skill.Event.Definitions, diff --git a/packages/schema/src/index.ts b/packages/schema/src/index.ts index 63c352523be..e63522a8089 100644 --- a/packages/schema/src/index.ts +++ b/packages/schema/src/index.ts @@ -16,7 +16,7 @@ export { Money } from "./money.js" export { Permission } from "./permission.js" export { PermissionSaved } from "./permission-saved.js" export { Project } from "./project.js" -export { ProjectCopy } from "./project-copy.js" +export { Worktree } from "./worktree.js" export { Provider } from "./provider.js" export { Reference } from "./reference.js" export { WebSearch } from "./websearch.js" diff --git a/packages/schema/src/project-copy.ts b/packages/schema/src/project-copy.ts deleted file mode 100644 index 2f6688aef44..00000000000 --- a/packages/schema/src/project-copy.ts +++ /dev/null @@ -1,30 +0,0 @@ -export * as ProjectCopy from "./project-copy.js" - -import { Schema } from "effect" -import { optional } from "./schema.js" -import { ProjectID } from "./project-id.js" -import { AbsolutePath } from "./schema.js" - -export const StrategyID = Schema.Trim.pipe(Schema.check(Schema.isNonEmpty()), Schema.brand("ProjectCopy.StrategyID")) -export type StrategyID = typeof StrategyID.Type - -export const CreateInput = Schema.Struct({ - projectID: ProjectID, - strategy: StrategyID, - sourceDirectory: AbsolutePath, - directory: AbsolutePath, - name: optional(Schema.String), -}).annotate({ identifier: "ProjectCopy.CreateInput" }) -export interface CreateInput extends Schema.Schema.Type {} - -export const RemoveInput = Schema.Struct({ - projectID: ProjectID, - directory: AbsolutePath, - force: Schema.Boolean, -}).annotate({ identifier: "ProjectCopy.RemoveInput" }) -export interface RemoveInput extends Schema.Schema.Type {} - -export const Copy = Schema.Struct({ - directory: AbsolutePath, -}).annotate({ identifier: "ProjectCopy.Copy" }) -export interface Copy extends Schema.Schema.Type {} diff --git a/packages/schema/src/project-directories.ts b/packages/schema/src/project-directories.ts deleted file mode 100644 index bea76edd66b..00000000000 --- a/packages/schema/src/project-directories.ts +++ /dev/null @@ -1,53 +0,0 @@ -export * as ProjectDirectories from "./project-directories.js" - -import { durable, ephemeral, inventory } from "./event.js" -import { AbsolutePath } from "./schema.js" -import { Project } from "./project.js" - -const Updated = ephemeral({ - type: "project.directories.updated", - schema: { projectID: Project.ID }, -}) - -/** - * A directory's resolution changed: it now resolves to `projectID` where it - * previously resolved to `previous` (`global` when the directory had no - * stable identity yet, e.g. before `git init`). Sessions whose ownership - * came from the previous resolution follow the new identity by projection. - */ -const Resolved = durable({ - type: "project.directory.resolved", - durable: { aggregate: "projectID", version: 1 }, - schema: { - projectID: Project.ID, - directory: AbsolutePath, - previous: Project.ID, - }, -}) -export const Event = { Updated, Resolved, Definitions: inventory(Updated, Resolved) } - -/** - * Client-side mirror of the server's `project.directory.resolved` session fold. - * Returns the ownership update for a cached session, or undefined when the - * session does not follow the resolution. Plain strings: callers hold - * generated client types, and the server projection remains authoritative. - */ -export function adopt( - session: { readonly projectID: string; readonly directory: string }, - event: { readonly projectID: string; readonly directory: string; readonly previous: string }, -) { - if (session.projectID !== event.previous && session.projectID !== Project.ID.global) return - if (session.projectID === event.projectID) return - const inside = - session.directory === event.directory || - session.directory.startsWith(event.directory + "/") || - session.directory.startsWith(event.directory + "\\") - if (!inside) return - return { - projectID: event.projectID, - subpath: - session.directory === event.directory - ? undefined - : session.directory.slice(event.directory.length + 1).replaceAll("\\", "/"), - } -} diff --git a/packages/schema/src/project.ts b/packages/schema/src/project.ts index e47e45678c3..678f9759780 100644 --- a/packages/schema/src/project.ts +++ b/packages/schema/src/project.ts @@ -15,17 +15,6 @@ export const Current = Schema.Struct({ canonical: AbsolutePath, }).annotate({ identifier: "Project.Current" }) export interface Current extends Schema.Schema.Type {} -export const Directory = Schema.Struct({ - directory: AbsolutePath, - strategy: optional(Schema.String), -}).annotate({ identifier: "Project.Directory" }) -export interface Directory extends Schema.Schema.Type {} -export const DirectoriesInput = Schema.Struct({ - projectID: ID, -}).annotate({ identifier: "Project.DirectoriesInput" }) -export interface DirectoriesInput extends Schema.Schema.Type {} -export const Directories = Schema.Array(Directory).annotate({ identifier: "Project.Directories" }) -export type Directories = typeof Directories.Type export const Icon = Schema.Struct({ url: optional(Schema.String), override: optional(Schema.String), diff --git a/packages/schema/src/worktree.ts b/packages/schema/src/worktree.ts new file mode 100644 index 00000000000..ae436952c96 --- /dev/null +++ b/packages/schema/src/worktree.ts @@ -0,0 +1,82 @@ +export * as Worktree from "./worktree.js" + +import { Schema } from "effect" +import { durable, ephemeral, inventory } from "./event.js" +import { ProjectID } from "./project-id.js" +import { AbsolutePath, optional } from "./schema.js" +import { Project } from "./project.js" + +export const StrategyID = Schema.Trim.pipe(Schema.check(Schema.isNonEmpty()), Schema.brand("Worktree.StrategyID")) +export type StrategyID = typeof StrategyID.Type + +export const CreateInput = Schema.Struct({ + projectID: ProjectID, + strategy: StrategyID, + from: optional(AbsolutePath), + directory: AbsolutePath, + name: optional(Schema.String), +}).annotate({ identifier: "Worktree.CreateInput" }) +export interface CreateInput extends Schema.Schema.Type {} + +export const RemoveInput = Schema.Struct({ + projectID: ProjectID, + directory: AbsolutePath, + force: Schema.Boolean, +}).annotate({ identifier: "Worktree.RemoveInput" }) +export interface RemoveInput extends Schema.Schema.Type {} + +export const Info = Schema.Struct({ + directory: AbsolutePath, +}).annotate({ identifier: "Worktree.Info" }) +export interface Info extends Schema.Schema.Type {} + +export const Directory = Schema.Struct({ + directory: AbsolutePath, + strategy: optional(Schema.String), +}).annotate({ identifier: "Worktree.Directory" }) +export interface Directory extends Schema.Schema.Type {} + +export const ListInput = Schema.Struct({ + projectID: ProjectID, +}).annotate({ identifier: "Worktree.ListInput" }) +export interface ListInput extends Schema.Schema.Type {} + +export const List = Schema.Array(Directory).annotate({ identifier: "Worktree.List" }) +export type List = typeof List.Type + +const Updated = ephemeral({ + type: "worktree.updated", + schema: { projectID: Project.ID }, +}) + +const Resolved = durable({ + type: "worktree.resolved", + durable: { aggregate: "projectID", version: 1 }, + schema: { + projectID: Project.ID, + directory: AbsolutePath, + previous: Project.ID, + }, +}) + +export const Event = { Updated, Resolved, Definitions: inventory(Updated, Resolved) } + +export function adopt( + session: { readonly projectID: string; readonly directory: string }, + event: { readonly projectID: string; readonly directory: string; readonly previous: string }, +) { + if (session.projectID !== event.previous && session.projectID !== Project.ID.global) return + if (session.projectID === event.projectID) return + const inside = + session.directory === event.directory || + session.directory.startsWith(event.directory + "/") || + session.directory.startsWith(event.directory + "\\") + if (!inside) return + return { + projectID: event.projectID, + subpath: + session.directory === event.directory + ? undefined + : session.directory.slice(event.directory.length + 1).replaceAll("\\", "/"), + } +} diff --git a/packages/schema/test/contract-hygiene.test.ts b/packages/schema/test/contract-hygiene.test.ts index ae9d22d2d3e..a1ef01fea8b 100644 --- a/packages/schema/test/contract-hygiene.test.ts +++ b/packages/schema/test/contract-hygiene.test.ts @@ -17,6 +17,7 @@ import { Money } from "../src/money.js" import { Skill } from "../src/skill.js" import { Shell } from "../src/shell.js" import { Vcs } from "../src/vcs.js" +import { Worktree } from "../src/worktree.js" import { PersistedRevert } from "../src/session-revert.js" import { AbsolutePath, optional } from "../src/schema.js" @@ -157,9 +158,9 @@ describe("contract hygiene", () => { Model.Cost, Model.Variant, Project.Current, - Project.Directory, - Project.DirectoriesInput, - Project.Directories, + Worktree.Directory, + Worktree.ListInput, + Worktree.List, Project.Icon, Project.Commands, Project.Time, diff --git a/packages/schema/test/event-manifest.test.ts b/packages/schema/test/event-manifest.test.ts index a13075df114..754ac9eb4c5 100644 --- a/packages/schema/test/event-manifest.test.ts +++ b/packages/schema/test/event-manifest.test.ts @@ -114,7 +114,7 @@ describe("public event manifest", () => { "session.revert.staged.1", "session.revert.cleared.1", "session.revert.committed.1", - "project.directory.resolved.1", + "worktree.resolved.1", ].toSorted(), ) expect(SessionEvent.DurableDefinitions).toEqual([ diff --git a/packages/sdk-next/src/index.ts b/packages/sdk-next/src/index.ts index 8448d703b33..bb9246d542d 100644 --- a/packages/sdk-next/src/index.ts +++ b/packages/sdk-next/src/index.ts @@ -15,7 +15,7 @@ export { Model } from "@opencode-ai/schema/model" export { Permission } from "@opencode-ai/schema/permission" export { PermissionSaved } from "@opencode-ai/schema/permission-saved" export { Project } from "@opencode-ai/schema/project" -export { ProjectCopy } from "@opencode-ai/schema/project-copy" +export { Worktree } from "@opencode-ai/schema/worktree" export { Prompt } from "@opencode-ai/schema/prompt" export { PromptInput } from "@opencode-ai/schema/prompt-input" export { Provider } from "@opencode-ai/schema/provider" diff --git a/packages/sdk-next/test/contract-identity.test.ts b/packages/sdk-next/test/contract-identity.test.ts index 0b41eace602..282fdc2a1b0 100644 --- a/packages/sdk-next/test/contract-identity.test.ts +++ b/packages/sdk-next/test/contract-identity.test.ts @@ -14,6 +14,7 @@ import { Session } from "@opencode-ai/schema/session" import { SessionInbox } from "@opencode-ai/schema/session-inbox" import { SessionMessage } from "@opencode-ai/schema/session-message" import { Workspace } from "@opencode-ai/schema/workspace" +import { Worktree } from "@opencode-ai/schema/worktree" import { Api } from "@opencode-ai/server/api" import { ClientApi, groupNames, promiseOmitEndpoints } from "@opencode-ai/protocol/client" import { compile, emitPromise } from "@opencode-ai/httpapi-codegen" @@ -23,6 +24,7 @@ const CoreAgent = await import("@opencode-ai/core/agent") const CoreModel = await import("@opencode-ai/core/model") const CoreProject = await import("@opencode-ai/core/project") const CoreSession = await import("@opencode-ai/core/session") +const CoreWorktree = await import("@opencode-ai/core/worktree") test("re-exports canonical contracts directly from Schema", () => { expect(SDK.Agent).toBe(Agent) @@ -31,6 +33,7 @@ test("re-exports canonical contracts directly from Schema", () => { expect(SDK.Model).toBe(Model) expect(SDK.WebSearch).toBe(WebSearch) expect(SDK.Session).toBe(Session) + expect(SDK.Worktree).toBe(Worktree) expect(SDK.Workspace).toBe(Workspace) expect(Object.keys(SDK).sort()).toEqual([ "AbsolutePath", @@ -48,7 +51,6 @@ test("re-exports canonical contracts directly from Schema", () => { "Permission", "PermissionSaved", "Project", - "ProjectCopy", "Prompt", "PromptInput", "Provider", @@ -63,6 +65,7 @@ test("re-exports canonical contracts directly from Schema", () => { "Tool", "WebSearch", "Workspace", + "Worktree", ]) }) @@ -72,8 +75,9 @@ test("Core and Server reuse the authoritative Schema and Protocol values", () => expect(CoreModel.Ref).toBe(Model.Ref) expect(CoreSession.Info).toBe(Session.Info) expect(CoreProject.Current).toBe(Project.Current) - expect(CoreProject.Directory).toBe(Project.Directory) - expect(CoreProject.Directories).toBe(Project.Directories) + expect(CoreWorktree.DirectoryUnavailableError).toBeDefined() + expect(CoreWorktree.List).toBe(Worktree.List) + expect(CoreWorktree.Info).toBe(Worktree.Info) expect(CoreSessionInbox.Item).toBe(SessionInbox.Item) expect(CoreSessionInbox.User).toBe(SessionInbox.User) expect(CoreSessionInbox.Synthetic).toBe(SessionInbox.Synthetic) diff --git a/packages/server/src/handlers.ts b/packages/server/src/handlers.ts index 28f29166fd8..cd2c4d4a7a4 100644 --- a/packages/server/src/handlers.ts +++ b/packages/server/src/handlers.ts @@ -25,7 +25,7 @@ import { WebSearchHandler } from "./handlers/websearch" import { McpHandler } from "./handlers/mcp" import { CredentialHandler } from "./handlers/credential" import { ProjectHandler } from "./handlers/project" -import { ProjectCopyHandler } from "./handlers/project-copy" +import { WorktreeHandler } from "./handlers/worktree" import { VcsHandler } from "./handlers/vcs" import { EventFeed } from "./event-feed" import { MigrationHandler } from "./handlers/migration" @@ -59,7 +59,7 @@ export const handlers = Layer.mergeAll( ShellHandler, QuestionHandler, ReferenceHandler, - ProjectCopyHandler, + WorktreeHandler, VcsHandler, ConfigHandler, ) diff --git a/packages/server/src/handlers/project-copy.ts b/packages/server/src/handlers/project-copy.ts deleted file mode 100644 index 3733db6771a..00000000000 --- a/packages/server/src/handlers/project-copy.ts +++ /dev/null @@ -1,68 +0,0 @@ -import { Location } from "@opencode-ai/core/location" -import { ProjectCopy } from "@opencode-ai/core/project/copy" -import { Git } from "@opencode-ai/core/git" -import { Effect } from "effect" -import { HttpApiBuilder, HttpApiSchema } from "effect/unstable/httpapi" -import { Api } from "../api" -import { ProjectCopyError } from "@opencode-ai/protocol/groups/project-copy" - -export const ProjectCopyHandler = HttpApiBuilder.group(Api, "server.projectCopy", (handlers) => - Effect.succeed( - handlers - .handle("projectCopy.create", (ctx) => - Effect.gen(function* () { - const copies = yield* ProjectCopy.Service - const location = yield* Location.Service - return yield* badRequest( - copies.create({ - ...ctx.payload, - projectID: ctx.params.projectID, - sourceDirectory: location.project.directory, - }), - ) - }), - ) - .handle("projectCopy.remove", (ctx) => - ProjectCopy.Service.use((copies) => - badRequest(copies.remove({ ...ctx.payload, projectID: ctx.params.projectID })).pipe( - Effect.as(HttpApiSchema.NoContent.make()), - ), - ), - ) - .handle("projectCopy.refresh", (ctx) => - ProjectCopy.Service.use((copies) => - badRequest(copies.refresh({ projectID: ctx.params.projectID })).pipe( - Effect.as(HttpApiSchema.NoContent.make()), - ), - ), - ), - ), -) - -function badRequest(effect: Effect.Effect) { - return effect.pipe( - Effect.mapError( - (error) => - new ProjectCopyError({ - name: "ProjectCopyError", - data: { - message: message(error), - forceRequired: error instanceof Git.WorktreeError ? error.forceRequired : undefined, - }, - }), - ), - ) -} - -function message(error: ProjectCopy.Error) { - if (error instanceof ProjectCopy.SourceDirectoryNotFoundError) - return `Project copy source not found: ${error.directory}` - if (error instanceof ProjectCopy.DestinationExistsError) - return `Project copy destination already exists: ${error.directory}` - if (error instanceof ProjectCopy.DirectoryUnavailableError) - return `Project copy directory unavailable: ${error.directory}` - if (error instanceof ProjectCopy.InvalidDirectoryError) return `Invalid project copy directory: ${error.directory}` - if (error instanceof ProjectCopy.StrategyUnavailableError) - return `Project copy strategy unavailable: ${error.strategy}` - return error.message -} diff --git a/packages/server/src/handlers/project.ts b/packages/server/src/handlers/project.ts index e02aa814aa2..5f9aca37307 100644 --- a/packages/server/src/handlers/project.ts +++ b/packages/server/src/handlers/project.ts @@ -15,8 +15,5 @@ export const ProjectHandler = HttpApiBuilder.group(Api, "server.project", (handl canonical: location.project.canonical, }), ), - ) - .handle("project.directories", (ctx) => - Project.Service.use((project) => project.directories({ projectID: ctx.params.projectID })), ), ) diff --git a/packages/server/src/handlers/worktree.ts b/packages/server/src/handlers/worktree.ts new file mode 100644 index 00000000000..364bd97ed5d --- /dev/null +++ b/packages/server/src/handlers/worktree.ts @@ -0,0 +1,55 @@ +import { Git } from "@opencode-ai/core/git" +import { Worktree } from "@opencode-ai/core/worktree" +import { WorktreeError } from "@opencode-ai/protocol/groups/worktree" +import { Effect } from "effect" +import { HttpApiBuilder, HttpApiSchema } from "effect/unstable/httpapi" +import { Api } from "../api" + +export const WorktreeHandler = HttpApiBuilder.group(Api, "server.worktree", (handlers) => + Effect.gen(function* () { + const worktrees = yield* Worktree.Service + + return handlers + .handle("worktree.list", (ctx) => worktrees.list(ctx.params.projectID)) + .handle("worktree.create", (ctx) => + badRequest(worktrees.create({ ...ctx.payload, projectID: ctx.params.projectID })), + ) + .handle("worktree.remove", (ctx) => + badRequest(worktrees.remove({ ...ctx.payload, projectID: ctx.params.projectID })).pipe( + Effect.as(HttpApiSchema.NoContent.make()), + ), + ) + .handle("worktree.refresh", (ctx) => + badRequest(worktrees.refresh({ projectID: ctx.params.projectID })).pipe( + Effect.as(HttpApiSchema.NoContent.make()), + ), + ) + }), +) + +function badRequest(effect: Effect.Effect) { + return effect.pipe( + Effect.mapError( + (error) => + new WorktreeError({ + name: "WorktreeError", + data: { + message: message(error), + forceRequired: error instanceof Git.WorktreeError ? error.forceRequired : undefined, + }, + }), + ), + ) +} + +function message(error: Worktree.Error) { + if (error instanceof Worktree.SourceDirectoryNotFoundError) + return error.directory + ? `Worktree source not found: ${error.directory}` + : `Worktree source not found for project: ${error.projectID}` + if (error instanceof Worktree.DestinationExistsError) return `Worktree destination already exists: ${error.directory}` + if (error instanceof Worktree.DirectoryUnavailableError) return `Worktree directory unavailable: ${error.directory}` + if (error instanceof Worktree.InvalidDirectoryError) return `Invalid worktree directory: ${error.directory}` + if (error instanceof Worktree.StrategyUnavailableError) return `Worktree strategy unavailable: ${error.strategy}` + return error.message +} diff --git a/packages/server/src/routes.ts b/packages/server/src/routes.ts index d3d22b59abc..26e35d4322e 100644 --- a/packages/server/src/routes.ts +++ b/packages/server/src/routes.ts @@ -28,6 +28,7 @@ import { PluginRuntime } from "@opencode-ai/core/plugin/runtime" import { SdkPlugins } from "@opencode-ai/core/plugin/sdk" import { WellKnown } from "@opencode-ai/core/wellknown" import { Workspace } from "@opencode-ai/core/workspace" +import { Worktree } from "@opencode-ai/core/worktree" import { Watcher } from "@opencode-ai/core/filesystem/watcher" import { HttpRouter } from "effect/unstable/http" import { HttpApiBuilder } from "effect/unstable/httpapi" @@ -52,6 +53,7 @@ const applicationServiceNodes = [ httpClient, Job.node, Project.node, + Worktree.node, Session.node, SessionTransfer.node, PluginRuntime.providerNode, diff --git a/packages/server/test/worktree.test.ts b/packages/server/test/worktree.test.ts new file mode 100644 index 00000000000..7b7dc5084ca --- /dev/null +++ b/packages/server/test/worktree.test.ts @@ -0,0 +1,71 @@ +import fs from "node:fs/promises" +import path from "node:path" +import { $ } from "bun" +import { expect } from "bun:test" +import { Effect } from "effect" +import { HttpServer } from "effect/unstable/http" +import { tmpdir } from "../../core/test/fixture/tmpdir" +import { it } from "../../core/test/lib/effect" +import { ServerProcess } from "../src/process" + +it.live("lists, creates, and removes worktrees by project ID", () => + Effect.acquireUseRelease( + Effect.promise(() => tmpdir("opencode-worktree-endpoint-")), + (tmp) => + Effect.gen(function* () { + const project = path.join(tmp.path, "project") + const destination = path.join(tmp.path, "worktrees") + yield* Effect.promise(() => fs.mkdir(project, { recursive: true })) + yield* Effect.promise(() => $`git init`.cwd(project).quiet()) + yield* Effect.promise(() => $`git config user.email test@opencode.test`.cwd(project).quiet()) + yield* Effect.promise(() => $`git config user.name Test`.cwd(project).quiet()) + yield* Effect.promise(() => $`git commit --allow-empty -m root`.cwd(project).quiet()) + const server = yield* ServerProcess.start({ + hostname: "127.0.0.1", + port: 0, + password: "secret", + app: { version: "test-version" }, + database: { path: ":memory:" }, + config: { directory: path.join(tmp.path, "config") }, + fs: { filewatcher: false }, + }) + const base = HttpServer.formatAddress(server.address) + const headers = { authorization: `Basic ${btoa("opencode:secret")}` } + const location = new URL("/api/location", base) + location.searchParams.set("location[directory]", project) + const resolved = yield* Effect.promise(() => fetch(location, { headers }).then((response) => response.json())) + if (!isRecord(resolved) || !isRecord(resolved.project) || typeof resolved.project.id !== "string") + throw new Error("Expected resolved project") + const url = new URL(`/api/experimental/project/${resolved.project.id}/worktree`, base) + + const initial = yield* Effect.promise(() => fetch(url, { headers }).then((response) => response.json())) + expect(initial).toEqual([{ directory: project }]) + + const created = yield* Effect.promise(() => + fetch(url, { + method: "POST", + headers: { ...headers, "content-type": "application/json" }, + body: JSON.stringify({ strategy: "git", directory: destination, name: "api" }), + }).then((response) => response.json()), + ) + expect(created).toEqual({ directory: path.join(destination, "api") }) + + const listed = yield* Effect.promise(() => fetch(url, { headers }).then((response) => response.json())) + expect(listed).toContainEqual({ directory: path.join(destination, "api"), strategy: "git" }) + + const removed = yield* Effect.promise(() => + fetch(url, { + method: "DELETE", + headers: { ...headers, "content-type": "application/json" }, + body: JSON.stringify({ directory: path.join(destination, "api"), force: false }), + }), + ) + expect(removed.status).toBe(204) + }), + (tmp) => Effect.promise(() => tmp[Symbol.asyncDispose]()), + ), +) + +function isRecord(value: unknown): value is Record { + return typeof value === "object" && value !== null && !Array.isArray(value) +} diff --git a/packages/tui/src/component/dialog-move-session.tsx b/packages/tui/src/component/dialog-move-session.tsx index 285a85a5259..0b3c8f6f03c 100644 --- a/packages/tui/src/component/dialog-move-session.tsx +++ b/packages/tui/src/component/dialog-move-session.tsx @@ -16,14 +16,14 @@ import { isRecord } from "../util/record" import { useToast } from "../ui/toast" import { Spinner } from "./spinner" import { DialogWorkspaceFileChanges } from "./dialog-workspace-file-changes" -import type { ProjectDirectoriesOutput } from "@opencode-ai/client" +import type { WorktreeListOutput } from "@opencode-ai/client" import { useRoute } from "../context/route" -import { DialogProjectCopyName } from "./dialog-project-copy-name" +import { DialogWorktreeName } from "./dialog-worktree-name" export type MoveSessionSelection = | { type: "directory"; directory: string; subdirectory: boolean } | { type: "new"; name: string } -type ProjectDirectory = ProjectDirectoriesOutput[number] +type ProjectDirectory = WorktreeListOutput[number] type DialogMoveSessionProps = { projectID: string @@ -79,15 +79,8 @@ export function DialogMoveSession(props: DialogMoveSessionProps) { () => (props.fixture || props.initialRemoving ? undefined : props.projectID), async (projectID, info): Promise | undefined> => { try { - const requestLocation = { directory: location()?.directory || paths.cwd } - await client.api.projectCopy.refresh({ - projectID, - location: requestLocation, - }) - const directories = await client.api.project.directories({ - projectID, - location: requestLocation, - }) + await client.api.worktree.refresh({ projectID }) + const directories = await client.api.worktree.list({ projectID }) setLoadError(undefined) return directories } catch (error) { @@ -230,10 +223,9 @@ export function DialogMoveSession(props: DialogMoveSessionProps) { setToDelete(undefined) setRemoving(selected.directory) setWorking(true) - const error = await client.api.projectCopy + const error = await client.api.worktree .remove({ projectID: props.projectID, - location: { directory: location()?.directory || paths.cwd }, directory: selected.directory, force: false, }) @@ -249,18 +241,17 @@ export function DialogMoveSession(props: DialogMoveSessionProps) { .status({ location: { directory: selected.directory } }) .catch(() => undefined) const choice = await DialogWorkspaceFileChanges.show(dialog, status?.data ?? [], { - title: "Delete working copy?", - message: "This working copy has file changes. Do you want to delete it anyway?", + title: "Delete worktree?", + message: "This worktree has file changes. Do you want to delete it anyway?", }) if (choice !== "yes") { reopen() return } reopen(selected.directory) - const forcedError = await client.api.projectCopy + const forcedError = await client.api.worktree .remove({ projectID: props.projectID, - location: { directory: location()?.directory || paths.cwd }, directory: selected.directory, force: true, }) @@ -271,7 +262,7 @@ export function DialogMoveSession(props: DialogMoveSessionProps) { if (forcedError) { toast.show({ variant: "error", - title: "Failed to delete project copy", + title: "Failed to delete worktree", message: errorMessage(forcedError), }) reopen() @@ -285,7 +276,7 @@ export function DialogMoveSession(props: DialogMoveSessionProps) { } toast.show({ variant: "error", - title: "Failed to delete project copy", + title: "Failed to delete worktree", message: errorMessage(error), }) return @@ -297,7 +288,7 @@ export function DialogMoveSession(props: DialogMoveSessionProps) { } async function create() { - const name = await DialogProjectCopyName.show(dialog) + const name = await DialogWorktreeName.show(dialog) if (name === null) return props.onSelect({ type: "new", name }) } @@ -327,24 +318,24 @@ export function DialogMoveSession(props: DialogMoveSessionProps) { showError() ? ( - Could not load project directories + Could not load worktrees {errorMessage(loadError())} Close and reopen Move session to try again. ) : directories.loading || loadedProject.loading ? ( - Loading project directories… + Loading worktrees… ) : ( - No project directories available + No worktrees available ) } noMatchView={ - No project directories found + No worktrees found } locked={showError() || directories.loading || loadedProject.loading || Boolean(removing())} diff --git a/packages/tui/src/component/dialog-project-copy-name.tsx b/packages/tui/src/component/dialog-worktree-name.tsx similarity index 83% rename from packages/tui/src/component/dialog-project-copy-name.tsx rename to packages/tui/src/component/dialog-worktree-name.tsx index 033af9b4107..3acefef48e3 100644 --- a/packages/tui/src/component/dialog-project-copy-name.tsx +++ b/packages/tui/src/component/dialog-worktree-name.tsx @@ -6,7 +6,7 @@ import { useTheme } from "../context/theme" import { useDialog, type DialogContext } from "../ui/dialog" import { useConfig } from "../config" -export function DialogProjectCopyName(props: { onConfirm: (name: string) => void }) { +export function DialogWorktreeName(props: { onConfirm: (name: string) => void }) { const dialog = useDialog() const theme = useTheme("elevated") const shortcuts = Keymap.useShortcuts() @@ -30,8 +30,8 @@ export function DialogProjectCopyName(props: { onConfirm: (name: string) => void priority: 1, commands: [ { - id: "dialog.project_copy.generate", - title: "Generate project copy name", + id: "dialog.worktree.generate", + title: "Generate worktree name", group: "Dialog", run: generate, }, @@ -50,7 +50,7 @@ export function DialogProjectCopyName(props: { onConfirm: (name: string) => void - Name project copy + Name worktree dialog.clear()}> esc @@ -63,7 +63,7 @@ export function DialogProjectCopyName(props: { onConfirm: (name: string) => void setInputTarget(value) }} onSubmit={confirm} - placeholder="Project copy name" + placeholder="Worktree name" placeholderColor={theme.text.subdued} textColor={theme.text.formfield.default} focusedTextColor={theme.text.formfield.default} @@ -74,17 +74,17 @@ export function DialogProjectCopyName(props: { onConfirm: (name: string) => void enter submit - {shortcuts.get("dialog.project_copy.generate")} generate one + {shortcuts.get("dialog.worktree.generate")} generate one ) } -DialogProjectCopyName.show = (dialog: DialogContext) => +DialogWorktreeName.show = (dialog: DialogContext) => new Promise((resolve) => { dialog.replace( - () => , + () => , () => resolve(null), ) }) diff --git a/packages/tui/src/component/prompt/index.tsx b/packages/tui/src/component/prompt/index.tsx index 7c3d1c378d0..dcad59b64de 100644 --- a/packages/tui/src/component/prompt/index.tsx +++ b/packages/tui/src/component/prompt/index.tsx @@ -1842,7 +1842,7 @@ export function Prompt(props: PromptProps) { - (new working copy) + (new worktree) diff --git a/packages/tui/src/component/prompt/move.tsx b/packages/tui/src/component/prompt/move.tsx index 20570a83153..90aa0aae7bc 100644 --- a/packages/tui/src/component/prompt/move.tsx +++ b/packages/tui/src/component/prompt/move.tsx @@ -23,17 +23,16 @@ export function usePromptMove(input: { projectID: () => string | undefined; sess const projectID = await resolveProjectID() if (!projectID) return setCreating(true) - setProgress("Creating copy") + setProgress("Creating worktree") try { - const result = await client.api.projectCopy.create({ + const result = await client.api.worktree.create({ projectID, - location: { directory: data.location.info()?.directory || paths.cwd }, - strategy: "git_worktree", + strategy: "git", directory: path.join(paths.worktree, projectID.slice(0, 6)), name, }) const directory = result.directory - if (!directory) throw new Error("No project copy directory returned") + if (!directory) throw new Error("No worktree directory returned") // Call a location-based route to initialize it before moving on. await client.api.location.get({ location: { directory } }) diff --git a/packages/tui/src/config/keybind.ts b/packages/tui/src/config/keybind.ts index be007d182a1..2864ef0b21e 100644 --- a/packages/tui/src/config/keybind.ts +++ b/packages/tui/src/config/keybind.ts @@ -243,10 +243,10 @@ export const Definitions = { "dialog.select.end": keybind("end", "Move to last dialog item"), "dialog.select.submit": keybind("return", "Submit selected dialog item"), "dialog.prompt.submit": keybind("return", "Submit dialog prompt"), - "dialog.project_copy.generate": keybind("tab", "Generate project copy name"), - "dialog.move_session.new": keybind("ctrl+m", "New project copy"), - "dialog.move_session.delete": keybind("ctrl+d", "Delete project copy"), - "dialog.move_session.refresh": keybind("ctrl+r", "Refresh project copies"), + "dialog.worktree.generate": keybind("tab", "Generate worktree name"), + "dialog.move_session.new": keybind("ctrl+m", "New worktree"), + "dialog.move_session.delete": keybind("ctrl+d", "Delete worktree"), + "dialog.move_session.refresh": keybind("ctrl+r", "Refresh worktrees"), "prompt.autocomplete.prev": keybind("up,ctrl+p", "Move to previous autocomplete item"), "prompt.autocomplete.next": keybind("down,ctrl+n", "Move to next autocomplete item"), "prompt.autocomplete.hide": keybind("escape", "Hide autocomplete"), diff --git a/packages/tui/src/context/data.tsx b/packages/tui/src/context/data.tsx index 384fce9c0ec..dd1d19332b9 100644 --- a/packages/tui/src/context/data.tsx +++ b/packages/tui/src/context/data.tsx @@ -39,7 +39,7 @@ import { createSimpleContext } from "./helper" import { useClient } from "./client" import { nonEmptyToolContent } from "../util/tool-display" import type { SessionInbox } from "@opencode-ai/schema/session-inbox" -import { ProjectDirectories } from "@opencode-ai/schema/project-directories" +import { Worktree } from "@opencode-ai/schema/worktree" import { createEffect, createSignal, onCleanup } from "solid-js" export type DataSessionStatus = "idle" | "running" @@ -458,9 +458,9 @@ export const { use: useData, provider: DataProvider } = createSimpleContext({ } break } - case "project.directory.resolved": { + case "worktree.resolved": { for (const [sessionID, info] of Object.entries(store.session.info)) { - const adopted = ProjectDirectories.adopt( + const adopted = Worktree.adopt( { projectID: info.projectID, directory: info.location.directory }, event.data, ) diff --git a/packages/tui/test/fixture/tui-client.ts b/packages/tui/test/fixture/tui-client.ts index c447beb935e..034098178da 100644 --- a/packages/tui/test/fixture/tui-client.ts +++ b/packages/tui/test/fixture/tui-client.ts @@ -107,7 +107,13 @@ export function createFetch(override?: FetchHandler, events?: ReturnType" }, "400": { - "description": "ProjectCopyError | InvalidRequestError", + "description": "WorktreeError | InvalidRequestError", "content": { "application/json": { "schema": { "anyOf": [ { - "$ref": "#/components/schemas/ProjectCopyError" + "$ref": "#/components/schemas/WorktreeError" }, { "$ref": "#/components/schemas/InvalidRequestError" @@ -11185,6 +11562,8 @@ } } }, + "description": "Remove a managed worktree from a project.", + "summary": "Remove worktree", "requestBody": { "content": { "application/json": { @@ -11198,7 +11577,10 @@ "type": "boolean" } }, - "required": ["directory", "force"], + "required": [ + "directory", + "force" + ], "additionalProperties": false } } @@ -11207,10 +11589,12 @@ } } }, - "/api/experimental/project/{projectID}/copy/refresh": { + "/api/experimental/project/{projectID}/worktree/refresh": { "post": { - "tags": ["projectCopy"], - "operationId": "v2.projectCopy.refresh", + "tags": [ + "worktree" + ], + "operationId": "v2.worktree.refresh", "parameters": [ { "name": "projectID", @@ -11219,46 +11603,6 @@ "type": "string" }, "required": true - }, - { - "name": "location", - "in": "query", - "schema": { - "anyOf": [ - { - "type": "object", - "properties": { - "directory": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "workspace": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false - }, - { - "type": "null" - } - ] - }, - "required": false, - "style": "deepObject", - "explode": true } ], "security": [], @@ -11267,13 +11611,13 @@ "description": "" }, "400": { - "description": "ProjectCopyError | InvalidRequestError", + "description": "WorktreeError | InvalidRequestError", "content": { "application/json": { "schema": { "anyOf": [ { - "$ref": "#/components/schemas/ProjectCopyError" + "$ref": "#/components/schemas/WorktreeError" }, { "$ref": "#/components/schemas/InvalidRequestError" @@ -11293,12 +11637,16 @@ } } } - } + }, + "description": "Reconcile stored worktrees with the project repositories.", + "summary": "Refresh worktrees" } }, "/api/vcs": { "get": { - "tags": ["vcs"], + "tags": [ + "vcs" + ], "operationId": "v2.vcs.get", "parameters": [ { @@ -11358,7 +11706,10 @@ "$ref": "#/components/schemas/Vcs.Info" } }, - "required": ["location", "data"], + "required": [ + "location", + "data" + ], "additionalProperties": false } } @@ -11391,7 +11742,9 @@ }, "/api/vcs/status": { "get": { - "tags": ["vcs"], + "tags": [ + "vcs" + ], "operationId": "v2.vcs.status", "parameters": [ { @@ -11454,7 +11807,10 @@ } } }, - "required": ["location", "data"], + "required": [ + "location", + "data" + ], "additionalProperties": false } } @@ -11487,7 +11843,9 @@ }, "/api/vcs/diff": { "get": { - "tags": ["vcs"], + "tags": [ + "vcs" + ], "operationId": "v2.vcs.diff", "parameters": [ { @@ -11573,7 +11931,10 @@ } } }, - "required": ["location", "data"], + "required": [ + "location", + "data" + ], "additionalProperties": false } } @@ -11606,7 +11967,9 @@ }, "/api/debug/location": { "get": { - "tags": ["debug"], + "tags": [ + "debug" + ], "operationId": "v2.debug.location.list", "parameters": [], "security": [], @@ -11649,7 +12012,9 @@ "summary": "List loaded locations" }, "delete": { - "tags": ["debug"], + "tags": [ + "debug" + ], "operationId": "v2.debug.location.evict", "parameters": [ { @@ -11725,7 +12090,9 @@ }, "/api/experimental/migration/v1": { "get": { - "tags": ["migration"], + "tags": [ + "migration" + ], "operationId": "v2.experimental.migration.v1.status", "parameters": [], "security": [], @@ -11741,10 +12108,15 @@ "properties": { "status": { "type": "string", - "enum": ["required", "completed"] + "enum": [ + "required", + "completed" + ] } }, - "required": ["status"], + "required": [ + "status" + ], "additionalProperties": false }, { @@ -11752,7 +12124,9 @@ "properties": { "status": { "type": "string", - "enum": ["running"] + "enum": [ + "running" + ] }, "progress": { "type": "object", @@ -11791,11 +12165,16 @@ ] } }, - "required": ["label"], + "required": [ + "label" + ], "additionalProperties": false } }, - "required": ["status", "progress"], + "required": [ + "status", + "progress" + ], "additionalProperties": false }, { @@ -11803,13 +12182,18 @@ "properties": { "status": { "type": "string", - "enum": ["error"] + "enum": [ + "error" + ] }, "error": { "type": "string" } }, - "required": ["status", "error"], + "required": [ + "status", + "error" + ], "additionalProperties": false } ] @@ -11844,7 +12228,9 @@ }, "/api/websearch/provider": { "get": { - "tags": ["websearch"], + "tags": [ + "websearch" + ], "operationId": "v2.websearch.providers", "parameters": [ { @@ -11907,7 +12293,10 @@ } } }, - "required": ["location", "data"], + "required": [ + "location", + "data" + ], "additionalProperties": false } } @@ -11950,7 +12339,9 @@ }, "/api/websearch": { "post": { - "tags": ["websearch"], + "tags": [ + "websearch" + ], "operationId": "v2.websearch.query", "parameters": [ { @@ -12010,7 +12401,10 @@ "$ref": "#/components/schemas/WebSearch.Response" } }, - "required": ["location", "data"], + "required": [ + "location", + "data" + ], "additionalProperties": false } } @@ -12069,7 +12463,9 @@ "type": "string" } }, - "required": ["query"], + "required": [ + "query" + ], "additionalProperties": false } } @@ -12080,7 +12476,9 @@ }, "/api/config": { "get": { - "tags": ["config"], + "tags": [ + "config" + ], "operationId": "v2.config.get", "parameters": [ { @@ -12172,7 +12570,9 @@ "properties": { "healthy": { "type": "boolean", - "enum": [true] + "enum": [ + true + ] }, "version": { "type": "string" @@ -12186,7 +12586,11 @@ ] } }, - "required": ["healthy", "version", "pid"], + "required": [ + "healthy", + "version", + "pid" + ], "additionalProperties": false }, "UnauthorizedError": { @@ -12194,13 +12598,18 @@ "properties": { "_tag": { "type": "string", - "enum": ["UnauthorizedError"] + "enum": [ + "UnauthorizedError" + ] }, "message": { "type": "string" } }, - "required": ["_tag", "message"], + "required": [ + "_tag", + "message" + ], "additionalProperties": false }, "InvalidRequestError": { @@ -12208,7 +12617,9 @@ "properties": { "_tag": { "type": "string", - "enum": ["InvalidRequestError"] + "enum": [ + "InvalidRequestError" + ] }, "message": { "type": "string" @@ -12234,7 +12645,10 @@ ] } }, - "required": ["_tag", "message"], + "required": [ + "_tag", + "message" + ], "additionalProperties": false }, "ServiceStopRequest": { @@ -12244,7 +12658,9 @@ "type": "string" } }, - "required": ["instanceID"], + "required": [ + "instanceID" + ], "additionalProperties": false }, "ServiceStopResponse": { @@ -12254,7 +12670,9 @@ "type": "boolean" } }, - "required": ["accepted"], + "required": [ + "accepted" + ], "additionalProperties": false }, "Location.Info": { @@ -12284,11 +12702,18 @@ "type": "string" } }, - "required": ["id", "directory", "canonical"], + "required": [ + "id", + "directory", + "canonical" + ], "additionalProperties": false } }, - "required": ["directory", "project"], + "required": [ + "directory", + "project" + ], "additionalProperties": false }, "Model.Ref": { @@ -12304,7 +12729,10 @@ "type": "string" } }, - "required": ["id", "providerID"], + "required": [ + "id", + "providerID" + ], "additionalProperties": false }, "Provider.Settings": { @@ -12326,7 +12754,11 @@ "type": "object" } }, - "required": ["settings", "headers", "body"], + "required": [ + "settings", + "headers", + "body" + ], "additionalProperties": false }, "Agent.Color": { @@ -12334,7 +12766,11 @@ }, "Permission.Effect": { "type": "string", - "enum": ["allow", "deny", "ask"] + "enum": [ + "allow", + "deny", + "ask" + ] }, "Permission.Rule": { "type": "object", @@ -12349,7 +12785,11 @@ "$ref": "#/components/schemas/Permission.Effect" } }, - "required": ["action", "resource", "effect"], + "required": [ + "action", + "resource", + "effect" + ], "additionalProperties": false }, "Permission.Ruleset": { @@ -12381,7 +12821,11 @@ }, "mode": { "type": "string", - "enum": ["subagent", "primary", "all"] + "enum": [ + "subagent", + "primary", + "all" + ] }, "hidden": { "type": "boolean" @@ -12401,7 +12845,14 @@ "$ref": "#/components/schemas/Permission.Ruleset" } }, - "required": ["id", "name", "request", "mode", "hidden", "permissions"], + "required": [ + "id", + "name", + "request", + "mode", + "hidden", + "permissions" + ], "additionalProperties": false }, "AgentNotFoundError": { @@ -12409,7 +12860,9 @@ "properties": { "_tag": { "type": "string", - "enum": ["AgentNotFoundError"] + "enum": [ + "AgentNotFoundError" + ] }, "agentID": { "type": "string" @@ -12418,7 +12871,11 @@ "type": "string" } }, - "required": ["_tag", "agentID", "message"], + "required": [ + "_tag", + "agentID", + "message" + ], "additionalProperties": false }, "Plugin.Info": { @@ -12428,7 +12885,9 @@ "type": "string" } }, - "required": ["id"], + "required": [ + "id" + ], "additionalProperties": false }, "Session.ForkBoundary": { @@ -12438,7 +12897,9 @@ "properties": { "type": { "type": "string", - "enum": ["before"] + "enum": [ + "before" + ] }, "messageID": { "type": "string", @@ -12449,7 +12910,10 @@ ] } }, - "required": ["type", "messageID"], + "required": [ + "type", + "messageID" + ], "additionalProperties": false }, { @@ -12457,7 +12921,9 @@ "properties": { "type": { "type": "string", - "enum": ["through"] + "enum": [ + "through" + ] }, "messageID": { "type": "string", @@ -12468,7 +12934,10 @@ ] } }, - "required": ["type", "messageID"], + "required": [ + "type", + "messageID" + ], "additionalProperties": false } ] @@ -12498,11 +12967,19 @@ "type": "number" } }, - "required": ["read", "write"], + "required": [ + "read", + "write" + ], "additionalProperties": false } }, - "required": ["input", "output", "reasoning", "cache"], + "required": [ + "input", + "output", + "reasoning", + "cache" + ], "additionalProperties": false }, "Location.Ref": { @@ -12520,7 +12997,9 @@ ] } }, - "required": ["directory"], + "required": [ + "directory" + ], "additionalProperties": false }, "FileDiff.Info": { @@ -12550,10 +13029,20 @@ }, "status": { "type": "string", - "enum": ["added", "deleted", "modified"] + "enum": [ + "added", + "deleted", + "modified" + ] } }, - "required": ["file", "patch", "additions", "deletions", "status"], + "required": [ + "file", + "patch", + "additions", + "deletions", + "status" + ], "additionalProperties": false }, "Session.Revert": { @@ -12580,7 +13069,9 @@ } } }, - "required": ["messageID"], + "required": [ + "messageID" + ], "additionalProperties": false }, "Session.Info": { @@ -12617,7 +13108,10 @@ "$ref": "#/components/schemas/Session.ForkBoundary" } }, - "required": ["sessionID", "boundary"], + "required": [ + "sessionID", + "boundary" + ], "additionalProperties": false }, "projectID": { @@ -12648,7 +13142,10 @@ "type": "number" } }, - "required": ["created", "updated"], + "required": [ + "created", + "updated" + ], "additionalProperties": false }, "title": { @@ -12664,7 +13161,14 @@ "$ref": "#/components/schemas/Session.Revert" } }, - "required": ["id", "projectID", "cost", "tokens", "time", "location"], + "required": [ + "id", + "projectID", + "cost", + "tokens", + "time", + "location" + ], "additionalProperties": false }, "SessionsResponse": { @@ -12703,7 +13207,10 @@ "additionalProperties": false } }, - "required": ["data", "cursor"], + "required": [ + "data", + "cursor" + ], "additionalProperties": false }, "InvalidCursorError": { @@ -12711,13 +13218,18 @@ "properties": { "_tag": { "type": "string", - "enum": ["InvalidCursorError"] + "enum": [ + "InvalidCursorError" + ] }, "message": { "type": "string" } }, - "required": ["_tag", "message"], + "required": [ + "_tag", + "message" + ], "additionalProperties": false }, "InvalidRequestError1": { @@ -12725,7 +13237,9 @@ "properties": { "_tag": { "type": "string", - "enum": ["InvalidRequestError"] + "enum": [ + "InvalidRequestError" + ] }, "message": { "type": "string" @@ -12751,7 +13265,10 @@ ] } }, - "required": ["_tag", "message"], + "required": [ + "_tag", + "message" + ], "additionalProperties": false }, "Session.Message.AgentSelected": { @@ -12775,12 +13292,16 @@ "type": "number" } }, - "required": ["created"], + "required": [ + "created" + ], "additionalProperties": false }, "type": { "type": "string", - "enum": ["agent-switched"] + "enum": [ + "agent-switched" + ] }, "agent": { "type": "string" @@ -12789,7 +13310,12 @@ "type": "string" } }, - "required": ["id", "time", "type", "agent"], + "required": [ + "id", + "time", + "type", + "agent" + ], "additionalProperties": false }, "Session.Message.ModelSelected": { @@ -12813,12 +13339,16 @@ "type": "number" } }, - "required": ["created"], + "required": [ + "created" + ], "additionalProperties": false }, "type": { "type": "string", - "enum": ["model-switched"] + "enum": [ + "model-switched" + ] }, "model": { "$ref": "#/components/schemas/Model.Ref" @@ -12827,7 +13357,12 @@ "$ref": "#/components/schemas/Model.Ref" } }, - "required": ["id", "time", "type", "model"], + "required": [ + "id", + "time", + "type", + "model" + ], "additionalProperties": false }, "Session.Message.LocationSwitched": { @@ -12851,12 +13386,16 @@ "type": "number" } }, - "required": ["created"], + "required": [ + "created" + ], "additionalProperties": false }, "type": { "type": "string", - "enum": ["location-switched"] + "enum": [ + "location-switched" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -12880,11 +13419,18 @@ "type": "string" } }, - "required": ["location"], + "required": [ + "location" + ], "additionalProperties": false } }, - "required": ["id", "time", "type", "location"], + "required": [ + "id", + "time", + "type", + "location" + ], "additionalProperties": false }, "Prompt.Base64": { @@ -12902,10 +13448,14 @@ "properties": { "type": { "type": "string", - "enum": ["inline"] + "enum": [ + "inline" + ] } }, - "required": ["type"], + "required": [ + "type" + ], "additionalProperties": false }, { @@ -12913,13 +13463,18 @@ "properties": { "type": { "type": "string", - "enum": ["uri"] + "enum": [ + "uri" + ] }, "uri": { "type": "string" } }, - "required": ["type", "uri"], + "required": [ + "type", + "uri" + ], "additionalProperties": false } ] @@ -12937,7 +13492,11 @@ "type": "string" } }, - "required": ["start", "end", "text"], + "required": [ + "start", + "end", + "text" + ], "additionalProperties": false }, "Prompt.FileAttachment": { @@ -12962,7 +13521,11 @@ "$ref": "#/components/schemas/Prompt.Mention" } }, - "required": ["data", "mime", "source"], + "required": [ + "data", + "mime", + "source" + ], "additionalProperties": false }, "Prompt.AgentAttachment": { @@ -12975,7 +13538,9 @@ "$ref": "#/components/schemas/Prompt.Mention" } }, - "required": ["name"], + "required": [ + "name" + ], "additionalProperties": false }, "Prompt.SkillAttachment": { @@ -12994,7 +13559,11 @@ "$ref": "#/components/schemas/Prompt.Mention" } }, - "required": ["id", "name", "text"], + "required": [ + "id", + "name", + "text" + ], "additionalProperties": false }, "Session.Message.User": { @@ -13018,7 +13587,9 @@ "type": "number" } }, - "required": ["created"], + "required": [ + "created" + ], "additionalProperties": false }, "text": { @@ -13044,10 +13615,17 @@ }, "type": { "type": "string", - "enum": ["user"] + "enum": [ + "user" + ] } }, - "required": ["id", "time", "text", "type"], + "required": [ + "id", + "time", + "text", + "type" + ], "additionalProperties": false }, "Session.Message.Synthetic": { @@ -13071,7 +13649,9 @@ "type": "number" } }, - "required": ["created"], + "required": [ + "created" + ], "additionalProperties": false }, "text": { @@ -13082,10 +13662,17 @@ }, "type": { "type": "string", - "enum": ["synthetic"] + "enum": [ + "synthetic" + ] } }, - "required": ["id", "time", "text", "type"], + "required": [ + "id", + "time", + "text", + "type" + ], "additionalProperties": false }, "Session.Message.System": { @@ -13109,12 +13696,16 @@ "type": "number" } }, - "required": ["created"], + "required": [ + "created" + ], "additionalProperties": false }, "type": { "type": "string", - "enum": ["system"] + "enum": [ + "system" + ] }, "text": { "type": "string" @@ -13123,7 +13714,12 @@ "type": "string" } }, - "required": ["id", "time", "type", "text"], + "required": [ + "id", + "time", + "type", + "text" + ], "additionalProperties": false }, "Session.Message.Skill": { @@ -13147,12 +13743,16 @@ "type": "number" } }, - "required": ["created"], + "required": [ + "created" + ], "additionalProperties": false }, "type": { "type": "string", - "enum": ["skill"] + "enum": [ + "skill" + ] }, "skill": { "type": "string" @@ -13164,7 +13764,14 @@ "type": "string" } }, - "required": ["id", "time", "type", "skill", "name", "text"], + "required": [ + "id", + "time", + "type", + "skill", + "name", + "text" + ], "additionalProperties": false }, "Session.Message.Shell": { @@ -13191,12 +13798,16 @@ "type": "number" } }, - "required": ["created"], + "required": [ + "created" + ], "additionalProperties": false }, "type": { "type": "string", - "enum": ["shell"] + "enum": [ + "shell" + ] }, "shellID": { "type": "string", @@ -13211,7 +13822,12 @@ }, "status": { "type": "string", - "enum": ["running", "exited", "timeout", "killed"] + "enum": [ + "running", + "exited", + "timeout", + "killed" + ] }, "exit": { "anyOf": [ @@ -13222,21 +13838,31 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, { "type": "string", - "enum": ["Infinity", "-Infinity", "NaN"] + "enum": [ + "Infinity", + "-Infinity", + "NaN" + ] } ] }, @@ -13266,11 +13892,23 @@ "type": "boolean" } }, - "required": ["output", "cursor", "size", "truncated"], + "required": [ + "output", + "cursor", + "size", + "truncated" + ], "additionalProperties": false } }, - "required": ["id", "time", "type", "shellID", "command", "status"], + "required": [ + "id", + "time", + "type", + "shellID", + "command", + "status" + ], "additionalProperties": false }, "Session.Message.ProviderState": { @@ -13281,7 +13919,9 @@ "properties": { "type": { "type": "string", - "enum": ["text"] + "enum": [ + "text" + ] }, "text": { "type": "string" @@ -13290,7 +13930,10 @@ "$ref": "#/components/schemas/Session.Message.ProviderState" } }, - "required": ["type", "text"], + "required": [ + "type", + "text" + ], "additionalProperties": false }, "Session.Message.Assistant.Reasoning": { @@ -13298,7 +13941,9 @@ "properties": { "type": { "type": "string", - "enum": ["reasoning"] + "enum": [ + "reasoning" + ] }, "text": { "type": "string" @@ -13316,11 +13961,16 @@ "type": "number" } }, - "required": ["created"], + "required": [ + "created" + ], "additionalProperties": false } }, - "required": ["type", "text"], + "required": [ + "type", + "text" + ], "additionalProperties": false }, "Session.Message.ToolState.Streaming": { @@ -13328,13 +13978,18 @@ "properties": { "status": { "type": "string", - "enum": ["streaming"] + "enum": [ + "streaming" + ] }, "input": { "type": "string" } }, - "required": ["status", "input"], + "required": [ + "status", + "input" + ], "additionalProperties": false }, "Session.Message.ToolState.Running": { @@ -13342,7 +13997,9 @@ "properties": { "status": { "type": "string", - "enum": ["running"] + "enum": [ + "running" + ] }, "input": { "type": "object" @@ -13351,7 +14008,11 @@ "type": "object" } }, - "required": ["status", "input", "metadata"], + "required": [ + "status", + "input", + "metadata" + ], "additionalProperties": false }, "Tool.TextContent": { @@ -13359,13 +14020,18 @@ "properties": { "type": { "type": "string", - "enum": ["text"] + "enum": [ + "text" + ] }, "text": { "type": "string" } }, - "required": ["type", "text"], + "required": [ + "type", + "text" + ], "additionalProperties": false }, "Tool.FileContent": { @@ -13373,7 +14039,9 @@ "properties": { "type": { "type": "string", - "enum": ["file"] + "enum": [ + "file" + ] }, "uri": { "type": "string" @@ -13392,7 +14060,11 @@ ] } }, - "required": ["type", "uri", "mime"], + "required": [ + "type", + "uri", + "mime" + ], "additionalProperties": false }, "Tool.Content": { @@ -13410,7 +14082,9 @@ "properties": { "status": { "type": "string", - "enum": ["completed"] + "enum": [ + "completed" + ] }, "input": { "type": "object" @@ -13431,7 +14105,11 @@ "type": "object" } }, - "required": ["status", "input", "content"], + "required": [ + "status", + "input", + "content" + ], "additionalProperties": false }, "Session.StructuredError": { @@ -13453,7 +14131,10 @@ ] } }, - "required": ["type", "message"], + "required": [ + "type", + "message" + ], "additionalProperties": false }, "Session.Message.ToolState.Error": { @@ -13461,7 +14142,9 @@ "properties": { "status": { "type": "string", - "enum": ["error"] + "enum": [ + "error" + ] }, "input": { "type": "object" @@ -13485,7 +14168,11 @@ "type": "object" } }, - "required": ["status", "input", "error"], + "required": [ + "status", + "input", + "error" + ], "additionalProperties": false }, "Session.Message.Assistant.Tool": { @@ -13493,7 +14180,9 @@ "properties": { "type": { "type": "string", - "enum": ["tool"] + "enum": [ + "tool" + ] }, "id": { "type": "string" @@ -13539,11 +14228,19 @@ "type": "number" } }, - "required": ["created"], + "required": [ + "created" + ], "additionalProperties": false } }, - "required": ["type", "id", "name", "state", "time"], + "required": [ + "type", + "id", + "name", + "state", + "time" + ], "additionalProperties": false }, "Session.Message.Assistant.Retry": { @@ -13564,7 +14261,11 @@ "$ref": "#/components/schemas/Session.StructuredError" } }, - "required": ["attempt", "at", "error"], + "required": [ + "attempt", + "at", + "error" + ], "additionalProperties": false }, "Session.Message.Assistant": { @@ -13591,12 +14292,16 @@ "type": "number" } }, - "required": ["created"], + "required": [ + "created" + ], "additionalProperties": false }, "type": { "type": "string", - "enum": ["assistant"] + "enum": [ + "assistant" + ] }, "agent": { "type": "string" @@ -13640,7 +14345,14 @@ }, "finish": { "type": "string", - "enum": ["stop", "length", "tool-calls", "content-filter", "error", "unknown"] + "enum": [ + "stop", + "length", + "tool-calls", + "content-filter", + "error", + "unknown" + ] }, "cost": { "$ref": "#/components/schemas/Money.USD" @@ -13655,7 +14367,14 @@ "$ref": "#/components/schemas/Session.Message.Assistant.Retry" } }, - "required": ["id", "time", "type", "agent", "model", "content"], + "required": [ + "id", + "time", + "type", + "agent", + "model", + "content" + ], "additionalProperties": false }, "Session.Message.Compaction.Running": { @@ -13663,7 +14382,9 @@ "properties": { "type": { "type": "string", - "enum": ["compaction"] + "enum": [ + "compaction" + ] }, "id": { "type": "string", @@ -13683,16 +14404,23 @@ "type": "number" } }, - "required": ["created"], + "required": [ + "created" + ], "additionalProperties": false }, "status": { "type": "string", - "enum": ["running"] + "enum": [ + "running" + ] }, "reason": { "type": "string", - "enum": ["auto", "manual"] + "enum": [ + "auto", + "manual" + ] }, "summary": { "type": "string" @@ -13701,7 +14429,15 @@ "type": "string" } }, - "required": ["type", "id", "time", "status", "reason", "summary", "recent"], + "required": [ + "type", + "id", + "time", + "status", + "reason", + "summary", + "recent" + ], "additionalProperties": false }, "Session.Message.Compaction.Completed": { @@ -13709,7 +14445,9 @@ "properties": { "type": { "type": "string", - "enum": ["compaction"] + "enum": [ + "compaction" + ] }, "id": { "type": "string", @@ -13729,16 +14467,23 @@ "type": "number" } }, - "required": ["created"], + "required": [ + "created" + ], "additionalProperties": false }, "status": { "type": "string", - "enum": ["completed"] + "enum": [ + "completed" + ] }, "reason": { "type": "string", - "enum": ["auto", "manual"] + "enum": [ + "auto", + "manual" + ] }, "summary": { "type": "string" @@ -13747,7 +14492,15 @@ "type": "string" } }, - "required": ["type", "id", "time", "status", "reason", "summary", "recent"], + "required": [ + "type", + "id", + "time", + "status", + "reason", + "summary", + "recent" + ], "additionalProperties": false }, "Session.Message.Compaction.Failed": { @@ -13755,7 +14508,9 @@ "properties": { "type": { "type": "string", - "enum": ["compaction"] + "enum": [ + "compaction" + ] }, "id": { "type": "string", @@ -13775,22 +14530,36 @@ "type": "number" } }, - "required": ["created"], + "required": [ + "created" + ], "additionalProperties": false }, "status": { "type": "string", - "enum": ["failed"] + "enum": [ + "failed" + ] }, "reason": { "type": "string", - "enum": ["auto", "manual"] + "enum": [ + "auto", + "manual" + ] }, "error": { "$ref": "#/components/schemas/Session.StructuredError" } }, - "required": ["type", "id", "time", "status", "reason", "error"], + "required": [ + "type", + "id", + "time", + "status", + "reason", + "error" + ], "additionalProperties": false }, "Session.Message.Compaction": { @@ -13845,7 +14614,9 @@ "properties": { "_tag": { "type": "string", - "enum": ["ConflictError"] + "enum": [ + "ConflictError" + ] }, "message": { "type": "string" @@ -13861,7 +14632,10 @@ ] } }, - "required": ["_tag", "message"], + "required": [ + "_tag", + "message" + ], "additionalProperties": false }, "SessionTransfer.Data": { @@ -13877,7 +14651,10 @@ } } }, - "required": ["info", "messages"], + "required": [ + "info", + "messages" + ], "additionalProperties": false }, "SessionNotFoundError": { @@ -13885,7 +14662,9 @@ "properties": { "_tag": { "type": "string", - "enum": ["SessionNotFoundError"] + "enum": [ + "SessionNotFoundError" + ] }, "sessionID": { "type": "string" @@ -13894,7 +14673,11 @@ "type": "string" } }, - "required": ["_tag", "sessionID", "message"], + "required": [ + "_tag", + "sessionID", + "message" + ], "additionalProperties": false }, "UnknownError": { @@ -13902,7 +14685,9 @@ "properties": { "_tag": { "type": "string", - "enum": ["UnknownError"] + "enum": [ + "UnknownError" + ] }, "message": { "type": "string" @@ -13918,7 +14703,10 @@ ] } }, - "required": ["_tag", "message"], + "required": [ + "_tag", + "message" + ], "additionalProperties": false }, "SessionActive": { @@ -13926,10 +14714,14 @@ "properties": { "type": { "type": "string", - "enum": ["running"] + "enum": [ + "running" + ] } }, - "required": ["type"], + "required": [ + "type" + ], "additionalProperties": false }, "Session.ForkRequestBoundary": { @@ -13939,7 +14731,9 @@ "properties": { "type": { "type": "string", - "enum": ["before"] + "enum": [ + "before" + ] }, "messageID": { "type": "string", @@ -13950,7 +14744,10 @@ ] } }, - "required": ["type", "messageID"], + "required": [ + "type", + "messageID" + ], "additionalProperties": false }, { @@ -13958,10 +14755,14 @@ "properties": { "type": { "type": "string", - "enum": ["through"] + "enum": [ + "through" + ] } }, - "required": ["type"], + "required": [ + "type" + ], "additionalProperties": false } ] @@ -13971,7 +14772,9 @@ "properties": { "_tag": { "type": "string", - "enum": ["MessageNotFoundError"] + "enum": [ + "MessageNotFoundError" + ] }, "sessionID": { "type": "string" @@ -13983,12 +14786,20 @@ "type": "string" } }, - "required": ["_tag", "sessionID", "messageID", "message"], + "required": [ + "_tag", + "sessionID", + "messageID", + "message" + ], "additionalProperties": false }, "Session.Inbox.Delivery": { "type": "string", - "enum": ["steer", "queue"] + "enum": [ + "steer", + "queue" + ] }, "PromptInput.FileAttachment": { "type": "object", @@ -14006,7 +14817,9 @@ "$ref": "#/components/schemas/Prompt.Mention" } }, - "required": ["uri"], + "required": [ + "uri" + ], "additionalProperties": false }, "PromptInput.SkillAttachment": { @@ -14019,7 +14832,9 @@ "$ref": "#/components/schemas/Prompt.Mention" } }, - "required": ["id"], + "required": [ + "id" + ], "additionalProperties": false }, "Session.Inbox.UserPayload": { @@ -14050,7 +14865,9 @@ "type": "object" } }, - "required": ["text"], + "required": [ + "text" + ], "additionalProperties": false }, "Session.Inbox.User": { @@ -14077,7 +14894,9 @@ }, "type": { "type": "string", - "enum": ["user"] + "enum": [ + "user" + ] }, "payload": { "$ref": "#/components/schemas/Session.Inbox.UserPayload" @@ -14086,7 +14905,14 @@ "$ref": "#/components/schemas/Session.Inbox.Delivery" } }, - "required": ["id", "sessionID", "timeCreated", "type", "payload", "delivery"], + "required": [ + "id", + "sessionID", + "timeCreated", + "type", + "payload", + "delivery" + ], "additionalProperties": false }, "CommandNotFoundError": { @@ -14094,7 +14920,9 @@ "properties": { "_tag": { "type": "string", - "enum": ["CommandNotFoundError"] + "enum": [ + "CommandNotFoundError" + ] }, "command": { "type": "string" @@ -14103,7 +14931,11 @@ "type": "string" } }, - "required": ["_tag", "command", "message"], + "required": [ + "_tag", + "command", + "message" + ], "additionalProperties": false }, "CommandEvaluationError": { @@ -14111,7 +14943,9 @@ "properties": { "_tag": { "type": "string", - "enum": ["CommandEvaluationError"] + "enum": [ + "CommandEvaluationError" + ] }, "command": { "type": "string" @@ -14120,7 +14954,11 @@ "type": "string" } }, - "required": ["_tag", "command", "message"], + "required": [ + "_tag", + "command", + "message" + ], "additionalProperties": false }, "SkillNotFoundError": { @@ -14128,7 +14966,9 @@ "properties": { "_tag": { "type": "string", - "enum": ["SkillNotFoundError"] + "enum": [ + "SkillNotFoundError" + ] }, "skill": { "type": "string" @@ -14137,7 +14977,11 @@ "type": "string" } }, - "required": ["_tag", "skill", "message"], + "required": [ + "_tag", + "skill", + "message" + ], "additionalProperties": false }, "Session.Inbox.SyntheticPayload": { @@ -14153,7 +14997,9 @@ "type": "object" } }, - "required": ["text"], + "required": [ + "text" + ], "additionalProperties": false }, "Session.Inbox.Synthetic": { @@ -14180,7 +15026,9 @@ }, "type": { "type": "string", - "enum": ["synthetic"] + "enum": [ + "synthetic" + ] }, "payload": { "$ref": "#/components/schemas/Session.Inbox.SyntheticPayload" @@ -14189,7 +15037,14 @@ "$ref": "#/components/schemas/Session.Inbox.Delivery" } }, - "required": ["id", "sessionID", "timeCreated", "type", "payload", "delivery"], + "required": [ + "id", + "sessionID", + "timeCreated", + "type", + "payload", + "delivery" + ], "additionalProperties": false }, "Session.Inbox.CompactionPayload": { @@ -14226,7 +15081,9 @@ }, "type": { "type": "string", - "enum": ["compaction"] + "enum": [ + "compaction" + ] }, "payload": { "$ref": "#/components/schemas/Session.Inbox.CompactionPayload" @@ -14235,7 +15092,14 @@ "$ref": "#/components/schemas/Session.Inbox.Delivery" } }, - "required": ["id", "sessionID", "timeCreated", "type", "payload", "delivery"], + "required": [ + "id", + "sessionID", + "timeCreated", + "type", + "payload", + "delivery" + ], "additionalProperties": false }, "ServiceUnavailableError": { @@ -14243,7 +15107,9 @@ "properties": { "_tag": { "type": "string", - "enum": ["ServiceUnavailableError"] + "enum": [ + "ServiceUnavailableError" + ] }, "message": { "type": "string" @@ -14259,7 +15125,10 @@ ] } }, - "required": ["_tag", "message"], + "required": [ + "_tag", + "message" + ], "additionalProperties": false }, "SessionBusyError": { @@ -14267,7 +15136,9 @@ "properties": { "_tag": { "type": "string", - "enum": ["SessionBusyError"] + "enum": [ + "SessionBusyError" + ] }, "sessionID": { "type": "string" @@ -14276,7 +15147,11 @@ "type": "string" } }, - "required": ["_tag", "sessionID", "message"], + "required": [ + "_tag", + "sessionID", + "message" + ], "additionalProperties": false }, "Session.Inbox.MovePayload": { @@ -14292,7 +15167,10 @@ "type": "string" } }, - "required": ["location", "projectID"], + "required": [ + "location", + "projectID" + ], "additionalProperties": false }, "Session.Inbox.Move": { @@ -14319,7 +15197,9 @@ }, "type": { "type": "string", - "enum": ["move"] + "enum": [ + "move" + ] }, "payload": { "$ref": "#/components/schemas/Session.Inbox.MovePayload" @@ -14328,7 +15208,14 @@ "$ref": "#/components/schemas/Session.Inbox.Delivery" } }, - "required": ["id", "sessionID", "timeCreated", "type", "payload", "delivery"], + "required": [ + "id", + "sessionID", + "timeCreated", + "type", + "payload", + "delivery" + ], "additionalProperties": false }, "Session.Inbox.Info": { @@ -14364,7 +15251,10 @@ }, "value": {} }, - "required": ["key", "value"], + "required": [ + "key", + "value" + ], "additionalProperties": false }, "InstructionEntryValueTooLargeError": { @@ -14372,7 +15262,9 @@ "properties": { "_tag": { "type": "string", - "enum": ["InstructionEntryValueTooLargeError"] + "enum": [ + "InstructionEntryValueTooLargeError" + ] }, "actualBytes": { "type": "integer" @@ -14384,7 +15276,12 @@ "type": "string" } }, - "required": ["_tag", "actualBytes", "maxBytes", "message"], + "required": [ + "_tag", + "actualBytes", + "maxBytes", + "message" + ], "additionalProperties": false }, "SessionGenerateResponse": { @@ -14397,11 +15294,15 @@ "type": "string" } }, - "required": ["text"], + "required": [ + "text" + ], "additionalProperties": false } }, - "required": ["data"], + "required": [ + "data" + ], "additionalProperties": false }, "session.created": { @@ -14423,7 +15324,9 @@ }, "type": { "type": "string", - "enum": ["session.created"] + "enum": [ + "session.created" + ] }, "durable": { "type": "object", @@ -14441,10 +15344,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -14494,11 +15403,23 @@ "type": "string" } }, - "required": ["sessionID", "projectID", "location", "slug", "version"], + "required": [ + "sessionID", + "projectID", + "location", + "slug", + "version" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "session.agent.selected": { @@ -14520,7 +15441,9 @@ }, "type": { "type": "string", - "enum": ["session.agent.selected"] + "enum": [ + "session.agent.selected" + ] }, "durable": { "type": "object", @@ -14538,10 +15461,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -14565,11 +15494,20 @@ "type": "string" } }, - "required": ["sessionID", "agent"], + "required": [ + "sessionID", + "agent" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "session.model.selected": { @@ -14591,7 +15529,9 @@ }, "type": { "type": "string", - "enum": ["session.model.selected"] + "enum": [ + "session.model.selected" + ] }, "durable": { "type": "object", @@ -14609,10 +15549,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -14636,11 +15582,20 @@ "$ref": "#/components/schemas/Model.Ref" } }, - "required": ["sessionID", "model"], + "required": [ + "sessionID", + "model" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "session.moved": { @@ -14662,7 +15617,9 @@ }, "type": { "type": "string", - "enum": ["session.moved"] + "enum": [ + "session.moved" + ] }, "durable": { "type": "object", @@ -14680,10 +15637,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -14710,11 +15673,21 @@ "type": "string" } }, - "required": ["sessionID", "location", "projectID"], + "required": [ + "sessionID", + "location", + "projectID" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "session.renamed": { @@ -14736,7 +15709,9 @@ }, "type": { "type": "string", - "enum": ["session.renamed"] + "enum": [ + "session.renamed" + ] }, "durable": { "type": "object", @@ -14754,10 +15729,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -14778,11 +15759,20 @@ "type": "string" } }, - "required": ["sessionID", "title"], + "required": [ + "sessionID", + "title" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "session.deleted": { @@ -14804,7 +15794,9 @@ }, "type": { "type": "string", - "enum": ["session.deleted"] + "enum": [ + "session.deleted" + ] }, "durable": { "type": "object", @@ -14822,10 +15814,16 @@ }, "version": { "type": "number", - "enum": [2] + "enum": [ + 2 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -14843,11 +15841,19 @@ ] } }, - "required": ["sessionID"], + "required": [ + "sessionID" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "session.forked": { @@ -14869,7 +15875,9 @@ }, "type": { "type": "string", - "enum": ["session.forked"] + "enum": [ + "session.forked" + ] }, "durable": { "type": "object", @@ -14887,10 +15895,16 @@ }, "version": { "type": "number", - "enum": [2] + "enum": [ + 2 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -14932,11 +15946,21 @@ } } }, - "required": ["sessionID", "parentID", "boundary"], + "required": [ + "sessionID", + "parentID", + "boundary" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "session.inbox.delivered": { @@ -14958,7 +15982,9 @@ }, "type": { "type": "string", - "enum": ["session.inbox.delivered"] + "enum": [ + "session.inbox.delivered" + ] }, "durable": { "type": "object", @@ -14976,10 +16002,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -15005,11 +16037,20 @@ ] } }, - "required": ["sessionID", "inboxID"], + "required": [ + "sessionID", + "inboxID" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "Session.Inbox.UserPayload1": { @@ -15040,7 +16081,9 @@ "type": "object" } }, - "required": ["text"], + "required": [ + "text" + ], "additionalProperties": false }, "Session.Inbox.SyntheticPayload1": { @@ -15056,7 +16099,9 @@ "type": "object" } }, - "required": ["text"], + "required": [ + "text" + ], "additionalProperties": false }, "Session.Inbox.Item": { @@ -15066,7 +16111,9 @@ "properties": { "type": { "type": "string", - "enum": ["user"] + "enum": [ + "user" + ] }, "payload": { "$ref": "#/components/schemas/Session.Inbox.UserPayload1" @@ -15075,7 +16122,11 @@ "$ref": "#/components/schemas/Session.Inbox.Delivery" } }, - "required": ["type", "payload", "delivery"], + "required": [ + "type", + "payload", + "delivery" + ], "additionalProperties": false }, { @@ -15083,7 +16134,9 @@ "properties": { "type": { "type": "string", - "enum": ["synthetic"] + "enum": [ + "synthetic" + ] }, "payload": { "$ref": "#/components/schemas/Session.Inbox.SyntheticPayload1" @@ -15092,7 +16145,11 @@ "$ref": "#/components/schemas/Session.Inbox.Delivery" } }, - "required": ["type", "payload", "delivery"], + "required": [ + "type", + "payload", + "delivery" + ], "additionalProperties": false }, { @@ -15100,7 +16157,9 @@ "properties": { "type": { "type": "string", - "enum": ["compaction"] + "enum": [ + "compaction" + ] }, "payload": { "$ref": "#/components/schemas/Session.Inbox.CompactionPayload" @@ -15109,7 +16168,11 @@ "$ref": "#/components/schemas/Session.Inbox.Delivery" } }, - "required": ["type", "payload", "delivery"], + "required": [ + "type", + "payload", + "delivery" + ], "additionalProperties": false }, { @@ -15117,7 +16180,9 @@ "properties": { "type": { "type": "string", - "enum": ["move"] + "enum": [ + "move" + ] }, "payload": { "$ref": "#/components/schemas/Session.Inbox.MovePayload" @@ -15126,7 +16191,11 @@ "$ref": "#/components/schemas/Session.Inbox.Delivery" } }, - "required": ["type", "payload", "delivery"], + "required": [ + "type", + "payload", + "delivery" + ], "additionalProperties": false } ] @@ -15150,7 +16219,9 @@ }, "type": { "type": "string", - "enum": ["session.inbox.enqueued"] + "enum": [ + "session.inbox.enqueued" + ] }, "durable": { "type": "object", @@ -15168,10 +16239,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -15200,11 +16277,21 @@ "$ref": "#/components/schemas/Session.Inbox.Item" } }, - "required": ["sessionID", "inboxID", "item"], + "required": [ + "sessionID", + "inboxID", + "item" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "session.inbox.cancelled": { @@ -15226,7 +16313,9 @@ }, "type": { "type": "string", - "enum": ["session.inbox.cancelled"] + "enum": [ + "session.inbox.cancelled" + ] }, "durable": { "type": "object", @@ -15244,10 +16333,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -15273,11 +16368,20 @@ ] } }, - "required": ["sessionID", "inboxID"], + "required": [ + "sessionID", + "inboxID" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "session.inbox.delivery.changed": { @@ -15299,7 +16403,9 @@ }, "type": { "type": "string", - "enum": ["session.inbox.delivery.changed"] + "enum": [ + "session.inbox.delivery.changed" + ] }, "durable": { "type": "object", @@ -15317,10 +16423,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -15349,11 +16461,21 @@ "$ref": "#/components/schemas/Session.Inbox.Delivery" } }, - "required": ["sessionID", "inboxID", "delivery"], + "required": [ + "sessionID", + "inboxID", + "delivery" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "session.execution.started": { @@ -15375,7 +16497,9 @@ }, "type": { "type": "string", - "enum": ["session.execution.started"] + "enum": [ + "session.execution.started" + ] }, "durable": { "type": "object", @@ -15393,10 +16517,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -15414,11 +16544,19 @@ ] } }, - "required": ["sessionID"], + "required": [ + "sessionID" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "session.execution.succeeded": { @@ -15440,7 +16578,9 @@ }, "type": { "type": "string", - "enum": ["session.execution.succeeded"] + "enum": [ + "session.execution.succeeded" + ] }, "durable": { "type": "object", @@ -15458,10 +16598,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -15479,11 +16625,19 @@ ] } }, - "required": ["sessionID"], + "required": [ + "sessionID" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "session.execution.failed": { @@ -15505,7 +16659,9 @@ }, "type": { "type": "string", - "enum": ["session.execution.failed"] + "enum": [ + "session.execution.failed" + ] }, "durable": { "type": "object", @@ -15523,10 +16679,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -15547,11 +16709,20 @@ "$ref": "#/components/schemas/Session.StructuredError" } }, - "required": ["sessionID", "error"], + "required": [ + "sessionID", + "error" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "session.execution.interrupted": { @@ -15573,7 +16744,9 @@ }, "type": { "type": "string", - "enum": ["session.execution.interrupted"] + "enum": [ + "session.execution.interrupted" + ] }, "durable": { "type": "object", @@ -15591,10 +16764,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -15613,14 +16792,27 @@ }, "reason": { "type": "string", - "enum": ["user", "shutdown", "superseded"] + "enum": [ + "user", + "shutdown", + "superseded" + ] } }, - "required": ["sessionID", "reason"], + "required": [ + "sessionID", + "reason" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "session.instructions.updated": { @@ -15642,7 +16834,9 @@ }, "type": { "type": "string", - "enum": ["session.instructions.updated"] + "enum": [ + "session.instructions.updated" + ] }, "durable": { "type": "object", @@ -15660,10 +16854,16 @@ }, "version": { "type": "number", - "enum": [2] + "enum": [ + 2 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -15694,7 +16894,9 @@ }, { "type": "string", - "enum": ["removed"] + "enum": [ + "removed" + ] } ] } @@ -15703,11 +16905,20 @@ "type": "string" } }, - "required": ["sessionID", "delta"], + "required": [ + "sessionID", + "delta" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "session.synthetic": { @@ -15729,7 +16940,9 @@ }, "type": { "type": "string", - "enum": ["session.synthetic"] + "enum": [ + "session.synthetic" + ] }, "durable": { "type": "object", @@ -15747,10 +16960,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -15777,11 +16996,20 @@ "type": "object" } }, - "required": ["sessionID", "text"], + "required": [ + "sessionID", + "text" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "session.skill.activated": { @@ -15803,7 +17031,9 @@ }, "type": { "type": "string", - "enum": ["session.skill.activated"] + "enum": [ + "session.skill.activated" + ] }, "durable": { "type": "object", @@ -15821,10 +17051,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -15851,11 +17087,22 @@ "type": "string" } }, - "required": ["sessionID", "id", "name", "text"], + "required": [ + "sessionID", + "id", + "name", + "text" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "Shell.Info": { @@ -15871,7 +17118,12 @@ }, "status": { "type": "string", - "enum": ["running", "exited", "timeout", "killed"] + "enum": [ + "running", + "exited", + "timeout", + "killed" + ] }, "command": { "type": "string" @@ -15909,11 +17161,22 @@ "type": "number" } }, - "required": ["started"], + "required": [ + "started" + ], "additionalProperties": false } }, - "required": ["id", "status", "command", "cwd", "shell", "file", "metadata", "time"], + "required": [ + "id", + "status", + "command", + "cwd", + "shell", + "file", + "metadata", + "time" + ], "additionalProperties": false }, "session.shell.started": { @@ -15935,7 +17198,9 @@ }, "type": { "type": "string", - "enum": ["session.shell.started"] + "enum": [ + "session.shell.started" + ] }, "durable": { "type": "object", @@ -15953,10 +17218,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -15977,11 +17248,20 @@ "$ref": "#/components/schemas/Shell.Info" } }, - "required": ["sessionID", "shell"], + "required": [ + "sessionID", + "shell" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "session.shell.ended": { @@ -16003,7 +17283,9 @@ }, "type": { "type": "string", - "enum": ["session.shell.ended"] + "enum": [ + "session.shell.ended" + ] }, "durable": { "type": "object", @@ -16021,10 +17303,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -16070,15 +17358,30 @@ "type": "boolean" } }, - "required": ["output", "cursor", "size", "truncated"], + "required": [ + "output", + "cursor", + "size", + "truncated" + ], "additionalProperties": false } }, - "required": ["sessionID", "shell", "output"], + "required": [ + "sessionID", + "shell", + "output" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "session.step.started": { @@ -16100,7 +17403,9 @@ }, "type": { "type": "string", - "enum": ["session.step.started"] + "enum": [ + "session.step.started" + ] }, "durable": { "type": "object", @@ -16118,10 +17423,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -16156,11 +17467,22 @@ "type": "string" } }, - "required": ["sessionID", "assistantMessageID", "agent", "model"], + "required": [ + "sessionID", + "assistantMessageID", + "agent", + "model" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "session.step.ended": { @@ -16182,7 +17504,9 @@ }, "type": { "type": "string", - "enum": ["session.step.ended"] + "enum": [ + "session.step.ended" + ] }, "durable": { "type": "object", @@ -16200,10 +17524,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -16230,7 +17560,14 @@ }, "finish": { "type": "string", - "enum": ["stop", "length", "tool-calls", "content-filter", "error", "unknown"] + "enum": [ + "stop", + "length", + "tool-calls", + "content-filter", + "error", + "unknown" + ] }, "cost": { "$ref": "#/components/schemas/Money.USD" @@ -16248,11 +17585,23 @@ } } }, - "required": ["sessionID", "assistantMessageID", "finish", "cost", "tokens"], + "required": [ + "sessionID", + "assistantMessageID", + "finish", + "cost", + "tokens" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "session.step.failed": { @@ -16274,7 +17623,9 @@ }, "type": { "type": "string", - "enum": ["session.step.failed"] + "enum": [ + "session.step.failed" + ] }, "durable": { "type": "object", @@ -16292,10 +17643,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -16339,11 +17696,21 @@ } } }, - "required": ["sessionID", "assistantMessageID", "error"], + "required": [ + "sessionID", + "assistantMessageID", + "error" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "session.text.started": { @@ -16365,7 +17732,9 @@ }, "type": { "type": "string", - "enum": ["session.text.started"] + "enum": [ + "session.text.started" + ] }, "durable": { "type": "object", @@ -16383,10 +17752,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -16420,11 +17795,21 @@ ] } }, - "required": ["sessionID", "assistantMessageID", "ordinal"], + "required": [ + "sessionID", + "assistantMessageID", + "ordinal" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "Session.Message.ProviderState4": { @@ -16449,7 +17834,9 @@ }, "type": { "type": "string", - "enum": ["session.text.ended"] + "enum": [ + "session.text.ended" + ] }, "durable": { "type": "object", @@ -16467,10 +17854,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -16510,11 +17903,22 @@ "$ref": "#/components/schemas/Session.Message.ProviderState4" } }, - "required": ["sessionID", "assistantMessageID", "ordinal", "text"], + "required": [ + "sessionID", + "assistantMessageID", + "ordinal", + "text" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "Session.Message.ProviderState5": { @@ -16539,7 +17943,9 @@ }, "type": { "type": "string", - "enum": ["session.reasoning.started"] + "enum": [ + "session.reasoning.started" + ] }, "durable": { "type": "object", @@ -16557,10 +17963,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -16597,11 +18009,21 @@ "$ref": "#/components/schemas/Session.Message.ProviderState5" } }, - "required": ["sessionID", "assistantMessageID", "ordinal"], + "required": [ + "sessionID", + "assistantMessageID", + "ordinal" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "Session.Message.ProviderState6": { @@ -16626,7 +18048,9 @@ }, "type": { "type": "string", - "enum": ["session.reasoning.ended"] + "enum": [ + "session.reasoning.ended" + ] }, "durable": { "type": "object", @@ -16644,10 +18068,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -16687,11 +18117,22 @@ "$ref": "#/components/schemas/Session.Message.ProviderState6" } }, - "required": ["sessionID", "assistantMessageID", "ordinal", "text"], + "required": [ + "sessionID", + "assistantMessageID", + "ordinal", + "text" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "session.tool.input.started": { @@ -16713,7 +18154,9 @@ }, "type": { "type": "string", - "enum": ["session.tool.input.started"] + "enum": [ + "session.tool.input.started" + ] }, "durable": { "type": "object", @@ -16731,10 +18174,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -16766,11 +18215,22 @@ "type": "string" } }, - "required": ["sessionID", "assistantMessageID", "id", "name"], + "required": [ + "sessionID", + "assistantMessageID", + "id", + "name" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "session.tool.input.ended": { @@ -16792,7 +18252,9 @@ }, "type": { "type": "string", - "enum": ["session.tool.input.ended"] + "enum": [ + "session.tool.input.ended" + ] }, "durable": { "type": "object", @@ -16810,10 +18272,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -16845,11 +18313,22 @@ "type": "string" } }, - "required": ["sessionID", "assistantMessageID", "id", "text"], + "required": [ + "sessionID", + "assistantMessageID", + "id", + "text" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "Session.Message.ProviderState7": { @@ -16874,7 +18353,9 @@ }, "type": { "type": "string", - "enum": ["session.tool.called"] + "enum": [ + "session.tool.called" + ] }, "durable": { "type": "object", @@ -16892,10 +18373,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -16933,11 +18420,23 @@ "$ref": "#/components/schemas/Session.Message.ProviderState7" } }, - "required": ["sessionID", "assistantMessageID", "id", "input", "executed"], + "required": [ + "sessionID", + "assistantMessageID", + "id", + "input", + "executed" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "Tool.FileContent1": { @@ -16945,7 +18444,9 @@ "properties": { "type": { "type": "string", - "enum": ["file"] + "enum": [ + "file" + ] }, "uri": { "type": "string" @@ -16964,7 +18465,11 @@ ] } }, - "required": ["type", "uri", "mime"], + "required": [ + "type", + "uri", + "mime" + ], "additionalProperties": false }, "Tool.Content1": { @@ -16999,7 +18504,9 @@ }, "type": { "type": "string", - "enum": ["session.tool.success"] + "enum": [ + "session.tool.success" + ] }, "durable": { "type": "object", @@ -17017,10 +18524,16 @@ }, "version": { "type": "number", - "enum": [2] + "enum": [ + 2 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -17070,11 +18583,23 @@ "$ref": "#/components/schemas/Session.Message.ProviderState8" } }, - "required": ["sessionID", "assistantMessageID", "id", "content", "executed"], + "required": [ + "sessionID", + "assistantMessageID", + "id", + "content", + "executed" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "Session.Message.ProviderState9": { @@ -17099,7 +18624,9 @@ }, "type": { "type": "string", - "enum": ["session.tool.failed"] + "enum": [ + "session.tool.failed" + ] }, "durable": { "type": "object", @@ -17117,10 +18644,16 @@ }, "version": { "type": "number", - "enum": [2] + "enum": [ + 2 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -17173,11 +18706,23 @@ "$ref": "#/components/schemas/Session.Message.ProviderState9" } }, - "required": ["sessionID", "assistantMessageID", "id", "error", "executed"], + "required": [ + "sessionID", + "assistantMessageID", + "id", + "error", + "executed" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "session.retry.scheduled": { @@ -17199,7 +18744,9 @@ }, "type": { "type": "string", - "enum": ["session.retry.scheduled"] + "enum": [ + "session.retry.scheduled" + ] }, "durable": { "type": "object", @@ -17217,10 +18764,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -17265,11 +18818,23 @@ "$ref": "#/components/schemas/Session.StructuredError" } }, - "required": ["sessionID", "assistantMessageID", "attempt", "at", "error"], + "required": [ + "sessionID", + "assistantMessageID", + "attempt", + "at", + "error" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "session.compaction.started": { @@ -17291,7 +18856,9 @@ }, "type": { "type": "string", - "enum": ["session.compaction.started"] + "enum": [ + "session.compaction.started" + ] }, "durable": { "type": "object", @@ -17309,10 +18876,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -17331,7 +18904,10 @@ }, "reason": { "type": "string", - "enum": ["auto", "manual"] + "enum": [ + "auto", + "manual" + ] }, "recent": { "type": "string" @@ -17345,11 +18921,21 @@ ] } }, - "required": ["sessionID", "reason", "recent"], + "required": [ + "sessionID", + "reason", + "recent" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "session.compaction.ended": { @@ -17371,7 +18957,9 @@ }, "type": { "type": "string", - "enum": ["session.compaction.ended"] + "enum": [ + "session.compaction.ended" + ] }, "durable": { "type": "object", @@ -17389,10 +18977,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -17411,7 +19005,10 @@ }, "reason": { "type": "string", - "enum": ["auto", "manual"] + "enum": [ + "auto", + "manual" + ] }, "text": { "type": "string" @@ -17420,11 +19017,22 @@ "type": "string" } }, - "required": ["sessionID", "reason", "text", "recent"], + "required": [ + "sessionID", + "reason", + "text", + "recent" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "session.compaction.failed": { @@ -17446,7 +19054,9 @@ }, "type": { "type": "string", - "enum": ["session.compaction.failed"] + "enum": [ + "session.compaction.failed" + ] }, "durable": { "type": "object", @@ -17464,10 +19074,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -17486,7 +19102,10 @@ }, "reason": { "type": "string", - "enum": ["auto", "manual"] + "enum": [ + "auto", + "manual" + ] }, "error": { "$ref": "#/components/schemas/Session.StructuredError" @@ -17500,11 +19119,21 @@ ] } }, - "required": ["sessionID", "reason", "error"], + "required": [ + "sessionID", + "reason", + "error" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "session.revert.staged": { @@ -17526,7 +19155,9 @@ }, "type": { "type": "string", - "enum": ["session.revert.staged"] + "enum": [ + "session.revert.staged" + ] }, "durable": { "type": "object", @@ -17544,10 +19175,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -17568,11 +19205,20 @@ "$ref": "#/components/schemas/Session.Revert" } }, - "required": ["sessionID", "revert"], + "required": [ + "sessionID", + "revert" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "session.revert.cleared": { @@ -17594,7 +19240,9 @@ }, "type": { "type": "string", - "enum": ["session.revert.cleared"] + "enum": [ + "session.revert.cleared" + ] }, "durable": { "type": "object", @@ -17612,10 +19260,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -17633,11 +19287,19 @@ ] } }, - "required": ["sessionID"], + "required": [ + "sessionID" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "session.revert.committed": { @@ -17659,7 +19321,9 @@ }, "type": { "type": "string", - "enum": ["session.revert.committed"] + "enum": [ + "session.revert.committed" + ] }, "durable": { "type": "object", @@ -17677,10 +19341,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -17706,11 +19376,20 @@ ] } }, - "required": ["sessionID", "to"], + "required": [ + "sessionID", + "to" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "session.usage.recorded": { @@ -17732,7 +19411,9 @@ }, "type": { "type": "string", - "enum": ["session.usage.recorded"] + "enum": [ + "session.usage.recorded" + ] }, "durable": { "type": "object", @@ -17750,10 +19431,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -17772,7 +19459,10 @@ }, "source": { "type": "string", - "enum": ["title", "compaction"] + "enum": [ + "title", + "compaction" + ] }, "cost": { "$ref": "#/components/schemas/Money.USD" @@ -17781,11 +19471,22 @@ "$ref": "#/components/schemas/TokenUsage.Info" } }, - "required": ["sessionID", "source", "cost", "tokens"], + "required": [ + "sessionID", + "source", + "cost", + "tokens" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "Session.Event.Durable": { @@ -17917,7 +19618,9 @@ "properties": { "type": { "type": "string", - "enum": ["log.synced"] + "enum": [ + "log.synced" + ] }, "aggregateID": { "type": "string" @@ -17931,7 +19634,10 @@ ] } }, - "required": ["type", "aggregateID"], + "required": [ + "type", + "aggregateID" + ], "additionalProperties": false, "description": "Marker emitted once when a log read reaches its captured watermark. The reader holds every event committed at or below seq." }, @@ -17988,14 +19694,21 @@ "additionalProperties": false } }, - "required": ["data", "cursor"], + "required": [ + "data", + "cursor" + ], "additionalProperties": false }, "Model.ReasoningField": { "anyOf": [ { "type": "string", - "enum": ["reasoning", "reasoning_content", "reasoning_text"] + "enum": [ + "reasoning", + "reasoning_content", + "reasoning_text" + ] }, { "type": "string" @@ -18004,7 +19717,10 @@ }, "Model.MaxTokensField": { "type": "string", - "enum": ["max_completion_tokens", "max_tokens"] + "enum": [ + "max_completion_tokens", + "max_tokens" + ] }, "Model.Compatibility": { "type": "object", @@ -18040,7 +19756,11 @@ } } }, - "required": ["tools", "input", "output"], + "required": [ + "tools", + "input", + "output" + ], "additionalProperties": false }, "Model.Variant": { @@ -18062,7 +19782,9 @@ "type": "object" } }, - "required": ["id"], + "required": [ + "id" + ], "additionalProperties": false }, "Money.USDPerMillionTokens": { @@ -18076,13 +19798,18 @@ "properties": { "type": { "type": "string", - "enum": ["context"] + "enum": [ + "context" + ] }, "size": { "type": "integer" } }, - "required": ["type", "size"], + "required": [ + "type", + "size" + ], "additionalProperties": false }, "input": { @@ -18101,11 +19828,18 @@ "$ref": "#/components/schemas/Money.USDPerMillionTokens" } }, - "required": ["read", "write"], + "required": [ + "read", + "write" + ], "additionalProperties": false } }, - "required": ["input", "output", "cache"], + "required": [ + "input", + "output", + "cache" + ], "additionalProperties": false }, "Model.Info": { @@ -18160,7 +19894,9 @@ "type": "number" } }, - "required": ["released"], + "required": [ + "released" + ], "additionalProperties": false }, "cost": { @@ -18171,7 +19907,12 @@ }, "status": { "type": "string", - "enum": ["alpha", "beta", "deprecated", "active"] + "enum": [ + "alpha", + "beta", + "deprecated", + "active" + ] }, "enabled": { "type": "boolean" @@ -18189,7 +19930,10 @@ "type": "integer" } }, - "required": ["context", "output"], + "required": [ + "context", + "output" + ], "additionalProperties": false } }, @@ -18218,11 +19962,15 @@ "type": "string" } }, - "required": ["text"], + "required": [ + "text" + ], "additionalProperties": false } }, - "required": ["data"], + "required": [ + "data" + ], "additionalProperties": false }, "Provider.Info": { @@ -18256,7 +20004,11 @@ "type": "object" } }, - "required": ["id", "name", "package"], + "required": [ + "id", + "name", + "package" + ], "additionalProperties": false }, "ProviderNotFoundError": { @@ -18264,7 +20016,9 @@ "properties": { "_tag": { "type": "string", - "enum": ["ProviderNotFoundError"] + "enum": [ + "ProviderNotFoundError" + ] }, "providerID": { "type": "string" @@ -18273,7 +20027,11 @@ "type": "string" } }, - "required": ["_tag", "providerID", "message"], + "required": [ + "_tag", + "providerID", + "message" + ], "additionalProperties": false }, "Form.When": { @@ -18284,7 +20042,10 @@ }, "op": { "type": "string", - "enum": ["eq", "neq"] + "enum": [ + "eq", + "neq" + ] }, "value": { "anyOf": [ @@ -18300,21 +20061,31 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, { "type": "string", - "enum": ["Infinity", "-Infinity", "NaN"] + "enum": [ + "Infinity", + "-Infinity", + "NaN" + ] } ] }, @@ -18324,7 +20095,11 @@ ] } }, - "required": ["key", "op", "value"], + "required": [ + "key", + "op", + "value" + ], "additionalProperties": false }, "Form.Option": { @@ -18340,7 +20115,10 @@ "type": "string" } }, - "required": ["value", "label"], + "required": [ + "value", + "label" + ], "additionalProperties": false }, "Form.StringField": { @@ -18366,11 +20144,18 @@ }, "type": { "type": "string", - "enum": ["string"] + "enum": [ + "string" + ] }, "format": { "type": "string", - "enum": ["email", "uri", "date", "date-time"] + "enum": [ + "email", + "uri", + "date", + "date-time" + ] }, "minLength": { "type": "integer", @@ -18407,7 +20192,10 @@ "type": "boolean" } }, - "required": ["key", "type"], + "required": [ + "key", + "type" + ], "additionalProperties": false }, "Form.NumberField": { @@ -18433,7 +20221,9 @@ }, "type": { "type": "string", - "enum": ["number"] + "enum": [ + "number" + ] }, "minimum": { "anyOf": [ @@ -18444,21 +20234,31 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, { "type": "string", - "enum": ["Infinity", "-Infinity", "NaN"] + "enum": [ + "Infinity", + "-Infinity", + "NaN" + ] } ] }, @@ -18471,21 +20271,31 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, { "type": "string", - "enum": ["Infinity", "-Infinity", "NaN"] + "enum": [ + "Infinity", + "-Infinity", + "NaN" + ] } ] }, @@ -18498,26 +20308,39 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, { "type": "string", - "enum": ["Infinity", "-Infinity", "NaN"] + "enum": [ + "Infinity", + "-Infinity", + "NaN" + ] } ] } }, - "required": ["key", "type"], + "required": [ + "key", + "type" + ], "additionalProperties": false }, "Form.IntegerField": { @@ -18543,7 +20366,9 @@ }, "type": { "type": "string", - "enum": ["integer"] + "enum": [ + "integer" + ] }, "minimum": { "anyOf": [ @@ -18554,21 +20379,31 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, { "type": "string", - "enum": ["Infinity", "-Infinity", "NaN"] + "enum": [ + "Infinity", + "-Infinity", + "NaN" + ] } ] }, @@ -18581,21 +20416,31 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, { "type": "string", - "enum": ["Infinity", "-Infinity", "NaN"] + "enum": [ + "Infinity", + "-Infinity", + "NaN" + ] } ] }, @@ -18608,26 +20453,39 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, { "type": "string", - "enum": ["Infinity", "-Infinity", "NaN"] + "enum": [ + "Infinity", + "-Infinity", + "NaN" + ] } ] } }, - "required": ["key", "type"], + "required": [ + "key", + "type" + ], "additionalProperties": false }, "Form.BooleanField": { @@ -18653,13 +20511,18 @@ }, "type": { "type": "string", - "enum": ["boolean"] + "enum": [ + "boolean" + ] }, "default": { "type": "boolean" } }, - "required": ["key", "type"], + "required": [ + "key", + "type" + ], "additionalProperties": false }, "Form.MultiselectField": { @@ -18685,7 +20548,9 @@ }, "type": { "type": "string", - "enum": ["multiselect"] + "enum": [ + "multiselect" + ] }, "options": { "type": "array", @@ -18719,7 +20584,11 @@ } } }, - "required": ["key", "type", "options"], + "required": [ + "key", + "type", + "options" + ], "additionalProperties": false }, "Form.ExternalField": { @@ -18730,7 +20599,9 @@ }, "type": { "type": "string", - "enum": ["external"] + "enum": [ + "external" + ] }, "url": { "type": "string" @@ -18742,7 +20613,11 @@ "type": "string" } }, - "required": ["key", "type", "url"], + "required": [ + "key", + "type", + "url" + ], "additionalProperties": false }, "Form.Field": { @@ -18787,7 +20662,9 @@ }, "type": { "type": "string", - "enum": ["oauth"] + "enum": [ + "oauth" + ] }, "label": { "type": "string" @@ -18796,7 +20673,11 @@ "$ref": "#/components/schemas/Form.Fields" } }, - "required": ["id", "type", "label"], + "required": [ + "id", + "type", + "label" + ], "additionalProperties": false }, "Integration.CommandMethod": { @@ -18807,7 +20688,9 @@ }, "type": { "type": "string", - "enum": ["command"] + "enum": [ + "command" + ] }, "label": { "type": "string" @@ -18819,7 +20702,12 @@ } } }, - "required": ["id", "type", "label", "command"], + "required": [ + "id", + "type", + "label", + "command" + ], "additionalProperties": false }, "Integration.KeyMethod": { @@ -18827,7 +20715,9 @@ "properties": { "type": { "type": "string", - "enum": ["key"] + "enum": [ + "key" + ] }, "label": { "type": "string" @@ -18836,7 +20726,9 @@ "$ref": "#/components/schemas/Form.Fields" } }, - "required": ["type"], + "required": [ + "type" + ], "additionalProperties": false }, "Integration.EnvMethod": { @@ -18844,7 +20736,9 @@ "properties": { "type": { "type": "string", - "enum": ["env"] + "enum": [ + "env" + ] }, "names": { "type": "array", @@ -18853,7 +20747,10 @@ } } }, - "required": ["type", "names"], + "required": [ + "type", + "names" + ], "additionalProperties": false }, "Integration.Method": { @@ -18877,7 +20774,9 @@ "properties": { "type": { "type": "string", - "enum": ["credential"] + "enum": [ + "credential" + ] }, "id": { "type": "string" @@ -18886,7 +20785,11 @@ "type": "string" } }, - "required": ["type", "id", "label"], + "required": [ + "type", + "id", + "label" + ], "additionalProperties": false }, "Connection.EnvInfo": { @@ -18894,13 +20797,18 @@ "properties": { "type": { "type": "string", - "enum": ["env"] + "enum": [ + "env" + ] }, "name": { "type": "string" } }, - "required": ["type", "name"], + "required": [ + "type", + "name" + ], "additionalProperties": false }, "Connection.Info": { @@ -18935,7 +20843,12 @@ } } }, - "required": ["id", "name", "methods", "connections"], + "required": [ + "id", + "name", + "methods", + "connections" + ], "additionalProperties": false }, "Form.Value": { @@ -18952,21 +20865,31 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, { "type": "string", - "enum": ["Infinity", "-Infinity", "NaN"] + "enum": [ + "Infinity", + "-Infinity", + "NaN" + ] } ] }, @@ -19001,7 +20924,10 @@ }, "mode": { "type": "string", - "enum": ["auto", "code"] + "enum": [ + "auto", + "code" + ] }, "time": { "type": "object", @@ -19015,21 +20941,31 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, { "type": "string", - "enum": ["Infinity", "-Infinity", "NaN"] + "enum": [ + "Infinity", + "-Infinity", + "NaN" + ] } ] }, @@ -19042,30 +20978,49 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, { "type": "string", - "enum": ["Infinity", "-Infinity", "NaN"] + "enum": [ + "Infinity", + "-Infinity", + "NaN" + ] } ] } }, - "required": ["created", "expires"], + "required": [ + "created", + "expires" + ], "additionalProperties": false } }, - "required": ["attemptID", "url", "instructions", "mode", "time"], + "required": [ + "attemptID", + "url", + "instructions", + "mode", + "time" + ], "additionalProperties": false }, "Integration.AttemptStatus": { @@ -19075,7 +21030,9 @@ "properties": { "status": { "type": "string", - "enum": ["pending"] + "enum": [ + "pending" + ] }, "time": { "type": "object", @@ -19089,21 +21046,31 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, { "type": "string", - "enum": ["Infinity", "-Infinity", "NaN"] + "enum": [ + "Infinity", + "-Infinity", + "NaN" + ] } ] }, @@ -19116,30 +21083,46 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, { "type": "string", - "enum": ["Infinity", "-Infinity", "NaN"] + "enum": [ + "Infinity", + "-Infinity", + "NaN" + ] } ] } }, - "required": ["created", "expires"], + "required": [ + "created", + "expires" + ], "additionalProperties": false } }, - "required": ["status", "time"], + "required": [ + "status", + "time" + ], "additionalProperties": false }, { @@ -19147,7 +21130,9 @@ "properties": { "status": { "type": "string", - "enum": ["complete"] + "enum": [ + "complete" + ] }, "time": { "type": "object", @@ -19161,21 +21146,31 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, { "type": "string", - "enum": ["Infinity", "-Infinity", "NaN"] + "enum": [ + "Infinity", + "-Infinity", + "NaN" + ] } ] }, @@ -19188,30 +21183,46 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, { "type": "string", - "enum": ["Infinity", "-Infinity", "NaN"] + "enum": [ + "Infinity", + "-Infinity", + "NaN" + ] } ] } }, - "required": ["created", "expires"], + "required": [ + "created", + "expires" + ], "additionalProperties": false } }, - "required": ["status", "time"], + "required": [ + "status", + "time" + ], "additionalProperties": false }, { @@ -19219,7 +21230,9 @@ "properties": { "status": { "type": "string", - "enum": ["failed"] + "enum": [ + "failed" + ] }, "message": { "type": "string" @@ -19236,21 +21249,31 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, { "type": "string", - "enum": ["Infinity", "-Infinity", "NaN"] + "enum": [ + "Infinity", + "-Infinity", + "NaN" + ] } ] }, @@ -19263,30 +21286,47 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, { "type": "string", - "enum": ["Infinity", "-Infinity", "NaN"] + "enum": [ + "Infinity", + "-Infinity", + "NaN" + ] } ] } }, - "required": ["created", "expires"], + "required": [ + "created", + "expires" + ], "additionalProperties": false } }, - "required": ["status", "message", "time"], + "required": [ + "status", + "message", + "time" + ], "additionalProperties": false }, { @@ -19294,7 +21334,9 @@ "properties": { "status": { "type": "string", - "enum": ["expired"] + "enum": [ + "expired" + ] }, "time": { "type": "object", @@ -19308,21 +21350,31 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, { "type": "string", - "enum": ["Infinity", "-Infinity", "NaN"] + "enum": [ + "Infinity", + "-Infinity", + "NaN" + ] } ] }, @@ -19335,30 +21387,46 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, { "type": "string", - "enum": ["Infinity", "-Infinity", "NaN"] + "enum": [ + "Infinity", + "-Infinity", + "NaN" + ] } ] } }, - "required": ["created", "expires"], + "required": [ + "created", + "expires" + ], "additionalProperties": false } }, - "required": ["status", "time"], + "required": [ + "status", + "time" + ], "additionalProperties": false } ] @@ -19381,21 +21449,31 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, { "type": "string", - "enum": ["Infinity", "-Infinity", "NaN"] + "enum": [ + "Infinity", + "-Infinity", + "NaN" + ] } ] }, @@ -19408,30 +21486,46 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, { "type": "string", - "enum": ["Infinity", "-Infinity", "NaN"] + "enum": [ + "Infinity", + "-Infinity", + "NaN" + ] } ] } }, - "required": ["created", "expires"], + "required": [ + "created", + "expires" + ], "additionalProperties": false } }, - "required": ["attemptID", "time"], + "required": [ + "attemptID", + "time" + ], "additionalProperties": false }, "Integration.CommandAttemptStatus": { @@ -19441,7 +21535,9 @@ "properties": { "status": { "type": "string", - "enum": ["pending"] + "enum": [ + "pending" + ] }, "message": { "type": "string" @@ -19458,21 +21554,31 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, { "type": "string", - "enum": ["Infinity", "-Infinity", "NaN"] + "enum": [ + "Infinity", + "-Infinity", + "NaN" + ] } ] }, @@ -19485,30 +21591,46 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, { "type": "string", - "enum": ["Infinity", "-Infinity", "NaN"] + "enum": [ + "Infinity", + "-Infinity", + "NaN" + ] } ] } }, - "required": ["created", "expires"], + "required": [ + "created", + "expires" + ], "additionalProperties": false } }, - "required": ["status", "time"], + "required": [ + "status", + "time" + ], "additionalProperties": false }, { @@ -19516,7 +21638,9 @@ "properties": { "status": { "type": "string", - "enum": ["complete"] + "enum": [ + "complete" + ] }, "time": { "type": "object", @@ -19530,21 +21654,31 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, { "type": "string", - "enum": ["Infinity", "-Infinity", "NaN"] + "enum": [ + "Infinity", + "-Infinity", + "NaN" + ] } ] }, @@ -19557,30 +21691,46 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, { "type": "string", - "enum": ["Infinity", "-Infinity", "NaN"] + "enum": [ + "Infinity", + "-Infinity", + "NaN" + ] } ] } }, - "required": ["created", "expires"], + "required": [ + "created", + "expires" + ], "additionalProperties": false } }, - "required": ["status", "time"], + "required": [ + "status", + "time" + ], "additionalProperties": false }, { @@ -19588,7 +21738,9 @@ "properties": { "status": { "type": "string", - "enum": ["failed"] + "enum": [ + "failed" + ] }, "message": { "type": "string" @@ -19605,21 +21757,31 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, { "type": "string", - "enum": ["Infinity", "-Infinity", "NaN"] + "enum": [ + "Infinity", + "-Infinity", + "NaN" + ] } ] }, @@ -19632,30 +21794,47 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, { "type": "string", - "enum": ["Infinity", "-Infinity", "NaN"] + "enum": [ + "Infinity", + "-Infinity", + "NaN" + ] } ] } }, - "required": ["created", "expires"], + "required": [ + "created", + "expires" + ], "additionalProperties": false } }, - "required": ["status", "message", "time"], + "required": [ + "status", + "message", + "time" + ], "additionalProperties": false }, { @@ -19663,7 +21842,9 @@ "properties": { "status": { "type": "string", - "enum": ["expired"] + "enum": [ + "expired" + ] }, "time": { "type": "object", @@ -19677,21 +21858,31 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, { "type": "string", - "enum": ["Infinity", "-Infinity", "NaN"] + "enum": [ + "Infinity", + "-Infinity", + "NaN" + ] } ] }, @@ -19704,30 +21895,46 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, { "type": "string", - "enum": ["Infinity", "-Infinity", "NaN"] + "enum": [ + "Infinity", + "-Infinity", + "NaN" + ] } ] } }, - "required": ["created", "expires"], + "required": [ + "created", + "expires" + ], "additionalProperties": false } }, - "required": ["status", "time"], + "required": [ + "status", + "time" + ], "additionalProperties": false } ] @@ -19737,10 +21944,14 @@ "properties": { "status": { "type": "string", - "enum": ["connected"] + "enum": [ + "connected" + ] } }, - "required": ["status"], + "required": [ + "status" + ], "additionalProperties": false }, "Mcp.Status.Pending": { @@ -19748,10 +21959,14 @@ "properties": { "status": { "type": "string", - "enum": ["pending"] + "enum": [ + "pending" + ] } }, - "required": ["status"], + "required": [ + "status" + ], "additionalProperties": false }, "Mcp.Status.Disabled": { @@ -19759,10 +21974,14 @@ "properties": { "status": { "type": "string", - "enum": ["disabled"] + "enum": [ + "disabled" + ] } }, - "required": ["status"], + "required": [ + "status" + ], "additionalProperties": false }, "Mcp.Status.Failed": { @@ -19770,13 +21989,18 @@ "properties": { "status": { "type": "string", - "enum": ["failed"] + "enum": [ + "failed" + ] }, "error": { "type": "string" } }, - "required": ["status", "error"], + "required": [ + "status", + "error" + ], "additionalProperties": false }, "Mcp.Status.NeedsAuth": { @@ -19784,10 +22008,14 @@ "properties": { "status": { "type": "string", - "enum": ["needs_auth"] + "enum": [ + "needs_auth" + ] } }, - "required": ["status"], + "required": [ + "status" + ], "additionalProperties": false }, "Mcp.Server": { @@ -19819,7 +22047,10 @@ "type": "string" } }, - "required": ["name", "status"], + "required": [ + "name", + "status" + ], "additionalProperties": false }, "Mcp.LocalConfig": { @@ -19827,7 +22058,9 @@ "properties": { "type": { "type": "string", - "enum": ["local"] + "enum": [ + "local" + ] }, "command": { "type": "array", @@ -19881,7 +22114,10 @@ "additionalProperties": false } }, - "required": ["type", "command"], + "required": [ + "type", + "command" + ], "additionalProperties": false }, "Mcp.OAuthConfig": { @@ -19916,7 +22152,9 @@ "properties": { "type": { "type": "string", - "enum": ["remote"] + "enum": [ + "remote" + ] }, "url": { "type": "string" @@ -19934,7 +22172,9 @@ }, { "type": "boolean", - "enum": [false] + "enum": [ + false + ] } ] }, @@ -19975,7 +22215,10 @@ "additionalProperties": false } }, - "required": ["type", "url"], + "required": [ + "type", + "url" + ], "additionalProperties": false }, "McpServerNotFoundError": { @@ -19983,7 +22226,9 @@ "properties": { "_tag": { "type": "string", - "enum": ["McpServerNotFoundError"] + "enum": [ + "McpServerNotFoundError" + ] }, "server": { "type": "string" @@ -19992,7 +22237,11 @@ "type": "string" } }, - "required": ["_tag", "server", "message"], + "required": [ + "_tag", + "server", + "message" + ], "additionalProperties": false }, "Mcp.Resource": { @@ -20014,7 +22263,11 @@ "type": "string" } }, - "required": ["server", "name", "uri"], + "required": [ + "server", + "name", + "uri" + ], "additionalProperties": false }, "Mcp.ResourceTemplate": { @@ -20036,7 +22289,11 @@ "type": "string" } }, - "required": ["server", "name", "uriTemplate"], + "required": [ + "server", + "name", + "uriTemplate" + ], "additionalProperties": false }, "Mcp.ResourceCatalog": { @@ -20055,12 +22312,18 @@ } } }, - "required": ["resources", "templates"], + "required": [ + "resources", + "templates" + ], "additionalProperties": false }, "Project.Vcs": { "type": "string", - "enum": ["git", "hg"] + "enum": [ + "git", + "hg" + ] }, "Project.Icon": { "type": "object", @@ -20115,7 +22378,10 @@ ] } }, - "required": ["created", "updated"], + "required": [ + "created", + "updated" + ], "additionalProperties": false }, "Project": { @@ -20149,7 +22415,12 @@ } } }, - "required": ["id", "canonical", "time", "sandboxes"], + "required": [ + "id", + "canonical", + "time", + "sandboxes" + ], "additionalProperties": false }, "Project.Current": { @@ -20165,28 +22436,13 @@ "type": "string" } }, - "required": ["id", "directory", "canonical"], + "required": [ + "id", + "directory", + "canonical" + ], "additionalProperties": false }, - "Project.Directory": { - "type": "object", - "properties": { - "directory": { - "type": "string" - }, - "strategy": { - "type": "string" - } - }, - "required": ["directory"], - "additionalProperties": false - }, - "Project.Directories": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Project.Directory" - } - }, "Form.Metadata": { "type": "object" }, @@ -20214,7 +22470,12 @@ "$ref": "#/components/schemas/Form.Fields" } }, - "required": ["id", "sessionID", "title", "fields"], + "required": [ + "id", + "sessionID", + "title", + "fields" + ], "additionalProperties": false }, "Form.CreatePayload": { @@ -20245,7 +22506,10 @@ "$ref": "#/components/schemas/Form.Fields" } }, - "required": ["title", "fields"], + "required": [ + "title", + "fields" + ], "additionalProperties": false }, "FormNotFoundError": { @@ -20253,7 +22517,9 @@ "properties": { "_tag": { "type": "string", - "enum": ["FormNotFoundError"] + "enum": [ + "FormNotFoundError" + ] }, "id": { "type": "string" @@ -20262,7 +22528,11 @@ "type": "string" } }, - "required": ["_tag", "id", "message"], + "required": [ + "_tag", + "id", + "message" + ], "additionalProperties": false }, "Form.State": { @@ -20272,10 +22542,14 @@ "properties": { "status": { "type": "string", - "enum": ["pending"] + "enum": [ + "pending" + ] } }, - "required": ["status"], + "required": [ + "status" + ], "additionalProperties": false }, { @@ -20283,13 +22557,18 @@ "properties": { "status": { "type": "string", - "enum": ["answered"] + "enum": [ + "answered" + ] }, "answer": { "$ref": "#/components/schemas/Form.Answer" } }, - "required": ["status", "answer"], + "required": [ + "status", + "answer" + ], "additionalProperties": false }, { @@ -20297,10 +22576,14 @@ "properties": { "status": { "type": "string", - "enum": ["cancelled"] + "enum": [ + "cancelled" + ] } }, - "required": ["status"], + "required": [ + "status" + ], "additionalProperties": false } ] @@ -20312,7 +22595,9 @@ "$ref": "#/components/schemas/Form.Answer" } }, - "required": ["answer"], + "required": [ + "answer" + ], "additionalProperties": false }, "FormAlreadySettledError": { @@ -20320,7 +22605,9 @@ "properties": { "_tag": { "type": "string", - "enum": ["FormAlreadySettledError"] + "enum": [ + "FormAlreadySettledError" + ] }, "id": { "type": "string" @@ -20329,7 +22616,11 @@ "type": "string" } }, - "required": ["_tag", "id", "message"], + "required": [ + "_tag", + "id", + "message" + ], "additionalProperties": false }, "FormInvalidAnswerError": { @@ -20337,7 +22628,9 @@ "properties": { "_tag": { "type": "string", - "enum": ["FormInvalidAnswerError"] + "enum": [ + "FormInvalidAnswerError" + ] }, "id": { "type": "string" @@ -20346,7 +22639,11 @@ "type": "string" } }, - "required": ["_tag", "id", "message"], + "required": [ + "_tag", + "id", + "message" + ], "additionalProperties": false }, "Permission.Source": { @@ -20356,7 +22653,9 @@ "properties": { "type": { "type": "string", - "enum": ["tool"] + "enum": [ + "tool" + ] }, "messageID": { "type": "string" @@ -20365,7 +22664,11 @@ "type": "string" } }, - "required": ["type", "messageID", "id"], + "required": [ + "type", + "messageID", + "id" + ], "additionalProperties": false } ] @@ -20414,7 +22717,12 @@ "$ref": "#/components/schemas/Permission.Source" } }, - "required": ["id", "sessionID", "action", "resources"], + "required": [ + "id", + "sessionID", + "action", + "resources" + ], "additionalProperties": false }, "PermissionSaved.Info": { @@ -20433,7 +22741,12 @@ "type": "string" } }, - "required": ["id", "projectID", "action", "resource"], + "required": [ + "id", + "projectID", + "action", + "resource" + ], "additionalProperties": false }, "PermissionNotFoundError": { @@ -20441,7 +22754,9 @@ "properties": { "_tag": { "type": "string", - "enum": ["PermissionNotFoundError"] + "enum": [ + "PermissionNotFoundError" + ] }, "requestID": { "type": "string" @@ -20450,12 +22765,20 @@ "type": "string" } }, - "required": ["_tag", "requestID", "message"], + "required": [ + "_tag", + "requestID", + "message" + ], "additionalProperties": false }, "Permission.Reply": { "type": "string", - "enum": ["once", "always", "reject"] + "enum": [ + "once", + "always", + "reject" + ] }, "FileSystem.Entry": { "type": "object", @@ -20465,10 +22788,16 @@ }, "type": { "type": "string", - "enum": ["file", "directory"] + "enum": [ + "file", + "directory" + ] } }, - "required": ["path", "type"], + "required": [ + "path", + "type" + ], "additionalProperties": false }, "Command.Info": { @@ -20493,7 +22822,10 @@ "type": "boolean" } }, - "required": ["name", "template"], + "required": [ + "name", + "template" + ], "additionalProperties": false }, "Skill.Info": { @@ -20521,7 +22853,12 @@ "type": "string" } }, - "required": ["id", "name", "location", "content"], + "required": [ + "id", + "name", + "location", + "content" + ], "additionalProperties": false }, "models-dev.refreshed": { @@ -20543,7 +22880,9 @@ }, "type": { "type": "string", - "enum": ["models-dev.refreshed"] + "enum": [ + "models-dev.refreshed" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -20559,7 +22898,12 @@ ] } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "integration.updated": { @@ -20581,7 +22925,9 @@ }, "type": { "type": "string", - "enum": ["integration.updated"] + "enum": [ + "integration.updated" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -20597,7 +22943,12 @@ ] } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "integration.connection.updated": { @@ -20619,7 +22970,9 @@ }, "type": { "type": "string", - "enum": ["integration.connection.updated"] + "enum": [ + "integration.connection.updated" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -20631,11 +22984,18 @@ "type": "string" } }, - "required": ["integrationID"], + "required": [ + "integrationID" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "catalog.updated": { @@ -20657,7 +23017,9 @@ }, "type": { "type": "string", - "enum": ["catalog.updated"] + "enum": [ + "catalog.updated" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -20673,7 +23035,12 @@ ] } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "agent.updated": { @@ -20695,7 +23062,9 @@ }, "type": { "type": "string", - "enum": ["agent.updated"] + "enum": [ + "agent.updated" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -20711,7 +23080,12 @@ ] } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "session.usage.updated": { @@ -20733,7 +23107,9 @@ }, "type": { "type": "string", - "enum": ["session.usage.updated"] + "enum": [ + "session.usage.updated" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -20756,11 +23132,20 @@ "$ref": "#/components/schemas/TokenUsage.Info" } }, - "required": ["sessionID", "cost", "tokens"], + "required": [ + "sessionID", + "cost", + "tokens" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "session.text.delta": { @@ -20782,7 +23167,9 @@ }, "type": { "type": "string", - "enum": ["session.text.delta"] + "enum": [ + "session.text.delta" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -20818,11 +23205,21 @@ "type": "string" } }, - "required": ["sessionID", "assistantMessageID", "ordinal", "delta"], + "required": [ + "sessionID", + "assistantMessageID", + "ordinal", + "delta" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "session.reasoning.delta": { @@ -20844,7 +23241,9 @@ }, "type": { "type": "string", - "enum": ["session.reasoning.delta"] + "enum": [ + "session.reasoning.delta" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -20880,11 +23279,21 @@ "type": "string" } }, - "required": ["sessionID", "assistantMessageID", "ordinal", "delta"], + "required": [ + "sessionID", + "assistantMessageID", + "ordinal", + "delta" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "session.tool.input.delta": { @@ -20906,7 +23315,9 @@ }, "type": { "type": "string", - "enum": ["session.tool.input.delta"] + "enum": [ + "session.tool.input.delta" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -20937,11 +23348,21 @@ "type": "string" } }, - "required": ["sessionID", "assistantMessageID", "id", "delta"], + "required": [ + "sessionID", + "assistantMessageID", + "id", + "delta" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "session.tool.progress": { @@ -20963,7 +23384,9 @@ }, "type": { "type": "string", - "enum": ["session.tool.progress"] + "enum": [ + "session.tool.progress" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -20994,11 +23417,21 @@ "type": "object" } }, - "required": ["sessionID", "assistantMessageID", "id", "metadata"], + "required": [ + "sessionID", + "assistantMessageID", + "id", + "metadata" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "session.compaction.delta": { @@ -21020,7 +23453,9 @@ }, "type": { "type": "string", - "enum": ["session.compaction.delta"] + "enum": [ + "session.compaction.delta" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -21040,11 +23475,19 @@ "type": "string" } }, - "required": ["sessionID", "text"], + "required": [ + "sessionID", + "text" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "filesystem.changed": { @@ -21066,7 +23509,9 @@ }, "type": { "type": "string", - "enum": ["filesystem.changed"] + "enum": [ + "filesystem.changed" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -21079,14 +23524,26 @@ }, "event": { "type": "string", - "enum": ["add", "change", "unlink"] + "enum": [ + "add", + "change", + "unlink" + ] } }, - "required": ["file", "event"], + "required": [ + "file", + "event" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "reference.updated": { @@ -21108,7 +23565,9 @@ }, "type": { "type": "string", - "enum": ["reference.updated"] + "enum": [ + "reference.updated" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -21124,7 +23583,12 @@ ] } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "permission.asked": { @@ -21146,7 +23610,9 @@ }, "type": { "type": "string", - "enum": ["permission.asked"] + "enum": [ + "permission.asked" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -21195,11 +23661,21 @@ "$ref": "#/components/schemas/Permission.Source" } }, - "required": ["id", "sessionID", "action", "resources"], + "required": [ + "id", + "sessionID", + "action", + "resources" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "permission.replied": { @@ -21221,7 +23697,9 @@ }, "type": { "type": "string", - "enum": ["permission.replied"] + "enum": [ + "permission.replied" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -21249,11 +23727,20 @@ "$ref": "#/components/schemas/Permission.Reply" } }, - "required": ["sessionID", "requestID", "reply"], + "required": [ + "sessionID", + "requestID", + "reply" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "plugin.added": { @@ -21275,7 +23762,9 @@ }, "type": { "type": "string", - "enum": ["plugin.added"] + "enum": [ + "plugin.added" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -21287,11 +23776,18 @@ "type": "string" } }, - "required": ["id"], + "required": [ + "id" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "plugin.updated": { @@ -21313,7 +23809,9 @@ }, "type": { "type": "string", - "enum": ["plugin.updated"] + "enum": [ + "plugin.updated" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -21329,10 +23827,15 @@ ] } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, - "project.directories.updated": { + "worktree.updated": { "type": "object", "properties": { "id": { @@ -21351,7 +23854,9 @@ }, "type": { "type": "string", - "enum": ["project.directories.updated"] + "enum": [ + "worktree.updated" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -21363,14 +23868,21 @@ "type": "string" } }, - "required": ["projectID"], + "required": [ + "projectID" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, - "project.directory.resolved": { + "worktree.resolved": { "type": "object", "properties": { "id": { @@ -21389,7 +23901,9 @@ }, "type": { "type": "string", - "enum": ["project.directory.resolved"] + "enum": [ + "worktree.resolved" + ] }, "durable": { "type": "object", @@ -21407,10 +23921,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -21429,11 +23949,21 @@ "type": "string" } }, - "required": ["projectID", "directory", "previous"], + "required": [ + "projectID", + "directory", + "previous" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "command.updated": { @@ -21455,7 +23985,9 @@ }, "type": { "type": "string", - "enum": ["command.updated"] + "enum": [ + "command.updated" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -21471,7 +24003,12 @@ ] } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "config.updated": { @@ -21493,7 +24030,9 @@ }, "type": { "type": "string", - "enum": ["config.updated"] + "enum": [ + "config.updated" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -21509,7 +24048,12 @@ ] } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "skill.updated": { @@ -21531,7 +24075,9 @@ }, "type": { "type": "string", - "enum": ["skill.updated"] + "enum": [ + "skill.updated" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -21547,7 +24093,12 @@ ] } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "Pty": { @@ -21578,7 +24129,10 @@ }, "status": { "type": "string", - "enum": ["running", "exited"] + "enum": [ + "running", + "exited" + ] }, "pid": { "type": "integer", @@ -21597,7 +24151,15 @@ ] } }, - "required": ["id", "title", "command", "args", "cwd", "status", "pid"], + "required": [ + "id", + "title", + "command", + "args", + "cwd", + "status", + "pid" + ], "additionalProperties": false }, "pty.created": { @@ -21619,7 +24181,9 @@ }, "type": { "type": "string", - "enum": ["pty.created"] + "enum": [ + "pty.created" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -21631,11 +24195,18 @@ "$ref": "#/components/schemas/Pty" } }, - "required": ["info"], + "required": [ + "info" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "pty.updated": { @@ -21657,7 +24228,9 @@ }, "type": { "type": "string", - "enum": ["pty.updated"] + "enum": [ + "pty.updated" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -21669,11 +24242,18 @@ "$ref": "#/components/schemas/Pty" } }, - "required": ["info"], + "required": [ + "info" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "pty.exited": { @@ -21695,7 +24275,9 @@ }, "type": { "type": "string", - "enum": ["pty.exited"] + "enum": [ + "pty.exited" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -21720,11 +24302,19 @@ ] } }, - "required": ["id", "exitCode"], + "required": [ + "id", + "exitCode" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "pty.deleted": { @@ -21746,7 +24336,9 @@ }, "type": { "type": "string", - "enum": ["pty.deleted"] + "enum": [ + "pty.deleted" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -21763,11 +24355,18 @@ ] } }, - "required": ["id"], + "required": [ + "id" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "shell.created": { @@ -21789,7 +24388,9 @@ }, "type": { "type": "string", - "enum": ["shell.created"] + "enum": [ + "shell.created" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -21801,11 +24402,18 @@ "$ref": "#/components/schemas/Shell.Info" } }, - "required": ["info"], + "required": [ + "info" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "shell.exited": { @@ -21827,7 +24435,9 @@ }, "type": { "type": "string", - "enum": ["shell.exited"] + "enum": [ + "shell.exited" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -21848,14 +24458,27 @@ }, "status": { "type": "string", - "enum": ["running", "exited", "timeout", "killed"] + "enum": [ + "running", + "exited", + "timeout", + "killed" + ] } }, - "required": ["id", "status"], + "required": [ + "id", + "status" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "shell.deleted": { @@ -21877,7 +24500,9 @@ }, "type": { "type": "string", - "enum": ["shell.deleted"] + "enum": [ + "shell.deleted" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -21894,11 +24519,18 @@ ] } }, - "required": ["id"], + "required": [ + "id" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "Question.Option": { @@ -21913,7 +24545,10 @@ "description": "Explanation of choice" } }, - "required": ["label", "description"], + "required": [ + "label", + "description" + ], "additionalProperties": false }, "Question.Info": { @@ -21941,7 +24576,11 @@ "type": "boolean" } }, - "required": ["question", "header", "options"], + "required": [ + "question", + "header", + "options" + ], "additionalProperties": false }, "Question.Tool": { @@ -21954,7 +24593,10 @@ "type": "string" } }, - "required": ["messageID", "id"], + "required": [ + "messageID", + "id" + ], "additionalProperties": false }, "question.asked": { @@ -21976,7 +24618,9 @@ }, "type": { "type": "string", - "enum": ["question.asked"] + "enum": [ + "question.asked" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -22011,11 +24655,20 @@ "$ref": "#/components/schemas/Question.Tool" } }, - "required": ["id", "sessionID", "questions"], + "required": [ + "id", + "sessionID", + "questions" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "Question.Answer": { @@ -22043,7 +24696,9 @@ }, "type": { "type": "string", - "enum": ["question.replied"] + "enum": [ + "question.replied" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -22074,11 +24729,20 @@ } } }, - "required": ["sessionID", "requestID", "answers"], + "required": [ + "sessionID", + "requestID", + "answers" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "question.rejected": { @@ -22100,7 +24764,9 @@ }, "type": { "type": "string", - "enum": ["question.rejected"] + "enum": [ + "question.rejected" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -22125,11 +24791,19 @@ ] } }, - "required": ["sessionID", "requestID"], + "required": [ + "sessionID", + "requestID" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "Form.Metadata1": { @@ -22143,7 +24817,10 @@ }, "op": { "type": "string", - "enum": ["eq", "neq"] + "enum": [ + "eq", + "neq" + ] }, "value": { "anyOf": [ @@ -22157,15 +24834,21 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, @@ -22175,7 +24858,11 @@ ] } }, - "required": ["key", "op", "value"], + "required": [ + "key", + "op", + "value" + ], "additionalProperties": false }, "Form.StringField1": { @@ -22201,11 +24888,18 @@ }, "type": { "type": "string", - "enum": ["string"] + "enum": [ + "string" + ] }, "format": { "type": "string", - "enum": ["email", "uri", "date", "date-time"] + "enum": [ + "email", + "uri", + "date", + "date-time" + ] }, "minLength": { "type": "integer", @@ -22242,7 +24936,10 @@ "type": "boolean" } }, - "required": ["key", "type"], + "required": [ + "key", + "type" + ], "additionalProperties": false }, "Form.NumberField1": { @@ -22268,7 +24965,9 @@ }, "type": { "type": "string", - "enum": ["number"] + "enum": [ + "number" + ] }, "minimum": { "anyOf": [ @@ -22277,15 +24976,21 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, @@ -22296,15 +25001,21 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, @@ -22315,20 +25026,29 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] } }, - "required": ["key", "type"], + "required": [ + "key", + "type" + ], "additionalProperties": false }, "Form.IntegerField1": { @@ -22354,7 +25074,9 @@ }, "type": { "type": "string", - "enum": ["integer"] + "enum": [ + "integer" + ] }, "minimum": { "anyOf": [ @@ -22363,15 +25085,21 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, @@ -22382,15 +25110,21 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, @@ -22401,20 +25135,29 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] } }, - "required": ["key", "type"], + "required": [ + "key", + "type" + ], "additionalProperties": false }, "Form.BooleanField1": { @@ -22440,13 +25183,18 @@ }, "type": { "type": "string", - "enum": ["boolean"] + "enum": [ + "boolean" + ] }, "default": { "type": "boolean" } }, - "required": ["key", "type"], + "required": [ + "key", + "type" + ], "additionalProperties": false }, "Form.MultiselectField1": { @@ -22472,7 +25220,9 @@ }, "type": { "type": "string", - "enum": ["multiselect"] + "enum": [ + "multiselect" + ] }, "options": { "type": "array", @@ -22506,7 +25256,11 @@ } } }, - "required": ["key", "type", "options"], + "required": [ + "key", + "type", + "options" + ], "additionalProperties": false }, "Form.Field1": { @@ -22567,7 +25321,12 @@ "$ref": "#/components/schemas/Form.Fields3" } }, - "required": ["id", "sessionID", "title", "fields"], + "required": [ + "id", + "sessionID", + "title", + "fields" + ], "additionalProperties": false }, "form.created": { @@ -22589,7 +25348,9 @@ }, "type": { "type": "string", - "enum": ["form.created"] + "enum": [ + "form.created" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -22601,11 +25362,18 @@ "$ref": "#/components/schemas/Form.Info1" } }, - "required": ["form"], + "required": [ + "form" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "Form.Value1": { @@ -22620,15 +25388,21 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, @@ -22668,7 +25442,9 @@ }, "type": { "type": "string", - "enum": ["form.replied"] + "enum": [ + "form.replied" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -22691,11 +25467,20 @@ "$ref": "#/components/schemas/Form.Answer1" } }, - "required": ["id", "sessionID", "answer"], + "required": [ + "id", + "sessionID", + "answer" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "form.cancelled": { @@ -22717,7 +25502,9 @@ }, "type": { "type": "string", - "enum": ["form.cancelled"] + "enum": [ + "form.cancelled" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -22737,11 +25524,19 @@ "type": "string" } }, - "required": ["id", "sessionID"], + "required": [ + "id", + "sessionID" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "websearch.updated": { @@ -22763,7 +25558,9 @@ }, "type": { "type": "string", - "enum": ["websearch.updated"] + "enum": [ + "websearch.updated" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -22779,7 +25576,12 @@ ] } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "SessionStatus": { @@ -22789,10 +25591,14 @@ "properties": { "type": { "type": "string", - "enum": ["idle"] + "enum": [ + "idle" + ] } }, - "required": ["type"], + "required": [ + "type" + ], "additionalProperties": false }, { @@ -22800,7 +25606,9 @@ "properties": { "type": { "type": "string", - "enum": ["retry"] + "enum": [ + "retry" + ] }, "attempt": { "type": "integer", @@ -22835,7 +25643,13 @@ "type": "string" } }, - "required": ["reason", "provider", "title", "message", "label"], + "required": [ + "reason", + "provider", + "title", + "message", + "label" + ], "additionalProperties": false }, "next": { @@ -22847,7 +25661,12 @@ ] } }, - "required": ["type", "attempt", "message", "next"], + "required": [ + "type", + "attempt", + "message", + "next" + ], "additionalProperties": false }, { @@ -22855,10 +25674,14 @@ "properties": { "type": { "type": "string", - "enum": ["busy"] + "enum": [ + "busy" + ] } }, - "required": ["type"], + "required": [ + "type" + ], "additionalProperties": false } ] @@ -22882,7 +25705,9 @@ }, "type": { "type": "string", - "enum": ["session.status"] + "enum": [ + "session.status" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -22902,11 +25727,19 @@ "$ref": "#/components/schemas/SessionStatus" } }, - "required": ["sessionID", "status"], + "required": [ + "sessionID", + "status" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "session.idle": { @@ -22928,7 +25761,9 @@ }, "type": { "type": "string", - "enum": ["session.idle"] + "enum": [ + "session.idle" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -22945,11 +25780,18 @@ ] } }, - "required": ["sessionID"], + "required": [ + "sessionID" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "tui.prompt.append": { @@ -22971,7 +25813,9 @@ }, "type": { "type": "string", - "enum": ["tui.prompt.append"] + "enum": [ + "tui.prompt.append" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -22983,11 +25827,18 @@ "type": "string" } }, - "required": ["text"], + "required": [ + "text" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "tui.command.execute": { @@ -23009,7 +25860,9 @@ }, "type": { "type": "string", - "enum": ["tui.command.execute"] + "enum": [ + "tui.command.execute" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -23047,11 +25900,18 @@ ] } }, - "required": ["command"], + "required": [ + "command" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "tui.toast.show": { @@ -23073,7 +25933,9 @@ }, "type": { "type": "string", - "enum": ["tui.toast.show"] + "enum": [ + "tui.toast.show" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -23089,7 +25951,12 @@ }, "variant": { "type": "string", - "enum": ["info", "success", "warning", "error"] + "enum": [ + "info", + "success", + "warning", + "error" + ] }, "duration": { "anyOf": [ @@ -23107,11 +25974,19 @@ ] } }, - "required": ["message", "variant"], + "required": [ + "message", + "variant" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "tui.session.select": { @@ -23133,7 +26008,9 @@ }, "type": { "type": "string", - "enum": ["tui.session.select"] + "enum": [ + "tui.session.select" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -23151,11 +26028,18 @@ ] } }, - "required": ["sessionID"], + "required": [ + "sessionID" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "installation.updated": { @@ -23177,7 +26061,9 @@ }, "type": { "type": "string", - "enum": ["installation.updated"] + "enum": [ + "installation.updated" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -23189,11 +26075,18 @@ "type": "string" } }, - "required": ["version"], + "required": [ + "version" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "installation.update-available": { @@ -23215,7 +26108,9 @@ }, "type": { "type": "string", - "enum": ["installation.update-available"] + "enum": [ + "installation.update-available" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -23227,11 +26122,18 @@ "type": "string" } }, - "required": ["version"], + "required": [ + "version" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "vcs.branch.updated": { @@ -23253,7 +26155,9 @@ }, "type": { "type": "string", - "enum": ["vcs.branch.updated"] + "enum": [ + "vcs.branch.updated" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -23268,7 +26172,12 @@ "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "mcp.status.changed": { @@ -23290,7 +26199,9 @@ }, "type": { "type": "string", - "enum": ["mcp.status.changed"] + "enum": [ + "mcp.status.changed" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -23302,11 +26213,18 @@ "type": "string" } }, - "required": ["server"], + "required": [ + "server" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "mcp.resources.changed": { @@ -23328,7 +26246,9 @@ }, "type": { "type": "string", - "enum": ["mcp.resources.changed"] + "enum": [ + "mcp.resources.changed" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -23340,11 +26260,18 @@ "type": "string" } }, - "required": ["server"], + "required": [ + "server" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "V2Event.server.connected": { @@ -23380,7 +26307,9 @@ }, "type": { "type": "string", - "enum": ["server.connected"] + "enum": [ + "server.connected" + ] }, "data": { "anyOf": [ @@ -23393,7 +26322,11 @@ ] } }, - "required": ["id", "type", "data"], + "required": [ + "id", + "type", + "data" + ], "additionalProperties": false }, "V2Event": { @@ -23567,10 +26500,10 @@ "$ref": "#/components/schemas/plugin.updated" }, { - "$ref": "#/components/schemas/project.directories.updated" + "$ref": "#/components/schemas/worktree.updated" }, { - "$ref": "#/components/schemas/project.directory.resolved" + "$ref": "#/components/schemas/worktree.resolved" }, { "$ref": "#/components/schemas/command.updated" @@ -23673,7 +26606,9 @@ "properties": { "_tag": { "type": "string", - "enum": ["PtyNotFoundError"] + "enum": [ + "PtyNotFoundError" + ] }, "ptyID": { "type": "string" @@ -23682,7 +26617,11 @@ "type": "string" } }, - "required": ["_tag", "ptyID", "message"], + "required": [ + "_tag", + "ptyID", + "message" + ], "additionalProperties": false }, "PtyTicket.ConnectToken": { @@ -23700,7 +26639,10 @@ ] } }, - "required": ["ticket", "expires_in"], + "required": [ + "ticket", + "expires_in" + ], "additionalProperties": false }, "ForbiddenError": { @@ -23708,13 +26650,18 @@ "properties": { "_tag": { "type": "string", - "enum": ["ForbiddenError"] + "enum": [ + "ForbiddenError" + ] }, "message": { "type": "string" } }, - "required": ["_tag", "message"], + "required": [ + "_tag", + "message" + ], "additionalProperties": false }, "Shell.Info1": { @@ -23730,7 +26677,12 @@ }, "status": { "type": "string", - "enum": ["running", "exited", "timeout", "killed"] + "enum": [ + "running", + "exited", + "timeout", + "killed" + ] }, "command": { "type": "string" @@ -23768,11 +26720,22 @@ "type": "number" } }, - "required": ["started"], + "required": [ + "started" + ], "additionalProperties": false } }, - "required": ["id", "status", "command", "cwd", "shell", "file", "metadata", "time"], + "required": [ + "id", + "status", + "command", + "cwd", + "shell", + "file", + "metadata", + "time" + ], "additionalProperties": false }, "ShellNotFoundError": { @@ -23780,7 +26743,9 @@ "properties": { "_tag": { "type": "string", - "enum": ["ShellNotFoundError"] + "enum": [ + "ShellNotFoundError" + ] }, "id": { "type": "string" @@ -23789,7 +26754,11 @@ "type": "string" } }, - "required": ["_tag", "id", "message"], + "required": [ + "_tag", + "id", + "message" + ], "additionalProperties": false }, "Question.Request": { @@ -23822,7 +26791,11 @@ "$ref": "#/components/schemas/Question.Tool" } }, - "required": ["id", "sessionID", "questions"], + "required": [ + "id", + "sessionID", + "questions" + ], "additionalProperties": false }, "Question.Reply": { @@ -23836,7 +26809,9 @@ "description": "User answers in order of questions (each answer is an array of selected labels)" } }, - "required": ["answers"], + "required": [ + "answers" + ], "additionalProperties": false }, "QuestionNotFoundError": { @@ -23844,7 +26819,9 @@ "properties": { "_tag": { "type": "string", - "enum": ["QuestionNotFoundError"] + "enum": [ + "QuestionNotFoundError" + ] }, "requestID": { "type": "string" @@ -23853,7 +26830,11 @@ "type": "string" } }, - "required": ["_tag", "requestID", "message"], + "required": [ + "_tag", + "requestID", + "message" + ], "additionalProperties": false }, "Reference.LocalSource": { @@ -23861,7 +26842,9 @@ "properties": { "type": { "type": "string", - "enum": ["local"] + "enum": [ + "local" + ] }, "path": { "type": "string" @@ -23873,7 +26856,10 @@ "type": "boolean" } }, - "required": ["type", "path"], + "required": [ + "type", + "path" + ], "additionalProperties": false }, "Reference.GitSource": { @@ -23881,7 +26867,9 @@ "properties": { "type": { "type": "string", - "enum": ["git"] + "enum": [ + "git" + ] }, "repository": { "type": "string" @@ -23896,7 +26884,10 @@ "type": "boolean" } }, - "required": ["type", "repository"], + "required": [ + "type", + "repository" + ], "additionalProperties": false }, "Reference.Source": { @@ -23928,25 +26919,54 @@ "$ref": "#/components/schemas/Reference.Source" } }, - "required": ["name", "path", "source"], + "required": [ + "name", + "path", + "source" + ], "additionalProperties": false }, - "ProjectCopy.Copy": { + "Worktree.Directory": { + "type": "object", + "properties": { + "directory": { + "type": "string" + }, + "strategy": { + "type": "string" + } + }, + "required": [ + "directory" + ], + "additionalProperties": false + }, + "Worktree.List": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Worktree.Directory" + } + }, + "Worktree.Info": { "type": "object", "properties": { "directory": { "type": "string" } }, - "required": ["directory"], + "required": [ + "directory" + ], "additionalProperties": false }, - "ProjectCopyError": { + "WorktreeError": { "type": "object", "properties": { "name": { "type": "string", - "enum": ["ProjectCopyError"] + "enum": [ + "WorktreeError" + ] }, "data": { "type": "object", @@ -23965,11 +26985,16 @@ ] } }, - "required": ["message"], + "required": [ + "message" + ], "additionalProperties": false } }, - "required": ["name", "data"], + "required": [ + "name", + "data" + ], "additionalProperties": false }, "Vcs.Branch": { @@ -23991,7 +27016,9 @@ "$ref": "#/components/schemas/Vcs.Branch" } }, - "required": ["branch"], + "required": [ + "branch" + ], "additionalProperties": false }, "Vcs.FileStatus": { @@ -24018,15 +27045,27 @@ }, "status": { "type": "string", - "enum": ["added", "deleted", "modified"] + "enum": [ + "added", + "deleted", + "modified" + ] } }, - "required": ["file", "additions", "deletions", "status"], + "required": [ + "file", + "additions", + "deletions", + "status" + ], "additionalProperties": false }, "Vcs.Mode": { "type": "string", - "enum": ["working", "branch"] + "enum": [ + "working", + "branch" + ] }, "WebSearch.Provider": { "type": "object", @@ -24038,7 +27077,10 @@ "type": "string" } }, - "required": ["id", "name"], + "required": [ + "id", + "name" + ], "additionalProperties": false }, "WebSearch.Result": { @@ -24063,7 +27105,10 @@ "additionalProperties": false } }, - "required": ["url", "time"], + "required": [ + "url", + "time" + ], "additionalProperties": false }, "WebSearch.Response": { @@ -24079,7 +27124,10 @@ } } }, - "required": ["providerID", "results"], + "required": [ + "providerID", + "results" + ], "additionalProperties": false }, "Config.Agent": { @@ -24123,7 +27171,10 @@ ] } }, - "required": ["providerID", "model"], + "required": [ + "providerID", + "model" + ], "additionalProperties": false } ] @@ -24151,7 +27202,11 @@ }, "mode": { "type": "string", - "enum": ["subagent", "primary", "all"] + "enum": [ + "subagent", + "primary", + "all" + ] }, "hidden": { "type": "boolean" @@ -24236,7 +27291,9 @@ "type": "object" } }, - "required": ["command"], + "required": [ + "command" + ], "additionalProperties": false }, "Config.Command": { @@ -24289,7 +27346,10 @@ ] } }, - "required": ["providerID", "model"], + "required": [ + "providerID", + "model" + ], "additionalProperties": false } ] @@ -24298,7 +27358,9 @@ "type": "boolean" } }, - "required": ["template"], + "required": [ + "template" + ], "additionalProperties": false }, "Config.Reference.Git": { @@ -24317,7 +27379,9 @@ "type": "boolean" } }, - "required": ["repository"], + "required": [ + "repository" + ], "additionalProperties": false }, "Config.Reference.Local": { @@ -24333,7 +27397,9 @@ "type": "boolean" } }, - "required": ["path"], + "required": [ + "path" + ], "additionalProperties": false }, "Config.Plugin.Entry": { @@ -24346,7 +27412,9 @@ "type": "object" } }, - "required": ["package"], + "required": [ + "package" + ], "additionalProperties": false }, "Config.Warming": { @@ -24372,13 +27440,18 @@ "properties": { "type": { "type": "string", - "enum": ["context"] + "enum": [ + "context" + ] }, "size": { "type": "integer" } }, - "required": ["type", "size"], + "required": [ + "type", + "size" + ], "additionalProperties": false }, "input": { @@ -24400,7 +27473,10 @@ "additionalProperties": false } }, - "required": ["input", "output"], + "required": [ + "input", + "output" + ], "additionalProperties": false }, "Config.Model": { @@ -24457,7 +27533,9 @@ "type": "object" } }, - "required": ["id"], + "required": [ + "id" + ], "additionalProperties": false } }, @@ -24578,7 +27656,10 @@ ] } }, - "required": ["providerID", "model"], + "required": [ + "providerID", + "model" + ], "additionalProperties": false } ] @@ -24593,13 +27674,19 @@ }, { "type": "string", - "enum": ["notify"] + "enum": [ + "notify" + ] } ] }, "share": { "type": "string", - "enum": ["manual", "auto", "disabled"] + "enum": [ + "manual", + "auto", + "disabled" + ] }, "enterprise": { "type": "object", @@ -24664,10 +27751,14 @@ "properties": { "disabled": { "type": "boolean", - "enum": [true] + "enum": [ + true + ] } }, - "required": ["disabled"], + "required": [ + "disabled" + ], "additionalProperties": false }, { @@ -24860,7 +27951,9 @@ "type": "string" } }, - "required": ["provider"], + "required": [ + "provider" + ], "additionalProperties": false }, "plugins": { @@ -24910,17 +28003,26 @@ "properties": { "action": { "type": "string", - "enum": ["provider.use"] + "enum": [ + "provider.use" + ] }, "resource": { "type": "string" }, "effect": { "type": "string", - "enum": ["allow", "deny"] + "enum": [ + "allow", + "deny" + ] } }, - "required": ["action", "resource", "effect"], + "required": [ + "action", + "resource", + "effect" + ], "additionalProperties": false } } @@ -24935,7 +28037,9 @@ "properties": { "type": { "type": "string", - "enum": ["document"] + "enum": [ + "document" + ] }, "path": { "type": "string" @@ -24944,7 +28048,10 @@ "$ref": "#/components/schemas/Config.Info" } }, - "required": ["type", "info"], + "required": [ + "type", + "info" + ], "additionalProperties": false }, "Config.Directory": { @@ -24952,13 +28059,18 @@ "properties": { "type": { "type": "string", - "enum": ["directory"] + "enum": [ + "directory" + ] }, "path": { "type": "string" } }, - "required": ["type", "path"], + "required": [ + "type", + "path" + ], "additionalProperties": false }, "Config.File": { @@ -24966,13 +28078,18 @@ "properties": { "type": { "type": "string", - "enum": ["file"] + "enum": [ + "file" + ] }, "path": { "type": "string" } }, - "required": ["type", "path"], + "required": [ + "type", + "path" + ], "additionalProperties": false }, "Config.AgentsDirectory": { @@ -24980,13 +28097,18 @@ "properties": { "type": { "type": "string", - "enum": ["agents"] + "enum": [ + "agents" + ] }, "path": { "type": "string" } }, - "required": ["type", "path"], + "required": [ + "type", + "path" + ], "additionalProperties": false }, "Config.ClaudeDirectory": { @@ -24994,13 +28116,18 @@ "properties": { "type": { "type": "string", - "enum": ["claude"] + "enum": [ + "claude" + ] }, "path": { "type": "string" } }, - "required": ["type", "path"], + "required": [ + "type", + "path" + ], "additionalProperties": false }, "Config.Entry": { @@ -25076,7 +28203,7 @@ }, { "name": "project", - "description": "Location-scoped project routes." + "description": "Project routes." }, { "name": "form", @@ -25119,8 +28246,8 @@ "description": "Location-scoped project references." }, { - "name": "projectCopy", - "description": "Project copy management routes." + "name": "worktree", + "description": "Project worktree management routes." }, { "name": "vcs", diff --git a/packages/www/public/openapi.json b/packages/www/public/openapi.json index af4dde5e2ca..58f106bcf73 100644 --- a/packages/www/public/openapi.json +++ b/packages/www/public/openapi.json @@ -8,7 +8,9 @@ "paths": { "/api/health": { "get": { - "tags": ["health"], + "tags": [ + "health" + ], "operationId": "v2.health.get", "parameters": [], "security": [], @@ -50,7 +52,9 @@ }, "/api/service/stop": { "post": { - "tags": ["health"], + "tags": [ + "health" + ], "operationId": "v2.health.stop", "parameters": [], "security": [], @@ -102,7 +106,9 @@ }, "/api/server": { "get": { - "tags": ["server"], + "tags": [ + "server" + ], "operationId": "v2.server.get", "parameters": [], "security": [], @@ -121,7 +127,9 @@ } } }, - "required": ["urls"], + "required": [ + "urls" + ], "additionalProperties": false } } @@ -154,7 +162,9 @@ }, "/api/location": { "get": { - "tags": ["location"], + "tags": [ + "location" + ], "operationId": "v2.location.get", "parameters": [ { @@ -237,7 +247,9 @@ }, "/api/agent": { "get": { - "tags": ["agent"], + "tags": [ + "agent" + ], "operationId": "v2.agent.list", "parameters": [ { @@ -300,7 +312,10 @@ } } }, - "required": ["location", "data"], + "required": [ + "location", + "data" + ], "additionalProperties": false } } @@ -333,7 +348,9 @@ }, "/api/agent/{agentID}": { "get": { - "tags": ["agent"], + "tags": [ + "agent" + ], "operationId": "v2.agent.get", "parameters": [ { @@ -401,7 +418,10 @@ "$ref": "#/components/schemas/Agent.Info" } }, - "required": ["location", "data"], + "required": [ + "location", + "data" + ], "additionalProperties": false } } @@ -444,7 +464,9 @@ }, "/api/plugin": { "get": { - "tags": ["plugin"], + "tags": [ + "plugin" + ], "operationId": "v2.plugin.list", "parameters": [ { @@ -507,7 +529,10 @@ } } }, - "required": ["location", "data"], + "required": [ + "location", + "data" + ], "additionalProperties": false } } @@ -540,7 +565,9 @@ }, "/api/session": { "get": { - "tags": ["session"], + "tags": [ + "session" + ], "operationId": "v2.session.list", "parameters": [ { @@ -586,7 +613,10 @@ "anyOf": [ { "type": "string", - "enum": ["asc", "desc"] + "enum": [ + "asc", + "desc" + ] }, { "type": "null" @@ -628,7 +658,9 @@ }, { "type": "string", - "enum": ["null"] + "enum": [ + "null" + ] } ], "description": "Filter by parent session. Use null to return only root sessions." @@ -749,7 +781,9 @@ "summary": "List sessions" }, "post": { - "tags": ["session"], + "tags": [ + "session" + ], "operationId": "v2.session.create", "parameters": [], "security": [], @@ -765,7 +799,9 @@ "$ref": "#/components/schemas/Session.Info" } }, - "required": ["data"], + "required": [ + "data" + ], "additionalProperties": false } } @@ -866,7 +902,9 @@ }, "/api/session/import": { "post": { - "tags": ["session"], + "tags": [ + "session" + ], "operationId": "v2.session.import", "parameters": [], "security": [], @@ -882,7 +920,9 @@ "$ref": "#/components/schemas/Session.Info" } }, - "required": ["data"], + "required": [ + "data" + ], "additionalProperties": false } } @@ -947,7 +987,10 @@ ] } }, - "required": ["info", "messages"], + "required": [ + "info", + "messages" + ], "additionalProperties": false } } @@ -958,7 +1001,9 @@ }, "/api/session/{sessionID}/export": { "get": { - "tags": ["session"], + "tags": [ + "session" + ], "operationId": "v2.session.export", "parameters": [ { @@ -981,7 +1026,10 @@ "anyOf": [ { "type": "string", - "enum": ["true", "false"] + "enum": [ + "true", + "false" + ] }, { "type": "null" @@ -1004,7 +1052,9 @@ "$ref": "#/components/schemas/SessionTransfer.Data" } }, - "required": ["data"], + "required": [ + "data" + ], "additionalProperties": false } } @@ -1057,7 +1107,9 @@ }, "/api/session/active": { "get": { - "tags": ["session"], + "tags": [ + "session" + ], "operationId": "v2.session.active", "parameters": [], "security": [], @@ -1078,7 +1130,9 @@ } } }, - "required": ["data"], + "required": [ + "data" + ], "additionalProperties": false } } @@ -1111,7 +1165,9 @@ }, "/api/session/{sessionID}": { "get": { - "tags": ["session"], + "tags": [ + "session" + ], "operationId": "v2.session.get", "parameters": [ { @@ -1141,7 +1197,9 @@ "$ref": "#/components/schemas/Session.Info" } }, - "required": ["data"], + "required": [ + "data" + ], "additionalProperties": false } } @@ -1182,7 +1240,9 @@ "summary": "Get session" }, "delete": { - "tags": ["session"], + "tags": [ + "session" + ], "operationId": "v2.session.remove", "parameters": [ { @@ -1248,7 +1308,9 @@ }, "/api/session/{sessionID}/fork": { "post": { - "tags": ["session"], + "tags": [ + "session" + ], "operationId": "v2.session.fork", "parameters": [ { @@ -1278,7 +1340,9 @@ "$ref": "#/components/schemas/Session.Info" } }, - "required": ["data"], + "required": [ + "data" + ], "additionalProperties": false } } @@ -1344,7 +1408,9 @@ "$ref": "#/components/schemas/Session.ForkRequestBoundary" } }, - "required": ["boundary"], + "required": [ + "boundary" + ], "additionalProperties": false } } @@ -1355,7 +1421,9 @@ }, "/api/session/{sessionID}/agent": { "post": { - "tags": ["session"], + "tags": [ + "session" + ], "operationId": "v2.session.switchAgent", "parameters": [ { @@ -1427,7 +1495,9 @@ "type": "string" } }, - "required": ["agent"], + "required": [ + "agent" + ], "additionalProperties": false } } @@ -1438,7 +1508,9 @@ }, "/api/session/{sessionID}/model": { "post": { - "tags": ["session"], + "tags": [ + "session" + ], "operationId": "v2.session.switchModel", "parameters": [ { @@ -1510,7 +1582,9 @@ "$ref": "#/components/schemas/Model.Ref" } }, - "required": ["model"], + "required": [ + "model" + ], "additionalProperties": false } } @@ -1521,7 +1595,9 @@ }, "/api/session/{sessionID}/rename": { "post": { - "tags": ["session"], + "tags": [ + "session" + ], "operationId": "v2.session.rename", "parameters": [ { @@ -1593,7 +1669,9 @@ "type": "string" } }, - "required": ["title"], + "required": [ + "title" + ], "additionalProperties": false } } @@ -1604,7 +1682,9 @@ }, "/api/session/{sessionID}/move": { "post": { - "tags": ["session"], + "tags": [ + "session" + ], "operationId": "v2.session.move", "parameters": [ { @@ -1694,7 +1774,9 @@ ] } }, - "required": ["directory"], + "required": [ + "directory" + ], "additionalProperties": false } } @@ -1705,7 +1787,9 @@ }, "/api/session/{sessionID}/prompt": { "post": { - "tags": ["session"], + "tags": [ + "session" + ], "operationId": "v2.session.prompt", "parameters": [ { @@ -1735,7 +1819,9 @@ "$ref": "#/components/schemas/Session.Inbox.User" } }, - "required": ["data"], + "required": [ + "data" + ], "additionalProperties": false } } @@ -1864,7 +1950,9 @@ ] } }, - "required": ["text"], + "required": [ + "text" + ], "additionalProperties": false } } @@ -1875,7 +1963,9 @@ }, "/api/session/{sessionID}/command": { "post": { - "tags": ["session"], + "tags": [ + "session" + ], "operationId": "v2.session.command", "parameters": [ { @@ -1905,7 +1995,9 @@ "$ref": "#/components/schemas/Session.Inbox.User" } }, - "required": ["data"], + "required": [ + "data" + ], "additionalProperties": false } } @@ -2074,7 +2166,9 @@ ] } }, - "required": ["command"], + "required": [ + "command" + ], "additionalProperties": false } } @@ -2085,7 +2179,9 @@ }, "/api/session/{sessionID}/skill": { "post": { - "tags": ["session"], + "tags": [ + "session" + ], "operationId": "v2.session.skill", "parameters": [ { @@ -2185,7 +2281,9 @@ ] } }, - "required": ["skill"], + "required": [ + "skill" + ], "additionalProperties": false } } @@ -2196,7 +2294,9 @@ }, "/api/session/{sessionID}/synthetic": { "post": { - "tags": ["session"], + "tags": [ + "session" + ], "operationId": "v2.session.synthetic", "parameters": [ { @@ -2226,7 +2326,9 @@ "$ref": "#/components/schemas/Session.Inbox.Synthetic" } }, - "required": ["data"], + "required": [ + "data" + ], "additionalProperties": false } } @@ -2340,7 +2442,9 @@ ] } }, - "required": ["text"], + "required": [ + "text" + ], "additionalProperties": false } } @@ -2351,7 +2455,9 @@ }, "/api/session/{sessionID}/shell": { "post": { - "tags": ["session"], + "tags": [ + "session" + ], "operationId": "v2.session.shell", "parameters": [ { @@ -2438,7 +2544,9 @@ "type": "string" } }, - "required": ["command"], + "required": [ + "command" + ], "additionalProperties": false } } @@ -2449,7 +2557,9 @@ }, "/api/session/{sessionID}/compact": { "post": { - "tags": ["session"], + "tags": [ + "session" + ], "operationId": "v2.session.compact", "parameters": [ { @@ -2479,7 +2589,9 @@ "$ref": "#/components/schemas/Session.Inbox.Compaction" } }, - "required": ["data"], + "required": [ + "data" + ], "additionalProperties": false } } @@ -2577,7 +2689,9 @@ }, "/api/session/{sessionID}/wait": { "post": { - "tags": ["session"], + "tags": [ + "session" + ], "operationId": "v2.session.wait", "parameters": [ { @@ -2653,7 +2767,9 @@ }, "/api/session/{sessionID}/revert/stage": { "post": { - "tags": ["session"], + "tags": [ + "session" + ], "operationId": "v2.session.revert.stage", "parameters": [ { @@ -2683,7 +2799,9 @@ "$ref": "#/components/schemas/Session.Revert" } }, - "required": ["data"], + "required": [ + "data" + ], "additionalProperties": false } } @@ -2777,7 +2895,9 @@ ] } }, - "required": ["messageID"], + "required": [ + "messageID" + ], "additionalProperties": false } } @@ -2788,7 +2908,9 @@ }, "/api/session/{sessionID}/revert/clear": { "post": { - "tags": ["session"], + "tags": [ + "session" + ], "operationId": "v2.session.revert.clear", "parameters": [ { @@ -2873,7 +2995,9 @@ }, "/api/session/{sessionID}/revert/commit": { "post": { - "tags": ["session"], + "tags": [ + "session" + ], "operationId": "v2.session.revert.commit", "parameters": [ { @@ -2948,7 +3072,9 @@ }, "/api/session/{sessionID}/context": { "get": { - "tags": ["session"], + "tags": [ + "session" + ], "operationId": "v2.session.context", "parameters": [ { @@ -2981,7 +3107,9 @@ } } }, - "required": ["data"], + "required": [ + "data" + ], "additionalProperties": false } } @@ -3034,7 +3162,9 @@ }, "/api/session/{sessionID}/inbox": { "get": { - "tags": ["session"], + "tags": [ + "session" + ], "operationId": "v2.session.inbox.list", "parameters": [ { @@ -3067,7 +3197,9 @@ } } }, - "required": ["data"], + "required": [ + "data" + ], "additionalProperties": false } } @@ -3110,7 +3242,9 @@ }, "/api/session/{sessionID}/inbox/{inboxID}": { "delete": { - "tags": ["session"], + "tags": [ + "session" + ], "operationId": "v2.session.inbox.cancel", "parameters": [ { @@ -3192,7 +3326,9 @@ }, "/api/session/{sessionID}/inbox/{inboxID}/steer": { "post": { - "tags": ["session"], + "tags": [ + "session" + ], "operationId": "v2.session.inbox.steer", "parameters": [ { @@ -3274,7 +3410,9 @@ }, "/api/session/{sessionID}/inbox/{inboxID}/queue": { "post": { - "tags": ["session"], + "tags": [ + "session" + ], "operationId": "v2.session.inbox.queue", "parameters": [ { @@ -3356,7 +3494,9 @@ }, "/api/session/{sessionID}/instructions/entries": { "get": { - "tags": ["session"], + "tags": [ + "session" + ], "operationId": "v2.session.instructions.entry.list", "parameters": [ { @@ -3389,7 +3529,9 @@ } } }, - "required": ["data"], + "required": [ + "data" + ], "additionalProperties": false } } @@ -3439,7 +3581,9 @@ }, "/api/session/{sessionID}/instructions/entries/{key}": { "put": { - "tags": ["session"], + "tags": [ + "session" + ], "operationId": "v2.session.instructions.entry.put", "parameters": [ { @@ -3527,7 +3671,9 @@ "properties": { "value": {} }, - "required": ["value"], + "required": [ + "value" + ], "additionalProperties": false } } @@ -3536,7 +3682,9 @@ } }, "delete": { - "tags": ["session"], + "tags": [ + "session" + ], "operationId": "v2.session.instructions.entry.remove", "parameters": [ { @@ -3610,7 +3758,9 @@ }, "/api/session/{sessionID}/generate": { "post": { - "tags": ["session"], + "tags": [ + "session" + ], "operationId": "v2.session.generate", "parameters": [ { @@ -3699,7 +3849,9 @@ "type": "string" } }, - "required": ["prompt"], + "required": [ + "prompt" + ], "additionalProperties": false } } @@ -3710,7 +3862,9 @@ }, "/api/experimental/session/{sessionID}/log": { "get": { - "tags": ["session"], + "tags": [ + "session" + ], "operationId": "v2.session.log", "parameters": [ { @@ -3748,7 +3902,10 @@ "anyOf": [ { "type": "string", - "enum": ["true", "false"] + "enum": [ + "true", + "false" + ] }, { "type": "null" @@ -3784,7 +3941,11 @@ "$ref": "#/components/schemas/SessionLogItemJsonString" } }, - "required": ["id", "event", "data"], + "required": [ + "id", + "event", + "data" + ], "additionalProperties": false }, "x-effect-stream": { @@ -3798,13 +3959,18 @@ "properties": { "_tag": { "type": "string", - "enum": ["Fail"] + "enum": [ + "Fail" + ] }, "error": { "not": {} } }, - "required": ["_tag", "error"], + "required": [ + "_tag", + "error" + ], "additionalProperties": false }, { @@ -3812,11 +3978,16 @@ "properties": { "_tag": { "type": "string", - "enum": ["Die"] + "enum": [ + "Die" + ] }, "defect": {} }, - "required": ["_tag", "defect"], + "required": [ + "_tag", + "defect" + ], "additionalProperties": false }, { @@ -3824,7 +3995,9 @@ "properties": { "_tag": { "type": "string", - "enum": ["Interrupt"] + "enum": [ + "Interrupt" + ] }, "fiberId": { "anyOf": [ @@ -3837,7 +4010,10 @@ ] } }, - "required": ["_tag", "fiberId"], + "required": [ + "_tag", + "fiberId" + ], "additionalProperties": false } ] @@ -3888,7 +4064,9 @@ }, "/api/session/{sessionID}/interrupt": { "post": { - "tags": ["session"], + "tags": [ + "session" + ], "operationId": "v2.session.interrupt", "parameters": [ { @@ -3911,7 +4089,10 @@ "anyOf": [ { "type": "string", - "enum": ["true", "false"] + "enum": [ + "true", + "false" + ] }, { "type": "null" @@ -3970,7 +4151,9 @@ }, "/api/session/{sessionID}/background": { "post": { - "tags": ["session"], + "tags": [ + "session" + ], "operationId": "v2.session.background", "parameters": [ { @@ -4036,7 +4219,9 @@ }, "/api/session/{sessionID}/message/{messageID}": { "get": { - "tags": ["session"], + "tags": [ + "session" + ], "operationId": "v2.session.message", "parameters": [ { @@ -4079,7 +4264,9 @@ "$ref": "#/components/schemas/Session.Message.Info" } }, - "required": ["data"], + "required": [ + "data" + ], "additionalProperties": false } } @@ -4129,7 +4316,9 @@ }, "/api/session/{sessionID}/message": { "get": { - "tags": ["session"], + "tags": [ + "session" + ], "operationId": "v2.message.list", "parameters": [ { @@ -4168,7 +4357,10 @@ "anyOf": [ { "type": "string", - "enum": ["asc", "desc"] + "enum": [ + "asc", + "desc" + ] }, { "type": "null" @@ -4261,7 +4453,9 @@ }, "/api/model": { "get": { - "tags": ["model"], + "tags": [ + "model" + ], "operationId": "v2.model.list", "parameters": [ { @@ -4324,7 +4518,10 @@ } } }, - "required": ["location", "data"], + "required": [ + "location", + "data" + ], "additionalProperties": false } } @@ -4367,7 +4564,9 @@ }, "/api/model/default": { "get": { - "tags": ["model"], + "tags": [ + "model" + ], "operationId": "v2.model.default", "parameters": [ { @@ -4434,7 +4633,10 @@ ] } }, - "required": ["location", "data"], + "required": [ + "location", + "data" + ], "additionalProperties": false } } @@ -4477,7 +4679,9 @@ }, "/api/generate": { "post": { - "tags": ["generate"], + "tags": [ + "generate" + ], "operationId": "v2.generate.text", "parameters": [ { @@ -4593,7 +4797,9 @@ ] } }, - "required": ["prompt"], + "required": [ + "prompt" + ], "additionalProperties": false } } @@ -4604,7 +4810,9 @@ }, "/api/provider": { "get": { - "tags": ["provider"], + "tags": [ + "provider" + ], "operationId": "v2.provider.list", "parameters": [ { @@ -4667,7 +4875,10 @@ } } }, - "required": ["location", "data"], + "required": [ + "location", + "data" + ], "additionalProperties": false } } @@ -4710,7 +4921,9 @@ }, "/api/provider/{providerID}": { "get": { - "tags": ["provider"], + "tags": [ + "provider" + ], "operationId": "v2.provider.get", "parameters": [ { @@ -4778,7 +4991,10 @@ "$ref": "#/components/schemas/Provider.Info" } }, - "required": ["location", "data"], + "required": [ + "location", + "data" + ], "additionalProperties": false } } @@ -4831,7 +5047,9 @@ }, "/api/integration": { "get": { - "tags": ["integration"], + "tags": [ + "integration" + ], "operationId": "v2.integration.list", "parameters": [ { @@ -4894,7 +5112,10 @@ } } }, - "required": ["location", "data"], + "required": [ + "location", + "data" + ], "additionalProperties": false } } @@ -4927,7 +5148,9 @@ }, "/api/integration/{integrationID}": { "get": { - "tags": ["integration"], + "tags": [ + "integration" + ], "operationId": "v2.integration.get", "parameters": [ { @@ -5002,7 +5225,10 @@ ] } }, - "required": ["location", "data"], + "required": [ + "location", + "data" + ], "additionalProperties": false } } @@ -5035,7 +5261,9 @@ }, "/api/experimental/integration/wellknown": { "post": { - "tags": ["integration"], + "tags": [ + "integration" + ], "operationId": "v2.experimental.integration.wellknown.add", "parameters": [ { @@ -5124,7 +5352,9 @@ "type": "string" } }, - "required": ["url"], + "required": [ + "url" + ], "additionalProperties": false } } @@ -5135,7 +5365,9 @@ }, "/api/integration/{integrationID}/connect/key": { "post": { - "tags": ["integration"], + "tags": [ + "integration" + ], "operationId": "v2.integration.connect.key", "parameters": [ { @@ -5252,7 +5484,9 @@ ] } }, - "required": ["key"], + "required": [ + "key" + ], "additionalProperties": false } } @@ -5263,7 +5497,9 @@ }, "/api/integration/{integrationID}/connect/oauth": { "post": { - "tags": ["integration"], + "tags": [ + "integration" + ], "operationId": "v2.integration.oauth.connect", "parameters": [ { @@ -5331,7 +5567,10 @@ "$ref": "#/components/schemas/Integration.Attempt" } }, - "required": ["location", "data"], + "required": [ + "location", + "data" + ], "additionalProperties": false } } @@ -5397,7 +5636,9 @@ ] } }, - "required": ["methodID"], + "required": [ + "methodID" + ], "additionalProperties": false } } @@ -5408,7 +5649,9 @@ }, "/api/integration/{integrationID}/connect/oauth/{attemptID}": { "get": { - "tags": ["integration"], + "tags": [ + "integration" + ], "operationId": "v2.integration.oauth.status", "parameters": [ { @@ -5484,7 +5727,10 @@ "$ref": "#/components/schemas/Integration.AttemptStatus" } }, - "required": ["location", "data"], + "required": [ + "location", + "data" + ], "additionalProperties": false } } @@ -5515,7 +5761,9 @@ "summary": "Get OAuth attempt status" }, "delete": { - "tags": ["integration"], + "tags": [ + "integration" + ], "operationId": "v2.integration.oauth.cancel", "parameters": [ { @@ -5607,7 +5855,9 @@ }, "/api/integration/{integrationID}/connect/oauth/{attemptID}/complete": { "post": { - "tags": ["integration"], + "tags": [ + "integration" + ], "operationId": "v2.integration.oauth.complete", "parameters": [ { @@ -5729,7 +5979,9 @@ }, "/api/integration/{integrationID}/connect/command": { "post": { - "tags": ["integration"], + "tags": [ + "integration" + ], "operationId": "v2.integration.command.connect", "parameters": [ { @@ -5797,7 +6049,10 @@ "$ref": "#/components/schemas/Integration.CommandAttempt" } }, - "required": ["location", "data"], + "required": [ + "location", + "data" + ], "additionalProperties": false } } @@ -5853,7 +6108,9 @@ ] } }, - "required": ["methodID"], + "required": [ + "methodID" + ], "additionalProperties": false } } @@ -5864,7 +6121,9 @@ }, "/api/integration/{integrationID}/connect/command/{attemptID}": { "get": { - "tags": ["integration"], + "tags": [ + "integration" + ], "operationId": "v2.integration.command.status", "parameters": [ { @@ -5940,7 +6199,10 @@ "$ref": "#/components/schemas/Integration.CommandAttemptStatus" } }, - "required": ["location", "data"], + "required": [ + "location", + "data" + ], "additionalProperties": false } } @@ -5971,7 +6233,9 @@ "summary": "Get command attempt status" }, "delete": { - "tags": ["integration"], + "tags": [ + "integration" + ], "operationId": "v2.integration.command.cancel", "parameters": [ { @@ -6063,7 +6327,9 @@ }, "/api/mcp": { "get": { - "tags": ["mcp"], + "tags": [ + "mcp" + ], "operationId": "v2.mcp.list", "parameters": [ { @@ -6126,7 +6392,10 @@ } } }, - "required": ["location", "data"], + "required": [ + "location", + "data" + ], "additionalProperties": false } } @@ -6159,7 +6428,9 @@ }, "/api/mcp/{server}": { "put": { - "tags": ["mcp"], + "tags": [ + "mcp" + ], "operationId": "v2.mcp.add", "parameters": [ { @@ -6256,7 +6527,9 @@ ] } }, - "required": ["config"], + "required": [ + "config" + ], "additionalProperties": false } } @@ -6265,7 +6538,9 @@ } }, "delete": { - "tags": ["mcp"], + "tags": [ + "mcp" + ], "operationId": "v2.mcp.remove", "parameters": [ { @@ -6359,7 +6634,9 @@ }, "/api/mcp/{server}/connect": { "post": { - "tags": ["mcp"], + "tags": [ + "mcp" + ], "operationId": "v2.mcp.connect", "parameters": [ { @@ -6453,7 +6730,9 @@ }, "/api/mcp/{server}/disconnect": { "post": { - "tags": ["mcp"], + "tags": [ + "mcp" + ], "operationId": "v2.mcp.disconnect", "parameters": [ { @@ -6547,7 +6826,9 @@ }, "/api/mcp/resource": { "get": { - "tags": ["mcp"], + "tags": [ + "mcp" + ], "operationId": "v2.mcp.resource.catalog", "parameters": [ { @@ -6607,7 +6888,10 @@ "$ref": "#/components/schemas/Mcp.ResourceCatalog" } }, - "required": ["location", "data"], + "required": [ + "location", + "data" + ], "additionalProperties": false } } @@ -6640,7 +6924,9 @@ }, "/api/credential/{credentialID}": { "patch": { - "tags": ["credential"], + "tags": [ + "credential" + ], "operationId": "v2.credential.update", "parameters": [ { @@ -6730,7 +7016,9 @@ "type": "string" } }, - "required": ["label"], + "required": [ + "label" + ], "additionalProperties": false } } @@ -6739,7 +7027,9 @@ } }, "delete": { - "tags": ["credential"], + "tags": [ + "credential" + ], "operationId": "v2.credential.remove", "parameters": [ { @@ -6823,7 +7113,9 @@ }, "/api/project": { "get": { - "tags": ["project"], + "tags": [ + "project" + ], "operationId": "v2.project.list", "parameters": [], "security": [], @@ -6868,7 +7160,9 @@ }, "/api/project/current": { "get": { - "tags": ["project"], + "tags": [ + "project" + ], "operationId": "v2.project.current", "parameters": [ { @@ -6949,100 +7243,11 @@ "summary": "Get current project" } }, - "/api/project/{projectID}/directories": { - "get": { - "tags": ["project"], - "operationId": "v2.project.directories", - "parameters": [ - { - "name": "projectID", - "in": "path", - "schema": { - "type": "string" - }, - "required": true - }, - { - "name": "location", - "in": "query", - "schema": { - "anyOf": [ - { - "type": "object", - "properties": { - "directory": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "workspace": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false - }, - { - "type": "null" - } - ] - }, - "required": false, - "style": "deepObject", - "explode": true - } - ], - "security": [], - "responses": { - "200": { - "description": "Project.Directories", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Project.Directories" - } - } - } - }, - "400": { - "description": "InvalidRequestError", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InvalidRequestError" - } - } - } - }, - "401": { - "description": "UnauthorizedError", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UnauthorizedError" - } - } - } - } - }, - "description": "List known local absolute directories for a project.", - "summary": "List project directories" - } - }, "/api/form/request": { "get": { - "tags": ["form"], + "tags": [ + "form" + ], "operationId": "v2.form.request.list", "parameters": [ { @@ -7105,7 +7310,10 @@ } } }, - "required": ["location", "data"], + "required": [ + "location", + "data" + ], "additionalProperties": false } } @@ -7138,7 +7346,9 @@ }, "/api/session/{sessionID}/form": { "get": { - "tags": ["form"], + "tags": [ + "form" + ], "operationId": "v2.session.form.list", "parameters": [ { @@ -7166,7 +7376,9 @@ } } }, - "required": ["data"], + "required": [ + "data" + ], "additionalProperties": false } } @@ -7214,7 +7426,9 @@ "summary": "List session forms" }, "post": { - "tags": ["form"], + "tags": [ + "form" + ], "operationId": "v2.session.form.create", "parameters": [ { @@ -7239,7 +7453,9 @@ "$ref": "#/components/schemas/Form.Info" } }, - "required": ["data"], + "required": [ + "data" + ], "additionalProperties": false } } @@ -7316,7 +7532,9 @@ }, "/api/session/{sessionID}/form/{formID}": { "get": { - "tags": ["form"], + "tags": [ + "form" + ], "operationId": "v2.session.form.get", "parameters": [ { @@ -7354,7 +7572,9 @@ "$ref": "#/components/schemas/Form.Info" } }, - "required": ["data"], + "required": [ + "data" + ], "additionalProperties": false } } @@ -7407,7 +7627,9 @@ }, "/api/session/{sessionID}/form/{formID}/state": { "get": { - "tags": ["form"], + "tags": [ + "form" + ], "operationId": "v2.session.form.state", "parameters": [ { @@ -7445,7 +7667,9 @@ "$ref": "#/components/schemas/Form.State" } }, - "required": ["data"], + "required": [ + "data" + ], "additionalProperties": false } } @@ -7498,7 +7722,9 @@ }, "/api/session/{sessionID}/form/{formID}/reply": { "post": { - "tags": ["form"], + "tags": [ + "form" + ], "operationId": "v2.session.form.reply", "parameters": [ { @@ -7602,7 +7828,9 @@ }, "/api/session/{sessionID}/form/{formID}/cancel": { "post": { - "tags": ["form"], + "tags": [ + "form" + ], "operationId": "v2.session.form.cancel", "parameters": [ { @@ -7689,7 +7917,9 @@ }, "/api/permission/request": { "get": { - "tags": ["permission"], + "tags": [ + "permission" + ], "operationId": "v2.permission.request.list", "parameters": [ { @@ -7752,7 +7982,10 @@ } } }, - "required": ["location", "data"], + "required": [ + "location", + "data" + ], "additionalProperties": false } } @@ -7785,7 +8018,9 @@ }, "/api/permission/saved": { "get": { - "tags": ["permission"], + "tags": [ + "permission" + ], "operationId": "v2.permission.saved.list", "parameters": [ { @@ -7820,7 +8055,9 @@ } } }, - "required": ["data"], + "required": [ + "data" + ], "additionalProperties": false } } @@ -7853,7 +8090,9 @@ }, "/api/permission/saved/{id}": { "delete": { - "tags": ["permission"], + "tags": [ + "permission" + ], "operationId": "v2.permission.saved.remove", "parameters": [ { @@ -7897,7 +8136,9 @@ }, "/api/session/{sessionID}/permission": { "post": { - "tags": ["permission"], + "tags": [ + "permission" + ], "operationId": "v2.session.permission.create", "parameters": [ { @@ -7938,11 +8179,16 @@ "$ref": "#/components/schemas/Permission.Effect" } }, - "required": ["id", "effect"], + "required": [ + "id", + "effect" + ], "additionalProperties": false } }, - "required": ["data"], + "required": [ + "data" + ], "additionalProperties": false } } @@ -8044,7 +8290,10 @@ ] } }, - "required": ["action", "resources"], + "required": [ + "action", + "resources" + ], "additionalProperties": false } } @@ -8053,7 +8302,9 @@ } }, "get": { - "tags": ["permission"], + "tags": [ + "permission" + ], "operationId": "v2.session.permission.list", "parameters": [ { @@ -8086,7 +8337,9 @@ } } }, - "required": ["data"], + "required": [ + "data" + ], "additionalProperties": false } } @@ -8136,7 +8389,9 @@ }, "/api/session/{sessionID}/permission/{requestID}": { "get": { - "tags": ["permission"], + "tags": [ + "permission" + ], "operationId": "v2.session.permission.get", "parameters": [ { @@ -8179,7 +8434,9 @@ "$ref": "#/components/schemas/Permission.Request" } }, - "required": ["data"], + "required": [ + "data" + ], "additionalProperties": false } } @@ -8232,7 +8489,9 @@ }, "/api/session/{sessionID}/permission/{requestID}/reply": { "post": { - "tags": ["permission"], + "tags": [ + "permission" + ], "operationId": "v2.session.permission.reply", "parameters": [ { @@ -8330,7 +8589,9 @@ ] } }, - "required": ["reply"], + "required": [ + "reply" + ], "additionalProperties": false } } @@ -8341,7 +8602,9 @@ }, "/api/fs/read/*": { "get": { - "tags": ["filesystem"], + "tags": [ + "filesystem" + ], "operationId": "v2.fs.read", "parameters": [ { @@ -8425,7 +8688,9 @@ }, "/api/fs/list": { "get": { - "tags": ["filesystem"], + "tags": [ + "filesystem" + ], "operationId": "v2.fs.list", "parameters": [ { @@ -8503,7 +8768,10 @@ } } }, - "required": ["location", "data"], + "required": [ + "location", + "data" + ], "additionalProperties": false } } @@ -8536,7 +8804,9 @@ }, "/api/fs/find": { "get": { - "tags": ["filesystem"], + "tags": [ + "filesystem" + ], "operationId": "v2.fs.find", "parameters": [ { @@ -8592,7 +8862,10 @@ "in": "query", "schema": { "type": "string", - "enum": ["file", "directory"] + "enum": [ + "file", + "directory" + ] }, "required": false }, @@ -8631,7 +8904,10 @@ } } }, - "required": ["location", "data"], + "required": [ + "location", + "data" + ], "additionalProperties": false } } @@ -8664,7 +8940,9 @@ }, "/api/command": { "get": { - "tags": ["command"], + "tags": [ + "command" + ], "operationId": "v2.command.list", "parameters": [ { @@ -8727,7 +9005,10 @@ } } }, - "required": ["location", "data"], + "required": [ + "location", + "data" + ], "additionalProperties": false } } @@ -8760,7 +9041,9 @@ }, "/api/skill": { "get": { - "tags": ["skill"], + "tags": [ + "skill" + ], "operationId": "v2.skill.list", "parameters": [ { @@ -8823,7 +9106,10 @@ } } }, - "required": ["location", "data"], + "required": [ + "location", + "data" + ], "additionalProperties": false } } @@ -8856,7 +9142,9 @@ }, "/api/event": { "get": { - "tags": ["event"], + "tags": [ + "event" + ], "operationId": "v2.event.subscribe", "parameters": [], "security": [], @@ -8885,7 +9173,11 @@ "$ref": "#/components/schemas/V2EventJsonString" } }, - "required": ["id", "event", "data"], + "required": [ + "id", + "event", + "data" + ], "additionalProperties": false }, "x-effect-stream": { @@ -8899,13 +9191,18 @@ "properties": { "_tag": { "type": "string", - "enum": ["Fail"] + "enum": [ + "Fail" + ] }, "error": { "not": {} } }, - "required": ["_tag", "error"], + "required": [ + "_tag", + "error" + ], "additionalProperties": false }, { @@ -8913,11 +9210,16 @@ "properties": { "_tag": { "type": "string", - "enum": ["Die"] + "enum": [ + "Die" + ] }, "defect": {} }, - "required": ["_tag", "defect"], + "required": [ + "_tag", + "defect" + ], "additionalProperties": false }, { @@ -8925,7 +9227,9 @@ "properties": { "_tag": { "type": "string", - "enum": ["Interrupt"] + "enum": [ + "Interrupt" + ] }, "fiberId": { "anyOf": [ @@ -8938,7 +9242,10 @@ ] } }, - "required": ["_tag", "fiberId"], + "required": [ + "_tag", + "fiberId" + ], "additionalProperties": false } ] @@ -8979,7 +9286,9 @@ }, "/api/pty": { "get": { - "tags": ["pty"], + "tags": [ + "pty" + ], "operationId": "v2.pty.list", "parameters": [ { @@ -9042,7 +9351,10 @@ } } }, - "required": ["location", "data"], + "required": [ + "location", + "data" + ], "additionalProperties": false } } @@ -9073,7 +9385,9 @@ "summary": "List PTY sessions" }, "post": { - "tags": ["pty"], + "tags": [ + "pty" + ], "operationId": "v2.pty.create", "parameters": [ { @@ -9133,7 +9447,10 @@ "$ref": "#/components/schemas/Pty" } }, - "required": ["location", "data"], + "required": [ + "location", + "data" + ], "additionalProperties": false } } @@ -9200,7 +9517,9 @@ }, "/api/pty/{ptyID}": { "get": { - "tags": ["pty"], + "tags": [ + "pty" + ], "operationId": "v2.pty.get", "parameters": [ { @@ -9273,7 +9592,10 @@ "$ref": "#/components/schemas/Pty" } }, - "required": ["location", "data"], + "required": [ + "location", + "data" + ], "additionalProperties": false } } @@ -9314,7 +9636,9 @@ "summary": "Get PTY session" }, "put": { - "tags": ["pty"], + "tags": [ + "pty" + ], "operationId": "v2.pty.update", "parameters": [ { @@ -9387,7 +9711,10 @@ "$ref": "#/components/schemas/Pty" } }, - "required": ["location", "data"], + "required": [ + "location", + "data" + ], "additionalProperties": false } } @@ -9455,7 +9782,10 @@ ] } }, - "required": ["rows", "cols"], + "required": [ + "rows", + "cols" + ], "additionalProperties": false } }, @@ -9467,7 +9797,9 @@ } }, "delete": { - "tags": ["pty"], + "tags": [ + "pty" + ], "operationId": "v2.pty.remove", "parameters": [ { @@ -9566,7 +9898,9 @@ }, "/api/pty/{ptyID}/connect-token": { "post": { - "tags": ["pty"], + "tags": [ + "pty" + ], "operationId": "v2.pty.connect.token", "parameters": [ { @@ -9639,7 +9973,10 @@ "$ref": "#/components/schemas/PtyTicket.ConnectToken" } }, - "required": ["location", "data"], + "required": [ + "location", + "data" + ], "additionalProperties": false } } @@ -9692,7 +10029,9 @@ }, "/api/pty/{ptyID}/connect": { "get": { - "tags": ["pty"], + "tags": [ + "pty" + ], "operationId": "v2.pty.connect", "parameters": [ { @@ -9797,7 +10136,9 @@ }, "/api/shell": { "get": { - "tags": ["shell"], + "tags": [ + "shell" + ], "operationId": "v2.shell.list", "parameters": [ { @@ -9860,7 +10201,10 @@ } } }, - "required": ["location", "data"], + "required": [ + "location", + "data" + ], "additionalProperties": false } } @@ -9891,7 +10235,9 @@ "summary": "List running shell commands" }, "post": { - "tags": ["shell"], + "tags": [ + "shell" + ], "operationId": "v2.shell.create", "parameters": [ { @@ -9951,7 +10297,10 @@ "$ref": "#/components/schemas/Shell.Info1" } }, - "required": ["location", "data"], + "required": [ + "location", + "data" + ], "additionalProperties": false } } @@ -10004,7 +10353,10 @@ "type": "object" } }, - "required": ["command", "timeout"], + "required": [ + "command", + "timeout" + ], "additionalProperties": false } } @@ -10015,7 +10367,9 @@ }, "/api/shell/{id}": { "get": { - "tags": ["shell"], + "tags": [ + "shell" + ], "operationId": "v2.shell.get", "parameters": [ { @@ -10088,7 +10442,10 @@ "$ref": "#/components/schemas/Shell.Info1" } }, - "required": ["location", "data"], + "required": [ + "location", + "data" + ], "additionalProperties": false } } @@ -10129,7 +10486,9 @@ "summary": "Get shell command" }, "delete": { - "tags": ["shell"], + "tags": [ + "shell" + ], "operationId": "v2.shell.remove", "parameters": [ { @@ -10228,7 +10587,9 @@ }, "/api/shell/{id}/timeout": { "patch": { - "tags": ["shell"], + "tags": [ + "shell" + ], "operationId": "v2.shell.timeout", "parameters": [ { @@ -10301,7 +10662,10 @@ "$ref": "#/components/schemas/Shell.Info1" } }, - "required": ["location", "data"], + "required": [ + "location", + "data" + ], "additionalProperties": false } } @@ -10355,7 +10719,9 @@ ] } }, - "required": ["timeout"], + "required": [ + "timeout" + ], "additionalProperties": false } } @@ -10366,7 +10732,9 @@ }, "/api/shell/{id}/output": { "get": { - "tags": ["shell"], + "tags": [ + "shell" + ], "operationId": "v2.shell.output", "parameters": [ { @@ -10487,11 +10855,19 @@ "type": "boolean" } }, - "required": ["output", "cursor", "size", "truncated"], + "required": [ + "output", + "cursor", + "size", + "truncated" + ], "additionalProperties": false } }, - "required": ["location", "data"], + "required": [ + "location", + "data" + ], "additionalProperties": false } } @@ -10534,7 +10910,9 @@ }, "/api/question/request": { "get": { - "tags": ["question"], + "tags": [ + "question" + ], "operationId": "v2.question.request.list", "parameters": [ { @@ -10597,7 +10975,10 @@ } } }, - "required": ["location", "data"], + "required": [ + "location", + "data" + ], "additionalProperties": false } } @@ -10630,7 +11011,9 @@ }, "/api/session/{sessionID}/question": { "get": { - "tags": ["question"], + "tags": [ + "question" + ], "operationId": "v2.session.question.list", "parameters": [ { @@ -10663,7 +11046,9 @@ } } }, - "required": ["data"], + "required": [ + "data" + ], "additionalProperties": false } } @@ -10713,7 +11098,9 @@ }, "/api/session/{sessionID}/question/{requestID}/reply": { "post": { - "tags": ["question"], + "tags": [ + "question" + ], "operationId": "v2.session.question.reply", "parameters": [ { @@ -10805,7 +11192,9 @@ }, "/api/session/{sessionID}/question/{requestID}/reject": { "post": { - "tags": ["question"], + "tags": [ + "question" + ], "operationId": "v2.session.question.reject", "parameters": [ { @@ -10887,7 +11276,9 @@ }, "/api/reference": { "get": { - "tags": ["reference"], + "tags": [ + "reference" + ], "operationId": "v2.reference.list", "parameters": [ { @@ -10950,7 +11341,10 @@ } } }, - "required": ["location", "data"], + "required": [ + "location", + "data" + ], "additionalProperties": false } } @@ -10981,10 +11375,12 @@ "summary": "List references" } }, - "/api/experimental/project/{projectID}/copy": { - "post": { - "tags": ["projectCopy"], - "operationId": "v2.projectCopy.create", + "/api/experimental/project/{projectID}/worktree": { + "get": { + "tags": [ + "worktree" + ], + "operationId": "v2.worktree.list", "parameters": [ { "name": "projectID", @@ -10993,68 +11389,79 @@ "type": "string" }, "required": true - }, - { - "name": "location", - "in": "query", - "schema": { - "anyOf": [ - { - "type": "object", - "properties": { - "directory": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "workspace": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false - }, - { - "type": "null" - } - ] - }, - "required": false, - "style": "deepObject", - "explode": true } ], "security": [], "responses": { "200": { - "description": "ProjectCopy.Copy", + "description": "Worktree.List", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectCopy.Copy" + "$ref": "#/components/schemas/Worktree.List" } } } }, "400": { - "description": "ProjectCopyError | InvalidRequestError", + "description": "InvalidRequestError", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InvalidRequestError" + } + } + } + }, + "401": { + "description": "UnauthorizedError", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UnauthorizedError" + } + } + } + } + }, + "description": "List known local worktrees for a project.", + "summary": "List worktrees" + }, + "post": { + "tags": [ + "worktree" + ], + "operationId": "v2.worktree.create", + "parameters": [ + { + "name": "projectID", + "in": "path", + "schema": { + "type": "string" + }, + "required": true + } + ], + "security": [], + "responses": { + "200": { + "description": "Worktree.Info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Worktree.Info" + } + } + } + }, + "400": { + "description": "WorktreeError | InvalidRequestError", "content": { "application/json": { "schema": { "anyOf": [ { - "$ref": "#/components/schemas/ProjectCopyError" + "$ref": "#/components/schemas/WorktreeError" }, { "$ref": "#/components/schemas/InvalidRequestError" @@ -11075,6 +11482,8 @@ } } }, + "description": "Create a worktree for a project.", + "summary": "Create worktree", "requestBody": { "content": { "application/json": { @@ -11084,6 +11493,9 @@ "strategy": { "type": "string" }, + "from": { + "type": "string" + }, "directory": { "type": "string" }, @@ -11091,7 +11503,10 @@ "type": "string" } }, - "required": ["strategy", "directory"], + "required": [ + "strategy", + "directory" + ], "additionalProperties": false } } @@ -11100,8 +11515,10 @@ } }, "delete": { - "tags": ["projectCopy"], - "operationId": "v2.projectCopy.remove", + "tags": [ + "worktree" + ], + "operationId": "v2.worktree.remove", "parameters": [ { "name": "projectID", @@ -11110,46 +11527,6 @@ "type": "string" }, "required": true - }, - { - "name": "location", - "in": "query", - "schema": { - "anyOf": [ - { - "type": "object", - "properties": { - "directory": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "workspace": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false - }, - { - "type": "null" - } - ] - }, - "required": false, - "style": "deepObject", - "explode": true } ], "security": [], @@ -11158,13 +11535,13 @@ "description": "" }, "400": { - "description": "ProjectCopyError | InvalidRequestError", + "description": "WorktreeError | InvalidRequestError", "content": { "application/json": { "schema": { "anyOf": [ { - "$ref": "#/components/schemas/ProjectCopyError" + "$ref": "#/components/schemas/WorktreeError" }, { "$ref": "#/components/schemas/InvalidRequestError" @@ -11185,6 +11562,8 @@ } } }, + "description": "Remove a managed worktree from a project.", + "summary": "Remove worktree", "requestBody": { "content": { "application/json": { @@ -11198,7 +11577,10 @@ "type": "boolean" } }, - "required": ["directory", "force"], + "required": [ + "directory", + "force" + ], "additionalProperties": false } } @@ -11207,10 +11589,12 @@ } } }, - "/api/experimental/project/{projectID}/copy/refresh": { + "/api/experimental/project/{projectID}/worktree/refresh": { "post": { - "tags": ["projectCopy"], - "operationId": "v2.projectCopy.refresh", + "tags": [ + "worktree" + ], + "operationId": "v2.worktree.refresh", "parameters": [ { "name": "projectID", @@ -11219,46 +11603,6 @@ "type": "string" }, "required": true - }, - { - "name": "location", - "in": "query", - "schema": { - "anyOf": [ - { - "type": "object", - "properties": { - "directory": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "workspace": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false - }, - { - "type": "null" - } - ] - }, - "required": false, - "style": "deepObject", - "explode": true } ], "security": [], @@ -11267,13 +11611,13 @@ "description": "" }, "400": { - "description": "ProjectCopyError | InvalidRequestError", + "description": "WorktreeError | InvalidRequestError", "content": { "application/json": { "schema": { "anyOf": [ { - "$ref": "#/components/schemas/ProjectCopyError" + "$ref": "#/components/schemas/WorktreeError" }, { "$ref": "#/components/schemas/InvalidRequestError" @@ -11293,12 +11637,16 @@ } } } - } + }, + "description": "Reconcile stored worktrees with the project repositories.", + "summary": "Refresh worktrees" } }, "/api/vcs": { "get": { - "tags": ["vcs"], + "tags": [ + "vcs" + ], "operationId": "v2.vcs.get", "parameters": [ { @@ -11358,7 +11706,10 @@ "$ref": "#/components/schemas/Vcs.Info" } }, - "required": ["location", "data"], + "required": [ + "location", + "data" + ], "additionalProperties": false } } @@ -11391,7 +11742,9 @@ }, "/api/vcs/status": { "get": { - "tags": ["vcs"], + "tags": [ + "vcs" + ], "operationId": "v2.vcs.status", "parameters": [ { @@ -11454,7 +11807,10 @@ } } }, - "required": ["location", "data"], + "required": [ + "location", + "data" + ], "additionalProperties": false } } @@ -11487,7 +11843,9 @@ }, "/api/vcs/diff": { "get": { - "tags": ["vcs"], + "tags": [ + "vcs" + ], "operationId": "v2.vcs.diff", "parameters": [ { @@ -11573,7 +11931,10 @@ } } }, - "required": ["location", "data"], + "required": [ + "location", + "data" + ], "additionalProperties": false } } @@ -11606,7 +11967,9 @@ }, "/api/debug/location": { "get": { - "tags": ["debug"], + "tags": [ + "debug" + ], "operationId": "v2.debug.location.list", "parameters": [], "security": [], @@ -11649,7 +12012,9 @@ "summary": "List loaded locations" }, "delete": { - "tags": ["debug"], + "tags": [ + "debug" + ], "operationId": "v2.debug.location.evict", "parameters": [ { @@ -11725,7 +12090,9 @@ }, "/api/experimental/migration/v1": { "get": { - "tags": ["migration"], + "tags": [ + "migration" + ], "operationId": "v2.experimental.migration.v1.status", "parameters": [], "security": [], @@ -11741,10 +12108,15 @@ "properties": { "status": { "type": "string", - "enum": ["required", "completed"] + "enum": [ + "required", + "completed" + ] } }, - "required": ["status"], + "required": [ + "status" + ], "additionalProperties": false }, { @@ -11752,7 +12124,9 @@ "properties": { "status": { "type": "string", - "enum": ["running"] + "enum": [ + "running" + ] }, "progress": { "type": "object", @@ -11791,11 +12165,16 @@ ] } }, - "required": ["label"], + "required": [ + "label" + ], "additionalProperties": false } }, - "required": ["status", "progress"], + "required": [ + "status", + "progress" + ], "additionalProperties": false }, { @@ -11803,13 +12182,18 @@ "properties": { "status": { "type": "string", - "enum": ["error"] + "enum": [ + "error" + ] }, "error": { "type": "string" } }, - "required": ["status", "error"], + "required": [ + "status", + "error" + ], "additionalProperties": false } ] @@ -11844,7 +12228,9 @@ }, "/api/websearch/provider": { "get": { - "tags": ["websearch"], + "tags": [ + "websearch" + ], "operationId": "v2.websearch.providers", "parameters": [ { @@ -11907,7 +12293,10 @@ } } }, - "required": ["location", "data"], + "required": [ + "location", + "data" + ], "additionalProperties": false } } @@ -11950,7 +12339,9 @@ }, "/api/websearch": { "post": { - "tags": ["websearch"], + "tags": [ + "websearch" + ], "operationId": "v2.websearch.query", "parameters": [ { @@ -12010,7 +12401,10 @@ "$ref": "#/components/schemas/WebSearch.Response" } }, - "required": ["location", "data"], + "required": [ + "location", + "data" + ], "additionalProperties": false } } @@ -12069,7 +12463,9 @@ "type": "string" } }, - "required": ["query"], + "required": [ + "query" + ], "additionalProperties": false } } @@ -12080,7 +12476,9 @@ }, "/api/config": { "get": { - "tags": ["config"], + "tags": [ + "config" + ], "operationId": "v2.config.get", "parameters": [ { @@ -12172,7 +12570,9 @@ "properties": { "healthy": { "type": "boolean", - "enum": [true] + "enum": [ + true + ] }, "version": { "type": "string" @@ -12186,7 +12586,11 @@ ] } }, - "required": ["healthy", "version", "pid"], + "required": [ + "healthy", + "version", + "pid" + ], "additionalProperties": false }, "UnauthorizedError": { @@ -12194,13 +12598,18 @@ "properties": { "_tag": { "type": "string", - "enum": ["UnauthorizedError"] + "enum": [ + "UnauthorizedError" + ] }, "message": { "type": "string" } }, - "required": ["_tag", "message"], + "required": [ + "_tag", + "message" + ], "additionalProperties": false }, "InvalidRequestError": { @@ -12208,7 +12617,9 @@ "properties": { "_tag": { "type": "string", - "enum": ["InvalidRequestError"] + "enum": [ + "InvalidRequestError" + ] }, "message": { "type": "string" @@ -12234,7 +12645,10 @@ ] } }, - "required": ["_tag", "message"], + "required": [ + "_tag", + "message" + ], "additionalProperties": false }, "ServiceStopRequest": { @@ -12244,7 +12658,9 @@ "type": "string" } }, - "required": ["instanceID"], + "required": [ + "instanceID" + ], "additionalProperties": false }, "ServiceStopResponse": { @@ -12254,7 +12670,9 @@ "type": "boolean" } }, - "required": ["accepted"], + "required": [ + "accepted" + ], "additionalProperties": false }, "Location.Info": { @@ -12284,11 +12702,18 @@ "type": "string" } }, - "required": ["id", "directory", "canonical"], + "required": [ + "id", + "directory", + "canonical" + ], "additionalProperties": false } }, - "required": ["directory", "project"], + "required": [ + "directory", + "project" + ], "additionalProperties": false }, "Model.Ref": { @@ -12304,7 +12729,10 @@ "type": "string" } }, - "required": ["id", "providerID"], + "required": [ + "id", + "providerID" + ], "additionalProperties": false }, "Provider.Settings": { @@ -12326,7 +12754,11 @@ "type": "object" } }, - "required": ["settings", "headers", "body"], + "required": [ + "settings", + "headers", + "body" + ], "additionalProperties": false }, "Agent.Color": { @@ -12334,7 +12766,11 @@ }, "Permission.Effect": { "type": "string", - "enum": ["allow", "deny", "ask"] + "enum": [ + "allow", + "deny", + "ask" + ] }, "Permission.Rule": { "type": "object", @@ -12349,7 +12785,11 @@ "$ref": "#/components/schemas/Permission.Effect" } }, - "required": ["action", "resource", "effect"], + "required": [ + "action", + "resource", + "effect" + ], "additionalProperties": false }, "Permission.Ruleset": { @@ -12381,7 +12821,11 @@ }, "mode": { "type": "string", - "enum": ["subagent", "primary", "all"] + "enum": [ + "subagent", + "primary", + "all" + ] }, "hidden": { "type": "boolean" @@ -12401,7 +12845,14 @@ "$ref": "#/components/schemas/Permission.Ruleset" } }, - "required": ["id", "name", "request", "mode", "hidden", "permissions"], + "required": [ + "id", + "name", + "request", + "mode", + "hidden", + "permissions" + ], "additionalProperties": false }, "AgentNotFoundError": { @@ -12409,7 +12860,9 @@ "properties": { "_tag": { "type": "string", - "enum": ["AgentNotFoundError"] + "enum": [ + "AgentNotFoundError" + ] }, "agentID": { "type": "string" @@ -12418,7 +12871,11 @@ "type": "string" } }, - "required": ["_tag", "agentID", "message"], + "required": [ + "_tag", + "agentID", + "message" + ], "additionalProperties": false }, "Plugin.Info": { @@ -12428,7 +12885,9 @@ "type": "string" } }, - "required": ["id"], + "required": [ + "id" + ], "additionalProperties": false }, "Session.ForkBoundary": { @@ -12438,7 +12897,9 @@ "properties": { "type": { "type": "string", - "enum": ["before"] + "enum": [ + "before" + ] }, "messageID": { "type": "string", @@ -12449,7 +12910,10 @@ ] } }, - "required": ["type", "messageID"], + "required": [ + "type", + "messageID" + ], "additionalProperties": false }, { @@ -12457,7 +12921,9 @@ "properties": { "type": { "type": "string", - "enum": ["through"] + "enum": [ + "through" + ] }, "messageID": { "type": "string", @@ -12468,7 +12934,10 @@ ] } }, - "required": ["type", "messageID"], + "required": [ + "type", + "messageID" + ], "additionalProperties": false } ] @@ -12498,11 +12967,19 @@ "type": "number" } }, - "required": ["read", "write"], + "required": [ + "read", + "write" + ], "additionalProperties": false } }, - "required": ["input", "output", "reasoning", "cache"], + "required": [ + "input", + "output", + "reasoning", + "cache" + ], "additionalProperties": false }, "Location.Ref": { @@ -12520,7 +12997,9 @@ ] } }, - "required": ["directory"], + "required": [ + "directory" + ], "additionalProperties": false }, "FileDiff.Info": { @@ -12550,10 +13029,20 @@ }, "status": { "type": "string", - "enum": ["added", "deleted", "modified"] + "enum": [ + "added", + "deleted", + "modified" + ] } }, - "required": ["file", "patch", "additions", "deletions", "status"], + "required": [ + "file", + "patch", + "additions", + "deletions", + "status" + ], "additionalProperties": false }, "Session.Revert": { @@ -12580,7 +13069,9 @@ } } }, - "required": ["messageID"], + "required": [ + "messageID" + ], "additionalProperties": false }, "Session.Info": { @@ -12617,7 +13108,10 @@ "$ref": "#/components/schemas/Session.ForkBoundary" } }, - "required": ["sessionID", "boundary"], + "required": [ + "sessionID", + "boundary" + ], "additionalProperties": false }, "projectID": { @@ -12648,7 +13142,10 @@ "type": "number" } }, - "required": ["created", "updated"], + "required": [ + "created", + "updated" + ], "additionalProperties": false }, "title": { @@ -12664,7 +13161,14 @@ "$ref": "#/components/schemas/Session.Revert" } }, - "required": ["id", "projectID", "cost", "tokens", "time", "location"], + "required": [ + "id", + "projectID", + "cost", + "tokens", + "time", + "location" + ], "additionalProperties": false }, "SessionsResponse": { @@ -12703,7 +13207,10 @@ "additionalProperties": false } }, - "required": ["data", "cursor"], + "required": [ + "data", + "cursor" + ], "additionalProperties": false }, "InvalidCursorError": { @@ -12711,13 +13218,18 @@ "properties": { "_tag": { "type": "string", - "enum": ["InvalidCursorError"] + "enum": [ + "InvalidCursorError" + ] }, "message": { "type": "string" } }, - "required": ["_tag", "message"], + "required": [ + "_tag", + "message" + ], "additionalProperties": false }, "InvalidRequestError1": { @@ -12725,7 +13237,9 @@ "properties": { "_tag": { "type": "string", - "enum": ["InvalidRequestError"] + "enum": [ + "InvalidRequestError" + ] }, "message": { "type": "string" @@ -12751,7 +13265,10 @@ ] } }, - "required": ["_tag", "message"], + "required": [ + "_tag", + "message" + ], "additionalProperties": false }, "Session.Message.AgentSelected": { @@ -12775,12 +13292,16 @@ "type": "number" } }, - "required": ["created"], + "required": [ + "created" + ], "additionalProperties": false }, "type": { "type": "string", - "enum": ["agent-switched"] + "enum": [ + "agent-switched" + ] }, "agent": { "type": "string" @@ -12789,7 +13310,12 @@ "type": "string" } }, - "required": ["id", "time", "type", "agent"], + "required": [ + "id", + "time", + "type", + "agent" + ], "additionalProperties": false }, "Session.Message.ModelSelected": { @@ -12813,12 +13339,16 @@ "type": "number" } }, - "required": ["created"], + "required": [ + "created" + ], "additionalProperties": false }, "type": { "type": "string", - "enum": ["model-switched"] + "enum": [ + "model-switched" + ] }, "model": { "$ref": "#/components/schemas/Model.Ref" @@ -12827,7 +13357,12 @@ "$ref": "#/components/schemas/Model.Ref" } }, - "required": ["id", "time", "type", "model"], + "required": [ + "id", + "time", + "type", + "model" + ], "additionalProperties": false }, "Session.Message.LocationSwitched": { @@ -12851,12 +13386,16 @@ "type": "number" } }, - "required": ["created"], + "required": [ + "created" + ], "additionalProperties": false }, "type": { "type": "string", - "enum": ["location-switched"] + "enum": [ + "location-switched" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -12880,11 +13419,18 @@ "type": "string" } }, - "required": ["location"], + "required": [ + "location" + ], "additionalProperties": false } }, - "required": ["id", "time", "type", "location"], + "required": [ + "id", + "time", + "type", + "location" + ], "additionalProperties": false }, "Prompt.Base64": { @@ -12902,10 +13448,14 @@ "properties": { "type": { "type": "string", - "enum": ["inline"] + "enum": [ + "inline" + ] } }, - "required": ["type"], + "required": [ + "type" + ], "additionalProperties": false }, { @@ -12913,13 +13463,18 @@ "properties": { "type": { "type": "string", - "enum": ["uri"] + "enum": [ + "uri" + ] }, "uri": { "type": "string" } }, - "required": ["type", "uri"], + "required": [ + "type", + "uri" + ], "additionalProperties": false } ] @@ -12937,7 +13492,11 @@ "type": "string" } }, - "required": ["start", "end", "text"], + "required": [ + "start", + "end", + "text" + ], "additionalProperties": false }, "Prompt.FileAttachment": { @@ -12962,7 +13521,11 @@ "$ref": "#/components/schemas/Prompt.Mention" } }, - "required": ["data", "mime", "source"], + "required": [ + "data", + "mime", + "source" + ], "additionalProperties": false }, "Prompt.AgentAttachment": { @@ -12975,7 +13538,9 @@ "$ref": "#/components/schemas/Prompt.Mention" } }, - "required": ["name"], + "required": [ + "name" + ], "additionalProperties": false }, "Prompt.SkillAttachment": { @@ -12994,7 +13559,11 @@ "$ref": "#/components/schemas/Prompt.Mention" } }, - "required": ["id", "name", "text"], + "required": [ + "id", + "name", + "text" + ], "additionalProperties": false }, "Session.Message.User": { @@ -13018,7 +13587,9 @@ "type": "number" } }, - "required": ["created"], + "required": [ + "created" + ], "additionalProperties": false }, "text": { @@ -13044,10 +13615,17 @@ }, "type": { "type": "string", - "enum": ["user"] + "enum": [ + "user" + ] } }, - "required": ["id", "time", "text", "type"], + "required": [ + "id", + "time", + "text", + "type" + ], "additionalProperties": false }, "Session.Message.Synthetic": { @@ -13071,7 +13649,9 @@ "type": "number" } }, - "required": ["created"], + "required": [ + "created" + ], "additionalProperties": false }, "text": { @@ -13082,10 +13662,17 @@ }, "type": { "type": "string", - "enum": ["synthetic"] + "enum": [ + "synthetic" + ] } }, - "required": ["id", "time", "text", "type"], + "required": [ + "id", + "time", + "text", + "type" + ], "additionalProperties": false }, "Session.Message.System": { @@ -13109,12 +13696,16 @@ "type": "number" } }, - "required": ["created"], + "required": [ + "created" + ], "additionalProperties": false }, "type": { "type": "string", - "enum": ["system"] + "enum": [ + "system" + ] }, "text": { "type": "string" @@ -13123,7 +13714,12 @@ "type": "string" } }, - "required": ["id", "time", "type", "text"], + "required": [ + "id", + "time", + "type", + "text" + ], "additionalProperties": false }, "Session.Message.Skill": { @@ -13147,12 +13743,16 @@ "type": "number" } }, - "required": ["created"], + "required": [ + "created" + ], "additionalProperties": false }, "type": { "type": "string", - "enum": ["skill"] + "enum": [ + "skill" + ] }, "skill": { "type": "string" @@ -13164,7 +13764,14 @@ "type": "string" } }, - "required": ["id", "time", "type", "skill", "name", "text"], + "required": [ + "id", + "time", + "type", + "skill", + "name", + "text" + ], "additionalProperties": false }, "Session.Message.Shell": { @@ -13191,12 +13798,16 @@ "type": "number" } }, - "required": ["created"], + "required": [ + "created" + ], "additionalProperties": false }, "type": { "type": "string", - "enum": ["shell"] + "enum": [ + "shell" + ] }, "shellID": { "type": "string", @@ -13211,7 +13822,12 @@ }, "status": { "type": "string", - "enum": ["running", "exited", "timeout", "killed"] + "enum": [ + "running", + "exited", + "timeout", + "killed" + ] }, "exit": { "anyOf": [ @@ -13222,21 +13838,31 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, { "type": "string", - "enum": ["Infinity", "-Infinity", "NaN"] + "enum": [ + "Infinity", + "-Infinity", + "NaN" + ] } ] }, @@ -13266,11 +13892,23 @@ "type": "boolean" } }, - "required": ["output", "cursor", "size", "truncated"], + "required": [ + "output", + "cursor", + "size", + "truncated" + ], "additionalProperties": false } }, - "required": ["id", "time", "type", "shellID", "command", "status"], + "required": [ + "id", + "time", + "type", + "shellID", + "command", + "status" + ], "additionalProperties": false }, "Session.Message.ProviderState": { @@ -13281,7 +13919,9 @@ "properties": { "type": { "type": "string", - "enum": ["text"] + "enum": [ + "text" + ] }, "text": { "type": "string" @@ -13290,7 +13930,10 @@ "$ref": "#/components/schemas/Session.Message.ProviderState" } }, - "required": ["type", "text"], + "required": [ + "type", + "text" + ], "additionalProperties": false }, "Session.Message.Assistant.Reasoning": { @@ -13298,7 +13941,9 @@ "properties": { "type": { "type": "string", - "enum": ["reasoning"] + "enum": [ + "reasoning" + ] }, "text": { "type": "string" @@ -13316,11 +13961,16 @@ "type": "number" } }, - "required": ["created"], + "required": [ + "created" + ], "additionalProperties": false } }, - "required": ["type", "text"], + "required": [ + "type", + "text" + ], "additionalProperties": false }, "Session.Message.ToolState.Streaming": { @@ -13328,13 +13978,18 @@ "properties": { "status": { "type": "string", - "enum": ["streaming"] + "enum": [ + "streaming" + ] }, "input": { "type": "string" } }, - "required": ["status", "input"], + "required": [ + "status", + "input" + ], "additionalProperties": false }, "Session.Message.ToolState.Running": { @@ -13342,7 +13997,9 @@ "properties": { "status": { "type": "string", - "enum": ["running"] + "enum": [ + "running" + ] }, "input": { "type": "object" @@ -13351,7 +14008,11 @@ "type": "object" } }, - "required": ["status", "input", "metadata"], + "required": [ + "status", + "input", + "metadata" + ], "additionalProperties": false }, "Tool.TextContent": { @@ -13359,13 +14020,18 @@ "properties": { "type": { "type": "string", - "enum": ["text"] + "enum": [ + "text" + ] }, "text": { "type": "string" } }, - "required": ["type", "text"], + "required": [ + "type", + "text" + ], "additionalProperties": false }, "Tool.FileContent": { @@ -13373,7 +14039,9 @@ "properties": { "type": { "type": "string", - "enum": ["file"] + "enum": [ + "file" + ] }, "uri": { "type": "string" @@ -13392,7 +14060,11 @@ ] } }, - "required": ["type", "uri", "mime"], + "required": [ + "type", + "uri", + "mime" + ], "additionalProperties": false }, "Tool.Content": { @@ -13410,7 +14082,9 @@ "properties": { "status": { "type": "string", - "enum": ["completed"] + "enum": [ + "completed" + ] }, "input": { "type": "object" @@ -13431,7 +14105,11 @@ "type": "object" } }, - "required": ["status", "input", "content"], + "required": [ + "status", + "input", + "content" + ], "additionalProperties": false }, "Session.StructuredError": { @@ -13453,7 +14131,10 @@ ] } }, - "required": ["type", "message"], + "required": [ + "type", + "message" + ], "additionalProperties": false }, "Session.Message.ToolState.Error": { @@ -13461,7 +14142,9 @@ "properties": { "status": { "type": "string", - "enum": ["error"] + "enum": [ + "error" + ] }, "input": { "type": "object" @@ -13485,7 +14168,11 @@ "type": "object" } }, - "required": ["status", "input", "error"], + "required": [ + "status", + "input", + "error" + ], "additionalProperties": false }, "Session.Message.Assistant.Tool": { @@ -13493,7 +14180,9 @@ "properties": { "type": { "type": "string", - "enum": ["tool"] + "enum": [ + "tool" + ] }, "id": { "type": "string" @@ -13539,11 +14228,19 @@ "type": "number" } }, - "required": ["created"], + "required": [ + "created" + ], "additionalProperties": false } }, - "required": ["type", "id", "name", "state", "time"], + "required": [ + "type", + "id", + "name", + "state", + "time" + ], "additionalProperties": false }, "Session.Message.Assistant.Retry": { @@ -13564,7 +14261,11 @@ "$ref": "#/components/schemas/Session.StructuredError" } }, - "required": ["attempt", "at", "error"], + "required": [ + "attempt", + "at", + "error" + ], "additionalProperties": false }, "Session.Message.Assistant": { @@ -13591,12 +14292,16 @@ "type": "number" } }, - "required": ["created"], + "required": [ + "created" + ], "additionalProperties": false }, "type": { "type": "string", - "enum": ["assistant"] + "enum": [ + "assistant" + ] }, "agent": { "type": "string" @@ -13640,7 +14345,14 @@ }, "finish": { "type": "string", - "enum": ["stop", "length", "tool-calls", "content-filter", "error", "unknown"] + "enum": [ + "stop", + "length", + "tool-calls", + "content-filter", + "error", + "unknown" + ] }, "cost": { "$ref": "#/components/schemas/Money.USD" @@ -13655,7 +14367,14 @@ "$ref": "#/components/schemas/Session.Message.Assistant.Retry" } }, - "required": ["id", "time", "type", "agent", "model", "content"], + "required": [ + "id", + "time", + "type", + "agent", + "model", + "content" + ], "additionalProperties": false }, "Session.Message.Compaction.Running": { @@ -13663,7 +14382,9 @@ "properties": { "type": { "type": "string", - "enum": ["compaction"] + "enum": [ + "compaction" + ] }, "id": { "type": "string", @@ -13683,16 +14404,23 @@ "type": "number" } }, - "required": ["created"], + "required": [ + "created" + ], "additionalProperties": false }, "status": { "type": "string", - "enum": ["running"] + "enum": [ + "running" + ] }, "reason": { "type": "string", - "enum": ["auto", "manual"] + "enum": [ + "auto", + "manual" + ] }, "summary": { "type": "string" @@ -13701,7 +14429,15 @@ "type": "string" } }, - "required": ["type", "id", "time", "status", "reason", "summary", "recent"], + "required": [ + "type", + "id", + "time", + "status", + "reason", + "summary", + "recent" + ], "additionalProperties": false }, "Session.Message.Compaction.Completed": { @@ -13709,7 +14445,9 @@ "properties": { "type": { "type": "string", - "enum": ["compaction"] + "enum": [ + "compaction" + ] }, "id": { "type": "string", @@ -13729,16 +14467,23 @@ "type": "number" } }, - "required": ["created"], + "required": [ + "created" + ], "additionalProperties": false }, "status": { "type": "string", - "enum": ["completed"] + "enum": [ + "completed" + ] }, "reason": { "type": "string", - "enum": ["auto", "manual"] + "enum": [ + "auto", + "manual" + ] }, "summary": { "type": "string" @@ -13747,7 +14492,15 @@ "type": "string" } }, - "required": ["type", "id", "time", "status", "reason", "summary", "recent"], + "required": [ + "type", + "id", + "time", + "status", + "reason", + "summary", + "recent" + ], "additionalProperties": false }, "Session.Message.Compaction.Failed": { @@ -13755,7 +14508,9 @@ "properties": { "type": { "type": "string", - "enum": ["compaction"] + "enum": [ + "compaction" + ] }, "id": { "type": "string", @@ -13775,22 +14530,36 @@ "type": "number" } }, - "required": ["created"], + "required": [ + "created" + ], "additionalProperties": false }, "status": { "type": "string", - "enum": ["failed"] + "enum": [ + "failed" + ] }, "reason": { "type": "string", - "enum": ["auto", "manual"] + "enum": [ + "auto", + "manual" + ] }, "error": { "$ref": "#/components/schemas/Session.StructuredError" } }, - "required": ["type", "id", "time", "status", "reason", "error"], + "required": [ + "type", + "id", + "time", + "status", + "reason", + "error" + ], "additionalProperties": false }, "Session.Message.Compaction": { @@ -13845,7 +14614,9 @@ "properties": { "_tag": { "type": "string", - "enum": ["ConflictError"] + "enum": [ + "ConflictError" + ] }, "message": { "type": "string" @@ -13861,7 +14632,10 @@ ] } }, - "required": ["_tag", "message"], + "required": [ + "_tag", + "message" + ], "additionalProperties": false }, "SessionTransfer.Data": { @@ -13877,7 +14651,10 @@ } } }, - "required": ["info", "messages"], + "required": [ + "info", + "messages" + ], "additionalProperties": false }, "SessionNotFoundError": { @@ -13885,7 +14662,9 @@ "properties": { "_tag": { "type": "string", - "enum": ["SessionNotFoundError"] + "enum": [ + "SessionNotFoundError" + ] }, "sessionID": { "type": "string" @@ -13894,7 +14673,11 @@ "type": "string" } }, - "required": ["_tag", "sessionID", "message"], + "required": [ + "_tag", + "sessionID", + "message" + ], "additionalProperties": false }, "UnknownError": { @@ -13902,7 +14685,9 @@ "properties": { "_tag": { "type": "string", - "enum": ["UnknownError"] + "enum": [ + "UnknownError" + ] }, "message": { "type": "string" @@ -13918,7 +14703,10 @@ ] } }, - "required": ["_tag", "message"], + "required": [ + "_tag", + "message" + ], "additionalProperties": false }, "SessionActive": { @@ -13926,10 +14714,14 @@ "properties": { "type": { "type": "string", - "enum": ["running"] + "enum": [ + "running" + ] } }, - "required": ["type"], + "required": [ + "type" + ], "additionalProperties": false }, "Session.ForkRequestBoundary": { @@ -13939,7 +14731,9 @@ "properties": { "type": { "type": "string", - "enum": ["before"] + "enum": [ + "before" + ] }, "messageID": { "type": "string", @@ -13950,7 +14744,10 @@ ] } }, - "required": ["type", "messageID"], + "required": [ + "type", + "messageID" + ], "additionalProperties": false }, { @@ -13958,10 +14755,14 @@ "properties": { "type": { "type": "string", - "enum": ["through"] + "enum": [ + "through" + ] } }, - "required": ["type"], + "required": [ + "type" + ], "additionalProperties": false } ] @@ -13971,7 +14772,9 @@ "properties": { "_tag": { "type": "string", - "enum": ["MessageNotFoundError"] + "enum": [ + "MessageNotFoundError" + ] }, "sessionID": { "type": "string" @@ -13983,12 +14786,20 @@ "type": "string" } }, - "required": ["_tag", "sessionID", "messageID", "message"], + "required": [ + "_tag", + "sessionID", + "messageID", + "message" + ], "additionalProperties": false }, "Session.Inbox.Delivery": { "type": "string", - "enum": ["steer", "queue"] + "enum": [ + "steer", + "queue" + ] }, "PromptInput.FileAttachment": { "type": "object", @@ -14006,7 +14817,9 @@ "$ref": "#/components/schemas/Prompt.Mention" } }, - "required": ["uri"], + "required": [ + "uri" + ], "additionalProperties": false }, "PromptInput.SkillAttachment": { @@ -14019,7 +14832,9 @@ "$ref": "#/components/schemas/Prompt.Mention" } }, - "required": ["id"], + "required": [ + "id" + ], "additionalProperties": false }, "Session.Inbox.UserPayload": { @@ -14050,7 +14865,9 @@ "type": "object" } }, - "required": ["text"], + "required": [ + "text" + ], "additionalProperties": false }, "Session.Inbox.User": { @@ -14077,7 +14894,9 @@ }, "type": { "type": "string", - "enum": ["user"] + "enum": [ + "user" + ] }, "payload": { "$ref": "#/components/schemas/Session.Inbox.UserPayload" @@ -14086,7 +14905,14 @@ "$ref": "#/components/schemas/Session.Inbox.Delivery" } }, - "required": ["id", "sessionID", "timeCreated", "type", "payload", "delivery"], + "required": [ + "id", + "sessionID", + "timeCreated", + "type", + "payload", + "delivery" + ], "additionalProperties": false }, "CommandNotFoundError": { @@ -14094,7 +14920,9 @@ "properties": { "_tag": { "type": "string", - "enum": ["CommandNotFoundError"] + "enum": [ + "CommandNotFoundError" + ] }, "command": { "type": "string" @@ -14103,7 +14931,11 @@ "type": "string" } }, - "required": ["_tag", "command", "message"], + "required": [ + "_tag", + "command", + "message" + ], "additionalProperties": false }, "CommandEvaluationError": { @@ -14111,7 +14943,9 @@ "properties": { "_tag": { "type": "string", - "enum": ["CommandEvaluationError"] + "enum": [ + "CommandEvaluationError" + ] }, "command": { "type": "string" @@ -14120,7 +14954,11 @@ "type": "string" } }, - "required": ["_tag", "command", "message"], + "required": [ + "_tag", + "command", + "message" + ], "additionalProperties": false }, "SkillNotFoundError": { @@ -14128,7 +14966,9 @@ "properties": { "_tag": { "type": "string", - "enum": ["SkillNotFoundError"] + "enum": [ + "SkillNotFoundError" + ] }, "skill": { "type": "string" @@ -14137,7 +14977,11 @@ "type": "string" } }, - "required": ["_tag", "skill", "message"], + "required": [ + "_tag", + "skill", + "message" + ], "additionalProperties": false }, "Session.Inbox.SyntheticPayload": { @@ -14153,7 +14997,9 @@ "type": "object" } }, - "required": ["text"], + "required": [ + "text" + ], "additionalProperties": false }, "Session.Inbox.Synthetic": { @@ -14180,7 +15026,9 @@ }, "type": { "type": "string", - "enum": ["synthetic"] + "enum": [ + "synthetic" + ] }, "payload": { "$ref": "#/components/schemas/Session.Inbox.SyntheticPayload" @@ -14189,7 +15037,14 @@ "$ref": "#/components/schemas/Session.Inbox.Delivery" } }, - "required": ["id", "sessionID", "timeCreated", "type", "payload", "delivery"], + "required": [ + "id", + "sessionID", + "timeCreated", + "type", + "payload", + "delivery" + ], "additionalProperties": false }, "Session.Inbox.CompactionPayload": { @@ -14226,7 +15081,9 @@ }, "type": { "type": "string", - "enum": ["compaction"] + "enum": [ + "compaction" + ] }, "payload": { "$ref": "#/components/schemas/Session.Inbox.CompactionPayload" @@ -14235,7 +15092,14 @@ "$ref": "#/components/schemas/Session.Inbox.Delivery" } }, - "required": ["id", "sessionID", "timeCreated", "type", "payload", "delivery"], + "required": [ + "id", + "sessionID", + "timeCreated", + "type", + "payload", + "delivery" + ], "additionalProperties": false }, "ServiceUnavailableError": { @@ -14243,7 +15107,9 @@ "properties": { "_tag": { "type": "string", - "enum": ["ServiceUnavailableError"] + "enum": [ + "ServiceUnavailableError" + ] }, "message": { "type": "string" @@ -14259,7 +15125,10 @@ ] } }, - "required": ["_tag", "message"], + "required": [ + "_tag", + "message" + ], "additionalProperties": false }, "SessionBusyError": { @@ -14267,7 +15136,9 @@ "properties": { "_tag": { "type": "string", - "enum": ["SessionBusyError"] + "enum": [ + "SessionBusyError" + ] }, "sessionID": { "type": "string" @@ -14276,7 +15147,11 @@ "type": "string" } }, - "required": ["_tag", "sessionID", "message"], + "required": [ + "_tag", + "sessionID", + "message" + ], "additionalProperties": false }, "Session.Inbox.MovePayload": { @@ -14292,7 +15167,10 @@ "type": "string" } }, - "required": ["location", "projectID"], + "required": [ + "location", + "projectID" + ], "additionalProperties": false }, "Session.Inbox.Move": { @@ -14319,7 +15197,9 @@ }, "type": { "type": "string", - "enum": ["move"] + "enum": [ + "move" + ] }, "payload": { "$ref": "#/components/schemas/Session.Inbox.MovePayload" @@ -14328,7 +15208,14 @@ "$ref": "#/components/schemas/Session.Inbox.Delivery" } }, - "required": ["id", "sessionID", "timeCreated", "type", "payload", "delivery"], + "required": [ + "id", + "sessionID", + "timeCreated", + "type", + "payload", + "delivery" + ], "additionalProperties": false }, "Session.Inbox.Info": { @@ -14364,7 +15251,10 @@ }, "value": {} }, - "required": ["key", "value"], + "required": [ + "key", + "value" + ], "additionalProperties": false }, "InstructionEntryValueTooLargeError": { @@ -14372,7 +15262,9 @@ "properties": { "_tag": { "type": "string", - "enum": ["InstructionEntryValueTooLargeError"] + "enum": [ + "InstructionEntryValueTooLargeError" + ] }, "actualBytes": { "type": "integer" @@ -14384,7 +15276,12 @@ "type": "string" } }, - "required": ["_tag", "actualBytes", "maxBytes", "message"], + "required": [ + "_tag", + "actualBytes", + "maxBytes", + "message" + ], "additionalProperties": false }, "SessionGenerateResponse": { @@ -14397,11 +15294,15 @@ "type": "string" } }, - "required": ["text"], + "required": [ + "text" + ], "additionalProperties": false } }, - "required": ["data"], + "required": [ + "data" + ], "additionalProperties": false }, "session.created": { @@ -14423,7 +15324,9 @@ }, "type": { "type": "string", - "enum": ["session.created"] + "enum": [ + "session.created" + ] }, "durable": { "type": "object", @@ -14441,10 +15344,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -14494,11 +15403,23 @@ "type": "string" } }, - "required": ["sessionID", "projectID", "location", "slug", "version"], + "required": [ + "sessionID", + "projectID", + "location", + "slug", + "version" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "session.agent.selected": { @@ -14520,7 +15441,9 @@ }, "type": { "type": "string", - "enum": ["session.agent.selected"] + "enum": [ + "session.agent.selected" + ] }, "durable": { "type": "object", @@ -14538,10 +15461,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -14565,11 +15494,20 @@ "type": "string" } }, - "required": ["sessionID", "agent"], + "required": [ + "sessionID", + "agent" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "session.model.selected": { @@ -14591,7 +15529,9 @@ }, "type": { "type": "string", - "enum": ["session.model.selected"] + "enum": [ + "session.model.selected" + ] }, "durable": { "type": "object", @@ -14609,10 +15549,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -14636,11 +15582,20 @@ "$ref": "#/components/schemas/Model.Ref" } }, - "required": ["sessionID", "model"], + "required": [ + "sessionID", + "model" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "session.moved": { @@ -14662,7 +15617,9 @@ }, "type": { "type": "string", - "enum": ["session.moved"] + "enum": [ + "session.moved" + ] }, "durable": { "type": "object", @@ -14680,10 +15637,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -14710,11 +15673,21 @@ "type": "string" } }, - "required": ["sessionID", "location", "projectID"], + "required": [ + "sessionID", + "location", + "projectID" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "session.renamed": { @@ -14736,7 +15709,9 @@ }, "type": { "type": "string", - "enum": ["session.renamed"] + "enum": [ + "session.renamed" + ] }, "durable": { "type": "object", @@ -14754,10 +15729,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -14778,11 +15759,20 @@ "type": "string" } }, - "required": ["sessionID", "title"], + "required": [ + "sessionID", + "title" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "session.deleted": { @@ -14804,7 +15794,9 @@ }, "type": { "type": "string", - "enum": ["session.deleted"] + "enum": [ + "session.deleted" + ] }, "durable": { "type": "object", @@ -14822,10 +15814,16 @@ }, "version": { "type": "number", - "enum": [2] + "enum": [ + 2 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -14843,11 +15841,19 @@ ] } }, - "required": ["sessionID"], + "required": [ + "sessionID" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "session.forked": { @@ -14869,7 +15875,9 @@ }, "type": { "type": "string", - "enum": ["session.forked"] + "enum": [ + "session.forked" + ] }, "durable": { "type": "object", @@ -14887,10 +15895,16 @@ }, "version": { "type": "number", - "enum": [2] + "enum": [ + 2 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -14932,11 +15946,21 @@ } } }, - "required": ["sessionID", "parentID", "boundary"], + "required": [ + "sessionID", + "parentID", + "boundary" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "session.inbox.delivered": { @@ -14958,7 +15982,9 @@ }, "type": { "type": "string", - "enum": ["session.inbox.delivered"] + "enum": [ + "session.inbox.delivered" + ] }, "durable": { "type": "object", @@ -14976,10 +16002,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -15005,11 +16037,20 @@ ] } }, - "required": ["sessionID", "inboxID"], + "required": [ + "sessionID", + "inboxID" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "Session.Inbox.UserPayload1": { @@ -15040,7 +16081,9 @@ "type": "object" } }, - "required": ["text"], + "required": [ + "text" + ], "additionalProperties": false }, "Session.Inbox.SyntheticPayload1": { @@ -15056,7 +16099,9 @@ "type": "object" } }, - "required": ["text"], + "required": [ + "text" + ], "additionalProperties": false }, "Session.Inbox.Item": { @@ -15066,7 +16111,9 @@ "properties": { "type": { "type": "string", - "enum": ["user"] + "enum": [ + "user" + ] }, "payload": { "$ref": "#/components/schemas/Session.Inbox.UserPayload1" @@ -15075,7 +16122,11 @@ "$ref": "#/components/schemas/Session.Inbox.Delivery" } }, - "required": ["type", "payload", "delivery"], + "required": [ + "type", + "payload", + "delivery" + ], "additionalProperties": false }, { @@ -15083,7 +16134,9 @@ "properties": { "type": { "type": "string", - "enum": ["synthetic"] + "enum": [ + "synthetic" + ] }, "payload": { "$ref": "#/components/schemas/Session.Inbox.SyntheticPayload1" @@ -15092,7 +16145,11 @@ "$ref": "#/components/schemas/Session.Inbox.Delivery" } }, - "required": ["type", "payload", "delivery"], + "required": [ + "type", + "payload", + "delivery" + ], "additionalProperties": false }, { @@ -15100,7 +16157,9 @@ "properties": { "type": { "type": "string", - "enum": ["compaction"] + "enum": [ + "compaction" + ] }, "payload": { "$ref": "#/components/schemas/Session.Inbox.CompactionPayload" @@ -15109,7 +16168,11 @@ "$ref": "#/components/schemas/Session.Inbox.Delivery" } }, - "required": ["type", "payload", "delivery"], + "required": [ + "type", + "payload", + "delivery" + ], "additionalProperties": false }, { @@ -15117,7 +16180,9 @@ "properties": { "type": { "type": "string", - "enum": ["move"] + "enum": [ + "move" + ] }, "payload": { "$ref": "#/components/schemas/Session.Inbox.MovePayload" @@ -15126,7 +16191,11 @@ "$ref": "#/components/schemas/Session.Inbox.Delivery" } }, - "required": ["type", "payload", "delivery"], + "required": [ + "type", + "payload", + "delivery" + ], "additionalProperties": false } ] @@ -15150,7 +16219,9 @@ }, "type": { "type": "string", - "enum": ["session.inbox.enqueued"] + "enum": [ + "session.inbox.enqueued" + ] }, "durable": { "type": "object", @@ -15168,10 +16239,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -15200,11 +16277,21 @@ "$ref": "#/components/schemas/Session.Inbox.Item" } }, - "required": ["sessionID", "inboxID", "item"], + "required": [ + "sessionID", + "inboxID", + "item" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "session.inbox.cancelled": { @@ -15226,7 +16313,9 @@ }, "type": { "type": "string", - "enum": ["session.inbox.cancelled"] + "enum": [ + "session.inbox.cancelled" + ] }, "durable": { "type": "object", @@ -15244,10 +16333,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -15273,11 +16368,20 @@ ] } }, - "required": ["sessionID", "inboxID"], + "required": [ + "sessionID", + "inboxID" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "session.inbox.delivery.changed": { @@ -15299,7 +16403,9 @@ }, "type": { "type": "string", - "enum": ["session.inbox.delivery.changed"] + "enum": [ + "session.inbox.delivery.changed" + ] }, "durable": { "type": "object", @@ -15317,10 +16423,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -15349,11 +16461,21 @@ "$ref": "#/components/schemas/Session.Inbox.Delivery" } }, - "required": ["sessionID", "inboxID", "delivery"], + "required": [ + "sessionID", + "inboxID", + "delivery" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "session.execution.started": { @@ -15375,7 +16497,9 @@ }, "type": { "type": "string", - "enum": ["session.execution.started"] + "enum": [ + "session.execution.started" + ] }, "durable": { "type": "object", @@ -15393,10 +16517,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -15414,11 +16544,19 @@ ] } }, - "required": ["sessionID"], + "required": [ + "sessionID" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "session.execution.succeeded": { @@ -15440,7 +16578,9 @@ }, "type": { "type": "string", - "enum": ["session.execution.succeeded"] + "enum": [ + "session.execution.succeeded" + ] }, "durable": { "type": "object", @@ -15458,10 +16598,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -15479,11 +16625,19 @@ ] } }, - "required": ["sessionID"], + "required": [ + "sessionID" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "session.execution.failed": { @@ -15505,7 +16659,9 @@ }, "type": { "type": "string", - "enum": ["session.execution.failed"] + "enum": [ + "session.execution.failed" + ] }, "durable": { "type": "object", @@ -15523,10 +16679,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -15547,11 +16709,20 @@ "$ref": "#/components/schemas/Session.StructuredError" } }, - "required": ["sessionID", "error"], + "required": [ + "sessionID", + "error" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "session.execution.interrupted": { @@ -15573,7 +16744,9 @@ }, "type": { "type": "string", - "enum": ["session.execution.interrupted"] + "enum": [ + "session.execution.interrupted" + ] }, "durable": { "type": "object", @@ -15591,10 +16764,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -15613,14 +16792,27 @@ }, "reason": { "type": "string", - "enum": ["user", "shutdown", "superseded"] + "enum": [ + "user", + "shutdown", + "superseded" + ] } }, - "required": ["sessionID", "reason"], + "required": [ + "sessionID", + "reason" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "session.instructions.updated": { @@ -15642,7 +16834,9 @@ }, "type": { "type": "string", - "enum": ["session.instructions.updated"] + "enum": [ + "session.instructions.updated" + ] }, "durable": { "type": "object", @@ -15660,10 +16854,16 @@ }, "version": { "type": "number", - "enum": [2] + "enum": [ + 2 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -15694,7 +16894,9 @@ }, { "type": "string", - "enum": ["removed"] + "enum": [ + "removed" + ] } ] } @@ -15703,11 +16905,20 @@ "type": "string" } }, - "required": ["sessionID", "delta"], + "required": [ + "sessionID", + "delta" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "session.synthetic": { @@ -15729,7 +16940,9 @@ }, "type": { "type": "string", - "enum": ["session.synthetic"] + "enum": [ + "session.synthetic" + ] }, "durable": { "type": "object", @@ -15747,10 +16960,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -15777,11 +16996,20 @@ "type": "object" } }, - "required": ["sessionID", "text"], + "required": [ + "sessionID", + "text" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "session.skill.activated": { @@ -15803,7 +17031,9 @@ }, "type": { "type": "string", - "enum": ["session.skill.activated"] + "enum": [ + "session.skill.activated" + ] }, "durable": { "type": "object", @@ -15821,10 +17051,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -15851,11 +17087,22 @@ "type": "string" } }, - "required": ["sessionID", "id", "name", "text"], + "required": [ + "sessionID", + "id", + "name", + "text" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "Shell.Info": { @@ -15871,7 +17118,12 @@ }, "status": { "type": "string", - "enum": ["running", "exited", "timeout", "killed"] + "enum": [ + "running", + "exited", + "timeout", + "killed" + ] }, "command": { "type": "string" @@ -15909,11 +17161,22 @@ "type": "number" } }, - "required": ["started"], + "required": [ + "started" + ], "additionalProperties": false } }, - "required": ["id", "status", "command", "cwd", "shell", "file", "metadata", "time"], + "required": [ + "id", + "status", + "command", + "cwd", + "shell", + "file", + "metadata", + "time" + ], "additionalProperties": false }, "session.shell.started": { @@ -15935,7 +17198,9 @@ }, "type": { "type": "string", - "enum": ["session.shell.started"] + "enum": [ + "session.shell.started" + ] }, "durable": { "type": "object", @@ -15953,10 +17218,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -15977,11 +17248,20 @@ "$ref": "#/components/schemas/Shell.Info" } }, - "required": ["sessionID", "shell"], + "required": [ + "sessionID", + "shell" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "session.shell.ended": { @@ -16003,7 +17283,9 @@ }, "type": { "type": "string", - "enum": ["session.shell.ended"] + "enum": [ + "session.shell.ended" + ] }, "durable": { "type": "object", @@ -16021,10 +17303,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -16070,15 +17358,30 @@ "type": "boolean" } }, - "required": ["output", "cursor", "size", "truncated"], + "required": [ + "output", + "cursor", + "size", + "truncated" + ], "additionalProperties": false } }, - "required": ["sessionID", "shell", "output"], + "required": [ + "sessionID", + "shell", + "output" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "session.step.started": { @@ -16100,7 +17403,9 @@ }, "type": { "type": "string", - "enum": ["session.step.started"] + "enum": [ + "session.step.started" + ] }, "durable": { "type": "object", @@ -16118,10 +17423,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -16156,11 +17467,22 @@ "type": "string" } }, - "required": ["sessionID", "assistantMessageID", "agent", "model"], + "required": [ + "sessionID", + "assistantMessageID", + "agent", + "model" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "session.step.ended": { @@ -16182,7 +17504,9 @@ }, "type": { "type": "string", - "enum": ["session.step.ended"] + "enum": [ + "session.step.ended" + ] }, "durable": { "type": "object", @@ -16200,10 +17524,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -16230,7 +17560,14 @@ }, "finish": { "type": "string", - "enum": ["stop", "length", "tool-calls", "content-filter", "error", "unknown"] + "enum": [ + "stop", + "length", + "tool-calls", + "content-filter", + "error", + "unknown" + ] }, "cost": { "$ref": "#/components/schemas/Money.USD" @@ -16248,11 +17585,23 @@ } } }, - "required": ["sessionID", "assistantMessageID", "finish", "cost", "tokens"], + "required": [ + "sessionID", + "assistantMessageID", + "finish", + "cost", + "tokens" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "session.step.failed": { @@ -16274,7 +17623,9 @@ }, "type": { "type": "string", - "enum": ["session.step.failed"] + "enum": [ + "session.step.failed" + ] }, "durable": { "type": "object", @@ -16292,10 +17643,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -16339,11 +17696,21 @@ } } }, - "required": ["sessionID", "assistantMessageID", "error"], + "required": [ + "sessionID", + "assistantMessageID", + "error" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "session.text.started": { @@ -16365,7 +17732,9 @@ }, "type": { "type": "string", - "enum": ["session.text.started"] + "enum": [ + "session.text.started" + ] }, "durable": { "type": "object", @@ -16383,10 +17752,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -16420,11 +17795,21 @@ ] } }, - "required": ["sessionID", "assistantMessageID", "ordinal"], + "required": [ + "sessionID", + "assistantMessageID", + "ordinal" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "Session.Message.ProviderState4": { @@ -16449,7 +17834,9 @@ }, "type": { "type": "string", - "enum": ["session.text.ended"] + "enum": [ + "session.text.ended" + ] }, "durable": { "type": "object", @@ -16467,10 +17854,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -16510,11 +17903,22 @@ "$ref": "#/components/schemas/Session.Message.ProviderState4" } }, - "required": ["sessionID", "assistantMessageID", "ordinal", "text"], + "required": [ + "sessionID", + "assistantMessageID", + "ordinal", + "text" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "Session.Message.ProviderState5": { @@ -16539,7 +17943,9 @@ }, "type": { "type": "string", - "enum": ["session.reasoning.started"] + "enum": [ + "session.reasoning.started" + ] }, "durable": { "type": "object", @@ -16557,10 +17963,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -16597,11 +18009,21 @@ "$ref": "#/components/schemas/Session.Message.ProviderState5" } }, - "required": ["sessionID", "assistantMessageID", "ordinal"], + "required": [ + "sessionID", + "assistantMessageID", + "ordinal" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "Session.Message.ProviderState6": { @@ -16626,7 +18048,9 @@ }, "type": { "type": "string", - "enum": ["session.reasoning.ended"] + "enum": [ + "session.reasoning.ended" + ] }, "durable": { "type": "object", @@ -16644,10 +18068,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -16687,11 +18117,22 @@ "$ref": "#/components/schemas/Session.Message.ProviderState6" } }, - "required": ["sessionID", "assistantMessageID", "ordinal", "text"], + "required": [ + "sessionID", + "assistantMessageID", + "ordinal", + "text" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "session.tool.input.started": { @@ -16713,7 +18154,9 @@ }, "type": { "type": "string", - "enum": ["session.tool.input.started"] + "enum": [ + "session.tool.input.started" + ] }, "durable": { "type": "object", @@ -16731,10 +18174,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -16766,11 +18215,22 @@ "type": "string" } }, - "required": ["sessionID", "assistantMessageID", "id", "name"], + "required": [ + "sessionID", + "assistantMessageID", + "id", + "name" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "session.tool.input.ended": { @@ -16792,7 +18252,9 @@ }, "type": { "type": "string", - "enum": ["session.tool.input.ended"] + "enum": [ + "session.tool.input.ended" + ] }, "durable": { "type": "object", @@ -16810,10 +18272,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -16845,11 +18313,22 @@ "type": "string" } }, - "required": ["sessionID", "assistantMessageID", "id", "text"], + "required": [ + "sessionID", + "assistantMessageID", + "id", + "text" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "Session.Message.ProviderState7": { @@ -16874,7 +18353,9 @@ }, "type": { "type": "string", - "enum": ["session.tool.called"] + "enum": [ + "session.tool.called" + ] }, "durable": { "type": "object", @@ -16892,10 +18373,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -16933,11 +18420,23 @@ "$ref": "#/components/schemas/Session.Message.ProviderState7" } }, - "required": ["sessionID", "assistantMessageID", "id", "input", "executed"], + "required": [ + "sessionID", + "assistantMessageID", + "id", + "input", + "executed" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "Tool.FileContent1": { @@ -16945,7 +18444,9 @@ "properties": { "type": { "type": "string", - "enum": ["file"] + "enum": [ + "file" + ] }, "uri": { "type": "string" @@ -16964,7 +18465,11 @@ ] } }, - "required": ["type", "uri", "mime"], + "required": [ + "type", + "uri", + "mime" + ], "additionalProperties": false }, "Tool.Content1": { @@ -16999,7 +18504,9 @@ }, "type": { "type": "string", - "enum": ["session.tool.success"] + "enum": [ + "session.tool.success" + ] }, "durable": { "type": "object", @@ -17017,10 +18524,16 @@ }, "version": { "type": "number", - "enum": [2] + "enum": [ + 2 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -17070,11 +18583,23 @@ "$ref": "#/components/schemas/Session.Message.ProviderState8" } }, - "required": ["sessionID", "assistantMessageID", "id", "content", "executed"], + "required": [ + "sessionID", + "assistantMessageID", + "id", + "content", + "executed" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "Session.Message.ProviderState9": { @@ -17099,7 +18624,9 @@ }, "type": { "type": "string", - "enum": ["session.tool.failed"] + "enum": [ + "session.tool.failed" + ] }, "durable": { "type": "object", @@ -17117,10 +18644,16 @@ }, "version": { "type": "number", - "enum": [2] + "enum": [ + 2 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -17173,11 +18706,23 @@ "$ref": "#/components/schemas/Session.Message.ProviderState9" } }, - "required": ["sessionID", "assistantMessageID", "id", "error", "executed"], + "required": [ + "sessionID", + "assistantMessageID", + "id", + "error", + "executed" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "session.retry.scheduled": { @@ -17199,7 +18744,9 @@ }, "type": { "type": "string", - "enum": ["session.retry.scheduled"] + "enum": [ + "session.retry.scheduled" + ] }, "durable": { "type": "object", @@ -17217,10 +18764,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -17265,11 +18818,23 @@ "$ref": "#/components/schemas/Session.StructuredError" } }, - "required": ["sessionID", "assistantMessageID", "attempt", "at", "error"], + "required": [ + "sessionID", + "assistantMessageID", + "attempt", + "at", + "error" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "session.compaction.started": { @@ -17291,7 +18856,9 @@ }, "type": { "type": "string", - "enum": ["session.compaction.started"] + "enum": [ + "session.compaction.started" + ] }, "durable": { "type": "object", @@ -17309,10 +18876,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -17331,7 +18904,10 @@ }, "reason": { "type": "string", - "enum": ["auto", "manual"] + "enum": [ + "auto", + "manual" + ] }, "recent": { "type": "string" @@ -17345,11 +18921,21 @@ ] } }, - "required": ["sessionID", "reason", "recent"], + "required": [ + "sessionID", + "reason", + "recent" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "session.compaction.ended": { @@ -17371,7 +18957,9 @@ }, "type": { "type": "string", - "enum": ["session.compaction.ended"] + "enum": [ + "session.compaction.ended" + ] }, "durable": { "type": "object", @@ -17389,10 +18977,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -17411,7 +19005,10 @@ }, "reason": { "type": "string", - "enum": ["auto", "manual"] + "enum": [ + "auto", + "manual" + ] }, "text": { "type": "string" @@ -17420,11 +19017,22 @@ "type": "string" } }, - "required": ["sessionID", "reason", "text", "recent"], + "required": [ + "sessionID", + "reason", + "text", + "recent" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "session.compaction.failed": { @@ -17446,7 +19054,9 @@ }, "type": { "type": "string", - "enum": ["session.compaction.failed"] + "enum": [ + "session.compaction.failed" + ] }, "durable": { "type": "object", @@ -17464,10 +19074,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -17486,7 +19102,10 @@ }, "reason": { "type": "string", - "enum": ["auto", "manual"] + "enum": [ + "auto", + "manual" + ] }, "error": { "$ref": "#/components/schemas/Session.StructuredError" @@ -17500,11 +19119,21 @@ ] } }, - "required": ["sessionID", "reason", "error"], + "required": [ + "sessionID", + "reason", + "error" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "session.revert.staged": { @@ -17526,7 +19155,9 @@ }, "type": { "type": "string", - "enum": ["session.revert.staged"] + "enum": [ + "session.revert.staged" + ] }, "durable": { "type": "object", @@ -17544,10 +19175,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -17568,11 +19205,20 @@ "$ref": "#/components/schemas/Session.Revert" } }, - "required": ["sessionID", "revert"], + "required": [ + "sessionID", + "revert" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "session.revert.cleared": { @@ -17594,7 +19240,9 @@ }, "type": { "type": "string", - "enum": ["session.revert.cleared"] + "enum": [ + "session.revert.cleared" + ] }, "durable": { "type": "object", @@ -17612,10 +19260,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -17633,11 +19287,19 @@ ] } }, - "required": ["sessionID"], + "required": [ + "sessionID" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "session.revert.committed": { @@ -17659,7 +19321,9 @@ }, "type": { "type": "string", - "enum": ["session.revert.committed"] + "enum": [ + "session.revert.committed" + ] }, "durable": { "type": "object", @@ -17677,10 +19341,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -17706,11 +19376,20 @@ ] } }, - "required": ["sessionID", "to"], + "required": [ + "sessionID", + "to" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "session.usage.recorded": { @@ -17732,7 +19411,9 @@ }, "type": { "type": "string", - "enum": ["session.usage.recorded"] + "enum": [ + "session.usage.recorded" + ] }, "durable": { "type": "object", @@ -17750,10 +19431,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -17772,7 +19459,10 @@ }, "source": { "type": "string", - "enum": ["title", "compaction"] + "enum": [ + "title", + "compaction" + ] }, "cost": { "$ref": "#/components/schemas/Money.USD" @@ -17781,11 +19471,22 @@ "$ref": "#/components/schemas/TokenUsage.Info" } }, - "required": ["sessionID", "source", "cost", "tokens"], + "required": [ + "sessionID", + "source", + "cost", + "tokens" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "Session.Event.Durable": { @@ -17917,7 +19618,9 @@ "properties": { "type": { "type": "string", - "enum": ["log.synced"] + "enum": [ + "log.synced" + ] }, "aggregateID": { "type": "string" @@ -17931,7 +19634,10 @@ ] } }, - "required": ["type", "aggregateID"], + "required": [ + "type", + "aggregateID" + ], "additionalProperties": false, "description": "Marker emitted once when a log read reaches its captured watermark. The reader holds every event committed at or below seq." }, @@ -17988,14 +19694,21 @@ "additionalProperties": false } }, - "required": ["data", "cursor"], + "required": [ + "data", + "cursor" + ], "additionalProperties": false }, "Model.ReasoningField": { "anyOf": [ { "type": "string", - "enum": ["reasoning", "reasoning_content", "reasoning_text"] + "enum": [ + "reasoning", + "reasoning_content", + "reasoning_text" + ] }, { "type": "string" @@ -18004,7 +19717,10 @@ }, "Model.MaxTokensField": { "type": "string", - "enum": ["max_completion_tokens", "max_tokens"] + "enum": [ + "max_completion_tokens", + "max_tokens" + ] }, "Model.Compatibility": { "type": "object", @@ -18040,7 +19756,11 @@ } } }, - "required": ["tools", "input", "output"], + "required": [ + "tools", + "input", + "output" + ], "additionalProperties": false }, "Model.Variant": { @@ -18062,7 +19782,9 @@ "type": "object" } }, - "required": ["id"], + "required": [ + "id" + ], "additionalProperties": false }, "Money.USDPerMillionTokens": { @@ -18076,13 +19798,18 @@ "properties": { "type": { "type": "string", - "enum": ["context"] + "enum": [ + "context" + ] }, "size": { "type": "integer" } }, - "required": ["type", "size"], + "required": [ + "type", + "size" + ], "additionalProperties": false }, "input": { @@ -18101,11 +19828,18 @@ "$ref": "#/components/schemas/Money.USDPerMillionTokens" } }, - "required": ["read", "write"], + "required": [ + "read", + "write" + ], "additionalProperties": false } }, - "required": ["input", "output", "cache"], + "required": [ + "input", + "output", + "cache" + ], "additionalProperties": false }, "Model.Info": { @@ -18160,7 +19894,9 @@ "type": "number" } }, - "required": ["released"], + "required": [ + "released" + ], "additionalProperties": false }, "cost": { @@ -18171,7 +19907,12 @@ }, "status": { "type": "string", - "enum": ["alpha", "beta", "deprecated", "active"] + "enum": [ + "alpha", + "beta", + "deprecated", + "active" + ] }, "enabled": { "type": "boolean" @@ -18189,7 +19930,10 @@ "type": "integer" } }, - "required": ["context", "output"], + "required": [ + "context", + "output" + ], "additionalProperties": false } }, @@ -18218,11 +19962,15 @@ "type": "string" } }, - "required": ["text"], + "required": [ + "text" + ], "additionalProperties": false } }, - "required": ["data"], + "required": [ + "data" + ], "additionalProperties": false }, "Provider.Info": { @@ -18256,7 +20004,11 @@ "type": "object" } }, - "required": ["id", "name", "package"], + "required": [ + "id", + "name", + "package" + ], "additionalProperties": false }, "ProviderNotFoundError": { @@ -18264,7 +20016,9 @@ "properties": { "_tag": { "type": "string", - "enum": ["ProviderNotFoundError"] + "enum": [ + "ProviderNotFoundError" + ] }, "providerID": { "type": "string" @@ -18273,7 +20027,11 @@ "type": "string" } }, - "required": ["_tag", "providerID", "message"], + "required": [ + "_tag", + "providerID", + "message" + ], "additionalProperties": false }, "Form.When": { @@ -18284,7 +20042,10 @@ }, "op": { "type": "string", - "enum": ["eq", "neq"] + "enum": [ + "eq", + "neq" + ] }, "value": { "anyOf": [ @@ -18300,21 +20061,31 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, { "type": "string", - "enum": ["Infinity", "-Infinity", "NaN"] + "enum": [ + "Infinity", + "-Infinity", + "NaN" + ] } ] }, @@ -18324,7 +20095,11 @@ ] } }, - "required": ["key", "op", "value"], + "required": [ + "key", + "op", + "value" + ], "additionalProperties": false }, "Form.Option": { @@ -18340,7 +20115,10 @@ "type": "string" } }, - "required": ["value", "label"], + "required": [ + "value", + "label" + ], "additionalProperties": false }, "Form.StringField": { @@ -18366,11 +20144,18 @@ }, "type": { "type": "string", - "enum": ["string"] + "enum": [ + "string" + ] }, "format": { "type": "string", - "enum": ["email", "uri", "date", "date-time"] + "enum": [ + "email", + "uri", + "date", + "date-time" + ] }, "minLength": { "type": "integer", @@ -18407,7 +20192,10 @@ "type": "boolean" } }, - "required": ["key", "type"], + "required": [ + "key", + "type" + ], "additionalProperties": false }, "Form.NumberField": { @@ -18433,7 +20221,9 @@ }, "type": { "type": "string", - "enum": ["number"] + "enum": [ + "number" + ] }, "minimum": { "anyOf": [ @@ -18444,21 +20234,31 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, { "type": "string", - "enum": ["Infinity", "-Infinity", "NaN"] + "enum": [ + "Infinity", + "-Infinity", + "NaN" + ] } ] }, @@ -18471,21 +20271,31 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, { "type": "string", - "enum": ["Infinity", "-Infinity", "NaN"] + "enum": [ + "Infinity", + "-Infinity", + "NaN" + ] } ] }, @@ -18498,26 +20308,39 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, { "type": "string", - "enum": ["Infinity", "-Infinity", "NaN"] + "enum": [ + "Infinity", + "-Infinity", + "NaN" + ] } ] } }, - "required": ["key", "type"], + "required": [ + "key", + "type" + ], "additionalProperties": false }, "Form.IntegerField": { @@ -18543,7 +20366,9 @@ }, "type": { "type": "string", - "enum": ["integer"] + "enum": [ + "integer" + ] }, "minimum": { "anyOf": [ @@ -18554,21 +20379,31 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, { "type": "string", - "enum": ["Infinity", "-Infinity", "NaN"] + "enum": [ + "Infinity", + "-Infinity", + "NaN" + ] } ] }, @@ -18581,21 +20416,31 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, { "type": "string", - "enum": ["Infinity", "-Infinity", "NaN"] + "enum": [ + "Infinity", + "-Infinity", + "NaN" + ] } ] }, @@ -18608,26 +20453,39 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, { "type": "string", - "enum": ["Infinity", "-Infinity", "NaN"] + "enum": [ + "Infinity", + "-Infinity", + "NaN" + ] } ] } }, - "required": ["key", "type"], + "required": [ + "key", + "type" + ], "additionalProperties": false }, "Form.BooleanField": { @@ -18653,13 +20511,18 @@ }, "type": { "type": "string", - "enum": ["boolean"] + "enum": [ + "boolean" + ] }, "default": { "type": "boolean" } }, - "required": ["key", "type"], + "required": [ + "key", + "type" + ], "additionalProperties": false }, "Form.MultiselectField": { @@ -18685,7 +20548,9 @@ }, "type": { "type": "string", - "enum": ["multiselect"] + "enum": [ + "multiselect" + ] }, "options": { "type": "array", @@ -18719,7 +20584,11 @@ } } }, - "required": ["key", "type", "options"], + "required": [ + "key", + "type", + "options" + ], "additionalProperties": false }, "Form.ExternalField": { @@ -18730,7 +20599,9 @@ }, "type": { "type": "string", - "enum": ["external"] + "enum": [ + "external" + ] }, "url": { "type": "string" @@ -18742,7 +20613,11 @@ "type": "string" } }, - "required": ["key", "type", "url"], + "required": [ + "key", + "type", + "url" + ], "additionalProperties": false }, "Form.Field": { @@ -18787,7 +20662,9 @@ }, "type": { "type": "string", - "enum": ["oauth"] + "enum": [ + "oauth" + ] }, "label": { "type": "string" @@ -18796,7 +20673,11 @@ "$ref": "#/components/schemas/Form.Fields" } }, - "required": ["id", "type", "label"], + "required": [ + "id", + "type", + "label" + ], "additionalProperties": false }, "Integration.CommandMethod": { @@ -18807,7 +20688,9 @@ }, "type": { "type": "string", - "enum": ["command"] + "enum": [ + "command" + ] }, "label": { "type": "string" @@ -18819,7 +20702,12 @@ } } }, - "required": ["id", "type", "label", "command"], + "required": [ + "id", + "type", + "label", + "command" + ], "additionalProperties": false }, "Integration.KeyMethod": { @@ -18827,7 +20715,9 @@ "properties": { "type": { "type": "string", - "enum": ["key"] + "enum": [ + "key" + ] }, "label": { "type": "string" @@ -18836,7 +20726,9 @@ "$ref": "#/components/schemas/Form.Fields" } }, - "required": ["type"], + "required": [ + "type" + ], "additionalProperties": false }, "Integration.EnvMethod": { @@ -18844,7 +20736,9 @@ "properties": { "type": { "type": "string", - "enum": ["env"] + "enum": [ + "env" + ] }, "names": { "type": "array", @@ -18853,7 +20747,10 @@ } } }, - "required": ["type", "names"], + "required": [ + "type", + "names" + ], "additionalProperties": false }, "Integration.Method": { @@ -18877,7 +20774,9 @@ "properties": { "type": { "type": "string", - "enum": ["credential"] + "enum": [ + "credential" + ] }, "id": { "type": "string" @@ -18886,7 +20785,11 @@ "type": "string" } }, - "required": ["type", "id", "label"], + "required": [ + "type", + "id", + "label" + ], "additionalProperties": false }, "Connection.EnvInfo": { @@ -18894,13 +20797,18 @@ "properties": { "type": { "type": "string", - "enum": ["env"] + "enum": [ + "env" + ] }, "name": { "type": "string" } }, - "required": ["type", "name"], + "required": [ + "type", + "name" + ], "additionalProperties": false }, "Connection.Info": { @@ -18935,7 +20843,12 @@ } } }, - "required": ["id", "name", "methods", "connections"], + "required": [ + "id", + "name", + "methods", + "connections" + ], "additionalProperties": false }, "Form.Value": { @@ -18952,21 +20865,31 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, { "type": "string", - "enum": ["Infinity", "-Infinity", "NaN"] + "enum": [ + "Infinity", + "-Infinity", + "NaN" + ] } ] }, @@ -19001,7 +20924,10 @@ }, "mode": { "type": "string", - "enum": ["auto", "code"] + "enum": [ + "auto", + "code" + ] }, "time": { "type": "object", @@ -19015,21 +20941,31 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, { "type": "string", - "enum": ["Infinity", "-Infinity", "NaN"] + "enum": [ + "Infinity", + "-Infinity", + "NaN" + ] } ] }, @@ -19042,30 +20978,49 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, { "type": "string", - "enum": ["Infinity", "-Infinity", "NaN"] + "enum": [ + "Infinity", + "-Infinity", + "NaN" + ] } ] } }, - "required": ["created", "expires"], + "required": [ + "created", + "expires" + ], "additionalProperties": false } }, - "required": ["attemptID", "url", "instructions", "mode", "time"], + "required": [ + "attemptID", + "url", + "instructions", + "mode", + "time" + ], "additionalProperties": false }, "Integration.AttemptStatus": { @@ -19075,7 +21030,9 @@ "properties": { "status": { "type": "string", - "enum": ["pending"] + "enum": [ + "pending" + ] }, "time": { "type": "object", @@ -19089,21 +21046,31 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, { "type": "string", - "enum": ["Infinity", "-Infinity", "NaN"] + "enum": [ + "Infinity", + "-Infinity", + "NaN" + ] } ] }, @@ -19116,30 +21083,46 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, { "type": "string", - "enum": ["Infinity", "-Infinity", "NaN"] + "enum": [ + "Infinity", + "-Infinity", + "NaN" + ] } ] } }, - "required": ["created", "expires"], + "required": [ + "created", + "expires" + ], "additionalProperties": false } }, - "required": ["status", "time"], + "required": [ + "status", + "time" + ], "additionalProperties": false }, { @@ -19147,7 +21130,9 @@ "properties": { "status": { "type": "string", - "enum": ["complete"] + "enum": [ + "complete" + ] }, "time": { "type": "object", @@ -19161,21 +21146,31 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, { "type": "string", - "enum": ["Infinity", "-Infinity", "NaN"] + "enum": [ + "Infinity", + "-Infinity", + "NaN" + ] } ] }, @@ -19188,30 +21183,46 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, { "type": "string", - "enum": ["Infinity", "-Infinity", "NaN"] + "enum": [ + "Infinity", + "-Infinity", + "NaN" + ] } ] } }, - "required": ["created", "expires"], + "required": [ + "created", + "expires" + ], "additionalProperties": false } }, - "required": ["status", "time"], + "required": [ + "status", + "time" + ], "additionalProperties": false }, { @@ -19219,7 +21230,9 @@ "properties": { "status": { "type": "string", - "enum": ["failed"] + "enum": [ + "failed" + ] }, "message": { "type": "string" @@ -19236,21 +21249,31 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, { "type": "string", - "enum": ["Infinity", "-Infinity", "NaN"] + "enum": [ + "Infinity", + "-Infinity", + "NaN" + ] } ] }, @@ -19263,30 +21286,47 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, { "type": "string", - "enum": ["Infinity", "-Infinity", "NaN"] + "enum": [ + "Infinity", + "-Infinity", + "NaN" + ] } ] } }, - "required": ["created", "expires"], + "required": [ + "created", + "expires" + ], "additionalProperties": false } }, - "required": ["status", "message", "time"], + "required": [ + "status", + "message", + "time" + ], "additionalProperties": false }, { @@ -19294,7 +21334,9 @@ "properties": { "status": { "type": "string", - "enum": ["expired"] + "enum": [ + "expired" + ] }, "time": { "type": "object", @@ -19308,21 +21350,31 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, { "type": "string", - "enum": ["Infinity", "-Infinity", "NaN"] + "enum": [ + "Infinity", + "-Infinity", + "NaN" + ] } ] }, @@ -19335,30 +21387,46 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, { "type": "string", - "enum": ["Infinity", "-Infinity", "NaN"] + "enum": [ + "Infinity", + "-Infinity", + "NaN" + ] } ] } }, - "required": ["created", "expires"], + "required": [ + "created", + "expires" + ], "additionalProperties": false } }, - "required": ["status", "time"], + "required": [ + "status", + "time" + ], "additionalProperties": false } ] @@ -19381,21 +21449,31 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, { "type": "string", - "enum": ["Infinity", "-Infinity", "NaN"] + "enum": [ + "Infinity", + "-Infinity", + "NaN" + ] } ] }, @@ -19408,30 +21486,46 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, { "type": "string", - "enum": ["Infinity", "-Infinity", "NaN"] + "enum": [ + "Infinity", + "-Infinity", + "NaN" + ] } ] } }, - "required": ["created", "expires"], + "required": [ + "created", + "expires" + ], "additionalProperties": false } }, - "required": ["attemptID", "time"], + "required": [ + "attemptID", + "time" + ], "additionalProperties": false }, "Integration.CommandAttemptStatus": { @@ -19441,7 +21535,9 @@ "properties": { "status": { "type": "string", - "enum": ["pending"] + "enum": [ + "pending" + ] }, "message": { "type": "string" @@ -19458,21 +21554,31 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, { "type": "string", - "enum": ["Infinity", "-Infinity", "NaN"] + "enum": [ + "Infinity", + "-Infinity", + "NaN" + ] } ] }, @@ -19485,30 +21591,46 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, { "type": "string", - "enum": ["Infinity", "-Infinity", "NaN"] + "enum": [ + "Infinity", + "-Infinity", + "NaN" + ] } ] } }, - "required": ["created", "expires"], + "required": [ + "created", + "expires" + ], "additionalProperties": false } }, - "required": ["status", "time"], + "required": [ + "status", + "time" + ], "additionalProperties": false }, { @@ -19516,7 +21638,9 @@ "properties": { "status": { "type": "string", - "enum": ["complete"] + "enum": [ + "complete" + ] }, "time": { "type": "object", @@ -19530,21 +21654,31 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, { "type": "string", - "enum": ["Infinity", "-Infinity", "NaN"] + "enum": [ + "Infinity", + "-Infinity", + "NaN" + ] } ] }, @@ -19557,30 +21691,46 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, { "type": "string", - "enum": ["Infinity", "-Infinity", "NaN"] + "enum": [ + "Infinity", + "-Infinity", + "NaN" + ] } ] } }, - "required": ["created", "expires"], + "required": [ + "created", + "expires" + ], "additionalProperties": false } }, - "required": ["status", "time"], + "required": [ + "status", + "time" + ], "additionalProperties": false }, { @@ -19588,7 +21738,9 @@ "properties": { "status": { "type": "string", - "enum": ["failed"] + "enum": [ + "failed" + ] }, "message": { "type": "string" @@ -19605,21 +21757,31 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, { "type": "string", - "enum": ["Infinity", "-Infinity", "NaN"] + "enum": [ + "Infinity", + "-Infinity", + "NaN" + ] } ] }, @@ -19632,30 +21794,47 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, { "type": "string", - "enum": ["Infinity", "-Infinity", "NaN"] + "enum": [ + "Infinity", + "-Infinity", + "NaN" + ] } ] } }, - "required": ["created", "expires"], + "required": [ + "created", + "expires" + ], "additionalProperties": false } }, - "required": ["status", "message", "time"], + "required": [ + "status", + "message", + "time" + ], "additionalProperties": false }, { @@ -19663,7 +21842,9 @@ "properties": { "status": { "type": "string", - "enum": ["expired"] + "enum": [ + "expired" + ] }, "time": { "type": "object", @@ -19677,21 +21858,31 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, { "type": "string", - "enum": ["Infinity", "-Infinity", "NaN"] + "enum": [ + "Infinity", + "-Infinity", + "NaN" + ] } ] }, @@ -19704,30 +21895,46 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, { "type": "string", - "enum": ["Infinity", "-Infinity", "NaN"] + "enum": [ + "Infinity", + "-Infinity", + "NaN" + ] } ] } }, - "required": ["created", "expires"], + "required": [ + "created", + "expires" + ], "additionalProperties": false } }, - "required": ["status", "time"], + "required": [ + "status", + "time" + ], "additionalProperties": false } ] @@ -19737,10 +21944,14 @@ "properties": { "status": { "type": "string", - "enum": ["connected"] + "enum": [ + "connected" + ] } }, - "required": ["status"], + "required": [ + "status" + ], "additionalProperties": false }, "Mcp.Status.Pending": { @@ -19748,10 +21959,14 @@ "properties": { "status": { "type": "string", - "enum": ["pending"] + "enum": [ + "pending" + ] } }, - "required": ["status"], + "required": [ + "status" + ], "additionalProperties": false }, "Mcp.Status.Disabled": { @@ -19759,10 +21974,14 @@ "properties": { "status": { "type": "string", - "enum": ["disabled"] + "enum": [ + "disabled" + ] } }, - "required": ["status"], + "required": [ + "status" + ], "additionalProperties": false }, "Mcp.Status.Failed": { @@ -19770,13 +21989,18 @@ "properties": { "status": { "type": "string", - "enum": ["failed"] + "enum": [ + "failed" + ] }, "error": { "type": "string" } }, - "required": ["status", "error"], + "required": [ + "status", + "error" + ], "additionalProperties": false }, "Mcp.Status.NeedsAuth": { @@ -19784,10 +22008,14 @@ "properties": { "status": { "type": "string", - "enum": ["needs_auth"] + "enum": [ + "needs_auth" + ] } }, - "required": ["status"], + "required": [ + "status" + ], "additionalProperties": false }, "Mcp.Server": { @@ -19819,7 +22047,10 @@ "type": "string" } }, - "required": ["name", "status"], + "required": [ + "name", + "status" + ], "additionalProperties": false }, "Mcp.LocalConfig": { @@ -19827,7 +22058,9 @@ "properties": { "type": { "type": "string", - "enum": ["local"] + "enum": [ + "local" + ] }, "command": { "type": "array", @@ -19881,7 +22114,10 @@ "additionalProperties": false } }, - "required": ["type", "command"], + "required": [ + "type", + "command" + ], "additionalProperties": false }, "Mcp.OAuthConfig": { @@ -19916,7 +22152,9 @@ "properties": { "type": { "type": "string", - "enum": ["remote"] + "enum": [ + "remote" + ] }, "url": { "type": "string" @@ -19934,7 +22172,9 @@ }, { "type": "boolean", - "enum": [false] + "enum": [ + false + ] } ] }, @@ -19975,7 +22215,10 @@ "additionalProperties": false } }, - "required": ["type", "url"], + "required": [ + "type", + "url" + ], "additionalProperties": false }, "McpServerNotFoundError": { @@ -19983,7 +22226,9 @@ "properties": { "_tag": { "type": "string", - "enum": ["McpServerNotFoundError"] + "enum": [ + "McpServerNotFoundError" + ] }, "server": { "type": "string" @@ -19992,7 +22237,11 @@ "type": "string" } }, - "required": ["_tag", "server", "message"], + "required": [ + "_tag", + "server", + "message" + ], "additionalProperties": false }, "Mcp.Resource": { @@ -20014,7 +22263,11 @@ "type": "string" } }, - "required": ["server", "name", "uri"], + "required": [ + "server", + "name", + "uri" + ], "additionalProperties": false }, "Mcp.ResourceTemplate": { @@ -20036,7 +22289,11 @@ "type": "string" } }, - "required": ["server", "name", "uriTemplate"], + "required": [ + "server", + "name", + "uriTemplate" + ], "additionalProperties": false }, "Mcp.ResourceCatalog": { @@ -20055,12 +22312,18 @@ } } }, - "required": ["resources", "templates"], + "required": [ + "resources", + "templates" + ], "additionalProperties": false }, "Project.Vcs": { "type": "string", - "enum": ["git", "hg"] + "enum": [ + "git", + "hg" + ] }, "Project.Icon": { "type": "object", @@ -20115,7 +22378,10 @@ ] } }, - "required": ["created", "updated"], + "required": [ + "created", + "updated" + ], "additionalProperties": false }, "Project": { @@ -20149,7 +22415,12 @@ } } }, - "required": ["id", "canonical", "time", "sandboxes"], + "required": [ + "id", + "canonical", + "time", + "sandboxes" + ], "additionalProperties": false }, "Project.Current": { @@ -20165,28 +22436,13 @@ "type": "string" } }, - "required": ["id", "directory", "canonical"], + "required": [ + "id", + "directory", + "canonical" + ], "additionalProperties": false }, - "Project.Directory": { - "type": "object", - "properties": { - "directory": { - "type": "string" - }, - "strategy": { - "type": "string" - } - }, - "required": ["directory"], - "additionalProperties": false - }, - "Project.Directories": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Project.Directory" - } - }, "Form.Metadata": { "type": "object" }, @@ -20214,7 +22470,12 @@ "$ref": "#/components/schemas/Form.Fields" } }, - "required": ["id", "sessionID", "title", "fields"], + "required": [ + "id", + "sessionID", + "title", + "fields" + ], "additionalProperties": false }, "Form.CreatePayload": { @@ -20245,7 +22506,10 @@ "$ref": "#/components/schemas/Form.Fields" } }, - "required": ["title", "fields"], + "required": [ + "title", + "fields" + ], "additionalProperties": false }, "FormNotFoundError": { @@ -20253,7 +22517,9 @@ "properties": { "_tag": { "type": "string", - "enum": ["FormNotFoundError"] + "enum": [ + "FormNotFoundError" + ] }, "id": { "type": "string" @@ -20262,7 +22528,11 @@ "type": "string" } }, - "required": ["_tag", "id", "message"], + "required": [ + "_tag", + "id", + "message" + ], "additionalProperties": false }, "Form.State": { @@ -20272,10 +22542,14 @@ "properties": { "status": { "type": "string", - "enum": ["pending"] + "enum": [ + "pending" + ] } }, - "required": ["status"], + "required": [ + "status" + ], "additionalProperties": false }, { @@ -20283,13 +22557,18 @@ "properties": { "status": { "type": "string", - "enum": ["answered"] + "enum": [ + "answered" + ] }, "answer": { "$ref": "#/components/schemas/Form.Answer" } }, - "required": ["status", "answer"], + "required": [ + "status", + "answer" + ], "additionalProperties": false }, { @@ -20297,10 +22576,14 @@ "properties": { "status": { "type": "string", - "enum": ["cancelled"] + "enum": [ + "cancelled" + ] } }, - "required": ["status"], + "required": [ + "status" + ], "additionalProperties": false } ] @@ -20312,7 +22595,9 @@ "$ref": "#/components/schemas/Form.Answer" } }, - "required": ["answer"], + "required": [ + "answer" + ], "additionalProperties": false }, "FormAlreadySettledError": { @@ -20320,7 +22605,9 @@ "properties": { "_tag": { "type": "string", - "enum": ["FormAlreadySettledError"] + "enum": [ + "FormAlreadySettledError" + ] }, "id": { "type": "string" @@ -20329,7 +22616,11 @@ "type": "string" } }, - "required": ["_tag", "id", "message"], + "required": [ + "_tag", + "id", + "message" + ], "additionalProperties": false }, "FormInvalidAnswerError": { @@ -20337,7 +22628,9 @@ "properties": { "_tag": { "type": "string", - "enum": ["FormInvalidAnswerError"] + "enum": [ + "FormInvalidAnswerError" + ] }, "id": { "type": "string" @@ -20346,7 +22639,11 @@ "type": "string" } }, - "required": ["_tag", "id", "message"], + "required": [ + "_tag", + "id", + "message" + ], "additionalProperties": false }, "Permission.Source": { @@ -20356,7 +22653,9 @@ "properties": { "type": { "type": "string", - "enum": ["tool"] + "enum": [ + "tool" + ] }, "messageID": { "type": "string" @@ -20365,7 +22664,11 @@ "type": "string" } }, - "required": ["type", "messageID", "id"], + "required": [ + "type", + "messageID", + "id" + ], "additionalProperties": false } ] @@ -20414,7 +22717,12 @@ "$ref": "#/components/schemas/Permission.Source" } }, - "required": ["id", "sessionID", "action", "resources"], + "required": [ + "id", + "sessionID", + "action", + "resources" + ], "additionalProperties": false }, "PermissionSaved.Info": { @@ -20433,7 +22741,12 @@ "type": "string" } }, - "required": ["id", "projectID", "action", "resource"], + "required": [ + "id", + "projectID", + "action", + "resource" + ], "additionalProperties": false }, "PermissionNotFoundError": { @@ -20441,7 +22754,9 @@ "properties": { "_tag": { "type": "string", - "enum": ["PermissionNotFoundError"] + "enum": [ + "PermissionNotFoundError" + ] }, "requestID": { "type": "string" @@ -20450,12 +22765,20 @@ "type": "string" } }, - "required": ["_tag", "requestID", "message"], + "required": [ + "_tag", + "requestID", + "message" + ], "additionalProperties": false }, "Permission.Reply": { "type": "string", - "enum": ["once", "always", "reject"] + "enum": [ + "once", + "always", + "reject" + ] }, "FileSystem.Entry": { "type": "object", @@ -20465,10 +22788,16 @@ }, "type": { "type": "string", - "enum": ["file", "directory"] + "enum": [ + "file", + "directory" + ] } }, - "required": ["path", "type"], + "required": [ + "path", + "type" + ], "additionalProperties": false }, "Command.Info": { @@ -20493,7 +22822,10 @@ "type": "boolean" } }, - "required": ["name", "template"], + "required": [ + "name", + "template" + ], "additionalProperties": false }, "Skill.Info": { @@ -20521,7 +22853,12 @@ "type": "string" } }, - "required": ["id", "name", "location", "content"], + "required": [ + "id", + "name", + "location", + "content" + ], "additionalProperties": false }, "models-dev.refreshed": { @@ -20543,7 +22880,9 @@ }, "type": { "type": "string", - "enum": ["models-dev.refreshed"] + "enum": [ + "models-dev.refreshed" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -20559,7 +22898,12 @@ ] } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "integration.updated": { @@ -20581,7 +22925,9 @@ }, "type": { "type": "string", - "enum": ["integration.updated"] + "enum": [ + "integration.updated" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -20597,7 +22943,12 @@ ] } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "integration.connection.updated": { @@ -20619,7 +22970,9 @@ }, "type": { "type": "string", - "enum": ["integration.connection.updated"] + "enum": [ + "integration.connection.updated" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -20631,11 +22984,18 @@ "type": "string" } }, - "required": ["integrationID"], + "required": [ + "integrationID" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "catalog.updated": { @@ -20657,7 +23017,9 @@ }, "type": { "type": "string", - "enum": ["catalog.updated"] + "enum": [ + "catalog.updated" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -20673,7 +23035,12 @@ ] } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "agent.updated": { @@ -20695,7 +23062,9 @@ }, "type": { "type": "string", - "enum": ["agent.updated"] + "enum": [ + "agent.updated" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -20711,7 +23080,12 @@ ] } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "session.usage.updated": { @@ -20733,7 +23107,9 @@ }, "type": { "type": "string", - "enum": ["session.usage.updated"] + "enum": [ + "session.usage.updated" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -20756,11 +23132,20 @@ "$ref": "#/components/schemas/TokenUsage.Info" } }, - "required": ["sessionID", "cost", "tokens"], + "required": [ + "sessionID", + "cost", + "tokens" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "session.text.delta": { @@ -20782,7 +23167,9 @@ }, "type": { "type": "string", - "enum": ["session.text.delta"] + "enum": [ + "session.text.delta" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -20818,11 +23205,21 @@ "type": "string" } }, - "required": ["sessionID", "assistantMessageID", "ordinal", "delta"], + "required": [ + "sessionID", + "assistantMessageID", + "ordinal", + "delta" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "session.reasoning.delta": { @@ -20844,7 +23241,9 @@ }, "type": { "type": "string", - "enum": ["session.reasoning.delta"] + "enum": [ + "session.reasoning.delta" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -20880,11 +23279,21 @@ "type": "string" } }, - "required": ["sessionID", "assistantMessageID", "ordinal", "delta"], + "required": [ + "sessionID", + "assistantMessageID", + "ordinal", + "delta" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "session.tool.input.delta": { @@ -20906,7 +23315,9 @@ }, "type": { "type": "string", - "enum": ["session.tool.input.delta"] + "enum": [ + "session.tool.input.delta" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -20937,11 +23348,21 @@ "type": "string" } }, - "required": ["sessionID", "assistantMessageID", "id", "delta"], + "required": [ + "sessionID", + "assistantMessageID", + "id", + "delta" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "session.tool.progress": { @@ -20963,7 +23384,9 @@ }, "type": { "type": "string", - "enum": ["session.tool.progress"] + "enum": [ + "session.tool.progress" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -20994,11 +23417,21 @@ "type": "object" } }, - "required": ["sessionID", "assistantMessageID", "id", "metadata"], + "required": [ + "sessionID", + "assistantMessageID", + "id", + "metadata" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "session.compaction.delta": { @@ -21020,7 +23453,9 @@ }, "type": { "type": "string", - "enum": ["session.compaction.delta"] + "enum": [ + "session.compaction.delta" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -21040,11 +23475,19 @@ "type": "string" } }, - "required": ["sessionID", "text"], + "required": [ + "sessionID", + "text" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "filesystem.changed": { @@ -21066,7 +23509,9 @@ }, "type": { "type": "string", - "enum": ["filesystem.changed"] + "enum": [ + "filesystem.changed" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -21079,14 +23524,26 @@ }, "event": { "type": "string", - "enum": ["add", "change", "unlink"] + "enum": [ + "add", + "change", + "unlink" + ] } }, - "required": ["file", "event"], + "required": [ + "file", + "event" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "reference.updated": { @@ -21108,7 +23565,9 @@ }, "type": { "type": "string", - "enum": ["reference.updated"] + "enum": [ + "reference.updated" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -21124,7 +23583,12 @@ ] } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "permission.asked": { @@ -21146,7 +23610,9 @@ }, "type": { "type": "string", - "enum": ["permission.asked"] + "enum": [ + "permission.asked" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -21195,11 +23661,21 @@ "$ref": "#/components/schemas/Permission.Source" } }, - "required": ["id", "sessionID", "action", "resources"], + "required": [ + "id", + "sessionID", + "action", + "resources" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "permission.replied": { @@ -21221,7 +23697,9 @@ }, "type": { "type": "string", - "enum": ["permission.replied"] + "enum": [ + "permission.replied" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -21249,11 +23727,20 @@ "$ref": "#/components/schemas/Permission.Reply" } }, - "required": ["sessionID", "requestID", "reply"], + "required": [ + "sessionID", + "requestID", + "reply" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "plugin.added": { @@ -21275,7 +23762,9 @@ }, "type": { "type": "string", - "enum": ["plugin.added"] + "enum": [ + "plugin.added" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -21287,11 +23776,18 @@ "type": "string" } }, - "required": ["id"], + "required": [ + "id" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "plugin.updated": { @@ -21313,7 +23809,9 @@ }, "type": { "type": "string", - "enum": ["plugin.updated"] + "enum": [ + "plugin.updated" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -21329,10 +23827,15 @@ ] } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, - "project.directories.updated": { + "worktree.updated": { "type": "object", "properties": { "id": { @@ -21351,7 +23854,9 @@ }, "type": { "type": "string", - "enum": ["project.directories.updated"] + "enum": [ + "worktree.updated" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -21363,14 +23868,21 @@ "type": "string" } }, - "required": ["projectID"], + "required": [ + "projectID" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, - "project.directory.resolved": { + "worktree.resolved": { "type": "object", "properties": { "id": { @@ -21389,7 +23901,9 @@ }, "type": { "type": "string", - "enum": ["project.directory.resolved"] + "enum": [ + "worktree.resolved" + ] }, "durable": { "type": "object", @@ -21407,10 +23921,16 @@ }, "version": { "type": "number", - "enum": [1] + "enum": [ + 1 + ] } }, - "required": ["aggregateID", "seq", "version"], + "required": [ + "aggregateID", + "seq", + "version" + ], "additionalProperties": false }, "location": { @@ -21429,11 +23949,21 @@ "type": "string" } }, - "required": ["projectID", "directory", "previous"], + "required": [ + "projectID", + "directory", + "previous" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "durable", "data"], + "required": [ + "id", + "created", + "type", + "durable", + "data" + ], "additionalProperties": false }, "command.updated": { @@ -21455,7 +23985,9 @@ }, "type": { "type": "string", - "enum": ["command.updated"] + "enum": [ + "command.updated" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -21471,7 +24003,12 @@ ] } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "config.updated": { @@ -21493,7 +24030,9 @@ }, "type": { "type": "string", - "enum": ["config.updated"] + "enum": [ + "config.updated" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -21509,7 +24048,12 @@ ] } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "skill.updated": { @@ -21531,7 +24075,9 @@ }, "type": { "type": "string", - "enum": ["skill.updated"] + "enum": [ + "skill.updated" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -21547,7 +24093,12 @@ ] } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "Pty": { @@ -21578,7 +24129,10 @@ }, "status": { "type": "string", - "enum": ["running", "exited"] + "enum": [ + "running", + "exited" + ] }, "pid": { "type": "integer", @@ -21597,7 +24151,15 @@ ] } }, - "required": ["id", "title", "command", "args", "cwd", "status", "pid"], + "required": [ + "id", + "title", + "command", + "args", + "cwd", + "status", + "pid" + ], "additionalProperties": false }, "pty.created": { @@ -21619,7 +24181,9 @@ }, "type": { "type": "string", - "enum": ["pty.created"] + "enum": [ + "pty.created" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -21631,11 +24195,18 @@ "$ref": "#/components/schemas/Pty" } }, - "required": ["info"], + "required": [ + "info" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "pty.updated": { @@ -21657,7 +24228,9 @@ }, "type": { "type": "string", - "enum": ["pty.updated"] + "enum": [ + "pty.updated" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -21669,11 +24242,18 @@ "$ref": "#/components/schemas/Pty" } }, - "required": ["info"], + "required": [ + "info" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "pty.exited": { @@ -21695,7 +24275,9 @@ }, "type": { "type": "string", - "enum": ["pty.exited"] + "enum": [ + "pty.exited" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -21720,11 +24302,19 @@ ] } }, - "required": ["id", "exitCode"], + "required": [ + "id", + "exitCode" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "pty.deleted": { @@ -21746,7 +24336,9 @@ }, "type": { "type": "string", - "enum": ["pty.deleted"] + "enum": [ + "pty.deleted" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -21763,11 +24355,18 @@ ] } }, - "required": ["id"], + "required": [ + "id" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "shell.created": { @@ -21789,7 +24388,9 @@ }, "type": { "type": "string", - "enum": ["shell.created"] + "enum": [ + "shell.created" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -21801,11 +24402,18 @@ "$ref": "#/components/schemas/Shell.Info" } }, - "required": ["info"], + "required": [ + "info" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "shell.exited": { @@ -21827,7 +24435,9 @@ }, "type": { "type": "string", - "enum": ["shell.exited"] + "enum": [ + "shell.exited" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -21848,14 +24458,27 @@ }, "status": { "type": "string", - "enum": ["running", "exited", "timeout", "killed"] + "enum": [ + "running", + "exited", + "timeout", + "killed" + ] } }, - "required": ["id", "status"], + "required": [ + "id", + "status" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "shell.deleted": { @@ -21877,7 +24500,9 @@ }, "type": { "type": "string", - "enum": ["shell.deleted"] + "enum": [ + "shell.deleted" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -21894,11 +24519,18 @@ ] } }, - "required": ["id"], + "required": [ + "id" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "Question.Option": { @@ -21913,7 +24545,10 @@ "description": "Explanation of choice" } }, - "required": ["label", "description"], + "required": [ + "label", + "description" + ], "additionalProperties": false }, "Question.Info": { @@ -21941,7 +24576,11 @@ "type": "boolean" } }, - "required": ["question", "header", "options"], + "required": [ + "question", + "header", + "options" + ], "additionalProperties": false }, "Question.Tool": { @@ -21954,7 +24593,10 @@ "type": "string" } }, - "required": ["messageID", "id"], + "required": [ + "messageID", + "id" + ], "additionalProperties": false }, "question.asked": { @@ -21976,7 +24618,9 @@ }, "type": { "type": "string", - "enum": ["question.asked"] + "enum": [ + "question.asked" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -22011,11 +24655,20 @@ "$ref": "#/components/schemas/Question.Tool" } }, - "required": ["id", "sessionID", "questions"], + "required": [ + "id", + "sessionID", + "questions" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "Question.Answer": { @@ -22043,7 +24696,9 @@ }, "type": { "type": "string", - "enum": ["question.replied"] + "enum": [ + "question.replied" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -22074,11 +24729,20 @@ } } }, - "required": ["sessionID", "requestID", "answers"], + "required": [ + "sessionID", + "requestID", + "answers" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "question.rejected": { @@ -22100,7 +24764,9 @@ }, "type": { "type": "string", - "enum": ["question.rejected"] + "enum": [ + "question.rejected" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -22125,11 +24791,19 @@ ] } }, - "required": ["sessionID", "requestID"], + "required": [ + "sessionID", + "requestID" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "Form.Metadata1": { @@ -22143,7 +24817,10 @@ }, "op": { "type": "string", - "enum": ["eq", "neq"] + "enum": [ + "eq", + "neq" + ] }, "value": { "anyOf": [ @@ -22157,15 +24834,21 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, @@ -22175,7 +24858,11 @@ ] } }, - "required": ["key", "op", "value"], + "required": [ + "key", + "op", + "value" + ], "additionalProperties": false }, "Form.StringField1": { @@ -22201,11 +24888,18 @@ }, "type": { "type": "string", - "enum": ["string"] + "enum": [ + "string" + ] }, "format": { "type": "string", - "enum": ["email", "uri", "date", "date-time"] + "enum": [ + "email", + "uri", + "date", + "date-time" + ] }, "minLength": { "type": "integer", @@ -22242,7 +24936,10 @@ "type": "boolean" } }, - "required": ["key", "type"], + "required": [ + "key", + "type" + ], "additionalProperties": false }, "Form.NumberField1": { @@ -22268,7 +24965,9 @@ }, "type": { "type": "string", - "enum": ["number"] + "enum": [ + "number" + ] }, "minimum": { "anyOf": [ @@ -22277,15 +24976,21 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, @@ -22296,15 +25001,21 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, @@ -22315,20 +25026,29 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] } }, - "required": ["key", "type"], + "required": [ + "key", + "type" + ], "additionalProperties": false }, "Form.IntegerField1": { @@ -22354,7 +25074,9 @@ }, "type": { "type": "string", - "enum": ["integer"] + "enum": [ + "integer" + ] }, "minimum": { "anyOf": [ @@ -22363,15 +25085,21 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, @@ -22382,15 +25110,21 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, @@ -22401,20 +25135,29 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] } }, - "required": ["key", "type"], + "required": [ + "key", + "type" + ], "additionalProperties": false }, "Form.BooleanField1": { @@ -22440,13 +25183,18 @@ }, "type": { "type": "string", - "enum": ["boolean"] + "enum": [ + "boolean" + ] }, "default": { "type": "boolean" } }, - "required": ["key", "type"], + "required": [ + "key", + "type" + ], "additionalProperties": false }, "Form.MultiselectField1": { @@ -22472,7 +25220,9 @@ }, "type": { "type": "string", - "enum": ["multiselect"] + "enum": [ + "multiselect" + ] }, "options": { "type": "array", @@ -22506,7 +25256,11 @@ } } }, - "required": ["key", "type", "options"], + "required": [ + "key", + "type", + "options" + ], "additionalProperties": false }, "Form.Field1": { @@ -22567,7 +25321,12 @@ "$ref": "#/components/schemas/Form.Fields3" } }, - "required": ["id", "sessionID", "title", "fields"], + "required": [ + "id", + "sessionID", + "title", + "fields" + ], "additionalProperties": false }, "form.created": { @@ -22589,7 +25348,9 @@ }, "type": { "type": "string", - "enum": ["form.created"] + "enum": [ + "form.created" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -22601,11 +25362,18 @@ "$ref": "#/components/schemas/Form.Info1" } }, - "required": ["form"], + "required": [ + "form" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "Form.Value1": { @@ -22620,15 +25388,21 @@ }, { "type": "string", - "enum": ["NaN"] + "enum": [ + "NaN" + ] }, { "type": "string", - "enum": ["Infinity"] + "enum": [ + "Infinity" + ] }, { "type": "string", - "enum": ["-Infinity"] + "enum": [ + "-Infinity" + ] } ] }, @@ -22668,7 +25442,9 @@ }, "type": { "type": "string", - "enum": ["form.replied"] + "enum": [ + "form.replied" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -22691,11 +25467,20 @@ "$ref": "#/components/schemas/Form.Answer1" } }, - "required": ["id", "sessionID", "answer"], + "required": [ + "id", + "sessionID", + "answer" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "form.cancelled": { @@ -22717,7 +25502,9 @@ }, "type": { "type": "string", - "enum": ["form.cancelled"] + "enum": [ + "form.cancelled" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -22737,11 +25524,19 @@ "type": "string" } }, - "required": ["id", "sessionID"], + "required": [ + "id", + "sessionID" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "websearch.updated": { @@ -22763,7 +25558,9 @@ }, "type": { "type": "string", - "enum": ["websearch.updated"] + "enum": [ + "websearch.updated" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -22779,7 +25576,12 @@ ] } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "SessionStatus": { @@ -22789,10 +25591,14 @@ "properties": { "type": { "type": "string", - "enum": ["idle"] + "enum": [ + "idle" + ] } }, - "required": ["type"], + "required": [ + "type" + ], "additionalProperties": false }, { @@ -22800,7 +25606,9 @@ "properties": { "type": { "type": "string", - "enum": ["retry"] + "enum": [ + "retry" + ] }, "attempt": { "type": "integer", @@ -22835,7 +25643,13 @@ "type": "string" } }, - "required": ["reason", "provider", "title", "message", "label"], + "required": [ + "reason", + "provider", + "title", + "message", + "label" + ], "additionalProperties": false }, "next": { @@ -22847,7 +25661,12 @@ ] } }, - "required": ["type", "attempt", "message", "next"], + "required": [ + "type", + "attempt", + "message", + "next" + ], "additionalProperties": false }, { @@ -22855,10 +25674,14 @@ "properties": { "type": { "type": "string", - "enum": ["busy"] + "enum": [ + "busy" + ] } }, - "required": ["type"], + "required": [ + "type" + ], "additionalProperties": false } ] @@ -22882,7 +25705,9 @@ }, "type": { "type": "string", - "enum": ["session.status"] + "enum": [ + "session.status" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -22902,11 +25727,19 @@ "$ref": "#/components/schemas/SessionStatus" } }, - "required": ["sessionID", "status"], + "required": [ + "sessionID", + "status" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "session.idle": { @@ -22928,7 +25761,9 @@ }, "type": { "type": "string", - "enum": ["session.idle"] + "enum": [ + "session.idle" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -22945,11 +25780,18 @@ ] } }, - "required": ["sessionID"], + "required": [ + "sessionID" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "tui.prompt.append": { @@ -22971,7 +25813,9 @@ }, "type": { "type": "string", - "enum": ["tui.prompt.append"] + "enum": [ + "tui.prompt.append" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -22983,11 +25827,18 @@ "type": "string" } }, - "required": ["text"], + "required": [ + "text" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "tui.command.execute": { @@ -23009,7 +25860,9 @@ }, "type": { "type": "string", - "enum": ["tui.command.execute"] + "enum": [ + "tui.command.execute" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -23047,11 +25900,18 @@ ] } }, - "required": ["command"], + "required": [ + "command" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "tui.toast.show": { @@ -23073,7 +25933,9 @@ }, "type": { "type": "string", - "enum": ["tui.toast.show"] + "enum": [ + "tui.toast.show" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -23089,7 +25951,12 @@ }, "variant": { "type": "string", - "enum": ["info", "success", "warning", "error"] + "enum": [ + "info", + "success", + "warning", + "error" + ] }, "duration": { "anyOf": [ @@ -23107,11 +25974,19 @@ ] } }, - "required": ["message", "variant"], + "required": [ + "message", + "variant" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "tui.session.select": { @@ -23133,7 +26008,9 @@ }, "type": { "type": "string", - "enum": ["tui.session.select"] + "enum": [ + "tui.session.select" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -23151,11 +26028,18 @@ ] } }, - "required": ["sessionID"], + "required": [ + "sessionID" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "installation.updated": { @@ -23177,7 +26061,9 @@ }, "type": { "type": "string", - "enum": ["installation.updated"] + "enum": [ + "installation.updated" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -23189,11 +26075,18 @@ "type": "string" } }, - "required": ["version"], + "required": [ + "version" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "installation.update-available": { @@ -23215,7 +26108,9 @@ }, "type": { "type": "string", - "enum": ["installation.update-available"] + "enum": [ + "installation.update-available" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -23227,11 +26122,18 @@ "type": "string" } }, - "required": ["version"], + "required": [ + "version" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "vcs.branch.updated": { @@ -23253,7 +26155,9 @@ }, "type": { "type": "string", - "enum": ["vcs.branch.updated"] + "enum": [ + "vcs.branch.updated" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -23268,7 +26172,12 @@ "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "mcp.status.changed": { @@ -23290,7 +26199,9 @@ }, "type": { "type": "string", - "enum": ["mcp.status.changed"] + "enum": [ + "mcp.status.changed" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -23302,11 +26213,18 @@ "type": "string" } }, - "required": ["server"], + "required": [ + "server" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "mcp.resources.changed": { @@ -23328,7 +26246,9 @@ }, "type": { "type": "string", - "enum": ["mcp.resources.changed"] + "enum": [ + "mcp.resources.changed" + ] }, "location": { "$ref": "#/components/schemas/Location.Ref" @@ -23340,11 +26260,18 @@ "type": "string" } }, - "required": ["server"], + "required": [ + "server" + ], "additionalProperties": false } }, - "required": ["id", "created", "type", "data"], + "required": [ + "id", + "created", + "type", + "data" + ], "additionalProperties": false }, "V2Event.server.connected": { @@ -23380,7 +26307,9 @@ }, "type": { "type": "string", - "enum": ["server.connected"] + "enum": [ + "server.connected" + ] }, "data": { "anyOf": [ @@ -23393,7 +26322,11 @@ ] } }, - "required": ["id", "type", "data"], + "required": [ + "id", + "type", + "data" + ], "additionalProperties": false }, "V2Event": { @@ -23567,10 +26500,10 @@ "$ref": "#/components/schemas/plugin.updated" }, { - "$ref": "#/components/schemas/project.directories.updated" + "$ref": "#/components/schemas/worktree.updated" }, { - "$ref": "#/components/schemas/project.directory.resolved" + "$ref": "#/components/schemas/worktree.resolved" }, { "$ref": "#/components/schemas/command.updated" @@ -23673,7 +26606,9 @@ "properties": { "_tag": { "type": "string", - "enum": ["PtyNotFoundError"] + "enum": [ + "PtyNotFoundError" + ] }, "ptyID": { "type": "string" @@ -23682,7 +26617,11 @@ "type": "string" } }, - "required": ["_tag", "ptyID", "message"], + "required": [ + "_tag", + "ptyID", + "message" + ], "additionalProperties": false }, "PtyTicket.ConnectToken": { @@ -23700,7 +26639,10 @@ ] } }, - "required": ["ticket", "expires_in"], + "required": [ + "ticket", + "expires_in" + ], "additionalProperties": false }, "ForbiddenError": { @@ -23708,13 +26650,18 @@ "properties": { "_tag": { "type": "string", - "enum": ["ForbiddenError"] + "enum": [ + "ForbiddenError" + ] }, "message": { "type": "string" } }, - "required": ["_tag", "message"], + "required": [ + "_tag", + "message" + ], "additionalProperties": false }, "Shell.Info1": { @@ -23730,7 +26677,12 @@ }, "status": { "type": "string", - "enum": ["running", "exited", "timeout", "killed"] + "enum": [ + "running", + "exited", + "timeout", + "killed" + ] }, "command": { "type": "string" @@ -23768,11 +26720,22 @@ "type": "number" } }, - "required": ["started"], + "required": [ + "started" + ], "additionalProperties": false } }, - "required": ["id", "status", "command", "cwd", "shell", "file", "metadata", "time"], + "required": [ + "id", + "status", + "command", + "cwd", + "shell", + "file", + "metadata", + "time" + ], "additionalProperties": false }, "ShellNotFoundError": { @@ -23780,7 +26743,9 @@ "properties": { "_tag": { "type": "string", - "enum": ["ShellNotFoundError"] + "enum": [ + "ShellNotFoundError" + ] }, "id": { "type": "string" @@ -23789,7 +26754,11 @@ "type": "string" } }, - "required": ["_tag", "id", "message"], + "required": [ + "_tag", + "id", + "message" + ], "additionalProperties": false }, "Question.Request": { @@ -23822,7 +26791,11 @@ "$ref": "#/components/schemas/Question.Tool" } }, - "required": ["id", "sessionID", "questions"], + "required": [ + "id", + "sessionID", + "questions" + ], "additionalProperties": false }, "Question.Reply": { @@ -23836,7 +26809,9 @@ "description": "User answers in order of questions (each answer is an array of selected labels)" } }, - "required": ["answers"], + "required": [ + "answers" + ], "additionalProperties": false }, "QuestionNotFoundError": { @@ -23844,7 +26819,9 @@ "properties": { "_tag": { "type": "string", - "enum": ["QuestionNotFoundError"] + "enum": [ + "QuestionNotFoundError" + ] }, "requestID": { "type": "string" @@ -23853,7 +26830,11 @@ "type": "string" } }, - "required": ["_tag", "requestID", "message"], + "required": [ + "_tag", + "requestID", + "message" + ], "additionalProperties": false }, "Reference.LocalSource": { @@ -23861,7 +26842,9 @@ "properties": { "type": { "type": "string", - "enum": ["local"] + "enum": [ + "local" + ] }, "path": { "type": "string" @@ -23873,7 +26856,10 @@ "type": "boolean" } }, - "required": ["type", "path"], + "required": [ + "type", + "path" + ], "additionalProperties": false }, "Reference.GitSource": { @@ -23881,7 +26867,9 @@ "properties": { "type": { "type": "string", - "enum": ["git"] + "enum": [ + "git" + ] }, "repository": { "type": "string" @@ -23896,7 +26884,10 @@ "type": "boolean" } }, - "required": ["type", "repository"], + "required": [ + "type", + "repository" + ], "additionalProperties": false }, "Reference.Source": { @@ -23928,25 +26919,54 @@ "$ref": "#/components/schemas/Reference.Source" } }, - "required": ["name", "path", "source"], + "required": [ + "name", + "path", + "source" + ], "additionalProperties": false }, - "ProjectCopy.Copy": { + "Worktree.Directory": { + "type": "object", + "properties": { + "directory": { + "type": "string" + }, + "strategy": { + "type": "string" + } + }, + "required": [ + "directory" + ], + "additionalProperties": false + }, + "Worktree.List": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Worktree.Directory" + } + }, + "Worktree.Info": { "type": "object", "properties": { "directory": { "type": "string" } }, - "required": ["directory"], + "required": [ + "directory" + ], "additionalProperties": false }, - "ProjectCopyError": { + "WorktreeError": { "type": "object", "properties": { "name": { "type": "string", - "enum": ["ProjectCopyError"] + "enum": [ + "WorktreeError" + ] }, "data": { "type": "object", @@ -23965,11 +26985,16 @@ ] } }, - "required": ["message"], + "required": [ + "message" + ], "additionalProperties": false } }, - "required": ["name", "data"], + "required": [ + "name", + "data" + ], "additionalProperties": false }, "Vcs.Branch": { @@ -23991,7 +27016,9 @@ "$ref": "#/components/schemas/Vcs.Branch" } }, - "required": ["branch"], + "required": [ + "branch" + ], "additionalProperties": false }, "Vcs.FileStatus": { @@ -24018,15 +27045,27 @@ }, "status": { "type": "string", - "enum": ["added", "deleted", "modified"] + "enum": [ + "added", + "deleted", + "modified" + ] } }, - "required": ["file", "additions", "deletions", "status"], + "required": [ + "file", + "additions", + "deletions", + "status" + ], "additionalProperties": false }, "Vcs.Mode": { "type": "string", - "enum": ["working", "branch"] + "enum": [ + "working", + "branch" + ] }, "WebSearch.Provider": { "type": "object", @@ -24038,7 +27077,10 @@ "type": "string" } }, - "required": ["id", "name"], + "required": [ + "id", + "name" + ], "additionalProperties": false }, "WebSearch.Result": { @@ -24063,7 +27105,10 @@ "additionalProperties": false } }, - "required": ["url", "time"], + "required": [ + "url", + "time" + ], "additionalProperties": false }, "WebSearch.Response": { @@ -24079,7 +27124,10 @@ } } }, - "required": ["providerID", "results"], + "required": [ + "providerID", + "results" + ], "additionalProperties": false }, "Config.Agent": { @@ -24123,7 +27171,10 @@ ] } }, - "required": ["providerID", "model"], + "required": [ + "providerID", + "model" + ], "additionalProperties": false } ] @@ -24151,7 +27202,11 @@ }, "mode": { "type": "string", - "enum": ["subagent", "primary", "all"] + "enum": [ + "subagent", + "primary", + "all" + ] }, "hidden": { "type": "boolean" @@ -24236,7 +27291,9 @@ "type": "object" } }, - "required": ["command"], + "required": [ + "command" + ], "additionalProperties": false }, "Config.Command": { @@ -24289,7 +27346,10 @@ ] } }, - "required": ["providerID", "model"], + "required": [ + "providerID", + "model" + ], "additionalProperties": false } ] @@ -24298,7 +27358,9 @@ "type": "boolean" } }, - "required": ["template"], + "required": [ + "template" + ], "additionalProperties": false }, "Config.Reference.Git": { @@ -24317,7 +27379,9 @@ "type": "boolean" } }, - "required": ["repository"], + "required": [ + "repository" + ], "additionalProperties": false }, "Config.Reference.Local": { @@ -24333,7 +27397,9 @@ "type": "boolean" } }, - "required": ["path"], + "required": [ + "path" + ], "additionalProperties": false }, "Config.Plugin.Entry": { @@ -24346,7 +27412,9 @@ "type": "object" } }, - "required": ["package"], + "required": [ + "package" + ], "additionalProperties": false }, "Config.Warming": { @@ -24372,13 +27440,18 @@ "properties": { "type": { "type": "string", - "enum": ["context"] + "enum": [ + "context" + ] }, "size": { "type": "integer" } }, - "required": ["type", "size"], + "required": [ + "type", + "size" + ], "additionalProperties": false }, "input": { @@ -24400,7 +27473,10 @@ "additionalProperties": false } }, - "required": ["input", "output"], + "required": [ + "input", + "output" + ], "additionalProperties": false }, "Config.Model": { @@ -24457,7 +27533,9 @@ "type": "object" } }, - "required": ["id"], + "required": [ + "id" + ], "additionalProperties": false } }, @@ -24578,7 +27656,10 @@ ] } }, - "required": ["providerID", "model"], + "required": [ + "providerID", + "model" + ], "additionalProperties": false } ] @@ -24593,13 +27674,19 @@ }, { "type": "string", - "enum": ["notify"] + "enum": [ + "notify" + ] } ] }, "share": { "type": "string", - "enum": ["manual", "auto", "disabled"] + "enum": [ + "manual", + "auto", + "disabled" + ] }, "enterprise": { "type": "object", @@ -24664,10 +27751,14 @@ "properties": { "disabled": { "type": "boolean", - "enum": [true] + "enum": [ + true + ] } }, - "required": ["disabled"], + "required": [ + "disabled" + ], "additionalProperties": false }, { @@ -24860,7 +27951,9 @@ "type": "string" } }, - "required": ["provider"], + "required": [ + "provider" + ], "additionalProperties": false }, "plugins": { @@ -24910,17 +28003,26 @@ "properties": { "action": { "type": "string", - "enum": ["provider.use"] + "enum": [ + "provider.use" + ] }, "resource": { "type": "string" }, "effect": { "type": "string", - "enum": ["allow", "deny"] + "enum": [ + "allow", + "deny" + ] } }, - "required": ["action", "resource", "effect"], + "required": [ + "action", + "resource", + "effect" + ], "additionalProperties": false } } @@ -24935,7 +28037,9 @@ "properties": { "type": { "type": "string", - "enum": ["document"] + "enum": [ + "document" + ] }, "path": { "type": "string" @@ -24944,7 +28048,10 @@ "$ref": "#/components/schemas/Config.Info" } }, - "required": ["type", "info"], + "required": [ + "type", + "info" + ], "additionalProperties": false }, "Config.Directory": { @@ -24952,13 +28059,18 @@ "properties": { "type": { "type": "string", - "enum": ["directory"] + "enum": [ + "directory" + ] }, "path": { "type": "string" } }, - "required": ["type", "path"], + "required": [ + "type", + "path" + ], "additionalProperties": false }, "Config.File": { @@ -24966,13 +28078,18 @@ "properties": { "type": { "type": "string", - "enum": ["file"] + "enum": [ + "file" + ] }, "path": { "type": "string" } }, - "required": ["type", "path"], + "required": [ + "type", + "path" + ], "additionalProperties": false }, "Config.AgentsDirectory": { @@ -24980,13 +28097,18 @@ "properties": { "type": { "type": "string", - "enum": ["agents"] + "enum": [ + "agents" + ] }, "path": { "type": "string" } }, - "required": ["type", "path"], + "required": [ + "type", + "path" + ], "additionalProperties": false }, "Config.ClaudeDirectory": { @@ -24994,13 +28116,18 @@ "properties": { "type": { "type": "string", - "enum": ["claude"] + "enum": [ + "claude" + ] }, "path": { "type": "string" } }, - "required": ["type", "path"], + "required": [ + "type", + "path" + ], "additionalProperties": false }, "Config.Entry": { @@ -25076,7 +28203,7 @@ }, { "name": "project", - "description": "Location-scoped project routes." + "description": "Project routes." }, { "name": "form", @@ -25119,8 +28246,8 @@ "description": "Location-scoped project references." }, { - "name": "projectCopy", - "description": "Project copy management routes." + "name": "worktree", + "description": "Project worktree management routes." }, { "name": "vcs",