/**
 * `agents daemon` — runtime, hosted services, and failure visibility for the
 * always-on daemon (RUSH-2354).
 *
 * The daemon holds the routines scheduler, the secrets broker, the browser IPC
 * server, and the watchdog pass — but until this command group existed it had
 * no user-facing surface: no way to see it, restart it, or turn it off.
 * `daemon.ts` (the runtime) has always implemented every mechanism this file
 * wires up; nothing here is new machinery, only the missing CLI surface.
 *
 * There is deliberately no `agents daemon jobs` — scheduled work is
 * `agents routines`, always (see RUSH-2353, which migrates the daemon's
 * hardcoded timers onto routines). `status`/`services` point at
 * `agents routines stats` for per-routine failure detail instead of
 * duplicating it.
 */
import type { Command } from 'commander';
import { type DaemonServiceId } from '../lib/daemon-services.js';
/** Elapsed wall-clock seconds since `pid` started, or null if unavailable (best-effort, POSIX only). */
export declare function uptimeSeconds(pid: number): number | null;
/** One row of the roster every registered daemon service — supervisor-managed or legacy — renders in `agents daemon services`. */
export interface DaemonServiceRow {
    id: DaemonServiceId;
    title: string;
    description: string;
    enabled: boolean;
    /**
     * `ServiceSupervisor`'s real lifecycle state when `supervised` is true
     * (`idle`/`running`/`parked`/`stopped`, written cross-process via
     * `recordSubsystemState`). A legacy `setInterval`-driven service has no such
     * record, so its state is inferred from `enabled` + whether the daemon
     * process is up — labelled distinctly so a reader can't mistake it for a
     * measured value.
     */
    state: string;
    supervised: boolean;
    lastRunMs: number | null;
    lastError: string | null;
    consecutiveFailures: number;
}
export declare function registerDaemonCommand(program: Command): void;
