Something went wrong. Try again.
opencode v2 mirror
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307import { Schema, SchemaGetter } from "effect"import { HttpApi, HttpApiEndpoint, HttpApiGroup, HttpApiSchema } from "effect/unstable/httpapi"import { Worktree } from "@opencode/schema/worktree"
const Json = Schema.Json.pipe( Schema.decodeTo(Schema.Unknown, { decode: SchemaGetter.passthrough(), encode: SchemaGetter.transform(jsonValue), }), HttpApiSchema.asJson(),)const JsonPayload = Schema.Unknown.pipe(HttpApiSchema.asJson())const Query = Schema.Struct({ directory: Schema.optional(Schema.String), parentID: Schema.optional(Schema.String), search: Schema.optional(Schema.String), order: Schema.optional(Schema.String), cursor: Schema.optional(Schema.String), limit: Schema.optional(Schema.NumberFromString), path: Schema.optional(Schema.String), query: Schema.optional(Schema.String), type: Schema.optional(Schema.String),})const SessionParams = { sessionID: Schema.String }const NoContent = HttpApiSchema.NoContent
export class MockNotFound extends Schema.TaggedError<MockNotFound>()("MockNotFound", { message: Schema.String,}) {}
export class MockBadRequest extends Schema.TaggedError<MockBadRequest>()("MockBadRequest", { message: Schema.String,}) {}
const Group = HttpApiGroup.make("mock") .add(HttpApiEndpoint.get("info", "/api/info", { success: Json })) .add( HttpApiEndpoint.get("event", "/api/event", { success: Schema.String.pipe(HttpApiSchema.asText({ contentType: "text/event-stream" })), }), ) .add(HttpApiEndpoint.get("reference", "/api/reference", { success: Json })) .add(HttpApiEndpoint.get("config", "/api/config", { success: Json })) .add(HttpApiEndpoint.get("agent", "/api/agent", { success: Json })) .add(HttpApiEndpoint.get("provider", "/api/provider", { success: Json })) .add(HttpApiEndpoint.get("model", "/api/model", { success: Json })) .add(HttpApiEndpoint.get("modelDefault", "/api/model/default", { success: Json })) .add(HttpApiEndpoint.get("integrationList", "/api/integration", { success: Json })) .add( HttpApiEndpoint.get("integrationGet", "/api/integration/:integrationID", { params: { integrationID: Schema.String }, success: Json, }), ) .add( HttpApiEndpoint.post("integrationConnect", "/api/integration/:integrationID/connect/key", { params: { integrationID: Schema.String }, payload: JsonPayload, success: NoContent, }), ) .add( HttpApiEndpoint.delete("credentialRemove", "/api/credential/:credentialID", { params: { credentialID: Schema.String }, success: NoContent, }), ) .add(HttpApiEndpoint.get("command", "/api/command", { success: Json })) .add(HttpApiEndpoint.get("skill", "/api/skill", { success: Json })) .add(HttpApiEndpoint.get("plugin", "/api/plugin", { success: Json })) .add(HttpApiEndpoint.get("mcp", "/api/mcp", { success: Json })) .add(HttpApiEndpoint.get("mcpResource", "/api/mcp/resource", { success: Json })) .add(HttpApiEndpoint.get("projectList", "/api/project", { success: Json })) .add( HttpApiEndpoint.patch("projectUpdate", "/api/project/:projectID", { params: { projectID: Schema.String }, payload: JsonPayload, success: Json, }), ) .add(HttpApiEndpoint.get("configShells", "/api/config/shell", { success: Json })) .add( HttpApiEndpoint.patch("configUpdate", "/api/experimental/config", { payload: Schema.Struct({ shell: Schema.NullOr(Schema.String) }), success: HttpApiSchema.NoContent, }), ) .add(HttpApiEndpoint.get("websearchProviders", "/api/websearch/provider", { success: Json })) .add( HttpApiEndpoint.get("worktreeList", "/api/worktree", { query: Schema.Struct({ projectID: Schema.String }), success: Json, }), ) .add( HttpApiEndpoint.post("worktreeCreate", "/api/worktree", { payload: Worktree.CreateInput, success: Json, }), ) .add( HttpApiEndpoint.delete("worktreeRemove", "/api/worktree", { payload: Worktree.RemoveInput, success: NoContent, }), ) .add( HttpApiEndpoint.post("worktreeRefresh", "/api/worktree/refresh", { payload: Schema.Struct({ projectID: Schema.String }), success: NoContent, }), ) .add(HttpApiEndpoint.get("location", "/api/location", { success: Json })) .add(HttpApiEndpoint.get("permissionRequests", "/api/permission/request", { success: Json })) .add(HttpApiEndpoint.get("formRequests", "/api/form", { success: Json })) .add(HttpApiEndpoint.get("vcs", "/api/vcs", { success: Json })) .add(HttpApiEndpoint.get("vcsStatus", "/api/vcs/status", { success: Json })) .add(HttpApiEndpoint.get("vcsBranches", "/api/vcs/branch", { success: Json })) .add(HttpApiEndpoint.get("vcsDiff", "/api/vcs/diff", { success: Json })) .add(HttpApiEndpoint.get("fsList", "/api/fs/list", { query: Query, success: Json })) .add( HttpApiEndpoint.get("fsRead", "/api/fs/read/*", { success: Schema.Uint8Array.pipe(HttpApiSchema.asUint8Array()), }), ) .add(HttpApiEndpoint.get("fsFind", "/api/fs/find", { query: Query, success: Json })) .add(HttpApiEndpoint.get("shell", "/api/shell", { success: Json })) .add( HttpApiEndpoint.get("ptyConnectToken", "/api/pty/:ptyID/connect-token", { params: { ptyID: Schema.String }, success: Json, }), ) .add( HttpApiEndpoint.get("sessionList", "/api/session", { query: Query, success: Json, error: MockBadRequest.pipe(HttpApiSchema.status(400)), }), ) .add(HttpApiEndpoint.post("sessionCreate", "/api/session", { payload: JsonPayload, success: Json })) .add(HttpApiEndpoint.get("sessionActive", "/api/session/active", { success: Json })) .add( HttpApiEndpoint.get("sessionGet", "/api/session/:sessionID", { params: SessionParams, success: Json, error: MockNotFound.pipe(HttpApiSchema.status(404)), }), ) .add( HttpApiEndpoint.delete("sessionRemove", "/api/session/:sessionID", { params: SessionParams, success: NoContent, }), ) .add( HttpApiEndpoint.post("sessionShell", "/api/session/:sessionID/shell", { params: SessionParams, success: NoContent, }), ) .add( HttpApiEndpoint.get("sessionForm", "/api/session/:sessionID/form", { params: SessionParams, success: Json, }), ) .add( HttpApiEndpoint.post("sessionFormReply", "/api/session/:sessionID/form/:formID/reply", { params: { ...SessionParams, formID: Schema.String }, payload: JsonPayload, success: NoContent, }), ) .add( HttpApiEndpoint.delete("sessionFormCancel", "/api/session/:sessionID/form/:formID", { params: { ...SessionParams, formID: Schema.String }, success: NoContent, }), ) .add( HttpApiEndpoint.post("sessionBackground", "/api/session/:sessionID/background", { params: SessionParams, success: NoContent, }), ) .add( HttpApiEndpoint.get("sessionInbox", "/api/session/:sessionID/inbox", { params: SessionParams, success: Json, }), ) .add( HttpApiEndpoint.post("sessionPrompt", "/api/session/:sessionID/prompt", { params: SessionParams, payload: JsonPayload, success: Json, }), ) .add( HttpApiEndpoint.post("sessionGenerate", "/api/session/:sessionID/generate", { params: SessionParams, payload: Schema.Struct({ prompt: Schema.String }), success: Json, }), ) .add( HttpApiEndpoint.post("sessionSwitchAgent", "/api/session/:sessionID/agent", { params: SessionParams, payload: JsonPayload, success: NoContent, }), ) .add( HttpApiEndpoint.post("sessionSwitchModel", "/api/session/:sessionID/model", { params: SessionParams, payload: JsonPayload, success: NoContent, }), ) .add( HttpApiEndpoint.delete("sessionInboxCancel", "/api/session/:sessionID/inbox/:inboxID", { params: { ...SessionParams, inboxID: Schema.String }, success: NoContent, }), ) .add( HttpApiEndpoint.patch("sessionInboxUpdate", "/api/session/:sessionID/inbox/:inboxID", { params: { ...SessionParams, inboxID: Schema.String }, payload: Schema.Struct({ delivery: Schema.Literals(["steer", "queue"]) }), success: NoContent, }), ) .add( HttpApiEndpoint.get("sessionPermission", "/api/session/:sessionID/permission", { params: SessionParams, success: Json, }), ) .add( HttpApiEndpoint.post("sessionPermissionReply", "/api/session/:sessionID/permission/:permissionID/reply", { params: { ...SessionParams, permissionID: Schema.String }, payload: JsonPayload, success: NoContent, }), ) .add( HttpApiEndpoint.patch("sessionRename", "/api/session/:sessionID", { params: SessionParams, payload: JsonPayload, success: NoContent, }), ) .add( HttpApiEndpoint.post("sessionInterrupt", "/api/session/:sessionID/interrupt", { params: SessionParams, success: NoContent, }), ) .add( HttpApiEndpoint.post("sessionRevertStage", "/api/session/:sessionID/revert/stage", { params: SessionParams, payload: JsonPayload, success: Json, error: MockBadRequest.pipe(HttpApiSchema.status(400)), }), ) .add( HttpApiEndpoint.delete("sessionRevertClear", "/api/session/:sessionID/revert", { params: SessionParams, success: NoContent, }), ) .add( HttpApiEndpoint.post("sessionRevertCommit", "/api/session/:sessionID/revert/commit", { params: SessionParams, success: NoContent, }), ) .add( HttpApiEndpoint.get("messageGet", "/api/session/:sessionID/message/:messageID", { params: { ...SessionParams, messageID: Schema.String }, success: Json, error: MockNotFound.pipe(HttpApiSchema.status(404)), }), ) .add( HttpApiEndpoint.get("messageList", "/api/session/:sessionID/message", { params: SessionParams, query: Query, success: Json, error: MockBadRequest.pipe(HttpApiSchema.status(400)), }), )
export const MockApi = HttpApi.make("mock").add(Group)
function jsonValue(value: unknown): Schema.Json { if (value === null || typeof value === "string" || typeof value === "boolean") return value if (typeof value === "number") return Number.isFinite(value) ? value : null if (Array.isArray(value)) return value.map(jsonValue) if (!value || typeof value !== "object") return null return Object.fromEntries( Object.entries(value).flatMap(([key, item]) => (item === undefined ? [] : [[key, jsonValue(item)]])), )}