/** * @claude-in-mobile/plugin-api * * Public plugin contract for the claude-in-mobile microkernel. * * Versioned independently of the product. See docs/adr/0002-plugin-api-v1.md * for the formal contract, lifecycle FSM, and event bus topics. */ export declare const PLUGIN_API_VERSION: "1"; export type PluginApiVersion = typeof PLUGIN_API_VERSION; export type Capability = "screen" | "input" | "ui" | "shell" | "appLifecycle" | "permissions" | "logs" | "terminal" | "fileTransfer" | "deviceMgmt" | "meta-tools"; export declare const ALL_CAPABILITIES: readonly Capability[]; export interface PluginManifest { readonly id: string; readonly name: string; readonly version: string; readonly apiVersion: PluginApiVersion; readonly capabilities: readonly Capability[]; readonly tools?: readonly string[]; readonly description?: string; readonly homepage?: string; } export interface Logger { debug(msg: string, meta?: Record): void; info(msg: string, meta?: Record): void; warn(msg: string, meta?: Record): void; error(msg: string, meta?: Record): void; } export interface EventBus { emit(topic: T, payload: CoreTopics[T]): void; on(topic: T, handler: (payload: CoreTopics[T]) => void): Unsubscribe; } export type Unsubscribe = () => void; export interface CoreTopics { "plugin.registered": { pluginId: string; }; "plugin.initialized": { pluginId: string; }; "plugin.failed": { pluginId: string; error: string; }; "plugin.disposed": { pluginId: string; }; "session.spawned": { pluginId: string; sessionId: string; }; "session.died": { pluginId: string; sessionId: string; exitCode?: number; }; "device.connected": { pluginId: string; deviceId: string; }; "device.disconnected": { pluginId: string; deviceId: string; }; "tool.invoked": { tool: string; args: unknown; }; } export interface ToolDefinition { readonly name: string; readonly description: string; readonly inputSchema: Record; handler(args: unknown): Promise; } export interface PluginContext { readonly logger: Logger; readonly config: Readonly>; readonly eventBus: EventBus; registerTool(def: ToolDefinition): void; } export type PluginState = "unregistered" | "registered" | "initializing" | "active" | "disposing" | "disposed" | "failed"; export interface SourcePlugin { readonly manifest: PluginManifest; init(ctx: PluginContext): Promise | void; dispose?(): Promise | void; } export declare class PluginContractError extends Error { readonly pluginId: string; constructor(message: string, pluginId: string); } export declare class CapabilityMissingError extends PluginContractError { constructor(pluginId: string, capability: Capability); } export declare class ApiVersionMismatchError extends PluginContractError { constructor(pluginId: string, requested: string, supported: PluginApiVersion); } export declare function isCapability(value: unknown): value is Capability; export declare function hasCapability(manifest: PluginManifest, cap: Capability): boolean; //# sourceMappingURL=index.d.ts.map