From 2fff770b6bc67616e855cc8dc940751bd1267a67 Mon Sep 17 00:00:00 2001 From: kaitranntt Date: Sat, 27 Dec 2025 12:25:59 -0500 Subject: [PATCH] fix: wrap RecoveryManager in try-catch to prevent blocking CLI commands Recovery failures (permission errors, disk full) no longer block --version/--help commands. Recovery is best-effort - warns on failure but allows basic CLI functionality to continue. Fixes edge case identified in PR #215 code review. --- src/ccs.ts | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/ccs.ts b/src/ccs.ts index 02550848..dc2df697 100644 --- a/src/ccs.ts +++ b/src/ccs.ts @@ -294,13 +294,19 @@ async function main(): Promise { // Auto-recovery for missing configuration (BEFORE any early-exit commands) // This ensures ALL commands benefit from auto-recovery, not just profile-switching flow // Recovery is safe to run early - it only creates missing files with safe defaults - const RecoveryManagerModule = await import('./management/recovery-manager'); - const RecoveryManager = RecoveryManagerModule.default; - const recovery = new RecoveryManager(); - const recovered = recovery.recoverAll(); + // Wrapped in try-catch to prevent blocking --version/--help on permission errors + try { + const RecoveryManagerModule = await import('./management/recovery-manager'); + const RecoveryManager = RecoveryManagerModule.default; + const recovery = new RecoveryManager(); + const recovered = recovery.recoverAll(); - if (recovered) { - recovery.showRecoveryHints(); + if (recovered) { + recovery.showRecoveryHints(); + } + } catch (err) { + // Recovery is best-effort - don't block basic CLI functionality + console.warn('[!] Recovery failed:', (err as Error).message); } // Special case: version command (check BEFORE profile detection)