/**
 * Watch State Manager
 * Manages watch mode state transitions and coordinates between analysis and display
 * Prevents race conditions by enforcing explicit state machine
 */
import { EventEmitter } from "node:events";
export type WatchPhase = "initializing" | "analyzing" | "ready" | "running" | "paused" | "error" | "shutdown";
export interface WatchStateData {
    phase: WatchPhase;
    checksCount: number;
    sessionId: string | undefined;
    sessionStart: number;
    lastAnalysisTime: number;
    lastError: Error | undefined;
    analysisInProgress: boolean;
    metadata: {
        cwd: string;
        nodeVersion: string;
        platform: string;
        flags: Record<string, unknown>;
    };
}
export interface StateTransition {
    from: WatchPhase;
    to: WatchPhase;
    timestamp: number;
    reason?: string | undefined;
}
/**
 * State machine for watch mode lifecycle
 * Enforces valid transitions and prevents race conditions
 */
export declare class WatchStateManager extends EventEmitter {
    private state;
    private transitionHistory;
    private readonly validTransitions;
    constructor(sessionId?: string, metadata?: Partial<WatchStateData["metadata"]>);
    /**
     * Transition to a new phase with validation
     */
    transition(toPhase: WatchPhase, reason?: string): boolean;
    /**
     * Handle phase-specific logic
     */
    private handlePhaseTransition;
    /**
     * Start analysis cycle (only if allowed)
     */
    startAnalysis(): boolean;
    /**
     * Complete analysis cycle
     */
    completeAnalysis(): boolean;
    /**
     * Handle analysis error
     */
    handleAnalysisError(error: Error): boolean;
    /**
     * Recover from error state
     */
    recover(): boolean;
    /**
     * Pause watch mode
     */
    pause(): boolean;
    /**
     * Resume from pause
     */
    resume(): boolean;
    /**
     * Shutdown (terminal state)
     */
    shutdown(reason?: string): boolean;
    /**
     * Check if analysis can be started
     */
    canStartAnalysis(): boolean;
    /**
     * Check if display updates are allowed
     */
    canUpdateDisplay(): boolean;
    /**
     * Check if watch mode is active
     */
    isActive(): boolean;
    /**
     * Check if currently analyzing
     */
    isAnalyzing(): boolean;
    /**
     * Get current state (read-only)
     */
    getState(): Readonly<WatchStateData>;
    /**
     * Get current phase
     */
    getPhase(): WatchPhase;
    /**
     * Get checks count
     */
    getChecksCount(): number;
    /**
     * Update session ID
     */
    setSessionId(sessionId: string): void;
    /**
     * Get transition history
     */
    getTransitionHistory(): readonly StateTransition[];
    /**
     * Get state summary for debugging
     */
    getStateSummary(): string;
    /**
     * Validate current state integrity
     */
    validateState(): {
        valid: boolean;
        issues: string[];
    };
}
//# sourceMappingURL=watch-state-manager.d.ts.map