import { Schema } from "effect" import { HttpApi } from "effect/unstable/httpapi" import { BusEvent } from "@/bus/bus-event" import { SyncEvent } from "@/sync" import { ConfigApi } from "./groups/config" import { ControlApi } from "./groups/control" import { EventApi } from "./event" import { ExperimentalApi } from "./groups/experimental" import { FileApi } from "./groups/file" import { GlobalApi } from "./groups/global" import { InstanceApi } from "./groups/instance" import { McpApi } from "./groups/mcp" import { PermissionApi } from "./groups/permission" import { ProjectApi } from "./groups/project" import { ProviderApi } from "./groups/provider" import { PtyApi, PtyConnectApi } from "./groups/pty" import { QuestionApi } from "./groups/question" import { SessionApi } from "./groups/session" import { SyncApi } from "./groups/sync" import { TuiApi } from "./groups/tui" import { WorkspaceApi } from "./groups/workspace" import { V2Api } from "./groups/v2" import { Authorization } from "./middleware/authorization" import { SchemaErrorMiddleware } from "./middleware/schema-error" // SSE event schemas built from the BusEvent/SyncEvent registries. const EventSchema = Schema.Union(BusEvent.effectPayloads()).annotate({ identifier: "Event" }) const SyncEventSchemas = SyncEvent.effectPayloads() export const RootHttpApi = HttpApi.make("opencode-root") .addHttpApi(ControlApi) .addHttpApi(GlobalApi) .middleware(SchemaErrorMiddleware) .middleware(Authorization) export const InstanceHttpApi = HttpApi.make("opencode-instance") .addHttpApi(ConfigApi) .addHttpApi(ExperimentalApi) .addHttpApi(FileApi) .addHttpApi(InstanceApi) .addHttpApi(McpApi) .addHttpApi(ProjectApi) .addHttpApi(PtyApi) .addHttpApi(QuestionApi) .addHttpApi(PermissionApi) .addHttpApi(ProviderApi) .addHttpApi(SessionApi) .addHttpApi(SyncApi) .addHttpApi(V2Api) .addHttpApi(TuiApi) .addHttpApi(WorkspaceApi) .middleware(SchemaErrorMiddleware) export const OpenCodeHttpApi = HttpApi.make("opencode") .addHttpApi(RootHttpApi) .addHttpApi(EventApi) .addHttpApi(InstanceHttpApi) .addHttpApi(PtyConnectApi) .annotate(HttpApi.AdditionalSchemas, [EventSchema, ...SyncEventSchemas]) export type RootHttpApiType = typeof RootHttpApi export type InstanceHttpApiType = typeof InstanceHttpApi