oc-codex-multi-auth 6.17.0 → 6.19.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 (46) hide show
  1. package/README.md +10 -6
  2. package/config/README.md +1 -1
  3. package/dist/lib/auth/token-utils.d.ts +21 -0
  4. package/dist/lib/auth/token-utils.d.ts.map +1 -1
  5. package/dist/lib/auth/token-utils.js +30 -0
  6. package/dist/lib/auth/token-utils.js.map +1 -1
  7. package/dist/lib/codex-reset.d.ts +13 -0
  8. package/dist/lib/codex-reset.d.ts.map +1 -1
  9. package/dist/lib/codex-reset.js +20 -4
  10. package/dist/lib/codex-reset.js.map +1 -1
  11. package/dist/lib/codex-usage.d.ts +64 -0
  12. package/dist/lib/codex-usage.d.ts.map +1 -1
  13. package/dist/lib/codex-usage.js +128 -0
  14. package/dist/lib/codex-usage.js.map +1 -1
  15. package/dist/lib/config.d.ts +2 -0
  16. package/dist/lib/config.d.ts.map +1 -1
  17. package/dist/lib/config.js +7 -1
  18. package/dist/lib/config.js.map +1 -1
  19. package/dist/lib/prompts/codex.d.ts.map +1 -1
  20. package/dist/lib/prompts/codex.js +10 -11
  21. package/dist/lib/prompts/codex.js.map +1 -1
  22. package/dist/lib/quota-notifications.d.ts +1 -1
  23. package/dist/lib/quota-notifications.d.ts.map +1 -1
  24. package/dist/lib/quota-notifications.js +42 -13
  25. package/dist/lib/quota-notifications.js.map +1 -1
  26. package/dist/lib/request/fetch-helpers.d.ts.map +1 -1
  27. package/dist/lib/request/fetch-helpers.js +13 -2
  28. package/dist/lib/request/fetch-helpers.js.map +1 -1
  29. package/dist/lib/request/helpers/responses-lite.d.ts.map +1 -1
  30. package/dist/lib/request/helpers/responses-lite.js +8 -26
  31. package/dist/lib/request/helpers/responses-lite.js.map +1 -1
  32. package/dist/lib/schemas.d.ts +1 -0
  33. package/dist/lib/schemas.d.ts.map +1 -1
  34. package/dist/lib/schemas.js +1 -0
  35. package/dist/lib/schemas.js.map +1 -1
  36. package/dist/lib/storage/normalize.d.ts.map +1 -1
  37. package/dist/lib/storage/normalize.js +50 -5
  38. package/dist/lib/storage/normalize.js.map +1 -1
  39. package/dist/lib/tools/codex-limits.d.ts.map +1 -1
  40. package/dist/lib/tools/codex-limits.js +28 -2
  41. package/dist/lib/tools/codex-limits.js.map +1 -1
  42. package/dist/lib/tui-status.d.ts.map +1 -1
  43. package/dist/lib/tui-status.js +176 -46
  44. package/dist/lib/tui-status.js.map +1 -1
  45. package/package.json +1 -1
  46. package/scripts/install-oc-codex-multi-auth-core.js +106 -19
@@ -1,3 +1,4 @@
1
+ import { maskEmailForDisplay } from "./account-display.js";
1
2
  import { getEffortSuffix } from "./request/helpers/effort-suffix.js";
2
3
  import { formatPlanType } from "./auth/plan-tier.js";
3
4
  const variantSuffixes = [
@@ -10,11 +11,15 @@ const variantSuffixes = [
10
11
  "none",
11
12
  ];
12
13
  const STATUS_SEPARATOR = ` ${String.fromCharCode(183)} `;
14
+ const MS_PER_DAY = 24 * 60 * 60 * 1000;
13
15
  const WARNING_LIMIT_LEFT_PERCENT = 25;
14
16
  const DANGER_LIMIT_LEFT_PERCENT = 10;
15
17
  const MASKED_EMAIL = "*****";
16
- const EMAIL_PATTERN = /[^\s(),<>]+@[^\s(),<>]+/;
17
- const EMAIL_PATTERN_GLOBAL = /[^\s(),<>]+@[^\s(),<>]+/g;
18
+ const FLAT_MASKED_HINT = `[${MASKED_EMAIL}]`;
19
+ // Whitespace, brackets, `,` and `;` end a token: none can appear in an
20
+ // address, and all of them separate one address from the next in a label.
21
+ const EMAIL_PATTERN = /[^\s(),<>;]+@[^\s(),<>;]+/;
22
+ const TEXT_TOKEN_GLOBAL = /[^\s(),<>;]+/g;
18
23
  function isRecord(value) {
19
24
  return value !== null && typeof value === "object" && !Array.isArray(value);
20
25
  }
@@ -128,14 +133,62 @@ function extractEmailFromLabel(label) {
128
133
  const match = label?.match(EMAIL_PATTERN);
129
134
  return match?.[0];
130
135
  }
136
+ /**
137
+ * Mask one token that carries an `@`.
138
+ *
139
+ * `maskEmailForDisplay` preserves everything from the first `@` onward, which
140
+ * is the right trade for a single address - `ne***@example.com` names an
141
+ * account without disclosing it - and the wrong one for a token holding two.
142
+ * `alice@example.com/bob@corp.com` is a single token, because `/` is not a
143
+ * separator anything here splits on, and the tail preserved would be the
144
+ * whole second address. A token carrying more than one `@` is therefore
145
+ * flattened, since no part of it is known to be safe to keep.
146
+ */
147
+ function maskEmailToken(token) {
148
+ const first = token.indexOf("@");
149
+ if (first <= 0)
150
+ return MASKED_EMAIL;
151
+ if (token.indexOf("@", first + 1) !== -1)
152
+ return MASKED_EMAIL;
153
+ return maskEmailForDisplay(token) ?? MASKED_EMAIL;
154
+ }
155
+ /**
156
+ * Render the bracketed account hint.
157
+ *
158
+ * With masking on, a value containing an address becomes that address masked,
159
+ * rather than having the address substituted inside the value. What reaches
160
+ * here is free text - `accountEmail` is whatever the snapshot on disk holds -
161
+ * and preserving what surrounds an address preserves exactly the identifying
162
+ * text masking exists to remove: substituting in place would render "Neil
163
+ * Smith neil@example.com" as "Neil Smith ne***@example.com". A value with no
164
+ * address in it flattens for the same reason.
165
+ */
131
166
  function formatAccountEmail(email, maskEmail) {
132
167
  const trimmed = email?.trim() || undefined;
133
- return trimmed ? `[${maskEmail ? MASKED_EMAIL : trimmed}]` : undefined;
168
+ if (!trimmed)
169
+ return undefined;
170
+ if (!maskEmail)
171
+ return `[${trimmed}]`;
172
+ const address = extractEmailFromLabel(trimmed);
173
+ return `[${address ? maskEmailToken(address) : MASKED_EMAIL}]`;
134
174
  }
175
+ /**
176
+ * Mask every address in text whose surrounding structure is worth keeping.
177
+ *
178
+ * Unlike the hint above, this is used on the account label in the details
179
+ * dialog, where "Account 2 (…)" is the structure that makes the line
180
+ * readable. It walks tokens rather than address matches: a match can span two
181
+ * addresses joined by punctuation the address class does not exclude, and
182
+ * replacing that match with a partial mask leaves the second address intact.
183
+ * Every token holding an `@` is masked, so no address survives whatever joins
184
+ * them.
185
+ */
135
186
  function maskEmailsInText(value, maskEmail) {
136
187
  if (!value)
137
188
  return undefined;
138
- return maskEmail ? value.replace(EMAIL_PATTERN_GLOBAL, MASKED_EMAIL) : value;
189
+ if (!maskEmail)
190
+ return value;
191
+ return value.replace(TEXT_TOKEN_GLOBAL, (token) => token.includes("@") ? maskEmailToken(token) : token);
139
192
  }
140
193
  function formatQuotaLimit(limit, resetLimit, includeReset) {
141
194
  if (!isPercent(limit.leftPercent))
@@ -145,23 +198,38 @@ function formatQuotaLimit(limit, resetLimit, includeReset) {
145
198
  const reset = includeReset && limit === resetLimit ? formatResetTime(limit.resetAtMs) : undefined;
146
199
  return reset ? `${base} resets ${reset}` : base;
147
200
  }
148
- function formatAccountHint(quota, maskEmail = false) {
201
+ /**
202
+ * The account hint, longest form first.
203
+ *
204
+ * A masked partial hint is about twelve characters longer than the flat
205
+ * `[*****]` it replaced, and the candidate ladder drops the account hint
206
+ * entirely when a rung does not fit. Offering the flat form as a second try
207
+ * at the same rung is what stops turning masking on from removing the account
208
+ * from a 78- or 96-column status line, which would identify the account less
209
+ * rather than more.
210
+ */
211
+ function formatAccountHints(quota, maskEmail = false) {
149
212
  if (quota.type !== "ready")
150
- return undefined;
213
+ return [];
151
214
  if (typeof quota.accountIndex !== "number" ||
152
215
  !Number.isFinite(quota.accountIndex)) {
153
- return undefined;
216
+ return [];
154
217
  }
155
218
  if (typeof quota.accountCount === "number" &&
156
219
  Number.isFinite(quota.accountCount) &&
157
220
  quota.accountCount <= 1) {
158
- return undefined;
221
+ return [];
159
222
  }
160
223
  const email = formatAccountEmail(quota.accountEmail, maskEmail) ??
161
224
  formatAccountEmail(extractEmailFromLabel(quota.accountLabel), maskEmail);
162
- if (email)
163
- return email;
164
- return `A${quota.accountIndex}`;
225
+ if (!email)
226
+ return [`A${quota.accountIndex}`];
227
+ // Only when masking is on: the flat form is a mask, and offering it as a
228
+ // narrow-width fallback with masking off would print `*****` for someone
229
+ // who asked to see the address.
230
+ return maskEmail && email !== FLAT_MASKED_HINT
231
+ ? [email, FLAT_MASKED_HINT]
232
+ : [email];
165
233
  }
166
234
  function findResetLimitForStatus(limits) {
167
235
  const eligible = limits.filter((limit) => isPercent(limit.leftPercent));
@@ -196,22 +264,41 @@ function formatQuota(quota) {
196
264
  return "limits ?";
197
265
  return undefined;
198
266
  }
267
+ /**
268
+ * Return the character budget for the prompt status line at a given terminal
269
+ * width. Budgets scale to about 54% of each tier's minimum width so the
270
+ * day-context reset labels and typical account hints fit.
271
+ */
199
272
  function maxStatusChars(width) {
273
+ // Budgets are ~54% of each named tier's minimum width (up from ~40%): the
274
+ // day-context reset labels and typical account hints no longer fit at
275
+ // 40%, which degraded informative candidates on mid-width terminals. The
276
+ // last branch is the exception and stays at 12, because 54% of a
277
+ // 40-column terminal leaves nothing for the prompt itself.
278
+ //
279
+ // An unknown width cannot be scaled at all, so it takes the narrowest
280
+ // tier budget rather than a mid-tier one: a 42-character line on the
281
+ // 40-column terminal this branch also covers wraps and pushes the prompt,
282
+ // and there is nothing here to detect that it happened.
200
283
  if (!width || !Number.isFinite(width))
201
284
  return 32;
202
285
  if (width >= 120)
203
- return 48;
286
+ return 64;
204
287
  if (width >= 96)
205
- return 40;
288
+ return 52;
206
289
  if (width >= 78)
207
- return 32;
290
+ return 42;
208
291
  if (width >= 60)
209
- return 22;
210
- return 12;
292
+ return 32;
293
+ // Clamped, not a flat 12: below twelve columns a 12-character budget is
294
+ // wider than the terminal itself, and the line wraps and pushes the
295
+ // prompt. Nothing fits at that size, and printing nothing is the correct
296
+ // answer rather than printing something that does not fit.
297
+ return Math.min(12, width);
211
298
  }
212
299
  export function formatPromptStatusText(params) {
213
300
  const variant = params.variant;
214
- const account = formatAccountHint(params.quota, params.maskEmail);
301
+ const accountForms = formatAccountHints(params.quota, params.maskEmail);
215
302
  const quotaParts = formatQuotaParts(params.quota, true);
216
303
  const quotaPartsWithoutReset = formatQuotaParts(params.quota, false);
217
304
  const quota = quotaParts.length > 0
@@ -222,19 +309,22 @@ export function formatPromptStatusText(params) {
222
309
  ? quotaPartsWithoutReset.join(STATUS_SEPARATOR)
223
310
  : quota;
224
311
  const primaryQuotaWithoutReset = quotaPartsWithoutReset[0] ?? primaryQuota;
312
+ // Each account-bearing rung tries every hint form before the ladder gives
313
+ // up on showing the account at all.
314
+ const withAccount = (rest, prefix) => accountForms.map((form) => [prefix, form, rest].filter(Boolean).join(STATUS_SEPARATOR));
225
315
  const candidates = [
226
- [account, quota].filter(Boolean).join(STATUS_SEPARATOR),
227
- [account, primaryQuota].filter(Boolean).join(STATUS_SEPARATOR),
316
+ ...withAccount(quota),
317
+ ...withAccount(primaryQuota),
228
318
  quota,
229
319
  primaryQuota,
230
- [account, quotaWithoutReset].filter(Boolean).join(STATUS_SEPARATOR),
231
- [account, primaryQuotaWithoutReset].filter(Boolean).join(STATUS_SEPARATOR),
320
+ ...withAccount(quotaWithoutReset),
321
+ ...withAccount(primaryQuotaWithoutReset),
232
322
  quotaWithoutReset,
233
323
  primaryQuotaWithoutReset,
234
- [variant, account, quota].filter(Boolean).join(STATUS_SEPARATOR),
324
+ ...withAccount(quota, variant),
235
325
  [variant, quota].filter(Boolean).join(STATUS_SEPARATOR),
236
326
  variant,
237
- account,
327
+ ...accountForms,
238
328
  ].filter((candidate) => Boolean(candidate));
239
329
  const maxChars = maxStatusChars(params.width);
240
330
  return candidates.find((candidate) => candidate.length <= maxChars) ?? "";
@@ -259,7 +349,16 @@ export function resolveQuotaPromptTone(quota) {
259
349
  return "unknown";
260
350
  return "warning";
261
351
  }
262
- function formatReset(resetAtMs) {
352
+ /**
353
+ * Decompose a reset timestamp once for both renderings below.
354
+ *
355
+ * The compact status line and the quota details dialog word the same instant
356
+ * differently - `Sep 15 02:25` against `02:25 on Sep 15` - but they agree on
357
+ * every decision behind it: the same validity guard, the same 24-hour clock,
358
+ * the same same-day test. Keeping those in one place is what stops the two
359
+ * surfaces drifting apart on which reset is "today".
360
+ */
361
+ function describeReset(resetAtMs) {
263
362
  if (!resetAtMs || !Number.isFinite(resetAtMs) || resetAtMs <= 0) {
264
363
  return undefined;
265
364
  }
@@ -267,34 +366,64 @@ function formatReset(resetAtMs) {
267
366
  if (!Number.isFinite(date.getTime()))
268
367
  return undefined;
269
368
  const now = new Date();
270
- const sameDay = now.getFullYear() === date.getFullYear() &&
271
- now.getMonth() === date.getMonth() &&
272
- now.getDate() === date.getDate();
273
- const time = date.toLocaleTimeString(undefined, {
274
- hour: "2-digit",
275
- minute: "2-digit",
276
- hour12: false,
277
- });
278
- if (sameDay)
279
- return time;
280
- const day = date.toLocaleDateString(undefined, {
369
+ return {
370
+ date,
371
+ time: date.toLocaleTimeString(undefined, {
372
+ hour: "2-digit",
373
+ minute: "2-digit",
374
+ hour12: false,
375
+ }),
376
+ sameDay: now.getFullYear() === date.getFullYear() &&
377
+ now.getMonth() === date.getMonth() &&
378
+ now.getDate() === date.getDate(),
379
+ dayDiff: calendarDayDiff(now, date),
380
+ };
381
+ }
382
+ function formatResetDay(date) {
383
+ return date.toLocaleDateString(undefined, {
281
384
  month: "short",
282
385
  day: "2-digit",
283
386
  });
284
- return `${time} on ${day}`;
285
387
  }
388
+ function formatReset(resetAtMs) {
389
+ const parts = describeReset(resetAtMs);
390
+ if (!parts)
391
+ return undefined;
392
+ if (parts.sameDay)
393
+ return parts.time;
394
+ return `${parts.time} on ${formatResetDay(parts.date)}`;
395
+ }
396
+ /**
397
+ * Format a reset timestamp for the compact status line. Same-day resets keep
398
+ * the time only (`02:25`); resets within the coming week add the weekday
399
+ * (`Tue 02:25`); later resets use the absolute date (`Sep 15 02:25`). The
400
+ * time is always kept so short windows such as the 5h limit stay meaningful.
401
+ */
286
402
  function formatResetTime(resetAtMs) {
287
- if (!resetAtMs || !Number.isFinite(resetAtMs) || resetAtMs <= 0) {
403
+ const parts = describeReset(resetAtMs);
404
+ if (!parts)
288
405
  return undefined;
406
+ if (parts.sameDay)
407
+ return parts.time;
408
+ // Within a week each weekday occurs exactly once, so the weekday alone
409
+ // disambiguates weekly windows; beyond that the absolute date does.
410
+ if (parts.dayDiff > 0 && parts.dayDiff < 7) {
411
+ const weekday = parts.date.toLocaleDateString(undefined, {
412
+ weekday: "short",
413
+ });
414
+ return `${weekday} ${parts.time}`;
289
415
  }
290
- const date = new Date(resetAtMs);
291
- if (!Number.isFinite(date.getTime()))
292
- return undefined;
293
- return date.toLocaleTimeString(undefined, {
294
- hour: "2-digit",
295
- minute: "2-digit",
296
- hour12: false,
297
- });
416
+ return `${formatResetDay(parts.date)} ${parts.time}`;
417
+ }
418
+ /**
419
+ * Count calendar days between two dates, ignoring wall-clock length. Comparing
420
+ * UTC-normalized year/month/day makes the count immune to DST transitions,
421
+ * which make a seven-day gap span 167 or 169 hours.
422
+ */
423
+ function calendarDayDiff(from, to) {
424
+ const fromDay = Date.UTC(from.getFullYear(), from.getMonth(), from.getDate());
425
+ const toDay = Date.UTC(to.getFullYear(), to.getMonth(), to.getDate());
426
+ return Math.round((toDay - fromDay) / MS_PER_DAY);
298
427
  }
299
428
  function formatUpdatedAge(fetchedAt, now) {
300
429
  if (!fetchedAt || !Number.isFinite(fetchedAt))
@@ -327,7 +456,8 @@ export function formatQuotaDetailsText(quota, now = Date.now(), options = {}) {
327
456
  if (quota.type === "unavailable")
328
457
  return "Quota is unavailable.";
329
458
  const lines = [];
330
- const accountHint = formatAccountHint(quota, options.maskEmail);
459
+ // The dialog has a full line to itself, so it always takes the longest form.
460
+ const accountHint = formatAccountHints(quota, options.maskEmail)[0];
331
461
  const accountLabel = maskEmailsInText(quota.accountLabel, Boolean(options.maskEmail));
332
462
  if (accountLabel && accountHint) {
333
463
  lines.push(`Account: ${accountHint} (${accountLabel})`);
@@ -1 +1 @@
1
- {"version":3,"file":"tui-status.js","sourceRoot":"","sources":["../../lib/tui-status.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tui-status.js","sourceRoot":"","sources":["../../lib/tui-status.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "oc-codex-multi-auth",
3
- "version": "6.17.0",
3
+ "version": "6.19.0",
4
4
  "description": "OpenCode plugin for ChatGPT Plus/Pro OAuth with Codex/GPT-5 routing, multi-account rotation, account switching, health checks, diagnostics, and recovery tools",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -307,6 +307,29 @@ function mergeStandaloneAccounts(target, source) {
307
307
  return mergeStandaloneAccounts(source, target);
308
308
  }
309
309
 
310
+ // Mirror of `isStaleGeneratedAccountLabel` / `dropStaleGeneratedLabel` in
311
+ // lib/auth/token-utils.ts and lib/storage/normalize.ts. The standalone CLI
312
+ // reads the pool through this normalizer and never through the compiled
313
+ // `normalizeAccountStorage`, so without the mirror `status`, `list`, `health`,
314
+ // `doctor` and `dashboard` keep printing the org-derived label the plugin
315
+ // itself now drops - next to the account id, which is the identity the label
316
+ // was misnaming. The marker must hold this account's own id suffix so a name
317
+ // set with `codex-label` survives.
318
+ const GENERATED_LABEL_PATTERN = /\s\[id:[^\]]*\]$/;
319
+
320
+ function dropStaleStandaloneLabel(account) {
321
+ const label = typeof account?.accountLabel === "string" ? account.accountLabel.trim() : "";
322
+ const accountId = typeof account?.accountId === "string" ? account.accountId.trim() : "";
323
+ if (!label || !accountId) return account;
324
+ const marker = label.match(GENERATED_LABEL_PATTERN)?.[0];
325
+ if (!marker) return account;
326
+ const suffix = accountId.length > 6 ? accountId.slice(-6) : accountId;
327
+ if (marker !== ` [id:${suffix}]`) return account;
328
+ const next = { ...account };
329
+ delete next.accountLabel;
330
+ return next;
331
+ }
332
+
310
333
  function normalizeStandaloneStorage(storage) {
311
334
  if (!Array.isArray(storage.accounts)) return storage;
312
335
  const accounts = [...storage.accounts];
@@ -324,7 +347,9 @@ function normalizeStandaloneStorage(storage) {
324
347
  if (sourceIndex === i) break;
325
348
  }
326
349
  }
327
- const normalizedAccounts = accounts.filter((_, index) => !removed.has(index));
350
+ const normalizedAccounts = accounts
351
+ .filter((_, index) => !removed.has(index))
352
+ .map(dropStaleStandaloneLabel);
328
353
  return {
329
354
  ...storage,
330
355
  accounts: normalizedAccounts,
@@ -332,9 +357,37 @@ function normalizeStandaloneStorage(storage) {
332
357
  };
333
358
  }
334
359
 
360
+ const MASKED_VALUE = "*****";
361
+ // The head/tail mask keeps eight characters, so it conceals nothing worth
362
+ // concealing below thirteen: `me@x.io` would print in full and `me@x.io12`
363
+ // all but its middle character. `doctor` output is what users paste into
364
+ // issues, so anything shorter is replaced outright instead. Input is trimmed
365
+ // first, or `" me@x.io "` clears the cutoff on padding alone and drops back
366
+ // into the partial mask.
367
+ const MASK_MIN_LENGTH = 13;
368
+
335
369
  function maskValue(value, includeSensitive) {
336
- if (includeSensitive || typeof value !== "string" || value.length <= 8) return value;
337
- return `${value.slice(0, 4)}...${value.slice(-4)}`;
370
+ if (includeSensitive || typeof value !== "string") return value;
371
+ const trimmed = value.trim();
372
+ if (!trimmed) return trimmed;
373
+ if (trimmed.length < MASK_MIN_LENGTH) return MASKED_VALUE;
374
+ return `${trimmed.slice(0, 4)}...${trimmed.slice(-4)}`;
375
+ }
376
+
377
+ // Six characters when the id is shown in full, matching what the
378
+ // in-conversation surfaces print as `id:`. Four when it is head/tail masked,
379
+ // which is the tail `maskValue` already discloses as `accountId` in the same
380
+ // payload, so the printed identity never reveals more of an id than the field
381
+ // beside it. Nothing at all when the id was too short for that mask: the
382
+ // `accountId` next to it is then `*****`, and four raw characters of a short
383
+ // id can be the whole id.
384
+ function accountIdSuffix(accountId, includeSensitive) {
385
+ if (!accountId) return undefined;
386
+ if (includeSensitive) {
387
+ return accountId.length > 6 ? accountId.slice(-6) : accountId;
388
+ }
389
+ if (accountId.length < MASK_MIN_LENGTH) return undefined;
390
+ return accountId.slice(-4);
338
391
  }
339
392
 
340
393
  function summarizeStandaloneAccounts(storage, includeSensitive, tag) {
@@ -345,21 +398,27 @@ function summarizeStandaloneAccounts(storage, includeSensitive, tag) {
345
398
  .filter(({ account }) => !normalizedTag ||
346
399
  (Array.isArray(account?.accountTags) &&
347
400
  account.accountTags.some((entry) => String(entry).toLowerCase() === normalizedTag)))
348
- .map(({ account, index }) => ({
349
- index,
350
- label: account?.accountLabel ?? `Account ${index + 1}`,
351
- email: maskValue(account?.email, includeSensitive),
352
- accountId: maskValue(account?.accountId, includeSensitive),
353
- accountIdSource: account?.accountIdSource,
354
- enabled: account?.enabled !== false,
355
- hasRefreshToken: typeof account?.refreshToken === "string" && account.refreshToken.length > 0,
356
- hasAccessToken: typeof account?.accessToken === "string" && account.accessToken.length > 0,
357
- expiresAt: account?.expiresAt,
358
- expired: typeof account?.expiresAt === "number" ? account.expiresAt <= Date.now() : undefined,
359
- tags: Array.isArray(account?.accountTags) ? account.accountTags : [],
360
- note: account?.accountNote,
361
- rateLimitResetTimes: account?.rateLimitResetTimes ?? {},
362
- }));
401
+ .map(({ account, index }) => {
402
+ const trimmedId =
403
+ typeof account?.accountId === "string" ? account.accountId.trim() : "";
404
+ const accountId = trimmedId || undefined;
405
+ return {
406
+ index,
407
+ label: account?.accountLabel ?? `Account ${index + 1}`,
408
+ email: maskValue(account?.email, includeSensitive),
409
+ accountId: maskValue(accountId, includeSensitive),
410
+ idSuffix: accountIdSuffix(accountId, includeSensitive),
411
+ accountIdSource: account?.accountIdSource,
412
+ enabled: account?.enabled !== false,
413
+ hasRefreshToken: typeof account?.refreshToken === "string" && account.refreshToken.length > 0,
414
+ hasAccessToken: typeof account?.accessToken === "string" && account.accessToken.length > 0,
415
+ expiresAt: account?.expiresAt,
416
+ expired: typeof account?.expiresAt === "number" ? account.expiresAt <= Date.now() : undefined,
417
+ tags: Array.isArray(account?.accountTags) ? account.accountTags : [],
418
+ note: account?.accountNote,
419
+ rateLimitResetTimes: account?.rateLimitResetTimes ?? {},
420
+ };
421
+ });
363
422
  }
364
423
 
365
424
  function printStandaloneResult(command, payload, json) {
@@ -373,7 +432,11 @@ function printStandaloneResult(command, payload, json) {
373
432
  console.log(`Accounts: ${payload.totalAccounts}`);
374
433
  if (Array.isArray(payload.accounts)) {
375
434
  for (const account of payload.accounts) {
376
- console.log(`- [${account.index}] ${account.label} enabled=${account.enabled} refresh=${account.hasRefreshToken} access=${account.hasAccessToken}`);
435
+ const identity = [account.email, account.idSuffix ? `id:${account.idSuffix}` : undefined]
436
+ .filter(Boolean)
437
+ .join(", ");
438
+ const name = identity ? `${account.label} (${identity})` : account.label;
439
+ console.log(`- [${account.index}] ${name} enabled=${account.enabled} refresh=${account.hasRefreshToken} access=${account.hasAccessToken}`);
377
440
  }
378
441
  }
379
442
  if (payload.error) console.log(`Error: ${payload.error}`);
@@ -609,8 +672,29 @@ export async function runLimitsCommand(parsed, options = {}) {
609
672
  organizationId: account.organizationId,
610
673
  }),
611
674
  );
675
+ const quotaExhaustedResetAtMs = usageMod.getUsageQuotaExhaustedResetAtMs([
676
+ usage.primary,
677
+ usage.secondary,
678
+ ]);
679
+ if (quotaExhaustedResetAtMs !== undefined) {
680
+ try {
681
+ await usageMod.persistUsageQuotaExhaustion(account, quotaExhaustedResetAtMs);
682
+ } catch (error) {
683
+ loggerMod.logWarn(
684
+ `[${PACKAGE_NAME}] Failed to persist exhausted usage quota: ${formatErrorForLog(error)}`,
685
+ );
686
+ }
687
+ }
612
688
  entry.planType = usage.planType;
613
689
  entry.credits = usage.credits;
690
+ // Raw counts stay in `resetCredits` and the rendered line lives in
691
+ // its own field: embedding the English summary inside the counts
692
+ // object would make `--json` consumers parse presentation text to
693
+ // reach a number that is already beside it.
694
+ entry.resetCredits = usage.resetCredits;
695
+ entry.resetCreditsSummary = usage.resetCredits
696
+ ? usageMod.formatResetCredits(usage.resetCredits)
697
+ : null;
614
698
  entry.limits = usage.limits;
615
699
  } catch (error) {
616
700
  // `ensureCodexUsageAccessToken` can surface a raw OAuth refresh
@@ -662,6 +746,9 @@ function printLimitsResult(payload, json) {
662
746
  }
663
747
  if (account.planType) console.log(` Plan: ${account.planType}`);
664
748
  if (account.credits) console.log(` Credits: ${account.credits}`);
749
+ if (account.resetCredits && account.resetCredits.available > 0) {
750
+ console.log(` Resets: ${account.resetCreditsSummary}`);
751
+ }
665
752
  }
666
753
  if (payload.nextAction) console.log(`Next: ${payload.nextAction}`);
667
754
  }