diff --git a/README.md b/README.md index e961712..5be7162 100644 --- a/README.md +++ b/README.md @@ -329,6 +329,12 @@ Outlook login often shows interstitial pages after password entry: - `OPENCODE_MULTI_AUTH_TRUNCATION` - `OPENCODE_MULTI_AUTH_DEBUG` +### Debug logging + +- Dashboard setting: `Debug logging` toggle in the Logs panel +- `OPENCODE_MULTI_AUTH_DEBUG=1` forces debug logging on at runtime +- Debug request payload previews are capped at 20 KB per log entry and redacted for common secrets + ## Latest Codex Mapping The plugin can route older Codex selections to the latest Codex backend model when you explicitly opt in. diff --git a/dist/auth.d.ts.map b/dist/auth.d.ts.map index 4ce50b3..13fa72f 100644 --- a/dist/auth.d.ts.map +++ b/dist/auth.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAqBpD,UAAU,iBAAiB;IACzB,IAAI,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAA;IAC7C,KAAK,EAAE,MAAM,CAAA;IACb,GAAG,EAAE,MAAM,CAAA;IACX,WAAW,EAAE,MAAM,CAAA;IACnB,IAAI,EAAE,MAAM,CAAA;CACb;AAQD,MAAM,WAAW,mBAAmB;IAClC,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,wBAAsB,uBAAuB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAoBvF;AAkCD,wBAAsB,YAAY,CAChC,KAAK,EAAE,MAAM,EACb,IAAI,CAAC,EAAE,iBAAiB,EACxB,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,kBAAkB,CAAC,CAiK7B;AAED,wBAAsB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAiEpF;AAED,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAc5E"} \ No newline at end of file +{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAqBpD,UAAU,iBAAiB;IACzB,IAAI,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAA;IAC7C,KAAK,EAAE,MAAM,CAAA;IACb,GAAG,EAAE,MAAM,CAAA;IACX,WAAW,EAAE,MAAM,CAAA;IACnB,IAAI,EAAE,MAAM,CAAA;CACb;AAQD,MAAM,WAAW,mBAAmB;IAClC,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,wBAAsB,uBAAuB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAoBvF;AAkCD,wBAAsB,YAAY,CAChC,KAAK,EAAE,MAAM,EACb,IAAI,CAAC,EAAE,iBAAiB,EACxB,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,kBAAkB,CAAC,CAiK7B;AAED,wBAAsB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAkEpF;AAED,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAc5E"} \ No newline at end of file diff --git a/dist/auth.js b/dist/auth.js index dbd2ff3..b4cd70d 100644 --- a/dist/auth.js +++ b/dist/auth.js @@ -2,7 +2,6 @@ import { createHash, randomBytes } from 'node:crypto'; import * as http from 'http'; import * as url from 'url'; import { addAccount, updateAccount, loadStore } from './store.js'; -import { clearAuthInvalid } from './rotation.js'; import { decodeJwtPayload, getAccountIdFromClaims, getEmailFromClaims, getExpiryFromClaims, getPlanTypeFromClaims } from './codex-auth.js'; const OPENAI_ISSUER = 'https://auth.openai.com'; const AUTHORIZE_URL = `${OPENAI_ISSUER}/oauth/authorize`; @@ -256,10 +255,11 @@ export async function refreshToken(alias) { account.accountId, planType: getPlanTypeFromClaims(idClaims) || getPlanTypeFromClaims(accessClaims) || - account.planType + account.planType, + authInvalid: false, + authInvalidatedAt: undefined }; const updatedStore = updateAccount(alias, updates); - clearAuthInvalid(alias); return updatedStore.accounts[alias]; } catch (err) { diff --git a/dist/auth.js.map b/dist/auth.js.map index 9b43592..7e6e35c 100644 --- a/dist/auth.js.map +++ b/dist/auth.js.map @@ -1 +1 @@ -{"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/file-lock.d.ts b/dist/file-lock.d.ts new file mode 100644 index 0000000..136f366 --- /dev/null +++ b/dist/file-lock.d.ts @@ -0,0 +1,3 @@ +export declare function acquireFileLock(targetFile: string): () => void; +export declare function withFileLock(targetFile: string, fn: () => T): T; +//# sourceMappingURL=file-lock.d.ts.map \ No newline at end of file diff --git a/dist/file-lock.d.ts.map b/dist/file-lock.d.ts.map new file mode 100644 index 0000000..69d300c --- /dev/null +++ b/dist/file-lock.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"file-lock.d.ts","sourceRoot":"","sources":["../src/file-lock.ts"],"names":[],"mappings":"AAyFA,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,IAAI,CAuE9D;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAOlE"} \ No newline at end of file diff --git a/dist/file-lock.js b/dist/file-lock.js new file mode 100644 index 0000000..71c47ca --- /dev/null +++ b/dist/file-lock.js @@ -0,0 +1,151 @@ +import * as fs from 'fs'; +import * as path from 'path'; +import * as os from 'os'; +const DEFAULT_LOCK_STALE_MS = 5_000; +const DEFAULT_LOCK_WAIT_MS = 16_000; +const DEFAULT_LOCK_POLL_MS = 50; +const LOCK_OWNER_FILE = 'owner.json'; +function getEnvInt(name, fallback) { + const raw = process.env[name]; + if (!raw) + return fallback; + const parsed = Number(raw); + return Number.isFinite(parsed) && parsed > 0 ? parsed : fallback; +} +function getLockStaleMs() { + return getEnvInt('OPENCODE_MULTI_AUTH_LOCK_STALE_MS', DEFAULT_LOCK_STALE_MS); +} +function getLockWaitMs() { + return getEnvInt('OPENCODE_MULTI_AUTH_LOCK_WAIT_MS', DEFAULT_LOCK_WAIT_MS); +} +function getLockPollMs() { + return getEnvInt('OPENCODE_MULTI_AUTH_LOCK_POLL_MS', DEFAULT_LOCK_POLL_MS); +} +function sleepSync(ms) { + if (ms <= 0) + return; + const sab = new SharedArrayBuffer(4); + const view = new Int32Array(sab); + Atomics.wait(view, 0, 0, ms); +} +function ownerPath(lockPath) { + return path.join(lockPath, LOCK_OWNER_FILE); +} +function readLockMetadata(lockPath) { + try { + const raw = fs.readFileSync(ownerPath(lockPath), 'utf-8'); + const parsed = JSON.parse(raw); + if (typeof parsed.pid !== 'number' || + typeof parsed.hostname !== 'string' || + typeof parsed.createdAt !== 'number' || + typeof parsed.targetFile !== 'string') { + return null; + } + return { + pid: parsed.pid, + hostname: parsed.hostname, + createdAt: parsed.createdAt, + targetFile: parsed.targetFile + }; + } + catch { + return null; + } +} +function getLockAgeMs(lockPath) { + const meta = readLockMetadata(lockPath); + if (meta) + return Date.now() - meta.createdAt; + try { + const stat = fs.statSync(lockPath); + return Date.now() - stat.mtimeMs; + } + catch { + return null; + } +} +function removeLock(lockPath) { + try { + fs.rmSync(lockPath, { recursive: true, force: true }); + } + catch { + // ignore + } +} +export function acquireFileLock(targetFile) { + const lockPath = `${targetFile}.lock`; + const parent = path.dirname(targetFile); + if (!fs.existsSync(parent)) { + fs.mkdirSync(parent, { recursive: true, mode: 0o700 }); + } + const staleMs = getLockStaleMs(); + const waitMs = getLockWaitMs(); + const pollMs = getLockPollMs(); + const deadline = Date.now() + waitMs; + while (true) { + try { + fs.mkdirSync(lockPath, { mode: 0o700 }); + const owner = { + pid: process.pid, + hostname: os.hostname(), + createdAt: Date.now(), + targetFile + }; + fs.writeFileSync(ownerPath(lockPath), JSON.stringify(owner, null, 2), { mode: 0o600 }); + const signals = ['SIGINT', 'SIGTERM', 'SIGHUP']; + const signalHandlers = {}; + let released = false; + const release = () => { + if (released) + return; + released = true; + removeLock(lockPath); + process.off('exit', release); + for (const signal of signals) { + const handler = signalHandlers[signal]; + if (handler) + process.off(signal, handler); + } + }; + for (const signal of signals) { + signalHandlers[signal] = () => { + release(); + process.kill(process.pid, signal); + }; + } + process.once('exit', release); + for (const signal of signals) { + process.once(signal, signalHandlers[signal]); + } + return release; + } + catch (err) { + if (err?.code !== 'EEXIST') + throw err; + const ageMs = getLockAgeMs(lockPath); + if (ageMs !== null && ageMs > staleMs) { + removeLock(lockPath); + continue; + } + if (Date.now() >= deadline) { + const meta = readLockMetadata(lockPath); + const suffix = meta + ? ` (owner pid=${meta.pid} host=${meta.hostname} age=${ageMs ?? 'unknown'}ms)` + : ''; + throw new Error(`[multi-auth] Timed out waiting for file lock after ${waitMs}ms${suffix}`); + } + const remaining = deadline - Date.now(); + sleepSync(Math.min(pollMs, Math.max(1, remaining))); + } + } +} +export function withFileLock(targetFile, fn) { + const release = acquireFileLock(targetFile); + try { + return fn(); + } + finally { + release(); + } +} +//# sourceMappingURL=file-lock.js.map \ No newline at end of file diff --git a/dist/file-lock.js.map b/dist/file-lock.js.map new file mode 100644 index 0000000..d71cea3 --- /dev/null +++ b/dist/file-lock.js.map @@ -0,0 +1 @@ +{"version":3,"file":"file-lock.js","sourceRoot":"","sources":["../src/file-lock.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/force-mode.js b/dist/force-mode.js index 9d09b4c..7707cca 100644 --- a/dist/force-mode.js +++ b/dist/force-mode.js @@ -1,4 +1,4 @@ -import { loadStore, saveStore } from './store.js'; +import { loadStore, mutateStore } from './store.js'; const FORCE_TTL_MS = 24 * 60 * 60 * 1000; // 24 hours const ROTATION_STRATEGIES = new Set([ 'round-robin', @@ -40,71 +40,72 @@ export function isForceActive() { return true; } export function activateForce(alias, actor = 'system') { - const store = loadStore(); - // Validate alias exists - if (!store.accounts[alias]) { - return { success: false, error: `Account '${alias}' not found` }; - } - // Validate alias is enabled - if (store.accounts[alias].enabled === false) { - return { success: false, error: `Account '${alias}' is disabled` }; - } const now = Date.now(); - const keepExistingTtl = store.forcedAlias === alias && - typeof store.forcedUntil === 'number' && - store.forcedUntil > now; - const forcedUntil = keepExistingTtl ? store.forcedUntil : now + FORCE_TTL_MS; - const currentStrategy = store.settings?.rotationStrategy || - store.rotationStrategy || - 'round-robin'; - // Store previous rotation strategy if not already forcing - const previousStrategy = (store.forcedAlias ? store.previousRotationStrategy : currentStrategy) ?? null; - const newStore = { - ...store, - forcedAlias: alias, - forcedUntil, - previousRotationStrategy: previousStrategy, - forcedBy: actor - }; - saveStore(newStore); - return { - success: true, - state: { - forcedAlias: alias, - forcedUntil, - previousRotationStrategy: previousStrategy, - forcedBy: actor + let result = { success: false }; + mutateStore((currentStore) => { + // Validate alias against the latest persisted state under lock. + if (!currentStore.accounts[alias]) { + result = { success: false, error: `Account '${alias}' not found` }; + return currentStore; } - }; + if (currentStore.accounts[alias].enabled === false) { + result = { success: false, error: `Account '${alias}' is disabled` }; + return currentStore; + } + const keepExistingTtl = currentStore.forcedAlias === alias && + typeof currentStore.forcedUntil === 'number' && + currentStore.forcedUntil > now; + const forcedUntil = keepExistingTtl ? currentStore.forcedUntil : now + FORCE_TTL_MS; + const currentStrategy = currentStore.settings?.rotationStrategy || + currentStore.rotationStrategy || + 'round-robin'; + // Store previous rotation strategy if not already forcing. + const previousStrategy = (currentStore.forcedAlias ? currentStore.previousRotationStrategy : currentStrategy) ?? null; + currentStore.forcedAlias = alias; + currentStore.forcedUntil = forcedUntil; + currentStore.previousRotationStrategy = previousStrategy; + currentStore.forcedBy = actor; + result = { + success: true, + state: { + forcedAlias: alias, + forcedUntil, + previousRotationStrategy: previousStrategy, + forcedBy: actor + } + }; + return currentStore; + }); + return result; } export function clearForce() { - const store = loadStore(); - const restoredStrategy = store.previousRotationStrategy; - const currentStrategy = store.settings?.rotationStrategy || - store.rotationStrategy || - 'round-robin'; - const nextStrategy = isRotationStrategy(restoredStrategy) - ? restoredStrategy - : currentStrategy; - const newStore = { - ...store, - forcedAlias: null, - forcedUntil: null, - rotationStrategy: nextStrategy, - previousRotationStrategy: null, - forcedBy: null - }; - if (store.settings) { - newStore.settings = { - ...store.settings, - rotationStrategy: nextStrategy + let result = { success: true }; + mutateStore((currentStore) => { + const restoredStrategy = currentStore.previousRotationStrategy; + const currentStrategy = currentStore.settings?.rotationStrategy || + currentStore.rotationStrategy || + 'round-robin'; + const nextStrategy = isRotationStrategy(restoredStrategy) + ? restoredStrategy + : currentStrategy; + currentStore.forcedAlias = null; + currentStore.forcedUntil = null; + currentStore.rotationStrategy = nextStrategy; + currentStore.previousRotationStrategy = null; + currentStore.forcedBy = null; + if (currentStore.settings) { + currentStore.settings = { + ...currentStore.settings, + rotationStrategy: nextStrategy + }; + } + result = { + success: true, + restoredStrategy }; - } - saveStore(newStore); - return { - success: true, - restoredStrategy - }; + return currentStore; + }); + return result; } export function checkAndAutoClearForce() { const state = getForceState(); diff --git a/dist/force-mode.js.map b/dist/force-mode.js.map index 323af91..0483970 100644 --- a/dist/force-mode.js.map +++ b/dist/force-mode.js.map @@ -1 +1 @@ -{"version":3,"file":"force-mode.js","sourceRoot":"","sources":["../src/force-mode.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"force-mode.js","sourceRoot":"","sources":["../src/force-mode.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/index.d.ts.map b/dist/index.d.ts.map index 7e1aaaa..9504cdc 100644 --- a/dist/index.d.ts.map +++ b/dist/index.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAe,MAAM,qBAAqB,CAAA;AA2M9D,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,GAAG,EAAE,YAAY,GAAE,MAAW,GAAG,OAAO,CAKnF;AAqED;;;;GAIG;AACH,QAAA,MAAM,eAAe,EAAE,MAyuBtB,CAAA;AAED,eAAe,eAAe,CAAA"} \ No newline at end of file +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAe,MAAM,qBAAqB,CAAA;AA0O9D,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,GAAG,EAAE,YAAY,GAAE,MAAW,GAAG,OAAO,CAKnF;AAqED;;;;GAIG;AACH,QAAA,MAAM,eAAe,EAAE,MA2xBtB,CAAA;AAED,eAAe,eAAe,CAAA"} \ No newline at end of file diff --git a/dist/index.js b/dist/index.js index b6efe84..7e005e7 100644 --- a/dist/index.js +++ b/dist/index.js @@ -9,6 +9,7 @@ import { getRuntimeSettings } from './settings.js'; import { listAccounts, updateAccount, loadStore } from './store.js'; import { DEFAULT_CONFIG } from './types.js'; import { Errors } from './errors.js'; +import { isDebugEnabled, logDebug, logDebugValue } from './logger.js'; const PROVIDER_ID = 'openai'; const CODEX_BASE_URL = 'https://chatgpt.com/backend-api'; const REDIRECT_PORT = 1455; @@ -54,6 +55,37 @@ function extractRequestUrl(input) { return input.toString(); return input.url; } +function getRequestHeader(input, init, name) { + const lowerName = name.toLowerCase(); + const headers = init?.headers; + if (headers instanceof Headers) { + const value = headers.get(name) || headers.get(lowerName); + if (value) + return value; + } + else if (Array.isArray(headers)) { + for (const [key, value] of headers) { + if (key.toLowerCase() === lowerName) + return value; + } + } + else if (headers && typeof headers === 'object') { + const record = headers; + for (const [key, value] of Object.entries(record)) { + if (key.toLowerCase() !== lowerName) + continue; + if (Array.isArray(value)) + return value[0]; + return value; + } + } + if (input instanceof Request) { + const value = input.headers.get(name) || input.headers.get(lowerName); + if (value) + return value; + } + return undefined; +} function rewriteUrlForCodex(url) { return url.replace(URL_PATHS.RESPONSES, URL_PATHS.CODEX_RESPONSES); } @@ -101,7 +133,7 @@ function filterInput(input) { return item; }); } -function normalizeModel(model) { +function normalizeModel(model, debugEnabled) { if (!model) return 'gpt-5.1'; const modelId = model.includes('/') ? model.split('/').pop() : model; @@ -116,9 +148,7 @@ function normalizeModel(model) { baseModel === 'gpt-5.2-codex' || baseModel === 'gpt-5-codex')) { const latestModel = (process.env.OPENCODE_MULTI_AUTH_CODEX_LATEST_MODEL || DEFAULT_LATEST_CODEX_MODEL).trim(); - if (process.env.OPENCODE_MULTI_AUTH_DEBUG === '1') { - console.log(`[multi-auth] model map: ${baseModel} -> ${latestModel}`); - } + logDebug(`[multi-auth] model map: ${baseModel} -> ${latestModel}`, debugEnabled); return latestModel; } return baseModel; @@ -277,9 +307,7 @@ const MultiAuthPlugin = async ({ client, $, serverUrl, project, directory }) => else { if (macOpenEnabled && clickUrl && !terminalNotifierPath && !didWarnTerminalNotifier) { didWarnTerminalNotifier = true; - if (process.env.OPENCODE_MULTI_AUTH_DEBUG === '1') { - console.log('[multi-auth] mac click-to-open requires terminal-notifier (brew install terminal-notifier)'); - } + logDebug('[multi-auth] mac click-to-open requires terminal-notifier (brew install terminal-notifier)'); } try { const osascript = '/usr/bin/osascript'; @@ -510,14 +538,10 @@ const MultiAuthPlugin = async ({ client, $, serverUrl, project, directory }) => openai.whitelist.unshift(modelID); } } - if (process.env.OPENCODE_MULTI_AUTH_DEBUG === '1') { - console.log(`[multi-auth] injected runtime models: ${injectedModelIds.join(', ')}`); - } + logDebug(`[multi-auth] injected runtime models: ${injectedModelIds.join(', ')}`); } catch (err) { - if (process.env.OPENCODE_MULTI_AUTH_DEBUG === '1') { - console.log('[multi-auth] config injection failed:', err); - } + logDebugValue('[multi-auth] config injection failed', err); } }, auth: { @@ -534,6 +558,7 @@ const MultiAuthPlugin = async ({ client, $, serverUrl, project, directory }) => } const customFetch = async (input, init) => { await syncAuthFromOpenCode(getAuth); + const debugLogging = isDebugEnabled(); let body = {}; try { body = init?.body ? JSON.parse(init.body) : {}; @@ -541,7 +566,30 @@ const MultiAuthPlugin = async ({ client, $, serverUrl, project, directory }) => catch { body = {}; } - const normalizedModel = normalizeModel(body.model); + const normalizedModel = normalizeModel(body.model, debugLogging); + const sessionAffinity = getRequestHeader(input, init, 'x-session-affinity')?.trim() || undefined; + const promptCacheKey = typeof body?.prompt_cache_key === 'string' && body.prompt_cache_key.trim() + ? body.prompt_cache_key.trim() + : undefined; + const routeSessionId = sessionAffinity || promptCacheKey; + const routeSessionSource = sessionAffinity + ? 'x-session-affinity' + : promptCacheKey + ? 'prompt_cache_key' + : 'none'; + if (debugLogging) { + /* + logDebugValue('[multi-auth] request.body', { + method: init?.method || 'POST', + url: extractRequestUrl(input), + model: body.model, + normalizedModel, + stream: body?.stream === true, + sessionId: body?.prompt_cache_key, + body + }, debugLogging) + */ + } const store = loadStore(); const forceState = getForceState(); const forcePinned = isForceActive() && !!forceState.forcedAlias; @@ -553,6 +601,8 @@ const MultiAuthPlugin = async ({ client, $, serverUrl, project, directory }) => !acc.authInvalid && acc.enabled !== false; }).length; + logDebug(`[multi-auth] routing start model=${normalizedModel} eligible=${eligibleCount} forcePinned=${forcePinned}`, debugLogging); + logDebug(`[multi-auth] routeSessionSource=${routeSessionSource} routeSessionId=${routeSessionId || 'none'} backendCacheKey=${promptCacheKey || 'none'}`, debugLogging); const maxAttempts = forcePinned ? 1 : Math.max(1, eligibleCount); const triedAliases = new Set(); let attempt = 0; @@ -564,7 +614,8 @@ const MultiAuthPlugin = async ({ client, $, serverUrl, project, directory }) => rotationStrategy: settings.settings.rotationStrategy }; const rotation = await getNextAccount(effectiveConfig, { - model: normalizedModel + model: normalizedModel, + sessionId: routeSessionId }); if (!rotation) { if (forcePinned && forceState.forcedAlias) { @@ -585,13 +636,16 @@ const MultiAuthPlugin = async ({ client, $, serverUrl, project, directory }) => }), { status: 503, headers: { 'Content-Type': 'application/json' } }); } const { account, token } = rotation; + logDebug(`[multi-auth] routing selected alias=${account.alias} strategy=${effectiveConfig.rotationStrategy} attempt=${attempt}/${maxAttempts}`, debugLogging); if (triedAliases.has(account.alias)) { + logDebug(`[multi-auth] routing skipped duplicate alias=${account.alias}`, debugLogging); continue; } triedAliases.add(account.alias); const decoded = decodeJWT(token); const accountId = decoded?.[JWT_CLAIM_PATH]?.chatgpt_account_id; if (!accountId) { + logDebug(`[multi-auth] token parse failed alias=${account.alias}`, debugLogging); return new Response(JSON.stringify({ error: { code: 'TOKEN_PARSE_ERROR', @@ -610,6 +664,7 @@ const MultiAuthPlugin = async ({ client, $, serverUrl, project, directory }) => model: normalizedModel, store: false }; + // logDebugValue('[multi-auth] payload.before', payload, debugLogging) if (payload.truncation === undefined) { const truncationRaw = (process.env.OPENCODE_MULTI_AUTH_TRUNCATION || '').trim(); if (truncationRaw && truncationRaw !== 'disabled' && truncationRaw !== 'false' && truncationRaw !== '0') { @@ -633,17 +688,16 @@ const MultiAuthPlugin = async ({ client, $, serverUrl, project, directory }) => } if (supportedFastMode) { payload.service_tier = payload.service_tier || 'priority'; - if (process.env.OPENCODE_MULTI_AUTH_DEBUG === '1') { - console.log(`[multi-auth] fast mode enabled: ${normalizedModel} + service_tier=priority`); - } + logDebug(`[multi-auth] fast mode enabled: ${normalizedModel} + service_tier=priority`, debugLogging); } - else if (fastMode && process.env.OPENCODE_MULTI_AUTH_DEBUG === '1') { - console.log(`[multi-auth] fast mode ignored for unsupported model: ${normalizedModel}`); + else if (fastMode) { + logDebug(`[multi-auth] fast mode ignored for unsupported model: ${normalizedModel}`, debugLogging); } - if (process.env.OPENCODE_MULTI_AUTH_DEBUG === '1' && payload.service_tier === 'priority') { - console.log(`[multi-auth] priority service tier requested for ${normalizedModel}`); + if (payload.service_tier === 'priority') { + logDebug(`[multi-auth] priority service tier requested for ${normalizedModel}`, debugLogging); } delete payload.reasoning_effort; + logDebugValue('[multi-auth] payload.after', payload, debugLogging); try { const headers = new Headers(init?.headers || {}); headers.delete('x-api-key'); @@ -663,6 +717,18 @@ const MultiAuthPlugin = async ({ client, $, serverUrl, project, directory }) => } headers.set('accept', 'text/event-stream'); const sendPayload = async (requestPayload) => { + logDebugValue('[multi-auth] upstream.request', { + url, + method: init?.method || 'POST', + headers: { + accountId, + contentType: 'application/json', + beta: OPENAI_HEADER_VALUES.BETA_RESPONSES, + originator: OPENAI_HEADER_VALUES.ORIGINATOR_CODEX, + cacheKey: payload?.prompt_cache_key + }, + requestPayload + }, debugLogging); return fetch(url, { method: init?.method || 'POST', headers, @@ -676,6 +742,7 @@ const MultiAuthPlugin = async ({ client, $, serverUrl, project, directory }) => : account.rateLimits; if (limitUpdate) { const blockingResetAt = getBlockingRateLimitResetAt(mergedRateLimits); + logDebug(`[multi-auth] rate limit update alias=${account.alias} blockingResetAt=${blockingResetAt || 'none'}`, debugLogging); updateAccount(account.alias, { rateLimits: mergedRateLimits, rateLimitedUntil: blockingResetAt @@ -689,9 +756,7 @@ const MultiAuthPlugin = async ({ client, $, serverUrl, project, directory }) => const errorData = await res.clone().json().catch(() => ({})); const errorText = await res.clone().text().catch(() => ''); if (isCyberPolicyError(errorData, errorText)) { - if (process.env.OPENCODE_MULTI_AUTH_DEBUG === '1') { - console.log('[multi-auth] cyber_policy on priority tier; retrying once without service_tier'); - } + logDebug('[multi-auth] cyber_policy on priority tier; retrying once without service_tier', debugLogging); const standardTierPayload = { ...payload }; delete standardTierPayload.service_tier; res = await sendPayload(standardTierPayload); @@ -702,6 +767,7 @@ const MultiAuthPlugin = async ({ client, $, serverUrl, project, directory }) => const errorData = await res.clone().json().catch(() => ({})); const message = errorData?.error?.message || ''; if (message.toLowerCase().includes('invalidated') || res.status === 401) { + logDebug(`[multi-auth] auth invalidated alias=${account.alias} status=${res.status}`, debugLogging); markAuthInvalid(account.alias); } if (attempt < maxAttempts) { @@ -715,6 +781,7 @@ const MultiAuthPlugin = async ({ client, $, serverUrl, project, directory }) => const errorData = await res.clone().json().catch(() => ({})); const errorText = extractErrorMessage(errorData); const rateLimitedUntil = resolveRateLimitedUntil(mergedRateLimits, res.headers, errorText, pluginConfig.rateLimitCooldownMs); + logDebug(`[multi-auth] rate limited alias=${account.alias} until=${rateLimitedUntil}`, debugLogging); markRateLimited(account.alias, rateLimitedUntil); if (attempt < maxAttempts) { continue; @@ -739,6 +806,7 @@ const MultiAuthPlugin = async ({ client, $, serverUrl, project, directory }) => message.toLowerCase().includes('deactivated_workspace') || message.toLowerCase().includes('deactivated workspace'); if (isDeactivatedWorkspace) { + logDebug(`[multi-auth] workspace deactivated alias=${account.alias} until=${Date.now() + pluginConfig.workspaceDeactivatedCooldownMs}`, debugLogging); markWorkspaceDeactivated(account.alias, pluginConfig.workspaceDeactivatedCooldownMs, { error: message || code }); @@ -760,6 +828,7 @@ const MultiAuthPlugin = async ({ client, $, serverUrl, project, directory }) => message.toLowerCase().includes('model is not supported') && message.toLowerCase().includes('chatgpt account'); if (isModelUnsupported) { + logDebug(`[multi-auth] model unsupported alias=${account.alias} model=${normalizedModel}`, debugLogging); markModelUnsupported(account.alias, pluginConfig.modelUnsupportedCooldownMs, { model: normalizedModel, error: message @@ -773,15 +842,19 @@ const MultiAuthPlugin = async ({ client, $, serverUrl, project, directory }) => } } if (!res.ok) { + logDebug(`[multi-auth] upstream response not ok alias=${account.alias} status=${res.status}`, debugLogging); return res; } const responseHeaders = ensureContentType(res.headers); if (!isStreaming && responseHeaders.get('content-type')?.includes('text/event-stream')) { + logDebug(`[multi-auth] converting SSE to JSON alias=${account.alias}`, debugLogging); return await convertSseToJson(res, responseHeaders); } + logDebug(`[multi-auth] upstream response ok alias=${account.alias} status=${res.status}`, debugLogging); return res; } catch (err) { + logDebugValue('[multi-auth] request failed', err, debugLogging); return new Response(JSON.stringify({ error: { code: 'REQUEST_FAILED', message: `[multi-auth] Request failed: ${err}` } }), { status: 500, headers: { 'Content-Type': 'application/json' } }); } } diff --git a/dist/index.js.map b/dist/index.js.map index 444856b..f63dc11 100644 --- a/dist/index.js.map +++ b/dist/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/logger.d.ts b/dist/logger.d.ts index bc852fd..6975e7e 100644 --- a/dist/logger.d.ts +++ b/dist/logger.d.ts @@ -1,6 +1,11 @@ +export declare function isDebugEnvOverrideActive(): boolean; +export declare function isDebugEnabled(): boolean; +export declare function formatDebugValue(value: unknown): string; export declare function logInfo(message: string): void; export declare function logWarn(message: string): void; export declare function logError(message: string): void; +export declare function logDebug(message: string, enabled?: boolean): void; +export declare function logDebugValue(label: string, value: unknown, enabled?: boolean): void; export declare function getLogPath(): string; export declare function readLogTail(maxLines?: number): string[]; //# sourceMappingURL=logger.d.ts.map \ No newline at end of file diff --git a/dist/logger.d.ts.map b/dist/logger.d.ts.map index 1ce3ba6..7b0a370 100644 --- a/dist/logger.d.ts.map +++ b/dist/logger.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AA+BA,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE7C;AAED,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE7C;AAED,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE9C;AAED,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAED,wBAAgB,WAAW,CAAC,QAAQ,SAAgB,GAAG,MAAM,EAAE,CAS9D"} \ No newline at end of file +{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAyCA,wBAAgB,wBAAwB,IAAI,OAAO,CAElD;AAED,wBAAgB,cAAc,IAAI,OAAO,CAOxC;AA4CD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAMvD;AAYD,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE7C;AAED,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE7C;AAED,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE9C;AAED,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI,CAIjE;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI,CAOpF;AAED,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAED,wBAAgB,WAAW,CAAC,QAAQ,SAAgB,GAAG,MAAM,EAAE,CAS9D"} \ No newline at end of file diff --git a/dist/logger.js b/dist/logger.js index c2119da..99f4a9e 100644 --- a/dist/logger.js +++ b/dist/logger.js @@ -1,9 +1,24 @@ import * as fs from 'node:fs'; import * as os from 'node:os'; import * as path from 'node:path'; +import { getRuntimeSettings } from './settings.js'; const DEFAULT_LOG_DIR = path.join(os.homedir(), '.config', 'opencode-multi-auth', 'logs'); const LOG_FILE = process.env.CODEX_SOFT_LOG_PATH || path.join(DEFAULT_LOG_DIR, 'codex-soft.log'); const MAX_LOG_LINES = 400; +const MAX_DEBUG_BYTES = 20 * 1024; +const REDACT_KEYS = new Set([ + 'authorization', + 'cookie', + 'x-api-key', + 'api-key', + 'accessToken', + 'refreshToken', + 'idToken', + 'token', + 'secret', + 'password', + 'passwd' +]); function ensureDir() { const dir = path.dirname(LOG_FILE); if (!fs.existsSync(dir)) { @@ -15,6 +30,76 @@ function sanitize(message) { .replace(/\beyJ[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]{10,}\b/g, '[jwt]') .replace(/\bsk-[A-Za-z0-9]{10,}\b/g, '[token]'); } +function isDebugEnabledFromEnv() { + const value = process.env.OPENCODE_MULTI_AUTH_DEBUG; + return value === '1' || value?.toLowerCase?.() === 'true'; +} +export function isDebugEnvOverrideActive() { + return isDebugEnabledFromEnv(); +} +export function isDebugEnabled() { + if (isDebugEnabledFromEnv()) + return true; + try { + return getRuntimeSettings().settings.debug === true; + } + catch { + return false; + } +} +function capText(text, maxBytes = MAX_DEBUG_BYTES) { + const bytes = Buffer.byteLength(text, 'utf8'); + if (bytes <= maxBytes) { + return { text, truncated: false, bytes }; + } + const capped = Buffer.from(text, 'utf8').subarray(0, maxBytes).toString('utf8'); + return { text: capped, truncated: true, bytes }; +} +function normalizeDebugValue(value, depth = 0) { + if (value === null || value === undefined) + return value; + if (typeof value === 'string') + return value; + if (typeof value === 'number' || typeof value === 'boolean') + return value; + if (typeof value === 'bigint') + return value.toString(); + if (typeof value === 'function') + return '[function]'; + if (value instanceof Error) { + return { + name: value.name, + message: value.message, + code: value.code, + stack: value.stack + }; + } + if (depth > 6) + return '[depth-limit]'; + if (Array.isArray(value)) { + return value.slice(0, 50).map((item) => normalizeDebugValue(item, depth + 1)); + } + if (typeof value === 'object') { + const out = {}; + for (const [key, item] of Object.entries(value)) { + if (REDACT_KEYS.has(key.toLowerCase())) { + out[key] = '[redacted]'; + continue; + } + out[key] = normalizeDebugValue(item, depth + 1); + } + return out; + } + return String(value); +} +export function formatDebugValue(value) { + try { + return JSON.stringify(normalizeDebugValue(value)) || 'null'; + } + catch { + return String(value); + } +} function append(level, message) { try { ensureDir(); @@ -34,6 +119,23 @@ export function logWarn(message) { export function logError(message) { append('error', message); } +export function logDebug(message, enabled) { + if (enabled === false) + return; + if (enabled !== true && !isDebugEnabled()) + return; + append('debug', message); +} +export function logDebugValue(label, value, enabled) { + if (enabled === false) + return; + if (enabled !== true && !isDebugEnabled()) + return; + const serialized = formatDebugValue(value); + const capped = capText(serialized); + const suffix = capped.truncated ? ` [truncated to ${MAX_DEBUG_BYTES} bytes from ${capped.bytes}]` : ''; + append('debug', `${label}: ${sanitize(capped.text)}${suffix}`); +} export function getLogPath() { return LOG_FILE; } diff --git a/dist/logger.js.map b/dist/logger.js.map index 03428e7..11c1b0a 100644 --- a/dist/logger.js.map +++ b/dist/logger.js.map @@ -1 +1 @@ -{"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAA;AAC7B,OAAO,KAAK,EAAE,MAAM,SAAS,CAAA;AAC7B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AAEjC,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,qBAAqB,EAAE,MAAM,CAAC,CAAA;AACzF,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,gBAAgB,CAAC,CAAA;AAChG,MAAM,aAAa,GAAG,GAAG,CAAA;AAEzB,SAAS,SAAS;IAChB,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;IAClC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;IACrD,CAAC;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,OAAe;IAC/B,OAAO,OAAO;SACX,OAAO,CAAC,oEAAoE,EAAE,OAAO,CAAC;SACtF,OAAO,CAAC,0BAA0B,EAAE,SAAS,CAAC,CAAA;AACnD,CAAC;AAED,SAAS,MAAM,CAAC,KAAa,EAAE,OAAe;IAC5C,IAAI,CAAC;QACH,SAAS,EAAE,CAAA;QACX,MAAM,IAAI,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,KAAK,KAAK,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAA;QAC5E,EAAE,CAAC,cAAc,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;IACvE,CAAC;IAAC,MAAM,CAAC;QACP,4BAA4B;IAC9B,CAAC;AACH,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,OAAe;IACrC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AACzB,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,OAAe;IACrC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AACzB,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,OAAe;IACtC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;AAC1B,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,QAAQ,GAAG,aAAa;IAClD,IAAI,CAAC;QACH,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;YAAE,OAAO,EAAE,CAAA;QACvC,MAAM,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;QAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;QAC9C,OAAO,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAA;IAC1D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAA;IACX,CAAC;AACH,CAAC"} \ No newline at end of file +{"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/rotation.d.ts b/dist/rotation.d.ts index e86baf4..b58547f 100644 --- a/dist/rotation.d.ts +++ b/dist/rotation.d.ts @@ -10,6 +10,9 @@ export interface RotationResult { } export interface AccountSelectionContext { model?: string; + /** Stable identifier for this conversation. When set and stickySessionRouting + * is enabled the same account is reused for all turns. */ + sessionId?: string; } export declare function getNextAccount(config: typeof DEFAULT_CONFIG, selection?: AccountSelectionContext): Promise; export declare function markRateLimited(alias: string, rateLimitedUntil: number): void; @@ -25,4 +28,6 @@ export declare function markWorkspaceDeactivated(alias: string, cooldownMs: numb export declare function clearWorkspaceDeactivated(alias: string): void; export declare function markAuthInvalid(alias: string): void; export declare function clearAuthInvalid(alias: string): void; +export { clearSessionsForAlias } from './session-store.js'; +export { listSessions, sessionCount, sessionCountByAlias, pruneExpired } from './session-store.js'; //# sourceMappingURL=rotation.d.ts.map \ No newline at end of file diff --git a/dist/rotation.d.ts.map b/dist/rotation.d.ts.map index 040e230..bdec9e1 100644 --- a/dist/rotation.d.ts.map +++ b/dist/rotation.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"rotation.d.ts","sourceRoot":"","sources":["../src/rotation.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAEpE,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,kBAAkB,CAAA;IAC3B,KAAK,EAAE,MAAM,CAAA;IACb,UAAU,CAAC,EAAE;QACX,MAAM,EAAE,OAAO,CAAA;QACf,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;QACpB,WAAW,EAAE,MAAM,CAAA;KACpB,CAAA;CACF;AAED,MAAM,WAAW,uBAAuB;IACtC,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAkHD,wBAAsB,cAAc,CAClC,MAAM,EAAE,OAAO,cAAc,EAC7B,SAAS,CAAC,EAAE,uBAAuB,GAClC,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CA8OhC;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAQ7E;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAIlD;AAED,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,MAAM,EAClB,IAAI,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GACxC,IAAI,CAWN;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAOzD;AAED,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,MAAM,EAClB,IAAI,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GACxB,IAAI,CASN;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAM7D;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAMnD;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAKpD"} \ No newline at end of file +{"version":3,"file":"rotation.d.ts","sourceRoot":"","sources":["../src/rotation.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAGpE,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,kBAAkB,CAAA;IAC3B,KAAK,EAAE,MAAM,CAAA;IACb,UAAU,CAAC,EAAE;QACX,MAAM,EAAE,OAAO,CAAA;QACf,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;QACpB,WAAW,EAAE,MAAM,CAAA;KACpB,CAAA;CACF;AAED,MAAM,WAAW,uBAAuB;IACtC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd;+DAC2D;IAC3D,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAkHD,wBAAsB,cAAc,CAClC,MAAM,EAAE,OAAO,cAAc,EAC7B,SAAS,CAAC,EAAE,uBAAuB,GAClC,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAmWhC;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAQ7E;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAIlD;AAED,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,MAAM,EAClB,IAAI,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GACxC,IAAI,CAWN;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAOzD;AAED,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,MAAM,EAClB,IAAI,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GACxB,IAAI,CASN;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAM7D;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAMnD;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAKpD;AAED,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAA;AAC1D,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA"} \ No newline at end of file diff --git a/dist/rotation.js b/dist/rotation.js index 2f26dd0..fc5bf59 100644 --- a/dist/rotation.js +++ b/dist/rotation.js @@ -1,8 +1,10 @@ -import { getStoreDiagnostics, loadStore, saveStore, updateAccount } from './store.js'; +import { getStoreDiagnostics, loadStore, mutateStore, updateAccount } from './store.js'; import { ensureValidToken } from './auth.js'; import { decodeJwtPayload, getPlanTypeFromClaims } from './codex-auth.js'; import { isForceActive, checkAndAutoClearForce, getForceState, clearForce } from './force-mode.js'; import { getRuntimeSettings, calculateWeightedSelection } from './settings.js'; +import { getSessionAlias, setSessionAlias, clearSession } from './session-store.js'; +import { logDebug } from './logger.js'; const HEALTH_HYSTERESIS_MS = 10_000; const RECENT_FAILURE_WINDOW_MS = 60_000; function shuffled(input) { @@ -94,7 +96,7 @@ export async function getNextAccount(config, selection) { // Phase E: Check and auto-clear expired/invalid force state const autoClear = checkAndAutoClearForce(); if (autoClear.wasCleared) { - console.log(`[multi-auth] Force mode auto-cleared: ${autoClear.reason}`); + logDebug(`[multi-auth] Force mode auto-cleared: ${autoClear.reason}`); } // Phase E: Check if force mode is active const forceActive = isForceActive(); @@ -105,9 +107,7 @@ export async function getNextAccount(config, selection) { const diag = getStoreDiagnostics(); const extra = diag.error ? ` (${diag.error})` : ''; console.error(`[multi-auth] No accounts configured. Run: opencode-multi-auth add ${extra}`); - if (process.env.OPENCODE_MULTI_AUTH_DEBUG === '1') { - console.error(`[multi-auth] store file: ${diag.storeFile}`); - } + logDebug(`[multi-auth] store file: ${diag.storeFile}`); return null; } const now = Date.now(); @@ -120,14 +120,23 @@ export async function getNextAccount(config, selection) { if (health.isHealthy) { const token = await ensureValidToken(forcedAlias); if (token) { - store = updateAccount(forcedAlias, { - usageCount: (forcedAccount.usageCount || 0) + 1, - lastUsed: now, - limitError: undefined + const updated = mutateStore((currentStore) => { + const current = currentStore.accounts[forcedAlias]; + if (!current) + return null; + currentStore.accounts[forcedAlias] = { + ...current, + usageCount: (current.usageCount || 0) + 1, + lastUsed: now, + limitError: undefined + }; + currentStore.activeAlias = forcedAlias; + currentStore.lastRotation = now; + return currentStore; }); - store.activeAlias = forcedAlias; - store.lastRotation = now; - saveStore(store); + if (!updated) + return null; + store = updated; console.log(`[multi-auth] Force mode: using ${forcedAlias}`); return { account: store.accounts[forcedAlias], @@ -155,6 +164,70 @@ export async function getNextAccount(config, selection) { clearForce(); } } + // --- Sticky session routing --- + const runtimeSettingsForSession = getRuntimeSettings(); + const sessionSettings = runtimeSettingsForSession.settings; + const sessionId = selection?.sessionId; + if (sessionId && + (sessionSettings.stickySessionRouting ?? true)) { + const idleTimeoutMs = sessionSettings.sessionIdleTimeoutMs ?? 60 * 60 * 1000; + const pinnedAlias = getSessionAlias(sessionId); + if (pinnedAlias) { + const pinnedAccount = store.accounts[pinnedAlias]; + if (pinnedAccount) { + const pinnedHealth = evaluateAccountHealth(pinnedAccount, now); + if (pinnedHealth.isHealthy) { + const token = await ensureValidToken(pinnedAlias); + if (token) { + const updated = mutateStore((currentStore) => { + const current = currentStore.accounts[pinnedAlias]; + if (!current) + return null; + currentStore.accounts[pinnedAlias] = { + ...current, + usageCount: (current.usageCount || 0) + 1, + lastUsed: now, + limitError: undefined + }; + currentStore.activeAlias = pinnedAlias; + currentStore.lastRotation = now; + return currentStore; + }); + if (!updated) + return null; + store = updated; + setSessionAlias(sessionId, pinnedAlias, idleTimeoutMs); + logDebug(`[multi-auth] Session ${sessionId}: reusing pinned account ${pinnedAlias}`); + const currentForceState = getForceState(); + return { + account: store.accounts[pinnedAlias], + token, + forceState: { + active: isForceActive(), + alias: currentForceState.forcedAlias, + remainingMs: currentForceState.forcedUntil ? currentForceState.forcedUntil - now : 0 + } + }; + } + } + // Pinned account is unhealthy. + const fallback = sessionSettings.sessionStickyFallback ?? 'fail'; + if (fallback === 'fail') { + console.warn(`[multi-auth] Session ${sessionId}: pinned account ${pinnedAlias} is unavailable and sessionStickyFallback=fail`); + return null; + } + // fallback === 'rotate': evict the mapping and fall through to normal rotation. + console.warn(`[multi-auth] Session ${sessionId}: pinned account ${pinnedAlias} unavailable; falling back to rotation`); + clearSession(sessionId); + } + else { + // Account was deleted; clean up stale mapping. + clearSession(sessionId); + } + } + // No existing mapping → fall through; after selection we'll record one. + } + // --- End sticky session routing --- const healthMap = new Map(); for (const alias of aliases) { const acc = store.accounts[alias]; @@ -244,6 +317,25 @@ export async function getNextAccount(config, selection) { } return { aliases: [selected] }; } + case 'use-up': { + // Always use the lowest-indexed available account by drain order. + // Once an account is exhausted (rate-limited) it drops out of + // candidateAliases, and the next one in order takes over. + const explicit = runtimeSettings.settings.useUpOrder ?? []; + const storeOrder = Object.keys(store.accounts); + const sorted = [...candidateAliases].sort((a, b) => { + let ia = explicit.indexOf(a); + let ib = explicit.indexOf(b); + // Aliases not in the explicit list are appended after it, + // ordered by store insertion order. + if (ia === -1) + ia = explicit.length + storeOrder.indexOf(a); + if (ib === -1) + ib = explicit.length + storeOrder.indexOf(b); + return ia - ib; + }); + return { aliases: sorted }; + } case 'round-robin': default: { const sorted = [...candidateAliases].sort((a, b) => { @@ -277,18 +369,34 @@ export async function getNextAccount(config, selection) { }); continue; } - store = updateAccount(candidate, { - usageCount: (store.accounts[candidate]?.usageCount || 0) + 1, - lastUsed: now, - limitError: undefined - }); - store.activeAlias = candidate; - store.lastRotation = now; const nextIndex = primary.aliases.includes(candidate) ? primary.nextIndex : fallback.nextIndex; - if (nextIndex) { - store.rotationIndex = nextIndex(candidate); + const updated = mutateStore((currentStore) => { + const current = currentStore.accounts[candidate]; + if (!current) + return null; + currentStore.accounts[candidate] = { + ...current, + usageCount: (current.usageCount || 0) + 1, + lastUsed: now, + limitError: undefined + }; + currentStore.activeAlias = candidate; + currentStore.lastRotation = now; + if (nextIndex) { + currentStore.rotationIndex = nextIndex(candidate); + } + return currentStore; + }); + if (!updated) { + continue; + } + store = updated; + // Record session→account mapping for subsequent turns. + if (sessionId && (sessionSettings.stickySessionRouting ?? true)) { + const idleTimeoutMs = sessionSettings.sessionIdleTimeoutMs ?? 60 * 60 * 1000; + setSessionAlias(sessionId, candidate, idleTimeoutMs); + logDebug(`[multi-auth] Session ${sessionId}: pinned to account ${candidate}`); } - saveStore(store); const currentForceState = getForceState(); return { account: store.accounts[candidate], @@ -363,4 +471,6 @@ export function clearAuthInvalid(alias) { authInvalidatedAt: undefined }); } +export { clearSessionsForAlias } from './session-store.js'; +export { listSessions, sessionCount, sessionCountByAlias, pruneExpired } from './session-store.js'; //# sourceMappingURL=rotation.js.map \ No newline at end of file diff --git a/dist/rotation.js.map b/dist/rotation.js.map index 95f584e..be72451 100644 --- a/dist/rotation.js.map +++ b/dist/rotation.js.map @@ -1 +1 @@ -{"version":3,"file":"rotation.js","sourceRoot":"","sources":["../src/rotation.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"rotation.js","sourceRoot":"","sources":["../src/rotation.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/session-store.d.ts b/dist/session-store.d.ts new file mode 100644 index 0000000..29410c5 --- /dev/null +++ b/dist/session-store.d.ts @@ -0,0 +1,25 @@ +/** + * Disk-backed map from session ID -> account alias for sticky session routing. + * The in-memory Map is a cache; sessions.json is the source of truth across + * concurrent OpenCode/plugin processes. + */ +export interface SessionEntry { + alias: string; + createdAt: number; + lastUsedAt: number; +} +export declare function pruneExpired(idleTimeoutMs: number): void; +export declare function getSessionAlias(sessionId: string): string | undefined; +export declare function setSessionAlias(sessionId: string, alias: string, idleTimeoutMs: number): void; +export declare function touchSession(sessionId: string): void; +export declare function clearSession(sessionId: string): void; +export declare function clearSessionsForAlias(alias: string): void; +/** Returns a snapshot suitable for the dashboard API. */ +export declare function listSessions(): Array; +export declare function sessionCount(): number; +/** Count active sessions per account alias. */ +export declare function sessionCountByAlias(): Record; +export declare function getSessionStorePath(): string; +//# sourceMappingURL=session-store.d.ts.map \ No newline at end of file diff --git a/dist/session-store.d.ts.map b/dist/session-store.d.ts.map new file mode 100644 index 0000000..94cb637 --- /dev/null +++ b/dist/session-store.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"session-store.d.ts","sourceRoot":"","sources":["../src/session-store.ts"],"names":[],"mappings":"AAKA;;;;GAIG;AAEH,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,MAAM,CAAA;CACnB;AAwID,wBAAgB,YAAY,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CASxD;AAED,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAGrE;AAED,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,IAAI,CAW7F;AAED,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAOpD;AAED,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAIpD;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAMzD;AAED,yDAAyD;AACzD,wBAAgB,YAAY,IAAI,KAAK,CAAC,YAAY,GAAG;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CAM1E;AAED,wBAAgB,YAAY,IAAI,MAAM,CAGrC;AAED,+CAA+C;AAC/C,wBAAgB,mBAAmB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAO5D;AAED,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C"} \ No newline at end of file diff --git a/dist/session-store.js b/dist/session-store.js new file mode 100644 index 0000000..45f3eb5 --- /dev/null +++ b/dist/session-store.js @@ -0,0 +1,206 @@ +import * as fs from 'fs'; +import * as path from 'path'; +import * as os from 'os'; +import { withFileLock } from './file-lock.js'; +const STORE_DIR_ENV = 'OPENCODE_MULTI_AUTH_STORE_DIR'; +const SESSION_STORE_FILE_ENV = 'OPENCODE_MULTI_AUTH_SESSION_STORE_FILE'; +const DEFAULT_STORE_DIR = path.join(os.homedir(), '.config', 'opencode-multi-auth'); +const DEFAULT_SESSION_STORE_FILE = 'sessions.json'; +const SESSION_STORE_VERSION = 1; +const sessions = new Map(); +let pruneTimer = null; +const PRUNE_INTERVAL_MS = 5 * 60 * 1000; // check every 5 minutes +function getStoreDir() { + const override = process.env[STORE_DIR_ENV]; + if (override && override.trim()) + return path.resolve(override.trim()); + return DEFAULT_STORE_DIR; +} +function getSessionStoreFile() { + const override = process.env[SESSION_STORE_FILE_ENV]; + if (override && override.trim()) + return path.resolve(override.trim()); + return path.join(getStoreDir(), DEFAULT_SESSION_STORE_FILE); +} +function ensureDir() { + const dir = path.dirname(getSessionStoreFile()); + if (!fs.existsSync(dir)) { + fs.mkdirSync(dir, { recursive: true, mode: 0o700 }); + } +} +function validateSessionEntry(entry) { + if (!entry || typeof entry !== 'object') + return null; + if (typeof entry.alias !== 'string' || !entry.alias) + return null; + if (typeof entry.createdAt !== 'number') + return null; + if (typeof entry.lastUsedAt !== 'number') + return null; + return { + alias: entry.alias, + createdAt: entry.createdAt, + lastUsedAt: entry.lastUsedAt + }; +} +function loadSessionsUnlocked() { + ensureDir(); + const file = getSessionStoreFile(); + const next = new Map(); + if (!fs.existsSync(file)) + return next; + try { + const raw = fs.readFileSync(file, 'utf-8'); + const parsed = JSON.parse(raw); + const rawSessions = parsed.sessions; + if (!rawSessions || typeof rawSessions !== 'object') + return next; + for (const [sessionId, entry] of Object.entries(rawSessions)) { + if (typeof sessionId !== 'string' || !sessionId) + continue; + const valid = validateSessionEntry(entry); + if (valid) + next.set(sessionId, valid); + } + } + catch (err) { + console.warn('[multi-auth] Failed to load session store; using empty session cache:', err); + } + return next; +} +function saveSessionsUnlocked(next) { + ensureDir(); + const file = getSessionStoreFile(); + const payload = { + version: SESSION_STORE_VERSION, + sessions: Object.fromEntries(next.entries()) + }; + const json = JSON.stringify(payload, null, 2); + const tmp = `${file}.tmp-${process.pid}-${Date.now()}`; + let fd = null; + try { + fd = fs.openSync(tmp, 'w', 0o600); + fs.writeFileSync(fd, json, { encoding: 'utf-8' }); + try { + fs.fsyncSync(fd); + } + catch { + // best-effort + } + } + finally { + if (fd !== null) { + try { + fs.closeSync(fd); + } + catch { + // ignore + } + } + } + fs.renameSync(tmp, file); + try { + fs.chmodSync(file, 0o600); + } + catch { + // ignore + } +} +function replaceCache(next) { + sessions.clear(); + for (const [sessionId, entry] of next) { + sessions.set(sessionId, entry); + } +} +function refreshCache() { + replaceCache(loadSessionsUnlocked()); +} +function mutateSessions(fn) { + return withFileLock(getSessionStoreFile(), () => { + const current = loadSessionsUnlocked(); + const result = fn(current); + saveSessionsUnlocked(current); + replaceCache(current); + return result; + }); +} +function startPruneTimer(idleTimeoutMs) { + if (pruneTimer !== null) + return; + pruneTimer = setInterval(() => pruneExpired(idleTimeoutMs), PRUNE_INTERVAL_MS); + // Don't keep the process alive just for this timer. + if (pruneTimer.unref) + pruneTimer.unref(); +} +export function pruneExpired(idleTimeoutMs) { + mutateSessions((current) => { + const cutoff = Date.now() - idleTimeoutMs; + for (const [id, entry] of current) { + if (entry.lastUsedAt < cutoff) { + current.delete(id); + } + } + }); +} +export function getSessionAlias(sessionId) { + refreshCache(); + return sessions.get(sessionId)?.alias; +} +export function setSessionAlias(sessionId, alias, idleTimeoutMs) { + mutateSessions((current) => { + const now = Date.now(); + const existing = current.get(sessionId); + current.set(sessionId, { + alias, + createdAt: existing?.createdAt ?? now, + lastUsedAt: now + }); + }); + startPruneTimer(idleTimeoutMs); +} +export function touchSession(sessionId) { + mutateSessions((current) => { + const entry = current.get(sessionId); + if (entry) { + entry.lastUsedAt = Date.now(); + } + }); +} +export function clearSession(sessionId) { + mutateSessions((current) => { + current.delete(sessionId); + }); +} +export function clearSessionsForAlias(alias) { + mutateSessions((current) => { + for (const [id, entry] of current) { + if (entry.alias === alias) + current.delete(id); + } + }); +} +/** Returns a snapshot suitable for the dashboard API. */ +export function listSessions() { + refreshCache(); + return Array.from(sessions.entries()).map(([sessionId, entry]) => ({ + sessionId, + ...entry + })); +} +export function sessionCount() { + refreshCache(); + return sessions.size; +} +/** Count active sessions per account alias. */ +export function sessionCountByAlias() { + refreshCache(); + const counts = {}; + for (const entry of sessions.values()) { + counts[entry.alias] = (counts[entry.alias] ?? 0) + 1; + } + return counts; +} +export function getSessionStorePath() { + return getSessionStoreFile(); +} +//# sourceMappingURL=session-store.js.map \ No newline at end of file diff --git a/dist/session-store.js.map b/dist/session-store.js.map new file mode 100644 index 0000000..421a9f1 --- /dev/null +++ b/dist/session-store.js.map @@ -0,0 +1 @@ +{"version":3,"file":"session-store.js","sourceRoot":"","sources":["../src/session-store.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/settings.d.ts.map b/dist/settings.d.ts.map index 46ef79d..9225467 100644 --- a/dist/settings.d.ts.map +++ b/dist/settings.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":"AAEA,OAAO,EAIL,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;AAmED,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;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAAC,MAAM,CAAC,EAAE,uBAAuB,EAAE,CAAA;CAAE,CA2BvF;AAGD,wBAAgB,aAAa,CAAC,KAAK,GAAE,MAAiB,GAAG,gBAAgB,CAQxE;AAGD,wBAAgB,WAAW,CACzB,MAAM,EAAE,YAAY,EACpB,KAAK,GAAE,MAAiB,GACvB;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAAC,MAAM,CAAC,EAAE,uBAAuB,EAAE,CAAA;CAAE,CAyDvF;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,CAAA;IAC1B,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,YAAY,CAAA;IACrB,QAAQ,EAAE,OAAO,CAAA;CAClB,CAwBA;AAGD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,WAAW,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC,GAAG,OAAO,CAGnG"} \ No newline at end of file +{"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":"AACA,OAAO,EAIL,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;AAyED,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;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAAC,MAAM,CAAC,EAAE,uBAAuB,EAAE,CAAA;CAAE,CA8BvF;AAGD,wBAAgB,aAAa,CAAC,KAAK,GAAE,MAAiB,GAAG,gBAAgB,CASxE;AAGD,wBAAgB,WAAW,CACzB,MAAM,EAAE,YAAY,EACpB,KAAK,GAAE,MAAiB,GACvB;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAAC,MAAM,CAAC,EAAE,uBAAuB,EAAE,CAAA;CAAE,CAyDvF;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,CAAA;IAC1B,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,YAAY,CAAA;IACrB,QAAQ,EAAE,OAAO,CAAA;CAClB,CAwBA;AAGD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,WAAW,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC,GAAG,OAAO,CAGnG"} \ No newline at end of file diff --git a/dist/settings.js b/dist/settings.js index 4eea87a..1dced6e 100644 --- a/dist/settings.js +++ b/dist/settings.js @@ -1,5 +1,4 @@ -import { loadStore, saveStore } from './store.js'; -import { logInfo, logError } from './logger.js'; +import { loadStore, mutateStore } from './store.js'; import { DEFAULT_ROTATION_SETTINGS, WEIGHTED_PRESETS, validateSettings } from './types.js'; function resolveSettings(includeEnvOverrides) { const store = loadStore(); @@ -17,7 +16,7 @@ function resolveSettings(includeEnvOverrides) { // Layer 2: Environment variables override (optional for runtime behavior) if (includeEnvOverrides) { const envStrategy = process.env.OPENCODE_MULTI_AUTH_ROTATION_STRATEGY; - if (envStrategy && ['round-robin', 'least-used', 'random', 'weighted-round-robin'].includes(envStrategy)) { + if (envStrategy && ['round-robin', 'least-used', 'random', 'weighted-round-robin', 'use-up'].includes(envStrategy)) { settings.rotationStrategy = envStrategy; source = 'env'; } @@ -37,6 +36,11 @@ function resolveSettings(includeEnvOverrides) { source = 'env'; } } + const envDebug = process.env.OPENCODE_MULTI_AUTH_DEBUG; + if (envDebug && (envDebug === '1' || envDebug.toLowerCase() === 'true')) { + settings.debug = true; + source = 'env'; + } // Phase G: Feature flag environment overrides const envAntigravity = process.env.OPENCODE_MULTI_AUTH_ANTIGRAVITY_ENABLED; if (envAntigravity) { @@ -51,7 +55,7 @@ function resolveSettings(includeEnvOverrides) { // Validate final settings const errors = validateSettings(settings); if (errors.length > 0) { - logError(`Settings validation errors: ${errors.map(e => e.message).join(', ')}`); + console.error(`[multi-auth] Settings validation errors: ${errors.map(e => e.message).join(', ')}`); } return { settings, source, errors: errors.length > 0 ? errors : undefined }; } @@ -65,36 +69,40 @@ export function getRuntimeSettings() { } // Phase F: Update settings with validation export function updateSettings(updates, actor = 'system') { - const current = getRuntimeSettings(); - // Merge updates with current settings - const newSettings = { - ...current.settings, - ...updates, - updatedAt: Date.now(), - updatedBy: actor - }; - // Validate new settings - const errors = validateSettings(newSettings); - if (errors.length > 0) { - logError(`Settings update failed validation: ${errors.map(e => e.message).join(', ')}`); - return { success: false, errors }; + let result = { success: false }; + mutateStore((store) => { + const newSettings = { + ...DEFAULT_ROTATION_SETTINGS, + ...(store.settings || {}), + ...updates, + updatedAt: Date.now(), + updatedBy: actor + }; + const errors = validateSettings(newSettings); + if (errors.length > 0) { + console.error(`[multi-auth] Settings update failed validation: ${errors.map(e => e.message).join(', ')}`); + result = { success: false, errors }; + return store; + } + store.settings = newSettings; + // Keep legacy field in sync for force-mode compatibility. + store.rotationStrategy = newSettings.rotationStrategy; + result = { success: true, settings: newSettings }; + return store; + }); + if (result.success) { + console.log(`[multi-auth] Settings updated by ${actor}: ${JSON.stringify(updates)}`); } - // Save to store - const store = loadStore(); - store.settings = newSettings; - // Keep legacy field in sync for force-mode compatibility. - store.rotationStrategy = newSettings.rotationStrategy; - saveStore(store); - logInfo(`Settings updated by ${actor}: ${JSON.stringify(updates)}`); - return { success: true, settings: newSettings }; + return result; } // Phase F: Reset settings to defaults export function resetSettings(actor = 'system') { - const store = loadStore(); - delete store.settings; - store.rotationStrategy = DEFAULT_ROTATION_SETTINGS.rotationStrategy; - saveStore(store); - logInfo(`Settings reset to defaults by ${actor}`); + mutateStore((store) => { + delete store.settings; + store.rotationStrategy = DEFAULT_ROTATION_SETTINGS.rotationStrategy; + return store; + }); + console.log(`[multi-auth] Settings reset to defaults by ${actor}`); return { ...DEFAULT_ROTATION_SETTINGS }; } // Phase F: Apply a preset diff --git a/dist/settings.js.map b/dist/settings.js.map index 08fc48d..95ad05d 100644 --- a/dist/settings.js.map +++ b/dist/settings.js.map @@ -1 +1 @@ -{"version":3,"file":"settings.js","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAiB,MAAM,YAAY,CAAA;AAChE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,EACL,yBAAyB,EACzB,gBAAgB,EAChB,gBAAgB,EAIjB,MAAM,YAAY,CAAA;AAUnB,SAAS,eAAe,CAAC,mBAA4B;IACnD,MAAM,KAAK,GAAG,SAAS,EAAE,CAAA;IAEzB,sBAAsB;IACtB,IAAI,QAAQ,GAAqB,EAAE,GAAG,yBAAyB,EAAE,CAAA;IACjE,IAAI,MAAM,GAA6B,SAAS,CAAA;IAEhD,yCAAyC;IACzC,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QACnB,QAAQ,GAAG;YACT,GAAG,QAAQ;YACX,GAAG,KAAK,CAAC,QAAQ;SAClB,CAAA;QACD,MAAM,GAAG,WAAW,CAAA;IACtB,CAAC;IAED,0EAA0E;IAC1E,IAAI,mBAAmB,EAAE,CAAC;QACxB,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAA;QACrE,IAAI,WAAW,IAAI,CAAC,aAAa,EAAE,YAAY,EAAE,QAAQ,EAAE,sBAAsB,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;YACzG,QAAQ,CAAC,gBAAgB,GAAG,WAAmD,CAAA;YAC/E,MAAM,GAAG,KAAK,CAAA;QAChB,CAAC;QAED,MAAM,oBAAoB,GAAG,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAA;QAC/E,IAAI,oBAAoB,EAAE,CAAC;YACzB,MAAM,MAAM,GAAG,UAAU,CAAC,oBAAoB,CAAC,CAAA;YAC/C,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC,IAAI,MAAM,IAAI,GAAG,EAAE,CAAC;gBACnD,QAAQ,CAAC,iBAAiB,GAAG,MAAM,CAAA;gBACnC,MAAM,GAAG,KAAK,CAAA;YAChB,CAAC;QACH,CAAC;QAED,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAA;QACrE,IAAI,eAAe,EAAE,CAAC;YACpB,MAAM,MAAM,GAAG,UAAU,CAAC,eAAe,CAAC,CAAA;YAC1C,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC,IAAI,MAAM,IAAI,GAAG,EAAE,CAAC;gBACnD,QAAQ,CAAC,YAAY,GAAG,MAAM,CAAA;gBAC9B,MAAM,GAAG,KAAK,CAAA;YAChB,CAAC;QACH,CAAC;QAED,8CAA8C;QAC9C,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAA;QAC1E,IAAI,cAAc,EAAE,CAAC;YACnB,MAAM,OAAO,GAAG,cAAc,CAAC,WAAW,EAAE,KAAK,MAAM,IAAI,cAAc,KAAK,GAAG,CAAA;YACjF,QAAQ,CAAC,YAAY,GAAG;gBACtB,GAAG,CAAC,QAAQ,CAAC,YAAY,IAAI,EAAE,CAAC;gBAChC,kBAAkB,EAAE,OAAO;aAC5B,CAAA;YACD,MAAM,GAAG,KAAK,CAAA;QAChB,CAAC;IACH,CAAC;IAED,0BAA0B;IAC1B,MAAM,MAAM,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAA;IAEzC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,QAAQ,CAAC,+BAA+B,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAClF,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,EAAE,CAAA;AAC7E,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,WAAW;IACzB,OAAO,eAAe,CAAC,IAAI,CAAC,CAAA;AAC9B,CAAC;AAED,+FAA+F;AAC/F,MAAM,UAAU,kBAAkB;IAChC,OAAO,eAAe,CAAC,KAAK,CAAC,CAAA;AAC/B,CAAC;AAED,2CAA2C;AAC3C,MAAM,UAAU,cAAc,CAC5B,OAAkC,EAClC,QAAgB,QAAQ;IAExB,MAAM,OAAO,GAAG,kBAAkB,EAAE,CAAA;IAEpC,sCAAsC;IACtC,MAAM,WAAW,GAAqB;QACpC,GAAG,OAAO,CAAC,QAAQ;QACnB,GAAG,OAAO;QACV,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;QACrB,SAAS,EAAE,KAAK;KACjB,CAAA;IAED,wBAAwB;IACxB,MAAM,MAAM,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAA;IAC5C,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,QAAQ,CAAC,sCAAsC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACvF,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAA;IACnC,CAAC;IAED,gBAAgB;IAChB,MAAM,KAAK,GAAG,SAAS,EAAE,CAAA;IACzB,KAAK,CAAC,QAAQ,GAAG,WAAW,CAAA;IAC5B,0DAA0D;IAC1D,KAAK,CAAC,gBAAgB,GAAG,WAAW,CAAC,gBAAgB,CAAA;IACrD,SAAS,CAAC,KAAK,CAAC,CAAA;IAEhB,OAAO,CAAC,uBAAuB,KAAK,KAAK,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;IACnE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAA;AACjD,CAAC;AAED,sCAAsC;AACtC,MAAM,UAAU,aAAa,CAAC,QAAgB,QAAQ;IACpD,MAAM,KAAK,GAAG,SAAS,EAAE,CAAA;IACzB,OAAQ,KAAa,CAAC,QAAQ,CAAA;IAC9B,KAAK,CAAC,gBAAgB,GAAG,yBAAyB,CAAC,gBAAgB,CAAA;IACnE,SAAS,CAAC,KAAK,CAAC,CAAA;IAEhB,OAAO,CAAC,iCAAiC,KAAK,EAAE,CAAC,CAAA;IACjD,OAAO,EAAE,GAAG,yBAAyB,EAAE,CAAA;AACzC,CAAC;AAED,0BAA0B;AAC1B,MAAM,UAAU,WAAW,CACzB,MAAoB,EACpB,QAAgB,QAAQ;IAExB,MAAM,KAAK,GAAG,SAAS,EAAE,CAAA;IACzB,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;IAE5C,MAAM,YAAY,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAA;IAE7C,IAAI,cAAc,GAA2B,EAAE,CAAA;IAE/C,IAAI,MAAM,KAAK,UAAU,EAAE,CAAC;QAC1B,iCAAiC;QACjC,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;QAC5D,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACvB,cAAc,CAAC,KAAK,CAAC,GAAG,MAAM,CAAA;QAChC,CAAC,CAAC,CAAA;IACJ,CAAC;SAAM,IAAI,MAAM,KAAK,cAAc,EAAE,CAAC;QACrC,gCAAgC;QAChC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACvB,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;YACrC,MAAM,iBAAiB,GAAG,OAAO,CAAC,UAAU,EAAE,QAAQ,EAAE,SAAS,IAAI,EAAE,CAAA;YACvE,MAAM,eAAe,GAAG,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,IAAI,EAAE,CAAA;YACnE,MAAM,MAAM,GAAG,CAAC,iBAAiB,GAAG,eAAe,CAAC,GAAG,CAAC,CAAA;YACxD,cAAc,CAAC,KAAK,CAAC,GAAG,MAAM,GAAG,GAAG,CAAA;QACtC,CAAC,CAAC,CAAA;QACF,wBAAwB;QACxB,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,CAAA;QAC1E,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACd,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;gBACvB,cAAc,CAAC,KAAK,CAAC,GAAG,cAAc,CAAC,KAAK,CAAC,GAAG,KAAK,CAAA;YACvD,CAAC,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;SAAM,IAAI,MAAM,KAAK,YAAY,EAAE,CAAC;QACnC,mDAAmD;QACnD,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACvB,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;YACrC,MAAM,iBAAiB,GAAG,OAAO,CAAC,UAAU,EAAE,QAAQ,EAAE,SAAS,IAAI,EAAE,CAAA;YACvE,MAAM,eAAe,GAAG,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,IAAI,EAAE,CAAA;YACnE,MAAM,MAAM,GAAG,CAAC,iBAAiB,GAAG,eAAe,CAAC,GAAG,CAAC,CAAA;YACxD,wCAAwC;YACxC,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,GAAG,CAAA;QAC9C,CAAC,CAAC,CAAA;QACF,wBAAwB;QACxB,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,CAAA;QAC1E,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACd,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;gBACvB,cAAc,CAAC,KAAK,CAAC,GAAG,cAAc,CAAC,KAAK,CAAC,GAAG,KAAK,CAAA;YACvD,CAAC,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAA8B;QACzC,gBAAgB,EAAE,sBAAsB;QACxC,iBAAiB,EAAE,YAAY,CAAC,UAAU,CAAC,QAAQ;QACnD,YAAY,EAAE,YAAY,CAAC,UAAU,CAAC,GAAG;QACzC,cAAc;KACf,CAAA;IAED,OAAO,cAAc,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;AACvC,CAAC;AAED,wCAAwC;AACxC,MAAM,UAAU,0BAA0B,CACxC,OAAiB,EACjB,OAA+B;IAE/B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAA;IAErC,mCAAmC;IACnC,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAA;IAC7D,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAA;IAEvC,yBAAyB;IACzB,MAAM,WAAW,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IACpF,IAAI,WAAW,KAAK,CAAC;QAAE,OAAO,IAAI,CAAA;IAElC,4BAA4B;IAC5B,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,WAAW,CAAA;IAExC,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE,CAAC;QAC9B,MAAM,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QAC7B,IAAI,MAAM,IAAI,CAAC,EAAE,CAAC;YAChB,OAAO,KAAK,CAAA;QACd,CAAC;IACH,CAAC;IAED,mBAAmB;IACnB,OAAO,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;AACxC,CAAC;AAED,8CAA8C;AAC9C,MAAM,UAAU,mBAAmB;IAMjC,MAAM,MAAM,GAAG,WAAW,EAAE,CAAA;IAC5B,MAAM,KAAK,GAAG,SAAS,EAAE,CAAA;IAEzB,2BAA2B;IAC3B,IAAI,MAAgC,CAAA;IACpC,IAAI,MAAM,CAAC,QAAQ,CAAC,gBAAgB,KAAK,sBAAsB,EAAE,CAAC;QAChE,0CAA0C;QAC1C,KAAK,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE,CAAC;YACpE,IAAI,UAAU,KAAK,QAAQ;gBACvB,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,IAAI;gBAC/E,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC;gBAC1E,MAAM,GAAG,UAA0B,CAAA;gBACnC,MAAK;YACP,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO;QACL,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,MAAM;QACN,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ;KAC3B,CAAA;AACH,CAAC;AAED,8CAA8C;AAC9C,MAAM,UAAU,gBAAgB,CAAC,IAAyD;IACxF,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAA;IAC9B,OAAO,QAAQ,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,CAAA;AACxD,CAAC"} \ No newline at end of file +{"version":3,"file":"settings.js","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/store.d.ts b/dist/store.d.ts index 1fe1ab5..992cdf5 100644 --- a/dist/store.d.ts +++ b/dist/store.d.ts @@ -1,6 +1,7 @@ import type { AccountStore, AccountCredentials } from './types.js'; export declare function loadStore(): AccountStore; export declare function saveStore(store: AccountStore): void; +export declare function mutateStore(fn: (store: AccountStore) => T): T; export declare function withWriteLock(fn: () => T): Promise; export declare function getStoreDiagnostics(): { storeDir: string; diff --git a/dist/store.d.ts.map b/dist/store.d.ts.map index 0cd9bfc..a6fb67b 100644 --- a/dist/store.d.ts.map +++ b/dist/store.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,YAAY,EACZ,kBAAkB,EAGnB,MAAM,YAAY,CAAA;AAoVnB,wBAAgB,SAAS,IAAI,YAAY,CAsExC;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAiFnD;AAED,wBAAsB,aAAa,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAO9D;AAED,wBAAgB,mBAAmB,IAAI;IACrC,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,OAAO,CAAA;IACf,SAAS,EAAE,OAAO,CAAA;IAClB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;CACrB,CAQA;AAGD,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,kBAAkB,EAAE,OAAO,GAAG,YAAY,CAAC,GAAG,YAAY,CAc/G;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,CASzD;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,kBAAkB,CAAC,GAAG,YAAY,CAe/F;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,YAAY,CA+BjE;AAED,wBAAgB,gBAAgB,IAAI,kBAAkB,GAAG,IAAI,CAI5D;AAED,wBAAgB,YAAY,IAAI,kBAAkB,EAAE,CAGnD;AAED,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED,wBAAgB,cAAc,IAAI;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAG9F"} \ No newline at end of file +{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,YAAY,EACZ,kBAAkB,EAGnB,MAAM,YAAY,CAAA;AA+TnB,wBAAgB,SAAS,IAAI,YAAY,CAsExC;AAqFD,wBAAgB,SAAS,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAInD;AAMD,wBAAgB,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,CAAC,GAAG,CAAC,CAOhE;AAED,wBAAsB,aAAa,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAE9D;AAED,wBAAgB,mBAAmB,IAAI;IACrC,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,OAAO,CAAA;IACf,SAAS,EAAE,OAAO,CAAA;IAClB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;CACrB,CAQA;AAGD,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,kBAAkB,EAAE,OAAO,GAAG,YAAY,CAAC,GAAG,YAAY,CAc/G;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,CASzD;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,kBAAkB,CAAC,GAAG,YAAY,CAe/F;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,YAAY,CA+BjE;AAED,wBAAgB,gBAAgB,IAAI,kBAAkB,GAAG,IAAI,CAI5D;AAED,wBAAgB,YAAY,IAAI,kBAAkB,EAAE,CAGnD;AAED,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED,wBAAgB,cAAc,IAAI;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAG9F"} \ No newline at end of file diff --git a/dist/store.js b/dist/store.js index ce9f496..8843dd4 100644 --- a/dist/store.js +++ b/dist/store.js @@ -2,6 +2,7 @@ import * as fs from 'fs'; import * as path from 'path'; import * as os from 'os'; import * as crypto from 'node:crypto'; +import { withFileLock } from './file-lock.js'; import { hasMeaningfulRateLimits } from './rate-limits.js'; const STORE_DIR_ENV = 'OPENCODE_MULTI_AUTH_STORE_DIR'; const STORE_FILE_ENV = 'OPENCODE_MULTI_AUTH_STORE_FILE'; @@ -24,8 +25,6 @@ const CURRENT_STORE_VERSION = 2; let storeLocked = false; let lastStoreError = null; let lastStoreEncrypted = false; -let writeLock = false; -let writeLockQueue = []; function ensureDir() { const dir = getStoreDir(); if (!fs.existsSync(dir)) { @@ -228,24 +227,6 @@ function loadLastKnownGood() { return null; } } -async function acquireWriteLock() { - if (!writeLock) { - writeLock = true; - return; - } - return new Promise((resolve) => { - writeLockQueue.push(resolve); - }); -} -function releaseWriteLock() { - const next = writeLockQueue.shift(); - if (next) { - next(); - } - else { - writeLock = false; - } -} function buildSnapshot(window) { if (!window) return undefined; @@ -351,7 +332,7 @@ export function loadStore() { } return emptyStore(); } -export function saveStore(store) { +function saveStoreUnlocked(store) { ensureDir(); if (storeLocked) { console.error('[multi-auth] Store locked; refusing to overwrite encrypted file.'); @@ -436,14 +417,24 @@ export function saveStore(store) { } saveLastKnownGood(store); } +export function saveStore(store) { + withFileLock(getStoreFile(), () => { + saveStoreUnlocked(store); + }); +} +function withStoreLock(fn) { + return withFileLock(getStoreFile(), fn); +} +export function mutateStore(fn) { + return withStoreLock(() => { + const store = loadStore(); + const result = fn(store); + saveStoreUnlocked(store); + return result; + }); +} export async function withWriteLock(fn) { - await acquireWriteLock(); - try { - return fn(); - } - finally { - releaseWriteLock(); - } + return withStoreLock(fn); } export function getStoreDiagnostics() { return { @@ -455,75 +446,75 @@ export function getStoreDiagnostics() { }; } export function addAccount(alias, creds) { - const store = loadStore(); - const entry = buildHistoryEntry(creds.rateLimits); - store.accounts[alias] = { - ...creds, - alias, - usageCount: 0, - rateLimitHistory: entry ? [entry] : creds.rateLimitHistory - }; - if (!store.activeAlias) { - store.activeAlias = alias; - } - saveStore(store); - return store; + return mutateStore((store) => { + const entry = buildHistoryEntry(creds.rateLimits); + store.accounts[alias] = { + ...creds, + alias, + usageCount: 0, + rateLimitHistory: entry ? [entry] : creds.rateLimitHistory + }; + if (!store.activeAlias) { + store.activeAlias = alias; + } + return store; + }); } export function removeAccount(alias) { - const store = loadStore(); - delete store.accounts[alias]; - if (store.activeAlias === alias) { - const remaining = Object.keys(store.accounts); - store.activeAlias = remaining[0] || null; - } - saveStore(store); - return store; + return mutateStore((store) => { + delete store.accounts[alias]; + if (store.activeAlias === alias) { + const remaining = Object.keys(store.accounts); + store.activeAlias = remaining[0] || null; + } + return store; + }); } export function updateAccount(alias, updates) { - const store = loadStore(); - if (store.accounts[alias]) { - const current = store.accounts[alias]; - const next = { ...current, ...updates }; - if (updates.rateLimits || next.rateLimits) { - const entry = buildHistoryEntry(next.rateLimits); - if (entry) { - next.rateLimitHistory = appendHistory(current.rateLimitHistory, entry); + return mutateStore((store) => { + if (store.accounts[alias]) { + const current = store.accounts[alias]; + const next = { ...current, ...updates }; + if (updates.rateLimits || next.rateLimits) { + const entry = buildHistoryEntry(next.rateLimits); + if (entry) { + next.rateLimitHistory = appendHistory(current.rateLimitHistory, entry); + } } + store.accounts[alias] = next; } - store.accounts[alias] = next; - saveStore(store); - } - return store; + return store; + }); } export function setActiveAlias(alias) { - const store = loadStore(); - const now = Date.now(); - const previousAlias = store.activeAlias; - if (alias === null) { - store.activeAlias = null; - } - else if (store.accounts[alias]) { - if (previousAlias && previousAlias !== alias && store.accounts[previousAlias]) { - store.accounts[previousAlias] = { - ...store.accounts[previousAlias], - lastActiveUntil: now - }; + return mutateStore((store) => { + const now = Date.now(); + const previousAlias = store.activeAlias; + if (alias === null) { + store.activeAlias = null; } - store.activeAlias = alias; - store.accounts[alias] = { - ...store.accounts[alias], - lastSeenAt: now, - lastActiveUntil: undefined - }; - const aliases = Object.keys(store.accounts); - const idx = aliases.indexOf(alias); - if (idx >= 0) { - store.rotationIndex = idx; + else if (store.accounts[alias]) { + if (previousAlias && previousAlias !== alias && store.accounts[previousAlias]) { + store.accounts[previousAlias] = { + ...store.accounts[previousAlias], + lastActiveUntil: now + }; + } + store.activeAlias = alias; + store.accounts[alias] = { + ...store.accounts[alias], + lastSeenAt: now, + lastActiveUntil: undefined + }; + const aliases = Object.keys(store.accounts); + const idx = aliases.indexOf(alias); + if (idx >= 0) { + store.rotationIndex = idx; + } + store.lastRotation = now; } - store.lastRotation = now; - } - saveStore(store); - return store; + return store; + }); } export function getActiveAccount() { const store = loadStore(); diff --git a/dist/store.js.map b/dist/store.js.map index 0686678..d186182 100644 --- a/dist/store.js.map +++ b/dist/store.js.map @@ -1 +1 @@ -{"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAA;AACxB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAA;AAC5B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAA;AACxB,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAA;AAQ1D,MAAM,aAAa,GAAG,+BAA+B,CAAA;AACrD,MAAM,cAAc,GAAG,gCAAgC,CAAA;AACvD,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,qBAAqB,CAAC,CAAA;AACnF,MAAM,kBAAkB,GAAG,eAAe,CAAA;AAE1C,SAAS,WAAW;IAClB,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAA;IAC3C,IAAI,QAAQ,IAAI,QAAQ,CAAC,IAAI,EAAE;QAAE,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAA;IACrE,OAAO,iBAAiB,CAAA;AAC1B,CAAC;AAED,SAAS,YAAY;IACnB,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAA;IAC5C,IAAI,QAAQ,IAAI,QAAQ,CAAC,IAAI,EAAE;QAAE,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAA;IACrE,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,kBAAkB,CAAC,CAAA;AACrD,CAAC;AAED,MAAM,oBAAoB,GAAG,6BAA6B,CAAA;AAC1D,MAAM,qBAAqB,GAAG,CAAC,CAAA;AAiC/B,IAAI,WAAW,GAAG,KAAK,CAAA;AACvB,IAAI,cAAc,GAAkB,IAAI,CAAA;AACxC,IAAI,kBAAkB,GAAG,KAAK,CAAA;AAC9B,IAAI,SAAS,GAAG,KAAK,CAAA;AACrB,IAAI,cAAc,GAAsB,EAAE,CAAA;AAE1C,SAAS,SAAS;IAChB,MAAM,GAAG,GAAG,WAAW,EAAE,CAAA;IACzB,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;IACrD,CAAC;AACH,CAAC;AAED,SAAS,UAAU;IACjB,OAAO;QACL,OAAO,EAAE,qBAAqB;QAC9B,QAAQ,EAAE,EAAE;QACZ,WAAW,EAAE,IAAI;QACjB,aAAa,EAAE,CAAC;QAChB,YAAY,EAAE,IAAI,CAAC,GAAG,EAAE;KACzB,CAAA;AACH,CAAC;AAED,SAAS,aAAa;IACpB,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAA;IAC/C,OAAO,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAA;AACxD,CAAC;AAED,SAAS,eAAe,CAAC,OAAY;IACnC,OAAO,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,SAAS,KAAK,IAAI,IAAI,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAA;AAC3F,CAAC;AAED,SAAS,SAAS,CAAC,UAAkB,EAAE,IAAY;IACjD,OAAO,MAAM,CAAC,UAAU,CAAC,UAAU,EAAE,IAAI,EAAE,EAAE,CAAC,CAAA;AAChD,CAAC;AAED,SAAS,YAAY,CAAC,KAAmB,EAAE,UAAkB;IAC3D,MAAM,IAAI,GAAG,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAA;IACnC,MAAM,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAA;IACjC,MAAM,GAAG,GAAG,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,CAAA;IACvC,MAAM,MAAM,GAAG,MAAM,CAAC,cAAc,CAAC,aAAa,EAAE,GAAG,EAAE,EAAE,CAAC,CAAA;IAC5D,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;IACxC,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;IACpF,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,EAAE,CAAA;IAC/B,OAAO;QACL,SAAS,EAAE,IAAI;QACf,OAAO,EAAE,qBAAqB;QAC9B,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAC7B,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC;QACzB,GAAG,EAAE,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAC3B,IAAI,EAAE,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC;KACnC,CAAA;AACH,CAAC;AAED,SAAS,YAAY,CAAC,IAAwB,EAAE,UAAkB;IAChE,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;IAC7C,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAA;IACzC,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAA;IAC3C,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;IAC7C,MAAM,GAAG,GAAG,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,CAAA;IACvC,MAAM,QAAQ,GAAG,MAAM,CAAC,gBAAgB,CAAC,aAAa,EAAE,GAAG,EAAE,EAAE,CAAC,CAAA;IAChE,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;IACxB,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;IAC3F,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,CAAiB,CAAA;AAC9C,CAAC;AAED,SAAS,eAAe,CAAC,GAAQ,EAAE,KAAa;IAC9C,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAA;IAChD,IAAI,OAAO,GAAG,CAAC,WAAW,KAAK,QAAQ,IAAI,CAAC,GAAG,CAAC,WAAW;QAAE,OAAO,IAAI,CAAA;IACxE,IAAI,OAAO,GAAG,CAAC,YAAY,KAAK,QAAQ,IAAI,CAAC,GAAG,CAAC,YAAY;QAAE,OAAO,IAAI,CAAA;IAC1E,IAAI,OAAO,GAAG,CAAC,SAAS,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAA;IAElD,MAAM,gBAAgB,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;QAC1D,CAAC,CAAC,GAAG,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,KAAU,EAAE,EAAE,CACzC,uBAAuB,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAC9E;QACH,CAAC,CAAC,SAAS,CAAA;IACb,MAAM,UAAU,GAAG,uBAAuB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAA;IAEvF,OAAO;QACL,KAAK;QACL,WAAW,EAAE,GAAG,CAAC,WAAW;QAC5B,YAAY,EAAE,GAAG,CAAC,YAAY;QAC9B,OAAO,EAAE,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;QAClE,SAAS,EAAE,OAAO,GAAG,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;QACxE,aAAa,EAAE,OAAO,GAAG,CAAC,aAAa,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS;QACpF,MAAM,EAAE,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;QAC/D,QAAQ,EAAE,OAAO,GAAG,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;QACrE,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,KAAK,EAAE,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;QAC5D,WAAW,EAAE,OAAO,GAAG,CAAC,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS;QAC9E,UAAU,EAAE,OAAO,GAAG,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS;QAC3E,eAAe,EAAE,OAAO,GAAG,CAAC,eAAe,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS;QAC1F,QAAQ,EAAE,OAAO,GAAG,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;QACrE,UAAU,EAAE,OAAO,GAAG,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QACnE,gBAAgB,EAAE,OAAO,GAAG,CAAC,gBAAgB,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS;QAC7F,qBAAqB,EAAE,OAAO,GAAG,CAAC,qBAAqB,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAAC,SAAS;QAC5G,kBAAkB,EAAE,OAAO,GAAG,CAAC,kBAAkB,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC,SAAS;QACnG,qBAAqB,EAAE,OAAO,GAAG,CAAC,qBAAqB,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAAC,SAAS;QAC5G,qBAAqB,EAAE,OAAO,GAAG,CAAC,qBAAqB,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAAC,SAAS;QAC5G,yBAAyB,EAAE,OAAO,GAAG,CAAC,yBAAyB,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC,CAAC,SAAS;QACxH,sBAAsB,EAAE,OAAO,GAAG,CAAC,sBAAsB,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC,CAAC,SAAS;QAC/G,yBAAyB,EAAE,OAAO,GAAG,CAAC,yBAAyB,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC,CAAC,SAAS;QACxH,WAAW,EAAE,OAAO,GAAG,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS;QAC/E,iBAAiB,EAAE,OAAO,GAAG,CAAC,iBAAiB,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,SAAS;QAChG,uCAAuC;QACvC,OAAO,EAAE,OAAO,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;QACnE,UAAU,EAAE,OAAO,GAAG,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS;QAC3E,UAAU,EAAE,OAAO,GAAG,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS;QAC3E,aAAa,EAAE,OAAO,GAAG,CAAC,aAAa,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS;QACpF,UAAU;QACV,gBAAgB,EAAE,gBAAgB,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS;QAChG,WAAW,EAAE,OAAO,GAAG,CAAC,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS;QAC9E,UAAU,EAAE,OAAO,GAAG,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS;QAC3E,gBAAgB,EAAE,OAAO,GAAG,CAAC,gBAAgB,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS;QAC7F,gBAAgB,EAAE,OAAO,GAAG,CAAC,gBAAgB,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS;QAC7F,gBAAgB,EACd,GAAG,CAAC,gBAAgB,KAAK,OAAO;YAChC,GAAG,CAAC,gBAAgB,KAAK,OAAO;YAChC,GAAG,CAAC,gBAAgB,KAAK,OAAO;YAChC,GAAG,CAAC,gBAAgB,KAAK,SAAS;YAChC,CAAC,CAAC,GAAG,CAAC,gBAAgB;YACtB,CAAC,CAAC,SAAS;QACf,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;QACpD,KAAK,EAAE,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;QAC5D,MAAM,EAAE,GAAG,CAAC,MAAM,KAAK,UAAU,IAAI,GAAG,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;KACrF,CAAA;AACH,CAAC;AAED,SAAS,aAAa,CAAC,IAAS;IAC9B,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAA;IAElD,MAAM,QAAQ,GAAuC,EAAE,CAAA;IACvD,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAA;IACjC,IAAI,WAAW,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE,CAAC;QACnD,KAAK,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;YACvD,MAAM,SAAS,GAAG,eAAe,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;YAC7C,IAAI,SAAS,EAAE,CAAC;gBACd,QAAQ,CAAC,KAAK,CAAC,GAAG,SAAS,CAAA;YAC7B,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO;QACL,OAAO,EAAE,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;QACpE,QAAQ;QACR,WAAW,EAAE,OAAO,IAAI,CAAC,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI;QAC3E,aAAa,EAAE,OAAO,IAAI,CAAC,aAAa,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;QAC9E,YAAY,EAAE,OAAO,IAAI,CAAC,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE;QACpF,sCAAsC;QACtC,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,IAAI;QACrC,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,IAAI;QACrC,wBAAwB,EAAE,IAAI,CAAC,wBAAwB,IAAI,IAAI;QAC/D,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,IAAI;QAC/B,mDAAmD;QACnD,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,IAAI,aAAa;QACxD,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,SAAS;KACrC,CAAA;AACH,CAAC;AAED,SAAS,aAAa,CAAC,IAAiB;IACtC,OAAO;QACL,GAAG,IAAI;QACP,OAAO,EAAE,CAAC;QACV,QAAQ,EAAE;YACR,gBAAgB,EAAE,aAAa;SAChC;QACD,KAAK,EAAE;YACL,WAAW,EAAE,IAAI;YACjB,WAAW,EAAE,IAAI;YACjB,wBAAwB,EAAE,IAAI;YAC9B,QAAQ,EAAE,IAAI;SACf;KACF,CAAA;AACH,CAAC;AAED,SAAS,YAAY,CAAC,IAAS;IAC7B,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAA;IAElD,MAAM,OAAO,GAAG,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAA;IAEnE,IAAI,OAAO,GAAG,qBAAqB,EAAE,CAAC;QACpC,OAAO,CAAC,IAAI,CAAC,8BAA8B,OAAO,4BAA4B,qBAAqB,4BAA4B,CAAC,CAAA;QAChI,OAAO,aAAa,CAAC,IAAI,CAAC,CAAA;IAC5B,CAAC;IAED,IAAI,QAAQ,GAAQ,IAAI,CAAA;IACxB,IAAI,OAAO,KAAK,CAAC,EAAE,CAAC;QAClB,QAAQ,GAAG,aAAa,CAAC,IAAmB,CAAC,CAAA;QAC7C,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAA;IAC1D,CAAC;IAED,OAAO,aAAa,CAAC,QAAQ,CAAC,CAAA;AAChC,CAAC;AAED,SAAS,oBAAoB;IAC3B,OAAO,GAAG,YAAY,EAAE,MAAM,CAAA;AAChC,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAmB;IAC5C,sEAAsE;IACtE,IAAI,aAAa,EAAE,EAAE,CAAC;QACpB,OAAM;IACR,CAAC;IAED,MAAM,OAAO,GAAG,oBAAoB,EAAE,CAAA;IACtC,IAAI,CAAC;QACH,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;IAC5E,CAAC;IAAC,MAAM,CAAC;QACP,SAAS;IACX,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB;IACxB,MAAM,OAAO,GAAG,oBAAoB,EAAE,CAAA;IACtC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAA;IACxC,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QAC/B,OAAO,aAAa,CAAC,MAAM,CAAC,CAAA;IAC9B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC;AAED,KAAK,UAAU,gBAAgB;IAC7B,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,SAAS,GAAG,IAAI,CAAA;QAChB,OAAM;IACR,CAAC;IACD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAC9B,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,SAAS,gBAAgB;IACvB,MAAM,IAAI,GAAG,cAAc,CAAC,KAAK,EAAE,CAAA;IACnC,IAAI,IAAI,EAAE,CAAC;QACT,IAAI,EAAE,CAAA;IACR,CAAC;SAAM,CAAC;QACN,SAAS,GAAG,KAAK,CAAA;IACnB,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,MAAiE;IACtF,IAAI,CAAC,MAAM;QAAE,OAAO,SAAS,CAAA;IAC7B,OAAO;QACL,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,OAAO,EAAE,MAAM,CAAC,OAAO;KACxB,CAAA;AACH,CAAC;AAED,SAAS,iBAAiB,CAAC,UAA6C;IACtE,IAAI,CAAC,uBAAuB,CAAC,UAAU,CAAC;QAAE,OAAO,IAAI,CAAA;IACrD,MAAM,eAAe,GAAG,CAAC,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,MAAM,CAC7F,CAAC,KAAK,EAAmB,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CACtD,CAAA;IACD,MAAM,EAAE,GAAG,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAA;IACjF,OAAO;QACL,EAAE;QACF,QAAQ,EAAE,aAAa,CAAC,UAAU,EAAE,QAAQ,CAAC;QAC7C,MAAM,EAAE,aAAa,CAAC,UAAU,EAAE,MAAM,CAAC;KAC1C,CAAA;AACH,CAAC;AAED,SAAS,aAAa,CACpB,OAA4C,EAC5C,KAA4B;IAE5B,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IACxC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IAClC,MAAM,IAAI,GACR,IAAI;QACJ,IAAI,CAAC,QAAQ,EAAE,SAAS,KAAK,KAAK,CAAC,QAAQ,EAAE,SAAS;QACtD,IAAI,CAAC,MAAM,EAAE,SAAS,KAAK,KAAK,CAAC,MAAM,EAAE,SAAS;QAClD,IAAI,CAAC,QAAQ,EAAE,OAAO,KAAK,KAAK,CAAC,QAAQ,EAAE,OAAO;QAClD,IAAI,CAAC,MAAM,EAAE,OAAO,KAAK,KAAK,CAAC,MAAM,EAAE,OAAO,CAAA;IAChD,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IAClB,CAAC;IACD,IAAI,IAAI,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;QACtB,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAA;IACtC,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,WAAW,GAAG,KAAK,CAAA;IACnB,cAAc,GAAG,IAAI,CAAA;IACrB,kBAAkB,GAAG,KAAK,CAAA;IAC1B,SAAS,EAAE,CAAA;IACX,MAAM,IAAI,GAAG,YAAY,EAAE,CAAA;IAC3B,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACxB,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;YAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;YAC/B,IAAI,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC5B,kBAAkB,GAAG,IAAI,CAAA;gBACzB,MAAM,UAAU,GAAG,aAAa,EAAE,CAAA;gBAClC,IAAI,CAAC,UAAU,EAAE,CAAC;oBAChB,WAAW,GAAG,IAAI,CAAA;oBAClB,cAAc,GAAG,2BAA2B,oBAAoB,aAAa,CAAA;oBAC7E,OAAO,UAAU,EAAE,CAAA;gBACrB,CAAC;gBACD,IAAI,CAAC;oBACH,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;oBAClD,MAAM,SAAS,GAAG,aAAa,CAAC,SAAS,CAAC,CAAA;oBAC1C,IAAI,SAAS,EAAE,CAAC;wBACd,iBAAiB,CAAC,SAAS,CAAC,CAAA;wBAC5B,OAAO,SAAS,CAAA;oBAClB,CAAC;oBACD,WAAW,GAAG,IAAI,CAAA;oBAClB,cAAc,GAAG,2CAA2C,CAAA;oBAC5D,MAAM,GAAG,GAAG,iBAAiB,EAAE,CAAA;oBAC/B,IAAI,GAAG,EAAE,CAAC;wBACR,OAAO,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAA;wBACnE,OAAO,GAAG,CAAA;oBACZ,CAAC;oBACD,OAAO,UAAU,EAAE,CAAA;gBACrB,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,WAAW,GAAG,IAAI,CAAA;oBAClB,cAAc,GAAG,4CAA4C,CAAA;oBAC7D,OAAO,CAAC,KAAK,CAAC,uCAAuC,EAAE,GAAG,CAAC,CAAA;oBAC3D,OAAO,UAAU,EAAE,CAAA;gBACrB,CAAC;YACH,CAAC;YAED,MAAM,QAAQ,GAAG,YAAY,CAAC,MAAM,CAAC,CAAA;YACrC,IAAI,QAAQ,EAAE,CAAC;gBACb,iBAAiB,CAAC,QAAQ,CAAC,CAAA;gBAC3B,OAAO,QAAQ,CAAA;YACjB,CAAC;YAED,WAAW,GAAG,IAAI,CAAA;YAClB,cAAc,GAAG,0BAA0B,CAAA;YAC3C,OAAO,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAA;YAErD,MAAM,GAAG,GAAG,iBAAiB,EAAE,CAAA;YAC/B,IAAI,GAAG,EAAE,CAAC;gBACR,OAAO,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAA;gBACnE,OAAO,GAAG,CAAA;YACZ,CAAC;YACD,OAAO,UAAU,EAAE,CAAA;QACrB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,WAAW,GAAG,IAAI,CAAA;YAClB,cAAc,GAAG,kDAAkD,CAAA;YACnE,OAAO,CAAC,KAAK,CAAC,qCAAqC,EAAE,GAAG,CAAC,CAAA;YAEzD,MAAM,GAAG,GAAG,iBAAiB,EAAE,CAAA;YAC/B,IAAI,GAAG,EAAE,CAAC;gBACR,OAAO,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAA;gBACnE,OAAO,GAAG,CAAA;YACZ,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,UAAU,EAAE,CAAA;AACrB,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,KAAmB;IAC3C,SAAS,EAAE,CAAA;IACX,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,CAAC,KAAK,CAAC,kEAAkE,CAAC,CAAA;QACjF,OAAM;IACR,CAAC;IAED,MAAM,IAAI,GAAG,YAAY,EAAE,CAAA;IAC3B,MAAM,UAAU,GAAG,aAAa,EAAE,CAAA;IAClC,MAAM,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;IACpE,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;IAE7C,IAAI,CAAC;QACH,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACxB,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,GAAG,IAAI,MAAM,CAAC,CAAA;YACpC,EAAE,CAAC,SAAS,CAAC,GAAG,IAAI,MAAM,EAAE,KAAK,CAAC,CAAA;QACpC,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,yBAAyB;IAC3B,CAAC;IAED,MAAM,GAAG,GAAG,GAAG,IAAI,QAAQ,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE,CAAA;IACtD,IAAI,EAAE,GAAkB,IAAI,CAAA;IAE5B,IAAI,CAAC;QACH,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,CAAA;QACjC,EAAE,CAAC,aAAa,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAA;QACjD,IAAI,CAAC;YACH,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAA;QAClB,CAAC;QAAC,MAAM,CAAC;YACP,8CAA8C;QAChD,CAAC;IACH,CAAC;YAAS,CAAC;QACT,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;YAChB,IAAI,CAAC;gBACH,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAA;YAClB,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS;YACX,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,CAAC;QACH,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;IAC1B,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,IAAI,GAAG,EAAE,IAAI,KAAK,OAAO,IAAI,GAAG,EAAE,IAAI,KAAK,QAAQ,EAAE,CAAC;YACpD,IAAI,CAAC;gBACH,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;YACrB,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS;YACX,CAAC;YACD,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;QAC1B,CAAC;aAAM,CAAC;YACN,IAAI,CAAC;gBACH,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;YACpB,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS;YACX,CAAC;YACD,MAAM,GAAG,CAAA;QACX,CAAC;IACH,CAAC;IAED,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,EAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,EAAE,GAAG,CAAC,CAAA;QAC7C,IAAI,CAAC;YACH,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;QACrB,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;QACD,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;IACrB,CAAC;IAAC,MAAM,CAAC;QACP,SAAS;IACX,CAAC;IAED,IAAI,CAAC;QACH,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,SAAS;IACX,CAAC;IAED,iBAAiB,CAAC,KAAK,CAAC,CAAA;AAC1B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAI,EAAW;IAChD,MAAM,gBAAgB,EAAE,CAAA;IACxB,IAAI,CAAC;QACH,OAAO,EAAE,EAAE,CAAA;IACb,CAAC;YAAS,CAAC;QACT,gBAAgB,EAAE,CAAA;IACpB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,mBAAmB;IAOjC,OAAO;QACL,QAAQ,EAAE,WAAW,EAAE;QACvB,SAAS,EAAE,YAAY,EAAE;QACzB,MAAM,EAAE,WAAW;QACnB,SAAS,EAAE,kBAAkB;QAC7B,KAAK,EAAE,cAAc;KACtB,CAAA;AACH,CAAC;AAGD,MAAM,UAAU,UAAU,CAAC,KAAa,EAAE,KAAuD;IAC/F,MAAM,KAAK,GAAG,SAAS,EAAE,CAAA;IACzB,MAAM,KAAK,GAAG,iBAAiB,CAAC,KAAK,CAAC,UAAU,CAAC,CAAA;IACjD,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG;QACtB,GAAG,KAAK;QACR,KAAK;QACL,UAAU,EAAE,CAAC;QACb,gBAAgB,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,gBAAgB;KAC3D,CAAA;IACD,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;QACvB,KAAK,CAAC,WAAW,GAAG,KAAK,CAAA;IAC3B,CAAC;IACD,SAAS,CAAC,KAAK,CAAC,CAAA;IAChB,OAAO,KAAK,CAAA;AACd,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAa;IACzC,MAAM,KAAK,GAAG,SAAS,EAAE,CAAA;IACzB,OAAO,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;IAC5B,IAAI,KAAK,CAAC,WAAW,KAAK,KAAK,EAAE,CAAC;QAChC,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;QAC7C,KAAK,CAAC,WAAW,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,IAAI,CAAA;IAC1C,CAAC;IACD,SAAS,CAAC,KAAK,CAAC,CAAA;IAChB,OAAO,KAAK,CAAA;AACd,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAa,EAAE,OAAoC;IAC/E,MAAM,KAAK,GAAG,SAAS,EAAE,CAAA;IACzB,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;QACrC,MAAM,IAAI,GAAG,EAAE,GAAG,OAAO,EAAE,GAAG,OAAO,EAAE,CAAA;QACvC,IAAI,OAAO,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YAC1C,MAAM,KAAK,GAAG,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;YAChD,IAAI,KAAK,EAAE,CAAC;gBACV,IAAI,CAAC,gBAAgB,GAAG,aAAa,CAAC,OAAO,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAA;YACxE,CAAC;QACH,CAAC;QACD,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,IAAI,CAAA;QAC5B,SAAS,CAAC,KAAK,CAAC,CAAA;IAClB,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAoB;IACjD,MAAM,KAAK,GAAG,SAAS,EAAE,CAAA;IACzB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;IACtB,MAAM,aAAa,GAAG,KAAK,CAAC,WAAW,CAAA;IAEvC,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACnB,KAAK,CAAC,WAAW,GAAG,IAAI,CAAA;IAC1B,CAAC;SAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACjC,IAAI,aAAa,IAAI,aAAa,KAAK,KAAK,IAAI,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;YAC9E,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,GAAG;gBAC9B,GAAG,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC;gBAChC,eAAe,EAAE,GAAG;aACrB,CAAA;QACH,CAAC;QAED,KAAK,CAAC,WAAW,GAAG,KAAK,CAAA;QACzB,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG;YACtB,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;YACxB,UAAU,EAAE,GAAG;YACf,eAAe,EAAE,SAAS;SAC3B,CAAA;QAED,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;QAC3C,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;QAClC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;YACb,KAAK,CAAC,aAAa,GAAG,GAAG,CAAA;QAC3B,CAAC;QACD,KAAK,CAAC,YAAY,GAAG,GAAG,CAAA;IAC1B,CAAC;IACD,SAAS,CAAC,KAAK,CAAC,CAAA;IAChB,OAAO,KAAK,CAAA;AACd,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,MAAM,KAAK,GAAG,SAAS,EAAE,CAAA;IACzB,IAAI,CAAC,KAAK,CAAC,WAAW;QAAE,OAAO,IAAI,CAAA;IACnC,OAAO,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,IAAI,CAAA;AAClD,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,MAAM,KAAK,GAAG,SAAS,EAAE,CAAA;IACzB,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;AACtC,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,OAAO,YAAY,EAAE,CAAA;AACvB,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,MAAM,IAAI,GAAG,mBAAmB,EAAE,CAAA;IAClC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAA;AAC9E,CAAC"} \ No newline at end of file +{"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/types.d.ts b/dist/types.d.ts index 1cb55f6..1110bcc 100644 --- a/dist/types.d.ts +++ b/dist/types.d.ts @@ -72,7 +72,7 @@ export interface AccountStore { forcedUntil?: number | null; previousRotationStrategy?: string | null; forcedBy?: string | null; - rotationStrategy?: 'round-robin' | 'least-used' | 'random' | 'weighted-round-robin'; + rotationStrategy?: 'round-robin' | 'least-used' | 'random' | 'weighted-round-robin' | 'use-up'; settings?: RotationSettings; } export interface OpenAIModel { @@ -82,7 +82,7 @@ export interface OpenAIModel { owned_by: string; } export interface PluginConfig { - rotationStrategy: 'round-robin' | 'least-used' | 'random' | 'weighted-round-robin'; + rotationStrategy: 'round-robin' | 'least-used' | 'random' | 'weighted-round-robin' | 'use-up'; autoRefreshTokens: boolean; rateLimitCooldownMs: number; modelUnsupportedCooldownMs: number; @@ -111,10 +111,15 @@ export interface ProviderModel { } export declare const DEFAULT_CONFIG: PluginConfig; export interface RotationSettings { - rotationStrategy: 'round-robin' | 'least-used' | 'random' | 'weighted-round-robin'; + rotationStrategy: 'round-robin' | 'least-used' | 'random' | 'weighted-round-robin' | 'use-up'; + debug?: boolean; criticalThreshold: number; lowThreshold: number; accountWeights: Record; + stickySessionRouting: boolean; + sessionIdleTimeoutMs: number; + sessionStickyFallback: 'rotate' | 'fail'; + useUpOrder?: string[]; featureFlags?: FeatureFlags; updatedAt?: number; updatedBy?: string; diff --git a/dist/types.d.ts.map b/dist/types.d.ts.map index 9e46893..a50be51 100644 --- a/dist/types.d.ts.map +++ b/dist/types.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/types.js b/dist/types.js index 1dc86f2..d0e5964 100644 --- a/dist/types.js +++ b/dist/types.js @@ -41,9 +41,13 @@ export const DEFAULT_FEATURE_FLAGS = { // Phase F: Default settings export const DEFAULT_ROTATION_SETTINGS = { rotationStrategy: 'round-robin', + debug: false, criticalThreshold: 10, lowThreshold: 30, accountWeights: {}, + stickySessionRouting: true, + sessionIdleTimeoutMs: 30 * 24 * 60 * 60 * 1000, // 30 days + sessionStickyFallback: 'fail', featureFlags: { ...DEFAULT_FEATURE_FLAGS } }; // Phase F: Preset configurations @@ -125,6 +129,15 @@ export function validateSettings(settings) { }); } } + if (settings.sessionStickyFallback !== undefined && + settings.sessionStickyFallback !== 'rotate' && + settings.sessionStickyFallback !== 'fail') { + errors.push({ + field: 'sessionStickyFallback', + message: 'Session sticky fallback must be rotate or fail', + constraint: "sessionStickyFallback in ['rotate', 'fail']" + }); + } return errors; } //# sourceMappingURL=types.js.map \ No newline at end of file diff --git a/dist/types.js.map b/dist/types.js.map index 6ab5731..050f8d6 100644 --- a/dist/types.js.map +++ b/dist/types.js.map @@ -1 +1 @@ -{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/web.d.ts.map b/dist/web.d.ts.map index ff885b0..585f548 100644 --- a/dist/web.d.ts.map +++ b/dist/web.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"web.d.ts","sourceRoot":"","sources":["../src/web.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AAoFjC,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAErD;AA0nGD,wBAAgB,eAAe,CAAC,OAAO,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,MAAM,CAyrBvF"} \ No newline at end of file +{"version":3,"file":"web.d.ts","sourceRoot":"","sources":["../src/web.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AAqFjC,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAErD;AAq5GD,wBAAgB,eAAe,CAAC,OAAO,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,MAAM,CAuuBvF"} \ No newline at end of file diff --git a/dist/web.js b/dist/web.js index f41a7c4..6b12334 100644 --- a/dist/web.js +++ b/dist/web.js @@ -10,9 +10,10 @@ import { createAuthorizationFlow, loginAccount, refreshToken } from './auth.js'; import { getCodexAuthPath, getCodexAuthStatus, getCodexAuthSummary, resolveAliasForCurrentAuth, syncCodexAuthFile, writeCodexAuthForAlias } from './codex-auth.js'; import { getStoreStatus, listAccounts, loadStore, removeAccount, updateAccount } from './store.js'; import { getRefreshQueueState, startRefreshQueue, stopRefreshQueue } from './refresh-queue.js'; -import { getLogPath, logError, logInfo, readLogTail } from './logger.js'; +import { getLogPath, isDebugEnabled, isDebugEnvOverrideActive, logError, logInfo, readLogTail } from './logger.js'; import { getForceState, activateForce, clearForce, isForceActive, getRemainingForceTimeMs, formatForceDuration } from './force-mode.js'; import { getSettings, getRuntimeSettings, isFeatureEnabled } from './settings.js'; +import { listSessions, sessionCountByAlias, clearSession, clearSessionsForAlias } from './session-store.js'; import { Errors } from './errors.js'; const DEFAULT_HOST = '127.0.0.1'; const DEFAULT_PORT = 3434; @@ -635,6 +636,22 @@ const HTML = ` overflow: auto; white-space: pre-wrap; } + .log-entry-collapsible { + display: block; + margin: 2px 0; + } + .log-entry-collapsible summary { + cursor: pointer; + color: #9fb4d0; + outline: none; + } + .log-entry-collapsible summary:hover { + color: #d6dde8; + } + .log-entry-full { + display: block; + margin-top: 4px; + } .ag-grid { display: grid; gap: 12px; @@ -780,6 +797,63 @@ const HTML = ` font-family: inherit; font-size: 13px; } + #useUpOrderSection { + margin-top: 14px; + padding-top: 12px; + border-top: 1px solid var(--border); + } + #useUpOrderSection .use-up-header { + font-size: 12px; + color: var(--muted); + margin-bottom: 8px; + } + .use-up-list { + list-style: none; + padding: 0; + margin: 0 0 10px 0; + } + .use-up-row { + display: flex; + align-items: center; + gap: 8px; + padding: 6px 10px; + border: 1px solid var(--border); + border-radius: 6px; + margin-bottom: 4px; + background: var(--panel-2); + } + .use-up-position { + font-size: 11px; + color: var(--muted); + width: 18px; + text-align: right; + flex-shrink: 0; + } + .use-up-alias { + flex: 1; + font-family: monospace; + font-size: 13px; + } + .use-up-move { + background: none; + border: 1px solid var(--border); + border-radius: 3px; + cursor: pointer; + padding: 2px 7px; + font-size: 12px; + color: var(--text); + line-height: 1.4; + width: auto; + } + .use-up-move:disabled { + opacity: 0.25; + cursor: default; + } + .use-up-save { + font-size: 12px; + padding: 5px 14px; + width: auto; + } @media (max-width: 720px) { header { padding: 26px 18px 10px; } .header-bar { flex-direction: column; align-items: stretch; } @@ -870,13 +944,29 @@ const HTML = ` + ? +
+ + + ? +
+
+ @@ -906,8 +996,16 @@ const HTML = `
Logs
- +
+ + +
+

       
     
@@ -964,6 +1062,10 @@ const HTML = `
       const logBox = document.getElementById('logBox')
       const refreshLogsBtn = document.getElementById('refreshLogsBtn')
       const logPathEl = document.getElementById('logPath')
+      const debugLogToggle = document.getElementById('debugLogToggle')
+      const debugLogToggleText = document.getElementById('debugLogToggleText')
+      const debugLogToggleLabel = document.getElementById('debugLogToggleLabel')
+      const debugLogStatus = document.getElementById('debugLogStatus')
       const openAccountModalBtn = document.getElementById('openAccountModalBtn')
       const addAliasInput = document.getElementById('addAliasInput')
       const addAccountBtn = document.getElementById('addAccountBtn')
@@ -1003,6 +1105,13 @@ const HTML = `
       const rotationStrategySelect = document.getElementById('rotationStrategySelect')
       const rotationStrategyStatus = document.getElementById('rotationStrategyStatus')
       const rotationStrategyHelpIcon = document.getElementById('rotationStrategyHelpIcon')
+      const sessionStickyFallbackSelect = document.getElementById('sessionStickyFallbackSelect')
+      const sessionStickyFallbackStatus = document.getElementById('sessionStickyFallbackStatus')
+      const sessionStickyFallbackHelpIcon = document.getElementById('sessionStickyFallbackHelpIcon')
+      const useUpOrderSection = document.getElementById('useUpOrderSection')
+      const useUpOrderList = document.getElementById('useUpOrderList')
+      const useUpOrderStatus = document.getElementById('useUpOrderStatus')
+      const saveUseUpOrderBtn = document.getElementById('saveUseUpOrderBtn')
 
       let latestState = null
       let pollTimer = null
@@ -1013,10 +1122,15 @@ const HTML = `
         'round-robin': 'Cycle through enabled accounts in order.',
         'least-used': 'Prefer the enabled account with the lowest usage count.',
         'random': 'Randomly pick from healthy accounts each request.',
-        'weighted-round-robin': 'Split requests by your account weights (example: 0.70/0.20/0.10 sends about 70%/20%/10%). Limited or disabled accounts are skipped automatically.'
+        'weighted-round-robin': 'Split requests by your account weights (example: 0.70/0.20/0.10 sends about 70%/20%/10%). Limited or disabled accounts are skipped automatically.',
+        'use-up': 'Drain each account fully before moving to the next. Accounts are used in the order configured below until rate-limited, then the next account takes over.'
       }
       const forceModeHelpText = 'Force mode pins all requests to one selected account for up to 24 hours. While force mode is on, rotation strategy is paused.'
       const forceAliasHelpText = 'Choose the account that force mode should pin.'
+      const sessionStickyFallbackHelp = {
+        fail: 'Pinned sessions fail when their account is unavailable. This preserves account-scoped response state and avoids silently breaking session continuity.',
+        rotate: 'Pinned sessions move to another healthy account when their account is unavailable. This improves availability but may break account-scoped response state.'
+      }
 
       function showToast(text) {
         toast.textContent = text
@@ -1039,6 +1153,66 @@ const HTML = `
         return rotationStrategyHelp[strategy] || 'Rotation strategy controls how the next account is selected.'
       }
 
+      // --- Use-up order panel ---
+
+      let useUpCurrentOrder = []
+
+      function renderUseUpOrderPanel(strategy, accounts, savedOrder) {
+        if (!useUpOrderSection) return
+        if (strategy !== 'use-up') {
+          useUpOrderSection.style.display = 'none'
+          return
+        }
+        useUpOrderSection.style.display = 'block'
+
+        // Build ordered list: saved aliases first (filtered to existing), then any remaining
+        const allAliases = (accounts || []).map(a => a.alias)
+        const ordered = [
+          ...savedOrder.filter(a => allAliases.includes(a)),
+          ...allAliases.filter(a => !savedOrder.includes(a))
+        ]
+        useUpCurrentOrder = [...ordered]
+
+        if (!useUpOrderList) return
+        useUpOrderList.innerHTML = ordered.map(function(alias, i) {
+          return '
  • ' + + '' + (i + 1) + '.' + + '' + escapeHtml(alias) + '' + + '' + + '' + + '
  • ' + }).join('') + + useUpOrderList.querySelectorAll('.use-up-move').forEach(btn => { + btn.addEventListener('click', () => { + const dir = btn.getAttribute('data-dir') + const idx = parseInt(btn.getAttribute('data-index'), 10) + const swapIdx = dir === 'up' ? idx - 1 : idx + 1 + if (swapIdx < 0 || swapIdx >= useUpCurrentOrder.length) return + ;[useUpCurrentOrder[idx], useUpCurrentOrder[swapIdx]] = [useUpCurrentOrder[swapIdx], useUpCurrentOrder[idx]] + renderUseUpOrderPanel(strategy, accounts, useUpCurrentOrder) + }) + }) + if (useUpOrderStatus) useUpOrderStatus.textContent = '' + } + + async function saveUseUpOrder() { + if (!saveUseUpOrderBtn || !useUpOrderStatus) return + saveUseUpOrderBtn.disabled = true + try { + await api('/api/settings', { + method: 'PUT', + body: JSON.stringify({ useUpOrder: useUpCurrentOrder, actor: 'dashboard' }) + }) + if (useUpOrderStatus) useUpOrderStatus.textContent = 'Saved.' + setTimeout(() => { if (useUpOrderStatus) useUpOrderStatus.textContent = '' }, 2000) + } catch (err) { + if (useUpOrderStatus) useUpOrderStatus.textContent = 'Error: ' + err.message + } finally { + saveUseUpOrderBtn.disabled = false + } + } + function renderControlHelp(strategy) { if (forceToggleLabel) { forceToggleLabel.title = forceModeHelpText @@ -1073,6 +1247,24 @@ const HTML = ` if (rotationStrategyStatus) { rotationStrategyStatus.textContent = 'Rotation strategy: ' + strategy + ' — ' + description + forceNotice } + // Show/hide use-up order panel based on strategy + renderUseUpOrderPanel(strategy, latestState?.accounts, latestState?.useUpOrder ?? []) + } + + function renderSessionStickyFallback(value) { + const fallback = value === 'rotate' ? 'rotate' : 'fail' + const description = sessionStickyFallbackHelp[fallback] + if (sessionStickyFallbackSelect) { + sessionStickyFallbackSelect.value = fallback + sessionStickyFallbackSelect.title = description + sessionStickyFallbackSelect.disabled = false + } + if (sessionStickyFallbackHelpIcon) { + sessionStickyFallbackHelpIcon.title = description + } + if (sessionStickyFallbackStatus) { + sessionStickyFallbackStatus.textContent = 'Session fallback: ' + fallback + ' — ' + description + } } async function api(path, options) { @@ -1121,6 +1313,18 @@ const HTML = ` .replace(/'/g, ''') } + function renderLogLine(line) { + const text = String(line || '') + const collapseAt = 500 + const previewLength = 220 + if (text.length <= collapseAt) return escapeHtml(text) + const preview = text.slice(0, previewLength).trimEnd() + return '
    ' + + '' + escapeHtml(preview) + '... (' + text.length + ' chars, click to expand)' + + '' + escapeHtml(text) + '' + + '
    ' + } + function remainingPercent(window) { if (!window || typeof window.remaining !== 'number' || typeof window.limit !== 'number') return null if (window.limit === 0) return null @@ -1421,6 +1625,26 @@ const HTML = ` notice.textContent = state.lastSyncError || storeStatus.error || '' } + function renderDebugLogging(state) { + if (!debugLogToggle || !debugLogToggleText) return + const enabled = Boolean(state.debugEnabled) + const persisted = Boolean(state.debugPersisted) + const envOverride = Boolean(state.debugEnvOverride) + debugLogToggle.checked = enabled + debugLogToggle.disabled = envOverride + debugLogToggleText.textContent = enabled ? (envOverride ? 'On (env)' : 'On') : 'Off' + if (debugLogToggleLabel) { + debugLogToggleLabel.title = envOverride + ? 'Debug logging is forced on by OPENCODE_MULTI_AUTH_DEBUG' + : 'Toggle per-request debug logging' + } + if (debugLogStatus) { + debugLogStatus.textContent = envOverride + ? 'Debug logging is forced on by OPENCODE_MULTI_AUTH_DEBUG.' + : (persisted ? 'Debug logging is enabled.' : 'Debug logging is disabled.') + } + } + function renderLogin(state) { if (!loginNotice) return if (state.login) { @@ -1729,13 +1953,15 @@ const HTML = ` async function refreshLogs() { const logs = await api('/api/logs') logPathEl.textContent = logs.path ? \`Path: \${logs.path}\` : '' - logBox.textContent = (logs.lines || []).join('\\n') || 'No logs yet.' + const lines = logs.lines || [] + logBox.innerHTML = lines.length ? lines.map(renderLogLine).join('\\n') : 'No logs yet.' } async function refreshState() { const state = await api('/api/state') latestState = state renderMeta(state) + renderDebugLogging(state) renderQueue(state) renderAccounts(state) renderLogin(state) @@ -2159,6 +2385,8 @@ const HTML = ` rotationStrategySelect.disabled = false renderRotationStrategyHelp(strategy) } + + renderSessionStickyFallback(latestState?.sessionStickyFallback || 'fail') } catch (err) { console.error('Failed to load force state:', err) if (forceStatus) { @@ -2167,6 +2395,9 @@ const HTML = ` if (rotationStrategyStatus) { rotationStrategyStatus.textContent = 'Failed to load strategy' } + if (sessionStickyFallbackStatus) { + sessionStickyFallbackStatus.textContent = 'Failed to load session fallback setting' + } } } @@ -2249,6 +2480,59 @@ const HTML = ` }) } + if (sessionStickyFallbackSelect) { + sessionStickyFallbackSelect.addEventListener('change', async () => { + const previous = latestState?.sessionStickyFallback || 'fail' + const sessionStickyFallback = sessionStickyFallbackSelect.value === 'rotate' ? 'rotate' : 'fail' + renderSessionStickyFallback(sessionStickyFallback) + sessionStickyFallbackSelect.disabled = true + try { + await api('/api/settings', { + method: 'PUT', + body: JSON.stringify({ + sessionStickyFallback, + actor: 'dashboard' + }) + }) + showToast('Session fallback set to ' + sessionStickyFallback) + await refreshState() + } catch (err) { + renderSessionStickyFallback(previous) + showToast('Error: ' + err.message) + } finally { + sessionStickyFallbackSelect.disabled = false + } + }) + } + + if (debugLogToggle) { + debugLogToggle.addEventListener('change', async () => { + const nextValue = debugLogToggle.checked + const previous = Boolean(latestState?.debugEnabled) + debugLogToggle.disabled = true + try { + await api('/api/settings', { + method: 'PUT', + body: JSON.stringify({ + debug: nextValue, + actor: 'dashboard' + }) + }) + showToast('Debug logging ' + (nextValue ? 'enabled' : 'disabled')) + await refreshState() + } catch (err) { + debugLogToggle.checked = previous + showToast('Error: ' + err.message) + } finally { + debugLogToggle.disabled = Boolean(latestState?.debugEnvOverride) + } + }) + } + + if (saveUseUpOrderBtn) { + saveUseUpOrderBtn.addEventListener('click', () => saveUseUpOrder()) + } + renderControlHelp('round-robin') refreshState().catch((err) => { console.error(err) @@ -3111,6 +3395,7 @@ export function startWebConsole(options) { const runtimeSettings = getRuntimeSettings(); const antigravityEnabled = settings.settings.featureFlags?.antigravityEnabled ?? false; const antigravity = antigravityEnabled ? loadAntigravityAccounts() : { accounts: [], path: ANTIGRAVITY_ACCOUNTS_FILE }; + const debugEnabled = isDebugEnabled(); const forceState = getForceState(); const forceActive = isForceActive(); const autoLogin = loadAutoLoginConfig(); @@ -3132,7 +3417,12 @@ export function startWebConsole(options) { recommendedAlias: recommendAlias(rawAccounts), logPath: getLogPath(), autoLogin, + debugEnabled, + debugPersisted: settings.settings.debug ?? false, + debugEnvOverride: isDebugEnvOverrideActive(), rotationStrategy: runtimeSettings.settings.rotationStrategy, + sessionStickyFallback: runtimeSettings.settings.sessionStickyFallback, + useUpOrder: runtimeSettings.settings.useUpOrder ?? [], force: { active: forceActive, alias: forceState.forcedAlias, @@ -3142,10 +3432,38 @@ export function startWebConsole(options) { remainingTime: formatForceDuration(getRemainingForceTimeMs()) }, // Phase G: Include feature flags in state - featureFlags: settings.settings.featureFlags || { antigravityEnabled: false } + featureFlags: settings.settings.featureFlags || { antigravityEnabled: false }, + sessions: { + count: listSessions().length, + byAlias: sessionCountByAlias() + } }); return; } + if (req.method === 'GET' && path === '/api/sessions') { + sendJson(res, 200, { sessions: listSessions() }); + return; + } + if (req.method === 'DELETE' && path.startsWith('/api/sessions/')) { + const sessionId = decodeURIComponent(path.slice('/api/sessions/'.length)); + if (!sessionId) { + sendJson(res, 400, { error: 'Missing session ID' }); + return; + } + clearSession(sessionId); + sendJson(res, 200, { ok: true }); + return; + } + if (req.method === 'DELETE' && path.startsWith('/api/accounts/') && path.endsWith('/sessions')) { + const alias = decodeURIComponent(path.slice('/api/accounts/'.length, -'/sessions'.length)); + if (!alias) { + sendJson(res, 400, { error: 'Missing alias' }); + return; + } + clearSessionsForAlias(alias); + sendJson(res, 200, { ok: true }); + return; + } if (req.method === 'GET' && path === '/api/logs') { const limitParam = requestUrl.searchParams.get('limit'); const limit = limitParam ? Number(limitParam) : undefined; @@ -3579,6 +3897,9 @@ export function startWebConsole(options) { if (body.rotationStrategy) { updates.rotationStrategy = body.rotationStrategy; } + if (typeof body.debug === 'boolean') { + updates.debug = body.debug; + } if (typeof body.criticalThreshold === 'number') { updates.criticalThreshold = body.criticalThreshold; } @@ -3588,6 +3909,12 @@ export function startWebConsole(options) { if (body.accountWeights) { updates.accountWeights = body.accountWeights; } + if (Array.isArray(body.useUpOrder)) { + updates.useUpOrder = body.useUpOrder.filter((v) => typeof v === 'string'); + } + if (body.sessionStickyFallback === 'fail' || body.sessionStickyFallback === 'rotate') { + updates.sessionStickyFallback = body.sessionStickyFallback; + } // Phase G: Handle feature flags if (body.featureFlags && typeof body.featureFlags === 'object') { updates.featureFlags = body.featureFlags; diff --git a/dist/web.js.map b/dist/web.js.map index a4022b5..fe0b6c9 100644 --- a/dist/web.js.map +++ b/dist/web.js.map @@ -1 +1 @@ -{"version":3,"file":"web.js","sourceRoot":"","sources":["../src/web.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAA;AAC7B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AACjC,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;AACnC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAA;AAC7B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AACjC,OAAO,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AAC7C,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AACrC,OAAO,EAAE,uBAAuB,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAC/E,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,0BAA0B,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAA;AAClK,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAClG,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAC9F,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AACxE,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,UAAU,EAAE,aAAa,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AACvI,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAkB,gBAAgB,EAAE,MAAM,eAAe,CAAA;AACjG,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAGpC,MAAM,YAAY,GAAG,WAAW,CAAA;AAChC,MAAM,YAAY,GAAG,IAAI,CAAA;AACzB,MAAM,sBAAsB,GAAG,iCAAiC,CAAA;AAChE,MAAM,gBAAgB,GAAG,IAAI,CAAA;AAC7B,MAAM,gBAAgB,GAAG,GAAG,CAAA;AAC5B,MAAM,yBAAyB,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,2BAA2B,CAAC,CAAA;AAC7G,MAAM,gBAAgB,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAA;AACtC,MAAM,qBAAqB,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAA;AAC3C,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;AAC/D,MAAM,qBAAqB,GAAG,uCAAuC,CAAA;AACrE,MAAM,0BAA0B,GAAG,iDAAiD,CAAA;AACpF,MAAM,qBAAqB,GAAG,uCAAuC,CAAA;AACrE,MAAM,mCAAmC,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,qBAAqB,EAAE,kBAAkB,CAAC,CAAA;AACzH,MAAM,8BAA8B,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,qBAAqB,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAA;AAsD1H,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,OAAO,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAA;AACjD,CAAC;AAED,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAA;AAEjC,IAAI,UAAU,GAAG,CAAC,CAAA;AAClB,IAAI,aAAa,GAAkB,IAAI,CAAA;AACvC,IAAI,aAAa,GAAkB,IAAI,CAAA;AACvC,IAAI,SAAS,GAA0B,IAAI,CAAA;AAC3C,IAAI,YAAY,GAA6B,IAAI,CAAA;AACjD,IAAI,cAAc,GAAkB,IAAI,CAAA;AACxC,IAAI,qBAAqB,GAA0B,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAA;AACtF,IAAI,wBAAwB,GAA0C,IAAI,CAAA;AAC1E,IAAI,cAAc,GAAoC,IAAI,CAAA;AAE1D,MAAM,IAAI,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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"} \ No newline at end of file +{"version":3,"file":"web.js","sourceRoot":"","sources":["../src/web.ts"],"names":[],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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"} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index a55f7b4..6805e00 100644 --- a/package-lock.json +++ b/package-lock.json @@ -60,7 +60,6 @@ "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@babel/code-frame": "^7.29.0", "@babel/generator": "^7.29.0", @@ -1311,7 +1310,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "baseline-browser-mapping": "^2.9.0", "caniuse-lite": "^1.0.30001759", @@ -2157,7 +2155,6 @@ "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@jest/core": "^29.7.0", "@jest/types": "^29.6.3", @@ -3669,7 +3666,6 @@ "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "dev": true, "license": "Apache-2.0", - "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000..b63d3fa --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,364 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@openauthjs/openauth': + specifier: ^0.4.3 + version: 0.4.3(arctic@2.3.4)(hono@4.12.16) + devDependencies: + '@opencode-ai/plugin': + specifier: ^1.0.193 + version: 1.14.31 + '@opencode-ai/sdk': + specifier: ^1.0.193 + version: 1.14.31 + '@types/node': + specifier: ^22.10.2 + version: 22.19.17 + typescript: + specifier: ^5.7.2 + version: 5.9.3 + +packages: + + '@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.3': + resolution: {integrity: sha512-QZHtlVgbAdy2zAqNA9Gu1UpIuI8Xvsd1v8ic6B2pZmeFnFcMWiPLfWXh7TVw4eGEZ/C9TH281KwhVoeQUKbyjw==} + cpu: [arm64] + os: [darwin] + + '@msgpackr-extract/msgpackr-extract-darwin-x64@3.0.3': + resolution: {integrity: sha512-mdzd3AVzYKuUmiWOQ8GNhl64/IoFGol569zNRdkLReh6LRLHOXxU4U8eq0JwaD8iFHdVGqSy4IjFL4reoWCDFw==} + cpu: [x64] + os: [darwin] + + '@msgpackr-extract/msgpackr-extract-linux-arm64@3.0.3': + resolution: {integrity: sha512-YxQL+ax0XqBJDZiKimS2XQaf+2wDGVa1enVRGzEvLLVFeqa5kx2bWbtcSXgsxjQB7nRqqIGFIcLteF/sHeVtQg==} + cpu: [arm64] + os: [linux] + + '@msgpackr-extract/msgpackr-extract-linux-arm@3.0.3': + resolution: {integrity: sha512-fg0uy/dG/nZEXfYilKoRe7yALaNmHoYeIoJuJ7KJ+YyU2bvY8vPv27f7UKhGRpY6euFYqEVhxCFZgAUNQBM3nw==} + cpu: [arm] + os: [linux] + + '@msgpackr-extract/msgpackr-extract-linux-x64@3.0.3': + resolution: {integrity: sha512-cvwNfbP07pKUfq1uH+S6KJ7dT9K8WOE4ZiAcsrSes+UY55E/0jLYc+vq+DO7jlmqRb5zAggExKm0H7O/CBaesg==} + cpu: [x64] + os: [linux] + + '@msgpackr-extract/msgpackr-extract-win32-x64@3.0.3': + resolution: {integrity: sha512-x0fWaQtYp4E6sktbsdAqnehxDgEc/VwM7uLsRCYWaiGu0ykYdZPiS8zCWdnjHwyiumousxfBm4SO31eXqwEZhQ==} + cpu: [x64] + os: [win32] + + '@openauthjs/openauth@0.4.3': + resolution: {integrity: sha512-RlnjqvHzqcbFVymEwhlUEuac4utA5h4nhSK/i2szZuQmxTIqbGUxZ+nM+avM+VV4Ing+/ZaNLKILoXS3yrkOOw==} + peerDependencies: + arctic: ^2.2.2 + hono: ^4.0.0 + + '@opencode-ai/plugin@1.14.31': + resolution: {integrity: sha512-ZF7UoNKtZDtgW/2KrcFw5I7R2HRj/NigBuRwKPonvSZS36LnghZ7PYcXYZFGCjEgBmLUMMrLVgxccKLyxsgB0g==} + peerDependencies: + '@opentui/core': '>=0.2.0' + '@opentui/solid': '>=0.2.0' + peerDependenciesMeta: + '@opentui/core': + optional: true + '@opentui/solid': + optional: true + + '@opencode-ai/sdk@1.14.31': + resolution: {integrity: sha512-QaV+ti3NYUITmgIDqtNMqGIYBXJOx2zheN1g+7w4HC8QQsbaW1c7glxXExQHRbdUzcQPP2vUQhnXOcEsTw5CcQ==} + + '@oslojs/asn1@1.0.0': + resolution: {integrity: sha512-zw/wn0sj0j0QKbIXfIlnEcTviaCzYOY3V5rAyjR6YtOByFtJiT574+8p9Wlach0lZH9fddD4yb9laEAIl4vXQA==} + + '@oslojs/binary@1.0.0': + resolution: {integrity: sha512-9RCU6OwXU6p67H4NODbuxv2S3eenuQ4/WFLrsq+K/k682xrznH5EVWA7N4VFk9VYVcbFtKqur5YQQZc0ySGhsQ==} + + '@oslojs/crypto@1.0.1': + resolution: {integrity: sha512-7n08G8nWjAr/Yu3vu9zzrd0L9XnrJfpMioQcvCMxBIiF5orECHe5/3J0jmXRVvgfqMm/+4oxlQ+Sq39COYLcNQ==} + + '@oslojs/encoding@0.4.1': + resolution: {integrity: sha512-hkjo6MuIK/kQR5CrGNdAPZhS01ZCXuWDRJ187zh6qqF2+yMHZpD9fAYpX8q2bOO6Ryhl3XpCT6kUX76N8hhm4Q==} + + '@oslojs/encoding@1.1.0': + resolution: {integrity: sha512-70wQhgYmndg4GCPxPPxPGevRKqTIJ2Nh4OkiMWmDAVYsTQ+Ta7Sq+rPevXyXGdzr30/qZBnyOalCszoMxlyldQ==} + + '@oslojs/jwt@0.2.0': + resolution: {integrity: sha512-bLE7BtHrURedCn4Mco3ma9L4Y1GR2SMBuIvjWr7rmQ4/W/4Jy70TIAgZ+0nIlk0xHz1vNP8x8DCns45Sb2XRbg==} + + '@standard-schema/spec@1.0.0-beta.3': + resolution: {integrity: sha512-0ifF3BjA1E8SY9C+nUew8RefNOIq0cDlYALPty4rhUm8Rrl6tCM8hBT4bhGhx7I7iXD0uAgt50lgo8dD73ACMw==} + + '@standard-schema/spec@1.1.0': + resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} + + '@types/node@22.19.17': + resolution: {integrity: sha512-wGdMcf+vPYM6jikpS/qhg6WiqSV/OhG+jeeHT/KlVqxYfD40iYJf9/AE1uQxVWFvU7MipKRkRv8NSHiCGgPr8Q==} + + arctic@2.3.4: + resolution: {integrity: sha512-+p30BOWsctZp+CVYCt7oAean/hWGW42sH5LAcRQX56ttEkFJWbzXBhmSpibbzwSJkRrotmsA+oAoJoVsU0f5xA==} + + aws4fetch@1.0.20: + resolution: {integrity: sha512-/djoAN709iY65ETD6LKCtyyEI04XIBP5xVvfmNxsEP0uJB5tyaGBztSryRr4HqMStr9R06PisQE7m9zDTXKu6g==} + + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + + detect-libc@2.1.2: + resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} + engines: {node: '>=8'} + + effect@4.0.0-beta.57: + resolution: {integrity: sha512-rg32VgXnLKaPRs9tbRDaZ5jxmzNY7ojXt85gSHGUTwdlbWH5Ik+OCUY2q14TXliygPGoHwCAvNWS4bQJOqf00g==} + + fast-check@4.7.0: + resolution: {integrity: sha512-NsZRtqvSSoCP0HbNjUD+r1JH8zqZalyp6gLY9e7OYs7NK9b6AHOs2baBFeBG7bVNsuoukh89x2Yg3rPsul8ziQ==} + engines: {node: '>=12.17.0'} + + find-my-way-ts@0.1.6: + resolution: {integrity: sha512-a85L9ZoXtNAey3Y6Z+eBWW658kO/MwR7zIafkIUPUMf3isZG0NCs2pjW2wtjxAKuJPxMAsHUIP4ZPGv0o5gyTA==} + + hono@4.12.16: + resolution: {integrity: sha512-jN0ZewiNAWSe5khM3EyCmBb250+b40wWbwNILNfEvq84VREWwOIkuUsFONk/3i3nqkz7Oe1PcpM2mwQEK2L9Kg==} + engines: {node: '>=16.9.0'} + + ini@6.0.0: + resolution: {integrity: sha512-IBTdIkzZNOpqm7q3dRqJvMaldXjDHWkEDfrwGEQTs5eaQMWV+djAhR+wahyNNMAa+qpbDUhBMVt4ZKNwpPm7xQ==} + engines: {node: ^20.17.0 || >=22.9.0} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + jose@5.9.6: + resolution: {integrity: sha512-AMlnetc9+CV9asI19zHmrgS/WYsWUwCn2R7RzlbJWD7F9eWYUTGyBmU9o6PxngtLGOiDGPRu+Uc4fhKzbpteZQ==} + + kubernetes-types@1.30.0: + resolution: {integrity: sha512-Dew1okvhM/SQcIa2rcgujNndZwU8VnSapDgdxlYoB84ZlpAD43U6KLAFqYo17ykSFGHNPrg0qry0bP+GJd9v7Q==} + + msgpackr-extract@3.0.3: + resolution: {integrity: sha512-P0efT1C9jIdVRefqjzOQ9Xml57zpOXnIuS+csaB4MdZbTdmGDLo8XhzBG1N7aO11gKDDkJvBLULeFTo46wwreA==} + hasBin: true + + msgpackr@1.11.11: + resolution: {integrity: sha512-PK/dNR6t4tUytDuCU5OGM90V3lKrZQGIbHtDG/TwCJu7l1WIUhBPLWx6flhAN/ikSAhQBDXidNXAeOD9b9KJuQ==} + + multipasta@0.2.7: + resolution: {integrity: sha512-KPA58d68KgGil15oDqXjkUBEBYc00XvbPj5/X+dyzeo/lWm9Nc25pQRlf1D+gv4OpK7NM0J1odrbu9JNNGvynA==} + + node-gyp-build-optional-packages@5.2.2: + resolution: {integrity: sha512-s+w+rBWnpTMwSFbaE0UXsRlg7hU4FjekKU4eyAih5T8nJuNZT1nNsskXpxmeqSK9UzkBl6UgRlnKc8hz8IEqOw==} + hasBin: true + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + pure-rand@8.4.0: + resolution: {integrity: sha512-IoM8YF/jY0hiugFo/wOWqfmarlE6J0wc6fDK1PhftMk7MGhVZl88sZimmqBBFomLOCSmcCCpsfj7wXASCpvK9A==} + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + toml@4.1.1: + resolution: {integrity: sha512-EBJnVBr3dTXdA89WVFoAIPUqkBjxPMwRqsfuo1r240tKFHXv3zgca4+NJib/h6TyvGF7vOawz0jGuryJCdNHrw==} + engines: {node: '>=20'} + + typescript@5.9.3: + resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} + engines: {node: '>=14.17'} + hasBin: true + + undici-types@6.21.0: + resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} + + uuid@13.0.1: + resolution: {integrity: sha512-9ezox2roIft6ExBVTVqibSd5dc5/47Sw/uY6b4SjQUT2TzQ0tltNquWA46y4xPQmdZYqvnio22SgWd41M86+jw==} + hasBin: true + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + yaml@2.8.4: + resolution: {integrity: sha512-ml/JPOj9fOQK8RNnWojA67GbZ0ApXAUlN2UQclwv2eVgTgn7O9gg9o7paZWKMp4g0H3nTLtS9LVzhkpOFIKzog==} + engines: {node: '>= 14.6'} + hasBin: true + + zod@4.1.8: + resolution: {integrity: sha512-5R1P+WwQqmmMIEACyzSvo4JXHY5WiAFHRMg+zBZKgKS+Q1viRa0C1hmUKtHltoIFKtIdki3pRxkmpP74jnNYHQ==} + +snapshots: + + '@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.3': + optional: true + + '@msgpackr-extract/msgpackr-extract-darwin-x64@3.0.3': + optional: true + + '@msgpackr-extract/msgpackr-extract-linux-arm64@3.0.3': + optional: true + + '@msgpackr-extract/msgpackr-extract-linux-arm@3.0.3': + optional: true + + '@msgpackr-extract/msgpackr-extract-linux-x64@3.0.3': + optional: true + + '@msgpackr-extract/msgpackr-extract-win32-x64@3.0.3': + optional: true + + '@openauthjs/openauth@0.4.3(arctic@2.3.4)(hono@4.12.16)': + dependencies: + '@standard-schema/spec': 1.0.0-beta.3 + arctic: 2.3.4 + aws4fetch: 1.0.20 + hono: 4.12.16 + jose: 5.9.6 + + '@opencode-ai/plugin@1.14.31': + dependencies: + '@opencode-ai/sdk': 1.14.31 + effect: 4.0.0-beta.57 + zod: 4.1.8 + + '@opencode-ai/sdk@1.14.31': + dependencies: + cross-spawn: 7.0.6 + + '@oslojs/asn1@1.0.0': + dependencies: + '@oslojs/binary': 1.0.0 + + '@oslojs/binary@1.0.0': {} + + '@oslojs/crypto@1.0.1': + dependencies: + '@oslojs/asn1': 1.0.0 + '@oslojs/binary': 1.0.0 + + '@oslojs/encoding@0.4.1': {} + + '@oslojs/encoding@1.1.0': {} + + '@oslojs/jwt@0.2.0': + dependencies: + '@oslojs/encoding': 0.4.1 + + '@standard-schema/spec@1.0.0-beta.3': {} + + '@standard-schema/spec@1.1.0': {} + + '@types/node@22.19.17': + dependencies: + undici-types: 6.21.0 + + arctic@2.3.4: + dependencies: + '@oslojs/crypto': 1.0.1 + '@oslojs/encoding': 1.1.0 + '@oslojs/jwt': 0.2.0 + + aws4fetch@1.0.20: {} + + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + detect-libc@2.1.2: + optional: true + + effect@4.0.0-beta.57: + dependencies: + '@standard-schema/spec': 1.1.0 + fast-check: 4.7.0 + find-my-way-ts: 0.1.6 + ini: 6.0.0 + kubernetes-types: 1.30.0 + msgpackr: 1.11.11 + multipasta: 0.2.7 + toml: 4.1.1 + uuid: 13.0.1 + yaml: 2.8.4 + + fast-check@4.7.0: + dependencies: + pure-rand: 8.4.0 + + find-my-way-ts@0.1.6: {} + + hono@4.12.16: {} + + ini@6.0.0: {} + + isexe@2.0.0: {} + + jose@5.9.6: {} + + kubernetes-types@1.30.0: {} + + msgpackr-extract@3.0.3: + dependencies: + node-gyp-build-optional-packages: 5.2.2 + optionalDependencies: + '@msgpackr-extract/msgpackr-extract-darwin-arm64': 3.0.3 + '@msgpackr-extract/msgpackr-extract-darwin-x64': 3.0.3 + '@msgpackr-extract/msgpackr-extract-linux-arm': 3.0.3 + '@msgpackr-extract/msgpackr-extract-linux-arm64': 3.0.3 + '@msgpackr-extract/msgpackr-extract-linux-x64': 3.0.3 + '@msgpackr-extract/msgpackr-extract-win32-x64': 3.0.3 + optional: true + + msgpackr@1.11.11: + optionalDependencies: + msgpackr-extract: 3.0.3 + + multipasta@0.2.7: {} + + node-gyp-build-optional-packages@5.2.2: + dependencies: + detect-libc: 2.1.2 + optional: true + + path-key@3.1.1: {} + + pure-rand@8.4.0: {} + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + toml@4.1.1: {} + + typescript@5.9.3: {} + + undici-types@6.21.0: {} + + uuid@13.0.1: {} + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + yaml@2.8.4: {} + + zod@4.1.8: {} diff --git a/src/auth.ts b/src/auth.ts index fc766a3..c99d6f7 100644 --- a/src/auth.ts +++ b/src/auth.ts @@ -324,11 +324,12 @@ export async function refreshToken(alias: string): Promise 0 ? parsed : fallback +} + +function getLockStaleMs(): number { + return getEnvInt('OPENCODE_MULTI_AUTH_LOCK_STALE_MS', DEFAULT_LOCK_STALE_MS) +} + +function getLockWaitMs(): number { + return getEnvInt('OPENCODE_MULTI_AUTH_LOCK_WAIT_MS', DEFAULT_LOCK_WAIT_MS) +} + +function getLockPollMs(): number { + return getEnvInt('OPENCODE_MULTI_AUTH_LOCK_POLL_MS', DEFAULT_LOCK_POLL_MS) +} + +function sleepSync(ms: number): void { + if (ms <= 0) return + const sab = new SharedArrayBuffer(4) + const view = new Int32Array(sab) + Atomics.wait(view, 0, 0, ms) +} + +function ownerPath(lockPath: string): string { + return path.join(lockPath, LOCK_OWNER_FILE) +} + +function readLockMetadata(lockPath: string): FileLockMetadata | null { + try { + const raw = fs.readFileSync(ownerPath(lockPath), 'utf-8') + const parsed = JSON.parse(raw) as Partial + if ( + typeof parsed.pid !== 'number' || + typeof parsed.hostname !== 'string' || + typeof parsed.createdAt !== 'number' || + typeof parsed.targetFile !== 'string' + ) { + return null + } + return { + pid: parsed.pid, + hostname: parsed.hostname, + createdAt: parsed.createdAt, + targetFile: parsed.targetFile + } + } catch { + return null + } +} + +function getLockAgeMs(lockPath: string): number | null { + const meta = readLockMetadata(lockPath) + if (meta) return Date.now() - meta.createdAt + + try { + const stat = fs.statSync(lockPath) + return Date.now() - stat.mtimeMs + } catch { + return null + } +} + +function removeLock(lockPath: string): void { + try { + fs.rmSync(lockPath, { recursive: true, force: true }) + } catch { + // ignore + } +} + +export function acquireFileLock(targetFile: string): () => void { + const lockPath = `${targetFile}.lock` + const parent = path.dirname(targetFile) + if (!fs.existsSync(parent)) { + fs.mkdirSync(parent, { recursive: true, mode: 0o700 }) + } + + const staleMs = getLockStaleMs() + const waitMs = getLockWaitMs() + const pollMs = getLockPollMs() + const deadline = Date.now() + waitMs + + while (true) { + try { + fs.mkdirSync(lockPath, { mode: 0o700 }) + const owner: FileLockMetadata = { + pid: process.pid, + hostname: os.hostname(), + createdAt: Date.now(), + targetFile + } + fs.writeFileSync(ownerPath(lockPath), JSON.stringify(owner, null, 2), { mode: 0o600 }) + + const signals: NodeJS.Signals[] = ['SIGINT', 'SIGTERM', 'SIGHUP'] + const signalHandlers: Partial void>> = {} + let released = false + const release = () => { + if (released) return + released = true + removeLock(lockPath) + process.off('exit', release) + for (const signal of signals) { + const handler = signalHandlers[signal] + if (handler) process.off(signal, handler) + } + } + + for (const signal of signals) { + signalHandlers[signal] = () => { + release() + process.kill(process.pid, signal) + } + } + + process.once('exit', release) + for (const signal of signals) { + process.once(signal, signalHandlers[signal]!) + } + + return release + } catch (err: any) { + if (err?.code !== 'EEXIST') throw err + + const ageMs = getLockAgeMs(lockPath) + if (ageMs !== null && ageMs > staleMs) { + removeLock(lockPath) + continue + } + + if (Date.now() >= deadline) { + const meta = readLockMetadata(lockPath) + const suffix = meta + ? ` (owner pid=${meta.pid} host=${meta.hostname} age=${ageMs ?? 'unknown'}ms)` + : '' + throw new Error(`[multi-auth] Timed out waiting for file lock after ${waitMs}ms${suffix}`) + } + + const remaining = deadline - Date.now() + sleepSync(Math.min(pollMs, Math.max(1, remaining))) + } + } +} + +export function withFileLock(targetFile: string, fn: () => T): T { + const release = acquireFileLock(targetFile) + try { + return fn() + } finally { + release() + } +} diff --git a/src/force-mode.ts b/src/force-mode.ts index e11aaa8..042f0f2 100644 --- a/src/force-mode.ts +++ b/src/force-mode.ts @@ -1,4 +1,4 @@ -import { loadStore, saveStore, updateAccount } from './store.js' +import { loadStore, mutateStore } from './store.js' import type { AccountStore } from './types.js' export interface ForceState { @@ -60,87 +60,87 @@ export function activateForce( alias: string, actor: string = 'system' ): { success: boolean; error?: string; state?: ForceState } { - const store = loadStore() - - // Validate alias exists - if (!store.accounts[alias]) { - return { success: false, error: `Account '${alias}' not found` } - } - - // Validate alias is enabled - if (store.accounts[alias].enabled === false) { - return { success: false, error: `Account '${alias}' is disabled` } - } - const now = Date.now() - const keepExistingTtl = - store.forcedAlias === alias && - typeof store.forcedUntil === 'number' && - store.forcedUntil > now - const forcedUntil = keepExistingTtl ? store.forcedUntil! : now + FORCE_TTL_MS - - const currentStrategy = - store.settings?.rotationStrategy || - store.rotationStrategy || - 'round-robin' + let result: { success: boolean; error?: string; state?: ForceState } = { success: false } - // Store previous rotation strategy if not already forcing - const previousStrategy = (store.forcedAlias ? store.previousRotationStrategy : currentStrategy) ?? null - - const newStore: AccountStore = { - ...store, - forcedAlias: alias, - forcedUntil, - previousRotationStrategy: previousStrategy, - forcedBy: actor - } - - saveStore(newStore) - - return { - success: true, - state: { - forcedAlias: alias, - forcedUntil, - previousRotationStrategy: previousStrategy, - forcedBy: actor + mutateStore((currentStore) => { + // Validate alias against the latest persisted state under lock. + if (!currentStore.accounts[alias]) { + result = { success: false, error: `Account '${alias}' not found` } + return currentStore } - } + + if (currentStore.accounts[alias].enabled === false) { + result = { success: false, error: `Account '${alias}' is disabled` } + return currentStore + } + + const keepExistingTtl = + currentStore.forcedAlias === alias && + typeof currentStore.forcedUntil === 'number' && + currentStore.forcedUntil > now + const forcedUntil = keepExistingTtl ? currentStore.forcedUntil! : now + FORCE_TTL_MS + + const currentStrategy = + currentStore.settings?.rotationStrategy || + currentStore.rotationStrategy || + 'round-robin' + + // Store previous rotation strategy if not already forcing. + const previousStrategy = (currentStore.forcedAlias ? currentStore.previousRotationStrategy : currentStrategy) ?? null + + currentStore.forcedAlias = alias + currentStore.forcedUntil = forcedUntil + currentStore.previousRotationStrategy = previousStrategy + currentStore.forcedBy = actor + result = { + success: true, + state: { + forcedAlias: alias, + forcedUntil, + previousRotationStrategy: previousStrategy, + forcedBy: actor + } + } + return currentStore + }) + + return result } export function clearForce(): { success: boolean; restoredStrategy?: string | null } { - const store = loadStore() - const restoredStrategy = store.previousRotationStrategy - const currentStrategy = - store.settings?.rotationStrategy || - store.rotationStrategy || - 'round-robin' - const nextStrategy = isRotationStrategy(restoredStrategy) - ? restoredStrategy - : currentStrategy - - const newStore: AccountStore = { - ...store, - forcedAlias: null, - forcedUntil: null, - rotationStrategy: nextStrategy, - previousRotationStrategy: null, - forcedBy: null - } + let result: { success: boolean; restoredStrategy?: string | null } = { success: true } + + mutateStore((currentStore) => { + const restoredStrategy = currentStore.previousRotationStrategy + const currentStrategy = + currentStore.settings?.rotationStrategy || + currentStore.rotationStrategy || + 'round-robin' + const nextStrategy = isRotationStrategy(restoredStrategy) + ? restoredStrategy + : currentStrategy - if (store.settings) { - newStore.settings = { - ...store.settings, - rotationStrategy: nextStrategy + currentStore.forcedAlias = null + currentStore.forcedUntil = null + currentStore.rotationStrategy = nextStrategy + currentStore.previousRotationStrategy = null + currentStore.forcedBy = null + + if (currentStore.settings) { + currentStore.settings = { + ...currentStore.settings, + rotationStrategy: nextStrategy + } } - } - - saveStore(newStore) - - return { - success: true, - restoredStrategy - } + result = { + success: true, + restoredStrategy + } + return currentStore + }) + + return result } export function checkAndAutoClearForce(): { wasCleared: boolean; reason?: string } { diff --git a/src/index.ts b/src/index.ts index be8c610..5811f54 100644 --- a/src/index.ts +++ b/src/index.ts @@ -22,6 +22,7 @@ import { getRuntimeSettings } from './settings.js' import { listAccounts, updateAccount, loadStore } from './store.js' import { DEFAULT_CONFIG, type AccountRateLimits, type PluginConfig } from './types.js' import { Errors, type DeterministicError } from './errors.js' +import { isDebugEnabled, logDebug, logDebugValue } from './logger.js' const PROVIDER_ID = 'openai' const CODEX_BASE_URL = 'https://chatgpt.com/backend-api' @@ -69,6 +70,38 @@ function extractRequestUrl(input: Request | string | URL): string { return input.url } +function getRequestHeader( + input: Request | string | URL, + init: RequestInit | undefined, + name: string +): string | undefined { + const lowerName = name.toLowerCase() + const headers = init?.headers + + if (headers instanceof Headers) { + const value = headers.get(name) || headers.get(lowerName) + if (value) return value + } else if (Array.isArray(headers)) { + for (const [key, value] of headers) { + if (key.toLowerCase() === lowerName) return value + } + } else if (headers && typeof headers === 'object') { + const record = headers as Record + for (const [key, value] of Object.entries(record)) { + if (key.toLowerCase() !== lowerName) continue + if (Array.isArray(value)) return value[0] + return value + } + } + + if (input instanceof Request) { + const value = input.headers.get(name) || input.headers.get(lowerName) + if (value) return value + } + + return undefined +} + function rewriteUrlForCodex(url: string): string { return url.replace(URL_PATHS.RESPONSES, URL_PATHS.CODEX_RESPONSES) } @@ -118,7 +151,7 @@ function filterInput(input: unknown): unknown { }) } -function normalizeModel(model: string | undefined): string { +function normalizeModel(model: string | undefined, debugEnabled?: boolean): string { if (!model) return 'gpt-5.1' const modelId = model.includes('/') ? model.split('/').pop()! : model @@ -142,9 +175,7 @@ function normalizeModel(model: string | undefined): string { process.env.OPENCODE_MULTI_AUTH_CODEX_LATEST_MODEL || DEFAULT_LATEST_CODEX_MODEL ).trim() - if (process.env.OPENCODE_MULTI_AUTH_DEBUG === '1') { - console.log(`[multi-auth] model map: ${baseModel} -> ${latestModel}`) - } + logDebug(`[multi-auth] model map: ${baseModel} -> ${latestModel}`, debugEnabled) return latestModel } @@ -332,9 +363,7 @@ const MultiAuthPlugin: Plugin = async ({ client, $, serverUrl, project, director } else { if (macOpenEnabled && clickUrl && !terminalNotifierPath && !didWarnTerminalNotifier) { didWarnTerminalNotifier = true - if (process.env.OPENCODE_MULTI_AUTH_DEBUG === '1') { - console.log('[multi-auth] mac click-to-open requires terminal-notifier (brew install terminal-notifier)') - } + logDebug('[multi-auth] mac click-to-open requires terminal-notifier (brew install terminal-notifier)') } try { @@ -593,13 +622,9 @@ const MultiAuthPlugin: Plugin = async ({ client, $, serverUrl, project, director } } - if (process.env.OPENCODE_MULTI_AUTH_DEBUG === '1') { - console.log(`[multi-auth] injected runtime models: ${injectedModelIds.join(', ')}`) - } + logDebug(`[multi-auth] injected runtime models: ${injectedModelIds.join(', ')}`) } catch (err) { - if (process.env.OPENCODE_MULTI_AUTH_DEBUG === '1') { - console.log('[multi-auth] config injection failed:', err) - } + logDebugValue('[multi-auth] config injection failed', err) } }, @@ -623,6 +648,7 @@ const MultiAuthPlugin: Plugin = async ({ client, $, serverUrl, project, director init?: RequestInit ): Promise => { await syncAuthFromOpenCode(getAuth) + const debugLogging = isDebugEnabled() let body: Record = {} try { @@ -631,7 +657,30 @@ const MultiAuthPlugin: Plugin = async ({ client, $, serverUrl, project, director body = {} } - const normalizedModel = normalizeModel(body.model) + const normalizedModel = normalizeModel(body.model, debugLogging) + const sessionAffinity = getRequestHeader(input, init, 'x-session-affinity')?.trim() || undefined + const promptCacheKey = typeof body?.prompt_cache_key === 'string' && body.prompt_cache_key.trim() + ? body.prompt_cache_key.trim() + : undefined + const routeSessionId = sessionAffinity || promptCacheKey + const routeSessionSource = sessionAffinity + ? 'x-session-affinity' + : promptCacheKey + ? 'prompt_cache_key' + : 'none' + if (debugLogging) { + /* + logDebugValue('[multi-auth] request.body', { + method: init?.method || 'POST', + url: extractRequestUrl(input), + model: body.model, + normalizedModel, + stream: body?.stream === true, + sessionId: body?.prompt_cache_key, + body + }, debugLogging) + */ + } const store = loadStore() const forceState = getForceState() @@ -644,6 +693,12 @@ const MultiAuthPlugin: Plugin = async ({ client, $, serverUrl, project, director !acc.authInvalid && acc.enabled !== false }).length + + logDebug(`[multi-auth] routing start model=${normalizedModel} eligible=${eligibleCount} forcePinned=${forcePinned}`, debugLogging) + logDebug( + `[multi-auth] routeSessionSource=${routeSessionSource} routeSessionId=${routeSessionId || 'none'} backendCacheKey=${promptCacheKey || 'none'}`, + debugLogging + ) const maxAttempts = forcePinned ? 1 : Math.max(1, eligibleCount) const triedAliases = new Set() @@ -659,7 +714,8 @@ const MultiAuthPlugin: Plugin = async ({ client, $, serverUrl, project, director } const rotation = await getNextAccount(effectiveConfig, { - model: normalizedModel + model: normalizedModel, + sessionId: routeSessionId }) if (!rotation) { @@ -688,8 +744,10 @@ const MultiAuthPlugin: Plugin = async ({ client, $, serverUrl, project, director } const { account, token } = rotation + logDebug(`[multi-auth] routing selected alias=${account.alias} strategy=${effectiveConfig.rotationStrategy} attempt=${attempt}/${maxAttempts}`, debugLogging) if (triedAliases.has(account.alias)) { + logDebug(`[multi-auth] routing skipped duplicate alias=${account.alias}`, debugLogging) continue } triedAliases.add(account.alias) @@ -697,6 +755,7 @@ const MultiAuthPlugin: Plugin = async ({ client, $, serverUrl, project, director const decoded = decodeJWT(token) const accountId = decoded?.[JWT_CLAIM_PATH]?.chatgpt_account_id if (!accountId) { + logDebug(`[multi-auth] token parse failed alias=${account.alias}`, debugLogging) return new Response( JSON.stringify({ error: { @@ -722,6 +781,8 @@ const MultiAuthPlugin: Plugin = async ({ client, $, serverUrl, project, director store: false } + // logDebugValue('[multi-auth] payload.before', payload, debugLogging) + if (payload.truncation === undefined) { const truncationRaw = (process.env.OPENCODE_MULTI_AUTH_TRUNCATION || '').trim() if (truncationRaw && truncationRaw !== 'disabled' && truncationRaw !== 'false' && truncationRaw !== '0') { @@ -751,20 +812,20 @@ const MultiAuthPlugin: Plugin = async ({ client, $, serverUrl, project, director if (supportedFastMode) { payload.service_tier = payload.service_tier || 'priority' - if (process.env.OPENCODE_MULTI_AUTH_DEBUG === '1') { - console.log(`[multi-auth] fast mode enabled: ${normalizedModel} + service_tier=priority`) - } - } else if (fastMode && process.env.OPENCODE_MULTI_AUTH_DEBUG === '1') { - console.log(`[multi-auth] fast mode ignored for unsupported model: ${normalizedModel}`) + logDebug(`[multi-auth] fast mode enabled: ${normalizedModel} + service_tier=priority`, debugLogging) + } else if (fastMode) { + logDebug(`[multi-auth] fast mode ignored for unsupported model: ${normalizedModel}`, debugLogging) } - if (process.env.OPENCODE_MULTI_AUTH_DEBUG === '1' && payload.service_tier === 'priority') { - console.log(`[multi-auth] priority service tier requested for ${normalizedModel}`) - } + if (payload.service_tier === 'priority') { + logDebug(`[multi-auth] priority service tier requested for ${normalizedModel}`, debugLogging) + } + + delete payload.reasoning_effort - delete payload.reasoning_effort + logDebugValue('[multi-auth] payload.after', payload, debugLogging) - try { + try { const headers = new Headers(init?.headers || {}) headers.delete('x-api-key') headers.set('Content-Type', 'application/json') @@ -785,6 +846,18 @@ const MultiAuthPlugin: Plugin = async ({ client, $, serverUrl, project, director headers.set('accept', 'text/event-stream') const sendPayload = async (requestPayload: Record): Promise => { + logDebugValue('[multi-auth] upstream.request', { + url, + method: init?.method || 'POST', + headers: { + accountId, + contentType: 'application/json', + beta: OPENAI_HEADER_VALUES.BETA_RESPONSES, + originator: OPENAI_HEADER_VALUES.ORIGINATOR_CODEX, + cacheKey: payload?.prompt_cache_key + }, + requestPayload + }, debugLogging) return fetch(url, { method: init?.method || 'POST', headers, @@ -799,6 +872,7 @@ const MultiAuthPlugin: Plugin = async ({ client, $, serverUrl, project, director : account.rateLimits if (limitUpdate) { const blockingResetAt = getBlockingRateLimitResetAt(mergedRateLimits) + logDebug(`[multi-auth] rate limit update alias=${account.alias} blockingResetAt=${blockingResetAt || 'none'}`, debugLogging) updateAccount(account.alias, { rateLimits: mergedRateLimits, rateLimitedUntil: blockingResetAt @@ -817,9 +891,7 @@ const MultiAuthPlugin: Plugin = async ({ client, $, serverUrl, project, director const errorText = await res.clone().text().catch(() => '') if (isCyberPolicyError(errorData, errorText)) { - if (process.env.OPENCODE_MULTI_AUTH_DEBUG === '1') { - console.log('[multi-auth] cyber_policy on priority tier; retrying once without service_tier') - } + logDebug('[multi-auth] cyber_policy on priority tier; retrying once without service_tier', debugLogging) const standardTierPayload = { ...payload } delete standardTierPayload.service_tier @@ -832,6 +904,7 @@ const MultiAuthPlugin: Plugin = async ({ client, $, serverUrl, project, director const errorData = await res.clone().json().catch(() => ({})) as { error?: { message?: string } } const message = errorData?.error?.message || '' if (message.toLowerCase().includes('invalidated') || res.status === 401) { + logDebug(`[multi-auth] auth invalidated alias=${account.alias} status=${res.status}`, debugLogging) markAuthInvalid(account.alias) } @@ -856,6 +929,7 @@ const MultiAuthPlugin: Plugin = async ({ client, $, serverUrl, project, director errorText, pluginConfig.rateLimitCooldownMs ) + logDebug(`[multi-auth] rate limited alias=${account.alias} until=${rateLimitedUntil}`, debugLogging) markRateLimited(account.alias, rateLimitedUntil) if (attempt < maxAttempts) { @@ -892,6 +966,7 @@ const MultiAuthPlugin: Plugin = async ({ client, $, serverUrl, project, director message.toLowerCase().includes('deactivated workspace') if (isDeactivatedWorkspace) { + logDebug(`[multi-auth] workspace deactivated alias=${account.alias} until=${Date.now() + pluginConfig.workspaceDeactivatedCooldownMs}`, debugLogging) markWorkspaceDeactivated(account.alias, pluginConfig.workspaceDeactivatedCooldownMs, { error: message || code }) @@ -923,6 +998,7 @@ const MultiAuthPlugin: Plugin = async ({ client, $, serverUrl, project, director message.toLowerCase().includes('chatgpt account') if (isModelUnsupported) { + logDebug(`[multi-auth] model unsupported alias=${account.alias} model=${normalizedModel}`, debugLogging) markModelUnsupported(account.alias, pluginConfig.modelUnsupportedCooldownMs, { model: normalizedModel, error: message @@ -942,16 +1018,21 @@ const MultiAuthPlugin: Plugin = async ({ client, $, serverUrl, project, director } if (!res.ok) { + logDebug(`[multi-auth] upstream response not ok alias=${account.alias} status=${res.status}`, debugLogging) return res } const responseHeaders = ensureContentType(res.headers) if (!isStreaming && responseHeaders.get('content-type')?.includes('text/event-stream')) { + logDebug(`[multi-auth] converting SSE to JSON alias=${account.alias}`, debugLogging) return await convertSseToJson(res, responseHeaders) } + logDebug(`[multi-auth] upstream response ok alias=${account.alias} status=${res.status}`, debugLogging) + return res } catch (err) { + logDebugValue('[multi-auth] request failed', err, debugLogging) return new Response( JSON.stringify({ error: { code: 'REQUEST_FAILED', message: `[multi-auth] Request failed: ${err}` } }), { status: 500, headers: { 'Content-Type': 'application/json' } } diff --git a/src/logger.ts b/src/logger.ts index be68b13..69f5bab 100644 --- a/src/logger.ts +++ b/src/logger.ts @@ -1,10 +1,25 @@ import * as fs from 'node:fs' import * as os from 'node:os' import * as path from 'node:path' +import { getRuntimeSettings } from './settings.js' const DEFAULT_LOG_DIR = path.join(os.homedir(), '.config', 'opencode-multi-auth', 'logs') const LOG_FILE = process.env.CODEX_SOFT_LOG_PATH || path.join(DEFAULT_LOG_DIR, 'codex-soft.log') const MAX_LOG_LINES = 400 +const MAX_DEBUG_BYTES = 20 * 1024 +const REDACT_KEYS = new Set([ + 'authorization', + 'cookie', + 'x-api-key', + 'api-key', + 'accessToken', + 'refreshToken', + 'idToken', + 'token', + 'secret', + 'password', + 'passwd' +]) function ensureDir(): void { const dir = path.dirname(LOG_FILE) @@ -19,6 +34,74 @@ function sanitize(message: string): string { .replace(/\bsk-[A-Za-z0-9]{10,}\b/g, '[token]') } +function isDebugEnabledFromEnv(): boolean { + const value = process.env.OPENCODE_MULTI_AUTH_DEBUG + return value === '1' || value?.toLowerCase?.() === 'true' +} + +export function isDebugEnvOverrideActive(): boolean { + return isDebugEnabledFromEnv() +} + +export function isDebugEnabled(): boolean { + if (isDebugEnabledFromEnv()) return true + try { + return getRuntimeSettings().settings.debug === true + } catch { + return false + } +} + +function capText(text: string, maxBytes = MAX_DEBUG_BYTES): { text: string; truncated: boolean; bytes: number } { + const bytes = Buffer.byteLength(text, 'utf8') + if (bytes <= maxBytes) { + return { text, truncated: false, bytes } + } + + const capped = Buffer.from(text, 'utf8').subarray(0, maxBytes).toString('utf8') + return { text: capped, truncated: true, bytes } +} + +function normalizeDebugValue(value: unknown, depth = 0): unknown { + if (value === null || value === undefined) return value + if (typeof value === 'string') return value + if (typeof value === 'number' || typeof value === 'boolean') return value + if (typeof value === 'bigint') return value.toString() + if (typeof value === 'function') return '[function]' + if (value instanceof Error) { + return { + name: value.name, + message: value.message, + code: (value as any).code, + stack: value.stack + } + } + if (depth > 6) return '[depth-limit]' + if (Array.isArray(value)) { + return value.slice(0, 50).map((item) => normalizeDebugValue(item, depth + 1)) + } + if (typeof value === 'object') { + const out: Record = {} + for (const [key, item] of Object.entries(value as Record)) { + if (REDACT_KEYS.has(key.toLowerCase())) { + out[key] = '[redacted]' + continue + } + out[key] = normalizeDebugValue(item, depth + 1) + } + return out + } + return String(value) +} + +export function formatDebugValue(value: unknown): string { + try { + return JSON.stringify(normalizeDebugValue(value)) || 'null' + } catch { + return String(value) + } +} + function append(level: string, message: string): void { try { ensureDir() @@ -41,6 +124,21 @@ export function logError(message: string): void { append('error', message) } +export function logDebug(message: string, enabled?: boolean): void { + if (enabled === false) return + if (enabled !== true && !isDebugEnabled()) return + append('debug', message) +} + +export function logDebugValue(label: string, value: unknown, enabled?: boolean): void { + if (enabled === false) return + if (enabled !== true && !isDebugEnabled()) return + const serialized = formatDebugValue(value) + const capped = capText(serialized) + const suffix = capped.truncated ? ` [truncated to ${MAX_DEBUG_BYTES} bytes from ${capped.bytes}]` : '' + append('debug', `${label}: ${sanitize(capped.text)}${suffix}`) +} + export function getLogPath(): string { return LOG_FILE } diff --git a/src/rotation.ts b/src/rotation.ts index f877864..3f669b4 100644 --- a/src/rotation.ts +++ b/src/rotation.ts @@ -1,9 +1,16 @@ -import { getStoreDiagnostics, loadStore, saveStore, updateAccount } from './store.js' +import { getStoreDiagnostics, loadStore, mutateStore, updateAccount } from './store.js' import { ensureValidToken } from './auth.js' import { decodeJwtPayload, getPlanTypeFromClaims } from './codex-auth.js' import { isForceActive, checkAndAutoClearForce, getForceState, clearForce } from './force-mode.js' import { getRuntimeSettings, calculateWeightedSelection } from './settings.js' +import { + getSessionAlias, + setSessionAlias, + clearSession, + clearSessionsForAlias +} from './session-store.js' import type { AccountCredentials, DEFAULT_CONFIG } from './types.js' +import { logDebug } from './logger.js' export interface RotationResult { account: AccountCredentials @@ -17,6 +24,9 @@ export interface RotationResult { export interface AccountSelectionContext { model?: string + /** Stable identifier for this conversation. When set and stickySessionRouting + * is enabled the same account is reused for all turns. */ + sessionId?: string } const HEALTH_HYSTERESIS_MS = 10_000 @@ -138,7 +148,7 @@ export async function getNextAccount( // Phase E: Check and auto-clear expired/invalid force state const autoClear = checkAndAutoClearForce() if (autoClear.wasCleared) { - console.log(`[multi-auth] Force mode auto-cleared: ${autoClear.reason}`) + logDebug(`[multi-auth] Force mode auto-cleared: ${autoClear.reason}`) } // Phase E: Check if force mode is active @@ -154,9 +164,7 @@ export async function getNextAccount( console.error( `[multi-auth] No accounts configured. Run: opencode-multi-auth add ${extra}` ) - if (process.env.OPENCODE_MULTI_AUTH_DEBUG === '1') { - console.error(`[multi-auth] store file: ${diag.storeFile}`) - } + logDebug(`[multi-auth] store file: ${diag.storeFile}`) return null } @@ -173,15 +181,22 @@ export async function getNextAccount( if (health.isHealthy) { const token = await ensureValidToken(forcedAlias) if (token) { - store = updateAccount(forcedAlias, { - usageCount: (forcedAccount.usageCount || 0) + 1, - lastUsed: now, - limitError: undefined + const updated = mutateStore((currentStore) => { + const current = currentStore.accounts[forcedAlias] + if (!current) return null + currentStore.accounts[forcedAlias] = { + ...current, + usageCount: (current.usageCount || 0) + 1, + lastUsed: now, + limitError: undefined + } + currentStore.activeAlias = forcedAlias + currentStore.lastRotation = now + return currentStore }) - - store.activeAlias = forcedAlias - store.lastRotation = now - saveStore(store) + + if (!updated) return null + store = updated console.log(`[multi-auth] Force mode: using ${forcedAlias}`) return { @@ -208,6 +223,83 @@ export async function getNextAccount( } } + // --- Sticky session routing --- + const runtimeSettingsForSession = getRuntimeSettings() + const sessionSettings = runtimeSettingsForSession.settings + const sessionId = selection?.sessionId + + if ( + sessionId && + (sessionSettings.stickySessionRouting ?? true) + ) { + const idleTimeoutMs = sessionSettings.sessionIdleTimeoutMs ?? 60 * 60 * 1000 + const pinnedAlias = getSessionAlias(sessionId) + + if (pinnedAlias) { + const pinnedAccount = store.accounts[pinnedAlias] + + if (pinnedAccount) { + const pinnedHealth = evaluateAccountHealth(pinnedAccount, now) + + if (pinnedHealth.isHealthy) { + const token = await ensureValidToken(pinnedAlias) + if (token) { + const updated = mutateStore((currentStore) => { + const current = currentStore.accounts[pinnedAlias] + if (!current) return null + currentStore.accounts[pinnedAlias] = { + ...current, + usageCount: (current.usageCount || 0) + 1, + lastUsed: now, + limitError: undefined + } + currentStore.activeAlias = pinnedAlias + currentStore.lastRotation = now + return currentStore + }) + + if (!updated) return null + store = updated + setSessionAlias(sessionId, pinnedAlias, idleTimeoutMs) + + logDebug(`[multi-auth] Session ${sessionId}: reusing pinned account ${pinnedAlias}`) + + const currentForceState = getForceState() + return { + account: store.accounts[pinnedAlias], + token, + forceState: { + active: isForceActive(), + alias: currentForceState.forcedAlias, + remainingMs: currentForceState.forcedUntil ? currentForceState.forcedUntil - now : 0 + } + } + } + } + + // Pinned account is unhealthy. + const fallback = sessionSettings.sessionStickyFallback ?? 'fail' + if (fallback === 'fail') { + console.warn( + `[multi-auth] Session ${sessionId}: pinned account ${pinnedAlias} is unavailable and sessionStickyFallback=fail` + ) + return null + } + + // fallback === 'rotate': evict the mapping and fall through to normal rotation. + console.warn( + `[multi-auth] Session ${sessionId}: pinned account ${pinnedAlias} unavailable; falling back to rotation` + ) + clearSession(sessionId) + } else { + // Account was deleted; clean up stale mapping. + clearSession(sessionId) + } + } + // No existing mapping → fall through; after selection we'll record one. + } + // --- End sticky session routing --- + const healthMap = new Map() for (const alias of aliases) { const acc = store.accounts[alias] @@ -307,6 +399,23 @@ export async function getNextAccount( return { aliases: [selected] } } + case 'use-up': { + // Always use the lowest-indexed available account by drain order. + // Once an account is exhausted (rate-limited) it drops out of + // candidateAliases, and the next one in order takes over. + const explicit = runtimeSettings.settings.useUpOrder ?? [] + const storeOrder = Object.keys(store.accounts) + const sorted = [...candidateAliases].sort((a, b) => { + let ia = explicit.indexOf(a) + let ib = explicit.indexOf(b) + // Aliases not in the explicit list are appended after it, + // ordered by store insertion order. + if (ia === -1) ia = explicit.length + storeOrder.indexOf(a) + if (ib === -1) ib = explicit.length + storeOrder.indexOf(b) + return ia - ib + }) + return { aliases: sorted } + } case 'round-robin': default: { const sorted = [...candidateAliases].sort((a, b) => { @@ -344,19 +453,37 @@ export async function getNextAccount( continue } - store = updateAccount(candidate, { - usageCount: (store.accounts[candidate]?.usageCount || 0) + 1, - lastUsed: now, - limitError: undefined + const nextIndex = primary.aliases.includes(candidate) ? primary.nextIndex : fallback.nextIndex + const updated = mutateStore((currentStore) => { + const current = currentStore.accounts[candidate] + if (!current) return null + currentStore.accounts[candidate] = { + ...current, + usageCount: (current.usageCount || 0) + 1, + lastUsed: now, + limitError: undefined + } + + currentStore.activeAlias = candidate + currentStore.lastRotation = now + if (nextIndex) { + currentStore.rotationIndex = nextIndex(candidate) + } + return currentStore }) - store.activeAlias = candidate - store.lastRotation = now - const nextIndex = primary.aliases.includes(candidate) ? primary.nextIndex : fallback.nextIndex - if (nextIndex) { - store.rotationIndex = nextIndex(candidate) + if (!updated) { + continue + } + + store = updated + + // Record session→account mapping for subsequent turns. + if (sessionId && (sessionSettings.stickySessionRouting ?? true)) { + const idleTimeoutMs = sessionSettings.sessionIdleTimeoutMs ?? 60 * 60 * 1000 + setSessionAlias(sessionId, candidate, idleTimeoutMs) + logDebug(`[multi-auth] Session ${sessionId}: pinned to account ${candidate}`) } - saveStore(store) const currentForceState = getForceState() return { @@ -453,3 +580,6 @@ export function clearAuthInvalid(alias: string): void { authInvalidatedAt: undefined }) } + +export { clearSessionsForAlias } from './session-store.js' +export { listSessions, sessionCount, sessionCountByAlias, pruneExpired } from './session-store.js' diff --git a/src/session-store.ts b/src/session-store.ts new file mode 100644 index 0000000..928d5b6 --- /dev/null +++ b/src/session-store.ts @@ -0,0 +1,230 @@ +import * as fs from 'fs' +import * as path from 'path' +import * as os from 'os' +import { withFileLock } from './file-lock.js' + +/** + * Disk-backed map from session ID -> account alias for sticky session routing. + * The in-memory Map is a cache; sessions.json is the source of truth across + * concurrent OpenCode/plugin processes. + */ + +export interface SessionEntry { + alias: string + createdAt: number + lastUsedAt: number +} + +type SessionStoreFile = { + version: 1 + sessions: Record +} + +const STORE_DIR_ENV = 'OPENCODE_MULTI_AUTH_STORE_DIR' +const SESSION_STORE_FILE_ENV = 'OPENCODE_MULTI_AUTH_SESSION_STORE_FILE' +const DEFAULT_STORE_DIR = path.join(os.homedir(), '.config', 'opencode-multi-auth') +const DEFAULT_SESSION_STORE_FILE = 'sessions.json' +const SESSION_STORE_VERSION = 1 + +const sessions = new Map() +let pruneTimer: ReturnType | null = null + +const PRUNE_INTERVAL_MS = 5 * 60 * 1000 // check every 5 minutes + +function getStoreDir(): string { + const override = process.env[STORE_DIR_ENV] + if (override && override.trim()) return path.resolve(override.trim()) + return DEFAULT_STORE_DIR +} + +function getSessionStoreFile(): string { + const override = process.env[SESSION_STORE_FILE_ENV] + if (override && override.trim()) return path.resolve(override.trim()) + return path.join(getStoreDir(), DEFAULT_SESSION_STORE_FILE) +} + +function ensureDir(): void { + const dir = path.dirname(getSessionStoreFile()) + if (!fs.existsSync(dir)) { + fs.mkdirSync(dir, { recursive: true, mode: 0o700 }) + } +} + +function validateSessionEntry(entry: any): SessionEntry | null { + if (!entry || typeof entry !== 'object') return null + if (typeof entry.alias !== 'string' || !entry.alias) return null + if (typeof entry.createdAt !== 'number') return null + if (typeof entry.lastUsedAt !== 'number') return null + return { + alias: entry.alias, + createdAt: entry.createdAt, + lastUsedAt: entry.lastUsedAt + } +} + +function loadSessionsUnlocked(): Map { + ensureDir() + const file = getSessionStoreFile() + const next = new Map() + if (!fs.existsSync(file)) return next + + try { + const raw = fs.readFileSync(file, 'utf-8') + const parsed = JSON.parse(raw) as Partial + const rawSessions = parsed.sessions + if (!rawSessions || typeof rawSessions !== 'object') return next + for (const [sessionId, entry] of Object.entries(rawSessions)) { + if (typeof sessionId !== 'string' || !sessionId) continue + const valid = validateSessionEntry(entry) + if (valid) next.set(sessionId, valid) + } + } catch (err) { + console.warn('[multi-auth] Failed to load session store; using empty session cache:', err) + } + return next +} + +function saveSessionsUnlocked(next: Map): void { + ensureDir() + const file = getSessionStoreFile() + const payload: SessionStoreFile = { + version: SESSION_STORE_VERSION, + sessions: Object.fromEntries(next.entries()) + } + const json = JSON.stringify(payload, null, 2) + const tmp = `${file}.tmp-${process.pid}-${Date.now()}` + let fd: number | null = null + + try { + fd = fs.openSync(tmp, 'w', 0o600) + fs.writeFileSync(fd, json, { encoding: 'utf-8' }) + try { + fs.fsyncSync(fd) + } catch { + // best-effort + } + } finally { + if (fd !== null) { + try { + fs.closeSync(fd) + } catch { + // ignore + } + } + } + + fs.renameSync(tmp, file) + try { + fs.chmodSync(file, 0o600) + } catch { + // ignore + } +} + +function replaceCache(next: Map): void { + sessions.clear() + for (const [sessionId, entry] of next) { + sessions.set(sessionId, entry) + } +} + +function refreshCache(): void { + replaceCache(loadSessionsUnlocked()) +} + +function mutateSessions(fn: (current: Map) => T): T { + return withFileLock(getSessionStoreFile(), () => { + const current = loadSessionsUnlocked() + const result = fn(current) + saveSessionsUnlocked(current) + replaceCache(current) + return result + }) +} + +function startPruneTimer(idleTimeoutMs: number): void { + if (pruneTimer !== null) return + pruneTimer = setInterval(() => pruneExpired(idleTimeoutMs), PRUNE_INTERVAL_MS) + // Don't keep the process alive just for this timer. + if (pruneTimer.unref) pruneTimer.unref() +} + +export function pruneExpired(idleTimeoutMs: number): void { + mutateSessions((current) => { + const cutoff = Date.now() - idleTimeoutMs + for (const [id, entry] of current) { + if (entry.lastUsedAt < cutoff) { + current.delete(id) + } + } + }) +} + +export function getSessionAlias(sessionId: string): string | undefined { + refreshCache() + return sessions.get(sessionId)?.alias +} + +export function setSessionAlias(sessionId: string, alias: string, idleTimeoutMs: number): void { + mutateSessions((current) => { + const now = Date.now() + const existing = current.get(sessionId) + current.set(sessionId, { + alias, + createdAt: existing?.createdAt ?? now, + lastUsedAt: now + }) + }) + startPruneTimer(idleTimeoutMs) +} + +export function touchSession(sessionId: string): void { + mutateSessions((current) => { + const entry = current.get(sessionId) + if (entry) { + entry.lastUsedAt = Date.now() + } + }) +} + +export function clearSession(sessionId: string): void { + mutateSessions((current) => { + current.delete(sessionId) + }) +} + +export function clearSessionsForAlias(alias: string): void { + mutateSessions((current) => { + for (const [id, entry] of current) { + if (entry.alias === alias) current.delete(id) + } + }) +} + +/** Returns a snapshot suitable for the dashboard API. */ +export function listSessions(): Array { + refreshCache() + return Array.from(sessions.entries()).map(([sessionId, entry]) => ({ + sessionId, + ...entry + })) +} + +export function sessionCount(): number { + refreshCache() + return sessions.size +} + +/** Count active sessions per account alias. */ +export function sessionCountByAlias(): Record { + refreshCache() + const counts: Record = {} + for (const entry of sessions.values()) { + counts[entry.alias] = (counts[entry.alias] ?? 0) + 1 + } + return counts +} + +export function getSessionStorePath(): string { + return getSessionStoreFile() +} diff --git a/src/settings.ts b/src/settings.ts index b9987f5..8d54fd2 100644 --- a/src/settings.ts +++ b/src/settings.ts @@ -1,5 +1,4 @@ -import { loadStore, saveStore, updateAccount } from './store.js' -import { logInfo, logError } from './logger.js' +import { loadStore, mutateStore } from './store.js' import { DEFAULT_ROTATION_SETTINGS, WEIGHTED_PRESETS, @@ -36,7 +35,7 @@ function resolveSettings(includeEnvOverrides: boolean): SettingsResult { // Layer 2: Environment variables override (optional for runtime behavior) if (includeEnvOverrides) { const envStrategy = process.env.OPENCODE_MULTI_AUTH_ROTATION_STRATEGY - if (envStrategy && ['round-robin', 'least-used', 'random', 'weighted-round-robin'].includes(envStrategy)) { + if (envStrategy && ['round-robin', 'least-used', 'random', 'weighted-round-robin', 'use-up'].includes(envStrategy)) { settings.rotationStrategy = envStrategy as RotationSettings['rotationStrategy'] source = 'env' } @@ -58,6 +57,12 @@ function resolveSettings(includeEnvOverrides: boolean): SettingsResult { source = 'env' } } + + const envDebug = process.env.OPENCODE_MULTI_AUTH_DEBUG + if (envDebug && (envDebug === '1' || envDebug.toLowerCase() === 'true')) { + settings.debug = true + source = 'env' + } // Phase G: Feature flag environment overrides const envAntigravity = process.env.OPENCODE_MULTI_AUTH_ANTIGRAVITY_ENABLED @@ -75,7 +80,7 @@ function resolveSettings(includeEnvOverrides: boolean): SettingsResult { const errors = validateSettings(settings) if (errors.length > 0) { - logError(`Settings validation errors: ${errors.map(e => e.message).join(', ')}`) + console.error(`[multi-auth] Settings validation errors: ${errors.map(e => e.message).join(', ')}`) } return { settings, source, errors: errors.length > 0 ? errors : undefined } @@ -96,42 +101,46 @@ export function updateSettings( updates: Partial, actor: string = 'system' ): { success: boolean; settings?: RotationSettings; errors?: SettingsValidationError[] } { - const current = getRuntimeSettings() - - // Merge updates with current settings - const newSettings: RotationSettings = { - ...current.settings, - ...updates, - updatedAt: Date.now(), - updatedBy: actor - } - - // Validate new settings - const errors = validateSettings(newSettings) - if (errors.length > 0) { - logError(`Settings update failed validation: ${errors.map(e => e.message).join(', ')}`) - return { success: false, errors } + let result: { success: boolean; settings?: RotationSettings; errors?: SettingsValidationError[] } = { success: false } + + mutateStore((store) => { + const newSettings: RotationSettings = { + ...DEFAULT_ROTATION_SETTINGS, + ...(store.settings || {}), + ...updates, + updatedAt: Date.now(), + updatedBy: actor + } + + const errors = validateSettings(newSettings) + if (errors.length > 0) { + console.error(`[multi-auth] Settings update failed validation: ${errors.map(e => e.message).join(', ')}`) + result = { success: false, errors } + return store + } + + store.settings = newSettings + // Keep legacy field in sync for force-mode compatibility. + store.rotationStrategy = newSettings.rotationStrategy + result = { success: true, settings: newSettings } + return store + }) + + if (result.success) { + console.log(`[multi-auth] Settings updated by ${actor}: ${JSON.stringify(updates)}`) } - - // Save to store - const store = loadStore() - store.settings = newSettings - // Keep legacy field in sync for force-mode compatibility. - store.rotationStrategy = newSettings.rotationStrategy - saveStore(store) - - logInfo(`Settings updated by ${actor}: ${JSON.stringify(updates)}`) - return { success: true, settings: newSettings } + return result } // Phase F: Reset settings to defaults export function resetSettings(actor: string = 'system'): RotationSettings { - const store = loadStore() - delete (store as any).settings - store.rotationStrategy = DEFAULT_ROTATION_SETTINGS.rotationStrategy - saveStore(store) + mutateStore((store) => { + delete (store as any).settings + store.rotationStrategy = DEFAULT_ROTATION_SETTINGS.rotationStrategy + return store + }) - logInfo(`Settings reset to defaults by ${actor}`) + console.log(`[multi-auth] Settings reset to defaults by ${actor}`) return { ...DEFAULT_ROTATION_SETTINGS } } diff --git a/src/store.ts b/src/store.ts index 3c3a623..f9fb130 100644 --- a/src/store.ts +++ b/src/store.ts @@ -2,6 +2,7 @@ import * as fs from 'fs' import * as path from 'path' import * as os from 'os' import * as crypto from 'node:crypto' +import { withFileLock } from './file-lock.js' import { hasMeaningfulRateLimits } from './rate-limits.js' import type { AccountStore, @@ -64,8 +65,6 @@ type AnyStoreFile = StoreFileV1 | StoreFileV2 let storeLocked = false let lastStoreError: string | null = null let lastStoreEncrypted = false -let writeLock = false -let writeLockQueue: Array<() => void> = [] function ensureDir(): void { const dir = getStoreDir() @@ -286,25 +285,6 @@ function loadLastKnownGood(): AccountStore | null { } } -async function acquireWriteLock(): Promise { - if (!writeLock) { - writeLock = true - return - } - return new Promise((resolve) => { - writeLockQueue.push(resolve) - }) -} - -function releaseWriteLock(): void { - const next = writeLockQueue.shift() - if (next) { - next() - } else { - writeLock = false - } -} - function buildSnapshot(window?: { remaining?: number; limit?: number; resetAt?: number }): RateLimitSnapshot | undefined { if (!window) return undefined return { @@ -420,7 +400,7 @@ export function loadStore(): AccountStore { return emptyStore() } -export function saveStore(store: AccountStore): void { +function saveStoreUnlocked(store: AccountStore): void { ensureDir() if (storeLocked) { console.error('[multi-auth] Store locked; refusing to overwrite encrypted file.') @@ -503,13 +483,27 @@ export function saveStore(store: AccountStore): void { saveLastKnownGood(store) } +export function saveStore(store: AccountStore): void { + withFileLock(getStoreFile(), () => { + saveStoreUnlocked(store) + }) +} + +function withStoreLock(fn: () => T): T { + return withFileLock(getStoreFile(), fn) +} + +export function mutateStore(fn: (store: AccountStore) => T): T { + return withStoreLock(() => { + const store = loadStore() + const result = fn(store) + saveStoreUnlocked(store) + return result + }) +} + export async function withWriteLock(fn: () => T): Promise { - await acquireWriteLock() - try { - return fn() - } finally { - releaseWriteLock() - } + return withStoreLock(fn) } export function getStoreDiagnostics(): { @@ -530,80 +524,80 @@ export function getStoreDiagnostics(): { export function addAccount(alias: string, creds: Omit): AccountStore { - const store = loadStore() - const entry = buildHistoryEntry(creds.rateLimits) - store.accounts[alias] = { - ...creds, - alias, - usageCount: 0, - rateLimitHistory: entry ? [entry] : creds.rateLimitHistory - } - if (!store.activeAlias) { - store.activeAlias = alias - } - saveStore(store) - return store + return mutateStore((store) => { + const entry = buildHistoryEntry(creds.rateLimits) + store.accounts[alias] = { + ...creds, + alias, + usageCount: 0, + rateLimitHistory: entry ? [entry] : creds.rateLimitHistory + } + if (!store.activeAlias) { + store.activeAlias = alias + } + return store + }) } export function removeAccount(alias: string): AccountStore { - const store = loadStore() - delete store.accounts[alias] - if (store.activeAlias === alias) { - const remaining = Object.keys(store.accounts) - store.activeAlias = remaining[0] || null - } - saveStore(store) - return store + return mutateStore((store) => { + delete store.accounts[alias] + if (store.activeAlias === alias) { + const remaining = Object.keys(store.accounts) + store.activeAlias = remaining[0] || null + } + return store + }) } export function updateAccount(alias: string, updates: Partial): AccountStore { - const store = loadStore() - if (store.accounts[alias]) { - const current = store.accounts[alias] - const next = { ...current, ...updates } - if (updates.rateLimits || next.rateLimits) { - const entry = buildHistoryEntry(next.rateLimits) - if (entry) { - next.rateLimitHistory = appendHistory(current.rateLimitHistory, entry) + return mutateStore((store) => { + if (store.accounts[alias]) { + const current = store.accounts[alias] + const next = { ...current, ...updates } + if (updates.rateLimits || next.rateLimits) { + const entry = buildHistoryEntry(next.rateLimits) + if (entry) { + next.rateLimitHistory = appendHistory(current.rateLimitHistory, entry) + } } + store.accounts[alias] = next } - store.accounts[alias] = next - saveStore(store) - } - return store + return store + }) } export function setActiveAlias(alias: string | null): AccountStore { - const store = loadStore() - const now = Date.now() - const previousAlias = store.activeAlias - - if (alias === null) { - store.activeAlias = null - } else if (store.accounts[alias]) { - if (previousAlias && previousAlias !== alias && store.accounts[previousAlias]) { - store.accounts[previousAlias] = { - ...store.accounts[previousAlias], - lastActiveUntil: now + return mutateStore((store) => { + const now = Date.now() + const previousAlias = store.activeAlias + + if (alias === null) { + store.activeAlias = null + } else if (store.accounts[alias]) { + if (previousAlias && previousAlias !== alias && store.accounts[previousAlias]) { + store.accounts[previousAlias] = { + ...store.accounts[previousAlias], + lastActiveUntil: now + } } - } - store.activeAlias = alias - store.accounts[alias] = { - ...store.accounts[alias], - lastSeenAt: now, - lastActiveUntil: undefined - } + store.activeAlias = alias + store.accounts[alias] = { + ...store.accounts[alias], + lastSeenAt: now, + lastActiveUntil: undefined + } - const aliases = Object.keys(store.accounts) - const idx = aliases.indexOf(alias) - if (idx >= 0) { - store.rotationIndex = idx + const aliases = Object.keys(store.accounts) + const idx = aliases.indexOf(alias) + if (idx >= 0) { + store.rotationIndex = idx + } + store.lastRotation = now } - store.lastRotation = now - } - saveStore(store) - return store + return store + }) } export function getActiveAccount(): AccountCredentials | null { diff --git a/src/types.ts b/src/types.ts index 7d1d83f..b643bf2 100644 --- a/src/types.ts +++ b/src/types.ts @@ -123,7 +123,7 @@ export interface AccountStore { forcedUntil?: number | null previousRotationStrategy?: string | null forcedBy?: string | null - rotationStrategy?: 'round-robin' | 'least-used' | 'random' | 'weighted-round-robin' + rotationStrategy?: 'round-robin' | 'least-used' | 'random' | 'weighted-round-robin' | 'use-up' // Phase F: Settings settings?: RotationSettings } @@ -138,7 +138,7 @@ export interface OpenAIModel { // Plugin config export interface PluginConfig { - rotationStrategy: 'round-robin' | 'least-used' | 'random' | 'weighted-round-robin' + rotationStrategy: 'round-robin' | 'least-used' | 'random' | 'weighted-round-robin' | 'use-up' autoRefreshTokens: boolean rateLimitCooldownMs: number // How long to skip rate-limited accounts modelUnsupportedCooldownMs: number // How long to skip accounts that don't support the requested model @@ -181,17 +181,30 @@ export const DEFAULT_CONFIG: PluginConfig = { export interface RotationSettings { // Rotation strategy rotationStrategy: 'round-robin' | 'least-used' | 'random' | 'weighted-round-robin' - + | 'use-up' + // Debug logging for request routing/content decisions + debug?: boolean // Rate limit thresholds (0-100) criticalThreshold: number // Account skipped below this (default: 10) lowThreshold: number // Warning threshold (default: 30) - + // Account weights for weighted rotation (0-1, sum should be 1) accountWeights: Record - + + // Session-based sticky routing: pin each conversation to the account that handled its first request + stickySessionRouting: boolean // default: true + sessionIdleTimeoutMs: number // evict session mapping after this much idle time (default: 30 days) + // What to do when the pinned account is unavailable mid-session: + // 'rotate' – pick the next healthy account (session continues, thinking context resets) + // 'fail' – return an error so the caller can decide (safest for context preservation) + sessionStickyFallback: 'rotate' | 'fail' // default: 'fail' + + // Drain order for use-up strategy (ordered list of aliases) + useUpOrder?: string[] + // Phase G: Feature flags featureFlags?: FeatureFlags - + // Last updated updatedAt?: number updatedBy?: string @@ -224,9 +237,13 @@ export interface WeightedPresetConfig { // Phase F: Default settings export const DEFAULT_ROTATION_SETTINGS: RotationSettings = { rotationStrategy: 'round-robin', + debug: false, criticalThreshold: 10, lowThreshold: 30, accountWeights: {}, + stickySessionRouting: true, + sessionIdleTimeoutMs: 30 * 24 * 60 * 60 * 1000, // 30 days + sessionStickyFallback: 'fail', featureFlags: { ...DEFAULT_FEATURE_FLAGS } } @@ -322,6 +339,18 @@ export function validateSettings(settings: Partial): SettingsV }) } } + + if ( + settings.sessionStickyFallback !== undefined && + settings.sessionStickyFallback !== 'rotate' && + settings.sessionStickyFallback !== 'fail' + ) { + errors.push({ + field: 'sessionStickyFallback', + message: 'Session sticky fallback must be rotate or fail', + constraint: "sessionStickyFallback in ['rotate', 'fail']" + }) + } return errors } diff --git a/src/web.ts b/src/web.ts index 3346ff4..ed24f3b 100644 --- a/src/web.ts +++ b/src/web.ts @@ -10,9 +10,10 @@ import { createAuthorizationFlow, loginAccount, refreshToken } from './auth.js' import { getCodexAuthPath, getCodexAuthStatus, getCodexAuthSummary, resolveAliasForCurrentAuth, syncCodexAuthFile, writeCodexAuthForAlias } from './codex-auth.js' import { getStoreStatus, listAccounts, loadStore, removeAccount, updateAccount } from './store.js' import { getRefreshQueueState, startRefreshQueue, stopRefreshQueue } from './refresh-queue.js' -import { getLogPath, logError, logInfo, readLogTail } from './logger.js' +import { getLogPath, isDebugEnabled, isDebugEnvOverrideActive, logError, logInfo, readLogTail } from './logger.js' import { getForceState, activateForce, clearForce, isForceActive, getRemainingForceTimeMs, formatForceDuration } from './force-mode.js' import { getSettings, getRuntimeSettings, updateSettings, isFeatureEnabled } from './settings.js' +import { listSessions, sessionCountByAlias, clearSession, clearSessionsForAlias } from './session-store.js' import { Errors } from './errors.js' import type { AccountCredentials, RateLimitWindow, LimitsConfidence, RotationSettings, WeightPreset } from './types.js' @@ -693,6 +694,22 @@ const HTML = ` overflow: auto; white-space: pre-wrap; } + .log-entry-collapsible { + display: block; + margin: 2px 0; + } + .log-entry-collapsible summary { + cursor: pointer; + color: #9fb4d0; + outline: none; + } + .log-entry-collapsible summary:hover { + color: #d6dde8; + } + .log-entry-full { + display: block; + margin-top: 4px; + } .ag-grid { display: grid; gap: 12px; @@ -838,6 +855,63 @@ const HTML = ` font-family: inherit; font-size: 13px; } + #useUpOrderSection { + margin-top: 14px; + padding-top: 12px; + border-top: 1px solid var(--border); + } + #useUpOrderSection .use-up-header { + font-size: 12px; + color: var(--muted); + margin-bottom: 8px; + } + .use-up-list { + list-style: none; + padding: 0; + margin: 0 0 10px 0; + } + .use-up-row { + display: flex; + align-items: center; + gap: 8px; + padding: 6px 10px; + border: 1px solid var(--border); + border-radius: 6px; + margin-bottom: 4px; + background: var(--panel-2); + } + .use-up-position { + font-size: 11px; + color: var(--muted); + width: 18px; + text-align: right; + flex-shrink: 0; + } + .use-up-alias { + flex: 1; + font-family: monospace; + font-size: 13px; + } + .use-up-move { + background: none; + border: 1px solid var(--border); + border-radius: 3px; + cursor: pointer; + padding: 2px 7px; + font-size: 12px; + color: var(--text); + line-height: 1.4; + width: auto; + } + .use-up-move:disabled { + opacity: 0.25; + cursor: default; + } + .use-up-save { + font-size: 12px; + padding: 5px 14px; + width: auto; + } @media (max-width: 720px) { header { padding: 26px 18px 10px; } .header-bar { flex-direction: column; align-items: stretch; } @@ -928,13 +1002,29 @@ const HTML = ` + ? +
    + + + ? +
    +
    + @@ -964,8 +1054,16 @@ const HTML = `
    Logs
    - +
    + + +
    +
    
           
         
    @@ -1022,6 +1120,10 @@ const HTML = `
           const logBox = document.getElementById('logBox')
           const refreshLogsBtn = document.getElementById('refreshLogsBtn')
           const logPathEl = document.getElementById('logPath')
    +      const debugLogToggle = document.getElementById('debugLogToggle')
    +      const debugLogToggleText = document.getElementById('debugLogToggleText')
    +      const debugLogToggleLabel = document.getElementById('debugLogToggleLabel')
    +      const debugLogStatus = document.getElementById('debugLogStatus')
           const openAccountModalBtn = document.getElementById('openAccountModalBtn')
           const addAliasInput = document.getElementById('addAliasInput')
           const addAccountBtn = document.getElementById('addAccountBtn')
    @@ -1061,6 +1163,13 @@ const HTML = `
           const rotationStrategySelect = document.getElementById('rotationStrategySelect')
           const rotationStrategyStatus = document.getElementById('rotationStrategyStatus')
           const rotationStrategyHelpIcon = document.getElementById('rotationStrategyHelpIcon')
    +      const sessionStickyFallbackSelect = document.getElementById('sessionStickyFallbackSelect')
    +      const sessionStickyFallbackStatus = document.getElementById('sessionStickyFallbackStatus')
    +      const sessionStickyFallbackHelpIcon = document.getElementById('sessionStickyFallbackHelpIcon')
    +      const useUpOrderSection = document.getElementById('useUpOrderSection')
    +      const useUpOrderList = document.getElementById('useUpOrderList')
    +      const useUpOrderStatus = document.getElementById('useUpOrderStatus')
    +      const saveUseUpOrderBtn = document.getElementById('saveUseUpOrderBtn')
     
           let latestState = null
           let pollTimer = null
    @@ -1071,10 +1180,15 @@ const HTML = `
             'round-robin': 'Cycle through enabled accounts in order.',
             'least-used': 'Prefer the enabled account with the lowest usage count.',
             'random': 'Randomly pick from healthy accounts each request.',
    -        'weighted-round-robin': 'Split requests by your account weights (example: 0.70/0.20/0.10 sends about 70%/20%/10%). Limited or disabled accounts are skipped automatically.'
    +        'weighted-round-robin': 'Split requests by your account weights (example: 0.70/0.20/0.10 sends about 70%/20%/10%). Limited or disabled accounts are skipped automatically.',
    +        'use-up': 'Drain each account fully before moving to the next. Accounts are used in the order configured below until rate-limited, then the next account takes over.'
           }
           const forceModeHelpText = 'Force mode pins all requests to one selected account for up to 24 hours. While force mode is on, rotation strategy is paused.'
           const forceAliasHelpText = 'Choose the account that force mode should pin.'
    +      const sessionStickyFallbackHelp = {
    +        fail: 'Pinned sessions fail when their account is unavailable. This preserves account-scoped response state and avoids silently breaking session continuity.',
    +        rotate: 'Pinned sessions move to another healthy account when their account is unavailable. This improves availability but may break account-scoped response state.'
    +      }
     
           function showToast(text) {
             toast.textContent = text
    @@ -1097,6 +1211,66 @@ const HTML = `
             return rotationStrategyHelp[strategy] || 'Rotation strategy controls how the next account is selected.'
           }
     
    +      // --- Use-up order panel ---
    +
    +      let useUpCurrentOrder = []
    +
    +      function renderUseUpOrderPanel(strategy, accounts, savedOrder) {
    +        if (!useUpOrderSection) return
    +        if (strategy !== 'use-up') {
    +          useUpOrderSection.style.display = 'none'
    +          return
    +        }
    +        useUpOrderSection.style.display = 'block'
    +
    +        // Build ordered list: saved aliases first (filtered to existing), then any remaining
    +        const allAliases = (accounts || []).map(a => a.alias)
    +        const ordered = [
    +          ...savedOrder.filter(a => allAliases.includes(a)),
    +          ...allAliases.filter(a => !savedOrder.includes(a))
    +        ]
    +        useUpCurrentOrder = [...ordered]
    +
    +        if (!useUpOrderList) return
    +        useUpOrderList.innerHTML = ordered.map(function(alias, i) {
    +          return '
  • ' + + '' + (i + 1) + '.' + + '' + escapeHtml(alias) + '' + + '' + + '' + + '
  • ' + }).join('') + + useUpOrderList.querySelectorAll('.use-up-move').forEach(btn => { + btn.addEventListener('click', () => { + const dir = btn.getAttribute('data-dir') + const idx = parseInt(btn.getAttribute('data-index'), 10) + const swapIdx = dir === 'up' ? idx - 1 : idx + 1 + if (swapIdx < 0 || swapIdx >= useUpCurrentOrder.length) return + ;[useUpCurrentOrder[idx], useUpCurrentOrder[swapIdx]] = [useUpCurrentOrder[swapIdx], useUpCurrentOrder[idx]] + renderUseUpOrderPanel(strategy, accounts, useUpCurrentOrder) + }) + }) + if (useUpOrderStatus) useUpOrderStatus.textContent = '' + } + + async function saveUseUpOrder() { + if (!saveUseUpOrderBtn || !useUpOrderStatus) return + saveUseUpOrderBtn.disabled = true + try { + await api('/api/settings', { + method: 'PUT', + body: JSON.stringify({ useUpOrder: useUpCurrentOrder, actor: 'dashboard' }) + }) + if (useUpOrderStatus) useUpOrderStatus.textContent = 'Saved.' + setTimeout(() => { if (useUpOrderStatus) useUpOrderStatus.textContent = '' }, 2000) + } catch (err) { + if (useUpOrderStatus) useUpOrderStatus.textContent = 'Error: ' + err.message + } finally { + saveUseUpOrderBtn.disabled = false + } + } + function renderControlHelp(strategy) { if (forceToggleLabel) { forceToggleLabel.title = forceModeHelpText @@ -1131,6 +1305,24 @@ const HTML = ` if (rotationStrategyStatus) { rotationStrategyStatus.textContent = 'Rotation strategy: ' + strategy + ' — ' + description + forceNotice } + // Show/hide use-up order panel based on strategy + renderUseUpOrderPanel(strategy, latestState?.accounts, latestState?.useUpOrder ?? []) + } + + function renderSessionStickyFallback(value) { + const fallback = value === 'rotate' ? 'rotate' : 'fail' + const description = sessionStickyFallbackHelp[fallback] + if (sessionStickyFallbackSelect) { + sessionStickyFallbackSelect.value = fallback + sessionStickyFallbackSelect.title = description + sessionStickyFallbackSelect.disabled = false + } + if (sessionStickyFallbackHelpIcon) { + sessionStickyFallbackHelpIcon.title = description + } + if (sessionStickyFallbackStatus) { + sessionStickyFallbackStatus.textContent = 'Session fallback: ' + fallback + ' — ' + description + } } async function api(path, options) { @@ -1179,6 +1371,18 @@ const HTML = ` .replace(/'/g, ''') } + function renderLogLine(line) { + const text = String(line || '') + const collapseAt = 500 + const previewLength = 220 + if (text.length <= collapseAt) return escapeHtml(text) + const preview = text.slice(0, previewLength).trimEnd() + return '
    ' + + '' + escapeHtml(preview) + '... (' + text.length + ' chars, click to expand)' + + '' + escapeHtml(text) + '' + + '
    ' + } + function remainingPercent(window) { if (!window || typeof window.remaining !== 'number' || typeof window.limit !== 'number') return null if (window.limit === 0) return null @@ -1479,6 +1683,26 @@ const HTML = ` notice.textContent = state.lastSyncError || storeStatus.error || '' } + function renderDebugLogging(state) { + if (!debugLogToggle || !debugLogToggleText) return + const enabled = Boolean(state.debugEnabled) + const persisted = Boolean(state.debugPersisted) + const envOverride = Boolean(state.debugEnvOverride) + debugLogToggle.checked = enabled + debugLogToggle.disabled = envOverride + debugLogToggleText.textContent = enabled ? (envOverride ? 'On (env)' : 'On') : 'Off' + if (debugLogToggleLabel) { + debugLogToggleLabel.title = envOverride + ? 'Debug logging is forced on by OPENCODE_MULTI_AUTH_DEBUG' + : 'Toggle per-request debug logging' + } + if (debugLogStatus) { + debugLogStatus.textContent = envOverride + ? 'Debug logging is forced on by OPENCODE_MULTI_AUTH_DEBUG.' + : (persisted ? 'Debug logging is enabled.' : 'Debug logging is disabled.') + } + } + function renderLogin(state) { if (!loginNotice) return if (state.login) { @@ -1787,13 +2011,15 @@ const HTML = ` async function refreshLogs() { const logs = await api('/api/logs') logPathEl.textContent = logs.path ? \`Path: \${logs.path}\` : '' - logBox.textContent = (logs.lines || []).join('\\n') || 'No logs yet.' + const lines = logs.lines || [] + logBox.innerHTML = lines.length ? lines.map(renderLogLine).join('\\n') : 'No logs yet.' } async function refreshState() { const state = await api('/api/state') latestState = state renderMeta(state) + renderDebugLogging(state) renderQueue(state) renderAccounts(state) renderLogin(state) @@ -2217,6 +2443,8 @@ const HTML = ` rotationStrategySelect.disabled = false renderRotationStrategyHelp(strategy) } + + renderSessionStickyFallback(latestState?.sessionStickyFallback || 'fail') } catch (err) { console.error('Failed to load force state:', err) if (forceStatus) { @@ -2225,6 +2453,9 @@ const HTML = ` if (rotationStrategyStatus) { rotationStrategyStatus.textContent = 'Failed to load strategy' } + if (sessionStickyFallbackStatus) { + sessionStickyFallbackStatus.textContent = 'Failed to load session fallback setting' + } } } @@ -2307,6 +2538,59 @@ const HTML = ` }) } + if (sessionStickyFallbackSelect) { + sessionStickyFallbackSelect.addEventListener('change', async () => { + const previous = latestState?.sessionStickyFallback || 'fail' + const sessionStickyFallback = sessionStickyFallbackSelect.value === 'rotate' ? 'rotate' : 'fail' + renderSessionStickyFallback(sessionStickyFallback) + sessionStickyFallbackSelect.disabled = true + try { + await api('/api/settings', { + method: 'PUT', + body: JSON.stringify({ + sessionStickyFallback, + actor: 'dashboard' + }) + }) + showToast('Session fallback set to ' + sessionStickyFallback) + await refreshState() + } catch (err) { + renderSessionStickyFallback(previous) + showToast('Error: ' + err.message) + } finally { + sessionStickyFallbackSelect.disabled = false + } + }) + } + + if (debugLogToggle) { + debugLogToggle.addEventListener('change', async () => { + const nextValue = debugLogToggle.checked + const previous = Boolean(latestState?.debugEnabled) + debugLogToggle.disabled = true + try { + await api('/api/settings', { + method: 'PUT', + body: JSON.stringify({ + debug: nextValue, + actor: 'dashboard' + }) + }) + showToast('Debug logging ' + (nextValue ? 'enabled' : 'disabled')) + await refreshState() + } catch (err) { + debugLogToggle.checked = previous + showToast('Error: ' + err.message) + } finally { + debugLogToggle.disabled = Boolean(latestState?.debugEnvOverride) + } + }) + } + + if (saveUseUpOrderBtn) { + saveUseUpOrderBtn.addEventListener('click', () => saveUseUpOrder()) + } + renderControlHelp('round-robin') refreshState().catch((err) => { console.error(err) @@ -3316,6 +3600,7 @@ export function startWebConsole(options?: { port?: number; host?: string }): htt const runtimeSettings = getRuntimeSettings() const antigravityEnabled = settings.settings.featureFlags?.antigravityEnabled ?? false const antigravity = antigravityEnabled ? loadAntigravityAccounts() : { accounts: [], path: ANTIGRAVITY_ACCOUNTS_FILE } + const debugEnabled = isDebugEnabled() const forceState = getForceState() const forceActive = isForceActive() const autoLogin = loadAutoLoginConfig() @@ -3337,7 +3622,12 @@ export function startWebConsole(options?: { port?: number; host?: string }): htt recommendedAlias: recommendAlias(rawAccounts), logPath: getLogPath(), autoLogin, + debugEnabled, + debugPersisted: settings.settings.debug ?? false, + debugEnvOverride: isDebugEnvOverrideActive(), rotationStrategy: runtimeSettings.settings.rotationStrategy, + sessionStickyFallback: runtimeSettings.settings.sessionStickyFallback, + useUpOrder: runtimeSettings.settings.useUpOrder ?? [], force: { active: forceActive, alias: forceState.forcedAlias, @@ -3347,11 +3637,42 @@ export function startWebConsole(options?: { port?: number; host?: string }): htt remainingTime: formatForceDuration(getRemainingForceTimeMs()) }, // Phase G: Include feature flags in state - featureFlags: settings.settings.featureFlags || { antigravityEnabled: false } + featureFlags: settings.settings.featureFlags || { antigravityEnabled: false }, + sessions: { + count: listSessions().length, + byAlias: sessionCountByAlias() + } }) return } + if (req.method === 'GET' && path === '/api/sessions') { + sendJson(res, 200, { sessions: listSessions() }) + return + } + + if (req.method === 'DELETE' && path.startsWith('/api/sessions/')) { + const sessionId = decodeURIComponent(path.slice('/api/sessions/'.length)) + if (!sessionId) { + sendJson(res, 400, { error: 'Missing session ID' }) + return + } + clearSession(sessionId) + sendJson(res, 200, { ok: true }) + return + } + + if (req.method === 'DELETE' && path.startsWith('/api/accounts/') && path.endsWith('/sessions')) { + const alias = decodeURIComponent(path.slice('/api/accounts/'.length, -'/sessions'.length)) + if (!alias) { + sendJson(res, 400, { error: 'Missing alias' }) + return + } + clearSessionsForAlias(alias) + sendJson(res, 200, { ok: true }) + return + } + if (req.method === 'GET' && path === '/api/logs') { const limitParam = requestUrl.searchParams.get('limit') const limit = limitParam ? Number(limitParam) : undefined @@ -3823,6 +4144,9 @@ export function startWebConsole(options?: { port?: number; host?: string }): htt if (body.rotationStrategy) { updates.rotationStrategy = body.rotationStrategy } + if (typeof body.debug === 'boolean') { + updates.debug = body.debug + } if (typeof body.criticalThreshold === 'number') { updates.criticalThreshold = body.criticalThreshold } @@ -3832,7 +4156,13 @@ export function startWebConsole(options?: { port?: number; host?: string }): htt if (body.accountWeights) { updates.accountWeights = body.accountWeights } - + if (Array.isArray(body.useUpOrder)) { + updates.useUpOrder = (body.useUpOrder as unknown[]).filter((v): v is string => typeof v === 'string') + } + if (body.sessionStickyFallback === 'fail' || body.sessionStickyFallback === 'rotate') { + updates.sessionStickyFallback = body.sessionStickyFallback + } + // Phase G: Handle feature flags if (body.featureFlags && typeof body.featureFlags === 'object') { updates.featureFlags = body.featureFlags diff --git a/tests/stress/store-stress.test.ts b/tests/stress/store-stress.test.ts index dc8d1f9..d4d064e 100644 --- a/tests/stress/store-stress.test.ts +++ b/tests/stress/store-stress.test.ts @@ -1,6 +1,8 @@ import * as fs from 'node:fs' import * as os from 'node:os' import * as path from 'node:path' +import { spawn } from 'node:child_process' +import { pathToFileURL } from 'node:url' import { addAccount, getStorePath, @@ -66,4 +68,67 @@ describe('stress: store consistency', () => { expect(Object.keys(store.accounts)).toHaveLength(5) expect(listAccounts()).toHaveLength(5) }) + + it('keeps counts consistent across concurrent child processes', async () => { + const repoRoot = process.cwd() + const storeModuleUrl = pathToFileURL(path.join(repoRoot, 'dist', 'store.js')).href + const workerPath = path.join(STRESS_DIR, 'store-worker.mjs') + const workerSource = [ + `import { mutateStore } from ${JSON.stringify(storeModuleUrl)}`, + `const iterations = Number(process.argv[2] ?? '0')`, + `const aliases = (process.argv[3] ?? '').split(',').filter(Boolean)`, + `for (let i = 0; i < iterations; i += 1) {`, + ` const alias = aliases[i % aliases.length]`, + ` mutateStore((store) => {`, + ` const current = store.accounts[alias]`, + ` if (!current) throw new Error('missing account: ' + alias)`, + ` current.usageCount = (current.usageCount || 0) + 1`, + ` current.lastUsed = Date.now()`, + ` return store`, + ` })`, + `}` + ].join('\n') + + fs.writeFileSync(workerPath, workerSource, { mode: 0o600 }) + + const aliases = Array.from({ length: 5 }, (_, idx) => `stress-${idx}`) + const iterationsPerProcess = 75 + const processes = 4 + + const children = Array.from({ length: processes }, () => { + return new Promise<{ code: number | null; stderr: string }>((resolve, reject) => { + const child = spawn(process.execPath, [workerPath, String(iterationsPerProcess), aliases.join(',')], { + env: { + ...process.env, + OPENCODE_MULTI_AUTH_STORE_DIR: STRESS_DIR, + OPENCODE_MULTI_AUTH_STORE_FILE: path.join(STRESS_DIR, 'accounts.json') + } + }) + + let stderr = '' + child.stderr.setEncoding('utf-8') + child.stderr.on('data', (chunk) => { + stderr += chunk + }) + child.on('error', reject) + child.on('close', (code) => { + resolve({ code, stderr }) + }) + }) + }) + + const results = await Promise.all(children) + + for (const child of results) { + expect(child.code).toBe(0) + expect(child.stderr).toBe('') + } + + const store = loadStore() + const expectedTotal = iterationsPerProcess * processes + const actualTotal = Object.values(store.accounts).reduce((sum, account) => sum + (account.usageCount || 0), 0) + + expect(Object.keys(store.accounts)).toHaveLength(5) + expect(actualTotal).toBe(expectedTotal) + }) }) diff --git a/tests/unit/feature-flags.test.ts b/tests/unit/feature-flags.test.ts index 5b0da21..e1efb98 100644 --- a/tests/unit/feature-flags.test.ts +++ b/tests/unit/feature-flags.test.ts @@ -252,7 +252,10 @@ describe('Phase G: Feature Flags', () => { rotationStrategy: 'round-robin', criticalThreshold: 10, lowThreshold: 30, - accountWeights: {} + accountWeights: {}, + stickySessionRouting: true, + sessionIdleTimeoutMs: 60 * 60 * 1000, + sessionStickyFallback: 'rotate' // featureFlags is undefined } saveStore(store) diff --git a/tests/unit/logger.test.ts b/tests/unit/logger.test.ts new file mode 100644 index 0000000..c508ecc --- /dev/null +++ b/tests/unit/logger.test.ts @@ -0,0 +1,34 @@ +import * as fs from 'node:fs' +import * as os from 'node:os' +import * as path from 'node:path' + +describe('logger debug output', () => { + const originalEnv = process.env + const logPath = path.join(os.tmpdir(), `oma-test-logger-${Date.now()}.log`) + + beforeEach(() => { + process.env = { + ...originalEnv, + CODEX_SOFT_LOG_PATH: logPath, + OPENCODE_MULTI_AUTH_DEBUG: '1' + } + if (fs.existsSync(logPath)) { + fs.rmSync(logPath) + } + }) + + afterEach(() => { + process.env = originalEnv + if (fs.existsSync(logPath)) { + fs.rmSync(logPath) + } + }) + + it('caps debug payload previews at 20 KB', async () => { + const { logDebugValue } = await import('../../src/logger.js') + logDebugValue('request.payload', { body: 'a'.repeat(50 * 1024) }) + + const data = fs.readFileSync(logPath, 'utf8') + expect(data).toContain('[truncated to 20480 bytes') + }) +}) diff --git a/tests/unit/rotation-strategy.test.ts b/tests/unit/rotation-strategy.test.ts index d9ba6f6..47fac4d 100644 --- a/tests/unit/rotation-strategy.test.ts +++ b/tests/unit/rotation-strategy.test.ts @@ -2,6 +2,7 @@ import * as fs from 'node:fs' import * as path from 'node:path' import * as os from 'node:os' import { getNextAccount } from '../../src/rotation.js' +import { clearSession } from '../../src/session-store.js' import { loadStore, saveStore } from '../../src/store.js' import { updateSettings } from '../../src/settings.js' import { DEFAULT_CONFIG, type AccountCredentials } from '../../src/types.js' @@ -28,6 +29,128 @@ function createPlanAccount(alias: string, usageCount: number, planType: string): } } +describe('use-up strategy', () => { + beforeEach(() => { + process.env = { + ...originalEnv, + OPENCODE_MULTI_AUTH_STORE_DIR: TEST_DIR, + OPENCODE_MULTI_AUTH_STORE_FILE: TEST_STORE_FILE + } + delete process.env.OPENCODE_MULTI_AUTH_ROTATION_STRATEGY + + if (fs.existsSync(TEST_DIR)) { + fs.rmSync(TEST_DIR, { recursive: true, force: true }) + } + fs.mkdirSync(TEST_DIR, { recursive: true }) + }) + + afterEach(() => { + process.env = originalEnv + if (fs.existsSync(TEST_DIR)) { + fs.rmSync(TEST_DIR, { recursive: true, force: true }) + } + }) + + it('picks the first account by store insertion order when both are healthy', async () => { + const store = loadStore() + store.accounts.alpha = createAccount('alpha', 0) + store.accounts.beta = createAccount('beta', 0) + saveStore(store) + + updateSettings({ rotationStrategy: 'use-up' }, 'test') + + const result = await getNextAccount(DEFAULT_CONFIG) + expect(result?.account.alias).toBe('alpha') + }) + + it('always returns the same first account across multiple requests (no advancement)', async () => { + const store = loadStore() + store.accounts.alpha = createAccount('alpha', 0) + store.accounts.beta = createAccount('beta', 0) + saveStore(store) + + updateSettings({ rotationStrategy: 'use-up' }, 'test') + + const r1 = await getNextAccount(DEFAULT_CONFIG) + const r2 = await getNextAccount(DEFAULT_CONFIG) + const r3 = await getNextAccount(DEFAULT_CONFIG) + expect(r1?.account.alias).toBe('alpha') + expect(r2?.account.alias).toBe('alpha') + expect(r3?.account.alias).toBe('alpha') + }) + + it('switches to the next account when the first is rate-limited', async () => { + const store = loadStore() + store.accounts.alpha = { + ...createAccount('alpha', 5), + rateLimitedUntil: Date.now() + 60_000 + } + store.accounts.beta = createAccount('beta', 0) + saveStore(store) + + updateSettings({ rotationStrategy: 'use-up' }, 'test') + + const result = await getNextAccount(DEFAULT_CONFIG) + expect(result?.account.alias).toBe('beta') + }) + + it('respects explicit useUpOrder over store insertion order', async () => { + const store = loadStore() + store.accounts.alpha = createAccount('alpha', 0) + store.accounts.beta = createAccount('beta', 0) + saveStore(store) + + updateSettings({ rotationStrategy: 'use-up', useUpOrder: ['beta', 'alpha'] }, 'test') + + const result = await getNextAccount(DEFAULT_CONFIG) + expect(result?.account.alias).toBe('beta') + }) + + it('skips aliases in useUpOrder that no longer exist and continues with the rest', async () => { + const store = loadStore() + store.accounts.alpha = createAccount('alpha', 0) + store.accounts.beta = createAccount('beta', 0) + saveStore(store) + + // 'ghost' does not exist in the store + updateSettings({ rotationStrategy: 'use-up', useUpOrder: ['ghost', 'beta', 'alpha'] }, 'test') + + const result = await getNextAccount(DEFAULT_CONFIG) + expect(result?.account.alias).toBe('beta') + }) + + it('appends accounts not in useUpOrder after explicit entries in insertion order', async () => { + const store = loadStore() + store.accounts.alpha = createAccount('alpha', 0) + store.accounts.beta = createAccount('beta', 0) + store.accounts.gamma = createAccount('gamma', 0) + saveStore(store) + + // Only beta is in the explicit order; alpha and gamma come after in insertion order + updateSettings({ rotationStrategy: 'use-up', useUpOrder: ['beta'] }, 'test') + + // First call: beta (explicit first) + const r1 = await getNextAccount(DEFAULT_CONFIG) + expect(r1?.account.alias).toBe('beta') + }) + + it('moves to the second explicit account when the first is rate-limited', async () => { + const store = loadStore() + store.accounts.alpha = createAccount('alpha', 0) + store.accounts.beta = { + ...createAccount('beta', 0), + rateLimitedUntil: Date.now() + 60_000 + } + store.accounts.gamma = createAccount('gamma', 0) + saveStore(store) + + updateSettings({ rotationStrategy: 'use-up', useUpOrder: ['beta', 'alpha', 'gamma'] }, 'test') + + const result = await getNextAccount(DEFAULT_CONFIG) + expect(result?.account.alias).toBe('alpha') + }) +}) + describe('Rotation Strategy Runtime Behavior', () => { beforeEach(() => { process.env = { @@ -46,6 +169,8 @@ describe('Rotation Strategy Runtime Behavior', () => { }) afterEach(() => { + clearSession('session-1') + clearSession('session-2') process.env = originalEnv if (fs.existsSync(TEST_DIR)) { fs.rmSync(TEST_DIR, { recursive: true, force: true }) @@ -92,6 +217,43 @@ describe('Rotation Strategy Runtime Behavior', () => { expect(rotation?.account.alias).toBe('beta') }) + it('pins a session to the account selected for its first routed request', async () => { + const store = loadStore() + store.accounts.alpha = createAccount('alpha', 0) + store.accounts.beta = createAccount('beta', 0) + saveStore(store) + + updateSettings({ rotationStrategy: 'round-robin', stickySessionRouting: true }, 'test') + + const firstTurn = await getNextAccount(DEFAULT_CONFIG, { sessionId: 'session-1' }) + expect(firstTurn?.account.alias).toBe('alpha') + + const followUpTurn = await getNextAccount(DEFAULT_CONFIG, { sessionId: 'session-1' }) + expect(followUpTurn?.account.alias).toBe('alpha') + + const unrelatedTurn = await getNextAccount(DEFAULT_CONFIG) + expect(unrelatedTurn?.account.alias).toBe('beta') + }) + + it('tracks independent sticky mappings for different route session IDs', async () => { + const store = loadStore() + store.accounts.alpha = createAccount('alpha', 0) + store.accounts.beta = createAccount('beta', 0) + saveStore(store) + + updateSettings({ rotationStrategy: 'round-robin', stickySessionRouting: true }, 'test') + + const sessionOne = await getNextAccount(DEFAULT_CONFIG, { sessionId: 'session-1' }) + const sessionTwo = await getNextAccount(DEFAULT_CONFIG, { sessionId: 'session-2' }) + const sessionOneAgain = await getNextAccount(DEFAULT_CONFIG, { sessionId: 'session-1' }) + const sessionTwoAgain = await getNextAccount(DEFAULT_CONFIG, { sessionId: 'session-2' }) + + expect(sessionOne?.account.alias).toBe('alpha') + expect(sessionTwo?.account.alias).toBe('beta') + expect(sessionOneAgain?.account.alias).toBe('alpha') + expect(sessionTwoAgain?.account.alias).toBe('beta') + }) + it('prefers pro accounts first for non-spark models', async () => { const store = loadStore() store.accounts.plus = createPlanAccount('plus', 0, 'plus') diff --git a/tests/unit/session-store.test.ts b/tests/unit/session-store.test.ts new file mode 100644 index 0000000..faf439c --- /dev/null +++ b/tests/unit/session-store.test.ts @@ -0,0 +1,129 @@ +import * as fs from 'node:fs' +import * as os from 'node:os' +import * as path from 'node:path' +import { spawn } from 'node:child_process' +import { pathToFileURL } from 'node:url' +import { + clearSession, + clearSessionsForAlias, + getSessionAlias, + getSessionStorePath, + listSessions, + pruneExpired, + sessionCount, + sessionCountByAlias, + setSessionAlias, + touchSession +} from '../../src/session-store.js' + +const TEST_DIR = path.join(os.tmpdir(), 'oma-session-store-test-' + Date.now()) +const originalEnv = process.env + +describe('session store persistence', () => { + beforeEach(() => { + process.env = { + ...originalEnv, + OPENCODE_MULTI_AUTH_STORE_DIR: TEST_DIR + } + if (fs.existsSync(TEST_DIR)) { + fs.rmSync(TEST_DIR, { recursive: true, force: true }) + } + fs.mkdirSync(TEST_DIR, { recursive: true }) + }) + + afterEach(() => { + process.env = originalEnv + if (fs.existsSync(TEST_DIR)) { + fs.rmSync(TEST_DIR, { recursive: true, force: true }) + } + }) + + it('persists session aliases to disk', () => { + setSessionAlias('session-1', 'alpha', 60_000) + + expect(getSessionAlias('session-1')).toBe('alpha') + expect(sessionCount()).toBe(1) + + const raw = JSON.parse(fs.readFileSync(getSessionStorePath(), 'utf-8')) + expect(raw.sessions['session-1'].alias).toBe('alpha') + }) + + it('touches, clears, and counts persisted sessions', async () => { + setSessionAlias('session-1', 'alpha', 60_000) + setSessionAlias('session-2', 'alpha', 60_000) + setSessionAlias('session-3', 'beta', 60_000) + const before = listSessions().find((entry) => entry.sessionId === 'session-1')!.lastUsedAt + + await new Promise((resolve) => setTimeout(resolve, 5)) + touchSession('session-1') + const after = listSessions().find((entry) => entry.sessionId === 'session-1')!.lastUsedAt + + expect(after).toBeGreaterThan(before) + expect(sessionCountByAlias()).toEqual({ alpha: 2, beta: 1 }) + + clearSession('session-3') + expect(getSessionAlias('session-3')).toBeUndefined() + + clearSessionsForAlias('alpha') + expect(sessionCount()).toBe(0) + }) + + it('persists pruning of expired sessions', () => { + setSessionAlias('old-session', 'alpha', 60_000) + const raw = JSON.parse(fs.readFileSync(getSessionStorePath(), 'utf-8')) + raw.sessions['old-session'].lastUsedAt = Date.now() - 10_000 + fs.writeFileSync(getSessionStorePath(), JSON.stringify(raw, null, 2), { mode: 0o600 }) + + pruneExpired(1_000) + + expect(getSessionAlias('old-session')).toBeUndefined() + const persisted = JSON.parse(fs.readFileSync(getSessionStorePath(), 'utf-8')) + expect(persisted.sessions['old-session']).toBeUndefined() + }) + + it('keeps valid JSON across concurrent child processes', async () => { + const repoRoot = process.cwd() + const moduleUrl = pathToFileURL(path.join(repoRoot, 'dist', 'session-store.js')).href + const workerPath = path.join(TEST_DIR, 'session-worker.mjs') + const workerSource = [ + `import { setSessionAlias } from ${JSON.stringify(moduleUrl)}`, + `const prefix = process.argv[2]`, + `const alias = process.argv[3]`, + `const count = Number(process.argv[4] ?? '0')`, + `for (let i = 0; i < count; i += 1) {`, + ` setSessionAlias(prefix + '-' + i, alias, 60000)`, + `}` + ].join('\n') + + fs.writeFileSync(workerPath, workerSource, { mode: 0o600 }) + + const processes = 4 + const perProcess = 25 + const children = Array.from({ length: processes }, (_, idx) => { + return new Promise<{ code: number | null; stderr: string }>((resolve, reject) => { + const child = spawn(process.execPath, [workerPath, `session-${idx}`, `alias-${idx}`, String(perProcess)], { + env: { + ...process.env, + OPENCODE_MULTI_AUTH_STORE_DIR: TEST_DIR + } + }) + let stderr = '' + child.stderr.setEncoding('utf-8') + child.stderr.on('data', (chunk) => { + stderr += chunk + }) + child.on('error', reject) + child.on('close', (code) => resolve({ code, stderr })) + }) + }) + + const results = await Promise.all(children) + for (const child of results) { + expect(child.code).toBe(0) + expect(child.stderr).toBe('') + } + + expect(sessionCount()).toBe(processes * perProcess) + expect(() => JSON.parse(fs.readFileSync(getSessionStorePath(), 'utf-8'))).not.toThrow() + }) +}) diff --git a/tests/unit/settings.test.ts b/tests/unit/settings.test.ts index ebcfa1b..dae3805 100644 --- a/tests/unit/settings.test.ts +++ b/tests/unit/settings.test.ts @@ -37,6 +37,7 @@ describe('Phase F: Settings + Weighted Rotation', () => { delete process.env.OPENCODE_MULTI_AUTH_ROTATION_STRATEGY delete process.env.OPENCODE_MULTI_AUTH_CRITICAL_THRESHOLD delete process.env.OPENCODE_MULTI_AUTH_LOW_THRESHOLD + delete process.env.OPENCODE_MULTI_AUTH_DEBUG }) afterEach(() => { @@ -52,9 +53,12 @@ describe('Phase F: Settings + Weighted Rotation', () => { expect(result.source).toBe('default') expect(result.settings.rotationStrategy).toBe('round-robin') + expect(result.settings.debug).toBe(false) expect(result.settings.criticalThreshold).toBe(10) expect(result.settings.lowThreshold).toBe(30) expect(result.settings.accountWeights).toEqual({}) + expect(result.settings.sessionIdleTimeoutMs).toBe(30 * 24 * 60 * 60 * 1000) + expect(result.settings.sessionStickyFallback).toBe('fail') }) it('should persist settings to store', () => { @@ -116,6 +120,15 @@ describe('Phase F: Settings + Weighted Rotation', () => { expect(result.source).toBe('env') expect(result.settings.lowThreshold).toBe(45) }) + + it('should use environment variable for debug logging', () => { + process.env.OPENCODE_MULTI_AUTH_DEBUG = '1' + + const result = getSettings() + + expect(result.source).toBe('env') + expect(result.settings.debug).toBe(true) + }) }) describe('Settings Validation', () => { @@ -189,6 +202,23 @@ describe('Phase F: Settings + Weighted Rotation', () => { expect(result.success).toBe(true) expect(result.errors).toBeUndefined() }) + + it('should reject invalid session sticky fallback', () => { + const result = updateSettings({ + sessionStickyFallback: 'invalid' as RotationSettings['sessionStickyFallback'] + }, 'test') + + expect(result.success).toBe(false) + expect(result.errors?.some(e => e.field === 'sessionStickyFallback')).toBe(true) + }) + + it('should accept valid session sticky fallback values', () => { + const failResult = updateSettings({ sessionStickyFallback: 'fail' }, 'test') + expect(failResult.success).toBe(true) + + const rotateResult = updateSettings({ sessionStickyFallback: 'rotate' }, 'test') + expect(rotateResult.success).toBe(true) + }) }) describe('Weighted Rotation', () => { @@ -335,6 +365,16 @@ describe('Phase F: Settings + Weighted Rotation', () => { expect(store.settings?.updatedAt).toBeDefined() }) + it('should persist debug logging setting', () => { + const result = updateSettings({ debug: true }, 'test') + + expect(result.success).toBe(true) + expect(result.settings?.debug).toBe(true) + + const loaded = getSettings() + expect(loaded.settings.debug).toBe(true) + }) + it('should allow checking if settings can be reset', () => { // Initially no persisted settings let info = getSettingsWithInfo() diff --git a/tests/unit/store.test.ts b/tests/unit/store.test.ts index 14eade7..a8f1b01 100644 --- a/tests/unit/store.test.ts +++ b/tests/unit/store.test.ts @@ -6,6 +6,7 @@ import { saveStore, getStoreDiagnostics, withWriteLock, + getStorePath, addAccount, updateAccount, removeAccount @@ -119,6 +120,30 @@ describe('Store Operations', () => { expect(fs.existsSync(lkgPath)).toBe(false) delete process.env.CODEX_SOFT_STORE_PASSPHRASE }) + + it('should recover from a stale lock directory', () => { + const lockDir = `${getStorePath()}.lock` + fs.mkdirSync(lockDir, { recursive: true }) + fs.writeFileSync( + path.join(lockDir, 'owner.json'), + JSON.stringify({ + pid: 999999, + hostname: 'stale-host', + createdAt: Date.now() - 10_000, + storeFile: getStorePath() + }, null, 2), + { mode: 0o600 } + ) + + const store = addAccount('stale-lock-alias', { + accessToken: 'test-access-token', + refreshToken: 'test-refresh-token', + expiresAt: Date.now() + 3600000 + }) + + expect(store.accounts['stale-lock-alias']).toBeDefined() + expect(fs.existsSync(lockDir)).toBe(false) + }) }) describe('Write Lock', () => { diff --git a/tests/web-headless/dashboard-smoke.test.ts b/tests/web-headless/dashboard-smoke.test.ts index 45deccb..de0020d 100644 --- a/tests/web-headless/dashboard-smoke.test.ts +++ b/tests/web-headless/dashboard-smoke.test.ts @@ -95,6 +95,9 @@ describe('dashboard headless smoke', () => { const scriptContent = scriptMatch?.[1] || '' expect(() => new Function(scriptContent)).not.toThrow() + expect(html).toContain('log-entry-collapsible') + expect(scriptContent).toContain('function renderLogLine') + expect(scriptContent).toContain('click to expand') } finally { await closeServer(server) fs.unwatchFile(getCodexAuthPath())