diff --git a/src/services/worker/DatabaseManager.ts b/src/services/worker/DatabaseManager.ts index 323ff4e9..57301996 100644 --- a/src/services/worker/DatabaseManager.ts +++ b/src/services/worker/DatabaseManager.ts @@ -31,7 +31,9 @@ export class DatabaseManager { this.chromaSync = new ChromaSync('claude-mem'); // Start background backfill (fire-and-forget) - this.chromaSync.ensureBackfilled(); + this.chromaSync.ensureBackfilled().catch(error => { + logger.error('DB', 'Chroma backfill failed (non-fatal)', {}, error); + }); logger.info('DB', 'Database initialized'); } diff --git a/src/services/worker/SDKAgent.ts b/src/services/worker/SDKAgent.ts index cbe4f9f2..27a333fa 100644 --- a/src/services/worker/SDKAgent.ts +++ b/src/services/worker/SDKAgent.ts @@ -435,15 +435,30 @@ export class SDKAgent { */ private findClaudeExecutable(): string { const settings = SettingsDefaultsManager.loadFromFile(USER_SETTINGS_PATH); - const claudePath = settings.CLAUDE_CODE_PATH || - execSync(process.platform === 'win32' ? 'where claude' : 'which claude', { encoding: 'utf8', windowsHide: true }) - .trim().split('\n')[0].trim(); - - if (!claudePath) { - throw new Error('Claude executable not found in PATH'); + + // 1. Check configured path + if (settings.CLAUDE_CODE_PATH) { + // Lazy load fs to keep startup fast + const { existsSync } = require('fs'); + if (!existsSync(settings.CLAUDE_CODE_PATH)) { + throw new Error(`CLAUDE_CODE_PATH is set to "${settings.CLAUDE_CODE_PATH}" but the file does not exist.`); + } + return settings.CLAUDE_CODE_PATH; } - return claudePath; + // 2. Try auto-detection + try { + const claudePath = execSync( + process.platform === 'win32' ? 'where claude' : 'which claude', + { encoding: 'utf8', windowsHide: true, stdio: ['ignore', 'pipe', 'ignore'] } + ).trim().split('\n')[0].trim(); + + if (claudePath) return claudePath; + } catch (error) { + logger.debug('SDK', 'Claude executable auto-detection failed', error); + } + + throw new Error('Claude executable not found. Please either:\n1. Add "claude" to your system PATH, or\n2. Set CLAUDE_CODE_PATH in ~/.claude-mem/settings.json'); } /**