quota-axi 0.1.13 → 0.1.15

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/README.md CHANGED
@@ -26,9 +26,10 @@ It is data only: it never routes, recommends, proxies, intercepts, logs in, impo
26
26
  ## Quick Start
27
27
 
28
28
  **macOS + Claude note:** Claude Code keeps its live token in the macOS Keychain.
29
- quota-axi will not read that token unless the user grants permission, so Claude quota reads can stay stale until the user grants access after on-disk credentials expire.
29
+ quota-axi pins that lookup to the same current-user Keychain item Claude Code selects and will not read its value unless the user grants permission, so Claude quota reads can stay stale when no usable on-disk access token is available.
30
30
  Run `quota-axi --allow-keychain-prompt` once and approve Keychain access with "Always Allow".
31
- After a successful Keychain read, future non-interactive quota reads use that existing grant and refresh live Claude data without requiring the flag.
31
+ After a successful Keychain read, future non-interactive quota reads use that profile-and-account-scoped grant and refresh live Claude data without requiring the flag.
32
+ Legacy markers created before account-pinned lookup are not reused, so an upgrade may require this one-time grant again.
32
33
 
33
34
  ```sh
34
35
  $ npx -y quota-axi
@@ -42,32 +43,32 @@ providers[6]{provider,plan,source,status,refreshedAt}:
42
43
  copilot,individual,api,fresh,"2026-03-15T16:42:00.000Z"
43
44
  grok,unknown,web,fresh,"2026-03-15T16:42:00.000Z"
44
45
  kimi,unknown,api,fresh,"2026-03-15T16:42:00.000Z"
45
- windows[15]{provider,id,label,percentRemaining,resetsAt,state}:
46
- claude,five_hour,session,82,"2026-03-15T21:15:00.000Z",fresh
47
- claude,seven_day,week,64,"2026-03-19T15:00:00.000Z",fresh
48
- claude,seven_day_opus,opus week,93,"2026-03-20T09:30:00.000Z",fresh
49
- claude,"model:fable",Fable week,71,"2026-03-20T09:30:00.000Z",fresh
50
- codex,five_hour,session,58,"2026-03-15T20:45:00.000Z",fresh
51
- codex,weekly,week,47,"2026-03-19T09:00:00.000Z",fresh
52
- codex,"model:gpt-5.1-codex:5h",GPT-5.1-Codex session,100,"2026-03-16T01:41:58.000Z",fresh
53
- cursor,included_usage,included usage,72,"2026-04-01T00:00:00.000Z",fresh
54
- cursor,auto_usage,auto usage,91,"2026-04-01T00:00:00.000Z",fresh
55
- cursor,api_usage,API usage,100,"2026-04-01T00:00:00.000Z",fresh
56
- copilot,chat,chat,84,"2026-04-01T00:00:00.000Z",fresh
57
- copilot,premium_interactions,premium interactions,53,"2026-04-01T00:00:00.000Z",fresh
58
- grok,credits,credits,67,"2026-04-01T00:00:00.000Z",fresh
59
- kimi,weekly,week,74,"2026-03-19T09:00:00.000Z",fresh
60
- kimi,five_hour,session,88,"2026-03-15T21:42:00.000Z",fresh
61
- effective[9]{provider,scope,effectivePercentRemaining,boundedBy,limitingWindowIds,unresolvedWindowIds,relationshipStatus}:
62
- claude,all_models,64,"five_hour + seven_day",seven_day,none,known
63
- claude,"model:fable",64,"five_hour + seven_day + model:fable",seven_day,none,known
64
- claude,seven_day_opus,64,"five_hour + seven_day + seven_day_opus",seven_day,none,known
65
- codex,all_models,47,"five_hour + weekly",weekly,none,known
66
- codex,"model:gpt-5.1-codex",47,"five_hour + weekly + model:gpt-5.1-codex:5h",weekly,none,known
67
- cursor,unresolved,unknown,none,unknown,"included_usage + auto_usage + api_usage",unknown
68
- copilot,unresolved,unknown,none,unknown,"chat + premium_interactions",unknown
69
- grok,all_products,67,credits,credits,none,known
70
- kimi,all_models,74,"weekly + five_hour",weekly,none,known
46
+ windows[15]{provider,id,label,percentRemaining,resetsAt,pace,reserve,state}:
47
+ claude,five_hour,session,82,"2026-03-15T20:10:48.000Z",behind,12.4,fresh
48
+ claude,seven_day,week,64,"2026-03-20T17:59:45.600Z",ahead,-8.2,fresh
49
+ claude,seven_day_opus,opus week,93,"2026-03-20T17:29:31.200Z",behind,21.1,fresh
50
+ claude,"model:fable",Fable week,71,"2026-03-20T08:25:12.000Z",behind,4.5,fresh
51
+ codex,five_hour,session,58,"2026-03-15T19:36:54.000Z",on_pace,-0.3,fresh
52
+ codex,weekly,week,47,"2026-03-19T09:54:28.800Z",ahead,-6.1,fresh
53
+ codex,"model:gpt-5.1-codex:5h",GPT-5.1-Codex session,100,"2026-03-15T20:48:00.000Z",behind,18.0,fresh
54
+ cursor,included_usage,included usage,72,"2026-04-01T00:00:00.000Z",unknown,unknown,fresh
55
+ cursor,auto_usage,auto usage,91,"2026-04-01T00:00:00.000Z",unknown,unknown,fresh
56
+ cursor,api_usage,API usage,100,"2026-04-01T00:00:00.000Z",unknown,unknown,fresh
57
+ copilot,chat,chat,84,"2026-04-01T00:00:00.000Z",unknown,unknown,fresh
58
+ copilot,premium_interactions,premium interactions,53,"2026-04-01T00:00:00.000Z",unknown,unknown,fresh
59
+ grok,credits,credits,67,"2026-04-01T00:00:00.000Z",behind,3.6,fresh
60
+ kimi,weekly,week,74,"2026-03-20T12:17:02.400Z",behind,5.2,fresh
61
+ kimi,five_hour,session,88,"2026-03-15T20:45:00.000Z",behind,7.0,fresh
62
+ effective[9]{provider,scope,effectivePercentRemaining,boundedBy,limitingWindowIds,pace,aheadWindows,unknownPace,worstReserve,unresolvedWindowIds,relationshipStatus}:
63
+ claude,all_models,64,"five_hour + seven_day",seven_day,mixed,seven_day,none,-8.2,none,known
64
+ claude,"model:fable",64,"five_hour + seven_day + model:fable",seven_day,mixed,seven_day,none,-8.2,none,known
65
+ claude,seven_day_opus,64,"five_hour + seven_day + seven_day_opus",seven_day,mixed,seven_day,none,-8.2,none,known
66
+ codex,all_models,47,"five_hour + weekly",weekly,ahead,weekly,none,-6.1,none,known
67
+ codex,"model:gpt-5.1-codex",47,"five_hour + weekly + model:gpt-5.1-codex:5h",weekly,mixed,weekly,none,-6.1,none,known
68
+ cursor,unresolved,unknown,none,unknown,unknown,none,none,unknown,"included_usage + auto_usage + api_usage",unknown
69
+ copilot,unresolved,unknown,none,unknown,unknown,none,none,unknown,"chat + premium_interactions",unknown
70
+ grok,all_products,67,credits,credits,behind,none,none,3.6,none,known
71
+ kimi,all_models,74,"weekly + five_hour",weekly,behind,none,none,5.2,none,known
71
72
  help[3]:
72
73
  Run `quota-axi --provider claude --json` for JSON output
73
74
  Run `quota-axi --full` to include account and source-attempt details
@@ -79,8 +80,8 @@ help[3]:
79
80
  ```sh
80
81
  $ quota-axi --provider claude --json
81
82
  {
82
- "generatedAt": "2026-03-15T16:42:03.000Z",
83
- "schemaVersion": 2,
83
+ "generatedAt": "2026-03-15T16:42:00.000Z",
84
+ "schemaVersion": 3,
84
85
  "providers": [
85
86
  {
86
87
  "provider": "claude",
@@ -94,7 +95,20 @@ $ quota-axi --provider claude --json
94
95
  "kind": "session",
95
96
  "percentUsed": 18,
96
97
  "percentRemaining": 82,
97
- "resetsAt": "2026-03-15T21:15:00.000Z"
98
+ "resetsAt": "2026-03-15T20:10:48.000Z",
99
+ "windowSeconds": 18000,
100
+ "pace": {
101
+ "status": "behind",
102
+ "timeRemainingPercent": 69.6,
103
+ "elapsedPercent": 30.4,
104
+ "reservePercentPoints": 12.4,
105
+ "burnMultiple": 0.5921,
106
+ "projectedExhaustedAt": "2026-03-15T23:37:28.000Z",
107
+ "projectionConfidence": "established",
108
+ "projectionBasis": "cycle_average",
109
+ "cycleBasis": "window_seconds",
110
+ "cycleSeconds": 18000
111
+ }
98
112
  },
99
113
  {
100
114
  "id": "seven_day",
@@ -102,7 +116,20 @@ $ quota-axi --provider claude --json
102
116
  "kind": "weekly",
103
117
  "percentUsed": 36,
104
118
  "percentRemaining": 64,
105
- "resetsAt": "2026-03-19T15:00:00.000Z"
119
+ "resetsAt": "2026-03-20T17:59:45.600Z",
120
+ "windowSeconds": 604800,
121
+ "pace": {
122
+ "status": "ahead",
123
+ "timeRemainingPercent": 72.2,
124
+ "elapsedPercent": 27.8,
125
+ "reservePercentPoints": -8.2,
126
+ "burnMultiple": 1.295,
127
+ "projectedExhaustedAt": "2026-03-19T03:43:45.600Z",
128
+ "projectionConfidence": "established",
129
+ "projectionBasis": "cycle_average",
130
+ "cycleBasis": "window_seconds",
131
+ "cycleSeconds": 604800
132
+ }
106
133
  },
107
134
  {
108
135
  "id": "model:fable",
@@ -110,7 +137,20 @@ $ quota-axi --provider claude --json
110
137
  "kind": "model",
111
138
  "percentUsed": 29,
112
139
  "percentRemaining": 71,
113
- "resetsAt": "2026-03-20T09:30:00.000Z"
140
+ "resetsAt": "2026-03-20T08:25:12.000Z",
141
+ "windowSeconds": 604800,
142
+ "pace": {
143
+ "status": "behind",
144
+ "timeRemainingPercent": 66.5,
145
+ "elapsedPercent": 33.5,
146
+ "reservePercentPoints": 4.5,
147
+ "burnMultiple": 0.8657,
148
+ "projectedExhaustedAt": "2026-03-21T10:29:20.275Z",
149
+ "projectionConfidence": "established",
150
+ "projectionBasis": "cycle_average",
151
+ "cycleBasis": "window_seconds",
152
+ "cycleSeconds": 604800
153
+ }
114
154
  }
115
155
  ],
116
156
  "quotaSemantics": {
@@ -122,14 +162,28 @@ $ quota-axi --provider claude --json
122
162
  "status": "known",
123
163
  "effectivePercentRemaining": 64,
124
164
  "boundedBy": ["five_hour", "seven_day"],
125
- "limitingWindowIds": ["seven_day"]
165
+ "limitingWindowIds": ["seven_day"],
166
+ "pace": {
167
+ "status": "mixed",
168
+ "aheadWindowIds": ["seven_day"],
169
+ "behindWindowIds": ["five_hour"],
170
+ "worstReservePercentPoints": -8.2,
171
+ "worstReserveWindowId": "seven_day"
172
+ }
126
173
  },
127
174
  {
128
175
  "scope": "model:fable",
129
176
  "status": "known",
130
177
  "effectivePercentRemaining": 64,
131
178
  "boundedBy": ["five_hour", "seven_day", "model:fable"],
132
- "limitingWindowIds": ["seven_day"]
179
+ "limitingWindowIds": ["seven_day"],
180
+ "pace": {
181
+ "status": "mixed",
182
+ "aheadWindowIds": ["seven_day"],
183
+ "behindWindowIds": ["five_hour", "model:fable"],
184
+ "worstReservePercentPoints": -8.2,
185
+ "worstReserveWindowId": "seven_day"
186
+ }
133
187
  }
134
188
  ]
135
189
  },
@@ -258,7 +312,7 @@ It is generated from `src/skill.ts`; update it with `pnpm run build:skill` and v
258
312
 
259
313
  ## Output Model
260
314
 
261
- `--json` emits `schemaVersion: 2`.
315
+ `--json` emits `schemaVersion: 3`.
262
316
 
263
317
  ### Quota report shape
264
318
 
@@ -287,14 +341,17 @@ Claude `identityStatus` is `verified` only when Anthropic returns an authoritati
287
341
  | `untrustedWindowIds` | Optional identifiers for limits that could not be parsed authoritatively |
288
342
 
289
343
  When stale or unavailable quota is likely fixable by a one-time macOS Keychain grant, `state.reason` is `keychain_access_required`, `state.remedyCommand` is `quota-axi --allow-keychain-prompt`, and JSON includes an agent-directed `help` entry.
290
- Default TOON output includes the same condition in an `advice` block with `provider`, `reason`, and `remedyCommand`, plus the agent-directed help line.
344
+ When Grok's local OIDC session still has a refreshable record but the access token's `expires_at` is past, `state.error` is `Grok access token expired`, `state.reason` is `credentials_expired`, `state.remedyCommand` is `grok`, and JSON includes an agent-directed `help` entry telling the user to open the Grok CLI once so Grok can refresh its local session token. Default JSON exposes that `reason` and `remedyCommand` without requiring `--full`; full output still includes `attempts[].error: credentials_expired`.
345
+ Default TOON output includes the same conditions in an `advice` block with `provider`, `reason`, and `remedyCommand`, plus the agent-directed help line.
346
+
347
+ Claude credential failures without a usable access token preserve the precise `credentials_missing` or `credentials_invalid` error. A usage response with HTTP 401/403 reports `Claude sign-in required`. These definitive failures return no windows and retire the Claude cache instead of masking current authentication state with stale quota.
291
348
 
292
349
  ### Quota windows
293
350
 
294
- | Field set | Fields |
295
- | --------- | ------------------------------------------------------------------- |
296
- | Required | `id`, `label`, `kind` |
297
- | Optional | Percentages, reset fields, `windowSeconds`, and credit-spend fields |
351
+ | Field set | Fields |
352
+ | --------- | ----------------------------------------------------------------------------------------------- |
353
+ | Required | `id`, `label`, `kind` |
354
+ | Optional | Percentages, `startsAt`, reset fields, `windowSeconds`, credit-spend fields, and derived `pace` |
298
355
 
299
356
  Do not interpret a model window's percentage in isolation. `quotaSemantics.effectiveAvailability` reports the effective percentage for each understood scope, the complete `boundedBy` window set used to compute it, and the currently limiting window IDs. `all_models` applies to any model without a more specific scope; a matching `model:*` scope includes both account and model-specific bounds. Grok uses the analogous `all_products` and `product:*` scopes.
300
357
 
@@ -302,6 +359,46 @@ A model-specific `scope` names the model window or the shared model prefix when
302
359
 
303
360
  `quotaSemantics.status` is `known` only when quota-axi understands the relationships needed for the reported scopes. A non-definitive availability entry omits `effectivePercentRemaining`. Unfamiliar vendor windows produce `partial` or `unknown` semantics and are named in `unresolvedWindowIds`; an empty provider report is `unknown` without inventing an unresolved window.
304
361
 
362
+ For every stale provider report, raw windows remain available for diagnostics but effective availability is always `unknown` and omits `effectivePercentRemaining` and `limitingWindowIds`. Window pace is `unknown` with reason `stale`, and each effective pace summary is also `unknown`. Routing agents must not treat a stale raw percentage as current headroom.
363
+
364
+ ### Pace signals
365
+
366
+ Each window may include a derived `pace` object that compares cumulative usage to elapsed cycle time using the response `generatedAt` clock:
367
+
368
+ ```text
369
+ timeRemainingPercent = 100 * (resetsAt - generatedAt) / cycleDuration
370
+ reservePercentPoints = percentRemaining - timeRemainingPercent
371
+ ```
372
+
373
+ | `reservePercentPoints` | Meaning |
374
+ | ---------------------- | ---------------------------------------------------------------------------- |
375
+ | Negative | Usage is **ahead** of the reset clock (burning faster than linear); conserve |
376
+ | Positive | Usage is **behind** the reset clock |
377
+ | Within ±1.0 | `on_pace` deadband for API rounding noise |
378
+
379
+ | Pace field | Meaning |
380
+ | ----------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------- |
381
+ | `status` | `ahead`, `on_pace`, `behind`, or `unknown` |
382
+ | `reason` | Why pace is unknown (`stale`, `missing_usage`, `missing_cycle`, `invalid_cycle`, `future_cycle_start`, `expired_reset`, `unsupported_period`) |
383
+ | `timeRemainingPercent` / `elapsedPercent` | Cycle progress from `generatedAt` |
384
+ | `reservePercentPoints` | Signed residual capacity vs the linear clock |
385
+ | `burnMultiple` | `percentUsed / elapsedPercent` when elapsed > 0 |
386
+ | `projectedExhaustedAt` | Linear cycle-average exhaustion timestamp when defined |
387
+ | `projectionConfidence` | `early` when elapsed < 10% of the cycle; otherwise `established` |
388
+ | `projectionBasis` | Currently always `cycle_average` |
389
+ | `cycleBasis` | `starts_at_resets_at` when both boundaries are trusted; otherwise `window_seconds` with `resetsAt` |
390
+ | `cycleSeconds` | Trusted cycle duration used for the math |
391
+
392
+ Pace is calculated only from trusted cycle evidence:
393
+
394
+ - Prefer provider-reported `startsAt` + `resetsAt` (Grok current period).
395
+ - Otherwise use provider-owned `windowSeconds` with `resetsAt` (Codex durations; Claude fixed 5h/7d; Kimi fixed 5h/weekly).
396
+ - Do not infer monthly, rolling, or unlabeled periods.
397
+
398
+ Default TOON keeps token cost low: window rows expose `pace` status and signed `reserve` only. Full projection evidence is in `--json`. Pace is recomputed on every report from `generatedAt` and is not written to the quota cache.
399
+
400
+ Each `effectiveAvailability` entry also carries a compact `pace` summary over **every** bounding window for that scope (not only the current lowest-remaining limiter): per-status window lists, including `aheadWindowIds` and `unknownWindowIds`, plus `worstReservePercentPoints` / `worstReserveWindowId` (most negative signed reserve among known-pace windows). Different windows keep their own reset horizons; quota-axi does not invent one synthetic reset for a scope. This is factual inspectable data, never a provider/model routing recommendation.
401
+
305
402
  ### Quota enums
306
403
 
307
404
  | Name | Values |
@@ -310,6 +407,10 @@ A model-specific `scope` names the model window or the shared model prefix when
310
407
  | Provider sources | `oauth`, `cli-rpc`, `api`, `web`, `cache`, or `unavailable` |
311
408
  | Current provider adapter sources | `oauth`, `cli-rpc`, `api`, `web`, `cache`, and `unavailable` |
312
409
  | Window kinds | `session`, `weekly`, `monthly`, `model`, `credits`, or `unknown` |
410
+ | Window pace statuses | `ahead`, `on_pace`, `behind`, or `unknown` |
411
+ | Effective pace statuses | `ahead`, `on_pace`, `behind`, `mixed`, or `unknown` |
412
+ | Pace projection confidence | `early` or `established` |
413
+ | Pace cycle basis | `starts_at_resets_at` or `window_seconds` |
313
414
  | Quota relationship statuses | `known`, `partial`, or `unknown` |
314
415
  | Source attempt statuses | `success`, `failed`, or `skipped` |
315
416
 
@@ -319,14 +420,14 @@ Source attempts can include `credentialPresent` when a non-secret probe confirms
319
420
 
320
421
  | Provider | Windows and capabilities |
321
422
  | ---------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
322
- | Claude | Can report `five_hour`, `seven_day`, optional `seven_day_opus`, and optional `extra_usage` windows. |
323
- | Claude scoped `limits` | When the account's usage response includes a scoped `limits` list, quota-axi surfaces every active window it describes instead, including model-scoped ones (e.g. Fable) as a `model:<slug>` window. |
423
+ | Claude | Can report `five_hour`, `seven_day`, optional `seven_day_opus`, and optional `extra_usage` windows. Trusted session/weekly/model windows emit fixed `windowSeconds` (18,000 or 604,800) for pace; `extra_usage` does not invent a monthly duration. |
424
+ | Claude scoped `limits` | When the account's usage response includes a scoped `limits` list, quota-axi surfaces every active window it describes instead, including model-scoped ones (e.g. Fable) as a `model:<slug>` window with the same trusted weekly duration. |
324
425
  | Codex | Identifies exact 18,000-second and 604,800-second periods as `five_hour` and `weekly`, regardless of source slot; periods without a duration retain their positional identity. Additional model- or feature-scoped limits use `model:<id>:5h` / `model:<id>:7d`, and code-review limits use `code_review_five_hour` / `code_review_weekly`. Unfamiliar durations remain honest `<hours>h` windows instead of being classified as known periods. Duplicate derived IDs are preserved with `_2`, `_3`, and later suffixes. Optional credit balance data can also appear. |
325
- | Cursor | Can report `included_usage`, `auto_usage`, `api_usage`, and optional `spend_limit` windows. |
326
- | GitHub Copilot | Can report quota snapshot windows such as `chat`, `completions`, and `premium_interactions`; when the first-party endpoint exposes entitlement but no numeric quota windows, quota-axi reports a fresh provider state with an empty `windows` list rather than inventing percentages. |
327
- | Grok | Reports the shared `credits` window, optional product-scoped `product:<slug>` windows, the current-period reset, and optional prepaid credit balance from the consumer Usage-page operation. |
426
+ | Cursor | Can report `included_usage`, `auto_usage`, `api_usage`, and optional `spend_limit` windows. Monthly labels alone are not trusted cycle evidence, so pace stays `unknown` unless a future provider duration appears. |
427
+ | GitHub Copilot | Can report quota snapshot windows such as `chat`, `completions`, and `premium_interactions`; when the first-party endpoint exposes entitlement but no numeric quota windows, quota-axi reports a fresh provider state with an empty `windows` list rather than inventing percentages. Pace stays `unknown` without trusted cycle boundaries. |
428
+ | Grok | Reports the shared `credits` window, optional product-scoped `product:<slug>` windows, the current-period `startsAt` and reset, and optional prepaid credit balance from the consumer Usage-page operation. Top-level `credits.remaining` is prepaid/on-demand balance, distinct from the shared period `windows` credits percentage used for effective availability. Pace prefers the startsAt/resetsAt pair. |
328
429
  | Grok proto3 zero | For the exact consumer operation only, an omitted usage float is the official proto3 zero when a valid weekly or monthly current period proves the config is present; quota-axi reports `0` used and `100` remaining rather than deriving usage from money. |
329
- | Kimi | Reports the principal `weekly` subscription window plus every valid self-described limit in wire order. Only a limit whose normalized duration is exactly 18,000 seconds is identified as `five_hour`; future limits remain `limit:<index>` unknown windows. |
430
+ | Kimi | Reports the principal `weekly` subscription window (with trusted 604,800s duration) plus every valid self-described limit in wire order. Only a limit whose normalized duration is exactly 18,000 seconds is identified as `five_hour`; future limits remain `limit:<index>` unknown windows. |
330
431
 
331
432
  ### `auth --json` shape
332
433
 
@@ -347,22 +448,26 @@ Auth source entries can include `credentialPresent` when a non-secret probe conf
347
448
 
348
449
  ### Provider credential sources
349
450
 
350
- | Provider | Credential sources read |
351
- | -------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
352
- | Claude | `$CLAUDE_CONFIG_DIR/.credentials.json` or `~/.claude/.credentials.json`; on macOS, the corresponding default or path-hashed Claude Code Keychain value with `--allow-keychain-prompt` or, after a profile-scoped non-secret access marker exists, on plain calls |
353
- | Codex | `$CODEX_HOME/auth.json` or `~/.codex/auth.json` before the read-only CLI fallback; `$QUOTA_AXI_CODEX_BINARY` can pin that fallback to an absolute executable path |
354
- | Cursor | `$CURSOR_STATE_DB` when set or the platform Cursor state database path |
355
- | GitHub Copilot | `$GITHUB_COPILOT_APPS_JSON` when set or the local Copilot apps auth file |
356
- | Grok | `$GROK_AUTH_JSON`, inline `$GROK_AUTH`, `$GROK_AUTH_PATH`, or `$GROK_HOME/auth.json` / `~/.grok/auth.json` |
357
- | Kimi | Pi's `$PI_CODING_AGENT_DIR/auth.json` (default `~/.pi/agent/auth.json`) for a literal `kimi-coding` API key first, then a fresh official Kimi Code CLI access token from `$KIMI_CODE_HOME/credentials/kimi-code.json` (default `$HOME/.kimi-code/credentials/kimi-code.json`) |
451
+ | Provider | Credential sources read |
452
+ | -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
453
+ | Claude | `$CLAUDE_CONFIG_DIR/.credentials.json` or `~/.claude/.credentials.json`; on macOS, the corresponding default or path-hashed Claude Code Keychain value pinned to Claude Code's validated current-user account, with `--allow-keychain-prompt` or, after a profile-and-account-scoped non-secret access marker exists, on plain calls |
454
+ | Codex | `$CODEX_HOME/auth.json` or `~/.codex/auth.json` before the read-only CLI fallback; `$QUOTA_AXI_CODEX_BINARY` can pin that fallback to an absolute executable path |
455
+ | Cursor | `$CURSOR_STATE_DB` when set or the platform Cursor state database path |
456
+ | GitHub Copilot | `$GITHUB_COPILOT_APPS_JSON` when set or the local Copilot apps auth file |
457
+ | Grok | `$GROK_AUTH_JSON`, inline `$GROK_AUTH`, `$GROK_AUTH_PATH`, or `$GROK_HOME/auth.json` / `~/.grok/auth.json` |
458
+ | Kimi | Pi's `$PI_CODING_AGENT_DIR/auth.json` (default `~/.pi/agent/auth.json`) for a literal `kimi-coding` API key first, then a fresh official Kimi Code CLI access token from `$KIMI_CODE_HOME/credentials/kimi-code.json` (default `$HOME/.kimi-code/credentials/kimi-code.json`) |
358
459
 
359
460
  ### Provider notes
360
461
 
361
462
  **Claude**
362
463
 
363
- - quota-axi records the non-secret access marker after any successful Keychain value read.
364
- - When that marker exists, plain calls read the Keychain value again so an already-approved "Always Allow" grant keeps live Claude quota fresh.
365
- - Without the flag or marker, quota-axi may perform a non-secret Keychain item presence check so it only suggests Keychain access when a Claude credential item exists.
464
+ - quota-axi mirrors Claude Code's Keychain account selector: nonempty `USER`, otherwise the operating-system username, validated against Claude Code's safe account pattern with the same `claude-code-user` fallback. Both presence and value reads require that account plus the resolved service. There is no ambiguous service-only fallback.
465
+ - quota-axi records the non-secret access marker after any successful pinned Keychain value read.
466
+ - When that profile-and-account-scoped marker exists, plain calls read the pinned Keychain value again so an already-approved "Always Allow" grant keeps live Claude quota fresh. Legacy service-only markers remain untouched but do not authorize a value read.
467
+ - Without the flag or the current marker, quota-axi may perform a non-secret pinned Keychain item presence check so it only suggests Keychain access when the selected Claude credential item exists.
468
+ - In `--full` output, Claude usage attempts identify `oauth-file` or `keychain` as the credential discovery source. They never include the Keychain account.
469
+ - When an access token exists, local `expiresAt` metadata is advisory. quota-axi sends that token only to Anthropic's existing read-only usage request; success returns fresh quota, while HTTP 401/403 is the definitive authentication result.
470
+ - Missing or invalid credentials without a usable access token and usage HTTP 401/403 bypass and best-effort retire Claude cache. Timeout, network, rate-limit, server, and response-compatibility failures may use only a formerly fresh Claude snapshot less than seven days old. Reset-expired windows are removed; resetless session, monthly, and credit windows expire after five hours, resetless weekly and model windows expire after seven days, and resetless unknown windows are rejected.
366
471
  - After a successful usage read, quota-axi queries Anthropic's first-party OAuth profile endpoint with the same credential. Its authoritative root `account.uuid` is exposed as `account.accountId` only in `--full` output; if that field is absent, `identityStatus` is `unverified` instead of deriving an identity from email, organization data, or cached account metadata.
367
472
 
368
473
  **Codex**
@@ -385,6 +490,7 @@ Auth source entries can include `credentialPresent` when a non-secret probe conf
385
490
 
386
491
  - It selects session-scoped auth instead of API-key entries and sends a read-only gRPC-web request to Grok's consumer `grok_api_v2.GrokBuildBilling.GetGrokCreditsConfig` operation.
387
492
  - Session-scoped Grok auth includes web/session scopes and OIDC records scoped to `auth.x.ai` with `auth_mode` or `authMode` set to `oidc`, including scope keys with `::<client id>` suffixes.
493
+ - The Grok CLI owns OIDC access-token refresh and rewrites `~/.grok/auth.json`; quota-axi only reads the resulting session and never refreshes tokens itself. Expired-session classification and recovery fields are documented under [Provider `state`](#provider-state).
388
494
  - It does not send browser cookies, launch the Grok CLI, refresh credentials, perform OAuth, retain raw response bodies, or derive usage from monetary fields.
389
495
 
390
496
  **Kimi**
@@ -406,17 +512,18 @@ Auth source entries can include `credentialPresent` when a non-secret probe conf
406
512
 
407
513
  ### Cache
408
514
 
409
- | Item | Behavior |
410
- | -------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
411
- | Quota cache | Lives at `~/.cache/quota-axi/quotas.json` or under `$XDG_CACHE_HOME/quota-axi/` when `XDG_CACHE_HOME` is set. |
412
- | Quota cache permissions | Uses `0600` file permissions. |
413
- | Quota cache contents | Stores normalized non-secret snapshots only. |
414
- | Claude Keychain access marker | Lives alongside the quota cache as `claude-keychain-access-granted` for the default profile or with an eight-character path-hash suffix for a `$CLAUDE_CONFIG_DIR` profile; uses `0600` file permissions and contains no credential material. |
415
- | Cached reports | Only fresh provider snapshots with windows are cached. |
416
- | Fresh provider reports with no windows | Clear any cached snapshot for that provider, so entitlement-only reports do not leave stale quota windows behind. |
417
- | Reports and details not cached | Failed providers, stale providers, account identity, and source attempts are not cached. |
418
- | Codex cache identities | Cached Codex windows are accepted only when ID, label, kind, duration, and duplicate suffix order agree; stale snapshots with mismatched identities are rejected. |
419
- | Grok cache provenance | Only snapshots produced by the current `web` consumer operation can be used as Grok stale fallback; legacy `api` billing-proxy snapshots are rejected. |
515
+ | Item | Behavior |
516
+ | -------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
517
+ | Quota cache | Lives at `~/.cache/quota-axi/quotas.json` or under `$XDG_CACHE_HOME/quota-axi/` when `XDG_CACHE_HOME` is set. |
518
+ | Quota cache permissions | Uses `0600` file permissions. |
519
+ | Quota cache contents | Stores normalized non-secret snapshots only. |
520
+ | Claude Keychain access marker | Lives alongside the quota cache as `claude-keychain-access-granted[-<profile-hash>]-account-<account-hash>`; the profile hash is eight hexadecimal characters when applicable and the account hash is sixteen. It uses `0600` file permissions, contains no credential material or raw account name, and legacy service-only markers are ignored rather than deleted. |
521
+ | Cached reports | Only fresh provider snapshots with windows are cached. |
522
+ | Fresh provider reports with no windows | Clear any cached snapshot for that provider, so entitlement-only reports do not leave stale quota windows behind. |
523
+ | Reports and details not cached | Failed providers, stale providers, account identity, and source attempts are not cached. |
524
+ | Claude cache fallback | Definitive missing/invalid credential and HTTP 401/403 failures retire the snapshot. Only transient failures may use a formerly fresh snapshot, with a seven-day provider bound plus reset and resetless-window pruning. |
525
+ | Codex cache identities | Cached Codex windows are accepted only when ID, label, kind, duration, and duplicate suffix order agree; stale snapshots with mismatched identities are rejected. |
526
+ | Grok cache provenance | Only snapshots produced by the current `web` consumer operation can be used as Grok stale fallback; legacy `api` billing-proxy snapshots are rejected. |
420
527
 
421
528
  ## Development
422
529
 
@@ -1,5 +1,8 @@
1
1
  import type { QuotaAxiResponse } from "./types.js";
2
2
  export declare const KEYCHAIN_ACCESS_REASON = "keychain_access_required";
3
3
  export declare const KEYCHAIN_ACCESS_REMEDY_COMMAND = "quota-axi --allow-keychain-prompt";
4
+ export declare const CREDENTIALS_EXPIRED_REASON = "credentials_expired";
5
+ export declare const GROK_TOKEN_REFRESH_REMEDY_COMMAND = "grok";
6
+ export declare const GROK_ACCESS_TOKEN_EXPIRED_ERROR = "Grok access token expired";
4
7
  export declare function annotateQuotaAdvice(response: Omit<QuotaAxiResponse, "schemaVersion">): QuotaAxiResponse;
5
8
  export declare function quotaHelpLines(response: QuotaAxiResponse): string[];
@@ -1,17 +1,18 @@
1
1
  export const KEYCHAIN_ACCESS_REASON = "keychain_access_required";
2
2
  export const KEYCHAIN_ACCESS_REMEDY_COMMAND = "quota-axi --allow-keychain-prompt";
3
+ export const CREDENTIALS_EXPIRED_REASON = "credentials_expired";
4
+ export const GROK_TOKEN_REFRESH_REMEDY_COMMAND = "grok";
5
+ export const GROK_ACCESS_TOKEN_EXPIRED_ERROR = "Grok access token expired";
3
6
  const BLOCKED_CREDENTIAL_ERRORS = new Set([
4
7
  "credentials_expired",
5
8
  "credentials_missing",
6
9
  ]);
7
10
  export function annotateQuotaAdvice(response) {
8
11
  const providers = response.providers.map(annotateProviderAdvice);
9
- const help = providers
10
- .filter(hasKeychainAccessAdvice)
11
- .map(keychainAccessHelpLine);
12
+ const help = providers.flatMap(providerHelpLines);
12
13
  return {
13
14
  generatedAt: response.generatedAt,
14
- schemaVersion: 2,
15
+ schemaVersion: 3,
15
16
  providers,
16
17
  ...(help.length > 0 ? { help } : {}),
17
18
  };
@@ -25,16 +26,27 @@ export function quotaHelpLines(response) {
25
26
  ];
26
27
  }
27
28
  function annotateProviderAdvice(provider) {
28
- if (!needsKeychainAccessAdvice(provider))
29
- return provider;
30
- return {
31
- ...provider,
32
- state: {
33
- ...provider.state,
34
- reason: KEYCHAIN_ACCESS_REASON,
35
- remedyCommand: KEYCHAIN_ACCESS_REMEDY_COMMAND,
36
- },
37
- };
29
+ if (needsKeychainAccessAdvice(provider)) {
30
+ return {
31
+ ...provider,
32
+ state: {
33
+ ...provider.state,
34
+ reason: KEYCHAIN_ACCESS_REASON,
35
+ remedyCommand: KEYCHAIN_ACCESS_REMEDY_COMMAND,
36
+ },
37
+ };
38
+ }
39
+ if (needsGrokTokenRefreshAdvice(provider)) {
40
+ return {
41
+ ...provider,
42
+ state: {
43
+ ...provider.state,
44
+ reason: CREDENTIALS_EXPIRED_REASON,
45
+ remedyCommand: GROK_TOKEN_REFRESH_REMEDY_COMMAND,
46
+ },
47
+ };
48
+ }
49
+ return provider;
38
50
  }
39
51
  function needsKeychainAccessAdvice(provider) {
40
52
  const attempts = provider.attempts ?? [];
@@ -43,6 +55,11 @@ function needsKeychainAccessAdvice(provider) {
43
55
  attempts.some(isBlockedCredentialAttempt) &&
44
56
  attempts.some(isPromptBlockedKeychainAttempt));
45
57
  }
58
+ function needsGrokTokenRefreshAdvice(provider) {
59
+ return (provider.provider === "grok" &&
60
+ provider.state.status !== "fresh" &&
61
+ provider.state.error === GROK_ACCESS_TOKEN_EXPIRED_ERROR);
62
+ }
46
63
  function isBlockedCredentialAttempt(attempt) {
47
64
  return (attempt.source !== "keychain" &&
48
65
  attempt.status === "skipped" &&
@@ -54,11 +71,25 @@ function isPromptBlockedKeychainAttempt(attempt) {
54
71
  attempt.error === "keychain_prompt_required" &&
55
72
  attempt.credentialPresent === true);
56
73
  }
74
+ function providerHelpLines(provider) {
75
+ if (hasKeychainAccessAdvice(provider))
76
+ return [keychainAccessHelpLine(provider)];
77
+ if (hasGrokTokenRefreshAdvice(provider))
78
+ return [grokTokenRefreshHelpLine()];
79
+ return [];
80
+ }
57
81
  function hasKeychainAccessAdvice(provider) {
58
82
  return (provider.state.reason === KEYCHAIN_ACCESS_REASON &&
59
83
  provider.state.remedyCommand === KEYCHAIN_ACCESS_REMEDY_COMMAND);
60
84
  }
85
+ function hasGrokTokenRefreshAdvice(provider) {
86
+ return (provider.state.reason === CREDENTIALS_EXPIRED_REASON &&
87
+ provider.state.remedyCommand === GROK_TOKEN_REFRESH_REMEDY_COMMAND);
88
+ }
61
89
  function keychainAccessHelpLine(provider) {
62
90
  return `Tell your user: run \`${KEYCHAIN_ACCESS_REMEDY_COMMAND}\` once and approve Keychain access ("Always Allow") so quota-axi can read ${provider.provider}'s live quota.`;
63
91
  }
92
+ function grokTokenRefreshHelpLine() {
93
+ return `Tell your user: open the Grok CLI (\`${GROK_TOKEN_REFRESH_REMEDY_COMMAND}\`) once so it can refresh Grok's local session token. quota-axi does not refresh credentials.`;
94
+ }
64
95
  //# sourceMappingURL=advice.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"advice.js","sourceRoot":"","sources":["../../src/advice.ts"],"names":[],"mappings":"AAMA,MAAM,CAAC,MAAM,sBAAsB,GAAG,0BAA0B,CAAC;AACjE,MAAM,CAAC,MAAM,8BAA8B,GACzC,mCAAmC,CAAC;AAEtC,MAAM,yBAAyB,GAAG,IAAI,GAAG,CAAC;IACxC,qBAAqB;IACrB,qBAAqB;CACtB,CAAC,CAAC;AAEH,MAAM,UAAU,mBAAmB,CACjC,QAAiD;IAEjD,MAAM,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;IACjE,MAAM,IAAI,GAAG,SAAS;SACnB,MAAM,CAAC,uBAAuB,CAAC;SAC/B,GAAG,CAAC,sBAAsB,CAAC,CAAC;IAC/B,OAAO;QACL,WAAW,EAAE,QAAQ,CAAC,WAAW;QACjC,aAAa,EAAE,CAAC;QAChB,SAAS;QACT,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACrC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,QAA0B;IACvD,OAAO;QACL,GAAG,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE,CAAC;QACxB,0DAA0D;QAC1D,sEAAsE;QACtE,yFAAyF;KAC1F,CAAC;AACJ,CAAC;AAED,SAAS,sBAAsB,CAAC,QAAuB;IACrD,IAAI,CAAC,yBAAyB,CAAC,QAAQ,CAAC;QAAE,OAAO,QAAQ,CAAC;IAC1D,OAAO;QACL,GAAG,QAAQ;QACX,KAAK,EAAE;YACL,GAAG,QAAQ,CAAC,KAAK;YACjB,MAAM,EAAE,sBAAsB;YAC9B,aAAa,EAAE,8BAA8B;SAC9C;KACF,CAAC;AACJ,CAAC;AAED,SAAS,yBAAyB,CAAC,QAAuB;IACxD,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,IAAI,EAAE,CAAC;IACzC,OAAO,CACL,QAAQ,CAAC,KAAK,CAAC,MAAM,KAAK,OAAO;QACjC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC;QACzD,QAAQ,CAAC,IAAI,CAAC,0BAA0B,CAAC;QACzC,QAAQ,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAC9C,CAAC;AACJ,CAAC;AAED,SAAS,0BAA0B,CAAC,OAAsB;IACxD,OAAO,CACL,OAAO,CAAC,MAAM,KAAK,UAAU;QAC7B,OAAO,CAAC,MAAM,KAAK,SAAS;QAC5B,OAAO,CAAC,OAAO,CAAC,KAAK,IAAI,yBAAyB,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CACvE,CAAC;AACJ,CAAC;AAED,SAAS,8BAA8B,CAAC,OAAsB;IAC5D,OAAO,CACL,OAAO,CAAC,MAAM,KAAK,UAAU;QAC7B,OAAO,CAAC,MAAM,KAAK,SAAS;QAC5B,OAAO,CAAC,KAAK,KAAK,0BAA0B;QAC5C,OAAO,CAAC,iBAAiB,KAAK,IAAI,CACnC,CAAC;AACJ,CAAC;AAED,SAAS,uBAAuB,CAAC,QAAuB;IACtD,OAAO,CACL,QAAQ,CAAC,KAAK,CAAC,MAAM,KAAK,sBAAsB;QAChD,QAAQ,CAAC,KAAK,CAAC,aAAa,KAAK,8BAA8B,CAChE,CAAC;AACJ,CAAC;AAED,SAAS,sBAAsB,CAAC,QAAuB;IACrD,OAAO,yBAAyB,8BAA8B,8EAA8E,QAAQ,CAAC,QAAQ,gBAAgB,CAAC;AAChL,CAAC"}
1
+ {"version":3,"file":"advice.js","sourceRoot":"","sources":["../../src/advice.ts"],"names":[],"mappings":"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"}
package/dist/src/cache.js CHANGED
@@ -220,6 +220,7 @@ function normalizeCachedWindow(raw) {
220
220
  const result = { id, label, kind };
221
221
  assignNumber(result, "percentUsed", data.percentUsed);
222
222
  assignNumber(result, "percentRemaining", data.percentRemaining);
223
+ assignString(result, "startsAt", data.startsAt);
223
224
  assignString(result, "resetsAt", data.resetsAt);
224
225
  assignString(result, "resetText", data.resetText);
225
226
  assignNumber(result, "windowSeconds", data.windowSeconds);
@@ -1 +1 @@
1
- {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/cache.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAQ/E,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,MAAM,gBAAgB,GAAG;IACvB,OAAO;IACP,SAAS;IACT,KAAK;IACL,KAAK;IACL,OAAO;IACP,aAAa;CAC+B,CAAC;AAC/C,MAAM,iBAAiB,GAAG;IACxB,OAAO;IACP,OAAO;IACP,aAAa;IACb,eAAe;IACf,cAAc;IACd,OAAO;CACqC,CAAC;AAC/C,MAAM,YAAY,GAAG;IACnB,SAAS;IACT,QAAQ;IACR,SAAS;IACT,OAAO;IACP,SAAS;IACT,SAAS;CACwC,CAAC;AAEpD,MAAM,UAAU,kBAAkB,CAChC,QAAoB;IAEpB,OAAO,kBAAkB,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;AACzE,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,SAA0B;IAC7D,MAAM,cAAc,GAAG,IAAI,GAAG,CAC5B,SAAS;SACN,MAAM,CACL,CAAC,QAAQ,EAAE,EAAE,CACX,QAAQ,CAAC,KAAK,CAAC,MAAM,KAAK,OAAO,IAAI,QAAQ,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,CACrE;SACA,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CACxC,CAAC;IACF,MAAM,SAAS,GAAG,SAAS;SACxB,GAAG,CAAC,eAAe,CAAC;SACpB,MAAM,CAAC,CAAC,QAAQ,EAA6B,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEtE,MAAM,IAAI,GAAG,aAAa,EAAE,CAAC;IAC7B,MAAM,UAAU,GAAG,IAAI,GAAG,EAA6B,CAAC;IACxD,IAAI,eAAe,GAAG,KAAK,CAAC;IAC5B,KAAK,MAAM,QAAQ,IAAI,kBAAkB,EAAE,EAAE,CAAC;QAC5C,IAAI,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1C,eAAe,GAAG,IAAI,CAAC;YACvB,SAAS;QACX,CAAC;QACD,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC9C,CAAC;IACD,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,eAAe;QAAE,OAAO;IACvD,KAAK,MAAM,QAAQ,IAAI,SAAS;QAAE,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC9E,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAC3C,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CACzB,CAAC,MAAM,CAAC,CAAC,QAAQ,EAA6B,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IAErE,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,QAAoB;IACvD,MAAM,QAAQ,GAAG,kBAAkB,EAAE,CAAC;IACtC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC;QAAE,OAAO;IACjE,cAAc,CACZ,aAAa,EAAE,EACf,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC,CACtD,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,IAAY,EAAE,SAA0B;IAC9D,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAC1B,MAAM,IAAI,GAAG,GAAG,IAAI,IAAI,OAAO,CAAC,GAAG,MAAM,CAAC;IAC1C,aAAa,CACX,IAAI,EACJ,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,aAAa,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EACtG,EAAE,IAAI,EAAE,KAAK,EAAE,CAChB,CAAC;IACF,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACvB,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACvB,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AACzB,CAAC;AAED,SAAS,kBAAkB;IACzB,MAAM,GAAG,GAAG,YAAY,CAAC,aAAa,EAAE,CAAC,CAAC;IAC1C,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;IACjC,IACE,CAAC,OAAO;QACR,OAAO,CAAC,aAAa,KAAK,CAAC;QAC3B,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC;QAEjC,OAAO,EAAE,CAAC;IACZ,OAAO,OAAO,CAAC,SAAS;SACrB,GAAG,CAAC,uBAAuB,CAAC;SAC5B,MAAM,CAAC,CAAC,QAAQ,EAA6B,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;AACxE,CAAC;AAED,SAAS,eAAe,CAAC,QAAuB;IAC9C,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,KAAK,OAAO,IAAI,QAAQ,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC;QACpE,OAAO,SAAS,CAAC;IACnB,OAAO,uBAAuB,CAAC;QAC7B,QAAQ,EAAE,QAAQ,CAAC,QAAQ;QAC3B,KAAK,EAAE,QAAQ,CAAC,KAAK;QACrB,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,IAAI,EAAE,QAAQ,CAAC,IAAI;QACnB,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,KAAK,EAAE;YACL,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,MAAM;YAC7B,KAAK,EAAE,KAAK;YACZ,WAAW,EAAE,QAAQ,CAAC,KAAK,CAAC,WAAW;YACvC,kBAAkB,EAAE,QAAQ,CAAC,KAAK,CAAC,kBAAkB;YACrD,YAAY,EAAE,QAAQ,CAAC,KAAK,CAAC,YAAY;SAC1C;KACF,CAAC,CAAC;AACL,CAAC;AAED,SAAS,uBAAuB,CAAC,GAAY;IAC3C,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;IAC9B,IAAI,CAAC,IAAI;QAAE,OAAO,SAAS,CAAC;IAC5B,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IAC3D,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACtC,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAC3D,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACtC,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,iBAAiB,CAAC,CAAC;IAC9D,MAAM,YAAY,GAAG,gBAAgB,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;IAC3D,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;QACzC,CAAC,CAAC,IAAI,CAAC,OAAO;aACT,GAAG,CAAC,qBAAqB,CAAC;aAC1B,MAAM,CAAC,CAAC,MAAM,EAAyB,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC/D,CAAC,CAAC,EAAE,CAAC;IACP,IACE,CAAC,QAAQ;QACT,CAAC,KAAK;QACN,CAAC,MAAM;QACP,CAAC,KAAK;QACN,CAAC,MAAM;QACP,CAAC,YAAY;QACb,OAAO,CAAC,MAAM,KAAK,CAAC;QACpB,CAAC,QAAQ,KAAK,OAAO,IAAI,+BAA+B,CAAC,OAAO,CAAC,CAAC;QAElE,OAAO,SAAS,CAAC;IAEnB,MAAM,MAAM,GAAkB;QAC5B,QAAQ;QACR,KAAK;QACL,MAAM;QACN,OAAO;QACP,KAAK,EAAE;YACL,MAAM;YACN,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK;YACzC,YAAY;SACb;KACF,CAAC;IACF,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpC,MAAM,WAAW,GAAG,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IACnD,MAAM,kBAAkB,GAAG,gBAAgB,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;IACtE,MAAM,OAAO,GAAG,sBAAsB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACrD,IAAI,IAAI;QAAE,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC;IAC7B,IAAI,WAAW;QAAE,MAAM,CAAC,KAAK,CAAC,WAAW,GAAG,WAAW,CAAC;IACxD,IAAI,kBAAkB;QAAE,MAAM,CAAC,KAAK,CAAC,kBAAkB,GAAG,kBAAkB,CAAC;IAC7E,IAAI,OAAO;QAAE,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC;IACtC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,+BAA+B,CAAC,OAAsB;IAC7D,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IACzC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAG,uBAAuB,CAAC,MAAM,CAAC,CAAC;QAC/C,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QACzB,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QAC5C,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAC1B,IAAI,MAAM,CAAC,EAAE,KAAK,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,KAAK,EAAE,CAAC;YAC7D,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,uBAAuB,CAAC,MAAmB;IAClD,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;IAC/C,IAAI,MAAM,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;QACvC,IAAI,qBAAqB,CAAC,MAAM,EAAE,EAAE,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,CAAC;YACtE,OAAO,EAAE,CAAC;QACZ,IAAI,qBAAqB,CAAC,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC;YAC/D,OAAO,EAAE,CAAC;QACZ,IACE,qBAAqB,CACnB,MAAM,EACN,EAAE,EACF,uBAAuB,EACvB,qBAAqB,EACrB,SAAS,CACV;YACD,qBAAqB,CACnB,MAAM,EACN,EAAE,EACF,oBAAoB,EACpB,kBAAkB,EAClB,QAAQ,CACT;YACD,0BAA0B,CAAC,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,CAAC;YACvD,0BAA0B,CAAC,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC;YAEpD,OAAO,EAAE,CAAC;QACZ,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,MAAM,CAAC,aAAa,KAAK,MAAM,EAAE,CAAC;QACpC,IACE,qBAAqB,CAAC,MAAM,EAAE,EAAE,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,CAAC;YACpE,qBAAqB,CACnB,MAAM,EACN,EAAE,EACF,uBAAuB,EACvB,qBAAqB,EACrB,SAAS,CACV;YACD,0BAA0B,CAAC,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,CAAC;YAEvD,OAAO,EAAE,CAAC;QACZ,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,MAAM,CAAC,aAAa,KAAK,OAAO,EAAE,CAAC;QACrC,IACE,qBAAqB,CAAC,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC;YAC7D,qBAAqB,CACnB,MAAM,EACN,EAAE,EACF,oBAAoB,EACpB,kBAAkB,EAClB,QAAQ,CACT;YACD,0BAA0B,CAAC,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC;YAEpD,OAAO,EAAE,CAAC;QACZ,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,QAAQ,GAAG,sBAAsB,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IAC9D,IACE,qBAAqB,CACnB,MAAM,EACN,EAAE,EACF,UAAU,QAAQ,EAAE,EACpB,GAAG,QAAQ,SAAS,EACpB,SAAS,CACV;QACD,qBAAqB,CACnB,MAAM,EACN,EAAE,EACF,sBAAsB,QAAQ,EAAE,EAChC,GAAG,QAAQ,SAAS,EACpB,SAAS,CACV;QACD,0BAA0B,CACxB,MAAM,EACN,EAAE,EACF,UAAU,QAAQ,EAAE,EACpB,GAAG,QAAQ,SAAS,CACrB;QAED,OAAO,EAAE,CAAC;IACZ,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,qBAAqB,CAC5B,MAAmB,EACnB,QAAgB,EAChB,UAAkB,EAClB,KAAa,EACb,IAAyB;IAEzB,OAAO,CACL,QAAQ,KAAK,UAAU,IAAI,MAAM,CAAC,KAAK,KAAK,KAAK,IAAI,MAAM,CAAC,IAAI,KAAK,IAAI,CAC1E,CAAC;AACJ,CAAC;AAED,SAAS,0BAA0B,CACjC,MAAmB,EACnB,EAAU,EACV,MAAc,EACd,WAAmB;IAEnB,OAAO,CACL,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;QACvB,EAAE,CAAC,QAAQ,CAAC,IAAI,MAAM,EAAE,CAAC;QACzB,EAAE,CAAC,MAAM,GAAG,UAAU,MAAM,EAAE,CAAC,MAAM;QACrC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,WAAW,EAAE,CAAC;QACxC,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC;QAC5C,MAAM,CAAC,IAAI,KAAK,OAAO,CACxB,CAAC;AACJ,CAAC;AAED,SAAS,sBAAsB,CAAC,aAAqB;IACnD,MAAM,KAAK,GAAG,aAAa,GAAG,IAAI,CAAC;IACnC,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;AAC1E,CAAC;AAED,SAAS,qBAAqB,CAAC,GAAY;IACzC,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;IAC9B,IAAI,CAAC,IAAI;QAAE,OAAO,SAAS,CAAC;IAC5B,MAAM,EAAE,GAAG,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAChC,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACtC,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IACnD,IAAI,CAAC,EAAE,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI;QAAE,OAAO,SAAS,CAAC;IAC7C,MAAM,MAAM,GAAgB,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IAChD,YAAY,CAAC,MAAM,EAAE,aAAa,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IACtD,YAAY,CAAC,MAAM,EAAE,kBAAkB,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAChE,YAAY,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IAChD,YAAY,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IAChD,YAAY,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IAClD,YAAY,CAAC,MAAM,EAAE,eAAe,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;IAC1D,YAAY,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IAChD,YAAY,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IAChD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,sBAAsB,CAC7B,GAAY;IAEZ,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;IAC9B,IAAI,CAAC,IAAI;QAAE,OAAO,SAAS,CAAC;IAC5B,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC9C,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC/C,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,SAAS,CAAU,CAAC,CAAC;IAClE,IAAI,SAAS,KAAK,SAAS,IAAI,SAAS,KAAK,SAAS,IAAI,IAAI,KAAK,SAAS;QAC1E,OAAO,SAAS,CAAC;IACnB,OAAO;QACL,SAAS;QACT,SAAS;QACT,IAAI;KACL,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CACnB,MAAS,EACT,GAAM,EACN,KAAc;IAEd,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IAClC,IAAI,MAAM,KAAK,SAAS;QAAE,MAAM,CAAC,GAAG,CAAC,GAAG,MAAc,CAAC;AACzD,CAAC;AAED,SAAS,YAAY,CACnB,MAAS,EACT,GAAM,EACN,KAAc;IAEd,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IAClC,IAAI,MAAM,KAAK,SAAS;QAAE,MAAM,CAAC,GAAG,CAAC,GAAG,MAAc,CAAC;AACzD,CAAC;AAED,SAAS,WAAW,CAAC,KAAc;IACjC,OAAO,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QACvC,CAAC,CAAE,KAAiC;QACpC,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC;AAED,SAAS,WAAW,CAAC,KAAc;IACjC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AAC3E,CAAC;AAED,SAAS,WAAW,CAAC,KAAc;IACjC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QACxD,CAAC,CAAC,KAAK;QACP,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC;AAED,SAAS,YAAY,CAAC,KAAc;IAClC,OAAO,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACxD,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAc;IACtC,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC;QAC5E,CAAC,CAAC,KAAK;QACP,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC;AAED,SAAS,YAAY,CACnB,KAAc,EACd,MAAS;IAET,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QACxD,CAAC,CAAC,KAAK;QACP,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC"}
@@ -33,9 +33,10 @@ export async function authCommand(args, context) {
33
33
  : renderAuthToon(reports, binPath);
34
34
  }
35
35
  async function fetchQuota(providers, options) {
36
- const results = (await Promise.all(providers.map((provider) => PROVIDERS[provider].fetchQuota(options)))).map(withQuotaSemantics);
36
+ const generatedAt = nowIso();
37
+ const results = (await Promise.all(providers.map((provider) => PROVIDERS[provider].fetchQuota(options)))).map((provider) => withQuotaSemantics(provider, generatedAt));
37
38
  return annotateQuotaAdvice({
38
- generatedAt: nowIso(),
39
+ generatedAt,
39
40
  providers: results,
40
41
  });
41
42
  }