/** * Per-external-scanner supervision facts, produced OUTSIDE the scanners module * (intake liveness clock + process supervisor) and attached via * ScannersRuntimeModule.attachSupervisionSource(). The module is the single * consumer: all health derivation happens there. Keyed by configured scanner * NAME (stable across relaunch; scanner ids are re-minted on restart). */ export interface ScannerSupervisionRow { scannerName: string; /** Supervisor's crash-loop verdict ("degraded" = rapid-failure guard tripped). */ supervisorStatus: "healthy" | "degraded"; /** Cumulative child restarts since runtime start. */ restartCount: number; /** * Configured POST cadence in seconds (recipe `interval_seconds`), carried from the * launcher spec. The engine registration reports `intervalSeconds: 0` for external * scanners (they never run on a timer), so the silence-window derivation reads THIS * real cadence — absent it would floor at 30s and falsely flap slow scanners. * Optional: derivation falls back to the registration `intervalSeconds` when unset. */ intervalSeconds?: number; /** Last POST heard from the scaffold child (epoch ms), null = never heard. */ lastAliveAt: number | null; /** Human cause for a degraded supervisor (last exit summary), if known. */ degradedReason?: string; } export interface ScannerSupervision { /** * True when the runtime's external scanners never wired (mount/launch threw): * the runtime is running with NO live entry scanners. rows may be empty. */ unwired: boolean; /** Phase that failed when unwired ("mount" | "launch" | "install_launch" | "install_wire"). */ unwiredPhase?: string; rows: ScannerSupervisionRow[]; } export type ScannerSupervisionSource = () => ScannerSupervision; //# sourceMappingURL=supervision.d.ts.map