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/README.md +110 -28
- package/dist/account-ranking.d.ts +11 -0
- package/dist/account-ranking.d.ts.map +1 -0
- package/dist/account-ranking.js +46 -0
- package/dist/account-ranking.js.map +1 -0
- package/dist/auth-sync.d.ts.map +1 -1
- package/dist/auth-sync.js +4 -1
- package/dist/auth-sync.js.map +1 -1
- package/dist/cli.js +68 -62
- package/dist/cli.js.map +1 -1
- package/dist/codex-auth.d.ts.map +1 -1
- package/dist/codex-auth.js +3 -1
- package/dist/codex-auth.js.map +1 -1
- package/dist/force-mode.js +2 -2
- package/dist/force-mode.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +29 -14
- package/dist/index.js.map +1 -1
- package/dist/rotation.d.ts +1 -1
- package/dist/rotation.d.ts.map +1 -1
- package/dist/rotation.js +55 -54
- package/dist/rotation.js.map +1 -1
- package/dist/settings.d.ts +4 -4
- package/dist/settings.d.ts.map +1 -1
- package/dist/settings.js +46 -45
- package/dist/settings.js.map +1 -1
- package/dist/store.js +3 -3
- package/dist/store.js.map +1 -1
- package/dist/types.d.ts +9 -8
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +78 -82
- package/dist/types.js.map +1 -1
- package/dist/usage-command.d.ts.map +1 -1
- package/dist/usage-command.js +39 -1
- package/dist/usage-command.js.map +1 -1
- package/package.json +3 -1
package/dist/rotation.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import { getStoreDiagnostics, loadStore, saveStore, updateAccount } from
|
|
2
|
-
import { ensureValidToken } from
|
|
3
|
-
import { isForceActive, checkAndAutoClearForce, getForceState, clearForce } from
|
|
4
|
-
import { getRuntimeSettings, calculateWeightedSelection } from
|
|
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(
|
|
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 !==
|
|
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 ===
|
|
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
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
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 ===
|
|
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(
|
|
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(
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
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
|
|
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:
|
|
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(
|
|
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
|
package/dist/rotation.js.map
CHANGED
|
@@ -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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"}
|
package/dist/settings.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { type RotationSettings, type WeightPreset, type SettingsValidationError } from
|
|
1
|
+
import { type RotationSettings, type WeightPreset, type SettingsValidationError } from "./types.js";
|
|
2
2
|
export interface SettingsResult {
|
|
3
3
|
settings: RotationSettings;
|
|
4
|
-
source:
|
|
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[
|
|
28
|
-
export declare function isNotificationEnabled(flag: keyof NonNullable<RotationSettings[
|
|
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
|
package/dist/settings.d.ts.map
CHANGED
|
@@ -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,
|
|
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
|
|
2
|
-
import { logInfo, logError } from
|
|
3
|
-
import { DEFAULT_FEATURE_FLAGS, DEFAULT_NOTIFICATION_SETTINGS, DEFAULT_ROTATION_SETTINGS, WEIGHTED_PRESETS, validateSettings } from
|
|
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 =
|
|
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 =
|
|
37
|
+
source = "persisted";
|
|
38
38
|
}
|
|
39
39
|
// Layer 2: Environment variables override (optional for runtime behavior)
|
|
40
40
|
if (includeEnvOverrides) {
|
|
41
|
-
const envStrategy = readEnv(
|
|
41
|
+
const envStrategy = readEnv("OPENCODE_ENHANCER_ROTATION_STRATEGY", "OPENCODE_MULTI_AUTH_ROTATION_STRATEGY");
|
|
42
42
|
if (envStrategy &&
|
|
43
|
-
[
|
|
44
|
-
|
|
45
|
-
|
|
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(
|
|
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 =
|
|
52
|
+
source = "env";
|
|
60
53
|
}
|
|
61
54
|
}
|
|
62
|
-
const envLowThreshold = readEnv(
|
|
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 =
|
|
60
|
+
source = "env";
|
|
68
61
|
}
|
|
69
62
|
}
|
|
70
63
|
// Phase G: Feature flag environment overrides
|
|
71
|
-
const envAntigravity = readEnv(
|
|
64
|
+
const envAntigravity = readEnv("OPENCODE_ENHANCER_ANTIGRAVITY_ENABLED", "OPENCODE_MULTI_AUTH_ANTIGRAVITY_ENABLED");
|
|
72
65
|
if (envAntigravity) {
|
|
73
|
-
const enabled = envAntigravity.toLowerCase() ===
|
|
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
|
-
|
|
77
|
+
...(settings.featureFlags || DEFAULT_FEATURE_FLAGS),
|
|
78
|
+
autoSwitch: enabled,
|
|
77
79
|
};
|
|
78
|
-
source =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 ===
|
|
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 ===
|
|
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 ===
|
|
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 ===
|
|
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 ===
|
|
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 ===
|
|
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 !==
|
|
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
|
|
244
|
-
DEFAULT_NOTIFICATION_SETTINGS[flag]);
|
|
245
|
+
return settings.settings.notifications?.[flag] ?? DEFAULT_NOTIFICATION_SETTINGS[flag];
|
|
245
246
|
}
|
|
246
247
|
//# sourceMappingURL=settings.js.map
|