fix(ci): isolate macOS node restart notifications

This commit is contained in:
Peter Steinberger
2026-07-13 02:54:10 -04:00
parent 0cdb13abfc
commit f1076c23d4
2 changed files with 14 additions and 9 deletions

View File

@@ -105,6 +105,7 @@ final class MacNodeModeCoordinator: NSObject {
private let session: GatewayNodeSession
private let nodeHostWorker: (any MacNodeHostWorking)?
private let presenceReporter: MacNodePresenceReporter
private let notificationCenter: NotificationCenter
private let routeInvalidationHook: (@Sendable () async -> Void)?
private let refreshEvents: AsyncStream<Void>
private let refreshContinuation: AsyncStream<Void>.Continuation
@@ -135,6 +136,7 @@ final class MacNodeModeCoordinator: NSObject {
runtime: MacNodeRuntime,
nodeHostWorker: (any MacNodeHostWorking)? = nil,
presenceReporter: MacNodePresenceReporter = MacNodePresenceReporter(),
notificationCenter: NotificationCenter = .default,
observeNotifications: Bool = false,
initialPaused: Bool? = nil,
initialComputerControlEnabled: Bool? = nil,
@@ -145,6 +147,7 @@ final class MacNodeModeCoordinator: NSObject {
self.runtime = runtime
self.nodeHostWorker = nodeHostWorker
self.presenceReporter = presenceReporter
self.notificationCenter = notificationCenter
self.routeInvalidationHook = routeInvalidationHook
self.refreshEvents = refreshEvents.stream
self.refreshContinuation = refreshEvents.continuation
@@ -154,32 +157,32 @@ final class MacNodeModeCoordinator: NSObject {
super.init()
guard observeNotifications else { return }
NotificationCenter.default.addObserver(
self.notificationCenter.addObserver(
self,
selector: #selector(self.refreshNodeConfiguration),
name: UserDefaults.didChangeNotification,
object: UserDefaults.standard)
NotificationCenter.default.addObserver(
self.notificationCenter.addObserver(
self,
selector: #selector(self.refreshNodeConfiguration),
name: NSApplication.didBecomeActiveNotification,
object: nil)
NotificationCenter.default.addObserver(
self.notificationCenter.addObserver(
self,
selector: #selector(self.refreshNodeConfiguration),
name: .openclawPermissionsChanged,
object: nil)
NotificationCenter.default.addObserver(
self.notificationCenter.addObserver(
self,
selector: #selector(self.nodeHostWorkerFailed),
name: .openclawNodeHostWorkerFailed,
object: nil)
NotificationCenter.default.addObserver(
self.notificationCenter.addObserver(
self,
selector: #selector(self.nodeHostConfigurationChanged),
name: .openclawConfigDidChange,
object: nil)
NotificationCenter.default.addObserver(
self.notificationCenter.addObserver(
self,
selector: #selector(self.nodeHostConfigurationChanged),
name: .openclawCLIInstalled,
@@ -187,7 +190,7 @@ final class MacNodeModeCoordinator: NSObject {
}
deinit {
NotificationCenter.default.removeObserver(self)
self.notificationCenter.removeObserver(self)
self.refreshContinuation.finish()
}

View File

@@ -148,20 +148,22 @@ struct MacNodeModeCoordinatorTests {
@Test @MainActor func `config and CLI changes restart startup scoped node host worker`() async throws {
let worker = CoordinatorNodeHostWorkerProbe()
let session = GatewayNodeSession()
let notificationCenter = NotificationCenter()
let coordinator = MacNodeModeCoordinator(
session: session,
runtime: MacNodeRuntime(nodeHostWorker: worker),
nodeHostWorker: worker,
notificationCenter: notificationCenter,
observeNotifications: true)
_ = coordinator
NotificationCenter.default.post(name: .openclawConfigDidChange, object: nil)
notificationCenter.post(name: .openclawConfigDidChange, object: nil)
try await self.waitUntil("node-host worker restart") {
await worker.stops() == 1
}
NotificationCenter.default.post(name: .openclawCLIInstalled, object: nil)
notificationCenter.post(name: .openclawCLIInstalled, object: nil)
try await self.waitUntil("node-host worker restart") {
await worker.stops() == 2