Merge pull request #1546 from bitcryptic-gw/fix/stale-session-recovery
fix: auto-recover from stale Claude Code session on exit code 1
This commit is contained in:
@@ -561,6 +561,10 @@ export function setSession(groupFolder: string, sessionId: string): void {
|
|||||||
).run(groupFolder, sessionId);
|
).run(groupFolder, sessionId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function deleteSession(groupFolder: string): void {
|
||||||
|
db.prepare('DELETE FROM sessions WHERE group_folder = ?').run(groupFolder);
|
||||||
|
}
|
||||||
|
|
||||||
export function getAllSessions(): Record<string, string> {
|
export function getAllSessions(): Record<string, string> {
|
||||||
const rows = db
|
const rows = db
|
||||||
.prepare('SELECT group_folder, session_id FROM sessions')
|
.prepare('SELECT group_folder, session_id FROM sessions')
|
||||||
|
|||||||
19
src/index.ts
19
src/index.ts
@@ -33,6 +33,7 @@ import {
|
|||||||
getAllChats,
|
getAllChats,
|
||||||
getAllRegisteredGroups,
|
getAllRegisteredGroups,
|
||||||
getAllSessions,
|
getAllSessions,
|
||||||
|
deleteSession,
|
||||||
getAllTasks,
|
getAllTasks,
|
||||||
getLastBotMessageTimestamp,
|
getLastBotMessageTimestamp,
|
||||||
getMessagesSince,
|
getMessagesSince,
|
||||||
@@ -402,6 +403,24 @@ async function runAgent(
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (output.status === 'error') {
|
if (output.status === 'error') {
|
||||||
|
// Detect stale/corrupt session — clear it so the next retry starts fresh.
|
||||||
|
// The session .jsonl can go missing after a crash mid-write, manual
|
||||||
|
// deletion, or disk-full. The existing backoff in group-queue.ts
|
||||||
|
// handles the retry; we just need to remove the broken session ID.
|
||||||
|
const isStaleSession =
|
||||||
|
sessionId &&
|
||||||
|
output.error &&
|
||||||
|
/no conversation found|ENOENT.*\.jsonl|session.*not found/i.test(output.error);
|
||||||
|
|
||||||
|
if (isStaleSession) {
|
||||||
|
logger.warn(
|
||||||
|
{ group: group.name, staleSessionId: sessionId, error: output.error },
|
||||||
|
'Stale session detected — clearing for next retry',
|
||||||
|
);
|
||||||
|
delete sessions[group.folder];
|
||||||
|
deleteSession(group.folder);
|
||||||
|
}
|
||||||
|
|
||||||
logger.error(
|
logger.error(
|
||||||
{ group: group.name, error: output.error },
|
{ group: group.name, error: output.error },
|
||||||
'Container agent error',
|
'Container agent error',
|
||||||
|
|||||||
Reference in New Issue
Block a user