import type { RpcApi } from "@opencode/client/effect/api" export type { RpcClient } from "@opencode/client/effect/api" import type { Rpc } from "@opencode/schema/rpc" import type { Effect, Scope } from "effect" import type { Registration } from "./registration.js" export interface RpcCallContext { readonly error: Rpc.ErrorFactory } export type RpcHandlers = { readonly [Name in keyof D["methods"]]: ( input: Rpc.Output, context: RpcCallContext, ) => Effect.Effect, Rpc.HandlerError> } export interface RpcRegistration extends Registration { readonly events: { readonly emit: (...args: Rpc.EventInput) => Effect.Effect } } export interface RpcDomain extends RpcApi { readonly register: ( definition: D, handlers: RpcHandlers>, ) => Effect.Effect, unknown, Scope.Scope> }