Change how we integrate with Bus

This commit is contained in:
James Long
2026-03-22 23:16:51 -04:00
parent 4123ff7424
commit 80c6fec569
9 changed files with 366 additions and 1530 deletions
+1 -10
View File
@@ -14,18 +14,9 @@ export function initProjectors() {
SyncEvent.init({
projectors: sessionProjectors,
convertDefinition: (type, data) => {
if (type === "session.updated") {
return z.object({
sessionID: SessionID.zod,
info: Session.Info,
})
}
return data
},
convertEvent: (type, data) => {
if (type === "session.updated") {
const sessionID = (data as z.infer<typeof Session.Event.Updated.data>).sessionID
const sessionID = (data as z.infer<typeof Session.Event.Updated.schema>).sessionID
return {
sessionID: SessionID.zod,
info: Session.get(sessionID),
+10 -2
View File
@@ -233,8 +233,6 @@ export namespace Session {
),
}
type X = z.infer<(typeof Event.Updated)["properties"]>
export const create = fn(
z
.object({
@@ -336,6 +334,16 @@ export namespace Session {
// Silently ignore sharing errors during session creation
})
}
if (!Flag.OPENCODE_EXPERIMENTAL_WORKSPACES) {
// This only exist for backwards compatibility. We should not be
// manually publishing this event; it is a sync event now
Bus.publish(Event.Updated, {
sessionID: result.id,
info: result,
})
}
return result
}
-3
View File
@@ -28,9 +28,6 @@ const log = Log.create({ service: "db" })
export namespace Database {
export const Path = iife(() => {
if (Installation.isTesting()) {
return ":memory:"
}
if (Flag.OPENCODE_DB) {
if (path.isAbsolute(Flag.OPENCODE_DB)) return Flag.OPENCODE_DB
return path.join(Global.Path.data, Flag.OPENCODE_DB)
+7 -9
View File
@@ -1,4 +1,3 @@
# Goal
## Syncing with only one writer
@@ -17,9 +16,9 @@ The difference in event sourcing is events are sent _before_ the mutation happen
So the goal is:
* Introduce a new syncing abstraction to handle event sourcing and projectors
* Seamlessly integrate these new events into the same existing `Bus` abstraction
* Maintain full backwards compatibility to reduce risk
- Introduce a new syncing abstraction to handle event sourcing and projectors
- Seamlessly integrate these new events into the same existing `Bus` abstraction
- Maintain full backwards compatibility to reduce risk
## My approach
@@ -53,7 +52,6 @@ const Created = SyncEvent.define({
})
```
Not too different, except they track a version and an "aggregate" field (will explain that later).
You do this to run an event, which is kind of like `Bus.publish` except that it runs through the event sourcing system:
@@ -68,7 +66,7 @@ Importantly, **sync events automatically re-publish as bus events**. This makes
### Event shape
* The shape of the events are slightly different. A sync event has the `type`, `id`, `seq`, `aggregateID`, and `data` fields. A bus event has the `type` and `properties` fields. `data` and `properties` are largely the same thing. This conversation is automatically handled when the sync system re-published the event throught the bus.
- The shape of the events are slightly different. A sync event has the `type`, `id`, `seq`, `aggregateID`, and `data` fields. A bus event has the `type` and `properties` fields. `data` and `properties` are largely the same thing. This conversation is automatically handled when the sync system re-published the event throught the bus.
The reason for this is because sync events need to track more information. I chose not to copy the `properties` naming to more clearly disambiguate the event types.
@@ -84,11 +82,11 @@ You should never "publish" a sync event however: `Bus.publish(Created, ...)`. Th
The system install projectors in `server/projectors.js`. It calls `SyncEvent.init` to do this. It also installs two different hooks for providing backwards compatibility:
* `convertDefinition`: a function that convert a zod definition for an event schema
* `convertEvent`: a function that converts an individual event's data
- `convertDefinition`: a function that convert a zod definition for an event schema
- `convertEvent`: a function that converts an individual event's data
These hooks allow for arbitrary conversions at runtime, allowing for us to provide a backwards compatible interface to clients.
For example, the sync system changed the `session.updated` event to only include the fields that were changed, compared to before where it returned the full session object. We install converters to load the full session object and return it to clients.
**Important**:
**Important**:
+5 -5
View File
@@ -15,6 +15,8 @@ export namespace SyncEvent {
aggregate: string
schema: z.ZodObject
// This is temporary and only exists for compatibility with bus
// event definitions
properties: z.ZodObject
}
@@ -69,8 +71,8 @@ export namespace SyncEvent {
Type extends string,
Agg extends string,
Schema extends ZodObject<Record<Agg, z.ZodType<string>>>,
BusSchema extends ZodObject<Record<Agg, z.ZodType<string>>> | undefined,
>(input: { type: Type; version: number; aggregate: Agg; schema: Schema; busSchema: BusSchema }) {
BusSchema extends ZodObject = Schema,
>(input: { type: Type; version: number; aggregate: Agg; schema: Schema; busSchema?: BusSchema }) {
if (frozen) {
throw new Error("Error defining sync event: sync system has been frozen")
}
@@ -80,9 +82,7 @@ export namespace SyncEvent {
version: input.version,
aggregate: input.aggregate,
schema: input.schema,
properties: (input.busSchema ?? input.schema) as BusSchema extends ZodObject<Record<Agg, z.ZodType<string>>>
? BusSchema
: Schema,
properties: input.busSchema ? input.busSchema : input.schema,
}
versions.set(def.type, Math.max(def.version, versions.get(def.type) || 0))
+3
View File
@@ -74,6 +74,9 @@ delete process.env["SAMBANOVA_API_KEY"]
delete process.env["OPENCODE_SERVER_PASSWORD"]
delete process.env["OPENCODE_SERVER_USERNAME"]
// Use in-memory sqlite
process.env["OPENCODE_DB"] = ":memory:"
// Now safe to import from src/
const { Log } = await import("../src/util/log")
const { initProjectors } = await import("../src/server/projectors")
@@ -10,7 +10,7 @@ import { MessageID, PartID } from "../../src/session/schema"
const projectRoot = path.join(__dirname, "../..")
Log.init({ print: false })
describe("session.started event", () => {
describe("session.created event", () => {
test("should emit session.created event when session is created", async () => {
await Instance.provide({
directory: projectRoot,
@@ -41,14 +41,14 @@ describe("session.started event", () => {
})
})
test("session.started event should be emitted before session.updated", async () => {
test("session.created event should be emitted before session.updated", async () => {
await Instance.provide({
directory: projectRoot,
fn: async () => {
const events: string[] = []
const unsubStarted = Bus.subscribe(Session.Event.Created, () => {
events.push("started")
const unsubCreated = Bus.subscribe(Session.Event.Created, () => {
events.push("created")
})
const unsubUpdated = Bus.subscribe(Session.Event.Updated, () => {
@@ -59,12 +59,12 @@ describe("session.started event", () => {
await new Promise((resolve) => setTimeout(resolve, 100))
unsubStarted()
unsubCreated()
unsubUpdated()
expect(events).toContain("started")
expect(events).toContain("created")
expect(events).toContain("updated")
expect(events.indexOf("started")).toBeLessThan(events.indexOf("updated"))
expect(events.indexOf("created")).toBeLessThan(events.indexOf("updated"))
await Session.remove(session.id)
},
+332 -1493
View File
@@ -27,10 +27,7 @@
"type": "string"
}
},
"required": [
"healthy",
"version"
]
"required": ["healthy", "version"]
}
}
}
@@ -848,10 +845,7 @@
"type": "number"
}
},
"required": [
"rows",
"cols"
]
"required": ["rows", "cols"]
}
}
}
@@ -1128,10 +1122,7 @@
}
}
},
"required": [
"providers",
"default"
]
"required": ["providers", "default"]
}
}
}
@@ -1338,11 +1329,7 @@
]
}
},
"required": [
"type",
"branch",
"extra"
]
"required": ["type", "branch", "extra"]
}
}
}
@@ -2055,9 +2042,7 @@
],
"summary": "Get session",
"description": "Retrieve detailed information about a specific OpenCode session.",
"tags": [
"Session"
],
"tags": ["Session"],
"responses": {
"200": {
"description": "Get session",
@@ -2285,9 +2270,7 @@
}
],
"summary": "Get session children",
"tags": [
"Session"
],
"tags": ["Session"],
"description": "Retrieve all child sessions that were forked from the specified parent session.",
"responses": {
"200": {
@@ -2484,11 +2467,7 @@
"pattern": "^msg.*"
}
},
"required": [
"modelID",
"providerID",
"messageID"
]
"required": ["modelID", "providerID", "messageID"]
}
}
}
@@ -2914,10 +2893,7 @@
"type": "boolean"
}
},
"required": [
"providerID",
"modelID"
]
"required": ["providerID", "modelID"]
}
}
}
@@ -2997,10 +2973,7 @@
}
}
},
"required": [
"info",
"parts"
]
"required": ["info", "parts"]
}
}
}
@@ -3081,10 +3054,7 @@
}
}
},
"required": [
"info",
"parts"
]
"required": ["info", "parts"]
}
}
}
@@ -3130,10 +3100,7 @@
"type": "string"
}
},
"required": [
"providerID",
"modelID"
]
"required": ["providerID", "modelID"]
},
"agent": {
"type": "string"
@@ -3180,9 +3147,7 @@
}
}
},
"required": [
"parts"
]
"required": ["parts"]
}
}
}
@@ -3252,10 +3217,7 @@
}
}
},
"required": [
"info",
"parts"
]
"required": ["info", "parts"]
}
}
}
@@ -3622,10 +3584,7 @@
"type": "string"
}
},
"required": [
"providerID",
"modelID"
]
"required": ["providerID", "modelID"]
},
"agent": {
"type": "string"
@@ -3672,9 +3631,7 @@
}
}
},
"required": [
"parts"
]
"required": ["parts"]
}
}
}
@@ -3735,10 +3692,7 @@
}
}
},
"required": [
"info",
"parts"
]
"required": ["info", "parts"]
}
}
}
@@ -3817,20 +3771,13 @@
"$ref": "#/components/schemas/FilePartSource"
}
},
"required": [
"type",
"mime",
"url"
]
"required": ["type", "mime", "url"]
}
]
}
}
},
"required": [
"arguments",
"command"
]
"required": ["arguments", "command"]
}
}
}
@@ -3924,19 +3871,13 @@
"type": "string"
}
},
"required": [
"providerID",
"modelID"
]
"required": ["providerID", "modelID"]
},
"command": {
"type": "string"
}
},
"required": [
"agent",
"command"
]
"required": ["agent", "command"]
}
}
}
@@ -4026,9 +3967,7 @@
"pattern": "^prt.*"
}
},
"required": [
"messageID"
]
"required": ["messageID"]
}
}
}
@@ -4191,16 +4130,10 @@
"properties": {
"response": {
"type": "string",
"enum": [
"once",
"always",
"reject"
]
"enum": ["once", "always", "reject"]
}
},
"required": [
"response"
]
"required": ["response"]
}
}
}
@@ -4283,19 +4216,13 @@
"properties": {
"reply": {
"type": "string",
"enum": [
"once",
"always",
"reject"
]
"enum": ["once", "always", "reject"]
},
"message": {
"type": "string"
}
},
"required": [
"reply"
]
"required": ["reply"]
}
}
}
@@ -4472,9 +4399,7 @@
}
}
},
"required": [
"answers"
]
"required": ["answers"]
}
}
}
@@ -4652,15 +4577,10 @@
"properties": {
"field": {
"type": "string",
"enum": [
"reasoning_content",
"reasoning_details"
]
"enum": ["reasoning_content", "reasoning_details"]
}
},
"required": [
"field"
],
"required": ["field"],
"additionalProperties": false
}
]
@@ -4696,16 +4616,10 @@
"type": "number"
}
},
"required": [
"input",
"output"
]
"required": ["input", "output"]
}
},
"required": [
"input",
"output"
]
"required": ["input", "output"]
},
"limit": {
"type": "object",
@@ -4720,10 +4634,7 @@
"type": "number"
}
},
"required": [
"context",
"output"
]
"required": ["context", "output"]
},
"modalities": {
"type": "object",
@@ -4732,44 +4643,25 @@
"type": "array",
"items": {
"type": "string",
"enum": [
"text",
"audio",
"image",
"video",
"pdf"
]
"enum": ["text", "audio", "image", "video", "pdf"]
}
},
"output": {
"type": "array",
"items": {
"type": "string",
"enum": [
"text",
"audio",
"image",
"video",
"pdf"
]
"enum": ["text", "audio", "image", "video", "pdf"]
}
}
},
"required": [
"input",
"output"
]
"required": ["input", "output"]
},
"experimental": {
"type": "boolean"
},
"status": {
"type": "string",
"enum": [
"alpha",
"beta",
"deprecated"
]
"enum": ["alpha", "beta", "deprecated"]
},
"options": {
"type": "object",
@@ -4826,12 +4718,7 @@
}
}
},
"required": [
"name",
"env",
"id",
"models"
]
"required": ["name", "env", "id", "models"]
}
},
"default": {
@@ -4850,11 +4737,7 @@
}
}
},
"required": [
"all",
"default",
"connected"
]
"required": ["all", "default", "connected"]
}
}
}
@@ -4991,9 +4874,7 @@
}
}
},
"required": [
"method"
]
"required": ["method"]
}
}
}
@@ -5073,9 +4954,7 @@
"type": "string"
}
},
"required": [
"method"
]
"required": ["method"]
}
}
}
@@ -5134,9 +5013,7 @@
"type": "string"
}
},
"required": [
"text"
]
"required": ["text"]
},
"lines": {
"type": "object",
@@ -5145,9 +5022,7 @@
"type": "string"
}
},
"required": [
"text"
]
"required": ["text"]
},
"line_number": {
"type": "number"
@@ -5167,9 +5042,7 @@
"type": "string"
}
},
"required": [
"text"
]
"required": ["text"]
},
"start": {
"type": "number"
@@ -5178,21 +5051,11 @@
"type": "number"
}
},
"required": [
"match",
"start",
"end"
]
"required": ["match", "start", "end"]
}
}
},
"required": [
"path",
"lines",
"line_number",
"absolute_offset",
"submatches"
]
"required": ["path", "lines", "line_number", "absolute_offset", "submatches"]
}
}
}
@@ -5238,10 +5101,7 @@
"name": "dirs",
"schema": {
"type": "string",
"enum": [
"true",
"false"
]
"enum": ["true", "false"]
}
},
{
@@ -5249,10 +5109,7 @@
"name": "type",
"schema": {
"type": "string",
"enum": [
"file",
"directory"
]
"enum": ["file", "directory"]
}
},
{
@@ -5642,10 +5499,7 @@
]
}
},
"required": [
"name",
"config"
]
"required": ["name", "config"]
}
}
}
@@ -5700,9 +5554,7 @@
"type": "string"
}
},
"required": [
"authorizationUrl"
]
"required": ["authorizationUrl"]
}
}
}
@@ -5776,9 +5628,7 @@
"const": true
}
},
"required": [
"success"
]
"required": ["success"]
}
}
}
@@ -5874,9 +5724,7 @@
"type": "string"
}
},
"required": [
"code"
]
"required": ["code"]
}
}
}
@@ -6107,9 +5955,7 @@
"type": "string"
}
},
"required": [
"text"
]
"required": ["text"]
}
}
}
@@ -6421,9 +6267,7 @@
"type": "string"
}
},
"required": [
"command"
]
"required": ["command"]
}
}
}
@@ -6483,12 +6327,7 @@
},
"variant": {
"type": "string",
"enum": [
"info",
"success",
"warning",
"error"
]
"enum": ["info", "success", "warning", "error"]
},
"duration": {
"description": "Duration in milliseconds",
@@ -6496,10 +6335,7 @@
"type": "number"
}
},
"required": [
"message",
"variant"
]
"required": ["message", "variant"]
}
}
}
@@ -6650,9 +6486,7 @@
"pattern": "^ses.*"
}
},
"required": [
"sessionID"
]
"required": ["sessionID"]
}
}
}
@@ -6699,10 +6533,7 @@
},
"body": {}
},
"required": [
"path",
"body"
]
"required": ["path", "body"]
}
}
}
@@ -6987,12 +6818,7 @@
"level": {
"description": "Log level",
"type": "string",
"enum": [
"debug",
"info",
"error",
"warn"
]
"enum": ["debug", "info", "error", "warn"]
},
"message": {
"description": "Log message",
@@ -7007,11 +6833,7 @@
"additionalProperties": {}
}
},
"required": [
"service",
"level",
"message"
]
"required": ["service", "level", "message"]
}
}
}
@@ -7112,12 +6934,7 @@
"type": "string"
}
},
"required": [
"name",
"description",
"location",
"content"
]
"required": ["name", "description", "location", "content"]
}
}
}
@@ -7237,15 +7054,10 @@
"type": "string"
}
},
"required": [
"version"
]
"required": ["version"]
}
},
"required": [
"type",
"properties"
]
"required": ["type", "properties"]
},
"Event.installation.update-available": {
"type": "object",
@@ -7261,15 +7073,10 @@
"type": "string"
}
},
"required": [
"version"
]
"required": ["version"]
}
},
"required": [
"type",
"properties"
]
"required": ["type", "properties"]
},
"Project": {
"type": "object",
@@ -7323,10 +7130,7 @@
"type": "number"
}
},
"required": [
"created",
"updated"
]
"required": ["created", "updated"]
},
"sandboxes": {
"type": "array",
@@ -7335,12 +7139,7 @@
}
}
},
"required": [
"id",
"worktree",
"time",
"sandboxes"
]
"required": ["id", "worktree", "time", "sandboxes"]
},
"Event.project.updated": {
"type": "object",
@@ -7353,10 +7152,7 @@
"$ref": "#/components/schemas/Project"
}
},
"required": [
"type",
"properties"
]
"required": ["type", "properties"]
},
"Event.server.instance.disposed": {
"type": "object",
@@ -7372,15 +7168,10 @@
"type": "string"
}
},
"required": [
"directory"
]
"required": ["directory"]
}
},
"required": [
"type",
"properties"
]
"required": ["type", "properties"]
},
"Event.server.connected": {
"type": "object",
@@ -7394,10 +7185,7 @@
"properties": {}
}
},
"required": [
"type",
"properties"
]
"required": ["type", "properties"]
},
"Event.global.disposed": {
"type": "object",
@@ -7411,10 +7199,7 @@
"properties": {}
}
},
"required": [
"type",
"properties"
]
"required": ["type", "properties"]
},
"Event.lsp.client.diagnostics": {
"type": "object",
@@ -7433,16 +7218,10 @@
"type": "string"
}
},
"required": [
"serverID",
"path"
]
"required": ["serverID", "path"]
}
},
"required": [
"type",
"properties"
]
"required": ["type", "properties"]
},
"Event.lsp.updated": {
"type": "object",
@@ -7456,10 +7235,7 @@
"properties": {}
}
},
"required": [
"type",
"properties"
]
"required": ["type", "properties"]
},
"Event.message.part.delta": {
"type": "object",
@@ -7490,19 +7266,10 @@
"type": "string"
}
},
"required": [
"sessionID",
"messageID",
"partID",
"field",
"delta"
]
"required": ["sessionID", "messageID", "partID", "field", "delta"]
}
},
"required": [
"type",
"properties"
]
"required": ["type", "properties"]
},
"PermissionRequest": {
"type": "object",
@@ -7548,20 +7315,10 @@
"type": "string"
}
},
"required": [
"messageID",
"callID"
]
"required": ["messageID", "callID"]
}
},
"required": [
"id",
"sessionID",
"permission",
"patterns",
"metadata",
"always"
]
"required": ["id", "sessionID", "permission", "patterns", "metadata", "always"]
},
"Event.permission.asked": {
"type": "object",
@@ -7574,10 +7331,7 @@
"$ref": "#/components/schemas/PermissionRequest"
}
},
"required": [
"type",
"properties"
]
"required": ["type", "properties"]
},
"Event.permission.replied": {
"type": "object",
@@ -7599,24 +7353,13 @@
},
"reply": {
"type": "string",
"enum": [
"once",
"always",
"reject"
]
"enum": ["once", "always", "reject"]
}
},
"required": [
"sessionID",
"requestID",
"reply"
]
"required": ["sessionID", "requestID", "reply"]
}
},
"required": [
"type",
"properties"
]
"required": ["type", "properties"]
},
"SessionStatus": {
"anyOf": [
@@ -7628,9 +7371,7 @@
"const": "idle"
}
},
"required": [
"type"
]
"required": ["type"]
},
{
"type": "object",
@@ -7649,12 +7390,7 @@
"type": "number"
}
},
"required": [
"type",
"attempt",
"message",
"next"
]
"required": ["type", "attempt", "message", "next"]
},
{
"type": "object",
@@ -7664,9 +7400,7 @@
"const": "busy"
}
},
"required": [
"type"
]
"required": ["type"]
}
]
},
@@ -7688,16 +7422,10 @@
"$ref": "#/components/schemas/SessionStatus"
}
},
"required": [
"sessionID",
"status"
]
"required": ["sessionID", "status"]
}
},
"required": [
"type",
"properties"
]
"required": ["type", "properties"]
},
"Event.session.idle": {
"type": "object",
@@ -7714,15 +7442,10 @@
"pattern": "^ses.*"
}
},
"required": [
"sessionID"
]
"required": ["sessionID"]
}
},
"required": [
"type",
"properties"
]
"required": ["type", "properties"]
},
"QuestionOption": {
"type": "object",
@@ -7736,10 +7459,7 @@
"type": "string"
}
},
"required": [
"label",
"description"
]
"required": ["label", "description"]
},
"QuestionInfo": {
"type": "object",
@@ -7768,11 +7488,7 @@
"type": "boolean"
}
},
"required": [
"question",
"header",
"options"
]
"required": ["question", "header", "options"]
},
"QuestionRequest": {
"type": "object",
@@ -7803,17 +7519,10 @@
"type": "string"
}
},
"required": [
"messageID",
"callID"
]
"required": ["messageID", "callID"]
}
},
"required": [
"id",
"sessionID",
"questions"
]
"required": ["id", "sessionID", "questions"]
},
"Event.question.asked": {
"type": "object",
@@ -7826,10 +7535,7 @@
"$ref": "#/components/schemas/QuestionRequest"
}
},
"required": [
"type",
"properties"
]
"required": ["type", "properties"]
},
"QuestionAnswer": {
"type": "array",
@@ -7862,17 +7568,10 @@
}
}
},
"required": [
"sessionID",
"requestID",
"answers"
]
"required": ["sessionID", "requestID", "answers"]
}
},
"required": [
"type",
"properties"
]
"required": ["type", "properties"]
},
"Event.question.rejected": {
"type": "object",
@@ -7893,16 +7592,10 @@
"pattern": "^que.*"
}
},
"required": [
"sessionID",
"requestID"
]
"required": ["sessionID", "requestID"]
}
},
"required": [
"type",
"properties"
]
"required": ["type", "properties"]
},
"Event.session.compacted": {
"type": "object",
@@ -7919,15 +7612,10 @@
"pattern": "^ses.*"
}
},
"required": [
"sessionID"
]
"required": ["sessionID"]
}
},
"required": [
"type",
"properties"
]
"required": ["type", "properties"]
},
"Event.file.edited": {
"type": "object",
@@ -7943,15 +7631,10 @@
"type": "string"
}
},
"required": [
"file"
]
"required": ["file"]
}
},
"required": [
"type",
"properties"
]
"required": ["type", "properties"]
},
"Event.file.watcher.updated": {
"type": "object",
@@ -7983,16 +7666,10 @@
]
}
},
"required": [
"file",
"event"
]
"required": ["file", "event"]
}
},
"required": [
"type",
"properties"
]
"required": ["type", "properties"]
},
"Todo": {
"type": "object",
@@ -8010,11 +7687,7 @@
"type": "string"
}
},
"required": [
"content",
"status",
"priority"
]
"required": ["content", "status", "priority"]
},
"Event.todo.updated": {
"type": "object",
@@ -8037,16 +7710,10 @@
}
}
},
"required": [
"sessionID",
"todos"
]
"required": ["sessionID", "todos"]
}
},
"required": [
"type",
"properties"
]
"required": ["type", "properties"]
},
"Event.tui.prompt.append": {
"type": "object",
@@ -8062,15 +7729,10 @@
"type": "string"
}
},
"required": [
"text"
]
"required": ["text"]
}
},
"required": [
"type",
"properties"
]
"required": ["type", "properties"]
},
"Event.tui.command.execute": {
"type": "object",
@@ -8111,15 +7773,10 @@
]
}
},
"required": [
"command"
]
"required": ["command"]
}
},
"required": [
"type",
"properties"
]
"required": ["type", "properties"]
},
"Event.tui.toast.show": {
"type": "object",
@@ -8139,12 +7796,7 @@
},
"variant": {
"type": "string",
"enum": [
"info",
"success",
"warning",
"error"
]
"enum": ["info", "success", "warning", "error"]
},
"duration": {
"description": "Duration in milliseconds",
@@ -8152,16 +7804,10 @@
"type": "number"
}
},
"required": [
"message",
"variant"
]
"required": ["message", "variant"]
}
},
"required": [
"type",
"properties"
]
"required": ["type", "properties"]
},
"Event.tui.session.select": {
"type": "object",
@@ -8179,15 +7825,10 @@
"pattern": "^ses.*"
}
},
"required": [
"sessionID"
]
"required": ["sessionID"]
}
},
"required": [
"type",
"properties"
]
"required": ["type", "properties"]
},
"Event.mcp.tools.changed": {
"type": "object",
@@ -8203,15 +7844,10 @@
"type": "string"
}
},
"required": [
"server"
]
"required": ["server"]
}
},
"required": [
"type",
"properties"
]
"required": ["type", "properties"]
},
"Event.mcp.browser.open.failed": {
"type": "object",
@@ -8230,16 +7866,10 @@
"type": "string"
}
},
"required": [
"mcpName",
"url"
]
"required": ["mcpName", "url"]
}
},
"required": [
"type",
"properties"
]
"required": ["type", "properties"]
},
"Event.command.executed": {
"type": "object",
@@ -8266,18 +7896,10 @@
"pattern": "^msg.*"
}
},
"required": [
"name",
"sessionID",
"arguments",
"messageID"
]
"required": ["name", "sessionID", "arguments", "messageID"]
}
},
"required": [
"type",
"properties"
]
"required": ["type", "properties"]
},
"FileDiff": {
"type": "object",
@@ -8299,20 +7921,10 @@
},
"status": {
"type": "string",
"enum": [
"added",
"deleted",
"modified"
]
"enum": ["added", "deleted", "modified"]
}
},
"required": [
"file",
"before",
"after",
"additions",
"deletions"
]
"required": ["file", "before", "after", "additions", "deletions"]
},
"Event.session.diff": {
"type": "object",
@@ -8335,16 +7947,10 @@
}
}
},
"required": [
"sessionID",
"diff"
]
"required": ["sessionID", "diff"]
}
},
"required": [
"type",
"properties"
]
"required": ["type", "properties"]
},
"ProviderAuthError": {
"type": "object",
@@ -8363,16 +7969,10 @@
"type": "string"
}
},
"required": [
"providerID",
"message"
]
"required": ["providerID", "message"]
}
},
"required": [
"name",
"data"
]
"required": ["name", "data"]
},
"UnknownError": {
"type": "object",
@@ -8388,15 +7988,10 @@
"type": "string"
}
},
"required": [
"message"
]
"required": ["message"]
}
},
"required": [
"name",
"data"
]
"required": ["name", "data"]
},
"MessageOutputLengthError": {
"type": "object",
@@ -8410,10 +8005,7 @@
"properties": {}
}
},
"required": [
"name",
"data"
]
"required": ["name", "data"]
},
"MessageAbortedError": {
"type": "object",
@@ -8429,15 +8021,10 @@
"type": "string"
}
},
"required": [
"message"
]
"required": ["message"]
}
},
"required": [
"name",
"data"
]
"required": ["name", "data"]
},
"StructuredOutputError": {
"type": "object",
@@ -8456,16 +8043,10 @@
"type": "number"
}
},
"required": [
"message",
"retries"
]
"required": ["message", "retries"]
}
},
"required": [
"name",
"data"
]
"required": ["name", "data"]
},
"ContextOverflowError": {
"type": "object",
@@ -8484,15 +8065,10 @@
"type": "string"
}
},
"required": [
"message"
]
"required": ["message"]
}
},
"required": [
"name",
"data"
]
"required": ["name", "data"]
},
"APIError": {
"type": "object",
@@ -8535,16 +8111,10 @@
}
}
},
"required": [
"message",
"isRetryable"
]
"required": ["message", "isRetryable"]
}
},
"required": [
"name",
"data"
]
"required": ["name", "data"]
},
"Event.session.error": {
"type": "object",
@@ -8588,10 +8158,7 @@
}
}
},
"required": [
"type",
"properties"
]
"required": ["type", "properties"]
},
"Event.vcs.branch.updated": {
"type": "object",
@@ -8609,10 +8176,7 @@
}
}
},
"required": [
"type",
"properties"
]
"required": ["type", "properties"]
},
"Event.workspace.ready": {
"type": "object",
@@ -8628,15 +8192,10 @@
"type": "string"
}
},
"required": [
"name"
]
"required": ["name"]
}
},
"required": [
"type",
"properties"
]
"required": ["type", "properties"]
},
"Event.workspace.failed": {
"type": "object",
@@ -8652,15 +8211,10 @@
"type": "string"
}
},
"required": [
"message"
]
"required": ["message"]
}
},
"required": [
"type",
"properties"
]
"required": ["type", "properties"]
},
"Pty": {
"type": "object",
@@ -8686,24 +8240,13 @@
},
"status": {
"type": "string",
"enum": [
"running",
"exited"
]
"enum": ["running", "exited"]
},
"pid": {
"type": "number"
}
},
"required": [
"id",
"title",
"command",
"args",
"cwd",
"status",
"pid"
]
"required": ["id", "title", "command", "args", "cwd", "status", "pid"]
},
"Event.pty.created": {
"type": "object",
@@ -8719,15 +8262,10 @@
"$ref": "#/components/schemas/Pty"
}
},
"required": [
"info"
]
"required": ["info"]
}
},
"required": [
"type",
"properties"
]
"required": ["type", "properties"]
},
"Event.pty.updated": {
"type": "object",
@@ -8743,15 +8281,10 @@
"$ref": "#/components/schemas/Pty"
}
},
"required": [
"info"
]
"required": ["info"]
}
},
"required": [
"type",
"properties"
]
"required": ["type", "properties"]
},
"Event.pty.exited": {
"type": "object",
@@ -8771,16 +8304,10 @@
"type": "number"
}
},
"required": [
"id",
"exitCode"
]
"required": ["id", "exitCode"]
}
},
"required": [
"type",
"properties"
]
"required": ["type", "properties"]
},
"Event.pty.deleted": {
"type": "object",
@@ -8797,15 +8324,10 @@
"pattern": "^pty.*"
}
},
"required": [
"id"
]
"required": ["id"]
}
},
"required": [
"type",
"properties"
]
"required": ["type", "properties"]
},
"Event.worktree.ready": {
"type": "object",
@@ -8824,16 +8346,10 @@
"type": "string"
}
},
"required": [
"name",
"branch"
]
"required": ["name", "branch"]
}
},
"required": [
"type",
"properties"
]
"required": ["type", "properties"]
},
"Event.worktree.failed": {
"type": "object",
@@ -8849,15 +8365,10 @@
"type": "string"
}
},
"required": [
"message"
]
"required": ["message"]
}
},
"required": [
"type",
"properties"
]
"required": ["type", "properties"]
},
"OutputFormatText": {
"type": "object",
@@ -8867,9 +8378,7 @@
"const": "text"
}
},
"required": [
"type"
]
"required": ["type"]
},
"JSONSchema": {
"type": "object",
@@ -8895,10 +8404,7 @@
"maximum": 9007199254740991
}
},
"required": [
"type",
"schema"
]
"required": ["type", "schema"]
},
"OutputFormat": {
"anyOf": [
@@ -8932,9 +8438,7 @@
"type": "number"
}
},
"required": [
"created"
]
"required": ["created"]
},
"format": {
"$ref": "#/components/schemas/OutputFormat"
@@ -8955,9 +8459,7 @@
}
}
},
"required": [
"diffs"
]
"required": ["diffs"]
},
"agent": {
"type": "string"
@@ -8972,10 +8474,7 @@
"type": "string"
}
},
"required": [
"providerID",
"modelID"
]
"required": ["providerID", "modelID"]
},
"system": {
"type": "string"
@@ -8993,14 +8492,7 @@
"type": "string"
}
},
"required": [
"id",
"sessionID",
"role",
"time",
"agent",
"model"
]
"required": ["id", "sessionID", "role", "time", "agent", "model"]
},
"AssistantMessage": {
"type": "object",
@@ -9027,9 +8519,7 @@
"type": "number"
}
},
"required": [
"created"
]
"required": ["created"]
},
"error": {
"anyOf": [
@@ -9082,10 +8572,7 @@
"type": "string"
}
},
"required": [
"cwd",
"root"
]
"required": ["cwd", "root"]
},
"summary": {
"type": "boolean"
@@ -9118,18 +8605,10 @@
"type": "number"
}
},
"required": [
"read",
"write"
]
"required": ["read", "write"]
}
},
"required": [
"input",
"output",
"reasoning",
"cache"
]
"required": ["input", "output", "reasoning", "cache"]
},
"structured": {},
"variant": {
@@ -9182,16 +8661,10 @@
"$ref": "#/components/schemas/Message"
}
},
"required": [
"sessionID",
"info"
]
"required": ["sessionID", "info"]
}
},
"required": [
"type",
"properties"
]
"required": ["type", "properties"]
},
"Event.message.removed": {
"type": "object",
@@ -9212,16 +8685,10 @@
"pattern": "^msg.*"
}
},
"required": [
"sessionID",
"messageID"
]
"required": ["sessionID", "messageID"]
}
},
"required": [
"type",
"properties"
]
"required": ["type", "properties"]
},
"TextPart": {
"type": "object",
@@ -9261,9 +8728,7 @@
"type": "number"
}
},
"required": [
"start"
]
"required": ["start"]
},
"metadata": {
"type": "object",
@@ -9273,13 +8738,7 @@
"additionalProperties": {}
}
},
"required": [
"id",
"sessionID",
"messageID",
"type",
"text"
]
"required": ["id", "sessionID", "messageID", "type", "text"]
},
"SubtaskPart": {
"type": "object",
@@ -9319,24 +8778,13 @@
"type": "string"
}
},
"required": [
"providerID",
"modelID"
]
"required": ["providerID", "modelID"]
},
"command": {
"type": "string"
}
},
"required": [
"id",
"sessionID",
"messageID",
"type",
"prompt",
"description",
"agent"
]
"required": ["id", "sessionID", "messageID", "type", "prompt", "description", "agent"]
},
"ReasoningPart": {
"type": "object",
@@ -9377,19 +8825,10 @@
"type": "number"
}
},
"required": [
"start"
]
"required": ["start"]
}
},
"required": [
"id",
"sessionID",
"messageID",
"type",
"text",
"time"
]
"required": ["id", "sessionID", "messageID", "type", "text", "time"]
},
"FilePartSourceText": {
"type": "object",
@@ -9408,11 +8847,7 @@
"maximum": 9007199254740991
}
},
"required": [
"value",
"start",
"end"
]
"required": ["value", "start", "end"]
},
"FileSource": {
"type": "object",
@@ -9428,11 +8863,7 @@
"type": "string"
}
},
"required": [
"text",
"type",
"path"
]
"required": ["text", "type", "path"]
},
"Range": {
"type": "object",
@@ -9447,10 +8878,7 @@
"type": "number"
}
},
"required": [
"line",
"character"
]
"required": ["line", "character"]
},
"end": {
"type": "object",
@@ -9462,16 +8890,10 @@
"type": "number"
}
},
"required": [
"line",
"character"
]
"required": ["line", "character"]
}
},
"required": [
"start",
"end"
]
"required": ["start", "end"]
},
"SymbolSource": {
"type": "object",
@@ -9498,14 +8920,7 @@
"maximum": 9007199254740991
}
},
"required": [
"text",
"type",
"path",
"range",
"name",
"kind"
]
"required": ["text", "type", "path", "range", "name", "kind"]
},
"ResourceSource": {
"type": "object",
@@ -9524,12 +8939,7 @@
"type": "string"
}
},
"required": [
"text",
"type",
"clientName",
"uri"
]
"required": ["text", "type", "clientName", "uri"]
},
"FilePartSource": {
"anyOf": [
@@ -9576,14 +8986,7 @@
"$ref": "#/components/schemas/FilePartSource"
}
},
"required": [
"id",
"sessionID",
"messageID",
"type",
"mime",
"url"
]
"required": ["id", "sessionID", "messageID", "type", "mime", "url"]
},
"ToolStatePending": {
"type": "object",
@@ -9603,11 +9006,7 @@
"type": "string"
}
},
"required": [
"status",
"input",
"raw"
]
"required": ["status", "input", "raw"]
},
"ToolStateRunning": {
"type": "object",
@@ -9640,16 +9039,10 @@
"type": "number"
}
},
"required": [
"start"
]
"required": ["start"]
}
},
"required": [
"status",
"input",
"time"
]
"required": ["status", "input", "time"]
},
"ToolStateCompleted": {
"type": "object",
@@ -9691,10 +9084,7 @@
"type": "number"
}
},
"required": [
"start",
"end"
]
"required": ["start", "end"]
},
"attachments": {
"type": "array",
@@ -9703,14 +9093,7 @@
}
}
},
"required": [
"status",
"input",
"output",
"title",
"metadata",
"time"
]
"required": ["status", "input", "output", "title", "metadata", "time"]
},
"ToolStateError": {
"type": "object",
@@ -9746,18 +9129,10 @@
"type": "number"
}
},
"required": [
"start",
"end"
]
"required": ["start", "end"]
}
},
"required": [
"status",
"input",
"error",
"time"
]
"required": ["status", "input", "error", "time"]
},
"ToolState": {
"anyOf": [
@@ -9811,15 +9186,7 @@
"additionalProperties": {}
}
},
"required": [
"id",
"sessionID",
"messageID",
"type",
"callID",
"tool",
"state"
]
"required": ["id", "sessionID", "messageID", "type", "callID", "tool", "state"]
},
"StepStartPart": {
"type": "object",
@@ -9844,12 +9211,7 @@
"type": "string"
}
},
"required": [
"id",
"sessionID",
"messageID",
"type"
]
"required": ["id", "sessionID", "messageID", "type"]
},
"StepFinishPart": {
"type": "object",
@@ -9904,29 +9266,13 @@
"type": "number"
}
},
"required": [
"read",
"write"
]
"required": ["read", "write"]
}
},
"required": [
"input",
"output",
"reasoning",
"cache"
]
"required": ["input", "output", "reasoning", "cache"]
}
},
"required": [
"id",
"sessionID",
"messageID",
"type",
"reason",
"cost",
"tokens"
]
"required": ["id", "sessionID", "messageID", "type", "reason", "cost", "tokens"]
},
"SnapshotPart": {
"type": "object",
@@ -9951,13 +9297,7 @@
"type": "string"
}
},
"required": [
"id",
"sessionID",
"messageID",
"type",
"snapshot"
]
"required": ["id", "sessionID", "messageID", "type", "snapshot"]
},
"PatchPart": {
"type": "object",
@@ -9988,14 +9328,7 @@
}
}
},
"required": [
"id",
"sessionID",
"messageID",
"type",
"hash",
"files"
]
"required": ["id", "sessionID", "messageID", "type", "hash", "files"]
},
"AgentPart": {
"type": "object",
@@ -10036,20 +9369,10 @@
"maximum": 9007199254740991
}
},
"required": [
"value",
"start",
"end"
]
"required": ["value", "start", "end"]
}
},
"required": [
"id",
"sessionID",
"messageID",
"type",
"name"
]
"required": ["id", "sessionID", "messageID", "type", "name"]
},
"RetryPart": {
"type": "object",
@@ -10083,20 +9406,10 @@
"type": "number"
}
},
"required": [
"created"
]
"required": ["created"]
}
},
"required": [
"id",
"sessionID",
"messageID",
"type",
"attempt",
"error",
"time"
]
"required": ["id", "sessionID", "messageID", "type", "attempt", "error", "time"]
},
"CompactionPart": {
"type": "object",
@@ -10124,13 +9437,7 @@
"type": "boolean"
}
},
"required": [
"id",
"sessionID",
"messageID",
"type",
"auto"
]
"required": ["id", "sessionID", "messageID", "type", "auto"]
},
"Part": {
"anyOf": [
@@ -10193,17 +9500,10 @@
"type": "number"
}
},
"required": [
"sessionID",
"part",
"time"
]
"required": ["sessionID", "part", "time"]
}
},
"required": [
"type",
"properties"
]
"required": ["type", "properties"]
},
"Event.message.part.removed": {
"type": "object",
@@ -10228,25 +9528,14 @@
"pattern": "^prt.*"
}
},
"required": [
"sessionID",
"messageID",
"partID"
]
"required": ["sessionID", "messageID", "partID"]
}
},
"required": [
"type",
"properties"
]
"required": ["type", "properties"]
},
"PermissionAction": {
"type": "string",
"enum": [
"allow",
"deny",
"ask"
]
"enum": ["allow", "deny", "ask"]
},
"PermissionRule": {
"type": "object",
@@ -10261,11 +9550,7 @@
"$ref": "#/components/schemas/PermissionAction"
}
},
"required": [
"permission",
"pattern",
"action"
]
"required": ["permission", "pattern", "action"]
},
"PermissionRuleset": {
"type": "array",
@@ -10316,11 +9601,7 @@
}
}
},
"required": [
"additions",
"deletions",
"files"
]
"required": ["additions", "deletions", "files"]
},
"share": {
"type": "object",
@@ -10329,9 +9610,7 @@
"type": "string"
}
},
"required": [
"url"
]
"required": ["url"]
},
"title": {
"type": "string"
@@ -10355,10 +9634,7 @@
"type": "number"
}
},
"required": [
"created",
"updated"
]
"required": ["created", "updated"]
},
"permission": {
"$ref": "#/components/schemas/PermissionRuleset"
@@ -10381,20 +9657,10 @@
"type": "string"
}
},
"required": [
"messageID"
]
"required": ["messageID"]
}
},
"required": [
"id",
"slug",
"projectID",
"directory",
"title",
"version",
"time"
]
"required": ["id", "slug", "projectID", "directory", "title", "version", "time"]
},
"Event.session.created": {
"type": "object",
@@ -10414,16 +9680,10 @@
"$ref": "#/components/schemas/Session"
}
},
"required": [
"sessionID",
"info"
]
"required": ["sessionID", "info"]
}
},
"required": [
"type",
"properties"
]
"required": ["type", "properties"]
},
"Event.session.updated": {
"type": "object",
@@ -10443,16 +9703,10 @@
"$ref": "#/components/schemas/Session"
}
},
"required": [
"sessionID",
"info"
]
"required": ["sessionID", "info"]
}
},
"required": [
"type",
"properties"
]
"required": ["type", "properties"]
},
"Event.session.deleted": {
"type": "object",
@@ -10472,16 +9726,10 @@
"$ref": "#/components/schemas/Session"
}
},
"required": [
"sessionID",
"info"
]
"required": ["sessionID", "info"]
}
},
"required": [
"type",
"properties"
]
"required": ["type", "properties"]
},
"Event": {
"anyOf": [
@@ -10632,10 +9880,7 @@
"$ref": "#/components/schemas/Event"
}
},
"required": [
"directory",
"payload"
]
"required": ["directory", "payload"]
},
"SyncEvent.message.updated": {
"type": "object",
@@ -10659,17 +9904,10 @@
"$ref": "#/components/schemas/Message"
}
},
"required": [
"sessionID",
"info"
]
"required": ["sessionID", "info"]
}
},
"required": [
"type",
"aggregate",
"data"
]
"required": ["type", "aggregate", "data"]
},
"SyncEvent.message.removed": {
"type": "object",
@@ -10694,17 +9932,10 @@
"pattern": "^msg.*"
}
},
"required": [
"sessionID",
"messageID"
]
"required": ["sessionID", "messageID"]
}
},
"required": [
"type",
"aggregate",
"data"
]
"required": ["type", "aggregate", "data"]
},
"SyncEvent.message.part.updated": {
"type": "object",
@@ -10731,18 +9962,10 @@
"type": "number"
}
},
"required": [
"sessionID",
"part",
"time"
]
"required": ["sessionID", "part", "time"]
}
},
"required": [
"type",
"aggregate",
"data"
]
"required": ["type", "aggregate", "data"]
},
"SyncEvent.message.part.removed": {
"type": "object",
@@ -10771,18 +9994,10 @@
"pattern": "^prt.*"
}
},
"required": [
"sessionID",
"messageID",
"partID"
]
"required": ["sessionID", "messageID", "partID"]
}
},
"required": [
"type",
"aggregate",
"data"
]
"required": ["type", "aggregate", "data"]
},
"SyncEvent.session.created": {
"type": "object",
@@ -10806,17 +10021,10 @@
"$ref": "#/components/schemas/Session"
}
},
"required": [
"sessionID",
"info"
]
"required": ["sessionID", "info"]
}
},
"required": [
"type",
"aggregate",
"data"
]
"required": ["type", "aggregate", "data"]
},
"SyncEvent.session.updated": {
"type": "object",
@@ -10879,11 +10087,7 @@
}
}
},
"required": [
"additions",
"deletions",
"files"
]
"required": ["additions", "deletions", "files"]
},
"share": {
"type": "object",
@@ -10937,24 +10141,15 @@
"type": "string"
}
},
"required": [
"messageID"
]
"required": ["messageID"]
}
}
}
},
"required": [
"sessionID",
"info"
]
"required": ["sessionID", "info"]
}
},
"required": [
"type",
"aggregate",
"data"
]
"required": ["type", "aggregate", "data"]
},
"SyncEvent.session.deleted": {
"type": "object",
@@ -10978,17 +10173,10 @@
"$ref": "#/components/schemas/Session"
}
},
"required": [
"sessionID",
"info"
]
"required": ["sessionID", "info"]
}
},
"required": [
"type",
"aggregate",
"data"
]
"required": ["type", "aggregate", "data"]
},
"SyncEvent": {
"type": "object",
@@ -10997,19 +10185,12 @@
"$ref": "#/components/schemas/SyncEvent"
}
},
"required": [
"payload"
]
"required": ["payload"]
},
"LogLevel": {
"description": "Log level",
"type": "string",
"enum": [
"DEBUG",
"INFO",
"WARN",
"ERROR"
]
"enum": ["DEBUG", "INFO", "WARN", "ERROR"]
},
"ServerConfig": {
"description": "Server configuration for opencode serve and web commands",
@@ -11045,11 +10226,7 @@
},
"PermissionActionConfig": {
"type": "string",
"enum": [
"ask",
"allow",
"deny"
]
"enum": ["ask", "allow", "deny"]
},
"PermissionObjectConfig": {
"type": "object",
@@ -11180,11 +10357,7 @@
},
"mode": {
"type": "string",
"enum": [
"subagent",
"primary",
"all"
]
"enum": ["subagent", "primary", "all"]
},
"hidden": {
"description": "Hide this subagent from the @ autocomplete menu (default: false, only applies to mode: subagent)",
@@ -11206,15 +10379,7 @@
},
{
"type": "string",
"enum": [
"primary",
"secondary",
"accent",
"success",
"warning",
"error",
"info"
]
"enum": ["primary", "secondary", "accent", "success", "warning", "error", "info"]
}
]
},
@@ -11300,15 +10465,10 @@
"properties": {
"field": {
"type": "string",
"enum": [
"reasoning_content",
"reasoning_details"
]
"enum": ["reasoning_content", "reasoning_details"]
}
},
"required": [
"field"
],
"required": ["field"],
"additionalProperties": false
}
]
@@ -11344,16 +10504,10 @@
"type": "number"
}
},
"required": [
"input",
"output"
]
"required": ["input", "output"]
}
},
"required": [
"input",
"output"
]
"required": ["input", "output"]
},
"limit": {
"type": "object",
@@ -11368,10 +10522,7 @@
"type": "number"
}
},
"required": [
"context",
"output"
]
"required": ["context", "output"]
},
"modalities": {
"type": "object",
@@ -11380,44 +10531,25 @@
"type": "array",
"items": {
"type": "string",
"enum": [
"text",
"audio",
"image",
"video",
"pdf"
]
"enum": ["text", "audio", "image", "video", "pdf"]
}
},
"output": {
"type": "array",
"items": {
"type": "string",
"enum": [
"text",
"audio",
"image",
"video",
"pdf"
]
"enum": ["text", "audio", "image", "video", "pdf"]
}
}
},
"required": [
"input",
"output"
]
"required": ["input", "output"]
},
"experimental": {
"type": "boolean"
},
"status": {
"type": "string",
"enum": [
"alpha",
"beta",
"deprecated"
]
"enum": ["alpha", "beta", "deprecated"]
},
"options": {
"type": "object",
@@ -11559,10 +10691,7 @@
"maximum": 9007199254740991
}
},
"required": [
"type",
"command"
],
"required": ["type", "command"],
"additionalProperties": false
},
"McpOAuthConfig": {
@@ -11628,19 +10757,13 @@
"maximum": 9007199254740991
}
},
"required": [
"type",
"url"
],
"required": ["type", "url"],
"additionalProperties": false
},
"LayoutConfig": {
"description": "@deprecated Always uses stretch layout.",
"type": "string",
"enum": [
"auto",
"stretch"
]
"enum": ["auto", "stretch"]
},
"Config": {
"type": "object",
@@ -11680,9 +10803,7 @@
"type": "boolean"
}
},
"required": [
"template"
]
"required": ["template"]
}
},
"skills": {
@@ -11729,11 +10850,7 @@
"share": {
"description": "Control sharing behavior:'manual' allows manual sharing via commands, 'auto' enables automatic sharing, 'disabled' disables all sharing",
"type": "string",
"enum": [
"manual",
"auto",
"disabled"
]
"enum": ["manual", "auto", "disabled"]
},
"autoshare": {
"description": "@deprecated Use 'share' field instead. Share newly created sessions automatically",
@@ -11861,9 +10978,7 @@
"type": "boolean"
}
},
"required": [
"enabled"
],
"required": ["enabled"],
"additionalProperties": false
}
]
@@ -11933,9 +11048,7 @@
"const": true
}
},
"required": [
"disabled"
]
"required": ["disabled"]
},
{
"type": "object",
@@ -11972,9 +11085,7 @@
"additionalProperties": {}
}
},
"required": [
"command"
]
"required": ["command"]
}
]
}
@@ -12086,11 +11197,7 @@
"const": false
}
},
"required": [
"data",
"errors",
"success"
]
"required": ["data", "errors", "success"]
},
"OAuth": {
"type": "object",
@@ -12115,12 +11222,7 @@
"type": "string"
}
},
"required": [
"type",
"refresh",
"access",
"expires"
]
"required": ["type", "refresh", "access", "expires"]
},
"ApiAuth": {
"type": "object",
@@ -12133,10 +11235,7 @@
"type": "string"
}
},
"required": [
"type",
"key"
]
"required": ["type", "key"]
},
"WellKnownAuth": {
"type": "object",
@@ -12152,11 +11251,7 @@
"type": "string"
}
},
"required": [
"type",
"key",
"token"
]
"required": ["type", "key", "token"]
},
"Auth": {
"anyOf": [
@@ -12185,15 +11280,10 @@
"type": "string"
}
},
"required": [
"message"
]
"required": ["message"]
}
},
"required": [
"name",
"data"
]
"required": ["name", "data"]
},
"Model": {
"type": "object",
@@ -12217,11 +11307,7 @@
"type": "string"
}
},
"required": [
"id",
"url",
"npm"
]
"required": ["id", "url", "npm"]
},
"name": {
"type": "string"
@@ -12263,13 +11349,7 @@
"type": "boolean"
}
},
"required": [
"text",
"audio",
"image",
"video",
"pdf"
]
"required": ["text", "audio", "image", "video", "pdf"]
},
"output": {
"type": "object",
@@ -12290,13 +11370,7 @@
"type": "boolean"
}
},
"required": [
"text",
"audio",
"image",
"video",
"pdf"
]
"required": ["text", "audio", "image", "video", "pdf"]
},
"interleaved": {
"anyOf": [
@@ -12308,28 +11382,15 @@
"properties": {
"field": {
"type": "string",
"enum": [
"reasoning_content",
"reasoning_details"
]
"enum": ["reasoning_content", "reasoning_details"]
}
},
"required": [
"field"
]
"required": ["field"]
}
]
}
},
"required": [
"temperature",
"reasoning",
"attachment",
"toolcall",
"input",
"output",
"interleaved"
]
"required": ["temperature", "reasoning", "attachment", "toolcall", "input", "output", "interleaved"]
},
"cost": {
"type": "object",
@@ -12350,10 +11411,7 @@
"type": "number"
}
},
"required": [
"read",
"write"
]
"required": ["read", "write"]
},
"experimentalOver200K": {
"type": "object",
@@ -12374,24 +11432,13 @@
"type": "number"
}
},
"required": [
"read",
"write"
]
"required": ["read", "write"]
}
},
"required": [
"input",
"output",
"cache"
]
"required": ["input", "output", "cache"]
}
},
"required": [
"input",
"output",
"cache"
]
"required": ["input", "output", "cache"]
},
"limit": {
"type": "object",
@@ -12406,19 +11453,11 @@
"type": "number"
}
},
"required": [
"context",
"output"
]
"required": ["context", "output"]
},
"status": {
"type": "string",
"enum": [
"alpha",
"beta",
"deprecated",
"active"
]
"enum": ["alpha", "beta", "deprecated", "active"]
},
"options": {
"type": "object",
@@ -12478,12 +11517,7 @@
},
"source": {
"type": "string",
"enum": [
"env",
"config",
"custom",
"api"
]
"enum": ["env", "config", "custom", "api"]
},
"env": {
"type": "array",
@@ -12511,14 +11545,7 @@
}
}
},
"required": [
"id",
"name",
"source",
"env",
"options",
"models"
]
"required": ["id", "name", "source", "env", "options", "models"]
},
"ToolIDs": {
"type": "array",
@@ -12537,11 +11564,7 @@
},
"parameters": {}
},
"required": [
"id",
"description",
"parameters"
]
"required": ["id", "description", "parameters"]
},
"ToolList": {
"type": "array",
@@ -12601,15 +11624,7 @@
"type": "string"
}
},
"required": [
"id",
"type",
"branch",
"name",
"directory",
"extra",
"projectID"
]
"required": ["id", "type", "branch", "name", "directory", "extra", "projectID"]
},
"Worktree": {
"type": "object",
@@ -12624,11 +11639,7 @@
"type": "string"
}
},
"required": [
"name",
"branch",
"directory"
]
"required": ["name", "branch", "directory"]
},
"WorktreeCreateInput": {
"type": "object",
@@ -12649,9 +11660,7 @@
"type": "string"
}
},
"required": [
"directory"
]
"required": ["directory"]
},
"WorktreeResetInput": {
"type": "object",
@@ -12660,9 +11669,7 @@
"type": "string"
}
},
"required": [
"directory"
]
"required": ["directory"]
},
"ProjectSummary": {
"type": "object",
@@ -12677,10 +11684,7 @@
"type": "string"
}
},
"required": [
"id",
"worktree"
]
"required": ["id", "worktree"]
},
"GlobalSession": {
"type": "object",
@@ -12725,11 +11729,7 @@
}
}
},
"required": [
"additions",
"deletions",
"files"
]
"required": ["additions", "deletions", "files"]
},
"share": {
"type": "object",
@@ -12738,9 +11738,7 @@
"type": "string"
}
},
"required": [
"url"
]
"required": ["url"]
},
"title": {
"type": "string"
@@ -12764,10 +11762,7 @@
"type": "number"
}
},
"required": [
"created",
"updated"
]
"required": ["created", "updated"]
},
"permission": {
"$ref": "#/components/schemas/PermissionRuleset"
@@ -12790,9 +11785,7 @@
"type": "string"
}
},
"required": [
"messageID"
]
"required": ["messageID"]
},
"project": {
"anyOf": [
@@ -12805,16 +11798,7 @@
]
}
},
"required": [
"id",
"slug",
"projectID",
"directory",
"title",
"version",
"time",
"project"
]
"required": ["id", "slug", "projectID", "directory", "title", "version", "time", "project"]
},
"McpResource": {
"type": "object",
@@ -12835,11 +11819,7 @@
"type": "string"
}
},
"required": [
"name",
"uri",
"client"
]
"required": ["name", "uri", "client"]
},
"TextPartInput": {
"type": "object",
@@ -12871,9 +11851,7 @@
"type": "number"
}
},
"required": [
"start"
]
"required": ["start"]
},
"metadata": {
"type": "object",
@@ -12883,10 +11861,7 @@
"additionalProperties": {}
}
},
"required": [
"type",
"text"
]
"required": ["type", "text"]
},
"FilePartInput": {
"type": "object",
@@ -12912,11 +11887,7 @@
"$ref": "#/components/schemas/FilePartSource"
}
},
"required": [
"type",
"mime",
"url"
]
"required": ["type", "mime", "url"]
},
"AgentPartInput": {
"type": "object",
@@ -12949,17 +11920,10 @@
"maximum": 9007199254740991
}
},
"required": [
"value",
"start",
"end"
]
"required": ["value", "start", "end"]
}
},
"required": [
"type",
"name"
]
"required": ["type", "name"]
},
"SubtaskPartInput": {
"type": "object",
@@ -12991,21 +11955,13 @@
"type": "string"
}
},
"required": [
"providerID",
"modelID"
]
"required": ["providerID", "modelID"]
},
"command": {
"type": "string"
}
},
"required": [
"type",
"prompt",
"description",
"agent"
]
"required": ["type", "prompt", "description", "agent"]
},
"ProviderAuthMethod": {
"type": "object",
@@ -13067,18 +12023,10 @@
"type": "string"
}
},
"required": [
"key",
"op",
"value"
]
"required": ["key", "op", "value"]
}
},
"required": [
"type",
"key",
"message"
]
"required": ["type", "key", "message"]
},
{
"type": "object",
@@ -13108,10 +12056,7 @@
"type": "string"
}
},
"required": [
"label",
"value"
]
"required": ["label", "value"]
}
},
"when": {
@@ -13136,28 +12081,16 @@
"type": "string"
}
},
"required": [
"key",
"op",
"value"
]
"required": ["key", "op", "value"]
}
},
"required": [
"type",
"key",
"message",
"options"
]
"required": ["type", "key", "message", "options"]
}
]
}
}
},
"required": [
"type",
"label"
]
"required": ["type", "label"]
},
"ProviderAuthAuthorization": {
"type": "object",
@@ -13181,11 +12114,7 @@
"type": "string"
}
},
"required": [
"url",
"method",
"instructions"
]
"required": ["url", "method", "instructions"]
},
"Symbol": {
"type": "object",
@@ -13206,17 +12135,10 @@
"$ref": "#/components/schemas/Range"
}
},
"required": [
"uri",
"range"
]
"required": ["uri", "range"]
}
},
"required": [
"name",
"kind",
"location"
]
"required": ["name", "kind", "location"]
},
"FileNode": {
"type": "object",
@@ -13232,32 +12154,20 @@
},
"type": {
"type": "string",
"enum": [
"file",
"directory"
]
"enum": ["file", "directory"]
},
"ignored": {
"type": "boolean"
}
},
"required": [
"name",
"path",
"absolute",
"type",
"ignored"
]
"required": ["name", "path", "absolute", "type", "ignored"]
},
"FileContent": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"text",
"binary"
]
"enum": ["text", "binary"]
},
"content": {
"type": "string"
@@ -13304,24 +12214,14 @@
}
}
},
"required": [
"oldStart",
"oldLines",
"newStart",
"newLines",
"lines"
]
"required": ["oldStart", "oldLines", "newStart", "newLines", "lines"]
}
},
"index": {
"type": "string"
}
},
"required": [
"oldFileName",
"newFileName",
"hunks"
]
"required": ["oldFileName", "newFileName", "hunks"]
},
"encoding": {
"type": "string",
@@ -13331,10 +12231,7 @@
"type": "string"
}
},
"required": [
"type",
"content"
]
"required": ["type", "content"]
},
"File": {
"type": "object",
@@ -13354,19 +12251,10 @@
},
"status": {
"type": "string",
"enum": [
"added",
"deleted",
"modified"
]
"enum": ["added", "deleted", "modified"]
}
},
"required": [
"path",
"added",
"removed",
"status"
]
"required": ["path", "added", "removed", "status"]
},
"MCPStatusConnected": {
"type": "object",
@@ -13376,9 +12264,7 @@
"const": "connected"
}
},
"required": [
"status"
]
"required": ["status"]
},
"MCPStatusDisabled": {
"type": "object",
@@ -13388,9 +12274,7 @@
"const": "disabled"
}
},
"required": [
"status"
]
"required": ["status"]
},
"MCPStatusFailed": {
"type": "object",
@@ -13403,10 +12287,7 @@
"type": "string"
}
},
"required": [
"status",
"error"
]
"required": ["status", "error"]
},
"MCPStatusNeedsAuth": {
"type": "object",
@@ -13416,9 +12297,7 @@
"const": "needs_auth"
}
},
"required": [
"status"
]
"required": ["status"]
},
"MCPStatusNeedsClientRegistration": {
"type": "object",
@@ -13431,10 +12310,7 @@
"type": "string"
}
},
"required": [
"status",
"error"
]
"required": ["status", "error"]
},
"MCPStatus": {
"anyOf": [
@@ -13474,13 +12350,7 @@
"type": "string"
}
},
"required": [
"home",
"state",
"config",
"worktree",
"directory"
]
"required": ["home", "state", "config", "worktree", "directory"]
},
"VcsInfo": {
"type": "object",
@@ -13489,9 +12359,7 @@
"type": "string"
}
},
"required": [
"branch"
]
"required": ["branch"]
},
"Command": {
"type": "object",
@@ -13510,11 +12378,7 @@
},
"source": {
"type": "string",
"enum": [
"command",
"mcp",
"skill"
]
"enum": ["command", "mcp", "skill"]
},
"template": {
"anyOf": [
@@ -13536,11 +12400,7 @@
}
}
},
"required": [
"name",
"template",
"hints"
]
"required": ["name", "template", "hints"]
},
"Agent": {
"type": "object",
@@ -13553,11 +12413,7 @@
},
"mode": {
"type": "string",
"enum": [
"subagent",
"primary",
"all"
]
"enum": ["subagent", "primary", "all"]
},
"native": {
"type": "boolean"
@@ -13587,10 +12443,7 @@
"type": "string"
}
},
"required": [
"modelID",
"providerID"
]
"required": ["modelID", "providerID"]
},
"variant": {
"type": "string"
@@ -13611,12 +12464,7 @@
"maximum": 9007199254740991
}
},
"required": [
"name",
"mode",
"permission",
"options"
]
"required": ["name", "mode", "permission", "options"]
},
"LSPStatus": {
"type": "object",
@@ -13643,12 +12491,7 @@
]
}
},
"required": [
"id",
"name",
"root",
"status"
]
"required": ["id", "name", "root", "status"]
},
"FormatterStatus": {
"type": "object",
@@ -13666,12 +12509,8 @@
"type": "boolean"
}
},
"required": [
"name",
"extensions",
"enabled"
]
"required": ["name", "extensions", "enabled"]
}
}
}
}
}
+1 -1
View File
@@ -6,4 +6,4 @@ await $`bun ./packages/sdk/js/script/build.ts`
await $`bun dev generate > ../sdk/openapi.json`.cwd("packages/opencode")
// await $`./script/format.ts`
await $`./script/format.ts`