feat: add heartbeat toggle with live RPC control

This commit is contained in:
Peter Steinberger
2025-12-07 15:32:48 +01:00
parent 2dbef6105d
commit b30db08110
7 changed files with 57 additions and 1 deletions

View File

@@ -85,6 +85,26 @@ actor AgentRPC {
}
}
func setHeartbeatsEnabled(_ enabled: Bool) async -> Bool {
guard process?.isRunning == true else { return false }
do {
let payload: [String: Any] = ["type": "set-heartbeats", "enabled": enabled]
let data = try JSONSerialization.data(withJSONObject: payload)
guard let stdinHandle else { throw RpcError(message: "stdin missing") }
stdinHandle.write(data)
stdinHandle.write(Data([0x0A]))
let line = try await nextLine()
let parsed = try JSONSerialization.jsonObject(with: Data(line.utf8)) as? [String: Any]
if let ok = parsed?["ok"] as? Bool, ok { return true }
return false
} catch {
logger.error("rpc set-heartbeats failed: \(error.localizedDescription, privacy: .public)")
await stop()
return false
}
}
// MARK: - Process lifecycle
func start() async throws {