import type { AgentTrace, AssertionResult, TestResult, SuiteResult } from './types'; export interface AssertionHandler { (trace: AgentTrace, value: any): AssertionResult; } export interface ReporterHandler { (result: SuiteResult): string; } export interface AdapterHandler { name: string; detect(input: any): boolean; convert(input: any): AgentTrace; } export interface PluginHooks { onTestStart?(test: { name: string; input: string; }): void | Promise; onTestComplete?(result: TestResult): void | Promise; onSuiteStart?(suite: { name: string; total: number; }): void | Promise; onSuiteComplete?(results: SuiteResult): void | Promise; onError?(error: Error, context: { test?: string; }): void | Promise; } export interface AgentProbePlugin { name: string; type?: 'reporter' | 'adapter' | 'assertion' | 'lifecycle'; version?: string; assertions?: Record; reporters?: Record; adapters?: Record; hooks?: PluginHooks; } /** * Load and register a plugin. */ export declare function loadPlugin(pluginPath: string, baseDir?: string): AgentProbePlugin; /** * Register a plugin's extensions. */ export declare function registerPlugin(plugin: AgentProbePlugin): void; /** * Unregister a plugin by name. */ export declare function unregisterPlugin(name: string): boolean; /** * Load all plugins from config. */ export declare function loadPlugins(pluginPaths: string[], baseDir?: string): AgentProbePlugin[]; /** * Enable hot-reload for a plugin file. Re-registers on change. */ export declare function watchPlugin(pluginPath: string, baseDir?: string): void; /** * Stop watching a plugin file. */ export declare function unwatchPlugin(pluginPath: string, baseDir?: string): void; /** * Stop all file watchers. */ export declare function unwatchAll(): void; export declare function runPluginHook(hook: K, ...args: Parameters>): Promise; /** * Run a plugin assertion. */ export declare function runPluginAssertion(name: string, trace: AgentTrace, value: any): AssertionResult | null; /** * Get a plugin reporter. */ export declare function getPluginReporter(name: string): ReporterHandler | null; /** * Get all registered plugin assertion names. */ export declare function getPluginAssertionNames(): string[]; /** * Get all registered plugin reporter names. */ export declare function getPluginReporterNames(): string[]; /** * Get all registered plugins. */ export declare function getRegisteredPlugins(): AgentProbePlugin[]; /** * Get a registered plugin by name. */ export declare function getPlugin(name: string): AgentProbePlugin | undefined; export declare class PluginManager { private baseDir?; constructor(baseDir?: string); register(plugin: AgentProbePlugin): void; loadFromFile(pluginPath: string): AgentProbePlugin; loadFromPackage(name: string): AgentProbePlugin; unregister(name: string): boolean; get(name: string): AgentProbePlugin | undefined; getAll(): AgentProbePlugin[]; getHooks(hookName: keyof PluginHooks): ((...args: unknown[]) => unknown)[]; clear(): void; } /** * Clear all registered plugins and watchers (for testing). */ export declare function clearAllPlugins(): void; //# sourceMappingURL=plugins.d.ts.map