chore: generate
This commit is contained in:
@@ -29,14 +29,18 @@ export const PtyApi = HttpApi.make("pty")
|
|||||||
.add(
|
.add(
|
||||||
HttpApiGroup.make("pty")
|
HttpApiGroup.make("pty")
|
||||||
.add(
|
.add(
|
||||||
HttpApiEndpoint.get("shells", PtyPaths.shells, { success: described(Schema.Array(ShellItem), "List of shells") }).annotateMerge(
|
HttpApiEndpoint.get("shells", PtyPaths.shells, {
|
||||||
|
success: described(Schema.Array(ShellItem), "List of shells"),
|
||||||
|
}).annotateMerge(
|
||||||
OpenApi.annotations({
|
OpenApi.annotations({
|
||||||
identifier: "pty.shells",
|
identifier: "pty.shells",
|
||||||
summary: "List available shells",
|
summary: "List available shells",
|
||||||
description: "Get a list of available shells on the system.",
|
description: "Get a list of available shells on the system.",
|
||||||
}),
|
}),
|
||||||
),
|
),
|
||||||
HttpApiEndpoint.get("list", PtyPaths.list, { success: described(Schema.Array(Pty.Info), "List of sessions") }).annotateMerge(
|
HttpApiEndpoint.get("list", PtyPaths.list, {
|
||||||
|
success: described(Schema.Array(Pty.Info), "List of sessions"),
|
||||||
|
}).annotateMerge(
|
||||||
OpenApi.annotations({
|
OpenApi.annotations({
|
||||||
identifier: "pty.list",
|
identifier: "pty.list",
|
||||||
summary: "List PTY sessions",
|
summary: "List PTY sessions",
|
||||||
|
|||||||
@@ -11,11 +11,28 @@ export const TuiRequestPayload = Schema.Struct({
|
|||||||
path: Schema.String,
|
path: Schema.String,
|
||||||
body: Schema.Unknown,
|
body: Schema.Unknown,
|
||||||
})
|
})
|
||||||
const EventTuiPromptAppend = Schema.Struct({ type: Schema.Literal(TuiEvent.PromptAppend.type), properties: TuiEvent.PromptAppend.properties }).annotate({ identifier: "EventTuiPromptAppend" })
|
const EventTuiPromptAppend = Schema.Struct({
|
||||||
const EventTuiCommandExecute = Schema.Struct({ type: Schema.Literal(TuiEvent.CommandExecute.type), properties: TuiEvent.CommandExecute.properties }).annotate({ identifier: "EventTuiCommandExecute" })
|
type: Schema.Literal(TuiEvent.PromptAppend.type),
|
||||||
const EventTuiToastShow = Schema.Struct({ type: Schema.Literal(TuiEvent.ToastShow.type), properties: TuiEvent.ToastShow.properties }).annotate({ identifier: "EventTuiToastShow" })
|
properties: TuiEvent.PromptAppend.properties,
|
||||||
const EventTuiSessionSelect = Schema.Struct({ type: Schema.Literal(TuiEvent.SessionSelect.type), properties: TuiEvent.SessionSelect.properties }).annotate({ identifier: "EventTuiSessionSelect" })
|
}).annotate({ identifier: "EventTuiPromptAppend" })
|
||||||
export const TuiPublishPayload = Schema.Union([EventTuiPromptAppend, EventTuiCommandExecute, EventTuiToastShow, EventTuiSessionSelect])
|
const EventTuiCommandExecute = Schema.Struct({
|
||||||
|
type: Schema.Literal(TuiEvent.CommandExecute.type),
|
||||||
|
properties: TuiEvent.CommandExecute.properties,
|
||||||
|
}).annotate({ identifier: "EventTuiCommandExecute" })
|
||||||
|
const EventTuiToastShow = Schema.Struct({
|
||||||
|
type: Schema.Literal(TuiEvent.ToastShow.type),
|
||||||
|
properties: TuiEvent.ToastShow.properties,
|
||||||
|
}).annotate({ identifier: "EventTuiToastShow" })
|
||||||
|
const EventTuiSessionSelect = Schema.Struct({
|
||||||
|
type: Schema.Literal(TuiEvent.SessionSelect.type),
|
||||||
|
properties: TuiEvent.SessionSelect.properties,
|
||||||
|
}).annotate({ identifier: "EventTuiSessionSelect" })
|
||||||
|
export const TuiPublishPayload = Schema.Union([
|
||||||
|
EventTuiPromptAppend,
|
||||||
|
EventTuiCommandExecute,
|
||||||
|
EventTuiToastShow,
|
||||||
|
EventTuiSessionSelect,
|
||||||
|
])
|
||||||
|
|
||||||
export const TuiPaths = {
|
export const TuiPaths = {
|
||||||
appendPrompt: `${root}/append-prompt`,
|
appendPrompt: `${root}/append-prompt`,
|
||||||
@@ -48,42 +65,54 @@ export const TuiApi = HttpApi.make("tui")
|
|||||||
description: "Append prompt to the TUI.",
|
description: "Append prompt to the TUI.",
|
||||||
}),
|
}),
|
||||||
),
|
),
|
||||||
HttpApiEndpoint.post("openHelp", TuiPaths.openHelp, { success: described(Schema.Boolean, "Help dialog opened successfully") }).annotateMerge(
|
HttpApiEndpoint.post("openHelp", TuiPaths.openHelp, {
|
||||||
|
success: described(Schema.Boolean, "Help dialog opened successfully"),
|
||||||
|
}).annotateMerge(
|
||||||
OpenApi.annotations({
|
OpenApi.annotations({
|
||||||
identifier: "tui.openHelp",
|
identifier: "tui.openHelp",
|
||||||
summary: "Open help dialog",
|
summary: "Open help dialog",
|
||||||
description: "Open the help dialog in the TUI to display user assistance information.",
|
description: "Open the help dialog in the TUI to display user assistance information.",
|
||||||
}),
|
}),
|
||||||
),
|
),
|
||||||
HttpApiEndpoint.post("openSessions", TuiPaths.openSessions, { success: described(Schema.Boolean, "Session dialog opened successfully") }).annotateMerge(
|
HttpApiEndpoint.post("openSessions", TuiPaths.openSessions, {
|
||||||
|
success: described(Schema.Boolean, "Session dialog opened successfully"),
|
||||||
|
}).annotateMerge(
|
||||||
OpenApi.annotations({
|
OpenApi.annotations({
|
||||||
identifier: "tui.openSessions",
|
identifier: "tui.openSessions",
|
||||||
summary: "Open sessions dialog",
|
summary: "Open sessions dialog",
|
||||||
description: "Open the session dialog.",
|
description: "Open the session dialog.",
|
||||||
}),
|
}),
|
||||||
),
|
),
|
||||||
HttpApiEndpoint.post("openThemes", TuiPaths.openThemes, { success: described(Schema.Boolean, "Theme dialog opened successfully") }).annotateMerge(
|
HttpApiEndpoint.post("openThemes", TuiPaths.openThemes, {
|
||||||
|
success: described(Schema.Boolean, "Theme dialog opened successfully"),
|
||||||
|
}).annotateMerge(
|
||||||
OpenApi.annotations({
|
OpenApi.annotations({
|
||||||
identifier: "tui.openThemes",
|
identifier: "tui.openThemes",
|
||||||
summary: "Open themes dialog",
|
summary: "Open themes dialog",
|
||||||
description: "Open the theme dialog.",
|
description: "Open the theme dialog.",
|
||||||
}),
|
}),
|
||||||
),
|
),
|
||||||
HttpApiEndpoint.post("openModels", TuiPaths.openModels, { success: described(Schema.Boolean, "Model dialog opened successfully") }).annotateMerge(
|
HttpApiEndpoint.post("openModels", TuiPaths.openModels, {
|
||||||
|
success: described(Schema.Boolean, "Model dialog opened successfully"),
|
||||||
|
}).annotateMerge(
|
||||||
OpenApi.annotations({
|
OpenApi.annotations({
|
||||||
identifier: "tui.openModels",
|
identifier: "tui.openModels",
|
||||||
summary: "Open models dialog",
|
summary: "Open models dialog",
|
||||||
description: "Open the model dialog.",
|
description: "Open the model dialog.",
|
||||||
}),
|
}),
|
||||||
),
|
),
|
||||||
HttpApiEndpoint.post("submitPrompt", TuiPaths.submitPrompt, { success: described(Schema.Boolean, "Prompt submitted successfully") }).annotateMerge(
|
HttpApiEndpoint.post("submitPrompt", TuiPaths.submitPrompt, {
|
||||||
|
success: described(Schema.Boolean, "Prompt submitted successfully"),
|
||||||
|
}).annotateMerge(
|
||||||
OpenApi.annotations({
|
OpenApi.annotations({
|
||||||
identifier: "tui.submitPrompt",
|
identifier: "tui.submitPrompt",
|
||||||
summary: "Submit TUI prompt",
|
summary: "Submit TUI prompt",
|
||||||
description: "Submit the prompt.",
|
description: "Submit the prompt.",
|
||||||
}),
|
}),
|
||||||
),
|
),
|
||||||
HttpApiEndpoint.post("clearPrompt", TuiPaths.clearPrompt, { success: described(Schema.Boolean, "Prompt cleared successfully") }).annotateMerge(
|
HttpApiEndpoint.post("clearPrompt", TuiPaths.clearPrompt, {
|
||||||
|
success: described(Schema.Boolean, "Prompt cleared successfully"),
|
||||||
|
}).annotateMerge(
|
||||||
OpenApi.annotations({
|
OpenApi.annotations({
|
||||||
identifier: "tui.clearPrompt",
|
identifier: "tui.clearPrompt",
|
||||||
summary: "Clear TUI prompt",
|
summary: "Clear TUI prompt",
|
||||||
@@ -133,7 +162,9 @@ export const TuiApi = HttpApi.make("tui")
|
|||||||
description: "Navigate the TUI to display the specified session.",
|
description: "Navigate the TUI to display the specified session.",
|
||||||
}),
|
}),
|
||||||
),
|
),
|
||||||
HttpApiEndpoint.get("controlNext", TuiPaths.controlNext, { success: described(TuiRequestPayload, "Next TUI request") }).annotateMerge(
|
HttpApiEndpoint.get("controlNext", TuiPaths.controlNext, {
|
||||||
|
success: described(TuiRequestPayload, "Next TUI request"),
|
||||||
|
}).annotateMerge(
|
||||||
OpenApi.annotations({
|
OpenApi.annotations({
|
||||||
identifier: "tui.control.next",
|
identifier: "tui.control.next",
|
||||||
summary: "Get next TUI request",
|
summary: "Get next TUI request",
|
||||||
|
|||||||
@@ -9,9 +9,7 @@ import { described } from "./metadata"
|
|||||||
|
|
||||||
const root = "/experimental/workspace"
|
const root = "/experimental/workspace"
|
||||||
export const CreatePayload = Schema.Struct(Struct.omit(Workspace.CreateInput.fields, ["projectID"]))
|
export const CreatePayload = Schema.Struct(Struct.omit(Workspace.CreateInput.fields, ["projectID"]))
|
||||||
export const SessionRestorePayload = Schema.Struct(
|
export const SessionRestorePayload = Schema.Struct(Struct.omit(Workspace.SessionRestoreInput.fields, ["workspaceID"]))
|
||||||
Struct.omit(Workspace.SessionRestoreInput.fields, ["workspaceID"]),
|
|
||||||
)
|
|
||||||
export const SessionRestoreResponse = Schema.Struct({
|
export const SessionRestoreResponse = Schema.Struct({
|
||||||
total: NonNegativeInt,
|
total: NonNegativeInt,
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -88,7 +88,9 @@ export const ptyConnectRoute = HttpRouter.add(
|
|||||||
},
|
},
|
||||||
send: (data: string | Uint8Array | ArrayBuffer) => {
|
send: (data: string | Uint8Array | ArrayBuffer) => {
|
||||||
if (closed) return
|
if (closed) return
|
||||||
Effect.runFork(write(data instanceof ArrayBuffer ? new Uint8Array(data) : data).pipe(Effect.catch(() => Effect.void)))
|
Effect.runFork(
|
||||||
|
write(data instanceof ArrayBuffer ? new Uint8Array(data) : data).pipe(Effect.catch(() => Effect.void)),
|
||||||
|
)
|
||||||
},
|
},
|
||||||
close: (code?: number, reason?: string) => {
|
close: (code?: number, reason?: string) => {
|
||||||
if (closed) return
|
if (closed) return
|
||||||
|
|||||||
@@ -25,7 +25,20 @@ import * as Stream from "effect/Stream"
|
|||||||
import { HttpServerRequest, HttpServerResponse } from "effect/unstable/http"
|
import { HttpServerRequest, HttpServerResponse } from "effect/unstable/http"
|
||||||
import { HttpApiBuilder, HttpApiError, HttpApiSchema } from "effect/unstable/httpapi"
|
import { HttpApiBuilder, HttpApiError, HttpApiSchema } from "effect/unstable/httpapi"
|
||||||
import { InstanceHttpApi } from "../api"
|
import { InstanceHttpApi } from "../api"
|
||||||
import { CommandPayload, DiffQuery, ForkPayload, InitPayload, ListQuery, MessagesQuery, PermissionResponsePayload, PromptPayload, RevertPayload, ShellPayload, SummarizePayload, UpdatePayload } from "../groups/session"
|
import {
|
||||||
|
CommandPayload,
|
||||||
|
DiffQuery,
|
||||||
|
ForkPayload,
|
||||||
|
InitPayload,
|
||||||
|
ListQuery,
|
||||||
|
MessagesQuery,
|
||||||
|
PermissionResponsePayload,
|
||||||
|
PromptPayload,
|
||||||
|
RevertPayload,
|
||||||
|
ShellPayload,
|
||||||
|
SummarizePayload,
|
||||||
|
UpdatePayload,
|
||||||
|
} from "../groups/session"
|
||||||
|
|
||||||
const log = Log.create({ service: "server" })
|
const log = Log.create({ service: "server" })
|
||||||
|
|
||||||
@@ -88,7 +101,8 @@ export const sessionHandlers = HttpApiBuilder.group(InstanceHttpApi, "session",
|
|||||||
params: { sessionID: SessionID }
|
params: { sessionID: SessionID }
|
||||||
query: typeof MessagesQuery.Type
|
query: typeof MessagesQuery.Type
|
||||||
}) {
|
}) {
|
||||||
return yield* mapNotFound(Effect.gen(function* () {
|
return yield* mapNotFound(
|
||||||
|
Effect.gen(function* () {
|
||||||
if (ctx.query.before && ctx.query.limit === undefined) return yield* new HttpApiError.BadRequest({})
|
if (ctx.query.before && ctx.query.limit === undefined) return yield* new HttpApiError.BadRequest({})
|
||||||
if (ctx.query.before) {
|
if (ctx.query.before) {
|
||||||
const before = ctx.query.before
|
const before = ctx.query.before
|
||||||
@@ -121,7 +135,8 @@ export const sessionHandlers = HttpApiBuilder.group(InstanceHttpApi, "session",
|
|||||||
"X-Next-Cursor": page.cursor,
|
"X-Next-Cursor": page.cursor,
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
}))
|
}),
|
||||||
|
)
|
||||||
})
|
})
|
||||||
|
|
||||||
const message = Effect.fn("SessionHttpApi.message")(function* (ctx: {
|
const message = Effect.fn("SessionHttpApi.message")(function* (ctx: {
|
||||||
|
|||||||
@@ -19,11 +19,12 @@ import * as Socket from "effect/unstable/socket/Socket"
|
|||||||
|
|
||||||
type HandlerEffect = Effect.Effect<HttpServerResponse.HttpServerResponse, unhandled, never>
|
type HandlerEffect = Effect.Effect<HttpServerResponse.HttpServerResponse, unhandled, never>
|
||||||
|
|
||||||
export class InstanceContextMiddleware extends HttpApiMiddleware.Service<InstanceContextMiddleware, {
|
export class InstanceContextMiddleware extends HttpApiMiddleware.Service<
|
||||||
|
InstanceContextMiddleware,
|
||||||
|
{
|
||||||
requires: Session.Service
|
requires: Session.Service
|
||||||
}>()(
|
}
|
||||||
"@opencode/ExperimentalHttpApiInstanceContext",
|
>()("@opencode/ExperimentalHttpApiInstanceContext") {}
|
||||||
) {}
|
|
||||||
|
|
||||||
function decode(input: string) {
|
function decode(input: string) {
|
||||||
try {
|
try {
|
||||||
@@ -53,9 +54,14 @@ function requestHeaders(request: HttpServerRequest.HttpServerRequest) {
|
|||||||
return sourceRequest(request).headers
|
return sourceRequest(request).headers
|
||||||
}
|
}
|
||||||
|
|
||||||
function writeSocket(write: (data: string | Uint8Array | Socket.CloseEvent) => Effect.Effect<void, unknown>, data: unknown) {
|
function writeSocket(
|
||||||
|
write: (data: string | Uint8Array | Socket.CloseEvent) => Effect.Effect<void, unknown>,
|
||||||
|
data: unknown,
|
||||||
|
) {
|
||||||
if (data instanceof Blob) {
|
if (data instanceof Blob) {
|
||||||
void data.arrayBuffer().then((buffer) => Effect.runFork(write(new Uint8Array(buffer)).pipe(Effect.catch(() => Effect.void))))
|
void data
|
||||||
|
.arrayBuffer()
|
||||||
|
.then((buffer) => Effect.runFork(write(new Uint8Array(buffer)).pipe(Effect.catch(() => Effect.void))))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if (typeof data === "string" || data instanceof Uint8Array) {
|
if (typeof data === "string" || data instanceof Uint8Array) {
|
||||||
@@ -78,7 +84,8 @@ function proxyWebSocket(request: HttpServerRequest.HttpServerRequest, target: st
|
|||||||
queue.length = 0
|
queue.length = 0
|
||||||
}
|
}
|
||||||
remote.onmessage = (event) => writeSocket(write, event.data)
|
remote.onmessage = (event) => writeSocket(write, event.data)
|
||||||
remote.onerror = () => Effect.runFork(write(new Socket.CloseEvent(1011, "proxy error")).pipe(Effect.catch(() => Effect.void)))
|
remote.onerror = () =>
|
||||||
|
Effect.runFork(write(new Socket.CloseEvent(1011, "proxy error")).pipe(Effect.catch(() => Effect.void)))
|
||||||
remote.onclose = (event) =>
|
remote.onclose = (event) =>
|
||||||
Effect.runFork(write(new Socket.CloseEvent(event.code, event.reason)).pipe(Effect.catch(() => Effect.void)))
|
Effect.runFork(write(new Socket.CloseEvent(event.code, event.reason)).pipe(Effect.catch(() => Effect.void)))
|
||||||
|
|
||||||
@@ -109,7 +116,9 @@ function proxyRemote(
|
|||||||
const url = workspaceProxyURL(target.url, requestURL)
|
const url = workspaceProxyURL(target.url, requestURL)
|
||||||
const source = sourceRequest(request)
|
const source = sourceRequest(request)
|
||||||
if (source.headers.get("upgrade")?.toLowerCase() === "websocket") return proxyWebSocket(request, url)
|
if (source.headers.get("upgrade")?.toLowerCase() === "websocket") return proxyWebSocket(request, url)
|
||||||
return Effect.promise(() => ServerProxy.http(url, target.headers, source, workspace.id)).pipe(Effect.map(HttpServerResponse.raw))
|
return Effect.promise(() => ServerProxy.http(url, target.headers, source, workspace.id)).pipe(
|
||||||
|
Effect.map(HttpServerResponse.raw),
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
function requestContext() {
|
function requestContext() {
|
||||||
@@ -118,14 +127,19 @@ function requestContext() {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
function provideRequestContext(effect: HandlerEffect, request: HttpServerRequest.HttpServerRequest, sessionWorkspaceID?: WorkspaceID) {
|
function provideRequestContext(
|
||||||
|
effect: HandlerEffect,
|
||||||
|
request: HttpServerRequest.HttpServerRequest,
|
||||||
|
sessionWorkspaceID?: WorkspaceID,
|
||||||
|
) {
|
||||||
return Effect.gen(function* () {
|
return Effect.gen(function* () {
|
||||||
const url = new URL(request.url, "http://localhost")
|
const url = new URL(request.url, "http://localhost")
|
||||||
const headers = requestHeaders(request)
|
const headers = requestHeaders(request)
|
||||||
const envWorkspaceID = Flag.OPENCODE_WORKSPACE_ID ? WorkspaceID.make(Flag.OPENCODE_WORKSPACE_ID) : undefined
|
const envWorkspaceID = Flag.OPENCODE_WORKSPACE_ID ? WorkspaceID.make(Flag.OPENCODE_WORKSPACE_ID) : undefined
|
||||||
const workspaceParam = url.searchParams.get("workspace")
|
const workspaceParam = url.searchParams.get("workspace")
|
||||||
const workspaceID = sessionWorkspaceID ?? (workspaceParam ? WorkspaceID.make(workspaceParam) : undefined)
|
const workspaceID = sessionWorkspaceID ?? (workspaceParam ? WorkspaceID.make(workspaceParam) : undefined)
|
||||||
const workspace = workspaceID && !envWorkspaceID ? yield* Effect.promise(() => Workspace.get(workspaceID)) : undefined
|
const workspace =
|
||||||
|
workspaceID && !envWorkspaceID ? yield* Effect.promise(() => Workspace.get(workspaceID)) : undefined
|
||||||
|
|
||||||
if (workspaceID && !workspace && !envWorkspaceID) {
|
if (workspaceID && !workspace && !envWorkspaceID) {
|
||||||
return HttpServerResponse.text(`Workspace not found: ${workspaceID}`, {
|
return HttpServerResponse.text(`Workspace not found: ${workspaceID}`, {
|
||||||
@@ -134,7 +148,12 @@ function provideRequestContext(effect: HandlerEffect, request: HttpServerRequest
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
if (workspace && !isLocalWorkspaceRoute(request.method, url.pathname) && !url.pathname.startsWith("/console") && !envWorkspaceID) {
|
if (
|
||||||
|
workspace &&
|
||||||
|
!isLocalWorkspaceRoute(request.method, url.pathname) &&
|
||||||
|
!url.pathname.startsWith("/console") &&
|
||||||
|
!envWorkspaceID
|
||||||
|
) {
|
||||||
const adaptor = yield* Effect.promise(() => getAdaptor(workspace.projectID, workspace.type))
|
const adaptor = yield* Effect.promise(() => getAdaptor(workspace.projectID, workspace.type))
|
||||||
const target = yield* Effect.promise(() => Promise.resolve(adaptor.target(workspace)))
|
const target = yield* Effect.promise(() => Promise.resolve(adaptor.target(workspace)))
|
||||||
if (target.type === "remote") return yield* proxyRemote(request, workspace, target, url)
|
if (target.type === "remote") return yield* proxyRemote(request, workspace, target, url)
|
||||||
@@ -186,6 +205,8 @@ export const instanceContextLayer = Layer.succeed(
|
|||||||
InstanceContextMiddleware.of((effect) => provideInstanceContext(effect)),
|
InstanceContextMiddleware.of((effect) => provideInstanceContext(effect)),
|
||||||
)
|
)
|
||||||
|
|
||||||
export const instanceRouterLayer = HttpRouter.middleware()(Effect.succeed((effect) =>
|
export const instanceRouterLayer = HttpRouter.middleware()(
|
||||||
|
Effect.succeed((effect) =>
|
||||||
requestContext().pipe(Effect.flatMap((request) => provideRequestContext(effect, request))),
|
requestContext().pipe(Effect.flatMap((request) => provideRequestContext(effect, request))),
|
||||||
)).layer
|
),
|
||||||
|
).layer
|
||||||
|
|||||||
@@ -14,7 +14,10 @@ export const markInstanceForDisposal = (ctx: InstanceContext) =>
|
|||||||
|
|
||||||
export const markInstanceForReload = (ctx: InstanceContext, next: Parameters<typeof Instance.reload>[0]) =>
|
export const markInstanceForReload = (ctx: InstanceContext, next: Parameters<typeof Instance.reload>[0]) =>
|
||||||
HttpEffect.appendPreResponseHandler((_request, response) =>
|
HttpEffect.appendPreResponseHandler((_request, response) =>
|
||||||
Effect.as(Effect.uninterruptible(Effect.promise(() => Instance.restore(ctx, () => Instance.reload(next)))), response),
|
Effect.as(
|
||||||
|
Effect.uninterruptible(Effect.promise(() => Instance.restore(ctx, () => Instance.reload(next)))),
|
||||||
|
response,
|
||||||
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
export const disposeMiddleware: HttpMiddleware.HttpMiddleware = (effect) =>
|
export const disposeMiddleware: HttpMiddleware.HttpMiddleware = (effect) =>
|
||||||
|
|||||||
@@ -126,8 +126,13 @@ function matchLegacyOpenApi(input: Record<string, unknown>) {
|
|||||||
// Workspace creation fields `branch` and `extra` are Schema.NullOr —
|
// Workspace creation fields `branch` and `extra` are Schema.NullOr —
|
||||||
// genuinely nullable, not just optional. Re-add the null that the
|
// genuinely nullable, not just optional. Re-add the null that the
|
||||||
// component-level strip above removed.
|
// component-level strip above removed.
|
||||||
const ref = operation.requestBody.content?.["application/json"]?.schema?.$ref?.replace("#/components/schemas/", "")
|
const ref = operation.requestBody.content?.["application/json"]?.schema?.$ref?.replace(
|
||||||
const properties = ref ? spec.components?.schemas?.[ref]?.properties : operation.requestBody.content?.["application/json"]?.schema?.properties
|
"#/components/schemas/",
|
||||||
|
"",
|
||||||
|
)
|
||||||
|
const properties = ref
|
||||||
|
? spec.components?.schemas?.[ref]?.properties
|
||||||
|
: operation.requestBody.content?.["application/json"]?.schema?.properties
|
||||||
if (properties?.branch) properties.branch = { anyOf: [properties.branch, { type: "null" }] }
|
if (properties?.branch) properties.branch = { anyOf: [properties.branch, { type: "null" }] }
|
||||||
if (properties?.extra) properties.extra = { anyOf: [properties.extra, { type: "null" }] }
|
if (properties?.extra) properties.extra = { anyOf: [properties.extra, { type: "null" }] }
|
||||||
}
|
}
|
||||||
@@ -150,7 +155,10 @@ function matchLegacyOpenApi(input: Record<string, unknown>) {
|
|||||||
description: "Event stream",
|
description: "Event stream",
|
||||||
content: {
|
content: {
|
||||||
"text/event-stream": {
|
"text/event-stream": {
|
||||||
schema: path === "/event" ? { $ref: "#/components/schemas/Event" } : { $ref: "#/components/schemas/GlobalEvent" },
|
schema:
|
||||||
|
path === "/event"
|
||||||
|
? { $ref: "#/components/schemas/Event" }
|
||||||
|
: { $ref: "#/components/schemas/GlobalEvent" },
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
@@ -251,7 +259,8 @@ function applyLegacySchemaOverrides(spec: OpenApiSpec) {
|
|||||||
schemas.Workspace.properties.directory = nullable(schemas.Workspace.properties.directory)
|
schemas.Workspace.properties.directory = nullable(schemas.Workspace.properties.directory)
|
||||||
schemas.Workspace.properties.extra = nullable(schemas.Workspace.properties.extra)
|
schemas.Workspace.properties.extra = nullable(schemas.Workspace.properties.extra)
|
||||||
}
|
}
|
||||||
if (schemas.GlobalSession?.properties?.project) schemas.GlobalSession.properties.project = nullable(schemas.GlobalSession.properties.project)
|
if (schemas.GlobalSession?.properties?.project)
|
||||||
|
schemas.GlobalSession.properties.project = nullable(schemas.GlobalSession.properties.project)
|
||||||
const providerOptions = schemas.ProviderConfig?.properties?.options
|
const providerOptions = schemas.ProviderConfig?.properties?.options
|
||||||
if (providerOptions) providerOptions.additionalProperties = {}
|
if (providerOptions) providerOptions.additionalProperties = {}
|
||||||
const model = schemas.ProviderConfig?.properties?.models?.additionalProperties
|
const model = schemas.ProviderConfig?.properties?.models?.additionalProperties
|
||||||
@@ -486,12 +495,11 @@ function normalizeParameter(param: OpenApiParameter, route: string) {
|
|||||||
param.schema = stripOptionalNull(param.schema)
|
param.schema = stripOptionalNull(param.schema)
|
||||||
}
|
}
|
||||||
|
|
||||||
export const PublicApi = OpenCodeHttpApi
|
export const PublicApi = OpenCodeHttpApi.annotateMerge(
|
||||||
.annotateMerge(
|
|
||||||
OpenApi.annotations({
|
OpenApi.annotations({
|
||||||
title: "opencode",
|
title: "opencode",
|
||||||
version: "1.0.0",
|
version: "1.0.0",
|
||||||
description: "opencode api",
|
description: "opencode api",
|
||||||
transform: matchLegacyOpenApi,
|
transform: matchLegacyOpenApi,
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -38,7 +38,9 @@ type ServerApp = {
|
|||||||
request(input: string | URL | Request, init?: RequestInit): Response | Promise<Response>
|
request(input: string | URL | Request, init?: RequestInit): Response | Promise<Response>
|
||||||
}
|
}
|
||||||
|
|
||||||
const DefaultHono = lazy(() => withBackend({ backend: "hono", reason: "stable" }, createHono({}, { backend: "hono", reason: "stable" })))
|
const DefaultHono = lazy(() =>
|
||||||
|
withBackend({ backend: "hono", reason: "stable" }, createHono({}, { backend: "hono", reason: "stable" })),
|
||||||
|
)
|
||||||
const DefaultHttpApi = lazy(() => createDefaultHttpApi())
|
const DefaultHttpApi = lazy(() => createDefaultHttpApi())
|
||||||
|
|
||||||
function select() {
|
function select() {
|
||||||
@@ -86,7 +88,10 @@ function createHttpApi() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function createHono(opts: { cors?: string[] }, selection: ServerBackend.Selection = ServerBackend.force(select(), "hono")) {
|
function createHono(
|
||||||
|
opts: { cors?: string[] },
|
||||||
|
selection: ServerBackend.Selection = ServerBackend.force(select(), "hono"),
|
||||||
|
) {
|
||||||
const backendAttributes = ServerBackend.attributes(selection)
|
const backendAttributes = ServerBackend.attributes(selection)
|
||||||
const app = new Hono()
|
const app = new Hono()
|
||||||
.onError(ErrorMiddleware)
|
.onError(ErrorMiddleware)
|
||||||
|
|||||||
@@ -461,7 +461,9 @@ type AssistantError = z.infer<typeof AssistantErrorZod>
|
|||||||
// Effect Schema for the same union — used by HttpApi OpenAPI generation.
|
// Effect Schema for the same union — used by HttpApi OpenAPI generation.
|
||||||
const AssistantErrorSchema = Schema.Union([
|
const AssistantErrorSchema = Schema.Union([
|
||||||
AuthError.EffectSchema,
|
AuthError.EffectSchema,
|
||||||
Schema.Struct({ name: Schema.Literal("UnknownError"), data: Schema.Struct({ message: Schema.String }) }).annotate({ identifier: "UnknownError" }),
|
Schema.Struct({ name: Schema.Literal("UnknownError"), data: Schema.Struct({ message: Schema.String }) }).annotate({
|
||||||
|
identifier: "UnknownError",
|
||||||
|
}),
|
||||||
OutputLengthError.EffectSchema,
|
OutputLengthError.EffectSchema,
|
||||||
AbortedError.EffectSchema,
|
AbortedError.EffectSchema,
|
||||||
StructuredOutputError.EffectSchema,
|
StructuredOutputError.EffectSchema,
|
||||||
|
|||||||
@@ -11,8 +11,6 @@ export const PositiveInt = Schema.Int.check(Schema.isGreaterThan(0))
|
|||||||
*/
|
*/
|
||||||
export const NonNegativeInt = Schema.Int.check(Schema.isGreaterThanOrEqualTo(0))
|
export const NonNegativeInt = Schema.Int.check(Schema.isGreaterThanOrEqualTo(0))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Optional public JSON field that can hold explicit `undefined` on the type
|
* Optional public JSON field that can hold explicit `undefined` on the type
|
||||||
* side but encodes it as an omitted key, matching legacy `JSON.stringify`.
|
* side but encodes it as an omitted key, matching legacy `JSON.stringify`.
|
||||||
|
|||||||
@@ -126,9 +126,9 @@ function requestBodyKey(spec: OpenApiSpec, body: unknown) {
|
|||||||
|
|
||||||
function requestBodySchemaKind(spec: OpenApiSpec, schema: OpenApiSchema | undefined) {
|
function requestBodySchemaKind(spec: OpenApiSpec, schema: OpenApiSchema | undefined) {
|
||||||
if (!schema) return ""
|
if (!schema) return ""
|
||||||
const resolved = (schema.$ref ? spec.components?.schemas?.[schema.$ref.replace("#/components/schemas/", "")] : schema) as
|
const resolved = (
|
||||||
| OpenApiSchema
|
schema.$ref ? spec.components?.schemas?.[schema.$ref.replace("#/components/schemas/", "")] : schema
|
||||||
| undefined
|
) as OpenApiSchema | undefined
|
||||||
if (resolved?.properties) return "object"
|
if (resolved?.properties) return "object"
|
||||||
if (resolved?.anyOf ?? resolved?.oneOf ?? resolved?.allOf) return "object"
|
if (resolved?.anyOf ?? resolved?.oneOf ?? resolved?.allOf) return "object"
|
||||||
return resolved?.type ?? schema.type ?? "inline"
|
return resolved?.type ?? schema.type ?? "inline"
|
||||||
|
|||||||
@@ -214,7 +214,11 @@ describe("workspace HttpApi", () => {
|
|||||||
const workspace = await Instance.provide({
|
const workspace = await Instance.provide({
|
||||||
directory: tmp.path,
|
directory: tmp.path,
|
||||||
fn: async () => {
|
fn: async () => {
|
||||||
registerAdaptor(Instance.project.id, "remote-target", remoteAdaptor(path.join(tmp.path, ".remote"), "https://remote.test/base"))
|
registerAdaptor(
|
||||||
|
Instance.project.id,
|
||||||
|
"remote-target",
|
||||||
|
remoteAdaptor(path.join(tmp.path, ".remote"), "https://remote.test/base"),
|
||||||
|
)
|
||||||
return Workspace.create({
|
return Workspace.create({
|
||||||
type: "remote-target",
|
type: "remote-target",
|
||||||
branch: null,
|
branch: null,
|
||||||
|
|||||||
+267
-95
@@ -1339,10 +1339,14 @@
|
|||||||
"type": "object",
|
"type": "object",
|
||||||
"properties": {
|
"properties": {
|
||||||
"rows": {
|
"rows": {
|
||||||
"type": "number"
|
"type": "integer",
|
||||||
|
"exclusiveMinimum": 0,
|
||||||
|
"maximum": 9007199254740991
|
||||||
},
|
},
|
||||||
"cols": {
|
"cols": {
|
||||||
"type": "number"
|
"type": "integer",
|
||||||
|
"exclusiveMinimum": 0,
|
||||||
|
"maximum": 9007199254740991
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"required": ["rows", "cols"]
|
"required": ["rows", "cols"]
|
||||||
@@ -5595,10 +5599,14 @@
|
|||||||
"required": ["text"]
|
"required": ["text"]
|
||||||
},
|
},
|
||||||
"line_number": {
|
"line_number": {
|
||||||
"type": "number"
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 9007199254740991
|
||||||
},
|
},
|
||||||
"absolute_offset": {
|
"absolute_offset": {
|
||||||
"type": "number"
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 9007199254740991
|
||||||
},
|
},
|
||||||
"submatches": {
|
"submatches": {
|
||||||
"type": "array",
|
"type": "array",
|
||||||
@@ -5615,10 +5623,14 @@
|
|||||||
"required": ["text"]
|
"required": ["text"]
|
||||||
},
|
},
|
||||||
"start": {
|
"start": {
|
||||||
"type": "number"
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 9007199254740991
|
||||||
},
|
},
|
||||||
"end": {
|
"end": {
|
||||||
"type": "number"
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 9007199254740991
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"required": ["match", "start", "end"]
|
"required": ["match", "start", "end"]
|
||||||
@@ -6901,7 +6913,9 @@
|
|||||||
},
|
},
|
||||||
"duration": {
|
"duration": {
|
||||||
"description": "Duration in milliseconds",
|
"description": "Duration in milliseconds",
|
||||||
"type": "number"
|
"type": "integer",
|
||||||
|
"exclusiveMinimum": 0,
|
||||||
|
"maximum": 9007199254740991
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"required": ["message", "variant"]
|
"required": ["message", "variant"]
|
||||||
@@ -7621,13 +7635,19 @@
|
|||||||
"type": "object",
|
"type": "object",
|
||||||
"properties": {
|
"properties": {
|
||||||
"created": {
|
"created": {
|
||||||
"type": "number"
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 9007199254740991
|
||||||
},
|
},
|
||||||
"updated": {
|
"updated": {
|
||||||
"type": "number"
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 9007199254740991
|
||||||
},
|
},
|
||||||
"initialized": {
|
"initialized": {
|
||||||
"type": "number"
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 9007199254740991
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"required": ["created", "updated"]
|
"required": ["created", "updated"]
|
||||||
@@ -7913,10 +7933,14 @@
|
|||||||
"type": "string"
|
"type": "string"
|
||||||
},
|
},
|
||||||
"additions": {
|
"additions": {
|
||||||
"type": "number"
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 9007199254740991
|
||||||
},
|
},
|
||||||
"deletions": {
|
"deletions": {
|
||||||
"type": "number"
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 9007199254740991
|
||||||
},
|
},
|
||||||
"status": {
|
"status": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
@@ -8039,7 +8063,9 @@
|
|||||||
"type": "string"
|
"type": "string"
|
||||||
},
|
},
|
||||||
"retries": {
|
"retries": {
|
||||||
"type": "number"
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 9007199254740991
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"required": ["message", "retries"]
|
"required": ["message", "retries"]
|
||||||
@@ -8083,7 +8109,9 @@
|
|||||||
"type": "string"
|
"type": "string"
|
||||||
},
|
},
|
||||||
"statusCode": {
|
"statusCode": {
|
||||||
"type": "number"
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 9007199254740991
|
||||||
},
|
},
|
||||||
"isRetryable": {
|
"isRetryable": {
|
||||||
"type": "boolean"
|
"type": "boolean"
|
||||||
@@ -8420,13 +8448,17 @@
|
|||||||
"const": "retry"
|
"const": "retry"
|
||||||
},
|
},
|
||||||
"attempt": {
|
"attempt": {
|
||||||
"type": "number"
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 9007199254740991
|
||||||
},
|
},
|
||||||
"message": {
|
"message": {
|
||||||
"type": "string"
|
"type": "string"
|
||||||
},
|
},
|
||||||
"next": {
|
"next": {
|
||||||
"type": "number"
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 9007199254740991
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"required": ["type", "attempt", "message", "next"]
|
"required": ["type", "attempt", "message", "next"]
|
||||||
@@ -8591,7 +8623,9 @@
|
|||||||
},
|
},
|
||||||
"duration": {
|
"duration": {
|
||||||
"description": "Duration in milliseconds",
|
"description": "Duration in milliseconds",
|
||||||
"type": "number"
|
"type": "integer",
|
||||||
|
"exclusiveMinimum": 0,
|
||||||
|
"maximum": 9007199254740991
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"required": ["message", "variant"]
|
"required": ["message", "variant"]
|
||||||
@@ -8777,7 +8811,9 @@
|
|||||||
"enum": ["running", "exited"]
|
"enum": ["running", "exited"]
|
||||||
},
|
},
|
||||||
"pid": {
|
"pid": {
|
||||||
"type": "number"
|
"type": "integer",
|
||||||
|
"exclusiveMinimum": 0,
|
||||||
|
"maximum": 9007199254740991
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"required": ["id", "title", "command", "args", "cwd", "status", "pid"]
|
"required": ["id", "title", "command", "args", "cwd", "status", "pid"]
|
||||||
@@ -8835,7 +8871,9 @@
|
|||||||
"pattern": "^pty.*"
|
"pattern": "^pty.*"
|
||||||
},
|
},
|
||||||
"exitCode": {
|
"exitCode": {
|
||||||
"type": "number"
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 9007199254740991
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"required": ["id", "exitCode"]
|
"required": ["id", "exitCode"]
|
||||||
@@ -9024,7 +9062,9 @@
|
|||||||
"type": "object",
|
"type": "object",
|
||||||
"properties": {
|
"properties": {
|
||||||
"created": {
|
"created": {
|
||||||
"type": "number"
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 9007199254740991
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"required": ["created"]
|
"required": ["created"]
|
||||||
@@ -9102,10 +9142,14 @@
|
|||||||
"type": "object",
|
"type": "object",
|
||||||
"properties": {
|
"properties": {
|
||||||
"created": {
|
"created": {
|
||||||
"type": "number"
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 9007199254740991
|
||||||
},
|
},
|
||||||
"completed": {
|
"completed": {
|
||||||
"type": "number"
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 9007199254740991
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"required": ["created"]
|
"required": ["created"]
|
||||||
@@ -9173,25 +9217,37 @@
|
|||||||
"type": "object",
|
"type": "object",
|
||||||
"properties": {
|
"properties": {
|
||||||
"total": {
|
"total": {
|
||||||
"type": "number"
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 9007199254740991
|
||||||
},
|
},
|
||||||
"input": {
|
"input": {
|
||||||
"type": "number"
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 9007199254740991
|
||||||
},
|
},
|
||||||
"output": {
|
"output": {
|
||||||
"type": "number"
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 9007199254740991
|
||||||
},
|
},
|
||||||
"reasoning": {
|
"reasoning": {
|
||||||
"type": "number"
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 9007199254740991
|
||||||
},
|
},
|
||||||
"cache": {
|
"cache": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"properties": {
|
"properties": {
|
||||||
"read": {
|
"read": {
|
||||||
"type": "number"
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 9007199254740991
|
||||||
},
|
},
|
||||||
"write": {
|
"write": {
|
||||||
"type": "number"
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 9007199254740991
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"required": ["read", "write"]
|
"required": ["read", "write"]
|
||||||
@@ -9311,10 +9367,14 @@
|
|||||||
"type": "object",
|
"type": "object",
|
||||||
"properties": {
|
"properties": {
|
||||||
"start": {
|
"start": {
|
||||||
"type": "number"
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 9007199254740991
|
||||||
},
|
},
|
||||||
"end": {
|
"end": {
|
||||||
"type": "number"
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 9007199254740991
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"required": ["start"]
|
"required": ["start"]
|
||||||
@@ -9408,10 +9468,14 @@
|
|||||||
"type": "object",
|
"type": "object",
|
||||||
"properties": {
|
"properties": {
|
||||||
"start": {
|
"start": {
|
||||||
"type": "number"
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 9007199254740991
|
||||||
},
|
},
|
||||||
"end": {
|
"end": {
|
||||||
"type": "number"
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 9007199254740991
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"required": ["start"]
|
"required": ["start"]
|
||||||
@@ -9427,12 +9491,12 @@
|
|||||||
},
|
},
|
||||||
"start": {
|
"start": {
|
||||||
"type": "integer",
|
"type": "integer",
|
||||||
"minimum": -9007199254740991,
|
"minimum": 0,
|
||||||
"maximum": 9007199254740991
|
"maximum": 9007199254740991
|
||||||
},
|
},
|
||||||
"end": {
|
"end": {
|
||||||
"type": "integer",
|
"type": "integer",
|
||||||
"minimum": -9007199254740991,
|
"minimum": 0,
|
||||||
"maximum": 9007199254740991
|
"maximum": 9007199254740991
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -9461,10 +9525,14 @@
|
|||||||
"type": "object",
|
"type": "object",
|
||||||
"properties": {
|
"properties": {
|
||||||
"line": {
|
"line": {
|
||||||
"type": "number"
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 9007199254740991
|
||||||
},
|
},
|
||||||
"character": {
|
"character": {
|
||||||
"type": "number"
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 9007199254740991
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"required": ["line", "character"]
|
"required": ["line", "character"]
|
||||||
@@ -9473,10 +9541,14 @@
|
|||||||
"type": "object",
|
"type": "object",
|
||||||
"properties": {
|
"properties": {
|
||||||
"line": {
|
"line": {
|
||||||
"type": "number"
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 9007199254740991
|
||||||
},
|
},
|
||||||
"character": {
|
"character": {
|
||||||
"type": "number"
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 9007199254740991
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"required": ["line", "character"]
|
"required": ["line", "character"]
|
||||||
@@ -9505,7 +9577,7 @@
|
|||||||
},
|
},
|
||||||
"kind": {
|
"kind": {
|
||||||
"type": "integer",
|
"type": "integer",
|
||||||
"minimum": -9007199254740991,
|
"minimum": 0,
|
||||||
"maximum": 9007199254740991
|
"maximum": 9007199254740991
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -9625,7 +9697,9 @@
|
|||||||
"type": "object",
|
"type": "object",
|
||||||
"properties": {
|
"properties": {
|
||||||
"start": {
|
"start": {
|
||||||
"type": "number"
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 9007199254740991
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"required": ["start"]
|
"required": ["start"]
|
||||||
@@ -9664,13 +9738,19 @@
|
|||||||
"type": "object",
|
"type": "object",
|
||||||
"properties": {
|
"properties": {
|
||||||
"start": {
|
"start": {
|
||||||
"type": "number"
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 9007199254740991
|
||||||
},
|
},
|
||||||
"end": {
|
"end": {
|
||||||
"type": "number"
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 9007199254740991
|
||||||
},
|
},
|
||||||
"compacted": {
|
"compacted": {
|
||||||
"type": "number"
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 9007199254740991
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"required": ["start", "end"]
|
"required": ["start", "end"]
|
||||||
@@ -9712,10 +9792,14 @@
|
|||||||
"type": "object",
|
"type": "object",
|
||||||
"properties": {
|
"properties": {
|
||||||
"start": {
|
"start": {
|
||||||
"type": "number"
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 9007199254740991
|
||||||
},
|
},
|
||||||
"end": {
|
"end": {
|
||||||
"type": "number"
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 9007199254740991
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"required": ["start", "end"]
|
"required": ["start", "end"]
|
||||||
@@ -9834,25 +9918,37 @@
|
|||||||
"type": "object",
|
"type": "object",
|
||||||
"properties": {
|
"properties": {
|
||||||
"total": {
|
"total": {
|
||||||
"type": "number"
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 9007199254740991
|
||||||
},
|
},
|
||||||
"input": {
|
"input": {
|
||||||
"type": "number"
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 9007199254740991
|
||||||
},
|
},
|
||||||
"output": {
|
"output": {
|
||||||
"type": "number"
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 9007199254740991
|
||||||
},
|
},
|
||||||
"reasoning": {
|
"reasoning": {
|
||||||
"type": "number"
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 9007199254740991
|
||||||
},
|
},
|
||||||
"cache": {
|
"cache": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"properties": {
|
"properties": {
|
||||||
"read": {
|
"read": {
|
||||||
"type": "number"
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 9007199254740991
|
||||||
},
|
},
|
||||||
"write": {
|
"write": {
|
||||||
"type": "number"
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 9007199254740991
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"required": ["read", "write"]
|
"required": ["read", "write"]
|
||||||
@@ -9949,12 +10045,12 @@
|
|||||||
},
|
},
|
||||||
"start": {
|
"start": {
|
||||||
"type": "integer",
|
"type": "integer",
|
||||||
"minimum": -9007199254740991,
|
"minimum": 0,
|
||||||
"maximum": 9007199254740991
|
"maximum": 9007199254740991
|
||||||
},
|
},
|
||||||
"end": {
|
"end": {
|
||||||
"type": "integer",
|
"type": "integer",
|
||||||
"minimum": -9007199254740991,
|
"minimum": 0,
|
||||||
"maximum": 9007199254740991
|
"maximum": 9007199254740991
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -9983,7 +10079,9 @@
|
|||||||
"const": "retry"
|
"const": "retry"
|
||||||
},
|
},
|
||||||
"attempt": {
|
"attempt": {
|
||||||
"type": "number"
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 9007199254740991
|
||||||
},
|
},
|
||||||
"error": {
|
"error": {
|
||||||
"$ref": "#/components/schemas/APIError"
|
"$ref": "#/components/schemas/APIError"
|
||||||
@@ -9992,7 +10090,9 @@
|
|||||||
"type": "object",
|
"type": "object",
|
||||||
"properties": {
|
"properties": {
|
||||||
"created": {
|
"created": {
|
||||||
"type": "number"
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 9007199254740991
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"required": ["created"]
|
"required": ["created"]
|
||||||
@@ -10090,7 +10190,9 @@
|
|||||||
"$ref": "#/components/schemas/Part"
|
"$ref": "#/components/schemas/Part"
|
||||||
},
|
},
|
||||||
"time": {
|
"time": {
|
||||||
"type": "number"
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 9007199254740991
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"required": ["sessionID", "part", "time"]
|
"required": ["sessionID", "part", "time"]
|
||||||
@@ -10182,13 +10284,19 @@
|
|||||||
"type": "object",
|
"type": "object",
|
||||||
"properties": {
|
"properties": {
|
||||||
"additions": {
|
"additions": {
|
||||||
"type": "number"
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 9007199254740991
|
||||||
},
|
},
|
||||||
"deletions": {
|
"deletions": {
|
||||||
"type": "number"
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 9007199254740991
|
||||||
},
|
},
|
||||||
"files": {
|
"files": {
|
||||||
"type": "number"
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 9007199254740991
|
||||||
},
|
},
|
||||||
"diffs": {
|
"diffs": {
|
||||||
"type": "array",
|
"type": "array",
|
||||||
@@ -10218,16 +10326,24 @@
|
|||||||
"type": "object",
|
"type": "object",
|
||||||
"properties": {
|
"properties": {
|
||||||
"created": {
|
"created": {
|
||||||
"type": "number"
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 9007199254740991
|
||||||
},
|
},
|
||||||
"updated": {
|
"updated": {
|
||||||
"type": "number"
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 9007199254740991
|
||||||
},
|
},
|
||||||
"compacting": {
|
"compacting": {
|
||||||
"type": "number"
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 9007199254740991
|
||||||
},
|
},
|
||||||
"archived": {
|
"archived": {
|
||||||
"type": "number"
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 9007199254740991
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"required": ["created", "updated"]
|
"required": ["created", "updated"]
|
||||||
@@ -10434,7 +10550,9 @@
|
|||||||
"$ref": "#/components/schemas/Part"
|
"$ref": "#/components/schemas/Part"
|
||||||
},
|
},
|
||||||
"time": {
|
"time": {
|
||||||
"type": "number"
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 9007199254740991
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"required": ["sessionID", "part", "time"]
|
"required": ["sessionID", "part", "time"]
|
||||||
@@ -10631,13 +10749,19 @@
|
|||||||
"type": "object",
|
"type": "object",
|
||||||
"properties": {
|
"properties": {
|
||||||
"additions": {
|
"additions": {
|
||||||
"type": "number"
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 9007199254740991
|
||||||
},
|
},
|
||||||
"deletions": {
|
"deletions": {
|
||||||
"type": "number"
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 9007199254740991
|
||||||
},
|
},
|
||||||
"files": {
|
"files": {
|
||||||
"type": "number"
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 9007199254740991
|
||||||
},
|
},
|
||||||
"diffs": {
|
"diffs": {
|
||||||
"type": "array",
|
"type": "array",
|
||||||
@@ -10694,7 +10818,9 @@
|
|||||||
"created": {
|
"created": {
|
||||||
"anyOf": [
|
"anyOf": [
|
||||||
{
|
{
|
||||||
"type": "number"
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 9007199254740991
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "null"
|
"type": "null"
|
||||||
@@ -10704,7 +10830,9 @@
|
|||||||
"updated": {
|
"updated": {
|
||||||
"anyOf": [
|
"anyOf": [
|
||||||
{
|
{
|
||||||
"type": "number"
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 9007199254740991
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "null"
|
"type": "null"
|
||||||
@@ -10714,7 +10842,9 @@
|
|||||||
"compacting": {
|
"compacting": {
|
||||||
"anyOf": [
|
"anyOf": [
|
||||||
{
|
{
|
||||||
"type": "number"
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 9007199254740991
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "null"
|
"type": "null"
|
||||||
@@ -10724,7 +10854,9 @@
|
|||||||
"archived": {
|
"archived": {
|
||||||
"anyOf": [
|
"anyOf": [
|
||||||
{
|
{
|
||||||
"type": "number"
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 9007199254740991
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "null"
|
"type": "null"
|
||||||
@@ -11481,7 +11613,9 @@
|
|||||||
},
|
},
|
||||||
"timeout": {
|
"timeout": {
|
||||||
"description": "Timeout in ms for MCP server requests. Defaults to 5000 (5 seconds) if not specified.",
|
"description": "Timeout in ms for MCP server requests. Defaults to 5000 (5 seconds) if not specified.",
|
||||||
"type": "number"
|
"type": "integer",
|
||||||
|
"exclusiveMinimum": 0,
|
||||||
|
"maximum": 9007199254740991
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"required": ["type", "command"]
|
"required": ["type", "command"]
|
||||||
@@ -11547,7 +11681,9 @@
|
|||||||
},
|
},
|
||||||
"timeout": {
|
"timeout": {
|
||||||
"description": "Timeout in ms for MCP server requests. Defaults to 5000 (5 seconds) if not specified.",
|
"description": "Timeout in ms for MCP server requests. Defaults to 5000 (5 seconds) if not specified.",
|
||||||
"type": "number"
|
"type": "integer",
|
||||||
|
"exclusiveMinimum": 0,
|
||||||
|
"maximum": 9007199254740991
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"required": ["type", "url"]
|
"required": ["type", "url"]
|
||||||
@@ -12055,7 +12191,9 @@
|
|||||||
"type": "string"
|
"type": "string"
|
||||||
},
|
},
|
||||||
"expires": {
|
"expires": {
|
||||||
"type": "number"
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 9007199254740991
|
||||||
},
|
},
|
||||||
"accountId": {
|
"accountId": {
|
||||||
"type": "string"
|
"type": "string"
|
||||||
@@ -12458,7 +12596,9 @@
|
|||||||
"type": "string"
|
"type": "string"
|
||||||
},
|
},
|
||||||
"switchableOrgCount": {
|
"switchableOrgCount": {
|
||||||
"type": "number"
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 9007199254740991
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"required": ["consoleManagedProviders", "switchableOrgCount"]
|
"required": ["consoleManagedProviders", "switchableOrgCount"]
|
||||||
@@ -12579,13 +12719,19 @@
|
|||||||
"type": "object",
|
"type": "object",
|
||||||
"properties": {
|
"properties": {
|
||||||
"additions": {
|
"additions": {
|
||||||
"type": "number"
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 9007199254740991
|
||||||
},
|
},
|
||||||
"deletions": {
|
"deletions": {
|
||||||
"type": "number"
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 9007199254740991
|
||||||
},
|
},
|
||||||
"files": {
|
"files": {
|
||||||
"type": "number"
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 9007199254740991
|
||||||
},
|
},
|
||||||
"diffs": {
|
"diffs": {
|
||||||
"type": "array",
|
"type": "array",
|
||||||
@@ -12615,16 +12761,24 @@
|
|||||||
"type": "object",
|
"type": "object",
|
||||||
"properties": {
|
"properties": {
|
||||||
"created": {
|
"created": {
|
||||||
"type": "number"
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 9007199254740991
|
||||||
},
|
},
|
||||||
"updated": {
|
"updated": {
|
||||||
"type": "number"
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 9007199254740991
|
||||||
},
|
},
|
||||||
"compacting": {
|
"compacting": {
|
||||||
"type": "number"
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 9007199254740991
|
||||||
},
|
},
|
||||||
"archived": {
|
"archived": {
|
||||||
"type": "number"
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 9007199254740991
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"required": ["created", "updated"]
|
"required": ["created", "updated"]
|
||||||
@@ -12710,10 +12864,14 @@
|
|||||||
"type": "object",
|
"type": "object",
|
||||||
"properties": {
|
"properties": {
|
||||||
"start": {
|
"start": {
|
||||||
"type": "number"
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 9007199254740991
|
||||||
},
|
},
|
||||||
"end": {
|
"end": {
|
||||||
"type": "number"
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 9007199254740991
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"required": ["start"]
|
"required": ["start"]
|
||||||
@@ -12776,12 +12934,12 @@
|
|||||||
},
|
},
|
||||||
"start": {
|
"start": {
|
||||||
"type": "integer",
|
"type": "integer",
|
||||||
"minimum": -9007199254740991,
|
"minimum": 0,
|
||||||
"maximum": 9007199254740991
|
"maximum": 9007199254740991
|
||||||
},
|
},
|
||||||
"end": {
|
"end": {
|
||||||
"type": "integer",
|
"type": "integer",
|
||||||
"minimum": -9007199254740991,
|
"minimum": 0,
|
||||||
"maximum": 9007199254740991
|
"maximum": 9007199254740991
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -12956,7 +13114,9 @@
|
|||||||
"type": "string"
|
"type": "string"
|
||||||
},
|
},
|
||||||
"kind": {
|
"kind": {
|
||||||
"type": "number"
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 9007199254740991
|
||||||
},
|
},
|
||||||
"location": {
|
"location": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
@@ -13029,16 +13189,24 @@
|
|||||||
"type": "object",
|
"type": "object",
|
||||||
"properties": {
|
"properties": {
|
||||||
"oldStart": {
|
"oldStart": {
|
||||||
"type": "number"
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 9007199254740991
|
||||||
},
|
},
|
||||||
"oldLines": {
|
"oldLines": {
|
||||||
"type": "number"
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 9007199254740991
|
||||||
},
|
},
|
||||||
"newStart": {
|
"newStart": {
|
||||||
"type": "number"
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 9007199254740991
|
||||||
},
|
},
|
||||||
"newLines": {
|
"newLines": {
|
||||||
"type": "number"
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 9007199254740991
|
||||||
},
|
},
|
||||||
"lines": {
|
"lines": {
|
||||||
"type": "array",
|
"type": "array",
|
||||||
@@ -13074,12 +13242,12 @@
|
|||||||
},
|
},
|
||||||
"added": {
|
"added": {
|
||||||
"type": "integer",
|
"type": "integer",
|
||||||
"minimum": -9007199254740991,
|
"minimum": 0,
|
||||||
"maximum": 9007199254740991
|
"maximum": 9007199254740991
|
||||||
},
|
},
|
||||||
"removed": {
|
"removed": {
|
||||||
"type": "integer",
|
"type": "integer",
|
||||||
"minimum": -9007199254740991,
|
"minimum": 0,
|
||||||
"maximum": 9007199254740991
|
"maximum": 9007199254740991
|
||||||
},
|
},
|
||||||
"status": {
|
"status": {
|
||||||
@@ -13360,10 +13528,14 @@
|
|||||||
"type": "string"
|
"type": "string"
|
||||||
},
|
},
|
||||||
"additions": {
|
"additions": {
|
||||||
"type": "number"
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 9007199254740991
|
||||||
},
|
},
|
||||||
"deletions": {
|
"deletions": {
|
||||||
"type": "number"
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 9007199254740991
|
||||||
},
|
},
|
||||||
"status": {
|
"status": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
|
|||||||
Reference in New Issue
Block a user