From 231d9bbd1b06e29998afff2cb324a299b928084a Mon Sep 17 00:00:00 2001 From: ndycode Date: Sat, 21 Mar 2026 10:58:54 +0800 Subject: [PATCH 1/3] refactor: extract fix command --- lib/codex-manager.ts | 56 ++++++++++++++++++++------------------------ 1 file changed, 26 insertions(+), 30 deletions(-) diff --git a/lib/codex-manager.ts b/lib/codex-manager.ts index b1c32ea7..ac2598ff 100644 --- a/lib/codex-manager.ts +++ b/lib/codex-manager.ts @@ -2834,35 +2834,6 @@ function applyDoctorFixes(storage: AccountStorageV3): { return { changed, actions }; } -async function runDoctor(args: string[]): Promise { - return runDoctorCommand(args, { - setStoragePath, - getStoragePath, - getCodexCliAuthPath, - getCodexCliConfigPath, - loadCodexCliState, - parseDoctorArgs, - printDoctorUsage, - loadAccounts, - applyDoctorFixes, - saveAccounts, - resolveActiveIndex, - evaluateForecastAccounts, - recommendForecastAccount, - sanitizeEmail, - extractAccountEmail, - extractAccountId, - hasPlaceholderEmail, - hasLikelyInvalidRefreshToken, - getDoctorRefreshTokenKey, - hasUsableAccessToken, - queuedRefresh, - normalizeFailureDetail, - applyTokenAccountIdentity, - setCodexCliActiveSelection, - }); -} - async function clearAccountsAndReset(): Promise { await clearAccounts(); } @@ -3600,7 +3571,32 @@ export async function runCodexMultiAuthCli(rawArgs: string[]): Promise { return runFix(rest); } if (command === "doctor") { - return runDoctor(rest); + return runDoctorCommand(rest, { + setStoragePath, + getStoragePath, + getCodexCliAuthPath, + getCodexCliConfigPath, + loadCodexCliState, + parseDoctorArgs, + printDoctorUsage, + loadAccounts, + applyDoctorFixes, + saveAccounts, + resolveActiveIndex, + evaluateForecastAccounts, + recommendForecastAccount, + sanitizeEmail, + extractAccountEmail, + extractAccountId, + hasPlaceholderEmail, + hasLikelyInvalidRefreshToken, + getDoctorRefreshTokenKey, + hasUsableAccessToken, + queuedRefresh, + normalizeFailureDetail, + applyTokenAccountIdentity, + setCodexCliActiveSelection, + }); } console.error(`Unknown command: ${command}`); From 987fca24ddb1d34d51465d2a7241d6fba313011b Mon Sep 17 00:00:00 2001 From: ndycode Date: Sat, 21 Mar 2026 11:31:47 +0800 Subject: [PATCH 2/3] refactor: route fix through command module --- lib/codex-manager.ts | 101 +++++++++++++++++++++++++++---------------- 1 file changed, 64 insertions(+), 37 deletions(-) diff --git a/lib/codex-manager.ts b/lib/codex-manager.ts index ac2598ff..7864539f 100644 --- a/lib/codex-manager.ts +++ b/lib/codex-manager.ts @@ -2667,41 +2667,6 @@ function upsertRecoveredFlaggedAccount( }; } -async function runFix(args: string[]): Promise { - return runFixCommand(args, { - setStoragePath, - loadAccounts, - parseFixArgs, - printFixUsage, - loadQuotaCache, - saveQuotaCache, - cloneQuotaCacheData, - buildQuotaEmailFallbackState, - updateQuotaCacheForAccount, - pruneUnsafeQuotaEmailCacheEntry, - resolveActiveIndex, - hasUsableAccessToken, - fetchCodexQuotaSnapshot, - formatCompactQuotaSnapshot, - normalizeFailureDetail, - hasLikelyInvalidRefreshToken, - queuedRefresh, - sanitizeEmail, - extractAccountEmail, - extractAccountId, - applyTokenAccountIdentity, - isHardRefreshFailure, - evaluateForecastAccounts, - recommendForecastAccount, - saveAccounts, - formatAccountLabel, - stylePromptText, - formatResultSummary, - styleAccountDetailText, - defaultDisplay: DEFAULT_DASHBOARD_DISPLAY_SETTINGS, - }); -} - interface DoctorFixAction { key: string; message: string; @@ -3022,7 +2987,38 @@ async function runAuthLogin(args: string[]): Promise { "Auto-Fix", "Checking and fixing common issues", async () => { - await runFix(["--live"]); + await runFixCommand(["--live"], { + setStoragePath, + loadAccounts, + parseFixArgs, + printFixUsage, + loadQuotaCache, + saveQuotaCache, + cloneQuotaCacheData, + buildQuotaEmailFallbackState, + updateQuotaCacheForAccount, + pruneUnsafeQuotaEmailCacheEntry, + resolveActiveIndex, + hasUsableAccessToken, + fetchCodexQuotaSnapshot, + formatCompactQuotaSnapshot, + normalizeFailureDetail, + hasLikelyInvalidRefreshToken, + queuedRefresh, + sanitizeEmail, + extractAccountEmail, + extractAccountId, + applyTokenAccountIdentity, + isHardRefreshFailure, + evaluateForecastAccounts, + recommendForecastAccount, + saveAccounts, + formatAccountLabel, + stylePromptText, + formatResultSummary, + styleAccountDetailText, + defaultDisplay: DEFAULT_DASHBOARD_DISPLAY_SETTINGS, + }); }, displaySettings, ); @@ -3568,7 +3564,38 @@ export async function runCodexMultiAuthCli(rawArgs: string[]): Promise { }); } if (command === "fix") { - return runFix(rest); + return runFixCommand(rest, { + setStoragePath, + loadAccounts, + parseFixArgs, + printFixUsage, + loadQuotaCache, + saveQuotaCache, + cloneQuotaCacheData, + buildQuotaEmailFallbackState, + updateQuotaCacheForAccount, + pruneUnsafeQuotaEmailCacheEntry, + resolveActiveIndex, + hasUsableAccessToken, + fetchCodexQuotaSnapshot, + formatCompactQuotaSnapshot, + normalizeFailureDetail, + hasLikelyInvalidRefreshToken, + queuedRefresh, + sanitizeEmail, + extractAccountEmail, + extractAccountId, + applyTokenAccountIdentity, + isHardRefreshFailure, + evaluateForecastAccounts, + recommendForecastAccount, + saveAccounts, + formatAccountLabel, + stylePromptText, + formatResultSummary, + styleAccountDetailText, + defaultDisplay: DEFAULT_DASHBOARD_DISPLAY_SETTINGS, + }); } if (command === "doctor") { return runDoctorCommand(rest, { From 661dfa1e5bc852d7faf48608ee8aac842d4c34b5 Mon Sep 17 00:00:00 2001 From: ndycode Date: Sat, 21 Mar 2026 12:00:53 +0800 Subject: [PATCH 3/3] refactor: share fix command dependency wiring --- lib/codex-manager.ts | 102 ++++++++++++++++--------------------------- 1 file changed, 38 insertions(+), 64 deletions(-) diff --git a/lib/codex-manager.ts b/lib/codex-manager.ts index 7864539f..4c207ab8 100644 --- a/lib/codex-manager.ts +++ b/lib/codex-manager.ts @@ -45,6 +45,7 @@ import { } from "./codex-manager/commands/doctor.js"; import { type FixCliOptions, + type FixCommandDeps, runFixCommand, } from "./codex-manager/commands/fix.js"; import { runForecastCommand } from "./codex-manager/commands/forecast.js"; @@ -2803,6 +2804,41 @@ async function clearAccountsAndReset(): Promise { await clearAccounts(); } +function buildFixCommandDeps(): FixCommandDeps { + return { + setStoragePath, + loadAccounts, + parseFixArgs, + printFixUsage, + loadQuotaCache, + saveQuotaCache, + cloneQuotaCacheData, + buildQuotaEmailFallbackState, + updateQuotaCacheForAccount, + pruneUnsafeQuotaEmailCacheEntry, + resolveActiveIndex, + hasUsableAccessToken, + fetchCodexQuotaSnapshot, + formatCompactQuotaSnapshot, + normalizeFailureDetail, + hasLikelyInvalidRefreshToken, + queuedRefresh, + sanitizeEmail, + extractAccountEmail, + extractAccountId, + applyTokenAccountIdentity, + isHardRefreshFailure, + evaluateForecastAccounts, + recommendForecastAccount, + saveAccounts, + formatAccountLabel, + stylePromptText, + formatResultSummary, + styleAccountDetailText, + defaultDisplay: DEFAULT_DASHBOARD_DISPLAY_SETTINGS, + }; +} + async function handleManageAction( storage: AccountStorageV3, menuResult: Awaited>, @@ -2987,38 +3023,7 @@ async function runAuthLogin(args: string[]): Promise { "Auto-Fix", "Checking and fixing common issues", async () => { - await runFixCommand(["--live"], { - setStoragePath, - loadAccounts, - parseFixArgs, - printFixUsage, - loadQuotaCache, - saveQuotaCache, - cloneQuotaCacheData, - buildQuotaEmailFallbackState, - updateQuotaCacheForAccount, - pruneUnsafeQuotaEmailCacheEntry, - resolveActiveIndex, - hasUsableAccessToken, - fetchCodexQuotaSnapshot, - formatCompactQuotaSnapshot, - normalizeFailureDetail, - hasLikelyInvalidRefreshToken, - queuedRefresh, - sanitizeEmail, - extractAccountEmail, - extractAccountId, - applyTokenAccountIdentity, - isHardRefreshFailure, - evaluateForecastAccounts, - recommendForecastAccount, - saveAccounts, - formatAccountLabel, - stylePromptText, - formatResultSummary, - styleAccountDetailText, - defaultDisplay: DEFAULT_DASHBOARD_DISPLAY_SETTINGS, - }); + await runFixCommand(["--live"], buildFixCommandDeps()); }, displaySettings, ); @@ -3564,38 +3569,7 @@ export async function runCodexMultiAuthCli(rawArgs: string[]): Promise { }); } if (command === "fix") { - return runFixCommand(rest, { - setStoragePath, - loadAccounts, - parseFixArgs, - printFixUsage, - loadQuotaCache, - saveQuotaCache, - cloneQuotaCacheData, - buildQuotaEmailFallbackState, - updateQuotaCacheForAccount, - pruneUnsafeQuotaEmailCacheEntry, - resolveActiveIndex, - hasUsableAccessToken, - fetchCodexQuotaSnapshot, - formatCompactQuotaSnapshot, - normalizeFailureDetail, - hasLikelyInvalidRefreshToken, - queuedRefresh, - sanitizeEmail, - extractAccountEmail, - extractAccountId, - applyTokenAccountIdentity, - isHardRefreshFailure, - evaluateForecastAccounts, - recommendForecastAccount, - saveAccounts, - formatAccountLabel, - stylePromptText, - formatResultSummary, - styleAccountDetailText, - defaultDisplay: DEFAULT_DASHBOARD_DISPLAY_SETTINGS, - }); + return runFixCommand(rest, buildFixCommandDeps()); } if (command === "doctor") { return runDoctorCommand(rest, {