Compare commits

...

30 Commits

Author SHA1 Message Date
Aiden Cline 50d5ead203 refactor(codemode): expose OpenAPI from package root 2026-07-04 00:09:46 -05:00
Aiden Cline e8ecb5e265 fix(codemode): skip SSE OpenAPI operations 2026-07-03 23:51:26 -05:00
Aiden Cline 6dd9a8158a fix(codemode): resolve OpenAPI tool conflicts 2026-07-03 23:46:57 -05:00
Aiden Cline 2316f5e5b3 fix(codemode): flatten OpenAPI tool inputs 2026-07-03 22:46:41 -05:00
Aiden Cline adca41c50c fix(codemode): preserve constrained OpenAPI types 2026-07-03 17:32:18 -05:00
Aiden Cline 5a3520aa63 test(codemode): refresh OpenAPI fixture from v2 API 2026-07-03 17:18:51 -05:00
Aiden Cline e213a08b08 feat(codemode): preserve OpenAPI operation namespaces 2026-07-03 17:05:17 -05:00
Aiden Cline 7213242c99 revert weird change 2026-07-03 16:57:00 -05:00
Aiden Cline 88ac234fa5 test(codemode): name OpenAPI fixture for v2 2026-07-03 16:53:50 -05:00
Aiden Cline 79a3a1210a test(codemode): assert OpenAPI fixture tool shapes 2026-07-03 16:50:06 -05:00
Aiden Cline 3bf6636cbe test(codemode): use fixed OpenAPI fixture 2026-07-03 16:42:12 -05:00
Aiden Cline f2e43da451 test(codemode): cover OpenAPI adapter with opencode spec 2026-07-03 16:37:10 -05:00
Aiden Cline 701bf1854f refactor(codemode): inline trivial runtime helpers 2026-07-03 16:25:10 -05:00
Aiden Cline 04c4e90e61 refactor(codemode): inline OpenAPI error summary 2026-07-03 16:22:48 -05:00
Aiden Cline d8e3b692c0 refactor(codemode): inline private token estimate 2026-07-03 15:49:08 -05:00
Aiden Cline 34c65b71e6 refactor(codemode): simplify OpenAPI adapter split 2026-07-03 15:29:02 -05:00
Aiden Cline afb42e1ee9 refactor(codemode): split OpenAPI adapter modules 2026-07-03 15:22:33 -05:00
Aiden Cline d9e870ad5a refactor(codemode): expose OpenAPI only as adapter 2026-07-03 15:19:04 -05:00
Aiden Cline 813fb9d115 refactor(codemode): move OpenAPI adapter 2026-07-03 15:01:22 -05:00
Aiden Cline e4e27c4b46 test(opencode): stabilize websocket idle pruning 2026-07-03 13:53:15 -05:00
Aiden Cline 49ef91f5e7 fix(codemode): harden OpenAPI tool names and required params 2026-07-03 13:39:37 -05:00
Aiden Cline bf1e20a9e7 fix(codemode): harden OpenAPI path and record handling, cover naming and headers 2026-07-03 13:31:25 -05:00
Aiden Cline 6efdae2890 refactor(codemode): trim OpenAPI adapter to basic converter scope 2026-07-03 13:13:45 -05:00
Aiden Cline a63800ce9e refactor(codemode): align OpenAPI adapter with style guide 2026-07-03 12:47:04 -05:00
Aiden Cline 264b7c0e47 fix(codemode): refine OpenAPI response selection and header validation 2026-07-03 12:40:21 -05:00
Aiden Cline 5f785cf405 refactor(codemode): validate OpenAPI calls locally before auth and simplify helpers 2026-07-03 12:28:19 -05:00
Aiden Cline b8d4006261 fix(codemode): correct OpenAPI response fallthrough and cookie handling 2026-07-03 12:19:03 -05:00
Aiden Cline 6c40e9a564 fix(codemode): handle 2XX wildcards and required bodies in OpenAPI adapter 2026-07-03 12:10:00 -05:00
Aiden Cline 9793d9f141 fix(codemode): address OpenAPI adapter review feedback 2026-07-03 12:03:32 -05:00
Aiden Cline 2cca149c1d feat(codemode): add OpenAPI tool adapter 2026-07-03 11:50:27 -05:00
13 changed files with 28313 additions and 49 deletions
+27
View File
@@ -152,6 +152,33 @@ interface ExecuteFailure {
`onToolCallEnd` receives `{ index, name, input, durationMs, outcome, message? }` when an admitted call settles. `outcome` is `"success"` or `"failure"`; `message` is the model-safe failure message and is present only on failure. Interrupted calls (for example when the execution timeout fires) do not produce an end event. Both hooks are Effect-returning and must not fail.
### OpenAPI tools
`OpenAPI.fromSpec` turns an OpenAPI 3.x document into a tool subtree - one tool per operation. Tool names use `operationId` when present, otherwise a method/path fallback; names are sanitized and deduplicated. The host places the subtree under a key in its `tools` tree; that key is the model-visible namespace.
```ts
import { CodeMode, OpenAPI } from "@opencode-ai/codemode"
import { Effect } from "effect"
import { FetchHttpClient } from "effect/unstable/http"
const api = OpenAPI.fromSpec({
spec: await Bun.file("openapi.json").json(), // parsed document (no YAML)
auth: {
resolve: ({ schemeName, scopes, operation }) =>
schemeName === "BearerAuth"
? Effect.succeed({ type: "bearer", token })
: Effect.succeed(undefined),
},
})
const runtime = CodeMode.make({ tools: { opencode: api.tools } })
const result = await Effect.runPromise(runtime.execute(code).pipe(Effect.provide(FetchHttpClient.layer)))
```
`fromSpec` is synchronous and returns `{ tools, skipped }`; operations it cannot represent (non-JSON request bodies, non-absolute server URLs) land in `skipped` with a reason instead of producing broken tools. Tool inputs flatten path, query, header, and closed object-body fields into one model-facing object while retaining their HTTP locations internally. Cross-location name collisions receive a location prefix such as `path_id` and `query_id`; composed, nullable, dictionary, conditionally-required, and non-object JSON bodies remain under `body` so the adapter does not discard valid payloads. Auth is never model-visible. Non-2xx responses become safe tool failures carrying the status and a size-capped body summary, so programs can `catch` and read them.
Auth follows OpenAPI `security` semantics and is resolved host-side via `auth.resolve` - credential storage, OAuth flows, and token refresh never enter the compiler. See the option docstrings in `src/openapi/types.ts` for the full semantics. Generated tools require `HttpClient.HttpClient` (from `effect/unstable/http`) in the Effect environment - provide `FetchHttpClient.layer` or a custom/test client layer at execution.
## Discovery
The agent-tool instructions use a budgeted catalog. Every tool namespace is always listed with its tool count regardless of budget, and as many complete tool signatures (each with a one-line description) as fit an estimated-token budget are inlined. Selection is round-robin across namespaces for fairness: in each round (namespaces alphabetical), every namespace still holding un-inlined tools attempts to place its next-cheapest signature line against the shared budget, and a namespace whose next line does not fit drops out while the others keep going - so every namespace gets some representation before any namespace gets everything. The instructions state exactly how comprehensive the list is, both overall (`COMPLETE list` vs `PARTIAL - N of M shown`) and per namespace (`(3 tools)`, `(3 tools, 1 shown)`, `(3 tools, none shown)`).
+1
View File
@@ -1,5 +1,6 @@
export { ToolError, CodeMode, ExecuteInputSchema, ExecuteResultSchema, toolError } from "./codemode.js"
export { Tool } from "./tool.js"
export { OpenAPI } from "./openapi/index.js"
export type { Definition as ToolDefinition, JsonSchema, ToolSchema } from "./tool.js"
export type { ToolCallEnded, ToolCallHooks } from "./tool-runtime.js"
export type {
+125
View File
@@ -0,0 +1,125 @@
import { HttpClient } from "effect/unstable/http"
import { Tool, type Definition } from "../tool.js"
import { invoke } from "./runtime.js"
import {
componentDefinitions,
inputSchema,
isRecord,
methods,
nonEmptyString,
operationInput,
operationPath,
outputSchema,
securityRequirements,
securitySchemes,
specServerUrl,
unsupportedOperationReason,
} from "./spec.js"
import type { Operation, Options, Result, Skipped, Tools } from "./types.js"
export type {
AuthResolver,
Credential,
Document,
Operation,
Options,
Result,
SecurityScheme,
Skipped,
Tools,
} from "./types.js"
/**
* Builds a CodeMode tool subtree from an OpenAPI 3.x document, one tool per
* operation. Auth is resolved host-side via `auth.resolve` and never
* model-visible. Tools require `HttpClient.HttpClient`; unrepresentable
* operations land in `skipped`.
*/
export const fromSpec = (options: Options): Result => {
const document = options.spec
const schemes = securitySchemes(document)
const defaultSecurity = securityRequirements(document.security)
const definitions = componentDefinitions(document)
const paths = isRecord(document.paths) ? document.paths : {}
const base = options.baseUrl ?? specServerUrl(document)
const used = new Set<string>()
const namespaces = new Set<string>()
const skipped: Array<Skipped> = []
const tools = Object.create(null) as Tools
for (const [path, pathValue] of Object.entries(paths)) {
if (!isRecord(pathValue)) continue
for (const [method, operationValue] of Object.entries(pathValue)) {
if (!methods.has(method) || !isRecord(operationValue)) continue
const segments = operationPath(method, path, operationValue, used, namespaces)
const operation: Operation = {
id: segments.join("."),
method: method.toUpperCase(),
path,
summary: nonEmptyString(operationValue.summary),
description: nonEmptyString(operationValue.description),
}
if (options.operations !== undefined && !options.operations(operation)) continue
// TODO: Represent streaming transports as explicit host capabilities before
// exposing them as callable CodeMode tools.
const unsupported = unsupportedOperationReason(document, operationValue)
if (unsupported !== undefined) {
skipped.push({ method: operation.method, path, reason: unsupported })
continue
}
if (typeof base !== "string") {
skipped.push({ method: operation.method, path, reason: base.reason })
continue
}
const input = operationInput(document, pathValue, operationValue)
if ("reason" in input) {
skipped.push({ method: operation.method, path, reason: input.reason })
continue
}
const security =
operationValue.security === undefined ? defaultSecurity : securityRequirements(operationValue.security)
const plan = {
operation,
url: `${base.replace(/\/+$/, "")}${path}`,
fields: input.fields,
body: input.body,
security,
schemes,
auth: options.auth,
headers: options.headers ?? {},
}
used.add(operation.id)
for (const index of segments.slice(0, -1).keys()) namespaces.add(segments.slice(0, index + 1).join("."))
setTool(
tools,
segments,
Tool.make({
description: operation.description ?? operation.summary ?? `${operation.method} ${path}`,
input: inputSchema(input.fields, definitions),
output: outputSchema(document, operationValue, definitions),
run: (input) => invoke(plan, input),
}),
)
}
}
return { tools, skipped }
}
const setTool = (tools: Tools, path: ReadonlyArray<string>, definition: Definition<HttpClient.HttpClient>): void => {
const [head, ...rest] = path
if (head === undefined) return
if (rest.length === 0) {
tools[head] = definition
return
}
const child = tools[head]
if (child === undefined || !isRecord(child) || child._tag === "CodeModeTool") {
tools[head] = Object.create(null) as Tools
}
setTool(tools[head] as Tools, rest, definition)
}
export const OpenAPI = { fromSpec }
+189
View File
@@ -0,0 +1,189 @@
import { Effect, Option, Schema } from "effect"
import { HttpClient, HttpClientRequest, type HttpMethod } from "effect/unstable/http"
import { ToolError, toolError } from "../tool-error.js"
import { isRecord, maxErrorBodyChars, own } from "./spec.js"
import type { AppliedAuth, Credential, Plan, SecurityScheme } from "./types.js"
const decodeJson = Schema.decodeUnknownOption(Schema.UnknownFromJsonString)
export const invoke = (plan: Plan, input: unknown): Effect.Effect<unknown, unknown, HttpClient.HttpClient> =>
Effect.gen(function* () {
const value = isRecord(input) ? input : {}
// Local validation before auth resolution, which may refresh tokens.
const url = buildUrl(plan, value)
if (url instanceof ToolError) return yield* Effect.fail(url)
for (const field of plan.fields) {
if (!field.required || field.location === "path") continue
const item = own(value, field.inputName)
if (item === undefined || (field.location !== "body" && item === null)) {
const label = field.location === "body" ? "body field" : `${field.location} parameter`
return yield* Effect.fail(toolError(`Missing required ${label} '${field.inputName}'.`))
}
}
const auth = yield* resolveAuth(plan)
let request = HttpClientRequest.make(plan.operation.method as HttpMethod.HttpMethod)(url)
for (const field of plan.fields) {
if (field.location !== "query") continue
const item = own(value, field.inputName)
if (item === undefined || item === null) continue
const rendered = Array.isArray(item) ? item.map(renderPrimitive) : [renderPrimitive(item)]
for (const one of rendered) {
request = HttpClientRequest.appendUrlParam(request, field.name, one)
}
}
for (const [name, item] of Object.entries(auth.query)) {
request = HttpClientRequest.setUrlParam(request, name, item)
}
// Host headers first, then declared header params, then auth - auth must win.
request = HttpClientRequest.setHeaders(request, plan.headers)
for (const field of plan.fields) {
if (field.location !== "header") continue
const item = own(value, field.inputName)
if (item === undefined || item === null) continue
request = HttpClientRequest.setHeader(request, field.name, renderPrimitive(item))
}
const cookiePairs = Object.entries(auth.cookies).map(([name, item]) => `${name}=${item}`)
if (cookiePairs.length > 0) request = HttpClientRequest.setHeader(request, "cookie", cookiePairs.join("; "))
request = HttpClientRequest.setHeaders(request, auth.headers)
if (plan.body?.mode === "value") {
const field = plan.fields.find((field) => field.location === "body")
const body = field === undefined ? undefined : own(value, field.inputName)
if (body !== undefined) request = HttpClientRequest.bodyJsonUnsafe(request, body)
}
if (plan.body?.mode === "object") {
const entries = plan.fields.flatMap((field) => {
if (field.location !== "body") return []
const item = own(value, field.inputName)
return item === undefined ? [] : [[field.name, item] as const]
})
if (plan.body.required || entries.length > 0) {
request = HttpClientRequest.bodyJsonUnsafe(request, Object.fromEntries(entries))
}
}
const client = yield* HttpClient.HttpClient
const response = yield* client
.execute(request)
.pipe(
Effect.catch((cause) =>
Effect.fail(toolError(`${plan.operation.method} ${plan.operation.path} failed: transport error`, cause)),
),
)
// Best effort: an unreadable body degrades to the status-only error/null result.
const text = yield* response.text.pipe(Effect.catch(() => Effect.succeed("")))
const parsed = text === "" ? null : Option.getOrElse(decodeJson(text), () => text)
if (response.status < 200 || response.status >= 300) {
const rendered = typeof parsed === "string" ? parsed : (JSON.stringify(parsed) ?? "")
const summary =
rendered === "" || rendered === "null"
? "no response body"
: rendered.length > maxErrorBodyChars
? `${rendered.slice(0, maxErrorBodyChars)}...`
: rendered
return yield* Effect.fail(
toolError(`${plan.operation.method} ${plan.operation.path} failed with HTTP ${response.status}: ${summary}`),
)
}
return parsed
})
const resolveAuth = (plan: Plan): Effect.Effect<AppliedAuth, unknown> =>
Effect.gen(function* () {
const none: AppliedAuth = { headers: {}, query: {}, cookies: {} }
if (plan.security.length === 0) return none
const unavailable: Array<string> = []
alternatives: for (const requirement of plan.security) {
const names = Object.keys(requirement)
if (names.length === 0) return none
const credentials: Array<readonly [SecurityScheme, Credential]> = []
for (const name of names) {
const scheme = own(plan.schemes, name)
if (scheme === undefined || plan.auth === undefined) {
unavailable.push(name)
continue alternatives
}
const credential = yield* plan.auth.resolve({
schemeName: name,
scheme,
scopes: requirement[name] ?? [],
operation: plan.operation,
})
if (credential === undefined) {
unavailable.push(name)
continue alternatives
}
credentials.push([scheme, credential])
}
const applied = applyCredentials(credentials)
return applied instanceof ToolError ? yield* Effect.fail(applied) : applied
}
return yield* Effect.fail(
toolError(
`${plan.operation.method} ${plan.operation.path} requires authentication; no credential available for: ${[...new Set(unavailable)].join(", ")}.`,
),
)
})
const applyCredentials = (
credentials: ReadonlyArray<readonly [SecurityScheme, Credential]>,
): AppliedAuth | ToolError => {
const headers: Record<string, string> = {}
const query: Record<string, string> = {}
const cookies: Record<string, string> = {}
for (const [scheme, credential] of credentials) {
if (credential.type === "bearer") {
headers["authorization"] = `Bearer ${credential.token}`
continue
}
if (credential.type === "basic") {
// Buffer instead of btoa: btoa throws on non-Latin-1 credentials.
headers["authorization"] =
`Basic ${Buffer.from(`${credential.username}:${credential.password}`, "utf8").toString("base64")}`
continue
}
if (credential.type === "header") {
headers[credential.name.toLowerCase()] = credential.value
continue
}
// apiKey: the carrier comes from the scheme declaration.
const name = scheme.parameterName
if (scheme.type !== "apiKey" || name === undefined || scheme.in === undefined) {
return toolError(
`Security scheme '${scheme.name}' is not an apiKey scheme; resolve a bearer, basic, or header credential for it.`,
)
}
if (scheme.in === "header") headers[name.toLowerCase()] = credential.value
if (scheme.in === "query") query[name] = credential.value
if (scheme.in === "cookie") cookies[name] = credential.value
}
return { headers, query, cookies }
}
const renderPrimitive = (value: unknown): string =>
typeof value === "object" && value !== null ? JSON.stringify(value) : String(value)
const buildUrl = (plan: Plan, input: Readonly<Record<string, unknown>>): string | ToolError => {
let url = plan.url
for (const field of plan.fields) {
if (field.location !== "path") continue
const item = own(input, field.inputName)
if (item === undefined || item === null) {
return toolError(`Missing required path parameter '${field.inputName}'.`)
}
const rendered = encodeURIComponent(renderPrimitive(item))
// '.'/'..' survive encoding and URL normalization collapses them, letting a
// model-supplied value retarget the request to a different endpoint.
if (rendered === "" || rendered === "." || rendered === "..") {
return toolError(`Invalid path parameter '${field.inputName}'.`)
}
url = url.replaceAll(`{${field.name}}`, rendered)
}
const unresolved = url.match(/\{[^{}]+\}/)
if (unresolved !== null) return toolError(`Unresolved path parameter ${unresolved[0]}.`)
return url
}
+388
View File
@@ -0,0 +1,388 @@
import type { JsonSchema } from "../tool.js"
import type {
Body,
Document,
InputField,
InputLocation,
OperationInput,
SecurityRequirement,
SecurityScheme,
Skip,
} from "./types.js"
export const methods = new Set(["get", "put", "post", "delete", "options", "head", "patch", "trace"])
const parameterLocations = ["path", "query", "header"] as const
const parameterLocationSet = new Set<string>(parameterLocations)
const ignoredHeaderParameters = new Set(["accept", "content-type", "authorization"])
const schemeTypes = new Set(["apiKey", "http", "oauth2", "openIdConnect"])
const blockedOperationNames = new Set(["__proto__", "constructor", "prototype"])
const schemaShapeKeys = new Set([
"$ref",
"type",
"enum",
"const",
"anyOf",
"oneOf",
"allOf",
"properties",
"items",
"additionalProperties",
])
export const maxErrorBodyChars = 1_024
export const isRecord = (value: unknown): value is Record<string, unknown> =>
typeof value === "object" && value !== null && !Array.isArray(value)
const asArray = (value: unknown): ReadonlyArray<unknown> => (Array.isArray(value) ? value : [])
export const nonEmptyString = (value: unknown): string | undefined =>
typeof value === "string" && value !== "" ? value : undefined
// Guards record lookups keyed by spec- or model-controlled names against
// prototype-inherited values (e.g. a parameter named `toString`).
export const own = <T>(record: Readonly<Record<string, T>>, key: string): T | undefined =>
Object.hasOwn(record, key) ? record[key] : undefined
export const resolve = (document: Document, value: unknown): unknown => {
if (!isRecord(value)) return value
const ref = nonEmptyString(value.$ref)
if (ref === undefined || !ref.startsWith("#/")) return value
const target = ref
.slice(2)
.split("/")
.map((segment) => segment.replaceAll("~1", "/").replaceAll("~0", "~"))
.reduce<unknown>((current, segment) => (isRecord(current) ? current[segment] : undefined), document)
return target ?? value
}
const projectSchema = (value: unknown, depth = 0): JsonSchema => {
if (depth > 24 || !isRecord(value)) return {}
const ref = nonEmptyString(value.$ref)
if (ref !== undefined) {
// `#/components/schemas/X` becomes `#/$defs/X`, the only ref form the
// signature renderer resolves. `~` is unescaped to match the `$defs` key;
// `/` must stay escaped because the renderer takes the last `/` segment.
const name = ref.match(/^#\/components\/schemas\/(.+)$/)?.[1]
return { $ref: name === undefined ? ref : `#/$defs/${name.replaceAll("~0", "~")}` }
}
const type = Array.isArray(value.type)
? value.type.filter((item): item is string => typeof item === "string")
: nonEmptyString(value.type)
const description = nonEmptyString(value.description)
const format = nonEmptyString(value.format)
const allOf = Array.isArray(value.allOf)
? value.allOf
.map((item) => projectSchema(item, depth + 1))
.filter((item) => Object.keys(item).some((key) => schemaShapeKeys.has(key)))
: []
const projected: JsonSchema = {
...(type === undefined ? {} : { type }),
...(Array.isArray(value.enum) ? { enum: value.enum } : {}),
...(value.const === undefined ? {} : { const: value.const }),
...(Array.isArray(value.anyOf) ? { anyOf: value.anyOf.map((item) => projectSchema(item, depth + 1)) } : {}),
...(Array.isArray(value.oneOf) ? { oneOf: value.oneOf.map((item) => projectSchema(item, depth + 1)) } : {}),
...(allOf.length === 0 ? {} : { allOf }),
...(isRecord(value.properties)
? {
properties: Object.fromEntries(
Object.entries(value.properties).map(([key, item]) => [key, projectSchema(item, depth + 1)]),
),
}
: {}),
...(Array.isArray(value.required)
? { required: value.required.filter((item): item is string => typeof item === "string") }
: {}),
...(isRecord(value.items) ? { items: projectSchema(value.items, depth + 1) } : {}),
...(typeof value.additionalProperties === "boolean"
? { additionalProperties: value.additionalProperties }
: isRecord(value.additionalProperties)
? { additionalProperties: projectSchema(value.additionalProperties, depth + 1) }
: {}),
...(description === undefined ? {} : { description }),
...(value.default === undefined ? {} : { default: value.default }),
...(format === undefined ? {} : { format }),
...(value.deprecated === true ? { deprecated: true } : {}),
...(typeof value.minItems === "number" ? { minItems: value.minItems } : {}),
...(typeof value.maxItems === "number" ? { maxItems: value.maxItems } : {}),
}
// OpenAPI 3.0 nullable -> union with null, matching what 3.1 expresses via type arrays.
if (value.nullable !== true) return projected
if (Array.isArray(projected.type)) return { ...projected, type: [...projected.type, "null"] }
if (typeof projected.type === "string") return { ...projected, type: [projected.type, "null"] }
return { anyOf: [projected, { type: "null" }] }
}
export const componentDefinitions = (document: Document): Readonly<Record<string, JsonSchema>> => {
const components = isRecord(document.components) ? document.components : {}
const schemas = isRecord(components.schemas) ? components.schemas : {}
return Object.fromEntries(Object.entries(schemas).map(([name, value]) => [name, projectSchema(value)]))
}
const withDefinitions = (schema: JsonSchema, definitions: Readonly<Record<string, JsonSchema>>): JsonSchema =>
Object.keys(definitions).length === 0 ? schema : { ...schema, $defs: definitions }
const isJsonMediaType = (mediaType: string): boolean => {
const normalized = mediaType.split(";")[0]?.trim().toLowerCase() ?? ""
return normalized === "application/json" || normalized.endsWith("+json")
}
const jsonContentSchema = (content: Record<string, unknown>): unknown => {
const entry = Object.entries(content).find(([mediaType]) => isJsonMediaType(mediaType))
return entry !== undefined && isRecord(entry[1]) ? entry[1].schema : undefined
}
const isFlattenableObjectBody = (
schema: unknown,
requestRequired: boolean,
): schema is Record<string, unknown> & { readonly properties: Record<string, unknown> } =>
isRecord(schema) &&
requestRequired &&
schema.type === "object" &&
isRecord(schema.properties) &&
schema.additionalProperties === false &&
schema.nullable !== true &&
schema.allOf === undefined &&
schema.anyOf === undefined &&
schema.oneOf === undefined
export const operationInput = (
document: Document,
pathItem: Record<string, unknown>,
operation: Record<string, unknown>,
): OperationInput | Skip => {
// Operation-level parameters override path-level ones sharing (location, name).
const merged = new Map<string, Omit<InputField, "inputName">>()
for (const raw of [...asArray(pathItem.parameters), ...asArray(operation.parameters)]) {
const resolved = resolve(document, raw)
if (!isRecord(resolved)) continue
const name = nonEmptyString(resolved.name)
const location = nonEmptyString(resolved.in)
if (name === undefined || location === undefined || !parameterLocationSet.has(location)) continue
if (location === "header" && ignoredHeaderParameters.has(name.toLowerCase())) continue
const base = projectSchema(resolved.schema)
const description = nonEmptyString(resolved.description)
merged.set(`${location}:${name}`, {
name,
location: location as InputLocation,
required: resolved.required === true || location === "path",
schema: {
...base,
...(base.description === undefined && description !== undefined ? { description } : {}),
},
})
}
const fields: Array<Omit<InputField, "inputName">> = parameterLocations.flatMap((location) =>
[...merged.values()].filter((field) => field.location === location),
)
const resolved = resolve(document, operation.requestBody)
const body: Body | Skip | undefined = (() => {
if (!isRecord(resolved)) return undefined
const content = isRecord(resolved.content) ? resolved.content : {}
if (!Object.keys(content).some(isJsonMediaType))
return { reason: `request body has no JSON content (declared: ${Object.keys(content).join(", ") || "none"})` }
const source = jsonContentSchema(content)
const schema = resolve(document, source)
const required = resolved.required === true
if (!isFlattenableObjectBody(schema, required)) {
fields.push({ name: "body", location: "body", required, schema: projectSchema(source) })
return { required, mode: "value" } as const
}
const requiredProperties = new Set(
Array.isArray(schema.required) ? schema.required.filter((item): item is string => typeof item === "string") : [],
)
fields.push(
...Object.entries(schema.properties).map(([name, value]) => ({
name,
location: "body" as const,
required: required && requiredProperties.has(name),
schema: projectSchema(value),
})),
)
return { required, mode: "object" } as const
})()
if (body !== undefined && "reason" in body) return body
const conflicts = new Set(
[...Map.groupBy(fields, (field) => field.name)]
.filter(([, matches]) => new Set(matches.map((field) => field.location)).size > 1)
.map(([name]) => name),
)
const used = new Set<string>()
return {
fields: fields.map((field) => {
const base = conflicts.has(field.name) ? `${field.location}_${field.name}` : field.name
const next = (index: number): string => {
const candidate = index === 1 ? base : `${base}_${index}`
return used.has(candidate) ? next(index + 1) : candidate
}
const inputName = next(1)
used.add(inputName)
return { ...field, inputName }
}),
body,
}
}
export const inputSchema = (
fields: ReadonlyArray<InputField>,
definitions: Readonly<Record<string, JsonSchema>>,
): JsonSchema => {
const required = fields.filter((field) => field.required).map((field) => field.inputName)
return withDefinitions(
{
type: "object",
properties: Object.fromEntries(fields.map((field) => [field.inputName, field.schema])),
...(required.length === 0 ? {} : { required }),
},
definitions,
)
}
const successResponses = (
document: Document,
operation: Record<string, unknown>,
): ReadonlyArray<Record<string, unknown>> => {
if (!isRecord(operation.responses)) return []
const entries = Object.entries(operation.responses)
return [
...entries.filter(([status]) => /^2\d\d$/.test(status)).sort(([a], [b]) => a.localeCompare(b)),
...entries.filter(([status]) => status.toUpperCase() === "2XX"),
]
.map(([, ref]) => resolve(document, ref))
.filter(isRecord)
}
export const unsupportedOperationReason = (
document: Document,
operation: Record<string, unknown>,
): string | undefined => {
if (operation["x-websocket"] === true) return "WebSocket operations are not supported"
const streams = successResponses(document, operation).some(
(response) =>
isRecord(response.content) &&
Object.keys(response.content).some(
(mediaType) => mediaType.split(";")[0]?.trim().toLowerCase() === "text/event-stream",
),
)
return streams ? "SSE operations are not supported" : undefined
}
export const outputSchema = (
document: Document,
operation: Record<string, unknown>,
definitions: Readonly<Record<string, JsonSchema>>,
): JsonSchema | undefined => {
const successes = successResponses(document, operation)
for (const response of successes) {
const schema = jsonContentSchema(isRecord(response.content) ? response.content : {})
if (schema !== undefined) return withDefinitions(projectSchema(schema), definitions)
}
// Declared non-JSON content (e.g. text/plain) returns the raw body -> unknown.
const declaresContent = successes.some(
(response) => isRecord(response.content) && Object.keys(response.content).length > 0,
)
if (declaresContent) return undefined
// No-content success (e.g. 204) -> null.
return successes.length > 0 ? { type: "null" } : undefined
}
const sanitizeOperationSegment = (raw: string): string => {
const base =
raw
.replaceAll(/[^A-Za-z0-9_$]+/g, "_")
.replace(/^_+|_+$/g, "")
.replace(/^([0-9])/, "_$1") || "operation"
return blockedOperationNames.has(base) ? `${base}_2` : base
}
export const operationPath = (
method: string,
path: string,
operation: Record<string, unknown>,
used: ReadonlySet<string>,
namespaces: ReadonlySet<string>,
): ReadonlyArray<string> => {
const raw = nonEmptyString(operation.operationId)
const base = (raw === undefined ? [`${method}_${path.replaceAll(/[{}]/g, "")}`] : raw.split("."))
.map(sanitizeOperationSegment)
.filter((segment) => segment !== "")
const segments = base.length === 0 ? ["operation"] : base
if (isOperationPathAvailable(segments, used, namespaces)) return segments
const conflict = segments.slice(0, -1).findIndex((_, index) => used.has(segments.slice(0, index + 1).join(".")))
if (conflict >= 0 && conflict + 1 < segments.length) {
const collapsed = segments.flatMap((segment, index) => {
if (index === conflict) {
const next = segments[index + 1] ?? ""
return [`${segment}${next.charAt(0).toUpperCase()}${next.slice(1)}`]
}
return index === conflict + 1 ? [] : [segment]
})
if (isOperationPathAvailable(collapsed, used, namespaces)) return collapsed
}
const fallback = [segments.join("_")]
const next = (index: number): string => {
const candidate = `${fallback[0]}_${index}`
return isOperationPathAvailable([candidate], used, namespaces) ? candidate : next(index + 1)
}
return [next(2)]
}
const isOperationPathAvailable = (
segments: ReadonlyArray<string>,
used: ReadonlySet<string>,
namespaces: ReadonlySet<string>,
): boolean => {
const key = segments.join(".")
if (used.has(key) || namespaces.has(key)) return false
return segments.slice(0, -1).every((_, index) => !used.has(segments.slice(0, index + 1).join(".")))
}
export const specServerUrl = (document: Document): string | Skip => {
const server = asArray(document.servers).find(isRecord)
const url = server === undefined ? undefined : nonEmptyString(server.url)
if (url === undefined) return { reason: "spec declares no servers; pass baseUrl" }
// Templated or relative server URLs cannot be resolved by the adapter.
if (!/^[a-z][a-z0-9+.-]*:\/\//i.test(url) || /\{[^{}]+\}/.test(url)) {
return { reason: `server URL '${url}' is not an absolute URL; pass baseUrl` }
}
return url
}
export const securityRequirements = (value: unknown): ReadonlyArray<SecurityRequirement> =>
asArray(value)
.filter(isRecord)
.map((requirement) =>
Object.fromEntries(
Object.entries(requirement).map(([name, scopes]) => [
name,
asArray(scopes).filter((scope): scope is string => typeof scope === "string"),
]),
),
)
export const securitySchemes = (document: Document): Readonly<Record<string, SecurityScheme>> => {
const components = isRecord(document.components) ? document.components : {}
const declared = isRecord(components.securitySchemes) ? components.securitySchemes : {}
return Object.fromEntries(
Object.entries(declared).flatMap(([name, value]) => {
const resolved = resolve(document, value)
if (!isRecord(resolved)) return []
const type = nonEmptyString(resolved.type)
if (type === undefined || !schemeTypes.has(type)) return []
const carrier = nonEmptyString(resolved.in)
return [
[
name,
{
name,
type: type as SecurityScheme["type"],
in: carrier === "header" || carrier === "query" || carrier === "cookie" ? carrier : undefined,
parameterName: nonEmptyString(resolved.name),
scheme: nonEmptyString(resolved.scheme)?.toLowerCase(),
},
] as const,
]
}),
)
}
+118
View File
@@ -0,0 +1,118 @@
import { Effect } from "effect"
import { HttpClient } from "effect/unstable/http"
import type { Definition, JsonSchema } from "../tool.js"
/** A parsed OpenAPI 3.x document. YAML must be parsed by the host. */
export type Document = Record<string, unknown>
/** The operation identity handed to auth resolution and errors. */
export type Operation = {
readonly id: string
readonly method: string
readonly path: string
readonly summary: string | undefined
readonly description: string | undefined
}
/** A resolved OpenAPI security scheme from `components.securitySchemes`. */
export type SecurityScheme = {
readonly name: string
readonly type: "apiKey" | "http" | "oauth2" | "openIdConnect"
/** apiKey carrier declared by the spec. */
readonly in: "header" | "query" | "cookie" | undefined
/** apiKey parameter name declared by the spec. */
readonly parameterName: string | undefined
/** `http` scheme (`bearer`, `basic`, ...). */
readonly scheme: string | undefined
}
/**
* Credential material returned by a host auth resolver. The carrier for `apiKey`
* comes from the scheme definition, not the credential. `header` is the escape
* hatch for nonstandard schemes.
*/
export type Credential =
| { readonly type: "bearer"; readonly token: string }
| { readonly type: "basic"; readonly username: string; readonly password: string }
| { readonly type: "apiKey"; readonly value: string }
| { readonly type: "header"; readonly name: string; readonly value: string }
/**
* Resolves credential material for one named security scheme at call time.
* `undefined` means unavailable, try the next OR alternative; a failure aborts
* the call rather than falling through.
*/
export type AuthResolver = (context: {
readonly schemeName: string
readonly scheme: SecurityScheme
readonly scopes: ReadonlyArray<string>
readonly operation: Operation
}) => Effect.Effect<Credential | undefined, unknown>
export type Options = {
readonly spec: Document
/** Overrides the spec's `servers` (only the first entry is used). Required when the spec has no absolute server URL. */
readonly baseUrl?: string | undefined
/** Host credential resolution, keyed by security scheme name. */
readonly auth?: { readonly resolve: AuthResolver } | undefined
/** Static headers on every request. Not model-visible; declared header params may override them, auth always wins. */
readonly headers?: Readonly<Record<string, string>> | undefined
/** Curate which operations become tools. Defaults to all. */
readonly operations?: ((operation: Operation) => boolean) | undefined
}
/** An operation that could not be represented as a tool, and why. */
export type Skipped = {
readonly method: string
readonly path: string
readonly reason: string
}
export type Tools = { [name: string]: Definition<HttpClient.HttpClient> | Tools }
export type Result = {
/** Tool subtree; the host places it under a key in its `tools` tree. */
readonly tools: Tools
readonly skipped: ReadonlyArray<Skipped>
}
export type Skip = { readonly reason: string }
export type InputLocation = "path" | "query" | "header" | "body"
export type InputField = {
/** Model-visible field name after cross-location collision handling. */
readonly inputName: string
/** Original parameter or body-property name used on the wire. */
readonly name: string
readonly location: InputLocation
readonly required: boolean
readonly schema: JsonSchema
}
export type Body = { readonly required: boolean; readonly mode: "object" | "value" }
export type OperationInput = {
readonly fields: ReadonlyArray<InputField>
readonly body: Body | undefined
}
/** One OR alternative: scheme name -> required scopes. Empty object = unauthenticated is acceptable. */
export type SecurityRequirement = Readonly<Record<string, ReadonlyArray<string>>>
export type Plan = {
readonly operation: Operation
readonly url: string
readonly fields: ReadonlyArray<InputField>
readonly body: Body | undefined
readonly security: ReadonlyArray<SecurityRequirement>
readonly schemes: Readonly<Record<string, SecurityScheme>>
readonly auth: { readonly resolve: AuthResolver } | undefined
readonly headers: Readonly<Record<string, string>>
}
export type AppliedAuth = {
readonly headers: Readonly<Record<string, string>>
readonly query: Readonly<Record<string, string>>
readonly cookies: Readonly<Record<string, string>>
}
-10
View File
@@ -1,10 +0,0 @@
/**
* Token estimation for budgeting model-facing text. Copied from
* `@opencode-ai/core/util/token` (chars / 4) so this package stays
* dependency-free; keep the two in sync if the heuristic ever changes.
*/
export * as Token from "./token.js"
const CHARS_PER_TOKEN = 4
export const estimate = (input: string) => Math.max(0, Math.round(input.length / CHARS_PER_TOKEN))
+41 -39
View File
@@ -10,27 +10,32 @@ import {
outputTypeScript,
type Definition,
} from "./tool.js"
import { estimate } from "./token.js"
import { SandboxDate, SandboxMap, SandboxPromise, SandboxRegExp, SandboxSet } from "./values.js"
const estimateTokens = (input: string) => Math.max(0, Math.round(input.length / 4))
export type HostTool<R = never> = (...args: Array<unknown>) => Effect.Effect<unknown, unknown, R>
export type HostTools<R = never> = {
[name: string]: HostTool<R> | Definition<R> | HostTools<R>
}
export type Services<Tools> = Tools extends (...args: Array<unknown>) => Effect.Effect<unknown, unknown, infer R>
? R
: Tools extends {
readonly _tag: "CodeModeTool"
readonly run: (input: unknown) => Effect.Effect<unknown, unknown, infer R>
}
export type Services<Tools> = ServicesOf<Tools, []>
type ServicesOf<Tools, Depth extends ReadonlyArray<unknown>> = Depth["length"] extends 8
? never
: Tools extends (...args: Array<unknown>) => Effect.Effect<unknown, unknown, infer R>
? R
: Tools extends object
? string extends keyof Tools
? never
: Services<Tools[keyof Tools]>
: never
: Tools extends {
readonly _tag: "CodeModeTool"
readonly run: (input: unknown) => Effect.Effect<unknown, unknown, infer R>
}
? R
: Tools extends object
? string extends keyof Tools
? ServicesOf<Tools[string], [...Depth, unknown]>
: ServicesOf<Tools[keyof Tools], [...Depth, unknown]>
: never
/** Minimal audit record retained for each admitted tool call. */
export type ToolCall = {
@@ -290,17 +295,16 @@ const definitions = <R>(
return entries
}
const describeDefinition = <R>(path: string, definition: Definition<R>): ToolDescription => ({
path,
description: definition.description,
signature: `${toolExpression(path)}(input: ${inputTypeScript(definition)}): Promise<${outputTypeScript(definition)}>`,
})
const visibleDefinitions = <R>(tools: HostTools<R>) =>
definitions(tools).flatMap(({ path, definition }) => {
const description = describeDefinition(path, definition)
return [{ path, definition, description }]
})
definitions(tools).map(({ path, definition }) => ({
path,
definition,
description: {
path,
description: definition.description,
signature: `${toolExpression(path)}(input: ${inputTypeScript(definition)}): Promise<${outputTypeScript(definition)}>`,
},
}))
export const catalog = <R>(tools: HostTools<R>): ReadonlyArray<ToolDescription> =>
visibleDefinitions(tools).map(({ description }) => description)
@@ -351,16 +355,10 @@ const termForms = (term: string): Array<string> => {
return forms
}
const firstLine = (text: string) => text.split("\n", 1)[0]!.trim()
/** One-line description used on inline catalog lines; the full text stays in search results. */
const brief = (text: string, max = 120) => {
const line = firstLine(text)
return line.length > max ? line.slice(0, max - 1) + "..." : line
}
const catalogLine = (tool: ToolDescription) => {
const description = brief(tool.description)
// Inline catalog lines use only a compact first line; full text stays in search results.
const line = tool.description.split("\n", 1)[0]!.trim()
const description = line.length > 120 ? line.slice(0, 119) + "..." : line
return description === "" ? ` - ${tool.signature}` : ` - ${tool.signature} // ${description}`
}
@@ -430,7 +428,7 @@ export const discoveryPlan = <R>(
picked: new Set<ToolDescription>(),
queue: [...group].sort(
(left, right) =>
estimate(catalogLine(left)) - estimate(catalogLine(right)) || left.path.localeCompare(right.path),
estimateTokens(catalogLine(left)) - estimateTokens(catalogLine(right)) || left.path.localeCompare(right.path),
),
}))
let used = 0
@@ -439,7 +437,7 @@ export const discoveryPlan = <R>(
const stillActive: typeof active = []
for (const selection of active) {
const tool = selection.queue[0]!
const cost = estimate(catalogLine(tool))
const cost = estimateTokens(catalogLine(tool))
if (used + cost > maxInlineCatalogTokens) continue
selection.queue.shift()
selection.picked.add(tool)
@@ -635,9 +633,6 @@ export type ToolRuntime<R = never> = {
readonly keys: (path: ReadonlyArray<string>) => ReadonlyArray<string>
}
const failureMessage = (error: unknown): string =>
error instanceof ToolError || error instanceof ToolRuntimeError ? error.message : "Tool execution failed"
export const make = <R>(
tools: HostTools<R>,
/** Undefined means unlimited tool calls. */
@@ -656,9 +651,16 @@ export const make = <R>(
const startedAt = Date.now()
return effect.pipe(
Effect.tap(() => onEnd({ ...call, durationMs: Date.now() - startedAt, outcome: "success" })),
Effect.tapError((error) =>
onEnd({ ...call, durationMs: Date.now() - startedAt, outcome: "failure", message: failureMessage(error) }),
),
Effect.tapError((error) => {
const message =
error instanceof ToolError || error instanceof ToolRuntimeError ? error.message : "Tool execution failed"
return onEnd({
...call,
durationMs: Date.now() - startedAt,
outcome: "failure",
message,
})
}),
)
}
+8
View File
@@ -13,6 +13,7 @@ export type JsonSchema = {
readonly const?: unknown
readonly anyOf?: ReadonlyArray<JsonSchema>
readonly oneOf?: ReadonlyArray<JsonSchema>
readonly allOf?: ReadonlyArray<JsonSchema>
readonly properties?: Readonly<Record<string, JsonSchema>>
readonly required?: ReadonlyArray<string>
readonly items?: JsonSchema
@@ -168,6 +169,13 @@ const renderSchema = (
}
return alternatives.map((item) => renderSchema(item, ctx, depth + 1, seen)).join(" | ")
}
if (schema.allOf) {
// Parenthesize union members so `A & (B | null)` does not render as `A & B | null`.
return schema.allOf
.map((item) => renderSchema(item, ctx, depth + 1, seen))
.map((rendered) => (rendered.includes(" | ") ? `(${rendered})` : rendered))
.join(" & ")
}
if (Array.isArray(schema.type)) {
return schema.type.map((item) => renderSchema({ type: item }, ctx, depth + 1, seen)).join(" | ")
}
+26962
View File
@@ -0,0 +1,26962 @@
{
"openapi": "3.1.0",
"info": {
"title": "opencode HttpApi",
"version": "0.0.1",
"description": "Experimental HttpApi surface for selected instance routes."
},
"paths": {
"/api/health": {
"get": {
"tags": [
"server.health"
],
"operationId": "v2.health.get",
"parameters": [],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"healthy": {
"type": "boolean",
"enum": [
true
]
}
},
"required": [
"healthy"
],
"additionalProperties": false
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
}
},
"description": "Check whether the API server is ready to accept requests.",
"summary": "Check server health"
}
},
"/api/location": {
"get": {
"tags": [
"server.location"
],
"operationId": "v2.location.get",
"parameters": [
{
"name": "location",
"in": "query",
"schema": {
"anyOf": [
{
"type": "object",
"properties": {
"directory": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"workspace": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"required": false,
"style": "deepObject",
"explode": true
}
],
"security": [],
"responses": {
"200": {
"description": "Location.Info",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Location.Info"
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
}
},
"description": "Resolve the requested location or the server default location.",
"summary": "Get location"
}
},
"/api/agent": {
"get": {
"tags": [
"server.agent"
],
"operationId": "v2.agent.list",
"parameters": [
{
"name": "location",
"in": "query",
"schema": {
"anyOf": [
{
"type": "object",
"properties": {
"directory": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"workspace": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"required": false,
"style": "deepObject",
"explode": true
}
],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"location": {
"$ref": "#/components/schemas/Location.Info"
},
"data": {
"type": "array",
"items": {
"$ref": "#/components/schemas/AgentV2.Info"
}
}
},
"required": [
"location",
"data"
],
"additionalProperties": false
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
}
},
"description": "Retrieve currently registered agents.",
"summary": "List agents"
}
},
"/api/plugin": {
"get": {
"tags": [
"plugins"
],
"operationId": "v2.plugin.list",
"parameters": [
{
"name": "location",
"in": "query",
"schema": {
"anyOf": [
{
"type": "object",
"properties": {
"directory": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"workspace": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"required": false,
"style": "deepObject",
"explode": true
}
],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"location": {
"$ref": "#/components/schemas/Location.Info"
},
"data": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Plugin.Info"
}
}
},
"required": [
"location",
"data"
],
"additionalProperties": false
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
}
},
"description": "Retrieve currently loaded plugins.",
"summary": "List plugins"
}
},
"/api/session": {
"get": {
"tags": [
"sessions"
],
"operationId": "v2.session.list",
"parameters": [
{
"name": "workspace",
"in": "query",
"schema": {
"anyOf": [
{
"type": "string",
"allOf": [
{
"pattern": "^wrk"
}
]
},
{
"type": "null"
}
]
},
"required": false
},
{
"name": "limit",
"in": "query",
"schema": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Maximum number of sessions to return. Defaults to the newest 50 sessions."
},
"required": false
},
{
"name": "order",
"in": "query",
"schema": {
"anyOf": [
{
"type": "string",
"enum": [
"asc",
"desc"
]
},
{
"type": "null"
}
],
"description": "Session order for the first page. Use desc for newest first or asc for oldest first."
},
"required": false
},
{
"name": "search",
"in": "query",
"schema": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"required": false
},
{
"name": "parentID",
"in": "query",
"schema": {
"anyOf": [
{
"anyOf": [
{
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
{
"type": "string",
"enum": [
"null"
]
}
],
"description": "Filter by parent session. Use null to return only root sessions."
},
{
"type": "null"
}
]
},
"required": false
},
{
"name": "directory",
"in": "query",
"schema": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"required": false
},
{
"name": "project",
"in": "query",
"schema": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"required": false
},
{
"name": "subpath",
"in": "query",
"schema": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"required": false
},
{
"name": "cursor",
"in": "query",
"schema": {
"anyOf": [
{
"type": "string",
"description": "Opaque pagination cursor returned as cursor.previous or cursor.next in the previous response."
},
{
"type": "null"
}
]
},
"required": false
}
],
"security": [],
"responses": {
"200": {
"description": "SessionsResponse",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/SessionsResponse"
}
}
}
},
"400": {
"description": "InvalidCursorError | InvalidRequestError",
"content": {
"application/json": {
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/InvalidCursorError"
},
{
"$ref": "#/components/schemas/InvalidRequestError1"
},
{
"$ref": "#/components/schemas/InvalidRequestError"
}
]
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
}
},
"description": "Retrieve sessions in the requested order. Items keep that order across pages; use cursor.next or cursor.previous to move through the ordered list.",
"summary": "List sessions"
},
"post": {
"tags": [
"sessions"
],
"operationId": "v2.session.create",
"parameters": [],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"$ref": "#/components/schemas/SessionV2.Info"
}
},
"required": [
"data"
],
"additionalProperties": false
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
}
},
"description": "Create a session at the requested location.",
"summary": "Create session",
"requestBody": {
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"id": {
"anyOf": [
{
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
{
"type": "null"
}
]
},
"agent": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"model": {
"anyOf": [
{
"$ref": "#/components/schemas/Model.Ref"
},
{
"type": "null"
}
]
},
"location": {
"anyOf": [
{
"$ref": "#/components/schemas/Location.Ref"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
}
},
"required": true
}
}
},
"/api/session/active": {
"get": {
"tags": [
"sessions"
],
"operationId": "v2.session.active",
"parameters": [],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"type": "object",
"patternProperties": {
"^ses": {
"$ref": "#/components/schemas/SessionActive"
}
}
},
"watermarks": {
"$ref": "#/components/schemas/SessionWatermarks"
}
},
"required": [
"data",
"watermarks"
],
"additionalProperties": false
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
}
},
"description": "Retrieve foreground Session drains currently owned by this OpenCode process. Sessions absent from the result are inactive. Watermarks are the durable log positions read alongside the activity snapshot; activity itself is process state, so the pairing is advisory rather than transactional.",
"summary": "List active sessions"
}
},
"/api/session/{sessionID}": {
"get": {
"tags": [
"sessions"
],
"operationId": "v2.session.get",
"parameters": [
{
"name": "sessionID",
"in": "path",
"schema": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"required": true
}
],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"$ref": "#/components/schemas/SessionV2.Info"
}
},
"required": [
"data"
],
"additionalProperties": false
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
},
"404": {
"description": "SessionNotFoundError",
"content": {
"application/json": {
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/SessionNotFoundError"
},
{
"$ref": "#/components/schemas/SessionNotFoundError"
}
]
}
}
}
}
},
"description": "Retrieve a session by ID.",
"summary": "Get session"
}
},
"/api/session/{sessionID}/fork": {
"post": {
"tags": [
"sessions"
],
"operationId": "v2.session.fork",
"parameters": [
{
"name": "sessionID",
"in": "path",
"schema": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"required": true
}
],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"$ref": "#/components/schemas/SessionV2.Info"
}
},
"required": [
"data"
],
"additionalProperties": false
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
},
"404": {
"description": "SessionNotFoundError | MessageNotFoundError",
"content": {
"application/json": {
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/MessageNotFoundError"
},
{
"$ref": "#/components/schemas/SessionNotFoundError"
},
{
"$ref": "#/components/schemas/SessionNotFoundError"
}
]
}
}
}
}
},
"description": "Create a child session by copying projected history from the parent. When messageID is supplied, copy messages before that boundary.",
"summary": "Fork session",
"requestBody": {
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"messageID": {
"anyOf": [
{
"type": "string",
"allOf": [
{
"pattern": "^msg_"
}
]
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
}
},
"required": true
}
}
},
"/api/session/{sessionID}/agent": {
"post": {
"tags": [
"sessions"
],
"operationId": "v2.session.switchAgent",
"parameters": [
{
"name": "sessionID",
"in": "path",
"schema": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"required": true
}
],
"security": [],
"responses": {
"204": {
"description": "<No Content>"
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
},
"404": {
"description": "SessionNotFoundError",
"content": {
"application/json": {
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/SessionNotFoundError"
},
{
"$ref": "#/components/schemas/SessionNotFoundError"
}
]
}
}
}
}
},
"description": "Switch the agent used by subsequent provider turns.",
"summary": "Switch session agent",
"requestBody": {
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"agent": {
"type": "string"
}
},
"required": [
"agent"
],
"additionalProperties": false
}
}
},
"required": true
}
}
},
"/api/session/{sessionID}/model": {
"post": {
"tags": [
"sessions"
],
"operationId": "v2.session.switchModel",
"parameters": [
{
"name": "sessionID",
"in": "path",
"schema": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"required": true
}
],
"security": [],
"responses": {
"204": {
"description": "<No Content>"
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
},
"404": {
"description": "SessionNotFoundError",
"content": {
"application/json": {
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/SessionNotFoundError"
},
{
"$ref": "#/components/schemas/SessionNotFoundError"
}
]
}
}
}
}
},
"description": "Switch the model used by subsequent provider turns.",
"summary": "Switch session model",
"requestBody": {
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"model": {
"$ref": "#/components/schemas/Model.Ref"
}
},
"required": [
"model"
],
"additionalProperties": false
}
}
},
"required": true
}
}
},
"/api/session/{sessionID}/rename": {
"post": {
"tags": [
"sessions"
],
"operationId": "v2.session.rename",
"parameters": [
{
"name": "sessionID",
"in": "path",
"schema": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"required": true
}
],
"security": [],
"responses": {
"204": {
"description": "<No Content>"
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
},
"404": {
"description": "SessionNotFoundError",
"content": {
"application/json": {
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/SessionNotFoundError"
},
{
"$ref": "#/components/schemas/SessionNotFoundError"
}
]
}
}
}
}
},
"description": "Update the session title.",
"summary": "Rename session",
"requestBody": {
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"title": {
"type": "string"
}
},
"required": [
"title"
],
"additionalProperties": false
}
}
},
"required": true
}
}
},
"/api/session/{sessionID}/prompt": {
"post": {
"tags": [
"sessions"
],
"operationId": "v2.session.prompt",
"parameters": [
{
"name": "sessionID",
"in": "path",
"schema": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"required": true
}
],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"$ref": "#/components/schemas/SessionInput.Admitted"
}
},
"required": [
"data"
],
"additionalProperties": false
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
},
"404": {
"description": "SessionNotFoundError",
"content": {
"application/json": {
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/SessionNotFoundError"
},
{
"$ref": "#/components/schemas/SessionNotFoundError"
}
]
}
}
}
},
"409": {
"description": "ConflictError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ConflictError"
}
}
}
}
},
"description": "Durably admit one session input and schedule agent-loop execution unless resume is false.",
"summary": "Send message",
"requestBody": {
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"id": {
"anyOf": [
{
"type": "string",
"allOf": [
{
"pattern": "^msg_"
}
]
},
{
"type": "null"
}
]
},
"prompt": {
"$ref": "#/components/schemas/PromptInput"
},
"delivery": {
"anyOf": [
{
"type": "string",
"enum": [
"steer",
"queue"
]
},
{
"type": "null"
}
]
},
"resume": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
]
}
},
"required": [
"prompt"
],
"additionalProperties": false
}
}
},
"required": true
}
}
},
"/api/session/{sessionID}/command": {
"post": {
"tags": [
"sessions"
],
"operationId": "v2.session.command",
"parameters": [
{
"name": "sessionID",
"in": "path",
"schema": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"required": true
}
],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"$ref": "#/components/schemas/SessionInput.Admitted"
}
},
"required": [
"data"
],
"additionalProperties": false
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
},
"404": {
"description": "SessionNotFoundError | CommandNotFoundError",
"content": {
"application/json": {
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/CommandNotFoundError"
},
{
"$ref": "#/components/schemas/SessionNotFoundError"
},
{
"$ref": "#/components/schemas/SessionNotFoundError"
}
]
}
}
}
},
"409": {
"description": "ConflictError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ConflictError"
}
}
}
},
"500": {
"description": "CommandEvaluationError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CommandEvaluationError"
}
}
}
}
},
"description": "Resolve a slash command into prompt input, admit it durably, and schedule execution unless resume is false.",
"summary": "Run command",
"requestBody": {
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"id": {
"anyOf": [
{
"type": "string",
"allOf": [
{
"pattern": "^msg_"
}
]
},
{
"type": "null"
}
]
},
"command": {
"type": "string"
},
"arguments": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"agent": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"model": {
"anyOf": [
{
"$ref": "#/components/schemas/Model.Ref"
},
{
"type": "null"
}
]
},
"files": {
"type": "array",
"items": {
"$ref": "#/components/schemas/PromptInput.FileAttachment"
}
},
"agents": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Prompt.AgentAttachment"
}
},
"delivery": {
"anyOf": [
{
"type": "string",
"enum": [
"steer",
"queue"
]
},
{
"type": "null"
}
]
},
"resume": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
]
}
},
"required": [
"command"
],
"additionalProperties": false
}
}
},
"required": true
}
}
},
"/api/session/{sessionID}/skill": {
"post": {
"tags": [
"sessions"
],
"operationId": "v2.session.skill",
"parameters": [
{
"name": "sessionID",
"in": "path",
"schema": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"required": true
}
],
"security": [],
"responses": {
"204": {
"description": "<No Content>"
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
},
"404": {
"description": "SessionNotFoundError | SkillNotFoundError",
"content": {
"application/json": {
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/SkillNotFoundError"
},
{
"$ref": "#/components/schemas/SessionNotFoundError"
},
{
"$ref": "#/components/schemas/SessionNotFoundError"
}
]
}
}
}
}
},
"description": "Activate a skill for a session by appending a skill message and resuming execution.",
"summary": "Activate skill",
"requestBody": {
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"id": {
"anyOf": [
{
"type": "string",
"allOf": [
{
"pattern": "^msg_"
}
]
},
{
"type": "null"
}
]
},
"skill": {
"type": "string"
},
"resume": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
]
}
},
"required": [
"skill"
],
"additionalProperties": false
}
}
},
"required": true
}
}
},
"/api/session/{sessionID}/synthetic": {
"post": {
"tags": [
"sessions"
],
"operationId": "v2.session.synthetic",
"parameters": [
{
"name": "sessionID",
"in": "path",
"schema": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"required": true
}
],
"security": [],
"responses": {
"204": {
"description": "<No Content>"
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
},
"404": {
"description": "SessionNotFoundError",
"content": {
"application/json": {
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/SessionNotFoundError"
},
{
"$ref": "#/components/schemas/SessionNotFoundError"
}
]
}
}
}
}
},
"description": "Append a synthetic message to a session and resume execution.",
"summary": "Add synthetic message",
"requestBody": {
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"text": {
"type": "string"
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"type": "object"
}
},
"required": [
"text"
],
"additionalProperties": false
}
}
},
"required": true
}
}
},
"/api/session/{sessionID}/compact": {
"post": {
"tags": [
"sessions"
],
"operationId": "v2.session.compact",
"parameters": [
{
"name": "sessionID",
"in": "path",
"schema": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"required": true
}
],
"security": [],
"responses": {
"204": {
"description": "<No Content>"
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
},
"404": {
"description": "SessionNotFoundError",
"content": {
"application/json": {
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/SessionNotFoundError"
},
{
"$ref": "#/components/schemas/SessionNotFoundError"
}
]
}
}
}
},
"409": {
"description": "SessionBusyError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/SessionBusyError"
}
}
}
},
"500": {
"description": "UnknownError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnknownError"
}
}
}
},
"503": {
"description": "ServiceUnavailableError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ServiceUnavailableError"
}
}
}
}
},
"description": "Compact a session conversation.",
"summary": "Compact session"
}
},
"/api/session/{sessionID}/wait": {
"post": {
"tags": [
"sessions"
],
"operationId": "v2.session.wait",
"parameters": [
{
"name": "sessionID",
"in": "path",
"schema": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"required": true
}
],
"security": [],
"responses": {
"204": {
"description": "<No Content>"
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
},
"404": {
"description": "SessionNotFoundError",
"content": {
"application/json": {
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/SessionNotFoundError"
},
{
"$ref": "#/components/schemas/SessionNotFoundError"
}
]
}
}
}
},
"503": {
"description": "ServiceUnavailableError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ServiceUnavailableError"
}
}
}
}
},
"description": "Wait for a session agent loop to become idle.",
"summary": "Wait for session"
}
},
"/api/session/{sessionID}/revert/stage": {
"post": {
"tags": [
"sessions"
],
"operationId": "v2.session.revert.stage",
"parameters": [
{
"name": "sessionID",
"in": "path",
"schema": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"required": true
}
],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"$ref": "#/components/schemas/Revert.State"
}
},
"required": [
"data"
],
"additionalProperties": false
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
},
"404": {
"description": "MessageNotFoundError | SessionNotFoundError",
"content": {
"application/json": {
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/MessageNotFoundError"
},
{
"$ref": "#/components/schemas/SessionNotFoundError"
},
{
"$ref": "#/components/schemas/SessionNotFoundError"
}
]
}
}
}
},
"409": {
"description": "SessionBusyError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/SessionBusyError"
}
}
}
},
"500": {
"description": "UnknownError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnknownError"
}
}
}
}
},
"description": "Stage or move a reversible session boundary and optionally apply its file changes.",
"summary": "Stage session revert",
"requestBody": {
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"messageID": {
"type": "string",
"allOf": [
{
"pattern": "^msg_"
}
]
},
"files": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
]
}
},
"required": [
"messageID"
],
"additionalProperties": false
}
}
},
"required": true
}
}
},
"/api/session/{sessionID}/revert/clear": {
"post": {
"tags": [
"sessions"
],
"operationId": "v2.session.revert.clear",
"parameters": [
{
"name": "sessionID",
"in": "path",
"schema": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"required": true
}
],
"security": [],
"responses": {
"204": {
"description": "<No Content>"
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
},
"404": {
"description": "SessionNotFoundError",
"content": {
"application/json": {
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/SessionNotFoundError"
},
{
"$ref": "#/components/schemas/SessionNotFoundError"
}
]
}
}
}
},
"409": {
"description": "SessionBusyError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/SessionBusyError"
}
}
}
},
"500": {
"description": "UnknownError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnknownError"
}
}
}
}
},
"summary": "Clear staged revert"
}
},
"/api/session/{sessionID}/revert/commit": {
"post": {
"tags": [
"sessions"
],
"operationId": "v2.session.revert.commit",
"parameters": [
{
"name": "sessionID",
"in": "path",
"schema": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"required": true
}
],
"security": [],
"responses": {
"204": {
"description": "<No Content>"
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
},
"404": {
"description": "SessionNotFoundError",
"content": {
"application/json": {
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/SessionNotFoundError"
},
{
"$ref": "#/components/schemas/SessionNotFoundError"
}
]
}
}
}
},
"409": {
"description": "SessionBusyError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/SessionBusyError"
}
}
}
}
},
"summary": "Commit staged revert"
}
},
"/api/session/{sessionID}/context": {
"get": {
"tags": [
"sessions"
],
"operationId": "v2.session.context",
"parameters": [
{
"name": "sessionID",
"in": "path",
"schema": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"required": true
}
],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Session.Message"
}
}
},
"required": [
"data"
],
"additionalProperties": false
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
},
"404": {
"description": "SessionNotFoundError",
"content": {
"application/json": {
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/SessionNotFoundError"
},
{
"$ref": "#/components/schemas/SessionNotFoundError"
}
]
}
}
}
},
"500": {
"description": "UnknownError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnknownError"
}
}
}
}
},
"description": "Retrieve the active context messages for a session (all messages after the last compaction).",
"summary": "Get session context"
}
},
"/api/session/{sessionID}/context-entry": {
"get": {
"tags": [
"sessions"
],
"operationId": "v2.session.context.entry.list",
"parameters": [
{
"name": "sessionID",
"in": "path",
"schema": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"required": true
}
],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/components/schemas/SessionContextEntry.Info"
}
}
},
"required": [
"data"
],
"additionalProperties": false
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
},
"404": {
"description": "SessionNotFoundError",
"content": {
"application/json": {
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/SessionNotFoundError"
},
{
"$ref": "#/components/schemas/SessionNotFoundError"
}
]
}
}
}
}
},
"description": "List API-managed context entries attached to the session's system context.",
"summary": "List context entries"
}
},
"/api/session/{sessionID}/context-entry/{key}": {
"put": {
"tags": [
"sessions"
],
"operationId": "v2.session.context.entry.put",
"parameters": [
{
"name": "sessionID",
"in": "path",
"schema": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"required": true
},
{
"name": "key",
"in": "path",
"schema": {
"$ref": "#/components/schemas/SessionContextEntry.Key"
},
"required": true
}
],
"security": [],
"responses": {
"204": {
"description": "<No Content>"
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
},
"404": {
"description": "SessionNotFoundError",
"content": {
"application/json": {
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/SessionNotFoundError"
},
{
"$ref": "#/components/schemas/SessionNotFoundError"
}
]
}
}
}
}
},
"description": "Attach or replace one durable context entry. The value is rendered into the session's system context; changes announce as updates at the next turn boundary.",
"summary": "Put context entry",
"requestBody": {
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"value": {}
},
"required": [
"value"
],
"additionalProperties": false
}
}
},
"required": true
}
},
"delete": {
"tags": [
"sessions"
],
"operationId": "v2.session.context.entry.remove",
"parameters": [
{
"name": "sessionID",
"in": "path",
"schema": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"required": true
},
{
"name": "key",
"in": "path",
"schema": {
"$ref": "#/components/schemas/SessionContextEntry.Key"
},
"required": true
}
],
"security": [],
"responses": {
"204": {
"description": "<No Content>"
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
},
"404": {
"description": "SessionNotFoundError",
"content": {
"application/json": {
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/SessionNotFoundError"
},
{
"$ref": "#/components/schemas/SessionNotFoundError"
}
]
}
}
}
}
},
"description": "Remove one context entry; the removal is announced to the model at the next turn boundary.",
"summary": "Remove context entry"
}
},
"/api/session/{sessionID}/log": {
"get": {
"tags": [
"sessions"
],
"operationId": "v2.session.log",
"parameters": [
{
"name": "sessionID",
"in": "path",
"schema": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"required": true
},
{
"name": "after",
"in": "query",
"schema": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"required": false
},
{
"name": "follow",
"in": "query",
"schema": {
"anyOf": [
{
"type": "string",
"enum": [
"true",
"false"
]
},
{
"type": "null"
}
]
},
"required": false
}
],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"text/event-stream": {
"schema": {
"type": "object",
"properties": {
"id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"event": {
"type": "string"
},
"data": {
"$ref": "#/components/schemas/SessionLogItemStream"
}
},
"required": [
"id",
"event",
"data"
],
"additionalProperties": false
},
"x-effect-stream": {
"encoding": "sse",
"causeSchema": {
"type": "array",
"items": {
"anyOf": [
{
"type": "object",
"properties": {
"_tag": {
"type": "string",
"enum": [
"Fail"
]
},
"error": {
"not": {}
}
},
"required": [
"_tag",
"error"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"_tag": {
"type": "string",
"enum": [
"Die"
]
},
"defect": {}
},
"required": [
"_tag",
"defect"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"_tag": {
"type": "string",
"enum": [
"Interrupt"
]
},
"fiberId": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
}
},
"required": [
"_tag",
"fiberId"
],
"additionalProperties": false
}
]
}
},
"errorSchema": {
"not": {}
},
"failureEvent": "effect/httpapi/stream/failure"
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
},
"404": {
"description": "SessionNotFoundError",
"content": {
"application/json": {
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/SessionNotFoundError"
},
{
"$ref": "#/components/schemas/SessionNotFoundError"
}
]
}
}
}
}
},
"description": "Durable, ordered, gap-free read of public session events after an exclusive aggregate sequence. Emits a synced marker once replay reaches the captured watermark, then completes; with follow=true it continues with live events instead. The only event API that promises reliability: attach after a snapshot watermark to compose fetch and stream without a race window.",
"summary": "Read the session log"
}
},
"/api/session/{sessionID}/interrupt": {
"post": {
"tags": [
"sessions"
],
"operationId": "v2.session.interrupt",
"parameters": [
{
"name": "sessionID",
"in": "path",
"schema": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"required": true
}
],
"security": [],
"responses": {
"204": {
"description": "<No Content>"
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
},
"404": {
"description": "SessionNotFoundError",
"content": {
"application/json": {
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/SessionNotFoundError"
},
{
"$ref": "#/components/schemas/SessionNotFoundError"
}
]
}
}
}
}
},
"description": "Interrupt active execution owned by this OpenCode process. Idle interruption is a no-op.",
"summary": "Interrupt session execution"
}
},
"/api/session/{sessionID}/background": {
"post": {
"tags": [
"sessions"
],
"operationId": "v2.session.background",
"parameters": [
{
"name": "sessionID",
"in": "path",
"schema": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"required": true
}
],
"security": [],
"responses": {
"204": {
"description": "<No Content>"
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
},
"404": {
"description": "SessionNotFoundError",
"content": {
"application/json": {
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/SessionNotFoundError"
},
{
"$ref": "#/components/schemas/SessionNotFoundError"
}
]
}
}
}
}
},
"description": "Move active foreground backgroundable tools for this session into background observation. Idle requests are a no-op.",
"summary": "Background blocking session tools"
}
},
"/api/session/{sessionID}/message/{messageID}": {
"get": {
"tags": [
"sessions"
],
"operationId": "v2.session.message",
"parameters": [
{
"name": "sessionID",
"in": "path",
"schema": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"required": true
},
{
"name": "messageID",
"in": "path",
"schema": {
"type": "string",
"allOf": [
{
"pattern": "^msg_"
}
]
},
"required": true
}
],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"$ref": "#/components/schemas/Session.Message"
}
},
"required": [
"data"
],
"additionalProperties": false
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
},
"404": {
"description": "SessionNotFoundError | MessageNotFoundError",
"content": {
"application/json": {
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/MessageNotFoundError"
},
{
"$ref": "#/components/schemas/SessionNotFoundError"
},
{
"$ref": "#/components/schemas/SessionNotFoundError"
}
]
}
}
}
}
},
"description": "Retrieve one projected message owned by the Session.",
"summary": "Get session message"
}
},
"/api/session/{sessionID}/message": {
"get": {
"tags": [
"messages"
],
"operationId": "v2.session.messages",
"parameters": [
{
"name": "sessionID",
"in": "path",
"schema": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"required": true
},
{
"name": "limit",
"in": "query",
"schema": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Maximum number of messages to return. When omitted, the endpoint returns its default page size."
},
"required": false
},
{
"name": "order",
"in": "query",
"schema": {
"anyOf": [
{
"type": "string",
"enum": [
"asc",
"desc"
]
},
{
"type": "null"
}
],
"description": "Message order for the first page. Use desc for newest first or asc for oldest first."
},
"required": false
},
{
"name": "cursor",
"in": "query",
"schema": {
"anyOf": [
{
"type": "string",
"description": "Opaque pagination cursor returned as cursor.previous or cursor.next in the previous response. Do not combine with order."
},
{
"type": "null"
}
]
},
"required": false
}
],
"security": [],
"responses": {
"200": {
"description": "SessionMessagesResponse",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/SessionMessagesResponse"
}
}
}
},
"400": {
"description": "InvalidCursorError | InvalidRequestError",
"content": {
"application/json": {
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/InvalidCursorError"
},
{
"$ref": "#/components/schemas/InvalidRequestError"
}
]
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
},
"404": {
"description": "SessionNotFoundError",
"content": {
"application/json": {
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/SessionNotFoundError"
},
{
"$ref": "#/components/schemas/SessionNotFoundError"
}
]
}
}
}
},
"500": {
"description": "UnknownError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnknownError"
}
}
}
}
},
"description": "Retrieve projected messages for a session. Items keep the requested order across pages; use cursor.next or cursor.previous to move through the ordered timeline.",
"summary": "Get session messages"
}
},
"/api/model": {
"get": {
"tags": [
"models"
],
"operationId": "v2.model.list",
"parameters": [
{
"name": "location",
"in": "query",
"schema": {
"anyOf": [
{
"type": "object",
"properties": {
"directory": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"workspace": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"required": false,
"style": "deepObject",
"explode": true
}
],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"location": {
"$ref": "#/components/schemas/Location.Info"
},
"data": {
"type": "array",
"items": {
"$ref": "#/components/schemas/ModelV2.Info"
}
}
},
"required": [
"location",
"data"
],
"additionalProperties": false
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
},
"503": {
"description": "ServiceUnavailableError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ServiceUnavailableError"
}
}
}
}
},
"description": "Retrieve available models ordered by release date.",
"summary": "List models"
}
},
"/api/model/default": {
"get": {
"tags": [
"models"
],
"operationId": "v2.model.default",
"parameters": [
{
"name": "location",
"in": "query",
"schema": {
"anyOf": [
{
"type": "object",
"properties": {
"directory": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"workspace": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"required": false,
"style": "deepObject",
"explode": true
}
],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"location": {
"$ref": "#/components/schemas/Location.Info"
},
"data": {
"anyOf": [
{
"$ref": "#/components/schemas/ModelV2.Info"
},
{
"type": "null"
}
]
}
},
"required": [
"location",
"data"
],
"additionalProperties": false
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
},
"503": {
"description": "ServiceUnavailableError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ServiceUnavailableError"
}
}
}
}
},
"description": "Retrieve the model used when a session has no explicit model selection.",
"summary": "Get default model"
}
},
"/api/generate": {
"post": {
"tags": [
"generate"
],
"operationId": "v2.generate.text",
"parameters": [
{
"name": "location",
"in": "query",
"schema": {
"anyOf": [
{
"type": "object",
"properties": {
"directory": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"workspace": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"required": false,
"style": "deepObject",
"explode": true
}
],
"security": [],
"responses": {
"200": {
"description": "GenerateTextResponse",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/GenerateTextResponse"
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/InvalidRequestError1"
},
{
"$ref": "#/components/schemas/InvalidRequestError"
}
]
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
},
"503": {
"description": "ServiceUnavailableError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ServiceUnavailableError"
}
}
}
}
},
"description": "Run one stateless model generation at the requested location and return the assistant text. Uses the location's default model when none is specified.",
"summary": "Generate text",
"requestBody": {
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"prompt": {
"type": "string"
},
"model": {
"anyOf": [
{
"$ref": "#/components/schemas/Model.Ref"
},
{
"type": "null"
}
]
}
},
"required": [
"prompt"
],
"additionalProperties": false
}
}
},
"required": true
}
}
},
"/api/provider": {
"get": {
"tags": [
"providers"
],
"operationId": "v2.provider.list",
"parameters": [
{
"name": "location",
"in": "query",
"schema": {
"anyOf": [
{
"type": "object",
"properties": {
"directory": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"workspace": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"required": false,
"style": "deepObject",
"explode": true
}
],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"location": {
"$ref": "#/components/schemas/Location.Info"
},
"data": {
"type": "array",
"items": {
"$ref": "#/components/schemas/ProviderV2.Info"
}
}
},
"required": [
"location",
"data"
],
"additionalProperties": false
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
},
"503": {
"description": "ServiceUnavailableError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ServiceUnavailableError"
}
}
}
}
},
"description": "Retrieve active AI providers so clients can show provider availability and configuration.",
"summary": "List providers"
}
},
"/api/provider/{providerID}": {
"get": {
"tags": [
"providers"
],
"operationId": "v2.provider.get",
"parameters": [
{
"name": "providerID",
"in": "path",
"schema": {
"type": "string"
},
"required": true
},
{
"name": "location",
"in": "query",
"schema": {
"anyOf": [
{
"type": "object",
"properties": {
"directory": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"workspace": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"required": false,
"style": "deepObject",
"explode": true
}
],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"location": {
"$ref": "#/components/schemas/Location.Info"
},
"data": {
"$ref": "#/components/schemas/ProviderV2.Info"
}
},
"required": [
"location",
"data"
],
"additionalProperties": false
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
},
"404": {
"description": "ProviderNotFoundError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProviderNotFoundError"
}
}
}
},
"503": {
"description": "ServiceUnavailableError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ServiceUnavailableError"
}
}
}
}
},
"description": "Retrieve a single AI provider so clients can inspect its availability and endpoint settings.",
"summary": "Get provider"
}
},
"/api/integration": {
"get": {
"tags": [
"integrations"
],
"operationId": "v2.integration.list",
"parameters": [
{
"name": "location",
"in": "query",
"schema": {
"anyOf": [
{
"type": "object",
"properties": {
"directory": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"workspace": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"required": false,
"style": "deepObject",
"explode": true
}
],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"location": {
"$ref": "#/components/schemas/Location.Info"
},
"data": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Integration.Info"
}
}
},
"required": [
"location",
"data"
],
"additionalProperties": false
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
}
},
"description": "Retrieve available integrations and their authentication methods.",
"summary": "List integrations"
}
},
"/api/integration/{integrationID}": {
"get": {
"tags": [
"integrations"
],
"operationId": "v2.integration.get",
"parameters": [
{
"name": "integrationID",
"in": "path",
"schema": {
"type": "string"
},
"required": true
},
{
"name": "location",
"in": "query",
"schema": {
"anyOf": [
{
"type": "object",
"properties": {
"directory": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"workspace": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"required": false,
"style": "deepObject",
"explode": true
}
],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"location": {
"$ref": "#/components/schemas/Location.Info"
},
"data": {
"anyOf": [
{
"$ref": "#/components/schemas/Integration.Info"
},
{
"type": "null"
}
]
}
},
"required": [
"location",
"data"
],
"additionalProperties": false
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
}
},
"description": "Retrieve one integration and its authentication methods.",
"summary": "Get integration"
}
},
"/api/integration/{integrationID}/connect/key": {
"post": {
"tags": [
"integrations"
],
"operationId": "v2.integration.connect.key",
"parameters": [
{
"name": "integrationID",
"in": "path",
"schema": {
"type": "string"
},
"required": true
},
{
"name": "location",
"in": "query",
"schema": {
"anyOf": [
{
"type": "object",
"properties": {
"directory": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"workspace": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"required": false,
"style": "deepObject",
"explode": true
}
],
"security": [],
"responses": {
"204": {
"description": "<No Content>"
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/InvalidRequestError1"
},
{
"$ref": "#/components/schemas/InvalidRequestError"
}
]
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
}
},
"description": "Run a key authentication method and store the resulting credential.",
"summary": "Connect with key",
"requestBody": {
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"label": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"key"
],
"additionalProperties": false
}
}
},
"required": true
}
}
},
"/api/integration/{integrationID}/connect/oauth": {
"post": {
"tags": [
"integrations"
],
"operationId": "v2.integration.connect.oauth",
"parameters": [
{
"name": "integrationID",
"in": "path",
"schema": {
"type": "string"
},
"required": true
},
{
"name": "location",
"in": "query",
"schema": {
"anyOf": [
{
"type": "object",
"properties": {
"directory": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"workspace": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"required": false,
"style": "deepObject",
"explode": true
}
],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"location": {
"$ref": "#/components/schemas/Location.Info"
},
"data": {
"$ref": "#/components/schemas/Integration.Attempt"
}
},
"required": [
"location",
"data"
],
"additionalProperties": false
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/InvalidRequestError1"
},
{
"$ref": "#/components/schemas/InvalidRequestError"
}
]
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
}
},
"description": "Start an OAuth attempt and return the authorization details.",
"summary": "Begin OAuth connection",
"requestBody": {
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"methodID": {
"type": "string"
},
"inputs": {
"type": "object",
"additionalProperties": {
"type": "string"
}
},
"label": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"methodID",
"inputs"
],
"additionalProperties": false
}
}
},
"required": true
}
}
},
"/api/integration/attempt/{attemptID}": {
"get": {
"tags": [
"integrations"
],
"operationId": "v2.integration.attempt.status",
"parameters": [
{
"name": "attemptID",
"in": "path",
"schema": {
"type": "string"
},
"required": true
},
{
"name": "location",
"in": "query",
"schema": {
"anyOf": [
{
"type": "object",
"properties": {
"directory": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"workspace": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"required": false,
"style": "deepObject",
"explode": true
}
],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"location": {
"$ref": "#/components/schemas/Location.Info"
},
"data": {
"$ref": "#/components/schemas/Integration.AttemptStatus"
}
},
"required": [
"location",
"data"
],
"additionalProperties": false
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
}
},
"description": "Poll the current status of an OAuth attempt.",
"summary": "Get OAuth attempt status"
},
"delete": {
"tags": [
"integrations"
],
"operationId": "v2.integration.attempt.cancel",
"parameters": [
{
"name": "attemptID",
"in": "path",
"schema": {
"type": "string"
},
"required": true
},
{
"name": "location",
"in": "query",
"schema": {
"anyOf": [
{
"type": "object",
"properties": {
"directory": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"workspace": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"required": false,
"style": "deepObject",
"explode": true
}
],
"security": [],
"responses": {
"204": {
"description": "<No Content>"
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
}
},
"description": "Cancel an OAuth attempt and release its resources.",
"summary": "Cancel OAuth connection"
}
},
"/api/integration/attempt/{attemptID}/complete": {
"post": {
"tags": [
"integrations"
],
"operationId": "v2.integration.attempt.complete",
"parameters": [
{
"name": "attemptID",
"in": "path",
"schema": {
"type": "string"
},
"required": true
},
{
"name": "location",
"in": "query",
"schema": {
"anyOf": [
{
"type": "object",
"properties": {
"directory": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"workspace": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"required": false,
"style": "deepObject",
"explode": true
}
],
"security": [],
"responses": {
"204": {
"description": "<No Content>"
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/InvalidRequestError1"
},
{
"$ref": "#/components/schemas/InvalidRequestError"
}
]
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
}
},
"description": "Complete a code-based OAuth attempt and store the resulting credential.",
"summary": "Complete OAuth connection",
"requestBody": {
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"code": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
}
},
"required": true
}
}
},
"/api/mcp": {
"get": {
"tags": [
"mcp"
],
"operationId": "v2.mcp.list",
"parameters": [
{
"name": "location",
"in": "query",
"schema": {
"anyOf": [
{
"type": "object",
"properties": {
"directory": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"workspace": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"required": false,
"style": "deepObject",
"explode": true
}
],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"location": {
"$ref": "#/components/schemas/Location.Info"
},
"data": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Mcp.Server"
}
}
},
"required": [
"location",
"data"
],
"additionalProperties": false
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
}
},
"description": "Retrieve configured MCP servers and their connection status.",
"summary": "List MCP servers"
}
},
"/api/credential/{credentialID}": {
"patch": {
"tags": [
"server.credential"
],
"operationId": "v2.credential.update",
"parameters": [
{
"name": "credentialID",
"in": "path",
"schema": {
"type": "string"
},
"required": true
},
{
"name": "location",
"in": "query",
"schema": {
"anyOf": [
{
"type": "object",
"properties": {
"directory": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"workspace": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"required": false,
"style": "deepObject",
"explode": true
}
],
"security": [],
"responses": {
"204": {
"description": "<No Content>"
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
}
},
"description": "Update a stored credential label.",
"summary": "Update credential",
"requestBody": {
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"label": {
"type": "string"
}
},
"required": [
"label"
],
"additionalProperties": false
}
}
},
"required": true
}
},
"delete": {
"tags": [
"server.credential"
],
"operationId": "v2.credential.remove",
"parameters": [
{
"name": "credentialID",
"in": "path",
"schema": {
"type": "string"
},
"required": true
},
{
"name": "location",
"in": "query",
"schema": {
"anyOf": [
{
"type": "object",
"properties": {
"directory": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"workspace": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"required": false,
"style": "deepObject",
"explode": true
}
],
"security": [],
"responses": {
"204": {
"description": "<No Content>"
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
}
},
"description": "Remove a stored integration credential.",
"summary": "Remove credential"
}
},
"/api/project/current": {
"get": {
"tags": [
"projects"
],
"operationId": "v2.project.current",
"parameters": [
{
"name": "location",
"in": "query",
"schema": {
"anyOf": [
{
"type": "object",
"properties": {
"directory": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"workspace": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"required": false,
"style": "deepObject",
"explode": true
}
],
"security": [],
"responses": {
"200": {
"description": "Project.Current",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Project.Current"
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
}
},
"description": "Resolve the project for the requested location.",
"summary": "Get current project"
}
},
"/api/project/{projectID}/directories": {
"get": {
"tags": [
"projects"
],
"operationId": "v2.project.directories",
"parameters": [
{
"name": "projectID",
"in": "path",
"schema": {
"type": "string"
},
"required": true
},
{
"name": "location",
"in": "query",
"schema": {
"anyOf": [
{
"type": "object",
"properties": {
"directory": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"workspace": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"required": false,
"style": "deepObject",
"explode": true
}
],
"security": [],
"responses": {
"200": {
"description": "Project.Directories",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Project.Directories"
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
}
},
"description": "List known local absolute directories for a project.",
"summary": "List project directories"
}
},
"/api/form/request": {
"get": {
"tags": [
"forms"
],
"operationId": "v2.form.request.list",
"parameters": [
{
"name": "location",
"in": "query",
"schema": {
"anyOf": [
{
"type": "object",
"properties": {
"directory": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"workspace": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"required": false,
"style": "deepObject",
"explode": true
}
],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"location": {
"$ref": "#/components/schemas/Location.Info"
},
"data": {
"type": "array",
"items": {
"anyOf": [
{
"$ref": "#/components/schemas/Form.FormInfo"
},
{
"$ref": "#/components/schemas/Form.UrlInfo"
}
]
}
}
},
"required": [
"location",
"data"
],
"additionalProperties": false
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
}
},
"description": "Retrieve pending forms for a location.",
"summary": "List pending form requests"
}
},
"/api/session/{sessionID}/form": {
"get": {
"tags": [
"forms"
],
"operationId": "v2.session.form.list",
"parameters": [
{
"name": "sessionID",
"in": "path",
"schema": {
"type": "string"
},
"required": true
}
],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"type": "array",
"items": {
"anyOf": [
{
"$ref": "#/components/schemas/Form.FormInfo"
},
{
"$ref": "#/components/schemas/Form.UrlInfo"
}
]
}
}
},
"required": [
"data"
],
"additionalProperties": false
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
},
"404": {
"description": "SessionNotFoundError",
"content": {
"application/json": {
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/SessionNotFoundError"
},
{
"$ref": "#/components/schemas/SessionNotFoundError"
}
]
}
}
}
}
},
"description": "Retrieve pending forms for a session.",
"summary": "List session forms"
},
"post": {
"tags": [
"forms"
],
"operationId": "v2.session.form.create",
"parameters": [
{
"name": "sessionID",
"in": "path",
"schema": {
"type": "string"
},
"required": true
}
],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"anyOf": [
{
"$ref": "#/components/schemas/Form.FormInfo"
},
{
"$ref": "#/components/schemas/Form.UrlInfo"
}
]
}
},
"required": [
"data"
],
"additionalProperties": false
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/InvalidRequestError1"
},
{
"$ref": "#/components/schemas/InvalidRequestError"
}
]
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
},
"404": {
"description": "SessionNotFoundError",
"content": {
"application/json": {
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/SessionNotFoundError"
},
{
"$ref": "#/components/schemas/SessionNotFoundError"
}
]
}
}
}
},
"409": {
"description": "ConflictError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ConflictError"
}
}
}
}
},
"description": "Create a form for a session.",
"summary": "Create session form",
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Form.CreatePayload"
}
}
},
"required": true
}
}
},
"/api/session/{sessionID}/form/{formID}": {
"get": {
"tags": [
"forms"
],
"operationId": "v2.session.form.get",
"parameters": [
{
"name": "sessionID",
"in": "path",
"schema": {
"type": "string"
},
"required": true
},
{
"name": "formID",
"in": "path",
"schema": {
"type": "string",
"allOf": [
{
"pattern": "^frm_"
}
]
},
"required": true
}
],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"anyOf": [
{
"$ref": "#/components/schemas/Form.FormInfo"
},
{
"$ref": "#/components/schemas/Form.UrlInfo"
}
]
}
},
"required": [
"data"
],
"additionalProperties": false
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
},
"404": {
"description": "SessionNotFoundError | FormNotFoundError",
"content": {
"application/json": {
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/FormNotFoundError"
},
{
"$ref": "#/components/schemas/SessionNotFoundError"
},
{
"$ref": "#/components/schemas/SessionNotFoundError"
}
]
}
}
}
}
},
"description": "Retrieve a form for a session.",
"summary": "Get session form"
}
},
"/api/session/{sessionID}/form/{formID}/state": {
"get": {
"tags": [
"forms"
],
"operationId": "v2.session.form.state",
"parameters": [
{
"name": "sessionID",
"in": "path",
"schema": {
"type": "string"
},
"required": true
},
{
"name": "formID",
"in": "path",
"schema": {
"type": "string",
"allOf": [
{
"pattern": "^frm_"
}
]
},
"required": true
}
],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"$ref": "#/components/schemas/Form.State"
}
},
"required": [
"data"
],
"additionalProperties": false
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
},
"404": {
"description": "SessionNotFoundError | FormNotFoundError",
"content": {
"application/json": {
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/FormNotFoundError"
},
{
"$ref": "#/components/schemas/SessionNotFoundError"
},
{
"$ref": "#/components/schemas/SessionNotFoundError"
}
]
}
}
}
}
},
"description": "Retrieve the current state for a form.",
"summary": "Get form state"
}
},
"/api/session/{sessionID}/form/{formID}/reply": {
"post": {
"tags": [
"forms"
],
"operationId": "v2.session.form.reply",
"parameters": [
{
"name": "sessionID",
"in": "path",
"schema": {
"type": "string"
},
"required": true
},
{
"name": "formID",
"in": "path",
"schema": {
"type": "string",
"allOf": [
{
"pattern": "^frm_"
}
]
},
"required": true
}
],
"security": [],
"responses": {
"204": {
"description": "<No Content>"
},
"400": {
"description": "FormInvalidAnswerError | InvalidRequestError",
"content": {
"application/json": {
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/FormInvalidAnswerError"
},
{
"$ref": "#/components/schemas/InvalidRequestError"
}
]
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
},
"404": {
"description": "SessionNotFoundError | FormNotFoundError",
"content": {
"application/json": {
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/FormNotFoundError"
},
{
"$ref": "#/components/schemas/SessionNotFoundError"
},
{
"$ref": "#/components/schemas/SessionNotFoundError"
}
]
}
}
}
},
"409": {
"description": "FormAlreadySettledError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/FormAlreadySettledError"
}
}
}
}
},
"description": "Submit an answer to a pending form.",
"summary": "Reply to form",
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Form.Reply"
}
}
},
"required": true
}
}
},
"/api/session/{sessionID}/form/{formID}/cancel": {
"post": {
"tags": [
"forms"
],
"operationId": "v2.session.form.cancel",
"parameters": [
{
"name": "sessionID",
"in": "path",
"schema": {
"type": "string"
},
"required": true
},
{
"name": "formID",
"in": "path",
"schema": {
"type": "string",
"allOf": [
{
"pattern": "^frm_"
}
]
},
"required": true
}
],
"security": [],
"responses": {
"204": {
"description": "<No Content>"
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
},
"404": {
"description": "SessionNotFoundError | FormNotFoundError",
"content": {
"application/json": {
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/FormNotFoundError"
},
{
"$ref": "#/components/schemas/SessionNotFoundError"
},
{
"$ref": "#/components/schemas/SessionNotFoundError"
}
]
}
}
}
},
"409": {
"description": "FormAlreadySettledError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/FormAlreadySettledError"
}
}
}
}
},
"description": "Cancel a pending form.",
"summary": "Cancel form"
}
},
"/api/permission/request": {
"get": {
"tags": [
"permissions"
],
"operationId": "v2.permission.request.list",
"parameters": [
{
"name": "location",
"in": "query",
"schema": {
"anyOf": [
{
"type": "object",
"properties": {
"directory": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"workspace": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"required": false,
"style": "deepObject",
"explode": true
}
],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"location": {
"$ref": "#/components/schemas/Location.Info"
},
"data": {
"type": "array",
"items": {
"$ref": "#/components/schemas/PermissionV2.Request"
}
}
},
"required": [
"location",
"data"
],
"additionalProperties": false
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
}
},
"description": "Retrieve pending permission requests for a location.",
"summary": "List pending permission requests"
}
},
"/api/permission/saved": {
"get": {
"tags": [
"permissions"
],
"operationId": "v2.permission.saved.list",
"parameters": [
{
"name": "projectID",
"in": "query",
"schema": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"required": false
}
],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/components/schemas/PermissionSaved.Info"
}
}
},
"required": [
"data"
],
"additionalProperties": false
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
}
},
"description": "Retrieve saved permissions, optionally filtered by project.",
"summary": "List saved permissions"
}
},
"/api/permission/saved/{id}": {
"delete": {
"tags": [
"permissions"
],
"operationId": "v2.permission.saved.remove",
"parameters": [
{
"name": "id",
"in": "path",
"schema": {
"type": "string"
},
"required": true
}
],
"security": [],
"responses": {
"204": {
"description": "<No Content>"
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
}
},
"description": "Remove a saved permission by ID.",
"summary": "Remove saved permission"
}
},
"/api/session/{sessionID}/permission": {
"post": {
"tags": [
"permissions"
],
"operationId": "v2.session.permission.create",
"parameters": [
{
"name": "sessionID",
"in": "path",
"schema": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"required": true
}
],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^per"
}
]
},
"effect": {
"$ref": "#/components/schemas/PermissionV2.Effect"
}
},
"required": [
"id",
"effect"
],
"additionalProperties": false
}
},
"required": [
"data"
],
"additionalProperties": false
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
},
"404": {
"description": "SessionNotFoundError",
"content": {
"application/json": {
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/SessionNotFoundError"
},
{
"$ref": "#/components/schemas/SessionNotFoundError"
}
]
}
}
}
}
},
"description": "Evaluate and, when approval is required, create a permission request for a session.",
"summary": "Create permission request",
"requestBody": {
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"id": {
"anyOf": [
{
"type": "string",
"allOf": [
{
"pattern": "^per"
}
]
},
{
"type": "null"
}
]
},
"action": {
"type": "string"
},
"resources": {
"type": "array",
"items": {
"type": "string"
}
},
"save": {
"type": "array",
"items": {
"type": "string"
}
},
"metadata": {
"type": "object"
},
"source": {
"$ref": "#/components/schemas/PermissionV2.Source"
},
"agent": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"action",
"resources"
],
"additionalProperties": false
}
}
},
"required": true
}
},
"get": {
"tags": [
"permissions"
],
"operationId": "v2.session.permission.list",
"parameters": [
{
"name": "sessionID",
"in": "path",
"schema": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"required": true
}
],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/components/schemas/PermissionV2.Request"
}
}
},
"required": [
"data"
],
"additionalProperties": false
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
},
"404": {
"description": "SessionNotFoundError",
"content": {
"application/json": {
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/SessionNotFoundError"
},
{
"$ref": "#/components/schemas/SessionNotFoundError"
}
]
}
}
}
}
},
"description": "Retrieve pending permission requests owned by a session.",
"summary": "List session permission requests"
}
},
"/api/session/{sessionID}/permission/{requestID}": {
"get": {
"tags": [
"permissions"
],
"operationId": "v2.session.permission.get",
"parameters": [
{
"name": "sessionID",
"in": "path",
"schema": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"required": true
},
{
"name": "requestID",
"in": "path",
"schema": {
"type": "string",
"allOf": [
{
"pattern": "^per"
}
]
},
"required": true
}
],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"$ref": "#/components/schemas/PermissionV2.Request"
}
},
"required": [
"data"
],
"additionalProperties": false
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
},
"404": {
"description": "SessionNotFoundError | PermissionNotFoundError",
"content": {
"application/json": {
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/PermissionNotFoundError"
},
{
"$ref": "#/components/schemas/SessionNotFoundError"
},
{
"$ref": "#/components/schemas/SessionNotFoundError"
}
]
}
}
}
}
},
"description": "Retrieve a pending permission request owned by a session.",
"summary": "Get permission request"
}
},
"/api/session/{sessionID}/permission/{requestID}/reply": {
"post": {
"tags": [
"permissions"
],
"operationId": "v2.session.permission.reply",
"parameters": [
{
"name": "sessionID",
"in": "path",
"schema": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"required": true
},
{
"name": "requestID",
"in": "path",
"schema": {
"type": "string",
"allOf": [
{
"pattern": "^per"
}
]
},
"required": true
}
],
"security": [],
"responses": {
"204": {
"description": "<No Content>"
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
},
"404": {
"description": "SessionNotFoundError | PermissionNotFoundError",
"content": {
"application/json": {
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/PermissionNotFoundError"
},
{
"$ref": "#/components/schemas/SessionNotFoundError"
},
{
"$ref": "#/components/schemas/SessionNotFoundError"
}
]
}
}
}
}
},
"description": "Respond to a pending permission request owned by a session.",
"summary": "Reply to pending permission request",
"requestBody": {
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"reply": {
"$ref": "#/components/schemas/PermissionV2.Reply"
},
"message": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"reply"
],
"additionalProperties": false
}
}
},
"required": true
}
}
},
"/api/fs/read/*": {
"get": {
"tags": [
"filesystem"
],
"operationId": "v2.fs.read",
"parameters": [
{
"name": "location",
"in": "query",
"schema": {
"anyOf": [
{
"type": "object",
"properties": {
"directory": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"workspace": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"required": false,
"style": "deepObject",
"explode": true
}
],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"application/octet-stream": {
"schema": {
"type": "string",
"format": "binary"
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
}
},
"description": "Serve one file relative to the requested location.",
"summary": "Read file"
}
},
"/api/fs/list": {
"get": {
"tags": [
"filesystem"
],
"operationId": "v2.fs.list",
"parameters": [
{
"name": "location",
"in": "query",
"schema": {
"anyOf": [
{
"type": "object",
"properties": {
"directory": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"workspace": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"required": false,
"style": "deepObject",
"explode": true
},
{
"name": "path",
"in": "query",
"schema": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"required": false
}
],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"location": {
"$ref": "#/components/schemas/Location.Info"
},
"data": {
"type": "array",
"items": {
"$ref": "#/components/schemas/FileSystem.Entry"
}
}
},
"required": [
"location",
"data"
],
"additionalProperties": false
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
}
},
"description": "List direct children of one directory relative to the requested location.",
"summary": "List directory"
}
},
"/api/fs/find": {
"get": {
"tags": [
"filesystem"
],
"operationId": "v2.fs.find",
"parameters": [
{
"name": "location",
"in": "query",
"schema": {
"anyOf": [
{
"type": "object",
"properties": {
"directory": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"workspace": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"required": false,
"style": "deepObject",
"explode": true
},
{
"name": "query",
"in": "query",
"schema": {
"type": "string"
},
"required": true
},
{
"name": "type",
"in": "query",
"schema": {
"type": "string",
"enum": [
"file",
"directory"
]
},
"required": false
},
{
"name": "limit",
"in": "query",
"schema": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"required": false
}
],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"location": {
"$ref": "#/components/schemas/Location.Info"
},
"data": {
"type": "array",
"items": {
"$ref": "#/components/schemas/FileSystem.Entry"
}
}
},
"required": [
"location",
"data"
],
"additionalProperties": false
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
}
},
"description": "Find recursively ranked filesystem entries relative to the requested location.",
"summary": "Find files"
}
},
"/api/command": {
"get": {
"tags": [
"commands"
],
"operationId": "v2.command.list",
"parameters": [
{
"name": "location",
"in": "query",
"schema": {
"anyOf": [
{
"type": "object",
"properties": {
"directory": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"workspace": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"required": false,
"style": "deepObject",
"explode": true
}
],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"location": {
"$ref": "#/components/schemas/Location.Info"
},
"data": {
"type": "array",
"items": {
"$ref": "#/components/schemas/CommandV2.Info"
}
}
},
"required": [
"location",
"data"
],
"additionalProperties": false
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
}
},
"description": "Retrieve currently registered commands.",
"summary": "List commands"
}
},
"/api/skill": {
"get": {
"tags": [
"skills"
],
"operationId": "v2.skill.list",
"parameters": [
{
"name": "location",
"in": "query",
"schema": {
"anyOf": [
{
"type": "object",
"properties": {
"directory": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"workspace": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"required": false,
"style": "deepObject",
"explode": true
}
],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"location": {
"$ref": "#/components/schemas/Location.Info"
},
"data": {
"type": "array",
"items": {
"$ref": "#/components/schemas/SkillV2.Info"
}
}
},
"required": [
"location",
"data"
],
"additionalProperties": false
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
}
},
"description": "Retrieve currently registered skills.",
"summary": "List skills"
}
},
"/api/event": {
"get": {
"tags": [
"events"
],
"operationId": "v2.event.subscribe",
"parameters": [],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"text/event-stream": {
"schema": {
"type": "object",
"properties": {
"id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"event": {
"type": "string"
},
"data": {
"$ref": "#/components/schemas/V2EventStream"
}
},
"required": [
"id",
"event",
"data"
],
"additionalProperties": false
},
"x-effect-stream": {
"encoding": "sse",
"causeSchema": {
"type": "array",
"items": {
"anyOf": [
{
"type": "object",
"properties": {
"_tag": {
"type": "string",
"enum": [
"Fail"
]
},
"error": {
"not": {}
}
},
"required": [
"_tag",
"error"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"_tag": {
"type": "string",
"enum": [
"Die"
]
},
"defect": {}
},
"required": [
"_tag",
"defect"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"_tag": {
"type": "string",
"enum": [
"Interrupt"
]
},
"fiberId": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
}
},
"required": [
"_tag",
"fiberId"
],
"additionalProperties": false
}
]
}
},
"errorSchema": {
"not": {}
},
"failureEvent": "effect/httpapi/stream/failure"
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
}
},
"description": "Subscribe to native event payloads for the server. Volatile by contract: a slow consumer overflows and fails the stream, and events during disconnection are missed. Consumers that need reliability should combine the changes feed with durable session log reads.",
"summary": "Subscribe to events"
}
},
"/api/event/changes": {
"get": {
"tags": [
"events"
],
"operationId": "v2.event.changes",
"parameters": [],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"text/event-stream": {
"schema": {
"type": "object",
"properties": {
"id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"event": {
"type": "string"
},
"data": {
"$ref": "#/components/schemas/EventLog.ChangeStream"
}
},
"required": [
"id",
"event",
"data"
],
"additionalProperties": false
},
"x-effect-stream": {
"encoding": "sse",
"causeSchema": {
"type": "array",
"items": {
"anyOf": [
{
"type": "object",
"properties": {
"_tag": {
"type": "string",
"enum": [
"Fail"
]
},
"error": {
"not": {}
}
},
"required": [
"_tag",
"error"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"_tag": {
"type": "string",
"enum": [
"Die"
]
},
"defect": {}
},
"required": [
"_tag",
"defect"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"_tag": {
"type": "string",
"enum": [
"Interrupt"
]
},
"fiberId": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
}
},
"required": [
"_tag",
"fiberId"
],
"additionalProperties": false
}
]
}
},
"errorSchema": {
"not": {}
},
"failureEvent": "effect/httpapi/stream/failure"
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
}
},
"description": "Payload-free hint channel: after an event commits, a subscriber eventually receives a hint for that aggregate with seq at or beyond the event, or a sweep-required marker. Hints coalesce to the latest seq per aggregate under backpressure and the stream never fails from overflow. No consumer may derive correctness from receiving a hint; correctness always comes from durable log reads plus the consumer's own checkpoint. A sweep-required marker is emitted first on every (re)subscribe and whenever hint retention is exceeded: treat every aggregate as potentially dirty and recover via bounded sweep plus log reads.",
"summary": "Subscribe to change hints"
}
},
"/api/pty": {
"get": {
"tags": [
"pty"
],
"operationId": "v2.pty.list",
"parameters": [
{
"name": "location",
"in": "query",
"schema": {
"anyOf": [
{
"type": "object",
"properties": {
"directory": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"workspace": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"required": false,
"style": "deepObject",
"explode": true
}
],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"location": {
"$ref": "#/components/schemas/Location.Info"
},
"data": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Pty"
}
}
},
"required": [
"location",
"data"
],
"additionalProperties": false
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
}
},
"description": "List PTY sessions for a location, including exited sessions retained until removal.",
"summary": "List PTY sessions"
},
"post": {
"tags": [
"pty"
],
"operationId": "v2.pty.create",
"parameters": [
{
"name": "location",
"in": "query",
"schema": {
"anyOf": [
{
"type": "object",
"properties": {
"directory": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"workspace": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"required": false,
"style": "deepObject",
"explode": true
}
],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"location": {
"$ref": "#/components/schemas/Location.Info"
},
"data": {
"$ref": "#/components/schemas/Pty"
}
},
"required": [
"location",
"data"
],
"additionalProperties": false
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
}
},
"description": "Create a pseudo-terminal session for a location.",
"summary": "Create PTY session",
"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",
"additionalProperties": {
"type": "string"
}
}
},
"additionalProperties": false
}
}
},
"required": true
}
}
},
"/api/pty/{ptyID}": {
"get": {
"tags": [
"pty"
],
"operationId": "v2.pty.get",
"parameters": [
{
"name": "ptyID",
"in": "path",
"schema": {
"type": "string",
"allOf": [
{
"pattern": "^pty"
}
]
},
"required": true
},
{
"name": "location",
"in": "query",
"schema": {
"anyOf": [
{
"type": "object",
"properties": {
"directory": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"workspace": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"required": false,
"style": "deepObject",
"explode": true
}
],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"location": {
"$ref": "#/components/schemas/Location.Info"
},
"data": {
"$ref": "#/components/schemas/Pty"
}
},
"required": [
"location",
"data"
],
"additionalProperties": false
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
},
"404": {
"description": "PtyNotFoundError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/PtyNotFoundError"
}
}
}
}
},
"description": "Get one PTY session, including its exit code once exited.",
"summary": "Get PTY session"
},
"put": {
"tags": [
"pty"
],
"operationId": "v2.pty.update",
"parameters": [
{
"name": "ptyID",
"in": "path",
"schema": {
"type": "string",
"allOf": [
{
"pattern": "^pty"
}
]
},
"required": true
},
{
"name": "location",
"in": "query",
"schema": {
"anyOf": [
{
"type": "object",
"properties": {
"directory": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"workspace": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"required": false,
"style": "deepObject",
"explode": true
}
],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"location": {
"$ref": "#/components/schemas/Location.Info"
},
"data": {
"$ref": "#/components/schemas/Pty"
}
},
"required": [
"location",
"data"
],
"additionalProperties": false
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
},
"404": {
"description": "PtyNotFoundError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/PtyNotFoundError"
}
}
}
}
},
"description": "Update the title or viewport size of one PTY session.",
"summary": "Update PTY session",
"requestBody": {
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"title": {
"type": "string"
},
"size": {
"type": "object",
"properties": {
"rows": {
"type": "integer",
"allOf": [
{
"exclusiveMinimum": 0
}
]
},
"cols": {
"type": "integer",
"allOf": [
{
"exclusiveMinimum": 0
}
]
}
},
"required": [
"rows",
"cols"
],
"additionalProperties": false
}
},
"additionalProperties": false
}
}
},
"required": true
}
},
"delete": {
"tags": [
"pty"
],
"operationId": "v2.pty.remove",
"parameters": [
{
"name": "ptyID",
"in": "path",
"schema": {
"type": "string",
"allOf": [
{
"pattern": "^pty"
}
]
},
"required": true
},
{
"name": "location",
"in": "query",
"schema": {
"anyOf": [
{
"type": "object",
"properties": {
"directory": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"workspace": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"required": false,
"style": "deepObject",
"explode": true
}
],
"security": [],
"responses": {
"204": {
"description": "<No Content>"
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
},
"404": {
"description": "PtyNotFoundError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/PtyNotFoundError"
}
}
}
}
},
"description": "Terminate and remove one PTY session.",
"summary": "Remove PTY session"
}
},
"/api/pty/{ptyID}/connect-token": {
"post": {
"tags": [
"pty"
],
"operationId": "v2.pty.connectToken",
"parameters": [
{
"name": "ptyID",
"in": "path",
"schema": {
"type": "string",
"allOf": [
{
"pattern": "^pty"
}
]
},
"required": true
},
{
"name": "location",
"in": "query",
"schema": {
"anyOf": [
{
"type": "object",
"properties": {
"directory": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"workspace": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"required": false,
"style": "deepObject",
"explode": true
}
],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"location": {
"$ref": "#/components/schemas/Location.Info"
},
"data": {
"$ref": "#/components/schemas/PtyTicket.ConnectToken"
}
},
"required": [
"location",
"data"
],
"additionalProperties": false
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
},
"403": {
"description": "ForbiddenError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ForbiddenError"
}
}
}
},
"404": {
"description": "PtyNotFoundError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/PtyNotFoundError"
}
}
}
}
},
"description": "Create a short-lived single-use ticket for opening a PTY WebSocket connection.",
"summary": "Create PTY WebSocket token"
}
},
"/api/pty/{ptyID}/connect": {
"get": {
"tags": [
"pty"
],
"operationId": "v2.pty.connect",
"x-websocket": true,
"parameters": [
{
"name": "ptyID",
"in": "path",
"schema": {
"type": "string",
"allOf": [
{
"pattern": "^pty"
}
]
},
"required": true
},
{
"in": "query",
"name": "location[directory]",
"schema": {
"type": "string"
}
},
{
"in": "query",
"name": "location[workspace]",
"schema": {
"type": "string"
}
},
{
"in": "query",
"name": "cursor",
"schema": {
"type": "string"
}
},
{
"in": "query",
"name": "ticket",
"schema": {
"type": "string"
}
}
],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "boolean"
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
},
"403": {
"description": "ForbiddenError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ForbiddenError"
}
}
}
},
"404": {
"description": "PtyNotFoundError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/PtyNotFoundError"
}
}
}
}
},
"description": "Establish a WebSocket connection streaming PTY output and accepting terminal input.",
"summary": "Connect to PTY session"
}
},
"/api/shell": {
"get": {
"tags": [
"shell"
],
"operationId": "v2.shell.list",
"parameters": [
{
"name": "location",
"in": "query",
"schema": {
"anyOf": [
{
"type": "object",
"properties": {
"directory": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"workspace": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"required": false,
"style": "deepObject",
"explode": true
}
],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"location": {
"$ref": "#/components/schemas/Location.Info"
},
"data": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Shell1"
}
}
},
"required": [
"location",
"data"
],
"additionalProperties": false
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
}
},
"description": "List currently running shell commands for a location. Exited commands are not included.",
"summary": "List running shell commands"
},
"post": {
"tags": [
"shell"
],
"operationId": "v2.shell.create",
"parameters": [
{
"name": "location",
"in": "query",
"schema": {
"anyOf": [
{
"type": "object",
"properties": {
"directory": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"workspace": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"required": false,
"style": "deepObject",
"explode": true
}
],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"location": {
"$ref": "#/components/schemas/Location.Info"
},
"data": {
"$ref": "#/components/schemas/Shell1"
}
},
"required": [
"location",
"data"
],
"additionalProperties": false
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
}
},
"description": "Spawn one non-interactive shell command for a location. Combined stdout/stderr is captured to a file pageable via output.",
"summary": "Run shell command",
"requestBody": {
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"command": {
"type": "string"
},
"cwd": {
"type": "string"
},
"timeout": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"metadata": {
"type": "object"
}
},
"required": [
"command"
],
"additionalProperties": false
}
}
},
"required": true
}
}
},
"/api/shell/{id}": {
"get": {
"tags": [
"shell"
],
"operationId": "v2.shell.get",
"parameters": [
{
"name": "id",
"in": "path",
"schema": {
"type": "string",
"allOf": [
{
"pattern": "^sh_"
}
]
},
"required": true
},
{
"name": "location",
"in": "query",
"schema": {
"anyOf": [
{
"type": "object",
"properties": {
"directory": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"workspace": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"required": false,
"style": "deepObject",
"explode": true
}
],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"location": {
"$ref": "#/components/schemas/Location.Info"
},
"data": {
"$ref": "#/components/schemas/Shell1"
}
},
"required": [
"location",
"data"
],
"additionalProperties": false
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
},
"404": {
"description": "ShellNotFoundError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ShellNotFoundError"
}
}
}
}
},
"description": "Get one shell command, including its status and exit code once exited.",
"summary": "Get shell command"
},
"delete": {
"tags": [
"shell"
],
"operationId": "v2.shell.remove",
"parameters": [
{
"name": "id",
"in": "path",
"schema": {
"type": "string",
"allOf": [
{
"pattern": "^sh_"
}
]
},
"required": true
},
{
"name": "location",
"in": "query",
"schema": {
"anyOf": [
{
"type": "object",
"properties": {
"directory": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"workspace": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"required": false,
"style": "deepObject",
"explode": true
}
],
"security": [],
"responses": {
"204": {
"description": "<No Content>"
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
},
"404": {
"description": "ShellNotFoundError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ShellNotFoundError"
}
}
}
}
},
"description": "Terminate and remove one shell command and its retained output.",
"summary": "Remove shell command"
}
},
"/api/shell/{id}/output": {
"get": {
"tags": [
"shell"
],
"operationId": "v2.shell.output",
"parameters": [
{
"name": "id",
"in": "path",
"schema": {
"type": "string",
"allOf": [
{
"pattern": "^sh_"
}
]
},
"required": true
},
{
"name": "location",
"in": "query",
"schema": {
"anyOf": [
{
"type": "object",
"properties": {
"directory": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"workspace": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"required": false,
"style": "deepObject",
"explode": true
},
{
"name": "cursor",
"in": "query",
"schema": {
"type": "string",
"allOf": [
{
"pattern": "^[+-]?\\d*\\.?\\d+(?:[Ee][+-]?\\d+)?$"
}
]
},
"required": false
},
{
"name": "limit",
"in": "query",
"schema": {
"type": "string",
"allOf": [
{
"pattern": "^[+-]?\\d*\\.?\\d+(?:[Ee][+-]?\\d+)?$"
}
]
},
"required": false
}
],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"location": {
"$ref": "#/components/schemas/Location.Info"
},
"data": {
"type": "object",
"properties": {
"output": {
"type": "string"
},
"cursor": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"size": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"truncated": {
"type": "boolean"
}
},
"required": [
"output",
"cursor",
"size",
"truncated"
],
"additionalProperties": false
}
},
"required": [
"location",
"data"
],
"additionalProperties": false
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
},
"404": {
"description": "ShellNotFoundError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ShellNotFoundError"
}
}
}
}
},
"description": "Page through captured combined output by absolute byte cursor.",
"summary": "Read shell output"
}
},
"/api/question/request": {
"get": {
"tags": [
"session questions"
],
"operationId": "v2.question.request.list",
"parameters": [
{
"name": "location",
"in": "query",
"schema": {
"anyOf": [
{
"type": "object",
"properties": {
"directory": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"workspace": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"required": false,
"style": "deepObject",
"explode": true
}
],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"location": {
"$ref": "#/components/schemas/Location.Info"
},
"data": {
"type": "array",
"items": {
"$ref": "#/components/schemas/QuestionV2.Request"
}
}
},
"required": [
"location",
"data"
],
"additionalProperties": false
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
}
},
"description": "Retrieve pending question requests for a location.",
"summary": "List pending question requests"
}
},
"/api/session/{sessionID}/question": {
"get": {
"tags": [
"session questions"
],
"operationId": "v2.session.question.list",
"parameters": [
{
"name": "sessionID",
"in": "path",
"schema": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"required": true
}
],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/components/schemas/QuestionV2.Request"
}
}
},
"required": [
"data"
],
"additionalProperties": false
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
},
"404": {
"description": "SessionNotFoundError",
"content": {
"application/json": {
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/SessionNotFoundError"
},
{
"$ref": "#/components/schemas/SessionNotFoundError"
}
]
}
}
}
}
},
"description": "Retrieve pending question requests owned by a session.",
"summary": "List session question requests"
}
},
"/api/session/{sessionID}/question/{requestID}/reply": {
"post": {
"tags": [
"session questions"
],
"operationId": "v2.session.question.reply",
"parameters": [
{
"name": "sessionID",
"in": "path",
"schema": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"required": true
},
{
"name": "requestID",
"in": "path",
"schema": {
"type": "string",
"allOf": [
{
"pattern": "^que"
}
]
},
"required": true
}
],
"security": [],
"responses": {
"204": {
"description": "<No Content>"
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
},
"404": {
"description": "SessionNotFoundError | QuestionNotFoundError",
"content": {
"application/json": {
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/QuestionNotFoundError"
},
{
"$ref": "#/components/schemas/SessionNotFoundError"
},
{
"$ref": "#/components/schemas/SessionNotFoundError"
}
]
}
}
}
}
},
"description": "Answer a pending question request owned by a session.",
"summary": "Reply to pending question request",
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/QuestionV2.Reply"
}
}
},
"required": true
}
}
},
"/api/session/{sessionID}/question/{requestID}/reject": {
"post": {
"tags": [
"session questions"
],
"operationId": "v2.session.question.reject",
"parameters": [
{
"name": "sessionID",
"in": "path",
"schema": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"required": true
},
{
"name": "requestID",
"in": "path",
"schema": {
"type": "string",
"allOf": [
{
"pattern": "^que"
}
]
},
"required": true
}
],
"security": [],
"responses": {
"204": {
"description": "<No Content>"
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
},
"404": {
"description": "SessionNotFoundError | QuestionNotFoundError",
"content": {
"application/json": {
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/QuestionNotFoundError"
},
{
"$ref": "#/components/schemas/SessionNotFoundError"
},
{
"$ref": "#/components/schemas/SessionNotFoundError"
}
]
}
}
}
}
},
"description": "Reject a pending question request owned by a session.",
"summary": "Reject pending question request"
}
},
"/api/reference": {
"get": {
"tags": [
"reference"
],
"operationId": "v2.reference.list",
"parameters": [
{
"name": "location",
"in": "query",
"schema": {
"anyOf": [
{
"type": "object",
"properties": {
"directory": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"workspace": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"required": false,
"style": "deepObject",
"explode": true
}
],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"location": {
"$ref": "#/components/schemas/Location.Info"
},
"data": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Reference.Info"
}
}
},
"required": [
"location",
"data"
],
"additionalProperties": false
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
}
},
"description": "List references available in the requested location.",
"summary": "List references"
}
},
"/experimental/project/{projectID}/copy": {
"post": {
"tags": [
"projectCopy"
],
"operationId": "v2.projectCopy.create",
"parameters": [
{
"name": "projectID",
"in": "path",
"schema": {
"type": "string"
},
"required": true
},
{
"name": "location",
"in": "query",
"schema": {
"anyOf": [
{
"type": "object",
"properties": {
"directory": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"workspace": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"required": false,
"style": "deepObject",
"explode": true
}
],
"security": [],
"responses": {
"200": {
"description": "ProjectCopy.Copy",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProjectCopy.Copy"
}
}
}
},
"400": {
"description": "ProjectCopyError | InvalidRequestError",
"content": {
"application/json": {
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/ProjectCopyError"
},
{
"$ref": "#/components/schemas/InvalidRequestError"
}
]
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
}
},
"requestBody": {
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"strategy": {
"type": "string"
},
"directory": {
"type": "string"
},
"name": {
"type": "string"
}
},
"required": [
"strategy",
"directory"
],
"additionalProperties": false
}
}
},
"required": true
}
},
"delete": {
"tags": [
"projectCopy"
],
"operationId": "v2.projectCopy.remove",
"parameters": [
{
"name": "projectID",
"in": "path",
"schema": {
"type": "string"
},
"required": true
},
{
"name": "location",
"in": "query",
"schema": {
"anyOf": [
{
"type": "object",
"properties": {
"directory": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"workspace": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"required": false,
"style": "deepObject",
"explode": true
}
],
"security": [],
"responses": {
"204": {
"description": "<No Content>"
},
"400": {
"description": "ProjectCopyError | InvalidRequestError",
"content": {
"application/json": {
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/ProjectCopyError"
},
{
"$ref": "#/components/schemas/InvalidRequestError"
}
]
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
}
},
"requestBody": {
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"directory": {
"type": "string"
},
"force": {
"type": "boolean"
}
},
"required": [
"directory",
"force"
],
"additionalProperties": false
}
}
},
"required": true
}
}
},
"/experimental/project/{projectID}/copy/refresh": {
"post": {
"tags": [
"projectCopy"
],
"operationId": "v2.projectCopy.refresh",
"parameters": [
{
"name": "projectID",
"in": "path",
"schema": {
"type": "string"
},
"required": true
},
{
"name": "location",
"in": "query",
"schema": {
"anyOf": [
{
"type": "object",
"properties": {
"directory": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"workspace": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"required": false,
"style": "deepObject",
"explode": true
}
],
"security": [],
"responses": {
"204": {
"description": "<No Content>"
},
"400": {
"description": "ProjectCopyError | InvalidRequestError",
"content": {
"application/json": {
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/ProjectCopyError"
},
{
"$ref": "#/components/schemas/InvalidRequestError"
}
]
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
}
}
}
},
"/api/vcs/status": {
"get": {
"tags": [
"vcs"
],
"operationId": "v2.vcs.status",
"parameters": [
{
"name": "location",
"in": "query",
"schema": {
"anyOf": [
{
"type": "object",
"properties": {
"directory": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"workspace": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"required": false,
"style": "deepObject",
"explode": true
}
],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"location": {
"$ref": "#/components/schemas/Location.Info"
},
"data": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Vcs.FileStatus"
}
}
},
"required": [
"location",
"data"
],
"additionalProperties": false
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
}
},
"description": "List uncommitted working-copy changes relative to the requested location.",
"summary": "VCS status"
}
},
"/api/vcs/diff": {
"get": {
"tags": [
"vcs"
],
"operationId": "v2.vcs.diff",
"parameters": [
{
"name": "location",
"in": "query",
"schema": {
"anyOf": [
{
"type": "object",
"properties": {
"directory": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"workspace": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"required": false,
"style": "deepObject",
"explode": true
},
{
"name": "mode",
"in": "query",
"schema": {
"$ref": "#/components/schemas/Vcs.Mode"
},
"required": true
},
{
"name": "context",
"in": "query",
"schema": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"required": false
}
],
"security": [],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"location": {
"$ref": "#/components/schemas/Location.Info"
},
"data": {
"type": "array",
"items": {
"$ref": "#/components/schemas/SnapshotFileDiff"
}
}
},
"required": [
"location",
"data"
],
"additionalProperties": false
}
}
}
},
"400": {
"description": "InvalidRequestError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InvalidRequestError"
}
}
}
},
"401": {
"description": "UnauthorizedError",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UnauthorizedError"
}
}
}
}
},
"description": "Diff the working copy against HEAD (mode git) or the default-branch merge base (mode branch) for the requested location.",
"summary": "VCS diff"
}
}
},
"components": {
"schemas": {
"UnauthorizedError": {
"type": "object",
"properties": {
"_tag": {
"type": "string",
"enum": [
"UnauthorizedError"
]
},
"message": {
"type": "string"
}
},
"required": [
"_tag",
"message"
],
"additionalProperties": false
},
"InvalidRequestError": {
"type": "object",
"properties": {
"_tag": {
"type": "string",
"enum": [
"InvalidRequestError"
]
},
"message": {
"type": "string"
},
"kind": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"field": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"_tag",
"message"
],
"additionalProperties": false
},
"Location.Info": {
"type": "object",
"properties": {
"directory": {
"type": "string"
},
"workspaceID": {
"type": "string",
"allOf": [
{
"pattern": "^wrk"
}
]
},
"project": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"directory": {
"type": "string"
}
},
"required": [
"id",
"directory"
],
"additionalProperties": false
}
},
"required": [
"directory",
"project"
],
"additionalProperties": false
},
"Model.Ref": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"providerID": {
"type": "string"
},
"variant": {
"type": "string"
}
},
"required": [
"id",
"providerID"
],
"additionalProperties": false
},
"Provider.Settings": {
"type": "object"
},
"Provider.Request": {
"type": "object",
"properties": {
"settings": {
"$ref": "#/components/schemas/Provider.Settings"
},
"headers": {
"type": "object",
"additionalProperties": {
"type": "string"
}
},
"body": {
"type": "object"
}
},
"required": [
"settings",
"headers",
"body"
],
"additionalProperties": false
},
"Agent.Color": {
"anyOf": [
{
"type": "string",
"allOf": [
{
"pattern": "^#[0-9a-fA-F]{6}$"
}
]
},
{
"type": "string",
"enum": [
"primary",
"secondary",
"accent",
"success",
"warning",
"error",
"info"
]
}
]
},
"PermissionV2.Effect": {
"type": "string",
"enum": [
"allow",
"deny",
"ask"
]
},
"PermissionV2.Rule": {
"type": "object",
"properties": {
"action": {
"type": "string"
},
"resource": {
"type": "string"
},
"effect": {
"$ref": "#/components/schemas/PermissionV2.Effect"
}
},
"required": [
"action",
"resource",
"effect"
],
"additionalProperties": false
},
"PermissionV2.Ruleset": {
"type": "array",
"items": {
"$ref": "#/components/schemas/PermissionV2.Rule"
}
},
"AgentV2.Info": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"model": {
"$ref": "#/components/schemas/Model.Ref"
},
"request": {
"$ref": "#/components/schemas/Provider.Request"
},
"system": {
"type": "string"
},
"description": {
"type": "string"
},
"mode": {
"type": "string",
"enum": [
"subagent",
"primary",
"all"
]
},
"hidden": {
"type": "boolean"
},
"color": {
"$ref": "#/components/schemas/Agent.Color"
},
"steps": {
"type": "integer",
"allOf": [
{
"exclusiveMinimum": 0
}
]
},
"permissions": {
"$ref": "#/components/schemas/PermissionV2.Ruleset"
}
},
"required": [
"id",
"request",
"mode",
"hidden",
"permissions"
],
"additionalProperties": false
},
"Plugin.Info": {
"type": "object",
"properties": {
"id": {
"type": "string"
}
},
"required": [
"id"
],
"additionalProperties": false
},
"Location.Ref": {
"type": "object",
"properties": {
"directory": {
"type": "string"
},
"workspaceID": {
"type": "string",
"allOf": [
{
"pattern": "^wrk"
}
]
}
},
"required": [
"directory"
],
"additionalProperties": false
},
"File.Diff": {
"type": "object",
"properties": {
"path": {
"type": "string"
},
"status": {
"type": "string",
"enum": [
"added",
"modified",
"deleted"
]
},
"additions": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"deletions": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"patch": {
"type": "string"
}
},
"required": [
"path",
"status",
"additions",
"deletions",
"patch"
],
"additionalProperties": false
},
"Revert.State": {
"type": "object",
"properties": {
"messageID": {
"type": "string",
"allOf": [
{
"pattern": "^msg_"
}
]
},
"partID": {
"type": "string"
},
"snapshot": {
"type": "string"
},
"diff": {
"type": "string"
},
"files": {
"type": "array",
"items": {
"$ref": "#/components/schemas/File.Diff"
}
}
},
"required": [
"messageID"
],
"additionalProperties": false
},
"SessionV2.Info": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"parentID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"projectID": {
"type": "string"
},
"agent": {
"type": "string"
},
"model": {
"$ref": "#/components/schemas/Model.Ref"
},
"cost": {
"type": "number"
},
"tokens": {
"type": "object",
"properties": {
"input": {
"type": "number"
},
"output": {
"type": "number"
},
"reasoning": {
"type": "number"
},
"cache": {
"type": "object",
"properties": {
"read": {
"type": "number"
},
"write": {
"type": "number"
}
},
"required": [
"read",
"write"
],
"additionalProperties": false
}
},
"required": [
"input",
"output",
"reasoning",
"cache"
],
"additionalProperties": false
},
"time": {
"type": "object",
"properties": {
"created": {
"type": "number"
},
"updated": {
"type": "number"
},
"archived": {
"type": "number"
}
},
"required": [
"created",
"updated"
],
"additionalProperties": false
},
"title": {
"type": "string"
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"subpath": {
"type": "string"
},
"revert": {
"$ref": "#/components/schemas/Revert.State"
}
},
"required": [
"id",
"projectID",
"cost",
"tokens",
"time",
"title",
"location"
],
"additionalProperties": false
},
"SessionWatermarks": {
"type": "object",
"patternProperties": {
"^ses": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
}
},
"description": "Durable log seq each session's snapshot was computed at. Attach a live log read after the watermark to compose fetch and stream gap-free; apply a snapshot only where its watermark is at or beyond already-applied events. Sessions without durable events are absent."
},
"SessionsResponse": {
"type": "object",
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/components/schemas/SessionV2.Info"
}
},
"watermarks": {
"$ref": "#/components/schemas/SessionWatermarks"
},
"cursor": {
"type": "object",
"properties": {
"previous": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"next": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
},
"required": [
"data",
"watermarks",
"cursor"
],
"additionalProperties": false
},
"InvalidCursorError": {
"type": "object",
"properties": {
"_tag": {
"type": "string",
"enum": [
"InvalidCursorError"
]
},
"message": {
"type": "string"
}
},
"required": [
"_tag",
"message"
],
"additionalProperties": false
},
"InvalidRequestError1": {
"type": "object",
"properties": {
"_tag": {
"type": "string",
"enum": [
"InvalidRequestError"
]
},
"message": {
"type": "string"
},
"kind": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"field": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"_tag",
"message"
],
"additionalProperties": false
},
"SessionActive": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"running"
]
}
},
"required": [
"type"
],
"additionalProperties": false
},
"SessionNotFoundError": {
"type": "object",
"properties": {
"_tag": {
"type": "string",
"enum": [
"SessionNotFoundError"
]
},
"sessionID": {
"type": "string"
},
"message": {
"type": "string"
}
},
"required": [
"_tag",
"sessionID",
"message"
],
"additionalProperties": false
},
"MessageNotFoundError": {
"type": "object",
"properties": {
"_tag": {
"type": "string",
"enum": [
"MessageNotFoundError"
]
},
"sessionID": {
"type": "string"
},
"messageID": {
"type": "string"
},
"message": {
"type": "string"
}
},
"required": [
"_tag",
"sessionID",
"messageID",
"message"
],
"additionalProperties": false
},
"Prompt.Source": {
"type": "object",
"properties": {
"start": {
"type": "number"
},
"end": {
"type": "number"
},
"text": {
"type": "string"
}
},
"required": [
"start",
"end",
"text"
],
"additionalProperties": false
},
"PromptInput.FileAttachment": {
"type": "object",
"properties": {
"uri": {
"type": "string"
},
"name": {
"type": "string"
},
"description": {
"type": "string"
},
"source": {
"$ref": "#/components/schemas/Prompt.Source"
}
},
"required": [
"uri"
],
"additionalProperties": false
},
"Prompt.AgentAttachment": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"source": {
"$ref": "#/components/schemas/Prompt.Source"
}
},
"required": [
"name"
],
"additionalProperties": false
},
"PromptInput": {
"type": "object",
"properties": {
"text": {
"type": "string"
},
"files": {
"type": "array",
"items": {
"$ref": "#/components/schemas/PromptInput.FileAttachment"
}
},
"agents": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Prompt.AgentAttachment"
}
}
},
"required": [
"text"
],
"additionalProperties": false
},
"Prompt.FileAttachment": {
"type": "object",
"properties": {
"uri": {
"type": "string"
},
"mime": {
"type": "string"
},
"name": {
"type": "string"
},
"description": {
"type": "string"
},
"source": {
"$ref": "#/components/schemas/Prompt.Source"
}
},
"required": [
"uri",
"mime"
],
"additionalProperties": false
},
"Prompt": {
"type": "object",
"properties": {
"text": {
"type": "string"
},
"files": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Prompt.FileAttachment"
}
},
"agents": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Prompt.AgentAttachment"
}
}
},
"required": [
"text"
],
"additionalProperties": false
},
"SessionInput.Admitted": {
"type": "object",
"properties": {
"admittedSeq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"id": {
"type": "string",
"allOf": [
{
"pattern": "^msg_"
}
]
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"prompt": {
"$ref": "#/components/schemas/Prompt"
},
"delivery": {
"type": "string",
"enum": [
"steer",
"queue"
]
},
"timeCreated": {
"type": "number"
},
"promotedSeq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
}
},
"required": [
"admittedSeq",
"id",
"sessionID",
"prompt",
"delivery",
"timeCreated"
],
"additionalProperties": false
},
"ConflictError": {
"type": "object",
"properties": {
"_tag": {
"type": "string",
"enum": [
"ConflictError"
]
},
"message": {
"type": "string"
},
"resource": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"_tag",
"message"
],
"additionalProperties": false
},
"CommandNotFoundError": {
"type": "object",
"properties": {
"_tag": {
"type": "string",
"enum": [
"CommandNotFoundError"
]
},
"command": {
"type": "string"
},
"message": {
"type": "string"
}
},
"required": [
"_tag",
"command",
"message"
],
"additionalProperties": false
},
"CommandEvaluationError": {
"type": "object",
"properties": {
"_tag": {
"type": "string",
"enum": [
"CommandEvaluationError"
]
},
"command": {
"type": "string"
},
"message": {
"type": "string"
}
},
"required": [
"_tag",
"command",
"message"
],
"additionalProperties": false
},
"SkillNotFoundError": {
"type": "object",
"properties": {
"_tag": {
"type": "string",
"enum": [
"SkillNotFoundError"
]
},
"skill": {
"type": "string"
},
"message": {
"type": "string"
}
},
"required": [
"_tag",
"skill",
"message"
],
"additionalProperties": false
},
"SessionBusyError": {
"type": "object",
"properties": {
"_tag": {
"type": "string",
"enum": [
"SessionBusyError"
]
},
"sessionID": {
"type": "string"
},
"message": {
"type": "string"
}
},
"required": [
"_tag",
"sessionID",
"message"
],
"additionalProperties": false
},
"ServiceUnavailableError": {
"type": "object",
"properties": {
"_tag": {
"type": "string",
"enum": [
"ServiceUnavailableError"
]
},
"message": {
"type": "string"
},
"service": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"_tag",
"message"
],
"additionalProperties": false
},
"UnknownError": {
"type": "object",
"properties": {
"_tag": {
"type": "string",
"enum": [
"UnknownError"
]
},
"message": {
"type": "string"
},
"ref": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"_tag",
"message"
],
"additionalProperties": false
},
"Session.Message.AgentSwitched": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^msg_"
}
]
},
"metadata": {
"type": "object"
},
"time": {
"type": "object",
"properties": {
"created": {
"type": "number"
}
},
"required": [
"created"
],
"additionalProperties": false
},
"type": {
"type": "string",
"enum": [
"agent-switched"
]
},
"agent": {
"type": "string"
}
},
"required": [
"id",
"time",
"type",
"agent"
],
"additionalProperties": false
},
"Session.Message.ModelSwitched": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^msg_"
}
]
},
"metadata": {
"type": "object"
},
"time": {
"type": "object",
"properties": {
"created": {
"type": "number"
}
},
"required": [
"created"
],
"additionalProperties": false
},
"type": {
"type": "string",
"enum": [
"model-switched"
]
},
"model": {
"$ref": "#/components/schemas/Model.Ref"
}
},
"required": [
"id",
"time",
"type",
"model"
],
"additionalProperties": false
},
"Session.Message.User": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^msg_"
}
]
},
"metadata": {
"type": "object"
},
"time": {
"type": "object",
"properties": {
"created": {
"type": "number"
}
},
"required": [
"created"
],
"additionalProperties": false
},
"text": {
"type": "string"
},
"files": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Prompt.FileAttachment"
}
},
"agents": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Prompt.AgentAttachment"
}
},
"type": {
"type": "string",
"enum": [
"user"
]
}
},
"required": [
"id",
"time",
"text",
"type"
],
"additionalProperties": false
},
"Session.Message.Synthetic": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^msg_"
}
]
},
"metadata": {
"type": "object"
},
"time": {
"type": "object",
"properties": {
"created": {
"type": "number"
}
},
"required": [
"created"
],
"additionalProperties": false
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"text": {
"type": "string"
},
"description": {
"type": "string"
},
"type": {
"type": "string",
"enum": [
"synthetic"
]
}
},
"required": [
"id",
"time",
"sessionID",
"text",
"type"
],
"additionalProperties": false
},
"Session.Message.System": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^msg_"
}
]
},
"metadata": {
"type": "object"
},
"time": {
"type": "object",
"properties": {
"created": {
"type": "number"
}
},
"required": [
"created"
],
"additionalProperties": false
},
"type": {
"type": "string",
"enum": [
"system"
]
},
"text": {
"type": "string"
}
},
"required": [
"id",
"time",
"type",
"text"
],
"additionalProperties": false
},
"Session.Message.Skill": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^msg_"
}
]
},
"metadata": {
"type": "object"
},
"time": {
"type": "object",
"properties": {
"created": {
"type": "number"
}
},
"required": [
"created"
],
"additionalProperties": false
},
"type": {
"type": "string",
"enum": [
"skill"
]
},
"name": {
"type": "string"
},
"text": {
"type": "string"
}
},
"required": [
"id",
"time",
"type",
"name",
"text"
],
"additionalProperties": false
},
"Session.Message.Shell": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^msg_"
}
]
},
"metadata": {
"type": "object"
},
"time": {
"type": "object",
"properties": {
"created": {
"type": "number"
},
"completed": {
"type": "number"
}
},
"required": [
"created"
],
"additionalProperties": false
},
"type": {
"type": "string",
"enum": [
"shell"
]
},
"callID": {
"type": "string"
},
"command": {
"type": "string"
},
"output": {
"type": "string"
}
},
"required": [
"id",
"time",
"type",
"callID",
"command",
"output"
],
"additionalProperties": false
},
"Session.Message.Assistant.Text": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"text"
]
},
"id": {
"type": "string"
},
"text": {
"type": "string"
}
},
"required": [
"type",
"id",
"text"
],
"additionalProperties": false
},
"LLM.ProviderMetadata": {
"type": "object",
"additionalProperties": {
"type": "object"
}
},
"Session.Message.Assistant.Reasoning": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"reasoning"
]
},
"id": {
"type": "string"
},
"text": {
"type": "string"
},
"providerMetadata": {
"$ref": "#/components/schemas/LLM.ProviderMetadata"
},
"time": {
"type": "object",
"properties": {
"created": {
"type": "number"
},
"completed": {
"type": "number"
}
},
"required": [
"created"
],
"additionalProperties": false
}
},
"required": [
"type",
"id",
"text"
],
"additionalProperties": false
},
"Session.Message.ToolState.Pending": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"pending"
]
},
"input": {
"type": "string"
}
},
"required": [
"status",
"input"
],
"additionalProperties": false
},
"Tool.TextContent": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"text"
]
},
"text": {
"type": "string"
}
},
"required": [
"type",
"text"
],
"additionalProperties": false
},
"Tool.FileContent": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"file"
]
},
"uri": {
"type": "string"
},
"mime": {
"type": "string"
},
"name": {
"type": "string"
}
},
"required": [
"type",
"uri",
"mime"
],
"additionalProperties": false
},
"LLM.ToolContent": {
"anyOf": [
{
"$ref": "#/components/schemas/Tool.TextContent"
},
{
"$ref": "#/components/schemas/Tool.FileContent"
}
]
},
"Session.Message.ToolState.Running": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"running"
]
},
"input": {
"type": "object"
},
"structured": {
"type": "object"
},
"content": {
"type": "array",
"items": {
"$ref": "#/components/schemas/LLM.ToolContent"
}
}
},
"required": [
"status",
"input",
"structured",
"content"
],
"additionalProperties": false
},
"Session.Message.ToolState.Completed": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"completed"
]
},
"input": {
"type": "object"
},
"attachments": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Prompt.FileAttachment"
}
},
"content": {
"type": "array",
"items": {
"$ref": "#/components/schemas/LLM.ToolContent"
}
},
"outputPaths": {
"type": "array",
"items": {
"type": "string"
}
},
"structured": {
"type": "object"
},
"result": {}
},
"required": [
"status",
"input",
"content",
"structured"
],
"additionalProperties": false
},
"Session.Error.Unknown": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"unknown"
]
},
"message": {
"type": "string"
}
},
"required": [
"type",
"message"
],
"additionalProperties": false
},
"Session.Message.ToolState.Error": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"error"
]
},
"input": {
"type": "object"
},
"content": {
"type": "array",
"items": {
"$ref": "#/components/schemas/LLM.ToolContent"
}
},
"structured": {
"type": "object"
},
"error": {
"$ref": "#/components/schemas/Session.Error.Unknown"
},
"result": {}
},
"required": [
"status",
"input",
"content",
"structured",
"error"
],
"additionalProperties": false
},
"Session.Message.Assistant.Tool": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"tool"
]
},
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"provider": {
"type": "object",
"properties": {
"executed": {
"type": "boolean"
},
"metadata": {
"$ref": "#/components/schemas/LLM.ProviderMetadata"
},
"resultMetadata": {
"$ref": "#/components/schemas/LLM.ProviderMetadata"
}
},
"required": [
"executed"
],
"additionalProperties": false
},
"state": {
"anyOf": [
{
"$ref": "#/components/schemas/Session.Message.ToolState.Pending"
},
{
"$ref": "#/components/schemas/Session.Message.ToolState.Running"
},
{
"$ref": "#/components/schemas/Session.Message.ToolState.Completed"
},
{
"$ref": "#/components/schemas/Session.Message.ToolState.Error"
}
]
},
"time": {
"type": "object",
"properties": {
"created": {
"type": "number"
},
"ran": {
"type": "number"
},
"completed": {
"type": "number"
},
"pruned": {
"type": "number"
}
},
"required": [
"created"
],
"additionalProperties": false
}
},
"required": [
"type",
"id",
"name",
"state",
"time"
],
"additionalProperties": false
},
"Session.Message.Assistant": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^msg_"
}
]
},
"metadata": {
"type": "object"
},
"time": {
"type": "object",
"properties": {
"created": {
"type": "number"
},
"completed": {
"type": "number"
}
},
"required": [
"created"
],
"additionalProperties": false
},
"type": {
"type": "string",
"enum": [
"assistant"
]
},
"agent": {
"type": "string"
},
"model": {
"$ref": "#/components/schemas/Model.Ref"
},
"content": {
"type": "array",
"items": {
"anyOf": [
{
"$ref": "#/components/schemas/Session.Message.Assistant.Text"
},
{
"$ref": "#/components/schemas/Session.Message.Assistant.Reasoning"
},
{
"$ref": "#/components/schemas/Session.Message.Assistant.Tool"
}
]
}
},
"snapshot": {
"type": "object",
"properties": {
"start": {
"type": "string"
},
"end": {
"type": "string"
},
"files": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"finish": {
"type": "string"
},
"cost": {
"type": "number"
},
"tokens": {
"type": "object",
"properties": {
"input": {
"type": "number"
},
"output": {
"type": "number"
},
"reasoning": {
"type": "number"
},
"cache": {
"type": "object",
"properties": {
"read": {
"type": "number"
},
"write": {
"type": "number"
}
},
"required": [
"read",
"write"
],
"additionalProperties": false
}
},
"required": [
"input",
"output",
"reasoning",
"cache"
],
"additionalProperties": false
},
"error": {
"$ref": "#/components/schemas/Session.Error.Unknown"
}
},
"required": [
"id",
"time",
"type",
"agent",
"model",
"content"
],
"additionalProperties": false
},
"Session.Message.Compaction": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"compaction"
]
},
"reason": {
"type": "string",
"enum": [
"auto",
"manual"
]
},
"summary": {
"type": "string"
},
"recent": {
"type": "string"
},
"id": {
"type": "string",
"allOf": [
{
"pattern": "^msg_"
}
]
},
"metadata": {
"type": "object"
},
"time": {
"type": "object",
"properties": {
"created": {
"type": "number"
}
},
"required": [
"created"
],
"additionalProperties": false
}
},
"required": [
"type",
"reason",
"summary",
"recent",
"id",
"time"
],
"additionalProperties": false
},
"Session.Message": {
"anyOf": [
{
"$ref": "#/components/schemas/Session.Message.AgentSwitched"
},
{
"$ref": "#/components/schemas/Session.Message.ModelSwitched"
},
{
"$ref": "#/components/schemas/Session.Message.User"
},
{
"$ref": "#/components/schemas/Session.Message.Synthetic"
},
{
"$ref": "#/components/schemas/Session.Message.System"
},
{
"$ref": "#/components/schemas/Session.Message.Skill"
},
{
"$ref": "#/components/schemas/Session.Message.Shell"
},
{
"$ref": "#/components/schemas/Session.Message.Assistant"
},
{
"$ref": "#/components/schemas/Session.Message.Compaction"
}
]
},
"SessionContextEntry.Key": {
"type": "string",
"allOf": [
{
"pattern": "^[a-z0-9][a-z0-9._-]*$",
"description": "Context entry key (lowercase alphanumerics plus . _ -)"
}
]
},
"SessionContextEntry.Info": {
"type": "object",
"properties": {
"key": {
"$ref": "#/components/schemas/SessionContextEntry.Key"
},
"value": {}
},
"required": [
"key",
"value"
],
"additionalProperties": false
},
"session.next.agent.switched": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"session.next.agent.switched"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"timestamp": {
"type": "number"
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"messageID": {
"type": "string",
"allOf": [
{
"pattern": "^msg_"
}
]
},
"agent": {
"type": "string"
}
},
"required": [
"timestamp",
"sessionID",
"messageID",
"agent"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"session.next.model.switched": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"session.next.model.switched"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"timestamp": {
"type": "number"
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"messageID": {
"type": "string",
"allOf": [
{
"pattern": "^msg_"
}
]
},
"model": {
"$ref": "#/components/schemas/Model.Ref"
}
},
"required": [
"timestamp",
"sessionID",
"messageID",
"model"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"session.next.moved": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"session.next.moved"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"timestamp": {
"type": "number"
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"subdirectory": {
"type": "string"
}
},
"required": [
"timestamp",
"sessionID",
"location"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"session.next.renamed": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"session.next.renamed"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"timestamp": {
"type": "number"
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"title": {
"type": "string"
}
},
"required": [
"timestamp",
"sessionID",
"title"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"session.next.forked": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"session.next.forked"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"timestamp": {
"type": "number"
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"parentID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"messageID": {
"type": "string",
"allOf": [
{
"pattern": "^msg_"
}
]
}
},
"required": [
"timestamp",
"sessionID",
"parentID"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"session.next.prompted": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"session.next.prompted"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"timestamp": {
"type": "number"
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"messageID": {
"type": "string",
"allOf": [
{
"pattern": "^msg_"
}
]
},
"prompt": {
"$ref": "#/components/schemas/Prompt"
},
"delivery": {
"type": "string",
"enum": [
"steer",
"queue"
]
}
},
"required": [
"timestamp",
"sessionID",
"messageID",
"prompt",
"delivery"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"session.next.prompt.admitted": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"session.next.prompt.admitted"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"timestamp": {
"type": "number"
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"messageID": {
"type": "string",
"allOf": [
{
"pattern": "^msg_"
}
]
},
"prompt": {
"$ref": "#/components/schemas/Prompt"
},
"delivery": {
"type": "string",
"enum": [
"steer",
"queue"
]
}
},
"required": [
"timestamp",
"sessionID",
"messageID",
"prompt",
"delivery"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"session.next.context.updated": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"session.next.context.updated"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"timestamp": {
"type": "number"
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"messageID": {
"type": "string",
"allOf": [
{
"pattern": "^msg_"
}
]
},
"text": {
"type": "string"
}
},
"required": [
"timestamp",
"sessionID",
"messageID",
"text"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"session.next.synthetic": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"session.next.synthetic"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"timestamp": {
"type": "number"
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"messageID": {
"type": "string",
"allOf": [
{
"pattern": "^msg_"
}
]
},
"text": {
"type": "string"
},
"description": {
"type": "string"
},
"metadata": {
"type": "object"
}
},
"required": [
"timestamp",
"sessionID",
"messageID",
"text"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"session.next.skill.activated": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"session.next.skill.activated"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"timestamp": {
"type": "number"
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"messageID": {
"type": "string",
"allOf": [
{
"pattern": "^msg_"
}
]
},
"name": {
"type": "string"
},
"text": {
"type": "string"
}
},
"required": [
"timestamp",
"sessionID",
"messageID",
"name",
"text"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"session.next.shell.started": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"session.next.shell.started"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"timestamp": {
"type": "number"
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"messageID": {
"type": "string",
"allOf": [
{
"pattern": "^msg_"
}
]
},
"callID": {
"type": "string"
},
"command": {
"type": "string"
}
},
"required": [
"timestamp",
"sessionID",
"messageID",
"callID",
"command"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"session.next.shell.ended": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"session.next.shell.ended"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"timestamp": {
"type": "number"
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"callID": {
"type": "string"
},
"output": {
"type": "string"
}
},
"required": [
"timestamp",
"sessionID",
"callID",
"output"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"session.next.step.started": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"session.next.step.started"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"timestamp": {
"type": "number"
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"assistantMessageID": {
"type": "string",
"allOf": [
{
"pattern": "^msg_"
}
]
},
"agent": {
"type": "string"
},
"model": {
"$ref": "#/components/schemas/Model.Ref"
},
"snapshot": {
"type": "string"
}
},
"required": [
"timestamp",
"sessionID",
"assistantMessageID",
"agent",
"model"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"session.next.step.ended": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"session.next.step.ended"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"timestamp": {
"type": "number"
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"assistantMessageID": {
"type": "string",
"allOf": [
{
"pattern": "^msg_"
}
]
},
"finish": {
"type": "string"
},
"cost": {
"type": "number"
},
"tokens": {
"type": "object",
"properties": {
"input": {
"type": "number"
},
"output": {
"type": "number"
},
"reasoning": {
"type": "number"
},
"cache": {
"type": "object",
"properties": {
"read": {
"type": "number"
},
"write": {
"type": "number"
}
},
"required": [
"read",
"write"
],
"additionalProperties": false
}
},
"required": [
"input",
"output",
"reasoning",
"cache"
],
"additionalProperties": false
},
"snapshot": {
"type": "string"
},
"files": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"timestamp",
"sessionID",
"assistantMessageID",
"finish",
"cost",
"tokens"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"session.next.step.failed": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"session.next.step.failed"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"timestamp": {
"type": "number"
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"assistantMessageID": {
"type": "string",
"allOf": [
{
"pattern": "^msg_"
}
]
},
"error": {
"$ref": "#/components/schemas/Session.Error.Unknown"
}
},
"required": [
"timestamp",
"sessionID",
"assistantMessageID",
"error"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"session.next.text.started": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"session.next.text.started"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"timestamp": {
"type": "number"
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"assistantMessageID": {
"type": "string",
"allOf": [
{
"pattern": "^msg_"
}
]
},
"textID": {
"type": "string"
}
},
"required": [
"timestamp",
"sessionID",
"assistantMessageID",
"textID"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"session.next.text.ended": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"session.next.text.ended"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"timestamp": {
"type": "number"
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"assistantMessageID": {
"type": "string",
"allOf": [
{
"pattern": "^msg_"
}
]
},
"textID": {
"type": "string"
},
"text": {
"type": "string"
}
},
"required": [
"timestamp",
"sessionID",
"assistantMessageID",
"textID",
"text"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"session.next.tool.input.started": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"session.next.tool.input.started"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"timestamp": {
"type": "number"
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"assistantMessageID": {
"type": "string",
"allOf": [
{
"pattern": "^msg_"
}
]
},
"callID": {
"type": "string"
},
"name": {
"type": "string"
}
},
"required": [
"timestamp",
"sessionID",
"assistantMessageID",
"callID",
"name"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"session.next.tool.input.ended": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"session.next.tool.input.ended"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"timestamp": {
"type": "number"
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"assistantMessageID": {
"type": "string",
"allOf": [
{
"pattern": "^msg_"
}
]
},
"callID": {
"type": "string"
},
"text": {
"type": "string"
}
},
"required": [
"timestamp",
"sessionID",
"assistantMessageID",
"callID",
"text"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"LLM.ProviderMetadata3": {
"type": "object",
"additionalProperties": {
"type": "object"
}
},
"session.next.tool.called": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"session.next.tool.called"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"timestamp": {
"type": "number"
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"assistantMessageID": {
"type": "string",
"allOf": [
{
"pattern": "^msg_"
}
]
},
"callID": {
"type": "string"
},
"tool": {
"type": "string"
},
"input": {
"type": "object"
},
"provider": {
"type": "object",
"properties": {
"executed": {
"type": "boolean"
},
"metadata": {
"$ref": "#/components/schemas/LLM.ProviderMetadata3"
}
},
"required": [
"executed"
],
"additionalProperties": false
}
},
"required": [
"timestamp",
"sessionID",
"assistantMessageID",
"callID",
"tool",
"input",
"provider"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"session.next.tool.progress": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"session.next.tool.progress"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"timestamp": {
"type": "number"
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"assistantMessageID": {
"type": "string",
"allOf": [
{
"pattern": "^msg_"
}
]
},
"callID": {
"type": "string"
},
"structured": {
"type": "object"
},
"content": {
"type": "array",
"items": {
"$ref": "#/components/schemas/LLM.ToolContent"
}
}
},
"required": [
"timestamp",
"sessionID",
"assistantMessageID",
"callID",
"structured",
"content"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"LLM.ProviderMetadata4": {
"type": "object",
"additionalProperties": {
"type": "object"
}
},
"session.next.tool.success": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"session.next.tool.success"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"timestamp": {
"type": "number"
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"assistantMessageID": {
"type": "string",
"allOf": [
{
"pattern": "^msg_"
}
]
},
"callID": {
"type": "string"
},
"structured": {
"type": "object"
},
"content": {
"type": "array",
"items": {
"$ref": "#/components/schemas/LLM.ToolContent"
}
},
"outputPaths": {
"type": "array",
"items": {
"type": "string"
}
},
"result": {},
"provider": {
"type": "object",
"properties": {
"executed": {
"type": "boolean"
},
"metadata": {
"$ref": "#/components/schemas/LLM.ProviderMetadata4"
}
},
"required": [
"executed"
],
"additionalProperties": false
}
},
"required": [
"timestamp",
"sessionID",
"assistantMessageID",
"callID",
"structured",
"content",
"provider"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"LLM.ProviderMetadata5": {
"type": "object",
"additionalProperties": {
"type": "object"
}
},
"session.next.tool.failed": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"session.next.tool.failed"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"timestamp": {
"type": "number"
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"assistantMessageID": {
"type": "string",
"allOf": [
{
"pattern": "^msg_"
}
]
},
"callID": {
"type": "string"
},
"error": {
"$ref": "#/components/schemas/Session.Error.Unknown"
},
"result": {},
"provider": {
"type": "object",
"properties": {
"executed": {
"type": "boolean"
},
"metadata": {
"$ref": "#/components/schemas/LLM.ProviderMetadata5"
}
},
"required": [
"executed"
],
"additionalProperties": false
}
},
"required": [
"timestamp",
"sessionID",
"assistantMessageID",
"callID",
"error",
"provider"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"LLM.ProviderMetadata6": {
"type": "object",
"additionalProperties": {
"type": "object"
}
},
"session.next.reasoning.started": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"session.next.reasoning.started"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"timestamp": {
"type": "number"
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"assistantMessageID": {
"type": "string",
"allOf": [
{
"pattern": "^msg_"
}
]
},
"reasoningID": {
"type": "string"
},
"providerMetadata": {
"$ref": "#/components/schemas/LLM.ProviderMetadata6"
}
},
"required": [
"timestamp",
"sessionID",
"assistantMessageID",
"reasoningID"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"LLM.ProviderMetadata7": {
"type": "object",
"additionalProperties": {
"type": "object"
}
},
"session.next.reasoning.ended": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"session.next.reasoning.ended"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"timestamp": {
"type": "number"
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"assistantMessageID": {
"type": "string",
"allOf": [
{
"pattern": "^msg_"
}
]
},
"reasoningID": {
"type": "string"
},
"text": {
"type": "string"
},
"providerMetadata": {
"$ref": "#/components/schemas/LLM.ProviderMetadata7"
}
},
"required": [
"timestamp",
"sessionID",
"assistantMessageID",
"reasoningID",
"text"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"session.next.retry_error": {
"type": "object",
"properties": {
"message": {
"type": "string"
},
"statusCode": {
"type": "number"
},
"isRetryable": {
"type": "boolean"
},
"responseHeaders": {
"type": "object",
"additionalProperties": {
"type": "string"
}
},
"responseBody": {
"type": "string"
},
"metadata": {
"type": "object",
"additionalProperties": {
"type": "string"
}
}
},
"required": [
"message",
"isRetryable"
],
"additionalProperties": false
},
"session.next.retried": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"session.next.retried"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"timestamp": {
"type": "number"
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"attempt": {
"type": "number"
},
"error": {
"$ref": "#/components/schemas/session.next.retry_error"
}
},
"required": [
"timestamp",
"sessionID",
"attempt",
"error"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"session.next.compaction.started": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"session.next.compaction.started"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"timestamp": {
"type": "number"
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"messageID": {
"type": "string",
"allOf": [
{
"pattern": "^msg_"
}
]
},
"reason": {
"type": "string",
"enum": [
"auto",
"manual"
]
}
},
"required": [
"timestamp",
"sessionID",
"messageID",
"reason"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"session.next.compaction.ended": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"session.next.compaction.ended"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"timestamp": {
"type": "number"
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"messageID": {
"type": "string",
"allOf": [
{
"pattern": "^msg_"
}
]
},
"reason": {
"type": "string",
"enum": [
"auto",
"manual"
]
},
"text": {
"type": "string"
},
"recent": {
"type": "string"
}
},
"required": [
"timestamp",
"sessionID",
"messageID",
"reason",
"text",
"recent"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"session.next.revert.staged": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"session.next.revert.staged"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"timestamp": {
"type": "number"
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"revert": {
"$ref": "#/components/schemas/Revert.State"
}
},
"required": [
"timestamp",
"sessionID",
"revert"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"session.next.revert.cleared": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"session.next.revert.cleared"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"timestamp": {
"type": "number"
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
}
},
"required": [
"timestamp",
"sessionID"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"session.next.revert.committed": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"session.next.revert.committed"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"timestamp": {
"type": "number"
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"messageID": {
"type": "string",
"allOf": [
{
"pattern": "^msg_"
}
]
}
},
"required": [
"timestamp",
"sessionID",
"messageID"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"SessionDurableEvent": {
"oneOf": [
{
"$ref": "#/components/schemas/session.next.agent.switched"
},
{
"$ref": "#/components/schemas/session.next.model.switched"
},
{
"$ref": "#/components/schemas/session.next.moved"
},
{
"$ref": "#/components/schemas/session.next.renamed"
},
{
"$ref": "#/components/schemas/session.next.forked"
},
{
"$ref": "#/components/schemas/session.next.prompted"
},
{
"$ref": "#/components/schemas/session.next.prompt.admitted"
},
{
"$ref": "#/components/schemas/session.next.context.updated"
},
{
"$ref": "#/components/schemas/session.next.synthetic"
},
{
"$ref": "#/components/schemas/session.next.skill.activated"
},
{
"$ref": "#/components/schemas/session.next.shell.started"
},
{
"$ref": "#/components/schemas/session.next.shell.ended"
},
{
"$ref": "#/components/schemas/session.next.step.started"
},
{
"$ref": "#/components/schemas/session.next.step.ended"
},
{
"$ref": "#/components/schemas/session.next.step.failed"
},
{
"$ref": "#/components/schemas/session.next.text.started"
},
{
"$ref": "#/components/schemas/session.next.text.ended"
},
{
"$ref": "#/components/schemas/session.next.tool.input.started"
},
{
"$ref": "#/components/schemas/session.next.tool.input.ended"
},
{
"$ref": "#/components/schemas/session.next.tool.called"
},
{
"$ref": "#/components/schemas/session.next.tool.progress"
},
{
"$ref": "#/components/schemas/session.next.tool.success"
},
{
"$ref": "#/components/schemas/session.next.tool.failed"
},
{
"$ref": "#/components/schemas/session.next.reasoning.started"
},
{
"$ref": "#/components/schemas/session.next.reasoning.ended"
},
{
"$ref": "#/components/schemas/session.next.retried"
},
{
"$ref": "#/components/schemas/session.next.compaction.started"
},
{
"$ref": "#/components/schemas/session.next.compaction.ended"
},
{
"$ref": "#/components/schemas/session.next.revert.staged"
},
{
"$ref": "#/components/schemas/session.next.revert.cleared"
},
{
"$ref": "#/components/schemas/session.next.revert.committed"
}
]
},
"EventLog.Synced": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"log.synced"
]
},
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
}
},
"required": [
"type",
"aggregateID"
],
"additionalProperties": false,
"description": "Marker emitted once when a log read reaches its captured watermark. The reader holds every event committed at or below seq."
},
"SessionLogItem": {
"anyOf": [
{
"$ref": "#/components/schemas/SessionDurableEvent"
},
{
"$ref": "#/components/schemas/EventLog.Synced"
}
]
},
"SessionLogItemStream": {
"type": "string",
"contentSchema": {
"$ref": "#/components/schemas/SessionLogItem"
},
"contentMediaType": "application/json"
},
"SessionMessagesResponse": {
"type": "object",
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Session.Message"
}
},
"watermark": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"cursor": {
"type": "object",
"properties": {
"previous": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"next": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
},
"required": [
"data",
"cursor"
],
"additionalProperties": false
},
"Model.Api": {
"anyOf": [
{
"type": "object",
"properties": {
"id": {
"type": "string"
},
"type": {
"type": "string",
"enum": [
"aisdk"
]
},
"package": {
"type": "string"
},
"url": {
"type": "string"
},
"settings": {
"type": "object"
}
},
"required": [
"id",
"type",
"package"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"id": {
"type": "string"
},
"type": {
"type": "string",
"enum": [
"native"
]
},
"url": {
"type": "string"
},
"settings": {
"type": "object"
}
},
"required": [
"id",
"type",
"settings"
],
"additionalProperties": false
}
]
},
"Model.Capabilities": {
"type": "object",
"properties": {
"tools": {
"type": "boolean"
},
"input": {
"type": "array",
"items": {
"type": "string"
}
},
"output": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"tools",
"input",
"output"
],
"additionalProperties": false
},
"Model.Cost": {
"type": "object",
"properties": {
"tier": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"context"
]
},
"size": {
"type": "integer"
}
},
"required": [
"type",
"size"
],
"additionalProperties": false
},
"input": {
"type": "number"
},
"output": {
"type": "number"
},
"cache": {
"type": "object",
"properties": {
"read": {
"type": "number"
},
"write": {
"type": "number"
}
},
"required": [
"read",
"write"
],
"additionalProperties": false
}
},
"required": [
"input",
"output",
"cache"
],
"additionalProperties": false
},
"ModelV2.Info": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"providerID": {
"type": "string"
},
"family": {
"type": "string"
},
"name": {
"type": "string"
},
"api": {
"$ref": "#/components/schemas/Model.Api"
},
"capabilities": {
"$ref": "#/components/schemas/Model.Capabilities"
},
"request": {
"type": "object",
"properties": {
"settings": {
"$ref": "#/components/schemas/Provider.Settings"
},
"headers": {
"type": "object",
"additionalProperties": {
"type": "string"
}
},
"body": {
"type": "object"
},
"variant": {
"type": "string"
}
},
"required": [
"settings",
"headers",
"body"
],
"additionalProperties": false
},
"variants": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"settings": {
"$ref": "#/components/schemas/Provider.Settings"
},
"headers": {
"type": "object",
"additionalProperties": {
"type": "string"
}
},
"body": {
"type": "object"
}
},
"required": [
"id",
"settings",
"headers",
"body"
],
"additionalProperties": false
}
},
"time": {
"type": "object",
"properties": {
"released": {
"type": "number"
}
},
"required": [
"released"
],
"additionalProperties": false
},
"cost": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Model.Cost"
}
},
"status": {
"type": "string",
"enum": [
"alpha",
"beta",
"deprecated",
"active"
]
},
"enabled": {
"type": "boolean"
},
"limit": {
"type": "object",
"properties": {
"context": {
"type": "integer"
},
"input": {
"type": "integer"
},
"output": {
"type": "integer"
}
},
"required": [
"context",
"output"
],
"additionalProperties": false
}
},
"required": [
"id",
"providerID",
"name",
"api",
"capabilities",
"request",
"variants",
"time",
"cost",
"status",
"enabled",
"limit"
],
"additionalProperties": false
},
"GenerateTextResponse": {
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {
"text": {
"type": "string"
}
},
"required": [
"text"
],
"additionalProperties": false
}
},
"required": [
"data"
],
"additionalProperties": false
},
"Provider.AISDK": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"aisdk"
]
},
"package": {
"type": "string"
},
"url": {
"type": "string"
},
"settings": {
"type": "object"
}
},
"required": [
"type",
"package"
],
"additionalProperties": false
},
"Provider.Native": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"native"
]
},
"url": {
"type": "string"
},
"settings": {
"type": "object"
}
},
"required": [
"type",
"settings"
],
"additionalProperties": false
},
"Provider.Api": {
"anyOf": [
{
"$ref": "#/components/schemas/Provider.AISDK"
},
{
"$ref": "#/components/schemas/Provider.Native"
}
]
},
"ProviderV2.Info": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"integrationID": {
"type": "string"
},
"name": {
"type": "string"
},
"disabled": {
"type": "boolean"
},
"api": {
"$ref": "#/components/schemas/Provider.Api"
},
"request": {
"$ref": "#/components/schemas/Provider.Request"
}
},
"required": [
"id",
"name",
"api",
"request"
],
"additionalProperties": false
},
"ProviderNotFoundError": {
"type": "object",
"properties": {
"_tag": {
"type": "string",
"enum": [
"ProviderNotFoundError"
]
},
"providerID": {
"type": "string"
},
"message": {
"type": "string"
}
},
"required": [
"_tag",
"providerID",
"message"
],
"additionalProperties": false
},
"Integration.When": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"op": {
"type": "string",
"enum": [
"eq",
"neq"
]
},
"value": {
"type": "string"
}
},
"required": [
"key",
"op",
"value"
],
"additionalProperties": false
},
"Integration.TextPrompt": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"text"
]
},
"key": {
"type": "string"
},
"message": {
"type": "string"
},
"placeholder": {
"type": "string"
},
"when": {
"$ref": "#/components/schemas/Integration.When"
}
},
"required": [
"type",
"key",
"message"
],
"additionalProperties": false
},
"Integration.SelectPrompt": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"select"
]
},
"key": {
"type": "string"
},
"message": {
"type": "string"
},
"options": {
"type": "array",
"items": {
"type": "object",
"properties": {
"label": {
"type": "string"
},
"value": {
"type": "string"
},
"hint": {
"type": "string"
}
},
"required": [
"label",
"value"
],
"additionalProperties": false
}
},
"when": {
"$ref": "#/components/schemas/Integration.When"
}
},
"required": [
"type",
"key",
"message",
"options"
],
"additionalProperties": false
},
"Integration.OAuthMethod": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"type": {
"type": "string",
"enum": [
"oauth"
]
},
"label": {
"type": "string"
},
"prompts": {
"type": "array",
"items": {
"anyOf": [
{
"$ref": "#/components/schemas/Integration.TextPrompt"
},
{
"$ref": "#/components/schemas/Integration.SelectPrompt"
}
]
}
}
},
"required": [
"id",
"type",
"label"
],
"additionalProperties": false
},
"Integration.KeyMethod": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"key"
]
},
"label": {
"type": "string"
}
},
"required": [
"type"
],
"additionalProperties": false
},
"Integration.EnvMethod": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"env"
]
},
"names": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"type",
"names"
],
"additionalProperties": false
},
"Integration.Method": {
"anyOf": [
{
"$ref": "#/components/schemas/Integration.OAuthMethod"
},
{
"$ref": "#/components/schemas/Integration.KeyMethod"
},
{
"$ref": "#/components/schemas/Integration.EnvMethod"
}
]
},
"Connection.CredentialInfo": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"credential"
]
},
"id": {
"type": "string"
},
"label": {
"type": "string"
}
},
"required": [
"type",
"id",
"label"
],
"additionalProperties": false
},
"Connection.EnvInfo": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"env"
]
},
"name": {
"type": "string"
}
},
"required": [
"type",
"name"
],
"additionalProperties": false
},
"Connection.Info": {
"anyOf": [
{
"$ref": "#/components/schemas/Connection.CredentialInfo"
},
{
"$ref": "#/components/schemas/Connection.EnvInfo"
}
]
},
"Integration.Info": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"methods": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Integration.Method"
}
},
"connections": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Connection.Info"
}
}
},
"required": [
"id",
"name",
"methods",
"connections"
],
"additionalProperties": false
},
"Integration.Attempt": {
"type": "object",
"properties": {
"attemptID": {
"type": "string"
},
"url": {
"type": "string"
},
"instructions": {
"type": "string"
},
"mode": {
"type": "string",
"enum": [
"auto",
"code"
]
},
"time": {
"type": "object",
"properties": {
"created": {
"anyOf": [
{
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"enum": [
"NaN"
]
},
{
"type": "string",
"enum": [
"Infinity"
]
},
{
"type": "string",
"enum": [
"-Infinity"
]
}
]
},
{
"type": "string",
"enum": [
"Infinity",
"-Infinity",
"NaN"
]
}
]
},
"expires": {
"anyOf": [
{
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"enum": [
"NaN"
]
},
{
"type": "string",
"enum": [
"Infinity"
]
},
{
"type": "string",
"enum": [
"-Infinity"
]
}
]
},
{
"type": "string",
"enum": [
"Infinity",
"-Infinity",
"NaN"
]
}
]
}
},
"required": [
"created",
"expires"
],
"additionalProperties": false
}
},
"required": [
"attemptID",
"url",
"instructions",
"mode",
"time"
],
"additionalProperties": false
},
"Integration.AttemptStatus": {
"anyOf": [
{
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"pending"
]
},
"time": {
"type": "object",
"properties": {
"created": {
"anyOf": [
{
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"enum": [
"NaN"
]
},
{
"type": "string",
"enum": [
"Infinity"
]
},
{
"type": "string",
"enum": [
"-Infinity"
]
}
]
},
{
"type": "string",
"enum": [
"Infinity",
"-Infinity",
"NaN"
]
}
]
},
"expires": {
"anyOf": [
{
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"enum": [
"NaN"
]
},
{
"type": "string",
"enum": [
"Infinity"
]
},
{
"type": "string",
"enum": [
"-Infinity"
]
}
]
},
{
"type": "string",
"enum": [
"Infinity",
"-Infinity",
"NaN"
]
}
]
}
},
"required": [
"created",
"expires"
],
"additionalProperties": false
}
},
"required": [
"status",
"time"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"complete"
]
},
"time": {
"type": "object",
"properties": {
"created": {
"anyOf": [
{
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"enum": [
"NaN"
]
},
{
"type": "string",
"enum": [
"Infinity"
]
},
{
"type": "string",
"enum": [
"-Infinity"
]
}
]
},
{
"type": "string",
"enum": [
"Infinity",
"-Infinity",
"NaN"
]
}
]
},
"expires": {
"anyOf": [
{
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"enum": [
"NaN"
]
},
{
"type": "string",
"enum": [
"Infinity"
]
},
{
"type": "string",
"enum": [
"-Infinity"
]
}
]
},
{
"type": "string",
"enum": [
"Infinity",
"-Infinity",
"NaN"
]
}
]
}
},
"required": [
"created",
"expires"
],
"additionalProperties": false
}
},
"required": [
"status",
"time"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"failed"
]
},
"message": {
"type": "string"
},
"time": {
"type": "object",
"properties": {
"created": {
"anyOf": [
{
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"enum": [
"NaN"
]
},
{
"type": "string",
"enum": [
"Infinity"
]
},
{
"type": "string",
"enum": [
"-Infinity"
]
}
]
},
{
"type": "string",
"enum": [
"Infinity",
"-Infinity",
"NaN"
]
}
]
},
"expires": {
"anyOf": [
{
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"enum": [
"NaN"
]
},
{
"type": "string",
"enum": [
"Infinity"
]
},
{
"type": "string",
"enum": [
"-Infinity"
]
}
]
},
{
"type": "string",
"enum": [
"Infinity",
"-Infinity",
"NaN"
]
}
]
}
},
"required": [
"created",
"expires"
],
"additionalProperties": false
}
},
"required": [
"status",
"message",
"time"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"expired"
]
},
"time": {
"type": "object",
"properties": {
"created": {
"anyOf": [
{
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"enum": [
"NaN"
]
},
{
"type": "string",
"enum": [
"Infinity"
]
},
{
"type": "string",
"enum": [
"-Infinity"
]
}
]
},
{
"type": "string",
"enum": [
"Infinity",
"-Infinity",
"NaN"
]
}
]
},
"expires": {
"anyOf": [
{
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"enum": [
"NaN"
]
},
{
"type": "string",
"enum": [
"Infinity"
]
},
{
"type": "string",
"enum": [
"-Infinity"
]
}
]
},
{
"type": "string",
"enum": [
"Infinity",
"-Infinity",
"NaN"
]
}
]
}
},
"required": [
"created",
"expires"
],
"additionalProperties": false
}
},
"required": [
"status",
"time"
],
"additionalProperties": false
}
]
},
"Mcp.Status.Connected": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"connected"
]
}
},
"required": [
"status"
],
"additionalProperties": false
},
"Mcp.Status.Disconnected": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"disconnected"
]
}
},
"required": [
"status"
],
"additionalProperties": false
},
"Mcp.Status.Disabled": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"disabled"
]
}
},
"required": [
"status"
],
"additionalProperties": false
},
"Mcp.Status.Failed": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"failed"
]
},
"error": {
"type": "string"
}
},
"required": [
"status",
"error"
],
"additionalProperties": false
},
"Mcp.Status.NeedsAuth": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"needs_auth"
]
}
},
"required": [
"status"
],
"additionalProperties": false
},
"Mcp.Status.NeedsClientRegistration": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"needs_client_registration"
]
},
"error": {
"type": "string"
}
},
"required": [
"status",
"error"
],
"additionalProperties": false
},
"Mcp.Server": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"status": {
"anyOf": [
{
"$ref": "#/components/schemas/Mcp.Status.Connected"
},
{
"$ref": "#/components/schemas/Mcp.Status.Disconnected"
},
{
"$ref": "#/components/schemas/Mcp.Status.Disabled"
},
{
"$ref": "#/components/schemas/Mcp.Status.Failed"
},
{
"$ref": "#/components/schemas/Mcp.Status.NeedsAuth"
},
{
"$ref": "#/components/schemas/Mcp.Status.NeedsClientRegistration"
}
]
},
"integrationID": {
"type": "string"
}
},
"required": [
"name",
"status"
],
"additionalProperties": false
},
"Project.Current": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"directory": {
"type": "string"
}
},
"required": [
"id",
"directory"
],
"additionalProperties": false
},
"Project.Directory": {
"type": "object",
"properties": {
"directory": {
"type": "string"
},
"strategy": {
"type": "string"
}
},
"required": [
"directory"
],
"additionalProperties": false
},
"Project.Directories": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Project.Directory"
}
},
"Form.Metadata": {
"type": "object"
},
"Form.When": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"op": {
"type": "string",
"enum": [
"eq",
"neq"
]
},
"value": {
"anyOf": [
{
"type": "string"
},
{
"anyOf": [
{
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"enum": [
"NaN"
]
},
{
"type": "string",
"enum": [
"Infinity"
]
},
{
"type": "string",
"enum": [
"-Infinity"
]
}
]
},
{
"type": "string",
"enum": [
"Infinity",
"-Infinity",
"NaN"
]
}
]
},
{
"type": "boolean"
}
]
}
},
"required": [
"key",
"op",
"value"
],
"additionalProperties": false
},
"Form.Option": {
"type": "object",
"properties": {
"value": {
"type": "string"
},
"label": {
"type": "string"
},
"description": {
"type": "string"
}
},
"required": [
"value",
"label"
],
"additionalProperties": false
},
"Form.StringField": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"title": {
"type": "string"
},
"description": {
"type": "string"
},
"required": {
"type": "boolean"
},
"when": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Form.When"
}
},
"type": {
"type": "string",
"enum": [
"string"
]
},
"format": {
"type": "string",
"enum": [
"email",
"uri",
"date",
"date-time"
]
},
"minLength": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"maxLength": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"pattern": {
"type": "string"
},
"placeholder": {
"type": "string"
},
"default": {
"type": "string"
},
"options": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Form.Option"
}
},
"custom": {
"type": "boolean"
}
},
"required": [
"key",
"type"
],
"additionalProperties": false
},
"Form.NumberField": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"title": {
"type": "string"
},
"description": {
"type": "string"
},
"required": {
"type": "boolean"
},
"when": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Form.When"
}
},
"type": {
"type": "string",
"enum": [
"number"
]
},
"minimum": {
"anyOf": [
{
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"enum": [
"NaN"
]
},
{
"type": "string",
"enum": [
"Infinity"
]
},
{
"type": "string",
"enum": [
"-Infinity"
]
}
]
},
{
"type": "string",
"enum": [
"Infinity",
"-Infinity",
"NaN"
]
}
]
},
"maximum": {
"anyOf": [
{
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"enum": [
"NaN"
]
},
{
"type": "string",
"enum": [
"Infinity"
]
},
{
"type": "string",
"enum": [
"-Infinity"
]
}
]
},
{
"type": "string",
"enum": [
"Infinity",
"-Infinity",
"NaN"
]
}
]
},
"default": {
"anyOf": [
{
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"enum": [
"NaN"
]
},
{
"type": "string",
"enum": [
"Infinity"
]
},
{
"type": "string",
"enum": [
"-Infinity"
]
}
]
},
{
"type": "string",
"enum": [
"Infinity",
"-Infinity",
"NaN"
]
}
]
}
},
"required": [
"key",
"type"
],
"additionalProperties": false
},
"Form.IntegerField": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"title": {
"type": "string"
},
"description": {
"type": "string"
},
"required": {
"type": "boolean"
},
"when": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Form.When"
}
},
"type": {
"type": "string",
"enum": [
"integer"
]
},
"minimum": {
"anyOf": [
{
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"enum": [
"NaN"
]
},
{
"type": "string",
"enum": [
"Infinity"
]
},
{
"type": "string",
"enum": [
"-Infinity"
]
}
]
},
{
"type": "string",
"enum": [
"Infinity",
"-Infinity",
"NaN"
]
}
]
},
"maximum": {
"anyOf": [
{
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"enum": [
"NaN"
]
},
{
"type": "string",
"enum": [
"Infinity"
]
},
{
"type": "string",
"enum": [
"-Infinity"
]
}
]
},
{
"type": "string",
"enum": [
"Infinity",
"-Infinity",
"NaN"
]
}
]
},
"default": {
"anyOf": [
{
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"enum": [
"NaN"
]
},
{
"type": "string",
"enum": [
"Infinity"
]
},
{
"type": "string",
"enum": [
"-Infinity"
]
}
]
},
{
"type": "string",
"enum": [
"Infinity",
"-Infinity",
"NaN"
]
}
]
}
},
"required": [
"key",
"type"
],
"additionalProperties": false
},
"Form.BooleanField": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"title": {
"type": "string"
},
"description": {
"type": "string"
},
"required": {
"type": "boolean"
},
"when": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Form.When"
}
},
"type": {
"type": "string",
"enum": [
"boolean"
]
},
"default": {
"type": "boolean"
}
},
"required": [
"key",
"type"
],
"additionalProperties": false
},
"Form.MultiselectField": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"title": {
"type": "string"
},
"description": {
"type": "string"
},
"required": {
"type": "boolean"
},
"when": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Form.When"
}
},
"type": {
"type": "string",
"enum": [
"multiselect"
]
},
"options": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Form.Option"
}
},
"minItems": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"maxItems": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"custom": {
"type": "boolean"
},
"default": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"key",
"type",
"options"
],
"additionalProperties": false
},
"Form.FormInfo": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^frm_"
}
]
},
"sessionID": {
"type": "string"
},
"title": {
"type": "string"
},
"metadata": {
"$ref": "#/components/schemas/Form.Metadata"
},
"mode": {
"type": "string",
"enum": [
"form"
]
},
"fields": {
"type": "array",
"items": {
"anyOf": [
{
"$ref": "#/components/schemas/Form.StringField"
},
{
"$ref": "#/components/schemas/Form.NumberField"
},
{
"$ref": "#/components/schemas/Form.IntegerField"
},
{
"$ref": "#/components/schemas/Form.BooleanField"
},
{
"$ref": "#/components/schemas/Form.MultiselectField"
}
]
}
}
},
"required": [
"id",
"sessionID",
"mode",
"fields"
],
"additionalProperties": false
},
"Form.UrlInfo": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^frm_"
}
]
},
"sessionID": {
"type": "string"
},
"title": {
"type": "string"
},
"metadata": {
"$ref": "#/components/schemas/Form.Metadata"
},
"mode": {
"type": "string",
"enum": [
"url"
]
},
"url": {
"type": "string"
}
},
"required": [
"id",
"sessionID",
"mode",
"url"
],
"additionalProperties": false
},
"Form.CreatePayload": {
"type": "object",
"properties": {
"id": {
"anyOf": [
{
"type": "string",
"allOf": [
{
"pattern": "^frm_"
}
]
},
{
"type": "null"
}
]
},
"title": {
"type": "string"
},
"metadata": {
"$ref": "#/components/schemas/Form.Metadata"
},
"mode": {
"type": "string",
"enum": [
"form",
"url"
]
},
"fields": {
"anyOf": [
{
"type": "array",
"items": {
"anyOf": [
{
"$ref": "#/components/schemas/Form.StringField"
},
{
"$ref": "#/components/schemas/Form.NumberField"
},
{
"$ref": "#/components/schemas/Form.IntegerField"
},
{
"$ref": "#/components/schemas/Form.BooleanField"
},
{
"$ref": "#/components/schemas/Form.MultiselectField"
}
]
}
},
{
"type": "null"
}
]
},
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"mode"
],
"additionalProperties": false
},
"FormNotFoundError": {
"type": "object",
"properties": {
"_tag": {
"type": "string",
"enum": [
"FormNotFoundError"
]
},
"id": {
"type": "string"
},
"message": {
"type": "string"
}
},
"required": [
"_tag",
"id",
"message"
],
"additionalProperties": false
},
"Form.Value": {
"anyOf": [
{
"type": "string"
},
{
"anyOf": [
{
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"enum": [
"NaN"
]
},
{
"type": "string",
"enum": [
"Infinity"
]
},
{
"type": "string",
"enum": [
"-Infinity"
]
}
]
},
{
"type": "string",
"enum": [
"Infinity",
"-Infinity",
"NaN"
]
}
]
},
{
"type": "boolean"
},
{
"type": "array",
"items": {
"type": "string"
}
}
]
},
"Form.Answer": {
"type": "object",
"additionalProperties": {
"$ref": "#/components/schemas/Form.Value"
}
},
"Form.State": {
"anyOf": [
{
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"pending"
]
}
},
"required": [
"status"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"answered"
]
},
"answer": {
"$ref": "#/components/schemas/Form.Answer"
}
},
"required": [
"status",
"answer"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"cancelled"
]
}
},
"required": [
"status"
],
"additionalProperties": false
}
]
},
"Form.Reply": {
"type": "object",
"properties": {
"answer": {
"$ref": "#/components/schemas/Form.Answer"
}
},
"required": [
"answer"
],
"additionalProperties": false
},
"FormAlreadySettledError": {
"type": "object",
"properties": {
"_tag": {
"type": "string",
"enum": [
"FormAlreadySettledError"
]
},
"id": {
"type": "string"
},
"message": {
"type": "string"
}
},
"required": [
"_tag",
"id",
"message"
],
"additionalProperties": false
},
"FormInvalidAnswerError": {
"type": "object",
"properties": {
"_tag": {
"type": "string",
"enum": [
"FormInvalidAnswerError"
]
},
"id": {
"type": "string"
},
"message": {
"type": "string"
}
},
"required": [
"_tag",
"id",
"message"
],
"additionalProperties": false
},
"PermissionV2.Source": {
"anyOf": [
{
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"tool"
]
},
"messageID": {
"type": "string"
},
"callID": {
"type": "string"
}
},
"required": [
"type",
"messageID",
"callID"
],
"additionalProperties": false
}
]
},
"PermissionV2.Request": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^per"
}
]
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"action": {
"type": "string"
},
"resources": {
"type": "array",
"items": {
"type": "string"
}
},
"save": {
"type": "array",
"items": {
"type": "string"
}
},
"metadata": {
"type": "object"
},
"source": {
"$ref": "#/components/schemas/PermissionV2.Source"
}
},
"required": [
"id",
"sessionID",
"action",
"resources"
],
"additionalProperties": false
},
"PermissionSaved.Info": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"projectID": {
"type": "string"
},
"action": {
"type": "string"
},
"resource": {
"type": "string"
}
},
"required": [
"id",
"projectID",
"action",
"resource"
],
"additionalProperties": false
},
"PermissionNotFoundError": {
"type": "object",
"properties": {
"_tag": {
"type": "string",
"enum": [
"PermissionNotFoundError"
]
},
"requestID": {
"type": "string"
},
"message": {
"type": "string"
}
},
"required": [
"_tag",
"requestID",
"message"
],
"additionalProperties": false
},
"PermissionV2.Reply": {
"type": "string",
"enum": [
"once",
"always",
"reject"
]
},
"FileSystem.Entry": {
"type": "object",
"properties": {
"path": {
"type": "string"
},
"type": {
"type": "string",
"enum": [
"file",
"directory"
]
}
},
"required": [
"path",
"type"
],
"additionalProperties": false
},
"CommandV2.Info": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"template": {
"type": "string"
},
"description": {
"type": "string"
},
"agent": {
"type": "string"
},
"model": {
"$ref": "#/components/schemas/Model.Ref"
},
"subtask": {
"type": "boolean"
}
},
"required": [
"name",
"template"
],
"additionalProperties": false
},
"SkillV2.Info": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"description": {
"type": "string"
},
"slash": {
"type": "boolean"
},
"autoinvoke": {
"type": "boolean"
},
"location": {
"type": "string"
},
"content": {
"type": "string"
}
},
"required": [
"name",
"location",
"content"
],
"additionalProperties": false
},
"models-dev.refreshed": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"models-dev.refreshed"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"anyOf": [
{
"type": "object"
},
{
"type": "array"
}
]
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"integration.updated": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"integration.updated"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"anyOf": [
{
"type": "object"
},
{
"type": "array"
}
]
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"integration.connection.updated": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"integration.connection.updated"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"integrationID": {
"type": "string"
}
},
"required": [
"integrationID"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"catalog.updated": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"catalog.updated"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"anyOf": [
{
"type": "object"
},
{
"type": "array"
}
]
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"agent.updated": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"agent.updated"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"anyOf": [
{
"type": "object"
},
{
"type": "array"
}
]
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"SnapshotFileDiff": {
"type": "object",
"properties": {
"file": {
"type": "string"
},
"patch": {
"type": "string"
},
"additions": {
"type": "number"
},
"deletions": {
"type": "number"
},
"status": {
"type": "string",
"enum": [
"added",
"deleted",
"modified"
]
}
},
"required": [
"additions",
"deletions"
],
"additionalProperties": false
},
"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"
],
"additionalProperties": false
},
"PermissionRuleset": {
"type": "array",
"items": {
"$ref": "#/components/schemas/PermissionRule"
}
},
"Session": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"slug": {
"type": "string"
},
"projectID": {
"type": "string"
},
"workspaceID": {
"type": "string",
"allOf": [
{
"pattern": "^wrk"
}
]
},
"directory": {
"type": "string"
},
"path": {
"type": "string"
},
"parentID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"summary": {
"type": "object",
"properties": {
"additions": {
"type": "number"
},
"deletions": {
"type": "number"
},
"files": {
"type": "number"
},
"diffs": {
"type": "array",
"items": {
"$ref": "#/components/schemas/SnapshotFileDiff"
}
}
},
"required": [
"additions",
"deletions",
"files"
],
"additionalProperties": false
},
"cost": {
"type": "number"
},
"tokens": {
"type": "object",
"properties": {
"input": {
"type": "number"
},
"output": {
"type": "number"
},
"reasoning": {
"type": "number"
},
"cache": {
"type": "object",
"properties": {
"read": {
"type": "number"
},
"write": {
"type": "number"
}
},
"required": [
"read",
"write"
],
"additionalProperties": false
}
},
"required": [
"input",
"output",
"reasoning",
"cache"
],
"additionalProperties": false
},
"share": {
"type": "object",
"properties": {
"url": {
"type": "string"
}
},
"required": [
"url"
],
"additionalProperties": false
},
"title": {
"type": "string"
},
"agent": {
"type": "string"
},
"model": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"providerID": {
"type": "string"
},
"variant": {
"type": "string"
}
},
"required": [
"id",
"providerID"
],
"additionalProperties": false
},
"version": {
"type": "string"
},
"metadata": {
"type": "object"
},
"time": {
"type": "object",
"properties": {
"created": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"updated": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"compacting": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"archived": {
"type": "number"
}
},
"required": [
"created",
"updated"
],
"additionalProperties": false
},
"permission": {
"$ref": "#/components/schemas/PermissionRuleset"
},
"revert": {
"type": "object",
"properties": {
"messageID": {
"type": "string",
"allOf": [
{
"pattern": "^msg"
}
]
},
"partID": {
"type": "string",
"allOf": [
{
"pattern": "^prt"
}
]
},
"snapshot": {
"type": "string"
},
"diff": {
"type": "string"
}
},
"required": [
"messageID"
],
"additionalProperties": false
}
},
"required": [
"id",
"slug",
"projectID",
"directory",
"title",
"version",
"time"
],
"additionalProperties": false
},
"session.created": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"session.created"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"info": {
"$ref": "#/components/schemas/Session"
}
},
"required": [
"sessionID",
"info"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"session.updated": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"session.updated"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"info": {
"$ref": "#/components/schemas/Session"
}
},
"required": [
"sessionID",
"info"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"session.deleted": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"session.deleted"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"info": {
"$ref": "#/components/schemas/Session"
}
},
"required": [
"sessionID",
"info"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"JSONSchema": {
"type": "object"
},
"OutputFormat": {
"anyOf": [
{
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"text"
]
}
},
"required": [
"type"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"json_schema"
]
},
"schema": {
"$ref": "#/components/schemas/JSONSchema"
},
"retryCount": {
"anyOf": [
{
"anyOf": [
{
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
{
"type": "null"
}
]
},
{
"type": "null"
}
]
}
},
"required": [
"type",
"schema"
],
"additionalProperties": false
}
]
},
"UserMessage": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^msg"
}
]
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"role": {
"type": "string",
"enum": [
"user"
]
},
"time": {
"type": "object",
"properties": {
"created": {
"type": "number",
"allOf": [
{
"minimum": 0
}
]
}
},
"required": [
"created"
],
"additionalProperties": false
},
"format": {
"anyOf": [
{
"$ref": "#/components/schemas/OutputFormat"
},
{
"type": "null"
}
]
},
"summary": {
"anyOf": [
{
"type": "object",
"properties": {
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"body": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"diffs": {
"type": "array",
"items": {
"$ref": "#/components/schemas/SnapshotFileDiff"
}
}
},
"required": [
"diffs"
],
"additionalProperties": false
},
{
"type": "null"
}
]
},
"agent": {
"type": "string"
},
"model": {
"type": "object",
"properties": {
"providerID": {
"type": "string"
},
"modelID": {
"type": "string"
},
"variant": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"providerID",
"modelID"
],
"additionalProperties": false
},
"system": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"tools": {
"anyOf": [
{
"type": "object",
"additionalProperties": {
"type": "boolean"
}
},
{
"type": "null"
}
]
}
},
"required": [
"id",
"sessionID",
"role",
"time",
"agent",
"model"
],
"additionalProperties": false
},
"ProviderAuthError": {
"type": "object",
"properties": {
"name": {
"type": "string",
"enum": [
"ProviderAuthError"
]
},
"data": {
"type": "object",
"properties": {
"providerID": {
"type": "string"
},
"message": {
"type": "string"
}
},
"required": [
"providerID",
"message"
],
"additionalProperties": false
}
},
"required": [
"name",
"data"
],
"additionalProperties": false
},
"UnknownError1": {
"type": "object",
"properties": {
"name": {
"type": "string",
"enum": [
"UnknownError"
]
},
"data": {
"type": "object",
"properties": {
"message": {
"type": "string"
},
"ref": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"message"
],
"additionalProperties": false
}
},
"required": [
"name",
"data"
],
"additionalProperties": false
},
"MessageOutputLengthError": {
"type": "object",
"properties": {
"name": {
"type": "string",
"enum": [
"MessageOutputLengthError"
]
},
"data": {
"anyOf": [
{
"type": "object"
},
{
"type": "array"
}
]
}
},
"required": [
"name",
"data"
],
"additionalProperties": false
},
"MessageAbortedError": {
"type": "object",
"properties": {
"name": {
"type": "string",
"enum": [
"MessageAbortedError"
]
},
"data": {
"type": "object",
"properties": {
"message": {
"type": "string"
}
},
"required": [
"message"
],
"additionalProperties": false
}
},
"required": [
"name",
"data"
],
"additionalProperties": false
},
"StructuredOutputError": {
"type": "object",
"properties": {
"name": {
"type": "string",
"enum": [
"StructuredOutputError"
]
},
"data": {
"type": "object",
"properties": {
"message": {
"type": "string"
},
"retries": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
}
},
"required": [
"message",
"retries"
],
"additionalProperties": false
}
},
"required": [
"name",
"data"
],
"additionalProperties": false
},
"ContextOverflowError": {
"type": "object",
"properties": {
"name": {
"type": "string",
"enum": [
"ContextOverflowError"
]
},
"data": {
"type": "object",
"properties": {
"message": {
"type": "string"
},
"responseBody": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"message"
],
"additionalProperties": false
}
},
"required": [
"name",
"data"
],
"additionalProperties": false
},
"ContentFilterError": {
"type": "object",
"properties": {
"name": {
"type": "string",
"enum": [
"ContentFilterError"
]
},
"data": {
"type": "object",
"properties": {
"message": {
"type": "string"
}
},
"required": [
"message"
],
"additionalProperties": false
}
},
"required": [
"name",
"data"
],
"additionalProperties": false
},
"APIError": {
"type": "object",
"properties": {
"name": {
"type": "string",
"enum": [
"APIError"
]
},
"data": {
"type": "object",
"properties": {
"message": {
"type": "string"
},
"statusCode": {
"anyOf": [
{
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
{
"type": "null"
}
]
},
"isRetryable": {
"type": "boolean"
},
"responseHeaders": {
"anyOf": [
{
"type": "object",
"additionalProperties": {
"type": "string"
}
},
{
"type": "null"
}
]
},
"responseBody": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"anyOf": [
{
"type": "object",
"additionalProperties": {
"type": "string"
}
},
{
"type": "null"
}
]
}
},
"required": [
"message",
"isRetryable"
],
"additionalProperties": false
}
},
"required": [
"name",
"data"
],
"additionalProperties": false
},
"AssistantMessage": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^msg"
}
]
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"role": {
"type": "string",
"enum": [
"assistant"
]
},
"time": {
"type": "object",
"properties": {
"created": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"completed": {
"anyOf": [
{
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
{
"type": "null"
}
]
}
},
"required": [
"created"
],
"additionalProperties": false
},
"error": {
"anyOf": [
{
"anyOf": [
{
"$ref": "#/components/schemas/ProviderAuthError"
},
{
"$ref": "#/components/schemas/UnknownError1"
},
{
"$ref": "#/components/schemas/MessageOutputLengthError"
},
{
"$ref": "#/components/schemas/MessageAbortedError"
},
{
"$ref": "#/components/schemas/StructuredOutputError"
},
{
"$ref": "#/components/schemas/ContextOverflowError"
},
{
"$ref": "#/components/schemas/ContentFilterError"
},
{
"$ref": "#/components/schemas/APIError"
}
]
},
{
"type": "null"
}
]
},
"parentID": {
"type": "string",
"allOf": [
{
"pattern": "^msg"
}
]
},
"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"
],
"additionalProperties": false
},
"summary": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
]
},
"cost": {
"type": "number"
},
"tokens": {
"type": "object",
"properties": {
"total": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"input": {
"type": "number"
},
"output": {
"type": "number"
},
"reasoning": {
"type": "number"
},
"cache": {
"type": "object",
"properties": {
"read": {
"type": "number"
},
"write": {
"type": "number"
}
},
"required": [
"read",
"write"
],
"additionalProperties": false
}
},
"required": [
"input",
"output",
"reasoning",
"cache"
],
"additionalProperties": false
},
"structured": {
"anyOf": [
{},
{
"type": "null"
}
]
},
"variant": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"finish": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"id",
"sessionID",
"role",
"time",
"parentID",
"modelID",
"providerID",
"mode",
"agent",
"path",
"cost",
"tokens"
],
"additionalProperties": false
},
"Message": {
"anyOf": [
{
"$ref": "#/components/schemas/UserMessage"
},
{
"$ref": "#/components/schemas/AssistantMessage"
}
]
},
"message.updated": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"message.updated"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"info": {
"$ref": "#/components/schemas/Message"
}
},
"required": [
"sessionID",
"info"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"message.removed": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"message.removed"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"messageID": {
"type": "string",
"allOf": [
{
"pattern": "^msg"
}
]
}
},
"required": [
"sessionID",
"messageID"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"TextPart": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^prt"
}
]
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"messageID": {
"type": "string",
"allOf": [
{
"pattern": "^msg"
}
]
},
"type": {
"type": "string",
"enum": [
"text"
]
},
"text": {
"type": "string"
},
"synthetic": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
]
},
"ignored": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
]
},
"time": {
"anyOf": [
{
"type": "object",
"properties": {
"start": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"end": {
"anyOf": [
{
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
{
"type": "null"
}
]
}
},
"required": [
"start"
],
"additionalProperties": false
},
{
"type": "null"
}
]
},
"metadata": {
"anyOf": [
{
"type": "object"
},
{
"type": "null"
}
]
}
},
"required": [
"id",
"sessionID",
"messageID",
"type",
"text"
],
"additionalProperties": false
},
"SubtaskPart": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^prt"
}
]
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"messageID": {
"type": "string",
"allOf": [
{
"pattern": "^msg"
}
]
},
"type": {
"type": "string",
"enum": [
"subtask"
]
},
"prompt": {
"type": "string"
},
"description": {
"type": "string"
},
"agent": {
"type": "string"
},
"model": {
"anyOf": [
{
"type": "object",
"properties": {
"providerID": {
"type": "string"
},
"modelID": {
"type": "string"
}
},
"required": [
"providerID",
"modelID"
],
"additionalProperties": false
},
{
"type": "null"
}
]
},
"command": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"id",
"sessionID",
"messageID",
"type",
"prompt",
"description",
"agent"
],
"additionalProperties": false
},
"ReasoningPart": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^prt"
}
]
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"messageID": {
"type": "string",
"allOf": [
{
"pattern": "^msg"
}
]
},
"type": {
"type": "string",
"enum": [
"reasoning"
]
},
"text": {
"type": "string"
},
"metadata": {
"anyOf": [
{
"type": "object"
},
{
"type": "null"
}
]
},
"time": {
"type": "object",
"properties": {
"start": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"end": {
"anyOf": [
{
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
{
"type": "null"
}
]
}
},
"required": [
"start"
],
"additionalProperties": false
}
},
"required": [
"id",
"sessionID",
"messageID",
"type",
"text",
"time"
],
"additionalProperties": false
},
"FilePartSourceText": {
"type": "object",
"properties": {
"value": {
"type": "string"
},
"start": {
"type": "number"
},
"end": {
"type": "number"
}
},
"required": [
"value",
"start",
"end"
],
"additionalProperties": false
},
"FileSource": {
"type": "object",
"properties": {
"text": {
"$ref": "#/components/schemas/FilePartSourceText"
},
"type": {
"type": "string",
"enum": [
"file"
]
},
"path": {
"type": "string"
}
},
"required": [
"text",
"type",
"path"
],
"additionalProperties": false
},
"Range": {
"type": "object",
"properties": {
"start": {
"type": "object",
"properties": {
"line": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"character": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
}
},
"required": [
"line",
"character"
],
"additionalProperties": false
},
"end": {
"type": "object",
"properties": {
"line": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"character": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
}
},
"required": [
"line",
"character"
],
"additionalProperties": false
}
},
"required": [
"start",
"end"
],
"additionalProperties": false
},
"SymbolSource": {
"type": "object",
"properties": {
"text": {
"$ref": "#/components/schemas/FilePartSourceText"
},
"type": {
"type": "string",
"enum": [
"symbol"
]
},
"path": {
"type": "string"
},
"range": {
"$ref": "#/components/schemas/Range"
},
"name": {
"type": "string"
},
"kind": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
}
},
"required": [
"text",
"type",
"path",
"range",
"name",
"kind"
],
"additionalProperties": false
},
"ResourceSource": {
"type": "object",
"properties": {
"text": {
"$ref": "#/components/schemas/FilePartSourceText"
},
"type": {
"type": "string",
"enum": [
"resource"
]
},
"clientName": {
"type": "string"
},
"uri": {
"type": "string"
}
},
"required": [
"text",
"type",
"clientName",
"uri"
],
"additionalProperties": false
},
"FilePartSource": {
"anyOf": [
{
"$ref": "#/components/schemas/FileSource"
},
{
"$ref": "#/components/schemas/SymbolSource"
},
{
"$ref": "#/components/schemas/ResourceSource"
}
]
},
"FilePart": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^prt"
}
]
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"messageID": {
"type": "string",
"allOf": [
{
"pattern": "^msg"
}
]
},
"type": {
"type": "string",
"enum": [
"file"
]
},
"mime": {
"type": "string"
},
"filename": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"url": {
"type": "string"
},
"source": {
"anyOf": [
{
"$ref": "#/components/schemas/FilePartSource"
},
{
"type": "null"
}
]
}
},
"required": [
"id",
"sessionID",
"messageID",
"type",
"mime",
"url"
],
"additionalProperties": false
},
"ToolStatePending": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"pending"
]
},
"input": {
"type": "object"
},
"raw": {
"type": "string"
}
},
"required": [
"status",
"input",
"raw"
],
"additionalProperties": false
},
"ToolStateRunning": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"running"
]
},
"input": {
"type": "object"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"metadata": {
"anyOf": [
{
"type": "object"
},
{
"type": "null"
}
]
},
"time": {
"type": "object",
"properties": {
"start": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
}
},
"required": [
"start"
],
"additionalProperties": false
}
},
"required": [
"status",
"input",
"time"
],
"additionalProperties": false
},
"ToolStateCompleted": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"completed"
]
},
"input": {
"type": "object"
},
"output": {
"type": "string"
},
"title": {
"type": "string"
},
"metadata": {
"type": "object"
},
"time": {
"type": "object",
"properties": {
"start": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"end": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"compacted": {
"anyOf": [
{
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
{
"type": "null"
}
]
}
},
"required": [
"start",
"end"
],
"additionalProperties": false
},
"attachments": {
"anyOf": [
{
"type": "array",
"items": {
"$ref": "#/components/schemas/FilePart"
}
},
{
"type": "null"
}
]
}
},
"required": [
"status",
"input",
"output",
"title",
"metadata",
"time"
],
"additionalProperties": false
},
"ToolStateError": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"error"
]
},
"input": {
"type": "object"
},
"error": {
"type": "string"
},
"metadata": {
"anyOf": [
{
"type": "object"
},
{
"type": "null"
}
]
},
"time": {
"type": "object",
"properties": {
"start": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"end": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
}
},
"required": [
"start",
"end"
],
"additionalProperties": false
}
},
"required": [
"status",
"input",
"error",
"time"
],
"additionalProperties": false
},
"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",
"allOf": [
{
"pattern": "^prt"
}
]
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"messageID": {
"type": "string",
"allOf": [
{
"pattern": "^msg"
}
]
},
"type": {
"type": "string",
"enum": [
"tool"
]
},
"callID": {
"type": "string"
},
"tool": {
"type": "string"
},
"state": {
"$ref": "#/components/schemas/ToolState"
},
"metadata": {
"anyOf": [
{
"type": "object"
},
{
"type": "null"
}
]
}
},
"required": [
"id",
"sessionID",
"messageID",
"type",
"callID",
"tool",
"state"
],
"additionalProperties": false
},
"StepStartPart": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^prt"
}
]
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"messageID": {
"type": "string",
"allOf": [
{
"pattern": "^msg"
}
]
},
"type": {
"type": "string",
"enum": [
"step-start"
]
},
"snapshot": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"id",
"sessionID",
"messageID",
"type"
],
"additionalProperties": false
},
"StepFinishPart": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^prt"
}
]
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"messageID": {
"type": "string",
"allOf": [
{
"pattern": "^msg"
}
]
},
"type": {
"type": "string",
"enum": [
"step-finish"
]
},
"reason": {
"type": "string"
},
"snapshot": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"cost": {
"type": "number"
},
"tokens": {
"type": "object",
"properties": {
"total": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"input": {
"type": "number"
},
"output": {
"type": "number"
},
"reasoning": {
"type": "number"
},
"cache": {
"type": "object",
"properties": {
"read": {
"type": "number"
},
"write": {
"type": "number"
}
},
"required": [
"read",
"write"
],
"additionalProperties": false
}
},
"required": [
"input",
"output",
"reasoning",
"cache"
],
"additionalProperties": false
}
},
"required": [
"id",
"sessionID",
"messageID",
"type",
"reason",
"cost",
"tokens"
],
"additionalProperties": false
},
"SnapshotPart": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^prt"
}
]
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"messageID": {
"type": "string",
"allOf": [
{
"pattern": "^msg"
}
]
},
"type": {
"type": "string",
"enum": [
"snapshot"
]
},
"snapshot": {
"type": "string"
}
},
"required": [
"id",
"sessionID",
"messageID",
"type",
"snapshot"
],
"additionalProperties": false
},
"PatchPart": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^prt"
}
]
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"messageID": {
"type": "string",
"allOf": [
{
"pattern": "^msg"
}
]
},
"type": {
"type": "string",
"enum": [
"patch"
]
},
"hash": {
"type": "string"
},
"files": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"id",
"sessionID",
"messageID",
"type",
"hash",
"files"
],
"additionalProperties": false
},
"AgentPart": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^prt"
}
]
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"messageID": {
"type": "string",
"allOf": [
{
"pattern": "^msg"
}
]
},
"type": {
"type": "string",
"enum": [
"agent"
]
},
"name": {
"type": "string"
},
"source": {
"anyOf": [
{
"type": "object",
"properties": {
"value": {
"type": "string"
},
"start": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"end": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
}
},
"required": [
"value",
"start",
"end"
],
"additionalProperties": false
},
{
"type": "null"
}
]
}
},
"required": [
"id",
"sessionID",
"messageID",
"type",
"name"
],
"additionalProperties": false
},
"RetryPart": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^prt"
}
]
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"messageID": {
"type": "string",
"allOf": [
{
"pattern": "^msg"
}
]
},
"type": {
"type": "string",
"enum": [
"retry"
]
},
"attempt": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"error": {
"$ref": "#/components/schemas/APIError"
},
"time": {
"type": "object",
"properties": {
"created": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
}
},
"required": [
"created"
],
"additionalProperties": false
}
},
"required": [
"id",
"sessionID",
"messageID",
"type",
"attempt",
"error",
"time"
],
"additionalProperties": false
},
"CompactionPart": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^prt"
}
]
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"messageID": {
"type": "string",
"allOf": [
{
"pattern": "^msg"
}
]
},
"type": {
"type": "string",
"enum": [
"compaction"
]
},
"auto": {
"type": "boolean"
},
"overflow": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
]
},
"tail_start_id": {
"anyOf": [
{
"type": "string",
"allOf": [
{
"pattern": "^msg"
}
]
},
{
"type": "null"
}
]
}
},
"required": [
"id",
"sessionID",
"messageID",
"type",
"auto"
],
"additionalProperties": false
},
"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"
}
]
},
"message.part.updated": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"message.part.updated"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"part": {
"$ref": "#/components/schemas/Part"
},
"time": {
"type": "number"
}
},
"required": [
"sessionID",
"part",
"time"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"message.part.removed": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"message.part.removed"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"messageID": {
"type": "string",
"allOf": [
{
"pattern": "^msg"
}
]
},
"partID": {
"type": "string",
"allOf": [
{
"pattern": "^prt"
}
]
}
},
"required": [
"sessionID",
"messageID",
"partID"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"session.next.execution.settled": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"session.next.execution.settled"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"timestamp": {
"type": "number"
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"outcome": {
"type": "string",
"enum": [
"success",
"failure",
"interrupted"
]
},
"error": {
"$ref": "#/components/schemas/Session.Error.Unknown"
}
},
"required": [
"timestamp",
"sessionID",
"outcome"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"session.next.text.delta": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"session.next.text.delta"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"timestamp": {
"type": "number"
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"assistantMessageID": {
"type": "string",
"allOf": [
{
"pattern": "^msg_"
}
]
},
"textID": {
"type": "string"
},
"delta": {
"type": "string"
}
},
"required": [
"timestamp",
"sessionID",
"assistantMessageID",
"textID",
"delta"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"session.next.reasoning.delta": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"session.next.reasoning.delta"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"timestamp": {
"type": "number"
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"assistantMessageID": {
"type": "string",
"allOf": [
{
"pattern": "^msg_"
}
]
},
"reasoningID": {
"type": "string"
},
"delta": {
"type": "string"
}
},
"required": [
"timestamp",
"sessionID",
"assistantMessageID",
"reasoningID",
"delta"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"session.next.tool.input.delta": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"session.next.tool.input.delta"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"timestamp": {
"type": "number"
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"assistantMessageID": {
"type": "string",
"allOf": [
{
"pattern": "^msg_"
}
]
},
"callID": {
"type": "string"
},
"delta": {
"type": "string"
}
},
"required": [
"timestamp",
"sessionID",
"assistantMessageID",
"callID",
"delta"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"session.next.compaction.delta": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"session.next.compaction.delta"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"timestamp": {
"type": "number"
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"messageID": {
"type": "string",
"allOf": [
{
"pattern": "^msg_"
}
]
},
"text": {
"type": "string"
}
},
"required": [
"timestamp",
"sessionID",
"messageID",
"text"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"file.edited": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"file.edited"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"file": {
"type": "string"
}
},
"required": [
"file"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"reference.updated": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"reference.updated"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"anyOf": [
{
"type": "object"
},
{
"type": "array"
}
]
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"permission.v2.asked": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"permission.v2.asked"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^per"
}
]
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"action": {
"type": "string"
},
"resources": {
"type": "array",
"items": {
"type": "string"
}
},
"save": {
"type": "array",
"items": {
"type": "string"
}
},
"metadata": {
"type": "object"
},
"source": {
"$ref": "#/components/schemas/PermissionV2.Source"
}
},
"required": [
"id",
"sessionID",
"action",
"resources"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"permission.v2.replied": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"permission.v2.replied"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"requestID": {
"type": "string",
"allOf": [
{
"pattern": "^per"
}
]
},
"reply": {
"$ref": "#/components/schemas/PermissionV2.Reply"
}
},
"required": [
"sessionID",
"requestID",
"reply"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"plugin.added": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"plugin.added"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"id": {
"type": "string"
}
},
"required": [
"id"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"project.directories.updated": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"project.directories.updated"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"projectID": {
"type": "string"
}
},
"required": [
"projectID"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"command.updated": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"command.updated"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"anyOf": [
{
"type": "object"
},
{
"type": "array"
}
]
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"skill.updated": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"skill.updated"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"anyOf": [
{
"type": "object"
},
{
"type": "array"
}
]
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"file.watcher.updated": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"file.watcher.updated"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"file": {
"type": "string"
},
"event": {
"type": "string",
"enum": [
"add",
"change",
"unlink"
]
}
},
"required": [
"file",
"event"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"Pty": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"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": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"exitCode": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
}
},
"required": [
"id",
"title",
"command",
"args",
"cwd",
"status",
"pid"
],
"additionalProperties": false
},
"pty.created": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"pty.created"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"info": {
"$ref": "#/components/schemas/Pty"
}
},
"required": [
"info"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"pty.updated": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"pty.updated"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"info": {
"$ref": "#/components/schemas/Pty"
}
},
"required": [
"info"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"pty.exited": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"pty.exited"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^pty"
}
]
},
"exitCode": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
}
},
"required": [
"id",
"exitCode"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"pty.deleted": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"pty.deleted"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^pty"
}
]
}
},
"required": [
"id"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"Shell": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^sh_"
}
]
},
"status": {
"type": "string",
"enum": [
"running",
"exited",
"timeout",
"killed"
]
},
"command": {
"type": "string"
},
"cwd": {
"type": "string"
},
"shell": {
"type": "string"
},
"file": {
"type": "string"
},
"pid": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"exit": {
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"enum": [
"NaN"
]
},
{
"type": "string",
"enum": [
"Infinity"
]
},
{
"type": "string",
"enum": [
"-Infinity"
]
}
]
},
"metadata": {
"type": "object"
},
"time": {
"type": "object",
"properties": {
"started": {
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"enum": [
"NaN"
]
},
{
"type": "string",
"enum": [
"Infinity"
]
},
{
"type": "string",
"enum": [
"-Infinity"
]
}
]
},
"completed": {
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"enum": [
"NaN"
]
},
{
"type": "string",
"enum": [
"Infinity"
]
},
{
"type": "string",
"enum": [
"-Infinity"
]
}
]
}
},
"required": [
"started"
],
"additionalProperties": false
}
},
"required": [
"id",
"status",
"command",
"cwd",
"shell",
"file",
"metadata",
"time"
],
"additionalProperties": false
},
"shell.created": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"shell.created"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"info": {
"$ref": "#/components/schemas/Shell"
}
},
"required": [
"info"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"shell.exited": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"shell.exited"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^sh_"
}
]
},
"exit": {
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"enum": [
"NaN"
]
},
{
"type": "string",
"enum": [
"Infinity"
]
},
{
"type": "string",
"enum": [
"-Infinity"
]
}
]
},
"status": {
"type": "string",
"enum": [
"running",
"exited",
"timeout",
"killed"
]
}
},
"required": [
"id",
"status"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"shell.deleted": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"shell.deleted"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^sh_"
}
]
}
},
"required": [
"id"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"QuestionV2.Option": {
"type": "object",
"properties": {
"label": {
"type": "string",
"description": "Display text (1-5 words, concise)"
},
"description": {
"type": "string",
"description": "Explanation of choice"
}
},
"required": [
"label",
"description"
],
"additionalProperties": false
},
"QuestionV2.Info": {
"type": "object",
"properties": {
"question": {
"type": "string",
"description": "Complete question"
},
"header": {
"type": "string",
"description": "Very short label (max 30 chars)"
},
"options": {
"type": "array",
"items": {
"$ref": "#/components/schemas/QuestionV2.Option"
},
"description": "Available choices"
},
"multiple": {
"type": "boolean"
},
"custom": {
"type": "boolean"
}
},
"required": [
"question",
"header",
"options"
],
"additionalProperties": false
},
"QuestionV2.Tool": {
"type": "object",
"properties": {
"messageID": {
"type": "string"
},
"callID": {
"type": "string"
}
},
"required": [
"messageID",
"callID"
],
"additionalProperties": false
},
"question.v2.asked": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"question.v2.asked"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^que"
}
]
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"questions": {
"type": "array",
"items": {
"$ref": "#/components/schemas/QuestionV2.Info"
},
"description": "Questions to ask"
},
"tool": {
"$ref": "#/components/schemas/QuestionV2.Tool"
}
},
"required": [
"id",
"sessionID",
"questions"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"QuestionV2.Answer": {
"type": "array",
"items": {
"type": "string"
}
},
"question.v2.replied": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"question.v2.replied"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"requestID": {
"type": "string",
"allOf": [
{
"pattern": "^que"
}
]
},
"answers": {
"type": "array",
"items": {
"$ref": "#/components/schemas/QuestionV2.Answer"
}
}
},
"required": [
"sessionID",
"requestID",
"answers"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"question.v2.rejected": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"question.v2.rejected"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"requestID": {
"type": "string",
"allOf": [
{
"pattern": "^que"
}
]
}
},
"required": [
"sessionID",
"requestID"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"Form.Metadata1": {
"type": "object"
},
"Form.When1": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"op": {
"type": "string",
"enum": [
"eq",
"neq"
]
},
"value": {
"anyOf": [
{
"type": "string"
},
{
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"enum": [
"NaN"
]
},
{
"type": "string",
"enum": [
"Infinity"
]
},
{
"type": "string",
"enum": [
"-Infinity"
]
}
]
},
{
"type": "boolean"
}
]
}
},
"required": [
"key",
"op",
"value"
],
"additionalProperties": false
},
"Form.StringField1": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"title": {
"type": "string"
},
"description": {
"type": "string"
},
"required": {
"type": "boolean"
},
"when": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Form.When1"
}
},
"type": {
"type": "string",
"enum": [
"string"
]
},
"format": {
"type": "string",
"enum": [
"email",
"uri",
"date",
"date-time"
]
},
"minLength": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"maxLength": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"pattern": {
"type": "string"
},
"placeholder": {
"type": "string"
},
"default": {
"type": "string"
},
"options": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Form.Option"
}
},
"custom": {
"type": "boolean"
}
},
"required": [
"key",
"type"
],
"additionalProperties": false
},
"Form.NumberField1": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"title": {
"type": "string"
},
"description": {
"type": "string"
},
"required": {
"type": "boolean"
},
"when": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Form.When1"
}
},
"type": {
"type": "string",
"enum": [
"number"
]
},
"minimum": {
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"enum": [
"NaN"
]
},
{
"type": "string",
"enum": [
"Infinity"
]
},
{
"type": "string",
"enum": [
"-Infinity"
]
}
]
},
"maximum": {
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"enum": [
"NaN"
]
},
{
"type": "string",
"enum": [
"Infinity"
]
},
{
"type": "string",
"enum": [
"-Infinity"
]
}
]
},
"default": {
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"enum": [
"NaN"
]
},
{
"type": "string",
"enum": [
"Infinity"
]
},
{
"type": "string",
"enum": [
"-Infinity"
]
}
]
}
},
"required": [
"key",
"type"
],
"additionalProperties": false
},
"Form.IntegerField1": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"title": {
"type": "string"
},
"description": {
"type": "string"
},
"required": {
"type": "boolean"
},
"when": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Form.When1"
}
},
"type": {
"type": "string",
"enum": [
"integer"
]
},
"minimum": {
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"enum": [
"NaN"
]
},
{
"type": "string",
"enum": [
"Infinity"
]
},
{
"type": "string",
"enum": [
"-Infinity"
]
}
]
},
"maximum": {
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"enum": [
"NaN"
]
},
{
"type": "string",
"enum": [
"Infinity"
]
},
{
"type": "string",
"enum": [
"-Infinity"
]
}
]
},
"default": {
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"enum": [
"NaN"
]
},
{
"type": "string",
"enum": [
"Infinity"
]
},
{
"type": "string",
"enum": [
"-Infinity"
]
}
]
}
},
"required": [
"key",
"type"
],
"additionalProperties": false
},
"Form.BooleanField1": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"title": {
"type": "string"
},
"description": {
"type": "string"
},
"required": {
"type": "boolean"
},
"when": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Form.When1"
}
},
"type": {
"type": "string",
"enum": [
"boolean"
]
},
"default": {
"type": "boolean"
}
},
"required": [
"key",
"type"
],
"additionalProperties": false
},
"Form.MultiselectField1": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"title": {
"type": "string"
},
"description": {
"type": "string"
},
"required": {
"type": "boolean"
},
"when": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Form.When1"
}
},
"type": {
"type": "string",
"enum": [
"multiselect"
]
},
"options": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Form.Option"
}
},
"minItems": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"maxItems": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"custom": {
"type": "boolean"
},
"default": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"key",
"type",
"options"
],
"additionalProperties": false
},
"Form.FormInfo1": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^frm_"
}
]
},
"sessionID": {
"type": "string"
},
"title": {
"type": "string"
},
"metadata": {
"$ref": "#/components/schemas/Form.Metadata1"
},
"mode": {
"type": "string",
"enum": [
"form"
]
},
"fields": {
"type": "array",
"items": {
"anyOf": [
{
"$ref": "#/components/schemas/Form.StringField1"
},
{
"$ref": "#/components/schemas/Form.NumberField1"
},
{
"$ref": "#/components/schemas/Form.IntegerField1"
},
{
"$ref": "#/components/schemas/Form.BooleanField1"
},
{
"$ref": "#/components/schemas/Form.MultiselectField1"
}
]
}
}
},
"required": [
"id",
"sessionID",
"mode",
"fields"
],
"additionalProperties": false
},
"Form.UrlInfo1": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^frm_"
}
]
},
"sessionID": {
"type": "string"
},
"title": {
"type": "string"
},
"metadata": {
"$ref": "#/components/schemas/Form.Metadata1"
},
"mode": {
"type": "string",
"enum": [
"url"
]
},
"url": {
"type": "string"
}
},
"required": [
"id",
"sessionID",
"mode",
"url"
],
"additionalProperties": false
},
"form.created": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"form.created"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"form": {
"anyOf": [
{
"$ref": "#/components/schemas/Form.FormInfo1"
},
{
"$ref": "#/components/schemas/Form.UrlInfo1"
}
]
}
},
"required": [
"form"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"Form.Value1": {
"anyOf": [
{
"type": "string"
},
{
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"enum": [
"NaN"
]
},
{
"type": "string",
"enum": [
"Infinity"
]
},
{
"type": "string",
"enum": [
"-Infinity"
]
}
]
},
{
"type": "boolean"
},
{
"type": "array",
"items": {
"type": "string"
}
}
]
},
"Form.Answer1": {
"type": "object",
"additionalProperties": {
"$ref": "#/components/schemas/Form.Value1"
}
},
"form.replied": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"form.replied"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^frm_"
}
]
},
"sessionID": {
"type": "string"
},
"answer": {
"$ref": "#/components/schemas/Form.Answer1"
}
},
"required": [
"id",
"sessionID",
"answer"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"form.cancelled": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"form.cancelled"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^frm_"
}
]
},
"sessionID": {
"type": "string"
}
},
"required": [
"id",
"sessionID"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"Todo": {
"type": "object",
"properties": {
"content": {
"type": "string",
"description": "Brief description of the task"
},
"status": {
"type": "string",
"description": "Current status of the task: pending, in_progress, completed, cancelled"
},
"priority": {
"type": "string",
"description": "Priority level of the task: high, medium, low"
}
},
"required": [
"content",
"status",
"priority"
],
"additionalProperties": false
},
"todo.updated": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"todo.updated"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"todos": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Todo"
}
}
},
"required": [
"sessionID",
"todos"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"SessionStatus": {
"anyOf": [
{
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"idle"
]
}
},
"required": [
"type"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"retry"
]
},
"attempt": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"message": {
"type": "string"
},
"action": {
"type": "object",
"properties": {
"reason": {
"type": "string"
},
"provider": {
"type": "string"
},
"title": {
"type": "string"
},
"message": {
"type": "string"
},
"label": {
"type": "string"
},
"link": {
"type": "string"
}
},
"required": [
"reason",
"provider",
"title",
"message",
"label"
],
"additionalProperties": false
},
"next": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
}
},
"required": [
"type",
"attempt",
"message",
"next"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"busy"
]
}
},
"required": [
"type"
],
"additionalProperties": false
}
]
},
"session.status": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"session.status"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"status": {
"$ref": "#/components/schemas/SessionStatus"
}
},
"required": [
"sessionID",
"status"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"session.idle": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"session.idle"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
}
},
"required": [
"sessionID"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"tui.prompt.append": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"tui.prompt.append"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"text": {
"type": "string"
}
},
"required": [
"text"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"tui.command.execute": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"tui.command.execute"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"command": {
"anyOf": [
{
"type": "string",
"enum": [
"session.list",
"session.new",
"session.share",
"session.interrupt",
"session.background",
"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"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"tui.toast.show": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"tui.toast.show"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"title": {
"type": "string"
},
"message": {
"type": "string"
},
"variant": {
"type": "string",
"enum": [
"info",
"success",
"warning",
"error"
]
},
"duration": {
"anyOf": [
{
"type": "integer",
"allOf": [
{
"exclusiveMinimum": 0
}
]
},
{
"type": "null"
}
]
}
},
"required": [
"message",
"variant"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"tui.session.select": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"tui.session.select"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses",
"description": "Session ID to navigate to"
}
]
}
},
"required": [
"sessionID"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"installation.updated": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"installation.updated"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"version": {
"type": "string"
}
},
"required": [
"version"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"installation.update-available": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"installation.update-available"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"version": {
"type": "string"
}
},
"required": [
"version"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"vcs.branch.updated": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"vcs.branch.updated"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"branch": {
"type": "string"
}
},
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"mcp.status.changed": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"mcp.status.changed"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"server": {
"type": "string"
}
},
"required": [
"server"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"permission.asked": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"permission.asked"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^per"
}
]
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"permission": {
"type": "string"
},
"patterns": {
"type": "array",
"items": {
"type": "string"
}
},
"metadata": {
"type": "object"
},
"always": {
"type": "array",
"items": {
"type": "string"
}
},
"tool": {
"anyOf": [
{
"type": "object",
"properties": {
"messageID": {
"type": "string"
},
"callID": {
"type": "string"
}
},
"required": [
"messageID",
"callID"
],
"additionalProperties": false
},
{
"type": "null"
}
]
}
},
"required": [
"id",
"sessionID",
"permission",
"patterns",
"metadata",
"always"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"permission.replied": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"permission.replied"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"requestID": {
"type": "string",
"allOf": [
{
"pattern": "^per"
}
]
},
"reply": {
"type": "string",
"enum": [
"once",
"always",
"reject"
]
}
},
"required": [
"sessionID",
"requestID",
"reply"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"QuestionOption": {
"type": "object",
"properties": {
"label": {
"type": "string",
"description": "Display text (1-5 words, concise)"
},
"description": {
"type": "string",
"description": "Explanation of choice"
}
},
"required": [
"label",
"description"
],
"additionalProperties": false
},
"QuestionInfo": {
"type": "object",
"properties": {
"question": {
"type": "string",
"description": "Complete question"
},
"header": {
"type": "string",
"description": "Very short label (max 30 chars)"
},
"options": {
"type": "array",
"items": {
"$ref": "#/components/schemas/QuestionOption"
},
"description": "Available choices"
},
"multiple": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"description": "Allow selecting multiple choices"
},
"custom": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"description": "Allow typing a custom answer (default: true)"
}
},
"required": [
"question",
"header",
"options"
],
"additionalProperties": false
},
"QuestionTool": {
"type": "object",
"properties": {
"messageID": {
"type": "string",
"allOf": [
{
"pattern": "^msg"
}
]
},
"callID": {
"type": "string"
}
},
"required": [
"messageID",
"callID"
],
"additionalProperties": false
},
"question.asked": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"question.asked"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^que"
}
]
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"questions": {
"type": "array",
"items": {
"$ref": "#/components/schemas/QuestionInfo"
},
"description": "Questions to ask"
},
"tool": {
"anyOf": [
{
"$ref": "#/components/schemas/QuestionTool"
},
{
"type": "null"
}
]
}
},
"required": [
"id",
"sessionID",
"questions"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"QuestionAnswer": {
"type": "array",
"items": {
"type": "string"
}
},
"question.replied": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"question.replied"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"requestID": {
"type": "string",
"allOf": [
{
"pattern": "^que"
}
]
},
"answers": {
"type": "array",
"items": {
"$ref": "#/components/schemas/QuestionAnswer"
}
}
},
"required": [
"sessionID",
"requestID",
"answers"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"question.rejected": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"question.rejected"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"requestID": {
"type": "string",
"allOf": [
{
"pattern": "^que"
}
]
}
},
"required": [
"sessionID",
"requestID"
],
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"session.error": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"type": "object"
},
"type": {
"type": "string",
"enum": [
"session.error"
]
},
"durable": {
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
"location": {
"$ref": "#/components/schemas/Location.Ref"
},
"data": {
"type": "object",
"properties": {
"sessionID": {
"anyOf": [
{
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
{
"type": "null"
}
]
},
"error": {
"anyOf": [
{
"anyOf": [
{
"$ref": "#/components/schemas/ProviderAuthError"
},
{
"$ref": "#/components/schemas/UnknownError1"
},
{
"$ref": "#/components/schemas/MessageOutputLengthError"
},
{
"$ref": "#/components/schemas/MessageAbortedError"
},
{
"$ref": "#/components/schemas/StructuredOutputError"
},
{
"$ref": "#/components/schemas/ContextOverflowError"
},
{
"$ref": "#/components/schemas/ContentFilterError"
},
{
"$ref": "#/components/schemas/APIError"
}
]
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"V2Event.server.connected": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^evt_"
}
]
},
"metadata": {
"anyOf": [
{
"type": "object"
},
{
"type": "null"
}
]
},
"durable": {
"anyOf": [
{
"type": "object",
"properties": {
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"version": {
"type": "integer",
"allOf": [
{
"minimum": 1
}
]
}
},
"required": [
"aggregateID",
"seq",
"version"
],
"additionalProperties": false
},
{
"type": "null"
}
]
},
"location": {
"anyOf": [
{
"$ref": "#/components/schemas/Location.Ref"
},
{
"type": "null"
}
]
},
"type": {
"type": "string",
"enum": [
"server.connected"
]
},
"data": {
"anyOf": [
{
"type": "object"
},
{
"type": "array"
}
]
}
},
"required": [
"id",
"type",
"data"
],
"additionalProperties": false
},
"V2Event": {
"anyOf": [
{
"$ref": "#/components/schemas/models-dev.refreshed"
},
{
"$ref": "#/components/schemas/integration.updated"
},
{
"$ref": "#/components/schemas/integration.connection.updated"
},
{
"$ref": "#/components/schemas/catalog.updated"
},
{
"$ref": "#/components/schemas/agent.updated"
},
{
"$ref": "#/components/schemas/session.created"
},
{
"$ref": "#/components/schemas/session.updated"
},
{
"$ref": "#/components/schemas/session.deleted"
},
{
"$ref": "#/components/schemas/message.updated"
},
{
"$ref": "#/components/schemas/message.removed"
},
{
"$ref": "#/components/schemas/message.part.updated"
},
{
"$ref": "#/components/schemas/message.part.removed"
},
{
"$ref": "#/components/schemas/session.next.agent.switched"
},
{
"$ref": "#/components/schemas/session.next.model.switched"
},
{
"$ref": "#/components/schemas/session.next.moved"
},
{
"$ref": "#/components/schemas/session.next.renamed"
},
{
"$ref": "#/components/schemas/session.next.forked"
},
{
"$ref": "#/components/schemas/session.next.prompted"
},
{
"$ref": "#/components/schemas/session.next.prompt.admitted"
},
{
"$ref": "#/components/schemas/session.next.execution.settled"
},
{
"$ref": "#/components/schemas/session.next.context.updated"
},
{
"$ref": "#/components/schemas/session.next.synthetic"
},
{
"$ref": "#/components/schemas/session.next.skill.activated"
},
{
"$ref": "#/components/schemas/session.next.shell.started"
},
{
"$ref": "#/components/schemas/session.next.shell.ended"
},
{
"$ref": "#/components/schemas/session.next.step.started"
},
{
"$ref": "#/components/schemas/session.next.step.ended"
},
{
"$ref": "#/components/schemas/session.next.step.failed"
},
{
"$ref": "#/components/schemas/session.next.text.started"
},
{
"$ref": "#/components/schemas/session.next.text.delta"
},
{
"$ref": "#/components/schemas/session.next.text.ended"
},
{
"$ref": "#/components/schemas/session.next.reasoning.started"
},
{
"$ref": "#/components/schemas/session.next.reasoning.delta"
},
{
"$ref": "#/components/schemas/session.next.reasoning.ended"
},
{
"$ref": "#/components/schemas/session.next.tool.input.started"
},
{
"$ref": "#/components/schemas/session.next.tool.input.delta"
},
{
"$ref": "#/components/schemas/session.next.tool.input.ended"
},
{
"$ref": "#/components/schemas/session.next.tool.called"
},
{
"$ref": "#/components/schemas/session.next.tool.progress"
},
{
"$ref": "#/components/schemas/session.next.tool.success"
},
{
"$ref": "#/components/schemas/session.next.tool.failed"
},
{
"$ref": "#/components/schemas/session.next.retried"
},
{
"$ref": "#/components/schemas/session.next.compaction.started"
},
{
"$ref": "#/components/schemas/session.next.compaction.delta"
},
{
"$ref": "#/components/schemas/session.next.compaction.ended"
},
{
"$ref": "#/components/schemas/session.next.revert.staged"
},
{
"$ref": "#/components/schemas/session.next.revert.cleared"
},
{
"$ref": "#/components/schemas/session.next.revert.committed"
},
{
"$ref": "#/components/schemas/file.edited"
},
{
"$ref": "#/components/schemas/reference.updated"
},
{
"$ref": "#/components/schemas/permission.v2.asked"
},
{
"$ref": "#/components/schemas/permission.v2.replied"
},
{
"$ref": "#/components/schemas/plugin.added"
},
{
"$ref": "#/components/schemas/project.directories.updated"
},
{
"$ref": "#/components/schemas/command.updated"
},
{
"$ref": "#/components/schemas/skill.updated"
},
{
"$ref": "#/components/schemas/file.watcher.updated"
},
{
"$ref": "#/components/schemas/pty.created"
},
{
"$ref": "#/components/schemas/pty.updated"
},
{
"$ref": "#/components/schemas/pty.exited"
},
{
"$ref": "#/components/schemas/pty.deleted"
},
{
"$ref": "#/components/schemas/shell.created"
},
{
"$ref": "#/components/schemas/shell.exited"
},
{
"$ref": "#/components/schemas/shell.deleted"
},
{
"$ref": "#/components/schemas/question.v2.asked"
},
{
"$ref": "#/components/schemas/question.v2.replied"
},
{
"$ref": "#/components/schemas/question.v2.rejected"
},
{
"$ref": "#/components/schemas/form.created"
},
{
"$ref": "#/components/schemas/form.replied"
},
{
"$ref": "#/components/schemas/form.cancelled"
},
{
"$ref": "#/components/schemas/todo.updated"
},
{
"$ref": "#/components/schemas/session.status"
},
{
"$ref": "#/components/schemas/session.idle"
},
{
"$ref": "#/components/schemas/tui.prompt.append"
},
{
"$ref": "#/components/schemas/tui.command.execute"
},
{
"$ref": "#/components/schemas/tui.toast.show"
},
{
"$ref": "#/components/schemas/tui.session.select"
},
{
"$ref": "#/components/schemas/installation.updated"
},
{
"$ref": "#/components/schemas/installation.update-available"
},
{
"$ref": "#/components/schemas/vcs.branch.updated"
},
{
"$ref": "#/components/schemas/mcp.status.changed"
},
{
"$ref": "#/components/schemas/permission.asked"
},
{
"$ref": "#/components/schemas/permission.replied"
},
{
"$ref": "#/components/schemas/question.asked"
},
{
"$ref": "#/components/schemas/question.replied"
},
{
"$ref": "#/components/schemas/question.rejected"
},
{
"$ref": "#/components/schemas/session.error"
},
{
"$ref": "#/components/schemas/V2Event.server.connected"
}
]
},
"V2EventStream": {
"type": "string",
"contentSchema": {
"$ref": "#/components/schemas/V2Event"
},
"contentMediaType": "application/json"
},
"EventLog.Hint": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"log.hint"
]
},
"aggregateID": {
"type": "string"
},
"seq": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
}
},
"required": [
"type",
"aggregateID",
"seq"
],
"additionalProperties": false,
"description": "Payload-free change hint: the aggregate's durable log advanced to at least seq. Hints coalesce under backpressure (latest per aggregate) and are never a delivery guarantee."
},
"EventLog.SweepRequired": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"log.sweep_required"
]
}
},
"required": [
"type"
],
"additionalProperties": false,
"description": "Hints may have been lost; treat every aggregate as potentially dirty and recover via bounded sweep plus durable log reads. Emitted first on every (re)subscribe."
},
"EventLog.Change": {
"anyOf": [
{
"$ref": "#/components/schemas/EventLog.Hint"
},
{
"$ref": "#/components/schemas/EventLog.SweepRequired"
}
]
},
"EventLog.ChangeStream": {
"type": "string",
"contentSchema": {
"$ref": "#/components/schemas/EventLog.Change"
},
"contentMediaType": "application/json"
},
"PtyNotFoundError": {
"type": "object",
"properties": {
"_tag": {
"type": "string",
"enum": [
"PtyNotFoundError"
]
},
"ptyID": {
"type": "string"
},
"message": {
"type": "string"
}
},
"required": [
"_tag",
"ptyID",
"message"
],
"additionalProperties": false
},
"PtyTicket.ConnectToken": {
"type": "object",
"properties": {
"ticket": {
"type": "string"
},
"expires_in": {
"type": "integer",
"allOf": [
{
"exclusiveMinimum": 0
}
]
}
},
"required": [
"ticket",
"expires_in"
],
"additionalProperties": false
},
"ForbiddenError": {
"type": "object",
"properties": {
"_tag": {
"type": "string",
"enum": [
"ForbiddenError"
]
},
"message": {
"type": "string"
}
},
"required": [
"_tag",
"message"
],
"additionalProperties": false
},
"Shell1": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^sh_"
}
]
},
"status": {
"type": "string",
"enum": [
"running",
"exited",
"timeout",
"killed"
]
},
"command": {
"type": "string"
},
"cwd": {
"type": "string"
},
"shell": {
"type": "string"
},
"file": {
"type": "string"
},
"pid": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"exit": {
"anyOf": [
{
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"enum": [
"NaN"
]
},
{
"type": "string",
"enum": [
"Infinity"
]
},
{
"type": "string",
"enum": [
"-Infinity"
]
}
]
},
{
"type": "string",
"enum": [
"Infinity",
"-Infinity",
"NaN"
]
}
]
},
"metadata": {
"type": "object"
},
"time": {
"type": "object",
"properties": {
"started": {
"anyOf": [
{
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"enum": [
"NaN"
]
},
{
"type": "string",
"enum": [
"Infinity"
]
},
{
"type": "string",
"enum": [
"-Infinity"
]
}
]
},
{
"type": "string",
"enum": [
"Infinity",
"-Infinity",
"NaN"
]
}
]
},
"completed": {
"anyOf": [
{
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"enum": [
"NaN"
]
},
{
"type": "string",
"enum": [
"Infinity"
]
},
{
"type": "string",
"enum": [
"-Infinity"
]
}
]
},
{
"type": "string",
"enum": [
"Infinity",
"-Infinity",
"NaN"
]
}
]
}
},
"required": [
"started"
],
"additionalProperties": false
}
},
"required": [
"id",
"status",
"command",
"cwd",
"shell",
"file",
"metadata",
"time"
],
"additionalProperties": false
},
"ShellNotFoundError": {
"type": "object",
"properties": {
"_tag": {
"type": "string",
"enum": [
"ShellNotFoundError"
]
},
"id": {
"type": "string"
},
"message": {
"type": "string"
}
},
"required": [
"_tag",
"id",
"message"
],
"additionalProperties": false
},
"QuestionV2.Request": {
"type": "object",
"properties": {
"id": {
"type": "string",
"allOf": [
{
"pattern": "^que"
}
]
},
"sessionID": {
"type": "string",
"allOf": [
{
"pattern": "^ses"
}
]
},
"questions": {
"type": "array",
"items": {
"$ref": "#/components/schemas/QuestionV2.Info"
},
"description": "Questions to ask"
},
"tool": {
"$ref": "#/components/schemas/QuestionV2.Tool"
}
},
"required": [
"id",
"sessionID",
"questions"
],
"additionalProperties": false
},
"QuestionV2.Reply": {
"type": "object",
"properties": {
"answers": {
"type": "array",
"items": {
"$ref": "#/components/schemas/QuestionV2.Answer"
},
"description": "User answers in order of questions (each answer is an array of selected labels)"
}
},
"required": [
"answers"
],
"additionalProperties": false
},
"QuestionNotFoundError": {
"type": "object",
"properties": {
"_tag": {
"type": "string",
"enum": [
"QuestionNotFoundError"
]
},
"requestID": {
"type": "string"
},
"message": {
"type": "string"
}
},
"required": [
"_tag",
"requestID",
"message"
],
"additionalProperties": false
},
"Reference.LocalSource": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"local"
]
},
"path": {
"type": "string"
},
"description": {
"type": "string"
},
"hidden": {
"type": "boolean"
}
},
"required": [
"type",
"path"
],
"additionalProperties": false
},
"Reference.GitSource": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"git"
]
},
"repository": {
"type": "string"
},
"branch": {
"type": "string"
},
"description": {
"type": "string"
},
"hidden": {
"type": "boolean"
}
},
"required": [
"type",
"repository"
],
"additionalProperties": false
},
"Reference.Source": {
"anyOf": [
{
"$ref": "#/components/schemas/Reference.LocalSource"
},
{
"$ref": "#/components/schemas/Reference.GitSource"
}
]
},
"Reference.Info": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"path": {
"type": "string"
},
"description": {
"type": "string"
},
"hidden": {
"type": "boolean"
},
"source": {
"$ref": "#/components/schemas/Reference.Source"
}
},
"required": [
"name",
"path",
"source"
],
"additionalProperties": false
},
"ProjectCopy.Copy": {
"type": "object",
"properties": {
"directory": {
"type": "string"
}
},
"required": [
"directory"
],
"additionalProperties": false
},
"ProjectCopyError": {
"type": "object",
"properties": {
"name": {
"type": "string",
"enum": [
"ProjectCopyError"
]
},
"data": {
"type": "object",
"properties": {
"message": {
"type": "string"
},
"forceRequired": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
]
}
},
"required": [
"message"
],
"additionalProperties": false
}
},
"required": [
"name",
"data"
],
"additionalProperties": false
},
"Vcs.FileStatus": {
"type": "object",
"properties": {
"file": {
"type": "string"
},
"additions": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"deletions": {
"type": "integer",
"allOf": [
{
"minimum": 0
}
]
},
"status": {
"type": "string",
"enum": [
"added",
"deleted",
"modified"
]
}
},
"required": [
"file",
"additions",
"deletions",
"status"
],
"additionalProperties": false
},
"Vcs.Mode": {
"type": "string",
"enum": [
"working",
"branch"
]
}
},
"securitySchemes": {}
},
"security": [],
"tags": [
{
"name": "server.health"
},
{
"name": "server.location"
},
{
"name": "server.agent"
},
{
"name": "plugins",
"description": "Experimental plugin routes."
},
{
"name": "sessions",
"description": "Experimental session routes."
},
{
"name": "messages",
"description": "Experimental message routes."
},
{
"name": "models",
"description": "Experimental model routes."
},
{
"name": "generate",
"description": "Experimental one-shot generation routes."
},
{
"name": "providers",
"description": "Experimental provider routes."
},
{
"name": "integrations",
"description": "Integration discovery and authentication routes."
},
{
"name": "mcp",
"description": "MCP server status routes."
},
{
"name": "server.credential"
},
{
"name": "projects",
"description": "Location-scoped project routes."
},
{
"name": "forms",
"description": "Session form routes."
},
{
"name": "permissions",
"description": "Experimental permission routes."
},
{
"name": "filesystem",
"description": "Experimental location-scoped filesystem routes."
},
{
"name": "commands",
"description": "Experimental command routes."
},
{
"name": "skills",
"description": "Experimental skill routes."
},
{
"name": "events",
"description": "Experimental event stream routes."
},
{
"name": "pty",
"description": "Experimental location-scoped PTY routes."
},
{
"name": "shell",
"description": "Experimental location-scoped shell command routes."
},
{
"name": "session questions",
"description": "Experimental session question routes."
},
{
"name": "reference",
"description": "Location-scoped project references."
},
{
"name": "projectCopy",
"description": "Project copy management routes."
},
{
"name": "vcs",
"description": "Location-scoped version control routes."
}
]
}
+443
View File
@@ -0,0 +1,443 @@
import { describe, expect, test } from "bun:test"
import { Effect, Layer, Option } from "effect"
import { HttpClient, HttpClientRequest, HttpClientResponse } from "effect/unstable/http"
import { CodeMode, OpenAPI } from "../src/index.js"
import type { Document } from "../src/openapi/types.js"
import { inputTypeScript, outputTypeScript, Tool } from "../src/tool.js"
const baseUrl = "http://localhost:4096"
const methods = new Set(["get", "put", "post", "delete", "options", "head", "patch", "trace"])
type Recorded = {
readonly method: string
readonly url: string
readonly headers: Record<string, string>
readonly body: unknown
}
const opencodeSpec = async (): Promise<Document> => {
return Bun.file(new URL("./fixtures/opencode-v2-openapi.json", import.meta.url)).json() as Promise<Document>
}
const isRecord = (value: unknown): value is Record<string, unknown> =>
typeof value === "object" && value !== null && !Array.isArray(value)
const operations = (spec: Document) =>
Object.entries(isRecord(spec.paths) ? spec.paths : {}).flatMap(([path, pathValue]) =>
isRecord(pathValue)
? Object.entries(pathValue).flatMap(([method, operation]) =>
methods.has(method) && isRecord(operation) ? [{ path, method, operation }] : [],
)
: [],
)
const nonEmptyString = (value: unknown): string | undefined =>
typeof value === "string" && value !== "" ? value : undefined
const toolPathEntries = (spec: Document) => {
const used = new Set<string>()
const namespaces = new Set<string>()
return operations(spec)
.filter((item) => {
if (item.operation["x-websocket"] === true) return false
const responses = isRecord(item.operation.responses) ? item.operation.responses : {}
return !Object.entries(responses).some(
([status, response]) =>
(/^2\d\d$/.test(status) || status.toUpperCase() === "2XX") &&
isRecord(response) &&
isRecord(response.content) &&
Object.keys(response.content).some(
(mediaType) => mediaType.split(";")[0]?.trim().toLowerCase() === "text/event-stream",
),
)
})
.map((item) => {
const { path, method, operation } = item
const raw = nonEmptyString(operation.operationId)
const segments = (raw === undefined ? [`${method}_${path.replaceAll(/[{}]/g, "")}`] : raw.split("."))
.map(
(segment) =>
segment
.replaceAll(/[^A-Za-z0-9_$]+/g, "_")
.replace(/^_+|_+$/g, "")
.replace(/^([0-9])/, "_$1") || "operation",
)
.map((segment) => (["__proto__", "constructor", "prototype"].includes(segment) ? `${segment}_2` : segment))
const key = segments.join(".")
const prefixUsed = segments.slice(0, -1).some((_, index) => used.has(segments.slice(0, index + 1).join(".")))
const conflict = segments.slice(0, -1).findIndex((_, index) => used.has(segments.slice(0, index + 1).join(".")))
const collapsed =
conflict >= 0 && conflict + 1 < segments.length
? segments.flatMap((segment, index) => {
if (index === conflict) {
const next = segments[index + 1] ?? ""
return [`${segment}${next.charAt(0).toUpperCase()}${next.slice(1)}`]
}
return index === conflict + 1 ? [] : [segment]
})
: undefined
const collapsedKey = collapsed?.join(".")
const name =
collapsedKey !== undefined && !used.has(collapsedKey) && !namespaces.has(collapsedKey)
? collapsedKey
: used.has(key) || namespaces.has(key) || prefixUsed
? `${segments.join("_")}_2`
: key
used.add(name)
for (const index of name.split(".").slice(0, -1).keys())
namespaces.add(
name
.split(".")
.slice(0, index + 1)
.join("."),
)
return { ...item, name }
})
}
const toolAt = (tools: unknown, name: string) =>
name.split(".").reduce<unknown>((current, segment) => (isRecord(current) ? current[segment] : undefined), tools)
const jsonContentSchema = (content: unknown) =>
isRecord(content)
? Object.entries(content).find(([mediaType]) => {
const normalized = mediaType.split(";")[0]?.trim().toLowerCase() ?? ""
return normalized === "application/json" || normalized.endsWith("+json")
})?.[1]
: undefined
const recordingClient = (respond: (request: HttpClientRequest.HttpClientRequest) => Response) => {
const requests: Array<Recorded> = []
const layer = Layer.succeed(HttpClient.HttpClient)(
HttpClient.make((request) =>
Effect.gen(function* () {
const body =
request.body._tag === "Uint8Array" ? JSON.parse(new TextDecoder().decode(request.body.body)) : undefined
const url = Option.map(HttpClientRequest.toUrl(request), (resolved) => resolved.toString())
requests.push({
method: request.method,
url: Option.getOrElse(url, () => request.url),
headers: { ...request.headers },
body,
})
return HttpClientResponse.fromWeb(request, respond(request))
}),
),
)
return { requests, layer }
}
const json = (value: unknown, status = 200) =>
new Response(JSON.stringify(value), { status, headers: { "content-type": "application/json" } })
describe("OpenAPI.fromSpec", () => {
test("converts every opencode operation into the expected tool shape", async () => {
const spec = await opencodeSpec()
const result = OpenAPI.fromSpec({ spec, baseUrl })
const entries = toolPathEntries(spec)
expect(entries.every((entry) => toolAt(result.tools, entry.name) !== undefined)).toBe(true)
expect(result.skipped).toContainEqual({
method: "GET",
path: "/api/pty/{ptyID}/connect",
reason: "WebSocket operations are not supported",
})
expect(result.skipped.filter((item) => item.reason === "SSE operations are not supported")).toHaveLength(3)
expect(toolAt(result.tools, "v2.health.get")).not.toBeUndefined()
expect(toolAt(result.tools, "v2.session.get")).not.toBeUndefined()
expect(toolAt(result.tools, "v2.session.create")).not.toBeUndefined()
const sessionGet = toolAt(result.tools, "v2.session.get")
expect(Tool.isDefinition(sessionGet)).toBe(true)
if (!Tool.isDefinition(sessionGet)) throw new Error("v2.session.get was not generated")
expect(inputTypeScript(sessionGet)).toBe("{ sessionID: string }")
expect(outputTypeScript(sessionGet)).toContain("id: string")
expect(outputTypeScript(sessionGet)).toContain("additions: number")
const switchAgent = toolAt(result.tools, "v2.session.switchAgent")
expect(Tool.isDefinition(switchAgent)).toBe(true)
if (!Tool.isDefinition(switchAgent)) throw new Error("v2.session.switchAgent was not generated")
expect(inputTypeScript(switchAgent)).toBe("{ sessionID: string; agent: string }")
const contextEntryPut = toolAt(result.tools, "v2.session.contextEntry.put")
expect(Tool.isDefinition(contextEntryPut)).toBe(true)
if (!Tool.isDefinition(contextEntryPut)) throw new Error("v2.session.contextEntry.put was not generated")
expect(inputTypeScript(contextEntryPut)).toBe("{ sessionID: string; key: string; value: unknown }")
expect(toolAt(result.tools, "v2_session_context_entry_put_2")).toBeUndefined()
expect(toolAt(result.tools, "v2.pty.connect")).toBeUndefined()
expect(toolAt(result.tools, "v2.session.log")).toBeUndefined()
expect(toolAt(result.tools, "v2.event.subscribe")).toBeUndefined()
expect(toolAt(result.tools, "v2.event.changes")).toBeUndefined()
expect(toolAt(result.tools, "v2.fs.read")).not.toBeUndefined()
expect(toolAt(result.tools, "v2.pty.connectToken")).not.toBeUndefined()
for (const item of entries) {
const tool = toolAt(result.tools, item.name)
expect(tool).toMatchObject({
_tag: "CodeModeTool",
description:
nonEmptyString(item.operation.description) ??
nonEmptyString(item.operation.summary) ??
`${item.method.toUpperCase()} ${item.path}`,
})
const toolRecord = isRecord(tool) ? tool : {}
const input = isRecord(toolRecord.input) ? toolRecord.input : {}
expect(input.type).toBe("object")
const properties = isRecord(input.properties) ? input.properties : {}
const parameters = Array.isArray(item.operation.parameters) ? item.operation.parameters.filter(isRecord) : []
for (const name of parameters
.map((parameter) => parameter.name)
.filter((name): name is string => typeof name === "string")) {
expect(Object.hasOwn(properties, name)).toBe(true)
}
const requestBody = isRecord(item.operation.requestBody) ? item.operation.requestBody : undefined
const media = requestBody === undefined ? undefined : jsonContentSchema(requestBody.content)
const bodySchema = isRecord(media) && isRecord(media.schema) ? media.schema : undefined
if (bodySchema !== undefined && isRecord(bodySchema.properties)) {
for (const name of Object.keys(bodySchema.properties)) expect(Object.hasOwn(properties, name)).toBe(true)
}
const successes = Object.entries(isRecord(item.operation.responses) ? item.operation.responses : {})
.filter(([status]) => /^2\d\d$/.test(status) || status.toUpperCase() === "2XX")
.map(([, response]) => (isRecord(response) ? response : {}))
if (successes.some((response) => jsonContentSchema(response.content) !== undefined)) {
expect(toolRecord.output).not.toBeUndefined()
}
}
})
test("documents that the opencode fixture is unauthenticated", async () => {
const spec = await opencodeSpec()
const components = isRecord(spec.components) ? spec.components : {}
const result = OpenAPI.fromSpec({ spec, baseUrl })
expect(spec.security).toStrictEqual([])
expect(isRecord(components.securitySchemes) ? Object.keys(components.securitySchemes) : []).toStrictEqual([])
const health = toolAt(result.tools, "v2.health.get")
const healthInput = isRecord(health) ? health.input : undefined
expect(healthInput).toMatchObject({ type: "object", properties: {} })
const input = isRecord(healthInput) ? healthInput : {}
expect(Object.keys(isRecord(input.properties) ? input.properties : {})).toStrictEqual([])
})
test("exposes real opencode operations through CodeMode discovery", async () => {
const { layer } = recordingClient(() => json({}))
const runtime = CodeMode.make({
tools: { opencode: OpenAPI.fromSpec({ spec: await opencodeSpec(), baseUrl }).tools },
})
const result = await Effect.runPromise(
runtime
.execute(
`
return await tools.$codemode.search({ query: "global health", namespace: "opencode", limit: 1 })
`,
)
.pipe(Effect.provide(layer)),
)
expect(result).toMatchObject({ ok: true })
if (!result.ok) return
expect(result.value).toMatchObject({
items: [
{
path: "tools.opencode.v2.health.get",
description: "Check whether the API server is ready to accept requests.",
},
],
})
expect(JSON.stringify(result.value)).toContain("healthy: true")
})
test("invokes real opencode path parameters and JSON request bodies", async () => {
const { requests, layer } = recordingClient((request) => {
if (request.method === "GET") return json({ id: "ses_123" })
return json({ id: "ses_456" })
})
const runtime = CodeMode.make({
tools: { opencode: OpenAPI.fromSpec({ spec: await opencodeSpec(), baseUrl }).tools },
})
const result = await Effect.runPromise(
runtime
.execute(
`
const existing = await tools.opencode.v2.session.get({ sessionID: "ses_123" })
const created = await tools.opencode.v2.session.create({ id: "ses_456" })
return { existing, created }
`,
)
.pipe(Effect.provide(layer)),
)
expect(result).toMatchObject({ ok: true })
expect(requests).toHaveLength(2)
expect(requests[0]).toMatchObject({ method: "GET", body: undefined })
expect(new URL(requests[0]!.url).pathname).toBe("/api/session/ses_123")
expect(requests[1]).toMatchObject({
method: "POST",
url: "http://localhost:4096/api/session",
body: { id: "ses_456" },
})
})
test("fails missing required parameters before auth and network", async () => {
const { requests, layer } = recordingClient(() => json({}))
const runtime = CodeMode.make({
tools: { opencode: OpenAPI.fromSpec({ spec: await opencodeSpec(), baseUrl }).tools },
})
const result = await Effect.runPromise(
runtime.execute("return await tools.opencode.v2.session.get({})").pipe(Effect.provide(layer)),
)
expect(result).toMatchObject({ ok: false })
expect(JSON.stringify(result)).toContain("Missing required path parameter 'sessionID'")
expect(requests).toHaveLength(0)
})
test("prefixes cross-location collisions and reconstructs the HTTP request", async () => {
const spec = {
openapi: "3.1.0",
info: { title: "collision", version: "1.0.0" },
paths: {
"/echo": {
post: {
operationId: "echo",
requestBody: {
required: true,
content: { "application/json": { schema: { type: "string" } } },
},
responses: { "204": { description: "Echoed" } },
},
},
"/things/{id}": {
post: {
operationId: "things.update",
parameters: [
{ name: "id", in: "path", required: true, schema: { type: "string" } },
{ name: "id", in: "query", required: true, schema: { type: "string" } },
{ name: "path_id", in: "query", schema: { type: "string" } },
{ name: "id", in: "header", required: true, schema: { type: "string" } },
],
requestBody: {
required: true,
content: {
"application/json": {
schema: {
type: "object",
properties: { id: { type: "string" } },
required: ["id"],
additionalProperties: false,
},
},
},
},
responses: { "204": { description: "Updated" } },
},
},
},
} satisfies Document
const { requests, layer } = recordingClient(() => new Response(null, { status: 204 }))
const tools = OpenAPI.fromSpec({ spec, baseUrl }).tools
const update = toolAt(tools, "things.update")
const echo = toolAt(tools, "echo")
expect(Tool.isDefinition(update)).toBe(true)
if (!Tool.isDefinition(update)) throw new Error("things.update was not generated")
expect(inputTypeScript(update)).toBe(
"{ path_id: string; query_id: string; path_id_2?: string; header_id: string; body_id: string }",
)
expect(Tool.isDefinition(echo)).toBe(true)
if (!Tool.isDefinition(echo)) throw new Error("echo was not generated")
expect(inputTypeScript(echo)).toBe("{ body: string }")
const runtime = CodeMode.make({ tools })
const result = await Effect.runPromise(
runtime
.execute(
`
const updated = await tools.things.update({ path_id: "path", query_id: "query", path_id_2: "literal", header_id: "header", body_id: "body" })
const echoed = await tools.echo({ body: "hello" })
return { updated, echoed }
`,
)
.pipe(Effect.provide(layer)),
)
expect(result).toMatchObject({ ok: true })
expect(requests).toHaveLength(2)
expect(new URL(requests[0]!.url).pathname).toBe("/things/path")
expect(new URL(requests[0]!.url).searchParams.get("id")).toBe("query")
expect(new URL(requests[0]!.url).searchParams.get("path_id")).toBe("literal")
expect(requests[0]!.headers.id).toBe("header")
expect(requests[0]!.body).toStrictEqual({ id: "body" })
expect(requests[1]!.body).toBe("hello")
})
test("keeps bodies nested when flattening would lose schema semantics", () => {
const body = (schema: Record<string, unknown>, required = true) => ({
required,
content: { "application/json": { schema } },
})
const spec = {
openapi: "3.1.0",
info: { title: "bodies", version: "1.0.0" },
paths: Object.fromEntries(
[
[
"optional",
body(
{
type: "object",
properties: { name: { type: "string" } },
required: ["name"],
additionalProperties: false,
},
false,
),
],
["dictionary", body({ type: "object", additionalProperties: { type: "string" } })],
[
"composed",
body({
type: "object",
allOf: [{ type: "object", properties: { name: { type: "string" } }, required: ["name"] }],
additionalProperties: false,
}),
],
[
"nullable",
body({
type: ["object", "null"],
properties: { name: { type: "string" } },
additionalProperties: false,
}),
],
].map(([name, requestBody]) => [
`/body/${name}`,
{
post: {
operationId: `body.${name}`,
requestBody,
responses: { "204": { description: "Accepted" } },
},
},
]),
),
} satisfies Document
const tools = OpenAPI.fromSpec({ spec, baseUrl }).tools
for (const name of ["optional", "dictionary", "composed", "nullable"]) {
const tool = toolAt(tools, `body.${name}`)
expect(Tool.isDefinition(tool)).toBe(true)
if (!Tool.isDefinition(tool)) throw new Error(`body.${name} was not generated`)
const input = isRecord(tool.input) ? tool.input : {}
expect(Object.keys(isRecord(input.properties) ? input.properties : {})).toStrictEqual(["body"])
}
const optional = toolAt(tools, "body.optional")
if (!Tool.isDefinition(optional)) throw new Error("body.optional was not generated")
expect(inputTypeScript(optional)).toBe("{ body?: { name: string } }")
})
})
+10
View File
@@ -268,6 +268,16 @@ describe("union schemas render every alternative", () => {
expect(inputTypeScript(tool)).toBe("{ value?: string | number }")
expect(outputTypeScript(tool)).toBe("number | boolean")
})
test("allOf renders intersections with parenthesized union members", () => {
const schema = {
allOf: [
{ type: "object", properties: { id: { type: "string" } } },
{ type: ["string", "null"] },
],
} as const
expect(jsonSchemaToTypeScript(schema)).toBe("{ id?: string } & (string | null)")
})
})
describe("pretty signatures in search results", () => {
+1
View File
@@ -127,6 +127,7 @@ export const PtyGroup = HttpApiGroup.make("server.pty")
description: "Establish a WebSocket connection streaming PTY output and accepting terminal input.",
transform: (operation) => ({
...operation,
"x-websocket": true,
parameters: [
...(operation.parameters ?? []),
...["location[directory]", "location[workspace]", "cursor", PTY_CONNECT_TICKET_QUERY].map((name) => ({