@slkiser/opencode-quota 2.0.0 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. package/README.md +102 -46
  2. package/dist/lib/command-handled.d.ts +4 -0
  3. package/dist/lib/command-handled.d.ts.map +1 -1
  4. package/dist/lib/command-handled.js +6 -0
  5. package/dist/lib/command-handled.js.map +1 -1
  6. package/dist/lib/config.d.ts.map +1 -1
  7. package/dist/lib/config.js +2 -0
  8. package/dist/lib/config.js.map +1 -1
  9. package/dist/lib/copilot.d.ts.map +1 -1
  10. package/dist/lib/copilot.js +105 -18
  11. package/dist/lib/copilot.js.map +1 -1
  12. package/dist/lib/entries.d.ts +2 -0
  13. package/dist/lib/entries.d.ts.map +1 -1
  14. package/dist/lib/google.d.ts.map +1 -1
  15. package/dist/lib/google.js +7 -2
  16. package/dist/lib/google.js.map +1 -1
  17. package/dist/lib/modelsdev-pricing.d.ts +4 -0
  18. package/dist/lib/modelsdev-pricing.d.ts.map +1 -1
  19. package/dist/lib/modelsdev-pricing.js +14 -1
  20. package/dist/lib/modelsdev-pricing.js.map +1 -1
  21. package/dist/lib/opencode-auth.d.ts +9 -0
  22. package/dist/lib/opencode-auth.d.ts.map +1 -1
  23. package/dist/lib/opencode-auth.js +38 -0
  24. package/dist/lib/opencode-auth.js.map +1 -1
  25. package/dist/lib/provider-availability.d.ts +7 -0
  26. package/dist/lib/provider-availability.d.ts.map +1 -0
  27. package/dist/lib/provider-availability.js +12 -0
  28. package/dist/lib/provider-availability.js.map +1 -0
  29. package/dist/lib/quota-stats-format.d.ts.map +1 -1
  30. package/dist/lib/quota-stats-format.js +9 -1
  31. package/dist/lib/quota-stats-format.js.map +1 -1
  32. package/dist/lib/quota-stats.d.ts +15 -0
  33. package/dist/lib/quota-stats.d.ts.map +1 -1
  34. package/dist/lib/quota-stats.js +168 -73
  35. package/dist/lib/quota-stats.js.map +1 -1
  36. package/dist/lib/quota-status.d.ts.map +1 -1
  37. package/dist/lib/quota-status.js +34 -3
  38. package/dist/lib/quota-status.js.map +1 -1
  39. package/dist/lib/qwen-auth.d.ts +8 -0
  40. package/dist/lib/qwen-auth.d.ts.map +1 -0
  41. package/dist/lib/qwen-auth.js +19 -0
  42. package/dist/lib/qwen-auth.js.map +1 -0
  43. package/dist/lib/qwen-local-quota.d.ts +35 -0
  44. package/dist/lib/qwen-local-quota.d.ts.map +1 -0
  45. package/dist/lib/qwen-local-quota.js +162 -0
  46. package/dist/lib/qwen-local-quota.js.map +1 -0
  47. package/dist/lib/types.d.ts +62 -2
  48. package/dist/lib/types.d.ts.map +1 -1
  49. package/dist/lib/types.js +2 -2
  50. package/dist/lib/types.js.map +1 -1
  51. package/dist/lib/zai.d.ts +9 -0
  52. package/dist/lib/zai.d.ts.map +1 -0
  53. package/dist/lib/zai.js +86 -0
  54. package/dist/lib/zai.js.map +1 -0
  55. package/dist/plugin.d.ts.map +1 -1
  56. package/dist/plugin.js +282 -127
  57. package/dist/plugin.js.map +1 -1
  58. package/dist/providers/openai.d.ts.map +1 -1
  59. package/dist/providers/openai.js +7 -10
  60. package/dist/providers/openai.js.map +1 -1
  61. package/dist/providers/qwen-code.d.ts +3 -0
  62. package/dist/providers/qwen-code.d.ts.map +1 -0
  63. package/dist/providers/qwen-code.js +59 -0
  64. package/dist/providers/qwen-code.js.map +1 -0
  65. package/dist/providers/registry.d.ts.map +1 -1
  66. package/dist/providers/registry.js +4 -0
  67. package/dist/providers/registry.js.map +1 -1
  68. package/dist/providers/zai.d.ts +8 -0
  69. package/dist/providers/zai.d.ts.map +1 -0
  70. package/dist/providers/zai.js +112 -0
  71. package/dist/providers/zai.js.map +1 -0
  72. package/package.json +1 -1
@@ -0,0 +1,162 @@
1
+ import { mkdir, readFile, rename, rm, writeFile } from "fs/promises";
2
+ import { dirname, join } from "path";
3
+ import { clampPercent } from "./format-utils.js";
4
+ import { getOpencodeRuntimeDirs } from "./opencode-runtime-paths.js";
5
+ const QWEN_LOCAL_QUOTA_STATE_VERSION = 1;
6
+ const QWEN_DAILY_LIMIT = 1000;
7
+ const QWEN_RPM_LIMIT = 60;
8
+ const RPM_WINDOW_MS = 60_000;
9
+ const MAX_RECENT_TIMESTAMPS = 300;
10
+ function utcDayKey(tsMs) {
11
+ return new Date(tsMs).toISOString().slice(0, 10);
12
+ }
13
+ function nextUtcMidnightIso(tsMs) {
14
+ const now = new Date(tsMs);
15
+ const nextMidnight = Date.UTC(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate() + 1, 0, 0, 0);
16
+ return new Date(nextMidnight).toISOString();
17
+ }
18
+ function defaultState(nowMs) {
19
+ return {
20
+ version: QWEN_LOCAL_QUOTA_STATE_VERSION,
21
+ utcDay: utcDayKey(nowMs),
22
+ dayCount: 0,
23
+ recent: [],
24
+ updatedAt: nowMs,
25
+ };
26
+ }
27
+ function normalizeState(raw, nowMs) {
28
+ if (!raw || typeof raw !== "object") {
29
+ return defaultState(nowMs);
30
+ }
31
+ const obj = raw;
32
+ const recentRaw = Array.isArray(obj.recent) ? obj.recent : [];
33
+ const recent = recentRaw
34
+ .filter((x) => typeof x === "number" && Number.isFinite(x) && x > 0)
35
+ .map((x) => Math.trunc(x));
36
+ return {
37
+ version: QWEN_LOCAL_QUOTA_STATE_VERSION,
38
+ utcDay: typeof obj.utcDay === "string" && obj.utcDay.length === 10 ? obj.utcDay : utcDayKey(nowMs),
39
+ dayCount: typeof obj.dayCount === "number" && Number.isFinite(obj.dayCount) && obj.dayCount >= 0
40
+ ? Math.trunc(obj.dayCount)
41
+ : 0,
42
+ recent,
43
+ updatedAt: typeof obj.updatedAt === "number" && Number.isFinite(obj.updatedAt) && obj.updatedAt > 0
44
+ ? Math.trunc(obj.updatedAt)
45
+ : nowMs,
46
+ };
47
+ }
48
+ function applyUtcResetAndPrune(state, nowMs) {
49
+ const today = utcDayKey(nowMs);
50
+ const recentFloor = nowMs - RPM_WINDOW_MS;
51
+ const recent = state.recent
52
+ .filter((ts) => ts >= recentFloor && ts <= nowMs)
53
+ .slice(-MAX_RECENT_TIMESTAMPS);
54
+ if (state.utcDay !== today) {
55
+ return {
56
+ version: QWEN_LOCAL_QUOTA_STATE_VERSION,
57
+ utcDay: today,
58
+ dayCount: 0,
59
+ recent,
60
+ updatedAt: nowMs,
61
+ };
62
+ }
63
+ return {
64
+ version: QWEN_LOCAL_QUOTA_STATE_VERSION,
65
+ utcDay: today,
66
+ dayCount: state.dayCount,
67
+ recent,
68
+ updatedAt: nowMs,
69
+ };
70
+ }
71
+ function toPercentRemaining(used, limit) {
72
+ if (limit <= 0)
73
+ return 0;
74
+ const remaining = ((limit - used) / limit) * 100;
75
+ return clampPercent(remaining);
76
+ }
77
+ async function readStateFromDisk(path, nowMs) {
78
+ try {
79
+ const raw = await readFile(path, "utf-8");
80
+ return normalizeState(JSON.parse(raw), nowMs);
81
+ }
82
+ catch {
83
+ return defaultState(nowMs);
84
+ }
85
+ }
86
+ async function writeStateToDisk(path, state) {
87
+ const dir = dirname(path);
88
+ const tmp = `${path}.tmp-${process.pid}-${Date.now()}-${Math.random().toString(16).slice(2)}`;
89
+ await mkdir(dir, { recursive: true });
90
+ await writeFile(tmp, JSON.stringify(state, null, 2), "utf-8");
91
+ const safeRm = async (target) => {
92
+ try {
93
+ await rm(target, { force: true });
94
+ }
95
+ catch {
96
+ // best effort cleanup
97
+ }
98
+ };
99
+ try {
100
+ await rename(tmp, path);
101
+ }
102
+ catch (err) {
103
+ const code = err && typeof err === "object" && "code" in err
104
+ ? String(err.code)
105
+ : "";
106
+ const shouldRetryAsReplace = code === "EPERM" || code === "EEXIST" || code === "EACCES" || code === "ENOTEMPTY";
107
+ if (!shouldRetryAsReplace) {
108
+ await safeRm(tmp);
109
+ throw err;
110
+ }
111
+ await safeRm(path);
112
+ await rename(tmp, path);
113
+ }
114
+ }
115
+ export function getQwenLocalQuotaPath() {
116
+ const { stateDir } = getOpencodeRuntimeDirs();
117
+ return join(stateDir, "opencode-quota", "qwen-local-quota.json");
118
+ }
119
+ export async function readQwenLocalQuotaState(params) {
120
+ const nowMs = params?.nowMs ?? Date.now();
121
+ const path = getQwenLocalQuotaPath();
122
+ const state = await readStateFromDisk(path, nowMs);
123
+ return applyUtcResetAndPrune(state, nowMs);
124
+ }
125
+ export async function recordQwenCompletion(params) {
126
+ const nowMs = params?.atMs ?? Date.now();
127
+ const path = getQwenLocalQuotaPath();
128
+ const loaded = await readStateFromDisk(path, nowMs);
129
+ const state = applyUtcResetAndPrune(loaded, nowMs);
130
+ const next = {
131
+ ...state,
132
+ dayCount: state.dayCount + 1,
133
+ recent: [...state.recent, nowMs].slice(-MAX_RECENT_TIMESTAMPS),
134
+ updatedAt: nowMs,
135
+ };
136
+ await writeStateToDisk(path, next);
137
+ return next;
138
+ }
139
+ export function computeQwenQuota(params) {
140
+ const nowMs = params.nowMs ?? Date.now();
141
+ const dayLimit = params.dayLimit ?? QWEN_DAILY_LIMIT;
142
+ const rpmLimit = params.rpmLimit ?? QWEN_RPM_LIMIT;
143
+ const state = applyUtcResetAndPrune(params.state, nowMs);
144
+ const dayUsed = Math.max(0, Math.trunc(state.dayCount));
145
+ const rpmUsed = state.recent.length;
146
+ const oldestRecent = state.recent.length > 0 ? Math.min(...state.recent) : undefined;
147
+ return {
148
+ day: {
149
+ used: dayUsed,
150
+ limit: dayLimit,
151
+ percentRemaining: toPercentRemaining(dayUsed, dayLimit),
152
+ resetTimeIso: nextUtcMidnightIso(nowMs),
153
+ },
154
+ rpm: {
155
+ used: rpmUsed,
156
+ limit: rpmLimit,
157
+ percentRemaining: toPercentRemaining(rpmUsed, rpmLimit),
158
+ resetTimeIso: typeof oldestRecent === "number" ? new Date(oldestRecent + RPM_WINDOW_MS).toISOString() : undefined,
159
+ },
160
+ };
161
+ }
162
+ //# sourceMappingURL=qwen-local-quota.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"qwen-local-quota.js","sourceRoot":"","sources":["../../src/lib/qwen-local-quota.ts"],"names":[],"mappings":"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"}
@@ -77,8 +77,8 @@ export type CopilotTier = "free" | "pro" | "pro+" | "business" | "enterprise";
77
77
  export interface CopilotQuotaConfig {
78
78
  /** Fine-grained PAT with "Plan" read permission */
79
79
  token: string;
80
- /** GitHub username (for API calls) */
81
- username: string;
80
+ /** GitHub username (optional; used for legacy /users/{username} fallback) */
81
+ username?: string;
82
82
  /** Copilot subscription tier (determines monthly quota limit) */
83
83
  tier: CopilotTier;
84
84
  }
@@ -124,6 +124,16 @@ export interface AuthData {
124
124
  type: string;
125
125
  key?: string;
126
126
  };
127
+ "opencode-qwencode-auth"?: {
128
+ type: string;
129
+ access?: string;
130
+ refresh?: string;
131
+ expires?: number;
132
+ };
133
+ "zai-coding-plan"?: {
134
+ type: "api";
135
+ key: string;
136
+ };
127
137
  }
128
138
  /** Single Antigravity account from opencode-antigravity-auth storage */
129
139
  export interface AntigravityAccount {
@@ -187,6 +197,55 @@ export interface CopilotUsageResponse {
187
197
  quota_reset_date: string;
188
198
  quota_snapshots: QuotaSnapshots;
189
199
  }
200
+ /** Z.ai auth entry in auth.json */
201
+ export interface ZaiAuthData {
202
+ type: "api";
203
+ key: string;
204
+ }
205
+ /** Z.ai quota limit entry from API */
206
+ export interface ZaiQuotaLimit {
207
+ type: string;
208
+ unit: number;
209
+ number: number;
210
+ usage: number;
211
+ currentValue?: number;
212
+ remaining?: number;
213
+ percentage: number;
214
+ nextResetTime?: number;
215
+ usageDetails?: Array<{
216
+ modelCode: string;
217
+ usage: number;
218
+ }>;
219
+ }
220
+ /** Z.ai API response */
221
+ export interface ZaiQuotaResponse {
222
+ code: number;
223
+ msg: string;
224
+ data: {
225
+ limits: ZaiQuotaLimit[];
226
+ level: string;
227
+ };
228
+ success: boolean;
229
+ }
230
+ /** Result from fetching Z.ai quota */
231
+ export interface ZaiQuotaResult {
232
+ success: true;
233
+ label: string;
234
+ windows: {
235
+ hourly?: {
236
+ percentRemaining: number;
237
+ resetTimeIso?: string;
238
+ };
239
+ weekly?: {
240
+ percentRemaining: number;
241
+ resetTimeIso?: string;
242
+ };
243
+ mcp?: {
244
+ percentRemaining: number;
245
+ resetTimeIso?: string;
246
+ };
247
+ };
248
+ }
190
249
  /** Result from fetching Copilot quota */
191
250
  export interface CopilotQuotaResult {
192
251
  success: true;
@@ -222,6 +281,7 @@ export interface QuotaError {
222
281
  /** Combined quota result */
223
282
  export type CopilotResult = CopilotQuotaResult | QuotaError | null;
224
283
  export type GoogleResult = GoogleQuotaResult | QuotaError | null;
284
+ export type ZaiResult = ZaiQuotaResult | QuotaError | null;
225
285
  export type ChutesResult = {
226
286
  success: true;
227
287
  percentRemaining: number;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":"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"}
package/dist/lib/types.js CHANGED
@@ -32,9 +32,9 @@ export const DEFAULT_CONFIG = {
32
32
  export const REQUEST_TIMEOUT_MS = 3000;
33
33
  /** Model key mapping for Google API */
34
34
  export const GOOGLE_MODEL_KEYS = {
35
- G3PRO: { key: "gemini-3-pro-high", altKey: "gemini-3-pro-low", display: "G3Pro" },
35
+ G3PRO: { key: "gemini-3.1-pro", altKey: "gemini-3.1-pro-high|gemini-3.1-pro-low|gemini-3-pro-high|gemini-3-pro-low", display: "G3Pro" },
36
36
  G3FLASH: { key: "gemini-3-flash", display: "G3Flash" },
37
- CLAUDE: { key: "claude-opus-4-5-thinking", altKey: "claude-opus-4-5", display: "Claude" },
37
+ CLAUDE: { key: "claude-opus-4-6-thinking", altKey: "claude-opus-4-5-thinking|claude-opus-4-5", display: "Claude" },
38
38
  G3IMAGE: { key: "gemini-3-pro-image", display: "G3Image" },
39
39
  };
40
40
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAiEH,mCAAmC;AACnC,MAAM,CAAC,MAAM,cAAc,GAAqB;IAC9C,OAAO,EAAE,IAAI;IAEb,WAAW,EAAE,IAAI;IACjB,UAAU,EAAE,SAAS;IACrB,aAAa,EAAE,MAAM,EAAE,YAAY;IAEnC,KAAK,EAAE,KAAK;IAEZ,mFAAmF;IACnF,gBAAgB,EAAE,MAAe;IAEjC,4DAA4D;IAC5D,YAAY,EAAE,CAAC,QAAQ,CAAC;IAExB,UAAU,EAAE,IAAI;IAChB,cAAc,EAAE,IAAI;IACpB,aAAa,EAAE,IAAI;IACnB,cAAc,EAAE,IAAI;IACpB,eAAe,EAAE,IAAI;IACrB,gBAAgB,EAAE,KAAK;IACvB,iBAAiB,EAAE,IAAI;IACvB,MAAM,EAAE;QACN,QAAQ,EAAE,EAAE;QACZ,QAAQ,EAAE,EAAE;QACZ,MAAM,EAAE,EAAE;KACX;CACF,CAAC;AAqOF,gFAAgF;AAChF,YAAY;AACZ,gFAAgF;AAEhF,sCAAsC;AACtC,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,CAAC;AAEvC,uCAAuC;AACvC,MAAM,CAAC,MAAM,iBAAiB,GAG1B;IACF,KAAK,EAAE,EAAE,GAAG,EAAE,mBAAmB,EAAE,MAAM,EAAE,kBAAkB,EAAE,OAAO,EAAE,OAAO,EAAE;IACjF,OAAO,EAAE,EAAE,GAAG,EAAE,gBAAgB,EAAE,OAAO,EAAE,SAAS,EAAE;IACtD,MAAM,EAAE,EAAE,GAAG,EAAE,0BAA0B,EAAE,MAAM,EAAE,iBAAiB,EAAE,OAAO,EAAE,QAAQ,EAAE;IACzF,OAAO,EAAE,EAAE,GAAG,EAAE,oBAAoB,EAAE,OAAO,EAAE,SAAS,EAAE;CAC3D,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAiEH,mCAAmC;AACnC,MAAM,CAAC,MAAM,cAAc,GAAqB;IAC9C,OAAO,EAAE,IAAI;IAEb,WAAW,EAAE,IAAI;IACjB,UAAU,EAAE,SAAS;IACrB,aAAa,EAAE,MAAM,EAAE,YAAY;IAEnC,KAAK,EAAE,KAAK;IAEZ,mFAAmF;IACnF,gBAAgB,EAAE,MAAe;IAEjC,4DAA4D;IAC5D,YAAY,EAAE,CAAC,QAAQ,CAAC;IAExB,UAAU,EAAE,IAAI;IAChB,cAAc,EAAE,IAAI;IACpB,aAAa,EAAE,IAAI;IACnB,cAAc,EAAE,IAAI;IACpB,eAAe,EAAE,IAAI;IACrB,gBAAgB,EAAE,KAAK;IACvB,iBAAiB,EAAE,IAAI;IACvB,MAAM,EAAE;QACN,QAAQ,EAAE,EAAE;QACZ,QAAQ,EAAE,EAAE;QACZ,MAAM,EAAE,EAAE;KACX;CACF,CAAC;AAgSF,gFAAgF;AAChF,YAAY;AACZ,gFAAgF;AAEhF,sCAAsC;AACtC,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,CAAC;AAEvC,uCAAuC;AACvC,MAAM,CAAC,MAAM,iBAAiB,GAG1B;IACF,KAAK,EAAE,EAAE,GAAG,EAAE,gBAAgB,EAAE,MAAM,EAAE,2EAA2E,EAAE,OAAO,EAAE,OAAO,EAAE;IACvI,OAAO,EAAE,EAAE,GAAG,EAAE,gBAAgB,EAAE,OAAO,EAAE,SAAS,EAAE;IACtD,MAAM,EAAE,EAAE,GAAG,EAAE,0BAA0B,EAAE,MAAM,EAAE,0CAA0C,EAAE,OAAO,EAAE,QAAQ,EAAE;IAClH,OAAO,EAAE,EAAE,GAAG,EAAE,oBAAoB,EAAE,OAAO,EAAE,SAAS,EAAE;CAC3D,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Z.ai quota fetcher
3
+ *
4
+ * Uses OpenCode's auth.json (zai-coding-plan) and queries:
5
+ * https://api.z.ai/api/monitor/usage/quota/limit
6
+ */
7
+ import type { ZaiResult } from "./types.js";
8
+ export declare function queryZaiQuota(): Promise<ZaiResult>;
9
+ //# sourceMappingURL=zai.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zai.d.ts","sourceRoot":"","sources":["../../src/lib/zai.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EACV,SAAS,EAGV,MAAM,YAAY,CAAC;AAWpB,wBAAsB,aAAa,IAAI,OAAO,CAAC,SAAS,CAAC,CAyExD"}
@@ -0,0 +1,86 @@
1
+ /**
2
+ * Z.ai quota fetcher
3
+ *
4
+ * Uses OpenCode's auth.json (zai-coding-plan) and queries:
5
+ * https://api.z.ai/api/monitor/usage/quota/limit
6
+ */
7
+ import { clampPercent } from "./format-utils.js";
8
+ import { fetchWithTimeout } from "./http.js";
9
+ import { readAuthFile } from "./opencode-auth.js";
10
+ async function readZaiAuth() {
11
+ const auth = await readAuthFile();
12
+ const zai = auth?.["zai-coding-plan"];
13
+ if (!zai || zai.type !== "api" || !zai.key)
14
+ return null;
15
+ return zai;
16
+ }
17
+ const ZAI_QUOTA_URL = "https://api.z.ai/api/monitor/usage/quota/limit";
18
+ export async function queryZaiQuota() {
19
+ const auth = await readZaiAuth();
20
+ if (!auth)
21
+ return null;
22
+ try {
23
+ const headers = {
24
+ Authorization: auth.key,
25
+ "User-Agent": "OpenCode-Quota-Toast/1.0",
26
+ "Content-Type": "application/json",
27
+ };
28
+ const resp = await fetchWithTimeout(ZAI_QUOTA_URL, { headers });
29
+ if (!resp.ok) {
30
+ const text = await resp.text();
31
+ return {
32
+ success: false,
33
+ error: `Z.ai API error ${resp.status}: ${text.slice(0, 120)}`,
34
+ };
35
+ }
36
+ const data = (await resp.json());
37
+ const limits = data.data.limits;
38
+ if (!limits || !Array.isArray(limits)) {
39
+ return { success: false, error: "Invalid quota data" };
40
+ }
41
+ let hourlyWindow;
42
+ let weeklyWindow;
43
+ let mcpWindow;
44
+ for (const limit of limits) {
45
+ const percentRemaining = clampPercent(100 - limit.percentage);
46
+ let resetTimeIso;
47
+ if (limit.nextResetTime) {
48
+ const ms = Math.round(limit.nextResetTime);
49
+ if (Number.isFinite(ms) && ms > 0) {
50
+ resetTimeIso = new Date(ms).toISOString();
51
+ }
52
+ }
53
+ const window = { percentRemaining, resetTimeIso };
54
+ if (limit.type === "TOKENS_LIMIT") {
55
+ if (limit.unit === 3) {
56
+ // unit 3 is 5-hourly (Standard Lite/Pro/Max window)
57
+ hourlyWindow = window;
58
+ }
59
+ else if (limit.unit === 4 || limit.unit === 6) {
60
+ // unit 6 is weekly, unit 4 is daily. We prioritize the longer one as Weekly for display parity.
61
+ weeklyWindow = window;
62
+ }
63
+ }
64
+ else if (limit.type === "TIME_LIMIT") {
65
+ // TIME_LIMIT (unit 5) is typically the Monthly MCP limit
66
+ mcpWindow = window;
67
+ }
68
+ }
69
+ return {
70
+ success: true,
71
+ label: "Z.ai",
72
+ windows: {
73
+ hourly: hourlyWindow,
74
+ weekly: weeklyWindow,
75
+ mcp: mcpWindow,
76
+ },
77
+ };
78
+ }
79
+ catch (err) {
80
+ return {
81
+ success: false,
82
+ error: err instanceof Error ? err.message : String(err),
83
+ };
84
+ }
85
+ }
86
+ //# sourceMappingURL=zai.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zai.js","sourceRoot":"","sources":["../../src/lib/zai.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAwOlD;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,MAuzB9B,CAAC"}
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAwPlD;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,MA6+B9B,CAAC"}