fix: resolve critical worker crashes on startup (v8.0.2 regression)
Fixes #417, #418, #421, #422, #425 1. Handle Chroma sync errors gracefully in DatabaseManager to prevent unhandled promise rejections. 2. Safely handle missing 'claude' executable in SDKAgent with try-catch block around auto-detection.
This commit is contained in:
@@ -31,7 +31,9 @@ export class DatabaseManager {
|
|||||||
this.chromaSync = new ChromaSync('claude-mem');
|
this.chromaSync = new ChromaSync('claude-mem');
|
||||||
|
|
||||||
// Start background backfill (fire-and-forget)
|
// 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');
|
logger.info('DB', 'Database initialized');
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -435,15 +435,30 @@ export class SDKAgent {
|
|||||||
*/
|
*/
|
||||||
private findClaudeExecutable(): string {
|
private findClaudeExecutable(): string {
|
||||||
const settings = SettingsDefaultsManager.loadFromFile(USER_SETTINGS_PATH);
|
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) {
|
// 1. Check configured path
|
||||||
throw new Error('Claude executable not found in 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');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user