@metyatech/ai-quota 0.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.
package/dist/cli.js ADDED
@@ -0,0 +1,378 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * ai-quota CLI
4
+ *
5
+ * Usage:
6
+ * ai-quota [agent] Show quota for all agents, or a specific agent
7
+ * ai-quota --json Output machine-readable JSON
8
+ * ai-quota --help Show help
9
+ * ai-quota --version Show version
10
+ *
11
+ * Agents: claude, gemini, copilot, amazon-q, codex
12
+ */
13
+ import fs from "node:fs";
14
+ import os from "node:os";
15
+ import path from "node:path";
16
+ import { createRequire } from "node:module";
17
+ import { fileURLToPath } from "node:url";
18
+ import { fetchClaudeRateLimits } from "./claude.js";
19
+ import { fetchGeminiRateLimits } from "./gemini.js";
20
+ import { fetchCopilotRateLimits } from "./copilot.js";
21
+ import { fetchAmazonQRateLimits, resolveAmazonQUsageStatePath } from "./amazon-q.js";
22
+ import { fetchCodexRateLimits, rateLimitSnapshotToStatus } from "./codex.js";
23
+ // ---------------------------------------------------------------------------
24
+ // Version
25
+ // ---------------------------------------------------------------------------
26
+ function getVersion() {
27
+ try {
28
+ const require = createRequire(import.meta.url);
29
+ const dir = path.dirname(fileURLToPath(import.meta.url));
30
+ const pkgPath = path.resolve(dir, "..", "package.json");
31
+ const pkg = require(pkgPath);
32
+ return pkg.version ?? "0.0.0";
33
+ }
34
+ catch {
35
+ return "0.0.0";
36
+ }
37
+ }
38
+ // ---------------------------------------------------------------------------
39
+ // Time formatting helpers
40
+ // ---------------------------------------------------------------------------
41
+ function formatResetIn(resetAt) {
42
+ const diffMs = resetAt.getTime() - Date.now();
43
+ if (diffMs <= 0)
44
+ return "already reset";
45
+ const totalMinutes = Math.floor(diffMs / 60000);
46
+ const hours = Math.floor(totalMinutes / 60);
47
+ const minutes = totalMinutes % 60;
48
+ if (hours === 0)
49
+ return `${minutes}m`;
50
+ if (minutes === 0)
51
+ return `${hours}h`;
52
+ return `${hours}h ${minutes}m`;
53
+ }
54
+ // ---------------------------------------------------------------------------
55
+ // Copilot: resolve token from env or gh CLI hosts.yml
56
+ // ---------------------------------------------------------------------------
57
+ function getCopilotToken() {
58
+ if (process.env.GITHUB_TOKEN)
59
+ return process.env.GITHUB_TOKEN;
60
+ const candidates = [
61
+ path.join(os.homedir(), ".config", "gh", "hosts.yml"),
62
+ path.join(os.homedir(), "AppData", "Roaming", "GitHub CLI", "hosts.yml")
63
+ ];
64
+ for (const p of candidates) {
65
+ try {
66
+ if (!fs.existsSync(p))
67
+ continue;
68
+ const content = fs.readFileSync(p, "utf8");
69
+ // Simple line-by-line search for oauth_token under github.com
70
+ const match = content.match(/oauth_token:\s*(\S+)/);
71
+ if (match?.[1])
72
+ return match[1];
73
+ }
74
+ catch {
75
+ // ignore
76
+ }
77
+ }
78
+ return null;
79
+ }
80
+ // ---------------------------------------------------------------------------
81
+ // Per-agent fetchers
82
+ // ---------------------------------------------------------------------------
83
+ async function fetchClaude(verbose) {
84
+ try {
85
+ const data = await fetchClaudeRateLimits(10000);
86
+ if (!data) {
87
+ return {
88
+ status: "no-data",
89
+ display: "no data",
90
+ json: { error: null, data: null }
91
+ };
92
+ }
93
+ // Use the five_hour bucket as primary display metric
94
+ const bucket = data.five_hour ?? data.seven_day;
95
+ if (!bucket) {
96
+ return {
97
+ status: "no-data",
98
+ display: "no data",
99
+ json: { data }
100
+ };
101
+ }
102
+ const usedPercent = Math.round(bucket.utilization);
103
+ const resetAt = new Date(bucket.resets_at);
104
+ const resetIn = formatResetIn(resetAt);
105
+ const display = `${usedPercent}% used (resets in ${resetIn})`;
106
+ if (verbose) {
107
+ process.stderr.write(`[verbose] claude: five_hour=${JSON.stringify(data.five_hour)} seven_day=${JSON.stringify(data.seven_day)}\n`);
108
+ }
109
+ return {
110
+ status: "ok",
111
+ display,
112
+ json: {
113
+ usedPercent,
114
+ resetsAt: resetAt.toISOString(),
115
+ five_hour: data.five_hour,
116
+ seven_day: data.seven_day,
117
+ seven_day_sonnet: data.seven_day_sonnet,
118
+ extra_usage: data.extra_usage
119
+ }
120
+ };
121
+ }
122
+ catch (err) {
123
+ const msg = err instanceof Error ? err.message : String(err);
124
+ return { status: "error", display: `error: ${msg}`, json: { error: msg } };
125
+ }
126
+ }
127
+ async function fetchGemini(verbose) {
128
+ try {
129
+ const data = await fetchGeminiRateLimits();
130
+ if (!data) {
131
+ return { status: "no-data", display: "no data", json: { error: null, data: null } };
132
+ }
133
+ const pro = data["gemini-3-pro-preview"];
134
+ const flash = data["gemini-3-flash-preview"];
135
+ const primary = pro ?? flash;
136
+ if (!primary) {
137
+ return { status: "no-data", display: "no data", json: { data } };
138
+ }
139
+ const usedPercent = Math.round(primary.usage);
140
+ const resetAt = primary.resetAt;
141
+ const resetIn = formatResetIn(resetAt);
142
+ const display = `${usedPercent}% used (resets in ${resetIn})`;
143
+ if (verbose) {
144
+ process.stderr.write(`[verbose] gemini: pro=${JSON.stringify(pro)} flash=${JSON.stringify(flash)}\n`);
145
+ }
146
+ const jsonData = { usedPercent, resetsAt: resetAt.toISOString() };
147
+ if (pro) {
148
+ jsonData["gemini-3-pro-preview"] = {
149
+ usedPercent: Math.round(pro.usage),
150
+ resetsAt: pro.resetAt.toISOString()
151
+ };
152
+ }
153
+ if (flash) {
154
+ jsonData["gemini-3-flash-preview"] = {
155
+ usedPercent: Math.round(flash.usage),
156
+ resetsAt: flash.resetAt.toISOString()
157
+ };
158
+ }
159
+ return { status: "ok", display, json: jsonData };
160
+ }
161
+ catch (err) {
162
+ const msg = err instanceof Error ? err.message : String(err);
163
+ return { status: "error", display: `error: ${msg}`, json: { error: msg } };
164
+ }
165
+ }
166
+ async function fetchCopilot(verbose) {
167
+ try {
168
+ const token = getCopilotToken();
169
+ if (!token) {
170
+ return {
171
+ status: "no-data",
172
+ display: "no data (set GITHUB_TOKEN or sign in with gh CLI)",
173
+ json: { error: null, data: null }
174
+ };
175
+ }
176
+ const data = await fetchCopilotRateLimits({ token, timeoutSeconds: 10 });
177
+ if (!data) {
178
+ return { status: "no-data", display: "no data", json: { error: null, data: null } };
179
+ }
180
+ const usedPercent = Math.round(100 - data.percentRemaining);
181
+ const resetIn = formatResetIn(data.resetAt);
182
+ const display = `${usedPercent}% used (resets in ${resetIn})`;
183
+ if (verbose) {
184
+ process.stderr.write(`[verbose] copilot: percentRemaining=${data.percentRemaining} entitlement=${data.entitlement} resetAt=${data.resetAt.toISOString()}\n`);
185
+ }
186
+ return {
187
+ status: "ok",
188
+ display,
189
+ json: {
190
+ usedPercent,
191
+ resetsAt: data.resetAt.toISOString(),
192
+ percentRemaining: data.percentRemaining,
193
+ entitlement: data.entitlement,
194
+ overageUsed: data.overageUsed,
195
+ overageEnabled: data.overageEnabled
196
+ }
197
+ };
198
+ }
199
+ catch (err) {
200
+ const msg = err instanceof Error ? err.message : String(err);
201
+ return { status: "error", display: `error: ${msg}`, json: { error: msg } };
202
+ }
203
+ }
204
+ async function fetchAmazonQ(verbose) {
205
+ try {
206
+ const statePathEnv = process.env.AMAZON_Q_STATE_PATH;
207
+ const statePath = statePathEnv
208
+ ? statePathEnv
209
+ : resolveAmazonQUsageStatePath(os.homedir());
210
+ const monthlyLimit = 50;
211
+ const snapshot = fetchAmazonQRateLimits(statePath, monthlyLimit);
212
+ const display = `${snapshot.used}/${snapshot.limit} requests used`;
213
+ if (verbose) {
214
+ process.stderr.write(`[verbose] amazon-q: statePath=${statePath} used=${snapshot.used} limit=${snapshot.limit} period=${snapshot.periodKey}\n`);
215
+ }
216
+ return {
217
+ status: "ok",
218
+ display,
219
+ json: {
220
+ used: snapshot.used,
221
+ limit: snapshot.limit,
222
+ percentRemaining: snapshot.percentRemaining,
223
+ resetsAt: snapshot.resetAt.toISOString(),
224
+ periodKey: snapshot.periodKey
225
+ }
226
+ };
227
+ }
228
+ catch (err) {
229
+ const msg = err instanceof Error ? err.message : String(err);
230
+ return { status: "error", display: `error: ${msg}`, json: { error: msg } };
231
+ }
232
+ }
233
+ async function fetchCodex(verbose) {
234
+ try {
235
+ const snapshot = await fetchCodexRateLimits({ timeoutSeconds: 10 });
236
+ if (!snapshot) {
237
+ return { status: "no-data", display: "no data", json: { error: null, data: null } };
238
+ }
239
+ const status = rateLimitSnapshotToStatus(snapshot);
240
+ if (!status || status.windows.length === 0) {
241
+ return { status: "no-data", display: "no data", json: { error: null, data: null } };
242
+ }
243
+ // Use the shortest window (five-hour) as primary display metric
244
+ const win = status.windows.find((w) => w.key === "fiveHour") ?? status.windows[0];
245
+ if (!win) {
246
+ return { status: "no-data", display: "no data", json: { error: null, data: null } };
247
+ }
248
+ const usedPercent = Math.round(100 - win.percentLeft);
249
+ const resetIn = formatResetIn(win.resetAt);
250
+ const display = `${usedPercent}% used (resets in ${resetIn})`;
251
+ if (verbose) {
252
+ process.stderr.write(`[verbose] codex: windows=${JSON.stringify(status.windows)}\n`);
253
+ }
254
+ const jsonData = {
255
+ usedPercent,
256
+ resetsAt: win.resetAt.toISOString()
257
+ };
258
+ for (const w of status.windows) {
259
+ jsonData[w.key] = {
260
+ usedPercent: Math.round(100 - w.percentLeft),
261
+ resetsAt: w.resetAt.toISOString()
262
+ };
263
+ }
264
+ return { status: "ok", display, json: jsonData };
265
+ }
266
+ catch (err) {
267
+ const msg = err instanceof Error ? err.message : String(err);
268
+ return { status: "error", display: `error: ${msg}`, json: { error: msg } };
269
+ }
270
+ }
271
+ // ---------------------------------------------------------------------------
272
+ // All agents registry
273
+ // ---------------------------------------------------------------------------
274
+ const ALL_AGENTS = ["claude", "gemini", "copilot", "amazon-q", "codex"];
275
+ async function runAgent(name, verbose) {
276
+ switch (name) {
277
+ case "claude":
278
+ return fetchClaude(verbose);
279
+ case "gemini":
280
+ return fetchGemini(verbose);
281
+ case "copilot":
282
+ return fetchCopilot(verbose);
283
+ case "amazon-q":
284
+ return fetchAmazonQ(verbose);
285
+ case "codex":
286
+ return fetchCodex(verbose);
287
+ }
288
+ }
289
+ // ---------------------------------------------------------------------------
290
+ // Output helpers
291
+ // ---------------------------------------------------------------------------
292
+ function padName(name) {
293
+ // Align to the longest agent name ("amazon-q") + colon = 9 chars, then 2 spaces
294
+ return (name + ":").padEnd(11);
295
+ }
296
+ // ---------------------------------------------------------------------------
297
+ // Main entry point
298
+ // ---------------------------------------------------------------------------
299
+ async function main() {
300
+ const args = process.argv.slice(2);
301
+ // --help / -h
302
+ if (args.includes("--help") || args.includes("-h")) {
303
+ const version = getVersion();
304
+ process.stdout.write(`ai-quota v${version}\n\n` +
305
+ "Usage:\n" +
306
+ " ai-quota [agent] Show quota for all agents, or a specific agent\n" +
307
+ " ai-quota --json Output machine-readable JSON\n" +
308
+ " ai-quota --quiet Suppress non-error output\n" +
309
+ " ai-quota --verbose Show extra debug info on stderr\n" +
310
+ " ai-quota --help Show this help message\n" +
311
+ " ai-quota --version Show version\n\n" +
312
+ "Agents: claude, gemini, copilot, amazon-q, codex\n\n" +
313
+ "Credentials:\n" +
314
+ " Claude: ~/.claude/.credentials.json\n" +
315
+ " Gemini: ~/.gemini/oauth_creds.json\n" +
316
+ " Copilot: GITHUB_TOKEN env var or gh CLI (~/.config/gh/hosts.yml)\n" +
317
+ " Amazon Q: AMAZON_Q_STATE_PATH env var (defaults to ~/agent-runner/state/)\n" +
318
+ " Codex: ~/.codex/sessions/ or ~/.codex/auth.json\n\n" +
319
+ "Examples:\n" +
320
+ " ai-quota\n" +
321
+ " ai-quota claude\n" +
322
+ " ai-quota --json\n" +
323
+ " ai-quota copilot --json\n");
324
+ process.exit(0);
325
+ }
326
+ // --version / -V
327
+ if (args.includes("--version") || args.includes("-V")) {
328
+ process.stdout.write(`${getVersion()}\n`);
329
+ process.exit(0);
330
+ }
331
+ const jsonMode = args.includes("--json");
332
+ const quiet = args.includes("--quiet");
333
+ const verbose = args.includes("--verbose");
334
+ // Collect positional agent names (everything not a flag)
335
+ const positional = args.filter((a) => !a.startsWith("--") && a !== "-h" && a !== "-V");
336
+ // Validate agent names
337
+ const requested = [];
338
+ for (const a of positional) {
339
+ if (!ALL_AGENTS.includes(a)) {
340
+ process.stderr.write(`ai-quota: unknown agent '${a}'. Valid agents: ${ALL_AGENTS.join(", ")}\n`);
341
+ process.exit(1);
342
+ }
343
+ requested.push(a);
344
+ }
345
+ const agentsToRun = requested.length > 0 ? requested : [...ALL_AGENTS];
346
+ // Run all fetchers in parallel
347
+ const results = await Promise.all(agentsToRun.map(async (name) => ({
348
+ name,
349
+ result: await runAgent(name, verbose)
350
+ })));
351
+ let anyError = false;
352
+ if (jsonMode) {
353
+ const out = {};
354
+ for (const { name, result } of results) {
355
+ out[name] = result.json;
356
+ if (result.status === "error")
357
+ anyError = true;
358
+ }
359
+ if (!quiet) {
360
+ process.stdout.write(JSON.stringify(out, null, 2) + "\n");
361
+ }
362
+ }
363
+ else {
364
+ for (const { name, result } of results) {
365
+ if (result.status === "error")
366
+ anyError = true;
367
+ if (!quiet) {
368
+ process.stdout.write(`${padName(name)} ${result.display}\n`);
369
+ }
370
+ }
371
+ }
372
+ process.exit(anyError ? 1 : 0);
373
+ }
374
+ main().catch((err) => {
375
+ process.stderr.write(`ai-quota: fatal error: ${err instanceof Error ? err.message : String(err)}\n`);
376
+ process.exit(1);
377
+ });
378
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import type { RateLimitSnapshot } from "./types.js";
2
+ export type { RateLimitSnapshot, RateLimitWindow } from "./types.js";
3
+ export type UsageWindowKey = "fiveHour" | "weekly";
4
+ export type UsageWindow = {
5
+ key: UsageWindowKey;
6
+ label: string;
7
+ percentLeft: number;
8
+ resetAt: Date;
9
+ resetText: string;
10
+ };
11
+ export type CodexStatus = {
12
+ windows: UsageWindow[];
13
+ credits: number | null;
14
+ raw: string;
15
+ };
16
+ export type FetchCodexRateLimitsOptions = {
17
+ codexHome?: string;
18
+ timeoutSeconds?: number;
19
+ timingSink?: (phase: string, durationMs: number) => void;
20
+ };
21
+ /**
22
+ * Converts a raw `RateLimitSnapshot` (from JSONL session files or the HTTP
23
+ * API) into a structured `CodexStatus` with labelled usage windows.
24
+ */
25
+ export declare function rateLimitSnapshotToStatus(snapshot: RateLimitSnapshot, now?: Date): CodexStatus | null;
26
+ /**
27
+ * Fetches Codex (ChatGPT) rate limit data.
28
+ *
29
+ * Strategy (in order):
30
+ * 1. Read rate_limits from the most recent JSONL session file in
31
+ * `~/.codex/sessions/YYYY/MM/DD/*.jsonl` (last 7 days).
32
+ * 2. If no session data is found, call the ChatGPT backend API using the
33
+ * access token from `~/.codex/auth.json`.
34
+ *
35
+ * Returns null when no data source is available or all requests fail.
36
+ */
37
+ export declare function fetchCodexRateLimits(options?: FetchCodexRateLimitsOptions): Promise<RateLimitSnapshot | null>;
38
+ //# sourceMappingURL=codex.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex.d.ts","sourceRoot":"","sources":["../src/codex.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAmB,MAAM,YAAY,CAAC;AAErE,YAAY,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAErE,MAAM,MAAM,cAAc,GAAG,UAAU,GAAG,QAAQ,CAAC;AAEnD,MAAM,MAAM,WAAW,GAAG;IACxB,GAAG,EAAE,cAAc,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,IAAI,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG;IACxC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;CAC1D,CAAC;AA4DF;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,iBAAiB,EAC3B,GAAG,GAAE,IAAiB,GACrB,WAAW,GAAG,IAAI,CAwEpB;AAwND;;;;;;;;;;GAUG;AACH,wBAAsB,oBAAoB,CACxC,OAAO,CAAC,EAAE,2BAA2B,GACpC,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CA6BnC"}