@@ -57,14 +57,23 @@ final class AppDelegate: NSObject, NSApplicationDelegate {
5757 // Delivery is hopped through `DispatchQueue.main` rather than `RunLoop.main`,
5858 // whose Combine scheduler only runs in the default run loop mode โ the title
5959 // would freeze while a menu or a scroll was tracking.
60โ statusTextCancellable = Publishers.CombineLatest5(
60+ // Combine has CombineLatest4 but not 5, so nest: outer combines
61+ // balance + isLoading + hyperConfigured with an inner that merges
62+ // claudeUsage + zaiUsage. The inner Just(()) is a dummy third stream
63+ // to satisfy CombineLatest3 โ it fires once and never again, so the
64+ // inner effectively republishes claudeUsage and zaiUsage changes.
65+ statusTextCancellable = Publishers.CombineLatest4(
6166 viewModel.$balance,
6267 viewModel.$isLoading,
6368 viewModel.$hyperConfigured,
64โ viewModel.$claudeUsage,
65โ viewModel.$zaiUsage
69+ Publishers.CombineLatest3(
70+ viewModel.$claudeUsage,
71+ viewModel.$zaiUsage,
72+ Just<Void>(())
73+ )
6674 )
67โ .map { balance, isLoading, hyperConfigured, claudeUsage, zaiUsage in
75+ .map { balance, isLoading, hyperConfigured, claudeAndZai in
76+ let (claudeUsage, zaiUsage, _) = claudeAndZai
6877 let fiveHour = claudeUsage?.fiveHour
6978 .map { Int($0.utilization.rounded()) }
7079 let sevenDay = claudeUsage?.sevenDay