import type { AgentInfo, CommandInfo, FormInfo, IntegrationInfo, LocationRef, McpResource, McpServer, ModelInfo, OpenCodeClient, OpenCodeEvent, PermissionSavedInfo, PermissionV2Request, ProviderV2Info, ReferenceInfo, SessionInfo, SessionMessageInfo, SessionPendingInfo, ShellInfo, SkillInfo, } from "@opencode-ai/client" import type { JSX } from "@opentui/solid" interface LocationCollection { list(location?: LocationRef): Value[] | undefined refresh(location?: LocationRef): Promise } export interface Data { readonly on: ( type: Type, handler: (event: Extract) => void, ) => () => void readonly listen: (handler: (event: { details: OpenCodeEvent }) => void) => () => void readonly session: { list(): SessionInfo[] get(sessionID: string): SessionInfo | undefined root(sessionID: string): string family(sessionID: string): string[] cost(sessionID: string): number status(sessionID: string): "idle" | "running" readonly pending: { list(sessionID: string): SessionPendingInfo[] refresh(sessionID: string): Promise } refresh(sessionID: string): Promise readonly message: { list(sessionID: string): SessionMessageInfo[] get(sessionID: string, messageID: string): SessionMessageInfo | undefined refresh(sessionID: string): Promise } readonly permission: { list(sessionID: string): PermissionV2Request[] | undefined refresh(sessionID: string): Promise } readonly form: { list(sessionID: string, location?: LocationRef): Array | undefined refresh(sessionID: string, location?: LocationRef): Promise } } readonly project: { readonly permission: { list(projectID: string): PermissionSavedInfo[] | undefined refresh(projectID: string): Promise } } readonly shell: { list(location?: LocationRef): ShellInfo[] get(id: string): ShellInfo | undefined refresh(location?: LocationRef): Promise } readonly location: { default(): LocationRef refresh(location?: LocationRef): Promise readonly agent: LocationCollection readonly command: LocationCollection readonly integration: LocationCollection readonly mcp: { readonly server: LocationCollection readonly resource: LocationCollection } readonly model: LocationCollection readonly provider: LocationCollection readonly reference: LocationCollection readonly skill: LocationCollection } } export interface RouteDefinition { readonly name: string readonly render: (input: { readonly params: any }) => JSX.Element } export interface Route { register(definition: RouteDefinition): () => void navigate(input: { readonly name: string; readonly params?: any }): void current(): { readonly name: string readonly params: any } } export interface UI { readonly route: Route } export interface Context { readonly options: Readonly> readonly client: OpenCodeClient readonly data: Data readonly ui: UI }