oc-codex-multi-auth 6.3.4 → 6.4.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 (43) hide show
  1. package/README.md +1 -0
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +12 -2
  4. package/dist/index.js.map +1 -1
  5. package/dist/lib/accounts/rotation.d.ts +17 -0
  6. package/dist/lib/accounts/rotation.d.ts.map +1 -1
  7. package/dist/lib/accounts/rotation.js +51 -0
  8. package/dist/lib/accounts/rotation.js.map +1 -1
  9. package/dist/lib/accounts/warm-request.d.ts +41 -0
  10. package/dist/lib/accounts/warm-request.d.ts.map +1 -0
  11. package/dist/lib/accounts/warm-request.js +97 -0
  12. package/dist/lib/accounts/warm-request.js.map +1 -0
  13. package/dist/lib/accounts/warm.d.ts +71 -0
  14. package/dist/lib/accounts/warm.d.ts.map +1 -0
  15. package/dist/lib/accounts/warm.js +86 -0
  16. package/dist/lib/accounts/warm.js.map +1 -0
  17. package/dist/lib/accounts.d.ts +9 -0
  18. package/dist/lib/accounts.d.ts.map +1 -1
  19. package/dist/lib/accounts.js +19 -0
  20. package/dist/lib/accounts.js.map +1 -1
  21. package/dist/lib/config.d.ts +17 -0
  22. package/dist/lib/config.d.ts.map +1 -1
  23. package/dist/lib/config.js +30 -0
  24. package/dist/lib/config.js.map +1 -1
  25. package/dist/lib/constants.d.ts +11 -0
  26. package/dist/lib/constants.d.ts.map +1 -1
  27. package/dist/lib/constants.js +11 -0
  28. package/dist/lib/constants.js.map +1 -1
  29. package/dist/lib/schemas.d.ts +5 -0
  30. package/dist/lib/schemas.d.ts.map +1 -1
  31. package/dist/lib/schemas.js +1 -0
  32. package/dist/lib/schemas.js.map +1 -1
  33. package/dist/lib/tools/codex-help.d.ts.map +1 -1
  34. package/dist/lib/tools/codex-help.js +1 -0
  35. package/dist/lib/tools/codex-help.js.map +1 -1
  36. package/dist/lib/tools/codex-warm.d.ts +33 -0
  37. package/dist/lib/tools/codex-warm.d.ts.map +1 -0
  38. package/dist/lib/tools/codex-warm.js +113 -0
  39. package/dist/lib/tools/codex-warm.js.map +1 -0
  40. package/dist/lib/tools/index.d.ts.map +1 -1
  41. package/dist/lib/tools/index.js +2 -0
  42. package/dist/lib/tools/index.js.map +1 -1
  43. package/package.json +1 -1
@@ -112,6 +112,57 @@ export class AccountRotation {
112
112
  account.lastUsed = nowMs();
113
113
  return account;
114
114
  }
115
+ /**
116
+ * Drain-first ("sticky") selection for issue #183.
117
+ *
118
+ * Stays on the current account for the family while it remains healthy
119
+ * (not disabled, not rate-limited for this family/model, not cooling down).
120
+ * When the current account is unavailable, it picks the *lowest-indexed*
121
+ * available account rather than spreading load. This concentrates traffic
122
+ * on as few accounts as possible so the remaining accounts keep their
123
+ * quota in reserve — staggering weekly-quota cooldowns instead of
124
+ * exhausting every account simultaneously (the round-robin failure mode the
125
+ * issue describes).
126
+ *
127
+ * Returns null when no account is available (every account disabled,
128
+ * rate-limited, or cooling down), matching the other selectors' contract so
129
+ * the request loop's wait/retry logic is unchanged.
130
+ */
131
+ getCurrentOrNextForFamilySticky(family, model) {
132
+ const count = this.state.accounts.length;
133
+ if (count === 0)
134
+ return null;
135
+ const isAvailable = (account) => {
136
+ if (account.enabled === false)
137
+ return false;
138
+ clearExpiredRateLimits(account);
139
+ return (!isRateLimitedForFamily(account, family, model) &&
140
+ !this.state.isAccountCoolingDown(account));
141
+ };
142
+ // Prefer the account we are already pinned to while it still has quota.
143
+ const currentIndex = this.state.currentAccountIndexByFamily[family];
144
+ if (currentIndex >= 0 && currentIndex < count) {
145
+ const currentAccount = this.state.accounts[currentIndex];
146
+ if (currentAccount && isAvailable(currentAccount)) {
147
+ currentAccount.lastUsed = nowMs();
148
+ return currentAccount;
149
+ }
150
+ }
151
+ // Current account exhausted: pick the lowest-indexed available account so
152
+ // load concentrates rather than spreads.
153
+ for (let idx = 0; idx < count; idx++) {
154
+ const account = this.state.accounts[idx];
155
+ if (!account)
156
+ continue;
157
+ if (!isAvailable(account))
158
+ continue;
159
+ this.state.currentAccountIndexByFamily[family] = idx;
160
+ this.state.cursorByFamily[family] = (idx + 1) % count;
161
+ account.lastUsed = nowMs();
162
+ return account;
163
+ }
164
+ return null;
165
+ }
115
166
  recordSuccess(account, family, model) {
116
167
  const quotaKey = model ? `${family}:${model}` : family;
117
168
  getHealthTracker().recordSuccess(account.index, quotaKey);
@@ -1 +1 @@
1
- {"version":3,"file":"rotation.js","sourceRoot":"","sources":["../../../lib/accounts/rotation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rotation.js","sourceRoot":"","sources":["../../../lib/accounts/rotation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Real upstream "warm" request for issue #182.
3
+ *
4
+ * Sends a single minimal billable request to `POST /codex/responses` — the
5
+ * same endpoint and request shape the live request path uses for its quota
6
+ * probe — so the account's rolling usage window actually starts. A read-only
7
+ * `GET /wham/usage` does NOT open the window (it only reports server-side
8
+ * windows that already exist), so warming must send a genuine inference
9
+ * request. The body is deliberately tiny (reasoning effort "none", verbosity
10
+ * "low", no stored conversation) to keep the quota cost negligible, and mirrors
11
+ * the proven quota-probe request shape used by the live request path.
12
+ *
13
+ * This module owns the network side-effect; the pure iteration/summary logic
14
+ * lives in `warm.ts` and is injected this function via `codex-warm.ts`.
15
+ */
16
+ import type { RequestBody } from "../types.js";
17
+ export interface WarmRequestParams {
18
+ accountId: string;
19
+ accessToken: string;
20
+ organizationId: string | undefined;
21
+ /** Override the timeout (tests). */
22
+ timeoutMs?: number;
23
+ /** Injectable fetch for tests; defaults to global fetch. */
24
+ fetchImpl?: typeof fetch;
25
+ }
26
+ /**
27
+ * Build the minimal warm-ping request body. Exported for tests so the exact
28
+ * shape (stream/store/reasoning) stays pinned.
29
+ */
30
+ export declare function buildWarmRequestBody(model?: string): Promise<RequestBody>;
31
+ /**
32
+ * Send one warm request to open the account's usage window.
33
+ *
34
+ * Resolves `true` when the upstream accepted the request enough to start the
35
+ * window. A 2xx clearly opens it; a 429 (rate-limited) means the window is
36
+ * already open/active, which still satisfies the user intent ("the window is
37
+ * ticking"). Any other non-2xx, or a network/timeout error, throws so the
38
+ * caller records the account as failed.
39
+ */
40
+ export declare function warmAccountWindow(params: WarmRequestParams): Promise<boolean>;
41
+ //# sourceMappingURL=warm-request.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"warm-request.d.ts","sourceRoot":"","sources":["../../../lib/accounts/warm-request.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAKH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAW/C,MAAM,WAAW,iBAAiB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,oCAAoC;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4DAA4D;IAC5D,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CACzB;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CAAC,KAAK,SAAa,GAAG,OAAO,CAAC,WAAW,CAAC,CAkBnF;AAED;;;;;;;;GAQG;AACH,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,OAAO,CAAC,CA4CnF"}
@@ -0,0 +1,97 @@
1
+ /**
2
+ * Real upstream "warm" request for issue #182.
3
+ *
4
+ * Sends a single minimal billable request to `POST /codex/responses` — the
5
+ * same endpoint and request shape the live request path uses for its quota
6
+ * probe — so the account's rolling usage window actually starts. A read-only
7
+ * `GET /wham/usage` does NOT open the window (it only reports server-side
8
+ * windows that already exist), so warming must send a genuine inference
9
+ * request. The body is deliberately tiny (reasoning effort "none", verbosity
10
+ * "low", no stored conversation) to keep the quota cost negligible, and mirrors
11
+ * the proven quota-probe request shape used by the live request path.
12
+ *
13
+ * This module owns the network side-effect; the pure iteration/summary logic
14
+ * lives in `warm.ts` and is injected this function via `codex-warm.ts`.
15
+ */
16
+ import { CODEX_BASE_URL } from "../constants.js";
17
+ import { createCodexHeaders } from "../request/fetch-helpers.js";
18
+ import { getCodexInstructions } from "../prompts/codex.js";
19
+ import { createLogger } from "../logger.js";
20
+ const log = createLogger("warm-request");
21
+ /** Model used for the warm ping. Mirrors the live quota-probe default. */
22
+ const WARM_MODEL = "gpt-5.4";
23
+ /** Hard ceiling on a warm request so a hung upstream cannot wedge the batch. */
24
+ const WARM_TIMEOUT_MS = 15_000;
25
+ /**
26
+ * Build the minimal warm-ping request body. Exported for tests so the exact
27
+ * shape (stream/store/reasoning) stays pinned.
28
+ */
29
+ export async function buildWarmRequestBody(model = WARM_MODEL) {
30
+ const instructions = await getCodexInstructions(model);
31
+ return {
32
+ model,
33
+ stream: true,
34
+ store: false,
35
+ include: ["reasoning.encrypted_content"],
36
+ instructions,
37
+ input: [
38
+ {
39
+ type: "message",
40
+ role: "user",
41
+ content: [{ type: "input_text", text: "warm ping" }],
42
+ },
43
+ ],
44
+ reasoning: { effort: "none", summary: "auto" },
45
+ text: { verbosity: "low" },
46
+ };
47
+ }
48
+ /**
49
+ * Send one warm request to open the account's usage window.
50
+ *
51
+ * Resolves `true` when the upstream accepted the request enough to start the
52
+ * window. A 2xx clearly opens it; a 429 (rate-limited) means the window is
53
+ * already open/active, which still satisfies the user intent ("the window is
54
+ * ticking"). Any other non-2xx, or a network/timeout error, throws so the
55
+ * caller records the account as failed.
56
+ */
57
+ export async function warmAccountWindow(params) {
58
+ const doFetch = params.fetchImpl ?? fetch;
59
+ const body = await buildWarmRequestBody();
60
+ const headers = createCodexHeaders(undefined, params.accountId, params.accessToken, {
61
+ model: WARM_MODEL,
62
+ organizationId: params.organizationId,
63
+ });
64
+ const controller = new AbortController();
65
+ const timeout = setTimeout(() => controller.abort(), params.timeoutMs ?? WARM_TIMEOUT_MS);
66
+ try {
67
+ const response = await doFetch(`${CODEX_BASE_URL}/codex/responses`, {
68
+ method: "POST",
69
+ headers,
70
+ body: JSON.stringify(body),
71
+ signal: controller.signal,
72
+ });
73
+ // Drain/cancel the SSE stream immediately — we only needed to start the
74
+ // window, not consume the response.
75
+ try {
76
+ await response.body?.cancel();
77
+ }
78
+ catch {
79
+ // Ignore cancellation failures.
80
+ }
81
+ if (response.ok)
82
+ return true;
83
+ // 429 = window already open and currently rate-limited. The user's goal
84
+ // (window is ticking) is satisfied, so treat it as a successful warm.
85
+ if (response.status === 429) {
86
+ log.debug("Warm ping hit 429 — window already active", {
87
+ accountId: params.accountId,
88
+ });
89
+ return true;
90
+ }
91
+ throw new Error(`Warm request failed: HTTP ${response.status}`);
92
+ }
93
+ finally {
94
+ clearTimeout(timeout);
95
+ }
96
+ }
97
+ //# sourceMappingURL=warm-request.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"warm-request.js","sourceRoot":"","sources":["../../../lib/accounts/warm-request.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAE3D,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,MAAM,GAAG,GAAG,YAAY,CAAC,cAAc,CAAC,CAAC;AAEzC,0EAA0E;AAC1E,MAAM,UAAU,GAAG,SAAS,CAAC;AAE7B,gFAAgF;AAChF,MAAM,eAAe,GAAG,MAAM,CAAC;AAY/B;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,KAAK,GAAG,UAAU;IAC5D,MAAM,YAAY,GAAG,MAAM,oBAAoB,CAAC,KAAK,CAAC,CAAC;IACvD,OAAO;QACN,KAAK;QACL,MAAM,EAAE,IAAI;QACZ,KAAK,EAAE,KAAK;QACZ,OAAO,EAAE,CAAC,6BAA6B,CAAC;QACxC,YAAY;QACZ,KAAK,EAAE;YACN;gBACC,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;aACpD;SACD;QACD,SAAS,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE;QAC9C,IAAI,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE;KAC1B,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,MAAyB;IAChE,MAAM,OAAO,GAAG,MAAM,CAAC,SAAS,IAAI,KAAK,CAAC;IAC1C,MAAM,IAAI,GAAG,MAAM,oBAAoB,EAAE,CAAC;IAC1C,MAAM,OAAO,GAAG,kBAAkB,CAAC,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,WAAW,EAAE;QACnF,KAAK,EAAE,UAAU;QACjB,cAAc,EAAE,MAAM,CAAC,cAAc;KACrC,CAAC,CAAC;IAEH,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,OAAO,GAAG,UAAU,CACzB,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EACxB,MAAM,CAAC,SAAS,IAAI,eAAe,CACnC,CAAC;IACF,IAAI,CAAC;QACJ,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,cAAc,kBAAkB,EAAE;YACnE,MAAM,EAAE,MAAM;YACd,OAAO;YACP,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;YAC1B,MAAM,EAAE,UAAU,CAAC,MAAM;SACzB,CAAC,CAAC;QAEH,wEAAwE;QACxE,oCAAoC;QACpC,IAAI,CAAC;YACJ,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;QAC/B,CAAC;QAAC,MAAM,CAAC;YACR,gCAAgC;QACjC,CAAC;QAED,IAAI,QAAQ,CAAC,EAAE;YAAE,OAAO,IAAI,CAAC;QAE7B,wEAAwE;QACxE,sEAAsE;QACtE,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC7B,GAAG,CAAC,KAAK,CAAC,2CAA2C,EAAE;gBACtD,SAAS,EAAE,MAAM,CAAC,SAAS;aAC3B,CAAC,CAAC;YACH,OAAO,IAAI,CAAC;QACb,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,6BAA6B,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IACjE,CAAC;YAAS,CAAC;QACV,YAAY,CAAC,OAAO,CAAC,CAAC;IACvB,CAAC;AACF,CAAC"}
@@ -0,0 +1,71 @@
1
+ /**
2
+ * Account "warm-up" orchestrator (issue #182).
3
+ *
4
+ * Sends one minimal request to each enabled account so its rolling usage
5
+ * window (the ~5h ChatGPT/Codex quota window) starts ticking immediately,
6
+ * rather than only when the rotation eventually lands on that account. This
7
+ * lets users prime every account at the start of a session ("send a hi to each
8
+ * account") instead of waiting for the current account to run dry.
9
+ *
10
+ * This module is intentionally pure: it contains the iteration, outcome
11
+ * classification, and summary logic, but performs no network or auth I/O
12
+ * itself. The real upstream call is injected as `warmOne`, which keeps this
13
+ * logic fully deterministic and unit-testable, and keeps the network-touching
14
+ * adapter isolated in the `codex-warm` tool. The split mirrors how
15
+ * `lib/rotation.ts` (pure selection) is separated from `lib/accounts/rotation.ts`
16
+ * (the manager-facing wrapper).
17
+ */
18
+ /**
19
+ * Per-account result of a warm attempt.
20
+ *
21
+ * - `warmed`: the upstream request succeeded; the window is now open.
22
+ * - `failed`: the upstream request was attempted but errored (auth invalid,
23
+ * network error, upstream 5xx, etc.). `detail` carries a short reason.
24
+ * - `skipped`: the account was not attempted (e.g. disabled). `detail` says why.
25
+ */
26
+ export type WarmStatus = "warmed" | "failed" | "skipped";
27
+ export interface WarmOutcome {
28
+ status: WarmStatus;
29
+ /** Short human-readable reason, primarily for `failed` / `skipped`. */
30
+ detail?: string;
31
+ }
32
+ /** A warm result paired with the account it belongs to. */
33
+ export interface WarmAccountResult<A> {
34
+ account: A;
35
+ /** Zero-based position in the input list (stable for display ordering). */
36
+ index: number;
37
+ status: WarmStatus;
38
+ detail?: string;
39
+ }
40
+ export interface WarmSummary<A> {
41
+ results: WarmAccountResult<A>[];
42
+ warmedCount: number;
43
+ failedCount: number;
44
+ skippedCount: number;
45
+ /** Total accounts considered (= results.length). */
46
+ total: number;
47
+ }
48
+ export interface WarmAccountsOptions {
49
+ /**
50
+ * Run warm attempts concurrently (default) or strictly one at a time.
51
+ * Sequential mode is useful when the caller wants to avoid bursting the
52
+ * upstream with parallel requests. Defaults to `true` (concurrent).
53
+ */
54
+ concurrent?: boolean;
55
+ }
56
+ /**
57
+ * Warm every account in `accounts` by invoking `warmOne` on each one that is
58
+ * eligible, then summarize the outcomes.
59
+ *
60
+ * `warmOne` must resolve (never reject) — but to be defensive against an
61
+ * injected function that throws or rejects, any thrown error is captured and
62
+ * recorded as a `failed` outcome so a single bad account can never abort the
63
+ * whole batch.
64
+ *
65
+ * The returned `results` array preserves the input order regardless of
66
+ * concurrency, so display output is deterministic.
67
+ */
68
+ export declare function warmAccounts<A extends {
69
+ enabled?: boolean;
70
+ }>(accounts: readonly A[], warmOne: (account: A, index: number) => Promise<WarmOutcome>, options?: WarmAccountsOptions): Promise<WarmSummary<A>>;
71
+ //# sourceMappingURL=warm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"warm.d.ts","sourceRoot":"","sources":["../../../lib/accounts/warm.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH;;;;;;;GAOG;AACH,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;AAEzD,MAAM,WAAW,WAAW;IAC3B,MAAM,EAAE,UAAU,CAAC;IACnB,uEAAuE;IACvE,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,2DAA2D;AAC3D,MAAM,WAAW,iBAAiB,CAAC,CAAC;IACnC,OAAO,EAAE,CAAC,CAAC;IACX,2EAA2E;IAC3E,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,UAAU,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW,CAAC,CAAC;IAC7B,OAAO,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,oDAAoD;IACpD,KAAK,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,mBAAmB;IACnC;;;;OAIG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACrB;AAUD;;;;;;;;;;;GAWG;AACH,wBAAsB,YAAY,CAAC,CAAC,SAAS;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,EACjE,QAAQ,EAAE,SAAS,CAAC,EAAE,EACtB,OAAO,EAAE,CAAC,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,WAAW,CAAC,EAC5D,OAAO,GAAE,mBAAwB,GAC/B,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAgDzB"}
@@ -0,0 +1,86 @@
1
+ /**
2
+ * Account "warm-up" orchestrator (issue #182).
3
+ *
4
+ * Sends one minimal request to each enabled account so its rolling usage
5
+ * window (the ~5h ChatGPT/Codex quota window) starts ticking immediately,
6
+ * rather than only when the rotation eventually lands on that account. This
7
+ * lets users prime every account at the start of a session ("send a hi to each
8
+ * account") instead of waiting for the current account to run dry.
9
+ *
10
+ * This module is intentionally pure: it contains the iteration, outcome
11
+ * classification, and summary logic, but performs no network or auth I/O
12
+ * itself. The real upstream call is injected as `warmOne`, which keeps this
13
+ * logic fully deterministic and unit-testable, and keeps the network-touching
14
+ * adapter isolated in the `codex-warm` tool. The split mirrors how
15
+ * `lib/rotation.ts` (pure selection) is separated from `lib/accounts/rotation.ts`
16
+ * (the manager-facing wrapper).
17
+ */
18
+ /**
19
+ * Decide whether an account should be warmed at all.
20
+ * Disabled accounts are skipped; everything else is attempted.
21
+ */
22
+ function shouldSkip(account) {
23
+ return account.enabled === false;
24
+ }
25
+ /**
26
+ * Warm every account in `accounts` by invoking `warmOne` on each one that is
27
+ * eligible, then summarize the outcomes.
28
+ *
29
+ * `warmOne` must resolve (never reject) — but to be defensive against an
30
+ * injected function that throws or rejects, any thrown error is captured and
31
+ * recorded as a `failed` outcome so a single bad account can never abort the
32
+ * whole batch.
33
+ *
34
+ * The returned `results` array preserves the input order regardless of
35
+ * concurrency, so display output is deterministic.
36
+ */
37
+ export async function warmAccounts(accounts, warmOne, options = {}) {
38
+ const concurrent = options.concurrent ?? true;
39
+ const runOne = async (account, index) => {
40
+ if (shouldSkip(account)) {
41
+ return { account, index, status: "skipped", detail: "disabled" };
42
+ }
43
+ try {
44
+ const outcome = await warmOne(account, index);
45
+ return { account, index, status: outcome.status, detail: outcome.detail };
46
+ }
47
+ catch (error) {
48
+ const detail = error instanceof Error ? error.message : String(error);
49
+ return { account, index, status: "failed", detail };
50
+ }
51
+ };
52
+ let results;
53
+ if (concurrent) {
54
+ results = await Promise.all(accounts.map((account, index) => runOne(account, index)));
55
+ }
56
+ else {
57
+ results = [];
58
+ for (let index = 0; index < accounts.length; index++) {
59
+ // Non-null: index is bounded by accounts.length.
60
+ const account = accounts[index];
61
+ results.push(await runOne(account, index));
62
+ }
63
+ }
64
+ // Preserve input order even though Promise.all already does; explicit for
65
+ // safety against future refactors to the concurrent branch.
66
+ results.sort((a, b) => a.index - b.index);
67
+ let warmedCount = 0;
68
+ let failedCount = 0;
69
+ let skippedCount = 0;
70
+ for (const result of results) {
71
+ if (result.status === "warmed")
72
+ warmedCount++;
73
+ else if (result.status === "failed")
74
+ failedCount++;
75
+ else
76
+ skippedCount++;
77
+ }
78
+ return {
79
+ results,
80
+ warmedCount,
81
+ failedCount,
82
+ skippedCount,
83
+ total: results.length,
84
+ };
85
+ }
86
+ //# sourceMappingURL=warm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"warm.js","sourceRoot":"","sources":["../../../lib/accounts/warm.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AA6CH;;;GAGG;AACH,SAAS,UAAU,CAAkC,OAAU;IAC9D,OAAO,OAAO,CAAC,OAAO,KAAK,KAAK,CAAC;AAClC,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CACjC,QAAsB,EACtB,OAA4D,EAC5D,UAA+B,EAAE;IAEjC,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,IAAI,CAAC;IAE9C,MAAM,MAAM,GAAG,KAAK,EAAE,OAAU,EAAE,KAAa,EAAiC,EAAE;QACjF,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YACzB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;QAClE,CAAC;QACD,IAAI,CAAC;YACJ,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YAC9C,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;QAC3E,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,MAAM,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACtE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;QACrD,CAAC;IACF,CAAC,CAAC;IAEF,IAAI,OAA+B,CAAC;IACpC,IAAI,UAAU,EAAE,CAAC;QAChB,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IACvF,CAAC;SAAM,CAAC;QACP,OAAO,GAAG,EAAE,CAAC;QACb,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;YACtD,iDAAiD;YACjD,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAM,CAAC;YACrC,OAAO,CAAC,IAAI,CAAC,MAAM,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;QAC5C,CAAC;IACF,CAAC;IAED,0EAA0E;IAC1E,4DAA4D;IAC5D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;IAE1C,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC9B,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ;YAAE,WAAW,EAAE,CAAC;aACzC,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ;YAAE,WAAW,EAAE,CAAC;;YAC9C,YAAY,EAAE,CAAC;IACrB,CAAC;IAED,OAAO;QACN,OAAO;QACP,WAAW;QACX,WAAW;QACX,YAAY;QACZ,KAAK,EAAE,OAAO,CAAC,MAAM;KACrB,CAAC;AACH,CAAC"}
@@ -14,6 +14,7 @@
14
14
  import type { Auth } from "@opencode-ai/sdk";
15
15
  import { type AccountStorageV3, type CooldownReason } from "./storage.js";
16
16
  import type { HybridSelectionOptions } from "./rotation.js";
17
+ import type { RotationStrategy } from "./config.js";
17
18
  import type { OAuthAuthDetails } from "./types.js";
18
19
  import type { ModelFamily } from "./prompts/codex.js";
19
20
  import { type AccountSelectionExplainability, type ManagedAccount } from "./accounts/state.js";
@@ -59,6 +60,14 @@ export declare class AccountManager {
59
60
  getCurrentOrNextForFamily(family: ModelFamily, model?: string | null): ManagedAccount | null;
60
61
  getNextForFamily(family: ModelFamily, model?: string | null): ManagedAccount | null;
61
62
  getCurrentOrNextForFamilyHybrid(family: ModelFamily, model?: string | null, options?: HybridSelectionOptions): ManagedAccount | null;
63
+ getCurrentOrNextForFamilySticky(family: ModelFamily, model?: string | null): ManagedAccount | null;
64
+ /**
65
+ * Strategy-aware account selection (issue #183). Routes to the configured
66
+ * load-balancing algorithm. `hybrid` is the historical default and is
67
+ * behavior-identical to calling {@link getCurrentOrNextForFamilyHybrid}
68
+ * directly, so existing callers/tests are unaffected.
69
+ */
70
+ getAccountForStrategy(strategy: RotationStrategy, family: ModelFamily, model?: string | null, options?: HybridSelectionOptions): ManagedAccount | null;
62
71
  recordSuccess(account: ManagedAccount, family: ModelFamily, model?: string | null): void;
63
72
  recordRateLimit(account: ManagedAccount, family: ModelFamily, model?: string | null): void;
64
73
  recordFailure(account: ManagedAccount, family: ModelFamily, model?: string | null): void;
@@ -1 +1 @@
1
- {"version":3,"file":"accounts.d.ts","sourceRoot":"","sources":["../../lib/accounts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"accounts.d.ts","sourceRoot":"","sources":["../../lib/accounts.ts"],"names":[],"mappings":"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"}
@@ -120,6 +120,25 @@ export class AccountManager {
120
120
  getCurrentOrNextForFamilyHybrid(family, model, options) {
121
121
  return this.rotation.getCurrentOrNextForFamilyHybrid(family, model, options);
122
122
  }
123
+ getCurrentOrNextForFamilySticky(family, model) {
124
+ return this.rotation.getCurrentOrNextForFamilySticky(family, model);
125
+ }
126
+ /**
127
+ * Strategy-aware account selection (issue #183). Routes to the configured
128
+ * load-balancing algorithm. `hybrid` is the historical default and is
129
+ * behavior-identical to calling {@link getCurrentOrNextForFamilyHybrid}
130
+ * directly, so existing callers/tests are unaffected.
131
+ */
132
+ getAccountForStrategy(strategy, family, model, options) {
133
+ switch (strategy) {
134
+ case "sticky":
135
+ return this.rotation.getCurrentOrNextForFamilySticky(family, model);
136
+ case "round-robin":
137
+ return this.rotation.getCurrentOrNextForFamily(family, model);
138
+ default:
139
+ return this.rotation.getCurrentOrNextForFamilyHybrid(family, model, options);
140
+ }
141
+ }
123
142
  recordSuccess(account, family, model) {
124
143
  this.rotation.recordSuccess(account, family, model);
125
144
  }
@@ -1 +1 @@
1
- {"version":3,"file":"accounts.js","sourceRoot":"","sources":["../../lib/accounts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"accounts.js","sourceRoot":"","sources":["../../lib/accounts.ts"],"names":[],"mappings":"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"}
@@ -18,6 +18,23 @@ export declare function getCodexTuiMaskEmailInQuotaDetails(pluginConfig: PluginC
18
18
  export declare function getFastSession(pluginConfig: PluginConfig): boolean;
19
19
  export declare function getBeginnerSafeMode(pluginConfig: PluginConfig): boolean;
20
20
  export declare function getFastSessionStrategy(pluginConfig: PluginConfig): "hybrid" | "always";
21
+ export type RotationStrategy = "hybrid" | "sticky" | "round-robin";
22
+ /**
23
+ * Account load-balancing strategy (issue #183).
24
+ *
25
+ * - `hybrid` (default): unchanged historical behavior — stick to the current
26
+ * account while it is healthy, otherwise score-select the next one
27
+ * (health + tokens + freshness, which *spreads* load across accounts).
28
+ * - `sticky`: drain-first. Stay on the current account while it has quota,
29
+ * and when it is exhausted pick the lowest-indexed available account so load
30
+ * *concentrates* on as few accounts as possible. This staggers weekly-quota
31
+ * cooldowns instead of exhausting every account at once.
32
+ * - `round-robin`: advance through accounts in order on every selection.
33
+ *
34
+ * Env override `CODEX_AUTH_ROTATION_STRATEGY` wins over config; bogus values
35
+ * fall back to the config / default via the shared Zod enum helper.
36
+ */
37
+ export declare function getRotationStrategy(pluginConfig: PluginConfig): RotationStrategy;
21
38
  export declare function getFastSessionMaxInputItems(pluginConfig: PluginConfig): number;
22
39
  export declare function getRetryProfile(pluginConfig: PluginConfig): RetryProfile;
23
40
  export declare function getRetryBudgetOverrides(pluginConfig: PluginConfig): RetryBudgetOverrides;
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../lib/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../lib/config.ts"],"names":[],"mappings":"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"}
@@ -25,6 +25,7 @@ const DEFAULT_CONFIG = {
25
25
  beginnerSafeMode: false,
26
26
  fastSession: false,
27
27
  fastSessionStrategy: "hybrid",
28
+ rotationStrategy: "hybrid",
28
29
  fastSessionMaxInputItems: 30,
29
30
  retryProfile: "balanced",
30
31
  retryBudgetOverrides: {},
@@ -225,6 +226,35 @@ export function getFastSessionStrategy(pluginConfig) {
225
226
  return envValue;
226
227
  return pluginConfig.fastSessionStrategy === "always" ? "always" : "hybrid";
227
228
  }
229
+ const ROTATION_STRATEGIES = new Set([
230
+ "hybrid",
231
+ "sticky",
232
+ "round-robin",
233
+ ]);
234
+ /**
235
+ * Account load-balancing strategy (issue #183).
236
+ *
237
+ * - `hybrid` (default): unchanged historical behavior — stick to the current
238
+ * account while it is healthy, otherwise score-select the next one
239
+ * (health + tokens + freshness, which *spreads* load across accounts).
240
+ * - `sticky`: drain-first. Stay on the current account while it has quota,
241
+ * and when it is exhausted pick the lowest-indexed available account so load
242
+ * *concentrates* on as few accounts as possible. This staggers weekly-quota
243
+ * cooldowns instead of exhausting every account at once.
244
+ * - `round-robin`: advance through accounts in order on every selection.
245
+ *
246
+ * Env override `CODEX_AUTH_ROTATION_STRATEGY` wins over config; bogus values
247
+ * fall back to the config / default via the shared Zod enum helper.
248
+ */
249
+ export function getRotationStrategy(pluginConfig) {
250
+ const envValue = parseEnumEnv(process.env.CODEX_AUTH_ROTATION_STRATEGY, ROTATION_STRATEGIES);
251
+ if (envValue !== undefined)
252
+ return envValue;
253
+ const configured = pluginConfig.rotationStrategy;
254
+ if (configured === "sticky" || configured === "round-robin")
255
+ return configured;
256
+ return "hybrid";
257
+ }
228
258
  export function getFastSessionMaxInputItems(pluginConfig) {
229
259
  return resolveNumberSetting("CODEX_AUTH_FAST_SESSION_MAX_INPUT_ITEMS", pluginConfig.fastSessionMaxInputItems, 30, { min: 8 });
230
260
  }