import Foundation /// Full daemon record. Matches `src/db/models.rs::Daemon` (camelCase). struct Daemon: Decodable, Identifiable, Hashable { let id: String let ownerId: String? let connectionId: String? let hostname: String? let machineId: String? let maxConcurrentTasks: Int? let currentTaskCount: Int? let status: String let lastHeartbeatAt: Date? let connectedAt: Date? let disconnectedAt: Date? var isOnline: Bool { status.lowercased() == "online" || status.lowercased() == "connected" || status.lowercased() == "active" } var displayHost: String { hostname ?? machineId ?? connectionId ?? String(id.prefix(8)) } } /// Compatibility shim: a handful of M2 call sites still type `DaemonBrief`. /// Resolve to the same shape. typealias DaemonBrief = Daemon