From e3089d60ea498b1dd20b4a577cb7adc2c29bb7bd Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Mon, 8 Dec 2025 20:17:38 +0100 Subject: [PATCH] HeartbeatStore: fix main-actor cleanup --- .../Sources/Clawdis/HeartbeatStore.swift | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 apps/macos/Sources/Clawdis/HeartbeatStore.swift diff --git a/apps/macos/Sources/Clawdis/HeartbeatStore.swift b/apps/macos/Sources/Clawdis/HeartbeatStore.swift new file mode 100644 index 000000000..afe0948dd --- /dev/null +++ b/apps/macos/Sources/Clawdis/HeartbeatStore.swift @@ -0,0 +1,29 @@ +import Foundation +import SwiftUI + +@MainActor +final class HeartbeatStore: ObservableObject { + static let shared = HeartbeatStore() + + @Published private(set) var lastEvent: AgentRPC.HeartbeatEvent? + + private var observer: NSObjectProtocol? + + private init() { + self.observer = NotificationCenter.default.addObserver( + forName: AgentRPC.heartbeatNotification, + object: nil, + queue: .main + ) { [weak self] note in + guard let event = note.object as? AgentRPC.HeartbeatEvent else { return } + Task { @MainActor in + self?.lastEvent = event + } + } + } + + @MainActor + deinit { + if let observer { NotificationCenter.default.removeObserver(observer) } + } +}