Skip to content

Commit e82e2b6

Browse files
Fix percentage calculation to match ccusage exactly
πŸ› CRITICAL FIX: Percentage calculation mismatch ❌ Problem: - App showed 62% when user had no quota left - App calculated: (currentTokens / limit) Γ— 100 = 62% - ccusage calculated: (projectedTokens / limit) Γ— 100 = 114% βœ… Solution: - Now uses ccusage's percentUsed value directly - Shows 114% (exceeds limit) instead of 62% - Matches ccusage CLI output exactly - leftPct = max(0, 100 - usedPct) for over-limit cases This ensures the menu bar shows the same percentage as ccusage CLI, properly indicating when quota is exceeded.
1 parent ed3f3eb commit e82e2b6

1 file changed

Lines changed: 5 additions & 6 deletions

File tree

β€Žmain.swiftβ€Ž

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -99,18 +99,17 @@ class AppDelegate: NSObject, NSApplicationDelegate {
9999
let costUsed = block["costUSD"] as? Double ?? 0.0
100100
let projectedCost = projection?["totalCost"] as? Double ?? 0.0
101101

102-
// Calculate percentage exactly like ccusage does
102+
// Use ccusage's exact percentage calculation
103103
let tokenLimitStatus = block["tokenLimitStatus"] as? [String: Any]
104104
let limit = tokenLimitStatus?["limit"] as? Int ?? totalTokens
105+
let ccusagePercentUsed = tokenLimitStatus?["percentUsed"] as? Double ?? 0.0
105106

106107
let totalBlockMinutes = 5 * 60 // 5 hours = 300 minutes
107108
let elapsedMinutes = totalBlockMinutes - remainingMinutes
108109

109-
// Used percentage: (currentTokens / limit) * 100
110-
let usedPct = limit > 0 ? Int(((Double(totalTokens) / Double(limit)) * 100).rounded()) : 0
111-
112-
// Remaining percentage: ((limit - currentTokens) / limit) * 100
113-
let leftPct = limit > 0 ? Int((((Double(limit) - Double(totalTokens)) / Double(limit)) * 100).rounded()) : 100
110+
// Use ccusage's percentUsed (which includes projection)
111+
let usedPct = Int(ccusagePercentUsed.rounded())
112+
let leftPct = max(0, 100 - usedPct)
114113

115114
let tokensLeft = max(0, limit - totalTokens)
116115
let costLeft = projectedCost - costUsed

0 commit comments

Comments
Β (0)