@invisiblecities/sidequest-cqo
Version:
Configuration-agnostic TypeScript and ESLint orchestrator with real-time watch mode, SQLite persistence, and intelligent terminal detection
122 lines • 3 kB
TypeScript
/**
* 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