summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAdam <[email protected]>2026-01-22 07:41:20 -0600
committerAdam <[email protected]>2026-01-22 07:42:56 -0600
commit16fad51b5ed572571ffb01159714756049b8a452 (patch)
treeffebb90c34e367cf372b33422db98fc071f218e9
parent287511c9b1320a2a8a464531c2a5f4e02cd259bf (diff)
downloadopencode-16fad51b5ed572571ffb01159714756049b8a452.tar.gz
opencode-16fad51b5ed572571ffb01159714756049b8a452.zip
feat(app): add workspace startup script to projects
-rw-r--r--packages/app/src/components/dialog-edit-project.tsx15
-rw-r--r--packages/app/src/i18n/en.ts3
-rw-r--r--packages/opencode/src/project/project.ts16
-rw-r--r--packages/opencode/src/server/routes/experimental.ts2
-rw-r--r--packages/opencode/src/server/routes/project.ts2
-rw-r--r--packages/opencode/src/worktree/index.ts27
-rw-r--r--packages/sdk/js/src/v2/gen/sdk.gen.ts11
-rw-r--r--packages/sdk/js/src/v2/gen/types.gen.ts15
-rw-r--r--packages/sdk/openapi.json1588
9 files changed, 1379 insertions, 300 deletions
diff --git a/packages/app/src/components/dialog-edit-project.tsx b/packages/app/src/components/dialog-edit-project.tsx
index 9cf7ce575..7664470f7 100644
--- a/packages/app/src/components/dialog-edit-project.tsx
+++ b/packages/app/src/components/dialog-edit-project.tsx
@@ -25,6 +25,7 @@ export function DialogEditProject(props: { project: LocalProject }) {
name: defaultName(),
color: props.project.icon?.color || "pink",
iconUrl: props.project.icon?.override || "",
+ startup: props.project.commands?.start ?? "",
saving: false,
})
@@ -69,15 +70,18 @@ export function DialogEditProject(props: { project: LocalProject }) {
async function handleSubmit(e: SubmitEvent) {
e.preventDefault()
+
if (!props.project.id) return
setStore("saving", true)
const name = store.name.trim() === folderName() ? "" : store.name.trim()
+ const start = store.startup.trim()
await globalSDK.client.project.update({
projectID: props.project.id,
directory: props.project.worktree,
name,
icon: { color: store.color, override: store.iconUrl },
+ commands: { start },
})
setStore("saving", false)
dialog.close()
@@ -215,6 +219,17 @@ export function DialogEditProject(props: { project: LocalProject }) {
</div>
</div>
</Show>
+
+ <TextField
+ multiline
+ label={language.t("dialog.project.edit.worktree.startup")}
+ description={language.t("dialog.project.edit.worktree.startup.description")}
+ placeholder={language.t("dialog.project.edit.worktree.startup.placeholder")}
+ value={store.startup}
+ onChange={(v) => setStore("startup", v)}
+ spellcheck={false}
+ class="max-h-40 w-full font-mono text-xs no-scrollbar"
+ />
</div>
<div class="flex justify-end gap-2">
diff --git a/packages/app/src/i18n/en.ts b/packages/app/src/i18n/en.ts
index 8249c68f9..f2ba88c59 100644
--- a/packages/app/src/i18n/en.ts
+++ b/packages/app/src/i18n/en.ts
@@ -257,6 +257,9 @@ export const dict = {
"dialog.project.edit.icon.recommended": "Recommended: 128x128px",
"dialog.project.edit.color": "Color",
"dialog.project.edit.color.select": "Select {{color}} color",
+ "dialog.project.edit.worktree.startup": "Workspace startup script",
+ "dialog.project.edit.worktree.startup.description": "Runs after creating a new workspace (worktree).",
+ "dialog.project.edit.worktree.startup.placeholder": "e.g. bun install",
"context.breakdown.title": "Context Breakdown",
"context.breakdown.note": 'Approximate breakdown of input tokens. "Other" includes tool definitions and overhead.',
diff --git a/packages/opencode/src/project/project.ts b/packages/opencode/src/project/project.ts
index 40ebb21ea..0ab5e5824 100644
--- a/packages/opencode/src/project/project.ts
+++ b/packages/opencode/src/project/project.ts
@@ -29,6 +29,11 @@ export namespace Project {
color: z.string().optional(),
})
.optional(),
+ commands: z
+ .object({
+ start: z.string().optional().describe("Startup script to run when creating a new workspace (worktree)"),
+ })
+ .optional(),
time: z.object({
created: z.number(),
updated: z.number(),
@@ -287,6 +292,7 @@ export namespace Project {
projectID: z.string(),
name: z.string().optional(),
icon: Info.shape.icon.optional(),
+ commands: Info.shape.commands.optional(),
}),
async (input) => {
const result = await Storage.update<Info>(["project", input.projectID], (draft) => {
@@ -299,6 +305,16 @@ export namespace Project {
if (input.icon.override !== undefined) draft.icon.override = input.icon.override || undefined
if (input.icon.color !== undefined) draft.icon.color = input.icon.color
}
+
+ if (input.commands?.start !== undefined) {
+ const start = input.commands.start || undefined
+ draft.commands = {
+ ...(draft.commands ?? {}),
+ }
+ draft.commands.start = start
+ if (!draft.commands.start) draft.commands = undefined
+ }
+
draft.time.updated = Date.now()
})
GlobalBus.emit("event", {
diff --git a/packages/opencode/src/server/routes/experimental.ts b/packages/opencode/src/server/routes/experimental.ts
index dc5f4f7ab..3c28331bd 100644
--- a/packages/opencode/src/server/routes/experimental.ts
+++ b/packages/opencode/src/server/routes/experimental.ts
@@ -90,7 +90,7 @@ export const ExperimentalRoutes = lazy(() =>
"/worktree",
describeRoute({
summary: "Create worktree",
- description: "Create a new git worktree for the current project.",
+ description: "Create a new git worktree for the current project and run any configured startup scripts.",
operationId: "worktree.create",
responses: {
200: {
diff --git a/packages/opencode/src/server/routes/project.ts b/packages/opencode/src/server/routes/project.ts
index 3be2089ae..81092284d 100644
--- a/packages/opencode/src/server/routes/project.ts
+++ b/packages/opencode/src/server/routes/project.ts
@@ -56,7 +56,7 @@ export const ProjectRoutes = lazy(() =>
"/:projectID",
describeRoute({
summary: "Update project",
- description: "Update project properties such as name, icon and color.",
+ description: "Update project properties such as name, icon, and commands.",
operationId: "project.update",
responses: {
200: {
diff --git a/packages/opencode/src/worktree/index.ts b/packages/opencode/src/worktree/index.ts
index 911383c06..70b1a0231 100644
--- a/packages/opencode/src/worktree/index.ts
+++ b/packages/opencode/src/worktree/index.ts
@@ -6,6 +6,7 @@ import { NamedError } from "@opencode-ai/util/error"
import { Global } from "../global"
import { Instance } from "../project/instance"
import { Project } from "../project/project"
+import { Storage } from "../storage/storage"
import { fn } from "../util/fn"
import { Config } from "@/config/config"
@@ -25,7 +26,10 @@ export namespace Worktree {
export const CreateInput = z
.object({
name: z.string().optional(),
- startCommand: z.string().optional(),
+ startCommand: z
+ .string()
+ .optional()
+ .describe("Additional startup script to run after the project's start command"),
})
.meta({
ref: "WorktreeCreateInput",
@@ -238,12 +242,23 @@ export namespace Worktree {
throw new CreateFailedError({ message: errorText(created) || "Failed to create git worktree" })
}
- const cmd = input?.startCommand?.trim()
- if (!cmd) return info
+ const project = await Storage.read<Project.Info>(["project", Instance.project.id]).catch(() => Instance.project)
+ const startup = project.commands?.start?.trim()
+ if (startup) {
+ const ran = await runStartCommand(info.directory, startup)
+ if (ran.exitCode !== 0) {
+ throw new StartCommandFailedError({
+ message: errorText(ran) || "Project start command failed",
+ })
+ }
+ }
- const ran = await runStartCommand(info.directory, cmd)
- if (ran.exitCode !== 0) {
- throw new StartCommandFailedError({ message: errorText(ran) || "Worktree start command failed" })
+ const extra = input?.startCommand?.trim()
+ if (extra) {
+ const ran = await runStartCommand(info.directory, extra)
+ if (ran.exitCode !== 0) {
+ throw new StartCommandFailedError({ message: errorText(ran) || "Worktree start command failed" })
+ }
}
return info
diff --git a/packages/sdk/js/src/v2/gen/sdk.gen.ts b/packages/sdk/js/src/v2/gen/sdk.gen.ts
index 706d0f9c2..4fab38bd7 100644
--- a/packages/sdk/js/src/v2/gen/sdk.gen.ts
+++ b/packages/sdk/js/src/v2/gen/sdk.gen.ts
@@ -293,7 +293,7 @@ export class Project extends HeyApiClient {
/**
* Update project
*
- * Update project properties such as name, icon and color.
+ * Update project properties such as name, icon, and commands.
*/
public update<ThrowOnError extends boolean = false>(
parameters: {
@@ -305,6 +305,12 @@ export class Project extends HeyApiClient {
override?: string
color?: string
}
+ commands?: {
+ /**
+ * Startup script to run when creating a new workspace (worktree)
+ */
+ start?: string
+ }
},
options?: Options<never, ThrowOnError>,
) {
@@ -317,6 +323,7 @@ export class Project extends HeyApiClient {
{ in: "query", key: "directory" },
{ in: "body", key: "name" },
{ in: "body", key: "icon" },
+ { in: "body", key: "commands" },
],
},
],
@@ -718,7 +725,7 @@ export class Worktree extends HeyApiClient {
/**
* Create worktree
*
- * Create a new git worktree for the current project.
+ * Create a new git worktree for the current project and run any configured startup scripts.
*/
public create<ThrowOnError extends boolean = false>(
parameters?: {
diff --git a/packages/sdk/js/src/v2/gen/types.gen.ts b/packages/sdk/js/src/v2/gen/types.gen.ts
index 844288902..fabb16e8a 100644
--- a/packages/sdk/js/src/v2/gen/types.gen.ts
+++ b/packages/sdk/js/src/v2/gen/types.gen.ts
@@ -28,6 +28,12 @@ export type Project = {
override?: string
color?: string
}
+ commands?: {
+ /**
+ * Startup script to run when creating a new workspace (worktree)
+ */
+ start?: string
+ }
time: {
created: number
updated: number
@@ -1906,6 +1912,9 @@ export type Worktree = {
export type WorktreeCreateInput = {
name?: string
+ /**
+ * Additional startup script to run after the project's start command
+ */
startCommand?: string
}
@@ -2233,6 +2242,12 @@ export type ProjectUpdateData = {
override?: string
color?: string
}
+ commands?: {
+ /**
+ * Startup script to run when creating a new workspace (worktree)
+ */
+ start?: string
+ }
}
path: {
projectID: string
diff --git a/packages/sdk/openapi.json b/packages/sdk/openapi.json
index 14008f323..fd3de22ed 100644
--- a/packages/sdk/openapi.json
+++ b/packages/sdk/openapi.json
@@ -27,7 +27,10 @@
"type": "string"
}
},
- "required": ["healthy", "version"]
+ "required": [
+ "healthy",
+ "version"
+ ]
}
}
}
@@ -183,7 +186,7 @@
}
],
"summary": "Update project",
- "description": "Update project properties such as name, icon and color.",
+ "description": "Update project properties such as name, icon, and commands.",
"responses": {
"200": {
"description": "Updated project information",
@@ -238,6 +241,15 @@
"type": "string"
}
}
+ },
+ "commands": {
+ "type": "object",
+ "properties": {
+ "start": {
+ "description": "Startup script to run when creating a new workspace (worktree)",
+ "type": "string"
+ }
+ }
}
}
}
@@ -479,7 +491,10 @@
"type": "number"
}
},
- "required": ["rows", "cols"]
+ "required": [
+ "rows",
+ "cols"
+ ]
}
}
}
@@ -719,7 +734,10 @@
}
}
},
- "required": ["providers", "default"]
+ "required": [
+ "providers",
+ "default"
+ ]
}
}
}
@@ -850,7 +868,7 @@
}
],
"summary": "Create worktree",
- "description": "Create a new git worktree for the current project.",
+ "description": "Create a new git worktree for the current project and run any configured startup scripts.",
"responses": {
"200": {
"description": "Worktree created",
@@ -1275,7 +1293,9 @@
],
"summary": "Get session",
"description": "Retrieve detailed information about a specific OpenCode session.",
- "tags": ["Session"],
+ "tags": [
+ "Session"
+ ],
"responses": {
"200": {
"description": "Get session",
@@ -1481,7 +1501,9 @@
}
],
"summary": "Get session children",
- "tags": ["Session"],
+ "tags": [
+ "Session"
+ ],
"description": "Retrieve all child sessions that were forked from the specified parent session.",
"responses": {
"200": {
@@ -1664,7 +1686,11 @@
"pattern": "^msg.*"
}
},
- "required": ["modelID", "providerID", "messageID"]
+ "required": [
+ "modelID",
+ "providerID",
+ "messageID"
+ ]
}
}
}
@@ -2046,7 +2072,10 @@
"type": "boolean"
}
},
- "required": ["providerID", "modelID"]
+ "required": [
+ "providerID",
+ "modelID"
+ ]
}
}
}
@@ -2109,7 +2138,10 @@
}
}
},
- "required": ["info", "parts"]
+ "required": [
+ "info",
+ "parts"
+ ]
}
}
}
@@ -2183,7 +2215,10 @@
}
}
},
- "required": ["info", "parts"]
+ "required": [
+ "info",
+ "parts"
+ ]
}
}
}
@@ -2229,7 +2264,10 @@
"type": "string"
}
},
- "required": ["providerID", "modelID"]
+ "required": [
+ "providerID",
+ "modelID"
+ ]
},
"agent": {
"type": "string"
@@ -2273,7 +2311,9 @@
}
}
},
- "required": ["parts"]
+ "required": [
+ "parts"
+ ]
}
}
}
@@ -2336,7 +2376,10 @@
}
}
},
- "required": ["info", "parts"]
+ "required": [
+ "info",
+ "parts"
+ ]
}
}
}
@@ -2605,7 +2648,10 @@
"type": "string"
}
},
- "required": ["providerID", "modelID"]
+ "required": [
+ "providerID",
+ "modelID"
+ ]
},
"agent": {
"type": "string"
@@ -2649,7 +2695,9 @@
}
}
},
- "required": ["parts"]
+ "required": [
+ "parts"
+ ]
}
}
}
@@ -2703,7 +2751,10 @@
}
}
},
- "required": ["info", "parts"]
+ "required": [
+ "info",
+ "parts"
+ ]
}
}
}
@@ -2781,13 +2832,20 @@
"$ref": "#/components/schemas/FilePartSource"
}
},
- "required": ["type", "mime", "url"]
+ "required": [
+ "type",
+ "mime",
+ "url"
+ ]
}
]
}
}
},
- "required": ["arguments", "command"]
+ "required": [
+ "arguments",
+ "command"
+ ]
}
}
}
@@ -2874,13 +2932,19 @@
"type": "string"
}
},
- "required": ["providerID", "modelID"]
+ "required": [
+ "providerID",
+ "modelID"
+ ]
},
"command": {
"type": "string"
}
},
- "required": ["agent", "command"]
+ "required": [
+ "agent",
+ "command"
+ ]
}
}
}
@@ -2962,7 +3026,9 @@
"pattern": "^prt.*"
}
},
- "required": ["messageID"]
+ "required": [
+ "messageID"
+ ]
}
}
}
@@ -3108,10 +3174,16 @@
"properties": {
"response": {
"type": "string",
- "enum": ["once", "always", "reject"]
+ "enum": [
+ "once",
+ "always",
+ "reject"
+ ]
}
},
- "required": ["response"]
+ "required": [
+ "response"
+ ]
}
}
}
@@ -3186,13 +3258,19 @@
"properties": {
"reply": {
"type": "string",
- "enum": ["once", "always", "reject"]
+ "enum": [
+ "once",
+ "always",
+ "reject"
+ ]
},
"message": {
"type": "string"
}
},
- "required": ["reply"]
+ "required": [
+ "reply"
+ ]
}
}
}
@@ -3347,7 +3425,9 @@
}
}
},
- "required": ["answers"]
+ "required": [
+ "answers"
+ ]
}
}
}
@@ -3510,10 +3590,15 @@
"properties": {
"field": {
"type": "string",
- "enum": ["reasoning_content", "reasoning_details"]
+ "enum": [
+ "reasoning_content",
+ "reasoning_details"
+ ]
}
},
- "required": ["field"],
+ "required": [
+ "field"
+ ],
"additionalProperties": false
}
]
@@ -3549,10 +3634,16 @@
"type": "number"
}
},
- "required": ["input", "output"]
+ "required": [
+ "input",
+ "output"
+ ]
}
},
- "required": ["input", "output"]
+ "required": [
+ "input",
+ "output"
+ ]
},
"limit": {
"type": "object",
@@ -3567,7 +3658,10 @@
"type": "number"
}
},
- "required": ["context", "output"]
+ "required": [
+ "context",
+ "output"
+ ]
},
"modalities": {
"type": "object",
@@ -3576,25 +3670,44 @@
"type": "array",
"items": {
"type": "string",
- "enum": ["text", "audio", "image", "video", "pdf"]
+ "enum": [
+ "text",
+ "audio",
+ "image",
+ "video",
+ "pdf"
+ ]
}
},
"output": {
"type": "array",
"items": {
"type": "string",
- "enum": ["text", "audio", "image", "video", "pdf"]
+ "enum": [
+ "text",
+ "audio",
+ "image",
+ "video",
+ "pdf"
+ ]
}
}
},
- "required": ["input", "output"]
+ "required": [
+ "input",
+ "output"
+ ]
},
"experimental": {
"type": "boolean"
},
"status": {
"type": "string",
- "enum": ["alpha", "beta", "deprecated"]
+ "enum": [
+ "alpha",
+ "beta",
+ "deprecated"
+ ]
},
"options": {
"type": "object",
@@ -3619,7 +3732,9 @@
"type": "string"
}
},
- "required": ["npm"]
+ "required": [
+ "npm"
+ ]
},
"variants": {
"type": "object",
@@ -3649,7 +3764,12 @@
}
}
},
- "required": ["name", "env", "id", "models"]
+ "required": [
+ "name",
+ "env",
+ "id",
+ "models"
+ ]
}
},
"default": {
@@ -3668,7 +3788,11 @@
}
}
},
- "required": ["all", "default", "connected"]
+ "required": [
+ "all",
+ "default",
+ "connected"
+ ]
}
}
}
@@ -3781,7 +3905,9 @@
"type": "number"
}
},
- "required": ["method"]
+ "required": [
+ "method"
+ ]
}
}
}
@@ -3854,7 +3980,9 @@
"type": "string"
}
},
- "required": ["method"]
+ "required": [
+ "method"
+ ]
}
}
}
@@ -3906,7 +4034,9 @@
"type": "string"
}
},
- "required": ["text"]
+ "required": [
+ "text"
+ ]
},
"lines": {
"type": "object",
@@ -3915,7 +4045,9 @@
"type": "string"
}
},
- "required": ["text"]
+ "required": [
+ "text"
+ ]
},
"line_number": {
"type": "number"
@@ -3935,7 +4067,9 @@
"type": "string"
}
},
- "required": ["text"]
+ "required": [
+ "text"
+ ]
},
"start": {
"type": "number"
@@ -3944,11 +4078,21 @@
"type": "number"
}
},
- "required": ["match", "start", "end"]
+ "required": [
+ "match",
+ "start",
+ "end"
+ ]
}
}
},
- "required": ["path", "lines", "line_number", "absolute_offset", "submatches"]
+ "required": [
+ "path",
+ "lines",
+ "line_number",
+ "absolute_offset",
+ "submatches"
+ ]
}
}
}
@@ -3987,7 +4131,10 @@
"name": "dirs",
"schema": {
"type": "string",
- "enum": ["true", "false"]
+ "enum": [
+ "true",
+ "false"
+ ]
}
},
{
@@ -3995,7 +4142,10 @@
"name": "type",
"schema": {
"type": "string",
- "enum": ["file", "directory"]
+ "enum": [
+ "file",
+ "directory"
+ ]
}
},
{
@@ -4302,7 +4452,10 @@
]
}
},
- "required": ["name", "config"]
+ "required": [
+ "name",
+ "config"
+ ]
}
}
}
@@ -4350,7 +4503,9 @@
"type": "string"
}
},
- "required": ["authorizationUrl"]
+ "required": [
+ "authorizationUrl"
+ ]
}
}
}
@@ -4417,7 +4572,9 @@
"const": true
}
},
- "required": ["success"]
+ "required": [
+ "success"
+ ]
}
}
}
@@ -4506,7 +4663,9 @@
"type": "string"
}
},
- "required": ["code"]
+ "required": [
+ "code"
+ ]
}
}
}
@@ -4709,7 +4868,9 @@
"type": "string"
}
},
- "required": ["text"]
+ "required": [
+ "text"
+ ]
}
}
}
@@ -4972,7 +5133,9 @@
"type": "string"
}
},
- "required": ["command"]
+ "required": [
+ "command"
+ ]
}
}
}
@@ -5025,7 +5188,12 @@
},
"variant": {
"type": "string",
- "enum": ["info", "success", "warning", "error"]
+ "enum": [
+ "info",
+ "success",
+ "warning",
+ "error"
+ ]
},
"duration": {
"description": "Duration in milliseconds",
@@ -5033,7 +5201,10 @@
"type": "number"
}
},
- "required": ["message", "variant"]
+ "required": [
+ "message",
+ "variant"
+ ]
}
}
}
@@ -5170,7 +5341,9 @@
"pattern": "^ses"
}
},
- "required": ["sessionID"]
+ "required": [
+ "sessionID"
+ ]
}
}
}
@@ -5210,7 +5383,10 @@
},
"body": {}
},
- "required": ["path", "body"]
+ "required": [
+ "path",
+ "body"
+ ]
}
}
}
@@ -5453,7 +5629,12 @@
"level": {
"description": "Log level",
"type": "string",
- "enum": ["debug", "info", "error", "warn"]
+ "enum": [
+ "debug",
+ "info",
+ "error",
+ "warn"
+ ]
},
"message": {
"description": "Log message",
@@ -5468,7 +5649,11 @@
"additionalProperties": {}
}
},
- "required": ["service", "level", "message"]
+ "required": [
+ "service",
+ "level",
+ "message"
+ ]
}
}
}
@@ -5552,7 +5737,11 @@
"type": "string"
}
},
- "required": ["name", "description", "location"]
+ "required": [
+ "name",
+ "description",
+ "location"
+ ]
}
}
}
@@ -5753,10 +5942,15 @@
"type": "string"
}
},
- "required": ["version"]
+ "required": [
+ "version"
+ ]
}
},
- "required": ["type", "properties"]
+ "required": [
+ "type",
+ "properties"
+ ]
},
"Event.installation.update-available": {
"type": "object",
@@ -5772,10 +5966,15 @@
"type": "string"
}
},
- "required": ["version"]
+ "required": [
+ "version"
+ ]
}
},
- "required": ["type", "properties"]
+ "required": [
+ "type",
+ "properties"
+ ]
},
"Project": {
"type": "object",
@@ -5807,6 +6006,15 @@
}
}
},
+ "commands": {
+ "type": "object",
+ "properties": {
+ "start": {
+ "description": "Startup script to run when creating a new workspace (worktree)",
+ "type": "string"
+ }
+ }
+ },
"time": {
"type": "object",
"properties": {
@@ -5820,7 +6028,10 @@
"type": "number"
}
},
- "required": ["created", "updated"]
+ "required": [
+ "created",
+ "updated"
+ ]
},
"sandboxes": {
"type": "array",
@@ -5829,7 +6040,12 @@
}
}
},
- "required": ["id", "worktree", "time", "sandboxes"]
+ "required": [
+ "id",
+ "worktree",
+ "time",
+ "sandboxes"
+ ]
},
"Event.project.updated": {
"type": "object",
@@ -5842,7 +6058,10 @@
"$ref": "#/components/schemas/Project"
}
},
- "required": ["type", "properties"]
+ "required": [
+ "type",
+ "properties"
+ ]
},
"Event.server.instance.disposed": {
"type": "object",
@@ -5858,10 +6077,15 @@
"type": "string"
}
},
- "required": ["directory"]
+ "required": [
+ "directory"
+ ]
}
},
- "required": ["type", "properties"]
+ "required": [
+ "type",
+ "properties"
+ ]
},
"Event.server.connected": {
"type": "object",
@@ -5875,7 +6099,10 @@
"properties": {}
}
},
- "required": ["type", "properties"]
+ "required": [
+ "type",
+ "properties"
+ ]
},
"Event.global.disposed": {
"type": "object",
@@ -5889,7 +6116,10 @@
"properties": {}
}
},
- "required": ["type", "properties"]
+ "required": [
+ "type",
+ "properties"
+ ]
},
"Event.lsp.client.diagnostics": {
"type": "object",
@@ -5908,10 +6138,16 @@
"type": "string"
}
},
- "required": ["serverID", "path"]
+ "required": [
+ "serverID",
+ "path"
+ ]
}
},
- "required": ["type", "properties"]
+ "required": [
+ "type",
+ "properties"
+ ]
},
"Event.lsp.updated": {
"type": "object",
@@ -5925,7 +6161,10 @@
"properties": {}
}
},
- "required": ["type", "properties"]
+ "required": [
+ "type",
+ "properties"
+ ]
},
"Event.file.edited": {
"type": "object",
@@ -5941,10 +6180,15 @@
"type": "string"
}
},
- "required": ["file"]
+ "required": [
+ "file"
+ ]
}
},
- "required": ["type", "properties"]
+ "required": [
+ "type",
+ "properties"
+ ]
},
"FileDiff": {
"type": "object",
@@ -5965,7 +6209,13 @@
"type": "number"
}
},
- "required": ["file", "before", "after", "additions", "deletions"]
+ "required": [
+ "file",
+ "before",
+ "after",
+ "additions",
+ "deletions"
+ ]
},
"UserMessage": {
"type": "object",
@@ -5987,7 +6237,9 @@
"type": "number"
}
},
- "required": ["created"]
+ "required": [
+ "created"
+ ]
},
"summary": {
"type": "object",
@@ -6005,7 +6257,9 @@
}
}
},
- "required": ["diffs"]
+ "required": [
+ "diffs"
+ ]
},
"agent": {
"type": "string"
@@ -6020,7 +6274,10 @@
"type": "string"
}
},
- "required": ["providerID", "modelID"]
+ "required": [
+ "providerID",
+ "modelID"
+ ]
},
"system": {
"type": "string"
@@ -6038,7 +6295,14 @@
"type": "string"
}
},
- "required": ["id", "sessionID", "role", "time", "agent", "model"]
+ "required": [
+ "id",
+ "sessionID",
+ "role",
+ "time",
+ "agent",
+ "model"
+ ]
},
"ProviderAuthError": {
"type": "object",
@@ -6057,10 +6321,16 @@
"type": "string"
}
},
- "required": ["providerID", "message"]
+ "required": [
+ "providerID",
+ "message"
+ ]
}
},
- "required": ["name", "data"]
+ "required": [
+ "name",
+ "data"
+ ]
},
"UnknownError": {
"type": "object",
@@ -6076,10 +6346,15 @@
"type": "string"
}
},
- "required": ["message"]
+ "required": [
+ "message"
+ ]
}
},
- "required": ["name", "data"]
+ "required": [
+ "name",
+ "data"
+ ]
},
"MessageOutputLengthError": {
"type": "object",
@@ -6093,7 +6368,10 @@
"properties": {}
}
},
- "required": ["name", "data"]
+ "required": [
+ "name",
+ "data"
+ ]
},
"MessageAbortedError": {
"type": "object",
@@ -6109,10 +6387,15 @@
"type": "string"
}
},
- "required": ["message"]
+ "required": [
+ "message"
+ ]
}
},
- "required": ["name", "data"]
+ "required": [
+ "name",
+ "data"
+ ]
},
"APIError": {
"type": "object",
@@ -6155,10 +6438,16 @@
}
}
},
- "required": ["message", "isRetryable"]
+ "required": [
+ "message",
+ "isRetryable"
+ ]
}
},
- "required": ["name", "data"]
+ "required": [
+ "name",
+ "data"
+ ]
},
"AssistantMessage": {
"type": "object",
@@ -6183,7 +6472,9 @@
"type": "number"
}
},
- "required": ["created"]
+ "required": [
+ "created"
+ ]
},
"error": {
"anyOf": [
@@ -6229,7 +6520,10 @@
"type": "string"
}
},
- "required": ["cwd", "root"]
+ "required": [
+ "cwd",
+ "root"
+ ]
},
"summary": {
"type": "boolean"
@@ -6259,10 +6553,18 @@
"type": "number"
}
},
- "required": ["read", "write"]
+ "required": [
+ "read",
+ "write"
+ ]
}
},
- "required": ["input", "output", "reasoning", "cache"]
+ "required": [
+ "input",
+ "output",
+ "reasoning",
+ "cache"
+ ]
},
"finish": {
"type": "string"
@@ -6307,10 +6609,15 @@
"$ref": "#/components/schemas/Message"
}
},
- "required": ["info"]
+ "required": [
+ "info"
+ ]
}
},
- "required": ["type", "properties"]
+ "required": [
+ "type",
+ "properties"
+ ]
},
"Event.message.removed": {
"type": "object",
@@ -6329,10 +6636,16 @@
"type": "string"
}
},
- "required": ["sessionID", "messageID"]
+ "required": [
+ "sessionID",
+ "messageID"
+ ]
}
},
- "required": ["type", "properties"]
+ "required": [
+ "type",
+ "properties"
+ ]
},
"TextPart": {
"type": "object",
@@ -6369,7 +6682,9 @@
"type": "number"
}
},
- "required": ["start"]
+ "required": [
+ "start"
+ ]
},
"metadata": {
"type": "object",
@@ -6379,7 +6694,13 @@
"additionalProperties": {}
}
},
- "required": ["id", "sessionID", "messageID", "type", "text"]
+ "required": [
+ "id",
+ "sessionID",
+ "messageID",
+ "type",
+ "text"
+ ]
},
"ReasoningPart": {
"type": "object",
@@ -6417,10 +6738,19 @@
"type": "number"
}
},
- "required": ["start"]
+ "required": [
+ "start"
+ ]
}
},
- "required": ["id", "sessionID", "messageID", "type", "text", "time"]
+ "required": [
+ "id",
+ "sessionID",
+ "messageID",
+ "type",
+ "text",
+ "time"
+ ]
},
"FilePartSourceText": {
"type": "object",
@@ -6439,7 +6769,11 @@
"maximum": 9007199254740991
}
},
- "required": ["value", "start", "end"]
+ "required": [
+ "value",
+ "start",
+ "end"
+ ]
},
"FileSource": {
"type": "object",
@@ -6455,7 +6789,11 @@
"type": "string"
}
},
- "required": ["text", "type", "path"]
+ "required": [
+ "text",
+ "type",
+ "path"
+ ]
},
"Range": {
"type": "object",
@@ -6470,7 +6808,10 @@
"type": "number"
}
},
- "required": ["line", "character"]
+ "required": [
+ "line",
+ "character"
+ ]
},
"end": {
"type": "object",
@@ -6482,10 +6823,16 @@
"type": "number"
}
},
- "required": ["line", "character"]
+ "required": [
+ "line",
+ "character"
+ ]
}
},
- "required": ["start", "end"]
+ "required": [
+ "start",
+ "end"
+ ]
},
"SymbolSource": {
"type": "object",
@@ -6512,7 +6859,14 @@
"maximum": 9007199254740991
}
},
- "required": ["text", "type", "path", "range", "name", "kind"]
+ "required": [
+ "text",
+ "type",
+ "path",
+ "range",
+ "name",
+ "kind"
+ ]
},
"ResourceSource": {
"type": "object",
@@ -6531,7 +6885,12 @@
"type": "string"
}
},
- "required": ["text", "type", "clientName", "uri"]
+ "required": [
+ "text",
+ "type",
+ "clientName",
+ "uri"
+ ]
},
"FilePartSource": {
"anyOf": [
@@ -6575,7 +6934,14 @@
"$ref": "#/components/schemas/FilePartSource"
}
},
- "required": ["id", "sessionID", "messageID", "type", "mime", "url"]
+ "required": [
+ "id",
+ "sessionID",
+ "messageID",
+ "type",
+ "mime",
+ "url"
+ ]
},
"ToolStatePending": {
"type": "object",
@@ -6595,7 +6961,11 @@
"type": "string"
}
},
- "required": ["status", "input", "raw"]
+ "required": [
+ "status",
+ "input",
+ "raw"
+ ]
},
"ToolStateRunning": {
"type": "object",
@@ -6628,10 +6998,16 @@
"type": "number"
}
},
- "required": ["start"]
+ "required": [
+ "start"
+ ]
}
},
- "required": ["status", "input", "time"]
+ "required": [
+ "status",
+ "input",
+ "time"
+ ]
},
"ToolStateCompleted": {
"type": "object",
@@ -6673,7 +7049,10 @@
"type": "number"
}
},
- "required": ["start", "end"]
+ "required": [
+ "start",
+ "end"
+ ]
},
"attachments": {
"type": "array",
@@ -6682,7 +7061,14 @@
}
}
},
- "required": ["status", "input", "output", "title", "metadata", "time"]
+ "required": [
+ "status",
+ "input",
+ "output",
+ "title",
+ "metadata",
+ "time"
+ ]
},
"ToolStateError": {
"type": "object",
@@ -6718,10 +7104,18 @@
"type": "number"
}
},
- "required": ["start", "end"]
+ "required": [
+ "start",
+ "end"
+ ]
}
},
- "required": ["status", "input", "error", "time"]
+ "required": [
+ "status",
+ "input",
+ "error",
+ "time"
+ ]
},
"ToolState": {
"anyOf": [
@@ -6772,7 +7166,15 @@
"additionalProperties": {}
}
},
- "required": ["id", "sessionID", "messageID", "type", "callID", "tool", "state"]
+ "required": [
+ "id",
+ "sessionID",
+ "messageID",
+ "type",
+ "callID",
+ "tool",
+ "state"
+ ]
},
"StepStartPart": {
"type": "object",
@@ -6794,7 +7196,12 @@
"type": "string"
}
},
- "required": ["id", "sessionID", "messageID", "type"]
+ "required": [
+ "id",
+ "sessionID",
+ "messageID",
+ "type"
+ ]
},
"StepFinishPart": {
"type": "object",
@@ -6843,13 +7250,29 @@
"type": "number"
}
},
- "required": ["read", "write"]
+ "required": [
+ "read",
+ "write"
+ ]
}
},
- "required": ["input", "output", "reasoning", "cache"]
+ "required": [
+ "input",
+ "output",
+ "reasoning",
+ "cache"
+ ]
}
},
- "required": ["id", "sessionID", "messageID", "type", "reason", "cost", "tokens"]
+ "required": [
+ "id",
+ "sessionID",
+ "messageID",
+ "type",
+ "reason",
+ "cost",
+ "tokens"
+ ]
},
"SnapshotPart": {
"type": "object",
@@ -6871,7 +7294,13 @@
"type": "string"
}
},
- "required": ["id", "sessionID", "messageID", "type", "snapshot"]
+ "required": [
+ "id",
+ "sessionID",
+ "messageID",
+ "type",
+ "snapshot"
+ ]
},
"PatchPart": {
"type": "object",
@@ -6899,7 +7328,14 @@
}
}
},
- "required": ["id", "sessionID", "messageID", "type", "hash", "files"]
+ "required": [
+ "id",
+ "sessionID",
+ "messageID",
+ "type",
+ "hash",
+ "files"
+ ]
},
"AgentPart": {
"type": "object",
@@ -6937,10 +7373,20 @@
"maximum": 9007199254740991
}
},
- "required": ["value", "start", "end"]
+ "required": [
+ "value",
+ "start",
+ "end"
+ ]
}
},
- "required": ["id", "sessionID", "messageID", "type", "name"]
+ "required": [
+ "id",
+ "sessionID",
+ "messageID",
+ "type",
+ "name"
+ ]
},
"RetryPart": {
"type": "object",
@@ -6971,10 +7417,20 @@
"type": "number"
}
},
- "required": ["created"]
+ "required": [
+ "created"
+ ]
}
},
- "required": ["id", "sessionID", "messageID", "type", "attempt", "error", "time"]
+ "required": [
+ "id",
+ "sessionID",
+ "messageID",
+ "type",
+ "attempt",
+ "error",
+ "time"
+ ]
},
"CompactionPart": {
"type": "object",
@@ -6996,7 +7452,13 @@
"type": "boolean"
}
},
- "required": ["id", "sessionID", "messageID", "type", "auto"]
+ "required": [
+ "id",
+ "sessionID",
+ "messageID",
+ "type",
+ "auto"
+ ]
},
"Part": {
"anyOf": [
@@ -7038,13 +7500,24 @@
"type": "string"
}
},
- "required": ["providerID", "modelID"]
+ "required": [
+ "providerID",
+ "modelID"
+ ]
},
"command": {
"type": "string"
}
},
- "required": ["id", "sessionID", "messageID", "type", "prompt", "description", "agent"]
+ "required": [
+ "id",
+ "sessionID",
+ "messageID",
+ "type",
+ "prompt",
+ "description",
+ "agent"
+ ]
},
{
"$ref": "#/components/schemas/ReasoningPart"
@@ -7095,10 +7568,15 @@
"type": "string"
}
},
- "required": ["part"]
+ "required": [
+ "part"
+ ]
}
},
- "required": ["type", "properties"]
+ "required": [
+ "type",
+ "properties"
+ ]
},
"Event.message.part.removed": {
"type": "object",
@@ -7120,10 +7598,17 @@
"type": "string"
}
},
- "required": ["sessionID", "messageID", "partID"]
+ "required": [
+ "sessionID",
+ "messageID",
+ "partID"
+ ]
}
},
- "required": ["type", "properties"]
+ "required": [
+ "type",
+ "properties"
+ ]
},
"PermissionRequest": {
"type": "object",
@@ -7168,10 +7653,20 @@
"type": "string"
}
},
- "required": ["messageID", "callID"]
+ "required": [
+ "messageID",
+ "callID"
+ ]
}
},
- "required": ["id", "sessionID", "permission", "patterns", "metadata", "always"]
+ "required": [
+ "id",
+ "sessionID",
+ "permission",
+ "patterns",
+ "metadata",
+ "always"
+ ]
},
"Event.permission.asked": {
"type": "object",
@@ -7184,7 +7679,10 @@
"$ref": "#/components/schemas/PermissionRequest"
}
},
- "required": ["type", "properties"]
+ "required": [
+ "type",
+ "properties"
+ ]
},
"Event.permission.replied": {
"type": "object",
@@ -7204,13 +7702,24 @@
},
"reply": {
"type": "string",
- "enum": ["once", "always", "reject"]
+ "enum": [
+ "once",
+ "always",
+ "reject"
+ ]
}
},
- "required": ["sessionID", "requestID", "reply"]
+ "required": [
+ "sessionID",
+ "requestID",
+ "reply"
+ ]
}
},
- "required": ["type", "properties"]
+ "required": [
+ "type",
+ "properties"
+ ]
},
"SessionStatus": {
"anyOf": [
@@ -7222,7 +7731,9 @@
"const": "idle"
}
},
- "required": ["type"]
+ "required": [
+ "type"
+ ]
},
{
"type": "object",
@@ -7241,7 +7752,12 @@
"type": "number"
}
},
- "required": ["type", "attempt", "message", "next"]
+ "required": [
+ "type",
+ "attempt",
+ "message",
+ "next"
+ ]
},
{
"type": "object",
@@ -7251,7 +7767,9 @@
"const": "busy"
}
},
- "required": ["type"]
+ "required": [
+ "type"
+ ]
}
]
},
@@ -7272,10 +7790,16 @@
"$ref": "#/components/schemas/SessionStatus"
}
},
- "required": ["sessionID", "status"]
+ "required": [
+ "sessionID",
+ "status"
+ ]
}
},
- "required": ["type", "properties"]
+ "required": [
+ "type",
+ "properties"
+ ]
},
"Event.session.idle": {
"type": "object",
@@ -7291,10 +7815,15 @@
"type": "string"
}
},
- "required": ["sessionID"]
+ "required": [
+ "sessionID"
+ ]
}
},
- "required": ["type", "properties"]
+ "required": [
+ "type",
+ "properties"
+ ]
},
"QuestionOption": {
"type": "object",
@@ -7309,7 +7838,10 @@
"type": "string"
}
},
- "required": ["label", "description"]
+ "required": [
+ "label",
+ "description"
+ ]
},
"QuestionInfo": {
"type": "object",
@@ -7339,7 +7871,11 @@
"type": "boolean"
}
},
- "required": ["question", "header", "options"]
+ "required": [
+ "question",
+ "header",
+ "options"
+ ]
},
"QuestionRequest": {
"type": "object",
@@ -7369,10 +7905,17 @@
"type": "string"
}
},
- "required": ["messageID", "callID"]
+ "required": [
+ "messageID",
+ "callID"
+ ]
}
},
- "required": ["id", "sessionID", "questions"]
+ "required": [
+ "id",
+ "sessionID",
+ "questions"
+ ]
},
"Event.question.asked": {
"type": "object",
@@ -7385,7 +7928,10 @@
"$ref": "#/components/schemas/QuestionRequest"
}
},
- "required": ["type", "properties"]
+ "required": [
+ "type",
+ "properties"
+ ]
},
"QuestionAnswer": {
"type": "array",
@@ -7416,10 +7962,17 @@
}
}
},
- "required": ["sessionID", "requestID", "answers"]
+ "required": [
+ "sessionID",
+ "requestID",
+ "answers"
+ ]
}
},
- "required": ["type", "properties"]
+ "required": [
+ "type",
+ "properties"
+ ]
},
"Event.question.rejected": {
"type": "object",
@@ -7438,10 +7991,16 @@
"type": "string"
}
},
- "required": ["sessionID", "requestID"]
+ "required": [
+ "sessionID",
+ "requestID"
+ ]
}
},
- "required": ["type", "properties"]
+ "required": [
+ "type",
+ "properties"
+ ]
},
"Event.session.compacted": {
"type": "object",
@@ -7457,10 +8016,15 @@
"type": "string"
}
},
- "required": ["sessionID"]
+ "required": [
+ "sessionID"
+ ]
}
},
- "required": ["type", "properties"]
+ "required": [
+ "type",
+ "properties"
+ ]
},
"Todo": {
"type": "object",
@@ -7482,7 +8046,12 @@
"type": "string"
}
},
- "required": ["content", "status", "priority", "id"]
+ "required": [
+ "content",
+ "status",
+ "priority",
+ "id"
+ ]
},
"Event.todo.updated": {
"type": "object",
@@ -7504,10 +8073,16 @@
}
}
},
- "required": ["sessionID", "todos"]
+ "required": [
+ "sessionID",
+ "todos"
+ ]
}
},
- "required": ["type", "properties"]
+ "required": [
+ "type",
+ "properties"
+ ]
},
"Event.file.watcher.updated": {
"type": "object",
@@ -7539,10 +8114,16 @@
]
}
},
- "required": ["file", "event"]
+ "required": [
+ "file",
+ "event"
+ ]
}
},
- "required": ["type", "properties"]
+ "required": [
+ "type",
+ "properties"
+ ]
},
"Event.tui.prompt.append": {
"type": "object",
@@ -7558,10 +8139,15 @@
"type": "string"
}
},
- "required": ["text"]
+ "required": [
+ "text"
+ ]
}
},
- "required": ["type", "properties"]
+ "required": [
+ "type",
+ "properties"
+ ]
},
"Event.tui.command.execute": {
"type": "object",
@@ -7602,10 +8188,15 @@
]
}
},
- "required": ["command"]
+ "required": [
+ "command"
+ ]
}
},
- "required": ["type", "properties"]
+ "required": [
+ "type",
+ "properties"
+ ]
},
"Event.tui.toast.show": {
"type": "object",
@@ -7625,7 +8216,12 @@
},
"variant": {
"type": "string",
- "enum": ["info", "success", "warning", "error"]
+ "enum": [
+ "info",
+ "success",
+ "warning",
+ "error"
+ ]
},
"duration": {
"description": "Duration in milliseconds",
@@ -7633,10 +8229,16 @@
"type": "number"
}
},
- "required": ["message", "variant"]
+ "required": [
+ "message",
+ "variant"
+ ]
}
},
- "required": ["type", "properties"]
+ "required": [
+ "type",
+ "properties"
+ ]
},
"Event.tui.session.select": {
"type": "object",
@@ -7654,10 +8256,15 @@
"pattern": "^ses"
}
},
- "required": ["sessionID"]
+ "required": [
+ "sessionID"
+ ]
}
},
- "required": ["type", "properties"]
+ "required": [
+ "type",
+ "properties"
+ ]
},
"Event.mcp.tools.changed": {
"type": "object",
@@ -7673,10 +8280,15 @@
"type": "string"
}
},
- "required": ["server"]
+ "required": [
+ "server"
+ ]
}
},
- "required": ["type", "properties"]
+ "required": [
+ "type",
+ "properties"
+ ]
},
"Event.mcp.browser.open.failed": {
"type": "object",
@@ -7695,10 +8307,16 @@
"type": "string"
}
},
- "required": ["mcpName", "url"]
+ "required": [
+ "mcpName",
+ "url"
+ ]
}
},
- "required": ["type", "properties"]
+ "required": [
+ "type",
+ "properties"
+ ]
},
"Event.command.executed": {
"type": "object",
@@ -7725,14 +8343,26 @@
"pattern": "^msg.*"
}
},
- "required": ["name", "sessionID", "arguments", "messageID"]
+ "required": [
+ "name",
+ "sessionID",
+ "arguments",
+ "messageID"
+ ]
}
},
- "required": ["type", "properties"]
+ "required": [
+ "type",
+ "properties"
+ ]
},
"PermissionAction": {
"type": "string",
- "enum": ["allow", "deny", "ask"]
+ "enum": [
+ "allow",
+ "deny",
+ "ask"
+ ]
},
"PermissionRule": {
"type": "object",
@@ -7747,7 +8377,11 @@
"$ref": "#/components/schemas/PermissionAction"
}
},
- "required": ["permission", "pattern", "action"]
+ "required": [
+ "permission",
+ "pattern",
+ "action"
+ ]
},
"PermissionRuleset": {
"type": "array",
@@ -7794,7 +8428,11 @@
}
}
},
- "required": ["additions", "deletions", "files"]
+ "required": [
+ "additions",
+ "deletions",
+ "files"
+ ]
},
"share": {
"type": "object",
@@ -7803,7 +8441,9 @@
"type": "string"
}
},
- "required": ["url"]
+ "required": [
+ "url"
+ ]
},
"title": {
"type": "string"
@@ -7827,7 +8467,10 @@
"type": "number"
}
},
- "required": ["created", "updated"]
+ "required": [
+ "created",
+ "updated"
+ ]
},
"permission": {
"$ref": "#/components/schemas/PermissionRuleset"
@@ -7848,10 +8491,20 @@
"type": "string"
}
},
- "required": ["messageID"]
+ "required": [
+ "messageID"
+ ]
}
},
- "required": ["id", "slug", "projectID", "directory", "title", "version", "time"]
+ "required": [
+ "id",
+ "slug",
+ "projectID",
+ "directory",
+ "title",
+ "version",
+ "time"
+ ]
},
"Event.session.created": {
"type": "object",
@@ -7867,10 +8520,15 @@
"$ref": "#/components/schemas/Session"
}
},
- "required": ["info"]
+ "required": [
+ "info"
+ ]
}
},
- "required": ["type", "properties"]
+ "required": [
+ "type",
+ "properties"
+ ]
},
"Event.session.updated": {
"type": "object",
@@ -7886,10 +8544,15 @@
"$ref": "#/components/schemas/Session"
}
},
- "required": ["info"]
+ "required": [
+ "info"
+ ]
}
},
- "required": ["type", "properties"]
+ "required": [
+ "type",
+ "properties"
+ ]
},
"Event.session.deleted": {
"type": "object",
@@ -7905,10 +8568,15 @@
"$ref": "#/components/schemas/Session"
}
},
- "required": ["info"]
+ "required": [
+ "info"
+ ]
}
},
- "required": ["type", "properties"]
+ "required": [
+ "type",
+ "properties"
+ ]
},
"Event.session.diff": {
"type": "object",
@@ -7930,10 +8598,16 @@
}
}
},
- "required": ["sessionID", "diff"]
+ "required": [
+ "sessionID",
+ "diff"
+ ]
}
},
- "required": ["type", "properties"]
+ "required": [
+ "type",
+ "properties"
+ ]
},
"Event.session.error": {
"type": "object",
@@ -7970,7 +8644,10 @@
}
}
},
- "required": ["type", "properties"]
+ "required": [
+ "type",
+ "properties"
+ ]
},
"Event.vcs.branch.updated": {
"type": "object",
@@ -7988,7 +8665,10 @@
}
}
},
- "required": ["type", "properties"]
+ "required": [
+ "type",
+ "properties"
+ ]
},
"Pty": {
"type": "object",
@@ -8014,13 +8694,24 @@
},
"status": {
"type": "string",
- "enum": ["running", "exited"]
+ "enum": [
+ "running",
+ "exited"
+ ]
},
"pid": {
"type": "number"
}
},
- "required": ["id", "title", "command", "args", "cwd", "status", "pid"]
+ "required": [
+ "id",
+ "title",
+ "command",
+ "args",
+ "cwd",
+ "status",
+ "pid"
+ ]
},
"Event.pty.created": {
"type": "object",
@@ -8036,10 +8727,15 @@
"$ref": "#/components/schemas/Pty"
}
},
- "required": ["info"]
+ "required": [
+ "info"
+ ]
}
},
- "required": ["type", "properties"]
+ "required": [
+ "type",
+ "properties"
+ ]
},
"Event.pty.updated": {
"type": "object",
@@ -8055,10 +8751,15 @@
"$ref": "#/components/schemas/Pty"
}
},
- "required": ["info"]
+ "required": [
+ "info"
+ ]
}
},
- "required": ["type", "properties"]
+ "required": [
+ "type",
+ "properties"
+ ]
},
"Event.pty.exited": {
"type": "object",
@@ -8078,10 +8779,16 @@
"type": "number"
}
},
- "required": ["id", "exitCode"]
+ "required": [
+ "id",
+ "exitCode"
+ ]
}
},
- "required": ["type", "properties"]
+ "required": [
+ "type",
+ "properties"
+ ]
},
"Event.pty.deleted": {
"type": "object",
@@ -8098,10 +8805,15 @@
"pattern": "^pty.*"
}
},
- "required": ["id"]
+ "required": [
+ "id"
+ ]
}
},
- "required": ["type", "properties"]
+ "required": [
+ "type",
+ "properties"
+ ]
},
"Event": {
"anyOf": [
@@ -8237,7 +8949,10 @@
"$ref": "#/components/schemas/Event"
}
},
- "required": ["directory", "payload"]
+ "required": [
+ "directory",
+ "payload"
+ ]
},
"BadRequestError": {
"type": "object",
@@ -8258,7 +8973,11 @@
"const": false
}
},
- "required": ["data", "errors", "success"]
+ "required": [
+ "data",
+ "errors",
+ "success"
+ ]
},
"NotFoundError": {
"type": "object",
@@ -8274,10 +8993,15 @@
"type": "string"
}
},
- "required": ["message"]
+ "required": [
+ "message"
+ ]
}
},
- "required": ["name", "data"]
+ "required": [
+ "name",
+ "data"
+ ]
},
"KeybindsConfig": {
"description": "Custom keybind configurations",
@@ -8754,7 +9478,12 @@
"LogLevel": {
"description": "Log level",
"type": "string",
- "enum": ["DEBUG", "INFO", "WARN", "ERROR"]
+ "enum": [
+ "DEBUG",
+ "INFO",
+ "WARN",
+ "ERROR"
+ ]
},
"ServerConfig": {
"description": "Server configuration for opencode serve and web commands",
@@ -8786,7 +9515,11 @@
},
"PermissionActionConfig": {
"type": "string",
- "enum": ["ask", "allow", "deny"]
+ "enum": [
+ "ask",
+ "allow",
+ "deny"
+ ]
},
"PermissionObjectConfig": {
"type": "object",
@@ -8910,7 +9643,11 @@
},
"mode": {
"type": "string",
- "enum": ["subagent", "primary", "all"]
+ "enum": [
+ "subagent",
+ "primary",
+ "all"
+ ]
},
"hidden": {
"description": "Hide this subagent from the @ autocomplete menu (default: false, only applies to mode: subagent)",
@@ -9010,10 +9747,15 @@
"properties": {
"field": {
"type": "string",
- "enum": ["reasoning_content", "reasoning_details"]
+ "enum": [
+ "reasoning_content",
+ "reasoning_details"
+ ]
}
},
- "required": ["field"],
+ "required": [
+ "field"
+ ],
"additionalProperties": false
}
]
@@ -9049,10 +9791,16 @@
"type": "number"
}
},
- "required": ["input", "output"]
+ "required": [
+ "input",
+ "output"
+ ]
}
},
- "required": ["input", "output"]
+ "required": [
+ "input",
+ "output"
+ ]
},
"limit": {
"type": "object",
@@ -9067,7 +9815,10 @@
"type": "number"
}
},
- "required": ["context", "output"]
+ "required": [
+ "context",
+ "output"
+ ]
},
"modalities": {
"type": "object",
@@ -9076,25 +9827,44 @@
"type": "array",
"items": {
"type": "string",
- "enum": ["text", "audio", "image", "video", "pdf"]
+ "enum": [
+ "text",
+ "audio",
+ "image",
+ "video",
+ "pdf"
+ ]
}
},
"output": {
"type": "array",
"items": {
"type": "string",
- "enum": ["text", "audio", "image", "video", "pdf"]
+ "enum": [
+ "text",
+ "audio",
+ "image",
+ "video",
+ "pdf"
+ ]
}
}
},
- "required": ["input", "output"]
+ "required": [
+ "input",
+ "output"
+ ]
},
"experimental": {
"type": "boolean"
},
"status": {
"type": "string",
- "enum": ["alpha", "beta", "deprecated"]
+ "enum": [
+ "alpha",
+ "beta",
+ "deprecated"
+ ]
},
"options": {
"type": "object",
@@ -9119,7 +9889,9 @@
"type": "string"
}
},
- "required": ["npm"]
+ "required": [
+ "npm"
+ ]
},
"variants": {
"description": "Variant-specific configuration",
@@ -9228,7 +10000,10 @@
"maximum": 9007199254740991
}
},
- "required": ["type", "command"],
+ "required": [
+ "type",
+ "command"
+ ],
"additionalProperties": false
},
"McpOAuthConfig": {
@@ -9294,13 +10069,19 @@
"maximum": 9007199254740991
}
},
- "required": ["type", "url"],
+ "required": [
+ "type",
+ "url"
+ ],
"additionalProperties": false
},
"LayoutConfig": {
"description": "@deprecated Always uses stretch layout.",
"type": "string",
- "enum": ["auto", "stretch"]
+ "enum": [
+ "auto",
+ "stretch"
+ ]
},
"Config": {
"type": "object",
@@ -9337,12 +10118,17 @@
"type": "boolean"
}
},
- "required": ["enabled"]
+ "required": [
+ "enabled"
+ ]
},
"diff_style": {
"description": "Control diff rendering style: 'auto' adapts to terminal width, 'stacked' always shows single column",
"type": "string",
- "enum": ["auto", "stacked"]
+ "enum": [
+ "auto",
+ "stacked"
+ ]
}
}
},
@@ -9374,7 +10160,9 @@
"type": "boolean"
}
},
- "required": ["template"]
+ "required": [
+ "template"
+ ]
}
},
"watcher": {
@@ -9400,7 +10188,11 @@
"share": {
"description": "Control sharing behavior:'manual' allows manual sharing via commands, 'auto' enables automatic sharing, 'disabled' disables all sharing",
"type": "string",
- "enum": ["manual", "auto", "disabled"]
+ "enum": [
+ "manual",
+ "auto",
+ "disabled"
+ ]
},
"autoshare": {
"description": "@deprecated Use 'share' field instead. Share newly created sessions automatically",
@@ -9528,7 +10320,9 @@
"type": "boolean"
}
},
- "required": ["enabled"],
+ "required": [
+ "enabled"
+ ],
"additionalProperties": false
}
]
@@ -9598,7 +10392,9 @@
"const": true
}
},
- "required": ["disabled"]
+ "required": [
+ "disabled"
+ ]
},
{
"type": "object",
@@ -9635,7 +10431,9 @@
"additionalProperties": {}
}
},
- "required": ["command"]
+ "required": [
+ "command"
+ ]
}
]
}
@@ -9718,7 +10516,9 @@
}
}
},
- "required": ["command"]
+ "required": [
+ "command"
+ ]
}
}
},
@@ -9743,7 +10543,9 @@
}
}
},
- "required": ["command"]
+ "required": [
+ "command"
+ ]
}
}
}
@@ -9807,7 +10609,11 @@
"type": "string"
}
},
- "required": ["id", "url", "npm"]
+ "required": [
+ "id",
+ "url",
+ "npm"
+ ]
},
"name": {
"type": "string"
@@ -9849,7 +10655,13 @@
"type": "boolean"
}
},
- "required": ["text", "audio", "image", "video", "pdf"]
+ "required": [
+ "text",
+ "audio",
+ "image",
+ "video",
+ "pdf"
+ ]
},
"output": {
"type": "object",
@@ -9870,7 +10682,13 @@
"type": "boolean"
}
},
- "required": ["text", "audio", "image", "video", "pdf"]
+ "required": [
+ "text",
+ "audio",
+ "image",
+ "video",
+ "pdf"
+ ]
},
"interleaved": {
"anyOf": [
@@ -9882,15 +10700,28 @@
"properties": {
"field": {
"type": "string",
- "enum": ["reasoning_content", "reasoning_details"]
+ "enum": [
+ "reasoning_content",
+ "reasoning_details"
+ ]
}
},
- "required": ["field"]
+ "required": [
+ "field"
+ ]
}
]
}
},
- "required": ["temperature", "reasoning", "attachment", "toolcall", "input", "output", "interleaved"]
+ "required": [
+ "temperature",
+ "reasoning",
+ "attachment",
+ "toolcall",
+ "input",
+ "output",
+ "interleaved"
+ ]
},
"cost": {
"type": "object",
@@ -9911,7 +10742,10 @@
"type": "number"
}
},
- "required": ["read", "write"]
+ "required": [
+ "read",
+ "write"
+ ]
},
"experimentalOver200K": {
"type": "object",
@@ -9932,13 +10766,24 @@
"type": "number"
}
},
- "required": ["read", "write"]
+ "required": [
+ "read",
+ "write"
+ ]
}
},
- "required": ["input", "output", "cache"]
+ "required": [
+ "input",
+ "output",
+ "cache"
+ ]
}
},
- "required": ["input", "output", "cache"]
+ "required": [
+ "input",
+ "output",
+ "cache"
+ ]
},
"limit": {
"type": "object",
@@ -9953,11 +10798,19 @@
"type": "number"
}
},
- "required": ["context", "output"]
+ "required": [
+ "context",
+ "output"
+ ]
},
"status": {
"type": "string",
- "enum": ["alpha", "beta", "deprecated", "active"]
+ "enum": [
+ "alpha",
+ "beta",
+ "deprecated",
+ "active"
+ ]
},
"options": {
"type": "object",
@@ -10017,7 +10870,12 @@
},
"source": {
"type": "string",
- "enum": ["env", "config", "custom", "api"]
+ "enum": [
+ "env",
+ "config",
+ "custom",
+ "api"
+ ]
},
"env": {
"type": "array",
@@ -10045,7 +10903,14 @@
}
}
},
- "required": ["id", "name", "source", "env", "options", "models"]
+ "required": [
+ "id",
+ "name",
+ "source",
+ "env",
+ "options",
+ "models"
+ ]
},
"ToolIDs": {
"type": "array",
@@ -10064,7 +10929,11 @@
},
"parameters": {}
},
- "required": ["id", "description", "parameters"]
+ "required": [
+ "id",
+ "description",
+ "parameters"
+ ]
},
"ToolList": {
"type": "array",
@@ -10085,7 +10954,11 @@
"type": "string"
}
},
- "required": ["name", "branch", "directory"]
+ "required": [
+ "name",
+ "branch",
+ "directory"
+ ]
},
"WorktreeCreateInput": {
"type": "object",
@@ -10094,6 +10967,7 @@
"type": "string"
},
"startCommand": {
+ "description": "Additional startup script to run after the project's start command",
"type": "string"
}
}
@@ -10105,7 +10979,9 @@
"type": "string"
}
},
- "required": ["directory"]
+ "required": [
+ "directory"
+ ]
},
"WorktreeResetInput": {
"type": "object",
@@ -10114,7 +10990,9 @@
"type": "string"
}
},
- "required": ["directory"]
+ "required": [
+ "directory"
+ ]
},
"McpResource": {
"type": "object",
@@ -10135,7 +11013,11 @@
"type": "string"
}
},
- "required": ["name", "uri", "client"]
+ "required": [
+ "name",
+ "uri",
+ "client"
+ ]
},
"TextPartInput": {
"type": "object",
@@ -10166,7 +11048,9 @@
"type": "number"
}
},
- "required": ["start"]
+ "required": [
+ "start"
+ ]
},
"metadata": {
"type": "object",
@@ -10176,7 +11060,10 @@
"additionalProperties": {}
}
},
- "required": ["type", "text"]
+ "required": [
+ "type",
+ "text"
+ ]
},
"FilePartInput": {
"type": "object",
@@ -10201,7 +11088,11 @@
"$ref": "#/components/schemas/FilePartSource"
}
},
- "required": ["type", "mime", "url"]
+ "required": [
+ "type",
+ "mime",
+ "url"
+ ]
},
"AgentPartInput": {
"type": "object",
@@ -10233,10 +11124,17 @@
"maximum": 9007199254740991
}
},
- "required": ["value", "start", "end"]
+ "required": [
+ "value",
+ "start",
+ "end"
+ ]
}
},
- "required": ["type", "name"]
+ "required": [
+ "type",
+ "name"
+ ]
},
"SubtaskPartInput": {
"type": "object",
@@ -10267,13 +11165,21 @@
"type": "string"
}
},
- "required": ["providerID", "modelID"]
+ "required": [
+ "providerID",
+ "modelID"
+ ]
},
"command": {
"type": "string"
}
},
- "required": ["type", "prompt", "description", "agent"]
+ "required": [
+ "type",
+ "prompt",
+ "description",
+ "agent"
+ ]
},
"ProviderAuthMethod": {
"type": "object",
@@ -10294,7 +11200,10 @@
"type": "string"
}
},
- "required": ["type", "label"]
+ "required": [
+ "type",
+ "label"
+ ]
},
"ProviderAuthAuthorization": {
"type": "object",
@@ -10318,7 +11227,11 @@
"type": "string"
}
},
- "required": ["url", "method", "instructions"]
+ "required": [
+ "url",
+ "method",
+ "instructions"
+ ]
},
"Symbol": {
"type": "object",
@@ -10339,10 +11252,17 @@
"$ref": "#/components/schemas/Range"
}
},
- "required": ["uri", "range"]
+ "required": [
+ "uri",
+ "range"
+ ]
}
},
- "required": ["name", "kind", "location"]
+ "required": [
+ "name",
+ "kind",
+ "location"
+ ]
},
"FileNode": {
"type": "object",
@@ -10358,13 +11278,22 @@
},
"type": {
"type": "string",
- "enum": ["file", "directory"]
+ "enum": [
+ "file",
+ "directory"
+ ]
},
"ignored": {
"type": "boolean"
}
},
- "required": ["name", "path", "absolute", "type", "ignored"]
+ "required": [
+ "name",
+ "path",
+ "absolute",
+ "type",
+ "ignored"
+ ]
},
"FileContent": {
"type": "object",
@@ -10418,14 +11347,24 @@
}
}
},
- "required": ["oldStart", "oldLines", "newStart", "newLines", "lines"]
+ "required": [
+ "oldStart",
+ "oldLines",
+ "newStart",
+ "newLines",
+ "lines"
+ ]
}
},
"index": {
"type": "string"
}
},
- "required": ["oldFileName", "newFileName", "hunks"]
+ "required": [
+ "oldFileName",
+ "newFileName",
+ "hunks"
+ ]
},
"encoding": {
"type": "string",
@@ -10435,7 +11374,10 @@
"type": "string"
}
},
- "required": ["type", "content"]
+ "required": [
+ "type",
+ "content"
+ ]
},
"File": {
"type": "object",
@@ -10455,10 +11397,19 @@
},
"status": {
"type": "string",
- "enum": ["added", "deleted", "modified"]
+ "enum": [
+ "added",
+ "deleted",
+ "modified"
+ ]
}
},
- "required": ["path", "added", "removed", "status"]
+ "required": [
+ "path",
+ "added",
+ "removed",
+ "status"
+ ]
},
"MCPStatusConnected": {
"type": "object",
@@ -10468,7 +11419,9 @@
"const": "connected"
}
},
- "required": ["status"]
+ "required": [
+ "status"
+ ]
},
"MCPStatusDisabled": {
"type": "object",
@@ -10478,7 +11431,9 @@
"const": "disabled"
}
},
- "required": ["status"]
+ "required": [
+ "status"
+ ]
},
"MCPStatusFailed": {
"type": "object",
@@ -10491,7 +11446,10 @@
"type": "string"
}
},
- "required": ["status", "error"]
+ "required": [
+ "status",
+ "error"
+ ]
},
"MCPStatusNeedsAuth": {
"type": "object",
@@ -10501,7 +11459,9 @@
"const": "needs_auth"
}
},
- "required": ["status"]
+ "required": [
+ "status"
+ ]
},
"MCPStatusNeedsClientRegistration": {
"type": "object",
@@ -10514,7 +11474,10 @@
"type": "string"
}
},
- "required": ["status", "error"]
+ "required": [
+ "status",
+ "error"
+ ]
},
"MCPStatus": {
"anyOf": [
@@ -10554,7 +11517,13 @@
"type": "string"
}
},
- "required": ["home", "state", "config", "worktree", "directory"]
+ "required": [
+ "home",
+ "state",
+ "config",
+ "worktree",
+ "directory"
+ ]
},
"VcsInfo": {
"type": "object",
@@ -10563,7 +11532,9 @@
"type": "string"
}
},
- "required": ["branch"]
+ "required": [
+ "branch"
+ ]
},
"Command": {
"type": "object",
@@ -10603,7 +11574,11 @@
}
}
},
- "required": ["name", "template", "hints"]
+ "required": [
+ "name",
+ "template",
+ "hints"
+ ]
},
"Agent": {
"type": "object",
@@ -10616,7 +11591,11 @@
},
"mode": {
"type": "string",
- "enum": ["subagent", "primary", "all"]
+ "enum": [
+ "subagent",
+ "primary",
+ "all"
+ ]
},
"native": {
"type": "boolean"
@@ -10646,7 +11625,10 @@
"type": "string"
}
},
- "required": ["modelID", "providerID"]
+ "required": [
+ "modelID",
+ "providerID"
+ ]
},
"prompt": {
"type": "string"
@@ -10664,7 +11646,12 @@
"maximum": 9007199254740991
}
},
- "required": ["name", "mode", "permission", "options"]
+ "required": [
+ "name",
+ "mode",
+ "permission",
+ "options"
+ ]
},
"LSPStatus": {
"type": "object",
@@ -10691,7 +11678,12 @@
]
}
},
- "required": ["id", "name", "root", "status"]
+ "required": [
+ "id",
+ "name",
+ "root",
+ "status"
+ ]
},
"FormatterStatus": {
"type": "object",
@@ -10709,7 +11701,11 @@
"type": "boolean"
}
},
- "required": ["name", "extensions", "enabled"]
+ "required": [
+ "name",
+ "extensions",
+ "enabled"
+ ]
},
"OAuth": {
"type": "object",
@@ -10734,7 +11730,12 @@
"type": "string"
}
},
- "required": ["type", "refresh", "access", "expires"]
+ "required": [
+ "type",
+ "refresh",
+ "access",
+ "expires"
+ ]
},
"ApiAuth": {
"type": "object",
@@ -10747,7 +11748,10 @@
"type": "string"
}
},
- "required": ["type", "key"]
+ "required": [
+ "type",
+ "key"
+ ]
},
"WellKnownAuth": {
"type": "object",
@@ -10763,7 +11767,11 @@
"type": "string"
}
},
- "required": ["type", "key", "token"]
+ "required": [
+ "type",
+ "key",
+ "token"
+ ]
},
"Auth": {
"anyOf": [
@@ -10780,4 +11788,4 @@
}
}
}
-}
+} \ No newline at end of file