oc-codex-multi-auth 6.19.0 → 6.21.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (133) hide show
  1. package/README.md +15 -12
  2. package/config/README.md +8 -8
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +473 -145
  5. package/dist/index.js.map +1 -1
  6. package/dist/lib/account-display.d.ts.map +1 -1
  7. package/dist/lib/account-display.js +3 -1
  8. package/dist/lib/account-display.js.map +1 -1
  9. package/dist/lib/accounts/persistence.d.ts +25 -1
  10. package/dist/lib/accounts/persistence.d.ts.map +1 -1
  11. package/dist/lib/accounts/persistence.js +105 -2
  12. package/dist/lib/accounts/persistence.js.map +1 -1
  13. package/dist/lib/accounts/rate-limits.d.ts +22 -0
  14. package/dist/lib/accounts/rate-limits.d.ts.map +1 -1
  15. package/dist/lib/accounts/rate-limits.js +25 -0
  16. package/dist/lib/accounts/rate-limits.js.map +1 -1
  17. package/dist/lib/accounts/rotation.d.ts +22 -23
  18. package/dist/lib/accounts/rotation.d.ts.map +1 -1
  19. package/dist/lib/accounts/rotation.js +62 -37
  20. package/dist/lib/accounts/rotation.js.map +1 -1
  21. package/dist/lib/accounts/stale-state.d.ts +32 -0
  22. package/dist/lib/accounts/stale-state.d.ts.map +1 -1
  23. package/dist/lib/accounts/stale-state.js +86 -1
  24. package/dist/lib/accounts/stale-state.js.map +1 -1
  25. package/dist/lib/accounts/state.d.ts +6 -0
  26. package/dist/lib/accounts/state.d.ts.map +1 -1
  27. package/dist/lib/accounts/state.js +15 -1
  28. package/dist/lib/accounts/state.js.map +1 -1
  29. package/dist/lib/accounts/warm-recovery.d.ts +8 -0
  30. package/dist/lib/accounts/warm-recovery.d.ts.map +1 -0
  31. package/dist/lib/accounts/warm-recovery.js +70 -0
  32. package/dist/lib/accounts/warm-recovery.js.map +1 -0
  33. package/dist/lib/accounts/warm-request.d.ts +2 -0
  34. package/dist/lib/accounts/warm-request.d.ts.map +1 -1
  35. package/dist/lib/accounts/warm-request.js +4 -2
  36. package/dist/lib/accounts/warm-request.js.map +1 -1
  37. package/dist/lib/accounts.d.ts +1 -1
  38. package/dist/lib/accounts.d.ts.map +1 -1
  39. package/dist/lib/accounts.js +2 -2
  40. package/dist/lib/accounts.js.map +1 -1
  41. package/dist/lib/auth/login-runner.d.ts +3 -0
  42. package/dist/lib/auth/login-runner.d.ts.map +1 -1
  43. package/dist/lib/auth/login-runner.js +35 -0
  44. package/dist/lib/auth/login-runner.js.map +1 -1
  45. package/dist/lib/circuit-breaker.d.ts +5 -0
  46. package/dist/lib/circuit-breaker.d.ts.map +1 -1
  47. package/dist/lib/circuit-breaker.js +23 -6
  48. package/dist/lib/circuit-breaker.js.map +1 -1
  49. package/dist/lib/codex-reset.d.ts +7 -1
  50. package/dist/lib/codex-reset.d.ts.map +1 -1
  51. package/dist/lib/codex-reset.js +9 -2
  52. package/dist/lib/codex-reset.js.map +1 -1
  53. package/dist/lib/codex-usage.d.ts +16 -6
  54. package/dist/lib/codex-usage.d.ts.map +1 -1
  55. package/dist/lib/codex-usage.js +68 -23
  56. package/dist/lib/codex-usage.js.map +1 -1
  57. package/dist/lib/config.d.ts +2 -1
  58. package/dist/lib/config.d.ts.map +1 -1
  59. package/dist/lib/config.js +38 -14
  60. package/dist/lib/config.js.map +1 -1
  61. package/dist/lib/parallel-probe.d.ts.map +1 -1
  62. package/dist/lib/parallel-probe.js +5 -2
  63. package/dist/lib/parallel-probe.js.map +1 -1
  64. package/dist/lib/quota-notifications.d.ts.map +1 -1
  65. package/dist/lib/quota-notifications.js +10 -1
  66. package/dist/lib/quota-notifications.js.map +1 -1
  67. package/dist/lib/request/fetch-helpers.d.ts +24 -0
  68. package/dist/lib/request/fetch-helpers.d.ts.map +1 -1
  69. package/dist/lib/request/fetch-helpers.js +88 -38
  70. package/dist/lib/request/fetch-helpers.js.map +1 -1
  71. package/dist/lib/request/response-handler.d.ts.map +1 -1
  72. package/dist/lib/request/response-handler.js +85 -43
  73. package/dist/lib/request/response-handler.js.map +1 -1
  74. package/dist/lib/rotation.d.ts +1 -1
  75. package/dist/lib/schemas.d.ts +9 -0
  76. package/dist/lib/schemas.d.ts.map +1 -1
  77. package/dist/lib/schemas.js +3 -0
  78. package/dist/lib/schemas.js.map +1 -1
  79. package/dist/lib/storage/flagged.d.ts.map +1 -1
  80. package/dist/lib/storage/flagged.js +5 -0
  81. package/dist/lib/storage/flagged.js.map +1 -1
  82. package/dist/lib/storage/load-save.d.ts +1 -0
  83. package/dist/lib/storage/load-save.d.ts.map +1 -1
  84. package/dist/lib/storage/load-save.js +11 -0
  85. package/dist/lib/storage/load-save.js.map +1 -1
  86. package/dist/lib/storage/migrations.d.ts +21 -0
  87. package/dist/lib/storage/migrations.d.ts.map +1 -1
  88. package/dist/lib/storage/migrations.js.map +1 -1
  89. package/dist/lib/storage/normalize.d.ts.map +1 -1
  90. package/dist/lib/storage/normalize.js +93 -1
  91. package/dist/lib/storage/normalize.js.map +1 -1
  92. package/dist/lib/storage/state.d.ts +1 -0
  93. package/dist/lib/storage/state.d.ts.map +1 -1
  94. package/dist/lib/storage/state.js +12 -0
  95. package/dist/lib/storage/state.js.map +1 -1
  96. package/dist/lib/tools/codex-doctor.d.ts.map +1 -1
  97. package/dist/lib/tools/codex-doctor.js +8 -66
  98. package/dist/lib/tools/codex-doctor.js.map +1 -1
  99. package/dist/lib/tools/codex-health.d.ts.map +1 -1
  100. package/dist/lib/tools/codex-health.js +7 -1
  101. package/dist/lib/tools/codex-health.js.map +1 -1
  102. package/dist/lib/tools/codex-limits.d.ts.map +1 -1
  103. package/dist/lib/tools/codex-limits.js +13 -1
  104. package/dist/lib/tools/codex-limits.js.map +1 -1
  105. package/dist/lib/tools/codex-list.d.ts.map +1 -1
  106. package/dist/lib/tools/codex-list.js +14 -1
  107. package/dist/lib/tools/codex-list.js.map +1 -1
  108. package/dist/lib/tools/codex-reset.d.ts.map +1 -1
  109. package/dist/lib/tools/codex-reset.js +40 -1
  110. package/dist/lib/tools/codex-reset.js.map +1 -1
  111. package/dist/lib/tools/codex-status.d.ts.map +1 -1
  112. package/dist/lib/tools/codex-status.js +6 -1
  113. package/dist/lib/tools/codex-status.js.map +1 -1
  114. package/dist/lib/tools/codex-warm.d.ts +2 -1
  115. package/dist/lib/tools/codex-warm.d.ts.map +1 -1
  116. package/dist/lib/tools/codex-warm.js +48 -5
  117. package/dist/lib/tools/codex-warm.js.map +1 -1
  118. package/dist/lib/tools/doctor-repair.d.ts +10 -0
  119. package/dist/lib/tools/doctor-repair.d.ts.map +1 -0
  120. package/dist/lib/tools/doctor-repair.js +86 -0
  121. package/dist/lib/tools/doctor-repair.js.map +1 -0
  122. package/dist/lib/tools/index.d.ts +4 -1
  123. package/dist/lib/tools/index.d.ts.map +1 -1
  124. package/dist/lib/tools/index.js.map +1 -1
  125. package/dist/lib/tui-quota-cache.d.ts.map +1 -1
  126. package/dist/lib/tui-quota-cache.js +3 -1
  127. package/dist/lib/tui-quota-cache.js.map +1 -1
  128. package/dist/tui.d.ts +4 -1
  129. package/dist/tui.d.ts.map +1 -1
  130. package/dist/tui.js +24 -14
  131. package/dist/tui.js.map +1 -1
  132. package/package.json +1 -1
  133. package/scripts/install-oc-codex-multi-auth-core.js +168 -11
@@ -10,7 +10,7 @@ import { getHealthTracker, getTokenTracker, selectHybridAccount, } from "../rota
10
10
  import { matchesModelPoolAccountKey } from "./pool-identity.js";
11
11
  import { MAX_QUOTA_RESET_HORIZON_MS } from "../quota-windows.js";
12
12
  import { nowMs } from "../utils.js";
13
- import { clearExpiredRateLimits, getQuotaKey, isRateLimitedForFamily, } from "./rate-limits.js";
13
+ import { clearExpiredQuotaExhaustion, clearExpiredRateLimits, getQuotaKey, isQuotaExhausted, isRateLimitedForFamily, } from "./rate-limits.js";
14
14
  export class AccountRotation {
15
15
  state;
16
16
  constructor(state) {
@@ -32,6 +32,9 @@ export class AccountRotation {
32
32
  if (account.enabled === false)
33
33
  return false;
34
34
  clearExpiredRateLimits(account);
35
+ clearExpiredQuotaExhaustion(account);
36
+ if (isQuotaExhausted(account))
37
+ return false;
35
38
  if (isRateLimitedForFamily(account, family, model))
36
39
  return false;
37
40
  if (this.state.isAccountCoolingDown(account))
@@ -103,16 +106,25 @@ export class AccountRotation {
103
106
  * Health/token/freshness-weighted selection. The historical default.
104
107
  *
105
108
  * When at least one account is selectable this returns the best-scoring one.
106
- * When NONE is — every account disabled, rate-limited or cooling down —
107
- * `selectHybridAccount` deliberately falls back to the least-recently-used
108
- * account instead of returning null, because retrying a blocked account
109
- * beats refusing to send anything (a single-account pool has nowhere to fail
110
- * over to, and a persisted block can outlive the limit that caused it).
109
+ * When NONE is — every account disabled, rate-limited, quota-exhausted or
110
+ * cooling down — `selectHybridAccount` deliberately falls back to the
111
+ * least-recently-used account instead of returning null, because retrying a
112
+ * blocked account beats refusing to send anything (a single-account pool has
113
+ * nowhere to fail over to, and a persisted block can outlive the limit that
114
+ * caused it).
111
115
  *
112
116
  * So a returned account is NOT a promise that it is selectable. Callers that
113
117
  * need that guarantee must consult `getSelectionExplainability`, which is
114
118
  * what `codex-doctor` does. {@link getCurrentOrNextForFamilySticky} and
115
119
  * {@link getCurrentOrNextForFamily} return null in the same situation.
120
+ *
121
+ * The request path overrides this last-resort behavior: when the fallback
122
+ * account is marked ineligible in the selection explainability, the request
123
+ * loop discards it instead of sending it upstream, so an all-blocked pool
124
+ * waits out (or fails on) the block rather than retrying it — which is also
125
+ * what allows model fallback to degrade the model when every account is
126
+ * blocked. The last-resort retry still applies to callers that do not
127
+ * re-check eligibility (for example `codex-doctor` probing).
116
128
  */
117
129
  getCurrentOrNextForFamilyHybrid(family, model, options, preferredAccountIds, strictPreferredPool = false, excludedIndices) {
118
130
  const count = this.state.accounts.length;
@@ -316,27 +328,17 @@ export class AccountRotation {
316
328
  * Block an account until a quota window the backend reported as fully spent
317
329
  * resets (issue #218).
318
330
  *
319
- * Differs from {@link markRateLimitedWithReason} in taking an ABSOLUTE reset
320
- * stamp, so a week-long weekly-quota block is never rebuilt from a capped or
321
- * backed-off retry delay. Like every writer it goes through
322
- * {@link extendRateLimitReset}, so it neither shortens an existing block nor
323
- * can be shortened by a later one.
324
- *
325
- * The block rides on the same persisted `rateLimitResetTimes` map as server
326
- * 429s, so it survives restarts and is shared with other processes through
327
- * the accounts file, and it expires on its own via `clearExpiredRateLimits`.
328
- *
329
- * Because that write is monotonic and persisted, it is also unforgiving: a
330
- * reset stamp further out than any real window would strand the account for
331
- * as long as it claims, with nothing in the product able to walk it back. The
332
- * upper bound below is the same guard `parseQuotaResetAtMs` applies to the
333
- * headers, repeated here because this is the method that makes a block
334
- * permanent — the lower bound on the next line has always been checked for
335
- * the same reason.
331
+ * Primary/secondary subscription windows are account-wide, irrespective of
332
+ * the request's family/model. Keep their absolute reset monotonically in
333
+ * `quotaExhaustedUntil`, persisted separately from transient server 429s and
334
+ * expired by `clearExpiredQuotaExhaustion`. Legacy family/model arguments
335
+ * remain accepted, but cannot narrow the subscription block's scope.
336
+ * Reject implausible timestamps using the parser's horizon guard so a bad
337
+ * header cannot strand an account indefinitely.
336
338
  *
337
339
  * @returns true when a new (or longer) block was written.
338
340
  */
339
- markQuotaExhausted(account, resetAtMs, family, model) {
341
+ markQuotaExhausted(account, resetAtMs, _family, _model) {
340
342
  if (!Number.isFinite(resetAtMs))
341
343
  return false;
342
344
  const resetAt = Math.floor(resetAtMs);
@@ -345,14 +347,18 @@ export class AccountRotation {
345
347
  return false;
346
348
  if (resetAt - now > MAX_QUOTA_RESET_HORIZON_MS)
347
349
  return false;
348
- let changed = false;
349
- for (const key of this.getBlockedQuotaKeys(family, model)) {
350
- if (this.extendRateLimitReset(account, key, resetAt))
351
- changed = true;
350
+ const existing = account.quotaExhaustedUntil;
351
+ if (typeof existing === "number" && Number.isFinite(existing) && existing >= resetAt) {
352
+ return false;
352
353
  }
353
- if (changed)
354
- account.lastRateLimitReason = "quota";
355
- return changed;
354
+ account.quotaExhaustedUntil = resetAt;
355
+ // Provenance for the cross-process merge: a stamp whose write time is
356
+ // not newer than a doctor-clear tombstone must not be resurrected by a
357
+ // stale-snapshot save. Every authoritative write re-dates the stamp.
358
+ account.quotaExhaustedStampAt = now;
359
+ delete account.quotaExhaustedClearedAt;
360
+ account.lastRateLimitReason = "quota";
361
+ return true;
356
362
  }
357
363
  markAccountCoolingDown(account, cooldownMs, reason) {
358
364
  const ms = Math.max(0, Math.floor(cooldownMs));
@@ -388,24 +394,40 @@ export class AccountRotation {
388
394
  return 0;
389
395
  if (enabledAccounts.length === 0)
390
396
  return 0;
391
- const waitTimes = [];
397
+ // Per-account semantics: an account is unavailable until its LAST active
398
+ // block clears (max over its own blocks), and the pool recovers when the
399
+ // FIRST account becomes available (min across accounts). Flattening
400
+ // every block into one list and taking the global min underestimates:
401
+ // a legacy all-family weekly stamp (6d) plus a newer quota stamp (2h)
402
+ // on the same account used to promise a 2h wait while the account
403
+ // stayed blocked for 6 days, sending the wait loop back to sleep in a
404
+ // cycle until the longer block elapsed.
405
+ const accountWaits = [];
392
406
  const baseKey = getQuotaKey(family);
393
407
  const modelKey = model ? getQuotaKey(family, model) : null;
394
408
  const tokenQuotaKey = model ? `${family}:${model}` : family;
395
409
  const tokenTracker = getTokenTracker();
396
410
  for (const account of enabledAccounts) {
411
+ const blocks = [];
397
412
  const baseResetAt = account.rateLimitResetTimes[baseKey];
398
413
  if (typeof baseResetAt === "number") {
399
- waitTimes.push(Math.max(0, baseResetAt - now));
414
+ blocks.push(Math.max(0, baseResetAt - now));
400
415
  }
401
416
  if (modelKey) {
402
417
  const modelResetAt = account.rateLimitResetTimes[modelKey];
403
418
  if (typeof modelResetAt === "number") {
404
- waitTimes.push(Math.max(0, modelResetAt - now));
419
+ blocks.push(Math.max(0, modelResetAt - now));
405
420
  }
406
421
  }
407
422
  if (typeof account.coolingDownUntil === "number") {
408
- waitTimes.push(Math.max(0, account.coolingDownUntil - now));
423
+ blocks.push(Math.max(0, account.coolingDownUntil - now));
424
+ }
425
+ // An account whose shared subscription quota is spent is blocked
426
+ // account-wide until the stamp resets; surface that wait so a
427
+ // quota-exhausted-only pool waits instead of returning 0 (503).
428
+ if (typeof account.quotaExhaustedUntil === "number" &&
429
+ account.quotaExhaustedUntil > now) {
430
+ blocks.push(account.quotaExhaustedUntil - now);
409
431
  }
410
432
  // An account blocked only by a depleted local token bucket becomes
411
433
  // available again after refill; include that wait so a fully
@@ -413,11 +435,14 @@ export class AccountRotation {
413
435
  if (account.enabled !== false) {
414
436
  const tokenWait = tokenTracker.msUntilToken(account.index, tokenQuotaKey);
415
437
  if (tokenWait > 0 && Number.isFinite(tokenWait)) {
416
- waitTimes.push(tokenWait);
438
+ blocks.push(tokenWait);
417
439
  }
418
440
  }
441
+ if (blocks.length > 0) {
442
+ accountWaits.push(Math.max(...blocks));
443
+ }
419
444
  }
420
- return waitTimes.length > 0 ? Math.min(...waitTimes) : 0;
445
+ return accountWaits.length > 0 ? Math.min(...accountWaits) : 0;
421
446
  }
422
447
  }
423
448
  //# sourceMappingURL=rotation.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"rotation.js","sourceRoot":"","sources":["../../../lib/accounts/rotation.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EACN,gBAAgB,EAChB,eAAe,EACf,mBAAmB,GAGnB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AAEjE,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EACN,sBAAsB,EACtB,WAAW,EACX,sBAAsB,GAEtB,MAAM,kBAAkB,CAAC;AAG1B,MAAM,OAAO,eAAe;IACE;IAA7B,YAA6B,KAAmB;QAAnB,UAAK,GAAL,KAAK,CAAc;IAAG,CAAC;IAEpD;;;;;;;;;;;OAWG;IACK,YAAY,CACnB,OAAuB,EACvB,MAAmB,EACnB,KAAqB;QAErB,IAAI,OAAO,CAAC,OAAO,KAAK,KAAK;YAAE,OAAO,KAAK,CAAC;QAC5C,sBAAsB,CAAC,OAAO,CAAC,CAAC;QAChC,IAAI,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QACjE,IAAI,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,OAAO,CAAC;YAAE,OAAO,KAAK,CAAC;QAC3D,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;QACvD,OAAO,eAAe,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC5D,CAAC;IAEO,6BAA6B,CACpC,UAAyC,EACzC,MAAmB,EACnB,KAAqB,EACrB,mBAAmB,GAAG,KAAK,EAC3B,eAAqC;QAErC,IAAI,CAAC,UAAU,EAAE,MAAM;YAAE,OAAO,IAAI,CAAC;QACrC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ;aACjC,MAAM,CACN,CAAC,OAAO,EAAE,EAAE,CACX,OAAO;YACP,UAAU,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,0BAA0B,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YAClE,CAAC,eAAe,EAAE,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC;YACpC,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,CAC1C;aACA,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAClC,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC;YACxB,CAAC,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC;YAClB,CAAC,CAAC,mBAAmB;gBACpB,CAAC,CAAC,IAAI,GAAG,EAAU;gBACnB,CAAC,CAAC,IAAI,CAAC;IACV,CAAC;IAEO,iBAAiB,CACxB,OAAuB,EACvB,gBAA4C;QAE5C,OAAO,gBAAgB,KAAK,IAAI,IAAI,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACzE,CAAC;IAED,yBAAyB,CACxB,MAAmB,EACnB,KAAqB,EACrB,mBAAuC,EACvC,mBAAmB,GAAG,KAAK,EAC3B,eAAqC;QAErC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;QACzC,IAAI,KAAK,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAC7B,MAAM,gBAAgB,GAAG,IAAI,CAAC,6BAA6B,CAC1D,mBAAmB,EACnB,MAAM,EACN,KAAK,EACL,mBAAmB,EACnB,eAAe,CACf,CAAC;QAEF,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QAEjD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;YAChC,MAAM,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;YACjC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YACzC,IAAI,CAAC,OAAO;gBAAE,SAAS;YACvB,IAAI,eAAe,EAAE,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC;gBAAE,SAAS;YAClD,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,gBAAgB,CAAC;gBAAE,SAAS;YACjE,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC;gBAAE,SAAS;YAEzD,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;YACtD,IAAI,CAAC,KAAK,CAAC,2BAA2B,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC;YACrD,OAAO,CAAC,QAAQ,GAAG,KAAK,EAAE,CAAC;YAC3B,OAAO,OAAO,CAAC;QAChB,CAAC;QAED,OAAO,IAAI,CAAC;IACb,CAAC;IAED,gBAAgB,CAAC,MAAmB,EAAE,KAAqB;QAC1D,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;QACzC,IAAI,KAAK,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAE7B,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QAEjD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;YAChC,MAAM,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;YACjC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YACzC,IAAI,CAAC,OAAO;gBAAE,SAAS;YACvB,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC;gBAAE,SAAS;YAEzD,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;YACtD,OAAO,CAAC,QAAQ,GAAG,KAAK,EAAE,CAAC;YAC3B,OAAO,OAAO,CAAC;QAChB,CAAC;QAED,OAAO,IAAI,CAAC;IACb,CAAC;IAED;;;;;;;;;;;;;;OAcG;IACH,+BAA+B,CAC9B,MAAmB,EACnB,KAAqB,EACrB,OAAgC,EAChC,mBAAuC,EACvC,mBAAmB,GAAG,KAAK,EAC3B,eAAqC;QAErC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;QACzC,IAAI,KAAK,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAC7B,MAAM,gBAAgB,GAAG,IAAI,CAAC,6BAA6B,CAC1D,mBAAmB,EACnB,MAAM,EACN,KAAK,EACL,mBAAmB,EACnB,eAAe,CACf,CAAC;QAEF,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,2BAA2B,CAAC,MAAM,CAAC,CAAC;QACpE,IAAI,YAAY,IAAI,CAAC,IAAI,YAAY,GAAG,KAAK,EAAE,CAAC;YAC/C,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;YACzD,IAAI,cAAc,EAAE,CAAC;gBACpB,IAAI,eAAe,EAAE,GAAG,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;oBAChD,oCAAoC;gBACrC,CAAC;qBAAM,IAAI,cAAc,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;oBAC7C,oCAAoC;gBACrC,CAAC;qBAAM,IACN,IAAI,CAAC,iBAAiB,CAAC,cAAc,EAAE,gBAAgB,CAAC;oBACxD,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,MAAM,EAAE,KAAK,CAAC,EAC/C,CAAC;oBACF,cAAc,CAAC,QAAQ,GAAG,KAAK,EAAE,CAAC;oBAClC,OAAO,cAAc,CAAC;gBACvB,CAAC;YACF,CAAC;QACF,CAAC;QAED,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;QACvD,MAAM,aAAa,GAAG,gBAAgB,EAAE,CAAC;QACzC,MAAM,YAAY,GAAG,eAAe,EAAE,CAAC;QAEvC,MAAM,mBAAmB,GAAyB,IAAI,CAAC,KAAK,CAAC,QAAQ;aACnE,GAAG,CAAC,CAAC,OAAO,EAA6B,EAAE;YAC3C,IAAI,CAAC,OAAO;gBAAE,OAAO,IAAI,CAAC;YAC1B,IAAI,OAAO,CAAC,OAAO,KAAK,KAAK;gBAAE,OAAO,IAAI,CAAC;YAC3C,IAAI,eAAe,EAAE,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC;gBAAE,OAAO,IAAI,CAAC;YACrD,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,gBAAgB,CAAC;gBAAE,OAAO,IAAI,CAAC;YACpE,OAAO;gBACN,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,WAAW,EAAE,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC;gBACtD,QAAQ,EAAE,OAAO,CAAC,QAAQ;aAC1B,CAAC;QACH,CAAC,CAAC;aACD,MAAM,CAAC,CAAC,CAAC,EAA2B,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;QAErD,MAAM,QAAQ,GAAG,mBAAmB,CACnC,mBAAmB,EACnB,aAAa,EACb,YAAY,EACZ,QAAQ,EACR,EAAE,EACF,OAAO,CACP,CAAC;QACF,IAAI,CAAC,QAAQ;YAAE,OAAO,IAAI,CAAC;QAE3B,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACpD,IAAI,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC;QAE1B,IAAI,CAAC,KAAK,CAAC,2BAA2B,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC;QAC/D,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;QAChE,OAAO,CAAC,QAAQ,GAAG,KAAK,EAAE,CAAC;QAC3B,OAAO,OAAO,CAAC;IAChB,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACH,+BAA+B,CAC9B,MAAmB,EACnB,KAAqB,EACrB,mBAAuC,EACvC,mBAAmB,GAAG,KAAK,EAC3B,eAAqC;QAErC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;QACzC,IAAI,KAAK,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAC7B,MAAM,gBAAgB,GAAG,IAAI,CAAC,6BAA6B,CAC1D,mBAAmB,EACnB,MAAM,EACN,KAAK,EACL,mBAAmB,EACnB,eAAe,CACf,CAAC;QAEF,wEAAwE;QACxE,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,2BAA2B,CAAC,MAAM,CAAC,CAAC;QACpE,IAAI,YAAY,IAAI,CAAC,IAAI,YAAY,GAAG,KAAK,EAAE,CAAC;YAC/C,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;YACzD,IACC,cAAc;gBACd,CAAC,eAAe,EAAE,GAAG,CAAC,cAAc,CAAC,KAAK,CAAC;gBAC3C,IAAI,CAAC,iBAAiB,CAAC,cAAc,EAAE,gBAAgB,CAAC;gBACxD,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,MAAM,EAAE,KAAK,CAAC,EAC/C,CAAC;gBACF,cAAc,CAAC,QAAQ,GAAG,KAAK,EAAE,CAAC;gBAClC,OAAO,cAAc,CAAC;YACvB,CAAC;QACF,CAAC;QAED,0EAA0E;QAC1E,yCAAyC;QACzC,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC;YACtC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YACzC,IAAI,CAAC,OAAO;gBAAE,SAAS;YACvB,IAAI,eAAe,EAAE,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC;gBAAE,SAAS;YAClD,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,gBAAgB,CAAC;gBAAE,SAAS;YACjE,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC;gBAAE,SAAS;YAEzD,IAAI,CAAC,KAAK,CAAC,2BAA2B,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC;YACrD,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;YACtD,OAAO,CAAC,QAAQ,GAAG,KAAK,EAAE,CAAC;YAC3B,OAAO,OAAO,CAAC;QAChB,CAAC;QAED,OAAO,IAAI,CAAC;IACb,CAAC;IAED,aAAa,CACZ,OAAuB,EACvB,MAAmB,EACnB,KAAqB;QAErB,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;QACvD,gBAAgB,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC3D,CAAC;IAED,eAAe,CACd,OAAuB,EACvB,MAAmB,EACnB,KAAqB;QAErB,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;QACvD,gBAAgB,EAAE,CAAC,eAAe,CAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAC5D,eAAe,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAClD,CAAC;IAED,aAAa,CACZ,OAAuB,EACvB,MAAmB,EACnB,KAAqB;QAErB,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;QACvD,gBAAgB,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC3D,CAAC;IAED,YAAY,CACX,OAAuB,EACvB,MAAmB,EACnB,KAAqB;QAErB,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;QACvD,OAAO,eAAe,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC9D,CAAC;IAED;;;;OAIG;IACH,WAAW,CACV,OAAuB,EACvB,MAAmB,EACnB,KAAqB;QAErB,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;QACvD,OAAO,eAAe,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC/D,CAAC;IAED,eAAe,CACd,OAAuB,EACvB,YAAoB,EACpB,MAAmB,EACnB,KAAqB;QAErB,IAAI,CAAC,yBAAyB,CAAC,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;IACjF,CAAC;IAED;;;OAGG;IACK,mBAAmB,CAC1B,MAAmB,EACnB,KAAqB;QAErB,MAAM,IAAI,GAAa,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;QAC7C,IAAI,KAAK;YAAE,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;QACjD,OAAO,IAAI,CAAC;IACb,CAAC;IAED;;;;;;;;;;;OAWG;IACK,oBAAoB,CAC3B,OAAuB,EACvB,GAAW,EACX,OAAe;QAEf,MAAM,QAAQ,GAAG,OAAO,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;QAClD,IACC,OAAO,QAAQ,KAAK,QAAQ;YAC5B,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC;YACzB,QAAQ,IAAI,OAAO,EAClB,CAAC;YACF,OAAO,KAAK,CAAC;QACd,CAAC;QACD,OAAO,CAAC,mBAAmB,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC;QAC3C,OAAO,IAAI,CAAC;IACb,CAAC;IAED,yBAAyB,CACxB,OAAuB,EACvB,YAAoB,EACpB,MAAmB,EACnB,MAAuB,EACvB,KAAqB;QAErB,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC;QACtD,MAAM,IAAI,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAErD,IAAI,OAAO,KAAK,CAAC,EAAE,CAAC;YACnB,uEAAuE;YACvE,qEAAqE;YACrE,wEAAwE;YACxE,oEAAoE;YACpE,gEAAgE;YAChE,iEAAiE;YACjE,wCAAwC;YACxC,KAAK,MAAM,GAAG,IAAI,IAAI;gBAAE,OAAO,OAAO,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;QACjE,CAAC;aAAM,CAAC;YACP,MAAM,OAAO,GAAG,KAAK,EAAE,GAAG,OAAO,CAAC;YAClC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;gBACxB,IAAI,CAAC,oBAAoB,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;YAClD,CAAC;QACF,CAAC;QAED,uEAAuE;QACvE,sEAAsE;QACtE,OAAO,CAAC,mBAAmB,GAAG,MAAM,CAAC;IACtC,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACH,kBAAkB,CACjB,OAAuB,EACvB,SAAiB,EACjB,MAAmB,EACnB,KAAqB;QAErB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC;YAAE,OAAO,KAAK,CAAC;QAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACtC,MAAM,GAAG,GAAG,KAAK,EAAE,CAAC;QACpB,IAAI,OAAO,IAAI,GAAG;YAAE,OAAO,KAAK,CAAC;QACjC,IAAI,OAAO,GAAG,GAAG,GAAG,0BAA0B;YAAE,OAAO,KAAK,CAAC;QAE7D,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC;YAC3D,IAAI,IAAI,CAAC,oBAAoB,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC;gBAAE,OAAO,GAAG,IAAI,CAAC;QACtE,CAAC;QAED,IAAI,OAAO;YAAE,OAAO,CAAC,mBAAmB,GAAG,OAAO,CAAC;QACnD,OAAO,OAAO,CAAC;IAChB,CAAC;IAED,sBAAsB,CACrB,OAAuB,EACvB,UAAkB,EAClB,MAAsB;QAEtB,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;QAC/C,OAAO,CAAC,gBAAgB,GAAG,KAAK,EAAE,GAAG,EAAE,CAAC;QACxC,OAAO,CAAC,cAAc,GAAG,MAAM,CAAC;IACjC,CAAC;IAED;;;OAGG;IACH,uCAAuC,CACtC,YAAoB,EACpB,UAAkB,EAClB,MAAsB;QAEtB,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CACzC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,YAAY,KAAK,YAAY,CAClD,CAAC;QACF,KAAK,MAAM,OAAO,IAAI,OAAO,EAAE,CAAC;YAC/B,IAAI,CAAC,sBAAsB,CAAC,OAAO,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;QAC1D,CAAC;QACD,OAAO,OAAO,CAAC,MAAM,CAAC;IACvB,CAAC;IAED,uBAAuB,CACtB,MAAmB,EACnB,KAAqB,EACrB,UAA8B;QAE9B,MAAM,GAAG,GAAG,KAAK,EAAE,CAAC;QACpB,oEAAoE;QACpE,sEAAsE;QACtE,8DAA8D;QAC9D,2EAA2E;QAC3E,uEAAuE;QACvE,yEAAyE;QACzE,wEAAwE;QACxE,MAAM,UAAU,GAAG,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;QAC1D,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CACjD,CAAC,OAAO,EAAE,EAAE,CACX,OAAO,CAAC,OAAO,KAAK,KAAK;YACzB,CAAC,UAAU,KAAK,IAAI;gBACnB,UAAU,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,0BAA0B,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,CACrE,CAAC;QACF,MAAM,SAAS,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CACpD,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,CACzC,CAAC;QACF,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,CAAC,CAAC;QACnC,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,CAAC,CAAC;QAE3C,MAAM,SAAS,GAAa,EAAE,CAAC;QAC/B,MAAM,OAAO,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;QACpC,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC3D,MAAM,aAAa,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;QAC5D,MAAM,YAAY,GAAG,eAAe,EAAE,CAAC;QAEvC,KAAK,MAAM,OAAO,IAAI,eAAe,EAAE,CAAC;YACvC,MAAM,WAAW,GAAG,OAAO,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;YACzD,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE,CAAC;gBACrC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,GAAG,GAAG,CAAC,CAAC,CAAC;YAChD,CAAC;YAED,IAAI,QAAQ,EAAE,CAAC;gBACd,MAAM,YAAY,GAAG,OAAO,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC;gBAC3D,IAAI,OAAO,YAAY,KAAK,QAAQ,EAAE,CAAC;oBACtC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,YAAY,GAAG,GAAG,CAAC,CAAC,CAAC;gBACjD,CAAC;YACF,CAAC;YAED,IAAI,OAAO,OAAO,CAAC,gBAAgB,KAAK,QAAQ,EAAE,CAAC;gBAClD,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,gBAAgB,GAAG,GAAG,CAAC,CAAC,CAAC;YAC7D,CAAC;YAED,mEAAmE;YACnE,6DAA6D;YAC7D,qEAAqE;YACrE,IAAI,OAAO,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;gBAC/B,MAAM,SAAS,GAAG,YAAY,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;gBAC1E,IAAI,SAAS,GAAG,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;oBACjD,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBAC3B,CAAC;YACF,CAAC;QACF,CAAC;QAED,OAAO,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1D,CAAC;CACD"}
1
+ {"version":3,"file":"rotation.js","sourceRoot":"","sources":["../../../lib/accounts/rotation.ts"],"names":[],"mappings":"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"}
@@ -29,12 +29,17 @@ export interface StaleStateAccount {
29
29
  coolingDownUntil?: number;
30
30
  cooldownReason?: string;
31
31
  rateLimitResetTimes?: Record<string, number | undefined>;
32
+ quotaExhaustedUntil?: number;
33
+ quotaExhaustedStampAt?: number;
34
+ quotaExhaustedClearedAt?: number;
32
35
  }
33
36
  export interface ClearedStaleState {
34
37
  /** True when an active cooldown window was cleared. */
35
38
  clearedCooldown: boolean;
36
39
  /** Number of rate-limit reset entries removed. */
37
40
  clearedRateLimitKeys: number;
41
+ /** True when an active account-wide quota-exhaustion stamp was cleared. */
42
+ clearedQuotaExhaustion: boolean;
38
43
  }
39
44
  /**
40
45
  * Clear stale health state from an account that has just been proven healthy
@@ -50,11 +55,14 @@ export interface ClearedStaleState {
50
55
  * @returns what was cleared, so the caller can report it.
51
56
  */
52
57
  export declare function clearRefreshedAccountStaleState(account: StaleStateAccount): ClearedStaleState;
58
+ export declare function clearUnchangedRecoveryState(account: StaleStateAccount, observed: StaleStateAccount): StaleStateAccount | undefined;
53
59
  export interface StaleStateRepairSummary {
54
60
  /** Accounts that had an active cooldown cleared. */
55
61
  cooldownsCleared: number;
56
62
  /** Total rate-limit reset entries removed across all accounts. */
57
63
  rateLimitKeysCleared: number;
64
+ /** Accounts that had an active quota-exhaustion stamp cleared. */
65
+ quotaExhaustionsCleared: number;
58
66
  }
59
67
  /**
60
68
  * Apply {@link clearRefreshedAccountStaleState} across the given accounts and
@@ -110,6 +118,7 @@ export interface StaleStateScanAccount {
110
118
  coolingDownUntil?: number;
111
119
  cooldownReason?: string;
112
120
  rateLimitResetTimes?: Record<string, number | undefined>;
121
+ quotaExhaustedUntil?: number;
113
122
  }
114
123
  /**
115
124
  * Identify enabled accounts that are currently blocked ONLY by a future-dated
@@ -117,6 +126,14 @@ export interface StaleStateScanAccount {
117
126
  * issue #171 that `codex-doctor --fix` can recover (a successful token refresh
118
127
  * proves the credential is alive, so the block is stale).
119
128
  *
129
+ * A future-dated `quotaExhaustedUntil` is deliberately NOT flagged here: unlike
130
+ * the legacy blanket `rateLimitResetTimes` stamps, quota exhaustion is written
131
+ * only by authoritative sources (the usage poller and quota-429 response
132
+ * headers with horizon guards), so a future stamp is real, not stale #171
133
+ * state. Quota-blocked accounts are surfaced separately through
134
+ * {@link findQuotaExhaustedAccounts} so diagnostics do not tell a user with a
135
+ * genuine week-long block that the block is stale.
136
+ *
120
137
  * This is read-only (it mutates nothing) so both `codex-health` and the
121
138
  * non-`--fix` `codex-doctor` path can surface the finding and point the user at
122
139
  * the repair. Expired cooldowns / rate-limits are ignored because the normal
@@ -125,6 +142,21 @@ export interface StaleStateScanAccount {
125
142
  * @returns the 0-based indexes of accounts blocked by recoverable stale state.
126
143
  */
127
144
  export declare function findStaleRecoverableAccounts(accounts: StaleStateScanAccount[], now?: number): number[];
145
+ /**
146
+ * Identify enabled accounts carrying an active (future-dated) account-wide
147
+ * quota-exhaustion stamp. These blocks are authoritative, not stale #171
148
+ * state — they are written only by the usage poller or a quota 429 response
149
+ * and re-establish themselves after being cleared — so diagnostics must label
150
+ * them as quota exhaustion rather than "recoverable stale state".
151
+ *
152
+ * Read-only: mutates nothing. `codex-doctor --fix` still clears these stamps
153
+ * after a successful token verification (an explicit user action), which is
154
+ * why they are worth surfacing, but the next quota 429 or usage poll simply
155
+ * re-stamps the account.
156
+ *
157
+ * @returns the 0-based indexes of enabled accounts blocked by quota exhaustion.
158
+ */
159
+ export declare function findQuotaExhaustedAccounts(accounts: StaleStateScanAccount[], now?: number): number[];
128
160
  /**
129
161
  * Subset of a stored account used for the absorbed-credential diagnostic.
130
162
  */
@@ -1 +1 @@
1
- {"version":3,"file":"stale-state.d.ts","sourceRoot":"","sources":["../../../lib/accounts/stale-state.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAKH;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IACjC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,mBAAmB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;CACzD;AAED,MAAM,WAAW,iBAAiB;IACjC,uDAAuD;IACvD,eAAe,EAAE,OAAO,CAAC;IACzB,kDAAkD;IAClD,oBAAoB,EAAE,MAAM,CAAC;CAC7B;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,+BAA+B,CAC9C,OAAO,EAAE,iBAAiB,GACxB,iBAAiB,CAsBnB;AAED,MAAM,WAAW,uBAAuB;IACvC,oDAAoD;IACpD,gBAAgB,EAAE,MAAM,CAAC;IACzB,kEAAkE;IAClE,oBAAoB,EAAE,MAAM,CAAC;CAC7B;AAED;;;;GAIG;AACH,wBAAgB,gCAAgC,CAC/C,QAAQ,EAAE,iBAAiB,EAAE,GAC3B,uBAAuB,CASzB;AAED;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACpC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,iCAAiC,CAChD,QAAQ,EAAE,oBAAoB,EAAE,GAC9B,MAAM,EAAE,CAgCV;AAED,MAAM,WAAW,mCAAmC;IACnD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;;GAKG;AACH,wBAAgB,wCAAwC,CACvD,QAAQ,EAAE,mCAAmC,EAAE,GAC7C,MAAM,EAAE,EAAE,CA8BZ;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACrC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,mBAAmB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;CACzD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,4BAA4B,CAC3C,QAAQ,EAAE,qBAAqB,EAAE,EACjC,GAAG,GAAE,MAAgB,GACnB,MAAM,EAAE,CAyBV;AAED;;GAEG;AACH,MAAM,WAAW,0BAA0B;IAC1C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,uCAAuC,CACtD,QAAQ,EAAE,0BAA0B,EAAE,EACtC,GAAG,GAAE,MAAgB,GACnB,MAAM,EAAE,CAeV"}
1
+ {"version":3,"file":"stale-state.d.ts","sourceRoot":"","sources":["../../../lib/accounts/stale-state.ts"],"names":[],"mappings":"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"}
@@ -42,6 +42,20 @@ export function clearRefreshedAccountStaleState(account) {
42
42
  delete account.coolingDownUntil;
43
43
  delete account.cooldownReason;
44
44
  }
45
+ const hadActiveQuotaExhaustion = typeof account.quotaExhaustedUntil === "number" && account.quotaExhaustedUntil > now;
46
+ if (account.quotaExhaustedUntil !== undefined) {
47
+ delete account.quotaExhaustedUntil;
48
+ delete account.quotaExhaustedStampAt;
49
+ // Tombstone for the cross-process merge: another opencode process can
50
+ // still hold the cleared stamp in memory, and its next saveToDisk would
51
+ // resurrect the block (the #218 monotonic merge only ever adopts
52
+ // longer stamps, never drops its own). Dating the clear lets the merge
53
+ // distinguish "stale snapshot" (stamp written before the clear) from
54
+ // "new authoritative evidence" (stamp written after, which wins).
55
+ if (hadActiveQuotaExhaustion) {
56
+ account.quotaExhaustedClearedAt = now;
57
+ }
58
+ }
45
59
  let clearedRateLimitKeys = 0;
46
60
  if (account.rateLimitResetTimes) {
47
61
  clearedRateLimitKeys = Object.keys(account.rateLimitResetTimes).length;
@@ -52,8 +66,39 @@ export function clearRefreshedAccountStaleState(account) {
52
66
  return {
53
67
  clearedCooldown: hadActiveCooldown,
54
68
  clearedRateLimitKeys,
69
+ clearedQuotaExhaustion: hadActiveQuotaExhaustion,
55
70
  };
56
71
  }
72
+ export function clearUnchangedRecoveryState(account, observed) {
73
+ const cleared = {};
74
+ for (const [key, value] of Object.entries(observed.rateLimitResetTimes ?? {})) {
75
+ if (value === undefined || account.rateLimitResetTimes?.[key] !== value)
76
+ continue;
77
+ cleared.rateLimitResetTimes ??= {};
78
+ cleared.rateLimitResetTimes[key] = value;
79
+ delete account.rateLimitResetTimes[key];
80
+ }
81
+ if ((observed.coolingDownUntil !== undefined || observed.cooldownReason !== undefined) &&
82
+ account.coolingDownUntil === observed.coolingDownUntil && account.cooldownReason === observed.cooldownReason) {
83
+ cleared.coolingDownUntil = observed.coolingDownUntil;
84
+ cleared.cooldownReason = observed.cooldownReason;
85
+ delete account.coolingDownUntil;
86
+ delete account.cooldownReason;
87
+ }
88
+ if (observed.quotaExhaustedUntil !== undefined &&
89
+ account.quotaExhaustedUntil === observed.quotaExhaustedUntil &&
90
+ account.quotaExhaustedStampAt === observed.quotaExhaustedStampAt) {
91
+ cleared.quotaExhaustedUntil = observed.quotaExhaustedUntil;
92
+ cleared.quotaExhaustedStampAt = observed.quotaExhaustedStampAt;
93
+ const quota = { quotaExhaustedUntil: account.quotaExhaustedUntil,
94
+ quotaExhaustedStampAt: account.quotaExhaustedStampAt, quotaExhaustedClearedAt: account.quotaExhaustedClearedAt };
95
+ clearRefreshedAccountStaleState(quota);
96
+ delete account.quotaExhaustedUntil;
97
+ delete account.quotaExhaustedStampAt;
98
+ account.quotaExhaustedClearedAt = quota.quotaExhaustedClearedAt;
99
+ }
100
+ return Object.keys(cleared).length > 0 ? cleared : undefined;
101
+ }
57
102
  /**
58
103
  * Apply {@link clearRefreshedAccountStaleState} across the given accounts and
59
104
  * return an aggregate summary. Only call this for accounts whose refresh
@@ -62,13 +107,16 @@ export function clearRefreshedAccountStaleState(account) {
62
107
  export function clearRefreshedAccountsStaleState(accounts) {
63
108
  let cooldownsCleared = 0;
64
109
  let rateLimitKeysCleared = 0;
110
+ let quotaExhaustionsCleared = 0;
65
111
  for (const account of accounts) {
66
112
  const cleared = clearRefreshedAccountStaleState(account);
67
113
  if (cleared.clearedCooldown)
68
114
  cooldownsCleared += 1;
69
115
  rateLimitKeysCleared += cleared.clearedRateLimitKeys;
116
+ if (cleared.clearedQuotaExhaustion)
117
+ quotaExhaustionsCleared += 1;
70
118
  }
71
- return { cooldownsCleared, rateLimitKeysCleared };
119
+ return { cooldownsCleared, rateLimitKeysCleared, quotaExhaustionsCleared };
72
120
  }
73
121
  /**
74
122
  * Detect disabled `token`-source duplicates that shadow an enabled,
@@ -164,6 +212,14 @@ export function findConflictingBusinessMemberCredentials(accounts) {
164
212
  * issue #171 that `codex-doctor --fix` can recover (a successful token refresh
165
213
  * proves the credential is alive, so the block is stale).
166
214
  *
215
+ * A future-dated `quotaExhaustedUntil` is deliberately NOT flagged here: unlike
216
+ * the legacy blanket `rateLimitResetTimes` stamps, quota exhaustion is written
217
+ * only by authoritative sources (the usage poller and quota-429 response
218
+ * headers with horizon guards), so a future stamp is real, not stale #171
219
+ * state. Quota-blocked accounts are surfaced separately through
220
+ * {@link findQuotaExhaustedAccounts} so diagnostics do not tell a user with a
221
+ * genuine week-long block that the block is stale.
222
+ *
167
223
  * This is read-only (it mutates nothing) so both `codex-health` and the
168
224
  * non-`--fix` `codex-doctor` path can surface the finding and point the user at
169
225
  * the repair. Expired cooldowns / rate-limits are ignored because the normal
@@ -195,6 +251,35 @@ export function findStaleRecoverableAccounts(accounts, now = nowMs()) {
195
251
  }
196
252
  return blocked;
197
253
  }
254
+ /**
255
+ * Identify enabled accounts carrying an active (future-dated) account-wide
256
+ * quota-exhaustion stamp. These blocks are authoritative, not stale #171
257
+ * state — they are written only by the usage poller or a quota 429 response
258
+ * and re-establish themselves after being cleared — so diagnostics must label
259
+ * them as quota exhaustion rather than "recoverable stale state".
260
+ *
261
+ * Read-only: mutates nothing. `codex-doctor --fix` still clears these stamps
262
+ * after a successful token verification (an explicit user action), which is
263
+ * why they are worth surfacing, but the next quota 429 or usage poll simply
264
+ * re-stamps the account.
265
+ *
266
+ * @returns the 0-based indexes of enabled accounts blocked by quota exhaustion.
267
+ */
268
+ export function findQuotaExhaustedAccounts(accounts, now = nowMs()) {
269
+ const blocked = [];
270
+ for (let i = 0; i < accounts.length; i += 1) {
271
+ const account = accounts[i];
272
+ if (!account)
273
+ continue;
274
+ if (account.enabled === false)
275
+ continue;
276
+ if (typeof account.quotaExhaustedUntil === "number" &&
277
+ account.quotaExhaustedUntil > now) {
278
+ blocked.push(i);
279
+ }
280
+ }
281
+ return blocked;
282
+ }
198
283
  /**
199
284
  * Identify accounts that are DISABLED yet carry a fresh (unexpired) access
200
285
  * token — the fingerprint of a user-disabled account that absorbed a newer
@@ -1 +1 @@
1
- {"version":3,"file":"stale-state.js","sourceRoot":"","sources":["../../../lib/accounts/stale-state.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAoB9D;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,+BAA+B,CAC9C,OAA0B;IAE1B,MAAM,GAAG,GAAG,KAAK,EAAE,CAAC;IAEpB,MAAM,iBAAiB,GACtB,OAAO,OAAO,CAAC,gBAAgB,KAAK,QAAQ,IAAI,OAAO,CAAC,gBAAgB,GAAG,GAAG,CAAC;IAChF,IAAI,OAAO,CAAC,gBAAgB,KAAK,SAAS,IAAI,OAAO,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;QACpF,OAAO,OAAO,CAAC,gBAAgB,CAAC;QAChC,OAAO,OAAO,CAAC,cAAc,CAAC;IAC/B,CAAC;IAED,IAAI,oBAAoB,GAAG,CAAC,CAAC;IAC7B,IAAI,OAAO,CAAC,mBAAmB,EAAE,CAAC;QACjC,oBAAoB,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,MAAM,CAAC;QACvE,IAAI,oBAAoB,GAAG,CAAC,EAAE,CAAC;YAC9B,OAAO,CAAC,mBAAmB,GAAG,EAAE,CAAC;QAClC,CAAC;IACF,CAAC;IAED,OAAO;QACN,eAAe,EAAE,iBAAiB;QAClC,oBAAoB;KACpB,CAAC;AACH,CAAC;AASD;;;;GAIG;AACH,MAAM,UAAU,gCAAgC,CAC/C,QAA6B;IAE7B,IAAI,gBAAgB,GAAG,CAAC,CAAC;IACzB,IAAI,oBAAoB,GAAG,CAAC,CAAC;IAC7B,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAChC,MAAM,OAAO,GAAG,+BAA+B,CAAC,OAAO,CAAC,CAAC;QACzD,IAAI,OAAO,CAAC,eAAe;YAAE,gBAAgB,IAAI,CAAC,CAAC;QACnD,oBAAoB,IAAI,OAAO,CAAC,oBAAoB,CAAC;IACtD,CAAC;IACD,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,CAAC;AACnD,CAAC;AAaD;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,iCAAiC,CAChD,QAAgC;IAEhC,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAU,CAAC;IAC3C,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAChC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAClD,IAAI,CAAC,KAAK;YAAE,SAAS;QACrB,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,KAAK,KAAK,CAAC;QAC5C,MAAM,WAAW,GAChB,OAAO,CAAC,eAAe,KAAK,KAAK;YACjC,CAAC,OAAO,OAAO,CAAC,cAAc,KAAK,QAAQ,IAAI,OAAO,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC1F,IAAI,SAAS,IAAI,WAAW,EAAE,CAAC;YAC9B,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC;IACF,CAAC;IAED,IAAI,gBAAgB,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAE3C,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7C,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC5B,IAAI,CAAC,OAAO;YAAE,SAAS;QACvB,IAAI,OAAO,CAAC,OAAO,KAAK,KAAK;YAAE,SAAS;QACxC,IAAI,OAAO,CAAC,eAAe,KAAK,OAAO;YAAE,SAAS;QAClD,MAAM,MAAM,GACX,OAAO,OAAO,CAAC,cAAc,KAAK,QAAQ,IAAI,OAAO,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;QACxF,IAAI,MAAM;YAAE,SAAS;QACrB,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAClD,IAAI,CAAC,KAAK;YAAE,SAAS;QACrB,IAAI,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YACjC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;IACF,CAAC;IACD,OAAO,UAAU,CAAC;AACnB,CAAC;AAUD;;;;;GAKG;AACH,MAAM,UAAU,wCAAwC,CACvD,QAA+C;IAE/C,MAAM,MAAM,GAAG,IAAI,GAAG,EAAoB,CAAC;IAC3C,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACzD,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;QAChC,IAAI,CAAC,OAAO;YAAE,SAAS;QACvB,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC;QAC5C,MAAM,aAAa,GAClB,OAAO,CAAC,aAAa,EAAE,IAAI,EAAE,IAAI,oBAAoB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAC5E,IAAI,CAAC,SAAS,IAAI,CAAC,aAAa;YAAE,SAAS;QAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC;QACvD,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC9B,IAAI,KAAK;YAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;;YACxB,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAC/B,CAAC;IAED,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE;QAC9C,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,KAAK,CAAC;QACrC,0EAA0E;QAC1E,6EAA6E;QAC7E,2EAA2E;QAC3E,2EAA2E;QAC3E,yCAAyC;QACzC,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,CAClC,CAAC,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,cAAc,EAAE,IAAI,EAAE,IAAI,EAAE,CACxD,CAAC;QACF,MAAM,2BAA2B,GAChC,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACnC,IAAI,GAAG,CAAC,eAAe,CAAC,CAAC,IAAI,KAAK,eAAe,CAAC,MAAM,CAAC;QAC1D,OAAO,CAAC,2BAA2B,CAAC;IACrC,CAAC,CAAC,CAAC;AACJ,CAAC;AAYD;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,4BAA4B,CAC3C,QAAiC,EACjC,MAAc,KAAK,EAAE;IAErB,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7C,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC5B,IAAI,CAAC,OAAO;YAAE,SAAS;QACvB,IAAI,OAAO,CAAC,OAAO,KAAK,KAAK;YAAE,SAAS;QAExC,MAAM,iBAAiB,GACtB,OAAO,OAAO,CAAC,gBAAgB,KAAK,QAAQ,IAAI,OAAO,CAAC,gBAAgB,GAAG,GAAG,CAAC;QAEhF,IAAI,kBAAkB,GAAG,KAAK,CAAC;QAC/B,IAAI,OAAO,CAAC,mBAAmB,EAAE,CAAC;YACjC,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,EAAE,CAAC;gBAChE,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,GAAG,GAAG,EAAE,CAAC;oBAC9C,kBAAkB,GAAG,IAAI,CAAC;oBAC1B,MAAM;gBACP,CAAC;YACF,CAAC;QACF,CAAC;QAED,IAAI,iBAAiB,IAAI,kBAAkB,EAAE,CAAC;YAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;IACF,CAAC;IACD,OAAO,OAAO,CAAC;AAChB,CAAC;AAWD;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,uCAAuC,CACtD,QAAsC,EACtC,MAAc,KAAK,EAAE;IAErB,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7C,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC5B,IAAI,CAAC,OAAO;YAAE,SAAS;QACvB,IAAI,OAAO,CAAC,OAAO,KAAK,KAAK;YAAE,SAAS;QACxC,MAAM,QAAQ,GACb,OAAO,OAAO,CAAC,WAAW,KAAK,QAAQ,IAAI,OAAO,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;QAC3E,MAAM,KAAK,GACV,OAAO,OAAO,CAAC,SAAS,KAAK,QAAQ,IAAI,OAAO,CAAC,SAAS,GAAG,GAAG,CAAC;QAClE,IAAI,QAAQ,IAAI,KAAK,EAAE,CAAC;YACvB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;IACF,CAAC;IACD,OAAO,OAAO,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"stale-state.js","sourceRoot":"","sources":["../../../lib/accounts/stale-state.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAyB9D;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,+BAA+B,CAC9C,OAA0B;IAE1B,MAAM,GAAG,GAAG,KAAK,EAAE,CAAC;IAEpB,MAAM,iBAAiB,GACtB,OAAO,OAAO,CAAC,gBAAgB,KAAK,QAAQ,IAAI,OAAO,CAAC,gBAAgB,GAAG,GAAG,CAAC;IAChF,IAAI,OAAO,CAAC,gBAAgB,KAAK,SAAS,IAAI,OAAO,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;QACpF,OAAO,OAAO,CAAC,gBAAgB,CAAC;QAChC,OAAO,OAAO,CAAC,cAAc,CAAC;IAC/B,CAAC;IAED,MAAM,wBAAwB,GAC7B,OAAO,OAAO,CAAC,mBAAmB,KAAK,QAAQ,IAAI,OAAO,CAAC,mBAAmB,GAAG,GAAG,CAAC;IACtF,IAAI,OAAO,CAAC,mBAAmB,KAAK,SAAS,EAAE,CAAC;QAC/C,OAAO,OAAO,CAAC,mBAAmB,CAAC;QACnC,OAAO,OAAO,CAAC,qBAAqB,CAAC;QACrC,sEAAsE;QACtE,wEAAwE;QACxE,iEAAiE;QACjE,uEAAuE;QACvE,qEAAqE;QACrE,kEAAkE;QAClE,IAAI,wBAAwB,EAAE,CAAC;YAC9B,OAAO,CAAC,uBAAuB,GAAG,GAAG,CAAC;QACvC,CAAC;IACF,CAAC;IAED,IAAI,oBAAoB,GAAG,CAAC,CAAC;IAC7B,IAAI,OAAO,CAAC,mBAAmB,EAAE,CAAC;QACjC,oBAAoB,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,MAAM,CAAC;QACvE,IAAI,oBAAoB,GAAG,CAAC,EAAE,CAAC;YAC9B,OAAO,CAAC,mBAAmB,GAAG,EAAE,CAAC;QAClC,CAAC;IACF,CAAC;IAED,OAAO;QACN,eAAe,EAAE,iBAAiB;QAClC,oBAAoB;QACpB,sBAAsB,EAAE,wBAAwB;KAChD,CAAC;AACH,CAAC;AAED,MAAM,UAAU,2BAA2B,CAC1C,OAA0B,EAC1B,QAA2B;IAE3B,MAAM,OAAO,GAAsB,EAAE,CAAC;IACtC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,IAAI,EAAE,CAAC,EAAE,CAAC;QAC/E,IAAI,KAAK,KAAK,SAAS,IAAI,OAAO,CAAC,mBAAmB,EAAE,CAAC,GAAG,CAAC,KAAK,KAAK;YAAE,SAAS;QAClF,OAAO,CAAC,mBAAmB,KAAK,EAAE,CAAC;QACnC,OAAO,CAAC,mBAAmB,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACzC,OAAO,OAAO,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;IACzC,CAAC;IACD,IAAI,CAAC,QAAQ,CAAC,gBAAgB,KAAK,SAAS,IAAI,QAAQ,CAAC,cAAc,KAAK,SAAS,CAAC;QACrF,OAAO,CAAC,gBAAgB,KAAK,QAAQ,CAAC,gBAAgB,IAAI,OAAO,CAAC,cAAc,KAAK,QAAQ,CAAC,cAAc,EAAE,CAAC;QAC/G,OAAO,CAAC,gBAAgB,GAAG,QAAQ,CAAC,gBAAgB,CAAC;QACrD,OAAO,CAAC,cAAc,GAAG,QAAQ,CAAC,cAAc,CAAC;QACjD,OAAO,OAAO,CAAC,gBAAgB,CAAC;QAChC,OAAO,OAAO,CAAC,cAAc,CAAC;IAC/B,CAAC;IACD,IAAI,QAAQ,CAAC,mBAAmB,KAAK,SAAS;QAC7C,OAAO,CAAC,mBAAmB,KAAK,QAAQ,CAAC,mBAAmB;QAC5D,OAAO,CAAC,qBAAqB,KAAK,QAAQ,CAAC,qBAAqB,EAAE,CAAC;QACnE,OAAO,CAAC,mBAAmB,GAAG,QAAQ,CAAC,mBAAmB,CAAC;QAC3D,OAAO,CAAC,qBAAqB,GAAG,QAAQ,CAAC,qBAAqB,CAAC;QAC/D,MAAM,KAAK,GAAG,EAAE,mBAAmB,EAAE,OAAO,CAAC,mBAAmB;YAC/D,qBAAqB,EAAE,OAAO,CAAC,qBAAqB,EAAE,uBAAuB,EAAE,OAAO,CAAC,uBAAuB,EAAE,CAAC;QAClH,+BAA+B,CAAC,KAAK,CAAC,CAAC;QACvC,OAAO,OAAO,CAAC,mBAAmB,CAAC;QACnC,OAAO,OAAO,CAAC,qBAAqB,CAAC;QACrC,OAAO,CAAC,uBAAuB,GAAG,KAAK,CAAC,uBAAuB,CAAC;IACjE,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;AAC9D,CAAC;AAWD;;;;GAIG;AACH,MAAM,UAAU,gCAAgC,CAC/C,QAA6B;IAE7B,IAAI,gBAAgB,GAAG,CAAC,CAAC;IACzB,IAAI,oBAAoB,GAAG,CAAC,CAAC;IAC7B,IAAI,uBAAuB,GAAG,CAAC,CAAC;IAChC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAChC,MAAM,OAAO,GAAG,+BAA+B,CAAC,OAAO,CAAC,CAAC;QACzD,IAAI,OAAO,CAAC,eAAe;YAAE,gBAAgB,IAAI,CAAC,CAAC;QACnD,oBAAoB,IAAI,OAAO,CAAC,oBAAoB,CAAC;QACrD,IAAI,OAAO,CAAC,sBAAsB;YAAE,uBAAuB,IAAI,CAAC,CAAC;IAClE,CAAC;IACD,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,CAAC;AAC5E,CAAC;AAaD;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,iCAAiC,CAChD,QAAgC;IAEhC,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAU,CAAC;IAC3C,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAChC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAClD,IAAI,CAAC,KAAK;YAAE,SAAS;QACrB,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,KAAK,KAAK,CAAC;QAC5C,MAAM,WAAW,GAChB,OAAO,CAAC,eAAe,KAAK,KAAK;YACjC,CAAC,OAAO,OAAO,CAAC,cAAc,KAAK,QAAQ,IAAI,OAAO,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC1F,IAAI,SAAS,IAAI,WAAW,EAAE,CAAC;YAC9B,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC;IACF,CAAC;IAED,IAAI,gBAAgB,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAE3C,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7C,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC5B,IAAI,CAAC,OAAO;YAAE,SAAS;QACvB,IAAI,OAAO,CAAC,OAAO,KAAK,KAAK;YAAE,SAAS;QACxC,IAAI,OAAO,CAAC,eAAe,KAAK,OAAO;YAAE,SAAS;QAClD,MAAM,MAAM,GACX,OAAO,OAAO,CAAC,cAAc,KAAK,QAAQ,IAAI,OAAO,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;QACxF,IAAI,MAAM;YAAE,SAAS;QACrB,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAClD,IAAI,CAAC,KAAK;YAAE,SAAS;QACrB,IAAI,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YACjC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;IACF,CAAC;IACD,OAAO,UAAU,CAAC;AACnB,CAAC;AAUD;;;;;GAKG;AACH,MAAM,UAAU,wCAAwC,CACvD,QAA+C;IAE/C,MAAM,MAAM,GAAG,IAAI,GAAG,EAAoB,CAAC;IAC3C,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACzD,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;QAChC,IAAI,CAAC,OAAO;YAAE,SAAS;QACvB,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC;QAC5C,MAAM,aAAa,GAClB,OAAO,CAAC,aAAa,EAAE,IAAI,EAAE,IAAI,oBAAoB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAC5E,IAAI,CAAC,SAAS,IAAI,CAAC,aAAa;YAAE,SAAS;QAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC;QACvD,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC9B,IAAI,KAAK;YAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;;YACxB,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAC/B,CAAC;IAED,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE;QAC9C,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,KAAK,CAAC;QACrC,0EAA0E;QAC1E,6EAA6E;QAC7E,2EAA2E;QAC3E,2EAA2E;QAC3E,yCAAyC;QACzC,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,CAClC,CAAC,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,cAAc,EAAE,IAAI,EAAE,IAAI,EAAE,CACxD,CAAC;QACF,MAAM,2BAA2B,GAChC,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACnC,IAAI,GAAG,CAAC,eAAe,CAAC,CAAC,IAAI,KAAK,eAAe,CAAC,MAAM,CAAC;QAC1D,OAAO,CAAC,2BAA2B,CAAC;IACrC,CAAC,CAAC,CAAC;AACJ,CAAC;AAaD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,4BAA4B,CAC3C,QAAiC,EACjC,MAAc,KAAK,EAAE;IAErB,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7C,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC5B,IAAI,CAAC,OAAO;YAAE,SAAS;QACvB,IAAI,OAAO,CAAC,OAAO,KAAK,KAAK;YAAE,SAAS;QAExC,MAAM,iBAAiB,GACtB,OAAO,OAAO,CAAC,gBAAgB,KAAK,QAAQ,IAAI,OAAO,CAAC,gBAAgB,GAAG,GAAG,CAAC;QAEhF,IAAI,kBAAkB,GAAG,KAAK,CAAC;QAC/B,IAAI,OAAO,CAAC,mBAAmB,EAAE,CAAC;YACjC,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,EAAE,CAAC;gBAChE,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,GAAG,GAAG,EAAE,CAAC;oBAC9C,kBAAkB,GAAG,IAAI,CAAC;oBAC1B,MAAM;gBACP,CAAC;YACF,CAAC;QACF,CAAC;QAED,IAAI,iBAAiB,IAAI,kBAAkB,EAAE,CAAC;YAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;IACF,CAAC;IACD,OAAO,OAAO,CAAC;AAChB,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,0BAA0B,CACzC,QAAiC,EACjC,MAAc,KAAK,EAAE;IAErB,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7C,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC5B,IAAI,CAAC,OAAO;YAAE,SAAS;QACvB,IAAI,OAAO,CAAC,OAAO,KAAK,KAAK;YAAE,SAAS;QACxC,IACC,OAAO,OAAO,CAAC,mBAAmB,KAAK,QAAQ;YAC/C,OAAO,CAAC,mBAAmB,GAAG,GAAG,EAChC,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;IACF,CAAC;IACD,OAAO,OAAO,CAAC;AAChB,CAAC;AAWD;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,uCAAuC,CACtD,QAAsC,EACtC,MAAc,KAAK,EAAE;IAErB,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7C,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC5B,IAAI,CAAC,OAAO;YAAE,SAAS;QACvB,IAAI,OAAO,CAAC,OAAO,KAAK,KAAK;YAAE,SAAS;QACxC,MAAM,QAAQ,GACb,OAAO,OAAO,CAAC,WAAW,KAAK,QAAQ,IAAI,OAAO,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;QAC3E,MAAM,KAAK,GACV,OAAO,OAAO,CAAC,SAAS,KAAK,QAAQ,IAAI,OAAO,CAAC,SAAS,GAAG,GAAG,CAAC;QAClE,IAAI,QAAQ,IAAI,KAAK,EAAE,CAAC;YACvB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;IACF,CAAC;IACD,OAAO,OAAO,CAAC;AAChB,CAAC"}
@@ -33,6 +33,11 @@ export interface ManagedAccount {
33
33
  lastSwitchReason?: "rate-limit" | "initial" | "rotation";
34
34
  lastRateLimitReason?: RateLimitReason;
35
35
  rateLimitResetTimes: RateLimitStateV3;
36
+ quotaExhaustedUntil?: number;
37
+ /** When the quota-exhaustion stamp was written; see AccountMetadataV3. */
38
+ quotaExhaustedStampAt?: number;
39
+ /** Doctor-clear tombstone; see AccountMetadataV3. */
40
+ quotaExhaustedClearedAt?: number;
36
41
  coolingDownUntil?: number;
37
42
  cooldownReason?: CooldownReason;
38
43
  }
@@ -45,6 +50,7 @@ export interface AccountSelectionExplainability {
45
50
  healthScore: number;
46
51
  tokensAvailable: number;
47
52
  rateLimitedUntil?: number;
53
+ quotaExhaustedUntil?: number;
48
54
  coolingDownUntil?: number;
49
55
  cooldownReason?: CooldownReason;
50
56
  lastUsed: number;
@@ -1 +1 @@
1
- {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../../lib/accounts/state.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../../lib/accounts/state.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAkB,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvE,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAErE,OAAO,EAON,KAAK,eAAe,EACpB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,gBAAgB,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAcxF,MAAM,WAAW,cAAc;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,uFAAuF;IACvF,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,CAAC,EAAE,YAAY,GAAG,SAAS,GAAG,UAAU,CAAC;IACzD,mBAAmB,CAAC,EAAE,eAAe,CAAC;IACtC,mBAAmB,EAAE,gBAAgB,CAAC;IACtC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,0EAA0E;IAC1E,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,qDAAqD;IACrD,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,cAAc,CAAC;CAChC;AAED,MAAM,WAAW,8BAA8B;IAC9C,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,QAAQ,EAAE,MAAM,CAAC;CACjB;AAwLD,qBAAa,YAAY;IACxB,QAAQ,EAAE,cAAc,EAAE,CAAM;IAChC,cAAc,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,CAAsB;IACjE,2BAA2B,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,CAAuB;IAC/E,qBAAqB,SAAM;IAC3B,aAAa,SAAK;IAClB,0BAA0B,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAa;IAC5D;;;;;OAKG;IACH,0BAA0B,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAa;IACrE;;;;;;OAMG;IACH,OAAO,CAAC,mBAAmB,CAAS;IAEpC,mBAAmB,IAAI,OAAO;IAM9B,qBAAqB,CACpB,YAAY,EAAE,gBAAgB,GAAG,SAAS,EAC1C,MAAM,EAAE,gBAAgB,GAAG,IAAI,GAAG,SAAS,GACzC,IAAI;IA+MP,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO;IAI9C,eAAe,IAAI,MAAM;IAIzB,uBAAuB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM;IAQpD,mBAAmB,IAAI,cAAc,EAAE;IAOvC,0BAA0B,CACzB,MAAM,EAAE,WAAW,EACnB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,EACrB,GAAG,SAAU,GACX,8BAA8B,EAAE;IA2EnC,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI;IAiBpD,0BAA0B,CAAC,MAAM,EAAE,WAAW,GAAG,cAAc,GAAG,IAAI;IAYtE,sBAAsB,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,SAAQ,GAAG,OAAO;IAWzE,cAAc,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI;IAK1C,cAAc,CAAC,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,gBAAgB,GAAG,IAAI;IA+DrE;;;;OAIG;IACH,OAAO,CAAC,sCAAsC;IAsB9C,aAAa,CAAC,OAAO,EAAE,cAAc,GAAG,gBAAgB;IAUxD,YAAY,CACX,OAAO,EAAE,cAAc,EACvB,MAAM,EAAE,YAAY,GAAG,SAAS,GAAG,UAAU,EAC7C,MAAM,EAAE,WAAW,GACjB,IAAI;IAKP,aAAa,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO;IAgD/C,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAQ5C,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,cAAc,GAAG,IAAI;IASzE;;;;OAIG;IACH,oBAAoB,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO;IAStD,oBAAoB,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI;IAKnD;;;;OAIG;IACH,mBAAmB,CAClB,OAAO,EAAE,cAAc,EACvB,MAAM,EAAE,WAAW,EACnB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,GACnB,OAAO;CASV"}
@@ -8,7 +8,7 @@
8
8
  */
9
9
  import { MODEL_FAMILIES } from "../prompts/codex.js";
10
10
  import { nowMs } from "../utils.js";
11
- import { clampNonNegativeInt, clearExpiredRateLimits, getQuotaKey, isRateLimitedForFamily, } from "./rate-limits.js";
11
+ import { clampNonNegativeInt, clearExpiredQuotaExhaustion, clearExpiredRateLimits, getQuotaKey, isQuotaExhausted, isRateLimitedForFamily, } from "./rate-limits.js";
12
12
  import { extractAccountEmail, extractAccountId, extractAccountUserId, sanitizeEmail, shouldUpdateAccountIdFromToken, } from "../auth/token-utils.js";
13
13
  import { extractPlanType } from "../auth/plan-tier.js";
14
14
  import { getMissingRequiredOAuthScopes, normalizeScope } from "../auth/scopes.js";
@@ -277,6 +277,9 @@ export class AccountState {
277
277
  lastUsed: clampNonNegativeInt(account.lastUsed, 0),
278
278
  lastSwitchReason: account.lastSwitchReason,
279
279
  rateLimitResetTimes: account.rateLimitResetTimes ?? {},
280
+ quotaExhaustedUntil: account.quotaExhaustedUntil,
281
+ quotaExhaustedStampAt: account.quotaExhaustedStampAt,
282
+ quotaExhaustedClearedAt: account.quotaExhaustedClearedAt,
280
283
  coolingDownUntil: account.coolingDownUntil,
281
284
  cooldownReason: account.cooldownReason,
282
285
  };
@@ -399,6 +402,7 @@ export class AccountState {
399
402
  const tokenTracker = getTokenTracker();
400
403
  return this.accounts.map((account) => {
401
404
  clearExpiredRateLimits(account);
405
+ clearExpiredQuotaExhaustion(account);
402
406
  const enabled = account.enabled !== false;
403
407
  const reasons = [];
404
408
  let rateLimitedUntil;
@@ -417,10 +421,15 @@ export class AccountState {
417
421
  const coolingDownUntil = typeof account.coolingDownUntil === "number" && account.coolingDownUntil > now
418
422
  ? account.coolingDownUntil
419
423
  : undefined;
424
+ const quotaExhaustedUntil = isQuotaExhausted(account, now)
425
+ ? account.quotaExhaustedUntil
426
+ : undefined;
420
427
  if (!enabled)
421
428
  reasons.push("disabled");
422
429
  if (rateLimitedUntil !== undefined)
423
430
  reasons.push("rate-limited");
431
+ if (quotaExhaustedUntil !== undefined)
432
+ reasons.push("quota-exhausted");
424
433
  if (coolingDownUntil !== undefined) {
425
434
  reasons.push(account.cooldownReason ? `cooldown:${account.cooldownReason}` : "cooldown");
426
435
  }
@@ -429,6 +438,7 @@ export class AccountState {
429
438
  reasons.push("token-bucket-empty");
430
439
  const eligible = enabled &&
431
440
  rateLimitedUntil === undefined &&
441
+ quotaExhaustedUntil === undefined &&
432
442
  coolingDownUntil === undefined &&
433
443
  tokensAvailable >= 1;
434
444
  if (reasons.length === 0)
@@ -442,6 +452,7 @@ export class AccountState {
442
452
  healthScore: healthTracker.getScore(account.index, quotaKey),
443
453
  tokensAvailable,
444
454
  rateLimitedUntil,
455
+ quotaExhaustedUntil,
445
456
  coolingDownUntil,
446
457
  cooldownReason: coolingDownUntil !== undefined ? account.cooldownReason : undefined,
447
458
  lastUsed: account.lastUsed,
@@ -663,6 +674,9 @@ export class AccountState {
663
674
  if (account.enabled === false)
664
675
  return false;
665
676
  clearExpiredRateLimits(account);
677
+ clearExpiredQuotaExhaustion(account);
678
+ if (isQuotaExhausted(account))
679
+ return false;
666
680
  if (isRateLimitedForFamily(account, family, model))
667
681
  return false;
668
682
  if (this.isAccountCoolingDown(account))