import { VoxketClient } from '../core/client';
import { VoxketEvents } from '../types/core';
export interface PluginContext {
    client: VoxketClient;
    emit: <K extends keyof VoxketEvents>(event: K, ...args: Parameters<VoxketEvents[K]>) => void;
    on: <K extends keyof VoxketEvents>(event: K, handler: VoxketEvents[K]) => () => void;
    config: Record<string, any>;
}
export interface Plugin {
    name: string;
    version: string;
    description?: string;
    dependencies?: string[];
    install?(context: PluginContext): void | Promise<void>;
    uninstall?(context: PluginContext): void | Promise<void>;
    onSessionStart?(context: PluginContext, sessionId: string): void | Promise<void>;
    onSessionEnd?(context: PluginContext, sessionId: string): void | Promise<void>;
    onAgentResponse?(context: PluginContext, response: any): void | Promise<void>;
    config?: Record<string, any>;
}
export declare class PluginManager {
    private plugins;
    private installedPlugins;
    private context;
    constructor(client: VoxketClient);
    /**
     * Register a plugin
     */
    register(plugin: Plugin): void;
    /**
     * Install a plugin
     */
    install(pluginName: string, config?: Record<string, any>): Promise<void>;
    /**
     * Uninstall a plugin
     */
    uninstall(pluginName: string): Promise<void>;
    /**
     * Check if a plugin is installed
     */
    isInstalled(pluginName: string): boolean;
    /**
     * Get list of installed plugins
     */
    getInstalledPlugins(): string[];
    /**
     * Get list of available plugins
     */
    getAvailablePlugins(): string[];
    /**
     * Get plugin info
     */
    getPluginInfo(pluginName: string): Plugin | undefined;
    private setupPluginEvents;
}
export declare function createPlugin(definition: Plugin): Plugin;
export declare function createModalityPlugin(name: string, modality: string, handlers: {
    onActivate?: (context: PluginContext) => void | Promise<void>;
    onDeactivate?: (context: PluginContext) => void | Promise<void>;
    onMessage?: (context: PluginContext, message: any) => void | Promise<void>;
}): Plugin;
export declare const analyticsPlugin: Plugin;
export declare const debugPlugin: Plugin;
export declare const metricsPlugin: Plugin;
