oc-codex-multi-auth 6.21.0 → 6.22.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 (174) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +729 -571
  3. package/assets/icon.svg +7 -7
  4. package/assets/opencode-logo-ornate-dark.svg +18 -18
  5. package/assets/readme-hero.svg +31 -31
  6. package/config/README.md +177 -177
  7. package/config/minimal-opencode.json +14 -14
  8. package/config/opencode-legacy.json +1496 -1496
  9. package/config/opencode-modern.json +555 -555
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.js +291 -53
  12. package/dist/index.js.map +1 -1
  13. package/dist/lib/account-display.d.ts +46 -0
  14. package/dist/lib/account-display.d.ts.map +1 -1
  15. package/dist/lib/account-display.js +260 -0
  16. package/dist/lib/account-display.js.map +1 -1
  17. package/dist/lib/accounts.d.ts +4 -0
  18. package/dist/lib/accounts.d.ts.map +1 -1
  19. package/dist/lib/accounts.js +20 -15
  20. package/dist/lib/accounts.js.map +1 -1
  21. package/dist/lib/auth/login-runner.d.ts.map +1 -1
  22. package/dist/lib/auth/login-runner.js +79 -2
  23. package/dist/lib/auth/login-runner.js.map +1 -1
  24. package/dist/lib/auto-update-checker.d.ts +17 -1
  25. package/dist/lib/auto-update-checker.d.ts.map +1 -1
  26. package/dist/lib/auto-update-checker.js +49 -3
  27. package/dist/lib/auto-update-checker.js.map +1 -1
  28. package/dist/lib/cli.d.ts +1 -0
  29. package/dist/lib/cli.d.ts.map +1 -1
  30. package/dist/lib/cli.js +9 -3
  31. package/dist/lib/cli.js.map +1 -1
  32. package/dist/lib/codex-usage.d.ts +4 -3
  33. package/dist/lib/codex-usage.d.ts.map +1 -1
  34. package/dist/lib/codex-usage.js +13 -11
  35. package/dist/lib/codex-usage.js.map +1 -1
  36. package/dist/lib/config.d.ts +75 -0
  37. package/dist/lib/config.d.ts.map +1 -1
  38. package/dist/lib/config.js +152 -1
  39. package/dist/lib/config.js.map +1 -1
  40. package/dist/lib/context-overflow.js +10 -10
  41. package/dist/lib/desktop-notifications.js +6 -6
  42. package/dist/lib/oauth-success.js +202 -202
  43. package/dist/lib/plan-allotment.d.ts +72 -0
  44. package/dist/lib/plan-allotment.d.ts.map +1 -0
  45. package/dist/lib/plan-allotment.js +142 -0
  46. package/dist/lib/plan-allotment.js.map +1 -0
  47. package/dist/lib/plugin-origin.d.ts +77 -0
  48. package/dist/lib/plugin-origin.d.ts.map +1 -0
  49. package/dist/lib/plugin-origin.js +301 -0
  50. package/dist/lib/plugin-origin.js.map +1 -0
  51. package/dist/lib/prompts/codex-opencode-bridge.js +67 -67
  52. package/dist/lib/prompts/codex.js +75 -75
  53. package/dist/lib/quota-display.d.ts +40 -0
  54. package/dist/lib/quota-display.d.ts.map +1 -0
  55. package/dist/lib/quota-display.js +45 -0
  56. package/dist/lib/quota-display.js.map +1 -0
  57. package/dist/lib/quota-notifications.d.ts +2 -1
  58. package/dist/lib/quota-notifications.d.ts.map +1 -1
  59. package/dist/lib/quota-notifications.js +34 -14
  60. package/dist/lib/quota-notifications.js.map +1 -1
  61. package/dist/lib/quota-overview.d.ts +253 -0
  62. package/dist/lib/quota-overview.d.ts.map +1 -0
  63. package/dist/lib/quota-overview.js +707 -0
  64. package/dist/lib/quota-overview.js.map +1 -0
  65. package/dist/lib/request/retry-budget.d.ts +26 -0
  66. package/dist/lib/request/retry-budget.d.ts.map +1 -1
  67. package/dist/lib/request/retry-budget.js +43 -0
  68. package/dist/lib/request/retry-budget.js.map +1 -1
  69. package/dist/lib/schemas.d.ts +67 -0
  70. package/dist/lib/schemas.d.ts.map +1 -1
  71. package/dist/lib/schemas.js +53 -0
  72. package/dist/lib/schemas.js.map +1 -1
  73. package/dist/lib/storage/backup.d.ts +33 -0
  74. package/dist/lib/storage/backup.d.ts.map +1 -1
  75. package/dist/lib/storage/backup.js +43 -7
  76. package/dist/lib/storage/backup.js.map +1 -1
  77. package/dist/lib/storage/credential-snapshots.d.ts +78 -0
  78. package/dist/lib/storage/credential-snapshots.d.ts.map +1 -0
  79. package/dist/lib/storage/credential-snapshots.js +302 -0
  80. package/dist/lib/storage/credential-snapshots.js.map +1 -0
  81. package/dist/lib/storage/export-import.d.ts.map +1 -1
  82. package/dist/lib/storage/export-import.js +7 -0
  83. package/dist/lib/storage/export-import.js.map +1 -1
  84. package/dist/lib/storage/flagged.d.ts.map +1 -1
  85. package/dist/lib/storage/flagged.js +23 -1
  86. package/dist/lib/storage/flagged.js.map +1 -1
  87. package/dist/lib/storage/load-save.d.ts +4 -0
  88. package/dist/lib/storage/load-save.d.ts.map +1 -1
  89. package/dist/lib/storage/load-save.js +50 -0
  90. package/dist/lib/storage/load-save.js.map +1 -1
  91. package/dist/lib/storage/paths.d.ts +1 -0
  92. package/dist/lib/storage/paths.d.ts.map +1 -1
  93. package/dist/lib/storage/paths.js +1 -1
  94. package/dist/lib/storage/paths.js.map +1 -1
  95. package/dist/lib/storage/test-home-guard.d.ts +35 -0
  96. package/dist/lib/storage/test-home-guard.d.ts.map +1 -0
  97. package/dist/lib/storage/test-home-guard.js +59 -0
  98. package/dist/lib/storage/test-home-guard.js.map +1 -0
  99. package/dist/lib/tools/codex-dashboard.d.ts.map +1 -1
  100. package/dist/lib/tools/codex-dashboard.js +3 -2
  101. package/dist/lib/tools/codex-dashboard.js.map +1 -1
  102. package/dist/lib/tools/codex-doctor.d.ts.map +1 -1
  103. package/dist/lib/tools/codex-doctor.js +16 -0
  104. package/dist/lib/tools/codex-doctor.js.map +1 -1
  105. package/dist/lib/tools/codex-health.d.ts.map +1 -1
  106. package/dist/lib/tools/codex-health.js +10 -2
  107. package/dist/lib/tools/codex-health.js.map +1 -1
  108. package/dist/lib/tools/codex-label.d.ts.map +1 -1
  109. package/dist/lib/tools/codex-label.js +1 -0
  110. package/dist/lib/tools/codex-label.js.map +1 -1
  111. package/dist/lib/tools/codex-limits.d.ts.map +1 -1
  112. package/dist/lib/tools/codex-limits.js +13 -9
  113. package/dist/lib/tools/codex-limits.js.map +1 -1
  114. package/dist/lib/tools/codex-list.d.ts.map +1 -1
  115. package/dist/lib/tools/codex-list.js +28 -3
  116. package/dist/lib/tools/codex-list.js.map +1 -1
  117. package/dist/lib/tools/codex-note.d.ts.map +1 -1
  118. package/dist/lib/tools/codex-note.js +4 -1
  119. package/dist/lib/tools/codex-note.js.map +1 -1
  120. package/dist/lib/tools/codex-pool.d.ts.map +1 -1
  121. package/dist/lib/tools/codex-pool.js +6 -2
  122. package/dist/lib/tools/codex-pool.js.map +1 -1
  123. package/dist/lib/tools/codex-refresh.d.ts.map +1 -1
  124. package/dist/lib/tools/codex-refresh.js +4 -1
  125. package/dist/lib/tools/codex-refresh.js.map +1 -1
  126. package/dist/lib/tools/codex-remove.d.ts.map +1 -1
  127. package/dist/lib/tools/codex-remove.js +1 -0
  128. package/dist/lib/tools/codex-remove.js.map +1 -1
  129. package/dist/lib/tools/codex-reset.d.ts.map +1 -1
  130. package/dist/lib/tools/codex-reset.js +13 -7
  131. package/dist/lib/tools/codex-reset.js.map +1 -1
  132. package/dist/lib/tools/codex-status.d.ts.map +1 -1
  133. package/dist/lib/tools/codex-status.js +25 -2
  134. package/dist/lib/tools/codex-status.js.map +1 -1
  135. package/dist/lib/tools/codex-switch.d.ts.map +1 -1
  136. package/dist/lib/tools/codex-switch.js +1 -0
  137. package/dist/lib/tools/codex-switch.js.map +1 -1
  138. package/dist/lib/tools/codex-tag.d.ts.map +1 -1
  139. package/dist/lib/tools/codex-tag.js +4 -1
  140. package/dist/lib/tools/codex-tag.js.map +1 -1
  141. package/dist/lib/tools/codex-warm.d.ts.map +1 -1
  142. package/dist/lib/tools/codex-warm.js +1 -0
  143. package/dist/lib/tools/codex-warm.js.map +1 -1
  144. package/dist/lib/tools/index.d.ts +9 -0
  145. package/dist/lib/tools/index.d.ts.map +1 -1
  146. package/dist/lib/tools/index.js.map +1 -1
  147. package/dist/lib/tui-quota-cache.d.ts +35 -0
  148. package/dist/lib/tui-quota-cache.d.ts.map +1 -1
  149. package/dist/lib/tui-quota-cache.js +76 -11
  150. package/dist/lib/tui-quota-cache.js.map +1 -1
  151. package/dist/lib/tui-quota-overview.d.ts +55 -0
  152. package/dist/lib/tui-quota-overview.d.ts.map +1 -0
  153. package/dist/lib/tui-quota-overview.js +209 -0
  154. package/dist/lib/tui-quota-overview.js.map +1 -0
  155. package/dist/lib/tui-status.d.ts +55 -0
  156. package/dist/lib/tui-status.d.ts.map +1 -1
  157. package/dist/lib/tui-status.js +155 -14
  158. package/dist/lib/tui-status.js.map +1 -1
  159. package/dist/lib/ui/auth-menu.d.ts +2 -0
  160. package/dist/lib/ui/auth-menu.d.ts.map +1 -1
  161. package/dist/lib/ui/auth-menu.js +10 -6
  162. package/dist/lib/ui/auth-menu.js.map +1 -1
  163. package/dist/tui.d.ts +55 -0
  164. package/dist/tui.d.ts.map +1 -1
  165. package/dist/tui.js +511 -29
  166. package/dist/tui.js.map +1 -1
  167. package/package.json +155 -155
  168. package/scripts/audit-dev-allowlist.js +114 -114
  169. package/scripts/clean-dist.js +27 -27
  170. package/scripts/copy-oauth-success.js +47 -47
  171. package/scripts/install-oc-codex-multi-auth-core.js +2003 -1499
  172. package/scripts/install-oc-codex-multi-auth.js +37 -37
  173. package/scripts/test-all-models.sh +260 -260
  174. package/scripts/validate-model-map.sh +97 -97
@@ -5,6 +5,7 @@ import { CODEX_QUOTA_WINDOW_KINDS, hasCodexQuotaHeaders, isQuotaWindowDisabled,
5
5
  import { renameWithWindowsRetry } from "./storage/atomic-write.js";
6
6
  export const TUI_QUOTA_CACHE_VERSION = 1;
7
7
  export const TUI_QUOTA_CACHE_FILE = "oc-codex-multi-auth-tui-quota.json";
8
+ export const TUI_QUOTA_OVERVIEW_CACHE_FILE = "oc-codex-multi-auth-tui-quota-overview.json";
8
9
  const TUI_QUOTA_CACHE_WRITE_SKIP_MS = 500;
9
10
  // A snapshot older than one TUI refresh interval is due for a live re-fetch:
10
11
  // the shared cache is only pushed while requests flow, so after an idle gap it
@@ -14,9 +15,15 @@ const recentTuiQuotaWrites = new Map();
14
15
  function getDefaultOpenCodeStateDir() {
15
16
  return join(homedir(), ".local", "state", "opencode");
16
17
  }
17
- export function getTuiQuotaCachePath(stateDir) {
18
+ function resolveStateDir(stateDir) {
18
19
  const envStateDir = process.env.OPENCODE_STATE_DIR?.trim();
19
- return join(stateDir?.trim() || envStateDir || getDefaultOpenCodeStateDir(), TUI_QUOTA_CACHE_FILE);
20
+ return stateDir?.trim() || envStateDir || getDefaultOpenCodeStateDir();
21
+ }
22
+ export function getTuiQuotaCachePath(stateDir) {
23
+ return join(resolveStateDir(stateDir), TUI_QUOTA_CACHE_FILE);
24
+ }
25
+ export function getTuiQuotaOverviewCachePath(stateDir) {
26
+ return join(resolveStateDir(stateDir), TUI_QUOTA_OVERVIEW_CACHE_FILE);
20
27
  }
21
28
  function parseFiniteIntHeader(headers, name) {
22
29
  const raw = headers.get(name);
@@ -190,6 +197,17 @@ export async function readTuiQuotaSnapshot(cachePath) {
190
197
  return undefined;
191
198
  }
192
199
  }
200
+ function createTemporaryPath(target, now) {
201
+ return `${target}.${process.pid}.${now}.${Math.random().toString(36).slice(2)}.tmp`;
202
+ }
203
+ async function writeSnapshotFile(target, temporary, snapshot) {
204
+ await fs.mkdir(dirname(target), { recursive: true });
205
+ await fs.writeFile(temporary, `${JSON.stringify(snapshot, null, 2)}\n`, {
206
+ encoding: "utf-8",
207
+ mode: 0o600,
208
+ });
209
+ await renameWithWindowsRetry(temporary, target);
210
+ }
193
211
  export async function writeTuiQuotaSnapshot(snapshot, cachePath) {
194
212
  const target = cachePath ?? getTuiQuotaCachePath();
195
213
  const writeKey = getSnapshotWriteKey(snapshot);
@@ -200,15 +218,8 @@ export async function writeTuiQuotaSnapshot(snapshot, cachePath) {
200
218
  await recentWrite.promise;
201
219
  return;
202
220
  }
203
- const temporary = `${target}.${process.pid}.${now}.${Math.random().toString(36).slice(2)}.tmp`;
204
- const writePromise = (async () => {
205
- await fs.mkdir(dirname(target), { recursive: true });
206
- await fs.writeFile(temporary, `${JSON.stringify(snapshot, null, 2)}\n`, {
207
- encoding: "utf-8",
208
- mode: 0o600,
209
- });
210
- await renameWithWindowsRetry(temporary, target);
211
- })();
221
+ const temporary = createTemporaryPath(target, now);
222
+ const writePromise = writeSnapshotFile(target, temporary, snapshot);
212
223
  recentTuiQuotaWrites.set(target, {
213
224
  key: writeKey,
214
225
  at: now,
@@ -241,4 +252,58 @@ export async function clearTuiQuotaSnapshot(cachePath) {
241
252
  throw error;
242
253
  }
243
254
  }
255
+ function isTuiQuotaOverviewAccount(value) {
256
+ return (isRecord(value) &&
257
+ typeof value.fingerprint === "string" &&
258
+ value.fingerprint.trim().length > 0 &&
259
+ typeof value.index === "number" &&
260
+ Number.isFinite(value.index) &&
261
+ (value.email === undefined || typeof value.email === "string") &&
262
+ (value.label === undefined || typeof value.label === "string") &&
263
+ (value.planType === undefined || typeof value.planType === "string") &&
264
+ isOptionalFiniteNumber(value.resetCredits) &&
265
+ Array.isArray(value.limits) &&
266
+ value.limits.every(isTuiQuotaLimit));
267
+ }
268
+ export function isTuiQuotaOverviewSnapshot(value) {
269
+ return (isRecord(value) &&
270
+ value.version === TUI_QUOTA_CACHE_VERSION &&
271
+ typeof value.fetchedAt === "number" &&
272
+ Number.isFinite(value.fetchedAt) &&
273
+ Array.isArray(value.accounts) &&
274
+ value.accounts.every(isTuiQuotaOverviewAccount));
275
+ }
276
+ /** Drop disabled windows, for the reasons in {@link sanitizeTuiQuotaSnapshot}. */
277
+ export function sanitizeTuiQuotaOverviewSnapshot(snapshot) {
278
+ return {
279
+ ...snapshot,
280
+ accounts: snapshot.accounts.map((account) => ({
281
+ ...account,
282
+ limits: account.limits.filter((limit) => !isDisabledQuotaLimit(limit)),
283
+ })),
284
+ };
285
+ }
286
+ export async function readTuiQuotaOverviewSnapshot(cachePath) {
287
+ try {
288
+ const raw = await fs.readFile(cachePath ?? getTuiQuotaOverviewCachePath(), "utf-8");
289
+ const parsed = JSON.parse(raw);
290
+ return isTuiQuotaOverviewSnapshot(parsed)
291
+ ? sanitizeTuiQuotaOverviewSnapshot(parsed)
292
+ : undefined;
293
+ }
294
+ catch {
295
+ return undefined;
296
+ }
297
+ }
298
+ export async function writeTuiQuotaOverviewSnapshot(snapshot, cachePath) {
299
+ const target = cachePath ?? getTuiQuotaOverviewCachePath();
300
+ const temporary = createTemporaryPath(target, Date.now());
301
+ try {
302
+ await writeSnapshotFile(target, temporary, snapshot);
303
+ }
304
+ catch (error) {
305
+ await fs.unlink(temporary).catch(() => undefined);
306
+ throw error;
307
+ }
308
+ }
244
309
  //# sourceMappingURL=tui-quota-cache.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tui-quota-cache.js","sourceRoot":"","sources":["../../lib/tui-quota-cache.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tui-quota-cache.js","sourceRoot":"","sources":["../../lib/tui-quota-cache.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Gather every account's quota for the pool-wide status line.
3
+ *
4
+ * The single-account status the request path maintains cannot answer "where
5
+ * does the pool stand" - it only ever describes the account that served the
6
+ * last response. This reads `/wham/usage` for each distinct account instead,
7
+ * on a bounded interval, and caches the result where every OpenCode window on
8
+ * the machine can share it.
9
+ *
10
+ * The cache is what keeps this cheap. A reader takes a snapshot that is still
11
+ * fresh rather than issuing its own requests, so N terminals open on the same
12
+ * pool cost one round of requests between them rather than N, and a terminal
13
+ * that has just started renders immediately instead of showing nothing while
14
+ * seven accounts are queried one after another.
15
+ */
16
+ import { type CodexUsageSummary } from "./codex-usage.js";
17
+ import type { QuotaOverviewAccount } from "./quota-overview.js";
18
+ import { type AccountStorageV3 } from "./storage.js";
19
+ import { type TuiQuotaOverviewAccount, type TuiQuotaOverviewSnapshot, type TuiQuotaSnapshot } from "./tui-quota-cache.js";
20
+ /**
21
+ * Reduce one account's usage document to what the status line needs.
22
+ *
23
+ * Only the primary and secondary windows are kept. Code-review and the other
24
+ * additional quotas do not govern ordinary model requests, so counting them
25
+ * would let a spent code-review allowance report an account as unusable for
26
+ * work it can still do.
27
+ */
28
+ export declare function toOverviewAccount(params: {
29
+ fingerprint: string;
30
+ index: number;
31
+ usage: CodexUsageSummary;
32
+ email?: string;
33
+ label?: string;
34
+ }): TuiQuotaOverviewAccount;
35
+ export declare function fetchTuiQuotaOverview(params: {
36
+ cachePath?: string;
37
+ now?: number;
38
+ loadStorage?: () => Promise<AccountStorageV3 | null>;
39
+ }): Promise<TuiQuotaOverviewSnapshot | undefined>;
40
+ /**
41
+ * Fold the request path's live reading of one account into the polled pool.
42
+ *
43
+ * The pool is re-read on an interval, but the account currently serving
44
+ * requests has its quota pushed from response headers after every single
45
+ * response. Without this the line would show that account's numbers as they
46
+ * were up to five minutes ago while the user watches their own requests spend
47
+ * it - the one account whose figure a reader can check against their own
48
+ * activity would be the one that looks wrong.
49
+ *
50
+ * Only a snapshot NEWER than the poll is merged, so a header reading left over
51
+ * from before the poll cannot overwrite it with older numbers.
52
+ */
53
+ export declare function mergeOverviewWithLatestAccount(snapshot: TuiQuotaOverviewSnapshot, latest: TuiQuotaSnapshot | undefined): TuiQuotaOverviewSnapshot;
54
+ export declare function toQuotaOverviewAccounts(snapshot: TuiQuotaOverviewSnapshot): QuotaOverviewAccount[];
55
+ //# sourceMappingURL=tui-quota-overview.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tui-quota-overview.d.ts","sourceRoot":"","sources":["../../lib/tui-quota-overview.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EASN,KAAK,iBAAiB,EAEtB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAgB,KAAK,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACnE,OAAO,EAKN,KAAK,uBAAuB,EAC5B,KAAK,wBAAwB,EAC7B,KAAK,gBAAgB,EACrB,MAAM,sBAAsB,CAAC;AAmB9B;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE;IACzC,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,iBAAiB,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CACf,GAAG,uBAAuB,CAyB1B;AAsCD,wBAAsB,qBAAqB,CAAC,MAAM,EAAE;IACnD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAC;CACrD,GAAG,OAAO,CAAC,wBAAwB,GAAG,SAAS,CAAC,CAyEhD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,8BAA8B,CAC7C,QAAQ,EAAE,wBAAwB,EAClC,MAAM,EAAE,gBAAgB,GAAG,SAAS,GAClC,wBAAwB,CAe1B;AAED,wBAAgB,uBAAuB,CACtC,QAAQ,EAAE,wBAAwB,GAChC,oBAAoB,EAAE,CAYxB"}
@@ -0,0 +1,209 @@
1
+ /**
2
+ * Gather every account's quota for the pool-wide status line.
3
+ *
4
+ * The single-account status the request path maintains cannot answer "where
5
+ * does the pool stand" - it only ever describes the account that served the
6
+ * last response. This reads `/wham/usage` for each distinct account instead,
7
+ * on a bounded interval, and caches the result where every OpenCode window on
8
+ * the machine can share it.
9
+ *
10
+ * The cache is what keeps this cheap. A reader takes a snapshot that is still
11
+ * fresh rather than issuing its own requests, so N terminals open on the same
12
+ * pool cost one round of requests between them rather than N, and a terminal
13
+ * that has just started renders immediately instead of showing nothing while
14
+ * seven accounts are queried one after another.
15
+ */
16
+ import { createUsageAccountFingerprint, deduplicateUsageAccountIndices, ensureCodexUsageAccessToken, fetchCodexUsage, getUsageLeftPercent, hasUsageWindow, parseCodexUsagePayload, resolveCodexUsageAccountId, } from "./codex-usage.js";
17
+ import { logDebug } from "./logger.js";
18
+ import { loadAccounts } from "./storage.js";
19
+ import { isFreshTuiQuotaSnapshot, readTuiQuotaOverviewSnapshot, writeTuiQuotaOverviewSnapshot, TUI_QUOTA_CACHE_VERSION, } from "./tui-quota-cache.js";
20
+ /**
21
+ * Accounts queried at once. Matches the quota monitor's own limit: this talks
22
+ * to the same endpoint with the same credentials, and a pool of a dozen seats
23
+ * should not arrive as a dozen simultaneous requests.
24
+ */
25
+ const MAX_CONCURRENCY = 2;
26
+ function toOverviewLimit(window, label) {
27
+ return {
28
+ label,
29
+ leftPercent: getUsageLeftPercent(window.usedPercent) ?? null,
30
+ usedPercent: window.usedPercent,
31
+ windowMinutes: window.windowMinutes,
32
+ resetAtMs: window.resetAtMs,
33
+ };
34
+ }
35
+ /**
36
+ * Reduce one account's usage document to what the status line needs.
37
+ *
38
+ * Only the primary and secondary windows are kept. Code-review and the other
39
+ * additional quotas do not govern ordinary model requests, so counting them
40
+ * would let a spent code-review allowance report an account as unusable for
41
+ * work it can still do.
42
+ */
43
+ export function toOverviewAccount(params) {
44
+ const limits = [
45
+ { window: params.usage.primary, label: "5h" },
46
+ { window: params.usage.secondary, label: "weekly" },
47
+ ]
48
+ .filter(({ window }) => hasUsageWindow(window))
49
+ .map(({ window, label }) => toOverviewLimit(window, label));
50
+ const resetCredits = params.usage.resetCredits;
51
+ return {
52
+ fingerprint: params.fingerprint,
53
+ index: params.index,
54
+ email: params.email?.trim() || undefined,
55
+ // Only a label the user set, never the accountId/organizationId
56
+ // fallbacks other surfaces use: those identify an account without
57
+ // naming it, and a 36-character UUID on a status line names nothing.
58
+ label: params.label?.trim() || undefined,
59
+ planType: params.usage.planType ?? undefined,
60
+ // `applicableNow` is the count that can be redeemed against a window
61
+ // that is actually spent, which is the only one worth showing beside a
62
+ // percentage. It falls back to the banked total only when the server
63
+ // stated a count this build could not read.
64
+ resetCredits: resetCredits?.applicableNow ?? resetCredits?.available ?? undefined,
65
+ limits,
66
+ };
67
+ }
68
+ async function fetchOverviewAccount(storage, index) {
69
+ const account = storage.accounts[index];
70
+ if (!account)
71
+ return undefined;
72
+ try {
73
+ const credentials = await ensureCodexUsageAccessToken({ storage, account });
74
+ const accountId = resolveCodexUsageAccountId({
75
+ account,
76
+ accessToken: credentials.accessToken,
77
+ });
78
+ if (!accountId)
79
+ return undefined;
80
+ const usage = parseCodexUsagePayload(await fetchCodexUsage({
81
+ accountId,
82
+ accessToken: credentials.accessToken,
83
+ organizationId: account.organizationId,
84
+ normalizeAccountErrors: true,
85
+ }));
86
+ return toOverviewAccount({
87
+ fingerprint: createUsageAccountFingerprint(account),
88
+ index: index + 1,
89
+ usage,
90
+ email: account.email,
91
+ label: account.accountLabel,
92
+ });
93
+ }
94
+ catch (error) {
95
+ logDebug(`Failed to fetch pool quota for one account: ${error.message}`);
96
+ return undefined;
97
+ }
98
+ }
99
+ export async function fetchTuiQuotaOverview(params) {
100
+ const now = params.now ?? Date.now();
101
+ const cached = await readTuiQuotaOverviewSnapshot(params.cachePath);
102
+ if (cached && isFreshTuiQuotaSnapshot(cached, now))
103
+ return cached;
104
+ const storage = await (params.loadStorage ?? loadAccounts)();
105
+ if (!storage || storage.accounts.length === 0)
106
+ return undefined;
107
+ const indices = deduplicateUsageAccountIndices(storage);
108
+ const accounts = [];
109
+ // Set when an account this pass could not fetch keeps its previous
110
+ // reading instead of dropping out of the snapshot.
111
+ let carriedOver = false;
112
+ for (let offset = 0; offset < indices.length; offset += MAX_CONCURRENCY) {
113
+ const chunk = indices.slice(offset, offset + MAX_CONCURRENCY);
114
+ const results = await Promise.all(chunk.map((index) => fetchOverviewAccount(storage, index)));
115
+ for (const [position, result] of results.entries()) {
116
+ if (result) {
117
+ accounts.push(result);
118
+ continue;
119
+ }
120
+ // A failed fetch must not drop the account out of the snapshot: the
121
+ // pool would be judged on a subset, and one transient error on the
122
+ // only account with headroom would flip the line to "fully spent"
123
+ // and surface the resets screen wrongly. The cached reading is reused
124
+ // only for the SAME account - same pool position and same credential
125
+ // fingerprint, so a pool that changed membership never inherits a
126
+ // stranger's numbers - and the snapshot below keeps the older fetch
127
+ // time so the reading is rendered stale rather than current.
128
+ const index = chunk[position];
129
+ const account = index === undefined ? undefined : storage.accounts[index];
130
+ const previous = index === undefined || account === undefined
131
+ ? undefined
132
+ : cached?.accounts.find((candidate) => candidate.index === index + 1 &&
133
+ candidate.fingerprint ===
134
+ createUsageAccountFingerprint(account));
135
+ if (previous) {
136
+ accounts.push(previous);
137
+ carriedOver = true;
138
+ }
139
+ }
140
+ }
141
+ // Every account failing means the pool was not observed at all, which is a
142
+ // different statement from "the pool is empty". Keeping the previous
143
+ // snapshot lets the line stay on the last thing known to be true rather
144
+ // than blanking on one bad network moment.
145
+ if (accounts.length === 0)
146
+ return cached;
147
+ accounts.sort((left, right) => left.index - right.index);
148
+ const snapshot = {
149
+ version: TUI_QUOTA_CACHE_VERSION,
150
+ // A snapshot carrying a reused reading is only as fresh as that
151
+ // reading, so it keeps the previous fetch time - the stale flag is how
152
+ // the line says "part of this is not new" without dropping it.
153
+ fetchedAt: carriedOver && cached ? Math.min(cached.fetchedAt, now) : now,
154
+ accounts,
155
+ };
156
+ try {
157
+ await writeTuiQuotaOverviewSnapshot(snapshot, params.cachePath);
158
+ }
159
+ catch (error) {
160
+ logDebug(`Failed to cache the pool quota snapshot: ${error.message}`);
161
+ }
162
+ return snapshot;
163
+ }
164
+ /**
165
+ * Fold the request path's live reading of one account into the polled pool.
166
+ *
167
+ * The pool is re-read on an interval, but the account currently serving
168
+ * requests has its quota pushed from response headers after every single
169
+ * response. Without this the line would show that account's numbers as they
170
+ * were up to five minutes ago while the user watches their own requests spend
171
+ * it - the one account whose figure a reader can check against their own
172
+ * activity would be the one that looks wrong.
173
+ *
174
+ * Only a snapshot NEWER than the poll is merged, so a header reading left over
175
+ * from before the poll cannot overwrite it with older numbers.
176
+ */
177
+ export function mergeOverviewWithLatestAccount(snapshot, latest) {
178
+ if (!latest || latest.fetchedAt <= snapshot.fetchedAt)
179
+ return snapshot;
180
+ if (latest.limits.length === 0)
181
+ return snapshot;
182
+ let merged = false;
183
+ const accounts = snapshot.accounts.map((account) => {
184
+ if (account.fingerprint !== latest.fingerprint)
185
+ return account;
186
+ merged = true;
187
+ return {
188
+ ...account,
189
+ planType: latest.planType ?? account.planType,
190
+ email: account.email ?? (latest.accountEmail?.trim() || undefined),
191
+ limits: latest.limits,
192
+ };
193
+ });
194
+ return merged ? { ...snapshot, accounts } : snapshot;
195
+ }
196
+ export function toQuotaOverviewAccounts(snapshot) {
197
+ return snapshot.accounts.map((account) => ({
198
+ index: account.index,
199
+ email: account.email,
200
+ label: account.label,
201
+ planType: account.planType,
202
+ resetCredits: account.resetCredits,
203
+ windows: account.limits.map((limit) => ({
204
+ leftPercent: limit.leftPercent ?? undefined,
205
+ resetAtMs: limit.resetAtMs,
206
+ })),
207
+ }));
208
+ }
209
+ //# sourceMappingURL=tui-quota-overview.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tui-quota-overview.js","sourceRoot":"","sources":["../../lib/tui-quota-overview.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,6 @@
1
1
  import type { Config } from "@opencode-ai/sdk/v2";
2
+ import { type QuotaOverviewAccount, type QuotaOverviewOptions } from "./quota-overview.js";
3
+ import { type QuotaDisplayMode } from "./quota-display.js";
2
4
  export type ReasoningVariant = "none" | "low" | "medium" | "high" | "xhigh" | "max" | "ultra";
3
5
  export type CompactQuotaLimit = {
4
6
  label: string;
@@ -49,10 +51,63 @@ export declare function formatPromptStatusText(params: {
49
51
  quota: CompactQuotaStatus;
50
52
  width?: number;
51
53
  maskEmail?: boolean;
54
+ quotaDisplay?: QuotaDisplayMode;
52
55
  }): string;
56
+ /**
57
+ * Break one rendering across rows, at the separators it already has.
58
+ *
59
+ * Only `, ` boundaries are used, so a row never ends mid-account: a line cut
60
+ * between `#2` and its percentage is worse than no second row at all. A
61
+ * candidate with any single segment wider than the row cannot be laid out this
62
+ * way and is rejected, which sends the caller to the next rung down.
63
+ */
64
+ export declare function wrapStatusCandidate(candidate: string, maxChars: number, maxRows: number): string[] | undefined;
65
+ /**
66
+ * Lay a candidate ladder out in the space available, in up to `maxRows` rows.
67
+ *
68
+ * The ladder is walked once, and the first rung that fits wins - whether it
69
+ * fits on one row or has to be broken across two. Trying every rung on one row
70
+ * before allowing a second would shed detail the reader has room for.
71
+ */
72
+ export declare function fitStatusLines(candidates: readonly string[], maxChars: number, maxRows: number): string[];
73
+ /**
74
+ * Render the whole account pool, degrading through
75
+ * {@link formatQuotaOverviewCandidates} until one form fits.
76
+ */
77
+ export declare function formatQuotaOverviewStatusLines(params: {
78
+ accounts: readonly QuotaOverviewAccount[];
79
+ options: QuotaOverviewOptions;
80
+ width?: number;
81
+ availableChars?: number;
82
+ maxRows?: number;
83
+ }): string[];
84
+ export declare function formatQuotaOverviewStatusText(params: {
85
+ accounts: readonly QuotaOverviewAccount[];
86
+ options: QuotaOverviewOptions;
87
+ width?: number;
88
+ availableChars?: number;
89
+ }): string;
90
+ /** The banked-reset line, laid out the same way as the pool line. */
91
+ export declare function formatQuotaResetsStatusLines(params: {
92
+ accounts: readonly QuotaOverviewAccount[];
93
+ options: QuotaOverviewOptions;
94
+ width?: number;
95
+ availableChars?: number;
96
+ maxRows?: number;
97
+ }): string[];
53
98
  export type QuotaPromptTone = "normal" | "warning" | "danger" | "stale" | "unknown";
99
+ /**
100
+ * Colour the pool by its healthiest account.
101
+ *
102
+ * A pool is only in trouble when nothing in it has room left, so the account
103
+ * with the most headroom decides the colour: keying on the worst account would
104
+ * paint the line red for a spent seat that rotation has already stopped
105
+ * selecting while six healthy ones serve every request.
106
+ */
107
+ export declare function resolveQuotaOverviewTone(accounts: readonly QuotaOverviewAccount[], stale?: boolean): QuotaPromptTone;
54
108
  export declare function resolveQuotaPromptTone(quota: CompactQuotaStatus): QuotaPromptTone;
55
109
  export declare function formatQuotaDetailsText(quota: CompactQuotaStatus, now?: number, options?: {
56
110
  maskEmail?: boolean;
111
+ quotaDisplay?: QuotaDisplayMode;
57
112
  }): string;
58
113
  //# sourceMappingURL=tui-status.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tui-status.d.ts","sourceRoot":"","sources":["../../lib/tui-status.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAKlD,MAAM,MAAM,gBAAgB,GACzB,MAAM,GACN,KAAK,GACL,QAAQ,GACR,MAAM,GACN,OAAO,GACP,KAAK,GACL,OAAO,CAAC;AAEX,MAAM,MAAM,iBAAiB,GAAG;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,OAAO,CAAC;AAErD,MAAM,MAAM,kBAAkB,GAC3B;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,GACnB;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,GACnB;IAAE,IAAI,EAAE,aAAa,CAAA;CAAE,GACvB;IACA,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,SAAS,iBAAiB,EAAE,CAAC;IACrC,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,kBAAkB,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEL,MAAM,MAAM,mBAAmB,GAAG;IACjC,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE;QACX,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;CACF,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG,IAAI,CACpC,MAAM,EACN,OAAO,GAAG,eAAe,GAAG,OAAO,GAAG,MAAM,GAAG,UAAU,CACzD,CAAC;AA8BF,wBAAgB,yBAAyB,CACxC,KAAK,EAAE,MAAM,GAAG,SAAS,GACvB,gBAAgB,GAAG,SAAS,CAO9B;AAED,wBAAgB,gCAAgC,CAC/C,OAAO,EAAE,MAAM,GAAG,SAAS,GACzB,gBAAgB,GAAG,SAAS,CAO9B;AAiED,wBAAgB,6BAA6B,CAAC,MAAM,EAAE;IACrD,QAAQ,CAAC,EAAE,SAAS,mBAAmB,EAAE,CAAC;IAC1C,MAAM,CAAC,EAAE,kBAAkB,CAAC;CAC5B,GAAG,gBAAgB,GAAG,SAAS,CA8B/B;AAiMD,wBAAgB,sBAAsB,CAAC,MAAM,EAAE;IAC9C,OAAO,CAAC,EAAE,gBAAgB,CAAC;IAC3B,KAAK,EAAE,kBAAkB,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;CACpB,GAAG,MAAM,CAmCT;AAED,MAAM,MAAM,eAAe,GACxB,QAAQ,GACR,SAAS,GACT,QAAQ,GACR,OAAO,GACP,SAAS,CAAC;AAEb,wBAAgB,sBAAsB,CACrC,KAAK,EAAE,kBAAkB,GACvB,eAAe,CAcjB;AAqHD,wBAAgB,sBAAsB,CACrC,KAAK,EAAE,kBAAkB,EACzB,GAAG,SAAa,EAChB,OAAO,GAAE;IAAE,SAAS,CAAC,EAAE,OAAO,CAAA;CAAO,GACnC,MAAM,CAmCR"}
1
+ {"version":3,"file":"tui-status.d.ts","sourceRoot":"","sources":["../../lib/tui-status.ts"],"names":[],"mappings":"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"}