diff --git a/src/hooks/session-recovery/index.ts b/src/hooks/session-recovery/index.ts index 575b20a..fb37f8a 100644 --- a/src/hooks/session-recovery/index.ts +++ b/src/hooks/session-recovery/index.ts @@ -9,6 +9,7 @@ import { findMessagesWithThinkingOnly, injectTextPart, prependThinkingPart, + readParts, stripThinkingParts, } from "./storage" import type { MessageData } from "./types" @@ -100,7 +101,17 @@ async function recoverToolResultMissing( sessionID: string, failedAssistantMsg: MessageData ): Promise { - const parts = failedAssistantMsg.parts || [] + // Try API parts first, fallback to filesystem if empty + let parts = failedAssistantMsg.parts || [] + if (parts.length === 0 && failedAssistantMsg.info?.id) { + const storedParts = readParts(failedAssistantMsg.info.id) + parts = storedParts.map((p) => ({ + type: p.type === "tool" ? "tool_use" : p.type, + id: "callID" in p ? (p as { callID?: string }).callID : p.id, + name: "tool" in p ? (p as { tool?: string }).tool : undefined, + input: "state" in p ? (p as { state?: { input?: Record } }).state?.input : undefined, + })) + } const toolUseIds = extractToolUseIds(parts) if (toolUseIds.length === 0) {