From 461773c677af8bc2edb0dcef94ca6528cbc40c6b Mon Sep 17 00:00:00 2001 From: Evan Reichard Date: Mon, 4 May 2026 06:24:28 -0400 Subject: [PATCH] fix(usage): resolve Z.ai window assignment using limit IDs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Z.ai assigns both token and request limits the same generic "quota" window ID, so findWindowLimits fell through to array-order fallback. This caused the two bars to swap depending on API response order. Add limit-ID-based matching (zai:tokens → current, zai:requests → week) as a secondary tier after window-ID matching. --- modules/usage.ts | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/modules/usage.ts b/modules/usage.ts index 50fe4c2..c29a8ac 100644 --- a/modules/usage.ts +++ b/modules/usage.ts @@ -60,8 +60,18 @@ function usageColor(fraction: number): { r: number; g: number; b: number } { function findWindowLimits(report: UsageReport): UsageWindows { const windowId = (limit: UsageLimit) => (limit.window?.id ?? limit.scope.windowId ?? "").toLowerCase(); - const current = report.limits.find(limit => ["5h", "primary"].includes(windowId(limit))) ?? report.limits[0]; - const week = report.limits.find(limit => ["7d", "secondary"].includes(windowId(limit))) ?? report.limits.find(limit => limit !== current); + const limitId = (limit: UsageLimit) => (limit.id ?? "").toLowerCase(); + + // Match by Window ID + const currentByWindow = report.limits.find(limit => ["5h", "primary"].includes(windowId(limit))); + const weekByWindow = report.limits.find(limit => ["7d", "secondary"].includes(windowId(limit))); + + // Match by Limit ID (Z.ai Uses Generic "quota" Window IDs for Both Limits) + const currentByLimit = report.limits.find(limit => ["zai:tokens"].includes(limitId(limit))); + const weekByLimit = report.limits.find(limit => ["zai:requests"].includes(limitId(limit))); + + const current = currentByWindow ?? currentByLimit ?? report.limits[0]; + const week = weekByWindow ?? weekByLimit ?? report.limits.find(limit => limit !== current); return { current, week }; }