import { type Exec } from '../exec.js'; export declare const WATCHDOG_SYSTEMD_UNIT = "ours-fleet-watchdogs.service"; export declare const WATCHDOG_LAUNCHD_LABEL = "network.ours.fleet.watchdogs"; /** * Supervises the single long-running watchdog-scheduler process (the hidden * `_run-watchdogs` command and `runScheduler`) the same way * `WebServiceManager` (src/web/service.ts) supervises the web console: a * private systemd --user unit on Linux, a launchd LaunchAgent on macOS. */ export declare class WatchdogServiceManager { private readonly exec; private readonly platform; constructor(exec?: Exec, platform?: NodeJS.Platform); get definitionPath(): string; /** false when explicitly disabled (OURS_FLEET_SUPERVISOR=none) or on an unsupported platform. */ supervised(): boolean; /** * Writes the unit/plist and returns whether its content actually changed * `binPath`/`configPath` are the only inputs that ever * change this content, and neither reflects a watchdog's `interval:` or * any other config value inside `watchdogs:` — so `changed` here can never * by itself justify a restart on every config edit. It's one of the two * signals reconcileWatchdogScheduler (ops.ts) combines with a config * fingerprint before deciding restart vs. the idempotent start. */ install(binPath: string, configPath?: string): Promise<{ changed: boolean; }>; start(): Promise; stop(): Promise; /** * `start()` is a no-op on an already-active unit — systemctl start against * a running service just returns 0 without reloading anything, and * launchctl kickstart (without -k) behaves the same way. That means a * config change (new/changed watchdogs) never reaches a live scheduler * process via reconcileWatchdogScheduler's `install` + `start` pair. * `restart()` mirrors WebServiceManager.restart: an * unconditional restart on Linux, and `kickstart -k` (force-restart) on * macOS, falling back to stop+start if the kickstart itself fails. */ restart(): Promise; status(): Promise; uninstall(): Promise; private requireInstalled; private must; }