export type JsonRpcId = number | string; export interface JsonRpcMessage { jsonrpc?: "2.0"; id?: JsonRpcId | null; method?: string; params?: unknown; result?: unknown; error?: { code?: number; message?: string; data?: unknown; }; } export type ReasoningEffort = "none" | "minimal" | "low" | "medium" | "high" | "xhigh" | "max"; export interface AcpInitializeResult { protocolVersion?: number; authMethods?: Array<{ id?: string; name?: string; description?: string }>; } export interface AcpSessionResult { sessionId?: string; } export interface AcpPromptMeta { requestId?: string; promptId?: string; inputTokens?: number; outputTokens?: number; cachedReadTokens?: number; reasoningTokens?: number; totalTokens?: number; modelId?: string; } export interface AcpPromptResult { stopReason?: string; _meta?: AcpPromptMeta; } export interface AcpSessionUpdate { sessionUpdate?: string; content?: { text?: string; type?: string }; title?: string; kind?: string; status?: string; toolCallId?: string; rawInput?: unknown; } export interface PermissionOption { optionId: string; name: string; kind: "allow_once" | "allow_always" | "reject_once" | "reject_always" | string; } export interface PermissionRequest { sessionId?: string; toolCall?: { toolCallId?: string; title?: string; kind?: string; rawInput?: unknown; }; options?: PermissionOption[]; } export type PermissionResponse = | { outcome: { outcome: "cancelled" } } | { outcome: { outcome: "selected"; optionId: string } }; export interface PermissionUiContext { hasUI: boolean; ui: { select( title: string, options: string[], opts?: { signal?: AbortSignal }, ): Promise; }; } export function isRecord(value: unknown): value is Record { return typeof value === "object" && value !== null && !Array.isArray(value); }