@metyatech/ai-quota 0.9.3 → 1.0.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.
package/dist/gemini.js CHANGED
@@ -1,6 +1,7 @@
1
1
  import fs from "node:fs";
2
2
  import path from "node:path";
3
3
  import os from "node:os";
4
+ import { QuotaFetchError } from "./errors.js";
4
5
  const ENV_GEMINI_OAUTH_CLIENT_ID = "AGENT_RUNNER_GEMINI_OAUTH_CLIENT_ID";
5
6
  const ENV_GEMINI_OAUTH_CLIENT_SECRET = "AGENT_RUNNER_GEMINI_OAUTH_CLIENT_SECRET";
6
7
  let cachedGeminiOauthClientInfo = null;
@@ -78,61 +79,95 @@ function getGeminiOauthClientInfo() {
78
79
  readGeminiOauthClientInfoFromEnv() ?? tryReadGeminiCliOauthClientInfoFromWellKnownPaths();
79
80
  return cachedGeminiOauthClientInfo;
80
81
  }
82
+ async function fetchWithTimeout(url, init, timeoutMs) {
83
+ const controller = new AbortController();
84
+ const timer = setTimeout(() => controller.abort(), timeoutMs);
85
+ try {
86
+ return await fetch(url, { ...init, signal: controller.signal });
87
+ }
88
+ catch (e) {
89
+ if (e instanceof Error && e.name === "AbortError") {
90
+ throw new QuotaFetchError("timeout", `Gemini request timed out: ${url}`, { cause: e });
91
+ }
92
+ throw new QuotaFetchError("network_error", `Gemini request failed: ${url}`, { cause: e });
93
+ }
94
+ finally {
95
+ clearTimeout(timer);
96
+ }
97
+ }
81
98
  async function refreshAccessToken(options) {
82
99
  const params = new URLSearchParams();
83
100
  params.set("client_id", options.clientId);
84
101
  params.set("client_secret", options.clientSecret);
85
102
  params.set("refresh_token", options.refreshToken);
86
103
  params.set("grant_type", "refresh_token");
87
- const res = await fetch("https://oauth2.googleapis.com/token", {
104
+ const res = await fetchWithTimeout("https://oauth2.googleapis.com/token", {
88
105
  method: "POST",
89
106
  headers: { "Content-Type": "application/x-www-form-urlencoded" },
90
107
  body: params.toString()
91
- });
108
+ }, options.timeoutMs);
109
+ const text = await res.text();
92
110
  if (!res.ok) {
93
- throw new Error(`Failed to refresh Google access token: ${res.status} ${await res.text()}`);
111
+ const reason = res.status === 400 || res.status === 401 || res.status === 403 ? "auth_failed" : "api_error";
112
+ throw new QuotaFetchError(reason, `Failed to refresh Google access token (${res.status}).`, {
113
+ httpStatus: res.status
114
+ });
115
+ }
116
+ let data;
117
+ try {
118
+ data = (text.trim() ? JSON.parse(text) : {});
119
+ }
120
+ catch (e) {
121
+ throw new QuotaFetchError("parse_error", "Google token refresh response was not valid JSON.", { cause: e });
94
122
  }
95
- const data = (await res.json());
96
123
  if (typeof data?.access_token !== "string" || data.access_token.length === 0) {
97
- throw new Error("Google token refresh response missing access_token.");
124
+ throw new QuotaFetchError("parse_error", "Google token refresh response missing access_token.");
98
125
  }
99
126
  const expiryDate = typeof data?.expires_in === "number"
100
127
  ? Date.now() + Math.max(0, data.expires_in) * 1000
101
128
  : undefined;
102
129
  return { accessToken: data.access_token, expiryDate };
103
130
  }
104
- async function getCredentials() {
131
+ async function getCredentials(timeoutMs) {
105
132
  const credsPath = path.join(os.homedir(), ".gemini", "oauth_creds.json");
106
133
  if (!fs.existsSync(credsPath)) {
107
- throw new Error(`Gemini OAuth credentials not found at ${credsPath}`);
134
+ throw new QuotaFetchError("no_credentials", `Gemini OAuth credentials not found at ${credsPath}`);
135
+ }
136
+ let creds;
137
+ try {
138
+ creds = JSON.parse(fs.readFileSync(credsPath, "utf8"));
139
+ }
140
+ catch (e) {
141
+ throw new QuotaFetchError("parse_error", `Failed to parse Gemini OAuth credentials at ${credsPath}`, {
142
+ cause: e
143
+ });
108
144
  }
109
- const raw = fs.readFileSync(credsPath, "utf8");
110
- const creds = JSON.parse(raw);
111
- let accessToken = creds.access_token;
112
145
  const now = Date.now();
113
- // Buffer of 5 minutes
114
- if (!accessToken || (typeof creds.expiry_date === "number" && creds.expiry_date < now + 300000)) {
115
- if (creds.refresh_token) {
146
+ let accessToken = creds.access_token;
147
+ const expired = typeof creds.expiry_date === "number" && Number.isFinite(creds.expiry_date)
148
+ ? creds.expiry_date < now + 300000
149
+ : false;
150
+ if (typeof accessToken !== "string" || accessToken.length === 0 || expired) {
151
+ if (typeof creds.refresh_token === "string" && creds.refresh_token.length > 0) {
116
152
  const discovered = getGeminiOauthClientInfo();
117
153
  const clientId = getClientIdFromIdToken(creds.id_token) ??
118
154
  discovered?.clientId ??
119
- (typeof creds.client_id === "string" && creds.client_id.length > 0
120
- ? creds.client_id
121
- : undefined);
155
+ (typeof creds.client_id === "string" && creds.client_id.length > 0 ? creds.client_id : undefined);
122
156
  const clientSecret = discovered?.clientSecret ??
123
157
  (typeof creds.client_secret === "string" && creds.client_secret.length > 0
124
158
  ? creds.client_secret
125
159
  : undefined);
126
160
  if (!clientId) {
127
- throw new Error(`Gemini OAuth refresh requires a client ID; set ${ENV_GEMINI_OAUTH_CLIENT_ID} or install Gemini CLI.`);
161
+ throw new QuotaFetchError("no_credentials", `Gemini OAuth refresh requires a client ID; set ${ENV_GEMINI_OAUTH_CLIENT_ID} or install Gemini CLI.`);
128
162
  }
129
163
  if (!clientSecret) {
130
- throw new Error(`Gemini OAuth refresh requires a client secret; set ${ENV_GEMINI_OAUTH_CLIENT_SECRET} or install Gemini CLI.`);
164
+ throw new QuotaFetchError("no_credentials", `Gemini OAuth refresh requires a client secret; set ${ENV_GEMINI_OAUTH_CLIENT_SECRET} or install Gemini CLI.`);
131
165
  }
132
166
  const refreshed = await refreshAccessToken({
133
167
  refreshToken: creds.refresh_token,
134
168
  clientId,
135
- clientSecret
169
+ clientSecret,
170
+ timeoutMs
136
171
  });
137
172
  accessToken = refreshed.accessToken;
138
173
  try {
@@ -147,92 +182,93 @@ async function getCredentials() {
147
182
  }
148
183
  }
149
184
  else {
150
- throw new Error("Gemini access token expired and no refresh token available.");
185
+ throw new QuotaFetchError("token_expired", "Gemini access token expired and no refresh token available.");
151
186
  }
152
187
  }
153
188
  return { accessToken: accessToken };
154
189
  }
190
+ function reasonFromHttpStatus(status) {
191
+ if (status === 401 || status === 403)
192
+ return "auth_failed";
193
+ if (status === 404 || status === 410)
194
+ return "endpoint_changed";
195
+ return "api_error";
196
+ }
155
197
  /**
156
198
  * Fetches Gemini quota usage from the Cloud Code Assist API.
157
199
  *
158
- * This function performs a multi-step OAuth process:
159
- * 1. Reads credentials from `~/.gemini/oauth_creds.json`.
160
- * 2. Automatically refreshes the access token if it's missing or expired.
161
- * 3. Calls the `loadCodeAssist` API to identify the active project.
162
- * 4. Calls the `retrieveUserQuota` API to get the actual usage metrics.
163
- *
164
- * @returns A promise resolving to GeminiUsage or null if the process fails.
165
- * The returned object contains per-model usage data for Pro and Flash models.
200
+ * @param timeoutMs - Per-request timeout in milliseconds (default: 10000ms)
166
201
  */
167
- export async function fetchGeminiRateLimits() {
202
+ export async function fetchGeminiRateLimits(timeoutMs = 10000) {
203
+ const { accessToken } = await getCredentials(timeoutMs);
204
+ const loadRes = await fetchWithTimeout("https://cloudcode-pa.googleapis.com/v1internal:loadCodeAssist", {
205
+ method: "POST",
206
+ headers: {
207
+ Authorization: `Bearer ${accessToken}`,
208
+ "Content-Type": "application/json",
209
+ "User-Agent": "ai-quota"
210
+ },
211
+ body: JSON.stringify({
212
+ metadata: {
213
+ ideType: "GEMINI_CLI",
214
+ platform: process.platform === "win32" ? "WINDOWS_AMD64" : "LINUX_AMD64"
215
+ }
216
+ })
217
+ }, timeoutMs);
218
+ const loadText = await loadRes.text();
219
+ if (!loadRes.ok) {
220
+ throw new QuotaFetchError(reasonFromHttpStatus(loadRes.status), `loadCodeAssist failed (${loadRes.status} ${loadRes.statusText}).`, { httpStatus: loadRes.status });
221
+ }
222
+ let loadData;
168
223
  try {
169
- const { accessToken } = await getCredentials();
170
- // 1. Load Code Assist to get the project ID
171
- const loadRes = await fetch("https://cloudcode-pa.googleapis.com/v1internal:loadCodeAssist", {
172
- method: "POST",
173
- headers: {
174
- Authorization: `Bearer ${accessToken}`,
175
- "Content-Type": "application/json",
176
- "User-Agent": "ai-quota"
177
- },
178
- body: JSON.stringify({
179
- metadata: {
180
- ideType: "GEMINI_CLI",
181
- platform: process.platform === "win32" ? "WINDOWS_AMD64" : "LINUX_AMD64"
182
- }
183
- })
184
- });
185
- if (!loadRes.ok) {
186
- throw new Error(`loadCodeAssist failed: ${loadRes.status} ${await loadRes.text()}`);
187
- }
188
- const loadData = (await loadRes.json());
189
- const projectId = loadData.cloudaicompanionProject;
190
- if (!projectId) {
191
- throw new Error("No cloudaicompanionProject found in loadCodeAssist response.");
192
- }
193
- // 2. Retrieve User Quota
194
- const quotaRes = await fetch("https://cloudcode-pa.googleapis.com/v1internal:retrieveUserQuota", {
195
- method: "POST",
196
- headers: {
197
- Authorization: `Bearer ${accessToken}`,
198
- "Content-Type": "application/json",
199
- "User-Agent": "ai-quota"
200
- },
201
- body: JSON.stringify({ project: projectId })
202
- });
203
- if (!quotaRes.ok) {
204
- throw new Error(`retrieveUserQuota failed: ${quotaRes.status} ${await quotaRes.text()}`);
205
- }
206
- const quotaData = (await quotaRes.json());
207
- const usage = {};
208
- if (Array.isArray(quotaData.buckets)) {
209
- for (const bucket of quotaData.buckets) {
210
- const modelId = bucket.modelId;
211
- if (!modelId)
212
- continue;
213
- // remainingFraction is usually between 0.0 and 1.0.
214
- // Keep fractional precision so tiny consumption (<0.5%) does not get rounded away.
215
- const remainingFraction = typeof bucket.remainingFraction === "number" &&
216
- Number.isFinite(bucket.remainingFraction)
217
- ? Math.min(Math.max(bucket.remainingFraction, 0), 1)
218
- : 1.0;
219
- const limit = 100; // percentage scale
220
- const usedRaw = (1.0 - remainingFraction) * 100;
221
- const used = Math.round(usedRaw * 1_000_000) / 1_000_000;
222
- usage[modelId] = {
223
- limit,
224
- usage: used,
225
- resetAt: bucket.resetTime
226
- ? new Date(bucket.resetTime)
227
- : new Date(Date.now() + 3600000)
228
- };
224
+ loadData = (loadText.trim() ? JSON.parse(loadText) : {});
225
+ }
226
+ catch (e) {
227
+ throw new QuotaFetchError("parse_error", "loadCodeAssist returned invalid JSON.", { cause: e });
228
+ }
229
+ const projectId = loadData.cloudaicompanionProject;
230
+ if (!projectId) {
231
+ throw new QuotaFetchError("parse_error", "No cloudaicompanionProject found in loadCodeAssist response.");
232
+ }
233
+ const quotaRes = await fetchWithTimeout("https://cloudcode-pa.googleapis.com/v1internal:retrieveUserQuota", {
234
+ method: "POST",
235
+ headers: {
236
+ Authorization: `Bearer ${accessToken}`,
237
+ "Content-Type": "application/json",
238
+ "User-Agent": "ai-quota"
239
+ },
240
+ body: JSON.stringify({ project: projectId })
241
+ }, timeoutMs);
242
+ const quotaText = await quotaRes.text();
243
+ if (!quotaRes.ok) {
244
+ throw new QuotaFetchError(reasonFromHttpStatus(quotaRes.status), `retrieveUserQuota failed (${quotaRes.status} ${quotaRes.statusText}).`, { httpStatus: quotaRes.status });
245
+ }
246
+ let quotaData;
247
+ try {
248
+ quotaData = (quotaText.trim() ? JSON.parse(quotaText) : {});
249
+ }
250
+ catch (e) {
251
+ throw new QuotaFetchError("parse_error", "retrieveUserQuota returned invalid JSON.", { cause: e });
252
+ }
253
+ const usage = {};
254
+ if (Array.isArray(quotaData.buckets)) {
255
+ for (const bucket of quotaData.buckets) {
256
+ const modelId = typeof bucket.modelId === "string" ? bucket.modelId : null;
257
+ if (!modelId)
258
+ continue;
259
+ const remainingFraction = typeof bucket.remainingFraction === "number" && Number.isFinite(bucket.remainingFraction)
260
+ ? Math.min(Math.max(bucket.remainingFraction, 0), 1)
261
+ : 1.0;
262
+ const limit = 100;
263
+ const usedRaw = (1.0 - remainingFraction) * 100;
264
+ const used = Math.round(usedRaw * 1_000_000) / 1_000_000;
265
+ const resetAt = bucket.resetTime ? new Date(bucket.resetTime) : new Date(Date.now() + 3600000);
266
+ if (Number.isNaN(resetAt.getTime())) {
267
+ throw new QuotaFetchError("parse_error", "Gemini quota bucket resetTime was invalid.");
229
268
  }
269
+ usage[modelId] = { limit, usage: used, resetAt };
230
270
  }
231
- return usage;
232
- }
233
- catch (error) {
234
- console.error("Error fetching Gemini usage:", error);
235
- return null;
236
271
  }
272
+ return usage;
237
273
  }
238
274
  //# sourceMappingURL=gemini.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"gemini.js","sourceRoot":"","sources":["../src/gemini.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"gemini.js","sourceRoot":"","sources":["../src/gemini.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { AllRateLimits } from "./types.js";
2
+ import type { SupportedAgent } from "./index.js";
3
+ export type HumanStatus = "CAN_USE" | "LOW_QUOTA" | "WAIT_RESET" | "LOGIN_REQUIRED" | "FETCH_FAILED";
4
+ export type HumanLimit = "7d" | "5h" | "pro" | "flash" | "-";
5
+ export type HumanRow = {
6
+ agent: string;
7
+ status: HumanStatus;
8
+ limit: HumanLimit;
9
+ details: string;
10
+ };
11
+ export declare function buildHumanRows(allResults: AllRateLimits, options: {
12
+ agents: SupportedAgent[];
13
+ now?: Date;
14
+ }): HumanRow[];
15
+ export declare function formatHumanTable(rows: HumanRow[]): string;
16
+ //# sourceMappingURL=human-output.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"human-output.d.ts","sourceRoot":"","sources":["../src/human-output.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EAMd,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAIjD,MAAM,MAAM,WAAW,GACnB,SAAS,GACT,WAAW,GACX,YAAY,GACZ,gBAAgB,GAChB,cAAc,CAAC;AAEnB,MAAM,MAAM,UAAU,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,OAAO,GAAG,GAAG,CAAC;AAE7D,MAAM,MAAM,QAAQ,GAAG;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,WAAW,CAAC;IACpB,KAAK,EAAE,UAAU,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAwOF,wBAAgB,cAAc,CAC5B,UAAU,EAAE,aAAa,EACzB,OAAO,EAAE;IAAE,MAAM,EAAE,cAAc,EAAE,CAAC;IAAC,GAAG,CAAC,EAAE,IAAI,CAAA;CAAE,GAChD,QAAQ,EAAE,CA8BZ;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,MAAM,CA6BzD"}
@@ -0,0 +1,247 @@
1
+ import { formatResetIn } from "./utils.js";
2
+ import { rateLimitSnapshotToStatus } from "./codex.js";
3
+ function clampPercent(value) {
4
+ if (!Number.isFinite(value))
5
+ return 0;
6
+ return Math.min(100, Math.max(0, value));
7
+ }
8
+ function compareMostConstraining(a, b) {
9
+ if (a.usedPercent !== b.usedPercent)
10
+ return b.usedPercent - a.usedPercent;
11
+ return a.resetAt.getTime() - b.resetAt.getTime();
12
+ }
13
+ function deriveStatusFromUsedPercent(usedPercent) {
14
+ const clamped = clampPercent(usedPercent);
15
+ if (clamped >= 100)
16
+ return "WAIT_RESET";
17
+ if (clamped >= 80)
18
+ return "LOW_QUOTA";
19
+ return "CAN_USE";
20
+ }
21
+ function deriveStatusFromResult(result, usedPercent) {
22
+ const loginReasons = new Set(["auth_failed", "no_credentials", "token_expired"]);
23
+ if (result.status === "error") {
24
+ if (result.reason && loginReasons.has(result.reason))
25
+ return "LOGIN_REQUIRED";
26
+ return "FETCH_FAILED";
27
+ }
28
+ if (result.status === "no-data") {
29
+ if (result.reason && loginReasons.has(result.reason))
30
+ return "LOGIN_REQUIRED";
31
+ return "FETCH_FAILED";
32
+ }
33
+ if (usedPercent === null)
34
+ return "FETCH_FAILED";
35
+ return deriveStatusFromUsedPercent(usedPercent);
36
+ }
37
+ function formatWindowDetails(windows, now) {
38
+ return windows
39
+ .map((w) => `${w.label}: ${w.usedPercent}% used (reset in ${formatResetIn(w.resetAt, now)})`)
40
+ .join(", ");
41
+ }
42
+ function buildClaudeRow(result, now) {
43
+ const windows = [];
44
+ const data = result.data;
45
+ if (data?.five_hour) {
46
+ const resetAt = new Date(data.five_hour.resets_at);
47
+ if (Number.isFinite(resetAt.getTime())) {
48
+ windows.push({
49
+ label: "5h",
50
+ usedPercent: clampPercent(Math.round(data.five_hour.utilization)),
51
+ resetAt
52
+ });
53
+ }
54
+ }
55
+ if (data?.seven_day) {
56
+ const resetAt = new Date(data.seven_day.resets_at);
57
+ if (Number.isFinite(resetAt.getTime())) {
58
+ windows.push({
59
+ label: "7d",
60
+ usedPercent: clampPercent(Math.round(data.seven_day.utilization)),
61
+ resetAt
62
+ });
63
+ }
64
+ }
65
+ windows.sort(compareMostConstraining);
66
+ const limitingUsed = windows.length > 0 ? windows[0].usedPercent : null;
67
+ const status = deriveStatusFromResult(result, limitingUsed);
68
+ if (status === "LOGIN_REQUIRED") {
69
+ return {
70
+ status,
71
+ limit: "-",
72
+ details: result.reason ? `login required (${result.reason})` : "login required"
73
+ };
74
+ }
75
+ if (status === "FETCH_FAILED") {
76
+ return {
77
+ status,
78
+ limit: "-",
79
+ details: result.reason ? `fetch failed (${result.reason})` : "fetch failed"
80
+ };
81
+ }
82
+ const limit = windows.length > 0 ? windows[0].label : "-";
83
+ const details = windows.length > 0 ? formatWindowDetails(windows, now) : "no data";
84
+ return { status, limit, details };
85
+ }
86
+ function buildCodexRow(result, now) {
87
+ const data = result.data;
88
+ const statusObj = data ? rateLimitSnapshotToStatus(data, now) : null;
89
+ const windows = [];
90
+ for (const w of statusObj?.windows ?? []) {
91
+ const usedPercent = clampPercent(Math.round(100 - w.percentLeft));
92
+ if (w.label === "5h" || w.label === "7d") {
93
+ windows.push({ label: w.label, usedPercent, resetAt: w.resetAt });
94
+ }
95
+ }
96
+ windows.sort(compareMostConstraining);
97
+ const limitingUsed = windows.length > 0 ? windows[0].usedPercent : null;
98
+ const status = deriveStatusFromResult(result, limitingUsed);
99
+ if (status === "LOGIN_REQUIRED") {
100
+ return {
101
+ status,
102
+ limit: "-",
103
+ details: result.reason ? `login required (${result.reason})` : "login required"
104
+ };
105
+ }
106
+ if (status === "FETCH_FAILED") {
107
+ return {
108
+ status,
109
+ limit: "-",
110
+ details: result.reason ? `fetch failed (${result.reason})` : "fetch failed"
111
+ };
112
+ }
113
+ const limit = windows.length > 0 ? windows[0].label : "-";
114
+ const details = windows.length > 0 ? formatWindowDetails(windows, now) : "no data";
115
+ return { status, limit, details };
116
+ }
117
+ function buildCopilotRow(result, now) {
118
+ const data = result.data;
119
+ const usedPercent = data ? clampPercent(Math.round(100 - data.percentRemaining)) : null;
120
+ const status = deriveStatusFromResult(result, usedPercent);
121
+ if (status === "LOGIN_REQUIRED") {
122
+ return {
123
+ status,
124
+ limit: "-",
125
+ details: result.reason ? `login required (${result.reason})` : "login required"
126
+ };
127
+ }
128
+ if (status === "FETCH_FAILED") {
129
+ return {
130
+ status,
131
+ limit: "-",
132
+ details: result.reason ? `fetch failed (${result.reason})` : "fetch failed"
133
+ };
134
+ }
135
+ if (!data)
136
+ return { status: "FETCH_FAILED", limit: "-", details: "no data" };
137
+ return {
138
+ status,
139
+ limit: "-",
140
+ details: `${usedPercent}% used (reset in ${formatResetIn(data.resetAt, now)})`
141
+ };
142
+ }
143
+ function classifyGeminiModelId(modelId) {
144
+ if (modelId.includes("pro"))
145
+ return { agentSuffix: "pro", limit: "pro" };
146
+ if (modelId.includes("flash"))
147
+ return { agentSuffix: "flash", limit: "flash" };
148
+ return { agentSuffix: null, limit: "-" };
149
+ }
150
+ function buildGeminiRows(result, now) {
151
+ const data = result.data;
152
+ if (result.status !== "ok") {
153
+ const status = deriveStatusFromResult(result, null);
154
+ const details = status === "LOGIN_REQUIRED"
155
+ ? result.reason
156
+ ? `login required (${result.reason})`
157
+ : "login required"
158
+ : result.reason
159
+ ? `fetch failed (${result.reason})`
160
+ : "fetch failed";
161
+ return [{ agent: "gemini", status, limit: "-", details }];
162
+ }
163
+ const rows = [];
164
+ const seenSuffix = new Set();
165
+ for (const [modelId, usage] of Object.entries(data ?? {})) {
166
+ if (!usage)
167
+ continue;
168
+ const { agentSuffix, limit } = classifyGeminiModelId(modelId);
169
+ if (!agentSuffix)
170
+ continue;
171
+ if (seenSuffix.has(agentSuffix))
172
+ continue;
173
+ seenSuffix.add(agentSuffix);
174
+ const usedPercent = clampPercent(Math.round(usage.usage));
175
+ const status = deriveStatusFromUsedPercent(usedPercent);
176
+ rows.push({
177
+ agent: `gemini/${agentSuffix}`,
178
+ status,
179
+ limit,
180
+ details: `${usedPercent}% used (reset in ${formatResetIn(usage.resetAt, now)})`
181
+ });
182
+ }
183
+ if (rows.length === 0) {
184
+ return [{ agent: "gemini", status: "FETCH_FAILED", limit: "-", details: "no data" }];
185
+ }
186
+ // Stable output ordering: pro then flash (regardless of used%)
187
+ rows.sort((a, b) => {
188
+ const aRank = a.limit === "pro" ? 0 : a.limit === "flash" ? 1 : 2;
189
+ const bRank = b.limit === "pro" ? 0 : b.limit === "flash" ? 1 : 2;
190
+ if (aRank !== bRank)
191
+ return aRank - bRank;
192
+ return a.agent.localeCompare(b.agent);
193
+ });
194
+ return rows;
195
+ }
196
+ export function buildHumanRows(allResults, options) {
197
+ const now = options.now ?? new Date();
198
+ const rows = [];
199
+ for (const agent of options.agents) {
200
+ if (agent === "claude") {
201
+ const row = buildClaudeRow(allResults.claude, now);
202
+ rows.push({ agent: "claude", ...row });
203
+ continue;
204
+ }
205
+ if (agent === "codex") {
206
+ const row = buildCodexRow(allResults.codex, now);
207
+ rows.push({ agent: "codex", ...row });
208
+ continue;
209
+ }
210
+ if (agent === "gemini") {
211
+ rows.push(...buildGeminiRows(allResults.gemini, now));
212
+ continue;
213
+ }
214
+ if (agent === "copilot") {
215
+ const row = buildCopilotRow(allResults.copilot, now);
216
+ rows.push({ agent: "copilot", ...row });
217
+ continue;
218
+ }
219
+ }
220
+ return rows;
221
+ }
222
+ export function formatHumanTable(rows) {
223
+ const headers = ["AGENT", "STATUS", "LIMIT", "DETAILS"];
224
+ const cells = rows.map((r) => [r.agent, r.status, r.limit, r.details]);
225
+ const widths = headers.map((h, i) => {
226
+ let max = h.length;
227
+ for (const row of cells)
228
+ max = Math.max(max, String(row[i]).length);
229
+ return max;
230
+ });
231
+ const pad = (value, width) => value.padEnd(width);
232
+ const lines = [];
233
+ lines.push(headers.map((h, i) => pad(h, widths[i])).join(" "));
234
+ lines.push(widths.map((w) => "-".repeat(w)).join(" "));
235
+ for (const r of rows) {
236
+ const line = pad(r.agent, widths[0]) +
237
+ " " +
238
+ pad(r.status, widths[1]) +
239
+ " " +
240
+ pad(r.limit, widths[2]) +
241
+ " " +
242
+ r.details;
243
+ lines.push(line);
244
+ }
245
+ return lines.join("\n");
246
+ }
247
+ //# sourceMappingURL=human-output.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"human-output.js","sourceRoot":"","sources":["../src/human-output.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,13 +1,13 @@
1
1
  /**
2
2
  * @metyatech/ai-quota
3
3
  *
4
- * Quota / rate-limit fetching SDK for Claude, Gemini, Copilot, Amazon Q, and Codex.
4
+ * Quota / rate-limit fetching SDK for Claude, Gemini, Copilot, and Codex.
5
5
  */
6
6
  import type { AllRateLimits } from "./types.js";
7
7
  /**
8
8
  * List of AI agent identifiers supported by this SDK.
9
9
  */
10
- export declare const SUPPORTED_AGENTS: readonly ["claude", "gemini", "copilot", "amazon-q", "codex"];
10
+ export declare const SUPPORTED_AGENTS: readonly ["claude", "gemini", "copilot", "codex"];
11
11
  /**
12
12
  * Type representing supported agent identifiers.
13
13
  */
@@ -23,7 +23,6 @@ export { fetchClaudeRateLimits } from "./claude.js";
23
23
  export { fetchGeminiRateLimits } from "./gemini.js";
24
24
  export { fetchCopilotRateLimits, parseCopilotUserInfo, parseCopilotQuotaHeader, getCopilotToken } from "./copilot.js";
25
25
  export type { FetchCopilotRateLimitsOptions } from "./copilot.js";
26
- export { fetchAmazonQRateLimits, recordAmazonQUsage, loadAmazonQUsageState, saveAmazonQUsageState, resolveAmazonQUsageStatePath, DEFAULT_AMAZON_Q_MONTHLY_LIMIT } from "./amazon-q.js";
27
26
  export { fetchCodexRateLimits, rateLimitSnapshotToStatus } from "./codex.js";
28
27
  export type { CodexStatus, UsageWindow, UsageWindowKey, FetchCodexRateLimitsOptions } from "./codex.js";
29
28
  /**