From fee60d2defa3d8e1ce662df76fd25215d57c7fc6 Mon Sep 17 00:00:00 2001 From: MoerAI Date: Fri, 27 Mar 2026 21:26:09 +0900 Subject: [PATCH] fix(session-recovery): fallback to fetching messageID from session messages (fixes #2046) --- src/hooks/session-recovery/hook.ts | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/src/hooks/session-recovery/hook.ts b/src/hooks/session-recovery/hook.ts index a7a6420f7..833dcf5dd 100644 --- a/src/hooks/session-recovery/hook.ts +++ b/src/hooks/session-recovery/hook.ts @@ -54,9 +54,25 @@ export function createSessionRecoveryHook(ctx: PluginInput, options?: SessionRec if (!errorType) return false const sessionID = info.sessionID - const assistantMsgID = info.id + let assistantMsgID = info.id - if (!sessionID || !assistantMsgID) return false + if (!sessionID) return false + + if (!assistantMsgID) { + try { + const messagesResp = await ctx.client.session.messages({ + path: { id: sessionID }, + query: { directory: ctx.directory }, + }) + const msgs = (messagesResp as { data?: MessageData[] }).data + const lastAssistant = msgs?.findLast((m) => m.info?.role === "assistant" && m.info?.error) + assistantMsgID = lastAssistant?.info?.id + } catch { + log("[session-recovery] Failed to fetch messages for messageID fallback", { sessionID }) + } + } + + if (!assistantMsgID) return false if (processingErrors.has(assistantMsgID)) return false processingErrors.add(assistantMsgID)