import { Extension, Plugin, PluginCommand, PluginState } from '../index.js';
/**
 * Options for plugin manager
 */
export interface PluginManagerOptions {
    /** Whether to automatically enable plugins after registration */
    autoEnable?: boolean;
    /** Configuration for all plugins */
    config?: Record<string, Record<string, unknown>>;
    /** Current platform version */
    platformVersion?: string;
}
/**
 * Manager for Vooodooo plugins
 */
export declare class PluginManager {
    /** Map of plugin ID to plugin instance */
    private plugins;
    /** Extension registry */
    private extensionRegistry;
    /** Knowledge system for plugins */
    private knowledgeSystem;
    /** Plugin configuration storage */
    private config;
    /** Registered CLI commands */
    private commands;
    /** Options for the plugin manager */
    private options;
    constructor(options?: PluginManagerOptions);
    /**
     * Register a plugin with the system
     */
    registerPlugin(plugin: Plugin): Promise<void>;
    /**
     * Enable a plugin
     */
    enablePlugin(pluginId: string): Promise<void>;
    /**
     * Disable a plugin
     */
    disablePlugin(pluginId: string): Promise<void>;
    /**
     * Unregister a plugin from the system
     */
    unregisterPlugin(pluginId: string): Promise<void>;
    /**
     * Get all registered plugins
     */
    getPlugins(): Plugin[];
    /**
     * Get plugin state
     */
    getPluginState(pluginId: string): PluginState;
    /**
     * Get all plugins in a specific state
     */
    getPluginsByState(state: PluginState): Plugin[];
    /**
     * Get plugin by ID
     */
    getPlugin(pluginId: string): Plugin | undefined;
    /**
     * Execute a function on all extensions for a specific extension point
     */
    executeExtensions<T, R>(extensionPointId: string, fn: (extension: Extension<T>) => Promise<R>): Promise<R[]>;
    /**
     * Get all registered commands
     */
    getCommands(): PluginCommand[];
    /**
     * Get a specific command by name
     */
    getCommand(name: string): PluginCommand | undefined;
    /**
     * Execute a command
     */
    executeCommand(name: string, args: any, options: any): Promise<void>;
    /**
     * Extract dependencies from a plugin
     */
    private extractDependencies;
    /**
     * Create a log function for a plugin
     */
    private createLogFunction;
    /**
     * Create a register extension function for a plugin
     */
    private createRegisterExtensionFunction;
    /**
     * Create knowledge system API for a plugin
     */
    private createKnowledgeSystemAPI;
    /**
     * Register a CLI command provided by a plugin
     */
    private registerPluginCommand;
    /**
     * Get plugin configuration
     */
    private getPluginConfig;
    /**
     * Set plugin configuration
     */
    private setPluginConfig;
}
/**
 * Create a plugin manager instance
 */
export declare function createPluginManager(options?: PluginManagerOptions): PluginManager;
