/** * 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; /** * Execute a plugin in sandbox mode (child process) */ export declare function executePluginSandboxed(plugin: LoadedPlugin, context: ScannerPluginContext): Promise; /** * Execute a plugin directly (no sandbox) */ export declare function executePluginDirect(plugin: LoadedPlugin, context: ScannerPluginContext): Promise; /** * Execute all plugins for a project */ export declare function executePlugins(registry: PluginRegistry, projectPath: string, options?: { files?: string[]; timeout?: number; sandbox?: boolean; configs?: Record>; }): Promise; /** * Get plugin registry for a project */ export { PluginRegistry }; //# sourceMappingURL=loader.d.ts.map