codex-multi-auth 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (327) hide show
  1. package/LICENSE +1 -0
  2. package/README.md +162 -0
  3. package/assets/opencode-logo-ornate-dark.svg +18 -0
  4. package/assets/readme-hero.svg +31 -0
  5. package/config/README.md +87 -0
  6. package/config/minimal-opencode.json +13 -0
  7. package/config/opencode-legacy.json +571 -0
  8. package/config/opencode-modern.json +239 -0
  9. package/dist/index.d.ts +45 -0
  10. package/dist/index.d.ts.map +1 -0
  11. package/dist/index.js +3160 -0
  12. package/dist/index.js.map +1 -0
  13. package/dist/lib/accounts/rate-limits.d.ts +22 -0
  14. package/dist/lib/accounts/rate-limits.d.ts.map +1 -0
  15. package/dist/lib/accounts/rate-limits.js +63 -0
  16. package/dist/lib/accounts/rate-limits.js.map +1 -0
  17. package/dist/lib/accounts.d.ts +95 -0
  18. package/dist/lib/accounts.d.ts.map +1 -0
  19. package/dist/lib/accounts.js +668 -0
  20. package/dist/lib/accounts.js.map +1 -0
  21. package/dist/lib/audit.d.ts +45 -0
  22. package/dist/lib/audit.d.ts.map +1 -0
  23. package/dist/lib/audit.js +131 -0
  24. package/dist/lib/audit.js.map +1 -0
  25. package/dist/lib/auth/auth.d.ts +56 -0
  26. package/dist/lib/auth/auth.d.ts.map +1 -0
  27. package/dist/lib/auth/auth.js +214 -0
  28. package/dist/lib/auth/auth.js.map +1 -0
  29. package/dist/lib/auth/browser.d.ts +34 -0
  30. package/dist/lib/auth/browser.d.ts.map +1 -0
  31. package/dist/lib/auth/browser.js +185 -0
  32. package/dist/lib/auth/browser.js.map +1 -0
  33. package/dist/lib/auth/server.d.ts +24 -0
  34. package/dist/lib/auth/server.d.ts.map +1 -0
  35. package/dist/lib/auth/server.js +116 -0
  36. package/dist/lib/auth/server.js.map +1 -0
  37. package/dist/lib/auth/token-utils.d.ts +59 -0
  38. package/dist/lib/auth/token-utils.d.ts.map +1 -0
  39. package/dist/lib/auth/token-utils.js +331 -0
  40. package/dist/lib/auth/token-utils.js.map +1 -0
  41. package/dist/lib/auth-rate-limit.d.ts +20 -0
  42. package/dist/lib/auth-rate-limit.d.ts.map +1 -0
  43. package/dist/lib/auth-rate-limit.js +91 -0
  44. package/dist/lib/auth-rate-limit.js.map +1 -0
  45. package/dist/lib/auto-update-checker.d.ts +10 -0
  46. package/dist/lib/auto-update-checker.d.ts.map +1 -0
  47. package/dist/lib/auto-update-checker.js +216 -0
  48. package/dist/lib/auto-update-checker.js.map +1 -0
  49. package/dist/lib/capability-policy.d.ts +18 -0
  50. package/dist/lib/capability-policy.d.ts.map +1 -0
  51. package/dist/lib/capability-policy.js +150 -0
  52. package/dist/lib/capability-policy.js.map +1 -0
  53. package/dist/lib/circuit-breaker.d.ts +34 -0
  54. package/dist/lib/circuit-breaker.d.ts.map +1 -0
  55. package/dist/lib/circuit-breaker.js +124 -0
  56. package/dist/lib/circuit-breaker.js.map +1 -0
  57. package/dist/lib/cli.d.ts +64 -0
  58. package/dist/lib/cli.d.ts.map +1 -0
  59. package/dist/lib/cli.js +274 -0
  60. package/dist/lib/cli.js.map +1 -0
  61. package/dist/lib/codex-cli/observability.d.ts +22 -0
  62. package/dist/lib/codex-cli/observability.d.ts.map +1 -0
  63. package/dist/lib/codex-cli/observability.js +36 -0
  64. package/dist/lib/codex-cli/observability.js.map +1 -0
  65. package/dist/lib/codex-cli/state.d.ts +86 -0
  66. package/dist/lib/codex-cli/state.d.ts.map +1 -0
  67. package/dist/lib/codex-cli/state.js +470 -0
  68. package/dist/lib/codex-cli/state.js.map +1 -0
  69. package/dist/lib/codex-cli/sync.d.ts +27 -0
  70. package/dist/lib/codex-cli/sync.d.ts.map +1 -0
  71. package/dist/lib/codex-cli/sync.js +325 -0
  72. package/dist/lib/codex-cli/sync.js.map +1 -0
  73. package/dist/lib/codex-cli/writer.d.ts +12 -0
  74. package/dist/lib/codex-cli/writer.d.ts.map +1 -0
  75. package/dist/lib/codex-cli/writer.js +388 -0
  76. package/dist/lib/codex-cli/writer.js.map +1 -0
  77. package/dist/lib/codex-manager.d.ts +2 -0
  78. package/dist/lib/codex-manager.d.ts.map +1 -0
  79. package/dist/lib/codex-manager.js +4841 -0
  80. package/dist/lib/codex-manager.js.map +1 -0
  81. package/dist/lib/config.d.ts +269 -0
  82. package/dist/lib/config.d.ts.map +1 -0
  83. package/dist/lib/config.js +789 -0
  84. package/dist/lib/config.js.map +1 -0
  85. package/dist/lib/constants.d.ts +78 -0
  86. package/dist/lib/constants.d.ts.map +1 -0
  87. package/dist/lib/constants.js +78 -0
  88. package/dist/lib/constants.js.map +1 -0
  89. package/dist/lib/context-overflow.d.ts +27 -0
  90. package/dist/lib/context-overflow.d.ts.map +1 -0
  91. package/dist/lib/context-overflow.js +124 -0
  92. package/dist/lib/context-overflow.js.map +1 -0
  93. package/dist/lib/dashboard-settings.d.ts +90 -0
  94. package/dist/lib/dashboard-settings.d.ts.map +1 -0
  95. package/dist/lib/dashboard-settings.js +327 -0
  96. package/dist/lib/dashboard-settings.js.map +1 -0
  97. package/dist/lib/entitlement-cache.d.ts +41 -0
  98. package/dist/lib/entitlement-cache.d.ts.map +1 -0
  99. package/dist/lib/entitlement-cache.js +137 -0
  100. package/dist/lib/entitlement-cache.js.map +1 -0
  101. package/dist/lib/errors.d.ts +113 -0
  102. package/dist/lib/errors.d.ts.map +1 -0
  103. package/dist/lib/errors.js +103 -0
  104. package/dist/lib/errors.js.map +1 -0
  105. package/dist/lib/forecast.d.ts +42 -0
  106. package/dist/lib/forecast.d.ts.map +1 -0
  107. package/dist/lib/forecast.js +256 -0
  108. package/dist/lib/forecast.js.map +1 -0
  109. package/dist/lib/health.d.ts +33 -0
  110. package/dist/lib/health.d.ts.map +1 -0
  111. package/dist/lib/health.js +70 -0
  112. package/dist/lib/health.js.map +1 -0
  113. package/dist/lib/index.d.ts +32 -0
  114. package/dist/lib/index.d.ts.map +1 -0
  115. package/dist/lib/index.js +32 -0
  116. package/dist/lib/index.js.map +1 -0
  117. package/dist/lib/live-account-sync.d.ts +39 -0
  118. package/dist/lib/live-account-sync.d.ts.map +1 -0
  119. package/dist/lib/live-account-sync.js +196 -0
  120. package/dist/lib/live-account-sync.js.map +1 -0
  121. package/dist/lib/logger.d.ts +40 -0
  122. package/dist/lib/logger.d.ts.map +1 -0
  123. package/dist/lib/logger.js +364 -0
  124. package/dist/lib/logger.js.map +1 -0
  125. package/dist/lib/oauth-success.html +338 -0
  126. package/dist/lib/parallel-probe.d.ts +28 -0
  127. package/dist/lib/parallel-probe.d.ts.map +1 -0
  128. package/dist/lib/parallel-probe.js +97 -0
  129. package/dist/lib/parallel-probe.js.map +1 -0
  130. package/dist/lib/preemptive-quota-scheduler.d.ts +53 -0
  131. package/dist/lib/preemptive-quota-scheduler.d.ts.map +1 -0
  132. package/dist/lib/preemptive-quota-scheduler.js +220 -0
  133. package/dist/lib/preemptive-quota-scheduler.js.map +1 -0
  134. package/dist/lib/proactive-refresh.d.ts +66 -0
  135. package/dist/lib/proactive-refresh.d.ts.map +1 -0
  136. package/dist/lib/proactive-refresh.js +143 -0
  137. package/dist/lib/proactive-refresh.js.map +1 -0
  138. package/dist/lib/prompts/codex-opencode-bridge.d.ts +19 -0
  139. package/dist/lib/prompts/codex-opencode-bridge.d.ts.map +1 -0
  140. package/dist/lib/prompts/codex-opencode-bridge.js +169 -0
  141. package/dist/lib/prompts/codex-opencode-bridge.js.map +1 -0
  142. package/dist/lib/prompts/codex.d.ts +41 -0
  143. package/dist/lib/prompts/codex.d.ts.map +1 -0
  144. package/dist/lib/prompts/codex.js +383 -0
  145. package/dist/lib/prompts/codex.js.map +1 -0
  146. package/dist/lib/prompts/opencode-codex.d.ts +25 -0
  147. package/dist/lib/prompts/opencode-codex.d.ts.map +1 -0
  148. package/dist/lib/prompts/opencode-codex.js +270 -0
  149. package/dist/lib/prompts/opencode-codex.js.map +1 -0
  150. package/dist/lib/quota-cache.d.ts +68 -0
  151. package/dist/lib/quota-cache.d.ts.map +1 -0
  152. package/dist/lib/quota-cache.js +224 -0
  153. package/dist/lib/quota-cache.js.map +1 -0
  154. package/dist/lib/quota-probe.d.ts +49 -0
  155. package/dist/lib/quota-probe.d.ts.map +1 -0
  156. package/dist/lib/quota-probe.js +368 -0
  157. package/dist/lib/quota-probe.js.map +1 -0
  158. package/dist/lib/recovery/constants.d.ts +12 -0
  159. package/dist/lib/recovery/constants.d.ts.map +1 -0
  160. package/dist/lib/recovery/constants.js +31 -0
  161. package/dist/lib/recovery/constants.js.map +1 -0
  162. package/dist/lib/recovery/index.d.ts +12 -0
  163. package/dist/lib/recovery/index.d.ts.map +1 -0
  164. package/dist/lib/recovery/index.js +12 -0
  165. package/dist/lib/recovery/index.js.map +1 -0
  166. package/dist/lib/recovery/storage.d.ts +24 -0
  167. package/dist/lib/recovery/storage.d.ts.map +1 -0
  168. package/dist/lib/recovery/storage.js +362 -0
  169. package/dist/lib/recovery/storage.js.map +1 -0
  170. package/dist/lib/recovery/types.d.ts +116 -0
  171. package/dist/lib/recovery/types.d.ts.map +1 -0
  172. package/dist/lib/recovery/types.js +7 -0
  173. package/dist/lib/recovery/types.js.map +1 -0
  174. package/dist/lib/recovery.d.ts +31 -0
  175. package/dist/lib/recovery.d.ts.map +1 -0
  176. package/dist/lib/recovery.js +313 -0
  177. package/dist/lib/recovery.js.map +1 -0
  178. package/dist/lib/refresh-guardian.d.ts +31 -0
  179. package/dist/lib/refresh-guardian.d.ts.map +1 -0
  180. package/dist/lib/refresh-guardian.js +151 -0
  181. package/dist/lib/refresh-guardian.js.map +1 -0
  182. package/dist/lib/refresh-lease.d.ts +37 -0
  183. package/dist/lib/refresh-lease.d.ts.map +1 -0
  184. package/dist/lib/refresh-lease.js +335 -0
  185. package/dist/lib/refresh-lease.js.map +1 -0
  186. package/dist/lib/refresh-queue.d.ts +117 -0
  187. package/dist/lib/refresh-queue.d.ts.map +1 -0
  188. package/dist/lib/refresh-queue.js +297 -0
  189. package/dist/lib/refresh-queue.js.map +1 -0
  190. package/dist/lib/request/failure-policy.d.ts +42 -0
  191. package/dist/lib/request/failure-policy.d.ts.map +1 -0
  192. package/dist/lib/request/failure-policy.js +133 -0
  193. package/dist/lib/request/failure-policy.js.map +1 -0
  194. package/dist/lib/request/fetch-helpers.d.ts +152 -0
  195. package/dist/lib/request/fetch-helpers.d.ts.map +1 -0
  196. package/dist/lib/request/fetch-helpers.js +704 -0
  197. package/dist/lib/request/fetch-helpers.js.map +1 -0
  198. package/dist/lib/request/helpers/input-utils.d.ts +7 -0
  199. package/dist/lib/request/helpers/input-utils.d.ts.map +1 -0
  200. package/dist/lib/request/helpers/input-utils.js +214 -0
  201. package/dist/lib/request/helpers/input-utils.js.map +1 -0
  202. package/dist/lib/request/helpers/model-map.d.ts +28 -0
  203. package/dist/lib/request/helpers/model-map.d.ts.map +1 -0
  204. package/dist/lib/request/helpers/model-map.js +133 -0
  205. package/dist/lib/request/helpers/model-map.js.map +1 -0
  206. package/dist/lib/request/helpers/tool-utils.d.ts +29 -0
  207. package/dist/lib/request/helpers/tool-utils.d.ts.map +1 -0
  208. package/dist/lib/request/helpers/tool-utils.js +117 -0
  209. package/dist/lib/request/helpers/tool-utils.js.map +1 -0
  210. package/dist/lib/request/rate-limit-backoff.d.ts +17 -0
  211. package/dist/lib/request/rate-limit-backoff.d.ts.map +1 -0
  212. package/dist/lib/request/rate-limit-backoff.js +83 -0
  213. package/dist/lib/request/rate-limit-backoff.js.map +1 -0
  214. package/dist/lib/request/request-transformer.d.ts +107 -0
  215. package/dist/lib/request/request-transformer.d.ts.map +1 -0
  216. package/dist/lib/request/request-transformer.js +814 -0
  217. package/dist/lib/request/request-transformer.js.map +1 -0
  218. package/dist/lib/request/response-handler.d.ts +23 -0
  219. package/dist/lib/request/response-handler.d.ts.map +1 -0
  220. package/dist/lib/request/response-handler.js +155 -0
  221. package/dist/lib/request/response-handler.js.map +1 -0
  222. package/dist/lib/request/stream-failover.d.ts +21 -0
  223. package/dist/lib/request/stream-failover.d.ts.map +1 -0
  224. package/dist/lib/request/stream-failover.js +204 -0
  225. package/dist/lib/request/stream-failover.js.map +1 -0
  226. package/dist/lib/rotation.d.ts +146 -0
  227. package/dist/lib/rotation.d.ts.map +1 -0
  228. package/dist/lib/rotation.js +321 -0
  229. package/dist/lib/rotation.js.map +1 -0
  230. package/dist/lib/runtime-paths.d.ts +58 -0
  231. package/dist/lib/runtime-paths.d.ts.map +1 -0
  232. package/dist/lib/runtime-paths.js +164 -0
  233. package/dist/lib/runtime-paths.js.map +1 -0
  234. package/dist/lib/schemas.d.ts +435 -0
  235. package/dist/lib/schemas.d.ts.map +1 -0
  236. package/dist/lib/schemas.js +268 -0
  237. package/dist/lib/schemas.js.map +1 -0
  238. package/dist/lib/session-affinity.d.ts +23 -0
  239. package/dist/lib/session-affinity.d.ts.map +1 -0
  240. package/dist/lib/session-affinity.js +127 -0
  241. package/dist/lib/session-affinity.js.map +1 -0
  242. package/dist/lib/shutdown.d.ts +7 -0
  243. package/dist/lib/shutdown.d.ts.map +1 -0
  244. package/dist/lib/shutdown.js +43 -0
  245. package/dist/lib/shutdown.js.map +1 -0
  246. package/dist/lib/storage/migrations.d.ts +59 -0
  247. package/dist/lib/storage/migrations.d.ts.map +1 -0
  248. package/dist/lib/storage/migrations.js +41 -0
  249. package/dist/lib/storage/migrations.js.map +1 -0
  250. package/dist/lib/storage/paths.d.ts +51 -0
  251. package/dist/lib/storage/paths.d.ts.map +1 -0
  252. package/dist/lib/storage/paths.js +152 -0
  253. package/dist/lib/storage/paths.js.map +1 -0
  254. package/dist/lib/storage.d.ts +106 -0
  255. package/dist/lib/storage.d.ts.map +1 -0
  256. package/dist/lib/storage.js +896 -0
  257. package/dist/lib/storage.js.map +1 -0
  258. package/dist/lib/table-formatter.d.ts +32 -0
  259. package/dist/lib/table-formatter.d.ts.map +1 -0
  260. package/dist/lib/table-formatter.js +44 -0
  261. package/dist/lib/table-formatter.js.map +1 -0
  262. package/dist/lib/tools/hashline-tools.d.ts +51 -0
  263. package/dist/lib/tools/hashline-tools.d.ts.map +1 -0
  264. package/dist/lib/tools/hashline-tools.js +456 -0
  265. package/dist/lib/tools/hashline-tools.js.map +1 -0
  266. package/dist/lib/types.d.ts +130 -0
  267. package/dist/lib/types.d.ts.map +1 -0
  268. package/dist/lib/types.js +2 -0
  269. package/dist/lib/types.js.map +1 -0
  270. package/dist/lib/ui/ansi.d.ts +40 -0
  271. package/dist/lib/ui/ansi.d.ts.map +1 -0
  272. package/dist/lib/ui/ansi.js +68 -0
  273. package/dist/lib/ui/ansi.js.map +1 -0
  274. package/dist/lib/ui/auth-menu.d.ts +76 -0
  275. package/dist/lib/ui/auth-menu.d.ts.map +1 -0
  276. package/dist/lib/ui/auth-menu.js +590 -0
  277. package/dist/lib/ui/auth-menu.js.map +1 -0
  278. package/dist/lib/ui/confirm.d.ts +11 -0
  279. package/dist/lib/ui/confirm.d.ts.map +1 -0
  280. package/dist/lib/ui/confirm.js +29 -0
  281. package/dist/lib/ui/confirm.js.map +1 -0
  282. package/dist/lib/ui/copy.d.ts +123 -0
  283. package/dist/lib/ui/copy.d.ts.map +1 -0
  284. package/dist/lib/ui/copy.js +127 -0
  285. package/dist/lib/ui/copy.js.map +1 -0
  286. package/dist/lib/ui/format.d.ts +62 -0
  287. package/dist/lib/ui/format.d.ts.map +1 -0
  288. package/dist/lib/ui/format.js +205 -0
  289. package/dist/lib/ui/format.js.map +1 -0
  290. package/dist/lib/ui/runtime.d.ts +43 -0
  291. package/dist/lib/ui/runtime.d.ts.map +1 -0
  292. package/dist/lib/ui/runtime.js +69 -0
  293. package/dist/lib/ui/runtime.js.map +1 -0
  294. package/dist/lib/ui/select.d.ts +60 -0
  295. package/dist/lib/ui/select.d.ts.map +1 -0
  296. package/dist/lib/ui/select.js +467 -0
  297. package/dist/lib/ui/select.js.map +1 -0
  298. package/dist/lib/ui/theme.d.ts +56 -0
  299. package/dist/lib/ui/theme.d.ts.map +1 -0
  300. package/dist/lib/ui/theme.js +186 -0
  301. package/dist/lib/ui/theme.js.map +1 -0
  302. package/dist/lib/unified-settings.d.ts +71 -0
  303. package/dist/lib/unified-settings.d.ts.map +1 -0
  304. package/dist/lib/unified-settings.js +299 -0
  305. package/dist/lib/unified-settings.js.map +1 -0
  306. package/dist/lib/utils.d.ts +29 -0
  307. package/dist/lib/utils.d.ts.map +1 -0
  308. package/dist/lib/utils.js +54 -0
  309. package/dist/lib/utils.js.map +1 -0
  310. package/package.json +115 -0
  311. package/scripts/audit-dev-allowlist.js +128 -0
  312. package/scripts/bench-format/hashline-v2.mjs +642 -0
  313. package/scripts/bench-format/models.mjs +105 -0
  314. package/scripts/bench-format/opencode.mjs +205 -0
  315. package/scripts/bench-format/render.mjs +496 -0
  316. package/scripts/bench-format/stats.mjs +54 -0
  317. package/scripts/bench-format/tasks.mjs +151 -0
  318. package/scripts/benchmark-edit-formats.mjs +1161 -0
  319. package/scripts/benchmark-render-dashboard.mjs +49 -0
  320. package/scripts/codex-multi-auth.js +6 -0
  321. package/scripts/codex-routing.js +34 -0
  322. package/scripts/codex.js +122 -0
  323. package/scripts/copy-oauth-success.js +37 -0
  324. package/scripts/install-opencode-codex-auth.js +193 -0
  325. package/scripts/test-all-models.sh +7 -0
  326. package/scripts/test-model-matrix.js +424 -0
  327. package/scripts/validate-model-map.sh +7 -0
@@ -0,0 +1,103 @@
1
+ /**
2
+ * Typed error hierarchy for the Codex plugin.
3
+ * Provides structured error types with codes, causes, and context.
4
+ */
5
+ /**
6
+ * Error codes for categorizing errors.
7
+ */
8
+ export const ErrorCode = {
9
+ NETWORK_ERROR: "CODEX_NETWORK_ERROR",
10
+ API_ERROR: "CODEX_API_ERROR",
11
+ AUTH_ERROR: "CODEX_AUTH_ERROR",
12
+ VALIDATION_ERROR: "CODEX_VALIDATION_ERROR",
13
+ RATE_LIMIT: "CODEX_RATE_LIMIT",
14
+ TIMEOUT: "CODEX_TIMEOUT",
15
+ };
16
+ /**
17
+ * Base error class for all Codex plugin errors.
18
+ * Supports error chaining via `cause` and arbitrary context data.
19
+ */
20
+ export class CodexError extends Error {
21
+ name = "CodexError";
22
+ code;
23
+ context;
24
+ constructor(message, options) {
25
+ super(message, { cause: options?.cause });
26
+ this.code = options?.code ?? ErrorCode.API_ERROR;
27
+ this.context = options?.context;
28
+ // istanbul ignore next -- Error.captureStackTrace always exists in Node.js
29
+ if (Error.captureStackTrace) {
30
+ Error.captureStackTrace(this, this.constructor);
31
+ }
32
+ }
33
+ }
34
+ /**
35
+ * Error for HTTP/API response errors.
36
+ */
37
+ export class CodexApiError extends CodexError {
38
+ name = "CodexApiError";
39
+ status;
40
+ headers;
41
+ constructor(message, options) {
42
+ super(message, { ...options, code: options.code ?? ErrorCode.API_ERROR });
43
+ this.status = options.status;
44
+ this.headers = options.headers;
45
+ }
46
+ }
47
+ /**
48
+ * Error for authentication failures.
49
+ */
50
+ export class CodexAuthError extends CodexError {
51
+ name = "CodexAuthError";
52
+ accountId;
53
+ retryable;
54
+ constructor(message, options) {
55
+ super(message, { ...options, code: options?.code ?? ErrorCode.AUTH_ERROR });
56
+ this.accountId = options?.accountId;
57
+ this.retryable = options?.retryable ?? false;
58
+ }
59
+ }
60
+ /**
61
+ * Error for network/connection failures.
62
+ */
63
+ export class CodexNetworkError extends CodexError {
64
+ name = "CodexNetworkError";
65
+ retryable;
66
+ constructor(message, options) {
67
+ super(message, {
68
+ ...options,
69
+ code: options?.code ?? ErrorCode.NETWORK_ERROR,
70
+ });
71
+ this.retryable = options?.retryable ?? true;
72
+ }
73
+ }
74
+ /**
75
+ * Error for input validation failures.
76
+ */
77
+ export class CodexValidationError extends CodexError {
78
+ name = "CodexValidationError";
79
+ field;
80
+ expected;
81
+ constructor(message, options) {
82
+ super(message, {
83
+ ...options,
84
+ code: options?.code ?? ErrorCode.VALIDATION_ERROR,
85
+ });
86
+ this.field = options?.field;
87
+ this.expected = options?.expected;
88
+ }
89
+ }
90
+ /**
91
+ * Error for rate limit exceeded.
92
+ */
93
+ export class CodexRateLimitError extends CodexError {
94
+ name = "CodexRateLimitError";
95
+ retryAfterMs;
96
+ accountId;
97
+ constructor(message, options) {
98
+ super(message, { ...options, code: options?.code ?? ErrorCode.RATE_LIMIT });
99
+ this.retryAfterMs = options?.retryAfterMs;
100
+ this.accountId = options?.accountId;
101
+ }
102
+ }
103
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../lib/errors.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ import type { CodexQuotaSnapshot } from "./quota-probe.js";
2
+ import type { AccountMetadataV3 } from "./storage.js";
3
+ import type { TokenFailure } from "./types.js";
4
+ export type ForecastAvailability = "ready" | "delayed" | "unavailable";
5
+ export type ForecastRiskLevel = "low" | "medium" | "high";
6
+ export interface ForecastAccountInput {
7
+ index: number;
8
+ account: AccountMetadataV3;
9
+ isCurrent: boolean;
10
+ now: number;
11
+ refreshFailure?: TokenFailure;
12
+ liveQuota?: CodexQuotaSnapshot;
13
+ }
14
+ export interface ForecastAccountResult {
15
+ index: number;
16
+ label: string;
17
+ isCurrent: boolean;
18
+ availability: ForecastAvailability;
19
+ riskScore: number;
20
+ riskLevel: ForecastRiskLevel;
21
+ waitMs: number;
22
+ reasons: string[];
23
+ hardFailure: boolean;
24
+ disabled: boolean;
25
+ }
26
+ export interface ForecastRecommendation {
27
+ recommendedIndex: number | null;
28
+ reason: string;
29
+ }
30
+ export interface ForecastSummary {
31
+ total: number;
32
+ ready: number;
33
+ delayed: number;
34
+ unavailable: number;
35
+ highRisk: number;
36
+ }
37
+ export declare function isHardRefreshFailure(failure: TokenFailure): boolean;
38
+ export declare function evaluateForecastAccount(input: ForecastAccountInput): ForecastAccountResult;
39
+ export declare function evaluateForecastAccounts(inputs: ForecastAccountInput[]): ForecastAccountResult[];
40
+ export declare function recommendForecastAccount(results: ForecastAccountResult[]): ForecastRecommendation;
41
+ export declare function summarizeForecast(results: ForecastAccountResult[]): ForecastSummary;
42
+ //# sourceMappingURL=forecast.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"forecast.d.ts","sourceRoot":"","sources":["../../lib/forecast.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,MAAM,MAAM,oBAAoB,GAAG,OAAO,GAAG,SAAS,GAAG,aAAa,CAAC;AACvE,MAAM,MAAM,iBAAiB,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE1D,MAAM,WAAW,oBAAoB;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,iBAAiB,CAAC;IAC3B,SAAS,EAAE,OAAO,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,cAAc,CAAC,EAAE,YAAY,CAAC;IAC9B,SAAS,CAAC,EAAE,kBAAkB,CAAC;CAC/B;AAED,MAAM,WAAW,qBAAqB;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,EAAE,oBAAoB,CAAC;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,iBAAiB,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,sBAAsB;IACtC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,MAAM,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,eAAe;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CACjB;AAuFD,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAUnE;AAOD,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,oBAAoB,GAAG,qBAAqB,CAoG1F;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,oBAAoB,EAAE,GAAG,qBAAqB,EAAE,CAEhG;AA2BD,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,qBAAqB,EAAE,GAAG,sBAAsB,CA6BjG;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,qBAAqB,EAAE,GAAG,eAAe,CAQnF"}
@@ -0,0 +1,256 @@
1
+ import { formatAccountLabel, formatWaitTime } from "./accounts.js";
2
+ function clampRisk(score) {
3
+ if (!Number.isFinite(score))
4
+ return 100;
5
+ return Math.max(0, Math.min(100, Math.round(score)));
6
+ }
7
+ function maskEmail(value) {
8
+ const atIndex = value.indexOf("@");
9
+ if (atIndex <= 0)
10
+ return "***@***";
11
+ const local = value.slice(0, atIndex);
12
+ const domain = value.slice(atIndex + 1);
13
+ const domainParts = domain.split(".");
14
+ const tld = domainParts.pop() ?? "";
15
+ const prefix = local.slice(0, Math.min(2, local.length));
16
+ return `${prefix}***@***.${tld || "***"}`;
17
+ }
18
+ function redactEmails(value) {
19
+ return value.replace(/[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/g, (match) => maskEmail(match));
20
+ }
21
+ function redactSensitiveReason(value) {
22
+ return redactEmails(value
23
+ .replace(/Bearer\s+\S+/gi, "Bearer ***")
24
+ .replace(/\b(sk-[A-Za-z0-9]{10,})\b/g, "***"));
25
+ }
26
+ function summarizeRefreshFailure(failure) {
27
+ const reasonCode = failure.reason?.trim();
28
+ if (reasonCode && reasonCode.length > 0) {
29
+ const statusCode = typeof failure.statusCode === "number" ? ` (${failure.statusCode})` : "";
30
+ return `${reasonCode}${statusCode}`;
31
+ }
32
+ const fallback = failure.message?.trim() || "refresh failed";
33
+ return redactSensitiveReason(fallback).slice(0, 160);
34
+ }
35
+ function getRiskLevel(score) {
36
+ if (score >= 75)
37
+ return "high";
38
+ if (score >= 40)
39
+ return "medium";
40
+ return "low";
41
+ }
42
+ function getRateLimitResetTimeForFamily(account, now, family = "codex") {
43
+ const times = account.rateLimitResetTimes;
44
+ if (!times)
45
+ return null;
46
+ let minReset = null;
47
+ const prefix = `${family}:`;
48
+ for (const [key, value] of Object.entries(times)) {
49
+ if (typeof value !== "number")
50
+ continue;
51
+ if (value <= now)
52
+ continue;
53
+ if (key !== family && !key.startsWith(prefix))
54
+ continue;
55
+ if (minReset === null || value < minReset) {
56
+ minReset = value;
57
+ }
58
+ }
59
+ return minReset;
60
+ }
61
+ function getLiveQuotaWaitMs(snapshot, now) {
62
+ const waits = [];
63
+ for (const resetAt of [snapshot.primary.resetAtMs, snapshot.secondary.resetAtMs]) {
64
+ if (typeof resetAt !== "number")
65
+ continue;
66
+ if (!Number.isFinite(resetAt))
67
+ continue;
68
+ const remaining = resetAt - now;
69
+ if (remaining > 0)
70
+ waits.push(remaining);
71
+ }
72
+ return waits.length > 0 ? Math.max(...waits) : 0;
73
+ }
74
+ function describeQuotaUsage(label, usedPercent) {
75
+ if (typeof usedPercent !== "number" || !Number.isFinite(usedPercent))
76
+ return null;
77
+ const bounded = Math.max(0, Math.min(100, Math.round(usedPercent)));
78
+ return `${label} quota ${bounded}% used`;
79
+ }
80
+ export function isHardRefreshFailure(failure) {
81
+ if (failure.reason === "missing_refresh")
82
+ return true;
83
+ if (failure.statusCode === 401)
84
+ return true;
85
+ if (failure.statusCode !== 400)
86
+ return false;
87
+ const message = (failure.message ?? "").toLowerCase();
88
+ return (message.includes("invalid_grant") ||
89
+ message.includes("invalid refresh") ||
90
+ message.includes("token has been revoked"));
91
+ }
92
+ function appendWaitReason(reasons, prefix, waitMs) {
93
+ if (waitMs <= 0)
94
+ return;
95
+ reasons.push(`${prefix} ${formatWaitTime(waitMs)}`);
96
+ }
97
+ export function evaluateForecastAccount(input) {
98
+ const { account, index, isCurrent, now } = input;
99
+ const reasons = [];
100
+ let availability = "ready";
101
+ let riskScore = isCurrent ? -5 : 0;
102
+ let waitMs = 0;
103
+ let hardFailure = false;
104
+ const disabled = account.enabled === false;
105
+ if (disabled) {
106
+ availability = "unavailable";
107
+ riskScore += 95;
108
+ reasons.push("account is disabled");
109
+ }
110
+ if (input.refreshFailure) {
111
+ const hard = isHardRefreshFailure(input.refreshFailure);
112
+ hardFailure = hard;
113
+ const detail = summarizeRefreshFailure(input.refreshFailure);
114
+ if (hard) {
115
+ availability = "unavailable";
116
+ riskScore += 90;
117
+ reasons.push(`hard auth failure: ${detail}`);
118
+ }
119
+ else {
120
+ riskScore += 25;
121
+ reasons.push(`refresh warning: ${detail}`);
122
+ }
123
+ }
124
+ if (typeof account.coolingDownUntil === "number" && account.coolingDownUntil > now) {
125
+ const remaining = account.coolingDownUntil - now;
126
+ waitMs = Math.max(waitMs, remaining);
127
+ if (availability === "ready")
128
+ availability = "delayed";
129
+ riskScore += 45;
130
+ appendWaitReason(reasons, "cooldown remaining", remaining);
131
+ }
132
+ const rateLimitResetAt = getRateLimitResetTimeForFamily(account, now, "codex");
133
+ if (typeof rateLimitResetAt === "number") {
134
+ const remaining = Math.max(0, rateLimitResetAt - now);
135
+ waitMs = Math.max(waitMs, remaining);
136
+ if (availability === "ready")
137
+ availability = "delayed";
138
+ riskScore += 35;
139
+ appendWaitReason(reasons, "rate limit resets in", remaining);
140
+ }
141
+ const quota = input.liveQuota;
142
+ if (quota) {
143
+ const primaryUsed = quota.primary.usedPercent ?? 0;
144
+ const secondaryUsed = quota.secondary.usedPercent ?? 0;
145
+ const quotaPressure = quota.status === 429 || primaryUsed >= 90 || secondaryUsed >= 90;
146
+ if (quota.status === 429) {
147
+ availability = availability === "unavailable" ? "unavailable" : "delayed";
148
+ riskScore += 35;
149
+ reasons.push("live probe returned 429");
150
+ }
151
+ const liveWait = quotaPressure ? getLiveQuotaWaitMs(quota, now) : 0;
152
+ waitMs = Math.max(waitMs, liveWait);
153
+ if (liveWait > 0 && availability === "ready") {
154
+ availability = "delayed";
155
+ }
156
+ const primaryUsage = describeQuotaUsage("primary", quota.primary.usedPercent);
157
+ if (primaryUsage)
158
+ reasons.push(primaryUsage);
159
+ const secondaryUsage = describeQuotaUsage("secondary", quota.secondary.usedPercent);
160
+ if (secondaryUsage)
161
+ reasons.push(secondaryUsage);
162
+ if (primaryUsed >= 98 || secondaryUsed >= 98) {
163
+ riskScore += 55;
164
+ }
165
+ else if (primaryUsed >= 90 || secondaryUsed >= 90) {
166
+ riskScore += 35;
167
+ }
168
+ else if (primaryUsed >= 80 || secondaryUsed >= 80) {
169
+ riskScore += 20;
170
+ }
171
+ else if (primaryUsed >= 70 || secondaryUsed >= 70) {
172
+ riskScore += 10;
173
+ }
174
+ }
175
+ const hasLastUsed = typeof account.lastUsed === "number" && Number.isFinite(account.lastUsed) && account.lastUsed > 0;
176
+ const lastUsedAge = hasLastUsed ? now - account.lastUsed : null;
177
+ if (lastUsedAge !== null && (!Number.isFinite(lastUsedAge) || lastUsedAge < 0)) {
178
+ riskScore += 5;
179
+ }
180
+ else if (lastUsedAge !== null && lastUsedAge > 7 * 24 * 60 * 60 * 1000) {
181
+ riskScore += 10;
182
+ }
183
+ const finalRisk = clampRisk(riskScore);
184
+ return {
185
+ index,
186
+ label: redactEmails(formatAccountLabel(account, index)),
187
+ isCurrent,
188
+ availability,
189
+ riskScore: finalRisk,
190
+ riskLevel: getRiskLevel(finalRisk),
191
+ waitMs: Math.max(0, Math.floor(waitMs)),
192
+ reasons,
193
+ hardFailure,
194
+ disabled,
195
+ };
196
+ }
197
+ export function evaluateForecastAccounts(inputs) {
198
+ return inputs.map((input) => evaluateForecastAccount(input));
199
+ }
200
+ function compareForecastResults(a, b) {
201
+ if (a.availability !== b.availability) {
202
+ const rank = {
203
+ ready: 0,
204
+ delayed: 1,
205
+ unavailable: 2,
206
+ };
207
+ return rank[a.availability] - rank[b.availability];
208
+ }
209
+ if (a.availability === "delayed" && b.availability === "delayed" && a.waitMs !== b.waitMs) {
210
+ return a.waitMs - b.waitMs;
211
+ }
212
+ if (a.riskScore !== b.riskScore) {
213
+ return a.riskScore - b.riskScore;
214
+ }
215
+ if (a.isCurrent !== b.isCurrent) {
216
+ return a.isCurrent ? -1 : 1;
217
+ }
218
+ return a.index - b.index;
219
+ }
220
+ export function recommendForecastAccount(results) {
221
+ const candidates = results.filter((result) => !result.disabled && !result.hardFailure);
222
+ if (candidates.length === 0) {
223
+ return {
224
+ recommendedIndex: null,
225
+ reason: "No healthy accounts are available. Run `codex auth login` to add a fresh account.",
226
+ };
227
+ }
228
+ const sorted = [...candidates].sort(compareForecastResults);
229
+ const best = sorted[0];
230
+ if (!best) {
231
+ return {
232
+ recommendedIndex: null,
233
+ reason: "No recommendation available.",
234
+ };
235
+ }
236
+ if (best.availability === "ready") {
237
+ return {
238
+ recommendedIndex: best.index,
239
+ reason: `Lowest risk ready account (${best.riskLevel}, score ${best.riskScore}).`,
240
+ };
241
+ }
242
+ return {
243
+ recommendedIndex: best.index,
244
+ reason: `No account is immediately ready; pick shortest wait (${formatWaitTime(best.waitMs)}).`,
245
+ };
246
+ }
247
+ export function summarizeForecast(results) {
248
+ return {
249
+ total: results.length,
250
+ ready: results.filter((result) => result.availability === "ready").length,
251
+ delayed: results.filter((result) => result.availability === "delayed").length,
252
+ unavailable: results.filter((result) => result.availability === "unavailable").length,
253
+ highRisk: results.filter((result) => result.riskLevel === "high").length,
254
+ };
255
+ }
256
+ //# sourceMappingURL=forecast.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"forecast.js","sourceRoot":"","sources":["../../lib/forecast.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import { type CircuitState } from "./circuit-breaker.js";
2
+ export interface AccountHealth {
3
+ index: number;
4
+ email?: string;
5
+ accountId?: string;
6
+ health: number;
7
+ isRateLimited: boolean;
8
+ isCoolingDown: boolean;
9
+ cooldownReason?: string;
10
+ lastUsed?: number;
11
+ circuitState: CircuitState;
12
+ }
13
+ export interface PluginHealth {
14
+ status: "healthy" | "degraded" | "unhealthy";
15
+ accountCount: number;
16
+ healthyAccountCount: number;
17
+ rateLimitedCount: number;
18
+ coolingDownCount: number;
19
+ accounts: AccountHealth[];
20
+ timestamp: number;
21
+ }
22
+ export declare function getAccountHealth(accounts: Array<{
23
+ index: number;
24
+ email?: string;
25
+ accountId?: string;
26
+ health: number;
27
+ rateLimitedUntil?: number;
28
+ cooldownUntil?: number;
29
+ cooldownReason?: string;
30
+ lastUsedAt?: number;
31
+ }>, now?: number): PluginHealth;
32
+ export declare function formatHealthReport(health: PluginHealth): string;
33
+ //# sourceMappingURL=health.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"health.d.ts","sourceRoot":"","sources":["../../lib/health.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAE5E,MAAM,WAAW,aAAa;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,OAAO,CAAC;IACvB,aAAa,EAAE,OAAO,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,YAAY,CAAC;CAC3B;AAED,MAAM,WAAW,YAAY;IAC5B,MAAM,EAAE,SAAS,GAAG,UAAU,GAAG,WAAW,CAAC;IAC7C,YAAY,EAAE,MAAM,CAAC;IACrB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,gBAAgB,CAC/B,QAAQ,EAAE,KAAK,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC,EACF,GAAG,SAAa,GACd,YAAY,CA2Cd;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CA4B/D"}
@@ -0,0 +1,70 @@
1
+ import { getCircuitBreaker } from "./circuit-breaker.js";
2
+ export function getAccountHealth(accounts, now = Date.now()) {
3
+ const accountHealths = accounts.map((acc) => {
4
+ const circuitKey = `account:${acc.accountId ?? acc.index}`;
5
+ const circuit = getCircuitBreaker(circuitKey);
6
+ return {
7
+ index: acc.index,
8
+ email: acc.email,
9
+ accountId: acc.accountId,
10
+ health: acc.health,
11
+ isRateLimited: (acc.rateLimitedUntil ?? 0) > now,
12
+ isCoolingDown: (acc.cooldownUntil ?? 0) > now,
13
+ cooldownReason: acc.cooldownReason,
14
+ lastUsed: acc.lastUsedAt,
15
+ circuitState: circuit.getState(),
16
+ };
17
+ });
18
+ const healthyCount = accountHealths.filter((a) => !a.isRateLimited && !a.isCoolingDown && a.health >= 50).length;
19
+ const rateLimitedCount = accountHealths.filter((a) => a.isRateLimited).length;
20
+ const coolingDownCount = accountHealths.filter((a) => a.isCoolingDown).length;
21
+ let status;
22
+ if (healthyCount === 0 && accounts.length > 0) {
23
+ status = "unhealthy";
24
+ }
25
+ else if (healthyCount < accounts.length) {
26
+ status = "degraded";
27
+ }
28
+ else {
29
+ status = "healthy";
30
+ }
31
+ return {
32
+ status,
33
+ accountCount: accounts.length,
34
+ healthyAccountCount: healthyCount,
35
+ rateLimitedCount,
36
+ coolingDownCount,
37
+ accounts: accountHealths,
38
+ timestamp: now,
39
+ };
40
+ }
41
+ export function formatHealthReport(health) {
42
+ const lines = [
43
+ `Plugin Health: ${health.status.toUpperCase()}`,
44
+ ``,
45
+ `Accounts: ${health.healthyAccountCount}/${health.accountCount} healthy`,
46
+ ];
47
+ if (health.rateLimitedCount > 0) {
48
+ lines.push(`Rate Limited: ${health.rateLimitedCount}`);
49
+ }
50
+ if (health.coolingDownCount > 0) {
51
+ lines.push(`Cooling Down: ${health.coolingDownCount}`);
52
+ }
53
+ if (health.accounts.length > 0) {
54
+ lines.push(``, `Account Details:`);
55
+ for (const acc of health.accounts) {
56
+ const email = acc.email ?? `Account ${acc.index + 1}`;
57
+ const flags = [];
58
+ if (acc.isRateLimited)
59
+ flags.push("rate-limited");
60
+ if (acc.isCoolingDown)
61
+ flags.push(`cooling-${acc.cooldownReason ?? "down"}`);
62
+ if (acc.circuitState !== "closed")
63
+ flags.push(`circuit-${acc.circuitState}`);
64
+ const flagStr = flags.length > 0 ? ` [${flags.join(", ")}]` : "";
65
+ lines.push(` [${acc.index + 1}] ${email}: ${acc.health}%${flagStr}`);
66
+ }
67
+ }
68
+ return lines.join("\n");
69
+ }
70
+ //# sourceMappingURL=health.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"health.js","sourceRoot":"","sources":["../../lib/health.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ export * from "./accounts.js";
2
+ export * from "./storage.js";
3
+ export * from "./config.js";
4
+ export * from "./constants.js";
5
+ export * from "./types.js";
6
+ export * from "./logger.js";
7
+ export * from "./auth/auth.js";
8
+ export * from "./request/fetch-helpers.js";
9
+ export * from "./request/request-transformer.js";
10
+ export * from "./request/response-handler.js";
11
+ export * from "./request/rate-limit-backoff.js";
12
+ export * from "./prompts/codex.js";
13
+ export * from "./shutdown.js";
14
+ export * from "./circuit-breaker.js";
15
+ export * from "./health.js";
16
+ export * from "./table-formatter.js";
17
+ export * from "./parallel-probe.js";
18
+ export * from "./session-affinity.js";
19
+ export * from "./live-account-sync.js";
20
+ export * from "./refresh-guardian.js";
21
+ export * from "./refresh-lease.js";
22
+ export * from "./request/failure-policy.js";
23
+ export * from "./entitlement-cache.js";
24
+ export * from "./preemptive-quota-scheduler.js";
25
+ export * from "./unified-settings.js";
26
+ export * from "./capability-policy.js";
27
+ export * from "./request/stream-failover.js";
28
+ export * from "./codex-cli/state.js";
29
+ export * from "./codex-cli/sync.js";
30
+ export * from "./codex-cli/writer.js";
31
+ export * from "./codex-cli/observability.js";
32
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../lib/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,kCAAkC,CAAC;AACjD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,iCAAiC,CAAC;AAChD,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAC;AACrC,cAAc,aAAa,CAAC;AAC5B,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,wBAAwB,CAAC;AACvC,cAAc,iCAAiC,CAAC;AAChD,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,8BAA8B,CAAC"}
@@ -0,0 +1,32 @@
1
+ export * from "./accounts.js";
2
+ export * from "./storage.js";
3
+ export * from "./config.js";
4
+ export * from "./constants.js";
5
+ export * from "./types.js";
6
+ export * from "./logger.js";
7
+ export * from "./auth/auth.js";
8
+ export * from "./request/fetch-helpers.js";
9
+ export * from "./request/request-transformer.js";
10
+ export * from "./request/response-handler.js";
11
+ export * from "./request/rate-limit-backoff.js";
12
+ export * from "./prompts/codex.js";
13
+ export * from "./shutdown.js";
14
+ export * from "./circuit-breaker.js";
15
+ export * from "./health.js";
16
+ export * from "./table-formatter.js";
17
+ export * from "./parallel-probe.js";
18
+ export * from "./session-affinity.js";
19
+ export * from "./live-account-sync.js";
20
+ export * from "./refresh-guardian.js";
21
+ export * from "./refresh-lease.js";
22
+ export * from "./request/failure-policy.js";
23
+ export * from "./entitlement-cache.js";
24
+ export * from "./preemptive-quota-scheduler.js";
25
+ export * from "./unified-settings.js";
26
+ export * from "./capability-policy.js";
27
+ export * from "./request/stream-failover.js";
28
+ export * from "./codex-cli/state.js";
29
+ export * from "./codex-cli/sync.js";
30
+ export * from "./codex-cli/writer.js";
31
+ export * from "./codex-cli/observability.js";
32
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../lib/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,kCAAkC,CAAC;AACjD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,iCAAiC,CAAC;AAChD,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAC;AACrC,cAAc,aAAa,CAAC;AAC5B,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,wBAAwB,CAAC;AACvC,cAAc,iCAAiC,CAAC;AAChD,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,8BAA8B,CAAC"}
@@ -0,0 +1,39 @@
1
+ export interface LiveAccountSyncOptions {
2
+ debounceMs?: number;
3
+ pollIntervalMs?: number;
4
+ }
5
+ export interface LiveAccountSyncSnapshot {
6
+ path: string | null;
7
+ running: boolean;
8
+ lastKnownMtimeMs: number | null;
9
+ lastSyncAt: number | null;
10
+ reloadCount: number;
11
+ errorCount: number;
12
+ }
13
+ /**
14
+ * Watches account storage and triggers a reload callback when file content
15
+ * changes. Uses fs.watch + polling fallback for Windows reliability.
16
+ */
17
+ export declare class LiveAccountSync {
18
+ private readonly reload;
19
+ private readonly debounceMs;
20
+ private readonly pollIntervalMs;
21
+ private watcher;
22
+ private pollTimer;
23
+ private debounceTimer;
24
+ private currentPath;
25
+ private running;
26
+ private lastKnownMtimeMs;
27
+ private lastSyncAt;
28
+ private reloadCount;
29
+ private errorCount;
30
+ private reloadInFlight;
31
+ constructor(reload: () => Promise<void>, options?: LiveAccountSyncOptions);
32
+ syncToPath(path: string): Promise<void>;
33
+ stop(): void;
34
+ getSnapshot(): LiveAccountSyncSnapshot;
35
+ private scheduleReload;
36
+ private pollOnce;
37
+ private runReload;
38
+ }
39
+ //# sourceMappingURL=live-account-sync.d.ts.map