/** * Footer renderer for the Pi TUI. Three status slots + window title. * * Slot keys (intentionally namespaced so other extensions don't collide): * - remote-pi:session โ€” current local session + peer count * - remote-pi:relay โ€” relay state (off / on / paired) * - remote-pi:peer-active โ€” active mobile device, if paired */ export interface FooterContext { ui: { setStatus(key: string, value: string | undefined): void; setTitle(title: string): void; }; } export interface FooterState { session?: string; peerCount?: number; relayOn?: boolean; /** Active device session right now (drives the ๐Ÿ“ฑ slot). * Independent from `hasPairings` โ€” a device may be paired globally * in peers.json without being actively connected to THIS Pi process. */ devicePaired?: string; /** At least one device has been paired with this machine before * (peers.json is non-empty). Drives the ๐ŸŸข/๐ŸŸก icon on the relay slot: * ๐ŸŸข when true (ready โ€” devices can connect), ๐ŸŸก when false (first * pairing needed). Pairing is per-machine (global), not per-process. */ hasPairings?: boolean; /** Assigned agent name in the current session. Becomes the title prefix * (e.g. "backend ยท foo ยท relay") when set. Falls back to "Pi" otherwise. */ agentName?: string; } export declare function updateFooter(ctx: FooterContext, state: FooterState): void;