mirror of
https://github.com/thedotmack/claude-mem
synced 2026-04-25 17:15:04 +02:00
fix: resolve Greptile review comments on error handling
- Remove spurious console.error in logger JSON.parse catch (expected control flow) - Remove debug logging from hot PID cleanup loop (approved override) - Replace unsafe `error as Error` casts with instanceof checks in ChromaSync, GeminiAgent, OpenRouterAgent - Wrap non-Error FTS failures with new Error(String()) instead of dropping details Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -326,11 +326,9 @@ export async function waitForProcessesExit(pids: number[], timeoutMs: number): P
|
|||||||
try {
|
try {
|
||||||
process.kill(pid, 0);
|
process.kill(pid, 0);
|
||||||
return true;
|
return true;
|
||||||
} catch (error: unknown) {
|
} catch {
|
||||||
// process.kill(pid, 0) throws when PID doesn't exist — expected during cleanup
|
// process.kill(pid, 0) throws when PID doesn't exist — expected during cleanup
|
||||||
if (error instanceof Error) {
|
// [ANTI-PATTERN IGNORED]: Tight loop checking 100s of PIDs every 100ms during cleanup
|
||||||
logger.debug('SYSTEM', `Process ${pid} no longer exists`, { pid, error: error.message });
|
|
||||||
}
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -421,7 +421,7 @@ export class MigrationRunner {
|
|||||||
try {
|
try {
|
||||||
this.createUserPromptsFTS();
|
this.createUserPromptsFTS();
|
||||||
} catch (ftsError) {
|
} catch (ftsError) {
|
||||||
logger.warn('DB', 'FTS5 not available — user_prompts_fts skipped (search uses ChromaDB)', {}, ftsError instanceof Error ? ftsError : undefined);
|
logger.warn('DB', 'FTS5 not available — user_prompts_fts skipped (search uses ChromaDB)', {}, ftsError instanceof Error ? ftsError : new Error(String(ftsError)));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Commit transaction
|
// Commit transaction
|
||||||
|
|||||||
@@ -565,7 +565,7 @@ export class ChromaSync {
|
|||||||
try {
|
try {
|
||||||
await this.runBackfillPipeline(db, backfillProject, existing);
|
await this.runBackfillPipeline(db, backfillProject, existing);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error('CHROMA_SYNC', 'Backfill failed', { project: backfillProject }, error as Error);
|
logger.error('CHROMA_SYNC', 'Backfill failed', { project: backfillProject }, error instanceof Error ? error : new Error(String(error)));
|
||||||
throw new Error(`Backfill failed: ${error instanceof Error ? error.message : String(error)}`);
|
throw new Error(`Backfill failed: ${error instanceof Error ? error.message : String(error)}`);
|
||||||
} finally {
|
} finally {
|
||||||
db.close();
|
db.close();
|
||||||
|
|||||||
@@ -374,7 +374,7 @@ export class GeminiAgent {
|
|||||||
return this.fallbackAgent.startSession(session, worker);
|
return this.fallbackAgent.startSession(session, worker);
|
||||||
}
|
}
|
||||||
|
|
||||||
logger.failure('SDK', 'Gemini agent error', { sessionDbId: session.sessionDbId }, error as Error);
|
logger.failure('SDK', 'Gemini agent error', { sessionDbId: session.sessionDbId }, error instanceof Error ? error : new Error(String(error)));
|
||||||
throw error;
|
throw error;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -345,7 +345,7 @@ export class OpenRouterAgent {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
logger.failure('SDK', 'OpenRouter agent error', { sessionDbId: session.sessionDbId }, error as Error);
|
logger.failure('SDK', 'OpenRouter agent error', { sessionDbId: session.sessionDbId }, error instanceof Error ? error : new Error(String(error)));
|
||||||
throw error;
|
throw error;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -154,11 +154,7 @@ class Logger {
|
|||||||
try {
|
try {
|
||||||
input = JSON.parse(toolInput);
|
input = JSON.parse(toolInput);
|
||||||
} catch (_parseError: unknown) {
|
} catch (_parseError: unknown) {
|
||||||
// [ANTI-PATTERN IGNORED]: Logger cannot log its own failures, using stderr/console as last resort
|
// Input is a raw string (e.g., Bash command), use as-is — JSON.parse failure is expected here
|
||||||
// Input is a raw string (e.g., Bash command), use as-is
|
|
||||||
if (_parseError instanceof Error) {
|
|
||||||
console.error('[logger] JSON parse failed for tool input:', _parseError);
|
|
||||||
}
|
|
||||||
input = toolInput;
|
input = toolInput;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user