mac: include instance id in presence beacons

This commit is contained in:
Peter Steinberger
2025-12-10 11:48:13 +00:00
parent 53c349cb86
commit fe3a983d35
2 changed files with 19 additions and 3 deletions

View File

@@ -184,8 +184,10 @@ final class ControlChannel: ObservableObject {
return "Gateway error: \(detail)"
}
func sendSystemEvent(_ text: String) async throws {
_ = try await self.request(method: "system-event", params: ["text": AnyHashable(text)])
func sendSystemEvent(_ text: String, params: [String: AnyHashable] = [:]) async throws {
var merged = params
merged["text"] = AnyHashable(text)
_ = try await self.request(method: "system-event", params: merged)
}
private func startEventStream() {

View File

@@ -10,6 +10,7 @@ final class PresenceReporter {
private let logger = Logger(subsystem: "com.steipete.clawdis", category: "presence")
private var task: Task<Void, Never>?
private let interval: TimeInterval = 180 // a few minutes
private let instanceId: String = Host.current().localizedName ?? UUID().uuidString
func start() {
guard self.task == nil else { return }
@@ -31,9 +32,22 @@ final class PresenceReporter {
@Sendable
private func push(reason: String) async {
let mode = await MainActor.run { AppStateStore.shared.connectionMode.rawValue }
let host = Host.current().localizedName ?? "unknown-host"
let ip = Self.primaryIPv4Address() ?? "ip-unknown"
let version = Self.appVersionString()
let lastInput = Self.lastInputSeconds()
let text = Self.composePresenceSummary(mode: mode, reason: reason)
var params: [String: AnyHashable] = [
"instanceId": AnyHashable(self.instanceId),
"host": AnyHashable(host),
"ip": AnyHashable(ip),
"mode": AnyHashable(mode),
"version": AnyHashable(version),
"reason": AnyHashable(reason),
]
if let lastInput { params["lastInputSeconds"] = AnyHashable(lastInput) }
do {
try await ControlChannel.shared.sendSystemEvent(text)
try await ControlChannel.shared.sendSystemEvent(text, params: params)
} catch {
self.logger.error("presence send failed: \(error.localizedDescription, privacy: .public)")
}