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.
- package/README.md +15 -12
- package/config/README.md +8 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +473 -145
- package/dist/index.js.map +1 -1
- package/dist/lib/account-display.d.ts.map +1 -1
- package/dist/lib/account-display.js +3 -1
- package/dist/lib/account-display.js.map +1 -1
- package/dist/lib/accounts/persistence.d.ts +25 -1
- package/dist/lib/accounts/persistence.d.ts.map +1 -1
- package/dist/lib/accounts/persistence.js +105 -2
- package/dist/lib/accounts/persistence.js.map +1 -1
- package/dist/lib/accounts/rate-limits.d.ts +22 -0
- package/dist/lib/accounts/rate-limits.d.ts.map +1 -1
- package/dist/lib/accounts/rate-limits.js +25 -0
- package/dist/lib/accounts/rate-limits.js.map +1 -1
- package/dist/lib/accounts/rotation.d.ts +22 -23
- package/dist/lib/accounts/rotation.d.ts.map +1 -1
- package/dist/lib/accounts/rotation.js +62 -37
- package/dist/lib/accounts/rotation.js.map +1 -1
- package/dist/lib/accounts/stale-state.d.ts +32 -0
- package/dist/lib/accounts/stale-state.d.ts.map +1 -1
- package/dist/lib/accounts/stale-state.js +86 -1
- package/dist/lib/accounts/stale-state.js.map +1 -1
- package/dist/lib/accounts/state.d.ts +6 -0
- package/dist/lib/accounts/state.d.ts.map +1 -1
- package/dist/lib/accounts/state.js +15 -1
- package/dist/lib/accounts/state.js.map +1 -1
- package/dist/lib/accounts/warm-recovery.d.ts +8 -0
- package/dist/lib/accounts/warm-recovery.d.ts.map +1 -0
- package/dist/lib/accounts/warm-recovery.js +70 -0
- package/dist/lib/accounts/warm-recovery.js.map +1 -0
- package/dist/lib/accounts/warm-request.d.ts +2 -0
- package/dist/lib/accounts/warm-request.d.ts.map +1 -1
- package/dist/lib/accounts/warm-request.js +4 -2
- package/dist/lib/accounts/warm-request.js.map +1 -1
- package/dist/lib/accounts.d.ts +1 -1
- package/dist/lib/accounts.d.ts.map +1 -1
- package/dist/lib/accounts.js +2 -2
- package/dist/lib/accounts.js.map +1 -1
- package/dist/lib/auth/login-runner.d.ts +3 -0
- package/dist/lib/auth/login-runner.d.ts.map +1 -1
- package/dist/lib/auth/login-runner.js +35 -0
- package/dist/lib/auth/login-runner.js.map +1 -1
- package/dist/lib/circuit-breaker.d.ts +5 -0
- package/dist/lib/circuit-breaker.d.ts.map +1 -1
- package/dist/lib/circuit-breaker.js +23 -6
- package/dist/lib/circuit-breaker.js.map +1 -1
- package/dist/lib/codex-reset.d.ts +7 -1
- package/dist/lib/codex-reset.d.ts.map +1 -1
- package/dist/lib/codex-reset.js +9 -2
- package/dist/lib/codex-reset.js.map +1 -1
- package/dist/lib/codex-usage.d.ts +16 -6
- package/dist/lib/codex-usage.d.ts.map +1 -1
- package/dist/lib/codex-usage.js +68 -23
- package/dist/lib/codex-usage.js.map +1 -1
- package/dist/lib/config.d.ts +2 -1
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +38 -14
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/parallel-probe.d.ts.map +1 -1
- package/dist/lib/parallel-probe.js +5 -2
- package/dist/lib/parallel-probe.js.map +1 -1
- package/dist/lib/quota-notifications.d.ts.map +1 -1
- package/dist/lib/quota-notifications.js +10 -1
- package/dist/lib/quota-notifications.js.map +1 -1
- package/dist/lib/request/fetch-helpers.d.ts +24 -0
- package/dist/lib/request/fetch-helpers.d.ts.map +1 -1
- package/dist/lib/request/fetch-helpers.js +88 -38
- package/dist/lib/request/fetch-helpers.js.map +1 -1
- package/dist/lib/request/response-handler.d.ts.map +1 -1
- package/dist/lib/request/response-handler.js +85 -43
- package/dist/lib/request/response-handler.js.map +1 -1
- package/dist/lib/rotation.d.ts +1 -1
- package/dist/lib/schemas.d.ts +9 -0
- package/dist/lib/schemas.d.ts.map +1 -1
- package/dist/lib/schemas.js +3 -0
- package/dist/lib/schemas.js.map +1 -1
- package/dist/lib/storage/flagged.d.ts.map +1 -1
- package/dist/lib/storage/flagged.js +5 -0
- package/dist/lib/storage/flagged.js.map +1 -1
- package/dist/lib/storage/load-save.d.ts +1 -0
- package/dist/lib/storage/load-save.d.ts.map +1 -1
- package/dist/lib/storage/load-save.js +11 -0
- package/dist/lib/storage/load-save.js.map +1 -1
- package/dist/lib/storage/migrations.d.ts +21 -0
- package/dist/lib/storage/migrations.d.ts.map +1 -1
- package/dist/lib/storage/migrations.js.map +1 -1
- package/dist/lib/storage/normalize.d.ts.map +1 -1
- package/dist/lib/storage/normalize.js +93 -1
- package/dist/lib/storage/normalize.js.map +1 -1
- package/dist/lib/storage/state.d.ts +1 -0
- package/dist/lib/storage/state.d.ts.map +1 -1
- package/dist/lib/storage/state.js +12 -0
- package/dist/lib/storage/state.js.map +1 -1
- package/dist/lib/tools/codex-doctor.d.ts.map +1 -1
- package/dist/lib/tools/codex-doctor.js +8 -66
- package/dist/lib/tools/codex-doctor.js.map +1 -1
- package/dist/lib/tools/codex-health.d.ts.map +1 -1
- package/dist/lib/tools/codex-health.js +7 -1
- package/dist/lib/tools/codex-health.js.map +1 -1
- package/dist/lib/tools/codex-limits.d.ts.map +1 -1
- package/dist/lib/tools/codex-limits.js +13 -1
- package/dist/lib/tools/codex-limits.js.map +1 -1
- package/dist/lib/tools/codex-list.d.ts.map +1 -1
- package/dist/lib/tools/codex-list.js +14 -1
- package/dist/lib/tools/codex-list.js.map +1 -1
- package/dist/lib/tools/codex-reset.d.ts.map +1 -1
- package/dist/lib/tools/codex-reset.js +40 -1
- package/dist/lib/tools/codex-reset.js.map +1 -1
- package/dist/lib/tools/codex-status.d.ts.map +1 -1
- package/dist/lib/tools/codex-status.js +6 -1
- package/dist/lib/tools/codex-status.js.map +1 -1
- package/dist/lib/tools/codex-warm.d.ts +2 -1
- package/dist/lib/tools/codex-warm.d.ts.map +1 -1
- package/dist/lib/tools/codex-warm.js +48 -5
- package/dist/lib/tools/codex-warm.js.map +1 -1
- package/dist/lib/tools/doctor-repair.d.ts +10 -0
- package/dist/lib/tools/doctor-repair.d.ts.map +1 -0
- package/dist/lib/tools/doctor-repair.js +86 -0
- package/dist/lib/tools/doctor-repair.js.map +1 -0
- package/dist/lib/tools/index.d.ts +4 -1
- package/dist/lib/tools/index.d.ts.map +1 -1
- package/dist/lib/tools/index.js.map +1 -1
- package/dist/lib/tui-quota-cache.d.ts.map +1 -1
- package/dist/lib/tui-quota-cache.js +3 -1
- package/dist/lib/tui-quota-cache.js.map +1 -1
- package/dist/tui.d.ts +4 -1
- package/dist/tui.d.ts.map +1 -1
- package/dist/tui.js +24 -14
- package/dist/tui.js.map +1 -1
- package/package.json +1 -1
- 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
|
|
107
|
-
* `selectHybridAccount` deliberately falls back to the
|
|
108
|
-
* account instead of returning null, because retrying a
|
|
109
|
-
* beats refusing to send anything (a single-account pool has
|
|
110
|
-
* over to, and a persisted block can outlive the limit that
|
|
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
|
-
*
|
|
320
|
-
*
|
|
321
|
-
*
|
|
322
|
-
*
|
|
323
|
-
*
|
|
324
|
-
*
|
|
325
|
-
*
|
|
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,
|
|
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
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
changed = true;
|
|
350
|
+
const existing = account.quotaExhaustedUntil;
|
|
351
|
+
if (typeof existing === "number" && Number.isFinite(existing) && existing >= resetAt) {
|
|
352
|
+
return false;
|
|
352
353
|
}
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
419
|
+
blocks.push(Math.max(0, modelResetAt - now));
|
|
405
420
|
}
|
|
406
421
|
}
|
|
407
422
|
if (typeof account.coolingDownUntil === "number") {
|
|
408
|
-
|
|
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
|
-
|
|
438
|
+
blocks.push(tokenWait);
|
|
417
439
|
}
|
|
418
440
|
}
|
|
441
|
+
if (blocks.length > 0) {
|
|
442
|
+
accountWaits.push(Math.max(...blocks));
|
|
443
|
+
}
|
|
419
444
|
}
|
|
420
|
-
return
|
|
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":"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"}
|
|
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;
|
|
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;
|
|
1
|
+
{"version":3,"file":"stale-state.js","sourceRoot":"","sources":["../../../lib/accounts/stale-state.ts"],"names":[],"mappings":"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"}
|
|
@@ -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":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAkB,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvE,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAErE,OAAO,
|
|
1
|
+
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../../lib/accounts/state.ts"],"names":[],"mappings":"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"}
|
|
@@ -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))
|