oc-codex-multi-auth 6.0.0 → 6.1.1

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 (284) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +56 -18
  3. package/assets/readme-hero.svg +10 -10
  4. package/config/README.md +1 -1
  5. package/config/minimal-opencode.json +1 -1
  6. package/config/opencode-legacy.json +1 -1
  7. package/config/opencode-modern.json +1 -1
  8. package/dist/index.d.ts +1 -1
  9. package/dist/index.d.ts.map +1 -1
  10. package/dist/index.js +112 -2525
  11. package/dist/index.js.map +1 -1
  12. package/dist/lib/accounts/persistence.d.ts +34 -0
  13. package/dist/lib/accounts/persistence.d.ts.map +1 -0
  14. package/dist/lib/accounts/persistence.js +153 -0
  15. package/dist/lib/accounts/persistence.js.map +1 -0
  16. package/dist/lib/accounts/recovery.d.ts +59 -0
  17. package/dist/lib/accounts/recovery.d.ts.map +1 -0
  18. package/dist/lib/accounts/recovery.js +229 -0
  19. package/dist/lib/accounts/recovery.js.map +1 -0
  20. package/dist/lib/accounts/rotation.d.ts +40 -0
  21. package/dist/lib/accounts/rotation.d.ts.map +1 -0
  22. package/dist/lib/accounts/rotation.js +204 -0
  23. package/dist/lib/accounts/rotation.js.map +1 -0
  24. package/dist/lib/accounts/state.d.ts +92 -0
  25. package/dist/lib/accounts/state.d.ts.map +1 -0
  26. package/dist/lib/accounts/state.js +366 -0
  27. package/dist/lib/accounts/state.js.map +1 -0
  28. package/dist/lib/accounts.d.ts +48 -91
  29. package/dist/lib/accounts.d.ts.map +1 -1
  30. package/dist/lib/accounts.js +121 -699
  31. package/dist/lib/accounts.js.map +1 -1
  32. package/dist/lib/auth/auth.d.ts +1 -1
  33. package/dist/lib/auth/auth.d.ts.map +1 -1
  34. package/dist/lib/auth/auth.js +5 -2
  35. package/dist/lib/auth/auth.js.map +1 -1
  36. package/dist/lib/auth/login-runner.d.ts +32 -0
  37. package/dist/lib/auth/login-runner.d.ts.map +1 -1
  38. package/dist/lib/auth/login-runner.js +79 -64
  39. package/dist/lib/auth/login-runner.js.map +1 -1
  40. package/dist/lib/auth/server.d.ts.map +1 -1
  41. package/dist/lib/auth/server.js +3 -8
  42. package/dist/lib/auth/server.js.map +1 -1
  43. package/dist/lib/circuit-breaker.d.ts +53 -2
  44. package/dist/lib/circuit-breaker.d.ts.map +1 -1
  45. package/dist/lib/circuit-breaker.js +65 -6
  46. package/dist/lib/circuit-breaker.js.map +1 -1
  47. package/dist/lib/config.d.ts.map +1 -1
  48. package/dist/lib/config.js +77 -32
  49. package/dist/lib/config.js.map +1 -1
  50. package/dist/lib/error-sentinels.d.ts +20 -0
  51. package/dist/lib/error-sentinels.d.ts.map +1 -0
  52. package/dist/lib/error-sentinels.js +28 -0
  53. package/dist/lib/error-sentinels.js.map +1 -0
  54. package/dist/lib/errors.d.ts +100 -1
  55. package/dist/lib/errors.d.ts.map +1 -1
  56. package/dist/lib/errors.js +116 -1
  57. package/dist/lib/errors.js.map +1 -1
  58. package/dist/lib/logger.d.ts +14 -1
  59. package/dist/lib/logger.d.ts.map +1 -1
  60. package/dist/lib/logger.js +65 -5
  61. package/dist/lib/logger.js.map +1 -1
  62. package/dist/lib/oauth-constants.d.ts +18 -0
  63. package/dist/lib/oauth-constants.d.ts.map +1 -0
  64. package/dist/lib/oauth-constants.js +18 -0
  65. package/dist/lib/oauth-constants.js.map +1 -0
  66. package/dist/lib/oauth-success.d.ts +2 -0
  67. package/dist/lib/oauth-success.d.ts.map +1 -0
  68. package/dist/lib/oauth-success.html +711 -711
  69. package/dist/lib/oauth-success.js +714 -0
  70. package/dist/lib/oauth-success.js.map +1 -0
  71. package/dist/lib/prompts/codex.d.ts.map +1 -1
  72. package/dist/lib/prompts/codex.js +12 -3
  73. package/dist/lib/prompts/codex.js.map +1 -1
  74. package/dist/lib/prompts/opencode-codex.d.ts.map +1 -1
  75. package/dist/lib/prompts/opencode-codex.js +3 -2
  76. package/dist/lib/prompts/opencode-codex.js.map +1 -1
  77. package/dist/lib/recovery/hook.d.ts +43 -0
  78. package/dist/lib/recovery/hook.d.ts.map +1 -0
  79. package/dist/lib/recovery/hook.js +325 -0
  80. package/dist/lib/recovery/hook.js.map +1 -0
  81. package/dist/lib/recovery/index.d.ts +1 -0
  82. package/dist/lib/recovery/index.d.ts.map +1 -1
  83. package/dist/lib/recovery/index.js +1 -0
  84. package/dist/lib/recovery/index.js.map +1 -1
  85. package/dist/lib/recovery/storage.d.ts.map +1 -1
  86. package/dist/lib/recovery/storage.js +5 -1
  87. package/dist/lib/recovery/storage.js.map +1 -1
  88. package/dist/lib/recovery.d.ts +15 -30
  89. package/dist/lib/recovery.d.ts.map +1 -1
  90. package/dist/lib/recovery.js +14 -312
  91. package/dist/lib/recovery.js.map +1 -1
  92. package/dist/lib/request/fetch-helpers.d.ts +1 -0
  93. package/dist/lib/request/fetch-helpers.d.ts.map +1 -1
  94. package/dist/lib/request/fetch-helpers.js +58 -10
  95. package/dist/lib/request/fetch-helpers.js.map +1 -1
  96. package/dist/lib/request/response-handler.d.ts.map +1 -1
  97. package/dist/lib/request/response-handler.js +8 -2
  98. package/dist/lib/request/response-handler.js.map +1 -1
  99. package/dist/lib/runtime.d.ts +101 -0
  100. package/dist/lib/runtime.d.ts.map +1 -0
  101. package/dist/lib/runtime.js +77 -0
  102. package/dist/lib/runtime.js.map +1 -0
  103. package/dist/lib/schemas.d.ts +164 -1
  104. package/dist/lib/schemas.d.ts.map +1 -1
  105. package/dist/lib/schemas.js +251 -0
  106. package/dist/lib/schemas.js.map +1 -1
  107. package/dist/lib/storage/atomic-write.d.ts +31 -0
  108. package/dist/lib/storage/atomic-write.d.ts.map +1 -0
  109. package/dist/lib/storage/atomic-write.js +75 -0
  110. package/dist/lib/storage/atomic-write.js.map +1 -0
  111. package/dist/lib/storage/backup.d.ts +13 -0
  112. package/dist/lib/storage/backup.d.ts.map +1 -0
  113. package/dist/lib/storage/backup.js +59 -0
  114. package/dist/lib/storage/backup.js.map +1 -0
  115. package/dist/lib/storage/errors.d.ts +17 -0
  116. package/dist/lib/storage/errors.d.ts.map +1 -0
  117. package/dist/lib/storage/errors.js +38 -0
  118. package/dist/lib/storage/errors.js.map +1 -0
  119. package/dist/lib/storage/export-import.d.ts +84 -0
  120. package/dist/lib/storage/export-import.d.ts.map +1 -0
  121. package/dist/lib/storage/export-import.js +222 -0
  122. package/dist/lib/storage/export-import.js.map +1 -0
  123. package/dist/lib/storage/flagged.d.ts +29 -0
  124. package/dist/lib/storage/flagged.d.ts.map +1 -0
  125. package/dist/lib/storage/flagged.js +207 -0
  126. package/dist/lib/storage/flagged.js.map +1 -0
  127. package/dist/lib/storage/identity.d.ts +72 -0
  128. package/dist/lib/storage/identity.d.ts.map +1 -0
  129. package/dist/lib/storage/identity.js +230 -0
  130. package/dist/lib/storage/identity.js.map +1 -0
  131. package/dist/lib/storage/keychain.d.ts +146 -0
  132. package/dist/lib/storage/keychain.d.ts.map +1 -0
  133. package/dist/lib/storage/keychain.js +278 -0
  134. package/dist/lib/storage/keychain.js.map +1 -0
  135. package/dist/lib/storage/load-save.d.ts +61 -0
  136. package/dist/lib/storage/load-save.d.ts.map +1 -0
  137. package/dist/lib/storage/load-save.js +606 -0
  138. package/dist/lib/storage/load-save.js.map +1 -0
  139. package/dist/lib/storage/migrations.d.ts +35 -0
  140. package/dist/lib/storage/migrations.d.ts.map +1 -1
  141. package/dist/lib/storage/migrations.js +37 -0
  142. package/dist/lib/storage/migrations.js.map +1 -1
  143. package/dist/lib/storage/normalize.d.ts +22 -0
  144. package/dist/lib/storage/normalize.d.ts.map +1 -0
  145. package/dist/lib/storage/normalize.js +114 -0
  146. package/dist/lib/storage/normalize.js.map +1 -0
  147. package/dist/lib/storage/paths.d.ts.map +1 -1
  148. package/dist/lib/storage/paths.js +2 -1
  149. package/dist/lib/storage/paths.js.map +1 -1
  150. package/dist/lib/storage/state.d.ts +46 -0
  151. package/dist/lib/storage/state.d.ts.map +1 -0
  152. package/dist/lib/storage/state.js +100 -0
  153. package/dist/lib/storage/state.js.map +1 -0
  154. package/dist/lib/storage/worktree-lock.d.ts +79 -0
  155. package/dist/lib/storage/worktree-lock.d.ts.map +1 -0
  156. package/dist/lib/storage/worktree-lock.js +265 -0
  157. package/dist/lib/storage/worktree-lock.js.map +1 -0
  158. package/dist/lib/storage.d.ts +21 -155
  159. package/dist/lib/storage.d.ts.map +1 -1
  160. package/dist/lib/storage.js +24 -1167
  161. package/dist/lib/storage.js.map +1 -1
  162. package/dist/lib/tools/_shared.d.ts +16 -0
  163. package/dist/lib/tools/_shared.d.ts.map +1 -0
  164. package/dist/lib/tools/_shared.js +21 -0
  165. package/dist/lib/tools/_shared.js.map +1 -0
  166. package/dist/lib/tools/codex-dashboard.d.ts +8 -0
  167. package/dist/lib/tools/codex-dashboard.d.ts.map +1 -0
  168. package/dist/lib/tools/codex-dashboard.js +176 -0
  169. package/dist/lib/tools/codex-dashboard.js.map +1 -0
  170. package/dist/lib/tools/codex-diag.d.ts +19 -0
  171. package/dist/lib/tools/codex-diag.d.ts.map +1 -0
  172. package/dist/lib/tools/codex-diag.js +139 -0
  173. package/dist/lib/tools/codex-diag.js.map +1 -0
  174. package/dist/lib/tools/codex-diff.d.ts +44 -0
  175. package/dist/lib/tools/codex-diff.d.ts.map +1 -0
  176. package/dist/lib/tools/codex-diff.js +284 -0
  177. package/dist/lib/tools/codex-diff.js.map +1 -0
  178. package/dist/lib/tools/codex-doctor.d.ts +8 -0
  179. package/dist/lib/tools/codex-doctor.d.ts.map +1 -0
  180. package/dist/lib/tools/codex-doctor.js +284 -0
  181. package/dist/lib/tools/codex-doctor.js.map +1 -0
  182. package/dist/lib/tools/codex-export.d.ts +8 -0
  183. package/dist/lib/tools/codex-export.d.ts.map +1 -0
  184. package/dist/lib/tools/codex-export.js +63 -0
  185. package/dist/lib/tools/codex-export.js.map +1 -0
  186. package/dist/lib/tools/codex-health.d.ts +8 -0
  187. package/dist/lib/tools/codex-health.d.ts.map +1 -0
  188. package/dist/lib/tools/codex-health.js +124 -0
  189. package/dist/lib/tools/codex-health.js.map +1 -0
  190. package/dist/lib/tools/codex-help.d.ts +8 -0
  191. package/dist/lib/tools/codex-help.d.ts.map +1 -0
  192. package/dist/lib/tools/codex-help.js +127 -0
  193. package/dist/lib/tools/codex-help.js.map +1 -0
  194. package/dist/lib/tools/codex-import.d.ts +8 -0
  195. package/dist/lib/tools/codex-import.d.ts.map +1 -0
  196. package/dist/lib/tools/codex-import.js +97 -0
  197. package/dist/lib/tools/codex-import.js.map +1 -0
  198. package/dist/lib/tools/codex-keychain.d.ts +36 -0
  199. package/dist/lib/tools/codex-keychain.d.ts.map +1 -0
  200. package/dist/lib/tools/codex-keychain.js +289 -0
  201. package/dist/lib/tools/codex-keychain.js.map +1 -0
  202. package/dist/lib/tools/codex-label.d.ts +8 -0
  203. package/dist/lib/tools/codex-label.d.ts.map +1 -0
  204. package/dist/lib/tools/codex-label.js +143 -0
  205. package/dist/lib/tools/codex-label.js.map +1 -0
  206. package/dist/lib/tools/codex-limits.d.ts +8 -0
  207. package/dist/lib/tools/codex-limits.d.ts.map +1 -0
  208. package/dist/lib/tools/codex-limits.js +497 -0
  209. package/dist/lib/tools/codex-limits.js.map +1 -0
  210. package/dist/lib/tools/codex-list.d.ts +8 -0
  211. package/dist/lib/tools/codex-list.d.ts.map +1 -0
  212. package/dist/lib/tools/codex-list.js +260 -0
  213. package/dist/lib/tools/codex-list.js.map +1 -0
  214. package/dist/lib/tools/codex-metrics.d.ts +8 -0
  215. package/dist/lib/tools/codex-metrics.d.ts.map +1 -0
  216. package/dist/lib/tools/codex-metrics.js +180 -0
  217. package/dist/lib/tools/codex-metrics.js.map +1 -0
  218. package/dist/lib/tools/codex-next.d.ts +8 -0
  219. package/dist/lib/tools/codex-next.d.ts.map +1 -0
  220. package/dist/lib/tools/codex-next.js +54 -0
  221. package/dist/lib/tools/codex-next.js.map +1 -0
  222. package/dist/lib/tools/codex-note.d.ts +8 -0
  223. package/dist/lib/tools/codex-note.d.ts.map +1 -0
  224. package/dist/lib/tools/codex-note.js +79 -0
  225. package/dist/lib/tools/codex-note.js.map +1 -0
  226. package/dist/lib/tools/codex-refresh.d.ts +8 -0
  227. package/dist/lib/tools/codex-refresh.d.ts.map +1 -0
  228. package/dist/lib/tools/codex-refresh.js +78 -0
  229. package/dist/lib/tools/codex-refresh.js.map +1 -0
  230. package/dist/lib/tools/codex-remove.d.ts +8 -0
  231. package/dist/lib/tools/codex-remove.d.ts.map +1 -0
  232. package/dist/lib/tools/codex-remove.js +184 -0
  233. package/dist/lib/tools/codex-remove.js.map +1 -0
  234. package/dist/lib/tools/codex-setup.d.ts +8 -0
  235. package/dist/lib/tools/codex-setup.d.ts.map +1 -0
  236. package/dist/lib/tools/codex-setup.js +26 -0
  237. package/dist/lib/tools/codex-setup.js.map +1 -0
  238. package/dist/lib/tools/codex-status.d.ts +8 -0
  239. package/dist/lib/tools/codex-status.d.ts.map +1 -0
  240. package/dist/lib/tools/codex-status.js +263 -0
  241. package/dist/lib/tools/codex-status.js.map +1 -0
  242. package/dist/lib/tools/codex-switch.d.ts +8 -0
  243. package/dist/lib/tools/codex-switch.d.ts.map +1 -0
  244. package/dist/lib/tools/codex-switch.js +122 -0
  245. package/dist/lib/tools/codex-switch.js.map +1 -0
  246. package/dist/lib/tools/codex-tag.d.ts +8 -0
  247. package/dist/lib/tools/codex-tag.d.ts.map +1 -0
  248. package/dist/lib/tools/codex-tag.js +101 -0
  249. package/dist/lib/tools/codex-tag.js.map +1 -0
  250. package/dist/lib/tools/index.d.ts +143 -0
  251. package/dist/lib/tools/index.d.ts.map +1 -0
  252. package/dist/lib/tools/index.js +67 -0
  253. package/dist/lib/tools/index.js.map +1 -0
  254. package/dist/lib/ui/format.d.ts.map +1 -1
  255. package/dist/lib/ui/format.js +5 -0
  256. package/dist/lib/ui/format.js.map +1 -1
  257. package/dist/lib/ui/runtime.d.ts +10 -0
  258. package/dist/lib/ui/runtime.d.ts.map +1 -1
  259. package/dist/lib/ui/runtime.js +16 -11
  260. package/dist/lib/ui/runtime.js.map +1 -1
  261. package/dist/lib/ui/select.d.ts.map +1 -1
  262. package/dist/lib/ui/select.js +12 -3
  263. package/dist/lib/ui/select.js.map +1 -1
  264. package/dist/lib/ui/theme.d.ts +19 -0
  265. package/dist/lib/ui/theme.d.ts.map +1 -1
  266. package/dist/lib/ui/theme.js +27 -0
  267. package/dist/lib/ui/theme.js.map +1 -1
  268. package/package.json +24 -16
  269. package/scripts/copy-oauth-success.js +16 -6
  270. package/scripts/install-oc-codex-multi-auth-core.js +462 -381
  271. package/scripts/install-oc-codex-multi-auth.js +15 -15
  272. package/scripts/test-all-models.sh +1 -1
  273. package/dist/lib/audit.d.ts +0 -45
  274. package/dist/lib/audit.d.ts.map +0 -1
  275. package/dist/lib/audit.js +0 -154
  276. package/dist/lib/audit.js.map +0 -1
  277. package/dist/lib/auth-rate-limit.d.ts +0 -20
  278. package/dist/lib/auth-rate-limit.d.ts.map +0 -1
  279. package/dist/lib/auth-rate-limit.js +0 -91
  280. package/dist/lib/auth-rate-limit.js.map +0 -1
  281. package/dist/lib/runtime-contracts.d.ts +0 -16
  282. package/dist/lib/runtime-contracts.d.ts.map +0 -1
  283. package/dist/lib/runtime-contracts.js +0 -24
  284. package/dist/lib/runtime-contracts.js.map +0 -1
@@ -0,0 +1,366 @@
1
+ /**
2
+ * In-memory account registry for {@link AccountManager}.
3
+ *
4
+ * Owns the mutable account list, per-family cursors/active indices, and
5
+ * auxiliary in-memory state (toast debounce, auth-failure counters).
6
+ * Other account services (persistence, rotation, recovery) receive a reference
7
+ * to an `AccountState` instance and mutate it through this narrow surface.
8
+ */
9
+ import { MODEL_FAMILIES } from "../prompts/codex.js";
10
+ import { nowMs } from "../utils.js";
11
+ import { clampNonNegativeInt, clearExpiredRateLimits, getQuotaKey, isRateLimitedForFamily, } from "./rate-limits.js";
12
+ import { extractAccountEmail, extractAccountId, sanitizeEmail, shouldUpdateAccountIdFromToken, } from "../auth/token-utils.js";
13
+ import { getHealthTracker, getTokenTracker } from "../rotation.js";
14
+ function initFamilyState(defaultValue) {
15
+ return Object.fromEntries(MODEL_FAMILIES.map((family) => [family, defaultValue]));
16
+ }
17
+ export class AccountState {
18
+ accounts = [];
19
+ cursorByFamily = initFamilyState(0);
20
+ currentAccountIndexByFamily = initFamilyState(-1);
21
+ lastToastAccountIndex = -1;
22
+ lastToastTime = 0;
23
+ authFailuresByRefreshToken = new Map();
24
+ /**
25
+ * Per-refresh-token promise chain used to serialize concurrent
26
+ * `incrementAuthFailures` calls. Prevents lost updates when two org-variant
27
+ * accounts that share a refresh token observe an auth failure at once — see
28
+ * audit finding `docs/audits/03-critical-issues.md` (ledger id `47`).
29
+ */
30
+ incrementAuthFailuresChain = new Map();
31
+ initializeFromStorage(authFallback, stored) {
32
+ const fallbackAccountId = extractAccountId(authFallback?.access);
33
+ const fallbackAccountEmail = sanitizeEmail(extractAccountEmail(authFallback?.access));
34
+ if (stored && stored.accounts.length > 0) {
35
+ const baseNow = nowMs();
36
+ this.accounts = stored.accounts
37
+ .map((account, index) => {
38
+ if (!account.refreshToken || typeof account.refreshToken !== "string") {
39
+ return null;
40
+ }
41
+ const matchesFallback = !!authFallback &&
42
+ ((fallbackAccountId && account.accountId === fallbackAccountId) ||
43
+ account.refreshToken === authFallback.refresh ||
44
+ (!!fallbackAccountEmail &&
45
+ sanitizeEmail(account.email) === fallbackAccountEmail));
46
+ const refreshToken = matchesFallback && authFallback ? authFallback.refresh : account.refreshToken;
47
+ return {
48
+ index,
49
+ accountId: matchesFallback
50
+ ? fallbackAccountId ?? account.accountId
51
+ : account.accountId,
52
+ organizationId: account.organizationId,
53
+ accountIdSource: account.accountIdSource,
54
+ accountLabel: account.accountLabel,
55
+ accountTags: account.accountTags,
56
+ accountNote: account.accountNote,
57
+ email: matchesFallback
58
+ ? fallbackAccountEmail ?? sanitizeEmail(account.email)
59
+ : sanitizeEmail(account.email),
60
+ refreshToken,
61
+ enabled: account.enabled !== false,
62
+ access: matchesFallback && authFallback ? authFallback.access : account.accessToken,
63
+ expires: matchesFallback && authFallback ? authFallback.expires : account.expiresAt,
64
+ addedAt: clampNonNegativeInt(account.addedAt, baseNow),
65
+ lastUsed: clampNonNegativeInt(account.lastUsed, 0),
66
+ lastSwitchReason: account.lastSwitchReason,
67
+ rateLimitResetTimes: account.rateLimitResetTimes ?? {},
68
+ coolingDownUntil: account.coolingDownUntil,
69
+ cooldownReason: account.cooldownReason,
70
+ };
71
+ })
72
+ .filter((account) => account !== null);
73
+ const hasMatchingFallback = !!authFallback &&
74
+ this.accounts.some((account) => account.refreshToken === authFallback.refresh ||
75
+ (fallbackAccountId && account.accountId === fallbackAccountId) ||
76
+ (!!fallbackAccountEmail && account.email === fallbackAccountEmail));
77
+ if (authFallback && !hasMatchingFallback) {
78
+ const now = nowMs();
79
+ this.accounts.push({
80
+ index: this.accounts.length,
81
+ accountId: fallbackAccountId,
82
+ organizationId: undefined,
83
+ accountIdSource: fallbackAccountId ? "token" : undefined,
84
+ email: fallbackAccountEmail,
85
+ refreshToken: authFallback.refresh,
86
+ enabled: true,
87
+ access: authFallback.access,
88
+ expires: authFallback.expires,
89
+ addedAt: now,
90
+ lastUsed: now,
91
+ lastSwitchReason: "initial",
92
+ rateLimitResetTimes: {},
93
+ });
94
+ }
95
+ if (this.accounts.length > 0) {
96
+ const defaultIndex = clampNonNegativeInt(stored.activeIndex, 0) % this.accounts.length;
97
+ for (const family of MODEL_FAMILIES) {
98
+ const rawIndex = stored.activeIndexByFamily?.[family];
99
+ const nextIndex = clampNonNegativeInt(rawIndex, defaultIndex) % this.accounts.length;
100
+ this.currentAccountIndexByFamily[family] = nextIndex;
101
+ this.cursorByFamily[family] = nextIndex;
102
+ }
103
+ }
104
+ return;
105
+ }
106
+ if (authFallback) {
107
+ const now = nowMs();
108
+ this.accounts = [
109
+ {
110
+ index: 0,
111
+ accountId: fallbackAccountId,
112
+ organizationId: undefined,
113
+ accountIdSource: fallbackAccountId ? "token" : undefined,
114
+ email: fallbackAccountEmail,
115
+ refreshToken: authFallback.refresh,
116
+ enabled: true,
117
+ access: authFallback.access,
118
+ expires: authFallback.expires,
119
+ addedAt: now,
120
+ lastUsed: 0,
121
+ lastSwitchReason: "initial",
122
+ rateLimitResetTimes: {},
123
+ },
124
+ ];
125
+ for (const family of MODEL_FAMILIES) {
126
+ this.currentAccountIndexByFamily[family] = 0;
127
+ this.cursorByFamily[family] = 0;
128
+ }
129
+ }
130
+ }
131
+ hasRefreshToken(refreshToken) {
132
+ return this.accounts.some((account) => account.refreshToken === refreshToken);
133
+ }
134
+ getAccountCount() {
135
+ return this.accounts.length;
136
+ }
137
+ getActiveIndexForFamily(family) {
138
+ const index = this.currentAccountIndexByFamily[family];
139
+ if (index < 0 || index >= this.accounts.length) {
140
+ return this.accounts.length > 0 ? 0 : -1;
141
+ }
142
+ return index;
143
+ }
144
+ getAccountsSnapshot() {
145
+ return this.accounts.map((account) => ({
146
+ ...account,
147
+ rateLimitResetTimes: { ...account.rateLimitResetTimes },
148
+ }));
149
+ }
150
+ getSelectionExplainability(family, model, now = nowMs()) {
151
+ const quotaKey = model ? `${family}:${model}` : family;
152
+ const baseQuotaKey = getQuotaKey(family);
153
+ const modelQuotaKey = model ? getQuotaKey(family, model) : null;
154
+ const currentIndex = this.currentAccountIndexByFamily[family];
155
+ const healthTracker = getHealthTracker();
156
+ const tokenTracker = getTokenTracker();
157
+ return this.accounts.map((account) => {
158
+ clearExpiredRateLimits(account);
159
+ const enabled = account.enabled !== false;
160
+ const reasons = [];
161
+ let rateLimitedUntil;
162
+ const baseRateLimit = account.rateLimitResetTimes[baseQuotaKey];
163
+ const modelRateLimit = modelQuotaKey
164
+ ? account.rateLimitResetTimes[modelQuotaKey]
165
+ : undefined;
166
+ if (typeof baseRateLimit === "number" && baseRateLimit > now) {
167
+ rateLimitedUntil = baseRateLimit;
168
+ }
169
+ if (typeof modelRateLimit === "number" &&
170
+ modelRateLimit > now &&
171
+ (rateLimitedUntil === undefined || modelRateLimit > rateLimitedUntil)) {
172
+ rateLimitedUntil = modelRateLimit;
173
+ }
174
+ const coolingDownUntil = typeof account.coolingDownUntil === "number" && account.coolingDownUntil > now
175
+ ? account.coolingDownUntil
176
+ : undefined;
177
+ if (!enabled)
178
+ reasons.push("disabled");
179
+ if (rateLimitedUntil !== undefined)
180
+ reasons.push("rate-limited");
181
+ if (coolingDownUntil !== undefined) {
182
+ reasons.push(account.cooldownReason ? `cooldown:${account.cooldownReason}` : "cooldown");
183
+ }
184
+ const tokensAvailable = tokenTracker.getTokens(account.index, quotaKey);
185
+ if (tokensAvailable < 1)
186
+ reasons.push("token-bucket-empty");
187
+ const eligible = enabled &&
188
+ rateLimitedUntil === undefined &&
189
+ coolingDownUntil === undefined &&
190
+ tokensAvailable >= 1;
191
+ if (reasons.length === 0)
192
+ reasons.push("eligible");
193
+ return {
194
+ index: account.index,
195
+ enabled,
196
+ isCurrentForFamily: currentIndex === account.index,
197
+ eligible,
198
+ reasons,
199
+ healthScore: healthTracker.getScore(account.index, quotaKey),
200
+ tokensAvailable,
201
+ rateLimitedUntil,
202
+ coolingDownUntil,
203
+ cooldownReason: coolingDownUntil !== undefined ? account.cooldownReason : undefined,
204
+ lastUsed: account.lastUsed,
205
+ };
206
+ });
207
+ }
208
+ setActiveIndex(index) {
209
+ if (!Number.isFinite(index))
210
+ return null;
211
+ if (index < 0 || index >= this.accounts.length)
212
+ return null;
213
+ const account = this.accounts[index];
214
+ if (!account)
215
+ return null;
216
+ if (account.enabled === false)
217
+ return null;
218
+ for (const family of MODEL_FAMILIES) {
219
+ this.currentAccountIndexByFamily[family] = index;
220
+ this.cursorByFamily[family] = index;
221
+ }
222
+ account.lastUsed = nowMs();
223
+ account.lastSwitchReason = "rotation";
224
+ return account;
225
+ }
226
+ getCurrentAccountForFamily(family) {
227
+ const index = this.currentAccountIndexByFamily[family];
228
+ if (index < 0 || index >= this.accounts.length) {
229
+ return null;
230
+ }
231
+ const account = this.accounts[index];
232
+ if (!account || account.enabled === false) {
233
+ return null;
234
+ }
235
+ return account;
236
+ }
237
+ shouldShowAccountToast(accountIndex, debounceMs = 30000) {
238
+ const now = nowMs();
239
+ if (accountIndex === this.lastToastAccountIndex &&
240
+ now - this.lastToastTime < debounceMs) {
241
+ return false;
242
+ }
243
+ return true;
244
+ }
245
+ markToastShown(accountIndex) {
246
+ this.lastToastAccountIndex = accountIndex;
247
+ this.lastToastTime = nowMs();
248
+ }
249
+ updateFromAuth(account, auth) {
250
+ const previousRefreshToken = account.refreshToken;
251
+ account.refreshToken = auth.refresh;
252
+ account.access = auth.access;
253
+ account.expires = auth.expires;
254
+ if (previousRefreshToken !== account.refreshToken) {
255
+ this.authFailuresByRefreshToken.delete(previousRefreshToken);
256
+ }
257
+ const tokenAccountId = extractAccountId(auth.access);
258
+ if (tokenAccountId &&
259
+ shouldUpdateAccountIdFromToken(account.accountIdSource, account.accountId)) {
260
+ account.accountId = tokenAccountId;
261
+ account.accountIdSource = "token";
262
+ }
263
+ account.email = sanitizeEmail(extractAccountEmail(auth.access)) ?? account.email;
264
+ }
265
+ toAuthDetails(account) {
266
+ return {
267
+ type: "oauth",
268
+ access: account.access ?? "",
269
+ refresh: account.refreshToken,
270
+ expires: account.expires ?? 0,
271
+ };
272
+ }
273
+ markSwitched(account, reason, family) {
274
+ account.lastSwitchReason = reason;
275
+ this.currentAccountIndexByFamily[family] = account.index;
276
+ }
277
+ removeAccount(account) {
278
+ const idx = this.accounts.indexOf(account);
279
+ if (idx < 0) {
280
+ return false;
281
+ }
282
+ this.accounts.splice(idx, 1);
283
+ this.accounts.forEach((acc, index) => {
284
+ acc.index = index;
285
+ });
286
+ if (this.accounts.length === 0) {
287
+ for (const family of MODEL_FAMILIES) {
288
+ this.cursorByFamily[family] = 0;
289
+ this.currentAccountIndexByFamily[family] = -1;
290
+ }
291
+ return true;
292
+ }
293
+ for (const family of MODEL_FAMILIES) {
294
+ if (this.cursorByFamily[family] > idx) {
295
+ this.cursorByFamily[family] = Math.max(0, this.cursorByFamily[family] - 1);
296
+ }
297
+ }
298
+ for (const family of MODEL_FAMILIES) {
299
+ this.cursorByFamily[family] = this.cursorByFamily[family] % this.accounts.length;
300
+ }
301
+ for (const family of MODEL_FAMILIES) {
302
+ if (this.currentAccountIndexByFamily[family] > idx) {
303
+ this.currentAccountIndexByFamily[family] -= 1;
304
+ }
305
+ if (this.currentAccountIndexByFamily[family] >= this.accounts.length) {
306
+ this.currentAccountIndexByFamily[family] = -1;
307
+ }
308
+ }
309
+ return true;
310
+ }
311
+ removeAccountByIndex(index) {
312
+ if (!Number.isFinite(index))
313
+ return false;
314
+ if (index < 0 || index >= this.accounts.length)
315
+ return false;
316
+ const account = this.accounts[index];
317
+ if (!account)
318
+ return false;
319
+ return this.removeAccount(account);
320
+ }
321
+ setAccountEnabled(index, enabled) {
322
+ if (!Number.isFinite(index))
323
+ return null;
324
+ if (index < 0 || index >= this.accounts.length)
325
+ return null;
326
+ const account = this.accounts[index];
327
+ if (!account)
328
+ return null;
329
+ account.enabled = enabled;
330
+ return account;
331
+ }
332
+ /**
333
+ * Check whether a cooldown window is still active for the given account.
334
+ * Clears expired cooldowns as a side-effect so that stale `coolingDownUntil`
335
+ * timestamps do not leak into snapshots or persistence.
336
+ */
337
+ isAccountCoolingDown(account) {
338
+ if (account.coolingDownUntil === undefined)
339
+ return false;
340
+ if (nowMs() >= account.coolingDownUntil) {
341
+ this.clearAccountCooldown(account);
342
+ return false;
343
+ }
344
+ return true;
345
+ }
346
+ clearAccountCooldown(account) {
347
+ delete account.coolingDownUntil;
348
+ delete account.cooldownReason;
349
+ }
350
+ /**
351
+ * Shared predicate used by rotation and diagnostic paths: is this account
352
+ * usable for the given family/model right now? Combines enabled flag,
353
+ * rate-limit expiry, and cooldown.
354
+ */
355
+ isEligibleForFamily(account, family, model) {
356
+ if (account.enabled === false)
357
+ return false;
358
+ clearExpiredRateLimits(account);
359
+ if (isRateLimitedForFamily(account, family, model))
360
+ return false;
361
+ if (this.isAccountCoolingDown(account))
362
+ return false;
363
+ return true;
364
+ }
365
+ }
366
+ //# sourceMappingURL=state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../../lib/accounts/state.ts"],"names":[],"mappings":"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"}
@@ -1,65 +1,42 @@
1
+ /**
2
+ * AccountManager — slim orchestrator that composes four domain services:
3
+ *
4
+ * - {@link AccountState} — in-memory account registry + per-family indices
5
+ * - {@link AccountPersistence} — debounced disk saves, shutdown-flush lifecycle
6
+ * - {@link AccountRotation} — selection, rate-limit and cooldown management
7
+ * - {@link AccountRecovery} — auth-failure tracking, Codex CLI hydration,
8
+ * merge-safe removal
9
+ *
10
+ * This module preserves the public API that existed before the RC-7 split so
11
+ * that `new AccountManager(...)` and every instance method keeps working for
12
+ * external callers (`index.ts`, `lib/tools/*`, `lib/parallel-probe.ts`, etc.).
13
+ */
1
14
  import type { Auth } from "@opencode-ai/sdk";
2
- import { type AccountStorageV3, type CooldownReason, type RateLimitStateV3 } from "./storage.js";
3
- import type { AccountIdSource, OAuthAuthDetails } from "./types.js";
4
- import { type ModelFamily } from "./prompts/codex.js";
5
- import { type HybridSelectionOptions } from "./rotation.js";
15
+ import { type AccountStorageV3, type CooldownReason } from "./storage.js";
16
+ import type { HybridSelectionOptions } from "./rotation.js";
17
+ import type { OAuthAuthDetails } from "./types.js";
18
+ import type { ModelFamily } from "./prompts/codex.js";
19
+ import { type AccountSelectionExplainability, type ManagedAccount } from "./accounts/state.js";
20
+ import { type RateLimitReason } from "./accounts/rate-limits.js";
21
+ export type { AccountSelectionExplainability, ManagedAccount } from "./accounts/state.js";
6
22
  export { extractAccountId, extractAccountEmail, getAccountIdCandidates, selectBestAccountCandidate, shouldUpdateAccountIdFromToken, resolveRequestAccountId, sanitizeEmail, type AccountIdCandidate, } from "./auth/token-utils.js";
7
23
  export { parseRateLimitReason, getQuotaKey, clampNonNegativeInt, clearExpiredRateLimits, isRateLimitedForQuotaKey, isRateLimitedForFamily, formatWaitTime, type QuotaKey, type BaseQuotaKey, type RateLimitReason, type RateLimitState, type RateLimitedEntity, } from "./accounts/rate-limits.js";
8
- import { type RateLimitReason } from "./accounts/rate-limits.js";
9
- export type CodexCliTokenCacheEntry = {
10
- accessToken: string;
11
- expiresAt?: number;
12
- refreshToken?: string;
13
- accountId?: string;
14
- };
15
- export declare function lookupCodexCliTokensByEmail(email: string | undefined): Promise<CodexCliTokenCacheEntry | null>;
16
- export interface ManagedAccount {
17
- index: number;
18
- accountId?: string;
19
- organizationId?: string;
20
- accountIdSource?: AccountIdSource;
21
- accountLabel?: string;
22
- accountTags?: string[];
23
- accountNote?: string;
24
- email?: string;
25
- refreshToken: string;
26
- enabled?: boolean;
27
- access?: string;
28
- expires?: number;
29
- addedAt: number;
30
- lastUsed: number;
31
- lastSwitchReason?: "rate-limit" | "initial" | "rotation";
32
- lastRateLimitReason?: RateLimitReason;
33
- rateLimitResetTimes: RateLimitStateV3;
34
- coolingDownUntil?: number;
35
- cooldownReason?: CooldownReason;
36
- }
37
- export interface AccountSelectionExplainability {
38
- index: number;
39
- enabled: boolean;
40
- isCurrentForFamily: boolean;
41
- eligible: boolean;
42
- reasons: string[];
43
- healthScore: number;
44
- tokensAvailable: number;
45
- rateLimitedUntil?: number;
46
- coolingDownUntil?: number;
47
- cooldownReason?: CooldownReason;
48
- lastUsed: number;
49
- }
24
+ export { lookupCodexCliTokensByEmail, type CodexCliTokenCacheEntry, } from "./accounts/recovery.js";
50
25
  export declare class AccountManager {
51
- private accounts;
52
- private cursorByFamily;
53
- private currentAccountIndexByFamily;
54
- private lastToastAccountIndex;
55
- private lastToastTime;
56
- private saveDebounceTimer;
57
- private pendingSave;
58
- private authFailuresByRefreshToken;
26
+ private readonly state;
27
+ private readonly persistence;
28
+ private readonly rotation;
29
+ private readonly recovery;
30
+ /**
31
+ * Alias to `state.authFailuresByRefreshToken`. Preserved as a property on
32
+ * the orchestrator so that pre-split tests and diagnostics that reach in
33
+ * via `Reflect.get(manager, "authFailuresByRefreshToken")` continue to see
34
+ * the live map without edits. Internal use only.
35
+ */
36
+ private get authFailuresByRefreshToken();
37
+ constructor(authFallback?: OAuthAuthDetails, stored?: AccountStorageV3 | null);
59
38
  static loadFromDisk(authFallback?: OAuthAuthDetails): Promise<AccountManager>;
60
39
  hasRefreshToken(refreshToken: string): boolean;
61
- private hydrateFromCodexCli;
62
- constructor(authFallback?: OAuthAuthDetails, stored?: AccountStorageV3 | null);
63
40
  getAccountCount(): number;
64
41
  getActiveIndex(): number;
65
42
  getActiveIndexForFamily(family: ModelFamily): number;
@@ -68,6 +45,16 @@ export declare class AccountManager {
68
45
  setActiveIndex(index: number): ManagedAccount | null;
69
46
  getCurrentAccount(): ManagedAccount | null;
70
47
  getCurrentAccountForFamily(family: ModelFamily): ManagedAccount | null;
48
+ shouldShowAccountToast(accountIndex: number, debounceMs?: number): boolean;
49
+ markToastShown(accountIndex: number): void;
50
+ updateFromAuth(account: ManagedAccount, auth: OAuthAuthDetails): void;
51
+ toAuthDetails(account: ManagedAccount): Auth;
52
+ markSwitched(account: ManagedAccount, reason: "rate-limit" | "initial" | "rotation", family: ModelFamily): void;
53
+ removeAccount(account: ManagedAccount): boolean;
54
+ removeAccountByIndex(index: number): boolean;
55
+ setAccountEnabled(index: number, enabled: boolean): ManagedAccount | null;
56
+ isAccountCoolingDown(account: ManagedAccount): boolean;
57
+ clearAccountCooldown(account: ManagedAccount): void;
71
58
  getCurrentOrNext(): ManagedAccount | null;
72
59
  getCurrentOrNextForFamily(family: ModelFamily, model?: string | null): ManagedAccount | null;
73
60
  getNextForFamily(family: ModelFamily, model?: string | null): ManagedAccount | null;
@@ -76,51 +63,21 @@ export declare class AccountManager {
76
63
  recordRateLimit(account: ManagedAccount, family: ModelFamily, model?: string | null): void;
77
64
  recordFailure(account: ManagedAccount, family: ModelFamily, model?: string | null): void;
78
65
  consumeToken(account: ManagedAccount, family: ModelFamily, model?: string | null): boolean;
79
- /**
80
- * Refund a token consumed within the refund window (30 seconds).
81
- * Use this when a request fails due to network errors (not rate limits).
82
- * @returns true if refund was successful, false if no valid consumption found
83
- */
84
66
  refundToken(account: ManagedAccount, family: ModelFamily, model?: string | null): boolean;
85
- markSwitched(account: ManagedAccount, reason: "rate-limit" | "initial" | "rotation", family: ModelFamily): void;
86
67
  markRateLimited(account: ManagedAccount, retryAfterMs: number, family: ModelFamily, model?: string | null): void;
87
68
  markRateLimitedWithReason(account: ManagedAccount, retryAfterMs: number, family: ModelFamily, reason: RateLimitReason, model?: string | null): void;
88
69
  markAccountCoolingDown(account: ManagedAccount, cooldownMs: number, reason: CooldownReason): void;
89
- /**
90
- * Mark every in-memory account sharing a refresh token as cooling down.
91
- * @returns Number of live accounts updated.
92
- */
93
70
  markAccountsWithRefreshTokenCoolingDown(refreshToken: string, cooldownMs: number, reason: CooldownReason): number;
94
- isAccountCoolingDown(account: ManagedAccount): boolean;
95
- clearAccountCooldown(account: ManagedAccount): void;
96
- incrementAuthFailures(account: ManagedAccount): number;
97
- /**
98
- * Clear the authentication failure counter for the given account's refresh token.
99
- *
100
- * Notes:
101
- * - Failure counts are tracked per refresh token (not per account), so this clears
102
- * shared failure state for all org variants that reuse the same token.
103
- * - Failure counts are in-memory only for the current AccountManager instance.
104
- */
105
- clearAuthFailures(account: ManagedAccount): void;
106
- shouldShowAccountToast(accountIndex: number, debounceMs?: number): boolean;
107
- markToastShown(accountIndex: number): void;
108
- updateFromAuth(account: ManagedAccount, auth: OAuthAuthDetails): void;
109
- toAuthDetails(account: ManagedAccount): Auth;
110
71
  getMinWaitTime(): number;
111
72
  getMinWaitTimeForFamily(family: ModelFamily, model?: string | null): number;
112
- removeAccount(account: ManagedAccount): boolean;
113
- removeAccountByIndex(index: number): boolean;
114
- /**
115
- * Remove all accounts that share the same refreshToken as the given account.
116
- * This is used when auth refresh fails to remove all org variants together.
117
- * @returns Number of accounts removed
118
- */
119
- removeAccountsWithSameRefreshToken(account: ManagedAccount): number;
120
- setAccountEnabled(index: number, enabled: boolean): ManagedAccount | null;
121
73
  saveToDisk(): Promise<void>;
122
74
  saveToDiskDebounced(delayMs?: number): void;
123
75
  flushPendingSave(): Promise<void>;
76
+ disposeShutdownHandler(): void;
77
+ incrementAuthFailures(account: ManagedAccount): Promise<number>;
78
+ getAuthFailures(account: ManagedAccount): number;
79
+ clearAuthFailures(account: ManagedAccount): void;
80
+ removeAccountsWithSameRefreshToken(account: ManagedAccount): number;
124
81
  }
125
82
  export declare function formatAccountLabel(account: {
126
83
  email?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"accounts.d.ts","sourceRoot":"","sources":["../../lib/accounts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"accounts.d.ts","sourceRoot":"","sources":["../../lib/accounts.ts"],"names":[],"mappings":"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"}