on master help sign in
feat: hide unconfigured services from menu bar + z.ai weekly + stub fix

- Hide unconfigured services from menu bar (hyperConfigured flag) - Show z.ai weekly limit (๐Ÿ“†) in menu bar - Remove credits section from README - Fix StubURLProtocol: URL-path-matched enqueueing for concurrent z.ai tests - Fix: CombineLatest5 does not exist, nest CombineLatest4+CombineLatest3

commit0f40344bd6518adfc5b77ba784340978d8a4e6aa authoriko <mail@iko.soy> dateFri 17 Jul 2026, 13:12 (3 months ago) parent34ae19e
1 file changed+13โˆ’4
UsageMenubar/UsageMenubarApp.swift+13โˆ’4
UsageMenubar/UsageMenubarApp.swift+13โˆ’4
@@ -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