import type { HappyMcpCallCompletion, HappyMcpEvent, HappyMcpServerRegistration, HappyMcpToolResult } from "happy-plugins"; import type { McpToolLoadResult, McpToolProvider } from "../mcp/types.js"; import type { PermissionMode } from "../permissions/index.js"; export type PluginMcpRegistrationRetirement = { reason: string; status: "failed"; } | { reason: string; status: "stopped"; }; export interface PluginMcpConnectionOptions { onActiveRegistrationRetired?: (retirement: PluginMcpRegistrationRetirement) => void; } export interface PluginMcpConnection { readonly generation: string; attach(registrationId: string, send: (event: HappyMcpEvent) => boolean): () => void; close(): void; complete(registrationId: string, callId: string, completion: HappyMcpCallCompletion): void; register(server: HappyMcpServerRegistration): string; unregister(registrationId: string): void; } export declare class PluginMcpNotRunningError extends Error { readonly code = "plugin_not_running"; } export declare class PluginMcpToolNotFoundError extends Error { readonly code = "tool_not_found"; } export declare class PluginMcpStaleGenerationError extends Error { readonly code = "stale_generation"; } export declare class PluginMcpCallTimeoutError extends Error { readonly code = "timeout"; } export interface PluginMcpRegistryOptions { callTimeoutMs?: number; } /** * The daemon-wide live catalog of MCP servers owned by plugin process generations. * * Registrations become visible only after the SDK's event stream is attached. Retiring an owner * rejects its pending calls synchronously, so a result from an old process can never land after a * restart or replacement. */ export declare class PluginMcpRegistry implements McpToolProvider { #private; constructor(options?: PluginMcpRegistryOptions); createConnection(plugin: { folder: string; name: string; }, options?: PluginMcpConnectionOptions): PluginMcpConnection; load(_cwd: string, permissionMode: PermissionMode): Promise; listAppTools(folder: string, generation: string): { _meta: { ui: { visibility: ("model" | "app")[]; }; }; description: string; name: string; server: string; }[]; callAppTool(folder: string, generation: string, serverName: string, toolName: string, input: unknown, signal?: AbortSignal): Promise; close(): Promise; }