/**
 * Config File Watcher
 *
 * Watches configuration files for changes and emits events
 * when modifications are detected.
 */
import { EventEmitter } from 'events';
import type { WatcherConfig, ConfigSnapshot } from './types.js';
/**
 * Config file watcher events
 */
export interface WatcherEvents {
    'change': (filePath: string, snapshot: ConfigSnapshot) => void;
    'error': (error: Error) => void;
    'ready': () => void;
}
/**
 * Config file watcher
 */
export declare class ConfigWatcher extends EventEmitter {
    private config;
    private watchers;
    private snapshots;
    private debouncedHandlers;
    private running;
    constructor(config?: Partial<WatcherConfig>);
    /**
     * Start watching files
     */
    start(): Promise<void>;
    /**
     * Stop watching files
     */
    stop(): void;
    /**
     * Add a path to watch
     */
    addPath(watchPath: string): Promise<void>;
    /**
     * Remove a path from watching
     */
    removePath(watchPath: string): void;
    /**
     * Get current snapshot for a path
     */
    getSnapshot(filePath: string): ConfigSnapshot | undefined;
    /**
     * Force reload a file
     */
    reload(filePath: string): Promise<ConfigSnapshot | null>;
    /**
     * Watch a specific path
     */
    private watchPath;
    /**
     * Watch a directory
     */
    private watchDirectory;
    /**
     * Watch a specific file
     */
    private watchFile;
    /**
     * Handle a file change event
     */
    private handleChange;
    /**
     * Process a file change after debouncing
     */
    private processChange;
    /**
     * Load a file and create a snapshot
     */
    private loadAndSnapshot;
    /**
     * Get watched paths
     */
    getWatchedPaths(): string[];
    /**
     * Check if watcher is running
     */
    isRunning(): boolean;
}
/**
 * Get the singleton config watcher
 */
export declare function getConfigWatcher(config?: Partial<WatcherConfig>): ConfigWatcher;
/**
 * Reset the singleton watcher
 */
export declare function resetConfigWatcher(): void;
