diff --git a/packages/opencode/src/cli/cmd/tui/app.tsx b/packages/opencode/src/cli/cmd/tui/app.tsx
index 97c910a47d4..b67fe3932b4 100644
--- a/packages/opencode/src/cli/cmd/tui/app.tsx
+++ b/packages/opencode/src/cli/cmd/tui/app.tsx
@@ -565,6 +565,19 @@ function App() {
},
category: "System",
},
+ {
+ title: kv.get("agent_timestamps", "hide") === "show" ? "Hide agent timestamps" : "Show agent timestamps",
+ value: "session.toggle.agent_timestamps",
+ category: "System",
+ slash: {
+ name: "agent-timestamps",
+ },
+ onSelect: (dialog) => {
+ const current = kv.get("agent_timestamps", "hide")
+ kv.set("agent_timestamps", current === "show" ? "hide" : "show")
+ dialog.clear()
+ },
+ },
{
title: "Exit the app",
value: "app.exit",
diff --git a/packages/opencode/src/cli/cmd/tui/routes/session/dialog-message.tsx b/packages/opencode/src/cli/cmd/tui/routes/session/dialog-message.tsx
index ff17b5567eb..712648071ad 100644
--- a/packages/opencode/src/cli/cmd/tui/routes/session/dialog-message.tsx
+++ b/packages/opencode/src/cli/cmd/tui/routes/session/dialog-message.tsx
@@ -71,6 +71,37 @@ export function DialogMessage(props: {
dialog.clear()
},
},
+ {
+ title: "Rewind",
+ value: "session.rewind",
+ description: "remove selected and later messages",
+ onSelect: async (dialog) => {
+ const msg = message()
+ if (!msg) return
+
+ if (props.setPrompt) {
+ const parts = sync.data.part[msg.id]
+ const promptInfo = parts.reduce(
+ (agg, part) => {
+ if (part.type === "text") {
+ if (!part.synthetic) agg.input += part.text
+ }
+ if (part.type === "file") agg.parts.push(part)
+ return agg
+ },
+ { input: "", parts: [] as PromptInfo["parts"] },
+ )
+ props.setPrompt(promptInfo)
+ }
+
+ await sdk.client.session.rewind({
+ sessionID: props.sessionID,
+ messageID: msg.id,
+ })
+
+ dialog.clear()
+ },
+ },
{
title: "Fork",
value: "session.fork",
diff --git a/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx b/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx
index f20267e0820..cf2251a8423 100644
--- a/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx
+++ b/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx
@@ -98,6 +98,7 @@ const context = createContext<{
conceal: () => boolean
showThinking: () => boolean
showTimestamps: () => boolean
+ showAgentTimestamps: () => boolean
showDetails: () => boolean
showGenericToolOutput: () => boolean
diffWrapMode: () => "word" | "none"
@@ -150,6 +151,7 @@ export function Session() {
const [conceal, setConceal] = createSignal(true)
const [showThinking, setShowThinking] = kv.signal("thinking_visibility", true)
const [timestamps, setTimestamps] = kv.signal<"hide" | "show">("timestamps", "hide")
+ const [agentTimestamps, setAgentTimestamps] = kv.signal<"hide" | "show">("agent_timestamps", "hide")
const [showDetails, setShowDetails] = kv.signal("tool_details_visibility", true)
const [showAssistantMetadata, setShowAssistantMetadata] = kv.signal("assistant_metadata_visibility", true)
const [showScrollbar, setShowScrollbar] = kv.signal("scrollbar_visible", false)
@@ -166,6 +168,7 @@ export function Session() {
return false
})
const showTimestamps = createMemo(() => timestamps() === "show")
+ const showAgentTimestamps = createMemo(() => agentTimestamps() === "show")
const contentWidth = createMemo(() => dimensions().width - (sidebarVisible() ? 42 : 0) - 4)
const scrollAcceleration = createMemo(() => {
@@ -562,6 +565,18 @@ export function Session() {
dialog.clear()
},
},
+ {
+ title: showAgentTimestamps() ? "Hide agent timestamps" : "Show agent timestamps",
+ value: "session.toggle.agent_timestamps",
+ category: "Session",
+ slash: {
+ name: "agent-timestamps",
+ },
+ onSelect: (dialog) => {
+ setAgentTimestamps((prev) => (prev === "show" ? "hide" : "show"))
+ dialog.clear()
+ },
+ },
{
title: showThinking() ? "Hide thinking" : "Show thinking",
value: "session.toggle.thinking",
@@ -987,6 +1002,7 @@ export function Session() {
conceal,
showThinking,
showTimestamps,
+ showAgentTimestamps,
showDetails,
showGenericToolOutput,
diffWrapMode,
@@ -1277,6 +1293,7 @@ function AssistantMessage(props: { message: AssistantMessage; parts: Part[]; las
const local = useLocal()
const { theme } = useTheme()
const sync = useSync()
+ const ctx = use()
const messages = createMemo(() => sync.data.message[props.message.sessionID] ?? [])
const final = createMemo(() => {
@@ -1338,6 +1355,9 @@ function AssistantMessage(props: { message: AssistantMessage; parts: Part[]; las
{" "}
{Locale.titlecase(props.message.mode)}
· {props.message.modelID}
+
+ · {Locale.todayTimeOrDateTime(props.message.time.created)}
+
· {Locale.duration(duration())}
diff --git a/packages/opencode/src/server/routes/session.ts b/packages/opencode/src/server/routes/session.ts
index 12938aeaba0..aaec42a2210 100644
--- a/packages/opencode/src/server/routes/session.ts
+++ b/packages/opencode/src/server/routes/session.ts
@@ -320,6 +320,41 @@ export const SessionRoutes = lazy(() =>
return c.json(true)
},
)
+ .post(
+ "/:sessionID/rewind",
+ describeRoute({
+ summary: "Rewind session",
+ description:
+ "Rewind a session to a specific message, removing all messages from that point without reverting file changes.",
+ operationId: "session.rewind",
+ responses: {
+ 200: {
+ description: "Rewound session",
+ content: {
+ "application/json": {
+ schema: resolver(Session.Info),
+ },
+ },
+ },
+ ...errors(400, 404),
+ },
+ }),
+ validator(
+ "param",
+ z.object({
+ sessionID: z.string(),
+ }),
+ ),
+ validator("json", Session.rewind.schema.omit({ sessionID: true })),
+ async (c) => {
+ const sessionID = c.req.valid("param").sessionID
+ const session = await Session.rewind({
+ sessionID,
+ ...c.req.valid("json"),
+ })
+ return c.json(session)
+ },
+ )
.post(
"/:sessionID/fork",
describeRoute({
diff --git a/packages/opencode/src/session/index.ts b/packages/opencode/src/session/index.ts
index 22de477f8d1..872b360b376 100644
--- a/packages/opencode/src/session/index.ts
+++ b/packages/opencode/src/session/index.ts
@@ -227,6 +227,27 @@ export namespace Session {
},
)
+ export const rewind = fn(
+ z.object({
+ sessionID: Identifier.schema("session"),
+ messageID: Identifier.schema("message"),
+ }),
+ async (input) => {
+ SessionPrompt.assertNotBusy(input.sessionID)
+ const msgs = await messages({ sessionID: input.sessionID })
+ for (const msg of msgs) {
+ if (msg.info.id >= input.messageID) {
+ Database.use((db) => db.delete(MessageTable).where(eq(MessageTable.id, msg.info.id)).run())
+ Bus.publish(MessageV2.Event.Removed, {
+ sessionID: input.sessionID,
+ messageID: msg.info.id,
+ })
+ }
+ }
+ return get(input.sessionID)
+ },
+ )
+
export const fork = fn(
z.object({
sessionID: Identifier.schema("session"),
diff --git a/packages/sdk/js/openapi.json b/packages/sdk/js/openapi.json
new file mode 100644
index 00000000000..8ec09ebe4bc
--- /dev/null
+++ b/packages/sdk/js/openapi.json
@@ -0,0 +1,12219 @@
+{
+ "openapi": "3.1.1",
+ "info": {
+ "title": "opencode",
+ "description": "opencode api",
+ "version": "1.0.0"
+ },
+ "paths": {
+ "/global/health": {
+ "get": {
+ "operationId": "global.health",
+ "summary": "Get health",
+ "description": "Get health information about the OpenCode server.",
+ "responses": {
+ "200": {
+ "description": "Health information",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "healthy": {
+ "type": "boolean",
+ "const": true
+ },
+ "version": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "healthy",
+ "version"
+ ]
+ }
+ }
+ }
+ }
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.global.health({\n ...\n})"
+ }
+ ]
+ }
+ },
+ "/global/event": {
+ "get": {
+ "operationId": "global.event",
+ "summary": "Get global events",
+ "description": "Subscribe to global events from the OpenCode system using server-sent events.",
+ "responses": {
+ "200": {
+ "description": "Event stream",
+ "content": {
+ "text/event-stream": {
+ "schema": {
+ "$ref": "#/components/schemas/GlobalEvent"
+ }
+ }
+ }
+ }
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.global.event({\n ...\n})"
+ }
+ ]
+ }
+ },
+ "/global/config": {
+ "get": {
+ "operationId": "global.config.get",
+ "summary": "Get global configuration",
+ "description": "Retrieve the current global OpenCode configuration settings and preferences.",
+ "responses": {
+ "200": {
+ "description": "Get global config info",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/Config"
+ }
+ }
+ }
+ }
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.global.config.get({\n ...\n})"
+ }
+ ]
+ },
+ "patch": {
+ "operationId": "global.config.update",
+ "summary": "Update global configuration",
+ "description": "Update global OpenCode configuration settings and preferences.",
+ "responses": {
+ "200": {
+ "description": "Successfully updated global config",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/Config"
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "Bad request",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/BadRequestError"
+ }
+ }
+ }
+ }
+ },
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/Config"
+ }
+ }
+ }
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.global.config.update({\n ...\n})"
+ }
+ ]
+ }
+ },
+ "/global/dispose": {
+ "post": {
+ "operationId": "global.dispose",
+ "summary": "Dispose instance",
+ "description": "Clean up and dispose all OpenCode instances, releasing all resources.",
+ "responses": {
+ "200": {
+ "description": "Global disposed",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "boolean"
+ }
+ }
+ }
+ }
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.global.dispose({\n ...\n})"
+ }
+ ]
+ }
+ },
+ "/auth/{providerID}": {
+ "put": {
+ "operationId": "auth.set",
+ "summary": "Set auth credentials",
+ "description": "Set authentication credentials",
+ "responses": {
+ "200": {
+ "description": "Successfully set authentication credentials",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "boolean"
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "Bad request",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/BadRequestError"
+ }
+ }
+ }
+ }
+ },
+ "parameters": [
+ {
+ "in": "path",
+ "name": "providerID",
+ "schema": {
+ "type": "string"
+ },
+ "required": true
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/Auth"
+ }
+ }
+ }
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.auth.set({\n ...\n})"
+ }
+ ]
+ },
+ "delete": {
+ "operationId": "auth.remove",
+ "summary": "Remove auth credentials",
+ "description": "Remove authentication credentials",
+ "responses": {
+ "200": {
+ "description": "Successfully removed authentication credentials",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "boolean"
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "Bad request",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/BadRequestError"
+ }
+ }
+ }
+ }
+ },
+ "parameters": [
+ {
+ "in": "path",
+ "name": "providerID",
+ "schema": {
+ "type": "string"
+ },
+ "required": true
+ }
+ ],
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.auth.remove({\n ...\n})"
+ }
+ ]
+ }
+ },
+ "/project": {
+ "get": {
+ "operationId": "project.list",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "directory",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "summary": "List all projects",
+ "description": "Get a list of projects that have been opened with OpenCode.",
+ "responses": {
+ "200": {
+ "description": "List of projects",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/Project"
+ }
+ }
+ }
+ }
+ }
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.project.list({\n ...\n})"
+ }
+ ]
+ }
+ },
+ "/project/current": {
+ "get": {
+ "operationId": "project.current",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "directory",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "summary": "Get current project",
+ "description": "Retrieve the currently active project that OpenCode is working with.",
+ "responses": {
+ "200": {
+ "description": "Current project information",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/Project"
+ }
+ }
+ }
+ }
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.project.current({\n ...\n})"
+ }
+ ]
+ }
+ },
+ "/project/{projectID}": {
+ "patch": {
+ "operationId": "project.update",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "directory",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "in": "path",
+ "name": "projectID",
+ "schema": {
+ "type": "string"
+ },
+ "required": true
+ }
+ ],
+ "summary": "Update project",
+ "description": "Update project properties such as name, icon, and commands.",
+ "responses": {
+ "200": {
+ "description": "Updated project information",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/Project"
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "Bad request",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/BadRequestError"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Not found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/NotFoundError"
+ }
+ }
+ }
+ }
+ },
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "icon": {
+ "type": "object",
+ "properties": {
+ "url": {
+ "type": "string"
+ },
+ "override": {
+ "type": "string"
+ },
+ "color": {
+ "type": "string"
+ }
+ }
+ },
+ "commands": {
+ "type": "object",
+ "properties": {
+ "start": {
+ "description": "Startup script to run when creating a new workspace (worktree)",
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.project.update({\n ...\n})"
+ }
+ ]
+ }
+ },
+ "/pty": {
+ "get": {
+ "operationId": "pty.list",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "directory",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "summary": "List PTY sessions",
+ "description": "Get a list of all active pseudo-terminal (PTY) sessions managed by OpenCode.",
+ "responses": {
+ "200": {
+ "description": "List of sessions",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/Pty"
+ }
+ }
+ }
+ }
+ }
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.pty.list({\n ...\n})"
+ }
+ ]
+ },
+ "post": {
+ "operationId": "pty.create",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "directory",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "summary": "Create PTY session",
+ "description": "Create a new pseudo-terminal (PTY) session for running shell commands and processes.",
+ "responses": {
+ "200": {
+ "description": "Created session",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/Pty"
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "Bad request",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/BadRequestError"
+ }
+ }
+ }
+ }
+ },
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "command": {
+ "type": "string"
+ },
+ "args": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "cwd": {
+ "type": "string"
+ },
+ "title": {
+ "type": "string"
+ },
+ "env": {
+ "type": "object",
+ "propertyNames": {
+ "type": "string"
+ },
+ "additionalProperties": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.pty.create({\n ...\n})"
+ }
+ ]
+ }
+ },
+ "/pty/{ptyID}": {
+ "get": {
+ "operationId": "pty.get",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "directory",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "in": "path",
+ "name": "ptyID",
+ "schema": {
+ "type": "string"
+ },
+ "required": true
+ }
+ ],
+ "summary": "Get PTY session",
+ "description": "Retrieve detailed information about a specific pseudo-terminal (PTY) session.",
+ "responses": {
+ "200": {
+ "description": "Session info",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/Pty"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Not found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/NotFoundError"
+ }
+ }
+ }
+ }
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.pty.get({\n ...\n})"
+ }
+ ]
+ },
+ "put": {
+ "operationId": "pty.update",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "directory",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "in": "path",
+ "name": "ptyID",
+ "schema": {
+ "type": "string"
+ },
+ "required": true
+ }
+ ],
+ "summary": "Update PTY session",
+ "description": "Update properties of an existing pseudo-terminal (PTY) session.",
+ "responses": {
+ "200": {
+ "description": "Updated session",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/Pty"
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "Bad request",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/BadRequestError"
+ }
+ }
+ }
+ }
+ },
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "title": {
+ "type": "string"
+ },
+ "size": {
+ "type": "object",
+ "properties": {
+ "rows": {
+ "type": "number"
+ },
+ "cols": {
+ "type": "number"
+ }
+ },
+ "required": [
+ "rows",
+ "cols"
+ ]
+ }
+ }
+ }
+ }
+ }
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.pty.update({\n ...\n})"
+ }
+ ]
+ },
+ "delete": {
+ "operationId": "pty.remove",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "directory",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "in": "path",
+ "name": "ptyID",
+ "schema": {
+ "type": "string"
+ },
+ "required": true
+ }
+ ],
+ "summary": "Remove PTY session",
+ "description": "Remove and terminate a specific pseudo-terminal (PTY) session.",
+ "responses": {
+ "200": {
+ "description": "Session removed",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "boolean"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Not found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/NotFoundError"
+ }
+ }
+ }
+ }
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.pty.remove({\n ...\n})"
+ }
+ ]
+ }
+ },
+ "/pty/{ptyID}/connect": {
+ "get": {
+ "operationId": "pty.connect",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "directory",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "in": "path",
+ "name": "ptyID",
+ "schema": {
+ "type": "string"
+ },
+ "required": true
+ }
+ ],
+ "summary": "Connect to PTY session",
+ "description": "Establish a WebSocket connection to interact with a pseudo-terminal (PTY) session in real-time.",
+ "responses": {
+ "200": {
+ "description": "Connected session",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "boolean"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Not found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/NotFoundError"
+ }
+ }
+ }
+ }
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.pty.connect({\n ...\n})"
+ }
+ ]
+ }
+ },
+ "/config": {
+ "get": {
+ "operationId": "config.get",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "directory",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "summary": "Get configuration",
+ "description": "Retrieve the current OpenCode configuration settings and preferences.",
+ "responses": {
+ "200": {
+ "description": "Get config info",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/Config"
+ }
+ }
+ }
+ }
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.config.get({\n ...\n})"
+ }
+ ]
+ },
+ "patch": {
+ "operationId": "config.update",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "directory",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "summary": "Update configuration",
+ "description": "Update OpenCode configuration settings and preferences.",
+ "responses": {
+ "200": {
+ "description": "Successfully updated config",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/Config"
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "Bad request",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/BadRequestError"
+ }
+ }
+ }
+ }
+ },
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/Config"
+ }
+ }
+ }
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.config.update({\n ...\n})"
+ }
+ ]
+ }
+ },
+ "/config/providers": {
+ "get": {
+ "operationId": "config.providers",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "directory",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "summary": "List config providers",
+ "description": "Get a list of all configured AI providers and their default models.",
+ "responses": {
+ "200": {
+ "description": "List of providers",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "providers": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/Provider"
+ }
+ },
+ "default": {
+ "type": "object",
+ "propertyNames": {
+ "type": "string"
+ },
+ "additionalProperties": {
+ "type": "string"
+ }
+ }
+ },
+ "required": [
+ "providers",
+ "default"
+ ]
+ }
+ }
+ }
+ }
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.config.providers({\n ...\n})"
+ }
+ ]
+ }
+ },
+ "/experimental/tool/ids": {
+ "get": {
+ "operationId": "tool.ids",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "directory",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "summary": "List tool IDs",
+ "description": "Get a list of all available tool IDs, including both built-in tools and dynamically registered tools.",
+ "responses": {
+ "200": {
+ "description": "Tool IDs",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ToolIDs"
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "Bad request",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/BadRequestError"
+ }
+ }
+ }
+ }
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.tool.ids({\n ...\n})"
+ }
+ ]
+ }
+ },
+ "/experimental/tool": {
+ "get": {
+ "operationId": "tool.list",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "directory",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "in": "query",
+ "name": "provider",
+ "schema": {
+ "type": "string"
+ },
+ "required": true
+ },
+ {
+ "in": "query",
+ "name": "model",
+ "schema": {
+ "type": "string"
+ },
+ "required": true
+ }
+ ],
+ "summary": "List tools",
+ "description": "Get a list of available tools with their JSON schema parameters for a specific provider and model combination.",
+ "responses": {
+ "200": {
+ "description": "Tools",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ToolList"
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "Bad request",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/BadRequestError"
+ }
+ }
+ }
+ }
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.tool.list({\n ...\n})"
+ }
+ ]
+ }
+ },
+ "/experimental/worktree": {
+ "post": {
+ "operationId": "worktree.create",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "directory",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "summary": "Create worktree",
+ "description": "Create a new git worktree for the current project and run any configured startup scripts.",
+ "responses": {
+ "200": {
+ "description": "Worktree created",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/Worktree"
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "Bad request",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/BadRequestError"
+ }
+ }
+ }
+ }
+ },
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/WorktreeCreateInput"
+ }
+ }
+ }
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.worktree.create({\n ...\n})"
+ }
+ ]
+ },
+ "get": {
+ "operationId": "worktree.list",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "directory",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "summary": "List worktrees",
+ "description": "List all sandbox worktrees for the current project.",
+ "responses": {
+ "200": {
+ "description": "List of worktree directories",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.worktree.list({\n ...\n})"
+ }
+ ]
+ },
+ "delete": {
+ "operationId": "worktree.remove",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "directory",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "summary": "Remove worktree",
+ "description": "Remove a git worktree and delete its branch.",
+ "responses": {
+ "200": {
+ "description": "Worktree removed",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "boolean"
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "Bad request",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/BadRequestError"
+ }
+ }
+ }
+ }
+ },
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/WorktreeRemoveInput"
+ }
+ }
+ }
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.worktree.remove({\n ...\n})"
+ }
+ ]
+ }
+ },
+ "/experimental/worktree/reset": {
+ "post": {
+ "operationId": "worktree.reset",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "directory",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "summary": "Reset worktree",
+ "description": "Reset a worktree branch to the primary default branch.",
+ "responses": {
+ "200": {
+ "description": "Worktree reset",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "boolean"
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "Bad request",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/BadRequestError"
+ }
+ }
+ }
+ }
+ },
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/WorktreeResetInput"
+ }
+ }
+ }
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.worktree.reset({\n ...\n})"
+ }
+ ]
+ }
+ },
+ "/experimental/resource": {
+ "get": {
+ "operationId": "experimental.resource.list",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "directory",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "summary": "Get MCP resources",
+ "description": "Get all available MCP resources from connected servers. Optionally filter by name.",
+ "responses": {
+ "200": {
+ "description": "MCP resources",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "propertyNames": {
+ "type": "string"
+ },
+ "additionalProperties": {
+ "$ref": "#/components/schemas/McpResource"
+ }
+ }
+ }
+ }
+ }
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.experimental.resource.list({\n ...\n})"
+ }
+ ]
+ }
+ },
+ "/session": {
+ "get": {
+ "operationId": "session.list",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "directory",
+ "schema": {
+ "type": "string"
+ },
+ "description": "Filter sessions by project directory"
+ },
+ {
+ "in": "query",
+ "name": "roots",
+ "schema": {
+ "type": "boolean"
+ },
+ "description": "Only return root sessions (no parentID)"
+ },
+ {
+ "in": "query",
+ "name": "start",
+ "schema": {
+ "type": "number"
+ },
+ "description": "Filter sessions updated on or after this timestamp (milliseconds since epoch)"
+ },
+ {
+ "in": "query",
+ "name": "search",
+ "schema": {
+ "type": "string"
+ },
+ "description": "Filter sessions by title (case-insensitive)"
+ },
+ {
+ "in": "query",
+ "name": "limit",
+ "schema": {
+ "type": "number"
+ },
+ "description": "Maximum number of sessions to return"
+ }
+ ],
+ "summary": "List sessions",
+ "description": "Get a list of all OpenCode sessions, sorted by most recently updated.",
+ "responses": {
+ "200": {
+ "description": "List of sessions",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/Session"
+ }
+ }
+ }
+ }
+ }
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.session.list({\n ...\n})"
+ }
+ ]
+ },
+ "post": {
+ "operationId": "session.create",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "directory",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "summary": "Create session",
+ "description": "Create a new OpenCode session for interacting with AI assistants and managing conversations.",
+ "responses": {
+ "200": {
+ "description": "Successfully created session",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/Session"
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "Bad request",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/BadRequestError"
+ }
+ }
+ }
+ }
+ },
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "parentID": {
+ "type": "string",
+ "pattern": "^ses.*"
+ },
+ "title": {
+ "type": "string"
+ },
+ "permission": {
+ "$ref": "#/components/schemas/PermissionRuleset"
+ }
+ }
+ }
+ }
+ }
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.session.create({\n ...\n})"
+ }
+ ]
+ }
+ },
+ "/session/status": {
+ "get": {
+ "operationId": "session.status",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "directory",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "summary": "Get session status",
+ "description": "Retrieve the current status of all sessions, including active, idle, and completed states.",
+ "responses": {
+ "200": {
+ "description": "Get session status",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "propertyNames": {
+ "type": "string"
+ },
+ "additionalProperties": {
+ "$ref": "#/components/schemas/SessionStatus"
+ }
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "Bad request",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/BadRequestError"
+ }
+ }
+ }
+ }
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.session.status({\n ...\n})"
+ }
+ ]
+ }
+ },
+ "/session/{sessionID}": {
+ "get": {
+ "operationId": "session.get",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "directory",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "in": "path",
+ "name": "sessionID",
+ "schema": {
+ "type": "string",
+ "pattern": "^ses.*"
+ },
+ "required": true
+ }
+ ],
+ "summary": "Get session",
+ "description": "Retrieve detailed information about a specific OpenCode session.",
+ "tags": [
+ "Session"
+ ],
+ "responses": {
+ "200": {
+ "description": "Get session",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/Session"
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "Bad request",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/BadRequestError"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Not found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/NotFoundError"
+ }
+ }
+ }
+ }
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.session.get({\n ...\n})"
+ }
+ ]
+ },
+ "delete": {
+ "operationId": "session.delete",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "directory",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "in": "path",
+ "name": "sessionID",
+ "schema": {
+ "type": "string",
+ "pattern": "^ses.*"
+ },
+ "required": true
+ }
+ ],
+ "summary": "Delete session",
+ "description": "Delete a session and permanently remove all associated data, including messages and history.",
+ "responses": {
+ "200": {
+ "description": "Successfully deleted session",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "boolean"
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "Bad request",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/BadRequestError"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Not found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/NotFoundError"
+ }
+ }
+ }
+ }
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.session.delete({\n ...\n})"
+ }
+ ]
+ },
+ "patch": {
+ "operationId": "session.update",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "directory",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "in": "path",
+ "name": "sessionID",
+ "schema": {
+ "type": "string"
+ },
+ "required": true
+ }
+ ],
+ "summary": "Update session",
+ "description": "Update properties of an existing session, such as title or other metadata.",
+ "responses": {
+ "200": {
+ "description": "Successfully updated session",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/Session"
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "Bad request",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/BadRequestError"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Not found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/NotFoundError"
+ }
+ }
+ }
+ }
+ },
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "title": {
+ "type": "string"
+ },
+ "time": {
+ "type": "object",
+ "properties": {
+ "archived": {
+ "type": "number"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.session.update({\n ...\n})"
+ }
+ ]
+ }
+ },
+ "/session/{sessionID}/children": {
+ "get": {
+ "operationId": "session.children",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "directory",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "in": "path",
+ "name": "sessionID",
+ "schema": {
+ "type": "string",
+ "pattern": "^ses.*"
+ },
+ "required": true
+ }
+ ],
+ "summary": "Get session children",
+ "tags": [
+ "Session"
+ ],
+ "description": "Retrieve all child sessions that were forked from the specified parent session.",
+ "responses": {
+ "200": {
+ "description": "List of children",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/Session"
+ }
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "Bad request",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/BadRequestError"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Not found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/NotFoundError"
+ }
+ }
+ }
+ }
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.session.children({\n ...\n})"
+ }
+ ]
+ }
+ },
+ "/session/{sessionID}/todo": {
+ "get": {
+ "operationId": "session.todo",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "directory",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "in": "path",
+ "name": "sessionID",
+ "schema": {
+ "type": "string"
+ },
+ "required": true,
+ "description": "Session ID"
+ }
+ ],
+ "summary": "Get session todos",
+ "description": "Retrieve the todo list associated with a specific session, showing tasks and action items.",
+ "responses": {
+ "200": {
+ "description": "Todo list",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/Todo"
+ }
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "Bad request",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/BadRequestError"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Not found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/NotFoundError"
+ }
+ }
+ }
+ }
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.session.todo({\n ...\n})"
+ }
+ ]
+ }
+ },
+ "/session/{sessionID}/init": {
+ "post": {
+ "operationId": "session.init",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "directory",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "in": "path",
+ "name": "sessionID",
+ "schema": {
+ "type": "string"
+ },
+ "required": true,
+ "description": "Session ID"
+ }
+ ],
+ "summary": "Initialize session",
+ "description": "Analyze the current application and create an AGENTS.md file with project-specific agent configurations.",
+ "responses": {
+ "200": {
+ "description": "200",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "boolean"
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "Bad request",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/BadRequestError"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Not found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/NotFoundError"
+ }
+ }
+ }
+ }
+ },
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "modelID": {
+ "type": "string"
+ },
+ "providerID": {
+ "type": "string"
+ },
+ "messageID": {
+ "type": "string",
+ "pattern": "^msg.*"
+ }
+ },
+ "required": [
+ "modelID",
+ "providerID",
+ "messageID"
+ ]
+ }
+ }
+ }
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.session.init({\n ...\n})"
+ }
+ ]
+ }
+ },
+ "/session/{sessionID}/rewind": {
+ "post": {
+ "operationId": "session.rewind",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "directory",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "in": "path",
+ "name": "sessionID",
+ "schema": {
+ "type": "string"
+ },
+ "required": true
+ }
+ ],
+ "summary": "Rewind session",
+ "description": "Rewind a session to a specific message, removing all messages from that point without reverting file changes.",
+ "responses": {
+ "200": {
+ "description": "Rewound session",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/Session"
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "Bad request",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/BadRequestError"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Not found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/NotFoundError"
+ }
+ }
+ }
+ }
+ },
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "messageID": {
+ "type": "string",
+ "pattern": "^msg.*"
+ }
+ },
+ "required": [
+ "messageID"
+ ]
+ }
+ }
+ }
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.session.rewind({\n ...\n})"
+ }
+ ]
+ }
+ },
+ "/session/{sessionID}/fork": {
+ "post": {
+ "operationId": "session.fork",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "directory",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "in": "path",
+ "name": "sessionID",
+ "schema": {
+ "type": "string",
+ "pattern": "^ses.*"
+ },
+ "required": true
+ }
+ ],
+ "summary": "Fork session",
+ "description": "Create a new session by forking an existing session at a specific message point.",
+ "responses": {
+ "200": {
+ "description": "200",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/Session"
+ }
+ }
+ }
+ }
+ },
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "messageID": {
+ "type": "string",
+ "pattern": "^msg.*"
+ }
+ }
+ }
+ }
+ }
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.session.fork({\n ...\n})"
+ }
+ ]
+ }
+ },
+ "/session/{sessionID}/abort": {
+ "post": {
+ "operationId": "session.abort",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "directory",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "in": "path",
+ "name": "sessionID",
+ "schema": {
+ "type": "string"
+ },
+ "required": true
+ }
+ ],
+ "summary": "Abort session",
+ "description": "Abort an active session and stop any ongoing AI processing or command execution.",
+ "responses": {
+ "200": {
+ "description": "Aborted session",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "boolean"
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "Bad request",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/BadRequestError"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Not found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/NotFoundError"
+ }
+ }
+ }
+ }
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.session.abort({\n ...\n})"
+ }
+ ]
+ }
+ },
+ "/session/{sessionID}/share": {
+ "post": {
+ "operationId": "session.share",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "directory",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "in": "path",
+ "name": "sessionID",
+ "schema": {
+ "type": "string"
+ },
+ "required": true
+ }
+ ],
+ "summary": "Share session",
+ "description": "Create a shareable link for a session, allowing others to view the conversation.",
+ "responses": {
+ "200": {
+ "description": "Successfully shared session",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/Session"
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "Bad request",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/BadRequestError"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Not found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/NotFoundError"
+ }
+ }
+ }
+ }
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.session.share({\n ...\n})"
+ }
+ ]
+ },
+ "delete": {
+ "operationId": "session.unshare",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "directory",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "in": "path",
+ "name": "sessionID",
+ "schema": {
+ "type": "string",
+ "pattern": "^ses.*"
+ },
+ "required": true
+ }
+ ],
+ "summary": "Unshare session",
+ "description": "Remove the shareable link for a session, making it private again.",
+ "responses": {
+ "200": {
+ "description": "Successfully unshared session",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/Session"
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "Bad request",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/BadRequestError"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Not found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/NotFoundError"
+ }
+ }
+ }
+ }
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.session.unshare({\n ...\n})"
+ }
+ ]
+ }
+ },
+ "/session/{sessionID}/diff": {
+ "get": {
+ "operationId": "session.diff",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "directory",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "in": "path",
+ "name": "sessionID",
+ "schema": {
+ "type": "string",
+ "pattern": "^ses.*"
+ },
+ "required": true
+ },
+ {
+ "in": "query",
+ "name": "messageID",
+ "schema": {
+ "type": "string",
+ "pattern": "^msg.*"
+ }
+ }
+ ],
+ "summary": "Get message diff",
+ "description": "Get the file changes (diff) that resulted from a specific user message in the session.",
+ "responses": {
+ "200": {
+ "description": "Successfully retrieved diff",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/FileDiff"
+ }
+ }
+ }
+ }
+ }
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.session.diff({\n ...\n})"
+ }
+ ]
+ }
+ },
+ "/session/{sessionID}/summarize": {
+ "post": {
+ "operationId": "session.summarize",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "directory",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "in": "path",
+ "name": "sessionID",
+ "schema": {
+ "type": "string"
+ },
+ "required": true,
+ "description": "Session ID"
+ }
+ ],
+ "summary": "Summarize session",
+ "description": "Generate a concise summary of the session using AI compaction to preserve key information.",
+ "responses": {
+ "200": {
+ "description": "Summarized session",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "boolean"
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "Bad request",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/BadRequestError"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Not found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/NotFoundError"
+ }
+ }
+ }
+ }
+ },
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "providerID": {
+ "type": "string"
+ },
+ "modelID": {
+ "type": "string"
+ },
+ "auto": {
+ "default": false,
+ "type": "boolean"
+ }
+ },
+ "required": [
+ "providerID",
+ "modelID"
+ ]
+ }
+ }
+ }
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.session.summarize({\n ...\n})"
+ }
+ ]
+ }
+ },
+ "/session/{sessionID}/message": {
+ "get": {
+ "operationId": "session.messages",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "directory",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "in": "path",
+ "name": "sessionID",
+ "schema": {
+ "type": "string"
+ },
+ "required": true,
+ "description": "Session ID"
+ },
+ {
+ "in": "query",
+ "name": "limit",
+ "schema": {
+ "type": "number"
+ }
+ }
+ ],
+ "summary": "Get session messages",
+ "description": "Retrieve all messages in a session, including user prompts and AI responses.",
+ "responses": {
+ "200": {
+ "description": "List of messages",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "info": {
+ "$ref": "#/components/schemas/Message"
+ },
+ "parts": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/Part"
+ }
+ }
+ },
+ "required": [
+ "info",
+ "parts"
+ ]
+ }
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "Bad request",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/BadRequestError"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Not found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/NotFoundError"
+ }
+ }
+ }
+ }
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.session.messages({\n ...\n})"
+ }
+ ]
+ },
+ "post": {
+ "operationId": "session.prompt",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "directory",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "in": "path",
+ "name": "sessionID",
+ "schema": {
+ "type": "string"
+ },
+ "required": true,
+ "description": "Session ID"
+ }
+ ],
+ "summary": "Send message",
+ "description": "Create and send a new message to a session, streaming the AI response.",
+ "responses": {
+ "200": {
+ "description": "Created message",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "info": {
+ "$ref": "#/components/schemas/AssistantMessage"
+ },
+ "parts": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/Part"
+ }
+ }
+ },
+ "required": [
+ "info",
+ "parts"
+ ]
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "Bad request",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/BadRequestError"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Not found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/NotFoundError"
+ }
+ }
+ }
+ }
+ },
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "messageID": {
+ "type": "string",
+ "pattern": "^msg.*"
+ },
+ "model": {
+ "type": "object",
+ "properties": {
+ "providerID": {
+ "type": "string"
+ },
+ "modelID": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "providerID",
+ "modelID"
+ ]
+ },
+ "agent": {
+ "type": "string"
+ },
+ "noReply": {
+ "type": "boolean"
+ },
+ "tools": {
+ "description": "@deprecated tools and permissions have been merged, you can set permissions on the session itself now",
+ "type": "object",
+ "propertyNames": {
+ "type": "string"
+ },
+ "additionalProperties": {
+ "type": "boolean"
+ }
+ },
+ "format": {
+ "$ref": "#/components/schemas/OutputFormat"
+ },
+ "system": {
+ "type": "string"
+ },
+ "variant": {
+ "type": "string"
+ },
+ "parts": {
+ "type": "array",
+ "items": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/TextPartInput"
+ },
+ {
+ "$ref": "#/components/schemas/FilePartInput"
+ },
+ {
+ "$ref": "#/components/schemas/AgentPartInput"
+ },
+ {
+ "$ref": "#/components/schemas/SubtaskPartInput"
+ }
+ ]
+ }
+ }
+ },
+ "required": [
+ "parts"
+ ]
+ }
+ }
+ }
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.session.prompt({\n ...\n})"
+ }
+ ]
+ }
+ },
+ "/session/{sessionID}/message/{messageID}": {
+ "get": {
+ "operationId": "session.message",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "directory",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "in": "path",
+ "name": "sessionID",
+ "schema": {
+ "type": "string"
+ },
+ "required": true,
+ "description": "Session ID"
+ },
+ {
+ "in": "path",
+ "name": "messageID",
+ "schema": {
+ "type": "string"
+ },
+ "required": true,
+ "description": "Message ID"
+ }
+ ],
+ "summary": "Get message",
+ "description": "Retrieve a specific message from a session by its message ID.",
+ "responses": {
+ "200": {
+ "description": "Message",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "info": {
+ "$ref": "#/components/schemas/Message"
+ },
+ "parts": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/Part"
+ }
+ }
+ },
+ "required": [
+ "info",
+ "parts"
+ ]
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "Bad request",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/BadRequestError"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Not found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/NotFoundError"
+ }
+ }
+ }
+ }
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.session.message({\n ...\n})"
+ }
+ ]
+ }
+ },
+ "/session/{sessionID}/message/{messageID}/part/{partID}": {
+ "delete": {
+ "operationId": "part.delete",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "directory",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "in": "path",
+ "name": "sessionID",
+ "schema": {
+ "type": "string"
+ },
+ "required": true,
+ "description": "Session ID"
+ },
+ {
+ "in": "path",
+ "name": "messageID",
+ "schema": {
+ "type": "string"
+ },
+ "required": true,
+ "description": "Message ID"
+ },
+ {
+ "in": "path",
+ "name": "partID",
+ "schema": {
+ "type": "string"
+ },
+ "required": true,
+ "description": "Part ID"
+ }
+ ],
+ "description": "Delete a part from a message",
+ "responses": {
+ "200": {
+ "description": "Successfully deleted part",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "boolean"
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "Bad request",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/BadRequestError"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Not found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/NotFoundError"
+ }
+ }
+ }
+ }
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.part.delete({\n ...\n})"
+ }
+ ]
+ },
+ "patch": {
+ "operationId": "part.update",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "directory",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "in": "path",
+ "name": "sessionID",
+ "schema": {
+ "type": "string"
+ },
+ "required": true,
+ "description": "Session ID"
+ },
+ {
+ "in": "path",
+ "name": "messageID",
+ "schema": {
+ "type": "string"
+ },
+ "required": true,
+ "description": "Message ID"
+ },
+ {
+ "in": "path",
+ "name": "partID",
+ "schema": {
+ "type": "string"
+ },
+ "required": true,
+ "description": "Part ID"
+ }
+ ],
+ "description": "Update a part in a message",
+ "responses": {
+ "200": {
+ "description": "Successfully updated part",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/Part"
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "Bad request",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/BadRequestError"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Not found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/NotFoundError"
+ }
+ }
+ }
+ }
+ },
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/Part"
+ }
+ }
+ }
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.part.update({\n ...\n})"
+ }
+ ]
+ }
+ },
+ "/session/{sessionID}/prompt_async": {
+ "post": {
+ "operationId": "session.prompt_async",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "directory",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "in": "path",
+ "name": "sessionID",
+ "schema": {
+ "type": "string"
+ },
+ "required": true,
+ "description": "Session ID"
+ }
+ ],
+ "summary": "Send async message",
+ "description": "Create and send a new message to a session asynchronously, starting the session if needed and returning immediately.",
+ "responses": {
+ "204": {
+ "description": "Prompt accepted"
+ },
+ "400": {
+ "description": "Bad request",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/BadRequestError"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Not found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/NotFoundError"
+ }
+ }
+ }
+ }
+ },
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "messageID": {
+ "type": "string",
+ "pattern": "^msg.*"
+ },
+ "model": {
+ "type": "object",
+ "properties": {
+ "providerID": {
+ "type": "string"
+ },
+ "modelID": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "providerID",
+ "modelID"
+ ]
+ },
+ "agent": {
+ "type": "string"
+ },
+ "noReply": {
+ "type": "boolean"
+ },
+ "tools": {
+ "description": "@deprecated tools and permissions have been merged, you can set permissions on the session itself now",
+ "type": "object",
+ "propertyNames": {
+ "type": "string"
+ },
+ "additionalProperties": {
+ "type": "boolean"
+ }
+ },
+ "format": {
+ "$ref": "#/components/schemas/OutputFormat"
+ },
+ "system": {
+ "type": "string"
+ },
+ "variant": {
+ "type": "string"
+ },
+ "parts": {
+ "type": "array",
+ "items": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/TextPartInput"
+ },
+ {
+ "$ref": "#/components/schemas/FilePartInput"
+ },
+ {
+ "$ref": "#/components/schemas/AgentPartInput"
+ },
+ {
+ "$ref": "#/components/schemas/SubtaskPartInput"
+ }
+ ]
+ }
+ }
+ },
+ "required": [
+ "parts"
+ ]
+ }
+ }
+ }
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.session.prompt_async({\n ...\n})"
+ }
+ ]
+ }
+ },
+ "/session/{sessionID}/command": {
+ "post": {
+ "operationId": "session.command",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "directory",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "in": "path",
+ "name": "sessionID",
+ "schema": {
+ "type": "string"
+ },
+ "required": true,
+ "description": "Session ID"
+ }
+ ],
+ "summary": "Send command",
+ "description": "Send a new command to a session for execution by the AI assistant.",
+ "responses": {
+ "200": {
+ "description": "Created message",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "info": {
+ "$ref": "#/components/schemas/AssistantMessage"
+ },
+ "parts": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/Part"
+ }
+ }
+ },
+ "required": [
+ "info",
+ "parts"
+ ]
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "Bad request",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/BadRequestError"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Not found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/NotFoundError"
+ }
+ }
+ }
+ }
+ },
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "messageID": {
+ "type": "string",
+ "pattern": "^msg.*"
+ },
+ "agent": {
+ "type": "string"
+ },
+ "model": {
+ "type": "string"
+ },
+ "arguments": {
+ "type": "string"
+ },
+ "command": {
+ "type": "string"
+ },
+ "variant": {
+ "type": "string"
+ },
+ "parts": {
+ "type": "array",
+ "items": {
+ "anyOf": [
+ {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "string"
+ },
+ "type": {
+ "type": "string",
+ "const": "file"
+ },
+ "mime": {
+ "type": "string"
+ },
+ "filename": {
+ "type": "string"
+ },
+ "url": {
+ "type": "string"
+ },
+ "source": {
+ "$ref": "#/components/schemas/FilePartSource"
+ }
+ },
+ "required": [
+ "type",
+ "mime",
+ "url"
+ ]
+ }
+ ]
+ }
+ }
+ },
+ "required": [
+ "arguments",
+ "command"
+ ]
+ }
+ }
+ }
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.session.command({\n ...\n})"
+ }
+ ]
+ }
+ },
+ "/session/{sessionID}/shell": {
+ "post": {
+ "operationId": "session.shell",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "directory",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "in": "path",
+ "name": "sessionID",
+ "schema": {
+ "type": "string"
+ },
+ "required": true,
+ "description": "Session ID"
+ }
+ ],
+ "summary": "Run shell command",
+ "description": "Execute a shell command within the session context and return the AI's response.",
+ "responses": {
+ "200": {
+ "description": "Created message",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/AssistantMessage"
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "Bad request",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/BadRequestError"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Not found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/NotFoundError"
+ }
+ }
+ }
+ }
+ },
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "agent": {
+ "type": "string"
+ },
+ "model": {
+ "type": "object",
+ "properties": {
+ "providerID": {
+ "type": "string"
+ },
+ "modelID": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "providerID",
+ "modelID"
+ ]
+ },
+ "command": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "agent",
+ "command"
+ ]
+ }
+ }
+ }
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.session.shell({\n ...\n})"
+ }
+ ]
+ }
+ },
+ "/session/{sessionID}/revert": {
+ "post": {
+ "operationId": "session.revert",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "directory",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "in": "path",
+ "name": "sessionID",
+ "schema": {
+ "type": "string"
+ },
+ "required": true
+ }
+ ],
+ "summary": "Revert message",
+ "description": "Revert a specific message in a session, undoing its effects and restoring the previous state.",
+ "responses": {
+ "200": {
+ "description": "Updated session",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/Session"
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "Bad request",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/BadRequestError"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Not found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/NotFoundError"
+ }
+ }
+ }
+ }
+ },
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "messageID": {
+ "type": "string",
+ "pattern": "^msg.*"
+ },
+ "partID": {
+ "type": "string",
+ "pattern": "^prt.*"
+ }
+ },
+ "required": [
+ "messageID"
+ ]
+ }
+ }
+ }
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.session.revert({\n ...\n})"
+ }
+ ]
+ }
+ },
+ "/session/{sessionID}/unrevert": {
+ "post": {
+ "operationId": "session.unrevert",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "directory",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "in": "path",
+ "name": "sessionID",
+ "schema": {
+ "type": "string"
+ },
+ "required": true
+ }
+ ],
+ "summary": "Restore reverted messages",
+ "description": "Restore all previously reverted messages in a session.",
+ "responses": {
+ "200": {
+ "description": "Updated session",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/Session"
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "Bad request",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/BadRequestError"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Not found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/NotFoundError"
+ }
+ }
+ }
+ }
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.session.unrevert({\n ...\n})"
+ }
+ ]
+ }
+ },
+ "/session/{sessionID}/permissions/{permissionID}": {
+ "post": {
+ "operationId": "permission.respond",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "directory",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "in": "path",
+ "name": "sessionID",
+ "schema": {
+ "type": "string"
+ },
+ "required": true
+ },
+ {
+ "in": "path",
+ "name": "permissionID",
+ "schema": {
+ "type": "string"
+ },
+ "required": true
+ }
+ ],
+ "summary": "Respond to permission",
+ "deprecated": true,
+ "description": "Approve or deny a permission request from the AI assistant.",
+ "responses": {
+ "200": {
+ "description": "Permission processed successfully",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "boolean"
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "Bad request",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/BadRequestError"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Not found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/NotFoundError"
+ }
+ }
+ }
+ }
+ },
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "response": {
+ "type": "string",
+ "enum": [
+ "once",
+ "always",
+ "reject"
+ ]
+ }
+ },
+ "required": [
+ "response"
+ ]
+ }
+ }
+ }
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.permission.respond({\n ...\n})"
+ }
+ ]
+ }
+ },
+ "/permission/{requestID}/reply": {
+ "post": {
+ "operationId": "permission.reply",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "directory",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "in": "path",
+ "name": "requestID",
+ "schema": {
+ "type": "string"
+ },
+ "required": true
+ }
+ ],
+ "summary": "Respond to permission request",
+ "description": "Approve or deny a permission request from the AI assistant.",
+ "responses": {
+ "200": {
+ "description": "Permission processed successfully",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "boolean"
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "Bad request",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/BadRequestError"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Not found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/NotFoundError"
+ }
+ }
+ }
+ }
+ },
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "reply": {
+ "type": "string",
+ "enum": [
+ "once",
+ "always",
+ "reject"
+ ]
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "reply"
+ ]
+ }
+ }
+ }
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.permission.reply({\n ...\n})"
+ }
+ ]
+ }
+ },
+ "/permission": {
+ "get": {
+ "operationId": "permission.list",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "directory",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "summary": "List pending permissions",
+ "description": "Get all pending permission requests across all sessions.",
+ "responses": {
+ "200": {
+ "description": "List of pending permissions",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/PermissionRequest"
+ }
+ }
+ }
+ }
+ }
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.permission.list({\n ...\n})"
+ }
+ ]
+ }
+ },
+ "/question": {
+ "get": {
+ "operationId": "question.list",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "directory",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "summary": "List pending questions",
+ "description": "Get all pending question requests across all sessions.",
+ "responses": {
+ "200": {
+ "description": "List of pending questions",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/QuestionRequest"
+ }
+ }
+ }
+ }
+ }
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.question.list({\n ...\n})"
+ }
+ ]
+ }
+ },
+ "/question/{requestID}/reply": {
+ "post": {
+ "operationId": "question.reply",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "directory",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "in": "path",
+ "name": "requestID",
+ "schema": {
+ "type": "string"
+ },
+ "required": true
+ }
+ ],
+ "summary": "Reply to question request",
+ "description": "Provide answers to a question request from the AI assistant.",
+ "responses": {
+ "200": {
+ "description": "Question answered successfully",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "boolean"
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "Bad request",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/BadRequestError"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Not found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/NotFoundError"
+ }
+ }
+ }
+ }
+ },
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "answers": {
+ "description": "User answers in order of questions (each answer is an array of selected labels)",
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/QuestionAnswer"
+ }
+ }
+ },
+ "required": [
+ "answers"
+ ]
+ }
+ }
+ }
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.question.reply({\n ...\n})"
+ }
+ ]
+ }
+ },
+ "/question/{requestID}/reject": {
+ "post": {
+ "operationId": "question.reject",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "directory",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "in": "path",
+ "name": "requestID",
+ "schema": {
+ "type": "string"
+ },
+ "required": true
+ }
+ ],
+ "summary": "Reject question request",
+ "description": "Reject a question request from the AI assistant.",
+ "responses": {
+ "200": {
+ "description": "Question rejected successfully",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "boolean"
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "Bad request",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/BadRequestError"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Not found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/NotFoundError"
+ }
+ }
+ }
+ }
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.question.reject({\n ...\n})"
+ }
+ ]
+ }
+ },
+ "/provider": {
+ "get": {
+ "operationId": "provider.list",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "directory",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "summary": "List providers",
+ "description": "Get a list of all available AI providers, including both available and connected ones.",
+ "responses": {
+ "200": {
+ "description": "List of providers",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "all": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "api": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ },
+ "env": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "id": {
+ "type": "string"
+ },
+ "npm": {
+ "type": "string"
+ },
+ "models": {
+ "type": "object",
+ "propertyNames": {
+ "type": "string"
+ },
+ "additionalProperties": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ },
+ "family": {
+ "type": "string"
+ },
+ "release_date": {
+ "type": "string"
+ },
+ "attachment": {
+ "type": "boolean"
+ },
+ "reasoning": {
+ "type": "boolean"
+ },
+ "temperature": {
+ "type": "boolean"
+ },
+ "tool_call": {
+ "type": "boolean"
+ },
+ "interleaved": {
+ "anyOf": [
+ {
+ "type": "boolean",
+ "const": true
+ },
+ {
+ "type": "object",
+ "properties": {
+ "field": {
+ "type": "string",
+ "enum": [
+ "reasoning_content",
+ "reasoning_details"
+ ]
+ }
+ },
+ "required": [
+ "field"
+ ],
+ "additionalProperties": false
+ }
+ ]
+ },
+ "cost": {
+ "type": "object",
+ "properties": {
+ "input": {
+ "type": "number"
+ },
+ "output": {
+ "type": "number"
+ },
+ "cache_read": {
+ "type": "number"
+ },
+ "cache_write": {
+ "type": "number"
+ },
+ "context_over_200k": {
+ "type": "object",
+ "properties": {
+ "input": {
+ "type": "number"
+ },
+ "output": {
+ "type": "number"
+ },
+ "cache_read": {
+ "type": "number"
+ },
+ "cache_write": {
+ "type": "number"
+ }
+ },
+ "required": [
+ "input",
+ "output"
+ ]
+ }
+ },
+ "required": [
+ "input",
+ "output"
+ ]
+ },
+ "limit": {
+ "type": "object",
+ "properties": {
+ "context": {
+ "type": "number"
+ },
+ "input": {
+ "type": "number"
+ },
+ "output": {
+ "type": "number"
+ }
+ },
+ "required": [
+ "context",
+ "output"
+ ]
+ },
+ "modalities": {
+ "type": "object",
+ "properties": {
+ "input": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "enum": [
+ "text",
+ "audio",
+ "image",
+ "video",
+ "pdf"
+ ]
+ }
+ },
+ "output": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "enum": [
+ "text",
+ "audio",
+ "image",
+ "video",
+ "pdf"
+ ]
+ }
+ }
+ },
+ "required": [
+ "input",
+ "output"
+ ]
+ },
+ "experimental": {
+ "type": "boolean"
+ },
+ "status": {
+ "type": "string",
+ "enum": [
+ "alpha",
+ "beta",
+ "deprecated"
+ ]
+ },
+ "options": {
+ "type": "object",
+ "propertyNames": {
+ "type": "string"
+ },
+ "additionalProperties": {}
+ },
+ "headers": {
+ "type": "object",
+ "propertyNames": {
+ "type": "string"
+ },
+ "additionalProperties": {
+ "type": "string"
+ }
+ },
+ "provider": {
+ "type": "object",
+ "properties": {
+ "npm": {
+ "type": "string"
+ },
+ "api": {
+ "type": "string"
+ }
+ }
+ },
+ "variants": {
+ "type": "object",
+ "propertyNames": {
+ "type": "string"
+ },
+ "additionalProperties": {
+ "type": "object",
+ "propertyNames": {
+ "type": "string"
+ },
+ "additionalProperties": {}
+ }
+ }
+ },
+ "required": [
+ "id",
+ "name",
+ "release_date",
+ "attachment",
+ "reasoning",
+ "temperature",
+ "tool_call",
+ "limit",
+ "options"
+ ]
+ }
+ }
+ },
+ "required": [
+ "name",
+ "env",
+ "id",
+ "models"
+ ]
+ }
+ },
+ "default": {
+ "type": "object",
+ "propertyNames": {
+ "type": "string"
+ },
+ "additionalProperties": {
+ "type": "string"
+ }
+ },
+ "connected": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "required": [
+ "all",
+ "default",
+ "connected"
+ ]
+ }
+ }
+ }
+ }
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.provider.list({\n ...\n})"
+ }
+ ]
+ }
+ },
+ "/provider/auth": {
+ "get": {
+ "operationId": "provider.auth",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "directory",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "summary": "Get provider auth methods",
+ "description": "Retrieve available authentication methods for all AI providers.",
+ "responses": {
+ "200": {
+ "description": "Provider auth methods",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "propertyNames": {
+ "type": "string"
+ },
+ "additionalProperties": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/ProviderAuthMethod"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.provider.auth({\n ...\n})"
+ }
+ ]
+ }
+ },
+ "/provider/{providerID}/oauth/authorize": {
+ "post": {
+ "operationId": "provider.oauth.authorize",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "directory",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "in": "path",
+ "name": "providerID",
+ "schema": {
+ "type": "string"
+ },
+ "required": true,
+ "description": "Provider ID"
+ }
+ ],
+ "summary": "OAuth authorize",
+ "description": "Initiate OAuth authorization for a specific AI provider to get an authorization URL.",
+ "responses": {
+ "200": {
+ "description": "Authorization URL and method",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ProviderAuthAuthorization"
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "Bad request",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/BadRequestError"
+ }
+ }
+ }
+ }
+ },
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "method": {
+ "description": "Auth method index",
+ "type": "number"
+ }
+ },
+ "required": [
+ "method"
+ ]
+ }
+ }
+ }
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.provider.oauth.authorize({\n ...\n})"
+ }
+ ]
+ }
+ },
+ "/provider/{providerID}/oauth/callback": {
+ "post": {
+ "operationId": "provider.oauth.callback",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "directory",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "in": "path",
+ "name": "providerID",
+ "schema": {
+ "type": "string"
+ },
+ "required": true,
+ "description": "Provider ID"
+ }
+ ],
+ "summary": "OAuth callback",
+ "description": "Handle the OAuth callback from a provider after user authorization.",
+ "responses": {
+ "200": {
+ "description": "OAuth callback processed successfully",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "boolean"
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "Bad request",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/BadRequestError"
+ }
+ }
+ }
+ }
+ },
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "method": {
+ "description": "Auth method index",
+ "type": "number"
+ },
+ "code": {
+ "description": "OAuth authorization code",
+ "type": "string"
+ }
+ },
+ "required": [
+ "method"
+ ]
+ }
+ }
+ }
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.provider.oauth.callback({\n ...\n})"
+ }
+ ]
+ }
+ },
+ "/find": {
+ "get": {
+ "operationId": "find.text",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "directory",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "in": "query",
+ "name": "pattern",
+ "schema": {
+ "type": "string"
+ },
+ "required": true
+ }
+ ],
+ "summary": "Find text",
+ "description": "Search for text patterns across files in the project using ripgrep.",
+ "responses": {
+ "200": {
+ "description": "Matches",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "path": {
+ "type": "object",
+ "properties": {
+ "text": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "text"
+ ]
+ },
+ "lines": {
+ "type": "object",
+ "properties": {
+ "text": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "text"
+ ]
+ },
+ "line_number": {
+ "type": "number"
+ },
+ "absolute_offset": {
+ "type": "number"
+ },
+ "submatches": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "match": {
+ "type": "object",
+ "properties": {
+ "text": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "text"
+ ]
+ },
+ "start": {
+ "type": "number"
+ },
+ "end": {
+ "type": "number"
+ }
+ },
+ "required": [
+ "match",
+ "start",
+ "end"
+ ]
+ }
+ }
+ },
+ "required": [
+ "path",
+ "lines",
+ "line_number",
+ "absolute_offset",
+ "submatches"
+ ]
+ }
+ }
+ }
+ }
+ }
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.find.text({\n ...\n})"
+ }
+ ]
+ }
+ },
+ "/find/file": {
+ "get": {
+ "operationId": "find.files",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "directory",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "in": "query",
+ "name": "query",
+ "schema": {
+ "type": "string"
+ },
+ "required": true
+ },
+ {
+ "in": "query",
+ "name": "dirs",
+ "schema": {
+ "type": "string",
+ "enum": [
+ "true",
+ "false"
+ ]
+ }
+ },
+ {
+ "in": "query",
+ "name": "type",
+ "schema": {
+ "type": "string",
+ "enum": [
+ "file",
+ "directory"
+ ]
+ }
+ },
+ {
+ "in": "query",
+ "name": "limit",
+ "schema": {
+ "type": "integer",
+ "minimum": 1,
+ "maximum": 200
+ }
+ }
+ ],
+ "summary": "Find files",
+ "description": "Search for files or directories by name or pattern in the project directory.",
+ "responses": {
+ "200": {
+ "description": "File paths",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.find.files({\n ...\n})"
+ }
+ ]
+ }
+ },
+ "/find/symbol": {
+ "get": {
+ "operationId": "find.symbols",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "directory",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "in": "query",
+ "name": "query",
+ "schema": {
+ "type": "string"
+ },
+ "required": true
+ }
+ ],
+ "summary": "Find symbols",
+ "description": "Search for workspace symbols like functions, classes, and variables using LSP.",
+ "responses": {
+ "200": {
+ "description": "Symbols",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/Symbol"
+ }
+ }
+ }
+ }
+ }
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.find.symbols({\n ...\n})"
+ }
+ ]
+ }
+ },
+ "/file": {
+ "get": {
+ "operationId": "file.list",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "directory",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "in": "query",
+ "name": "path",
+ "schema": {
+ "type": "string"
+ },
+ "required": true
+ }
+ ],
+ "summary": "List files",
+ "description": "List files and directories in a specified path.",
+ "responses": {
+ "200": {
+ "description": "Files and directories",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/FileNode"
+ }
+ }
+ }
+ }
+ }
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.file.list({\n ...\n})"
+ }
+ ]
+ }
+ },
+ "/file/content": {
+ "get": {
+ "operationId": "file.read",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "directory",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "in": "query",
+ "name": "path",
+ "schema": {
+ "type": "string"
+ },
+ "required": true
+ }
+ ],
+ "summary": "Read file",
+ "description": "Read the content of a specified file.",
+ "responses": {
+ "200": {
+ "description": "File content",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/FileContent"
+ }
+ }
+ }
+ }
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.file.read({\n ...\n})"
+ }
+ ]
+ }
+ },
+ "/file/status": {
+ "get": {
+ "operationId": "file.status",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "directory",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "summary": "Get file status",
+ "description": "Get the git status of all files in the project.",
+ "responses": {
+ "200": {
+ "description": "File status",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/File"
+ }
+ }
+ }
+ }
+ }
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.file.status({\n ...\n})"
+ }
+ ]
+ }
+ },
+ "/mcp": {
+ "get": {
+ "operationId": "mcp.status",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "directory",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "summary": "Get MCP status",
+ "description": "Get the status of all Model Context Protocol (MCP) servers.",
+ "responses": {
+ "200": {
+ "description": "MCP server status",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "propertyNames": {
+ "type": "string"
+ },
+ "additionalProperties": {
+ "$ref": "#/components/schemas/MCPStatus"
+ }
+ }
+ }
+ }
+ }
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.mcp.status({\n ...\n})"
+ }
+ ]
+ },
+ "post": {
+ "operationId": "mcp.add",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "directory",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "summary": "Add MCP server",
+ "description": "Dynamically add a new Model Context Protocol (MCP) server to the system.",
+ "responses": {
+ "200": {
+ "description": "MCP server added successfully",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "propertyNames": {
+ "type": "string"
+ },
+ "additionalProperties": {
+ "$ref": "#/components/schemas/MCPStatus"
+ }
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "Bad request",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/BadRequestError"
+ }
+ }
+ }
+ }
+ },
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "config": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/McpLocalConfig"
+ },
+ {
+ "$ref": "#/components/schemas/McpRemoteConfig"
+ }
+ ]
+ }
+ },
+ "required": [
+ "name",
+ "config"
+ ]
+ }
+ }
+ }
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.mcp.add({\n ...\n})"
+ }
+ ]
+ }
+ },
+ "/mcp/{name}/auth": {
+ "post": {
+ "operationId": "mcp.auth.start",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "directory",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "schema": {
+ "type": "string"
+ },
+ "in": "path",
+ "name": "name",
+ "required": true
+ }
+ ],
+ "summary": "Start MCP OAuth",
+ "description": "Start OAuth authentication flow for a Model Context Protocol (MCP) server.",
+ "responses": {
+ "200": {
+ "description": "OAuth flow started",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "authorizationUrl": {
+ "description": "URL to open in browser for authorization",
+ "type": "string"
+ }
+ },
+ "required": [
+ "authorizationUrl"
+ ]
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "Bad request",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/BadRequestError"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Not found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/NotFoundError"
+ }
+ }
+ }
+ }
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.mcp.auth.start({\n ...\n})"
+ }
+ ]
+ },
+ "delete": {
+ "operationId": "mcp.auth.remove",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "directory",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "schema": {
+ "type": "string"
+ },
+ "in": "path",
+ "name": "name",
+ "required": true
+ }
+ ],
+ "summary": "Remove MCP OAuth",
+ "description": "Remove OAuth credentials for an MCP server",
+ "responses": {
+ "200": {
+ "description": "OAuth credentials removed",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "success": {
+ "type": "boolean",
+ "const": true
+ }
+ },
+ "required": [
+ "success"
+ ]
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Not found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/NotFoundError"
+ }
+ }
+ }
+ }
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.mcp.auth.remove({\n ...\n})"
+ }
+ ]
+ }
+ },
+ "/mcp/{name}/auth/callback": {
+ "post": {
+ "operationId": "mcp.auth.callback",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "directory",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "schema": {
+ "type": "string"
+ },
+ "in": "path",
+ "name": "name",
+ "required": true
+ }
+ ],
+ "summary": "Complete MCP OAuth",
+ "description": "Complete OAuth authentication for a Model Context Protocol (MCP) server using the authorization code.",
+ "responses": {
+ "200": {
+ "description": "OAuth authentication completed",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/MCPStatus"
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "Bad request",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/BadRequestError"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Not found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/NotFoundError"
+ }
+ }
+ }
+ }
+ },
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "description": "Authorization code from OAuth callback",
+ "type": "string"
+ }
+ },
+ "required": [
+ "code"
+ ]
+ }
+ }
+ }
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.mcp.auth.callback({\n ...\n})"
+ }
+ ]
+ }
+ },
+ "/mcp/{name}/auth/authenticate": {
+ "post": {
+ "operationId": "mcp.auth.authenticate",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "directory",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "schema": {
+ "type": "string"
+ },
+ "in": "path",
+ "name": "name",
+ "required": true
+ }
+ ],
+ "summary": "Authenticate MCP OAuth",
+ "description": "Start OAuth flow and wait for callback (opens browser)",
+ "responses": {
+ "200": {
+ "description": "OAuth authentication completed",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/MCPStatus"
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "Bad request",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/BadRequestError"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Not found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/NotFoundError"
+ }
+ }
+ }
+ }
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.mcp.auth.authenticate({\n ...\n})"
+ }
+ ]
+ }
+ },
+ "/mcp/{name}/connect": {
+ "post": {
+ "operationId": "mcp.connect",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "directory",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "in": "path",
+ "name": "name",
+ "schema": {
+ "type": "string"
+ },
+ "required": true
+ }
+ ],
+ "description": "Connect an MCP server",
+ "responses": {
+ "200": {
+ "description": "MCP server connected successfully",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "boolean"
+ }
+ }
+ }
+ }
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.mcp.connect({\n ...\n})"
+ }
+ ]
+ }
+ },
+ "/mcp/{name}/disconnect": {
+ "post": {
+ "operationId": "mcp.disconnect",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "directory",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "in": "path",
+ "name": "name",
+ "schema": {
+ "type": "string"
+ },
+ "required": true
+ }
+ ],
+ "description": "Disconnect an MCP server",
+ "responses": {
+ "200": {
+ "description": "MCP server disconnected successfully",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "boolean"
+ }
+ }
+ }
+ }
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.mcp.disconnect({\n ...\n})"
+ }
+ ]
+ }
+ },
+ "/tui/append-prompt": {
+ "post": {
+ "operationId": "tui.appendPrompt",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "directory",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "summary": "Append TUI prompt",
+ "description": "Append prompt to the TUI",
+ "responses": {
+ "200": {
+ "description": "Prompt processed successfully",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "boolean"
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "Bad request",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/BadRequestError"
+ }
+ }
+ }
+ }
+ },
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "text": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "text"
+ ]
+ }
+ }
+ }
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.tui.appendPrompt({\n ...\n})"
+ }
+ ]
+ }
+ },
+ "/tui/open-help": {
+ "post": {
+ "operationId": "tui.openHelp",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "directory",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "summary": "Open help dialog",
+ "description": "Open the help dialog in the TUI to display user assistance information.",
+ "responses": {
+ "200": {
+ "description": "Help dialog opened successfully",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "boolean"
+ }
+ }
+ }
+ }
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.tui.openHelp({\n ...\n})"
+ }
+ ]
+ }
+ },
+ "/tui/open-sessions": {
+ "post": {
+ "operationId": "tui.openSessions",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "directory",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "summary": "Open sessions dialog",
+ "description": "Open the session dialog",
+ "responses": {
+ "200": {
+ "description": "Session dialog opened successfully",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "boolean"
+ }
+ }
+ }
+ }
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.tui.openSessions({\n ...\n})"
+ }
+ ]
+ }
+ },
+ "/tui/open-themes": {
+ "post": {
+ "operationId": "tui.openThemes",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "directory",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "summary": "Open themes dialog",
+ "description": "Open the theme dialog",
+ "responses": {
+ "200": {
+ "description": "Theme dialog opened successfully",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "boolean"
+ }
+ }
+ }
+ }
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.tui.openThemes({\n ...\n})"
+ }
+ ]
+ }
+ },
+ "/tui/open-models": {
+ "post": {
+ "operationId": "tui.openModels",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "directory",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "summary": "Open models dialog",
+ "description": "Open the model dialog",
+ "responses": {
+ "200": {
+ "description": "Model dialog opened successfully",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "boolean"
+ }
+ }
+ }
+ }
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.tui.openModels({\n ...\n})"
+ }
+ ]
+ }
+ },
+ "/tui/submit-prompt": {
+ "post": {
+ "operationId": "tui.submitPrompt",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "directory",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "summary": "Submit TUI prompt",
+ "description": "Submit the prompt",
+ "responses": {
+ "200": {
+ "description": "Prompt submitted successfully",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "boolean"
+ }
+ }
+ }
+ }
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.tui.submitPrompt({\n ...\n})"
+ }
+ ]
+ }
+ },
+ "/tui/clear-prompt": {
+ "post": {
+ "operationId": "tui.clearPrompt",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "directory",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "summary": "Clear TUI prompt",
+ "description": "Clear the prompt",
+ "responses": {
+ "200": {
+ "description": "Prompt cleared successfully",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "boolean"
+ }
+ }
+ }
+ }
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.tui.clearPrompt({\n ...\n})"
+ }
+ ]
+ }
+ },
+ "/tui/execute-command": {
+ "post": {
+ "operationId": "tui.executeCommand",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "directory",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "summary": "Execute TUI command",
+ "description": "Execute a TUI command (e.g. agent_cycle)",
+ "responses": {
+ "200": {
+ "description": "Command executed successfully",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "boolean"
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "Bad request",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/BadRequestError"
+ }
+ }
+ }
+ }
+ },
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "command": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "command"
+ ]
+ }
+ }
+ }
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.tui.executeCommand({\n ...\n})"
+ }
+ ]
+ }
+ },
+ "/tui/show-toast": {
+ "post": {
+ "operationId": "tui.showToast",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "directory",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "summary": "Show TUI toast",
+ "description": "Show a toast notification in the TUI",
+ "responses": {
+ "200": {
+ "description": "Toast notification shown successfully",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "boolean"
+ }
+ }
+ }
+ }
+ },
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "title": {
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ },
+ "variant": {
+ "type": "string",
+ "enum": [
+ "info",
+ "success",
+ "warning",
+ "error"
+ ]
+ },
+ "duration": {
+ "description": "Duration in milliseconds",
+ "default": 5000,
+ "type": "number"
+ }
+ },
+ "required": [
+ "message",
+ "variant"
+ ]
+ }
+ }
+ }
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.tui.showToast({\n ...\n})"
+ }
+ ]
+ }
+ },
+ "/tui/publish": {
+ "post": {
+ "operationId": "tui.publish",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "directory",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "summary": "Publish TUI event",
+ "description": "Publish a TUI event",
+ "responses": {
+ "200": {
+ "description": "Event published successfully",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "boolean"
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "Bad request",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/BadRequestError"
+ }
+ }
+ }
+ }
+ },
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/Event.tui.prompt.append"
+ },
+ {
+ "$ref": "#/components/schemas/Event.tui.command.execute"
+ },
+ {
+ "$ref": "#/components/schemas/Event.tui.toast.show"
+ },
+ {
+ "$ref": "#/components/schemas/Event.tui.session.select"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.tui.publish({\n ...\n})"
+ }
+ ]
+ }
+ },
+ "/tui/select-session": {
+ "post": {
+ "operationId": "tui.selectSession",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "directory",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "summary": "Select session",
+ "description": "Navigate the TUI to display the specified session.",
+ "responses": {
+ "200": {
+ "description": "Session selected successfully",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "boolean"
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "Bad request",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/BadRequestError"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Not found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/NotFoundError"
+ }
+ }
+ }
+ }
+ },
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "sessionID": {
+ "description": "Session ID to navigate to",
+ "type": "string",
+ "pattern": "^ses"
+ }
+ },
+ "required": [
+ "sessionID"
+ ]
+ }
+ }
+ }
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.tui.selectSession({\n ...\n})"
+ }
+ ]
+ }
+ },
+ "/tui/control/next": {
+ "get": {
+ "operationId": "tui.control.next",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "directory",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "summary": "Get next TUI request",
+ "description": "Retrieve the next TUI (Terminal User Interface) request from the queue for processing.",
+ "responses": {
+ "200": {
+ "description": "Next TUI request",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "path": {
+ "type": "string"
+ },
+ "body": {}
+ },
+ "required": [
+ "path",
+ "body"
+ ]
+ }
+ }
+ }
+ }
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.tui.control.next({\n ...\n})"
+ }
+ ]
+ }
+ },
+ "/tui/control/response": {
+ "post": {
+ "operationId": "tui.control.response",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "directory",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "summary": "Submit TUI response",
+ "description": "Submit a response to the TUI request queue to complete a pending request.",
+ "responses": {
+ "200": {
+ "description": "Response submitted successfully",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "boolean"
+ }
+ }
+ }
+ }
+ },
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {}
+ }
+ }
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.tui.control.response({\n ...\n})"
+ }
+ ]
+ }
+ },
+ "/instance/dispose": {
+ "post": {
+ "operationId": "instance.dispose",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "directory",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "summary": "Dispose instance",
+ "description": "Clean up and dispose the current OpenCode instance, releasing all resources.",
+ "responses": {
+ "200": {
+ "description": "Instance disposed",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "boolean"
+ }
+ }
+ }
+ }
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.instance.dispose({\n ...\n})"
+ }
+ ]
+ }
+ },
+ "/path": {
+ "get": {
+ "operationId": "path.get",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "directory",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "summary": "Get paths",
+ "description": "Retrieve the current working directory and related path information for the OpenCode instance.",
+ "responses": {
+ "200": {
+ "description": "Path",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/Path"
+ }
+ }
+ }
+ }
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.path.get({\n ...\n})"
+ }
+ ]
+ }
+ },
+ "/vcs": {
+ "get": {
+ "operationId": "vcs.get",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "directory",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "summary": "Get VCS info",
+ "description": "Retrieve version control system (VCS) information for the current project, such as git branch.",
+ "responses": {
+ "200": {
+ "description": "VCS info",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/VcsInfo"
+ }
+ }
+ }
+ }
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.vcs.get({\n ...\n})"
+ }
+ ]
+ }
+ },
+ "/command": {
+ "get": {
+ "operationId": "command.list",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "directory",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "summary": "List commands",
+ "description": "Get a list of all available commands in the OpenCode system.",
+ "responses": {
+ "200": {
+ "description": "List of commands",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/Command"
+ }
+ }
+ }
+ }
+ }
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.command.list({\n ...\n})"
+ }
+ ]
+ }
+ },
+ "/log": {
+ "post": {
+ "operationId": "app.log",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "directory",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "summary": "Write log",
+ "description": "Write a log entry to the server logs with specified level and metadata.",
+ "responses": {
+ "200": {
+ "description": "Log entry written successfully",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "boolean"
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "Bad request",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/BadRequestError"
+ }
+ }
+ }
+ }
+ },
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "service": {
+ "description": "Service name for the log entry",
+ "type": "string"
+ },
+ "level": {
+ "description": "Log level",
+ "type": "string",
+ "enum": [
+ "debug",
+ "info",
+ "error",
+ "warn"
+ ]
+ },
+ "message": {
+ "description": "Log message",
+ "type": "string"
+ },
+ "extra": {
+ "description": "Additional metadata for the log entry",
+ "type": "object",
+ "propertyNames": {
+ "type": "string"
+ },
+ "additionalProperties": {}
+ }
+ },
+ "required": [
+ "service",
+ "level",
+ "message"
+ ]
+ }
+ }
+ }
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.app.log({\n ...\n})"
+ }
+ ]
+ }
+ },
+ "/agent": {
+ "get": {
+ "operationId": "app.agents",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "directory",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "summary": "List agents",
+ "description": "Get a list of all available AI agents in the OpenCode system.",
+ "responses": {
+ "200": {
+ "description": "List of agents",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/Agent"
+ }
+ }
+ }
+ }
+ }
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.app.agents({\n ...\n})"
+ }
+ ]
+ }
+ },
+ "/skill": {
+ "get": {
+ "operationId": "app.skills",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "directory",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "summary": "List skills",
+ "description": "Get a list of all available skills in the OpenCode system.",
+ "responses": {
+ "200": {
+ "description": "List of skills",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "location": {
+ "type": "string"
+ },
+ "content": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "name",
+ "description",
+ "location",
+ "content"
+ ]
+ }
+ }
+ }
+ }
+ }
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.app.skills({\n ...\n})"
+ }
+ ]
+ }
+ },
+ "/lsp": {
+ "get": {
+ "operationId": "lsp.status",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "directory",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "summary": "Get LSP status",
+ "description": "Get LSP server status",
+ "responses": {
+ "200": {
+ "description": "LSP server status",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/LSPStatus"
+ }
+ }
+ }
+ }
+ }
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.lsp.status({\n ...\n})"
+ }
+ ]
+ }
+ },
+ "/formatter": {
+ "get": {
+ "operationId": "formatter.status",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "directory",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "summary": "Get formatter status",
+ "description": "Get formatter status",
+ "responses": {
+ "200": {
+ "description": "Formatter status",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/FormatterStatus"
+ }
+ }
+ }
+ }
+ }
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.formatter.status({\n ...\n})"
+ }
+ ]
+ }
+ },
+ "/event": {
+ "get": {
+ "operationId": "event.subscribe",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "directory",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "summary": "Subscribe to events",
+ "description": "Get events",
+ "responses": {
+ "200": {
+ "description": "Event stream",
+ "content": {
+ "text/event-stream": {
+ "schema": {
+ "$ref": "#/components/schemas/Event"
+ }
+ }
+ }
+ }
+ },
+ "x-codeSamples": [
+ {
+ "lang": "js",
+ "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.event.subscribe({\n ...\n})"
+ }
+ ]
+ }
+ }
+ },
+ "components": {
+ "schemas": {
+ "Event.installation.updated": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "installation.updated"
+ },
+ "properties": {
+ "type": "object",
+ "properties": {
+ "version": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "version"
+ ]
+ }
+ },
+ "required": [
+ "type",
+ "properties"
+ ]
+ },
+ "Event.installation.update-available": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "installation.update-available"
+ },
+ "properties": {
+ "type": "object",
+ "properties": {
+ "version": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "version"
+ ]
+ }
+ },
+ "required": [
+ "type",
+ "properties"
+ ]
+ },
+ "Project": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "string"
+ },
+ "worktree": {
+ "type": "string"
+ },
+ "vcs": {
+ "type": "string",
+ "const": "git"
+ },
+ "name": {
+ "type": "string"
+ },
+ "icon": {
+ "type": "object",
+ "properties": {
+ "url": {
+ "type": "string"
+ },
+ "override": {
+ "type": "string"
+ },
+ "color": {
+ "type": "string"
+ }
+ }
+ },
+ "commands": {
+ "type": "object",
+ "properties": {
+ "start": {
+ "description": "Startup script to run when creating a new workspace (worktree)",
+ "type": "string"
+ }
+ }
+ },
+ "time": {
+ "type": "object",
+ "properties": {
+ "created": {
+ "type": "number"
+ },
+ "updated": {
+ "type": "number"
+ },
+ "initialized": {
+ "type": "number"
+ }
+ },
+ "required": [
+ "created",
+ "updated"
+ ]
+ },
+ "sandboxes": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "required": [
+ "id",
+ "worktree",
+ "time",
+ "sandboxes"
+ ]
+ },
+ "Event.project.updated": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "project.updated"
+ },
+ "properties": {
+ "$ref": "#/components/schemas/Project"
+ }
+ },
+ "required": [
+ "type",
+ "properties"
+ ]
+ },
+ "Event.server.instance.disposed": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "server.instance.disposed"
+ },
+ "properties": {
+ "type": "object",
+ "properties": {
+ "directory": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "directory"
+ ]
+ }
+ },
+ "required": [
+ "type",
+ "properties"
+ ]
+ },
+ "Event.server.connected": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "server.connected"
+ },
+ "properties": {
+ "type": "object",
+ "properties": {}
+ }
+ },
+ "required": [
+ "type",
+ "properties"
+ ]
+ },
+ "Event.global.disposed": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "global.disposed"
+ },
+ "properties": {
+ "type": "object",
+ "properties": {}
+ }
+ },
+ "required": [
+ "type",
+ "properties"
+ ]
+ },
+ "Event.lsp.client.diagnostics": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "lsp.client.diagnostics"
+ },
+ "properties": {
+ "type": "object",
+ "properties": {
+ "serverID": {
+ "type": "string"
+ },
+ "path": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "serverID",
+ "path"
+ ]
+ }
+ },
+ "required": [
+ "type",
+ "properties"
+ ]
+ },
+ "Event.lsp.updated": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "lsp.updated"
+ },
+ "properties": {
+ "type": "object",
+ "properties": {}
+ }
+ },
+ "required": [
+ "type",
+ "properties"
+ ]
+ },
+ "Event.file.edited": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "file.edited"
+ },
+ "properties": {
+ "type": "object",
+ "properties": {
+ "file": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "file"
+ ]
+ }
+ },
+ "required": [
+ "type",
+ "properties"
+ ]
+ },
+ "OutputFormatText": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "text"
+ }
+ },
+ "required": [
+ "type"
+ ]
+ },
+ "JSONSchema": {
+ "type": "object",
+ "propertyNames": {
+ "type": "string"
+ },
+ "additionalProperties": {}
+ },
+ "OutputFormatJsonSchema": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "json_schema"
+ },
+ "schema": {
+ "$ref": "#/components/schemas/JSONSchema"
+ },
+ "retryCount": {
+ "default": 2,
+ "type": "integer",
+ "minimum": 0,
+ "maximum": 9007199254740991
+ }
+ },
+ "required": [
+ "type",
+ "schema"
+ ]
+ },
+ "OutputFormat": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/OutputFormatText"
+ },
+ {
+ "$ref": "#/components/schemas/OutputFormatJsonSchema"
+ }
+ ]
+ },
+ "FileDiff": {
+ "type": "object",
+ "properties": {
+ "file": {
+ "type": "string"
+ },
+ "before": {
+ "type": "string"
+ },
+ "after": {
+ "type": "string"
+ },
+ "additions": {
+ "type": "number"
+ },
+ "deletions": {
+ "type": "number"
+ },
+ "status": {
+ "type": "string",
+ "enum": [
+ "added",
+ "deleted",
+ "modified"
+ ]
+ }
+ },
+ "required": [
+ "file",
+ "before",
+ "after",
+ "additions",
+ "deletions"
+ ]
+ },
+ "UserMessage": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "string"
+ },
+ "sessionID": {
+ "type": "string"
+ },
+ "role": {
+ "type": "string",
+ "const": "user"
+ },
+ "time": {
+ "type": "object",
+ "properties": {
+ "created": {
+ "type": "number"
+ }
+ },
+ "required": [
+ "created"
+ ]
+ },
+ "format": {
+ "$ref": "#/components/schemas/OutputFormat"
+ },
+ "summary": {
+ "type": "object",
+ "properties": {
+ "title": {
+ "type": "string"
+ },
+ "body": {
+ "type": "string"
+ },
+ "diffs": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/FileDiff"
+ }
+ }
+ },
+ "required": [
+ "diffs"
+ ]
+ },
+ "agent": {
+ "type": "string"
+ },
+ "model": {
+ "type": "object",
+ "properties": {
+ "providerID": {
+ "type": "string"
+ },
+ "modelID": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "providerID",
+ "modelID"
+ ]
+ },
+ "system": {
+ "type": "string"
+ },
+ "tools": {
+ "type": "object",
+ "propertyNames": {
+ "type": "string"
+ },
+ "additionalProperties": {
+ "type": "boolean"
+ }
+ },
+ "variant": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "id",
+ "sessionID",
+ "role",
+ "time",
+ "agent",
+ "model"
+ ]
+ },
+ "ProviderAuthError": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string",
+ "const": "ProviderAuthError"
+ },
+ "data": {
+ "type": "object",
+ "properties": {
+ "providerID": {
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "providerID",
+ "message"
+ ]
+ }
+ },
+ "required": [
+ "name",
+ "data"
+ ]
+ },
+ "UnknownError": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string",
+ "const": "UnknownError"
+ },
+ "data": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "message"
+ ]
+ }
+ },
+ "required": [
+ "name",
+ "data"
+ ]
+ },
+ "MessageOutputLengthError": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string",
+ "const": "MessageOutputLengthError"
+ },
+ "data": {
+ "type": "object",
+ "properties": {}
+ }
+ },
+ "required": [
+ "name",
+ "data"
+ ]
+ },
+ "MessageAbortedError": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string",
+ "const": "MessageAbortedError"
+ },
+ "data": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "message"
+ ]
+ }
+ },
+ "required": [
+ "name",
+ "data"
+ ]
+ },
+ "StructuredOutputError": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string",
+ "const": "StructuredOutputError"
+ },
+ "data": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "retries": {
+ "type": "number"
+ }
+ },
+ "required": [
+ "message",
+ "retries"
+ ]
+ }
+ },
+ "required": [
+ "name",
+ "data"
+ ]
+ },
+ "ContextOverflowError": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string",
+ "const": "ContextOverflowError"
+ },
+ "data": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "responseBody": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "message"
+ ]
+ }
+ },
+ "required": [
+ "name",
+ "data"
+ ]
+ },
+ "APIError": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string",
+ "const": "APIError"
+ },
+ "data": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "statusCode": {
+ "type": "number"
+ },
+ "isRetryable": {
+ "type": "boolean"
+ },
+ "responseHeaders": {
+ "type": "object",
+ "propertyNames": {
+ "type": "string"
+ },
+ "additionalProperties": {
+ "type": "string"
+ }
+ },
+ "responseBody": {
+ "type": "string"
+ },
+ "metadata": {
+ "type": "object",
+ "propertyNames": {
+ "type": "string"
+ },
+ "additionalProperties": {
+ "type": "string"
+ }
+ }
+ },
+ "required": [
+ "message",
+ "isRetryable"
+ ]
+ }
+ },
+ "required": [
+ "name",
+ "data"
+ ]
+ },
+ "AssistantMessage": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "string"
+ },
+ "sessionID": {
+ "type": "string"
+ },
+ "role": {
+ "type": "string",
+ "const": "assistant"
+ },
+ "time": {
+ "type": "object",
+ "properties": {
+ "created": {
+ "type": "number"
+ },
+ "completed": {
+ "type": "number"
+ }
+ },
+ "required": [
+ "created"
+ ]
+ },
+ "error": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/ProviderAuthError"
+ },
+ {
+ "$ref": "#/components/schemas/UnknownError"
+ },
+ {
+ "$ref": "#/components/schemas/MessageOutputLengthError"
+ },
+ {
+ "$ref": "#/components/schemas/MessageAbortedError"
+ },
+ {
+ "$ref": "#/components/schemas/StructuredOutputError"
+ },
+ {
+ "$ref": "#/components/schemas/ContextOverflowError"
+ },
+ {
+ "$ref": "#/components/schemas/APIError"
+ }
+ ]
+ },
+ "parentID": {
+ "type": "string"
+ },
+ "modelID": {
+ "type": "string"
+ },
+ "providerID": {
+ "type": "string"
+ },
+ "mode": {
+ "type": "string"
+ },
+ "agent": {
+ "type": "string"
+ },
+ "path": {
+ "type": "object",
+ "properties": {
+ "cwd": {
+ "type": "string"
+ },
+ "root": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "cwd",
+ "root"
+ ]
+ },
+ "summary": {
+ "type": "boolean"
+ },
+ "cost": {
+ "type": "number"
+ },
+ "tokens": {
+ "type": "object",
+ "properties": {
+ "total": {
+ "type": "number"
+ },
+ "input": {
+ "type": "number"
+ },
+ "output": {
+ "type": "number"
+ },
+ "reasoning": {
+ "type": "number"
+ },
+ "cache": {
+ "type": "object",
+ "properties": {
+ "read": {
+ "type": "number"
+ },
+ "write": {
+ "type": "number"
+ }
+ },
+ "required": [
+ "read",
+ "write"
+ ]
+ }
+ },
+ "required": [
+ "input",
+ "output",
+ "reasoning",
+ "cache"
+ ]
+ },
+ "structured": {},
+ "variant": {
+ "type": "string"
+ },
+ "finish": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "id",
+ "sessionID",
+ "role",
+ "time",
+ "parentID",
+ "modelID",
+ "providerID",
+ "mode",
+ "agent",
+ "path",
+ "cost",
+ "tokens"
+ ]
+ },
+ "Message": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/UserMessage"
+ },
+ {
+ "$ref": "#/components/schemas/AssistantMessage"
+ }
+ ]
+ },
+ "Event.message.updated": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "message.updated"
+ },
+ "properties": {
+ "type": "object",
+ "properties": {
+ "info": {
+ "$ref": "#/components/schemas/Message"
+ }
+ },
+ "required": [
+ "info"
+ ]
+ }
+ },
+ "required": [
+ "type",
+ "properties"
+ ]
+ },
+ "Event.message.removed": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "message.removed"
+ },
+ "properties": {
+ "type": "object",
+ "properties": {
+ "sessionID": {
+ "type": "string"
+ },
+ "messageID": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "sessionID",
+ "messageID"
+ ]
+ }
+ },
+ "required": [
+ "type",
+ "properties"
+ ]
+ },
+ "TextPart": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "string"
+ },
+ "sessionID": {
+ "type": "string"
+ },
+ "messageID": {
+ "type": "string"
+ },
+ "type": {
+ "type": "string",
+ "const": "text"
+ },
+ "text": {
+ "type": "string"
+ },
+ "synthetic": {
+ "type": "boolean"
+ },
+ "ignored": {
+ "type": "boolean"
+ },
+ "time": {
+ "type": "object",
+ "properties": {
+ "start": {
+ "type": "number"
+ },
+ "end": {
+ "type": "number"
+ }
+ },
+ "required": [
+ "start"
+ ]
+ },
+ "metadata": {
+ "type": "object",
+ "propertyNames": {
+ "type": "string"
+ },
+ "additionalProperties": {}
+ }
+ },
+ "required": [
+ "id",
+ "sessionID",
+ "messageID",
+ "type",
+ "text"
+ ]
+ },
+ "SubtaskPart": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "string"
+ },
+ "sessionID": {
+ "type": "string"
+ },
+ "messageID": {
+ "type": "string"
+ },
+ "type": {
+ "type": "string",
+ "const": "subtask"
+ },
+ "prompt": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "agent": {
+ "type": "string"
+ },
+ "model": {
+ "type": "object",
+ "properties": {
+ "providerID": {
+ "type": "string"
+ },
+ "modelID": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "providerID",
+ "modelID"
+ ]
+ },
+ "command": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "id",
+ "sessionID",
+ "messageID",
+ "type",
+ "prompt",
+ "description",
+ "agent"
+ ]
+ },
+ "ReasoningPart": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "string"
+ },
+ "sessionID": {
+ "type": "string"
+ },
+ "messageID": {
+ "type": "string"
+ },
+ "type": {
+ "type": "string",
+ "const": "reasoning"
+ },
+ "text": {
+ "type": "string"
+ },
+ "metadata": {
+ "type": "object",
+ "propertyNames": {
+ "type": "string"
+ },
+ "additionalProperties": {}
+ },
+ "time": {
+ "type": "object",
+ "properties": {
+ "start": {
+ "type": "number"
+ },
+ "end": {
+ "type": "number"
+ }
+ },
+ "required": [
+ "start"
+ ]
+ }
+ },
+ "required": [
+ "id",
+ "sessionID",
+ "messageID",
+ "type",
+ "text",
+ "time"
+ ]
+ },
+ "FilePartSourceText": {
+ "type": "object",
+ "properties": {
+ "value": {
+ "type": "string"
+ },
+ "start": {
+ "type": "integer",
+ "minimum": -9007199254740991,
+ "maximum": 9007199254740991
+ },
+ "end": {
+ "type": "integer",
+ "minimum": -9007199254740991,
+ "maximum": 9007199254740991
+ }
+ },
+ "required": [
+ "value",
+ "start",
+ "end"
+ ]
+ },
+ "FileSource": {
+ "type": "object",
+ "properties": {
+ "text": {
+ "$ref": "#/components/schemas/FilePartSourceText"
+ },
+ "type": {
+ "type": "string",
+ "const": "file"
+ },
+ "path": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "text",
+ "type",
+ "path"
+ ]
+ },
+ "Range": {
+ "type": "object",
+ "properties": {
+ "start": {
+ "type": "object",
+ "properties": {
+ "line": {
+ "type": "number"
+ },
+ "character": {
+ "type": "number"
+ }
+ },
+ "required": [
+ "line",
+ "character"
+ ]
+ },
+ "end": {
+ "type": "object",
+ "properties": {
+ "line": {
+ "type": "number"
+ },
+ "character": {
+ "type": "number"
+ }
+ },
+ "required": [
+ "line",
+ "character"
+ ]
+ }
+ },
+ "required": [
+ "start",
+ "end"
+ ]
+ },
+ "SymbolSource": {
+ "type": "object",
+ "properties": {
+ "text": {
+ "$ref": "#/components/schemas/FilePartSourceText"
+ },
+ "type": {
+ "type": "string",
+ "const": "symbol"
+ },
+ "path": {
+ "type": "string"
+ },
+ "range": {
+ "$ref": "#/components/schemas/Range"
+ },
+ "name": {
+ "type": "string"
+ },
+ "kind": {
+ "type": "integer",
+ "minimum": -9007199254740991,
+ "maximum": 9007199254740991
+ }
+ },
+ "required": [
+ "text",
+ "type",
+ "path",
+ "range",
+ "name",
+ "kind"
+ ]
+ },
+ "ResourceSource": {
+ "type": "object",
+ "properties": {
+ "text": {
+ "$ref": "#/components/schemas/FilePartSourceText"
+ },
+ "type": {
+ "type": "string",
+ "const": "resource"
+ },
+ "clientName": {
+ "type": "string"
+ },
+ "uri": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "text",
+ "type",
+ "clientName",
+ "uri"
+ ]
+ },
+ "FilePartSource": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/FileSource"
+ },
+ {
+ "$ref": "#/components/schemas/SymbolSource"
+ },
+ {
+ "$ref": "#/components/schemas/ResourceSource"
+ }
+ ]
+ },
+ "FilePart": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "string"
+ },
+ "sessionID": {
+ "type": "string"
+ },
+ "messageID": {
+ "type": "string"
+ },
+ "type": {
+ "type": "string",
+ "const": "file"
+ },
+ "mime": {
+ "type": "string"
+ },
+ "filename": {
+ "type": "string"
+ },
+ "url": {
+ "type": "string"
+ },
+ "source": {
+ "$ref": "#/components/schemas/FilePartSource"
+ }
+ },
+ "required": [
+ "id",
+ "sessionID",
+ "messageID",
+ "type",
+ "mime",
+ "url"
+ ]
+ },
+ "ToolStatePending": {
+ "type": "object",
+ "properties": {
+ "status": {
+ "type": "string",
+ "const": "pending"
+ },
+ "input": {
+ "type": "object",
+ "propertyNames": {
+ "type": "string"
+ },
+ "additionalProperties": {}
+ },
+ "raw": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "status",
+ "input",
+ "raw"
+ ]
+ },
+ "ToolStateRunning": {
+ "type": "object",
+ "properties": {
+ "status": {
+ "type": "string",
+ "const": "running"
+ },
+ "input": {
+ "type": "object",
+ "propertyNames": {
+ "type": "string"
+ },
+ "additionalProperties": {}
+ },
+ "title": {
+ "type": "string"
+ },
+ "metadata": {
+ "type": "object",
+ "propertyNames": {
+ "type": "string"
+ },
+ "additionalProperties": {}
+ },
+ "time": {
+ "type": "object",
+ "properties": {
+ "start": {
+ "type": "number"
+ }
+ },
+ "required": [
+ "start"
+ ]
+ }
+ },
+ "required": [
+ "status",
+ "input",
+ "time"
+ ]
+ },
+ "ToolStateCompleted": {
+ "type": "object",
+ "properties": {
+ "status": {
+ "type": "string",
+ "const": "completed"
+ },
+ "input": {
+ "type": "object",
+ "propertyNames": {
+ "type": "string"
+ },
+ "additionalProperties": {}
+ },
+ "output": {
+ "type": "string"
+ },
+ "title": {
+ "type": "string"
+ },
+ "metadata": {
+ "type": "object",
+ "propertyNames": {
+ "type": "string"
+ },
+ "additionalProperties": {}
+ },
+ "time": {
+ "type": "object",
+ "properties": {
+ "start": {
+ "type": "number"
+ },
+ "end": {
+ "type": "number"
+ },
+ "compacted": {
+ "type": "number"
+ }
+ },
+ "required": [
+ "start",
+ "end"
+ ]
+ },
+ "attachments": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/FilePart"
+ }
+ }
+ },
+ "required": [
+ "status",
+ "input",
+ "output",
+ "title",
+ "metadata",
+ "time"
+ ]
+ },
+ "ToolStateError": {
+ "type": "object",
+ "properties": {
+ "status": {
+ "type": "string",
+ "const": "error"
+ },
+ "input": {
+ "type": "object",
+ "propertyNames": {
+ "type": "string"
+ },
+ "additionalProperties": {}
+ },
+ "error": {
+ "type": "string"
+ },
+ "metadata": {
+ "type": "object",
+ "propertyNames": {
+ "type": "string"
+ },
+ "additionalProperties": {}
+ },
+ "time": {
+ "type": "object",
+ "properties": {
+ "start": {
+ "type": "number"
+ },
+ "end": {
+ "type": "number"
+ }
+ },
+ "required": [
+ "start",
+ "end"
+ ]
+ }
+ },
+ "required": [
+ "status",
+ "input",
+ "error",
+ "time"
+ ]
+ },
+ "ToolState": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/ToolStatePending"
+ },
+ {
+ "$ref": "#/components/schemas/ToolStateRunning"
+ },
+ {
+ "$ref": "#/components/schemas/ToolStateCompleted"
+ },
+ {
+ "$ref": "#/components/schemas/ToolStateError"
+ }
+ ]
+ },
+ "ToolPart": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "string"
+ },
+ "sessionID": {
+ "type": "string"
+ },
+ "messageID": {
+ "type": "string"
+ },
+ "type": {
+ "type": "string",
+ "const": "tool"
+ },
+ "callID": {
+ "type": "string"
+ },
+ "tool": {
+ "type": "string"
+ },
+ "state": {
+ "$ref": "#/components/schemas/ToolState"
+ },
+ "metadata": {
+ "type": "object",
+ "propertyNames": {
+ "type": "string"
+ },
+ "additionalProperties": {}
+ }
+ },
+ "required": [
+ "id",
+ "sessionID",
+ "messageID",
+ "type",
+ "callID",
+ "tool",
+ "state"
+ ]
+ },
+ "StepStartPart": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "string"
+ },
+ "sessionID": {
+ "type": "string"
+ },
+ "messageID": {
+ "type": "string"
+ },
+ "type": {
+ "type": "string",
+ "const": "step-start"
+ },
+ "snapshot": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "id",
+ "sessionID",
+ "messageID",
+ "type"
+ ]
+ },
+ "StepFinishPart": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "string"
+ },
+ "sessionID": {
+ "type": "string"
+ },
+ "messageID": {
+ "type": "string"
+ },
+ "type": {
+ "type": "string",
+ "const": "step-finish"
+ },
+ "reason": {
+ "type": "string"
+ },
+ "snapshot": {
+ "type": "string"
+ },
+ "cost": {
+ "type": "number"
+ },
+ "tokens": {
+ "type": "object",
+ "properties": {
+ "total": {
+ "type": "number"
+ },
+ "input": {
+ "type": "number"
+ },
+ "output": {
+ "type": "number"
+ },
+ "reasoning": {
+ "type": "number"
+ },
+ "cache": {
+ "type": "object",
+ "properties": {
+ "read": {
+ "type": "number"
+ },
+ "write": {
+ "type": "number"
+ }
+ },
+ "required": [
+ "read",
+ "write"
+ ]
+ }
+ },
+ "required": [
+ "input",
+ "output",
+ "reasoning",
+ "cache"
+ ]
+ }
+ },
+ "required": [
+ "id",
+ "sessionID",
+ "messageID",
+ "type",
+ "reason",
+ "cost",
+ "tokens"
+ ]
+ },
+ "SnapshotPart": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "string"
+ },
+ "sessionID": {
+ "type": "string"
+ },
+ "messageID": {
+ "type": "string"
+ },
+ "type": {
+ "type": "string",
+ "const": "snapshot"
+ },
+ "snapshot": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "id",
+ "sessionID",
+ "messageID",
+ "type",
+ "snapshot"
+ ]
+ },
+ "PatchPart": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "string"
+ },
+ "sessionID": {
+ "type": "string"
+ },
+ "messageID": {
+ "type": "string"
+ },
+ "type": {
+ "type": "string",
+ "const": "patch"
+ },
+ "hash": {
+ "type": "string"
+ },
+ "files": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "required": [
+ "id",
+ "sessionID",
+ "messageID",
+ "type",
+ "hash",
+ "files"
+ ]
+ },
+ "AgentPart": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "string"
+ },
+ "sessionID": {
+ "type": "string"
+ },
+ "messageID": {
+ "type": "string"
+ },
+ "type": {
+ "type": "string",
+ "const": "agent"
+ },
+ "name": {
+ "type": "string"
+ },
+ "source": {
+ "type": "object",
+ "properties": {
+ "value": {
+ "type": "string"
+ },
+ "start": {
+ "type": "integer",
+ "minimum": -9007199254740991,
+ "maximum": 9007199254740991
+ },
+ "end": {
+ "type": "integer",
+ "minimum": -9007199254740991,
+ "maximum": 9007199254740991
+ }
+ },
+ "required": [
+ "value",
+ "start",
+ "end"
+ ]
+ }
+ },
+ "required": [
+ "id",
+ "sessionID",
+ "messageID",
+ "type",
+ "name"
+ ]
+ },
+ "RetryPart": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "string"
+ },
+ "sessionID": {
+ "type": "string"
+ },
+ "messageID": {
+ "type": "string"
+ },
+ "type": {
+ "type": "string",
+ "const": "retry"
+ },
+ "attempt": {
+ "type": "number"
+ },
+ "error": {
+ "$ref": "#/components/schemas/APIError"
+ },
+ "time": {
+ "type": "object",
+ "properties": {
+ "created": {
+ "type": "number"
+ }
+ },
+ "required": [
+ "created"
+ ]
+ }
+ },
+ "required": [
+ "id",
+ "sessionID",
+ "messageID",
+ "type",
+ "attempt",
+ "error",
+ "time"
+ ]
+ },
+ "CompactionPart": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "string"
+ },
+ "sessionID": {
+ "type": "string"
+ },
+ "messageID": {
+ "type": "string"
+ },
+ "type": {
+ "type": "string",
+ "const": "compaction"
+ },
+ "auto": {
+ "type": "boolean"
+ }
+ },
+ "required": [
+ "id",
+ "sessionID",
+ "messageID",
+ "type",
+ "auto"
+ ]
+ },
+ "Part": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/TextPart"
+ },
+ {
+ "$ref": "#/components/schemas/SubtaskPart"
+ },
+ {
+ "$ref": "#/components/schemas/ReasoningPart"
+ },
+ {
+ "$ref": "#/components/schemas/FilePart"
+ },
+ {
+ "$ref": "#/components/schemas/ToolPart"
+ },
+ {
+ "$ref": "#/components/schemas/StepStartPart"
+ },
+ {
+ "$ref": "#/components/schemas/StepFinishPart"
+ },
+ {
+ "$ref": "#/components/schemas/SnapshotPart"
+ },
+ {
+ "$ref": "#/components/schemas/PatchPart"
+ },
+ {
+ "$ref": "#/components/schemas/AgentPart"
+ },
+ {
+ "$ref": "#/components/schemas/RetryPart"
+ },
+ {
+ "$ref": "#/components/schemas/CompactionPart"
+ }
+ ]
+ },
+ "Event.message.part.updated": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "message.part.updated"
+ },
+ "properties": {
+ "type": "object",
+ "properties": {
+ "part": {
+ "$ref": "#/components/schemas/Part"
+ }
+ },
+ "required": [
+ "part"
+ ]
+ }
+ },
+ "required": [
+ "type",
+ "properties"
+ ]
+ },
+ "Event.message.part.delta": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "message.part.delta"
+ },
+ "properties": {
+ "type": "object",
+ "properties": {
+ "sessionID": {
+ "type": "string"
+ },
+ "messageID": {
+ "type": "string"
+ },
+ "partID": {
+ "type": "string"
+ },
+ "field": {
+ "type": "string"
+ },
+ "delta": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "sessionID",
+ "messageID",
+ "partID",
+ "field",
+ "delta"
+ ]
+ }
+ },
+ "required": [
+ "type",
+ "properties"
+ ]
+ },
+ "Event.message.part.removed": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "message.part.removed"
+ },
+ "properties": {
+ "type": "object",
+ "properties": {
+ "sessionID": {
+ "type": "string"
+ },
+ "messageID": {
+ "type": "string"
+ },
+ "partID": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "sessionID",
+ "messageID",
+ "partID"
+ ]
+ }
+ },
+ "required": [
+ "type",
+ "properties"
+ ]
+ },
+ "PermissionRequest": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "string",
+ "pattern": "^per.*"
+ },
+ "sessionID": {
+ "type": "string",
+ "pattern": "^ses.*"
+ },
+ "permission": {
+ "type": "string"
+ },
+ "patterns": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "metadata": {
+ "type": "object",
+ "propertyNames": {
+ "type": "string"
+ },
+ "additionalProperties": {}
+ },
+ "always": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "tool": {
+ "type": "object",
+ "properties": {
+ "messageID": {
+ "type": "string"
+ },
+ "callID": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "messageID",
+ "callID"
+ ]
+ }
+ },
+ "required": [
+ "id",
+ "sessionID",
+ "permission",
+ "patterns",
+ "metadata",
+ "always"
+ ]
+ },
+ "Event.permission.asked": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "permission.asked"
+ },
+ "properties": {
+ "$ref": "#/components/schemas/PermissionRequest"
+ }
+ },
+ "required": [
+ "type",
+ "properties"
+ ]
+ },
+ "Event.permission.replied": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "permission.replied"
+ },
+ "properties": {
+ "type": "object",
+ "properties": {
+ "sessionID": {
+ "type": "string"
+ },
+ "requestID": {
+ "type": "string"
+ },
+ "reply": {
+ "type": "string",
+ "enum": [
+ "once",
+ "always",
+ "reject"
+ ]
+ }
+ },
+ "required": [
+ "sessionID",
+ "requestID",
+ "reply"
+ ]
+ }
+ },
+ "required": [
+ "type",
+ "properties"
+ ]
+ },
+ "SessionStatus": {
+ "anyOf": [
+ {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "idle"
+ }
+ },
+ "required": [
+ "type"
+ ]
+ },
+ {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "retry"
+ },
+ "attempt": {
+ "type": "number"
+ },
+ "message": {
+ "type": "string"
+ },
+ "next": {
+ "type": "number"
+ }
+ },
+ "required": [
+ "type",
+ "attempt",
+ "message",
+ "next"
+ ]
+ },
+ {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "busy"
+ }
+ },
+ "required": [
+ "type"
+ ]
+ }
+ ]
+ },
+ "Event.session.status": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "session.status"
+ },
+ "properties": {
+ "type": "object",
+ "properties": {
+ "sessionID": {
+ "type": "string"
+ },
+ "status": {
+ "$ref": "#/components/schemas/SessionStatus"
+ }
+ },
+ "required": [
+ "sessionID",
+ "status"
+ ]
+ }
+ },
+ "required": [
+ "type",
+ "properties"
+ ]
+ },
+ "Event.session.idle": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "session.idle"
+ },
+ "properties": {
+ "type": "object",
+ "properties": {
+ "sessionID": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "sessionID"
+ ]
+ }
+ },
+ "required": [
+ "type",
+ "properties"
+ ]
+ },
+ "QuestionOption": {
+ "type": "object",
+ "properties": {
+ "label": {
+ "description": "Display text (1-5 words, concise)",
+ "type": "string"
+ },
+ "description": {
+ "description": "Explanation of choice",
+ "type": "string"
+ }
+ },
+ "required": [
+ "label",
+ "description"
+ ]
+ },
+ "QuestionInfo": {
+ "type": "object",
+ "properties": {
+ "question": {
+ "description": "Complete question",
+ "type": "string"
+ },
+ "header": {
+ "description": "Very short label (max 30 chars)",
+ "type": "string"
+ },
+ "options": {
+ "description": "Available choices",
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/QuestionOption"
+ }
+ },
+ "multiple": {
+ "description": "Allow selecting multiple choices",
+ "type": "boolean"
+ },
+ "custom": {
+ "description": "Allow typing a custom answer (default: true)",
+ "type": "boolean"
+ }
+ },
+ "required": [
+ "question",
+ "header",
+ "options"
+ ]
+ },
+ "QuestionRequest": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "string",
+ "pattern": "^que.*"
+ },
+ "sessionID": {
+ "type": "string",
+ "pattern": "^ses.*"
+ },
+ "questions": {
+ "description": "Questions to ask",
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/QuestionInfo"
+ }
+ },
+ "tool": {
+ "type": "object",
+ "properties": {
+ "messageID": {
+ "type": "string"
+ },
+ "callID": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "messageID",
+ "callID"
+ ]
+ }
+ },
+ "required": [
+ "id",
+ "sessionID",
+ "questions"
+ ]
+ },
+ "Event.question.asked": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "question.asked"
+ },
+ "properties": {
+ "$ref": "#/components/schemas/QuestionRequest"
+ }
+ },
+ "required": [
+ "type",
+ "properties"
+ ]
+ },
+ "QuestionAnswer": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "Event.question.replied": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "question.replied"
+ },
+ "properties": {
+ "type": "object",
+ "properties": {
+ "sessionID": {
+ "type": "string"
+ },
+ "requestID": {
+ "type": "string"
+ },
+ "answers": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/QuestionAnswer"
+ }
+ }
+ },
+ "required": [
+ "sessionID",
+ "requestID",
+ "answers"
+ ]
+ }
+ },
+ "required": [
+ "type",
+ "properties"
+ ]
+ },
+ "Event.question.rejected": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "question.rejected"
+ },
+ "properties": {
+ "type": "object",
+ "properties": {
+ "sessionID": {
+ "type": "string"
+ },
+ "requestID": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "sessionID",
+ "requestID"
+ ]
+ }
+ },
+ "required": [
+ "type",
+ "properties"
+ ]
+ },
+ "Event.session.compacted": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "session.compacted"
+ },
+ "properties": {
+ "type": "object",
+ "properties": {
+ "sessionID": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "sessionID"
+ ]
+ }
+ },
+ "required": [
+ "type",
+ "properties"
+ ]
+ },
+ "Event.file.watcher.updated": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "file.watcher.updated"
+ },
+ "properties": {
+ "type": "object",
+ "properties": {
+ "file": {
+ "type": "string"
+ },
+ "event": {
+ "anyOf": [
+ {
+ "type": "string",
+ "const": "add"
+ },
+ {
+ "type": "string",
+ "const": "change"
+ },
+ {
+ "type": "string",
+ "const": "unlink"
+ }
+ ]
+ }
+ },
+ "required": [
+ "file",
+ "event"
+ ]
+ }
+ },
+ "required": [
+ "type",
+ "properties"
+ ]
+ },
+ "Todo": {
+ "type": "object",
+ "properties": {
+ "content": {
+ "description": "Brief description of the task",
+ "type": "string"
+ },
+ "status": {
+ "description": "Current status of the task: pending, in_progress, completed, cancelled",
+ "type": "string"
+ },
+ "priority": {
+ "description": "Priority level of the task: high, medium, low",
+ "type": "string"
+ }
+ },
+ "required": [
+ "content",
+ "status",
+ "priority"
+ ]
+ },
+ "Event.todo.updated": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "todo.updated"
+ },
+ "properties": {
+ "type": "object",
+ "properties": {
+ "sessionID": {
+ "type": "string"
+ },
+ "todos": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/Todo"
+ }
+ }
+ },
+ "required": [
+ "sessionID",
+ "todos"
+ ]
+ }
+ },
+ "required": [
+ "type",
+ "properties"
+ ]
+ },
+ "Event.tui.prompt.append": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "tui.prompt.append"
+ },
+ "properties": {
+ "type": "object",
+ "properties": {
+ "text": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "text"
+ ]
+ }
+ },
+ "required": [
+ "type",
+ "properties"
+ ]
+ },
+ "Event.tui.command.execute": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "tui.command.execute"
+ },
+ "properties": {
+ "type": "object",
+ "properties": {
+ "command": {
+ "anyOf": [
+ {
+ "type": "string",
+ "enum": [
+ "session.list",
+ "session.new",
+ "session.share",
+ "session.interrupt",
+ "session.compact",
+ "session.page.up",
+ "session.page.down",
+ "session.line.up",
+ "session.line.down",
+ "session.half.page.up",
+ "session.half.page.down",
+ "session.first",
+ "session.last",
+ "prompt.clear",
+ "prompt.submit",
+ "agent.cycle"
+ ]
+ },
+ {
+ "type": "string"
+ }
+ ]
+ }
+ },
+ "required": [
+ "command"
+ ]
+ }
+ },
+ "required": [
+ "type",
+ "properties"
+ ]
+ },
+ "Event.tui.toast.show": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "tui.toast.show"
+ },
+ "properties": {
+ "type": "object",
+ "properties": {
+ "title": {
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ },
+ "variant": {
+ "type": "string",
+ "enum": [
+ "info",
+ "success",
+ "warning",
+ "error"
+ ]
+ },
+ "duration": {
+ "description": "Duration in milliseconds",
+ "default": 5000,
+ "type": "number"
+ }
+ },
+ "required": [
+ "message",
+ "variant"
+ ]
+ }
+ },
+ "required": [
+ "type",
+ "properties"
+ ]
+ },
+ "Event.tui.session.select": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "tui.session.select"
+ },
+ "properties": {
+ "type": "object",
+ "properties": {
+ "sessionID": {
+ "description": "Session ID to navigate to",
+ "type": "string",
+ "pattern": "^ses"
+ }
+ },
+ "required": [
+ "sessionID"
+ ]
+ }
+ },
+ "required": [
+ "type",
+ "properties"
+ ]
+ },
+ "Event.mcp.tools.changed": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "mcp.tools.changed"
+ },
+ "properties": {
+ "type": "object",
+ "properties": {
+ "server": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "server"
+ ]
+ }
+ },
+ "required": [
+ "type",
+ "properties"
+ ]
+ },
+ "Event.mcp.browser.open.failed": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "mcp.browser.open.failed"
+ },
+ "properties": {
+ "type": "object",
+ "properties": {
+ "mcpName": {
+ "type": "string"
+ },
+ "url": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "mcpName",
+ "url"
+ ]
+ }
+ },
+ "required": [
+ "type",
+ "properties"
+ ]
+ },
+ "Event.command.executed": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "command.executed"
+ },
+ "properties": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "sessionID": {
+ "type": "string",
+ "pattern": "^ses.*"
+ },
+ "arguments": {
+ "type": "string"
+ },
+ "messageID": {
+ "type": "string",
+ "pattern": "^msg.*"
+ }
+ },
+ "required": [
+ "name",
+ "sessionID",
+ "arguments",
+ "messageID"
+ ]
+ }
+ },
+ "required": [
+ "type",
+ "properties"
+ ]
+ },
+ "PermissionAction": {
+ "type": "string",
+ "enum": [
+ "allow",
+ "deny",
+ "ask"
+ ]
+ },
+ "PermissionRule": {
+ "type": "object",
+ "properties": {
+ "permission": {
+ "type": "string"
+ },
+ "pattern": {
+ "type": "string"
+ },
+ "action": {
+ "$ref": "#/components/schemas/PermissionAction"
+ }
+ },
+ "required": [
+ "permission",
+ "pattern",
+ "action"
+ ]
+ },
+ "PermissionRuleset": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/PermissionRule"
+ }
+ },
+ "Session": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "string",
+ "pattern": "^ses.*"
+ },
+ "slug": {
+ "type": "string"
+ },
+ "projectID": {
+ "type": "string"
+ },
+ "directory": {
+ "type": "string"
+ },
+ "parentID": {
+ "type": "string",
+ "pattern": "^ses.*"
+ },
+ "summary": {
+ "type": "object",
+ "properties": {
+ "additions": {
+ "type": "number"
+ },
+ "deletions": {
+ "type": "number"
+ },
+ "files": {
+ "type": "number"
+ },
+ "diffs": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/FileDiff"
+ }
+ }
+ },
+ "required": [
+ "additions",
+ "deletions",
+ "files"
+ ]
+ },
+ "share": {
+ "type": "object",
+ "properties": {
+ "url": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "url"
+ ]
+ },
+ "title": {
+ "type": "string"
+ },
+ "version": {
+ "type": "string"
+ },
+ "time": {
+ "type": "object",
+ "properties": {
+ "created": {
+ "type": "number"
+ },
+ "updated": {
+ "type": "number"
+ },
+ "compacting": {
+ "type": "number"
+ },
+ "archived": {
+ "type": "number"
+ }
+ },
+ "required": [
+ "created",
+ "updated"
+ ]
+ },
+ "permission": {
+ "$ref": "#/components/schemas/PermissionRuleset"
+ },
+ "revert": {
+ "type": "object",
+ "properties": {
+ "messageID": {
+ "type": "string"
+ },
+ "partID": {
+ "type": "string"
+ },
+ "snapshot": {
+ "type": "string"
+ },
+ "diff": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "messageID"
+ ]
+ }
+ },
+ "required": [
+ "id",
+ "slug",
+ "projectID",
+ "directory",
+ "title",
+ "version",
+ "time"
+ ]
+ },
+ "Event.session.created": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "session.created"
+ },
+ "properties": {
+ "type": "object",
+ "properties": {
+ "info": {
+ "$ref": "#/components/schemas/Session"
+ }
+ },
+ "required": [
+ "info"
+ ]
+ }
+ },
+ "required": [
+ "type",
+ "properties"
+ ]
+ },
+ "Event.session.updated": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "session.updated"
+ },
+ "properties": {
+ "type": "object",
+ "properties": {
+ "info": {
+ "$ref": "#/components/schemas/Session"
+ }
+ },
+ "required": [
+ "info"
+ ]
+ }
+ },
+ "required": [
+ "type",
+ "properties"
+ ]
+ },
+ "Event.session.deleted": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "session.deleted"
+ },
+ "properties": {
+ "type": "object",
+ "properties": {
+ "info": {
+ "$ref": "#/components/schemas/Session"
+ }
+ },
+ "required": [
+ "info"
+ ]
+ }
+ },
+ "required": [
+ "type",
+ "properties"
+ ]
+ },
+ "Event.session.diff": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "session.diff"
+ },
+ "properties": {
+ "type": "object",
+ "properties": {
+ "sessionID": {
+ "type": "string"
+ },
+ "diff": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/FileDiff"
+ }
+ }
+ },
+ "required": [
+ "sessionID",
+ "diff"
+ ]
+ }
+ },
+ "required": [
+ "type",
+ "properties"
+ ]
+ },
+ "Event.session.error": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "session.error"
+ },
+ "properties": {
+ "type": "object",
+ "properties": {
+ "sessionID": {
+ "type": "string"
+ },
+ "error": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/ProviderAuthError"
+ },
+ {
+ "$ref": "#/components/schemas/UnknownError"
+ },
+ {
+ "$ref": "#/components/schemas/MessageOutputLengthError"
+ },
+ {
+ "$ref": "#/components/schemas/MessageAbortedError"
+ },
+ {
+ "$ref": "#/components/schemas/StructuredOutputError"
+ },
+ {
+ "$ref": "#/components/schemas/ContextOverflowError"
+ },
+ {
+ "$ref": "#/components/schemas/APIError"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "required": [
+ "type",
+ "properties"
+ ]
+ },
+ "Event.vcs.branch.updated": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "vcs.branch.updated"
+ },
+ "properties": {
+ "type": "object",
+ "properties": {
+ "branch": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "required": [
+ "type",
+ "properties"
+ ]
+ },
+ "Pty": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "string",
+ "pattern": "^pty.*"
+ },
+ "title": {
+ "type": "string"
+ },
+ "command": {
+ "type": "string"
+ },
+ "args": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "cwd": {
+ "type": "string"
+ },
+ "status": {
+ "type": "string",
+ "enum": [
+ "running",
+ "exited"
+ ]
+ },
+ "pid": {
+ "type": "number"
+ }
+ },
+ "required": [
+ "id",
+ "title",
+ "command",
+ "args",
+ "cwd",
+ "status",
+ "pid"
+ ]
+ },
+ "Event.pty.created": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "pty.created"
+ },
+ "properties": {
+ "type": "object",
+ "properties": {
+ "info": {
+ "$ref": "#/components/schemas/Pty"
+ }
+ },
+ "required": [
+ "info"
+ ]
+ }
+ },
+ "required": [
+ "type",
+ "properties"
+ ]
+ },
+ "Event.pty.updated": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "pty.updated"
+ },
+ "properties": {
+ "type": "object",
+ "properties": {
+ "info": {
+ "$ref": "#/components/schemas/Pty"
+ }
+ },
+ "required": [
+ "info"
+ ]
+ }
+ },
+ "required": [
+ "type",
+ "properties"
+ ]
+ },
+ "Event.pty.exited": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "pty.exited"
+ },
+ "properties": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "string",
+ "pattern": "^pty.*"
+ },
+ "exitCode": {
+ "type": "number"
+ }
+ },
+ "required": [
+ "id",
+ "exitCode"
+ ]
+ }
+ },
+ "required": [
+ "type",
+ "properties"
+ ]
+ },
+ "Event.pty.deleted": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "pty.deleted"
+ },
+ "properties": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "string",
+ "pattern": "^pty.*"
+ }
+ },
+ "required": [
+ "id"
+ ]
+ }
+ },
+ "required": [
+ "type",
+ "properties"
+ ]
+ },
+ "Event.worktree.ready": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "worktree.ready"
+ },
+ "properties": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "branch": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "name",
+ "branch"
+ ]
+ }
+ },
+ "required": [
+ "type",
+ "properties"
+ ]
+ },
+ "Event.worktree.failed": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "worktree.failed"
+ },
+ "properties": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "message"
+ ]
+ }
+ },
+ "required": [
+ "type",
+ "properties"
+ ]
+ },
+ "Event": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/Event.installation.updated"
+ },
+ {
+ "$ref": "#/components/schemas/Event.installation.update-available"
+ },
+ {
+ "$ref": "#/components/schemas/Event.project.updated"
+ },
+ {
+ "$ref": "#/components/schemas/Event.server.instance.disposed"
+ },
+ {
+ "$ref": "#/components/schemas/Event.server.connected"
+ },
+ {
+ "$ref": "#/components/schemas/Event.global.disposed"
+ },
+ {
+ "$ref": "#/components/schemas/Event.lsp.client.diagnostics"
+ },
+ {
+ "$ref": "#/components/schemas/Event.lsp.updated"
+ },
+ {
+ "$ref": "#/components/schemas/Event.file.edited"
+ },
+ {
+ "$ref": "#/components/schemas/Event.message.updated"
+ },
+ {
+ "$ref": "#/components/schemas/Event.message.removed"
+ },
+ {
+ "$ref": "#/components/schemas/Event.message.part.updated"
+ },
+ {
+ "$ref": "#/components/schemas/Event.message.part.delta"
+ },
+ {
+ "$ref": "#/components/schemas/Event.message.part.removed"
+ },
+ {
+ "$ref": "#/components/schemas/Event.permission.asked"
+ },
+ {
+ "$ref": "#/components/schemas/Event.permission.replied"
+ },
+ {
+ "$ref": "#/components/schemas/Event.session.status"
+ },
+ {
+ "$ref": "#/components/schemas/Event.session.idle"
+ },
+ {
+ "$ref": "#/components/schemas/Event.question.asked"
+ },
+ {
+ "$ref": "#/components/schemas/Event.question.replied"
+ },
+ {
+ "$ref": "#/components/schemas/Event.question.rejected"
+ },
+ {
+ "$ref": "#/components/schemas/Event.session.compacted"
+ },
+ {
+ "$ref": "#/components/schemas/Event.file.watcher.updated"
+ },
+ {
+ "$ref": "#/components/schemas/Event.todo.updated"
+ },
+ {
+ "$ref": "#/components/schemas/Event.tui.prompt.append"
+ },
+ {
+ "$ref": "#/components/schemas/Event.tui.command.execute"
+ },
+ {
+ "$ref": "#/components/schemas/Event.tui.toast.show"
+ },
+ {
+ "$ref": "#/components/schemas/Event.tui.session.select"
+ },
+ {
+ "$ref": "#/components/schemas/Event.mcp.tools.changed"
+ },
+ {
+ "$ref": "#/components/schemas/Event.mcp.browser.open.failed"
+ },
+ {
+ "$ref": "#/components/schemas/Event.command.executed"
+ },
+ {
+ "$ref": "#/components/schemas/Event.session.created"
+ },
+ {
+ "$ref": "#/components/schemas/Event.session.updated"
+ },
+ {
+ "$ref": "#/components/schemas/Event.session.deleted"
+ },
+ {
+ "$ref": "#/components/schemas/Event.session.diff"
+ },
+ {
+ "$ref": "#/components/schemas/Event.session.error"
+ },
+ {
+ "$ref": "#/components/schemas/Event.vcs.branch.updated"
+ },
+ {
+ "$ref": "#/components/schemas/Event.pty.created"
+ },
+ {
+ "$ref": "#/components/schemas/Event.pty.updated"
+ },
+ {
+ "$ref": "#/components/schemas/Event.pty.exited"
+ },
+ {
+ "$ref": "#/components/schemas/Event.pty.deleted"
+ },
+ {
+ "$ref": "#/components/schemas/Event.worktree.ready"
+ },
+ {
+ "$ref": "#/components/schemas/Event.worktree.failed"
+ }
+ ]
+ },
+ "GlobalEvent": {
+ "type": "object",
+ "properties": {
+ "directory": {
+ "type": "string"
+ },
+ "payload": {
+ "$ref": "#/components/schemas/Event"
+ }
+ },
+ "required": [
+ "directory",
+ "payload"
+ ]
+ },
+ "KeybindsConfig": {
+ "description": "Custom keybind configurations",
+ "type": "object",
+ "properties": {
+ "leader": {
+ "description": "Leader key for keybind combinations",
+ "default": "ctrl+x",
+ "type": "string"
+ },
+ "app_exit": {
+ "description": "Exit the application",
+ "default": "ctrl+c,ctrl+d,q",
+ "type": "string"
+ },
+ "editor_open": {
+ "description": "Open external editor",
+ "default": "e",
+ "type": "string"
+ },
+ "theme_list": {
+ "description": "List available themes",
+ "default": "t",
+ "type": "string"
+ },
+ "sidebar_toggle": {
+ "description": "Toggle sidebar",
+ "default": "b",
+ "type": "string"
+ },
+ "scrollbar_toggle": {
+ "description": "Toggle session scrollbar",
+ "default": "none",
+ "type": "string"
+ },
+ "username_toggle": {
+ "description": "Toggle username visibility",
+ "default": "none",
+ "type": "string"
+ },
+ "status_view": {
+ "description": "View status",
+ "default": "s",
+ "type": "string"
+ },
+ "session_export": {
+ "description": "Export session to editor",
+ "default": "x",
+ "type": "string"
+ },
+ "session_new": {
+ "description": "Create a new session",
+ "default": "n",
+ "type": "string"
+ },
+ "session_list": {
+ "description": "List all sessions",
+ "default": "l",
+ "type": "string"
+ },
+ "session_timeline": {
+ "description": "Show session timeline",
+ "default": "g",
+ "type": "string"
+ },
+ "session_fork": {
+ "description": "Fork session from message",
+ "default": "none",
+ "type": "string"
+ },
+ "session_rename": {
+ "description": "Rename session",
+ "default": "ctrl+r",
+ "type": "string"
+ },
+ "session_delete": {
+ "description": "Delete session",
+ "default": "ctrl+d",
+ "type": "string"
+ },
+ "stash_delete": {
+ "description": "Delete stash entry",
+ "default": "ctrl+d",
+ "type": "string"
+ },
+ "model_provider_list": {
+ "description": "Open provider list from model dialog",
+ "default": "ctrl+a",
+ "type": "string"
+ },
+ "model_favorite_toggle": {
+ "description": "Toggle model favorite status",
+ "default": "ctrl+f",
+ "type": "string"
+ },
+ "session_share": {
+ "description": "Share current session",
+ "default": "none",
+ "type": "string"
+ },
+ "session_unshare": {
+ "description": "Unshare current session",
+ "default": "none",
+ "type": "string"
+ },
+ "session_interrupt": {
+ "description": "Interrupt current session",
+ "default": "escape",
+ "type": "string"
+ },
+ "session_compact": {
+ "description": "Compact the session",
+ "default": "c",
+ "type": "string"
+ },
+ "messages_page_up": {
+ "description": "Scroll messages up by one page",
+ "default": "pageup,ctrl+alt+b",
+ "type": "string"
+ },
+ "messages_page_down": {
+ "description": "Scroll messages down by one page",
+ "default": "pagedown,ctrl+alt+f",
+ "type": "string"
+ },
+ "messages_line_up": {
+ "description": "Scroll messages up by one line",
+ "default": "ctrl+alt+y",
+ "type": "string"
+ },
+ "messages_line_down": {
+ "description": "Scroll messages down by one line",
+ "default": "ctrl+alt+e",
+ "type": "string"
+ },
+ "messages_half_page_up": {
+ "description": "Scroll messages up by half page",
+ "default": "ctrl+alt+u",
+ "type": "string"
+ },
+ "messages_half_page_down": {
+ "description": "Scroll messages down by half page",
+ "default": "ctrl+alt+d",
+ "type": "string"
+ },
+ "messages_first": {
+ "description": "Navigate to first message",
+ "default": "ctrl+g,home",
+ "type": "string"
+ },
+ "messages_last": {
+ "description": "Navigate to last message",
+ "default": "ctrl+alt+g,end",
+ "type": "string"
+ },
+ "messages_next": {
+ "description": "Navigate to next message",
+ "default": "none",
+ "type": "string"
+ },
+ "messages_previous": {
+ "description": "Navigate to previous message",
+ "default": "none",
+ "type": "string"
+ },
+ "messages_last_user": {
+ "description": "Navigate to last user message",
+ "default": "none",
+ "type": "string"
+ },
+ "messages_copy": {
+ "description": "Copy message",
+ "default": "y",
+ "type": "string"
+ },
+ "messages_undo": {
+ "description": "Undo message",
+ "default": "u",
+ "type": "string"
+ },
+ "messages_redo": {
+ "description": "Redo message",
+ "default": "r",
+ "type": "string"
+ },
+ "messages_toggle_conceal": {
+ "description": "Toggle code block concealment in messages",
+ "default": "h",
+ "type": "string"
+ },
+ "tool_details": {
+ "description": "Toggle tool details visibility",
+ "default": "none",
+ "type": "string"
+ },
+ "model_list": {
+ "description": "List available models",
+ "default": "m",
+ "type": "string"
+ },
+ "model_cycle_recent": {
+ "description": "Next recently used model",
+ "default": "f2",
+ "type": "string"
+ },
+ "model_cycle_recent_reverse": {
+ "description": "Previous recently used model",
+ "default": "shift+f2",
+ "type": "string"
+ },
+ "model_cycle_favorite": {
+ "description": "Next favorite model",
+ "default": "none",
+ "type": "string"
+ },
+ "model_cycle_favorite_reverse": {
+ "description": "Previous favorite model",
+ "default": "none",
+ "type": "string"
+ },
+ "command_list": {
+ "description": "List available commands",
+ "default": "ctrl+p",
+ "type": "string"
+ },
+ "agent_list": {
+ "description": "List agents",
+ "default": "a",
+ "type": "string"
+ },
+ "agent_cycle": {
+ "description": "Next agent",
+ "default": "tab",
+ "type": "string"
+ },
+ "agent_cycle_reverse": {
+ "description": "Previous agent",
+ "default": "shift+tab",
+ "type": "string"
+ },
+ "variant_cycle": {
+ "description": "Cycle model variants",
+ "default": "ctrl+t",
+ "type": "string"
+ },
+ "input_clear": {
+ "description": "Clear input field",
+ "default": "ctrl+c",
+ "type": "string"
+ },
+ "input_paste": {
+ "description": "Paste from clipboard",
+ "default": "ctrl+v",
+ "type": "string"
+ },
+ "input_submit": {
+ "description": "Submit input",
+ "default": "return",
+ "type": "string"
+ },
+ "input_newline": {
+ "description": "Insert newline in input",
+ "default": "shift+return,ctrl+return,alt+return,ctrl+j",
+ "type": "string"
+ },
+ "input_move_left": {
+ "description": "Move cursor left in input",
+ "default": "left,ctrl+b",
+ "type": "string"
+ },
+ "input_move_right": {
+ "description": "Move cursor right in input",
+ "default": "right,ctrl+f",
+ "type": "string"
+ },
+ "input_move_up": {
+ "description": "Move cursor up in input",
+ "default": "up",
+ "type": "string"
+ },
+ "input_move_down": {
+ "description": "Move cursor down in input",
+ "default": "down",
+ "type": "string"
+ },
+ "input_select_left": {
+ "description": "Select left in input",
+ "default": "shift+left",
+ "type": "string"
+ },
+ "input_select_right": {
+ "description": "Select right in input",
+ "default": "shift+right",
+ "type": "string"
+ },
+ "input_select_up": {
+ "description": "Select up in input",
+ "default": "shift+up",
+ "type": "string"
+ },
+ "input_select_down": {
+ "description": "Select down in input",
+ "default": "shift+down",
+ "type": "string"
+ },
+ "input_line_home": {
+ "description": "Move to start of line in input",
+ "default": "ctrl+a",
+ "type": "string"
+ },
+ "input_line_end": {
+ "description": "Move to end of line in input",
+ "default": "ctrl+e",
+ "type": "string"
+ },
+ "input_select_line_home": {
+ "description": "Select to start of line in input",
+ "default": "ctrl+shift+a",
+ "type": "string"
+ },
+ "input_select_line_end": {
+ "description": "Select to end of line in input",
+ "default": "ctrl+shift+e",
+ "type": "string"
+ },
+ "input_visual_line_home": {
+ "description": "Move to start of visual line in input",
+ "default": "alt+a",
+ "type": "string"
+ },
+ "input_visual_line_end": {
+ "description": "Move to end of visual line in input",
+ "default": "alt+e",
+ "type": "string"
+ },
+ "input_select_visual_line_home": {
+ "description": "Select to start of visual line in input",
+ "default": "alt+shift+a",
+ "type": "string"
+ },
+ "input_select_visual_line_end": {
+ "description": "Select to end of visual line in input",
+ "default": "alt+shift+e",
+ "type": "string"
+ },
+ "input_buffer_home": {
+ "description": "Move to start of buffer in input",
+ "default": "home",
+ "type": "string"
+ },
+ "input_buffer_end": {
+ "description": "Move to end of buffer in input",
+ "default": "end",
+ "type": "string"
+ },
+ "input_select_buffer_home": {
+ "description": "Select to start of buffer in input",
+ "default": "shift+home",
+ "type": "string"
+ },
+ "input_select_buffer_end": {
+ "description": "Select to end of buffer in input",
+ "default": "shift+end",
+ "type": "string"
+ },
+ "input_delete_line": {
+ "description": "Delete line in input",
+ "default": "ctrl+shift+d",
+ "type": "string"
+ },
+ "input_delete_to_line_end": {
+ "description": "Delete to end of line in input",
+ "default": "ctrl+k",
+ "type": "string"
+ },
+ "input_delete_to_line_start": {
+ "description": "Delete to start of line in input",
+ "default": "ctrl+u",
+ "type": "string"
+ },
+ "input_backspace": {
+ "description": "Backspace in input",
+ "default": "backspace,shift+backspace",
+ "type": "string"
+ },
+ "input_delete": {
+ "description": "Delete character in input",
+ "default": "ctrl+d,delete,shift+delete",
+ "type": "string"
+ },
+ "input_undo": {
+ "description": "Undo in input",
+ "default": "ctrl+-,super+z",
+ "type": "string"
+ },
+ "input_redo": {
+ "description": "Redo in input",
+ "default": "ctrl+.,super+shift+z",
+ "type": "string"
+ },
+ "input_word_forward": {
+ "description": "Move word forward in input",
+ "default": "alt+f,alt+right,ctrl+right",
+ "type": "string"
+ },
+ "input_word_backward": {
+ "description": "Move word backward in input",
+ "default": "alt+b,alt+left,ctrl+left",
+ "type": "string"
+ },
+ "input_select_word_forward": {
+ "description": "Select word forward in input",
+ "default": "alt+shift+f,alt+shift+right",
+ "type": "string"
+ },
+ "input_select_word_backward": {
+ "description": "Select word backward in input",
+ "default": "alt+shift+b,alt+shift+left",
+ "type": "string"
+ },
+ "input_delete_word_forward": {
+ "description": "Delete word forward in input",
+ "default": "alt+d,alt+delete,ctrl+delete",
+ "type": "string"
+ },
+ "input_delete_word_backward": {
+ "description": "Delete word backward in input",
+ "default": "ctrl+w,ctrl+backspace,alt+backspace",
+ "type": "string"
+ },
+ "history_previous": {
+ "description": "Previous history item",
+ "default": "up",
+ "type": "string"
+ },
+ "history_next": {
+ "description": "Next history item",
+ "default": "down",
+ "type": "string"
+ },
+ "session_child_cycle": {
+ "description": "Next child session",
+ "default": "right",
+ "type": "string"
+ },
+ "session_child_cycle_reverse": {
+ "description": "Previous child session",
+ "default": "left",
+ "type": "string"
+ },
+ "session_parent": {
+ "description": "Go to parent session",
+ "default": "up",
+ "type": "string"
+ },
+ "terminal_suspend": {
+ "description": "Suspend terminal",
+ "default": "ctrl+z",
+ "type": "string"
+ },
+ "terminal_title_toggle": {
+ "description": "Toggle terminal title",
+ "default": "none",
+ "type": "string"
+ },
+ "tips_toggle": {
+ "description": "Toggle tips on home screen",
+ "default": "h",
+ "type": "string"
+ },
+ "display_thinking": {
+ "description": "Toggle thinking blocks visibility",
+ "default": "none",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "LogLevel": {
+ "description": "Log level",
+ "type": "string",
+ "enum": [
+ "DEBUG",
+ "INFO",
+ "WARN",
+ "ERROR"
+ ]
+ },
+ "ServerConfig": {
+ "description": "Server configuration for opencode serve and web commands",
+ "type": "object",
+ "properties": {
+ "port": {
+ "description": "Port to listen on",
+ "type": "integer",
+ "exclusiveMinimum": 0,
+ "maximum": 9007199254740991
+ },
+ "hostname": {
+ "description": "Hostname to listen on",
+ "type": "string"
+ },
+ "mdns": {
+ "description": "Enable mDNS service discovery",
+ "type": "boolean"
+ },
+ "mdnsDomain": {
+ "description": "Custom domain name for mDNS service (default: opencode.local)",
+ "type": "string"
+ },
+ "cors": {
+ "description": "Additional domains to allow for CORS",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "additionalProperties": false
+ },
+ "PermissionActionConfig": {
+ "type": "string",
+ "enum": [
+ "ask",
+ "allow",
+ "deny"
+ ]
+ },
+ "PermissionObjectConfig": {
+ "type": "object",
+ "propertyNames": {
+ "type": "string"
+ },
+ "additionalProperties": {
+ "$ref": "#/components/schemas/PermissionActionConfig"
+ }
+ },
+ "PermissionRuleConfig": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/PermissionActionConfig"
+ },
+ {
+ "$ref": "#/components/schemas/PermissionObjectConfig"
+ }
+ ]
+ },
+ "PermissionConfig": {
+ "anyOf": [
+ {
+ "type": "object",
+ "properties": {
+ "__originalKeys": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "read": {
+ "$ref": "#/components/schemas/PermissionRuleConfig"
+ },
+ "edit": {
+ "$ref": "#/components/schemas/PermissionRuleConfig"
+ },
+ "glob": {
+ "$ref": "#/components/schemas/PermissionRuleConfig"
+ },
+ "grep": {
+ "$ref": "#/components/schemas/PermissionRuleConfig"
+ },
+ "list": {
+ "$ref": "#/components/schemas/PermissionRuleConfig"
+ },
+ "bash": {
+ "$ref": "#/components/schemas/PermissionRuleConfig"
+ },
+ "task": {
+ "$ref": "#/components/schemas/PermissionRuleConfig"
+ },
+ "external_directory": {
+ "$ref": "#/components/schemas/PermissionRuleConfig"
+ },
+ "todowrite": {
+ "$ref": "#/components/schemas/PermissionActionConfig"
+ },
+ "todoread": {
+ "$ref": "#/components/schemas/PermissionActionConfig"
+ },
+ "question": {
+ "$ref": "#/components/schemas/PermissionActionConfig"
+ },
+ "webfetch": {
+ "$ref": "#/components/schemas/PermissionActionConfig"
+ },
+ "websearch": {
+ "$ref": "#/components/schemas/PermissionActionConfig"
+ },
+ "codesearch": {
+ "$ref": "#/components/schemas/PermissionActionConfig"
+ },
+ "lsp": {
+ "$ref": "#/components/schemas/PermissionRuleConfig"
+ },
+ "doom_loop": {
+ "$ref": "#/components/schemas/PermissionActionConfig"
+ },
+ "skill": {
+ "$ref": "#/components/schemas/PermissionRuleConfig"
+ }
+ },
+ "additionalProperties": {
+ "$ref": "#/components/schemas/PermissionRuleConfig"
+ }
+ },
+ {
+ "$ref": "#/components/schemas/PermissionActionConfig"
+ }
+ ]
+ },
+ "AgentConfig": {
+ "type": "object",
+ "properties": {
+ "model": {
+ "type": "string"
+ },
+ "variant": {
+ "description": "Default model variant for this agent (applies only when using the agent's configured model).",
+ "type": "string"
+ },
+ "temperature": {
+ "type": "number"
+ },
+ "top_p": {
+ "type": "number"
+ },
+ "prompt": {
+ "type": "string"
+ },
+ "tools": {
+ "description": "@deprecated Use 'permission' field instead",
+ "type": "object",
+ "propertyNames": {
+ "type": "string"
+ },
+ "additionalProperties": {
+ "type": "boolean"
+ }
+ },
+ "disable": {
+ "type": "boolean"
+ },
+ "description": {
+ "description": "Description of when to use the agent",
+ "type": "string"
+ },
+ "mode": {
+ "type": "string",
+ "enum": [
+ "subagent",
+ "primary",
+ "all"
+ ]
+ },
+ "hidden": {
+ "description": "Hide this subagent from the @ autocomplete menu (default: false, only applies to mode: subagent)",
+ "type": "boolean"
+ },
+ "options": {
+ "type": "object",
+ "propertyNames": {
+ "type": "string"
+ },
+ "additionalProperties": {}
+ },
+ "color": {
+ "description": "Hex color code (e.g., #FF5733) or theme color (e.g., primary)",
+ "anyOf": [
+ {
+ "type": "string",
+ "pattern": "^#[0-9a-fA-F]{6}$"
+ },
+ {
+ "type": "string",
+ "enum": [
+ "primary",
+ "secondary",
+ "accent",
+ "success",
+ "warning",
+ "error",
+ "info"
+ ]
+ }
+ ]
+ },
+ "steps": {
+ "description": "Maximum number of agentic iterations before forcing text-only response",
+ "type": "integer",
+ "exclusiveMinimum": 0,
+ "maximum": 9007199254740991
+ },
+ "maxSteps": {
+ "description": "@deprecated Use 'steps' field instead.",
+ "type": "integer",
+ "exclusiveMinimum": 0,
+ "maximum": 9007199254740991
+ },
+ "permission": {
+ "$ref": "#/components/schemas/PermissionConfig"
+ }
+ },
+ "additionalProperties": {}
+ },
+ "ProviderConfig": {
+ "type": "object",
+ "properties": {
+ "api": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ },
+ "env": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "id": {
+ "type": "string"
+ },
+ "npm": {
+ "type": "string"
+ },
+ "models": {
+ "type": "object",
+ "propertyNames": {
+ "type": "string"
+ },
+ "additionalProperties": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ },
+ "family": {
+ "type": "string"
+ },
+ "release_date": {
+ "type": "string"
+ },
+ "attachment": {
+ "type": "boolean"
+ },
+ "reasoning": {
+ "type": "boolean"
+ },
+ "temperature": {
+ "type": "boolean"
+ },
+ "tool_call": {
+ "type": "boolean"
+ },
+ "interleaved": {
+ "anyOf": [
+ {
+ "type": "boolean",
+ "const": true
+ },
+ {
+ "type": "object",
+ "properties": {
+ "field": {
+ "type": "string",
+ "enum": [
+ "reasoning_content",
+ "reasoning_details"
+ ]
+ }
+ },
+ "required": [
+ "field"
+ ],
+ "additionalProperties": false
+ }
+ ]
+ },
+ "cost": {
+ "type": "object",
+ "properties": {
+ "input": {
+ "type": "number"
+ },
+ "output": {
+ "type": "number"
+ },
+ "cache_read": {
+ "type": "number"
+ },
+ "cache_write": {
+ "type": "number"
+ },
+ "context_over_200k": {
+ "type": "object",
+ "properties": {
+ "input": {
+ "type": "number"
+ },
+ "output": {
+ "type": "number"
+ },
+ "cache_read": {
+ "type": "number"
+ },
+ "cache_write": {
+ "type": "number"
+ }
+ },
+ "required": [
+ "input",
+ "output"
+ ]
+ }
+ },
+ "required": [
+ "input",
+ "output"
+ ]
+ },
+ "limit": {
+ "type": "object",
+ "properties": {
+ "context": {
+ "type": "number"
+ },
+ "input": {
+ "type": "number"
+ },
+ "output": {
+ "type": "number"
+ }
+ },
+ "required": [
+ "context",
+ "output"
+ ]
+ },
+ "modalities": {
+ "type": "object",
+ "properties": {
+ "input": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "enum": [
+ "text",
+ "audio",
+ "image",
+ "video",
+ "pdf"
+ ]
+ }
+ },
+ "output": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "enum": [
+ "text",
+ "audio",
+ "image",
+ "video",
+ "pdf"
+ ]
+ }
+ }
+ },
+ "required": [
+ "input",
+ "output"
+ ]
+ },
+ "experimental": {
+ "type": "boolean"
+ },
+ "status": {
+ "type": "string",
+ "enum": [
+ "alpha",
+ "beta",
+ "deprecated"
+ ]
+ },
+ "options": {
+ "type": "object",
+ "propertyNames": {
+ "type": "string"
+ },
+ "additionalProperties": {}
+ },
+ "headers": {
+ "type": "object",
+ "propertyNames": {
+ "type": "string"
+ },
+ "additionalProperties": {
+ "type": "string"
+ }
+ },
+ "provider": {
+ "type": "object",
+ "properties": {
+ "npm": {
+ "type": "string"
+ },
+ "api": {
+ "type": "string"
+ }
+ }
+ },
+ "variants": {
+ "description": "Variant-specific configuration",
+ "type": "object",
+ "propertyNames": {
+ "type": "string"
+ },
+ "additionalProperties": {
+ "type": "object",
+ "properties": {
+ "disabled": {
+ "description": "Disable this variant for the model",
+ "type": "boolean"
+ }
+ },
+ "additionalProperties": {}
+ }
+ }
+ }
+ }
+ },
+ "whitelist": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "blacklist": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "options": {
+ "type": "object",
+ "properties": {
+ "apiKey": {
+ "type": "string"
+ },
+ "baseURL": {
+ "type": "string"
+ },
+ "enterpriseUrl": {
+ "description": "GitHub Enterprise URL for copilot authentication",
+ "type": "string"
+ },
+ "setCacheKey": {
+ "description": "Enable promptCacheKey for this provider (default false)",
+ "type": "boolean"
+ },
+ "timeout": {
+ "description": "Timeout in milliseconds for requests to this provider. Default is 300000 (5 minutes). Set to false to disable timeout.",
+ "anyOf": [
+ {
+ "description": "Timeout in milliseconds for requests to this provider. Default is 300000 (5 minutes). Set to false to disable timeout.",
+ "type": "integer",
+ "exclusiveMinimum": 0,
+ "maximum": 9007199254740991
+ },
+ {
+ "description": "Disable timeout for this provider entirely.",
+ "type": "boolean",
+ "const": false
+ }
+ ]
+ }
+ },
+ "additionalProperties": {}
+ }
+ },
+ "additionalProperties": false
+ },
+ "McpLocalConfig": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "description": "Type of MCP server connection",
+ "type": "string",
+ "const": "local"
+ },
+ "command": {
+ "description": "Command and arguments to run the MCP server",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "environment": {
+ "description": "Environment variables to set when running the MCP server",
+ "type": "object",
+ "propertyNames": {
+ "type": "string"
+ },
+ "additionalProperties": {
+ "type": "string"
+ }
+ },
+ "enabled": {
+ "description": "Enable or disable the MCP server on startup",
+ "type": "boolean"
+ },
+ "timeout": {
+ "description": "Timeout in ms for MCP server requests. Defaults to 5000 (5 seconds) if not specified.",
+ "type": "integer",
+ "exclusiveMinimum": 0,
+ "maximum": 9007199254740991
+ }
+ },
+ "required": [
+ "type",
+ "command"
+ ],
+ "additionalProperties": false
+ },
+ "McpOAuthConfig": {
+ "type": "object",
+ "properties": {
+ "clientId": {
+ "description": "OAuth client ID. If not provided, dynamic client registration (RFC 7591) will be attempted.",
+ "type": "string"
+ },
+ "clientSecret": {
+ "description": "OAuth client secret (if required by the authorization server)",
+ "type": "string"
+ },
+ "scope": {
+ "description": "OAuth scopes to request during authorization",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "McpRemoteConfig": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "description": "Type of MCP server connection",
+ "type": "string",
+ "const": "remote"
+ },
+ "url": {
+ "description": "URL of the remote MCP server",
+ "type": "string"
+ },
+ "enabled": {
+ "description": "Enable or disable the MCP server on startup",
+ "type": "boolean"
+ },
+ "headers": {
+ "description": "Headers to send with the request",
+ "type": "object",
+ "propertyNames": {
+ "type": "string"
+ },
+ "additionalProperties": {
+ "type": "string"
+ }
+ },
+ "oauth": {
+ "description": "OAuth authentication configuration for the MCP server. Set to false to disable OAuth auto-detection.",
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/McpOAuthConfig"
+ },
+ {
+ "type": "boolean",
+ "const": false
+ }
+ ]
+ },
+ "timeout": {
+ "description": "Timeout in ms for MCP server requests. Defaults to 5000 (5 seconds) if not specified.",
+ "type": "integer",
+ "exclusiveMinimum": 0,
+ "maximum": 9007199254740991
+ }
+ },
+ "required": [
+ "type",
+ "url"
+ ],
+ "additionalProperties": false
+ },
+ "LayoutConfig": {
+ "description": "@deprecated Always uses stretch layout.",
+ "type": "string",
+ "enum": [
+ "auto",
+ "stretch"
+ ]
+ },
+ "Config": {
+ "type": "object",
+ "properties": {
+ "$schema": {
+ "description": "JSON schema reference for configuration validation",
+ "type": "string"
+ },
+ "theme": {
+ "description": "Theme name to use for the interface",
+ "type": "string"
+ },
+ "keybinds": {
+ "$ref": "#/components/schemas/KeybindsConfig"
+ },
+ "logLevel": {
+ "$ref": "#/components/schemas/LogLevel"
+ },
+ "tui": {
+ "description": "TUI specific settings",
+ "type": "object",
+ "properties": {
+ "scroll_speed": {
+ "description": "TUI scroll speed",
+ "type": "number",
+ "minimum": 0.001
+ },
+ "scroll_acceleration": {
+ "description": "Scroll acceleration settings",
+ "type": "object",
+ "properties": {
+ "enabled": {
+ "description": "Enable scroll acceleration",
+ "type": "boolean"
+ }
+ },
+ "required": [
+ "enabled"
+ ]
+ },
+ "diff_style": {
+ "description": "Control diff rendering style: 'auto' adapts to terminal width, 'stacked' always shows single column",
+ "type": "string",
+ "enum": [
+ "auto",
+ "stacked"
+ ]
+ }
+ }
+ },
+ "server": {
+ "$ref": "#/components/schemas/ServerConfig"
+ },
+ "command": {
+ "description": "Command configuration, see https://opencode.ai/docs/commands",
+ "type": "object",
+ "propertyNames": {
+ "type": "string"
+ },
+ "additionalProperties": {
+ "type": "object",
+ "properties": {
+ "template": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "agent": {
+ "type": "string"
+ },
+ "model": {
+ "type": "string"
+ },
+ "subtask": {
+ "type": "boolean"
+ }
+ },
+ "required": [
+ "template"
+ ]
+ }
+ },
+ "skills": {
+ "description": "Additional skill folder paths",
+ "type": "object",
+ "properties": {
+ "paths": {
+ "description": "Additional paths to skill folders",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "urls": {
+ "description": "URLs to fetch skills from (e.g., https://example.com/.well-known/skills/)",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "watcher": {
+ "type": "object",
+ "properties": {
+ "ignore": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "plugin": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "snapshot": {
+ "type": "boolean"
+ },
+ "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"
+ ]
+ },
+ "autoshare": {
+ "description": "@deprecated Use 'share' field instead. Share newly created sessions automatically",
+ "type": "boolean"
+ },
+ "autoupdate": {
+ "description": "Automatically update to the latest version. Set to true to auto-update, false to disable, or 'notify' to show update notifications",
+ "anyOf": [
+ {
+ "type": "boolean"
+ },
+ {
+ "type": "string",
+ "const": "notify"
+ }
+ ]
+ },
+ "disabled_providers": {
+ "description": "Disable providers that are loaded automatically",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "enabled_providers": {
+ "description": "When set, ONLY these providers will be enabled. All other providers will be ignored",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "model": {
+ "description": "Model to use in the format of provider/model, eg anthropic/claude-2",
+ "type": "string"
+ },
+ "small_model": {
+ "description": "Small model to use for tasks like title generation in the format of provider/model",
+ "type": "string"
+ },
+ "default_agent": {
+ "description": "Default agent to use when none is specified. Must be a primary agent. Falls back to 'build' if not set or if the specified agent is invalid.",
+ "type": "string"
+ },
+ "username": {
+ "description": "Custom username to display in conversations instead of system username",
+ "type": "string"
+ },
+ "mode": {
+ "description": "@deprecated Use `agent` field instead.",
+ "type": "object",
+ "properties": {
+ "build": {
+ "$ref": "#/components/schemas/AgentConfig"
+ },
+ "plan": {
+ "$ref": "#/components/schemas/AgentConfig"
+ }
+ },
+ "additionalProperties": {
+ "$ref": "#/components/schemas/AgentConfig"
+ }
+ },
+ "agent": {
+ "description": "Agent configuration, see https://opencode.ai/docs/agents",
+ "type": "object",
+ "properties": {
+ "plan": {
+ "$ref": "#/components/schemas/AgentConfig"
+ },
+ "build": {
+ "$ref": "#/components/schemas/AgentConfig"
+ },
+ "general": {
+ "$ref": "#/components/schemas/AgentConfig"
+ },
+ "explore": {
+ "$ref": "#/components/schemas/AgentConfig"
+ },
+ "title": {
+ "$ref": "#/components/schemas/AgentConfig"
+ },
+ "summary": {
+ "$ref": "#/components/schemas/AgentConfig"
+ },
+ "compaction": {
+ "$ref": "#/components/schemas/AgentConfig"
+ }
+ },
+ "additionalProperties": {
+ "$ref": "#/components/schemas/AgentConfig"
+ }
+ },
+ "provider": {
+ "description": "Custom provider configurations and model overrides",
+ "type": "object",
+ "propertyNames": {
+ "type": "string"
+ },
+ "additionalProperties": {
+ "$ref": "#/components/schemas/ProviderConfig"
+ }
+ },
+ "mcp": {
+ "description": "MCP (Model Context Protocol) server configurations",
+ "type": "object",
+ "propertyNames": {
+ "type": "string"
+ },
+ "additionalProperties": {
+ "anyOf": [
+ {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/McpLocalConfig"
+ },
+ {
+ "$ref": "#/components/schemas/McpRemoteConfig"
+ }
+ ]
+ },
+ {
+ "type": "object",
+ "properties": {
+ "enabled": {
+ "type": "boolean"
+ }
+ },
+ "required": [
+ "enabled"
+ ],
+ "additionalProperties": false
+ }
+ ]
+ }
+ },
+ "formatter": {
+ "anyOf": [
+ {
+ "type": "boolean",
+ "const": false
+ },
+ {
+ "type": "object",
+ "propertyNames": {
+ "type": "string"
+ },
+ "additionalProperties": {
+ "type": "object",
+ "properties": {
+ "disabled": {
+ "type": "boolean"
+ },
+ "command": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "environment": {
+ "type": "object",
+ "propertyNames": {
+ "type": "string"
+ },
+ "additionalProperties": {
+ "type": "string"
+ }
+ },
+ "extensions": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ ]
+ },
+ "lsp": {
+ "anyOf": [
+ {
+ "type": "boolean",
+ "const": false
+ },
+ {
+ "type": "object",
+ "propertyNames": {
+ "type": "string"
+ },
+ "additionalProperties": {
+ "anyOf": [
+ {
+ "type": "object",
+ "properties": {
+ "disabled": {
+ "type": "boolean",
+ "const": true
+ }
+ },
+ "required": [
+ "disabled"
+ ]
+ },
+ {
+ "type": "object",
+ "properties": {
+ "command": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "extensions": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "disabled": {
+ "type": "boolean"
+ },
+ "env": {
+ "type": "object",
+ "propertyNames": {
+ "type": "string"
+ },
+ "additionalProperties": {
+ "type": "string"
+ }
+ },
+ "initialization": {
+ "type": "object",
+ "propertyNames": {
+ "type": "string"
+ },
+ "additionalProperties": {}
+ }
+ },
+ "required": [
+ "command"
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ },
+ "instructions": {
+ "description": "Additional instruction files or patterns to include",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "layout": {
+ "$ref": "#/components/schemas/LayoutConfig"
+ },
+ "permission": {
+ "$ref": "#/components/schemas/PermissionConfig"
+ },
+ "tools": {
+ "type": "object",
+ "propertyNames": {
+ "type": "string"
+ },
+ "additionalProperties": {
+ "type": "boolean"
+ }
+ },
+ "enterprise": {
+ "type": "object",
+ "properties": {
+ "url": {
+ "description": "Enterprise URL",
+ "type": "string"
+ }
+ }
+ },
+ "compaction": {
+ "type": "object",
+ "properties": {
+ "auto": {
+ "description": "Enable automatic compaction when context is full (default: true)",
+ "type": "boolean"
+ },
+ "prune": {
+ "description": "Enable pruning of old tool outputs (default: true)",
+ "type": "boolean"
+ },
+ "reserved": {
+ "description": "Token buffer for compaction. Leaves enough window to avoid overflow during compaction.",
+ "type": "integer",
+ "minimum": 0,
+ "maximum": 9007199254740991
+ }
+ }
+ },
+ "experimental": {
+ "type": "object",
+ "properties": {
+ "disable_paste_summary": {
+ "type": "boolean"
+ },
+ "batch_tool": {
+ "description": "Enable the batch tool",
+ "type": "boolean"
+ },
+ "openTelemetry": {
+ "description": "Enable OpenTelemetry spans for AI SDK calls (using the 'experimental_telemetry' flag)",
+ "type": "boolean"
+ },
+ "primary_tools": {
+ "description": "Tools that should only be available to primary agents.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "continue_loop_on_deny": {
+ "description": "Continue the agent loop when a tool call is denied",
+ "type": "boolean"
+ },
+ "mcp_timeout": {
+ "description": "Timeout in milliseconds for model context protocol (MCP) requests",
+ "type": "integer",
+ "exclusiveMinimum": 0,
+ "maximum": 9007199254740991
+ }
+ }
+ }
+ },
+ "additionalProperties": false
+ },
+ "BadRequestError": {
+ "type": "object",
+ "properties": {
+ "data": {},
+ "errors": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "propertyNames": {
+ "type": "string"
+ },
+ "additionalProperties": {}
+ }
+ },
+ "success": {
+ "type": "boolean",
+ "const": false
+ }
+ },
+ "required": [
+ "data",
+ "errors",
+ "success"
+ ]
+ },
+ "OAuth": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "oauth"
+ },
+ "refresh": {
+ "type": "string"
+ },
+ "access": {
+ "type": "string"
+ },
+ "expires": {
+ "type": "number"
+ },
+ "accountId": {
+ "type": "string"
+ },
+ "enterpriseUrl": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "type",
+ "refresh",
+ "access",
+ "expires"
+ ]
+ },
+ "ApiAuth": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "api"
+ },
+ "key": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "type",
+ "key"
+ ]
+ },
+ "WellKnownAuth": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "wellknown"
+ },
+ "key": {
+ "type": "string"
+ },
+ "token": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "type",
+ "key",
+ "token"
+ ]
+ },
+ "Auth": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/OAuth"
+ },
+ {
+ "$ref": "#/components/schemas/ApiAuth"
+ },
+ {
+ "$ref": "#/components/schemas/WellKnownAuth"
+ }
+ ]
+ },
+ "NotFoundError": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string",
+ "const": "NotFoundError"
+ },
+ "data": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "message"
+ ]
+ }
+ },
+ "required": [
+ "name",
+ "data"
+ ]
+ },
+ "Model": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "string"
+ },
+ "providerID": {
+ "type": "string"
+ },
+ "api": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "string"
+ },
+ "url": {
+ "type": "string"
+ },
+ "npm": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "id",
+ "url",
+ "npm"
+ ]
+ },
+ "name": {
+ "type": "string"
+ },
+ "family": {
+ "type": "string"
+ },
+ "capabilities": {
+ "type": "object",
+ "properties": {
+ "temperature": {
+ "type": "boolean"
+ },
+ "reasoning": {
+ "type": "boolean"
+ },
+ "attachment": {
+ "type": "boolean"
+ },
+ "toolcall": {
+ "type": "boolean"
+ },
+ "input": {
+ "type": "object",
+ "properties": {
+ "text": {
+ "type": "boolean"
+ },
+ "audio": {
+ "type": "boolean"
+ },
+ "image": {
+ "type": "boolean"
+ },
+ "video": {
+ "type": "boolean"
+ },
+ "pdf": {
+ "type": "boolean"
+ }
+ },
+ "required": [
+ "text",
+ "audio",
+ "image",
+ "video",
+ "pdf"
+ ]
+ },
+ "output": {
+ "type": "object",
+ "properties": {
+ "text": {
+ "type": "boolean"
+ },
+ "audio": {
+ "type": "boolean"
+ },
+ "image": {
+ "type": "boolean"
+ },
+ "video": {
+ "type": "boolean"
+ },
+ "pdf": {
+ "type": "boolean"
+ }
+ },
+ "required": [
+ "text",
+ "audio",
+ "image",
+ "video",
+ "pdf"
+ ]
+ },
+ "interleaved": {
+ "anyOf": [
+ {
+ "type": "boolean"
+ },
+ {
+ "type": "object",
+ "properties": {
+ "field": {
+ "type": "string",
+ "enum": [
+ "reasoning_content",
+ "reasoning_details"
+ ]
+ }
+ },
+ "required": [
+ "field"
+ ]
+ }
+ ]
+ }
+ },
+ "required": [
+ "temperature",
+ "reasoning",
+ "attachment",
+ "toolcall",
+ "input",
+ "output",
+ "interleaved"
+ ]
+ },
+ "cost": {
+ "type": "object",
+ "properties": {
+ "input": {
+ "type": "number"
+ },
+ "output": {
+ "type": "number"
+ },
+ "cache": {
+ "type": "object",
+ "properties": {
+ "read": {
+ "type": "number"
+ },
+ "write": {
+ "type": "number"
+ }
+ },
+ "required": [
+ "read",
+ "write"
+ ]
+ },
+ "experimentalOver200K": {
+ "type": "object",
+ "properties": {
+ "input": {
+ "type": "number"
+ },
+ "output": {
+ "type": "number"
+ },
+ "cache": {
+ "type": "object",
+ "properties": {
+ "read": {
+ "type": "number"
+ },
+ "write": {
+ "type": "number"
+ }
+ },
+ "required": [
+ "read",
+ "write"
+ ]
+ }
+ },
+ "required": [
+ "input",
+ "output",
+ "cache"
+ ]
+ }
+ },
+ "required": [
+ "input",
+ "output",
+ "cache"
+ ]
+ },
+ "limit": {
+ "type": "object",
+ "properties": {
+ "context": {
+ "type": "number"
+ },
+ "input": {
+ "type": "number"
+ },
+ "output": {
+ "type": "number"
+ }
+ },
+ "required": [
+ "context",
+ "output"
+ ]
+ },
+ "status": {
+ "type": "string",
+ "enum": [
+ "alpha",
+ "beta",
+ "deprecated",
+ "active"
+ ]
+ },
+ "options": {
+ "type": "object",
+ "propertyNames": {
+ "type": "string"
+ },
+ "additionalProperties": {}
+ },
+ "headers": {
+ "type": "object",
+ "propertyNames": {
+ "type": "string"
+ },
+ "additionalProperties": {
+ "type": "string"
+ }
+ },
+ "release_date": {
+ "type": "string"
+ },
+ "variants": {
+ "type": "object",
+ "propertyNames": {
+ "type": "string"
+ },
+ "additionalProperties": {
+ "type": "object",
+ "propertyNames": {
+ "type": "string"
+ },
+ "additionalProperties": {}
+ }
+ }
+ },
+ "required": [
+ "id",
+ "providerID",
+ "api",
+ "name",
+ "capabilities",
+ "cost",
+ "limit",
+ "status",
+ "options",
+ "headers",
+ "release_date"
+ ]
+ },
+ "Provider": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ },
+ "source": {
+ "type": "string",
+ "enum": [
+ "env",
+ "config",
+ "custom",
+ "api"
+ ]
+ },
+ "env": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "key": {
+ "type": "string"
+ },
+ "options": {
+ "type": "object",
+ "propertyNames": {
+ "type": "string"
+ },
+ "additionalProperties": {}
+ },
+ "models": {
+ "type": "object",
+ "propertyNames": {
+ "type": "string"
+ },
+ "additionalProperties": {
+ "$ref": "#/components/schemas/Model"
+ }
+ }
+ },
+ "required": [
+ "id",
+ "name",
+ "source",
+ "env",
+ "options",
+ "models"
+ ]
+ },
+ "ToolIDs": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "ToolListItem": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "parameters": {}
+ },
+ "required": [
+ "id",
+ "description",
+ "parameters"
+ ]
+ },
+ "ToolList": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/ToolListItem"
+ }
+ },
+ "Worktree": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "branch": {
+ "type": "string"
+ },
+ "directory": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "name",
+ "branch",
+ "directory"
+ ]
+ },
+ "WorktreeCreateInput": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "startCommand": {
+ "description": "Additional startup script to run after the project's start command",
+ "type": "string"
+ }
+ }
+ },
+ "WorktreeRemoveInput": {
+ "type": "object",
+ "properties": {
+ "directory": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "directory"
+ ]
+ },
+ "WorktreeResetInput": {
+ "type": "object",
+ "properties": {
+ "directory": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "directory"
+ ]
+ },
+ "McpResource": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "uri": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "mimeType": {
+ "type": "string"
+ },
+ "client": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "name",
+ "uri",
+ "client"
+ ]
+ },
+ "TextPartInput": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "string"
+ },
+ "type": {
+ "type": "string",
+ "const": "text"
+ },
+ "text": {
+ "type": "string"
+ },
+ "synthetic": {
+ "type": "boolean"
+ },
+ "ignored": {
+ "type": "boolean"
+ },
+ "time": {
+ "type": "object",
+ "properties": {
+ "start": {
+ "type": "number"
+ },
+ "end": {
+ "type": "number"
+ }
+ },
+ "required": [
+ "start"
+ ]
+ },
+ "metadata": {
+ "type": "object",
+ "propertyNames": {
+ "type": "string"
+ },
+ "additionalProperties": {}
+ }
+ },
+ "required": [
+ "type",
+ "text"
+ ]
+ },
+ "FilePartInput": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "string"
+ },
+ "type": {
+ "type": "string",
+ "const": "file"
+ },
+ "mime": {
+ "type": "string"
+ },
+ "filename": {
+ "type": "string"
+ },
+ "url": {
+ "type": "string"
+ },
+ "source": {
+ "$ref": "#/components/schemas/FilePartSource"
+ }
+ },
+ "required": [
+ "type",
+ "mime",
+ "url"
+ ]
+ },
+ "AgentPartInput": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "string"
+ },
+ "type": {
+ "type": "string",
+ "const": "agent"
+ },
+ "name": {
+ "type": "string"
+ },
+ "source": {
+ "type": "object",
+ "properties": {
+ "value": {
+ "type": "string"
+ },
+ "start": {
+ "type": "integer",
+ "minimum": -9007199254740991,
+ "maximum": 9007199254740991
+ },
+ "end": {
+ "type": "integer",
+ "minimum": -9007199254740991,
+ "maximum": 9007199254740991
+ }
+ },
+ "required": [
+ "value",
+ "start",
+ "end"
+ ]
+ }
+ },
+ "required": [
+ "type",
+ "name"
+ ]
+ },
+ "SubtaskPartInput": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "string"
+ },
+ "type": {
+ "type": "string",
+ "const": "subtask"
+ },
+ "prompt": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "agent": {
+ "type": "string"
+ },
+ "model": {
+ "type": "object",
+ "properties": {
+ "providerID": {
+ "type": "string"
+ },
+ "modelID": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "providerID",
+ "modelID"
+ ]
+ },
+ "command": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "type",
+ "prompt",
+ "description",
+ "agent"
+ ]
+ },
+ "ProviderAuthMethod": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "anyOf": [
+ {
+ "type": "string",
+ "const": "oauth"
+ },
+ {
+ "type": "string",
+ "const": "api"
+ }
+ ]
+ },
+ "label": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "type",
+ "label"
+ ]
+ },
+ "ProviderAuthAuthorization": {
+ "type": "object",
+ "properties": {
+ "url": {
+ "type": "string"
+ },
+ "method": {
+ "anyOf": [
+ {
+ "type": "string",
+ "const": "auto"
+ },
+ {
+ "type": "string",
+ "const": "code"
+ }
+ ]
+ },
+ "instructions": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "url",
+ "method",
+ "instructions"
+ ]
+ },
+ "Symbol": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "kind": {
+ "type": "number"
+ },
+ "location": {
+ "type": "object",
+ "properties": {
+ "uri": {
+ "type": "string"
+ },
+ "range": {
+ "$ref": "#/components/schemas/Range"
+ }
+ },
+ "required": [
+ "uri",
+ "range"
+ ]
+ }
+ },
+ "required": [
+ "name",
+ "kind",
+ "location"
+ ]
+ },
+ "FileNode": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "path": {
+ "type": "string"
+ },
+ "absolute": {
+ "type": "string"
+ },
+ "type": {
+ "type": "string",
+ "enum": [
+ "file",
+ "directory"
+ ]
+ },
+ "ignored": {
+ "type": "boolean"
+ }
+ },
+ "required": [
+ "name",
+ "path",
+ "absolute",
+ "type",
+ "ignored"
+ ]
+ },
+ "FileContent": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "enum": [
+ "text",
+ "binary"
+ ]
+ },
+ "content": {
+ "type": "string"
+ },
+ "diff": {
+ "type": "string"
+ },
+ "patch": {
+ "type": "object",
+ "properties": {
+ "oldFileName": {
+ "type": "string"
+ },
+ "newFileName": {
+ "type": "string"
+ },
+ "oldHeader": {
+ "type": "string"
+ },
+ "newHeader": {
+ "type": "string"
+ },
+ "hunks": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "oldStart": {
+ "type": "number"
+ },
+ "oldLines": {
+ "type": "number"
+ },
+ "newStart": {
+ "type": "number"
+ },
+ "newLines": {
+ "type": "number"
+ },
+ "lines": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "required": [
+ "oldStart",
+ "oldLines",
+ "newStart",
+ "newLines",
+ "lines"
+ ]
+ }
+ },
+ "index": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "oldFileName",
+ "newFileName",
+ "hunks"
+ ]
+ },
+ "encoding": {
+ "type": "string",
+ "const": "base64"
+ },
+ "mimeType": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "type",
+ "content"
+ ]
+ },
+ "File": {
+ "type": "object",
+ "properties": {
+ "path": {
+ "type": "string"
+ },
+ "added": {
+ "type": "integer",
+ "minimum": -9007199254740991,
+ "maximum": 9007199254740991
+ },
+ "removed": {
+ "type": "integer",
+ "minimum": -9007199254740991,
+ "maximum": 9007199254740991
+ },
+ "status": {
+ "type": "string",
+ "enum": [
+ "added",
+ "deleted",
+ "modified"
+ ]
+ }
+ },
+ "required": [
+ "path",
+ "added",
+ "removed",
+ "status"
+ ]
+ },
+ "MCPStatusConnected": {
+ "type": "object",
+ "properties": {
+ "status": {
+ "type": "string",
+ "const": "connected"
+ }
+ },
+ "required": [
+ "status"
+ ]
+ },
+ "MCPStatusDisabled": {
+ "type": "object",
+ "properties": {
+ "status": {
+ "type": "string",
+ "const": "disabled"
+ }
+ },
+ "required": [
+ "status"
+ ]
+ },
+ "MCPStatusFailed": {
+ "type": "object",
+ "properties": {
+ "status": {
+ "type": "string",
+ "const": "failed"
+ },
+ "error": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "status",
+ "error"
+ ]
+ },
+ "MCPStatusNeedsAuth": {
+ "type": "object",
+ "properties": {
+ "status": {
+ "type": "string",
+ "const": "needs_auth"
+ }
+ },
+ "required": [
+ "status"
+ ]
+ },
+ "MCPStatusNeedsClientRegistration": {
+ "type": "object",
+ "properties": {
+ "status": {
+ "type": "string",
+ "const": "needs_client_registration"
+ },
+ "error": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "status",
+ "error"
+ ]
+ },
+ "MCPStatus": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/MCPStatusConnected"
+ },
+ {
+ "$ref": "#/components/schemas/MCPStatusDisabled"
+ },
+ {
+ "$ref": "#/components/schemas/MCPStatusFailed"
+ },
+ {
+ "$ref": "#/components/schemas/MCPStatusNeedsAuth"
+ },
+ {
+ "$ref": "#/components/schemas/MCPStatusNeedsClientRegistration"
+ }
+ ]
+ },
+ "Path": {
+ "type": "object",
+ "properties": {
+ "home": {
+ "type": "string"
+ },
+ "state": {
+ "type": "string"
+ },
+ "config": {
+ "type": "string"
+ },
+ "worktree": {
+ "type": "string"
+ },
+ "directory": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "home",
+ "state",
+ "config",
+ "worktree",
+ "directory"
+ ]
+ },
+ "VcsInfo": {
+ "type": "object",
+ "properties": {
+ "branch": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "branch"
+ ]
+ },
+ "Command": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "agent": {
+ "type": "string"
+ },
+ "model": {
+ "type": "string"
+ },
+ "source": {
+ "type": "string",
+ "enum": [
+ "command",
+ "mcp",
+ "skill"
+ ]
+ },
+ "template": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "string"
+ }
+ ]
+ },
+ "subtask": {
+ "type": "boolean"
+ },
+ "hints": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "required": [
+ "name",
+ "template",
+ "hints"
+ ]
+ },
+ "Agent": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "mode": {
+ "type": "string",
+ "enum": [
+ "subagent",
+ "primary",
+ "all"
+ ]
+ },
+ "native": {
+ "type": "boolean"
+ },
+ "hidden": {
+ "type": "boolean"
+ },
+ "topP": {
+ "type": "number"
+ },
+ "temperature": {
+ "type": "number"
+ },
+ "color": {
+ "type": "string"
+ },
+ "permission": {
+ "$ref": "#/components/schemas/PermissionRuleset"
+ },
+ "model": {
+ "type": "object",
+ "properties": {
+ "modelID": {
+ "type": "string"
+ },
+ "providerID": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "modelID",
+ "providerID"
+ ]
+ },
+ "variant": {
+ "type": "string"
+ },
+ "prompt": {
+ "type": "string"
+ },
+ "options": {
+ "type": "object",
+ "propertyNames": {
+ "type": "string"
+ },
+ "additionalProperties": {}
+ },
+ "steps": {
+ "type": "integer",
+ "exclusiveMinimum": 0,
+ "maximum": 9007199254740991
+ }
+ },
+ "required": [
+ "name",
+ "mode",
+ "permission",
+ "options"
+ ]
+ },
+ "LSPStatus": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ },
+ "root": {
+ "type": "string"
+ },
+ "status": {
+ "anyOf": [
+ {
+ "type": "string",
+ "const": "connected"
+ },
+ {
+ "type": "string",
+ "const": "error"
+ }
+ ]
+ }
+ },
+ "required": [
+ "id",
+ "name",
+ "root",
+ "status"
+ ]
+ },
+ "FormatterStatus": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "extensions": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "enabled": {
+ "type": "boolean"
+ }
+ },
+ "required": [
+ "name",
+ "extensions",
+ "enabled"
+ ]
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/packages/sdk/js/src/v2/gen/sdk.gen.ts b/packages/sdk/js/src/v2/gen/sdk.gen.ts
index 6165c0f7b09..4a9c534f98a 100644
--- a/packages/sdk/js/src/v2/gen/sdk.gen.ts
+++ b/packages/sdk/js/src/v2/gen/sdk.gen.ts
@@ -127,6 +127,8 @@ import type {
SessionPromptResponses,
SessionRevertErrors,
SessionRevertResponses,
+ SessionRewindErrors,
+ SessionRewindResponses,
SessionShareErrors,
SessionShareResponses,
SessionShellErrors,
@@ -1273,6 +1275,43 @@ export class Session2 extends HeyApiClient {
})
}
+ /**
+ * Rewind session
+ *
+ * Rewind a session to a specific message, removing all messages from that point without reverting file changes.
+ */
+ public rewind(
+ parameters: {
+ sessionID: string
+ directory?: string
+ messageID?: string
+ },
+ options?: Options,
+ ) {
+ const params = buildClientParams(
+ [parameters],
+ [
+ {
+ args: [
+ { in: "path", key: "sessionID" },
+ { in: "query", key: "directory" },
+ { in: "body", key: "messageID" },
+ ],
+ },
+ ],
+ )
+ return (options?.client ?? this.client).post({
+ url: "/session/{sessionID}/rewind",
+ ...options,
+ ...params,
+ headers: {
+ "Content-Type": "application/json",
+ ...options?.headers,
+ ...params.headers,
+ },
+ })
+ }
+
/**
* Fork session
*
diff --git a/packages/sdk/js/src/v2/gen/types.gen.ts b/packages/sdk/js/src/v2/gen/types.gen.ts
index be6c00cf445..d14bad685e4 100644
--- a/packages/sdk/js/src/v2/gen/types.gen.ts
+++ b/packages/sdk/js/src/v2/gen/types.gen.ts
@@ -2876,6 +2876,41 @@ export type SessionInitResponses = {
export type SessionInitResponse = SessionInitResponses[keyof SessionInitResponses]
+export type SessionRewindData = {
+ body?: {
+ messageID: string
+ }
+ path: {
+ sessionID: string
+ }
+ query?: {
+ directory?: string
+ }
+ url: "/session/{sessionID}/rewind"
+}
+
+export type SessionRewindErrors = {
+ /**
+ * Bad request
+ */
+ 400: BadRequestError
+ /**
+ * Not found
+ */
+ 404: NotFoundError
+}
+
+export type SessionRewindError = SessionRewindErrors[keyof SessionRewindErrors]
+
+export type SessionRewindResponses = {
+ /**
+ * Rewound session
+ */
+ 200: Session
+}
+
+export type SessionRewindResponse = SessionRewindResponses[keyof SessionRewindResponses]
+
export type SessionForkData = {
body?: {
messageID?: string