fix: expose heartbeat controls and harden mac CLI

This commit is contained in:
Peter Steinberger
2025-12-12 23:33:12 +00:00
parent 3b72ed6e1a
commit 8846ffec64
7 changed files with 171 additions and 12 deletions

View File

@@ -111,8 +111,8 @@ final class ControlChannel: ObservableObject {
}
func lastHeartbeat() async throws -> ControlHeartbeatEvent? {
// Heartbeat removed in new protocol
nil
let data = try await self.request(method: "last-heartbeat")
return try JSONDecoder().decode(ControlHeartbeatEvent?.self, from: data)
}
func request(
@@ -219,6 +219,13 @@ final class ControlChannel: ObservableObject {
AgentEventStore.shared.append(agent)
self.routeWorkActivity(from: agent)
}
case let .event(evt) where evt.event == "heartbeat":
if let payload = evt.payload,
let heartbeat = try? GatewayPayloadDecoding.decode(payload, as: ControlHeartbeatEvent.self),
let data = try? JSONEncoder().encode(heartbeat)
{
NotificationCenter.default.post(name: .controlHeartbeat, object: data)
}
case let .event(evt) where evt.event == "shutdown":
self.state = .degraded("gateway shutdown")
case .snapshot: