/**
 * Plugin Loader
 *
 * Discovers and loads scanner plugins from:
 * 1. Local directory: `.vaspera/plugins/{name}/manifest.json`
 * 2. npm packages: `vaspera-scanner-{name}`
 *
 * Plugins run in child processes for isolation (sandbox mode).
 *
 * @module plugins/loader
 */
import { type LoadedPlugin, type PluginLoadOptions, type PluginExecutionResult, type ScannerPluginContext, type PluginRegistryEntry } from "./types.js";
/**
 * Plugin registry storing all discovered plugins
 */
declare class PluginRegistry {
    private plugins;
    private projectPath;
    constructor(projectPath: string);
    /**
     * Add a plugin to the registry
     */
    add(plugin: LoadedPlugin): void;
    /**
     * Get a plugin by name
     */
    get(name: string): LoadedPlugin | undefined;
    /**
     * Get all loaded plugins
     */
    getAll(): LoadedPlugin[];
    /**
     * Get all enabled plugins
     */
    getEnabled(): LoadedPlugin[];
    /**
     * Check if a plugin is loaded
     */
    has(name: string): boolean;
    /**
     * Remove a plugin
     */
    remove(name: string): boolean;
    /**
     * Get registry entries for status reporting
     */
    getEntries(): PluginRegistryEntry[];
    /**
     * Clear all plugins
     */
    clear(): void;
}
/**
 * Load plugins for a project
 */
export declare function loadPlugins(projectPath: string, options?: PluginLoadOptions): Promise<PluginRegistry>;
/**
 * Execute a plugin in sandbox mode (child process)
 */
export declare function executePluginSandboxed(plugin: LoadedPlugin, context: ScannerPluginContext): Promise<PluginExecutionResult>;
/**
 * Execute a plugin directly (no sandbox)
 */
export declare function executePluginDirect(plugin: LoadedPlugin, context: ScannerPluginContext): Promise<PluginExecutionResult>;
/**
 * Execute all plugins for a project
 */
export declare function executePlugins(registry: PluginRegistry, projectPath: string, options?: {
    files?: string[];
    timeout?: number;
    sandbox?: boolean;
    configs?: Record<string, Record<string, unknown>>;
}): Promise<PluginExecutionResult[]>;
/**
 * Get plugin registry for a project
 */
export { PluginRegistry };
//# sourceMappingURL=loader.d.ts.map