opencode-enhancer 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.
package/dist/rotation.js CHANGED
@@ -1,7 +1,8 @@
1
- import { getStoreDiagnostics, loadStore, saveStore, updateAccount } from './store.js';
2
- import { ensureValidToken } from './auth.js';
3
- import { isForceActive, checkAndAutoClearForce, getForceState, clearForce } from './force-mode.js';
4
- import { getRuntimeSettings, calculateWeightedSelection } from './settings.js';
1
+ import { getStoreDiagnostics, loadStore, saveStore, updateAccount } from "./store.js";
2
+ import { ensureValidToken } from "./auth.js";
3
+ import { isForceActive, checkAndAutoClearForce, getForceState, clearForce } from "./force-mode.js";
4
+ import { getRuntimeSettings, calculateWeightedSelection } from "./settings.js";
5
+ import { compareAccountsByUsagePriority } from "./account-ranking.js";
5
6
  const HEALTH_HYSTERESIS_MS = 10_000;
6
7
  const RECENT_FAILURE_WINDOW_MS = 60_000;
7
8
  function readEnv(...keys) {
@@ -13,19 +14,19 @@ function readEnv(...keys) {
13
14
  return undefined;
14
15
  }
15
16
  function isDebugEnabled() {
16
- return readEnv('OPENCODE_ENHANCER_DEBUG', 'OPENCODE_MULTI_AUTH_DEBUG') === '1';
17
+ return readEnv("OPENCODE_ENHANCER_DEBUG", "OPENCODE_MULTI_AUTH_DEBUG") === "1";
17
18
  }
18
19
  export function getMinRemaining(rateLimits) {
19
20
  const now = Date.now();
20
21
  const windows = [rateLimits?.fiveHour, rateLimits?.weekly];
21
22
  const values = [];
22
23
  for (const w of windows) {
23
- if (typeof w?.remaining !== 'number')
24
+ if (typeof w?.remaining !== "number")
24
25
  continue;
25
26
  // If the rate limit window has reset (resetAt is in the past),
26
27
  // the stored remaining value is stale — skip it so the account
27
28
  // is treated as having unknown (Infinity) remaining capacity.
28
- if (typeof w.resetAt === 'number' && w.resetAt < now)
29
+ if (typeof w.resetAt === "number" && w.resetAt < now)
29
30
  continue;
30
31
  values.push(w.remaining);
31
32
  }
@@ -37,7 +38,7 @@ export function selectBestAvailableAccount(excludeAlias, threshold) {
37
38
  const store = loadStore();
38
39
  const now = Date.now();
39
40
  const aliases = Object.keys(store.accounts);
40
- const eligible = aliases.filter(alias => {
41
+ const eligible = aliases.filter((alias) => {
41
42
  const acc = store.accounts[alias];
42
43
  if (excludeAlias && alias === excludeAlias)
43
44
  return false;
@@ -55,14 +56,18 @@ export function selectBestAvailableAccount(excludeAlias, threshold) {
55
56
  });
56
57
  if (eligible.length === 0)
57
58
  return null;
59
+ const healthMap = new Map();
60
+ for (const alias of eligible) {
61
+ healthMap.set(alias, evaluateAccountHealth(store.accounts[alias], now));
62
+ }
58
63
  eligible.sort((a, b) => {
59
- const remainingA = getMinRemaining(store.accounts[a].rateLimits);
60
- const remainingB = getMinRemaining(store.accounts[b].rateLimits);
61
- if (remainingB !== remainingA)
62
- return remainingB - remainingA;
63
- return (store.accounts[a].usageCount || 0) - (store.accounts[b].usageCount || 0);
64
+ return compareAccountsByUsagePriority(store.accounts[a], store.accounts[b], {
65
+ healthPriorityA: healthMap.get(a)?.priority,
66
+ healthPriorityB: healthMap.get(b)?.priority,
67
+ now,
68
+ });
64
69
  });
65
- if (typeof threshold === 'number') {
70
+ if (typeof threshold === "number") {
66
71
  const best = store.accounts[eligible[0]];
67
72
  if (getMinRemaining(best.rateLimits) < threshold)
68
73
  return null;
@@ -113,7 +118,7 @@ function evaluateAccountHealth(acc, now) {
113
118
  isHealthy: !currentlyBlocked && !acc.authInvalid && !isDisabled,
114
119
  isInProbation,
115
120
  recentFailures,
116
- priority
121
+ priority,
117
122
  };
118
123
  }
119
124
  export async function getNextAccount(config) {
@@ -129,7 +134,7 @@ export async function getNextAccount(config) {
129
134
  const aliases = Object.keys(store.accounts);
130
135
  if (aliases.length === 0) {
131
136
  const diag = getStoreDiagnostics();
132
- const extra = diag.error ? ` (${diag.error})` : '';
137
+ const extra = diag.error ? ` (${diag.error})` : "";
133
138
  console.error(`[enhancer] No accounts configured. Run: opencode-enhancer add <alias>${extra}`);
134
139
  if (isDebugEnabled()) {
135
140
  console.error(`[enhancer] store file: ${diag.storeFile}`);
@@ -149,7 +154,7 @@ export async function getNextAccount(config) {
149
154
  store = updateAccount(forcedAlias, {
150
155
  usageCount: (forcedAccount.usageCount || 0) + 1,
151
156
  lastUsed: now,
152
- limitError: undefined
157
+ limitError: undefined,
153
158
  });
154
159
  store.activeAlias = forcedAlias;
155
160
  store.lastRotation = now;
@@ -161,8 +166,8 @@ export async function getNextAccount(config) {
161
166
  forceState: {
162
167
  active: true,
163
168
  alias: forcedAlias,
164
- remainingMs: forceState.forcedUntil ? forceState.forcedUntil - now : 0
165
- }
169
+ remainingMs: forceState.forcedUntil ? forceState.forcedUntil - now : 0,
170
+ },
166
171
  };
167
172
  }
168
173
  else {
@@ -186,16 +191,16 @@ export async function getNextAccount(config) {
186
191
  const acc = store.accounts[alias];
187
192
  healthMap.set(alias, evaluateAccountHealth(acc, now));
188
193
  }
189
- const availableAliases = aliases.filter(alias => {
194
+ const availableAliases = aliases.filter((alias) => {
190
195
  const health = healthMap.get(alias);
191
196
  return health?.isHealthy === true;
192
197
  });
193
198
  if (availableAliases.length === 0) {
194
- console.warn('[enhancer] No available accounts (rate-limited or invalidated).');
199
+ console.warn("[enhancer] No available accounts (rate-limited or invalidated).");
195
200
  return null;
196
201
  }
197
202
  const tokenFailureCooldownMs = (() => {
198
- const raw = readEnv('OPENCODE_ENHANCER_TOKEN_FAILURE_COOLDOWN_MS', 'OPENCODE_MULTI_AUTH_TOKEN_FAILURE_COOLDOWN_MS');
203
+ const raw = readEnv("OPENCODE_ENHANCER_TOKEN_FAILURE_COOLDOWN_MS", "OPENCODE_MULTI_AUTH_TOKEN_FAILURE_COOLDOWN_MS");
199
204
  const parsed = raw ? Number(raw) : NaN;
200
205
  if (Number.isFinite(parsed) && parsed > 0)
201
206
  return parsed;
@@ -205,7 +210,7 @@ export async function getNextAccount(config) {
205
210
  const rotationStrategy = runtimeSettings.settings.rotationStrategy || config.rotationStrategy;
206
211
  const buildCandidates = () => {
207
212
  switch (rotationStrategy) {
208
- case 'least-used': {
213
+ case "least-used": {
209
214
  const sorted = [...availableAliases].sort((a, b) => {
210
215
  const aa = store.accounts[a];
211
216
  const bb = store.accounts[b];
@@ -224,7 +229,7 @@ export async function getNextAccount(config) {
224
229
  });
225
230
  return { aliases: sorted };
226
231
  }
227
- case 'random': {
232
+ case "random": {
228
233
  const sorted = [...availableAliases].sort((a, b) => {
229
234
  const healthA = healthMap.get(a);
230
235
  const healthB = healthMap.get(b);
@@ -233,10 +238,10 @@ export async function getNextAccount(config) {
233
238
  const topPriority = sorted.slice(0, Math.ceil(sorted.length / 2));
234
239
  return { aliases: shuffled(topPriority.length > 0 ? topPriority : sorted) };
235
240
  }
236
- case 'weighted-round-robin': {
241
+ case "weighted-round-robin": {
237
242
  const weights = runtimeSettings.settings.accountWeights;
238
243
  // Filter to healthy accounts with weights
239
- const weightedAliases = availableAliases.filter(alias => (weights[alias] || 0) > 0);
244
+ const weightedAliases = availableAliases.filter((alias) => (weights[alias] || 0) > 0);
240
245
  if (weightedAliases.length === 0) {
241
246
  // Fallback to round-robin if no weights defined
242
247
  const sorted = [...availableAliases].sort((a, b) => {
@@ -269,23 +274,19 @@ export async function getNextAccount(config) {
269
274
  }
270
275
  return { aliases: [selected] };
271
276
  }
272
- case 'usage-priority': {
273
- // Always pick the account with the most remaining usage
277
+ case "usage-priority": {
278
+ // Always pick the account with the most remaining usage,
279
+ // prioritizing weekly remaining before 5h remaining.
274
280
  const sorted = [...availableAliases].sort((a, b) => {
275
- const remainingA = getMinRemaining(store.accounts[a].rateLimits);
276
- const remainingB = getMinRemaining(store.accounts[b].rateLimits);
277
- if (remainingB !== remainingA)
278
- return remainingB - remainingA;
279
- const healthA = healthMap.get(a);
280
- const healthB = healthMap.get(b);
281
- const priorityDiff = (healthB?.priority || 0) - (healthA?.priority || 0);
282
- if (priorityDiff !== 0)
283
- return priorityDiff;
284
- return (store.accounts[a].usageCount || 0) - (store.accounts[b].usageCount || 0);
281
+ return compareAccountsByUsagePriority(store.accounts[a], store.accounts[b], {
282
+ healthPriorityA: healthMap.get(a)?.priority,
283
+ healthPriorityB: healthMap.get(b)?.priority,
284
+ now,
285
+ });
285
286
  });
286
287
  return { aliases: sorted };
287
288
  }
288
- case 'round-robin':
289
+ case "round-robin":
289
290
  default: {
290
291
  const sorted = [...availableAliases].sort((a, b) => {
291
292
  const healthA = healthMap.get(a);
@@ -310,15 +311,15 @@ export async function getNextAccount(config) {
310
311
  if (!token) {
311
312
  store = updateAccount(candidate, {
312
313
  rateLimitedUntil: now + tokenFailureCooldownMs,
313
- limitError: '[enhancer] Token unavailable (refresh failed?)',
314
- lastLimitErrorAt: now
314
+ limitError: "[enhancer] Token unavailable (refresh failed?)",
315
+ lastLimitErrorAt: now,
315
316
  });
316
317
  continue;
317
318
  }
318
319
  store = updateAccount(candidate, {
319
320
  usageCount: (store.accounts[candidate]?.usageCount || 0) + 1,
320
321
  lastUsed: now,
321
- limitError: undefined
322
+ limitError: undefined,
322
323
  });
323
324
  store.activeAlias = candidate;
324
325
  store.lastRotation = now;
@@ -333,11 +334,11 @@ export async function getNextAccount(config) {
333
334
  forceState: {
334
335
  active: isForceActive(),
335
336
  alias: currentForceState.forcedAlias,
336
- remainingMs: currentForceState.forcedUntil ? currentForceState.forcedUntil - now : 0
337
- }
337
+ remainingMs: currentForceState.forcedUntil ? currentForceState.forcedUntil - now : 0,
338
+ },
338
339
  };
339
340
  }
340
- console.error('[enhancer] No available accounts (token refresh failed on all candidates).');
341
+ console.error("[enhancer] No available accounts (token refresh failed on all candidates).");
341
342
  return null;
342
343
  }
343
344
  export function markRateLimited(alias, rateLimitedUntil) {
@@ -345,13 +346,13 @@ export function markRateLimited(alias, rateLimitedUntil) {
345
346
  const safeUntil = Math.max(rateLimitedUntil, now + 1000);
346
347
  const seconds = Math.max(1, Math.ceil((safeUntil - now) / 1000));
347
348
  updateAccount(alias, {
348
- rateLimitedUntil: safeUntil
349
+ rateLimitedUntil: safeUntil,
349
350
  });
350
351
  console.warn(`[enhancer] Account ${alias} marked rate-limited for ${seconds}s`);
351
352
  }
352
353
  export function clearRateLimit(alias) {
353
354
  updateAccount(alias, {
354
- rateLimitedUntil: undefined
355
+ rateLimitedUntil: undefined,
355
356
  });
356
357
  }
357
358
  export function markModelUnsupported(alias, cooldownMs, info) {
@@ -359,9 +360,9 @@ export function markModelUnsupported(alias, cooldownMs, info) {
359
360
  modelUnsupportedUntil: Date.now() + cooldownMs,
360
361
  modelUnsupportedAt: Date.now(),
361
362
  modelUnsupportedModel: info?.model,
362
- modelUnsupportedError: info?.error
363
+ modelUnsupportedError: info?.error,
363
364
  });
364
- const extra = info?.model ? ` (model=${info.model})` : '';
365
+ const extra = info?.model ? ` (model=${info.model})` : "";
365
366
  console.warn(`[enhancer] Account ${alias} marked model-unsupported for ${cooldownMs / 1000}s${extra}`);
366
367
  }
367
368
  export function clearModelUnsupported(alias) {
@@ -369,14 +370,14 @@ export function clearModelUnsupported(alias) {
369
370
  modelUnsupportedUntil: undefined,
370
371
  modelUnsupportedAt: undefined,
371
372
  modelUnsupportedModel: undefined,
372
- modelUnsupportedError: undefined
373
+ modelUnsupportedError: undefined,
373
374
  });
374
375
  }
375
376
  export function markWorkspaceDeactivated(alias, cooldownMs, info) {
376
377
  updateAccount(alias, {
377
378
  workspaceDeactivatedUntil: Date.now() + cooldownMs,
378
379
  workspaceDeactivatedAt: Date.now(),
379
- workspaceDeactivatedError: info?.error
380
+ workspaceDeactivatedError: info?.error,
380
381
  });
381
382
  console.warn(`[enhancer] Account ${alias} marked workspace-deactivated for ${cooldownMs / 1000}s`);
382
383
  }
@@ -384,20 +385,20 @@ export function clearWorkspaceDeactivated(alias) {
384
385
  updateAccount(alias, {
385
386
  workspaceDeactivatedUntil: undefined,
386
387
  workspaceDeactivatedAt: undefined,
387
- workspaceDeactivatedError: undefined
388
+ workspaceDeactivatedError: undefined,
388
389
  });
389
390
  }
390
391
  export function markAuthInvalid(alias) {
391
392
  updateAccount(alias, {
392
393
  authInvalid: true,
393
- authInvalidatedAt: Date.now()
394
+ authInvalidatedAt: Date.now(),
394
395
  });
395
396
  console.warn(`[enhancer] Account ${alias} marked invalidated`);
396
397
  }
397
398
  export function clearAuthInvalid(alias) {
398
399
  updateAccount(alias, {
399
400
  authInvalid: false,
400
- authInvalidatedAt: undefined
401
+ authInvalidatedAt: undefined,
401
402
  });
402
403
  }
403
404
  //# sourceMappingURL=rotation.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"rotation.js","sourceRoot":"","sources":["../src/rotation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rotation.js","sourceRoot":"","sources":["../src/rotation.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
- import { type RotationSettings, type WeightPreset, type SettingsValidationError } from './types.js';
1
+ import { type RotationSettings, type WeightPreset, type SettingsValidationError } from "./types.js";
2
2
  export interface SettingsResult {
3
3
  settings: RotationSettings;
4
- source: 'default' | 'persisted' | 'runtime' | 'env';
4
+ source: "default" | "persisted" | "runtime" | "env";
5
5
  errors?: SettingsValidationError[];
6
6
  }
7
7
  export declare function getSettings(): SettingsResult;
@@ -24,6 +24,6 @@ export declare function getSettingsWithInfo(): {
24
24
  preset?: WeightPreset;
25
25
  canReset: boolean;
26
26
  };
27
- export declare function isFeatureEnabled(flag: keyof NonNullable<RotationSettings['featureFlags']>): boolean;
28
- export declare function isNotificationEnabled(flag: keyof NonNullable<RotationSettings['notifications']>): boolean;
27
+ export declare function isFeatureEnabled(flag: keyof NonNullable<RotationSettings["featureFlags"]>): boolean;
28
+ export declare function isNotificationEnabled(flag: keyof NonNullable<RotationSettings["notifications"]>): boolean;
29
29
  //# sourceMappingURL=settings.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":"AAEA,OAAO,EAML,KAAK,gBAAgB,EACrB,KAAK,YAAY,EACjB,KAAK,uBAAuB,EAC7B,MAAM,YAAY,CAAA;AAInB,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,gBAAgB,CAAA;IAC1B,MAAM,EAAE,SAAS,GAAG,WAAW,GAAG,SAAS,GAAG,KAAK,CAAA;IACnD,MAAM,CAAC,EAAE,uBAAuB,EAAE,CAAA;CACnC;AAsHD,wBAAgB,WAAW,IAAI,cAAc,CAE5C;AAGD,wBAAgB,kBAAkB,IAAI,cAAc,CAEnD;AAGD,wBAAgB,cAAc,CAC5B,OAAO,EAAE,OAAO,CAAC,gBAAgB,CAAC,EAClC,KAAK,GAAE,MAAiB,GACvB;IACD,OAAO,EAAE,OAAO,CAAA;IAChB,QAAQ,CAAC,EAAE,gBAAgB,CAAA;IAC3B,MAAM,CAAC,EAAE,uBAAuB,EAAE,CAAA;CACnC,CA4BA;AAGD,wBAAgB,aAAa,CAAC,KAAK,GAAE,MAAiB,GAAG,gBAAgB,CAQxE;AAGD,wBAAgB,WAAW,CACzB,MAAM,EAAE,YAAY,EACpB,KAAK,GAAE,MAAiB,GACvB;IACD,OAAO,EAAE,OAAO,CAAA;IAChB,QAAQ,CAAC,EAAE,gBAAgB,CAAA;IAC3B,MAAM,CAAC,EAAE,uBAAuB,EAAE,CAAA;CACnC,CA6DA;AAGD,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,MAAM,EAAE,EACjB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC9B,MAAM,GAAG,IAAI,CA0Bf;AAGD,wBAAgB,mBAAmB,IAAI;IACrC,QAAQ,EAAE,gBAAgB,CAAA;IAC1B,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,YAAY,CAAA;IACrB,QAAQ,EAAE,OAAO,CAAA;CAClB,CA4BA;AAGD,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,WAAW,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC,GACxD,OAAO,CAGT;AAED,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,MAAM,WAAW,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAC,GACzD,OAAO,CAMT"}
1
+ {"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":"AAEA,OAAO,EAML,KAAK,gBAAgB,EACrB,KAAK,YAAY,EACjB,KAAK,uBAAuB,EAC7B,MAAM,YAAY,CAAC;AAIpB,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,MAAM,EAAE,SAAS,GAAG,WAAW,GAAG,SAAS,GAAG,KAAK,CAAC;IACpD,MAAM,CAAC,EAAE,uBAAuB,EAAE,CAAC;CACpC;AA2HD,wBAAgB,WAAW,IAAI,cAAc,CAE5C;AAGD,wBAAgB,kBAAkB,IAAI,cAAc,CAEnD;AAGD,wBAAgB,cAAc,CAC5B,OAAO,EAAE,OAAO,CAAC,gBAAgB,CAAC,EAClC,KAAK,GAAE,MAAiB,GACvB;IACD,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAC5B,MAAM,CAAC,EAAE,uBAAuB,EAAE,CAAC;CACpC,CA0BA;AAGD,wBAAgB,aAAa,CAAC,KAAK,GAAE,MAAiB,GAAG,gBAAgB,CAQxE;AAGD,wBAAgB,WAAW,CACzB,MAAM,EAAE,YAAY,EACpB,KAAK,GAAE,MAAiB,GACvB;IACD,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAC5B,MAAM,CAAC,EAAE,uBAAuB,EAAE,CAAC;CACpC,CA4DA;AAGD,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,MAAM,EAAE,EACjB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC9B,MAAM,GAAG,IAAI,CAuBf;AAGD,wBAAgB,mBAAmB,IAAI;IACrC,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,QAAQ,EAAE,OAAO,CAAC;CACnB,CA0BA;AAGD,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,WAAW,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC,GACxD,OAAO,CAGT;AAED,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,MAAM,WAAW,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAC,GACzD,OAAO,CAGT"}
package/dist/settings.js CHANGED
@@ -1,6 +1,6 @@
1
- import { loadStore, saveStore } from './store.js';
2
- import { logInfo, logError } from './logger.js';
3
- import { DEFAULT_FEATURE_FLAGS, DEFAULT_NOTIFICATION_SETTINGS, DEFAULT_ROTATION_SETTINGS, WEIGHTED_PRESETS, validateSettings } from './types.js';
1
+ import { loadStore, saveStore } from "./store.js";
2
+ import { logInfo, logError } from "./logger.js";
3
+ import { DEFAULT_FEATURE_FLAGS, DEFAULT_NOTIFICATION_SETTINGS, DEFAULT_ROTATION_SETTINGS, WEIGHTED_PRESETS, validateSettings, } from "./types.js";
4
4
  function readEnv(...keys) {
5
5
  for (const key of keys) {
6
6
  const value = process.env[key];
@@ -18,70 +18,72 @@ function mergeSettings(base, overrides) {
18
18
  : { ...base.accountWeights },
19
19
  featureFlags: {
20
20
  ...(base.featureFlags || DEFAULT_FEATURE_FLAGS),
21
- ...(overrides?.featureFlags || {})
21
+ ...(overrides?.featureFlags || {}),
22
22
  },
23
23
  notifications: {
24
24
  ...(base.notifications || DEFAULT_NOTIFICATION_SETTINGS),
25
- ...(overrides?.notifications || {})
26
- }
25
+ ...(overrides?.notifications || {}),
26
+ },
27
27
  };
28
28
  }
29
29
  function resolveSettings(includeEnvOverrides) {
30
30
  const store = loadStore();
31
31
  // Start with defaults
32
32
  let settings = mergeSettings(DEFAULT_ROTATION_SETTINGS);
33
- let source = 'default';
33
+ let source = "default";
34
34
  // Layer 1: Persisted settings from store
35
35
  if (store.settings) {
36
36
  settings = mergeSettings(settings, store.settings);
37
- source = 'persisted';
37
+ source = "persisted";
38
38
  }
39
39
  // Layer 2: Environment variables override (optional for runtime behavior)
40
40
  if (includeEnvOverrides) {
41
- const envStrategy = readEnv('OPENCODE_ENHANCER_ROTATION_STRATEGY', 'OPENCODE_MULTI_AUTH_ROTATION_STRATEGY');
41
+ const envStrategy = readEnv("OPENCODE_ENHANCER_ROTATION_STRATEGY", "OPENCODE_MULTI_AUTH_ROTATION_STRATEGY");
42
42
  if (envStrategy &&
43
- [
44
- 'round-robin',
45
- 'least-used',
46
- 'random',
47
- 'weighted-round-robin',
48
- 'usage-priority'
49
- ].includes(envStrategy)) {
50
- settings.rotationStrategy =
51
- envStrategy;
52
- source = 'env';
43
+ ["round-robin", "least-used", "random", "weighted-round-robin", "usage-priority"].includes(envStrategy)) {
44
+ settings.rotationStrategy = envStrategy;
45
+ source = "env";
53
46
  }
54
- const envCriticalThreshold = readEnv('OPENCODE_ENHANCER_CRITICAL_THRESHOLD', 'OPENCODE_MULTI_AUTH_CRITICAL_THRESHOLD');
47
+ const envCriticalThreshold = readEnv("OPENCODE_ENHANCER_CRITICAL_THRESHOLD", "OPENCODE_MULTI_AUTH_CRITICAL_THRESHOLD");
55
48
  if (envCriticalThreshold) {
56
49
  const parsed = parseFloat(envCriticalThreshold);
57
50
  if (!isNaN(parsed) && parsed >= 0 && parsed <= 100) {
58
51
  settings.criticalThreshold = parsed;
59
- source = 'env';
52
+ source = "env";
60
53
  }
61
54
  }
62
- const envLowThreshold = readEnv('OPENCODE_ENHANCER_LOW_THRESHOLD', 'OPENCODE_MULTI_AUTH_LOW_THRESHOLD');
55
+ const envLowThreshold = readEnv("OPENCODE_ENHANCER_LOW_THRESHOLD", "OPENCODE_MULTI_AUTH_LOW_THRESHOLD");
63
56
  if (envLowThreshold) {
64
57
  const parsed = parseFloat(envLowThreshold);
65
58
  if (!isNaN(parsed) && parsed >= 0 && parsed <= 100) {
66
59
  settings.lowThreshold = parsed;
67
- source = 'env';
60
+ source = "env";
68
61
  }
69
62
  }
70
63
  // Phase G: Feature flag environment overrides
71
- const envAntigravity = readEnv('OPENCODE_ENHANCER_ANTIGRAVITY_ENABLED', 'OPENCODE_MULTI_AUTH_ANTIGRAVITY_ENABLED');
64
+ const envAntigravity = readEnv("OPENCODE_ENHANCER_ANTIGRAVITY_ENABLED", "OPENCODE_MULTI_AUTH_ANTIGRAVITY_ENABLED");
72
65
  if (envAntigravity) {
73
- const enabled = envAntigravity.toLowerCase() === 'true' || envAntigravity === '1';
66
+ const enabled = envAntigravity.toLowerCase() === "true" || envAntigravity === "1";
67
+ settings.featureFlags = {
68
+ ...(settings.featureFlags || DEFAULT_FEATURE_FLAGS),
69
+ antigravityEnabled: enabled,
70
+ };
71
+ source = "env";
72
+ }
73
+ const envAutoSwitch = readEnv("OPENCODE_ENHANCER_AUTOSWITCH_ENABLED", "OPENCODE_MULTI_AUTH_AUTOSWITCH_ENABLED");
74
+ if (envAutoSwitch !== undefined) {
75
+ const enabled = envAutoSwitch.toLowerCase() === "true" || envAutoSwitch === "1";
74
76
  settings.featureFlags = {
75
- ...(settings.featureFlags || {}),
76
- antigravityEnabled: enabled
77
+ ...(settings.featureFlags || DEFAULT_FEATURE_FLAGS),
78
+ autoSwitch: enabled,
77
79
  };
78
- source = 'env';
80
+ source = "env";
79
81
  }
80
82
  }
81
83
  // Validate final settings
82
84
  const errors = validateSettings(settings);
83
85
  if (errors.length > 0) {
84
- logError(`Settings validation errors: ${errors.map((e) => e.message).join(', ')}`);
86
+ logError(`Settings validation errors: ${errors.map((e) => e.message).join(", ")}`);
85
87
  }
86
88
  return { settings, source, errors: errors.length > 0 ? errors : undefined };
87
89
  }
@@ -94,18 +96,18 @@ export function getRuntimeSettings() {
94
96
  return resolveSettings(false);
95
97
  }
96
98
  // Phase F: Update settings with validation
97
- export function updateSettings(updates, actor = 'system') {
99
+ export function updateSettings(updates, actor = "system") {
98
100
  const current = getRuntimeSettings();
99
101
  // Merge updates with current settings
100
102
  const newSettings = mergeSettings(current.settings, {
101
103
  ...updates,
102
104
  updatedAt: Date.now(),
103
- updatedBy: actor
105
+ updatedBy: actor,
104
106
  });
105
107
  // Validate new settings
106
108
  const errors = validateSettings(newSettings);
107
109
  if (errors.length > 0) {
108
- logError(`Settings update failed validation: ${errors.map((e) => e.message).join(', ')}`);
110
+ logError(`Settings update failed validation: ${errors.map((e) => e.message).join(", ")}`);
109
111
  return { success: false, errors };
110
112
  }
111
113
  // Save to store
@@ -118,7 +120,7 @@ export function updateSettings(updates, actor = 'system') {
118
120
  return { success: true, settings: newSettings };
119
121
  }
120
122
  // Phase F: Reset settings to defaults
121
- export function resetSettings(actor = 'system') {
123
+ export function resetSettings(actor = "system") {
122
124
  const store = loadStore();
123
125
  delete store.settings;
124
126
  store.rotationStrategy = DEFAULT_ROTATION_SETTINGS.rotationStrategy;
@@ -127,19 +129,19 @@ export function resetSettings(actor = 'system') {
127
129
  return { ...DEFAULT_ROTATION_SETTINGS };
128
130
  }
129
131
  // Phase F: Apply a preset
130
- export function applyPreset(preset, actor = 'system') {
132
+ export function applyPreset(preset, actor = "system") {
131
133
  const store = loadStore();
132
134
  const accounts = Object.keys(store.accounts);
133
135
  const presetConfig = WEIGHTED_PRESETS[preset];
134
136
  let accountWeights = {};
135
- if (preset === 'balanced') {
137
+ if (preset === "balanced") {
136
138
  // Equal weights for all accounts
137
139
  const weight = accounts.length > 0 ? 1 / accounts.length : 0;
138
140
  accounts.forEach((alias) => {
139
141
  accountWeights[alias] = weight;
140
142
  });
141
143
  }
142
- else if (preset === 'conservative') {
144
+ else if (preset === "conservative") {
143
145
  // Weights based on limit health
144
146
  accounts.forEach((alias) => {
145
147
  const account = store.accounts[alias];
@@ -156,7 +158,7 @@ export function applyPreset(preset, actor = 'system') {
156
158
  });
157
159
  }
158
160
  }
159
- else if (preset === 'aggressive') {
161
+ else if (preset === "aggressive") {
160
162
  // Favor accounts with high usage (lower remaining)
161
163
  accounts.forEach((alias) => {
162
164
  const account = store.accounts[alias];
@@ -174,15 +176,15 @@ export function applyPreset(preset, actor = 'system') {
174
176
  });
175
177
  }
176
178
  }
177
- else if (preset === 'usage-first') {
179
+ else if (preset === "usage-first") {
178
180
  // Usage-first: always pick account with most remaining usage
179
181
  // No weights needed — the usage-priority strategy handles this natively
180
182
  }
181
183
  const updates = {
182
- rotationStrategy: preset === 'usage-first' ? 'usage-priority' : 'weighted-round-robin',
184
+ rotationStrategy: preset === "usage-first" ? "usage-priority" : "weighted-round-robin",
183
185
  criticalThreshold: presetConfig.thresholds.critical,
184
186
  lowThreshold: presetConfig.thresholds.low,
185
- accountWeights
187
+ accountWeights,
186
188
  };
187
189
  return updateSettings(updates, actor);
188
190
  }
@@ -215,10 +217,10 @@ export function getSettingsWithInfo() {
215
217
  const store = loadStore();
216
218
  // Detect if using a preset
217
219
  let preset;
218
- if (result.settings.rotationStrategy === 'weighted-round-robin') {
220
+ if (result.settings.rotationStrategy === "weighted-round-robin") {
219
221
  // Check if weights match a preset pattern
220
222
  for (const [presetName, config] of Object.entries(WEIGHTED_PRESETS)) {
221
- if (presetName !== 'custom' &&
223
+ if (presetName !== "custom" &&
222
224
  Math.abs(result.settings.criticalThreshold - config.thresholds.critical) < 0.01 &&
223
225
  Math.abs(result.settings.lowThreshold - config.thresholds.low) < 0.01) {
224
226
  preset = presetName;
@@ -230,7 +232,7 @@ export function getSettingsWithInfo() {
230
232
  settings: result.settings,
231
233
  source: result.source,
232
234
  preset,
233
- canReset: !!store.settings
235
+ canReset: !!store.settings,
234
236
  };
235
237
  }
236
238
  // Phase G: Check if a feature flag is enabled
@@ -240,7 +242,6 @@ export function isFeatureEnabled(flag) {
240
242
  }
241
243
  export function isNotificationEnabled(flag) {
242
244
  const settings = getRuntimeSettings();
243
- return (settings.settings.notifications?.[flag] ??
244
- DEFAULT_NOTIFICATION_SETTINGS[flag]);
245
+ return settings.settings.notifications?.[flag] ?? DEFAULT_NOTIFICATION_SETTINGS[flag];
245
246
  }
246
247
  //# sourceMappingURL=settings.js.map