codex-multi-auth 2.8.1 → 2.8.3
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/.codex-plugin/plugin.json +1 -1
- package/README.md +3 -1
- package/dist/lib/accounts.d.ts +15 -0
- package/dist/lib/accounts.d.ts.map +1 -1
- package/dist/lib/accounts.js +126 -21
- package/dist/lib/codex-manager/account-pool-write.d.ts.map +1 -1
- package/dist/lib/codex-manager/account-pool-write.js +4 -0
- package/dist/lib/codex-manager/backend-settings-schema.js +1 -1
- package/dist/lib/codex-manager/commands/status.d.ts.map +1 -1
- package/dist/lib/codex-manager/commands/status.js +5 -1
- package/dist/lib/codex-manager/commands/uninstall.d.ts +1 -0
- package/dist/lib/codex-manager/commands/uninstall.d.ts.map +1 -1
- package/dist/lib/codex-manager/commands/uninstall.js +12 -1
- package/dist/lib/codex-manager/commands/why-selected.d.ts +1 -1
- package/dist/lib/codex-manager/commands/why-selected.d.ts.map +1 -1
- package/dist/lib/codex-manager/commands/why-selected.js +1 -1
- package/dist/lib/codex-manager/formatters/quota-formatters.d.ts.map +1 -1
- package/dist/lib/codex-manager/formatters/quota-formatters.js +32 -2
- package/dist/lib/codex-manager/health-check.d.ts.map +1 -1
- package/dist/lib/codex-manager/health-check.js +19 -3
- package/dist/lib/codex-manager/login-oauth.d.ts.map +1 -1
- package/dist/lib/codex-manager/login-oauth.js +13 -7
- package/dist/lib/codex-manager.d.ts +4 -0
- package/dist/lib/codex-manager.d.ts.map +1 -1
- package/dist/lib/codex-manager.js +50 -16
- package/dist/lib/config.d.ts +3 -1
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +3 -1
- package/dist/lib/forecast.d.ts.map +1 -1
- package/dist/lib/forecast.js +7 -1
- package/dist/lib/index.d.ts +1 -0
- package/dist/lib/index.d.ts.map +1 -1
- package/dist/lib/index.js +1 -0
- package/dist/lib/parallel-probe.d.ts.map +1 -1
- package/dist/lib/parallel-probe.js +3 -1
- package/dist/lib/policy/runtime-policy.d.ts +1 -0
- package/dist/lib/policy/runtime-policy.d.ts.map +1 -1
- package/dist/lib/policy/runtime-policy.js +7 -0
- package/dist/lib/preemptive-quota-scheduler.d.ts.map +1 -1
- package/dist/lib/preemptive-quota-scheduler.js +35 -15
- package/dist/lib/rotation.d.ts +4 -0
- package/dist/lib/rotation.d.ts.map +1 -1
- package/dist/lib/rotation.js +13 -6
- package/dist/lib/runtime/app-bind.d.ts +40 -0
- package/dist/lib/runtime/app-bind.d.ts.map +1 -1
- package/dist/lib/runtime/app-bind.js +550 -20
- package/dist/lib/runtime/rotation-account-selection.d.ts.map +1 -1
- package/dist/lib/runtime/rotation-account-selection.js +2 -0
- package/dist/lib/runtime/rotation-proxy-state.d.ts +2 -0
- package/dist/lib/runtime/rotation-proxy-state.d.ts.map +1 -1
- package/dist/lib/runtime/rotation-token-refresh.d.ts.map +1 -1
- package/dist/lib/runtime/rotation-token-refresh.js +3 -0
- package/dist/lib/runtime-constants.d.ts +2 -0
- package/dist/lib/runtime-constants.d.ts.map +1 -1
- package/dist/lib/runtime-constants.js +2 -0
- package/dist/lib/runtime-rotation-proxy.d.ts +8 -0
- package/dist/lib/runtime-rotation-proxy.d.ts.map +1 -1
- package/dist/lib/runtime-rotation-proxy.js +59 -5
- package/dist/lib/schemas.d.ts +15 -0
- package/dist/lib/schemas.d.ts.map +1 -1
- package/dist/lib/schemas.js +3 -0
- package/dist/lib/storage/flagged-storage.d.ts.map +1 -1
- package/dist/lib/storage/flagged-storage.js +15 -0
- package/dist/lib/storage/path-state.d.ts +1 -0
- package/dist/lib/storage/path-state.d.ts.map +1 -1
- package/dist/lib/storage/path-state.js +30 -3
- package/dist/lib/storage/public-types.d.ts +6 -0
- package/dist/lib/storage/public-types.d.ts.map +1 -1
- package/dist/lib/storage.d.ts.map +1 -1
- package/dist/lib/storage.js +17 -4
- package/package.json +198 -198
- package/scripts/codex-app-router.js +47 -3
- package/scripts/codex.js +165 -21
- package/scripts/install-codex-auth-utils.js +9 -2
- package/scripts/postinstall.js +2 -0
- package/scripts/preuninstall.js +11 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "codex-multi-auth",
|
|
3
|
-
|
|
3
|
+
"version": "2.8.3",
|
|
4
4
|
"description": "Install and operate codex-multi-auth for the official @openai/codex CLI with multi-account OAuth rotation, switching, health checks, and recovery tools.",
|
|
5
5
|
"interface": {
|
|
6
6
|
"composerIcon": "./assets/codex-multi-auth-icon.svg"
|
package/README.md
CHANGED
|
@@ -258,6 +258,7 @@ For remote or headless shells, prefer `codex-multi-auth login --device-auth`.
|
|
|
258
258
|
| Budget guards | `~/.codex/multi-auth/budget-guards.json` |
|
|
259
259
|
| Local client tokens | `~/.codex/multi-auth/local-client-tokens.json` |
|
|
260
260
|
| Runtime app helper status | `~/.codex/multi-auth/runtime-rotation-app-helper.json` |
|
|
261
|
+
| Runtime app helper owner metadata | `~/.codex/multi-auth/runtime-rotation-app-helper-owner.<pid>.json` |
|
|
261
262
|
| Persistent app bind state/logs | `~/.codex/multi-auth/app-bind/` |
|
|
262
263
|
| Logs | `~/.codex/multi-auth/logs/codex-plugin/` |
|
|
263
264
|
| Per-project accounts | `~/.codex/multi-auth/projects/<project-key>/openai-codex-accounts.json` |
|
|
@@ -391,7 +392,8 @@ codex-multi-auth doctor --json
|
|
|
391
392
|
|
|
392
393
|
## Release Notes
|
|
393
394
|
|
|
394
|
-
- Current stable: [docs/releases/v2.8.
|
|
395
|
+
- Current stable: [docs/releases/v2.8.3.md](docs/releases/v2.8.3.md) — install via `npm i -g codex-multi-auth`
|
|
396
|
+
- Previous stable: [docs/releases/v2.8.2.md](docs/releases/v2.8.2.md)
|
|
395
397
|
- Previous stable: [docs/releases/v2.7.1.md](docs/releases/v2.7.1.md)
|
|
396
398
|
- Previous stable: [docs/releases/v2.7.0.md](docs/releases/v2.7.0.md)
|
|
397
399
|
- Previous stable: [docs/releases/v2.6.0.md](docs/releases/v2.6.0.md)
|
package/dist/lib/accounts.d.ts
CHANGED
|
@@ -14,8 +14,11 @@ type AccountIdentityCandidate = Pick<ManagedAccount, "accountId" | "email" | "re
|
|
|
14
14
|
index?: number;
|
|
15
15
|
};
|
|
16
16
|
export type { Workspace } from "./storage/public-types.js";
|
|
17
|
+
/** Stable operator-facing marker for an explicitly invalidated OAuth token. */
|
|
18
|
+
export declare const AUTH_INVALIDATION_MARKER = "token-invalid \u2014 re-login needed";
|
|
17
19
|
export interface ManagedAccount {
|
|
18
20
|
index: number;
|
|
21
|
+
recordId?: string;
|
|
19
22
|
_runtimeTrackerKey?: string | number;
|
|
20
23
|
circuitKeyId?: string;
|
|
21
24
|
accountId?: string;
|
|
@@ -33,6 +36,8 @@ export interface ManagedAccount {
|
|
|
33
36
|
rateLimitResetTimes: RateLimitStateV3;
|
|
34
37
|
coolingDownUntil?: number;
|
|
35
38
|
cooldownReason?: CooldownReason;
|
|
39
|
+
authInvalidatedAt?: number;
|
|
40
|
+
authInvalidationErrorCode?: string;
|
|
36
41
|
consecutiveAuthFailures?: number;
|
|
37
42
|
workspaces?: Workspace[];
|
|
38
43
|
currentWorkspaceIndex?: number;
|
|
@@ -79,6 +84,13 @@ export declare class AccountManager {
|
|
|
79
84
|
getAccountByIndex(index: number): ManagedAccount | null;
|
|
80
85
|
isAccountAvailableForFamily(index: number, family: ModelFamily, model?: string | null): boolean;
|
|
81
86
|
getAccountRuntimeSkipReason(index: number, family: ModelFamily, model?: string | null): string | null;
|
|
87
|
+
/**
|
|
88
|
+
* Evaluate a managed-account snapshot with the same runtime gates used by
|
|
89
|
+
* production selection. This is public for read-only diagnostics that build
|
|
90
|
+
* their own trace rows from storage and therefore cannot safely resolve an
|
|
91
|
+
* account by its compacted array position.
|
|
92
|
+
*/
|
|
93
|
+
getManagedAccountRuntimeSkipReason(account: ManagedAccount, family: ModelFamily, model?: string | null): string | null;
|
|
82
94
|
static resetVolatileRuntimeState(): void;
|
|
83
95
|
/**
|
|
84
96
|
* Wipe per-account transient state — active cooldowns and all rate-limit
|
|
@@ -183,6 +195,9 @@ export declare class AccountManager {
|
|
|
183
195
|
private isCircuitAvailable;
|
|
184
196
|
incrementAuthFailures(account: ManagedAccount): number;
|
|
185
197
|
clearAuthFailures(account: ManagedAccount): void;
|
|
198
|
+
markAuthInvalidated(account: ManagedAccount, errorCode?: string, invalidatedAt?: number): void;
|
|
199
|
+
clearAuthInvalidation(account: ManagedAccount): void;
|
|
200
|
+
isAccountAuthInvalidated(account: ManagedAccount): boolean;
|
|
186
201
|
getAccountByIdentity(candidate: AccountIdentityCandidate, auth?: OAuthAuthDetails): ManagedAccount | null;
|
|
187
202
|
shouldShowAccountToast(accountIndex: number, debounceMs?: number): boolean;
|
|
188
203
|
markToastShown(accountIndex: number): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accounts.d.ts","sourceRoot":"","sources":["../../lib/accounts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"accounts.d.ts","sourceRoot":"","sources":["../../lib/accounts.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/accounts.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
1
2
|
import { saveAccountsWithRetry } from "./storage/save-retry.js";
|
|
2
3
|
import { createLogger } from "./logger.js";
|
|
3
4
|
import { getStoragePath, loadAccounts, readPinAndGenFromDisk, saveAccounts, findMatchingAccountIndex, withAccountStorageTransaction, } from "./storage.js";
|
|
@@ -27,6 +28,19 @@ function getAccountCircuitKey(account) {
|
|
|
27
28
|
}
|
|
28
29
|
return account.circuitKeyId;
|
|
29
30
|
}
|
|
31
|
+
function deriveAccountRecordId(account) {
|
|
32
|
+
const seed = [
|
|
33
|
+
account.addedAt,
|
|
34
|
+
account.accountId?.trim() ?? "",
|
|
35
|
+
account.email?.trim().toLowerCase() ?? "",
|
|
36
|
+
account.refreshToken.trim(),
|
|
37
|
+
].join("\u0000");
|
|
38
|
+
return `record:${createHash("sha256").update(seed).digest("hex")}`;
|
|
39
|
+
}
|
|
40
|
+
function resolveAccountRecordId(account) {
|
|
41
|
+
const stored = account.recordId?.trim();
|
|
42
|
+
return stored || deriveAccountRecordId(account);
|
|
43
|
+
}
|
|
30
44
|
export function getRuntimeTrackerKey(account) {
|
|
31
45
|
if (account._runtimeTrackerKey !== undefined) {
|
|
32
46
|
return account._runtimeTrackerKey;
|
|
@@ -110,6 +124,8 @@ function isRetryableAuthPersistenceError(error) {
|
|
|
110
124
|
}
|
|
111
125
|
return false;
|
|
112
126
|
}
|
|
127
|
+
/** Stable operator-facing marker for an explicitly invalidated OAuth token. */
|
|
128
|
+
export const AUTH_INVALIDATION_MARKER = "token-invalid — re-login needed";
|
|
113
129
|
export class AccountManager {
|
|
114
130
|
accounts = [];
|
|
115
131
|
cursorByFamily = initFamilyState(0);
|
|
@@ -283,6 +299,7 @@ export class AccountManager {
|
|
|
283
299
|
: account.refreshToken;
|
|
284
300
|
return {
|
|
285
301
|
index,
|
|
302
|
+
recordId: resolveAccountRecordId({ ...account, refreshToken }),
|
|
286
303
|
accountId: matchesFallback
|
|
287
304
|
? (fallbackAccountId ?? account.accountId)
|
|
288
305
|
: account.accountId,
|
|
@@ -305,6 +322,8 @@ export class AccountManager {
|
|
|
305
322
|
rateLimitResetTimes: account.rateLimitResetTimes ?? {},
|
|
306
323
|
coolingDownUntil: account.coolingDownUntil,
|
|
307
324
|
cooldownReason: account.cooldownReason,
|
|
325
|
+
authInvalidatedAt: account.authInvalidatedAt,
|
|
326
|
+
authInvalidationErrorCode: account.authInvalidationErrorCode,
|
|
308
327
|
workspaces: account.workspaces,
|
|
309
328
|
currentWorkspaceIndex: account.currentWorkspaceIndex,
|
|
310
329
|
};
|
|
@@ -315,6 +334,12 @@ export class AccountManager {
|
|
|
315
334
|
const now = nowMs();
|
|
316
335
|
this.accounts.push({
|
|
317
336
|
index: this.accounts.length,
|
|
337
|
+
recordId: deriveAccountRecordId({
|
|
338
|
+
accountId: fallbackAccountId,
|
|
339
|
+
email: fallbackAccountEmail,
|
|
340
|
+
refreshToken: authFallback.refresh,
|
|
341
|
+
addedAt: now,
|
|
342
|
+
}),
|
|
318
343
|
accountId: fallbackAccountId,
|
|
319
344
|
accountIdSource: fallbackAccountId ? "token" : undefined,
|
|
320
345
|
email: fallbackAccountEmail,
|
|
@@ -344,6 +369,12 @@ export class AccountManager {
|
|
|
344
369
|
this.accounts = [
|
|
345
370
|
{
|
|
346
371
|
index: 0,
|
|
372
|
+
recordId: deriveAccountRecordId({
|
|
373
|
+
accountId: fallbackAccountId,
|
|
374
|
+
email: fallbackAccountEmail,
|
|
375
|
+
refreshToken: authFallback.refresh,
|
|
376
|
+
addedAt: now,
|
|
377
|
+
}),
|
|
347
378
|
accountId: fallbackAccountId,
|
|
348
379
|
accountIdSource: fallbackAccountId ? "token" : undefined,
|
|
349
380
|
email: fallbackAccountEmail,
|
|
@@ -422,6 +453,7 @@ export class AccountManager {
|
|
|
422
453
|
return false;
|
|
423
454
|
clearExpiredRateLimits(account);
|
|
424
455
|
return (!isRateLimitedForFamily(account, family, model) &&
|
|
456
|
+
!this.isAccountAuthInvalidated(account) &&
|
|
425
457
|
!this.isAccountCoolingDown(account) &&
|
|
426
458
|
this.isCircuitAvailable(account));
|
|
427
459
|
}
|
|
@@ -429,10 +461,21 @@ export class AccountManager {
|
|
|
429
461
|
const account = this.getAccountByIndex(index);
|
|
430
462
|
if (!account)
|
|
431
463
|
return "missing";
|
|
464
|
+
return this.getManagedAccountRuntimeSkipReason(account, family, model);
|
|
465
|
+
}
|
|
466
|
+
/**
|
|
467
|
+
* Evaluate a managed-account snapshot with the same runtime gates used by
|
|
468
|
+
* production selection. This is public for read-only diagnostics that build
|
|
469
|
+
* their own trace rows from storage and therefore cannot safely resolve an
|
|
470
|
+
* account by its compacted array position.
|
|
471
|
+
*/
|
|
472
|
+
getManagedAccountRuntimeSkipReason(account, family, model) {
|
|
432
473
|
if (account.enabled === false)
|
|
433
474
|
return "disabled";
|
|
434
475
|
if (!this.hasEnabledWorkspaces(account))
|
|
435
476
|
return "workspace-disabled";
|
|
477
|
+
if (this.isAccountAuthInvalidated(account))
|
|
478
|
+
return AUTH_INVALIDATION_MARKER;
|
|
436
479
|
clearExpiredRateLimits(account);
|
|
437
480
|
if (isRateLimitedForFamily(account, family, model))
|
|
438
481
|
return "rate-limited";
|
|
@@ -546,6 +589,7 @@ export class AccountManager {
|
|
|
546
589
|
continue;
|
|
547
590
|
clearExpiredRateLimits(account);
|
|
548
591
|
if (isRateLimitedForFamily(account, family, model) ||
|
|
592
|
+
this.isAccountAuthInvalidated(account) ||
|
|
549
593
|
this.isAccountCoolingDown(account) ||
|
|
550
594
|
!this.isCircuitAvailable(account)) {
|
|
551
595
|
continue;
|
|
@@ -573,6 +617,7 @@ export class AccountManager {
|
|
|
573
617
|
continue;
|
|
574
618
|
clearExpiredRateLimits(account);
|
|
575
619
|
if (isRateLimitedForFamily(account, family, model) ||
|
|
620
|
+
this.isAccountAuthInvalidated(account) ||
|
|
576
621
|
this.isAccountCoolingDown(account) ||
|
|
577
622
|
!this.isCircuitAvailable(account)) {
|
|
578
623
|
continue;
|
|
@@ -623,6 +668,7 @@ export class AccountManager {
|
|
|
623
668
|
return false;
|
|
624
669
|
clearExpiredRateLimits(account);
|
|
625
670
|
return (!isRateLimitedForFamily(account, family, model) &&
|
|
671
|
+
!this.isAccountAuthInvalidated(account) &&
|
|
626
672
|
!this.isAccountCoolingDown(account) &&
|
|
627
673
|
this.isCircuitAvailable(account));
|
|
628
674
|
};
|
|
@@ -671,6 +717,7 @@ export class AccountManager {
|
|
|
671
717
|
return null;
|
|
672
718
|
clearExpiredRateLimits(account);
|
|
673
719
|
const isAvailable = !isRateLimitedForFamily(account, family, model) &&
|
|
720
|
+
!this.isAccountAuthInvalidated(account) &&
|
|
674
721
|
!this.isAccountCoolingDown(account) &&
|
|
675
722
|
this.isCircuitAvailable(account);
|
|
676
723
|
return {
|
|
@@ -887,6 +934,19 @@ export class AccountManager {
|
|
|
887
934
|
clearAuthFailures(account) {
|
|
888
935
|
account.consecutiveAuthFailures = 0;
|
|
889
936
|
}
|
|
937
|
+
markAuthInvalidated(account, errorCode = "token_invalidated", invalidatedAt = nowMs()) {
|
|
938
|
+
account.authInvalidatedAt = invalidatedAt;
|
|
939
|
+
account.authInvalidationErrorCode = errorCode;
|
|
940
|
+
}
|
|
941
|
+
clearAuthInvalidation(account) {
|
|
942
|
+
delete account.authInvalidatedAt;
|
|
943
|
+
delete account.authInvalidationErrorCode;
|
|
944
|
+
}
|
|
945
|
+
isAccountAuthInvalidated(account) {
|
|
946
|
+
return (typeof account.authInvalidatedAt === "number" &&
|
|
947
|
+
Number.isFinite(account.authInvalidatedAt) &&
|
|
948
|
+
account.authInvalidatedAt > 0);
|
|
949
|
+
}
|
|
890
950
|
getAccountByIdentity(candidate, auth) {
|
|
891
951
|
const index = findAccountIndexByIdentity(this.accounts, candidate, auth);
|
|
892
952
|
if (index === undefined) {
|
|
@@ -910,6 +970,7 @@ export class AccountManager {
|
|
|
910
970
|
account.refreshToken = auth.refresh;
|
|
911
971
|
account.access = auth.access;
|
|
912
972
|
account.expires = auth.expires;
|
|
973
|
+
this.clearAuthInvalidation(account);
|
|
913
974
|
const tokenAccountId = extractAccountId(auth.access)?.trim() || undefined;
|
|
914
975
|
if (tokenAccountId &&
|
|
915
976
|
shouldUpdateAccountIdFromToken(account.accountIdSource, account.accountId)) {
|
|
@@ -966,6 +1027,22 @@ export class AccountManager {
|
|
|
966
1027
|
account.accessToken = disk.accessToken;
|
|
967
1028
|
account.expiresAt = disk.expiresAt;
|
|
968
1029
|
}
|
|
1030
|
+
const diskInvalidatedAt = disk.authInvalidatedAt;
|
|
1031
|
+
const diskHasValidInvalidation = typeof diskInvalidatedAt === "number" &&
|
|
1032
|
+
Number.isFinite(diskInvalidatedAt) &&
|
|
1033
|
+
diskInvalidatedAt > 0;
|
|
1034
|
+
const accountHasValidInvalidation = typeof account.authInvalidatedAt === "number" &&
|
|
1035
|
+
Number.isFinite(account.authInvalidatedAt) &&
|
|
1036
|
+
account.authInvalidatedAt > 0;
|
|
1037
|
+
if (diskHasValidInvalidation && !accountHasValidInvalidation) {
|
|
1038
|
+
// Ordinary saves must not erase an invalidation written by another
|
|
1039
|
+
// AccountManager. Successful refresh persistence explicitly deletes
|
|
1040
|
+
// this marker in commitRefreshedAuth; this reconciliation path does not.
|
|
1041
|
+
account.authInvalidatedAt = diskInvalidatedAt;
|
|
1042
|
+
if (disk.authInvalidationErrorCode) {
|
|
1043
|
+
account.authInvalidationErrorCode = disk.authInvalidationErrorCode;
|
|
1044
|
+
}
|
|
1045
|
+
}
|
|
969
1046
|
}
|
|
970
1047
|
return snapshot;
|
|
971
1048
|
}
|
|
@@ -1010,26 +1087,36 @@ export class AccountManager {
|
|
|
1010
1087
|
}
|
|
1011
1088
|
const snapshot = {
|
|
1012
1089
|
version: 3,
|
|
1013
|
-
accounts: this.accounts.map((account) =>
|
|
1014
|
-
|
|
1015
|
-
|
|
1016
|
-
|
|
1017
|
-
|
|
1018
|
-
|
|
1019
|
-
|
|
1020
|
-
|
|
1021
|
-
|
|
1022
|
-
|
|
1023
|
-
|
|
1024
|
-
|
|
1025
|
-
|
|
1026
|
-
|
|
1027
|
-
:
|
|
1028
|
-
|
|
1029
|
-
|
|
1030
|
-
|
|
1031
|
-
|
|
1032
|
-
|
|
1090
|
+
accounts: this.accounts.map((account) => {
|
|
1091
|
+
const hasValidAuthInvalidation = this.isAccountAuthInvalidated(account);
|
|
1092
|
+
return {
|
|
1093
|
+
recordId: account.recordId,
|
|
1094
|
+
accountId: account.accountId,
|
|
1095
|
+
accountIdSource: account.accountIdSource,
|
|
1096
|
+
accountLabel: account.accountLabel,
|
|
1097
|
+
email: account.email,
|
|
1098
|
+
refreshToken: account.refreshToken,
|
|
1099
|
+
accessToken: account.access,
|
|
1100
|
+
expiresAt: account.expires,
|
|
1101
|
+
enabled: account.enabled === false ? false : undefined,
|
|
1102
|
+
addedAt: account.addedAt,
|
|
1103
|
+
lastUsed: account.lastUsed,
|
|
1104
|
+
lastSwitchReason: account.lastSwitchReason,
|
|
1105
|
+
rateLimitResetTimes: Object.keys(account.rateLimitResetTimes).length > 0
|
|
1106
|
+
? account.rateLimitResetTimes
|
|
1107
|
+
: undefined,
|
|
1108
|
+
coolingDownUntil: account.coolingDownUntil,
|
|
1109
|
+
cooldownReason: account.cooldownReason,
|
|
1110
|
+
authInvalidatedAt: hasValidAuthInvalidation
|
|
1111
|
+
? account.authInvalidatedAt
|
|
1112
|
+
: undefined,
|
|
1113
|
+
authInvalidationErrorCode: hasValidAuthInvalidation
|
|
1114
|
+
? account.authInvalidationErrorCode
|
|
1115
|
+
: undefined,
|
|
1116
|
+
workspaces: account.workspaces,
|
|
1117
|
+
currentWorkspaceIndex: account.currentWorkspaceIndex,
|
|
1118
|
+
};
|
|
1119
|
+
}),
|
|
1033
1120
|
activeIndex,
|
|
1034
1121
|
activeIndexByFamily,
|
|
1035
1122
|
};
|
|
@@ -1072,6 +1159,8 @@ export class AccountManager {
|
|
|
1072
1159
|
storedAccount.email = nextEmail;
|
|
1073
1160
|
}
|
|
1074
1161
|
storedAccount.enabled = undefined;
|
|
1162
|
+
delete storedAccount.authInvalidatedAt;
|
|
1163
|
+
delete storedAccount.authInvalidationErrorCode;
|
|
1075
1164
|
delete storedAccount.coolingDownUntil;
|
|
1076
1165
|
delete storedAccount.cooldownReason;
|
|
1077
1166
|
const liveAccount = this.getAccountByIdentity(source, auth);
|
|
@@ -1087,6 +1176,8 @@ export class AccountManager {
|
|
|
1087
1176
|
coolingDownUntil: liveAccount.coolingDownUntil,
|
|
1088
1177
|
cooldownReason: liveAccount.cooldownReason,
|
|
1089
1178
|
consecutiveAuthFailures: liveAccount.consecutiveAuthFailures,
|
|
1179
|
+
authInvalidatedAt: liveAccount.authInvalidatedAt,
|
|
1180
|
+
authInvalidationErrorCode: liveAccount.authInvalidationErrorCode,
|
|
1090
1181
|
};
|
|
1091
1182
|
this.updateFromAuth(liveAccount, auth);
|
|
1092
1183
|
liveAccount.enabled = true;
|
|
@@ -1106,6 +1197,20 @@ export class AccountManager {
|
|
|
1106
1197
|
liveAccount.enabled = previousLiveAccountState.enabled;
|
|
1107
1198
|
liveAccount.consecutiveAuthFailures =
|
|
1108
1199
|
previousLiveAccountState.consecutiveAuthFailures;
|
|
1200
|
+
if (previousLiveAccountState.authInvalidatedAt === undefined) {
|
|
1201
|
+
delete liveAccount.authInvalidatedAt;
|
|
1202
|
+
}
|
|
1203
|
+
else {
|
|
1204
|
+
liveAccount.authInvalidatedAt =
|
|
1205
|
+
previousLiveAccountState.authInvalidatedAt;
|
|
1206
|
+
}
|
|
1207
|
+
if (previousLiveAccountState.authInvalidationErrorCode === undefined) {
|
|
1208
|
+
delete liveAccount.authInvalidationErrorCode;
|
|
1209
|
+
}
|
|
1210
|
+
else {
|
|
1211
|
+
liveAccount.authInvalidationErrorCode =
|
|
1212
|
+
previousLiveAccountState.authInvalidationErrorCode;
|
|
1213
|
+
}
|
|
1109
1214
|
if (previousLiveAccountState.coolingDownUntil === undefined) {
|
|
1110
1215
|
delete liveAccount.coolingDownUntil;
|
|
1111
1216
|
}
|
|
@@ -1151,7 +1256,7 @@ export class AccountManager {
|
|
|
1151
1256
|
}
|
|
1152
1257
|
getMinWaitTimeForFamily(family, model) {
|
|
1153
1258
|
const now = nowMs();
|
|
1154
|
-
const enabledAccounts = this.accounts.filter((account) => account.enabled !== false);
|
|
1259
|
+
const enabledAccounts = this.accounts.filter((account) => account.enabled !== false && !this.isAccountAuthInvalidated(account));
|
|
1155
1260
|
const available = enabledAccounts.filter((account) => {
|
|
1156
1261
|
clearExpiredRateLimits(account);
|
|
1157
1262
|
return (!isRateLimitedForFamily(account, family, model) &&
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"account-pool-write.d.ts","sourceRoot":"","sources":["../../../lib/codex-manager/account-pool-write.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAEpE;;;;;;;;;;;;;GAaG;AACH,MAAM,MAAM,uBAAuB,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,CAAC;AAEzE;;;;;GAKG;AACH,MAAM,WAAW,oBAAoB;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,iBAAiB,CAAC,iBAAiB,CAAC,CAAC;IACvD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC;IACzB,GAAG,EAAE,MAAM,CAAC;CACZ;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CACxC,UAAU,EAAE,SAAS,EAAE,EACvB,SAAS,EAAE,MAAM,GAAG,SAAS,GAC3B,MAAM,CAWR;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACrC,QAAQ,EAAE,IAAI,CAAC,iBAAiB,EAAE,YAAY,CAAC,EAC/C,QAAQ,EAAE,SAAS,EAAE,GAAG,SAAS,GAC/B,SAAS,EAAE,GAAG,SAAS,CAYzB;AAED;;;;GAIG;AACH,wBAAgB,4BAA4B,CAC3C,QAAQ,EAAE,IAAI,CAAC,iBAAiB,EAAE,YAAY,GAAG,uBAAuB,CAAC,EACzE,gBAAgB,EAAE,SAAS,EAAE,GAAG,SAAS,GACvC,MAAM,GAAG,SAAS,CAwBpB;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CACnC,KAAK,EAAE,oBAAoB,GACzB;IAAE,OAAO,EAAE,iBAAiB,CAAC;IAAC,OAAO,EAAE,UAAU,CAAA;CAAE,
|
|
1
|
+
{"version":3,"file":"account-pool-write.d.ts","sourceRoot":"","sources":["../../../lib/codex-manager/account-pool-write.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAEpE;;;;;;;;;;;;;GAaG;AACH,MAAM,MAAM,uBAAuB,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,CAAC;AAEzE;;;;;GAKG;AACH,MAAM,WAAW,oBAAoB;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,iBAAiB,CAAC,iBAAiB,CAAC,CAAC;IACvD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC;IACzB,GAAG,EAAE,MAAM,CAAC;CACZ;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CACxC,UAAU,EAAE,SAAS,EAAE,EACvB,SAAS,EAAE,MAAM,GAAG,SAAS,GAC3B,MAAM,CAWR;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACrC,QAAQ,EAAE,IAAI,CAAC,iBAAiB,EAAE,YAAY,CAAC,EAC/C,QAAQ,EAAE,SAAS,EAAE,GAAG,SAAS,GAC/B,SAAS,EAAE,GAAG,SAAS,CAYzB;AAED;;;;GAIG;AACH,wBAAgB,4BAA4B,CAC3C,QAAQ,EAAE,IAAI,CAAC,iBAAiB,EAAE,YAAY,GAAG,uBAAuB,CAAC,EACzE,gBAAgB,EAAE,SAAS,EAAE,GAAG,SAAS,GACvC,MAAM,GAAG,SAAS,CAwBpB;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CACnC,KAAK,EAAE,oBAAoB,GACzB;IAAE,OAAO,EAAE,iBAAiB,CAAC;IAAC,OAAO,EAAE,UAAU,CAAA;CAAE,CAwBrD;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAClC,QAAQ,EAAE,iBAAiB,EAC3B,KAAK,EAAE,oBAAoB,GACzB;IAAE,OAAO,EAAE,iBAAiB,CAAC;IAAC,OAAO,EAAE,SAAS,GAAG,SAAS,CAAA;CAAE,CA+ChE;AAED;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE;IAC/C,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9B,MAAM,EAAE,oBAAoB,EAAE,CAAC;IAC/B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,wBAAwB,EAAE,CACzB,QAAQ,EAAE,iBAAiB,EAAE,EAC7B,QAAQ,EAAE;QACT,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,YAAY,CAAC,EAAE,MAAM,CAAC;KACtB,EACD,OAAO,EAAE;QAAE,wCAAwC,EAAE,OAAO,CAAA;KAAE,KAC1D,MAAM,GAAG,SAAS,CAAC;CACxB,GAAG;IACH,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,uBAAuB,GAAG,IAAI,CAAC;CACxC,CA6CA"}
|
|
@@ -74,6 +74,8 @@ export function buildInsertedAccount(write) {
|
|
|
74
74
|
accessToken: write.accessToken,
|
|
75
75
|
expiresAt: write.expiresAt,
|
|
76
76
|
enabled: true,
|
|
77
|
+
authInvalidatedAt: undefined,
|
|
78
|
+
authInvalidationErrorCode: undefined,
|
|
77
79
|
addedAt: write.now,
|
|
78
80
|
lastUsed: write.now,
|
|
79
81
|
workspaces: write.workspaces,
|
|
@@ -114,6 +116,8 @@ export function buildUpdatedAccount(existing, write) {
|
|
|
114
116
|
accessToken: write.accessToken,
|
|
115
117
|
expiresAt: write.expiresAt,
|
|
116
118
|
enabled: true,
|
|
119
|
+
authInvalidatedAt: undefined,
|
|
120
|
+
authInvalidationErrorCode: undefined,
|
|
117
121
|
lastUsed: write.now,
|
|
118
122
|
workspaces: mergedWorkspaces,
|
|
119
123
|
currentWorkspaceIndex: nextCurrentWorkspaceIndex,
|
|
@@ -195,7 +195,7 @@ export const BACKEND_NUMBER_OPTIONS = [
|
|
|
195
195
|
{
|
|
196
196
|
key: "preemptiveQuotaMaxDeferralMs",
|
|
197
197
|
label: "Max Preemptive Deferral",
|
|
198
|
-
description: "
|
|
198
|
+
description: "Fallback time for quota delay when reset data is unavailable or stale.",
|
|
199
199
|
min: 1_000,
|
|
200
200
|
max: 24 * 60 * 60_000,
|
|
201
201
|
step: 60_000,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../../lib/codex-manager/commands/status.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../../lib/codex-manager/commands/status.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAK1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,EAGN,KAAK,oBAAoB,EACzB,MAAM,0CAA0C,CAAC;AAElD,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,wCAAwC,CAAC;AAC3F,OAAO,KAAK,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAE/E,KAAK,aAAa,GAAG,gBAAgB,GAAG,IAAI,CAAC;AAG7C,MAAM,WAAW,iBAAiB;IACjC,cAAc,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAC9C,cAAc,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;IACpC,YAAY,EAAE,MAAM,OAAO,CAAC,aAAa,CAAC,CAAC;IAC3C,kBAAkB,EAAE,CACnB,OAAO,EAAE,gBAAgB,EACzB,MAAM,CAAC,EAAE,WAAW,KAChB,MAAM,CAAC;IACZ,oBAAoB,EAAE,CACrB,OAAO,EAAE,gBAAgB,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,EAC7C,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,WAAW,KACf,MAAM,GAAG,IAAI,CAAC;IACnB,gCAAgC,CAAC,EAAE,MAAM,OAAO,CAAC,4BAA4B,GAAG,IAAI,CAAC,CAAC;IACtF,iBAAiB,CAAC,EAAE,MAAM,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC,CAAC;IAC9D,mBAAmB,CAAC,EAAE,MAAM,oBAAoB,GAAG,IAAI,CAAC;IACxD,cAAc,CAAC,EAAE,MAAM,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IACtD,oBAAoB,CAAC,EAAE,MAAM,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAC3D,MAAM,CAAC,EAAE,MAAM,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,8FAA8F;IAC9F,IAAI,CAAC,EAAE,OAAO,CAAC;CACf;AA2ED,wBAAsB,gBAAgB,CACrC,IAAI,EAAE,iBAAiB,GACrB,OAAO,CAAC,MAAM,CAAC,CAwOjB;AAED,MAAM,WAAW,mBAAmB;IACnC,mBAAmB,EAAE,aAAa,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACjE,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACpC;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,mBAAmB,GAAG,MAAM,CAQpE"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { formatAccountLabel, formatCooldown, formatWaitTime, formatWorkspaceLines, } from "../../accounts.js";
|
|
1
|
+
import { AUTH_INVALIDATION_MARKER, formatAccountLabel, formatCooldown, formatWaitTime, formatWorkspaceLines, } from "../../accounts.js";
|
|
2
2
|
import { evaluateForecastAccounts, recommendForecastAccount, } from "../../forecast.js";
|
|
3
3
|
import { findQuotaCacheEntryForAccount, isQuotaCacheEntryExhausted, } from "../../quota-readiness.js";
|
|
4
4
|
import { resolveAccountCurrentMarkers, resolveRuntimeCurrentAccount, } from "../../runtime/runtime-current-account.js";
|
|
@@ -28,6 +28,10 @@ function buildAccountMarkers(account, index, activeIndex, runtimeCurrent, now, q
|
|
|
28
28
|
markers.push(...resolveAccountCurrentMarkers(index, activeIndex, runtimeCurrent));
|
|
29
29
|
if (account.enabled === false)
|
|
30
30
|
markers.push("disabled");
|
|
31
|
+
if (typeof account.authInvalidatedAt === "number" &&
|
|
32
|
+
Number.isFinite(account.authInvalidatedAt)) {
|
|
33
|
+
markers.push(AUTH_INVALIDATION_MARKER);
|
|
34
|
+
}
|
|
31
35
|
if (formatRateLimitEntry(account, now, "codex"))
|
|
32
36
|
markers.push("rate-limited");
|
|
33
37
|
const quotaEntry = findQuotaCacheEntryForAccount(quotaCache, account, allAccounts);
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export declare function resolveUninstallPaths(platform?: NodeJS.Platform, env?: NodeJS.ProcessEnv, home?: string): {
|
|
2
2
|
configPath: string;
|
|
3
3
|
cacheNodeModules: string;
|
|
4
|
+
cacheLegacyNodeModules: string;
|
|
4
5
|
cacheBunLock: string;
|
|
5
6
|
};
|
|
6
7
|
export declare function removePluginFromList(list: unknown[]): unknown[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uninstall.d.ts","sourceRoot":"","sources":["../../../../lib/codex-manager/commands/uninstall.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"uninstall.d.ts","sourceRoot":"","sources":["../../../../lib/codex-manager/commands/uninstall.ts"],"names":[],"mappings":"AAWA,wBAAgB,qBAAqB,CACpC,QAAQ,GAAE,MAAM,CAAC,QAA2B,EAC5C,GAAG,GAAE,MAAM,CAAC,UAAwB,EACpC,IAAI,GAAE,MAAkB;;;;;EAwBxB;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE,CAU/D;AAED,KAAK,mBAAmB,GAAG;IAC1B,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,OAAO,CAAC;IACd,aAAa,EAAE,OAAO,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAC5B;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,mBAAmB,CAAA;CAAE,GAC1C;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC7B;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AA0BnD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,mBAAmB,CA2BtE;AAED,MAAM,MAAM,oBAAoB,GAAG;IAClC,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,aAAa,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACpC,MAAM,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE;QAC1B,MAAM,EAAE,IAAI,CAAC;QACb,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;KAC3B,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpB,KAAK,CAAC,EAAE,UAAU,CAAC,OAAO,qBAAqB,CAAC,CAAC;CACjD,CAAC;AAmBF,wBAAsB,mBAAmB,CACxC,IAAI,EAAE,MAAM,EAAE,EACd,IAAI,GAAE,oBAAyB,GAC7B,OAAO,CAAC,MAAM,CAAC,CAqNjB"}
|
|
@@ -5,6 +5,8 @@ import process from "node:process";
|
|
|
5
5
|
import { withFileOperationRetry } from "../../fs-retry.js";
|
|
6
6
|
import { unbindCodexAppRuntimeRotation } from "../../runtime/app-bind.js";
|
|
7
7
|
const PLUGIN_NAME = "codex-multi-auth";
|
|
8
|
+
const LEGACY_PLUGIN_NAME = "@ndycode/codex-multi-auth";
|
|
9
|
+
const PLUGIN_NAMES = [PLUGIN_NAME, LEGACY_PLUGIN_NAME];
|
|
8
10
|
export function resolveUninstallPaths(platform = process.platform, env = process.env, home = homedir()) {
|
|
9
11
|
const isWindows = platform === "win32";
|
|
10
12
|
const appData = (env["APPDATA"] ?? "").trim();
|
|
@@ -20,6 +22,7 @@ export function resolveUninstallPaths(platform = process.platform, env = process
|
|
|
20
22
|
return {
|
|
21
23
|
configPath: join(configDir, "Codex.json"),
|
|
22
24
|
cacheNodeModules: join(cacheDir, "node_modules", PLUGIN_NAME),
|
|
25
|
+
cacheLegacyNodeModules: join(cacheDir, "node_modules", "@ndycode", "codex-multi-auth"),
|
|
23
26
|
cacheBunLock: join(cacheDir, "bun.lock"),
|
|
24
27
|
};
|
|
25
28
|
}
|
|
@@ -30,7 +33,7 @@ export function removePluginFromList(list) {
|
|
|
30
33
|
return list.filter(Boolean).filter((entry) => {
|
|
31
34
|
if (typeof entry !== "string")
|
|
32
35
|
return true;
|
|
33
|
-
return entry
|
|
36
|
+
return !PLUGIN_NAMES.some((pluginName) => entry === pluginName || entry.startsWith(`${pluginName}@`));
|
|
34
37
|
});
|
|
35
38
|
}
|
|
36
39
|
function printUninstallUsage() {
|
|
@@ -51,6 +54,7 @@ function printUninstallUsage() {
|
|
|
51
54
|
"so cleanup must be initiated manually):",
|
|
52
55
|
" 1. codex-multi-auth uninstall # remove residual artifacts",
|
|
53
56
|
" 2. npm uninstall -g codex-multi-auth # remove the package itself",
|
|
57
|
+
" (@ndycode/codex-multi-auth is the legacy scoped package name.)",
|
|
54
58
|
].join("\n"));
|
|
55
59
|
}
|
|
56
60
|
export function parseUninstallArgs(args) {
|
|
@@ -199,6 +203,9 @@ export async function runUninstallCommand(args, deps = {}) {
|
|
|
199
203
|
try {
|
|
200
204
|
if (dryRun) {
|
|
201
205
|
log(`[dry-run] Would remove ${paths.cacheNodeModules}`);
|
|
206
|
+
if (paths.cacheLegacyNodeModules) {
|
|
207
|
+
log(`[dry-run] Would remove ${paths.cacheLegacyNodeModules}`);
|
|
208
|
+
}
|
|
202
209
|
if (bunLockSafeToRemove) {
|
|
203
210
|
log(`[dry-run] Would remove ${paths.cacheBunLock}`);
|
|
204
211
|
}
|
|
@@ -208,6 +215,9 @@ export async function runUninstallCommand(args, deps = {}) {
|
|
|
208
215
|
}
|
|
209
216
|
else {
|
|
210
217
|
await withFileOperationRetry(() => rm(paths.cacheNodeModules, { recursive: true, force: true }));
|
|
218
|
+
if (paths.cacheLegacyNodeModules) {
|
|
219
|
+
await withFileOperationRetry(() => rm(paths.cacheLegacyNodeModules, { recursive: true, force: true }));
|
|
220
|
+
}
|
|
211
221
|
if (bunLockSafeToRemove) {
|
|
212
222
|
await withFileOperationRetry(() => rm(paths.cacheBunLock, { force: true }));
|
|
213
223
|
}
|
|
@@ -252,6 +262,7 @@ export async function runUninstallCommand(args, deps = {}) {
|
|
|
252
262
|
if (warnings.length > 0) {
|
|
253
263
|
log(`warnings: ${warnings.length} step(s) skipped (see above)`);
|
|
254
264
|
}
|
|
265
|
+
log("To remove the installed package itself, run `npm uninstall -g codex-multi-auth`; `@ndycode/codex-multi-auth` is the legacy package name and does not remove the current package.");
|
|
255
266
|
}
|
|
256
267
|
return partialFailure ? 1 : 0;
|
|
257
268
|
}
|
|
@@ -23,7 +23,7 @@ export interface WhySelectedCommandDeps {
|
|
|
23
23
|
setStoragePath: (path: string | null) => void;
|
|
24
24
|
loadAccounts: () => Promise<AccountStorageV3 | null>;
|
|
25
25
|
resolveActiveIndex: (storage: AccountStorageV3, family?: "codex") => number;
|
|
26
|
-
selectAccountTraced: (storage: AccountStorageV3) => HybridSelectionTraceResult
|
|
26
|
+
selectAccountTraced: (storage: AccountStorageV3) => HybridSelectionTraceResult | Promise<HybridSelectionTraceResult>;
|
|
27
27
|
loadRuntimeObservabilitySnapshot?: () => Promise<WhySelectedRuntimeSnapshot | null>;
|
|
28
28
|
sanitizeEmail?: (email: string | undefined) => string | undefined;
|
|
29
29
|
logInfo?: (message: string) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"why-selected.d.ts","sourceRoot":"","sources":["../../../../lib/codex-manager/commands/why-selected.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,KAAK,EAEX,0BAA0B,EAC1B,MAAM,mBAAmB,CAAC;AAE3B,MAAM,WAAW,qBAAqB;IACrC,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE,KAAK,GAAG,MAAM,CAAC;CACrB;AAED,KAAK,gBAAgB,CAAC,CAAC,IACpB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,CAAC,CAAA;CAAE,GACxB;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAElC,UAAU,0BAA0B;IACnC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,sBAAsB;IACtC,oBAAoB,EAAE,CACrB,IAAI,EAAE,MAAM,EAAE,KACV,gBAAgB,CAAC,qBAAqB,CAAC,CAAC;IAC7C,qBAAqB,EAAE,MAAM,IAAI,CAAC;IAClC,cAAc,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAC9C,YAAY,EAAE,MAAM,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAC;IACrD,kBAAkB,EAAE,CAAC,OAAO,EAAE,gBAAgB,EAAE,MAAM,CAAC,EAAE,OAAO,KAAK,MAAM,CAAC;IAC5E,mBAAmB,EAAE,CACpB,OAAO,EAAE,gBAAgB,KACrB,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"why-selected.d.ts","sourceRoot":"","sources":["../../../../lib/codex-manager/commands/why-selected.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,KAAK,EAEX,0BAA0B,EAC1B,MAAM,mBAAmB,CAAC;AAE3B,MAAM,WAAW,qBAAqB;IACrC,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE,KAAK,GAAG,MAAM,CAAC;CACrB;AAED,KAAK,gBAAgB,CAAC,CAAC,IACpB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,CAAC,CAAA;CAAE,GACxB;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAElC,UAAU,0BAA0B;IACnC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,sBAAsB;IACtC,oBAAoB,EAAE,CACrB,IAAI,EAAE,MAAM,EAAE,KACV,gBAAgB,CAAC,qBAAqB,CAAC,CAAC;IAC7C,qBAAqB,EAAE,MAAM,IAAI,CAAC;IAClC,cAAc,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAC9C,YAAY,EAAE,MAAM,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAC;IACrD,kBAAkB,EAAE,CAAC,OAAO,EAAE,gBAAgB,EAAE,MAAM,CAAC,EAAE,OAAO,KAAK,MAAM,CAAC;IAC5E,mBAAmB,EAAE,CACpB,OAAO,EAAE,gBAAgB,KACrB,0BAA0B,GAAG,OAAO,CAAC,0BAA0B,CAAC,CAAC;IACtE,gCAAgC,CAAC,EAAE,MAAM,OAAO,CAAC,0BAA0B,GAAG,IAAI,CAAC,CAAC;IACpF,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,KAAK,MAAM,GAAG,SAAS,CAAC;IAClE,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACrC;AA4DD,wBAAsB,qBAAqB,CAC1C,IAAI,EAAE,MAAM,EAAE,EACd,IAAI,EAAE,sBAAsB,GAC1B,OAAO,CAAC,MAAM,CAAC,CAsJjB;AAED,wBAAgB,oBAAoB,CACnC,IAAI,EAAE,MAAM,EAAE,GACZ,gBAAgB,CAAC,qBAAqB,CAAC,CAiCzC;AAED,wBAAgB,qBAAqB,IAAI,IAAI,CAc5C"}
|
|
@@ -58,7 +58,7 @@ export async function runWhySelectedCommand(args, deps) {
|
|
|
58
58
|
}
|
|
59
59
|
return 1;
|
|
60
60
|
}
|
|
61
|
-
const trace = deps.selectAccountTraced(storage);
|
|
61
|
+
const trace = await deps.selectAccountTraced(storage);
|
|
62
62
|
const candidates = trace.candidates.map((candidate) => buildCandidateRecord(storage, candidate, sanitizeEmail));
|
|
63
63
|
let selectedRecord = null;
|
|
64
64
|
if (trace.selected) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"quota-formatters.d.ts","sourceRoot":"","sources":["../../../../lib/codex-manager/formatters/quota-formatters.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAC5E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EACN,KAAK,kBAAkB,EACvB,uBAAuB,EAGvB,MAAM,sBAAsB,CAAC;AAY9B,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAmCzD;AAED;;;;;;GAMG;AACH,wBAAgB,+BAA+B,CAC9C,QAAQ,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,uBAAuB,CAAC,CAAC,EAC7D,QAAQ,EAAE,wBAAwB,EAClC,GAAG,SAAa,GACd,MAAM,
|
|
1
|
+
{"version":3,"file":"quota-formatters.d.ts","sourceRoot":"","sources":["../../../../lib/codex-manager/formatters/quota-formatters.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAC5E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EACN,KAAK,kBAAkB,EACvB,uBAAuB,EAGvB,MAAM,sBAAsB,CAAC;AAY9B,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAmCzD;AAED;;;;;;GAMG;AACH,wBAAgB,+BAA+B,CAC9C,QAAQ,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,uBAAuB,CAAC,CAAC,EAC7D,QAAQ,EAAE,wBAAwB,EAClC,GAAG,SAAa,GACd,MAAM,CAIR;AAED,wBAAgB,yBAAyB,CACxC,KAAK,EAAE,eAAe,GACpB,kBAAkB,CAgBpB;AA8BD;;;;;;GAMG;AACH,MAAM,WAAW,yBAAyB;IACzC,SAAS,CAAC,EAAE,OAAO,CAAC;CACpB;AAgCD,wBAAgB,0BAA0B,CACzC,QAAQ,EAAE,kBAAkB,EAC5B,GAAG,SAAa,EAChB,OAAO,GAAE,yBAA8B,GACrC,MAAM,CA6CR;AAED,wBAAgB,yBAAyB,CACxC,KAAK,EAAE,eAAe,EACtB,GAAG,SAAa,EAChB,OAAO,GAAE,yBAA8B,GACrC,MAAM,CA6CR"}
|