codex-multi-auth 1.2.0 → 1.2.2

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 (651) hide show
  1. package/README.md +49 -32
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +929 -1712
  4. package/dist/index.js.map +1 -1
  5. package/dist/lib/accounts.d.ts +10 -0
  6. package/dist/lib/accounts.d.ts.map +1 -1
  7. package/dist/lib/accounts.js +312 -69
  8. package/dist/lib/accounts.js.map +1 -1
  9. package/dist/lib/auth/index.d.ts +2 -0
  10. package/dist/lib/auth/index.d.ts.map +1 -0
  11. package/dist/lib/auth/index.js +2 -0
  12. package/dist/lib/auth/index.js.map +1 -0
  13. package/dist/lib/circuit-breaker.d.ts +4 -0
  14. package/dist/lib/circuit-breaker.d.ts.map +1 -1
  15. package/dist/lib/circuit-breaker.js +33 -1
  16. package/dist/lib/circuit-breaker.js.map +1 -1
  17. package/dist/lib/codex-cli/index.d.ts +5 -0
  18. package/dist/lib/codex-cli/index.d.ts.map +1 -0
  19. package/dist/lib/codex-cli/index.js +5 -0
  20. package/dist/lib/codex-cli/index.js.map +1 -0
  21. package/dist/lib/codex-manager/auth-commands.d.ts +72 -0
  22. package/dist/lib/codex-manager/auth-commands.d.ts.map +1 -0
  23. package/dist/lib/codex-manager/auth-commands.js +643 -0
  24. package/dist/lib/codex-manager/auth-commands.js.map +1 -0
  25. package/dist/lib/codex-manager/backend-category-entry.d.ts +103 -0
  26. package/dist/lib/codex-manager/backend-category-entry.d.ts.map +1 -0
  27. package/dist/lib/codex-manager/backend-category-entry.js +23 -0
  28. package/dist/lib/codex-manager/backend-category-entry.js.map +1 -0
  29. package/dist/lib/codex-manager/backend-category-helpers.d.ts +10 -0
  30. package/dist/lib/codex-manager/backend-category-helpers.d.ts.map +1 -0
  31. package/dist/lib/codex-manager/backend-category-helpers.js +29 -0
  32. package/dist/lib/codex-manager/backend-category-helpers.js.map +1 -0
  33. package/dist/lib/codex-manager/backend-category-prompt.d.ts +55 -0
  34. package/dist/lib/codex-manager/backend-category-prompt.d.ts.map +1 -0
  35. package/dist/lib/codex-manager/backend-category-prompt.js +178 -0
  36. package/dist/lib/codex-manager/backend-category-prompt.js.map +1 -0
  37. package/dist/lib/codex-manager/backend-settings-controller.d.ts +11 -0
  38. package/dist/lib/codex-manager/backend-settings-controller.d.ts.map +1 -0
  39. package/dist/lib/codex-manager/backend-settings-controller.js +14 -0
  40. package/dist/lib/codex-manager/backend-settings-controller.js.map +1 -0
  41. package/dist/lib/codex-manager/backend-settings-entry.d.ts +20 -0
  42. package/dist/lib/codex-manager/backend-settings-entry.d.ts.map +1 -0
  43. package/dist/lib/codex-manager/backend-settings-entry.js +12 -0
  44. package/dist/lib/codex-manager/backend-settings-entry.js.map +1 -0
  45. package/dist/lib/codex-manager/backend-settings-helpers.d.ts +16 -0
  46. package/dist/lib/codex-manager/backend-settings-helpers.d.ts.map +1 -0
  47. package/dist/lib/codex-manager/backend-settings-helpers.js +102 -0
  48. package/dist/lib/codex-manager/backend-settings-helpers.js.map +1 -0
  49. package/dist/lib/codex-manager/backend-settings-prompt.d.ts +49 -0
  50. package/dist/lib/codex-manager/backend-settings-prompt.d.ts.map +1 -0
  51. package/dist/lib/codex-manager/backend-settings-prompt.js +121 -0
  52. package/dist/lib/codex-manager/backend-settings-prompt.js.map +1 -0
  53. package/dist/lib/codex-manager/backend-settings-schema.d.ts +55 -0
  54. package/dist/lib/codex-manager/backend-settings-schema.d.ts.map +1 -0
  55. package/dist/lib/codex-manager/backend-settings-schema.js +264 -0
  56. package/dist/lib/codex-manager/backend-settings-schema.js.map +1 -0
  57. package/dist/lib/codex-manager/behavior-settings-panel.d.ts +33 -0
  58. package/dist/lib/codex-manager/behavior-settings-panel.d.ts.map +1 -0
  59. package/dist/lib/codex-manager/behavior-settings-panel.js +180 -0
  60. package/dist/lib/codex-manager/behavior-settings-panel.js.map +1 -0
  61. package/dist/lib/codex-manager/commands/best.d.ts +81 -0
  62. package/dist/lib/codex-manager/commands/best.d.ts.map +1 -0
  63. package/dist/lib/codex-manager/commands/best.js +223 -0
  64. package/dist/lib/codex-manager/commands/best.js.map +1 -0
  65. package/dist/lib/codex-manager/commands/check.d.ts +7 -0
  66. package/dist/lib/codex-manager/commands/check.d.ts.map +1 -0
  67. package/dist/lib/codex-manager/commands/check.js +5 -0
  68. package/dist/lib/codex-manager/commands/check.js.map +1 -0
  69. package/dist/lib/codex-manager/commands/config-explain.d.ts +7 -0
  70. package/dist/lib/codex-manager/commands/config-explain.d.ts.map +1 -0
  71. package/dist/lib/codex-manager/commands/config-explain.js +31 -0
  72. package/dist/lib/codex-manager/commands/config-explain.js.map +1 -0
  73. package/dist/lib/codex-manager/commands/debug-bundle.d.ts +28 -0
  74. package/dist/lib/codex-manager/commands/debug-bundle.d.ts.map +1 -0
  75. package/dist/lib/codex-manager/commands/debug-bundle.js +62 -0
  76. package/dist/lib/codex-manager/commands/debug-bundle.js.map +1 -0
  77. package/dist/lib/codex-manager/commands/doctor.d.ts +85 -0
  78. package/dist/lib/codex-manager/commands/doctor.d.ts.map +1 -0
  79. package/dist/lib/codex-manager/commands/doctor.js +424 -0
  80. package/dist/lib/codex-manager/commands/doctor.js.map +1 -0
  81. package/dist/lib/codex-manager/commands/fix.d.ts +92 -0
  82. package/dist/lib/codex-manager/commands/fix.d.ts.map +1 -0
  83. package/dist/lib/codex-manager/commands/fix.js +347 -0
  84. package/dist/lib/codex-manager/commands/fix.js.map +1 -0
  85. package/dist/lib/codex-manager/commands/forecast.d.ts +71 -0
  86. package/dist/lib/codex-manager/commands/forecast.d.ts.map +1 -0
  87. package/dist/lib/codex-manager/commands/forecast.js +371 -0
  88. package/dist/lib/codex-manager/commands/forecast.js.map +1 -0
  89. package/dist/lib/codex-manager/commands/init-config.d.ts +15 -0
  90. package/dist/lib/codex-manager/commands/init-config.d.ts.map +1 -0
  91. package/dist/lib/codex-manager/commands/init-config.js +95 -0
  92. package/dist/lib/codex-manager/commands/init-config.js.map +1 -0
  93. package/dist/lib/codex-manager/commands/report.d.ts +25 -0
  94. package/dist/lib/codex-manager/commands/report.d.ts.map +1 -0
  95. package/dist/lib/codex-manager/commands/report.js +399 -0
  96. package/dist/lib/codex-manager/commands/report.js.map +1 -0
  97. package/dist/lib/codex-manager/commands/status.d.ts +23 -0
  98. package/dist/lib/codex-manager/commands/status.d.ts.map +1 -0
  99. package/dist/lib/codex-manager/commands/status.js +50 -0
  100. package/dist/lib/codex-manager/commands/status.js.map +1 -0
  101. package/dist/lib/codex-manager/commands/switch.d.ts +22 -0
  102. package/dist/lib/codex-manager/commands/switch.d.ts.map +1 -0
  103. package/dist/lib/codex-manager/commands/switch.js +41 -0
  104. package/dist/lib/codex-manager/commands/switch.js.map +1 -0
  105. package/dist/lib/codex-manager/commands/verify-flagged.d.ts +69 -0
  106. package/dist/lib/codex-manager/commands/verify-flagged.d.ts.map +1 -0
  107. package/dist/lib/codex-manager/commands/verify-flagged.js +251 -0
  108. package/dist/lib/codex-manager/commands/verify-flagged.js.map +1 -0
  109. package/dist/lib/codex-manager/dashboard-display-panel.d.ts +40 -0
  110. package/dist/lib/codex-manager/dashboard-display-panel.d.ts.map +1 -0
  111. package/dist/lib/codex-manager/dashboard-display-panel.js +187 -0
  112. package/dist/lib/codex-manager/dashboard-display-panel.js.map +1 -0
  113. package/dist/lib/codex-manager/dashboard-formatters.d.ts +6 -0
  114. package/dist/lib/codex-manager/dashboard-formatters.d.ts.map +1 -0
  115. package/dist/lib/codex-manager/dashboard-formatters.js +19 -0
  116. package/dist/lib/codex-manager/dashboard-formatters.js.map +1 -0
  117. package/dist/lib/codex-manager/dashboard-settings-controller.d.ts +12 -0
  118. package/dist/lib/codex-manager/dashboard-settings-controller.d.ts.map +1 -0
  119. package/dist/lib/codex-manager/dashboard-settings-controller.js +17 -0
  120. package/dist/lib/codex-manager/dashboard-settings-controller.js.map +1 -0
  121. package/dist/lib/codex-manager/dashboard-settings-data.d.ts +10 -0
  122. package/dist/lib/codex-manager/dashboard-settings-data.d.ts.map +1 -0
  123. package/dist/lib/codex-manager/dashboard-settings-data.js +95 -0
  124. package/dist/lib/codex-manager/dashboard-settings-data.js.map +1 -0
  125. package/dist/lib/codex-manager/dashboard-settings-entry.d.ts +22 -0
  126. package/dist/lib/codex-manager/dashboard-settings-entry.d.ts.map +1 -0
  127. package/dist/lib/codex-manager/dashboard-settings-entry.js +13 -0
  128. package/dist/lib/codex-manager/dashboard-settings-entry.js.map +1 -0
  129. package/dist/lib/codex-manager/experimental-settings-entry.d.ts +7 -0
  130. package/dist/lib/codex-manager/experimental-settings-entry.d.ts.map +1 -0
  131. package/dist/lib/codex-manager/experimental-settings-entry.js +30 -0
  132. package/dist/lib/codex-manager/experimental-settings-entry.js.map +1 -0
  133. package/dist/lib/codex-manager/experimental-settings-prompt.d.ts +66 -0
  134. package/dist/lib/codex-manager/experimental-settings-prompt.d.ts.map +1 -0
  135. package/dist/lib/codex-manager/experimental-settings-prompt.js +221 -0
  136. package/dist/lib/codex-manager/experimental-settings-prompt.js.map +1 -0
  137. package/dist/lib/codex-manager/experimental-settings-schema.d.ts +23 -0
  138. package/dist/lib/codex-manager/experimental-settings-schema.d.ts.map +1 -0
  139. package/dist/lib/codex-manager/experimental-settings-schema.js +34 -0
  140. package/dist/lib/codex-manager/experimental-settings-schema.js.map +1 -0
  141. package/dist/lib/codex-manager/experimental-sync-target-entry.d.ts +30 -0
  142. package/dist/lib/codex-manager/experimental-sync-target-entry.d.ts.map +1 -0
  143. package/dist/lib/codex-manager/experimental-sync-target-entry.js +16 -0
  144. package/dist/lib/codex-manager/experimental-sync-target-entry.js.map +1 -0
  145. package/dist/lib/codex-manager/experimental-sync-target.d.ts +23 -0
  146. package/dist/lib/codex-manager/experimental-sync-target.d.ts.map +1 -0
  147. package/dist/lib/codex-manager/experimental-sync-target.js +39 -0
  148. package/dist/lib/codex-manager/experimental-sync-target.js.map +1 -0
  149. package/dist/lib/codex-manager/forecast-report-commands.d.ts +54 -0
  150. package/dist/lib/codex-manager/forecast-report-commands.d.ts.map +1 -0
  151. package/dist/lib/codex-manager/forecast-report-commands.js +443 -0
  152. package/dist/lib/codex-manager/forecast-report-commands.js.map +1 -0
  153. package/dist/lib/codex-manager/help.d.ts +36 -0
  154. package/dist/lib/codex-manager/help.d.ts.map +1 -0
  155. package/dist/lib/codex-manager/help.js +125 -0
  156. package/dist/lib/codex-manager/help.js.map +1 -0
  157. package/dist/lib/codex-manager/repair-commands.d.ts +70 -0
  158. package/dist/lib/codex-manager/repair-commands.d.ts.map +1 -0
  159. package/dist/lib/codex-manager/repair-commands.js +1671 -0
  160. package/dist/lib/codex-manager/repair-commands.js.map +1 -0
  161. package/dist/lib/codex-manager/settings-hub-entry.d.ts +30 -0
  162. package/dist/lib/codex-manager/settings-hub-entry.d.ts.map +1 -0
  163. package/dist/lib/codex-manager/settings-hub-entry.js +11 -0
  164. package/dist/lib/codex-manager/settings-hub-entry.js.map +1 -0
  165. package/dist/lib/codex-manager/settings-hub-menu.d.ts +30 -0
  166. package/dist/lib/codex-manager/settings-hub-menu.d.ts.map +1 -0
  167. package/dist/lib/codex-manager/settings-hub-menu.js +37 -0
  168. package/dist/lib/codex-manager/settings-hub-menu.js.map +1 -0
  169. package/dist/lib/codex-manager/settings-hub-prompt.d.ts +25 -0
  170. package/dist/lib/codex-manager/settings-hub-prompt.d.ts.map +1 -0
  171. package/dist/lib/codex-manager/settings-hub-prompt.js +23 -0
  172. package/dist/lib/codex-manager/settings-hub-prompt.js.map +1 -0
  173. package/dist/lib/codex-manager/settings-hub.d.ts +10 -29
  174. package/dist/lib/codex-manager/settings-hub.d.ts.map +1 -1
  175. package/dist/lib/codex-manager/settings-hub.js +260 -2168
  176. package/dist/lib/codex-manager/settings-hub.js.map +1 -1
  177. package/dist/lib/codex-manager/settings-panels.d.ts +56 -0
  178. package/dist/lib/codex-manager/settings-panels.d.ts.map +1 -0
  179. package/dist/lib/codex-manager/settings-panels.js +73 -0
  180. package/dist/lib/codex-manager/settings-panels.js.map +1 -0
  181. package/dist/lib/codex-manager/settings-persist-utils.d.ts +9 -0
  182. package/dist/lib/codex-manager/settings-persist-utils.d.ts.map +1 -0
  183. package/dist/lib/codex-manager/settings-persist-utils.js +33 -0
  184. package/dist/lib/codex-manager/settings-persist-utils.js.map +1 -0
  185. package/dist/lib/codex-manager/settings-preview.d.ts +12 -0
  186. package/dist/lib/codex-manager/settings-preview.d.ts.map +1 -0
  187. package/dist/lib/codex-manager/settings-preview.js +118 -0
  188. package/dist/lib/codex-manager/settings-preview.js.map +1 -0
  189. package/dist/lib/codex-manager/settings-write-queue.d.ts +14 -0
  190. package/dist/lib/codex-manager/settings-write-queue.d.ts.map +1 -0
  191. package/dist/lib/codex-manager/settings-write-queue.js +88 -0
  192. package/dist/lib/codex-manager/settings-write-queue.js.map +1 -0
  193. package/dist/lib/codex-manager/statusline-order.d.ts +3 -0
  194. package/dist/lib/codex-manager/statusline-order.d.ts.map +1 -0
  195. package/dist/lib/codex-manager/statusline-order.js +17 -0
  196. package/dist/lib/codex-manager/statusline-order.js.map +1 -0
  197. package/dist/lib/codex-manager/statusline-settings-panel.d.ts +40 -0
  198. package/dist/lib/codex-manager/statusline-settings-panel.d.ts.map +1 -0
  199. package/dist/lib/codex-manager/statusline-settings-panel.js +167 -0
  200. package/dist/lib/codex-manager/statusline-settings-panel.js.map +1 -0
  201. package/dist/lib/codex-manager/theme-settings-panel.d.ts +26 -0
  202. package/dist/lib/codex-manager/theme-settings-panel.d.ts.map +1 -0
  203. package/dist/lib/codex-manager/theme-settings-panel.js +131 -0
  204. package/dist/lib/codex-manager/theme-settings-panel.js.map +1 -0
  205. package/dist/lib/codex-manager/unified-settings-controller.d.ts +27 -0
  206. package/dist/lib/codex-manager/unified-settings-controller.d.ts.map +1 -0
  207. package/dist/lib/codex-manager/unified-settings-controller.js +50 -0
  208. package/dist/lib/codex-manager/unified-settings-controller.js.map +1 -0
  209. package/dist/lib/codex-manager/unified-settings-entry.d.ts +6 -0
  210. package/dist/lib/codex-manager/unified-settings-entry.d.ts.map +1 -0
  211. package/dist/lib/codex-manager/unified-settings-entry.js +23 -0
  212. package/dist/lib/codex-manager/unified-settings-entry.js.map +1 -0
  213. package/dist/lib/codex-manager.d.ts.map +1 -1
  214. package/dist/lib/codex-manager.js +441 -2199
  215. package/dist/lib/codex-manager.js.map +1 -1
  216. package/dist/lib/config.d.ts +38 -0
  217. package/dist/lib/config.d.ts.map +1 -1
  218. package/dist/lib/config.js +371 -9
  219. package/dist/lib/config.js.map +1 -1
  220. package/dist/lib/errors.d.ts +9 -0
  221. package/dist/lib/errors.d.ts.map +1 -1
  222. package/dist/lib/errors.js +13 -0
  223. package/dist/lib/errors.js.map +1 -1
  224. package/dist/lib/forecast.d.ts +17 -0
  225. package/dist/lib/forecast.d.ts.map +1 -1
  226. package/dist/lib/forecast.js +33 -6
  227. package/dist/lib/forecast.js.map +1 -1
  228. package/dist/lib/health.d.ts +1 -0
  229. package/dist/lib/health.d.ts.map +1 -1
  230. package/dist/lib/health.js +6 -2
  231. package/dist/lib/health.js.map +1 -1
  232. package/dist/lib/named-backup-export.js +2 -2
  233. package/dist/lib/named-backup-export.js.map +1 -1
  234. package/dist/lib/parallel-probe.d.ts +1 -1
  235. package/dist/lib/parallel-probe.d.ts.map +1 -1
  236. package/dist/lib/parallel-probe.js +5 -2
  237. package/dist/lib/parallel-probe.js.map +1 -1
  238. package/dist/lib/proactive-refresh.d.ts +1 -1
  239. package/dist/lib/proactive-refresh.d.ts.map +1 -1
  240. package/dist/lib/proactive-refresh.js +14 -5
  241. package/dist/lib/proactive-refresh.js.map +1 -1
  242. package/dist/lib/prompts/codex.d.ts +8 -3
  243. package/dist/lib/prompts/codex.d.ts.map +1 -1
  244. package/dist/lib/prompts/codex.js +16 -26
  245. package/dist/lib/prompts/codex.js.map +1 -1
  246. package/dist/lib/refresh-guardian.d.ts +3 -0
  247. package/dist/lib/refresh-guardian.d.ts.map +1 -1
  248. package/dist/lib/refresh-guardian.js +142 -52
  249. package/dist/lib/refresh-guardian.js.map +1 -1
  250. package/dist/lib/request/failover-config.d.ts +4 -0
  251. package/dist/lib/request/failover-config.d.ts.map +1 -0
  252. package/dist/lib/request/failover-config.js +15 -0
  253. package/dist/lib/request/failover-config.js.map +1 -0
  254. package/dist/lib/request/fetch-helpers.d.ts +10 -4
  255. package/dist/lib/request/fetch-helpers.d.ts.map +1 -1
  256. package/dist/lib/request/fetch-helpers.js +77 -21
  257. package/dist/lib/request/fetch-helpers.js.map +1 -1
  258. package/dist/lib/request/helpers/model-map.d.ts +49 -12
  259. package/dist/lib/request/helpers/model-map.d.ts.map +1 -1
  260. package/dist/lib/request/helpers/model-map.js +303 -108
  261. package/dist/lib/request/helpers/model-map.js.map +1 -1
  262. package/dist/lib/request/helpers/tool-utils.d.ts +2 -15
  263. package/dist/lib/request/helpers/tool-utils.d.ts.map +1 -1
  264. package/dist/lib/request/helpers/tool-utils.js +40 -27
  265. package/dist/lib/request/helpers/tool-utils.js.map +1 -1
  266. package/dist/lib/request/index.d.ts +5 -0
  267. package/dist/lib/request/index.d.ts.map +1 -0
  268. package/dist/lib/request/index.js +5 -0
  269. package/dist/lib/request/index.js.map +1 -0
  270. package/dist/lib/request/request-init.d.ts +3 -0
  271. package/dist/lib/request/request-init.d.ts.map +1 -0
  272. package/dist/lib/request/request-init.js +50 -0
  273. package/dist/lib/request/request-init.js.map +1 -0
  274. package/dist/lib/request/request-transformer.d.ts +19 -6
  275. package/dist/lib/request/request-transformer.d.ts.map +1 -1
  276. package/dist/lib/request/request-transformer.js +210 -193
  277. package/dist/lib/request/request-transformer.js.map +1 -1
  278. package/dist/lib/request/response-compaction.d.ts +20 -0
  279. package/dist/lib/request/response-compaction.d.ts.map +1 -0
  280. package/dist/lib/request/response-compaction.js +124 -0
  281. package/dist/lib/request/response-compaction.js.map +1 -0
  282. package/dist/lib/request/response-handler.d.ts +2 -0
  283. package/dist/lib/request/response-handler.d.ts.map +1 -1
  284. package/dist/lib/request/response-handler.js +567 -11
  285. package/dist/lib/request/response-handler.js.map +1 -1
  286. package/dist/lib/request/response-metadata.d.ts +3 -0
  287. package/dist/lib/request/response-metadata.d.ts.map +1 -0
  288. package/dist/lib/request/response-metadata.js +61 -0
  289. package/dist/lib/request/response-metadata.js.map +1 -0
  290. package/dist/lib/request/wait-utils.d.ts +14 -0
  291. package/dist/lib/request/wait-utils.d.ts.map +1 -0
  292. package/dist/lib/request/wait-utils.js +44 -0
  293. package/dist/lib/request/wait-utils.js.map +1 -0
  294. package/dist/lib/rotation.d.ts +14 -11
  295. package/dist/lib/rotation.d.ts.map +1 -1
  296. package/dist/lib/rotation.js +36 -30
  297. package/dist/lib/rotation.js.map +1 -1
  298. package/dist/lib/runtime/account-check-helpers.d.ts +8 -0
  299. package/dist/lib/runtime/account-check-helpers.d.ts.map +1 -0
  300. package/dist/lib/runtime/account-check-helpers.js +30 -0
  301. package/dist/lib/runtime/account-check-helpers.js.map +1 -0
  302. package/dist/lib/runtime/account-check-types.d.ts +18 -0
  303. package/dist/lib/runtime/account-check-types.d.ts.map +1 -0
  304. package/dist/lib/runtime/account-check-types.js +12 -0
  305. package/dist/lib/runtime/account-check-types.js.map +1 -0
  306. package/dist/lib/runtime/account-check.d.ts +48 -0
  307. package/dist/lib/runtime/account-check.d.ts.map +1 -0
  308. package/dist/lib/runtime/account-check.js +202 -0
  309. package/dist/lib/runtime/account-check.js.map +1 -0
  310. package/dist/lib/runtime/account-health-check.d.ts +8 -0
  311. package/dist/lib/runtime/account-health-check.d.ts.map +1 -0
  312. package/dist/lib/runtime/account-health-check.js +30 -0
  313. package/dist/lib/runtime/account-health-check.js.map +1 -0
  314. package/dist/lib/runtime/account-manager-cache-entry.d.ts +25 -0
  315. package/dist/lib/runtime/account-manager-cache-entry.d.ts.map +1 -0
  316. package/dist/lib/runtime/account-manager-cache-entry.js +17 -0
  317. package/dist/lib/runtime/account-manager-cache-entry.js.map +1 -0
  318. package/dist/lib/runtime/account-manager-cache.d.ts +25 -0
  319. package/dist/lib/runtime/account-manager-cache.d.ts.map +1 -0
  320. package/dist/lib/runtime/account-manager-cache.js +44 -0
  321. package/dist/lib/runtime/account-manager-cache.js.map +1 -0
  322. package/dist/lib/runtime/account-pool.d.ts +23 -0
  323. package/dist/lib/runtime/account-pool.d.ts.map +1 -0
  324. package/dist/lib/runtime/account-pool.js +138 -0
  325. package/dist/lib/runtime/account-pool.js.map +1 -0
  326. package/dist/lib/runtime/account-scope.d.ts +10 -0
  327. package/dist/lib/runtime/account-scope.d.ts.map +1 -0
  328. package/dist/lib/runtime/account-scope.js +13 -0
  329. package/dist/lib/runtime/account-scope.js.map +1 -0
  330. package/dist/lib/runtime/account-select-event.d.ts +19 -0
  331. package/dist/lib/runtime/account-select-event.d.ts.map +1 -0
  332. package/dist/lib/runtime/account-select-event.js +53 -0
  333. package/dist/lib/runtime/account-select-event.js.map +1 -0
  334. package/dist/lib/runtime/account-selection.d.ts +28 -0
  335. package/dist/lib/runtime/account-selection.d.ts.map +1 -0
  336. package/dist/lib/runtime/account-selection.js +46 -0
  337. package/dist/lib/runtime/account-selection.js.map +1 -0
  338. package/dist/lib/runtime/account-state.d.ts +13 -0
  339. package/dist/lib/runtime/account-state.d.ts.map +1 -0
  340. package/dist/lib/runtime/account-state.js +38 -0
  341. package/dist/lib/runtime/account-state.js.map +1 -0
  342. package/dist/lib/runtime/account-status.d.ts +13 -0
  343. package/dist/lib/runtime/account-status.d.ts.map +1 -0
  344. package/dist/lib/runtime/account-status.js +37 -0
  345. package/dist/lib/runtime/account-status.js.map +1 -0
  346. package/dist/lib/runtime/account-storage-scope-entry.d.ts +26 -0
  347. package/dist/lib/runtime/account-storage-scope-entry.d.ts.map +1 -0
  348. package/dist/lib/runtime/account-storage-scope-entry.js +15 -0
  349. package/dist/lib/runtime/account-storage-scope-entry.js.map +1 -0
  350. package/dist/lib/runtime/auth-facade.d.ts +51 -0
  351. package/dist/lib/runtime/auth-facade.d.ts.map +1 -0
  352. package/dist/lib/runtime/auth-facade.js +48 -0
  353. package/dist/lib/runtime/auth-facade.js.map +1 -0
  354. package/dist/lib/runtime/browser-oauth-flow.d.ts +32 -0
  355. package/dist/lib/runtime/browser-oauth-flow.d.ts.map +1 -0
  356. package/dist/lib/runtime/browser-oauth-flow.js +31 -0
  357. package/dist/lib/runtime/browser-oauth-flow.js.map +1 -0
  358. package/dist/lib/runtime/capability-boost.d.ts +25 -0
  359. package/dist/lib/runtime/capability-boost.d.ts.map +1 -0
  360. package/dist/lib/runtime/capability-boost.js +26 -0
  361. package/dist/lib/runtime/capability-boost.js.map +1 -0
  362. package/dist/lib/runtime/event-handler.d.ts +53 -0
  363. package/dist/lib/runtime/event-handler.d.ts.map +1 -0
  364. package/dist/lib/runtime/event-handler.js +46 -0
  365. package/dist/lib/runtime/event-handler.js.map +1 -0
  366. package/dist/lib/runtime/flagged-verify-types.d.ts +9 -0
  367. package/dist/lib/runtime/flagged-verify-types.d.ts.map +1 -0
  368. package/dist/lib/runtime/flagged-verify-types.js +7 -0
  369. package/dist/lib/runtime/flagged-verify-types.js.map +1 -0
  370. package/dist/lib/runtime/hydrate-emails.d.ts +13 -0
  371. package/dist/lib/runtime/hydrate-emails.d.ts.map +1 -0
  372. package/dist/lib/runtime/hydrate-emails.js +56 -0
  373. package/dist/lib/runtime/hydrate-emails.js.map +1 -0
  374. package/dist/lib/runtime/live-sync-entry.d.ts +36 -0
  375. package/dist/lib/runtime/live-sync-entry.d.ts.map +1 -0
  376. package/dist/lib/runtime/live-sync-entry.js +14 -0
  377. package/dist/lib/runtime/live-sync-entry.js.map +1 -0
  378. package/dist/lib/runtime/live-sync.d.ts +35 -0
  379. package/dist/lib/runtime/live-sync.d.ts.map +1 -0
  380. package/dist/lib/runtime/live-sync.js +65 -0
  381. package/dist/lib/runtime/live-sync.js.map +1 -0
  382. package/dist/lib/runtime/loader-setup.d.ts +9 -0
  383. package/dist/lib/runtime/loader-setup.d.ts.map +1 -0
  384. package/dist/lib/runtime/loader-setup.js +8 -0
  385. package/dist/lib/runtime/loader-setup.js.map +1 -0
  386. package/dist/lib/runtime/login-menu-accounts.d.ts +29 -0
  387. package/dist/lib/runtime/login-menu-accounts.d.ts.map +1 -0
  388. package/dist/lib/runtime/login-menu-accounts.js +33 -0
  389. package/dist/lib/runtime/login-menu-accounts.js.map +1 -0
  390. package/dist/lib/runtime/manual-oauth-flow.d.ts +40 -0
  391. package/dist/lib/runtime/manual-oauth-flow.d.ts.map +1 -0
  392. package/dist/lib/runtime/manual-oauth-flow.js +71 -0
  393. package/dist/lib/runtime/manual-oauth-flow.js.map +1 -0
  394. package/dist/lib/runtime/metrics.d.ts +29 -0
  395. package/dist/lib/runtime/metrics.d.ts.map +1 -0
  396. package/dist/lib/runtime/metrics.js +97 -0
  397. package/dist/lib/runtime/metrics.js.map +1 -0
  398. package/dist/lib/runtime/oauth-browser-flow.d.ts +9 -0
  399. package/dist/lib/runtime/oauth-browser-flow.d.ts.map +1 -0
  400. package/dist/lib/runtime/oauth-browser-flow.js +34 -0
  401. package/dist/lib/runtime/oauth-browser-flow.js.map +1 -0
  402. package/dist/lib/runtime/preemptive-quota.d.ts +13 -0
  403. package/dist/lib/runtime/preemptive-quota.d.ts.map +1 -0
  404. package/dist/lib/runtime/preemptive-quota.js +9 -0
  405. package/dist/lib/runtime/preemptive-quota.js.map +1 -0
  406. package/dist/lib/runtime/quota-headers.d.ts +12 -0
  407. package/dist/lib/runtime/quota-headers.d.ts.map +1 -0
  408. package/dist/lib/runtime/quota-headers.js +131 -0
  409. package/dist/lib/runtime/quota-headers.js.map +1 -0
  410. package/dist/lib/runtime/quota-probe.d.ts +18 -0
  411. package/dist/lib/runtime/quota-probe.d.ts.map +1 -0
  412. package/dist/lib/runtime/quota-probe.js +82 -0
  413. package/dist/lib/runtime/quota-probe.js.map +1 -0
  414. package/dist/lib/runtime/quota-settings.d.ts +14 -0
  415. package/dist/lib/runtime/quota-settings.d.ts.map +1 -0
  416. package/dist/lib/runtime/quota-settings.js +12 -0
  417. package/dist/lib/runtime/quota-settings.js.map +1 -0
  418. package/dist/lib/runtime/refresh-guardian-entry.d.ts +32 -0
  419. package/dist/lib/runtime/refresh-guardian-entry.d.ts.map +1 -0
  420. package/dist/lib/runtime/refresh-guardian-entry.js +12 -0
  421. package/dist/lib/runtime/refresh-guardian-entry.js.map +1 -0
  422. package/dist/lib/runtime/refresh-guardian.d.ts +24 -0
  423. package/dist/lib/runtime/refresh-guardian.d.ts.map +1 -0
  424. package/dist/lib/runtime/refresh-guardian.js +32 -0
  425. package/dist/lib/runtime/refresh-guardian.js.map +1 -0
  426. package/dist/lib/runtime/request-init.d.ts +5 -0
  427. package/dist/lib/runtime/request-init.d.ts.map +1 -0
  428. package/dist/lib/runtime/request-init.js +50 -0
  429. package/dist/lib/runtime/request-init.js.map +1 -0
  430. package/dist/lib/runtime/runtime-services.d.ts +58 -0
  431. package/dist/lib/runtime/runtime-services.d.ts.map +1 -0
  432. package/dist/lib/runtime/runtime-services.js +87 -0
  433. package/dist/lib/runtime/runtime-services.js.map +1 -0
  434. package/dist/lib/runtime/session-affinity-entry.d.ts +30 -0
  435. package/dist/lib/runtime/session-affinity-entry.d.ts.map +1 -0
  436. package/dist/lib/runtime/session-affinity-entry.js +11 -0
  437. package/dist/lib/runtime/session-affinity-entry.js.map +1 -0
  438. package/dist/lib/runtime/session-affinity.d.ts +13 -0
  439. package/dist/lib/runtime/session-affinity.d.ts.map +1 -0
  440. package/dist/lib/runtime/session-affinity.js +17 -0
  441. package/dist/lib/runtime/session-affinity.js.map +1 -0
  442. package/dist/lib/runtime/session-recovery.d.ts +8 -0
  443. package/dist/lib/runtime/session-recovery.d.ts.map +1 -0
  444. package/dist/lib/runtime/session-recovery.js +7 -0
  445. package/dist/lib/runtime/session-recovery.js.map +1 -0
  446. package/dist/lib/runtime/status-marker.d.ts +3 -0
  447. package/dist/lib/runtime/status-marker.d.ts.map +1 -0
  448. package/dist/lib/runtime/status-marker.js +15 -0
  449. package/dist/lib/runtime/status-marker.js.map +1 -0
  450. package/dist/lib/runtime/storage-scope.d.ts +13 -0
  451. package/dist/lib/runtime/storage-scope.d.ts.map +1 -0
  452. package/dist/lib/runtime/storage-scope.js +14 -0
  453. package/dist/lib/runtime/storage-scope.js.map +1 -0
  454. package/dist/lib/runtime/toast.d.ts +16 -0
  455. package/dist/lib/runtime/toast.d.ts.map +1 -0
  456. package/dist/lib/runtime/toast.js +16 -0
  457. package/dist/lib/runtime/toast.js.map +1 -0
  458. package/dist/lib/runtime/ui-runtime-entry.d.ts +7 -0
  459. package/dist/lib/runtime/ui-runtime-entry.d.ts.map +1 -0
  460. package/dist/lib/runtime/ui-runtime-entry.js +4 -0
  461. package/dist/lib/runtime/ui-runtime-entry.js.map +1 -0
  462. package/dist/lib/runtime/ui-runtime.d.ts +9 -0
  463. package/dist/lib/runtime/ui-runtime.d.ts.map +1 -0
  464. package/dist/lib/runtime/ui-runtime.js +23 -0
  465. package/dist/lib/runtime/ui-runtime.js.map +1 -0
  466. package/dist/lib/runtime/verify-flagged.d.ts +44 -0
  467. package/dist/lib/runtime/verify-flagged.d.ts.map +1 -0
  468. package/dist/lib/runtime/verify-flagged.js +84 -0
  469. package/dist/lib/runtime/verify-flagged.js.map +1 -0
  470. package/dist/lib/schemas.d.ts +2 -0
  471. package/dist/lib/schemas.d.ts.map +1 -1
  472. package/dist/lib/schemas.js +2 -0
  473. package/dist/lib/schemas.js.map +1 -1
  474. package/dist/lib/session-affinity.d.ts +10 -0
  475. package/dist/lib/session-affinity.d.ts.map +1 -1
  476. package/dist/lib/session-affinity.js +53 -6
  477. package/dist/lib/session-affinity.js.map +1 -1
  478. package/dist/lib/storage/account-clear-entry.d.ts +16 -0
  479. package/dist/lib/storage/account-clear-entry.d.ts.map +1 -0
  480. package/dist/lib/storage/account-clear-entry.js +12 -0
  481. package/dist/lib/storage/account-clear-entry.js.map +1 -0
  482. package/dist/lib/storage/account-clear.d.ts +8 -0
  483. package/dist/lib/storage/account-clear.d.ts.map +1 -0
  484. package/dist/lib/storage/account-clear.js +29 -0
  485. package/dist/lib/storage/account-clear.js.map +1 -0
  486. package/dist/lib/storage/account-match-utils.d.ts +9 -0
  487. package/dist/lib/storage/account-match-utils.d.ts.map +1 -0
  488. package/dist/lib/storage/account-match-utils.js +45 -0
  489. package/dist/lib/storage/account-match-utils.js.map +1 -0
  490. package/dist/lib/storage/account-persistence.d.ts +3 -0
  491. package/dist/lib/storage/account-persistence.d.ts.map +1 -0
  492. package/dist/lib/storage/account-persistence.js +12 -0
  493. package/dist/lib/storage/account-persistence.js.map +1 -0
  494. package/dist/lib/storage/account-port.d.ts +50 -0
  495. package/dist/lib/storage/account-port.d.ts.map +1 -0
  496. package/dist/lib/storage/account-port.js +43 -0
  497. package/dist/lib/storage/account-port.js.map +1 -0
  498. package/dist/lib/storage/account-save-entry.d.ts +7 -0
  499. package/dist/lib/storage/account-save-entry.d.ts.map +1 -0
  500. package/dist/lib/storage/account-save-entry.js +6 -0
  501. package/dist/lib/storage/account-save-entry.js.map +1 -0
  502. package/dist/lib/storage/account-save.d.ts +30 -0
  503. package/dist/lib/storage/account-save.d.ts.map +1 -0
  504. package/dist/lib/storage/account-save.js +49 -0
  505. package/dist/lib/storage/account-save.js.map +1 -0
  506. package/dist/lib/storage/account-snapshot.d.ts +25 -0
  507. package/dist/lib/storage/account-snapshot.d.ts.map +1 -0
  508. package/dist/lib/storage/account-snapshot.js +78 -0
  509. package/dist/lib/storage/account-snapshot.js.map +1 -0
  510. package/dist/lib/storage/backup-metadata-builder.d.ts +32 -0
  511. package/dist/lib/storage/backup-metadata-builder.d.ts.map +1 -0
  512. package/dist/lib/storage/backup-metadata-builder.js +77 -0
  513. package/dist/lib/storage/backup-metadata-builder.js.map +1 -0
  514. package/dist/lib/storage/backup-metadata.d.ts +29 -0
  515. package/dist/lib/storage/backup-metadata.d.ts.map +1 -0
  516. package/dist/lib/storage/backup-metadata.js +16 -0
  517. package/dist/lib/storage/backup-metadata.js.map +1 -0
  518. package/dist/lib/storage/backup-paths.d.ts +10 -0
  519. package/dist/lib/storage/backup-paths.d.ts.map +1 -0
  520. package/dist/lib/storage/backup-paths.js +27 -0
  521. package/dist/lib/storage/backup-paths.js.map +1 -0
  522. package/dist/lib/storage/backup-restore.d.ts +11 -0
  523. package/dist/lib/storage/backup-restore.d.ts.map +1 -0
  524. package/dist/lib/storage/backup-restore.js +52 -0
  525. package/dist/lib/storage/backup-restore.js.map +1 -0
  526. package/dist/lib/storage/cache-artifacts.d.ts +2 -0
  527. package/dist/lib/storage/cache-artifacts.d.ts.map +1 -0
  528. package/dist/lib/storage/cache-artifacts.js +4 -0
  529. package/dist/lib/storage/cache-artifacts.js.map +1 -0
  530. package/dist/lib/storage/error-hints.d.ts +10 -0
  531. package/dist/lib/storage/error-hints.d.ts.map +1 -0
  532. package/dist/lib/storage/error-hints.js +36 -0
  533. package/dist/lib/storage/error-hints.js.map +1 -0
  534. package/dist/lib/storage/file-paths.d.ts +6 -0
  535. package/dist/lib/storage/file-paths.d.ts.map +1 -0
  536. package/dist/lib/storage/file-paths.js +17 -0
  537. package/dist/lib/storage/file-paths.js.map +1 -0
  538. package/dist/lib/storage/fixture-guards.d.ts +4 -0
  539. package/dist/lib/storage/fixture-guards.d.ts.map +1 -0
  540. package/dist/lib/storage/fixture-guards.js +27 -0
  541. package/dist/lib/storage/fixture-guards.js.map +1 -0
  542. package/dist/lib/storage/flagged-entry.d.ts +15 -0
  543. package/dist/lib/storage/flagged-entry.d.ts.map +1 -0
  544. package/dist/lib/storage/flagged-entry.js +12 -0
  545. package/dist/lib/storage/flagged-entry.js.map +1 -0
  546. package/dist/lib/storage/flagged-load-entry.d.ts +20 -0
  547. package/dist/lib/storage/flagged-load-entry.d.ts.map +1 -0
  548. package/dist/lib/storage/flagged-load-entry.js +13 -0
  549. package/dist/lib/storage/flagged-load-entry.js.map +1 -0
  550. package/dist/lib/storage/flagged-save-entry.d.ts +7 -0
  551. package/dist/lib/storage/flagged-save-entry.d.ts.map +1 -0
  552. package/dist/lib/storage/flagged-save-entry.js +6 -0
  553. package/dist/lib/storage/flagged-save-entry.js.map +1 -0
  554. package/dist/lib/storage/flagged-storage-file.d.ts +7 -0
  555. package/dist/lib/storage/flagged-storage-file.d.ts.map +1 -0
  556. package/dist/lib/storage/flagged-storage-file.js +25 -0
  557. package/dist/lib/storage/flagged-storage-file.js.map +1 -0
  558. package/dist/lib/storage/flagged-storage-io.d.ts +28 -0
  559. package/dist/lib/storage/flagged-storage-io.d.ts.map +1 -0
  560. package/dist/lib/storage/flagged-storage-io.js +135 -0
  561. package/dist/lib/storage/flagged-storage-io.js.map +1 -0
  562. package/dist/lib/storage/flagged-storage.d.ts +6 -0
  563. package/dist/lib/storage/flagged-storage.d.ts.map +1 -0
  564. package/dist/lib/storage/flagged-storage.js +90 -0
  565. package/dist/lib/storage/flagged-storage.js.map +1 -0
  566. package/dist/lib/storage/gitignore.d.ts +7 -0
  567. package/dist/lib/storage/gitignore.d.ts.map +1 -0
  568. package/dist/lib/storage/gitignore.js +34 -0
  569. package/dist/lib/storage/gitignore.js.map +1 -0
  570. package/dist/lib/storage/hash.d.ts +2 -0
  571. package/dist/lib/storage/hash.d.ts.map +1 -0
  572. package/dist/lib/storage/hash.js +5 -0
  573. package/dist/lib/storage/hash.js.map +1 -0
  574. package/dist/lib/storage/identity.d.ts +21 -0
  575. package/dist/lib/storage/identity.d.ts.map +1 -0
  576. package/dist/lib/storage/identity.js +59 -0
  577. package/dist/lib/storage/identity.js.map +1 -0
  578. package/dist/lib/storage/import-export.d.ts +24 -0
  579. package/dist/lib/storage/import-export.d.ts.map +1 -0
  580. package/dist/lib/storage/import-export.js +108 -0
  581. package/dist/lib/storage/import-export.js.map +1 -0
  582. package/dist/lib/storage/metadata-section.d.ts +16 -0
  583. package/dist/lib/storage/metadata-section.d.ts.map +1 -0
  584. package/dist/lib/storage/metadata-section.js +16 -0
  585. package/dist/lib/storage/metadata-section.js.map +1 -0
  586. package/dist/lib/storage/named-backup-entry.d.ts +15 -0
  587. package/dist/lib/storage/named-backup-entry.d.ts.map +1 -0
  588. package/dist/lib/storage/named-backup-entry.js +7 -0
  589. package/dist/lib/storage/named-backup-entry.js.map +1 -0
  590. package/dist/lib/storage/named-backups-entry.d.ts +19 -0
  591. package/dist/lib/storage/named-backups-entry.d.ts.map +1 -0
  592. package/dist/lib/storage/named-backups-entry.js +7 -0
  593. package/dist/lib/storage/named-backups-entry.js.map +1 -0
  594. package/dist/lib/storage/named-backups.d.ts +15 -0
  595. package/dist/lib/storage/named-backups.d.ts.map +1 -0
  596. package/dist/lib/storage/named-backups.js +68 -0
  597. package/dist/lib/storage/named-backups.js.map +1 -0
  598. package/dist/lib/storage/path-state.d.ts +9 -0
  599. package/dist/lib/storage/path-state.d.ts.map +1 -0
  600. package/dist/lib/storage/path-state.js +20 -0
  601. package/dist/lib/storage/path-state.js.map +1 -0
  602. package/dist/lib/storage/project-migration.d.ts +10 -0
  603. package/dist/lib/storage/project-migration.d.ts.map +1 -0
  604. package/dist/lib/storage/project-migration.js +38 -0
  605. package/dist/lib/storage/project-migration.js.map +1 -0
  606. package/dist/lib/storage/record-utils.d.ts +3 -0
  607. package/dist/lib/storage/record-utils.d.ts.map +1 -0
  608. package/dist/lib/storage/record-utils.js +9 -0
  609. package/dist/lib/storage/record-utils.js.map +1 -0
  610. package/dist/lib/storage/restore-assessment.d.ts +7 -0
  611. package/dist/lib/storage/restore-assessment.d.ts.map +1 -0
  612. package/dist/lib/storage/restore-assessment.js +42 -0
  613. package/dist/lib/storage/restore-assessment.js.map +1 -0
  614. package/dist/lib/storage/restore-backup-entry.d.ts +24 -0
  615. package/dist/lib/storage/restore-backup-entry.d.ts.map +1 -0
  616. package/dist/lib/storage/restore-backup-entry.js +10 -0
  617. package/dist/lib/storage/restore-backup-entry.js.map +1 -0
  618. package/dist/lib/storage/restore-metadata.d.ts +10 -0
  619. package/dist/lib/storage/restore-metadata.d.ts.map +1 -0
  620. package/dist/lib/storage/restore-metadata.js +18 -0
  621. package/dist/lib/storage/restore-metadata.js.map +1 -0
  622. package/dist/lib/storage/restore.d.ts +14 -0
  623. package/dist/lib/storage/restore.d.ts.map +1 -0
  624. package/dist/lib/storage/restore.js +53 -0
  625. package/dist/lib/storage/restore.js.map +1 -0
  626. package/dist/lib/storage/snapshot-inspectors.d.ts +22 -0
  627. package/dist/lib/storage/snapshot-inspectors.d.ts.map +1 -0
  628. package/dist/lib/storage/snapshot-inspectors.js +95 -0
  629. package/dist/lib/storage/snapshot-inspectors.js.map +1 -0
  630. package/dist/lib/storage/storage-parser.d.ts +15 -0
  631. package/dist/lib/storage/storage-parser.d.ts.map +1 -0
  632. package/dist/lib/storage/storage-parser.js +16 -0
  633. package/dist/lib/storage/storage-parser.js.map +1 -0
  634. package/dist/lib/storage/transactions.d.ts +23 -0
  635. package/dist/lib/storage/transactions.d.ts.map +1 -0
  636. package/dist/lib/storage/transactions.js +64 -0
  637. package/dist/lib/storage/transactions.js.map +1 -0
  638. package/dist/lib/storage.d.ts +8 -47
  639. package/dist/lib/storage.d.ts.map +1 -1
  640. package/dist/lib/storage.js +482 -1044
  641. package/dist/lib/storage.js.map +1 -1
  642. package/dist/lib/types.d.ts +80 -1
  643. package/dist/lib/types.d.ts.map +1 -1
  644. package/package.json +41 -4
  645. package/scripts/check-pack-budget-lib.js +114 -0
  646. package/scripts/check-pack-budget.mjs +10 -0
  647. package/scripts/codex-multi-auth.js +34 -10
  648. package/scripts/install-codex-auth-utils.js +54 -14
  649. package/scripts/install-codex-auth.js +62 -33
  650. package/scripts/update-vendor-provenance.mjs +96 -0
  651. package/scripts/verify-vendor-provenance.mjs +53 -0
@@ -1,20 +1,112 @@
1
1
  import { createLogger } from "./logger.js";
2
- import { loadAccounts, saveAccounts, findMatchingAccountIndex, } from "./storage.js";
2
+ import { loadAccounts, saveAccounts, findMatchingAccountIndex, withAccountStorageTransaction, } from "./storage.js";
3
3
  import { MODEL_FAMILIES } from "./prompts/codex.js";
4
4
  import { getHealthTracker, getTokenTracker, selectHybridAccount, } from "./rotation.js";
5
5
  import { nowMs } from "./utils.js";
6
+ import { ERROR_MESSAGES, HTTP_STATUS } from "./constants.js";
7
+ import { CodexAuthError } from "./errors.js";
6
8
  import { loadCodexCliState, } from "./codex-cli/state.js";
7
9
  import { syncAccountStorageFromCodexCli } from "./codex-cli/sync.js";
8
10
  import { setCodexCliActiveSelection } from "./codex-cli/writer.js";
11
+ import { getAccountIdentityKey, getRuntimeAccountIdentityKey, } from "./storage/identity.js";
12
+ import { getCircuitBreaker } from "./circuit-breaker.js";
9
13
  export { extractAccountId, extractAccountEmail, getAccountIdCandidates, selectBestAccountCandidate, resolveRuntimeRequestIdentity, shouldUpdateAccountIdFromToken, resolveRequestAccountId, sanitizeEmail, } from "./auth/token-utils.js";
10
14
  export { parseRateLimitReason, getQuotaKey, clampNonNegativeInt, clearExpiredRateLimits, isRateLimitedForQuotaKey, isRateLimitedForFamily, formatWaitTime, } from "./accounts/rate-limits.js";
11
15
  export { lookupCodexCliTokensByEmail, isCodexCliSyncEnabled, } from "./codex-cli/state.js";
12
16
  import { extractAccountId, extractAccountEmail, shouldUpdateAccountIdFromToken, sanitizeEmail, } from "./auth/token-utils.js";
13
17
  import { clampNonNegativeInt, getQuotaKey, clearExpiredRateLimits, isRateLimitedForFamily, formatWaitTime, } from "./accounts/rate-limits.js";
14
18
  const log = createLogger("accounts");
19
+ let nextRuntimeCircuitKeyId = 0;
20
+ function getAccountCircuitKey(account) {
21
+ if (!account.circuitKeyId) {
22
+ account.circuitKeyId =
23
+ getAccountIdentityKey(account) ?? `circuit:${nextRuntimeCircuitKeyId++}`;
24
+ }
25
+ return account.circuitKeyId;
26
+ }
27
+ export function getRuntimeTrackerKey(account) {
28
+ if (account._runtimeTrackerKey !== undefined) {
29
+ return account._runtimeTrackerKey;
30
+ }
31
+ const trackerKey = getRuntimeAccountIdentityKey(account) ?? account.index;
32
+ account._runtimeTrackerKey = trackerKey;
33
+ return trackerKey;
34
+ }
15
35
  function initFamilyState(defaultValue) {
16
36
  return Object.fromEntries(MODEL_FAMILIES.map((family) => [family, defaultValue]));
17
37
  }
38
+ function getAuthIdentityCandidate(auth) {
39
+ const accountId = extractAccountId(auth?.access)?.trim() || undefined;
40
+ const email = sanitizeEmail(extractAccountEmail(auth?.access));
41
+ return {
42
+ accountId,
43
+ email,
44
+ refreshToken: auth?.refresh,
45
+ };
46
+ }
47
+ function buildAccountIdentityCandidates(source, auth) {
48
+ const derived = getAuthIdentityCandidate(auth);
49
+ const candidates = [];
50
+ const seen = new Set();
51
+ const pushCandidate = (candidate) => {
52
+ const key = `${candidate.accountId ?? ""}|${candidate.email ?? ""}|${candidate.refreshToken ?? ""}`;
53
+ if (seen.has(key))
54
+ return;
55
+ seen.add(key);
56
+ candidates.push(candidate);
57
+ };
58
+ pushCandidate(source);
59
+ pushCandidate({
60
+ accountId: source.accountId ?? derived.accountId,
61
+ email: source.email ?? derived.email,
62
+ refreshToken: source.refreshToken,
63
+ index: source.index,
64
+ });
65
+ pushCandidate({
66
+ accountId: derived.accountId ?? source.accountId,
67
+ email: derived.email ?? source.email,
68
+ refreshToken: source.refreshToken,
69
+ index: source.index,
70
+ });
71
+ pushCandidate({
72
+ accountId: derived.accountId ?? source.accountId,
73
+ email: derived.email ?? source.email,
74
+ refreshToken: derived.refreshToken ?? source.refreshToken,
75
+ index: source.index,
76
+ });
77
+ return candidates;
78
+ }
79
+ function findAccountIndexByIdentity(accounts, source, auth) {
80
+ for (const candidate of buildAccountIdentityCandidates(source, auth)) {
81
+ const matchIndex = findMatchingAccountIndex(accounts, candidate, {
82
+ allowUniqueAccountIdFallbackWithoutEmail: true,
83
+ });
84
+ if (matchIndex !== undefined) {
85
+ return matchIndex;
86
+ }
87
+ }
88
+ return undefined;
89
+ }
90
+ const RETRYABLE_AUTH_PERSISTENCE_CODES = new Set(["EAGAIN", "EBUSY", "EPERM"]);
91
+ function isRetryableAuthPersistenceError(error) {
92
+ if (!error || typeof error !== "object") {
93
+ return false;
94
+ }
95
+ const candidate = error;
96
+ const code = typeof candidate.code === "string"
97
+ ? candidate.code.toUpperCase()
98
+ : undefined;
99
+ if (code && RETRYABLE_AUTH_PERSISTENCE_CODES.has(code)) {
100
+ return true;
101
+ }
102
+ if (candidate.status === HTTP_STATUS.TOO_MANY_REQUESTS) {
103
+ return true;
104
+ }
105
+ if (candidate.cause && candidate.cause !== error) {
106
+ return isRetryableAuthPersistenceError(candidate.cause);
107
+ }
108
+ return false;
109
+ }
18
110
  export class AccountManager {
19
111
  accounts = [];
20
112
  cursorByFamily = initFamilyState(0);
@@ -227,10 +319,16 @@ export class AccountManager {
227
319
  return index;
228
320
  }
229
321
  getAccountsSnapshot() {
230
- return this.accounts.map((account) => ({
231
- ...account,
232
- rateLimitResetTimes: { ...account.rateLimitResetTimes },
233
- }));
322
+ return this.accounts.map((account) => {
323
+ const trackerKey = getRuntimeTrackerKey(account);
324
+ const circuitKeyId = getAccountCircuitKey(account);
325
+ return {
326
+ ...account,
327
+ _runtimeTrackerKey: trackerKey,
328
+ circuitKeyId,
329
+ rateLimitResetTimes: { ...account.rateLimitResetTimes },
330
+ };
331
+ });
234
332
  }
235
333
  getAccountByIndex(index) {
236
334
  if (!Number.isFinite(index))
@@ -247,7 +345,9 @@ export class AccountManager {
247
345
  if (account.enabled === false)
248
346
  return false;
249
347
  clearExpiredRateLimits(account);
250
- return !isRateLimitedForFamily(account, family, model) && !this.isAccountCoolingDown(account);
348
+ return (!isRateLimitedForFamily(account, family, model) &&
349
+ !this.isAccountCoolingDown(account) &&
350
+ this.isCircuitAvailable(account));
251
351
  }
252
352
  setActiveIndex(index) {
253
353
  if (!Number.isFinite(index))
@@ -314,7 +414,9 @@ export class AccountManager {
314
414
  if (account.enabled === false)
315
415
  continue;
316
416
  clearExpiredRateLimits(account);
317
- if (isRateLimitedForFamily(account, family, model) || this.isAccountCoolingDown(account)) {
417
+ if (isRateLimitedForFamily(account, family, model) ||
418
+ this.isAccountCoolingDown(account) ||
419
+ !this.isCircuitAvailable(account)) {
318
420
  continue;
319
421
  }
320
422
  this.cursorByFamily[family] = (idx + 1) % count;
@@ -337,7 +439,9 @@ export class AccountManager {
337
439
  if (account.enabled === false)
338
440
  continue;
339
441
  clearExpiredRateLimits(account);
340
- if (isRateLimitedForFamily(account, family, model) || this.isAccountCoolingDown(account)) {
442
+ if (isRateLimitedForFamily(account, family, model) ||
443
+ this.isAccountCoolingDown(account) ||
444
+ !this.isCircuitAvailable(account)) {
341
445
  continue;
342
446
  }
343
447
  this.cursorByFamily[family] = (idx + 1) % count;
@@ -350,23 +454,6 @@ export class AccountManager {
350
454
  const count = this.accounts.length;
351
455
  if (count === 0)
352
456
  return null;
353
- const currentIndex = this.currentAccountIndexByFamily[family];
354
- if (currentIndex >= 0 && currentIndex < count) {
355
- const currentAccount = this.accounts[currentIndex];
356
- if (currentAccount) {
357
- if (currentAccount.enabled === false) {
358
- // Fall through to hybrid selection.
359
- }
360
- else {
361
- clearExpiredRateLimits(currentAccount);
362
- if (!isRateLimitedForFamily(currentAccount, family, model) &&
363
- !this.isAccountCoolingDown(currentAccount)) {
364
- currentAccount.lastUsed = nowMs();
365
- return currentAccount;
366
- }
367
- }
368
- }
369
- }
370
457
  const quotaKey = model ? `${family}:${model}` : family;
371
458
  const healthTracker = getHealthTracker();
372
459
  const tokenTracker = getTokenTracker();
@@ -377,9 +464,12 @@ export class AccountManager {
377
464
  if (account.enabled === false)
378
465
  return null;
379
466
  clearExpiredRateLimits(account);
380
- const isAvailable = !isRateLimitedForFamily(account, family, model) && !this.isAccountCoolingDown(account);
467
+ const isAvailable = !isRateLimitedForFamily(account, family, model) &&
468
+ !this.isAccountCoolingDown(account) &&
469
+ this.isCircuitAvailable(account);
381
470
  return {
382
471
  index: account.index,
472
+ trackerKey: getRuntimeTrackerKey(account),
383
473
  isAvailable,
384
474
  lastUsed: account.lastUsed,
385
475
  };
@@ -399,24 +489,53 @@ export class AccountManager {
399
489
  recordSuccess(account, family, model) {
400
490
  const quotaKey = model ? `${family}:${model}` : family;
401
491
  const healthTracker = getHealthTracker();
402
- healthTracker.recordSuccess(account.index, quotaKey);
492
+ healthTracker.recordSuccess(getRuntimeTrackerKey(account), quotaKey);
493
+ const hadCooldownMetadata = account.coolingDownUntil !== undefined || account.cooldownReason !== undefined;
494
+ const hadAuthFailures = (account.consecutiveAuthFailures ?? 0) > 0;
495
+ const isCoolingDown = this.isAccountCoolingDown(account);
496
+ let healed = false;
497
+ if (!isCoolingDown && hadCooldownMetadata) {
498
+ this.clearAccountCooldown(account);
499
+ healed = true;
500
+ }
501
+ if (!isCoolingDown && hadAuthFailures) {
502
+ this.clearAuthFailures(account);
503
+ healed = true;
504
+ }
505
+ if (healed) {
506
+ this.saveToDiskDebounced();
507
+ }
508
+ getCircuitBreaker(getAccountCircuitKey(account)).recordSuccess();
403
509
  }
404
510
  recordRateLimit(account, family, model) {
405
511
  const quotaKey = model ? `${family}:${model}` : family;
406
512
  const healthTracker = getHealthTracker();
407
513
  const tokenTracker = getTokenTracker();
408
- healthTracker.recordRateLimit(account.index, quotaKey);
409
- tokenTracker.drain(account.index, quotaKey);
514
+ const trackerKey = getRuntimeTrackerKey(account);
515
+ healthTracker.recordRateLimit(trackerKey, quotaKey);
516
+ tokenTracker.drain(trackerKey, quotaKey);
410
517
  }
411
518
  recordFailure(account, family, model) {
412
519
  const quotaKey = model ? `${family}:${model}` : family;
413
520
  const healthTracker = getHealthTracker();
414
- healthTracker.recordFailure(account.index, quotaKey);
521
+ healthTracker.recordFailure(getRuntimeTrackerKey(account), quotaKey);
522
+ getCircuitBreaker(getAccountCircuitKey(account)).recordFailure();
415
523
  }
416
524
  consumeToken(account, family, model) {
417
525
  const quotaKey = model ? `${family}:${model}` : family;
418
526
  const tokenTracker = getTokenTracker();
419
- return tokenTracker.tryConsume(account.index, quotaKey);
527
+ const trackerKey = getRuntimeTrackerKey(account);
528
+ if (!tokenTracker.tryConsume(trackerKey, quotaKey)) {
529
+ return false;
530
+ }
531
+ try {
532
+ getCircuitBreaker(getAccountCircuitKey(account)).canExecute();
533
+ return true;
534
+ }
535
+ catch {
536
+ tokenTracker.refundToken(trackerKey, quotaKey);
537
+ return false;
538
+ }
420
539
  }
421
540
  /**
422
541
  * Refund a token consumed within the refund window (30 seconds).
@@ -426,7 +545,7 @@ export class AccountManager {
426
545
  refundToken(account, family, model) {
427
546
  const quotaKey = model ? `${family}:${model}` : family;
428
547
  const tokenTracker = getTokenTracker();
429
- return tokenTracker.refundToken(account.index, quotaKey);
548
+ return tokenTracker.refundToken(getRuntimeTrackerKey(account), quotaKey);
430
549
  }
431
550
  markSwitched(account, reason, family) {
432
551
  account.lastSwitchReason = reason;
@@ -439,8 +558,11 @@ export class AccountManager {
439
558
  const retryMs = Math.max(0, Math.floor(retryAfterMs));
440
559
  const resetAt = nowMs() + retryMs;
441
560
  const baseKey = getQuotaKey(family);
442
- account.rateLimitResetTimes[baseKey] = resetAt;
443
- if (model) {
561
+ if (!model || reason === "quota" || reason === "unknown") {
562
+ account.rateLimitResetTimes[baseKey] = resetAt;
563
+ }
564
+ if (model &&
565
+ (reason === "tokens" || reason === "concurrent" || reason === "unknown")) {
444
566
  const modelKey = getQuotaKey(family, model);
445
567
  account.rateLimitResetTimes[modelKey] = resetAt;
446
568
  }
@@ -464,6 +586,9 @@ export class AccountManager {
464
586
  delete account.coolingDownUntil;
465
587
  delete account.cooldownReason;
466
588
  }
589
+ isCircuitAvailable(account) {
590
+ return getCircuitBreaker(getAccountCircuitKey(account)).isAvailable();
591
+ }
467
592
  incrementAuthFailures(account) {
468
593
  account.consecutiveAuthFailures = (account.consecutiveAuthFailures ?? 0) + 1;
469
594
  return account.consecutiveAuthFailures;
@@ -471,6 +596,13 @@ export class AccountManager {
471
596
  clearAuthFailures(account) {
472
597
  account.consecutiveAuthFailures = 0;
473
598
  }
599
+ getAccountByIdentity(candidate, auth) {
600
+ const index = findAccountIndexByIdentity(this.accounts, candidate, auth);
601
+ if (index === undefined) {
602
+ return null;
603
+ }
604
+ return this.accounts[index] ?? null;
605
+ }
474
606
  shouldShowAccountToast(accountIndex, debounceMs = 30000) {
475
607
  const now = nowMs();
476
608
  if (accountIndex === this.lastToastAccountIndex && now - this.lastToastTime < debounceMs) {
@@ -486,7 +618,7 @@ export class AccountManager {
486
618
  account.refreshToken = auth.refresh;
487
619
  account.access = auth.access;
488
620
  account.expires = auth.expires;
489
- const tokenAccountId = extractAccountId(auth.access);
621
+ const tokenAccountId = extractAccountId(auth.access)?.trim() || undefined;
490
622
  if (tokenAccountId &&
491
623
  (shouldUpdateAccountIdFromToken(account.accountIdSource, account.accountId))) {
492
624
  account.accountId = tokenAccountId;
@@ -494,6 +626,134 @@ export class AccountManager {
494
626
  }
495
627
  account.email = sanitizeEmail(extractAccountEmail(auth.access)) ?? account.email;
496
628
  }
629
+ buildStorageSnapshot() {
630
+ const activeIndexByFamily = {};
631
+ for (const family of MODEL_FAMILIES) {
632
+ const raw = this.currentAccountIndexByFamily[family];
633
+ activeIndexByFamily[family] = clampNonNegativeInt(raw, 0);
634
+ }
635
+ const activeIndex = clampNonNegativeInt(activeIndexByFamily.codex, 0);
636
+ return {
637
+ version: 3,
638
+ accounts: this.accounts.map((account) => ({
639
+ accountId: account.accountId,
640
+ accountIdSource: account.accountIdSource,
641
+ accountLabel: account.accountLabel,
642
+ email: account.email,
643
+ refreshToken: account.refreshToken,
644
+ accessToken: account.access,
645
+ expiresAt: account.expires,
646
+ enabled: account.enabled === false ? false : undefined,
647
+ addedAt: account.addedAt,
648
+ lastUsed: account.lastUsed,
649
+ lastSwitchReason: account.lastSwitchReason,
650
+ rateLimitResetTimes: Object.keys(account.rateLimitResetTimes).length > 0 ? account.rateLimitResetTimes : undefined,
651
+ coolingDownUntil: account.coolingDownUntil,
652
+ cooldownReason: account.cooldownReason,
653
+ workspaces: account.workspaces,
654
+ currentWorkspaceIndex: account.currentWorkspaceIndex,
655
+ })),
656
+ activeIndex,
657
+ activeIndexByFamily,
658
+ };
659
+ }
660
+ async commitRefreshedAuth(source, auth) {
661
+ const nextAccountId = extractAccountId(auth.access)?.trim() || undefined;
662
+ const nextEmail = sanitizeEmail(extractAccountEmail(auth.access));
663
+ try {
664
+ return await withAccountStorageTransaction(async (_current, persist) => {
665
+ // Snapshot the live in-memory pool under the storage lock so refresh
666
+ // persistence merges against the latest account state.
667
+ const nextStorage = structuredClone(this.buildStorageSnapshot());
668
+ const storageIndex = findAccountIndexByIdentity(nextStorage.accounts, source, auth);
669
+ if (storageIndex === undefined) {
670
+ log.warn("Unable to resolve refreshed account for persistence", {
671
+ sourceIndex: source.index,
672
+ });
673
+ return null;
674
+ }
675
+ const storedAccount = nextStorage.accounts[storageIndex];
676
+ if (!storedAccount) {
677
+ return null;
678
+ }
679
+ storedAccount.refreshToken = auth.refresh;
680
+ storedAccount.accessToken = auth.access;
681
+ storedAccount.expiresAt = auth.expires;
682
+ if (nextAccountId &&
683
+ shouldUpdateAccountIdFromToken(storedAccount.accountIdSource, storedAccount.accountId)) {
684
+ storedAccount.accountId = nextAccountId;
685
+ storedAccount.accountIdSource = "token";
686
+ }
687
+ if (nextEmail) {
688
+ storedAccount.email = nextEmail;
689
+ }
690
+ storedAccount.enabled = undefined;
691
+ delete storedAccount.coolingDownUntil;
692
+ delete storedAccount.cooldownReason;
693
+ const liveAccount = this.getAccountByIdentity(source, auth);
694
+ if (liveAccount) {
695
+ const previousLiveAccountState = {
696
+ access: liveAccount.access,
697
+ refreshToken: liveAccount.refreshToken,
698
+ expires: liveAccount.expires,
699
+ accountId: liveAccount.accountId,
700
+ accountIdSource: liveAccount.accountIdSource,
701
+ email: liveAccount.email,
702
+ enabled: liveAccount.enabled,
703
+ coolingDownUntil: liveAccount.coolingDownUntil,
704
+ cooldownReason: liveAccount.cooldownReason,
705
+ consecutiveAuthFailures: liveAccount.consecutiveAuthFailures,
706
+ };
707
+ this.updateFromAuth(liveAccount, auth);
708
+ liveAccount.enabled = true;
709
+ this.clearAccountCooldown(liveAccount);
710
+ this.clearAuthFailures(liveAccount);
711
+ try {
712
+ await persist(nextStorage);
713
+ }
714
+ catch (error) {
715
+ liveAccount.access = previousLiveAccountState.access;
716
+ liveAccount.refreshToken = previousLiveAccountState.refreshToken;
717
+ liveAccount.expires = previousLiveAccountState.expires;
718
+ liveAccount.accountId = previousLiveAccountState.accountId;
719
+ liveAccount.accountIdSource =
720
+ previousLiveAccountState.accountIdSource;
721
+ liveAccount.email = previousLiveAccountState.email;
722
+ liveAccount.enabled = previousLiveAccountState.enabled;
723
+ liveAccount.consecutiveAuthFailures =
724
+ previousLiveAccountState.consecutiveAuthFailures;
725
+ if (previousLiveAccountState.coolingDownUntil === undefined) {
726
+ delete liveAccount.coolingDownUntil;
727
+ }
728
+ else {
729
+ liveAccount.coolingDownUntil =
730
+ previousLiveAccountState.coolingDownUntil;
731
+ }
732
+ if (previousLiveAccountState.cooldownReason === undefined) {
733
+ delete liveAccount.cooldownReason;
734
+ }
735
+ else {
736
+ liveAccount.cooldownReason =
737
+ previousLiveAccountState.cooldownReason;
738
+ }
739
+ throw error;
740
+ }
741
+ return liveAccount;
742
+ }
743
+ await persist(nextStorage);
744
+ log.warn("Unable to resolve refreshed live account after persistence", {
745
+ sourceIndex: source.index,
746
+ });
747
+ return null;
748
+ });
749
+ }
750
+ catch (error) {
751
+ throw new CodexAuthError(ERROR_MESSAGES.TOKEN_REFRESH_FAILED, {
752
+ retryable: isRetryableAuthPersistenceError(error),
753
+ cause: error,
754
+ });
755
+ }
756
+ }
497
757
  toAuthDetails(account) {
498
758
  return {
499
759
  type: "oauth",
@@ -510,7 +770,9 @@ export class AccountManager {
510
770
  const enabledAccounts = this.accounts.filter((account) => account.enabled !== false);
511
771
  const available = enabledAccounts.filter((account) => {
512
772
  clearExpiredRateLimits(account);
513
- return !isRateLimitedForFamily(account, family, model) && !this.isAccountCoolingDown(account);
773
+ return (!isRateLimitedForFamily(account, family, model) &&
774
+ !this.isAccountCoolingDown(account) &&
775
+ this.isCircuitAvailable(account));
514
776
  });
515
777
  if (available.length > 0)
516
778
  return 0;
@@ -520,18 +782,26 @@ export class AccountManager {
520
782
  const baseKey = getQuotaKey(family);
521
783
  const modelKey = model ? getQuotaKey(family, model) : null;
522
784
  for (const account of enabledAccounts) {
785
+ const perAccountWaitTimes = [];
523
786
  const baseResetAt = account.rateLimitResetTimes[baseKey];
524
787
  if (typeof baseResetAt === "number") {
525
- waitTimes.push(Math.max(0, baseResetAt - now));
788
+ perAccountWaitTimes.push(Math.max(0, baseResetAt - now));
526
789
  }
527
790
  if (modelKey) {
528
791
  const modelResetAt = account.rateLimitResetTimes[modelKey];
529
792
  if (typeof modelResetAt === "number") {
530
- waitTimes.push(Math.max(0, modelResetAt - now));
793
+ perAccountWaitTimes.push(Math.max(0, modelResetAt - now));
531
794
  }
532
795
  }
533
796
  if (typeof account.coolingDownUntil === "number") {
534
- waitTimes.push(Math.max(0, account.coolingDownUntil - now));
797
+ perAccountWaitTimes.push(Math.max(0, account.coolingDownUntil - now));
798
+ }
799
+ const breakerWait = getCircuitBreaker(getAccountCircuitKey(account)).getTimeUntilAvailable();
800
+ if (breakerWait > 0) {
801
+ perAccountWaitTimes.push(breakerWait);
802
+ }
803
+ if (perAccountWaitTimes.length > 0) {
804
+ waitTimes.push(Math.max(...perAccountWaitTimes));
535
805
  }
536
806
  }
537
807
  return waitTimes.length > 0 ? Math.min(...waitTimes) : 0;
@@ -596,36 +866,9 @@ export class AccountManager {
596
866
  return account;
597
867
  }
598
868
  async saveToDisk() {
599
- const activeIndexByFamily = {};
600
- for (const family of MODEL_FAMILIES) {
601
- const raw = this.currentAccountIndexByFamily[family];
602
- activeIndexByFamily[family] = clampNonNegativeInt(raw, 0);
603
- }
604
- const activeIndex = clampNonNegativeInt(activeIndexByFamily.codex, 0);
605
- const storage = {
606
- version: 3,
607
- accounts: this.accounts.map((account) => ({
608
- accountId: account.accountId,
609
- accountIdSource: account.accountIdSource,
610
- accountLabel: account.accountLabel,
611
- email: account.email,
612
- refreshToken: account.refreshToken,
613
- accessToken: account.access,
614
- expiresAt: account.expires,
615
- enabled: account.enabled === false ? false : undefined,
616
- addedAt: account.addedAt,
617
- lastUsed: account.lastUsed,
618
- lastSwitchReason: account.lastSwitchReason,
619
- rateLimitResetTimes: Object.keys(account.rateLimitResetTimes).length > 0 ? account.rateLimitResetTimes : undefined,
620
- coolingDownUntil: account.coolingDownUntil,
621
- cooldownReason: account.cooldownReason,
622
- workspaces: account.workspaces,
623
- currentWorkspaceIndex: account.currentWorkspaceIndex,
624
- })),
625
- activeIndex,
626
- activeIndexByFamily,
627
- };
628
- await saveAccounts(storage);
869
+ await withAccountStorageTransaction(async (_current, persist) => {
870
+ await persist(this.buildStorageSnapshot());
871
+ });
629
872
  }
630
873
  saveToDiskDebounced(delayMs = 500) {
631
874
  if (this.saveDebounceTimer) {