import type { PhaseStatus, RunStatus, StepStatus } from "./types.js"; export type LogLevel = "log" | "info" | "warn" | "error" | "success"; export interface LogEntry { level: LogLevel; message: string; } export interface ProgressState { total: number; value: number; label?: string; complete: boolean; } export interface TaskState { label: string; status: "pending" | "running" | "done" | "failed" | "skipped"; } export interface StepState { name: string; description?: string; phaseIndex: number; status: StepStatus; statusText?: string; /** Persistent annotation rendered next to the name; outlives the run. */ note?: string; startedAt?: number; endedAt?: number; attempts: number; error?: unknown; progress?: ProgressState; tasks: TaskState[]; /** Entries routed here by `logPlacement: "step"` — most recent last, capped. */ logs: LogEntry[]; hasRollback: boolean; /** Age of the cache entry that stood in for this step, at the moment it hit. */ cacheAgeMs?: number; } export interface PhaseState { name: string; description?: string; steps: StepState[]; /** Set when the whole phase was served from cache. */ cacheAgeMs?: number; } export interface RunState { name: string; description?: string; phases: PhaseState[]; status: RunStatus; startedAt: number; endedAt?: number; failure?: { phase: string; step: string; error: unknown; }; rollbackCount: number; rollbackFailures: number; /** Entries routed here by `logPlacement: "bottom"` — most recent last, capped. */ logTail: LogEntry[]; } export declare function phaseStatus(phase: PhaseState): PhaseStatus; export declare function elapsed(step: StepState, now: number): number | undefined; export declare function phaseElapsed(phase: PhaseState, now: number): number | undefined; export declare function formatDuration(ms: number): string; /** Coarse relative time for cache badges — `4m ago`, not `4m 12s ago`. */ export declare function formatAge(ms: number): string; export declare function errorMessage(error: unknown): string; //# sourceMappingURL=state.d.ts.map