diff --git a/src/core/task-persistence/apiMessages.ts b/src/core/task-persistence/apiMessages.ts index 0ba9628a5d..d6c17bd9b3 100644 --- a/src/core/task-persistence/apiMessages.ts +++ b/src/core/task-persistence/apiMessages.ts @@ -21,17 +21,49 @@ export async function readApiMessages({ const filePath = path.join(taskDir, GlobalFileNames.apiConversationHistory) if (await fileExistsAtPath(filePath)) { - return JSON.parse(await fs.readFile(filePath, "utf8")) + const fileContent = await fs.readFile(filePath, "utf8") + try { + const parsedData = JSON.parse(fileContent) + if (Array.isArray(parsedData) && parsedData.length === 0) { + console.error( + `[Roo-Debug] readApiMessages: Found API conversation history file, but it's empty (parsed as []). TaskId: ${taskId}, Path: ${filePath}`, + ) + } + return parsedData + } catch (error) { + console.error( + `[Roo-Debug] readApiMessages: Error parsing API conversation history file. TaskId: ${taskId}, Path: ${filePath}, Error: ${error}`, + ) + throw error + } } else { const oldPath = path.join(taskDir, "claude_messages.json") if (await fileExistsAtPath(oldPath)) { - const data = JSON.parse(await fs.readFile(oldPath, "utf8")) - await fs.unlink(oldPath) - return data + const fileContent = await fs.readFile(oldPath, "utf8") + try { + const parsedData = JSON.parse(fileContent) + if (Array.isArray(parsedData) && parsedData.length === 0) { + console.error( + `[Roo-Debug] readApiMessages: Found OLD API conversation history file (claude_messages.json), but it's empty (parsed as []). TaskId: ${taskId}, Path: ${oldPath}`, + ) + } + await fs.unlink(oldPath) + return parsedData + } catch (error) { + console.error( + `[Roo-Debug] readApiMessages: Error parsing OLD API conversation history file (claude_messages.json). TaskId: ${taskId}, Path: ${oldPath}, Error: ${error}`, + ) + // DO NOT unlink oldPath if parsing failed, throw error instead. + throw error + } } } + // If we reach here, neither the new nor the old history file was found. + console.error( + `[Roo-Debug] readApiMessages: API conversation history file not found for taskId: ${taskId}. Expected at: ${filePath}`, + ) return [] }