/** * Autopilot State Manager * * Manages autopilot state, persistence, and state change events. */ import { EventEmitter } from 'events'; import type { AutopilotState, AutopilotStatus, WorkerSession, FailedTicket, TokenUsage, RateLimitInfo, AutopilotEventMap } from '../types.js'; /** * State file name */ export declare const STATE_FILE_NAME = "autopilot-state.json"; /** * Typed event emitter for autopilot events */ declare class AutopilotEventEmitter extends EventEmitter { emit(event: K, payload: AutopilotEventMap[K]): boolean; on(event: K, listener: (payload: AutopilotEventMap[K]) => void): this; once(event: K, listener: (payload: AutopilotEventMap[K]) => void): this; } /** * Autopilot State Manager */ export declare class StateManager { private state; private events; private persistPath; private persistEnabled; constructor(options: { specificationId: string; projectId: string; workingDirectory?: string; persistState?: boolean; }); /** * Get current state */ getState(): AutopilotState; /** * Get run ID */ getRunId(): string; /** * Get event emitter for subscriptions */ getEvents(): AutopilotEventEmitter; /** * Update status */ setStatus(status: AutopilotStatus, options?: { reason?: string; }): void; /** * Set current epic */ setCurrentEpic(epicId: string): void; /** * Clear current epic */ clearCurrentEpic(summary: { completedTickets: number; failedTickets: number; }): void; /** * Initialize workers */ initializeWorkers(workers: WorkerSession[]): void; /** * Update worker state */ updateWorker(workerId: number, updates: Partial): void; /** * Get worker by ID */ getWorker(workerId: number): WorkerSession | undefined; /** * Record ticket started */ ticketStarted(ticketId: string, workerId: number): void; /** * Record ticket completed */ ticketCompleted(ticketId: string, workerId: number, result: { costUsd: number; tokens: TokenUsage; }): void; /** * Record ticket failed */ ticketFailed(ticketId: string, workerId: number, error: string, retryable: boolean): void; /** * Record ticket skipped */ ticketSkipped(ticketId: string, reason: string): void; /** * Set rate limit info */ setRateLimited(info: RateLimitInfo): void; /** * Clear rate limit */ clearRateLimit(): void; /** * Add cost */ addCost(costUsd: number, tokens: TokenUsage): void; /** * Get completed ticket count */ getCompletedCount(): number; /** * Get failed ticket count */ getFailedCount(): number; /** * Check if ticket was completed */ isTicketCompleted(ticketId: string): boolean; /** * Check if ticket was failed */ isTicketFailed(ticketId: string): boolean; /** * Get failure info for ticket */ getFailureInfo(ticketId: string): FailedTicket | undefined; /** * Emit state change event */ private emitStateChange; /** * Persist state to disk */ private persist; /** * Load state from disk */ static load(workingDirectory?: string): AutopilotState | null; /** * Clear persisted state */ static clear(workingDirectory?: string): void; /** * Resume from existing state */ static resume(state: AutopilotState, options?: { workingDirectory?: string; persistState?: boolean; }): StateManager; /** * Load state by run ID from archive */ static loadByRunId(runId: string, workingDirectory?: string): AutopilotState | null; /** * List all available run IDs with metadata */ static listRuns(workingDirectory?: string): Array<{ runId: string; startedAt: Date; endedAt?: Date; status: AutopilotStatus; specificationId: string; }>; /** * Archive current state to runs directory */ static archive(state: AutopilotState, workingDirectory?: string): void; } /** * Create a state manager */ export declare function createStateManager(options: { specificationId: string; projectId: string; workingDirectory?: string; persistState?: boolean; }): StateManager; export {}; //# sourceMappingURL=state-manager.d.ts.map